diff options
Diffstat (limited to 'src')
112 files changed, 648 insertions, 3099 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/formatutils.cpp b/src/3rdparty/angle/src/libANGLE/formatutils.cpp index 3a4df126c5..f8b9a8bab8 100644 --- a/src/3rdparty/angle/src/libANGLE/formatutils.cpp +++ b/src/3rdparty/angle/src/libANGLE/formatutils.cpp @@ -652,7 +652,7 @@ const Type &GetTypeInfo(GLenum type) } } -const InternalFormat &GetInternalFormatInfo(GLenum internalFormat) +const InternalFormat GetInternalFormatInfo(GLenum internalFormat) { const InternalFormatInfoMap &formatMap = GetInternalFormatMap(); InternalFormatInfoMap::const_iterator iter = formatMap.find(internalFormat); diff --git a/src/3rdparty/angle/src/libANGLE/formatutils.h b/src/3rdparty/angle/src/libANGLE/formatutils.h index 6863e4ddc4..2165e6badd 100644 --- a/src/3rdparty/angle/src/libANGLE/formatutils.h +++ b/src/3rdparty/angle/src/libANGLE/formatutils.h @@ -79,7 +79,7 @@ struct InternalFormat GLint skipRows, GLint skipPixels) const; }; -const InternalFormat &GetInternalFormatInfo(GLenum internalFormat); +const InternalFormat GetInternalFormatInfo(GLenum internalFormat); GLenum GetSizedInternalFormat(GLenum internalFormat, GLenum type); diff --git a/src/3rdparty/angle/src/libANGLE/validationES3.cpp b/src/3rdparty/angle/src/libANGLE/validationES3.cpp index e08e5d261b..2db64ec4cc 100644 --- a/src/3rdparty/angle/src/libANGLE/validationES3.cpp +++ b/src/3rdparty/angle/src/libANGLE/validationES3.cpp @@ -775,20 +775,20 @@ static bool IsValidES3CopyTexImageCombination(GLenum textureInternalFormat, GLen // with the values of the source buffer's [channel sizes]. Table 3.17 is used if the // FRAMEBUFFER_ATTACHMENT_ENCODING is LINEAR and table 3.18 is used if the FRAMEBUFFER_ATTACHMENT_ENCODING // is SRGB. - const InternalFormat *sourceEffectiveFormat = NULL; + InternalFormat sourceEffectiveFormat; if (readBufferHandle != 0) { // Not the default framebuffer, therefore the read buffer must be a user-created texture or renderbuffer if (framebufferInternalFormatInfo.pixelBytes > 0) { - sourceEffectiveFormat = &framebufferInternalFormatInfo; + sourceEffectiveFormat = framebufferInternalFormatInfo; } else { // Renderbuffers cannot be created with an unsized internal format, so this must be an unsized-format // texture. We can use the same table we use when creating textures to get its effective sized format. GLenum sizedInternalFormat = GetSizedInternalFormat(framebufferInternalFormatInfo.format, framebufferInternalFormatInfo.type); - sourceEffectiveFormat = &GetInternalFormatInfo(sizedInternalFormat); + sourceEffectiveFormat = GetInternalFormatInfo(sizedInternalFormat); } } else @@ -800,7 +800,7 @@ static bool IsValidES3CopyTexImageCombination(GLenum textureInternalFormat, GLen GLenum effectiveFormat; if (GetEffectiveInternalFormat(framebufferInternalFormatInfo, textureInternalFormatInfo, &effectiveFormat)) { - sourceEffectiveFormat = &GetInternalFormatInfo(effectiveFormat); + sourceEffectiveFormat = GetInternalFormatInfo(effectiveFormat); } else { @@ -816,7 +816,7 @@ static bool IsValidES3CopyTexImageCombination(GLenum textureInternalFormat, GLen (framebufferInternalFormatInfo.blueBits >= 1 && framebufferInternalFormatInfo.blueBits <= 8) && (framebufferInternalFormatInfo.alphaBits >= 1 && framebufferInternalFormatInfo.alphaBits <= 8)) { - sourceEffectiveFormat = &GetInternalFormatInfo(GL_SRGB8_ALPHA8); + sourceEffectiveFormat = GetInternalFormatInfo(GL_SRGB8_ALPHA8); } else { @@ -834,10 +834,10 @@ static bool IsValidES3CopyTexImageCombination(GLenum textureInternalFormat, GLen { // Section 3.8.5 of the GLES 3.0.3 spec, pg 139, requires that, if the destination format is sized, // component sizes of the source and destination formats must exactly match - if (textureInternalFormatInfo.redBits != sourceEffectiveFormat->redBits || - textureInternalFormatInfo.greenBits != sourceEffectiveFormat->greenBits || - textureInternalFormatInfo.blueBits != sourceEffectiveFormat->blueBits || - textureInternalFormatInfo.alphaBits != sourceEffectiveFormat->alphaBits) + if (textureInternalFormatInfo.redBits != sourceEffectiveFormat.redBits || + textureInternalFormatInfo.greenBits != sourceEffectiveFormat.greenBits || + textureInternalFormatInfo.blueBits != sourceEffectiveFormat.blueBits || + textureInternalFormatInfo.alphaBits != sourceEffectiveFormat.alphaBits) { return false; } diff --git a/src/3rdparty/atspi2/LICENSE b/src/3rdparty/atspi2/LICENSE deleted file mode 100644 index dc5f1b170d..0000000000 --- a/src/3rdparty/atspi2/LICENSE +++ /dev/null @@ -1,482 +0,0 @@ - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Library General Public License, applies to some -specially designated Free Software Foundation software, and to any -other libraries whose authors decide to use it. You can use it for -your libraries, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if -you distribute copies of the library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide -complete object files to the recipients so that they can relink them -with the library, after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright -the library, and (2) offer you this license which gives you legal -permission to copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain -that everyone understands that there is no warranty for this free -library. If the library is modified by someone else and passed on, we -want its recipients to know that what they have is not the original -version, so that any problems introduced by others will not reflect on -the original authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that companies distributing free -software will individually obtain patent licenses, thus in effect -transforming the program into proprietary software. To prevent this, -we have made it clear that any patent must be licensed for everyone's -free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary -GNU General Public License, which was designed for utility programs. This -license, the GNU Library General Public License, applies to certain -designated libraries. This license is quite different from the ordinary -one; be sure to read it in full, and don't assume that anything in it is -the same as in the ordinary license. - - The reason we have a separate public license for some libraries is that -they blur the distinction we usually make between modifying or adding to a -program and simply using it. Linking a program with a library, without -changing the library, is in some sense simply using the library, and is -analogous to running a utility program or application program. However, in -a textual and legal sense, the linked executable is a combined work, a -derivative of the original library, and the ordinary General Public License -treats it as such. - - Because of this blurred distinction, using the ordinary General -Public License for libraries did not effectively promote software -sharing, because most developers did not use the libraries. We -concluded that weaker conditions might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the -users of those programs of all benefit from the free status of the -libraries themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while -preserving your freedom as a user of such programs to change the free -libraries that are incorporated in them. (We have not seen how to achieve -this as regards changes in header files, but we have achieved it as regards -changes in the actual functions of the Library.) The hope is that this -will lead to faster development of free libraries. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, while the latter only -works together with the library. - - Note that it is possible for a library to be covered by the ordinary -General Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which -contains a notice placed by the copyright holder or other authorized -party saying it may be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - d) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the source code distributed need not include anything that is normally -distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Library General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - <one line to give the library's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - <signature of Ty Coon>, 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - diff --git a/src/3rdparty/atspi2/atspi/atspi-constants.h b/src/3rdparty/atspi2/atspi/atspi-constants.h deleted file mode 100644 index 3675bcca1f..0000000000 --- a/src/3rdparty/atspi2/atspi/atspi-constants.h +++ /dev/null @@ -1,1333 +0,0 @@ -/* - * AT-SPI - Assistive Technology Service Provider Interface - * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap) - * - * Copyright 2010, 2011 Novell, Inc. - * Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* TODO: Auto-generate this file again - - - - !\mainpage AT-SPI Interfaces and Subinterfaces - - This is the main documentation page for the - Assistive Technology Service Provider Interface (AT-SPI). - - \section apps Applications and Interface Components - Namespace Accessibility includes service APIs implemented by - participating applications and their user interface components:\n\n - Accessibility::Accessible\n - Accessibility::Application\n - Accessibility::Desktop\n - Accessibility::Collecgtion\n - Accessibility::Component\n - Accessibility::Hypertext\n - Accessibility::Image\n - Accessibility::Selection\n - Accessibility::Table\n - Accessibility::Text\n - Accessibility::EditableText\n - Accessibility::Value - - \section types Enumerated Types - Accessibility defines a number of key enumerated types, including:\n\n - Accessibility::RelationType\n - Accessibility::Role\n - Accessibility::StateType\n - Accessibility::Event\n - Accessibility::EventDetails \n - - \section Registry - Accessibility also includes Accessibility::Registry, - which is the service used by assistive technologies and related - AT-SPI clients to register interest in certain classes of events, - enumerate the currently available desktop and application list, - and to synthesize certain kinds of device events. - - \section listeners Event Listener Interfaces - Accessibility::EventListener\n - Accessibility::DeviceEventListener - - \section helpers Helper Interfaces - - The following interfaces may be implemented by assistive technologies - themselves, in order to export their services in a consistent manner or - in order to interoperate with other applications or desktop services.\n - - Accessibility::LoginHelper : Implemented by adaptive technologies which - need to participate in user-authentication or login activities, and which - therefore may need negotiation with authentication agents or processes.\n - - Accessibility::Selector [NEW]: Implemented by user agents or assistive - technologies which export lists of choices from which the end-user is - expected to make selections. Useful for various types of remote - activation or intercommunication between multiple ATs. - - */ - -#ifndef _ATSPI_CONSTANTS_H_ -#define _ATSPI_CONSTANTS_H_ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * AtspiLocaleType: - * @ATSPI_LOCALE_TYPE_MESSAGES: For localizable natural-language messages. - * @ATSPI_LOCALE_TYPE_COLLATE: For regular expression matching and string - * collation. - * @ATSPI_LOCALE_TYPE_CTYPE: For regular expression matching, character - * classification, conversion, case-sensitive comparison, and wide character - * functions. - * @ATSPI_LOCALE_TYPE_MONETARY: For monetary formatting. - * @ATSPI_LOCALE_TYPE_NUMERIC: For number formatting (such as the decimal - * point and the thousands separator). - * @ATSPI_LOCALE_TYPE_TIME: For time and date formatting. - * - * Used by interfaces #AtspiText and #AtspiDocument, this - * enumeration corresponds to the POSIX 'setlocale' enum values. - * - **/ -typedef enum { - ATSPI_LOCALE_TYPE_MESSAGES, - ATSPI_LOCALE_TYPE_COLLATE, - ATSPI_LOCALE_TYPE_CTYPE, - ATSPI_LOCALE_TYPE_MONETARY, - ATSPI_LOCALE_TYPE_NUMERIC, - ATSPI_LOCALE_TYPE_TIME, -} AtspiLocaleType; - -/** - * ATSPI_LOCALE_TYPE_COUNT: - * - * One higher than the highest valid value of #AtspiLocaleType. - **/ -#define ATSPI_LOCALE_TYPE _COUNT(5+1) - -/** - * AtspiCoordType: - * @ATSPI_COORD_TYPE_SCREEN: Specifies xy coordinates relative to the screen. - * @ATSPI_COORD_TYPE_WINDOW: Specifies xy coordinates relative to the widget's - * top-level window. - * - * Enumeration used by #AtspiComponent, #AtspiImage, and #AtspiText interfaces - * to specify whether coordinates are relative to the window or the screen. - * - **/ -typedef enum { - ATSPI_COORD_TYPE_SCREEN, - ATSPI_COORD_TYPE_WINDOW, -} AtspiCoordType; - -/** - * ATSPI_COORD_TYPE_COUNT: - * - * One higher than the highest valid value of #AtspiCoordType. - **/ -#define ATSPI_COORD_TYPE_COUNT (1+1) - -/** - * AtspiCollectionSortOrder: - * @ATSPI_Collection_SORT_ORDER_INVALID: - * @ATSPI_Collection_SORT_ORDER_CANONICAL: - * @ATSPI_Collection_SORT_ORDER_FLOW: - * @ATSPI_Collection_SORT_ORDER_TAB: - * @ATSPI_Collection_SORT_ORDER_REVERSE_CANONICAL: - * @ATSPI_Collection_SORT_ORDER_REVERSE_FLOW: - * @ATSPI_Collection_SORT_ORDER_REVERSE_TAB: - * @ATSPI_Collection_SORT_ORDER_LAST_DEFINED: - * - * Enumeration used by interface #AtspiCollection to specify - * the way #AtspiAccesible objects should be sorted. - * - **/ -typedef enum { - ATSPI_Collection_SORT_ORDER_INVALID, - ATSPI_Collection_SORT_ORDER_CANONICAL, - ATSPI_Collection_SORT_ORDER_FLOW, - ATSPI_Collection_SORT_ORDER_TAB, - ATSPI_Collection_SORT_ORDER_REVERSE_CANONICAL, - ATSPI_Collection_SORT_ORDER_REVERSE_FLOW, - ATSPI_Collection_SORT_ORDER_REVERSE_TAB, - ATSPI_Collection_SORT_ORDER_LAST_DEFINED, -} AtspiCollectionSortOrder; - -/** - * ATSPI_SORTORDER_COUNT: - * - * One higher than the highest valid value of #AtspiCollectionSortOrder. - */ -#define ATSPI_SORTORDER_COUNT (7+1) - -/** - * AtspiCollectionMatchType: - * @ATSPI_Collection_MATCH_INVALID: Indicates an error condition or - * uninitialized value. - * @ATSPI_Collection_MATCH_ALL: #TRUE if all of the criteria are met. - * @ATSPI_Collection_MATCH_ANY: #TRUE if any of the criteria are met. - * @ATSPI_Collection_MATCH_NONE: #TRUE if none of the criteria are met. - * @ATSPI_Collection_MATCH_EMPTY: Same as @ATSPI_Collection_MATCH_ALL if - * the criteria is non-empty; for empty criteria this rule requires returned - * value to also have empty set. - * @ATSPI_Collection_MATCH_LAST_DEFINED: Used only to determine the end of the - * enumeration. - * - * Enumeration used by #AtspiMatchRule to specify - * how to interpret #AtspiAccessible objects. - * - **/ -typedef enum { - ATSPI_Collection_MATCH_INVALID, - ATSPI_Collection_MATCH_ALL, - ATSPI_Collection_MATCH_ANY, - ATSPI_Collection_MATCH_NONE, - ATSPI_Collection_MATCH_EMPTY, - ATSPI_Collection_MATCH_LAST_DEFINED, -} AtspiCollectionMatchType; - -/** - * ATSPI_MATCHTYPE_COUNT: - * - * One higher than the highest valid value of #AtspiCollectionMatchType. - **/ -#define ATSPI_MATCHTYPES_COUNT (5+1) - -/** - * AtspiCollectionTreeTraversalType: - * @ATSPI_Collection_TREE_RESTRICT_CHILDREN: - * @ATSPI_Collection_TREE_RESTRICT_SIBLING: - * @ATSPI_Collection_TREE_INORDER: - * @ATSPI_Collection_TREE_LAST_DEFINED: - * - * Enumeration used by interface #AtspiCollection to specify - * restrictions on #AtspiAccesible objects to be traversed. - * - **/ -typedef enum { - ATSPI_Collection_TREE_RESTRICT_CHILDREN, - ATSPI_Collection_TREE_RESTRICT_SIBLING, - ATSPI_Collection_TREE_INORDER, - ATSPI_Collection_TREE_LAST_DEFINED, -} AtspiCollectionTreeTraversalType; - -/** - * ATSPI_TREETRAVERSALTYPE_COUNT: - * - * One higher than the highest valid value of - * #AtspiCollection_TreeTraversalType. - */ -#define ATSPI_TREETRAVERSALTYPE _COUNT(3+1) - -/** - * AtspiComponentLayer: - * @ATSPI_LAYER_INVALID: Indicates an error condition or uninitialized value. - * @ATSPI_LAYER_BACKGROUND: The bottom-most layer, over which everything else - * is painted. The 'desktop background' is generally in this layer. - * @ATSPI_LAYER_CANVAS: The 'background' layer for most content renderers and - * UI #AtspiComponent containers. - * @ATSPI_LAYER_WIDGET: The layer in which the majority of ordinary - * 'foreground' widgets reside. - * @ATSPI_LAYER_MDI: A special layer between @ATSPI_LAYER_CANVAS and - * @ATSPI_LAYER_WIDGET, in which the 'pseudo windows' (e.g. the MDI frames) - * reside. See #atspi_component_get_mdi_z_order. - * @ATSPI_LAYER_POPUP: A layer for popup window content, above - * @ATSPI_LAYER_WIDGET. - * @ATSPI_LAYER_OVERLAY: The topmost layer. - * @ATSPI_LAYER_WINDOW: The layer in which a toplevel window background usually - * resides. - * @ATSPI_LAYER_LAST_DEFINED: Used only to determine the end of the - * enumeration. - * - * The #AtspiComponentLayer of an #AtspiComponent instance indicates its - * relative stacking order with respect to the onscreen visual representation - * of the UI. #AtspiComponentLayer, in combination with #AtspiComponent bounds - * information, can be used to compute the visibility of all or part of a - * component. This is important in programmatic determination of - * region-of-interest for magnification, and in - * flat screen review models of the screen, as well as - * for other uses. Objects residing in two of the #AtspiComponentLayer - * categories support further z-ordering information, with respect to their - * peers in the same layer: namely, @ATSPI_LAYER_WINDOW and - * @ATSPI_LAYER_MDI. Relative stacking order for other objects within the - * same layer is not available; the recommended heuristic is - * first child paints first. In other words, assume that the - * first siblings in the child list are subject to being overpainted by later - * siblings if their bounds intersect. The order of layers, from bottom to top, - * is: @ATSPI_LAYER_BACKGROUND, @ATSPI_LAYER_WINDOW, @ATSPI_LAYER_MDI, - * @ATSPI_LAYER_CANVAS, @ATSPI_LAYER_WIDGET, @ATSPI_LAYER_POPUP, and - * @ATSPI_LAYER_OVERLAY. - * - */ -typedef enum { - ATSPI_LAYER_INVALID, - ATSPI_LAYER_BACKGROUND, - ATSPI_LAYER_CANVAS, - ATSPI_LAYER_WIDGET, - ATSPI_LAYER_MDI, - ATSPI_LAYER_POPUP, - ATSPI_LAYER_OVERLAY, - ATSPI_LAYER_WINDOW, - ATSPI_LAYER_LAST_DEFINED, -} AtspiComponentLayer; - -/** - * ATSPI_COMPONENTLAYER_COUNT: - * - * One higher than the highest valid value of #AtspiComponentLayer. - **/ -#define ATSPI_COMPONENTLAYER_COUNT (8+1) - -/** - * AtspiTextBoundaryType: - * @ATSPI_TEXT_BOUNDARY_CHAR: An #AtspiText instance is bounded by this - * character only. Start and end offsets differ by one, by definition, - * for this value. - * @ATSPI_TEXT_BOUNDARY_WORD_START: Boundary condition is start of a word; i.e. - * range is from start of one word to the start of another word. - * @ATSPI_TEXT_BOUNDARY_WORD_END: Boundary condition is the end of a word; i.e. - * range is from the end of one word to the end of another. Some locales - * may not distinguish between words and characters or glyphs. In particular, - * those locales which use wholly or partially ideographic character sets. - * In these cases, characters may be returned in lieu of multi-character - * substrings. - * @ATSPI_TEXT_BOUNDARY_SENTENCE_START: Boundary condition is start of a - * sentence, as determined by the application. Some locales or - * character sets may not include explicit sentence delimiters, so this - * boundary type can not always be honored. Some locales will return lines - * of text instead of grammatical sentences. - * @ATSPI_TEXT_BOUNDARY_SENTENCE_END: Boundary condition is end of a sentence, - * as determined by the application, including the sentence-delimiting - * character, for instance '.' Some locales or character sets may not - * include explicit sentence delimiters, so this boundary type can not - * always be honored. Some locales will return lines of text instead of - * grammatical sentences. - * @ATSPI_TEXT_BOUNDARY_LINE_START: Boundary condition is the start of a line; - * i.e. range is from start of one line to the start of another. This - * generally means that an end-of-line character will appear at the end of - * the range. - * @ATSPI_TEXT_BOUNDARY_LINE_END: Boundary condition is the end of a line; i.e. - * range is from start of one line to the start of another. This generally - * means that an end-of-line character will be the first character of the - * range. - * - * Specifies the boundary conditions determining a run of text as returned from - * #atspi_text_get_text_at_offset, #atspi_text_get_text_after_offset, and - * #atspi_text_get_text_before_offset. - * - * This enumerationis deprecated since 2.9.90 and should not be used. Use - * AtspiTextGranularity with #atspi_text_get_string_at_offset instead. - **/ -typedef enum { - ATSPI_TEXT_BOUNDARY_CHAR, - ATSPI_TEXT_BOUNDARY_WORD_START, - ATSPI_TEXT_BOUNDARY_WORD_END, - ATSPI_TEXT_BOUNDARY_SENTENCE_START, - ATSPI_TEXT_BOUNDARY_SENTENCE_END, - ATSPI_TEXT_BOUNDARY_LINE_START, - ATSPI_TEXT_BOUNDARY_LINE_END, -} AtspiTextBoundaryType; - -/** - *AtspiTextGranularity: - *@ATSPI_TEXT_GRANULARITY_CHAR: Granularity is defined by the boundaries between characters - * (including non-printing characters) - *@ATSPI_TEXT_GRANULARITY_WORD: Granularity is defined by the boundaries of a word, - * starting at the beginning of the current word and finishing at the beginning of - * the following one, if present. - *@ATSPI_TEXT_GRANULARITY_SENTENCE: Granularity is defined by the boundaries of a sentence, - * starting at the beginning of the current sentence and finishing at the beginning of - * the following one, if present. - *@ATSPI_TEXT_GRANULARITY_LINE: Granularity is defined by the boundaries of a line, - * starting at the beginning of the current line and finishing at the beginning of - * the following one, if present. - *@ATSPI_TEXT_GRANULARITY_PARAGRAPH: Granularity is defined by the boundaries of a paragraph, - * starting at the beginning of the current paragraph and finishing at the beginning of - * the following one, if present. - * - * Text granularity types used for specifying the granularity of the region of - * text we are interested in. - **/ -typedef enum { - ATSPI_TEXT_GRANULARITY_CHAR, - ATSPI_TEXT_GRANULARITY_WORD, - ATSPI_TEXT_GRANULARITY_SENTENCE, - ATSPI_TEXT_GRANULARITY_LINE, - ATSPI_TEXT_GRANULARITY_PARAGRAPH -} AtspiTextGranularity; - -/** - * ATSPI_TEXT_BOUNDARY_TYPE_COUNT: - * - * One higher than the highest valid value of #AtspiTextBoundaryType. - */ -#define ATSPI_TEXT_BOUNDARY_TYPE_COUNT (6+1) - -/** - * AtspiTextClipType: - * @ATSPI_TEXT_CLIP_NONE: No characters/glyphs are omitted. - * @ATSPI_TEXT_CLIP_MIN: Characters/glyphs clipped by the minimum coordinate - * are omitted. - * @ATSPI_TEXT_CLIP_MAX: Characters/glyphs which intersect the maximum - * coordinate are omitted. - * @ATSPI_TEXT_CLIP_BOTH: Only glyphs falling entirely within the region - * bounded by min and max are retained. - * - * Enumeration used by interface #AtspiText to indicate - * how to treat characters intersecting bounding boxes. - * - **/ -typedef enum { - ATSPI_TEXT_CLIP_NONE, - ATSPI_TEXT_CLIP_MIN, - ATSPI_TEXT_CLIP_MAX, - ATSPI_TEXT_CLIP_BOTH, -} AtspiTextClipType; - -/** - * ATSPI_TEXT_CLIP_TYPE_COUNT: - * - * One higher than the highest valid value of #AtspiTextClipType. - */ -#define ATSPI_TEXT_CLIP_TYPE_COUNT (3+1) - -/** - * AtspiStateType: - * @ATSPI_STATE_INVALID: Indicates an invalid state - probably an error - * condition. - * @ATSPI_STATE_ACTIVE: Indicates a window is currently the active window, or - * is an active subelement within a container or table. - * @ATSPI_STATE_ARMED: Indicates that the object is armed. - * @ATSPI_STATE_BUSY: Indicates the current object is busy, i.e. onscreen - * representation is in the process of changing, or the object is - * temporarily unavailable for interaction due to activity already in progress. - * @ATSPI_STATE_CHECKED: Indicates this object is currently checked. - * @ATSPI_STATE_COLLAPSED: Indicates this object is collapsed. - * @ATSPI_STATE_DEFUNCT: Indicates that this object no longer has a valid - * backing widget (for instance, if its peer object has been destroyed). - * @ATSPI_STATE_EDITABLE: Indicates the user can change the contents of this - * object. - * @ATSPI_STATE_ENABLED: Indicates that this object is enabled, i.e. that it - * currently reflects some application state. Objects that are "greyed out" - * may lack this state, and may lack the @ATSPI_STATE_SENSITIVE if direct - * user interaction cannot cause them to acquire @ATSPI_STATE_ENABLED. - * See @ATSPI_STATE_SENSITIVE. - * @ATSPI_STATE_EXPANDABLE: Indicates this object allows progressive - * disclosure of its children. - * @ATSPI_STATE_EXPANDED: Indicates this object is expanded. - * @ATSPI_STATE_FOCUSABLE: Indicates this object can accept keyboard focus, - * which means all events resulting from typing on the keyboard will - * normally be passed to it when it has focus. - * @ATSPI_STATE_FOCUSED: Indicates this object currently has the keyboard - * focus. - * @ATSPI_STATE_HAS_TOOLTIP: Indicates that the object has an associated - * tooltip. - * @ATSPI_STATE_HORIZONTAL: Indicates the orientation of this object is - * horizontal. - * @ATSPI_STATE_ICONIFIED: Indicates this object is minimized and is - * represented only by an icon. - * @ATSPI_STATE_MODAL: Indicates something must be done with this object - * before the user can interact with an object in a different window. - * @ATSPI_STATE_MULTI_LINE: Indicates this (text) object can contain multiple - * lines of text. - * @ATSPI_STATE_MULTISELECTABLE: Indicates this object allows more than one of - * its children to be selected at the same time, or in the case of text - * objects, that the object supports non-contiguous text selections. - * @ATSPI_STATE_OPAQUE: Indicates this object paints every pixel within its - * rectangular region. It also indicates an alpha value of unity, if it - * supports alpha blending. - * @ATSPI_STATE_PRESSED: Indicates this object is currently pressed. - * @ATSPI_STATE_RESIZABLE: Indicates the size of this object's size is not - * fixed. - * @ATSPI_STATE_SELECTABLE: Indicates this object is the child of an object - * that allows its children to be selected and that this child is one of - * those children that can be selected. - * @ATSPI_STATE_SELECTED: Indicates this object is the child of an object that - * allows its children to be selected and that this child is one of those - * children that has been selected. - * @ATSPI_STATE_SENSITIVE: Indicates this object is sensitive, e.g. to user - * interaction. @ATSPI_STATE_SENSITIVE usually accompanies. - * @ATSPI_STATE_ENABLED for user-actionable controls, but may be found in the - * absence of @ATSPI_STATE_ENABLED if the current visible state of the control - * is "disconnected" from the application state. In such cases, direct user - * interaction can often result in the object gaining @ATSPI_STATE_SENSITIVE, - * for instance if a user makes an explicit selection using an object whose - * current state is ambiguous or undefined. See @ATSPI_STATE_ENABLED, - * @ATSPI_STATE_INDETERMINATE. - * @ATSPI_STATE_SHOWING: Indicates this object, the object's parent, the - * object's parent's parent, and so on, are all 'shown' to the end-user, - * i.e. subject to "exposure" if blocking or obscuring objects do not - * interpose between this object and the top of the window stack. - * @ATSPI_STATE_SINGLE_LINE: Indicates this (text) object can contain only a - * single line of text. - * @ATSPI_STATE_STALE: Indicates that the information returned for this object - * may no longer be synchronized with the application state. This can occur - * if the object has @ATSPI_STATE_TRANSIENT, and can also occur towards the - * end of the object peer's lifecycle. - * @ATSPI_STATE_TRANSIENT: Indicates this object is transient. - * @ATSPI_STATE_VERTICAL: Indicates the orientation of this object is vertical; - * for example this state may appear on such objects as scrollbars, text - * objects (with vertical text flow), separators, etc. - * @ATSPI_STATE_VISIBLE: Indicates this object is visible, e.g. has been - * explicitly marked for exposure to the user. @ATSPI_STATE_VISIBLE is no - * guarantee that the object is actually unobscured on the screen, only that - * it is 'potentially' visible, barring obstruction, being scrolled or clipped - * out of the field of view, or having an ancestor container that has not yet - * made visible. A widget is potentially onscreen if it has both - * @ATSPI_STATE_VISIBLE and @ATSPI_STATE_SHOWING. The absence of - * @ATSPI_STATE_VISIBLE and @ATSPI_STATE_SHOWING is - * semantically equivalent to saying that an object is 'hidden'. - * @ATSPI_STATE_MANAGES_DESCENDANTS: Indicates that "active-descendant-changed" - * event is sent when children become 'active' (i.e. are selected or - * navigated to onscreen). Used to prevent need to enumerate all children - * in very large containers, like tables. The presence of - * @ATSPI_STATE_MANAGES_DESCENDANTS is an indication to the client that the - * children should not, and need not, be enumerated by the client. - * Objects implementing this state are expected to provide relevant state - * notifications to listening clients, for instance notifications of - * visibility changes and activation of their contained child objects, without - * the client having previously requested references to those children. - * @ATSPI_STATE_INDETERMINATE: Indicates that a check box or other boolean - * indicator is in a state other than checked or not checked. This - * usually means that the boolean value reflected or controlled by the - * object does not apply consistently to the entire current context. - * For example, a checkbox for the "Bold" attribute of text may have - * @ATSPI_STATE_INDETERMINATE if the currently selected text contains a mixture - * of weight attributes. In many cases interacting with a - * @ATSPI_STATE_INDETERMINATE object will cause the context's corresponding - * boolean attribute to be homogenized, whereupon the object will lose - * @ATSPI_STATE_INDETERMINATE and a corresponding state-changed event will be - * fired. - * @ATSPI_STATE_REQUIRED: Indicates that user interaction with this object is - * 'required' from the user, for instance before completing the - * processing of a form. - * @ATSPI_STATE_TRUNCATED: Indicates that an object's onscreen content - * is truncated, e.g. a text value in a spreadsheet cell. - * @ATSPI_STATE_ANIMATED: Indicates this object's visual representation is - * dynamic, not static. This state may be applied to an object during an - * animated 'effect' and be removed from the object once its visual - * representation becomes static. Some applications, notably content viewers, - * may not be able to detect all kinds of animated content. Therefore the - * absence of this state should not be taken as - * definitive evidence that the object's visual representation is - * static; this state is advisory. - * @ATSPI_STATE_INVALID_ENTRY: This object has indicated an error condition - * due to failure of input validation. For instance, a form control may - * acquire this state in response to invalid or malformed user input. - * @ATSPI_STATE_SUPPORTS_AUTOCOMPLETION: This state indicates that the object - * in question implements some form of typeahead or - * pre-selection behavior whereby entering the first character of one or more - * sub-elements causes those elements to scroll into view or become - * selected. Subsequent character input may narrow the selection further as - * long as one or more sub-elements match the string. This state is normally - * only useful and encountered on objects that implement #AtspiSelection. - * In some cases the typeahead behavior may result in full or partial - * completion of the data in the input field, in which case - * these input events may trigger text-changed events from the source. - * @ATSPI_STATE_SELECTABLE_TEXT: This state indicates that the object in - * question supports text selection. It should only be exposed on objects - * which implement the #AtspiText interface, in order to distinguish this state - * from @ATSPI_STATE_SELECTABLE, which infers that the object in question is a - * selectable child of an object which implements #AtspiSelection. While - * similar, text selection and subelement selection are distinct operations. - * @ATSPI_STATE_IS_DEFAULT: This state indicates that the object in question is - * the 'default' interaction object in a dialog, i.e. the one that gets - * activated if the user presses "Enter" when the dialog is initially - * posted. - * @ATSPI_STATE_VISITED: This state indicates that the object (typically a - * hyperlink) has already been activated or invoked, with the result that - * some backing data has been downloaded or rendered. - *@ATSPI_STATE_CHECKABLE: Indicates this object has the potential to - * be checked, such as a checkbox or toggle-able table cell. @Since: - * 2.12 - *@ATSPI_STATE_HAS_POPUP: Indicates that the object has a popup - * context menu or sub-level menu which may or may not be - * showing. This means that activation renders conditional content. - * Note that ordinary tooltips are not considered popups in this - * context. @Since: 2.12 - * @ATSPI_STATE_LAST_DEFINED: This value of the enumeration should not be used - * as a parameter, it indicates the number of items in the #AtspiStateType - * enumeration. - * - * - * Enumeration used by various interfaces indicating every possible state - * an #AtspiAccesible object can assume. - * - **/ -typedef enum { - ATSPI_STATE_INVALID, - ATSPI_STATE_ACTIVE, - ATSPI_STATE_ARMED, - ATSPI_STATE_BUSY, - ATSPI_STATE_CHECKED, - ATSPI_STATE_COLLAPSED, - ATSPI_STATE_DEFUNCT, - ATSPI_STATE_EDITABLE, - ATSPI_STATE_ENABLED, - ATSPI_STATE_EXPANDABLE, - ATSPI_STATE_EXPANDED, - ATSPI_STATE_FOCUSABLE, - ATSPI_STATE_FOCUSED, - ATSPI_STATE_HAS_TOOLTIP, - ATSPI_STATE_HORIZONTAL, - ATSPI_STATE_ICONIFIED, - ATSPI_STATE_MODAL, - ATSPI_STATE_MULTI_LINE, - ATSPI_STATE_MULTISELECTABLE, - ATSPI_STATE_OPAQUE, - ATSPI_STATE_PRESSED, - ATSPI_STATE_RESIZABLE, - ATSPI_STATE_SELECTABLE, - ATSPI_STATE_SELECTED, - ATSPI_STATE_SENSITIVE, - ATSPI_STATE_SHOWING, - ATSPI_STATE_SINGLE_LINE, - ATSPI_STATE_STALE, - ATSPI_STATE_TRANSIENT, - ATSPI_STATE_VERTICAL, - ATSPI_STATE_VISIBLE, - ATSPI_STATE_MANAGES_DESCENDANTS, - ATSPI_STATE_INDETERMINATE, - ATSPI_STATE_REQUIRED, - ATSPI_STATE_TRUNCATED, - ATSPI_STATE_ANIMATED, - ATSPI_STATE_INVALID_ENTRY, - ATSPI_STATE_SUPPORTS_AUTOCOMPLETION, - ATSPI_STATE_SELECTABLE_TEXT, - ATSPI_STATE_IS_DEFAULT, - ATSPI_STATE_VISITED, - ATSPI_STATE_CHECKABLE, - ATSPI_STATE_HAS_POPUP, - ATSPI_STATE_LAST_DEFINED, -} AtspiStateType; - -/** - * ATSPI_STATETYPE_COUNT: - * - * One higher than the highest valid value of #AtspiStateType. - **/ -#define ATSPI_STATETYPE_COUNT (41+1) - -/** - * AtspiKeyEventType: - * @ATSPI_KEY_PRESSED: - * @ATSPI_KEY_RELEASED: - * - * Deprecated. Should not be used. - * - **/ -typedef enum { - ATSPI_KEY_PRESSED, - ATSPI_KEY_RELEASED, -} AtspiKeyEventType; - -/** - * ATSPI_KEYEVENTTYPE_COUNT: - * - * One higher than the highest valid value of #AtspiKeyEventType. - **/ -#define ATSPI_KEYEVENTTYPE_COUNT (1+1) - -/** - * AtspiEventType: - * @ATSPI_KEY_PRESSED_EVENT: Indicates that a key on a keyboard device was - * pressed. - * @ATSPI_KEY_RELEASED_EVENT: Indicates that a key on a keyboard device was - * released. - * @ATSPI_BUTTON_PRESSED_EVENT: Indicates that a button on a non-keyboard - * human interface device (HID) was pressed. - * @ATSPI_BUTTON_RELEASED_EVENT: Indicates that a button on a non-keyboard - * human interface device (HID) was released. - * - * Enumeration used to specify the event types of interest to an - * #AtspiEventListener, or - * to identify the type of an event for which notification has been sent. - * - **/ -typedef enum { - ATSPI_KEY_PRESSED_EVENT, - ATSPI_KEY_RELEASED_EVENT, - ATSPI_BUTTON_PRESSED_EVENT, - ATSPI_BUTTON_RELEASED_EVENT, -} AtspiEventType; - -/** - * ATSPI_EVENTTYPE_COUNT: - * - * One higher than the highest valid value of #AtspiEventType. - */ -#define ATSPI_EVENTTYPE_COUNT (3+1) - -/** - * AtspiKeySynthType: - * @ATSPI_KEY_PRESS: Emulates the pressing of a hardware keyboard key. - * @ATSPI_KEY_RELEASE: Emulates the release of a hardware keyboard key. - * @ATSPI_KEY_PRESSRELEASE: Emulates the pressing and immediate releasing - * of a hardware keyboard key. - * @ATSPI_KEY_SYM: A symbolic key event is generated, without specifying a - * hardware key. Note: if the keysym is not present in the current keyboard - * map, the #AtspiDeviceEventController instance has a limited ability to - * generate such keysyms on-the-fly. Reliability of GenerateKeyboardEvent - * calls using out-of-keymap keysyms will vary from system to system, and on - * the number of different out-of-keymap keysyms being generated in quick - * succession. - * In practice this is rarely significant, since the keysyms of interest to - * AT clients and keyboard emulators are usually part of the current keymap, - * i.e., present on the system keyboard for the current locale (even if a - * physical hardware keyboard is not connected). - * @ATSPI_KEY_STRING: A string is converted to its equivalent keyboard events - * and emitted. If the string consists of complex characters or composed - * characters which are not in the current keymap, string emission is - * subject to the out-of-keymap limitations described for - * @ATSPI_KEY_SYM. In practice this limitation primarily effects - * Chinese and Japanese locales. - * - * Enumeration used when synthesizing keyboard input via - * #atspi_generate_keyboard_event. - * - **/ -typedef enum { - ATSPI_KEY_PRESS, - ATSPI_KEY_RELEASE, - ATSPI_KEY_PRESSRELEASE, - ATSPI_KEY_SYM, - ATSPI_KEY_STRING, -} AtspiKeySynthType; - -/** - * ATSPI_KEYSYNTHTYPE_COUNT: - * - * One higher than the highest valid value of #AtspiKeySynthType. - **/ -#define ATSPI_KEYSYNTHTYPE_COUNT (4+1) - -/** - * AtspiModifierType: - * @ATSPI_MODIFIER_SHIFT: The left or right 'Shift' key. - * @ATSPI_MODIFIER_SHIFTLOCK: The ShiftLock or CapsLock key. - * @ATSPI_MODIFIER_CONTROL: 'Control'/'Ctrl'. - * @ATSPI_MODIFIER_ALT: The Alt key (as opposed to AltGr). - * @ATSPI_MODIFIER_META: Depending on the platform, this may map to 'Window', - * 'Function', 'Meta', 'Menu', or 'NumLock'. Such 'Meta keys' will - * map to one of META, META2, META3. On X Windows platforms these META - * values map to the modifier masks Mod1Mask, Mod2Mask, Mod3Mask, e.g. an - * event having @ATSPI_MODIFIER_META2 means that the 'Mod2Mask' bit - * is set in the corresponding XEvent. - * @ATSPI_MODIFIER_META2: See @ATSPI_MODIFIER_META. - * @ATSPI_MODIFIER_META3: See @ATSPI_MODIFIER_META. - * @ATSPI_MODIFIER_NUMLOCK: A symbolic meta key name that is mapped by AT-SPI - * to the appropriate META value, for the convenience of the client. - * - * - * - **/ -typedef enum { - ATSPI_MODIFIER_SHIFT, - ATSPI_MODIFIER_SHIFTLOCK, - ATSPI_MODIFIER_CONTROL, - ATSPI_MODIFIER_ALT, - ATSPI_MODIFIER_META, - ATSPI_MODIFIER_META2, - ATSPI_MODIFIER_META3, - ATSPI_MODIFIER_NUMLOCK = 14, -} AtspiModifierType; - -/** - * ATSPI_MODIFIERTYPE_COUNT: - * - * One higher than the highest valid value of #AtspiModifierType. - **/ -#define ATSPI_MODIFIERTYPE_COUNT (7+1) - -/** - * AtspiRelationType: - * @ATSPI_RELATION_NULL: Not a meaningful relationship; clients should not - * normally encounter this #AtspiRelationType value. - * @ATSPI_RELATION_LABEL_FOR: Object is a label for one or more other objects. - * @ATSPI_RELATION_LABELLED_BY: Object is labelled by one or more other - * objects. - * @ATSPI_RELATION_CONTROLLER_FOR: Object is an interactive object which - * modifies the state, onscreen location, or other attributes of one or more - * target objects. - * @ATSPI_RELATION_CONTROLLED_BY: Object state, position, etc. is - * modified/controlled by user interaction with one or more other objects. - * For instance a viewport or scroll pane may be @ATSPI_RELATION_CONTROLLED_BY - * scrollbars. - * @ATSPI_RELATION_MEMBER_OF: Object has a grouping relationship (e.g. 'same - * group as') to one or more other objects. - * @ATSPI_RELATION_TOOLTIP_FOR: Object is a tooltip associated with another - * object. - * @ATSPI_RELATION_NODE_CHILD_OF: Object is a child of the target. - * @ATSPI_RELATION_NODE_PARENT_OF: Object is a parent of the target. - * @ATSPI_RELATION_EXTENDED: Used to indicate that a relationship exists, but - * its type is not specified in the enumeration. - * @ATSPI_RELATION_FLOWS_TO: Object renders content which flows logically to - * another object. For instance, text in a paragraph may flow to another - * object which is not the 'next sibling' in the accessibility hierarchy. - * @ATSPI_RELATION_FLOWS_FROM: Reciprocal of @ATSPI_RELATION_FLOWS_TO. - * @ATSPI_RELATION_SUBWINDOW_OF: Object is visually and semantically considered - * a subwindow of another object, even though it is not the object's child. - * Useful when dealing with embedded applications and other cases where the - * widget hierarchy does not map cleanly to the onscreen presentation. - * @ATSPI_RELATION_EMBEDS: Similar to @ATSPI_RELATION_SUBWINDOW_OF, but - * specifically used for cross-process embedding. - * @ATSPI_RELATION_EMBEDDED_BY: Reciprocal of @ATSPI_RELATION_EMBEDS. Used to - * denote content rendered by embedded renderers that live in a separate process - * space from the embedding context. - * @ATSPI_RELATION_POPUP_FOR: Denotes that the object is a transient window or - * frame associated with another onscreen object. Similar to @ATSPI_TOOLTIP_FOR, - * but more general. Useful for windows which are technically toplevels - * but which, for one or more reasons, do not explicitly cause their - * associated window to lose 'window focus'. Creation of an @ATSPI_ROLE_WINDOW - * object with the @ATSPI_RELATION_POPUP_FOR relation usually requires - * some presentation action on the part - * of assistive technology clients, even though the previous toplevel - * @ATSPI_ROLE_FRAME object may still be the active window. - * @ATSPI_RELATION_PARENT_WINDOW_OF: This is the reciprocal relation to - * @ATSPI_RELATION_POPUP_FOR. - * @ATSPI_RELATION_DESCRIPTION_FOR: Indicates that an object provides - * descriptive information about another object; more verbose than - * @ATSPI_RELATION_LABEL_FOR. - * @ATSPI_RELATION_DESCRIBED_BY: Indicates that another object provides - * descriptive information about this object; more verbose than - * @ATSPI_RELATION_LABELLED_BY. - * @ATSPI_RELATION_LAST_DEFINED: Do not use as a parameter value, used to - * determine the size of the enumeration. - * - * #AtspiRelationType specifies a relationship between objects - * (possibly one-to-many - * or many-to-one) outside of the normal parent/child hierarchical - * relationship. It allows better semantic identification of how objects - * are associated with one another. For instance the - * @ATSPI_RELATION_LABELLED_BY - * relationship may be used to identify labelling information that should - * accompany the accessible name property when presenting an object's content or - * identity to the end user. Similarly, - * @ATSPI_RELATION_CONTROLLER_FOR can be used - * to further specify the context in which a valuator is useful, and/or the - * other UI components which are directly effected by user interactions with - * the valuator. Common examples include association of scrollbars with the - * viewport or panel which they control. - * - * - * Enumeration used to specify - * the type of relation encapsulated in an #AtspiRelation object. - * - **/ -typedef enum { - ATSPI_RELATION_NULL, - ATSPI_RELATION_LABEL_FOR, - ATSPI_RELATION_LABELLED_BY, - ATSPI_RELATION_CONTROLLER_FOR, - ATSPI_RELATION_CONTROLLED_BY, - ATSPI_RELATION_MEMBER_OF, - ATSPI_RELATION_TOOLTIP_FOR, - ATSPI_RELATION_NODE_CHILD_OF, - ATSPI_RELATION_NODE_PARENT_OF, - ATSPI_RELATION_EXTENDED, - ATSPI_RELATION_FLOWS_TO, - ATSPI_RELATION_FLOWS_FROM, - ATSPI_RELATION_SUBWINDOW_OF, - ATSPI_RELATION_EMBEDS, - ATSPI_RELATION_EMBEDDED_BY, - ATSPI_RELATION_POPUP_FOR, - ATSPI_RELATION_PARENT_WINDOW_OF, - ATSPI_RELATION_DESCRIPTION_FOR, - ATSPI_RELATION_DESCRIBED_BY, - ATSPI_RELATION_LAST_DEFINED, -} AtspiRelationType; - -/** - * ATSPI_RELATIONTYPE_COUNT: - * - * One higher than the highest valid value of #AtspiRelationType. - **/ -#define ATSPI_RELATIONTYPE_COUNT (19+1) - -/** - * AtspiRole: - * @ATSPI_ROLE_INVALID: A role indicating an error condition, such as - * uninitialized Role data. - * @ATSPI_ROLE_ACCELERATOR_LABEL: Object is a label indicating the keyboard - * accelerators for the parent. - * @ATSPI_ROLE_ALERT: Object is used to alert the user about something. - * @ATSPI_ROLE_ANIMATION: Object contains a dynamic or moving image of some - * kind. - * @ATSPI_ROLE_ARROW: Object is a 2d directional indicator. - * @ATSPI_ROLE_CALENDAR: Object contains one or more dates, usually arranged - * into a 2d list. - * @ATSPI_ROLE_CANVAS: Object that can be drawn into and is used to trap - * events. - * @ATSPI_ROLE_CHECK_BOX: A choice that can be checked or unchecked and - * provides a separate indicator for the current state. - * @ATSPI_ROLE_CHECK_MENU_ITEM: A menu item that behaves like a check box. See - * @ATSPI_ROLE_CHECK_BOX. - * @ATSPI_ROLE_COLOR_CHOOSER: A specialized dialog that lets the user choose a - * color. - * @ATSPI_ROLE_COLUMN_HEADER: The header for a column of data. - * @ATSPI_ROLE_COMBO_BOX: A list of choices the user can select from. - * @ATSPI_ROLE_DATE_EDITOR: An object which allows entry of a date. - * @ATSPI_ROLE_DESKTOP_ICON: An inconifed internal frame within a DESKTOP_PANE. - * @ATSPI_ROLE_DESKTOP_FRAME: A pane that supports internal frames and - * iconified versions of those internal frames. - * @ATSPI_ROLE_DIAL: An object that allows a value to be changed via rotating a - * visual element, or which displays a value via such a rotating element. - * @ATSPI_ROLE_DIALOG: A top level window with title bar and a border. - * @ATSPI_ROLE_DIRECTORY_PANE: A pane that allows the user to navigate through - * and select the contents of a directory. - * @ATSPI_ROLE_DRAWING_AREA: A specialized dialog that displays the files in - * the directory and lets the user select a file, browse a different - * directory, or specify a filename. - * @ATSPI_ROLE_FILE_CHOOSER: An object used for drawing custom user interface - * elements. - * @ATSPI_ROLE_FILLER: A object that fills up space in a user interface. - * @ATSPI_ROLE_FOCUS_TRAVERSABLE: Don't use, reserved for future use. - * @ATSPI_ROLE_FONT_CHOOSER: Allows selection of a display font. - * @ATSPI_ROLE_FRAME: A top level window with a title bar, border, menubar, - * etc. - * @ATSPI_ROLE_GLASS_PANE: A pane that is guaranteed to be painted on top of - * all panes beneath it. - * @ATSPI_ROLE_HTML_CONTAINER: A document container for HTML, whose children - * represent the document content. - * @ATSPI_ROLE_ICON: A small fixed size picture, typically used to decorate - * components. - * @ATSPI_ROLE_IMAGE: An image, typically static. - * @ATSPI_ROLE_INTERNAL_FRAME: A frame-like object that is clipped by a desktop - * pane. - * @ATSPI_ROLE_LABEL: An object used to present an icon or short string in an - * interface. - * @ATSPI_ROLE_LAYERED_PANE: A specialized pane that allows its children to be - * drawn in layers, providing a form of stacking order. - * @ATSPI_ROLE_LIST: An object that presents a list of objects to the user and - * allows the user to select one or more of them. - * @ATSPI_ROLE_LIST_ITEM: An object that represents an element of a list. - * @ATSPI_ROLE_MENU: An object usually found inside a menu bar that contains a - * list of actions the user can choose from. - * @ATSPI_ROLE_MENU_BAR: An object usually drawn at the top of the primary - * dialog box of an application that contains a list of menus the user can - * choose from. - * @ATSPI_ROLE_MENU_ITEM: An object usually contained in a menu that presents - * an action the user can choose. - * @ATSPI_ROLE_OPTION_PANE: A specialized pane whose primary use is inside a - * dialog. - * @ATSPI_ROLE_PAGE_TAB: An object that is a child of a page tab list. - * @ATSPI_ROLE_PAGE_TAB_LIST: An object that presents a series of panels (or - * page tabs), one at a time,through some mechanism provided by the - * object. - * @ATSPI_ROLE_PANEL: A generic container that is often used to group objects. - * @ATSPI_ROLE_PASSWORD_TEXT: A text object uses for passwords, or other places - * where the text content is not shown visibly to the user. - * @ATSPI_ROLE_POPUP_MENU: A temporary window that is usually used to offer the - * user a list of choices, and then hides when the user selects one of those - * choices. - * @ATSPI_ROLE_PROGRESS_BAR: An object used to indicate how much of a task has - * been completed. - * @ATSPI_ROLE_PUSH_BUTTON: An object the user can manipulate to tell the - * application to do something. - * @ATSPI_ROLE_RADIO_BUTTON: A specialized check box that will cause other - * radio buttons in the same group to become unchecked when this one is - * checked. - * @ATSPI_ROLE_RADIO_MENU_ITEM: Object is both a menu item and a "radio button" - * . See @ATSPI_ROLE_RADIO_BUTTON. - * @ATSPI_ROLE_ROOT_PANE: A specialized pane that has a glass pane and a - * layered pane as its children. - * @ATSPI_ROLE_ROW_HEADER: The header for a row of data. - * @ATSPI_ROLE_SCROLL_BAR: An object usually used to allow a user to - * incrementally view a large amount of data by moving the bounds of a - * viewport along a one-dimensional axis. - * @ATSPI_ROLE_SCROLL_PANE: An object that allows a user to incrementally view - * a large amount of information. @ATSPI_ROLE_SCROLL_PANE objects are usually - * accompanied by @ATSPI_ROLE_SCROLL_BAR controllers, on which the - * @ATSPI_RELATION_CONTROLLER_FOR and @ATSPI_RELATION_CONTROLLED_BY - * reciprocal relations are set. See #atspi_get_relation_set. - * @ATSPI_ROLE_SEPARATOR: An object usually contained in a menu to provide a - * visible and logical separation of the contents in a menu. - * @ATSPI_ROLE_SLIDER: An object that allows the user to select from a bounded - * range. - * @ATSPI_ROLE_SPIN_BUTTON: An object which allows one of a set of choices to - * be selected, and which displays the current choice. Unlike - * @ATSPI_ROLE_SCROLL_BAR, @ATSPI_ROLE_SLIDER objects need not control - * 'viewport'-like objects. - * @ATSPI_ROLE_SPLIT_PANE: A specialized panel that presents two other panels - * at the same time. - * @ATSPI_ROLE_STATUS_BAR: Object displays non-quantitative status information - * (c.f. @ATSPI_ROLE_PROGRESS_BAR) - * @ATSPI_ROLE_TABLE: An object used to repesent information in terms of rows - * and columns. - * @ATSPI_ROLE_TABLE_CELL: A 'cell' or discrete child within a Table. Note: - * Table cells need not have @ATSPI_ROLE_TABLE_CELL, other - * #AtspiRoleType values are valid as well. - * @ATSPI_ROLE_TABLE_COLUMN_HEADER: An object which labels a particular column - * in an #AtspiTable. - * @ATSPI_ROLE_TABLE_ROW_HEADER: An object which labels a particular row in a - * #AtspiTable. #AtspiTable rows and columns may also be labelled via the - * @ATSPI_RELATION_LABEL_FOR/@ATSPI_RELATION_LABELLED_BY relationships. - * See #atspi_get_relation_set. - * @ATSPI_ROLE_TEAROFF_MENU_ITEM: Object allows menu to be removed from menubar - * and shown in its own window. - * @ATSPI_ROLE_TERMINAL: An object that emulates a terminal. - * @ATSPI_ROLE_TEXT: An object that presents text to the user, of nonspecific - * type. - * @ATSPI_ROLE_TOGGLE_BUTTON: A specialized push button that can be checked or - * unchecked, but does not procide a separate indicator for the current - * state. - * @ATSPI_ROLE_TOOL_BAR: A bar or palette usually composed of push buttons or - * toggle buttons. - * @ATSPI_ROLE_TOOL_TIP: An object that provides information about another - * object. - * @ATSPI_ROLE_TREE: An object used to repsent hierarchical information to the - * user. - * @ATSPI_ROLE_TREE_TABLE: An object that presents both tabular and - * hierarchical info to the user. - * @ATSPI_ROLE_UNKNOWN: The object contains some #AtspiAccessible information, - * but its role is not known. - * @ATSPI_ROLE_VIEWPORT: An object usually used in a scroll pane, or to - * otherwise clip a larger object or content renderer to a specific - * onscreen viewport. - * @ATSPI_ROLE_WINDOW: A top level window with no title or border. - * @ATSPI_ROLE_EXTENDED: means that the role for this item is known, but not - * included in the core enumeration. - * @ATSPI_ROLE_HEADER: An object that serves as a document header. - * @ATSPI_ROLE_FOOTER: An object that serves as a document footer. - * @ATSPI_ROLE_PARAGRAPH: An object which is contains a single paragraph of - * text content. See also @ATSPI_ROLE_TEXT. - * @ATSPI_ROLE_RULER: An object which describes margins and tab stops, etc. - * for text objects which it controls (should have - * @ATSPI_RELATION_CONTROLLER_FOR relation to such). - * @ATSPI_ROLE_APPLICATION: An object corresponding to the toplevel accessible - * of an application, which may contain @ATSPI_ROLE_FRAME objects or other - * accessible objects. Children of #AccessibleDesktop objects are generally - * @ATSPI_ROLE_APPLICATION objects. - * @ATSPI_ROLE_AUTOCOMPLETE: The object is a dialog or list containing items - * for insertion into an entry widget, for instance a list of words for - * completion of a text entry. - * @ATSPI_ROLE_EDITBAR: The object is an editable text object in a toolbar. - * @ATSPI_ROLE_EMBEDDED: The object is an embedded component container. This - * role is a "grouping" hint that the contained objects share a context - * which is different from the container in which this accessible is - * embedded. In particular, it is used for some kinds of document embedding, - * and for embedding of out-of-process component, "panel applets", etc. - * @ATSPI_ROLE_ENTRY: The object is a component whose textual content may be - * entered or modified by the user, provided @ATSPI_STATE_EDITABLE is present. - * A readonly @ATSPI_ROLE_ENTRY object (i.e. where @ATSPI_STATE_EDITABLE is - * not present) implies a read-only 'text field' in a form, as opposed to a - * title, label, or caption. - * @ATSPI_ROLE_CHART: The object is a graphical depiction of quantitative data. - * It may contain multiple subelements whose attributes and/or description - * may be queried to obtain both the quantitative data and information about - * how the data is being presented. The @ATSPI_LABELLED_BY relation is - * particularly important in interpreting objects of this type, as is the - * accessible description property. See @ATSPI_ROLE_CAPTION. - * @ATSPI_ROLE_CAPTION: The object contains descriptive information, usually - * textual, about another user interface element such as a table, chart, or - * image. - * @ATSPI_ROLE_DOCUMENT_FRAME: The object is a visual frame or container which - * contains a view of document content. #AtspiDocument frames may occur within - * another #AtspiDocument instance, in which case the second document may be - * said to be embedded in the containing instance. HTML frames are often - * ATSPI_ROLE_DOCUMENT_FRAME: Either this object, or a singleton descendant, - * should implement the #AtspiDocument interface. - * @ATSPI_ROLE_HEADING: The object serves as a heading for content which - * follows it in a document. The 'heading level' of the heading, if - * availabe, may be obtained by querying the object's attributes. - * @ATSPI_ROLE_PAGE: The object is a containing instance which encapsulates a - * page of information. @ATSPI_ROLE_PAGE is used in documents and content which - * support a paginated navigation model. - * @ATSPI_ROLE_SECTION: The object is a containing instance of document content - * which constitutes a particular 'logical' section of the document. The - * type of content within a section, and the nature of the section division - * itself, may be obtained by querying the object's attributes. Sections - * may be nested. - * @ATSPI_ROLE_REDUNDANT_OBJECT: The object is redundant with another object in - * the hierarchy, and is exposed for purely technical reasons. Objects of - * this role should be ignored by clients, if they are encountered at all. - * @ATSPI_ROLE_FORM: The object is a containing instance of document content - * which has within it components with which the user can interact in order - * to input information; i.e. the object is a container for pushbuttons, - * comboboxes, text input fields, and other 'GUI' components. @ATSPI_ROLE_FORM - * should not, in general, be used for toplevel GUI containers or dialogs, - * but should be reserved for 'GUI' containers which occur within document - * content, for instance within Web documents, presentations, or text - * documents. Unlike other GUI containers and dialogs which occur inside - * application instances, @ATSPI_ROLE_FORM containers' components are - * associated with the current document, rather than the current foreground - * application or viewer instance. - * @ATSPI_ROLE_LINK: The object is a hypertext anchor, i.e. a "link" in a - * hypertext document. Such objects are distinct from 'inline' content - * which may also use the #AtspiHypertext/#AtspiHyperlink interfacesto indicate - * the range/location within a text object where an inline or embedded object - * lies. - * @ATSPI_ROLE_INPUT_METHOD_WINDOW: The object is a window or similar viewport - * which is used to allow composition or input of a 'complex character', - * in other words it is an "input method window". - * @ATSPI_ROLE_TABLE_ROW: A row in a table. - * @ATSPI_ROLE_TREE_ITEM: An object that represents an element of a tree. - * @ATSPI_ROLE_DOCUMENT_SPREADSHEET: A document frame which contains a - * spreadsheet. - * @ATSPI_ROLE_DOCUMENT_PRESENTATION: A document frame which contains a - * presentation or slide content. - * @ATSPI_ROLE_DOCUMENT_TEXT: A document frame which contains textual content, - * such as found in a word processing - * application. - * @ATSPI_ROLE_DOCUMENT_WEB: A document frame which contains HTML or other - * markup suitable for display in a web browser. - * @ATSPI_ROLE_DOCUMENT_EMAIL: A document frame which contains email content - * to be displayed or composed either in plain text or - * HTML. - * @ATSPI_ROLE_COMMENT: An object found within a document and designed to - * present a comment, note, or other annotation. In some cases, this object - * might not be visible until activated. - * @ATSPI_ROLE_LIST_BOX: A non-collapsible list of choices the user can - * select from. - * @ATSPI_ROLE_GROUPING: A group of related widgets. This group typically has - * a label. - * @ATSPI_ROLE_IMAGE_MAP: An image map object. Usually a graphic with multiple - * hotspots, where each hotspot can be activated resulting in the loading of - * another document or section of a document. - * @ATSPI_ROLE_NOTIFICATION: A transitory object designed to present a - * message to the user, typically at the desktop level rather than inside a - * particular application. - * @ATSPI_ROLE_INFO_BAR: An object designed to present a message to the user - * within an existing window. - *@ATSPI_ROLE_LEVEL_BAR: A bar that serves as a level indicator to, for - * instance, show the strength of a password or the state of a battery. - * Since: 2.8 - *@ATSPI_ROLE_TITLE_BAR: A bar that serves as the title of a window or a - * dialog. @Since: 2.12 - *@ATSPI_ROLE_BLOCK_QUOTE: An object which contains a text section - * that is quoted from another source. @Since: 2.12 - *@ATSPI_ROLE_AUDIO: An object which represents an audio - * element. @Since: 2.12 - *@ATSPI_ROLE_VIDEO: An object which represents a video - * element. @Since: 2.12 - *@ATSPI_ROLE_DEFINITION: A definition of a term or concept. @Since: 2.12 - *@ATSPI_ROLE_ARTICLE: A section of a page that consists of a - * composition that forms an independent part of a document, page, or - * site. Examples: A blog entry, a news story, a forum post. @Since: - * 2.12 - *@ATSPI_ROLE_LANDMARK: A region of a web page intended as a - * navigational landmark. This is designed to allow Assistive - * Technologies to provide quick navigation among key regions within a - * document. @Since: 2.12 - *@ATSPI_ROLE_LOG: A text widget or container holding log content, such - * as chat history and error logs. In this role there is a - * relationship between the arrival of new items in the log and the - * reading order. The log contains a meaningful sequence and new - * information is added only to the end of the log, not at arbitrary - * points. @Since: 2.12 - *@ATSPI_ROLE_MARQUEE: A container where non-essential information - * changes frequently. Common usages of marquee include stock tickers - * and ad banners. The primary difference between a marquee and a log - * is that logs usually have a meaningful order or sequence of - * important content changes. @Since: 2.12 - *@ATSPI_ROLE_MATH: A text widget or container that holds a mathematical - * expression. @Since: 2.12 - *@ATSPI_ROLE_RATING: A widget whose purpose is to display a rating, - * such as the number of stars associated with a song in a media - * player. Objects of this role should also implement - * AtspiValue. @Since: 2.12 - *@ATSPI_ROLE_TIMER: An object containing a numerical counter which - * indicates an amount of elapsed time from a start point, or the time - * remaining until an end point. @Since: 2.12 - * @ATSPI_ROLE_LAST_DEFINED: Not a valid role, used for finding end of - * enumeration. - * - * Enumeration used by interface #AtspiAccessible to specify the role - * of an #AtspiAccessible object. - * - */ -typedef enum { - ATSPI_ROLE_INVALID, - ATSPI_ROLE_ACCELERATOR_LABEL, - ATSPI_ROLE_ALERT, - ATSPI_ROLE_ANIMATION, - ATSPI_ROLE_ARROW, - ATSPI_ROLE_CALENDAR, - ATSPI_ROLE_CANVAS, - ATSPI_ROLE_CHECK_BOX, - ATSPI_ROLE_CHECK_MENU_ITEM, - ATSPI_ROLE_COLOR_CHOOSER, - ATSPI_ROLE_COLUMN_HEADER, - ATSPI_ROLE_COMBO_BOX, - ATSPI_ROLE_DATE_EDITOR, - ATSPI_ROLE_DESKTOP_ICON, - ATSPI_ROLE_DESKTOP_FRAME, - ATSPI_ROLE_DIAL, - ATSPI_ROLE_DIALOG, - ATSPI_ROLE_DIRECTORY_PANE, - ATSPI_ROLE_DRAWING_AREA, - ATSPI_ROLE_FILE_CHOOSER, - ATSPI_ROLE_FILLER, - ATSPI_ROLE_FOCUS_TRAVERSABLE, - ATSPI_ROLE_FONT_CHOOSER, - ATSPI_ROLE_FRAME, - ATSPI_ROLE_GLASS_PANE, - ATSPI_ROLE_HTML_CONTAINER, - ATSPI_ROLE_ICON, - ATSPI_ROLE_IMAGE, - ATSPI_ROLE_INTERNAL_FRAME, - ATSPI_ROLE_LABEL, - ATSPI_ROLE_LAYERED_PANE, - ATSPI_ROLE_LIST, - ATSPI_ROLE_LIST_ITEM, - ATSPI_ROLE_MENU, - ATSPI_ROLE_MENU_BAR, - ATSPI_ROLE_MENU_ITEM, - ATSPI_ROLE_OPTION_PANE, - ATSPI_ROLE_PAGE_TAB, - ATSPI_ROLE_PAGE_TAB_LIST, - ATSPI_ROLE_PANEL, - ATSPI_ROLE_PASSWORD_TEXT, - ATSPI_ROLE_POPUP_MENU, - ATSPI_ROLE_PROGRESS_BAR, - ATSPI_ROLE_PUSH_BUTTON, - ATSPI_ROLE_RADIO_BUTTON, - ATSPI_ROLE_RADIO_MENU_ITEM, - ATSPI_ROLE_ROOT_PANE, - ATSPI_ROLE_ROW_HEADER, - ATSPI_ROLE_SCROLL_BAR, - ATSPI_ROLE_SCROLL_PANE, - ATSPI_ROLE_SEPARATOR, - ATSPI_ROLE_SLIDER, - ATSPI_ROLE_SPIN_BUTTON, - ATSPI_ROLE_SPLIT_PANE, - ATSPI_ROLE_STATUS_BAR, - ATSPI_ROLE_TABLE, - ATSPI_ROLE_TABLE_CELL, - ATSPI_ROLE_TABLE_COLUMN_HEADER, - ATSPI_ROLE_TABLE_ROW_HEADER, - ATSPI_ROLE_TEAROFF_MENU_ITEM, - ATSPI_ROLE_TERMINAL, - ATSPI_ROLE_TEXT, - ATSPI_ROLE_TOGGLE_BUTTON, - ATSPI_ROLE_TOOL_BAR, - ATSPI_ROLE_TOOL_TIP, - ATSPI_ROLE_TREE, - ATSPI_ROLE_TREE_TABLE, - ATSPI_ROLE_UNKNOWN, - ATSPI_ROLE_VIEWPORT, - ATSPI_ROLE_WINDOW, - ATSPI_ROLE_EXTENDED, - ATSPI_ROLE_HEADER, - ATSPI_ROLE_FOOTER, - ATSPI_ROLE_PARAGRAPH, - ATSPI_ROLE_RULER, - ATSPI_ROLE_APPLICATION, - ATSPI_ROLE_AUTOCOMPLETE, - ATSPI_ROLE_EDITBAR, - ATSPI_ROLE_EMBEDDED, - ATSPI_ROLE_ENTRY, - ATSPI_ROLE_CHART, - ATSPI_ROLE_CAPTION, - ATSPI_ROLE_DOCUMENT_FRAME, - ATSPI_ROLE_HEADING, - ATSPI_ROLE_PAGE, - ATSPI_ROLE_SECTION, - ATSPI_ROLE_REDUNDANT_OBJECT, - ATSPI_ROLE_FORM, - ATSPI_ROLE_LINK, - ATSPI_ROLE_INPUT_METHOD_WINDOW, - ATSPI_ROLE_TABLE_ROW, - ATSPI_ROLE_TREE_ITEM, - ATSPI_ROLE_DOCUMENT_SPREADSHEET, - ATSPI_ROLE_DOCUMENT_PRESENTATION, - ATSPI_ROLE_DOCUMENT_TEXT, - ATSPI_ROLE_DOCUMENT_WEB, - ATSPI_ROLE_DOCUMENT_EMAIL, - ATSPI_ROLE_COMMENT, - ATSPI_ROLE_LIST_BOX, - ATSPI_ROLE_GROUPING, - ATSPI_ROLE_IMAGE_MAP, - ATSPI_ROLE_NOTIFICATION, - ATSPI_ROLE_INFO_BAR, - ATSPI_ROLE_LEVEL_BAR, - ATSPI_ROLE_TITLE_BAR, - ATSPI_ROLE_BLOCK_QUOTE, - ATSPI_ROLE_AUDIO, - ATSPI_ROLE_VIDEO, - ATSPI_ROLE_DEFINITION, - ATSPI_ROLE_ARTICLE, - ATSPI_ROLE_LANDMARK, - ATSPI_ROLE_LOG, - ATSPI_ROLE_MARQUEE, - ATSPI_ROLE_MATH, - ATSPI_ROLE_RATING, - ATSPI_ROLE_TIMER, - ATSPI_ROLE_LAST_DEFINED, -} AtspiRole; - -/** - * ATSPI_ROLE_COUNT: - * - * One higher than the highest valid value of #AtspiRole. - */ -#define ATSPI_ROLE_COUNT (90+1) - -typedef enum -{ - ATSPI_CACHE_NONE = 0, - ATSPI_CACHE_PARENT = 1 << 0, - ATSPI_CACHE_CHILDREN = 1 << 1, - ATSPI_CACHE_NAME = 1 << 2, - ATSPI_CACHE_DESCRIPTION = 1 << 3, - ATSPI_CACHE_STATES = 1 << 4, - ATSPI_CACHE_ROLE = 1 << 5, - ATSPI_CACHE_INTERFACES = 1 << 6, - ATSPI_CACHE_ATTRIBUTES = 1 << 7, - ATSPI_CACHE_ALL = 0x3fffffff, - ATSPI_CACHE_DEFAULT = ATSPI_CACHE_PARENT | ATSPI_CACHE_CHILDREN | ATSPI_CACHE_NAME | ATSPI_CACHE_DESCRIPTION | ATSPI_CACHE_STATES | ATSPI_CACHE_ROLE | ATSPI_CACHE_INTERFACES, - ATSPI_CACHE_UNDEFINED = 0x40000000, -} AtspiCache; - -#define ATSPI_DBUS_NAME_REGISTRY "org.a11y.atspi.Registry" -#define ATSPI_DBUS_PATH_REGISTRY "/org/a11y/atspi/registry" -#define ATSPI_DBUS_INTERFACE_REGISTRY "org.a11y.atspi.Registry" - -#define ATSPI_DBUS_PATH_NULL "/org/a11y/atspi/null" -#define ATSPI_DBUS_PATH_ROOT "/org/a11y/atspi/accessible/root" - -#define ATSPI_DBUS_PATH_DEC "/org/a11y/atspi/registry/deviceeventcontroller" -#define ATSPI_DBUS_INTERFACE_DEC "org.a11y.atspi.DeviceEventController" -#define ATSPI_DBUS_INTERFACE_DEVICE_EVENT_LISTENER "org.a11y.atspi.DeviceEventListener" - -#define ATSPI_DBUS_INTERFACE_CACHE "org.a11y.atspi.Cache" -#define ATSPI_DBUS_INTERFACE_ACCESSIBLE "org.a11y.atspi.Accessible" -#define ATSPI_DBUS_INTERFACE_ACTION "org.a11y.atspi.Action" -#define ATSPI_DBUS_INTERFACE_APPLICATION "org.a11y.atspi.Application" -#define ATSPI_DBUS_INTERFACE_COLLECTION "org.a11y.atspi.Collection" -#define ATSPI_DBUS_INTERFACE_COMPONENT "org.a11y.atspi.Component" -#define ATSPI_DBUS_INTERFACE_DOCUMENT "org.a11y.atspi.Document" -#define ATSPI_DBUS_INTERFACE_EDITABLE_TEXT "org.a11y.atspi.EditableText" -#define ATSPI_DBUS_INTERFACE_EVENT_KEYBOARD "org.a11y.atspi.Event.Keyboard" -#define ATSPI_DBUS_INTERFACE_EVENT_MOUSE "org.a11y.atspi.Event.Mouse" -#define ATSPI_DBUS_INTERFACE_EVENT_OBJECT "org.a11y.atspi.Event.Object" -#define ATSPI_DBUS_INTERFACE_HYPERLINK "org.a11y.atspi.Hyperlink" -#define ATSPI_DBUS_INTERFACE_HYPERTEXT "org.a11y.atspi.Hypertext" -#define ATSPI_DBUS_INTERFACE_IMAGE "org.a11y.atspi.Image" -#define ATSPI_DBUS_INTERFACE_SELECTION "org.a11y.atspi.Selection" -#define ATSPI_DBUS_INTERFACE_TABLE "org.a11y.atspi.Table" -#define ATSPI_DBUS_INTERFACE_TABLE_CELL "org.a11y.atspi.TableCell" -#define ATSPI_DBUS_INTERFACE_TEXT "org.a11y.atspi.Text" -#define ATSPI_DBUS_INTERFACE_VALUE "org.a11y.atspi.Value" -#define ATSPI_DBUS_INTERFACE_SOCKET "org.a11y.atspi.Socket" - -#ifdef __cplusplus -} -#endif -#endif /* _ATSPI_CONSTANTS_H_ */ diff --git a/src/3rdparty/atspi2/atspi2.pri b/src/3rdparty/atspi2/atspi2.pri deleted file mode 100644 index 5a6dc6d839..0000000000 --- a/src/3rdparty/atspi2/atspi2.pri +++ /dev/null @@ -1,10 +0,0 @@ - -DBUS_ADAPTORS = $$PWD/xml/Cache.xml $$PWD/xml/DeviceEventController.xml -QDBUSXML2CPP_ADAPTOR_HEADER_FLAGS = -i struct_marshallers_p.h - -DBUS_INTERFACES = $$PWD/xml/Socket.xml $$PWD/xml/Bus.xml -QDBUSXML2CPP_INTERFACE_HEADER_FLAGS = -i struct_marshallers_p.h - -INCLUDEPATH += $$PWD -HEADERS += $$PWD/atspi/atspi-constants.h - diff --git a/src/3rdparty/atspi2/qt_attribution.json b/src/3rdparty/atspi2/qt_attribution.json deleted file mode 100644 index ed2ef85158..0000000000 --- a/src/3rdparty/atspi2/qt_attribution.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "Id": "atspi2", - "Name": "at-spi2 (Assistive Technology Service Provider Interface)", - "QDocModule": "qtgui", - "QtUsage": "Optionally ysed on Linux for accessibility. Configure without dbus (QT_CONFIG-=accessibility-atspi-bridge) to avoid.", - - "License": "GNU Library General Public License v2 or later", - "LicenseId": "LGPL-2.0+", - "LicenseFile": "LICENSE", - "Copyright": "Copyright 2010, 2011 Novell, Inc., Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany." -} diff --git a/src/android/jar/src/org/qtproject/qt5/android/CursorHandle.java b/src/android/jar/src/org/qtproject/qt5/android/CursorHandle.java index 7d26b8fa04..e6814c202d 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/CursorHandle.java +++ b/src/android/jar/src/org/qtproject/qt5/android/CursorHandle.java @@ -107,13 +107,14 @@ public class CursorHandle implements ViewTreeObserver.OnPreDrawListener private int m_id; private int m_attr; private Activity m_activity; - private int m_posX; - private int m_posY; + private int m_posX = 0; + private int m_posY = 0; private int m_lastX; private int m_lastY; int tolerance; + private boolean m_rtl; - public CursorHandle(Activity activity, View layout, int id, int attr) { + public CursorHandle(Activity activity, View layout, int id, int attr, boolean rtl) { m_activity = activity; m_id = id; m_attr = attr; @@ -122,6 +123,7 @@ public class CursorHandle implements ViewTreeObserver.OnPreDrawListener activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); tolerance = Math.round(2 * metrics.density); m_lastX = m_lastY = -1 - tolerance; + m_rtl = rtl; } private boolean initOverlay(){ @@ -160,9 +162,9 @@ public class CursorHandle implements ViewTreeObserver.OnPreDrawListener if (m_id == QtNative.IdCursorHandle) { x2 -= m_cursorView.getWidth() / 2 ; - } else if (m_id == QtNative.IdLeftHandle) { + } else if ((m_id == QtNative.IdLeftHandle && !m_rtl) || (m_id == QtNative.IdRightHandle && m_rtl)) { x2 -= m_cursorView.getWidth() * 3 / 4; - } else if (m_id == QtNative.IdRightHandle) { + } else { x2 -= m_cursorView.getWidth() / 4; } diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java index 5975d838ce..720a35902b 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java @@ -493,7 +493,7 @@ public class QtActivityDelegate be adjusted. mode is one of QAndroidInputContext::CursorHandleShowMode */ - public void updateHandles(int mode, int x1, int y1, int x2, int y2) + public void updateHandles(int mode, int x1, int y1, int x2, int y2, boolean rtl) { if (mode == CursorHandleNotShown) { if (m_cursorHandle != null) @@ -501,6 +501,8 @@ public class QtActivityDelegate if (m_rightSelectionHandle != null) { m_rightSelectionHandle.hide(); m_leftSelectionHandle.hide(); + m_rightSelectionHandle = null; + m_leftSelectionHandle = null; } if (m_editMenu != null) m_editMenu.hide(); @@ -509,19 +511,25 @@ public class QtActivityDelegate } else if (mode == CursorHandleShowNormal || mode == CursorHandleShowPopup) { if (m_cursorHandle == null) { m_cursorHandle = new CursorHandle(m_activity, m_layout, QtNative.IdCursorHandle, - android.R.attr.textSelectHandle); + android.R.attr.textSelectHandle, false); } m_cursorHandle.setPosition(x1, y1); if (m_rightSelectionHandle != null) { m_rightSelectionHandle.hide(); m_leftSelectionHandle.hide(); + m_rightSelectionHandle = null; + m_leftSelectionHandle = null; } } else if (mode == CursorHandleShowSelection) { if (m_rightSelectionHandle == null) { m_leftSelectionHandle = new CursorHandle(m_activity, m_layout, QtNative.IdLeftHandle, - android.R.attr.textSelectHandleLeft); + !rtl ? android.R.attr.textSelectHandleLeft : + android.R.attr.textSelectHandleRight, + rtl); m_rightSelectionHandle = new CursorHandle(m_activity, m_layout, QtNative.IdRightHandle, - android.R.attr.textSelectHandleRight); + !rtl ? android.R.attr.textSelectHandleRight : + android.R.attr.textSelectHandleLeft, + rtl); } m_leftSelectionHandle.setPosition(x1,y1); m_rightSelectionHandle.setPosition(x2,y2); diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java index 1d3d329043..76dffbd213 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java @@ -61,6 +61,7 @@ import android.view.KeyEvent; import android.view.Menu; import android.view.MotionEvent; import android.view.View; +import android.view.InputDevice; import java.lang.reflect.Method; import java.security.KeyStore; @@ -470,6 +471,17 @@ public class QtNative } } + static public void sendGenericMotionEvent(MotionEvent event, int id) + { + if (event.getActionMasked() != MotionEvent.ACTION_SCROLL + || (event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != InputDevice.SOURCE_CLASS_POINTER) { + return; + } + + mouseWheel(id, (int) event.getX(), (int) event.getY(), + event.getAxisValue(MotionEvent.AXIS_HSCROLL), event.getAxisValue(MotionEvent.AXIS_VSCROLL)); + } + public static Context getContext() { if (m_activity != null) return m_activity; @@ -516,12 +528,13 @@ public class QtNative final int x1, final int y1, final int x2, - final int y2) + final int y2, + final boolean rtl) { runAction(new Runnable() { @Override public void run() { - m_activityDelegate.updateHandles(mode, x1, y1, x2, y2); + m_activityDelegate.updateHandles(mode, x1, y1, x2, y2, rtl); } }); } @@ -800,6 +813,7 @@ public class QtNative public static native void mouseDown(int winId, int x, int y); public static native void mouseUp(int winId, int x, int y); public static native void mouseMove(int winId, int x, int y); + public static native void mouseWheel(int winId, int x, int y, float hdelta, float vdelta); public static native void touchBegin(int winId); public static native void touchAdd(int winId, int pointerId, int action, boolean primary, int x, int y, float major, float minor, float rotation, float pressure); public static native void touchEnd(int winId, int action); diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java b/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java index 4d8abb2117..e994002dd3 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java @@ -112,4 +112,11 @@ public class QtSurface extends SurfaceView implements SurfaceHolder.Callback QtNative.sendTrackballEvent(event, getId()); return true; } + + @Override + public boolean onGenericMotionEvent(MotionEvent event) + { + QtNative.sendGenericMotionEvent(event, getId()); + return true; + } } diff --git a/src/angle/patches/0013-ANGLE-Fix-crash-with-ltcg-on-Visual-Studio-2015-Upda.patch b/src/angle/patches/0013-ANGLE-Fix-crash-with-ltcg-on-Visual-Studio-2015-Upda.patch new file mode 100644 index 0000000000..ee847d3d9a --- /dev/null +++ b/src/angle/patches/0013-ANGLE-Fix-crash-with-ltcg-on-Visual-Studio-2015-Upda.patch @@ -0,0 +1,110 @@ +From c30bdc7d961ff09d74117e038c1bb9f06ad49738 Mon Sep 17 00:00:00 2001 +From: Oliver Wolff <oliver.wolff@qt.io> +Date: Wed, 7 Jun 2017 10:07:43 +0200 +Subject: [PATCH] ANGLE: Fix crash with ltcg on Visual Studio 2015 Update 3 + +Release builds of applications that used Qt configured with "link time +code generation" crashed (memory access violation), when calling +GetInternalFormatInfo in Context::initCaps. + +It looks like this is a compiler problem that can be avoided by not +using a reference for the return value. + +Task-number: QTBUG-55718 +Change-Id: Ic1fb95d7b518a49859f41c819e860864387a8d3c +--- + src/3rdparty/angle/src/libANGLE/formatutils.cpp | 2 +- + src/3rdparty/angle/src/libANGLE/formatutils.h | 2 +- + src/3rdparty/angle/src/libANGLE/validationES3.cpp | 18 +++++++++--------- + 3 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/src/3rdparty/angle/src/libANGLE/formatutils.cpp b/src/3rdparty/angle/src/libANGLE/formatutils.cpp +index 3a4df12..f8b9a8b 100644 +--- a/src/3rdparty/angle/src/libANGLE/formatutils.cpp ++++ b/src/3rdparty/angle/src/libANGLE/formatutils.cpp +@@ -652,7 +652,7 @@ const Type &GetTypeInfo(GLenum type) + } + } + +-const InternalFormat &GetInternalFormatInfo(GLenum internalFormat) ++const InternalFormat GetInternalFormatInfo(GLenum internalFormat) + { + const InternalFormatInfoMap &formatMap = GetInternalFormatMap(); + InternalFormatInfoMap::const_iterator iter = formatMap.find(internalFormat); +diff --git a/src/3rdparty/angle/src/libANGLE/formatutils.h b/src/3rdparty/angle/src/libANGLE/formatutils.h +index 6863e4d..2165e6b 100644 +--- a/src/3rdparty/angle/src/libANGLE/formatutils.h ++++ b/src/3rdparty/angle/src/libANGLE/formatutils.h +@@ -79,7 +79,7 @@ struct InternalFormat + GLint skipRows, + GLint skipPixels) const; + }; +-const InternalFormat &GetInternalFormatInfo(GLenum internalFormat); ++const InternalFormat GetInternalFormatInfo(GLenum internalFormat); + + GLenum GetSizedInternalFormat(GLenum internalFormat, GLenum type); + +diff --git a/src/3rdparty/angle/src/libANGLE/validationES3.cpp b/src/3rdparty/angle/src/libANGLE/validationES3.cpp +index e08e5d2..2db64ec 100644 +--- a/src/3rdparty/angle/src/libANGLE/validationES3.cpp ++++ b/src/3rdparty/angle/src/libANGLE/validationES3.cpp +@@ -775,20 +775,20 @@ static bool IsValidES3CopyTexImageCombination(GLenum textureInternalFormat, GLen + // with the values of the source buffer's [channel sizes]. Table 3.17 is used if the + // FRAMEBUFFER_ATTACHMENT_ENCODING is LINEAR and table 3.18 is used if the FRAMEBUFFER_ATTACHMENT_ENCODING + // is SRGB. +- const InternalFormat *sourceEffectiveFormat = NULL; ++ InternalFormat sourceEffectiveFormat; + if (readBufferHandle != 0) + { + // Not the default framebuffer, therefore the read buffer must be a user-created texture or renderbuffer + if (framebufferInternalFormatInfo.pixelBytes > 0) + { +- sourceEffectiveFormat = &framebufferInternalFormatInfo; ++ sourceEffectiveFormat = framebufferInternalFormatInfo; + } + else + { + // Renderbuffers cannot be created with an unsized internal format, so this must be an unsized-format + // texture. We can use the same table we use when creating textures to get its effective sized format. + GLenum sizedInternalFormat = GetSizedInternalFormat(framebufferInternalFormatInfo.format, framebufferInternalFormatInfo.type); +- sourceEffectiveFormat = &GetInternalFormatInfo(sizedInternalFormat); ++ sourceEffectiveFormat = GetInternalFormatInfo(sizedInternalFormat); + } + } + else +@@ -800,7 +800,7 @@ static bool IsValidES3CopyTexImageCombination(GLenum textureInternalFormat, GLen + GLenum effectiveFormat; + if (GetEffectiveInternalFormat(framebufferInternalFormatInfo, textureInternalFormatInfo, &effectiveFormat)) + { +- sourceEffectiveFormat = &GetInternalFormatInfo(effectiveFormat); ++ sourceEffectiveFormat = GetInternalFormatInfo(effectiveFormat); + } + else + { +@@ -816,7 +816,7 @@ static bool IsValidES3CopyTexImageCombination(GLenum textureInternalFormat, GLen + (framebufferInternalFormatInfo.blueBits >= 1 && framebufferInternalFormatInfo.blueBits <= 8) && + (framebufferInternalFormatInfo.alphaBits >= 1 && framebufferInternalFormatInfo.alphaBits <= 8)) + { +- sourceEffectiveFormat = &GetInternalFormatInfo(GL_SRGB8_ALPHA8); ++ sourceEffectiveFormat = GetInternalFormatInfo(GL_SRGB8_ALPHA8); + } + else + { +@@ -834,10 +834,10 @@ static bool IsValidES3CopyTexImageCombination(GLenum textureInternalFormat, GLen + { + // Section 3.8.5 of the GLES 3.0.3 spec, pg 139, requires that, if the destination format is sized, + // component sizes of the source and destination formats must exactly match +- if (textureInternalFormatInfo.redBits != sourceEffectiveFormat->redBits || +- textureInternalFormatInfo.greenBits != sourceEffectiveFormat->greenBits || +- textureInternalFormatInfo.blueBits != sourceEffectiveFormat->blueBits || +- textureInternalFormatInfo.alphaBits != sourceEffectiveFormat->alphaBits) ++ if (textureInternalFormatInfo.redBits != sourceEffectiveFormat.redBits || ++ textureInternalFormatInfo.greenBits != sourceEffectiveFormat.greenBits || ++ textureInternalFormatInfo.blueBits != sourceEffectiveFormat.blueBits || ++ textureInternalFormatInfo.alphaBits != sourceEffectiveFormat.alphaBits) + { + return false; + } +-- +2.5.3.windows.1 + diff --git a/src/corelib/configure.json b/src/corelib/configure.json index 0e9830c5e2..7fca3137eb 100644 --- a/src/corelib/configure.json +++ b/src/corelib/configure.json @@ -84,6 +84,14 @@ "-ldl" ] }, + "librt": { + "label": "clock_gettime()", + "test": "unix/clock-gettime", + "sources": [ + "", + "-lrt" + ] + }, "pcre2": { "label": "PCRE2", "test": "unix/pcre2", @@ -119,15 +127,11 @@ "type": "compile", "test": "common/atomicfptr" }, - "clock-gettime": { - "label": "clock_gettime()", - "type": "compile", - "test": "unix/clock-gettime" - }, "clock-monotonic": { "label": "POSIX monotonic clock", "type": "compile", - "test": "unix/clock-monotonic" + "test": "unix/clock-monotonic", + "use": "librt" }, "cloexec": { "label": "O_CLOEXEC", @@ -214,7 +218,7 @@ "features": { "clock-gettime": { "label": "clock_gettime()", - "condition": "tests.clock-gettime", + "condition": "config.unix && libs.librt", "output": [ "privateFeature" ] }, "clock-monotonic": { diff --git a/src/corelib/doc/src/json.qdoc b/src/corelib/doc/src/json.qdoc index a32772f910..4c7e62a10a 100644 --- a/src/corelib/doc/src/json.qdoc +++ b/src/corelib/doc/src/json.qdoc @@ -45,7 +45,7 @@ access. More details about the JSON data format can be found at \l{http://json.org}{json.org} - and in \l{http://tools.ietf.org/html/rfc4627}{RFC-4627}. + and in \l{https://tools.ietf.org/html/rfc7159}{RFC-7159}. \tableofcontents diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri index b95cdaa014..a087452d06 100644 --- a/src/corelib/global/global.pri +++ b/src/corelib/global/global.pri @@ -29,7 +29,6 @@ HEADERS += \ SOURCES += \ global/archdetect.cpp \ global/qglobal.cpp \ - global/qglobalstatic.cpp \ global/qlibraryinfo.cpp \ global/qmalloc.cpp \ global/qnumeric.cpp \ diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h index c221115e8f..9ffd164b61 100644 --- a/src/corelib/global/qcompilerdetection.h +++ b/src/corelib/global/qcompilerdetection.h @@ -1061,6 +1061,37 @@ #endif /* + * SG10's SD-6 feature detection and some useful extensions from Clang and GCC + * https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations + * http://clang.llvm.org/docs/LanguageExtensions.html#feature-checking-macros + */ +#ifdef __has_builtin +# define QT_HAS_BUILTIN(x) __has_builtin(x) +#else +# define QT_HAS_BUILTIN(x) 0 +#endif +#ifdef __has_attribute +# define QT_HAS_ATTRIBUTE(x) __has_attribute(x) +#else +# define QT_HAS_ATTRIBUTE(x) 0 +#endif +#ifdef __has_cpp_attribute +# define QT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x) +#else +# define QT_HAS_CPP_ATTRIBUTE(x) 0 +#endif +#ifdef __has_include +# define QT_HAS_INCLUDE(x) __has_include(x) +#else +# define QT_HAS_INCLUDE(x) 0 +#endif +#ifdef __has_include_next +# define QT_HAS_INCLUDE_NEXT(x) __has_include_next(x) +#else +# define QT_HAS_INCLUDE_NEXT(x) 0 +#endif + +/* * C++11 keywords and expressions */ #ifdef Q_COMPILER_NULLPTR @@ -1141,6 +1172,11 @@ # define Q_DECL_ALIGN(n) alignas(n) #endif +#if QT_HAS_CPP_ATTRIBUTE(nodiscard) // P0188R1 +# undef Q_REQUIRED_RESULT +# define Q_REQUIRED_RESULT [[nodiscard]] +#endif + /* * Fallback macros to certain compiler features */ @@ -1215,37 +1251,6 @@ #ifndef QT_MAKE_CHECKED_ARRAY_ITERATOR # define QT_MAKE_CHECKED_ARRAY_ITERATOR(x, N) (x) #endif - -/* - * SG10's SD-6 feature detection and some useful extensions from Clang and GCC - * https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations - * http://clang.llvm.org/docs/LanguageExtensions.html#feature-checking-macros - */ -#ifdef __has_builtin -# define QT_HAS_BUILTIN(x) __has_builtin(x) -#else -# define QT_HAS_BUILTIN(x) 0 -#endif -#ifdef __has_attribute -# define QT_HAS_ATTRIBUTE(x) __has_attribute(x) -#else -# define QT_HAS_ATTRIBUTE(x) 0 -#endif -#ifdef __has_cpp_attribute -# define QT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x) -#else -# define QT_HAS_CPP_ATTRIBUTE(x) 0 -#endif -#ifdef __has_include -# define QT_HAS_INCLUDE(x) __has_include(x) -#else -# define QT_HAS_INCLUDE(x) 0 -#endif -#ifdef __has_include_next -# define QT_HAS_INCLUDE_NEXT(x) __has_include_next(x) -#else -# define QT_HAS_INCLUDE_NEXT(x) 0 -#endif #ifdef __has_feature # define QT_HAS_FEATURE(x) __has_feature(x) #else diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index 4c1b210489..9c05b9650c 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -85,12 +85,6 @@ # include <sys/systeminfo.h> #endif -#if defined(Q_OS_DARWIN) -# include <mach/machine.h> -# include <sys/sysctl.h> -# include <sys/types.h> -#endif - #ifdef Q_OS_UNIX #include <sys/utsname.h> #include <private/qcore_unix_p.h> @@ -2057,6 +2051,8 @@ static const char *osVer_helper(QOperatingSystemVersion version = QOperatingSyst return "El Capitan"; case 12: return "Sierra"; + case 13: + return "High Sierra"; } } // unknown, future version @@ -2489,20 +2485,9 @@ QString QSysInfo::currentCpuArchitecture() case PROCESSOR_ARCHITECTURE_IA64: return QStringLiteral("ia64"); } -#elif defined(Q_OS_DARWIN) - cpu_type_t type; - size_t size = sizeof(type); - sysctlbyname("hw.cputype", &type, &size, NULL, 0); - switch (type) { - case CPU_TYPE_X86: - return QStringLiteral("i386"); - case CPU_TYPE_X86_64: - return QStringLiteral("x86_64"); - case CPU_TYPE_ARM: - return QStringLiteral("arm"); - case CPU_TYPE_ARM64: - return QStringLiteral("arm64"); - } +#elif defined(Q_OS_DARWIN) && !defined(Q_OS_MACOS) + // iOS-based OSes do not return the architecture on uname(2)'s result. + return buildCpuArchitecture(); #elif defined(Q_OS_UNIX) long ret = -1; struct utsname u; diff --git a/src/corelib/global/qglobalstatic.cpp b/src/corelib/global/qglobalstatic.qdoc index d1c522a79a..8c34739d38 100644 --- a/src/corelib/global/qglobalstatic.cpp +++ b/src/corelib/global/qglobalstatic.qdoc @@ -37,8 +37,6 @@ ** ****************************************************************************/ -#include "qglobalstatic.h" - /*! \macro Q_GLOBAL_STATIC(Type, VariableName) \since 5.1 diff --git a/src/corelib/global/qlogging.cpp b/src/corelib/global/qlogging.cpp index a52f0de9f0..6602d53b08 100644 --- a/src/corelib/global/qlogging.cpp +++ b/src/corelib/global/qlogging.cpp @@ -274,7 +274,7 @@ Q_CORE_EXPORT bool qt_logging_to_console() \sa QMessageLogContext, qDebug(), qInfo(), qWarning(), qCritical(), qFatal() */ -#ifdef Q_OS_WIN +#if defined(Q_CC_MSVC) && defined(QT_DEBUG) && defined(_DEBUG) && defined(_CRT_ERROR) static inline void convert_to_wchar_t_elided(wchar_t *d, size_t space, const char *s) Q_DECL_NOEXCEPT { size_t len = qstrlen(s); diff --git a/src/corelib/global/qoperatingsystemversion.cpp b/src/corelib/global/qoperatingsystemversion.cpp index bed08f0000..244f294312 100644 --- a/src/corelib/global/qoperatingsystemversion.cpp +++ b/src/corelib/global/qoperatingsystemversion.cpp @@ -413,6 +413,14 @@ const QOperatingSystemVersion QOperatingSystemVersion::MacOSSierra = QOperatingSystemVersion(QOperatingSystemVersion::MacOS, 10, 12); /*! + \variable QOperatingSystemVersion::MacOSHighSierra + \brief a version corresponding to macOS High Sierra (version 10.13). + \since 5.9.1 + */ +const QOperatingSystemVersion QOperatingSystemVersion::MacOSHighSierra = + QOperatingSystemVersion(QOperatingSystemVersion::MacOS, 10, 13); + +/*! \variable QOperatingSystemVersion::AndroidJellyBean \brief a version corresponding to Android Jelly Bean (version 4.1, API level 16). \since 5.9 diff --git a/src/corelib/global/qoperatingsystemversion.h b/src/corelib/global/qoperatingsystemversion.h index cc14d701e1..295365aad1 100644 --- a/src/corelib/global/qoperatingsystemversion.h +++ b/src/corelib/global/qoperatingsystemversion.h @@ -69,6 +69,7 @@ public: static const QOperatingSystemVersion OSXYosemite; static const QOperatingSystemVersion OSXElCapitan; static const QOperatingSystemVersion MacOSSierra; + static const QOperatingSystemVersion MacOSHighSierra; static const QOperatingSystemVersion AndroidJellyBean; static const QOperatingSystemVersion AndroidJellyBean_MR1; diff --git a/src/corelib/io/qloggingcategory.cpp b/src/corelib/io/qloggingcategory.cpp index 967a614a2d..69af936bca 100644 --- a/src/corelib/io/qloggingcategory.cpp +++ b/src/corelib/io/qloggingcategory.cpp @@ -63,6 +63,7 @@ static void setBoolLane(QBasicAtomicInt *atomic, bool enable, int shift) \class QLoggingCategory \inmodule QtCore \since 5.2 + \threadsafe \brief The QLoggingCategory class represents a category, or 'area' in the logging infrastructure. @@ -95,6 +96,9 @@ static void setBoolLane(QBasicAtomicInt *atomic, bool enable, int shift) \li Category names starting with \c{qt} are reserved for Qt modules. \endlist + QLoggingCategory objects implicitly defined by Q_LOGGING_CATEGORY() + are created on first use in a thread-safe manner. + \section1 Checking Category Configuration QLoggingCategory provides \l isDebugEnabled(), \l isInfoEnabled(), @@ -458,6 +462,8 @@ void QLoggingCategory::setFilterRules(const QString &rules) \note Arguments are not processed if debug output for the category is not enabled, so do not rely on any side effects. + \note Using the macro is thread-safe. + \sa qDebug() */ @@ -477,6 +483,8 @@ void QLoggingCategory::setFilterRules(const QString &rules) \note Arguments might not be processed if debug output for the category is not enabled, so do not rely on any side effects. + \note Using the macro is thread-safe. + \sa qDebug() */ @@ -499,6 +507,8 @@ void QLoggingCategory::setFilterRules(const QString &rules) \note Arguments are not processed if debug output for the category is not enabled, so do not rely on any side effects. + \note Using the macro is thread-safe. + \sa qInfo() */ @@ -518,6 +528,8 @@ void QLoggingCategory::setFilterRules(const QString &rules) \note Arguments might not be processed if debug output for the category is not enabled, so do not rely on any side effects. + \note Using the macro is thread-safe. + \sa qInfo() */ @@ -540,6 +552,8 @@ void QLoggingCategory::setFilterRules(const QString &rules) \note Arguments are not processed if warning output for the category is not enabled, so do not rely on any side effects. + \note Using the macro is thread-safe. + \sa qWarning() */ @@ -559,6 +573,8 @@ void QLoggingCategory::setFilterRules(const QString &rules) \note Arguments might not be processed if warning output for the category is not enabled, so do not rely on any side effects. + \note Using the macro is thread-safe. + \sa qWarning() */ @@ -581,6 +597,8 @@ void QLoggingCategory::setFilterRules(const QString &rules) \note Arguments are not processed if critical output for the category is not enabled, so do not rely on any side effects. + \note Using the macro is thread-safe. + \sa qCritical() */ @@ -600,6 +618,8 @@ void QLoggingCategory::setFilterRules(const QString &rules) \note Arguments might not be processed if critical output for the category is not enabled, so do not rely on any side effects. + \note Using the macro is thread-safe. + \sa qCritical() */ /*! @@ -624,7 +644,8 @@ void QLoggingCategory::setFilterRules(const QString &rules) \a string identifier. By default, all message types are enabled. Only one translation unit in a library or executable can define a category - with a specific name. + with a specific name. The implicitly defined QLoggingCategory object is + created on first use, in a thread-safe manner. This macro must be used outside of a class or method. */ @@ -640,7 +661,8 @@ void QLoggingCategory::setFilterRules(const QString &rules) and more severe are enabled, types with a lower severity are disabled. Only one translation unit in a library or executable can define a category - with a specific name. + with a specific name. The implicitly defined QLoggingCategory object is + created on first use, in a thread-safe manner. This macro must be used outside of a class or method. It is only defined if variadic macros are supported. diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp index a3343423db..9da0fe59b5 100644 --- a/src/corelib/io/qprocess.cpp +++ b/src/corelib/io/qprocess.cpp @@ -154,8 +154,8 @@ QT_BEGIN_NAMESPACE QStringList QProcessEnvironmentPrivate::toList() const { QStringList result; - result.reserve(hash.size()); - for (Hash::const_iterator it = hash.cbegin(), end = hash.cend(); it != end; ++it) + result.reserve(vars.size()); + for (auto it = vars.cbegin(), end = vars.cend(); it != end; ++it) result << nameToString(it.key()) + QLatin1Char('=') + valueToString(it.value()); return result; } @@ -181,9 +181,9 @@ QProcessEnvironment QProcessEnvironmentPrivate::fromList(const QStringList &list QStringList QProcessEnvironmentPrivate::keys() const { QStringList result; - result.reserve(hash.size()); - Hash::ConstIterator it = hash.constBegin(), - end = hash.constEnd(); + result.reserve(vars.size()); + auto it = vars.constBegin(); + const auto end = vars.constEnd(); for ( ; it != end; ++it) result << nameToString(it.key()); return result; @@ -191,14 +191,14 @@ QStringList QProcessEnvironmentPrivate::keys() const void QProcessEnvironmentPrivate::insert(const QProcessEnvironmentPrivate &other) { - Hash::ConstIterator it = other.hash.constBegin(), - end = other.hash.constEnd(); + auto it = other.vars.constBegin(); + const auto end = other.vars.constEnd(); for ( ; it != end; ++it) - hash.insert(it.key(), it.value()); + vars.insert(it.key(), it.value()); #ifdef Q_OS_UNIX - QHash<QString, Key>::ConstIterator nit = other.nameMap.constBegin(), - nend = other.nameMap.constEnd(); + auto nit = other.nameMap.constBegin(); + const auto nend = other.nameMap.constEnd(); for ( ; nit != nend; ++nit) nameMap.insert(nit.key(), nit.value()); #endif @@ -271,7 +271,7 @@ bool QProcessEnvironment::operator==(const QProcessEnvironment &other) const if (d) { if (other.d) { QProcessEnvironmentPrivate::OrderedMutexLocker locker(d, other.d); - return d->hash == other.d->hash; + return d->vars == other.d->vars; } else { return isEmpty(); } @@ -289,7 +289,7 @@ bool QProcessEnvironment::operator==(const QProcessEnvironment &other) const bool QProcessEnvironment::isEmpty() const { // Needs no locking, as no hash nodes are accessed - return d ? d->hash.isEmpty() : true; + return d ? d->vars.isEmpty() : true; } /*! @@ -301,7 +301,7 @@ bool QProcessEnvironment::isEmpty() const void QProcessEnvironment::clear() { if (d) - d->hash.clear(); + d->vars.clear(); // Unix: Don't clear d->nameMap, as the environment is likely to be // re-populated with the same keys again. } @@ -318,7 +318,7 @@ bool QProcessEnvironment::contains(const QString &name) const if (!d) return false; QProcessEnvironmentPrivate::MutexLocker locker(d); - return d->hash.contains(d->prepareName(name)); + return d->vars.contains(d->prepareName(name)); } /*! @@ -337,7 +337,7 @@ void QProcessEnvironment::insert(const QString &name, const QString &value) { // our re-impl of detach() detaches from null d.detach(); // detach before prepareName() - d->hash.insert(d->prepareName(name), d->prepareValue(value)); + d->vars.insert(d->prepareName(name), d->prepareValue(value)); } /*! @@ -352,7 +352,7 @@ void QProcessEnvironment::remove(const QString &name) { if (d) { d.detach(); // detach before prepareName() - d->hash.remove(d->prepareName(name)); + d->vars.remove(d->prepareName(name)); } } @@ -369,8 +369,8 @@ QString QProcessEnvironment::value(const QString &name, const QString &defaultVa return defaultValue; QProcessEnvironmentPrivate::MutexLocker locker(d); - QProcessEnvironmentPrivate::Hash::ConstIterator it = d->hash.constFind(d->prepareName(name)); - if (it == d->hash.constEnd()) + const auto it = d->vars.constFind(d->prepareName(name)); + if (it == d->vars.constEnd()) return defaultValue; return d->valueToString(it.value()); diff --git a/src/corelib/io/qprocess_darwin.mm b/src/corelib/io/qprocess_darwin.mm index dd7a8275b9..2c3c296cb4 100644 --- a/src/corelib/io/qprocess_darwin.mm +++ b/src/corelib/io/qprocess_darwin.mm @@ -48,7 +48,7 @@ QProcessEnvironment QProcessEnvironment::systemEnvironment() __block QProcessEnvironment env; [[[NSProcessInfo processInfo] environment] enumerateKeysAndObjectsUsingBlock:^(NSString *name, NSString *value, BOOL *__unused stop) { - env.d->hash.insert( + env.d->vars.insert( QProcessEnvironmentPrivate::Key(QString::fromNSString(name).toLocal8Bit()), QProcessEnvironmentPrivate::Value(QString::fromNSString(value).toLocal8Bit())); }]; diff --git a/src/corelib/io/qprocess_p.h b/src/corelib/io/qprocess_p.h index bea54f86da..deb29dca0a 100644 --- a/src/corelib/io/qprocess_p.h +++ b/src/corelib/io/qprocess_p.h @@ -55,6 +55,7 @@ #include "QtCore/qprocess.h" #include "QtCore/qstringlist.h" #include "QtCore/qhash.h" +#include "QtCore/qmap.h" #include "QtCore/qshareddata.h" #include "private/qiodevice_p.h" @@ -90,22 +91,19 @@ public: QProcEnvKey(const QProcEnvKey &other) : QString(other) {} bool operator==(const QProcEnvKey &other) const { return !compare(other, Qt::CaseInsensitive); } }; -inline uint qHash(const QProcEnvKey &key) { return qHash(key.toCaseFolded()); } -typedef QString QProcEnvValue; -#else -class QProcEnvKey +inline bool operator<(const QProcEnvKey &a, const QProcEnvKey &b) { -public: - QProcEnvKey() : hash(0) {} - explicit QProcEnvKey(const QByteArray &other) : key(other), hash(qHash(key)) {} - QProcEnvKey(const QProcEnvKey &other) { *this = other; } - bool operator==(const QProcEnvKey &other) const { return key == other.key; } + // On windows use case-insensitive ordering because that is how Windows needs the environment + // block sorted (https://msdn.microsoft.com/en-us/library/windows/desktop/ms682009(v=vs.85).aspx) + return a.compare(b, Qt::CaseInsensitive) < 0; +} - QByteArray key; - uint hash; -}; -inline uint qHash(const QProcEnvKey &key) Q_DECL_NOTHROW { return key.hash; } +Q_DECLARE_TYPEINFO(QProcEnvKey, Q_MOVABLE_TYPE); + +typedef QString QProcEnvValue; +#else +using QProcEnvKey = QByteArray; class QProcEnvValue { @@ -138,7 +136,6 @@ public: }; Q_DECLARE_TYPEINFO(QProcEnvValue, Q_MOVABLE_TYPE); #endif -Q_DECLARE_TYPEINFO(QProcEnvKey, Q_MOVABLE_TYPE); class QProcessEnvironmentPrivate: public QSharedData { @@ -161,13 +158,13 @@ public: inline Key prepareName(const QString &name) const { Key &ent = nameMap[name]; - if (ent.key.isEmpty()) - ent = Key(name.toLocal8Bit()); + if (ent.isEmpty()) + ent = name.toLocal8Bit(); return ent; } inline QString nameToString(const Key &name) const { - const QString sname = QString::fromLocal8Bit(name.key); + const QString sname = QString::fromLocal8Bit(name); nameMap[sname] = name; return sname; } @@ -197,17 +194,17 @@ public: // do not need a lock, as they detach objects (however, we need to // ensure that they really detach before using prepareName()). MutexLocker locker(&other); - hash = other.hash; + vars = other.vars; nameMap = other.nameMap; // We need to detach our members, so that our mutex can protect them. // As we are being detached, they likely would be detached a moment later anyway. - hash.detach(); + vars.detach(); nameMap.detach(); } #endif - typedef QHash<Key, Value> Hash; - Hash hash; + using Map = QMap<Key, Value>; + Map vars; #ifdef Q_OS_UNIX typedef QHash<QString, Key> NameHash; diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp index 2b47f3e5b1..35bb44fed4 100644 --- a/src/corelib/io/qprocess_unix.cpp +++ b/src/corelib/io/qprocess_unix.cpp @@ -137,7 +137,7 @@ QProcessEnvironment QProcessEnvironment::systemEnvironment() QByteArray name(entry, equal - entry); QByteArray value(equal + 1); - env.d->hash.insert(QProcessEnvironmentPrivate::Key(name), + env.d->vars.insert(QProcessEnvironmentPrivate::Key(name), QProcessEnvironmentPrivate::Value(value)); } return env; @@ -339,7 +339,7 @@ bool QProcessPrivate::openChannel(Channel &channel) } } -static char **_q_dupEnvironment(const QProcessEnvironmentPrivate::Hash &environment, int *envc) +static char **_q_dupEnvironment(const QProcessEnvironmentPrivate::Map &environment, int *envc) { *envc = 0; if (environment.isEmpty()) @@ -349,10 +349,10 @@ static char **_q_dupEnvironment(const QProcessEnvironmentPrivate::Hash &environm envp[environment.count()] = 0; envp[environment.count() + 1] = 0; - QProcessEnvironmentPrivate::Hash::ConstIterator it = environment.constBegin(); - const QProcessEnvironmentPrivate::Hash::ConstIterator end = environment.constEnd(); + auto it = environment.constBegin(); + const auto end = environment.constEnd(); for ( ; it != end; ++it) { - QByteArray key = it.key().key; + QByteArray key = it.key(); QByteArray value = it.value().bytes(); key.reserve(key.length() + 1 + value.length()); key.append('='); @@ -445,7 +445,7 @@ void QProcessPrivate::startProcess() char **envp = 0; if (environment.d.constData()) { QProcessEnvironmentPrivate::MutexLocker locker(environment.d); - envp = _q_dupEnvironment(environment.d.constData()->hash, &envc); + envp = _q_dupEnvironment(environment.d.constData()->vars, &envc); } // Encode the working directory if it's non-empty, otherwise just pass 0. @@ -969,7 +969,7 @@ bool QProcessPrivate::startDetached(qint64 *pid) char **envp = nullptr; if (environment.d.constData()) { QProcessEnvironmentPrivate::MutexLocker locker(environment.d); - envp = _q_dupEnvironment(environment.d.constData()->hash, &envc); + envp = _q_dupEnvironment(environment.d.constData()->vars, &envc); } QByteArray tmp; diff --git a/src/corelib/io/qprocess_win.cpp b/src/corelib/io/qprocess_win.cpp index 0f6a61496d..2bbc4eddd0 100644 --- a/src/corelib/io/qprocess_win.cpp +++ b/src/corelib/io/qprocess_win.cpp @@ -75,7 +75,7 @@ QProcessEnvironment QProcessEnvironment::systemEnvironment() int nameLen = equal - entry; QString name = QString::fromWCharArray(entry, nameLen); QString value = QString::fromWCharArray(equal + 1, entryLen - nameLen - 1); - env.d->hash.insert(QProcessEnvironmentPrivate::Key(name), value); + env.d->vars.insert(QProcessEnvironmentPrivate::Key(name), value); } entry += entryLen + 1; } @@ -398,11 +398,11 @@ static QString qt_create_commandline(const QString &program, const QStringList & return args; } -static QByteArray qt_create_environment(const QProcessEnvironmentPrivate::Hash &environment) +static QByteArray qt_create_environment(const QProcessEnvironmentPrivate::Map &environment) { QByteArray envlist; if (!environment.isEmpty()) { - QProcessEnvironmentPrivate::Hash copy = environment; + QProcessEnvironmentPrivate::Map copy = environment; // add PATH if necessary (for DLL loading) QProcessEnvironmentPrivate::Key pathKey(QLatin1String("PATH")); @@ -421,8 +421,8 @@ static QByteArray qt_create_environment(const QProcessEnvironmentPrivate::Hash & } int pos = 0; - QProcessEnvironmentPrivate::Hash::ConstIterator it = copy.constBegin(), - end = copy.constEnd(); + auto it = copy.constBegin(); + const auto end = copy.constEnd(); static const wchar_t equal = L'='; static const wchar_t nul = L'\0'; @@ -507,7 +507,7 @@ void QProcessPrivate::startProcess() const QString args = qt_create_commandline(program, arguments, nativeArguments); QByteArray envlist; if (environment.d.constData()) - envlist = qt_create_environment(environment.d.constData()->hash); + envlist = qt_create_environment(environment.d.constData()->vars); #if defined QPROCESS_DEBUG qDebug("Creating process"); @@ -891,7 +891,7 @@ bool QProcessPrivate::startDetached(qint64 *pid) void *envPtr = nullptr; QByteArray envlist; if (environment.d.constData()) { - envlist = qt_create_environment(environment.d.constData()->hash); + envlist = qt_create_environment(environment.d.constData()->vars); envPtr = envlist.data(); } diff --git a/src/corelib/json/qjson_p.h b/src/corelib/json/qjson_p.h index 0c78fadfc7..c012ec2662 100644 --- a/src/corelib/json/qjson_p.h +++ b/src/corelib/json/qjson_p.h @@ -243,7 +243,7 @@ public: uint i = qFromLittleEndian(val); i <<= 32 - width - pos; int t = (int) i; - t >>= pos; + t >>= 32 - width; return t; } bool operator !() const { diff --git a/src/corelib/kernel/kernel.pri b/src/corelib/kernel/kernel.pri index 0e6ff17b8f..29bd5bbc6c 100644 --- a/src/corelib/kernel/kernel.pri +++ b/src/corelib/kernel/kernel.pri @@ -162,7 +162,7 @@ unix|integrity { QMAKE_USE_PRIVATE += glib } - qtConfig(clock-gettime): include($$QT_SOURCE_TREE/config.tests/unix/clock-gettime/clock-gettime.pri) + qtConfig(clock-gettime): QMAKE_USE_PRIVATE += librt !android { SOURCES += kernel/qsharedmemory_posix.cpp \ diff --git a/src/corelib/kernel/qjnihelpers.cpp b/src/corelib/kernel/qjnihelpers.cpp index 306c0845ef..dc60b0bc2b 100644 --- a/src/corelib/kernel/qjnihelpers.cpp +++ b/src/corelib/kernel/qjnihelpers.cpp @@ -80,13 +80,13 @@ class PermissionsResultClass : public QObject Q_OBJECT public: PermissionsResultClass(const QtAndroidPrivate::PermissionsResultFunc &func) : m_func(func) {} - Q_INVOKABLE void sendResult(const QtAndroidPrivate::PermissionsHash &result) { m_func(result); } + Q_INVOKABLE void sendResult(const QtAndroidPrivate::PermissionsHash &result) { m_func(result); delete this;} private: QtAndroidPrivate::PermissionsResultFunc m_func; }; -typedef QHash<int, QSharedPointer<PermissionsResultClass>> PendingPermissionRequestsHash; +typedef QHash<int, PermissionsResultClass*> PendingPermissionRequestsHash; Q_GLOBAL_STATIC(PendingPermissionRequestsHash, g_pendingPermissionRequests); static QBasicMutex g_pendingPermissionRequestsMutex; static int nextRequestCode() @@ -131,11 +131,11 @@ static void sendRequestPermissionsResult(JNIEnv *env, jobject /*obj*/, jint requ // show an error or something ? return; } - auto request = std::move(*it); + auto request = *it; g_pendingPermissionRequests->erase(it); locker.unlock(); - Qt::ConnectionType connection = QThread::currentThread() == request->thread() ? Qt::DirectConnection : Qt::BlockingQueuedConnection; + Qt::ConnectionType connection = QThread::currentThread() == request->thread() ? Qt::DirectConnection : Qt::QueuedConnection; QtAndroidPrivate::PermissionsHash hash; const int size = env->GetArrayLength(permissions); std::unique_ptr<jint[]> results(new jint[size]); @@ -147,7 +147,7 @@ static void sendRequestPermissionsResult(JNIEnv *env, jobject /*obj*/, jint requ QtAndroidPrivate::PermissionsResult::Denied; hash[permission] = value; } - QMetaObject::invokeMethod(request.data(), "sendResult", connection, Q_ARG(QtAndroidPrivate::PermissionsHash, hash)); + QMetaObject::invokeMethod(request, "sendResult", connection, Q_ARG(QtAndroidPrivate::PermissionsHash, hash)); } static jboolean dispatchGenericMotionEvent(JNIEnv *, jclass, jobject event) @@ -410,6 +410,7 @@ jint QtAndroidPrivate::initJNI(JavaVM *vm, JNIEnv *env) g_jNativeClass = static_cast<jclass>(env->NewGlobalRef(jQtNative)); env->DeleteLocalRef(jQtNative); + qRegisterMetaType<QtAndroidPrivate::PermissionsHash>(); return JNI_OK; } @@ -491,13 +492,13 @@ void QtAndroidPrivate::requestPermissions(JNIEnv *env, const QStringList &permis const int requestCode = nextRequestCode(); if (!directCall) { QMutexLocker locker(&g_pendingPermissionRequestsMutex); - (*g_pendingPermissionRequests)[requestCode] = QSharedPointer<PermissionsResultClass>::create(callbackFunc); + (*g_pendingPermissionRequests)[requestCode] = new PermissionsResultClass(callbackFunc); } runOnAndroidThread([permissions, callbackFunc, requestCode, directCall] { if (directCall) { QMutexLocker locker(&g_pendingPermissionRequestsMutex); - (*g_pendingPermissionRequests)[requestCode] = QSharedPointer<PermissionsResultClass>::create(callbackFunc); + (*g_pendingPermissionRequests)[requestCode] = new PermissionsResultClass(callbackFunc); } QJNIEnvironmentPrivate env; diff --git a/src/corelib/kernel/qjnihelpers_p.h b/src/corelib/kernel/qjnihelpers_p.h index 9fa47d5302..7562d2c6f1 100644 --- a/src/corelib/kernel/qjnihelpers_p.h +++ b/src/corelib/kernel/qjnihelpers_p.h @@ -52,8 +52,10 @@ // #include <jni.h> -#include <QtCore/private/qglobal_p.h> #include <functional> +#include <QtCore/private/qglobal_p.h> +#include <QHash> +#include <QMetaType> QT_BEGIN_NAMESPACE @@ -117,7 +119,7 @@ namespace QtAndroidPrivate Q_CORE_EXPORT void runOnAndroidThreadSync(const Runnable &runnable, JNIEnv *env, int timeoutMs = INT_MAX); Q_CORE_EXPORT void runOnUiThread(QRunnable *runnable, JNIEnv *env); Q_CORE_EXPORT void requestPermissions(JNIEnv *env, const QStringList &permissions, const PermissionsResultFunc &callbackFunc, bool directCall = false); - Q_CORE_EXPORT QHash<QString, PermissionsResult> requestPermissionsSync(JNIEnv *env, const QStringList &permissions, int timeoutMs = INT_MAX); + Q_CORE_EXPORT PermissionsHash requestPermissionsSync(JNIEnv *env, const QStringList &permissions, int timeoutMs = INT_MAX); Q_CORE_EXPORT PermissionsResult checkPermission(const QString &permission); Q_CORE_EXPORT bool shouldShowRequestPermissionRationale(const QString &permission); @@ -145,4 +147,6 @@ namespace QtAndroidPrivate QT_END_NAMESPACE +Q_DECLARE_METATYPE(QtAndroidPrivate::PermissionsHash) + #endif // QJNIHELPERS_H diff --git a/src/corelib/tools/qbytearray.h b/src/corelib/tools/qbytearray.h index 7c26351278..9a600ca366 100644 --- a/src/corelib/tools/qbytearray.h +++ b/src/corelib/tools/qbytearray.h @@ -249,7 +249,7 @@ public: void chop(int n); #if defined(Q_COMPILER_REF_QUALIFIERS) && !defined(QT_COMPILING_QSTRING_COMPAT_CPP) && !defined(Q_CLANG_QDOC) -# if defined(Q_CC_GNU) && !defined(Q_CC_CLANG) && !defined(Q_CC_INTEL) +# if defined(Q_CC_GNU) && !defined(Q_CC_CLANG) && !defined(Q_CC_INTEL) && !QT_HAS_CPP_ATTRIBUTE(nodiscard) // required due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61941 # pragma push_macro("Q_REQUIRED_RESULT") # undef Q_REQUIRED_RESULT diff --git a/src/corelib/tools/qcollator.cpp b/src/corelib/tools/qcollator.cpp index e34d16079f..f1e3d6652d 100644 --- a/src/corelib/tools/qcollator.cpp +++ b/src/corelib/tools/qcollator.cpp @@ -254,7 +254,7 @@ bool QCollator::numericMode() const The default is locale dependent. - \note This method is not currently supported on Apple platforms or if Qt is configured to not use ICU on Linux. + \note This method is not currently supported if Qt is configured to not use ICU on Linux. \sa ignorePunctuation() */ diff --git a/src/corelib/tools/qcollator_macx.cpp b/src/corelib/tools/qcollator_macx.cpp index d468272430..9aa59a81dc 100644 --- a/src/corelib/tools/qcollator_macx.cpp +++ b/src/corelib/tools/qcollator_macx.cpp @@ -66,7 +66,7 @@ void QCollatorPrivate::init() options |= kUCCollateCaseInsensitiveMask; if (numericMode) options |= kUCCollateDigitsAsNumberMask | kUCCollateDigitsOverrideMask; - if (ignorePunctuation) + if (!ignorePunctuation) options |= kUCCollatePunctuationSignificantMask; OSStatus status = UCCreateCollator( diff --git a/src/corelib/tools/qsimd.cpp b/src/corelib/tools/qsimd.cpp index d4edf459de..4c6f08c774 100644 --- a/src/corelib/tools/qsimd.cpp +++ b/src/corelib/tools/qsimd.cpp @@ -721,6 +721,14 @@ void qDumpCPUFeatures() printf("%s%s", features_string + features_indices[i], minFeature & (Q_UINT64_C(1) << i) ? "[required]" : ""); } + if ((features = (qCompilerCpuFeatures & ~features))) { + printf("\n!!!!!!!!!!!!!!!!!!!!\n!!! Missing required features:"); + for (int i = 0; i < features_count; ++i) { + if (features & (Q_UINT64_C(1) << i)) + printf("%s", features_string + features_indices[i]); + } + printf("\n!!! Applications will likely crash with \"Invalid Instruction\"\n!!!!!!!!!!!!!!!!!!!!"); + } puts(""); } diff --git a/src/corelib/tools/qsimd_p.h b/src/corelib/tools/qsimd_p.h index 44f6f1cc91..3ef29f4823 100644 --- a/src/corelib/tools/qsimd_p.h +++ b/src/corelib/tools/qsimd_p.h @@ -232,7 +232,7 @@ #if defined(__SSE4_2__) || (defined(QT_COMPILER_SUPPORTS_SSE4_2) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS)) #include <nmmintrin.h> -# if defined(__SSE4_2__) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS) +# if defined(__SSE4_2__) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS) && (defined(Q_CC_INTEL) || defined(Q_CC_MSVC)) // POPCNT instructions: // All processors that support SSE4.2 support POPCNT // (but neither MSVC nor the Intel compiler define this macro) @@ -245,7 +245,7 @@ // immintrin.h is the ultimate header, we don't need anything else after this #include <immintrin.h> -# if defined(__AVX__) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS) +# if defined(__AVX__) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS) && (defined(Q_CC_INTEL) || defined(Q_CC_MSVC)) // AES, PCLMULQDQ instructions: // All processors that support AVX support AES, PCLMULQDQ // (but neither MSVC nor the Intel compiler define these macros) @@ -253,7 +253,7 @@ # define __PCLMUL__ 1 # endif -# if defined(__AVX2__) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS) +# if defined(__AVX2__) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS) && (defined(Q_CC_INTEL) || defined(Q_CC_MSVC)) // F16C & RDRAND instructions: // All processors that support AVX2 support F16C & RDRAND: // (but neither MSVC nor the Intel compiler define these macros) diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h index 539abbe999..a3e100c568 100644 --- a/src/corelib/tools/qstring.h +++ b/src/corelib/tools/qstring.h @@ -407,7 +407,7 @@ public: Q_REQUIRED_RESULT QString rightJustified(int width, QChar fill = QLatin1Char(' '), bool trunc = false) const; #if defined(Q_COMPILER_REF_QUALIFIERS) && !defined(QT_COMPILING_QSTRING_COMPAT_CPP) && !defined(Q_CLANG_QDOC) -# if defined(Q_CC_GNU) && !defined(Q_CC_CLANG) && !defined(Q_CC_INTEL) +# if defined(Q_CC_GNU) && !defined(Q_CC_CLANG) && !defined(Q_CC_INTEL) && !QT_HAS_CPP_ATTRIBUTE(nodiscard) // required due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61941 # pragma push_macro("Q_REQUIRED_RESULT") # undef Q_REQUIRED_RESULT diff --git a/src/corelib/tools/qtimezone.cpp b/src/corelib/tools/qtimezone.cpp index 0b331be503..6a26993549 100644 --- a/src/corelib/tools/qtimezone.cpp +++ b/src/corelib/tools/qtimezone.cpp @@ -958,7 +958,13 @@ QDataStream &operator>>(QDataStream &ds, QTimeZone &tz) int country; QString comment; ds >> ianaId >> utcOffset >> name >> abbreviation >> country >> comment; - tz = QTimeZone(ianaId.toUtf8(), utcOffset, name, abbreviation, (QLocale::Country) country, comment); + // Try creating as a system timezone, which succeeds (producing a valid + // zone) iff ianaId is valid; we can then ignore the other data. + tz = QTimeZone(ianaId.toUtf8()); + // If not, then construct a custom timezone using all the saved values: + if (!tz.isValid()) + tz = QTimeZone(ianaId.toUtf8(), utcOffset, name, abbreviation, + QLocale::Country(country), comment); } else { tz = QTimeZone(ianaId.toUtf8()); } diff --git a/src/gui/configure.json b/src/gui/configure.json index 7c4ea48f2e..39216ae2b9 100644 --- a/src/gui/configure.json +++ b/src/gui/configure.json @@ -53,6 +53,12 @@ }, "libraries": { + "atspi": { + "label": "atspi", + "sources": [ + { "type": "pkgConfig", "args": "atspi-2" } + ] + }, "bcm_host": { "export": "", "sources": [ @@ -445,7 +451,7 @@ "features": { "accessibility-atspi-bridge": { "label": "ATSPI Bridge", - "condition": "features.accessibility && features.xcb && features.dbus", + "condition": "features.accessibility && features.xcb && features.dbus && config.atspi", "output": [ "privateFeature", "feature" ] }, "angle": { @@ -1181,7 +1187,6 @@ QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your pla "linuxfb", "vnc", "mirclient", { "type": "feature", - "message": "INTEGRITY framebuffer", "condition": "config.integrity", "args": "integrityfb" }, diff --git a/src/gui/image/qimagereader.cpp b/src/gui/image/qimagereader.cpp index cd7c95b166..7a5a630495 100644 --- a/src/gui/image/qimagereader.cpp +++ b/src/gui/image/qimagereader.cpp @@ -1119,7 +1119,7 @@ QList<QByteArray> QImageReader::supportedSubTypes() const if (!d->initHandler()) return QList<QByteArray>(); - if (!d->handler->supportsOption(QImageIOHandler::SupportedSubTypes)) + if (d->handler->supportsOption(QImageIOHandler::SupportedSubTypes)) return d->handler->option(QImageIOHandler::SupportedSubTypes).value< QList<QByteArray> >(); return QList<QByteArray>(); } diff --git a/src/gui/kernel/qclipboard.cpp b/src/gui/kernel/qclipboard.cpp index 399216d27c..771f0fe93d 100644 --- a/src/gui/kernel/qclipboard.cpp +++ b/src/gui/kernel/qclipboard.cpp @@ -137,6 +137,17 @@ QT_BEGIN_NAMESPACE \endlist + \section1 Notes for Universal Windows Platform Users + + \list + + \li The Universal Windows Platform only allows to query the + clipboard in case the application is active and an application + window has focus. Accessing the clipboard data when in background + will fail due to access denial. + + \endlist + \sa QGuiApplication */ diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp index b15ea78f7a..6d9f0b0417 100644 --- a/src/gui/kernel/qkeysequence.cpp +++ b/src/gui/kernel/qkeysequence.cpp @@ -1158,7 +1158,7 @@ int QKeySequencePrivate::decodeString(const QString &str, QKeySequence::Sequence lastI = i + 1; } - int p = accel.lastIndexOf(QLatin1Char('+'), str.length() - 2); // -2 so that Ctrl++ works + int p = accel.lastIndexOf(QLatin1Char('+'), accel.length() - 2); // -2 so that Ctrl++ works QStringRef accelRef(&accel); if(p > 0) accelRef = accelRef.mid(p + 1); diff --git a/src/gui/painting/qplatformbackingstore.cpp b/src/gui/painting/qplatformbackingstore.cpp index e006fad437..336cb88444 100644 --- a/src/gui/painting/qplatformbackingstore.cpp +++ b/src/gui/painting/qplatformbackingstore.cpp @@ -254,6 +254,11 @@ static inline QRect deviceRect(const QRect &rect, QWindow *window) return deviceRect; } +static inline QPoint deviceOffset(const QPoint &pt, QWindow *window) +{ + return pt * window->devicePixelRatio(); +} + static QRegion deviceRegion(const QRegion ®ion, QWindow *window, const QPoint &offset) { if (offset.isNull() && window->devicePixelRatio() <= 1) @@ -348,6 +353,7 @@ void QPlatformBackingStore::composeAndFlush(QWindow *window, const QRegion ®i d_ptr->blitter->bind(); const QRect deviceWindowRect = deviceRect(QRect(QPoint(), window->size()), window); + const QPoint deviceWindowOffset = deviceOffset(offset, window); bool canUseSrgb = false; // If there are any sRGB textures in the list, check if the destination @@ -422,7 +428,7 @@ void QPlatformBackingStore::composeAndFlush(QWindow *window, const QRegion ®i d_ptr->blitter->setRedBlueSwizzle(true); // The backingstore is for the entire tlw. // In case of native children offset tells the position relative to the tlw. - const QRect srcRect = toBottomLeftRect(deviceWindowRect.translated(offset), d_ptr->textureSize.height()); + const QRect srcRect = toBottomLeftRect(deviceWindowRect.translated(deviceWindowOffset), d_ptr->textureSize.height()); const QMatrix3x3 source = QOpenGLTextureBlitter::sourceTransform(srcRect, d_ptr->textureSize, origin); diff --git a/src/network/kernel/qhostaddress.cpp b/src/network/kernel/qhostaddress.cpp index b8c0584a62..1b7061d050 100644 --- a/src/network/kernel/qhostaddress.cpp +++ b/src/network/kernel/qhostaddress.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2017 The Qt Company Ltd. ** Copyright (C) 2016 Intel Corporation. ** Contact: https://www.qt.io/licensing/ ** @@ -393,7 +393,7 @@ void QNetmaskAddress::setPrefixLength(QAbstractSocket::NetworkLayerProtocol prot /*! \enum QHostAddress::SpecialAddress - \value Null The null address object. Equivalent to QHostAddress(). + \value Null The null address object. Equivalent to QHostAddress(). See also QHostAddress::isNull(). \value LocalHost The IPv4 localhost address. Equivalent to QHostAddress("127.0.0.1"). \value LocalHostIPv6 The IPv6 localhost address. Equivalent to QHostAddress("::1"). \value Broadcast The IPv4 broadcast address. Equivalent to QHostAddress("255.255.255.255"). @@ -606,6 +606,14 @@ QHostAddress &QHostAddress::operator=(SpecialAddress address) } /*! + \fn void QHostAddress::swap(QHostAddress &other) + \since 5.6 + + Swaps this host address with \a other. This operation is very fast + and never fails. +*/ + +/*! \fn bool QHostAddress::operator!=(const QHostAddress &other) const \since 4.2 @@ -621,7 +629,9 @@ QHostAddress &QHostAddress::operator=(SpecialAddress address) */ /*! - Sets the host address to 0.0.0.0. + Sets the host address to null. + + \sa QHostAddress::Null */ void QHostAddress::clear() { @@ -982,9 +992,11 @@ bool QHostAddress::operator ==(SpecialAddress other) const } /*! - Returns \c true if this host address is null (INADDR_ANY or in6addr_any). - The default constructor creates a null address, and that address is - not valid for any host or interface. + Returns \c true if this host address is not valid for any host or interface. + + The default constructor creates a null address. + + \sa QHostAddress::Null */ bool QHostAddress::isNull() const { diff --git a/src/network/ssl/qsslsocket_mac.cpp b/src/network/ssl/qsslsocket_mac.cpp index 0a9588deea..4216e2a16a 100644 --- a/src/network/ssl/qsslsocket_mac.cpp +++ b/src/network/ssl/qsslsocket_mac.cpp @@ -1223,8 +1223,10 @@ bool QSslSocketBackendPrivate::verifyPeerTrust() QCFType<CFMutableArrayRef> certArray = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks); for (const QSslCertificate &cert : qAsConst(configuration.caCertificates)) { QCFType<CFDataRef> certData = cert.d->derData.toCFData(); - QCFType<SecCertificateRef> certRef = SecCertificateCreateWithData(NULL, certData); - CFArrayAppendValue(certArray, certRef); + if (QCFType<SecCertificateRef> secRef = SecCertificateCreateWithData(NULL, certData)) + CFArrayAppendValue(certArray, secRef); + else + qCWarning(lcSsl, "Failed to create SecCertificate from QSslCertificate"); } SecTrustSetAnchorCertificates(trust, certArray); diff --git a/src/3rdparty/atspi2/xml/Bus.xml b/src/platformsupport/linuxaccessibility/dbusxml/Bus.xml index 5a33e335a1..5a33e335a1 100644 --- a/src/3rdparty/atspi2/xml/Bus.xml +++ b/src/platformsupport/linuxaccessibility/dbusxml/Bus.xml diff --git a/src/3rdparty/atspi2/xml/Cache.xml b/src/platformsupport/linuxaccessibility/dbusxml/Cache.xml index 01c52810ac..01c52810ac 100644 --- a/src/3rdparty/atspi2/xml/Cache.xml +++ b/src/platformsupport/linuxaccessibility/dbusxml/Cache.xml diff --git a/src/3rdparty/atspi2/xml/DeviceEventController.xml b/src/platformsupport/linuxaccessibility/dbusxml/DeviceEventController.xml index d4c26ef7e7..d4c26ef7e7 100644 --- a/src/3rdparty/atspi2/xml/DeviceEventController.xml +++ b/src/platformsupport/linuxaccessibility/dbusxml/DeviceEventController.xml diff --git a/src/3rdparty/atspi2/xml/Socket.xml b/src/platformsupport/linuxaccessibility/dbusxml/Socket.xml index 75ec99f994..75ec99f994 100644 --- a/src/3rdparty/atspi2/xml/Socket.xml +++ b/src/platformsupport/linuxaccessibility/dbusxml/Socket.xml diff --git a/src/platformsupport/linuxaccessibility/linuxaccessibility.pro b/src/platformsupport/linuxaccessibility/linuxaccessibility.pro index 6d68909047..d6689c0fa3 100644 --- a/src/platformsupport/linuxaccessibility/linuxaccessibility.pro +++ b/src/platformsupport/linuxaccessibility/linuxaccessibility.pro @@ -7,7 +7,13 @@ CONFIG += static internal_module DEFINES += QT_NO_CAST_FROM_ASCII PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h -include(../../3rdparty/atspi2/atspi2.pri) +DBUS_ADAPTORS = $$PWD/dbusxml/Cache.xml $$PWD/dbusxml/DeviceEventController.xml +QDBUSXML2CPP_ADAPTOR_HEADER_FLAGS = -i struct_marshallers_p.h + +DBUS_INTERFACES = $$PWD/dbusxml/Socket.xml $$PWD/dbusxml/Bus.xml +QDBUSXML2CPP_INTERFACE_HEADER_FLAGS = -i struct_marshallers_p.h + +QMAKE_USE += atspi/nolink HEADERS += \ application_p.h \ diff --git a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp index 30efa12124..54daa2c2de 100644 --- a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp +++ b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp @@ -358,6 +358,14 @@ void QKdeThemePrivate::refresh() resources.fonts[QPlatformTheme::FixedFont] = fixedFont; } + if (QFont *menuFont = kdeFont(readKdeSetting(QStringLiteral("menuFont"), kdeDirs, kdeVersion, kdeSettings))) { + resources.fonts[QPlatformTheme::MenuFont] = menuFont; + resources.fonts[QPlatformTheme::MenuBarFont] = new QFont(*menuFont); + } + + if (QFont *toolBarFont = kdeFont(readKdeSetting(QStringLiteral("toolBarFont"), kdeDirs, kdeVersion, kdeSettings))) + resources.fonts[QPlatformTheme::ToolButtonFont] = toolBarFont; + qDeleteAll(kdeSettings); } diff --git a/src/plugins/platforms/android/androidjniinput.cpp b/src/plugins/platforms/android/androidjniinput.cpp index 8372bf6484..32630003d1 100644 --- a/src/plugins/platforms/android/androidjniinput.cpp +++ b/src/plugins/platforms/android/androidjniinput.cpp @@ -121,11 +121,11 @@ namespace QtAndroidInput return m_softwareKeyboardRect; } - void updateHandles(int mode, QPoint cursor, QPoint anchor) + void updateHandles(int mode, QPoint cursor, QPoint anchor, bool rtl) { - QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), "updateHandles", "(IIIII)V", + QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), "updateHandles", "(IIIIIZ)V", mode, cursor.x(), cursor.y(), anchor.x(), - anchor.y()); + anchor.y(), rtl); } static void mouseDown(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y) @@ -173,6 +173,25 @@ namespace QtAndroidInput Qt::MouseButtons(Qt::LeftButton)); } + static void mouseWheel(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y, jfloat hdelta, jfloat vdelta) + { + if (m_ignoreMouseEvents) + return; + + QPoint globalPos(x,y); + QWindow *tlw = m_mouseGrabber.data(); + if (!tlw) + tlw = topLevelWindowAt(globalPos); + QPoint localPos = tlw ? (globalPos-tlw->position()) : globalPos; + QPoint angleDelta(hdelta * 120, vdelta * 120); + + QWindowSystemInterface::handleWheelEvent(tlw, + localPos, + globalPos, + QPoint(), + angleDelta); + } + static void longPress(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y) { QAndroidInputContext *inputContext = QAndroidInputContext::androidInputContext(); @@ -824,6 +843,7 @@ namespace QtAndroidInput {"mouseDown", "(III)V", (void *)mouseDown}, {"mouseUp", "(III)V", (void *)mouseUp}, {"mouseMove", "(III)V", (void *)mouseMove}, + {"mouseWheel", "(IIIFF)V", (void *)mouseWheel}, {"longPress", "(III)V", (void *)longPress}, {"isTabletEventSupported", "()Z", (void *)isTabletEventSupported}, {"tabletEvent", "(IIJIIIFFF)V", (void *)tabletEvent}, diff --git a/src/plugins/platforms/android/androidjniinput.h b/src/plugins/platforms/android/androidjniinput.h index af18a96dc1..c09b426f49 100644 --- a/src/plugins/platforms/android/androidjniinput.h +++ b/src/plugins/platforms/android/androidjniinput.h @@ -58,7 +58,7 @@ namespace QtAndroidInput // Software keyboard support // cursor/selection handles - void updateHandles(int handleCount, QPoint cursor = QPoint(), QPoint anchor = QPoint()); + void updateHandles(int handleCount, QPoint cursor = QPoint(), QPoint anchor = QPoint(), bool rtl = false); bool registerNatives(JNIEnv *env); } diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp index e47dd91a3e..06bca0354d 100644 --- a/src/plugins/platforms/android/androidjnimain.cpp +++ b/src/plugins/platforms/android/androidjnimain.cpp @@ -102,13 +102,6 @@ static QList<QByteArray> m_applicationParams; pthread_t m_qtAppThread = 0; static sem_t m_exitSemaphore, m_terminateSemaphore; -struct SurfaceData -{ - ~SurfaceData() { delete surface; } - QJNIObjectPrivate *surface = nullptr; - AndroidSurfaceClient *client = nullptr; -}; - QHash<int, AndroidSurfaceClient *> m_surfaces; static QMutex m_surfacesMutex; @@ -142,6 +135,7 @@ namespace QtAndroid // flush the pending state if necessary. if (m_androidPlatformIntegration) { flushPendingApplicationState(); + m_androidPlatformIntegration->flushPendingUpdates(); } else { QMutexLocker locker(&m_pendingAppStateMtx); m_pendingApplicationState = -1; @@ -627,6 +621,7 @@ static void setDisplayMetrics(JNIEnv */*env*/, jclass /*clazz*/, m_scaledDensity = scaledDensity; m_density = density; + QMutexLocker lock(&m_surfacesMutex); if (!m_androidPlatformIntegration) { QAndroidPlatformIntegration::setDefaultDisplayMetrics(desktopWidthPixels, desktopHeightPixels, @@ -691,7 +686,6 @@ static void updateApplicationState(JNIEnv */*env*/, jobject /*thiz*/, jint state // Don't send timers and sockets events anymore if we are going to hide all windows QAndroidEventDispatcherStopper::instance()->goingToStop(true); - QCoreApplication::processEvents(); QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationState(state)); if (state == Qt::ApplicationSuspended) QAndroidEventDispatcherStopper::instance()->stopAll(); diff --git a/src/plugins/platforms/android/qandroidinputcontext.cpp b/src/plugins/platforms/android/qandroidinputcontext.cpp index 4ab8a9d060..279cb338f4 100644 --- a/src/plugins/platforms/android/qandroidinputcontext.cpp +++ b/src/plugins/platforms/android/qandroidinputcontext.cpp @@ -537,7 +537,7 @@ void QAndroidInputContext::updateSelectionHandles() ? QHighDpiScaling::factor(window) : QHighDpiScaling::factor(QtAndroid::androidPlatformIntegration()->screen()); - QInputMethodQueryEvent query(Qt::ImCursorPosition | Qt::ImAnchorPosition | Qt::ImEnabled); + QInputMethodQueryEvent query(Qt::ImCursorPosition | Qt::ImAnchorPosition | Qt::ImEnabled | Qt::ImCurrentSelection); QCoreApplication::sendEvent(m_focusObject, &query); int cpos = query.value(Qt::ImCursorPosition).toInt(); int anchor = query.value(Qt::ImAnchorPosition).toInt(); @@ -563,7 +563,8 @@ void QAndroidInputContext::updateSelectionHandles() QPoint leftPoint(leftRect.bottomLeft().toPoint() * pixelDensity); QPoint righPoint(rightRect.bottomRight().toPoint() * pixelDensity); - QtAndroidInput::updateHandles(CursorHandleShowSelection, leftPoint, righPoint); + QtAndroidInput::updateHandles(CursorHandleShowSelection, leftPoint, righPoint, + query.value(Qt::ImCurrentSelection).toString().isRightToLeft()); if (m_cursorHandleShown == CursorHandleShowPopup) { // make sure the popup does not reappear when the selection menu closes diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp index ec09965f45..3088546148 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.cpp +++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp @@ -433,6 +433,14 @@ void QAndroidPlatformIntegration::setScreenOrientation(Qt::ScreenOrientation cur m_nativeOrientation = nativeOrientation; } +void QAndroidPlatformIntegration::flushPendingUpdates() +{ + m_primaryScreen->setPhysicalSize(QSize(m_defaultPhysicalSizeWidth, + m_defaultPhysicalSizeHeight)); + m_primaryScreen->setSize(QSize(m_defaultScreenWidth, m_defaultScreenHeight)); + m_primaryScreen->setAvailableGeometry(QRect(0, 0, m_defaultGeometryWidth, m_defaultGeometryHeight)); +} + #ifndef QT_NO_ACCESSIBILITY QPlatformAccessibility *QAndroidPlatformIntegration::accessibility() const { diff --git a/src/plugins/platforms/android/qandroidplatformintegration.h b/src/plugins/platforms/android/qandroidplatformintegration.h index 047eaf122e..c795c499bc 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.h +++ b/src/plugins/platforms/android/qandroidplatformintegration.h @@ -129,6 +129,8 @@ public: QTouchDevice *touchDevice() const { return m_touchDevice; } void setTouchDevice(QTouchDevice *touchDevice) { m_touchDevice = touchDevice; } + void flushPendingUpdates(); + #if QT_CONFIG(vulkan) QPlatformVulkanInstance *createPlatformVulkanInstance(QVulkanInstance *instance) const override; #endif diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm index f68d34ff9d..e42fbad00e 100644 --- a/src/plugins/platforms/cocoa/qnsview.mm +++ b/src/plugins/platforms/cocoa/qnsview.mm @@ -171,7 +171,10 @@ static QTouchDevice *touchDevice = 0; - (void)dealloc { CGImageRelease(m_maskImage); - [m_trackingArea release]; + if (m_trackingArea) { + [self removeTrackingArea:m_trackingArea]; + [m_trackingArea release]; + } m_maskImage = 0; [m_inputSource release]; [[NSNotificationCenter defaultCenter] removeObserver:self]; diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp index 8a34f6974f..643ae877d0 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp @@ -89,7 +89,8 @@ public: if (FAILED(hr)) { success = false; - qWarning("%s: EndDraw failed: %#x, tag1: %lld, tag2: %lld", __FUNCTION__, hr, tag1, tag2); + qWarning("%s: EndDraw failed: %#lx, tag1: %lld, tag2: %lld", + __FUNCTION__, long(hr), tag1, tag2); } } diff --git a/src/plugins/platforms/windows/accessible/iaccessible2.cpp b/src/plugins/platforms/windows/accessible/iaccessible2.cpp index d9c3d6ac14..9239facb0c 100644 --- a/src/plugins/platforms/windows/accessible/iaccessible2.cpp +++ b/src/plugins/platforms/windows/accessible/iaccessible2.cpp @@ -638,7 +638,7 @@ HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_background(IA2Color *backgr /**************************************************************\ * IAccessibleEditableText * **************************************************************/ -#ifndef QT_NO_CLIPBOARD +#if QT_CONFIG(clipboard) /*! \internal @@ -681,7 +681,7 @@ HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::copyText(long startOffset, long { QAccessibleInterface *accessible = accessibleInterface(); accessibleDebugClientCalls(accessible); -#ifndef QT_NO_CLIPBOARD +#if QT_CONFIG(clipboard) const QString t = textForRange(startOffset, endOffset); QGuiApplication::clipboard()->setText(t); return S_OK; @@ -717,7 +717,7 @@ HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::cutText(long startOffset, long { QAccessibleInterface *accessible = accessibleInterface(); accessibleDebugClientCalls(accessible); -#ifndef QT_NO_CLIPBOARD +#if QT_CONFIG(clipboard) const QString t = textForRange(startOffset, endOffset); if (QAccessibleEditableTextInterface *editableTextIface = accessible->editableTextInterface()) editableTextIface->deleteText(startOffset, endOffset); @@ -734,7 +734,7 @@ HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::pasteText(long offset) { QAccessibleInterface *accessible = accessibleInterface(); accessibleDebugClientCalls(accessible); -#ifndef QT_NO_CLIPBOARD +#if QT_CONFIG(clipboard) const QString txt = QGuiApplication::clipboard()->text(); if (QAccessibleEditableTextInterface *editableTextIface = accessible->editableTextInterface()) editableTextIface->insertText(offset, txt); diff --git a/src/plugins/platforms/windows/qtwindowsglobal.h b/src/plugins/platforms/windows/qtwindowsglobal.h index 34fe114d0e..d9c342be27 100644 --- a/src/plugins/platforms/windows/qtwindowsglobal.h +++ b/src/plugins/platforms/windows/qtwindowsglobal.h @@ -263,12 +263,10 @@ inline QtWindows::WindowsEventType windowsEventType(UINT message, WPARAM wParamI if ((wParamIn & 0xfff0) == SC_CONTEXTHELP) return QtWindows::WhatsThisEvent; break; -#if !defined(QT_NO_SESSIONMANAGER) case WM_QUERYENDSESSION: return QtWindows::QueryEndSessionApplicationEvent; case WM_ENDSESSION: return QtWindows::EndSessionApplicationEvent; -#endif #if defined(WM_APPCOMMAND) case WM_APPCOMMAND: return QtWindows::AppCommandEvent; diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp index 7f5f9d0768..ddd779bbac 100644 --- a/src/plugins/platforms/windows/qwindowscontext.cpp +++ b/src/plugins/platforms/windows/qwindowscontext.cpp @@ -53,7 +53,7 @@ #ifndef QT_NO_ACCESSIBILITY # include "accessible/qwindowsaccessibility.h" #endif -#if !defined(QT_NO_SESSIONMANAGER) +#if QT_CONFIG(sessionmanager) # include <private/qsessionmanager_p.h> # include "qwindowssessionmanager.h" #endif @@ -249,7 +249,7 @@ struct QWindowsContextPrivate { QWindowsMimeConverter m_mimeConverter; QWindowsScreenManager m_screenManager; QSharedPointer<QWindowCreationContext> m_creationContext; -#if !defined(QT_NO_TABLETEVENT) +#if QT_CONFIG(tabletevent) QScopedPointer<QWindowsTabletSupport> m_tabletSupport; #endif const HRESULT m_oleInitializeResult; @@ -290,7 +290,7 @@ QWindowsContext::QWindowsContext() : const QByteArray bv = qgetenv("QT_QPA_VERBOSE"); if (!bv.isEmpty()) QLoggingCategory::setFilterRules(QString::fromLocal8Bit(bv)); -#if !defined(QT_NO_TABLETEVENT) +#if QT_CONFIG(tabletevent) d->m_tabletSupport.reset(QWindowsTabletSupport::create()); qCDebug(lcQpaTablet) << "Tablet support: " << (d->m_tabletSupport.isNull() ? QStringLiteral("None") : d->m_tabletSupport->description()); #endif @@ -298,7 +298,7 @@ QWindowsContext::QWindowsContext() : QWindowsContext::~QWindowsContext() { -#if !defined(QT_NO_TABLETEVENT) +#if QT_CONFIG(tabletevent) d->m_tabletSupport.reset(); // Destroy internal window before unregistering classes. #endif unregisterWindowClasses(); @@ -346,7 +346,7 @@ bool QWindowsContext::initTouch(unsigned integrationOptions) void QWindowsContext::setTabletAbsoluteRange(int a) { -#if !defined(QT_NO_TABLETEVENT) +#if QT_CONFIG(tabletevent) if (!d->m_tabletSupport.isNull()) d->m_tabletSupport->setAbsoluteRange(a); #else @@ -720,7 +720,7 @@ QWindowsScreenManager &QWindowsContext::screenManager() QWindowsTabletSupport *QWindowsContext::tabletSupport() const { -#if !defined(QT_NO_TABLETEVENT) +#if QT_CONFIG(tabletevent) return d->m_tabletSupport.data(); #else return 0; @@ -1128,7 +1128,7 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message, platformWindow->clearFlag(QWindowsWindow::WithinDpiChanged); return true; } -#if !defined(QT_NO_SESSIONMANAGER) +#if QT_CONFIG(sessionmanager) case QtWindows::QueryEndSessionApplicationEvent: { QWindowsSessionManager *sessionManager = platformSessionManager(); if (sessionManager->isActive()) { // bogus message from windows diff --git a/src/plugins/platforms/windows/qwindowscursor.cpp b/src/plugins/platforms/windows/qwindowscursor.cpp index b9c320fd8f..e7ba08b719 100644 --- a/src/plugins/platforms/windows/qwindowscursor.cpp +++ b/src/plugins/platforms/windows/qwindowscursor.cpp @@ -56,7 +56,7 @@ static bool initResources() { -#if !defined (QT_NO_IMAGEFORMAT_PNG) +#if QT_CONFIG(imageformat_png) Q_INIT_RESOURCE(cursors); #endif return true; @@ -203,7 +203,7 @@ static QSize systemCursorSize(const QPlatformScreen *screen = Q_NULLPTR) return primaryScreenCursorSize; } -#if defined (QT_NO_IMAGEFORMAT_PNG) +#if !QT_CONFIG(imageformat_png) static inline QSize standardCursorSize() { return QSize(32, 32); } diff --git a/src/plugins/platforms/windows/qwindowsdrag.cpp b/src/plugins/platforms/windows/qwindowsdrag.cpp index a326ccac3e..857db7a65c 100644 --- a/src/plugins/platforms/windows/qwindowsdrag.cpp +++ b/src/plugins/platforms/windows/qwindowsdrag.cpp @@ -40,7 +40,7 @@ #include "qwindowsdrag.h" #include "qwindowscontext.h" #include "qwindowsscreen.h" -#ifndef QT_NO_CLIPBOARD +#if QT_CONFIG(clipboard) # include "qwindowsclipboard.h" #endif #include "qwindowsintegration.h" diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp index eb7ad5ecd8..a9143a3052 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.cpp +++ b/src/plugins/platforms/windows/qwindowsintegration.cpp @@ -51,9 +51,9 @@ #ifndef QT_NO_FREETYPE # include <QtFontDatabaseSupport/private/qwindowsfontdatabase_ft_p.h> #endif -#ifndef QT_NO_CLIPBOARD +#if QT_CONFIG(clipboard) # include "qwindowsclipboard.h" -# ifndef QT_NO_DRAGANDDROP +# if QT_CONFIG(draganddrop) # include "qwindowsdrag.h" # endif #endif @@ -65,7 +65,7 @@ #include <qpa/qplatformnativeinterface.h> #include <qpa/qwindowsysteminterface.h> -#ifndef QT_NO_SESSIONMANAGER +#if QT_CONFIG(sessionmanager) # include "qwindowssessionmanager.h" #endif #include <QtGui/qtouchdevice.h> @@ -139,9 +139,9 @@ struct QWindowsIntegrationPrivate unsigned m_options = 0; QWindowsContext m_context; QPlatformFontDatabase *m_fontDatabase = nullptr; -#ifndef QT_NO_CLIPBOARD +#if QT_CONFIG(clipboard) QWindowsClipboard m_clipboard; -# ifndef QT_NO_DRAGANDDROP +# if QT_CONFIG(draganddrop) QWindowsDrag m_drag; # endif #endif @@ -258,7 +258,7 @@ QWindowsIntegration::QWindowsIntegration(const QStringList ¶mList) : d(new QWindowsIntegrationPrivate(paramList)) { m_instance = this; -#ifndef QT_NO_CLIPBOARD +#if QT_CONFIG(clipboard) d->m_clipboard.registerViewer(); #endif d->m_context.screenManager().handleScreenChanges(); @@ -557,12 +557,12 @@ QList<int> QWindowsIntegration::possibleKeys(const QKeyEvent *e) const return d->m_context.possibleKeys(e); } -#ifndef QT_NO_CLIPBOARD +#if QT_CONFIG(clipboard) QPlatformClipboard * QWindowsIntegration::clipboard() const { return &d->m_clipboard; } -# ifndef QT_NO_DRAGANDDROP +# if QT_CONFIG(draganddrop) QPlatformDrag *QWindowsIntegration::drag() const { return &d->m_drag; @@ -587,7 +587,7 @@ unsigned QWindowsIntegration::options() const return d->m_options; } -#if !defined(QT_NO_SESSIONMANAGER) +#if QT_CONFIG(sessionmanager) QPlatformSessionManager *QWindowsIntegration::createPlatformSessionManager(const QString &id, const QString &key) const { return new QWindowsSessionManager(id, key); diff --git a/src/plugins/platforms/windows/qwindowsintegration.h b/src/plugins/platforms/windows/qwindowsintegration.h index 11320332bb..23f3d9ef4e 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.h +++ b/src/plugins/platforms/windows/qwindowsintegration.h @@ -83,9 +83,9 @@ public: #endif QAbstractEventDispatcher *createEventDispatcher() const override; void initialize() override; -#ifndef QT_NO_CLIPBOARD +#if QT_CONFIG(clipboard) QPlatformClipboard *clipboard() const override; -# ifndef QT_NO_DRAGANDDROP +# if QT_CONFIG(draganddrop) QPlatformDrag *drag() const override; # endif #endif // !QT_NO_CLIPBOARD @@ -111,7 +111,7 @@ public: void beep() const override; -#if !defined(QT_NO_SESSIONMANAGER) +#if QT_CONFIG(sessionmanager) QPlatformSessionManager *createPlatformSessionManager(const QString &id, const QString &key) const override; #endif diff --git a/src/plugins/platforms/windows/qwindowsmime.cpp b/src/plugins/platforms/windows/qwindowsmime.cpp index eb53dc921b..b892f1610d 100644 --- a/src/plugins/platforms/windows/qwindowsmime.cpp +++ b/src/plugins/platforms/windows/qwindowsmime.cpp @@ -1252,7 +1252,7 @@ bool QBuiltInMimes::convertFromMime(const FORMATETC &formatetc, const QMimeData r[byteLength+1] = 0; data = r; } else { -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) data = QInternalMimeData::renderDataHelper(outFormats.value(getCf(formatetc)), mimeData); #endif //QT_NO_DRAGANDDROP } @@ -1352,7 +1352,7 @@ QLastResortMimes::QLastResortMimes() bool QLastResortMimes::canConvertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData) const { // really check -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) return formatetc.tymed & TYMED_HGLOBAL && (formats.contains(formatetc.cfFormat) && QInternalMimeData::hasFormatHelper(formats.value(formatetc.cfFormat), mimeData)); @@ -1366,7 +1366,7 @@ bool QLastResortMimes::canConvertFromMime(const FORMATETC &formatetc, const QMim bool QLastResortMimes::convertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData, STGMEDIUM * pmedium) const { -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) return canConvertFromMime(formatetc, mimeData) && setData(QInternalMimeData::renderDataHelper(formats.value(getCf(formatetc)), mimeData), pmedium); #else @@ -1467,7 +1467,7 @@ QString QLastResortMimes::mimeForFormat(const FORMATETC &formatetc) const const QString clipFormat = QWindowsMimeConverter::clipboardFormatName(getCf(formatetc)); if (!clipFormat.isEmpty()) { -#ifndef QT_NO_DRAGANDDROP +#if QT_CONFIG(draganddrop) if (QInternalMimeData::canReadData(clipFormat)) format = clipFormat; else if((formatetc.cfFormat >= 0xC000)){ diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp index 9ac31c45df..1bd7b06c8e 100644 --- a/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/src/plugins/platforms/windows/qwindowswindow.cpp @@ -1195,7 +1195,7 @@ void QWindowsWindow::setDropSiteEnabled(bool dropEnabled) if (isDropSiteEnabled() == dropEnabled) return; qCDebug(lcQpaMime) << __FUNCTION__ << window() << dropEnabled; -#if !defined(QT_NO_CLIPBOARD) && !defined(QT_NO_DRAGANDDROP) +#if QT_CONFIG(clipboard) && QT_CONFIG(draganddrop) if (dropEnabled) { Q_ASSERT(m_data.hwnd); m_dropTarget = new QWindowsOleDropTarget(window()); diff --git a/src/plugins/platforms/windows/windows.pri b/src/plugins/platforms/windows/windows.pri index 933cd72a67..3ecd164c74 100644 --- a/src/plugins/platforms/windows/windows.pri +++ b/src/plugins/platforms/windows/windows.pri @@ -82,33 +82,28 @@ qtConfig(vulkan) { HEADERS += $$PWD/qwindowsvulkaninstance.h } -!contains( DEFINES, QT_NO_CLIPBOARD ) { +qtConfig(clipboard) { SOURCES += $$PWD/qwindowsclipboard.cpp HEADERS += $$PWD/qwindowsclipboard.h -} - -# drag and drop on windows only works if a clipboard is available -!contains( DEFINES, QT_NO_DRAGANDDROP ) { - !win32:SOURCES += $$PWD/qwindowsdrag.cpp - !win32:HEADERS += $$PWD/qwindowsdrag.h - win32:!contains( DEFINES, QT_NO_CLIPBOARD ) { + # drag and drop on windows only works if a clipboard is available + qtConfig(draganddrop) { HEADERS += $$PWD/qwindowsdrag.h SOURCES += $$PWD/qwindowsdrag.cpp } } -!contains( DEFINES, QT_NO_TABLETEVENT ) { +qtConfig(tabletevent) { INCLUDEPATH += $$QT_SOURCE_TREE/src/3rdparty/wintab HEADERS += $$PWD/qwindowstabletsupport.h SOURCES += $$PWD/qwindowstabletsupport.cpp } -!contains( DEFINES, QT_NO_SESSIONMANAGER ) { +qtConfig(sessionmanager) { SOURCES += $$PWD/qwindowssessionmanager.cpp HEADERS += $$PWD/qwindowssessionmanager.h } -!contains( DEFINES, QT_NO_IMAGEFORMAT_PNG ):RESOURCES += $$PWD/cursors.qrc +qtConfig(imageformat_png):RESOURCES += $$PWD/cursors.qrc RESOURCES += $$PWD/openglblacklists.qrc diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp index da7ce9bb17..94111559b4 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.cpp +++ b/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -249,25 +249,9 @@ QPlatformWindow *QXcbIntegration::createPlatformWindow(QWindow *window) const return xcbWindow; } -class QXcbForeignWindow : public QXcbWindow -{ -public: - QXcbForeignWindow(QWindow *window, WId nativeHandle) - : QXcbWindow(window) { m_window = nativeHandle; } - ~QXcbForeignWindow() {} - bool isForeignWindow() const override { return true; } - -protected: - // No-ops - void create() override {} - void destroy() override {} -}; - QPlatformWindow *QXcbIntegration::createForeignWindow(QWindow *window, WId nativeHandle) const { - QXcbWindow *xcbWindow = new QXcbForeignWindow(window, nativeHandle); - xcbWindow->create(); - return xcbWindow; + return new QXcbForeignWindow(window, nativeHandle); } #ifndef QT_NO_OPENGL diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index 0a4e3a5107..9921ed5da5 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -616,13 +616,17 @@ QXcbWindow::~QXcbWindow() } destroy(); +} - if (isForeignWindow()) { - if (connection()->mouseGrabber() == this) - connection()->setMouseGrabber(Q_NULLPTR); - if (connection()->mousePressWindow() == this) - connection()->setMousePressWindow(Q_NULLPTR); - } +QXcbForeignWindow::~QXcbForeignWindow() +{ + // Clear window so that destroy() does not affect it + m_window = 0; + + if (connection()->mouseGrabber() == this) + connection()->setMouseGrabber(nullptr); + if (connection()->mousePressWindow() == this) + connection()->setMousePressWindow(nullptr); } void QXcbWindow::destroy() diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h index 5e09865d33..b5bf33520f 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.h +++ b/src/plugins/platforms/xcb/qxcbwindow.h @@ -280,6 +280,18 @@ protected: xcb_cursor_t m_currentBitmapCursor = XCB_CURSOR_NONE; }; +class QXcbForeignWindow : public QXcbWindow +{ +public: + QXcbForeignWindow(QWindow *window, WId nativeHandle) + : QXcbWindow(window) { m_window = nativeHandle; } + ~QXcbForeignWindow(); + bool isForeignWindow() const override { return true; } + +protected: + void create() override {} // No-op +}; + QT_END_NAMESPACE Q_DECLARE_METATYPE(QXcbWindow*) diff --git a/src/plugins/sqldrivers/.qmake.conf b/src/plugins/sqldrivers/.qmake.conf new file mode 100644 index 0000000000..15ba71a343 --- /dev/null +++ b/src/plugins/sqldrivers/.qmake.conf @@ -0,0 +1,19 @@ +# This file detaches this sub-tree from the rest of qtbase, +# so it can be configured stand-alone. +# Of course, under normal circumstances, this _is_ part of qtbase, +# so we have to make some contortions to restore normality. + +isEmpty(_QMAKE_CONF_): return() # Pre-scan during spec loading. + +SQLDRV_SRC_TREE = $$dirname(_QMAKE_CONF_) +QTBASE_SRC_TREE = $$section(SQLDRV_SRC_TREE, /, 0, -4) + +QTBASE_BLD_TREE = $$shadowed($$QTBASE_SRC_TREE) +!isEmpty(QTBASE_BLD_TREE):exists($$QTBASE_BLD_TREE/.qmake.cache) { + # This tricks qt_build_config.prf and qt_build_paths.prf + _QMAKE_CONF_ = $$QTBASE_SRC_TREE/.qmake.conf +} else { + CONFIG += sqldrivers_standalone +} + +include($$QTBASE_SRC_TREE/.qmake.conf) diff --git a/src/sql/configure.json b/src/plugins/sqldrivers/configure.json index 49444c7e5f..5603ceb37b 100644 --- a/src/sql/configure.json +++ b/src/plugins/sqldrivers/configure.json @@ -1,9 +1,9 @@ { - "module": "sql", + "module": "sqldrivers", "depends": [ "core" ], - "testDir": "../../config.tests", + "testDir": "../../../config.tests", "commandline": { "assignments": { @@ -129,47 +129,42 @@ "sql-db2": { "label": "DB2 (IBM)", "condition": "libs.db2", - "output": [ "publicFeature" ] + "output": [ "privateFeature" ] }, "sql-ibase": { "label": "InterBase", "condition": "libs.ibase", - "output": [ "publicFeature" ] + "output": [ "privateFeature" ] }, "sql-mysql": { "label": "MySql", "condition": "libs.mysql", - "output": [ "publicFeature" ] - }, - "use_libmysqlclient_r": { - "label": "MySql (threadsafe)", - "condition": "features.sql-mysql && (libs.mysql.source == 0 || libs.mysql.source == 2)", - "output": [ "privateConfig" ] + "output": [ "privateFeature" ] }, "sql-oci": { "label": "OCI (Oracle)", "condition": "libs.oci", - "output": [ "publicFeature" ] + "output": [ "privateFeature" ] }, "sql-odbc": { "label": "ODBC", - "condition": "libs.odbc && features.datestring", - "output": [ "publicFeature" ] + "condition": "features.datestring && libs.odbc", + "output": [ "privateFeature" ] }, "sql-psql": { "label": "PostgreSQL", "condition": "libs.psql", - "output": [ "publicFeature" ] + "output": [ "privateFeature" ] }, "sql-sqlite2": { "label": "SQLite2", "condition": "libs.sqlite2", - "output": [ "publicFeature" ] + "output": [ "privateFeature" ] }, "sql-sqlite": { "label": "SQLite", "condition": "features.datestring", - "output": [ "publicFeature" ] + "output": [ "privateFeature" ] }, "system-sqlite": { "label": " Using system provided SQLite", @@ -179,8 +174,8 @@ }, "sql-tds": { "label": "TDS (Sybase)", - "condition": "libs.tds && features.datestring", - "output": [ "publicFeature" ] + "condition": "features.datestring && libs.tds", + "output": [ "privateFeature" ] } }, diff --git a/src/sql/configure.pri b/src/plugins/sqldrivers/configure.pri index 9fb957291f..9fb957291f 100644 --- a/src/sql/configure.pri +++ b/src/plugins/sqldrivers/configure.pri diff --git a/src/plugins/sqldrivers/qsqldriverbase.pri b/src/plugins/sqldrivers/qsqldriverbase.pri index 512c046ec1..4b78fa9454 100644 --- a/src/plugins/sqldrivers/qsqldriverbase.pri +++ b/src/plugins/sqldrivers/qsqldriverbase.pri @@ -1,5 +1,8 @@ QT = core core-private sql-private +# For QMAKE_USE in the parent projects. +include($$shadowed($$PWD)/qtsqldrivers-config.pri) + PLUGIN_TYPE = sqldrivers load(qt_plugin) diff --git a/src/plugins/sqldrivers/sqldrivers.pro b/src/plugins/sqldrivers/sqldrivers.pro index 30fb6019ce..8a9ae46f82 100644 --- a/src/plugins/sqldrivers/sqldrivers.pro +++ b/src/plugins/sqldrivers/sqldrivers.pro @@ -1,5 +1,9 @@ TEMPLATE = subdirs -QT_FOR_CONFIG += sql + +sqldrivers_standalone { + _QMAKE_CACHE_ = $$shadowed($$SQLDRV_SRC_TREE)/.qmake.conf + load(qt_configure) +} qtConfig(sql-psql) : SUBDIRS += psql qtConfig(sql-mysql) : SUBDIRS += mysql diff --git a/src/plugins/sqldrivers/sqlite/sqlite.pro b/src/plugins/sqldrivers/sqlite/sqlite.pro index 1066bf7f51..d7e19f97b1 100644 --- a/src/plugins/sqldrivers/sqlite/sqlite.pro +++ b/src/plugins/sqldrivers/sqlite/sqlite.pro @@ -1,10 +1,11 @@ TARGET = qsqlite -QT_FOR_CONFIG += sql-private - HEADERS += $$PWD/qsql_sqlite_p.h SOURCES += $$PWD/qsql_sqlite.cpp $$PWD/smain.cpp +include($$OUT_PWD/../qtsqldrivers-config.pri) +QT_FOR_CONFIG += sqldrivers-private + qtConfig(system-sqlite) { QMAKE_USE += sqlite } else { diff --git a/src/tools/moc/preprocessor.cpp b/src/tools/moc/preprocessor.cpp index 32c94639ab..9a06fb38d0 100644 --- a/src/tools/moc/preprocessor.cpp +++ b/src/tools/moc/preprocessor.cpp @@ -1109,19 +1109,18 @@ void Preprocessor::preprocess(const QByteArray &filename, Symbols &preprocessed) } case PP_DEFINE: { - next(IDENTIFIER); + next(); QByteArray name = lexem(); + if (name.isEmpty() || !is_ident_start(name[0])) + error(); Macro macro; macro.isVariadic = false; - Token t = next(); - if (t == LPAREN) { + if (test(LPAREN)) { // we have a function macro macro.isFunction = true; parseDefineArguments(¯o); - } else if (t == PP_WHITESPACE){ - macro.isFunction = false; } else { - error("Moc: internal error"); + macro.isFunction = false; } int start = index; until(PP_NEWLINE); @@ -1160,7 +1159,7 @@ void Preprocessor::preprocess(const QByteArray &filename, Symbols &preprocessed) continue; } case PP_UNDEF: { - next(IDENTIFIER); + next(); QByteArray name = lexem(); until(PP_NEWLINE); macros.remove(name); diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp index 2fb44952be..ad9e040824 100644 --- a/src/tools/uic/cpp/cppwriteinitialization.cpp +++ b/src/tools/uic/cpp/cppwriteinitialization.cpp @@ -83,9 +83,10 @@ namespace { int w = 0; int h = 0; if (const DomProperty *sh = properties.value(QLatin1String("sizeHint"))) { - const DomSize *sizeHint = sh->elementSize(); - w = sizeHint->elementWidth(); - h = sizeHint->elementHeight(); + if (const DomSize *sizeHint = sh->elementSize()) { + w = sizeHint->elementWidth(); + h = sizeHint->elementHeight(); + } } output << w << ", " << h << ", "; diff --git a/src/widgets/dialogs/dialogs.pri b/src/widgets/dialogs/dialogs.pri index 8614d2bcc6..c9438696fa 100644 --- a/src/widgets/dialogs/dialogs.pri +++ b/src/widgets/dialogs/dialogs.pri @@ -22,8 +22,7 @@ win32 { SOURCES += dialogs/qwizard_win.cpp } -wince: FORMS += dialogs/qfiledialog_embedded.ui -else: FORMS += dialogs/qfiledialog.ui +FORMS += dialogs/qfiledialog.ui INCLUDEPATH += $$PWD SOURCES += \ diff --git a/src/widgets/dialogs/qdialog.cpp b/src/widgets/dialogs/qdialog.cpp index 8e74c659fa..60e1c43721 100644 --- a/src/widgets/dialogs/qdialog.cpp +++ b/src/widgets/dialogs/qdialog.cpp @@ -1049,7 +1049,7 @@ QSize QDialog::minimumSizeHint() const \brief whether show() should pop up the dialog as modal or modeless By default, this property is \c false and show() pops up the dialog - as modeless. Setting his property to true is equivalent to setting + as modeless. Setting this property to true is equivalent to setting QWidget::windowModality to Qt::ApplicationModal. exec() ignores the value of this property and always pops up the diff --git a/src/widgets/dialogs/qfiledialog_embedded.ui b/src/widgets/dialogs/qfiledialog_embedded.ui deleted file mode 100644 index 933acdeaf2..0000000000 --- a/src/widgets/dialogs/qfiledialog_embedded.ui +++ /dev/null @@ -1,353 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <comment>********************************************************************* -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWidgets module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -*********************************************************************</comment> - <class>QFileDialog</class> - <widget class="QDialog" name="QFileDialog"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>240</width> - <height>320</height> - </rect> - </property> - <property name="sizeGripEnabled"> - <bool>true</bool> - </property> - <layout class="QVBoxLayout"> - <item> - <widget class="QFileDialogComboBox" name="lookInCombo"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>1</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - </item> - <item> - <layout class="QHBoxLayout"> - <item> - <widget class="QToolButton" name="backButton"> - <property name="toolTip"> - <string>Back</string> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="forwardButton"> - <property name="toolTip"> - <string>Forward</string> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="toParentButton"> - <property name="toolTip"> - <string>Parent Directory</string> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="newFolderButton"> - <property name="toolTip"> - <string>Create New Folder</string> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="listModeButton"> - <property name="toolTip"> - <string>List View</string> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="detailModeButton"> - <property name="toolTip"> - <string>Detail View</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <widget class="QSplitter" name="splitter"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="childrenCollapsible"> - <bool>false</bool> - </property> - <widget class="QSidebar" name="sidebar"/> - <widget class="QFrame" name="frame"> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <layout class="QVBoxLayout"> - <property name="spacing"> - <number>0</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QStackedWidget" name="stackedWidget"> - <property name="currentIndex"> - <number>0</number> - </property> - <widget class="QWidget" name="page"> - <layout class="QVBoxLayout"> - <property name="spacing"> - <number>0</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QFileDialogListView" name="listView"/> - </item> - </layout> - </widget> - <widget class="QWidget" name="page_2"> - <layout class="QVBoxLayout"> - <property name="spacing"> - <number>0</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QFileDialogTreeView" name="treeView"/> - </item> - </layout> - </widget> - </widget> - </item> - </layout> - </widget> - </widget> - </item> - <item> - <layout class="QGridLayout"> - <item row="0" column="0"> - <widget class="QFileDialogLineEdit" name="fileNameEdit"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>1</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - </item> - <item row="0" column="1" rowspan="2"> - <widget class="QDialogButtonBox" name="buttonBox"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="standardButtons"> - <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QComboBox" name="fileTypeCombo"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - </item> - </layout> - </item> - <item> - <widget class="QLabel" name="fileNameLabel"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - <property name="maximumSize"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="fileTypeLabel"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="maximumSize"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>Files of type:</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="lookInLabel"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="maximumSize"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - <property name="text"> - <string>Look in:</string> - </property> - </widget> - </item> - </layout> - </widget> - <customwidgets> - <customwidget> - <class>QFileDialogTreeView</class> - <extends>QTreeView</extends> - <header>private/qfiledialog_p.h</header> - </customwidget> - <customwidget> - <class>QFileDialogListView</class> - <extends>QListView</extends> - <header>private/qfiledialog_p.h</header> - </customwidget> - <customwidget> - <class>QSidebar</class> - <extends>QListWidget</extends> - <header>private/qsidebar_p.h</header> - </customwidget> - <customwidget> - <class>QFileDialogLineEdit</class> - <extends>QLineEdit</extends> - <header>private/qfiledialog_p.h</header> - </customwidget> - <customwidget> - <class>QFileDialogComboBox</class> - <extends>QComboBox</extends> - <header>private/qfiledialog_p.h</header> - </customwidget> - </customwidgets> - <tabstops> - <tabstop>lookInCombo</tabstop> - <tabstop>backButton</tabstop> - <tabstop>forwardButton</tabstop> - <tabstop>toParentButton</tabstop> - <tabstop>newFolderButton</tabstop> - <tabstop>listModeButton</tabstop> - <tabstop>detailModeButton</tabstop> - <tabstop>sidebar</tabstop> - <tabstop>listView</tabstop> - <tabstop>fileNameEdit</tabstop> - <tabstop>fileTypeCombo</tabstop> - <tabstop>buttonBox</tabstop> - <tabstop>treeView</tabstop> - </tabstops> - <resources/> - <connections/> -</ui> diff --git a/src/widgets/doc/images/fusion-style.png b/src/widgets/doc/images/fusion-style.png Binary files differnew file mode 100644 index 0000000000..753bb2806a --- /dev/null +++ b/src/widgets/doc/images/fusion-style.png diff --git a/src/widgets/doc/images/macos-lineedit.png b/src/widgets/doc/images/macos-lineedit.png Binary files differnew file mode 100644 index 0000000000..765f30ab2f --- /dev/null +++ b/src/widgets/doc/images/macos-lineedit.png diff --git a/src/widgets/doc/images/macos-progressbar.png b/src/widgets/doc/images/macos-progressbar.png Binary files differnew file mode 100644 index 0000000000..79be5f559c --- /dev/null +++ b/src/widgets/doc/images/macos-progressbar.png diff --git a/src/widgets/doc/images/macos-style.png b/src/widgets/doc/images/macos-style.png Binary files differnew file mode 100644 index 0000000000..818e634632 --- /dev/null +++ b/src/widgets/doc/images/macos-style.png diff --git a/src/widgets/doc/images/macos-style2.png b/src/widgets/doc/images/macos-style2.png Binary files differnew file mode 100644 index 0000000000..728b407428 --- /dev/null +++ b/src/widgets/doc/images/macos-style2.png diff --git a/src/widgets/doc/images/macos-tabwidget.png b/src/widgets/doc/images/macos-tabwidget.png Binary files differnew file mode 100644 index 0000000000..d189dbae3c --- /dev/null +++ b/src/widgets/doc/images/macos-tabwidget.png diff --git a/src/widgets/doc/images/windows-style.png b/src/widgets/doc/images/windows-style.png Binary files differnew file mode 100644 index 0000000000..f11a4510c3 --- /dev/null +++ b/src/widgets/doc/images/windows-style.png diff --git a/src/widgets/doc/images/windows-style2.png b/src/widgets/doc/images/windows-style2.png Binary files differnew file mode 100644 index 0000000000..168963cfde --- /dev/null +++ b/src/widgets/doc/images/windows-style2.png diff --git a/src/widgets/doc/images/windows-vista-style.png b/src/widgets/doc/images/windows-vista-style.png Binary files differnew file mode 100644 index 0000000000..f28270007f --- /dev/null +++ b/src/widgets/doc/images/windows-vista-style.png diff --git a/src/widgets/doc/images/windows-xp-style.png b/src/widgets/doc/images/windows-xp-style.png Binary files differnew file mode 100644 index 0000000000..7b323dd69b --- /dev/null +++ b/src/widgets/doc/images/windows-xp-style.png diff --git a/src/widgets/doc/src/qtwidgets-index.qdoc b/src/widgets/doc/src/qtwidgets-index.qdoc index 55661f342b..6253ae8d7d 100644 --- a/src/widgets/doc/src/qtwidgets-index.qdoc +++ b/src/widgets/doc/src/qtwidgets-index.qdoc @@ -85,7 +85,7 @@ interfaces \row \li \image windowsvista-tabwidget.png \li \image fusion-tabwidget.png - \li \image macintosh-tabwidget.png + \li \image macos-tabwidget.png \endtable \l{Qt Style Sheets} are a powerful mechanism that allows you to customize the diff --git a/src/widgets/doc/src/widgets-and-layouts/gallery-fusion.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery-fusion.qdoc deleted file mode 100644 index ca6de8fd5e..0000000000 --- a/src/widgets/doc/src/widgets-and-layouts/gallery-fusion.qdoc +++ /dev/null @@ -1,138 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page gallery-fusion.html - - \title Fusion Style Widget Gallery - \ingroup gallery - - This page shows some of the widgets available in Qt - when configured to use the "fusion" style. - -\section2 Buttons - -\table 100% -\row -\li \image fusion-pushbutton.png - \caption The QPushButton widget provides a command button. -\li \image fusion-toolbutton.png - \caption The QToolButton class provides a quick-access button to commands - or options, usually used inside a QToolBar. -\endtable - -\table 100% -\row -\li \image fusion-checkbox.png - \caption The QCheckBox widget provides a checkbox with a text label. -\li \image fusion-radiobutton.png - \caption The QRadioButton widget provides a radio button with a text or pixmap label. -\endtable - -\section2 Containers - -\table 100% -\row -\li \image fusion-groupbox.png - The QGroupBox widget provides a group box frame with a title. -\li \image fusion-tabwidget.png - The QTabWidget class provides a stack of tabbed widgets. -\li \image fusion-frame.png - The QFrame widget provides a simple decorated container for other widgets. -\li \image fusion-toolbox.png - The QToolBox class provides a column of tabbed widget items. -\endtable - -\section2 Item Views - -\table 100% -\row -\li \image fusion-listview.png - The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view. -\li \image fusion-treeview.png - The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view. -\li \image fusion-tableview.png - The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\li -\li -\endtable - -\section2 Display Widgets - -\table 100% -\row -\li \image fusion-progressbar.png - The QProgressBar widget provides a horizontal progress bar. -\li \image fusion-label.png - The QLabel widget provides a text or image display. -\li \image fusion-lcdnumber.png - The QLCDNumber widget displays a number with LCD-like digits. -\endtable - -\section2 Input Widgets - -\table 100% -\row -\li \image fusion-lineedit.png - The QLineEdit widget is a one-line text editor. -\li \image fusion-dateedit.png - The QDateEdit class provides a widget for editing dates. -\li \image fusion-timeedit.png - The QTimeEdit class provides a widget for editing times. -\li \image fusion-datetimeedit.png - The QDateTimeEdit class provides a widget for editing dates and times. -\endtable - -\table 100% -\row -\li \image fusion-slider.png - The QSlider widget provides a vertical or horizontal slider. -\li \image fusion-combobox.png - The QComboBox widget is a combined button and pop-up list. -\li \image fusion-spinbox.png - The QSpinBox class provides a spin box widget. -\endtable - -\table 100% -\row -\li \image fusion-fontcombobox.png - The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts. -\li \image fusion-doublespinbox.png - The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered. -\li \image fusion-horizontalscrollbar.png - The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation. -\endtable - -\table 100% -\row -\li \image fusion-dial.png - The QDial class provides a rounded range control (like a speedometer or potentiometer). -\li \image fusion-textedit.png - The QTextEdit class provides a widget that is used to edit and display both plain and rich text. -\li \image fusion-calendarwidget.png - The QCalendarWidget class provides a monthly calendar widget that can be used to select dates. -\endtable -*/ diff --git a/src/widgets/doc/src/widgets-and-layouts/gallery-macintosh.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery-macintosh.qdoc deleted file mode 100644 index 4d4e2b9a8d..0000000000 --- a/src/widgets/doc/src/widgets-and-layouts/gallery-macintosh.qdoc +++ /dev/null @@ -1,142 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page gallery-macintosh.html - - \title Macintosh Style Widget Gallery - \ingroup gallery - - This page shows some of the widgets available in Qt - when configured to use the "macintosh" style. This - style is only available on Mac OSX, and provides - native look'n'feel by integrating to the Mac OSX - platform theme. Thus, the final appearance varies - depending on the active Mac OSX theme. - -\section2 Buttons - -\table 100% -\row -\li \image macintosh-pushbutton.png - \caption The QPushButton widget provides a command button. -\li \image macintosh-toolbutton.png - \caption The QToolButton class provides a quick-access button to commands - or options, usually used inside a QToolBar. -\endtable - -\table 100% -\row -\li \image macintosh-checkbox.png - \caption The QCheckBox widget provides a checkbox with a text label. -\li \image macintosh-radiobutton.png - \caption The QRadioButton widget provides a radio button with a text or pixmap label. -\endtable - -\section2 Containers - -\table 100% -\row -\li \image macintosh-groupbox.png - The QGroupBox widget provides a group box frame with a title. -\li \image macintosh-tabwidget.png - The QTabWidget class provides a stack of tabbed widgets. -\li \image macintosh-frame.png - The QFrame widget provides a simple decorated container for other widgets. -\li \image macintosh-toolbox.png - The QToolBox class provides a column of tabbed widget items. -\endtable - -\section2 Item Views - -\table 100% -\row -\li \image macintosh-listview.png - The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view. -\li \image macintosh-treeview.png - The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view. -\li \image macintosh-tableview.png - The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\li -\li -\endtable - -\section2 Display Widgets - -\table 100% -\row -\li \image macintosh-progressbar.png - The QProgressBar widget provides a horizontal progress bar. -\li \image macintosh-label.png - The QLabel widget provides a text or image display. -\li \image macintosh-lcdnumber.png - The QLCDNumber widget displays a number with LCD-like digits. -\endtable - -\section2 Input Widgets - -\table 100% -\row -\li \image macintosh-lineedit.png - The QLineEdit widget is a one-line text editor. -\li \image macintosh-dateedit.png - The QDateEdit class provides a widget for editing dates. -\li \image macintosh-timeedit.png - The QTimeEdit class provides a widget for editing times. -\li \image macintosh-datetimeedit.png - The QDateTimeEdit class provides a widget for editing dates and times. -\endtable - -\table 100% -\row -\li \image macintosh-slider.png - The QSlider widget provides a vertical or horizontal slider. -\li \image macintosh-combobox.png - The QComboBox widget is a combined button and pop-up list. -\li \image macintosh-spinbox.png - The QSpinBox class provides a spin box widget. -\endtable - -\table 100% -\row -\li \image macintosh-fontcombobox.png - The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts. -\li \image macintosh-doublespinbox.png - The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered. -\li \image macintosh-horizontalscrollbar.png - The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation. -\endtable - -\table 100% -\row -\li \image macintosh-dial.png - The QDial class provides a rounded range control (like a speedometer or potentiometer). -\li \image macintosh-textedit.png - The QTextEdit class provides a widget that is used to edit and display both plain and rich text. -\li \image macintosh-calendarwidget.png - The QCalendarWidget class provides a monthly calendar widget that can be used to select dates. -\endtable -*/ diff --git a/src/widgets/doc/src/widgets-and-layouts/gallery-windows.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery-windows.qdoc deleted file mode 100644 index 40e41ff98a..0000000000 --- a/src/widgets/doc/src/widgets-and-layouts/gallery-windows.qdoc +++ /dev/null @@ -1,138 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page gallery-windows.html - - \title Windows Style Widget Gallery - \ingroup gallery - - This page shows some of the widgets available in Qt - when configured to use the "windows" style. - -\section2 Buttons - -\table 100% -\row -\li \image windows-pushbutton.png - \caption The QPushButton widget provides a command button. -\li \image windows-toolbutton.png - \caption The QToolButton class provides a quick-access button to commands - or options, usually used inside a QToolBar. -\endtable - -\table 100% -\row -\li \image windows-checkbox.png - \caption The QCheckBox widget provides a checkbox with a text label. -\li \image windows-radiobutton.png - \caption The QRadioButton widget provides a radio button with a text or pixmap label. -\endtable - -\section2 Containers - -\table 100% -\row -\li \image windows-groupbox.png - The QGroupBox widget provides a group box frame with a title. -\li \image windows-tabwidget.png - The QTabWidget class provides a stack of tabbed widgets. -\li \image windows-frame.png - The QFrame widget provides a simple decorated container for other widgets. -\li \image windows-toolbox.png - The QToolBox class provides a column of tabbed widget items. -\endtable - -\section2 Item Views - -\table 100% -\row -\li \image windows-listview.png - The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view. -\li \image windows-treeview.png - The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view. -\li \image windows-tableview.png - The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\li -\li -\endtable - -\section2 Display Widgets - -\table 100% -\row -\li \image windows-progressbar.png - The QProgressBar widget provides a horizontal progress bar. -\li \image windows-label.png - The QLabel widget provides a text or image display. -\li \image windows-lcdnumber.png - The QLCDNumber widget displays a number with LCD-like digits. -\endtable - -\section2 Input Widgets - -\table 100% -\row -\li \image windows-lineedit.png - The QLineEdit widget is a one-line text editor. -\li \image windows-dateedit.png - The QDateEdit class provides a widget for editing dates. -\li \image windows-timeedit.png - The QTimeEdit class provides a widget for editing times. -\li \image windows-datetimeedit.png - The QDateTimeEdit class provides a widget for editing dates and times. -\endtable - -\table 100% -\row -\li \image windows-slider.png - The QSlider widget provides a vertical or horizontal slider. -\li \image windows-combobox.png - The QComboBox widget is a combined button and pop-up list. -\li \image windows-spinbox.png - The QSpinBox class provides a spin box widget. -\endtable - -\table 100% -\row -\li \image windows-fontcombobox.png - The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts. -\li \image windows-doublespinbox.png - The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered. -\li \image windows-horizontalscrollbar.png - The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation. -\endtable - -\table 100% -\row -\li \image windows-dial.png - The QDial class provides a rounded range control (like a speedometer or potentiometer). -\li \image windows-textedit.png - The QTextEdit class provides a widget that is used to edit and display both plain and rich text. -\li \image windows-calendarwidget.png - The QCalendarWidget class provides a monthly calendar widget that can be used to select dates. -\endtable -*/ diff --git a/src/widgets/doc/src/widgets-and-layouts/gallery-windowsvista.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery-windowsvista.qdoc deleted file mode 100644 index 2347528a3c..0000000000 --- a/src/widgets/doc/src/widgets-and-layouts/gallery-windowsvista.qdoc +++ /dev/null @@ -1,142 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page gallery-windowsvista.html - - \title Windows Vista Style Widget Gallery - \ingroup gallery - - This page shows some of the widgets available in Qt - when configured to use the "windowsvista" style. This - style is only available on Windows Vista or later. - This style provides native look'n'feel by integrating - to the Windows platform theme. Thus, the final appearance - varies depending on the active Windows theme. - -\section2 Buttons - -\table 100% -\row -\li \image windowsvista-pushbutton.png - \caption The QPushButton widget provides a command button. -\li \image windowsvista-toolbutton.png - \caption The QToolButton class provides a quick-access button to commands - or options, usually used inside a QToolBar. -\endtable - -\table 100% -\row -\li \image windowsvista-checkbox.png - \caption The QCheckBox widget provides a checkbox with a text label. -\li \image windowsvista-radiobutton.png - \caption The QRadioButton widget provides a radio button with a text or pixmap label. -\endtable - -\section2 Containers - -\table 100% -\row -\li \image windowsvista-groupbox.png - The QGroupBox widget provides a group box frame with a title. -\li \image windowsvista-tabwidget.png - The QTabWidget class provides a stack of tabbed widgets. -\li \image windowsvista-frame.png - The QFrame widget provides a simple decorated container for other widgets. -\li \image windowsvista-toolbox.png - The QToolBox class provides a column of tabbed widget items. -\endtable - -\section2 Item Views - -\table 100% -\row -\li \image windowsvista-listview.png - The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view. -\li \image windowsvista-treeview.png - The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view. -\li \image windowsvista-tableview.png - The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\li -\li -\endtable - -\section2 Display Widgets - -\table 100% -\row -\li \image windowsvista-progressbar.png - The QProgressBar widget provides a horizontal progress bar. -\li \image windowsvista-label.png - The QLabel widget provides a text or image display. -\li \image windowsvista-lcdnumber.png - The QLCDNumber widget displays a number with LCD-like digits. -\endtable - -\section2 Input Widgets - -\table 100% -\row -\li \image windowsvista-lineedit.png - The QLineEdit widget is a one-line text editor. -\li \image windowsvista-dateedit.png - The QDateEdit class provides a widget for editing dates. -\li \image windowsvista-timeedit.png - The QTimeEdit class provides a widget for editing times. -\li \image windowsvista-datetimeedit.png - The QDateTimeEdit class provides a widget for editing dates and times. -\endtable - -\table 100% -\row -\li \image windowsvista-slider.png - The QSlider widget provides a vertical or horizontal slider. -\li \image windowsvista-combobox.png - The QComboBox widget is a combined button and pop-up list. -\li \image windowsvista-spinbox.png - The QSpinBox class provides a spin box widget. -\endtable - -\table 100% -\row -\li \image windowsvista-fontcombobox.png - The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts. -\li \image windowsvista-doublespinbox.png - The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered. -\li \image windowsvista-horizontalscrollbar.png - The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation. -\endtable - -\table 100% -\row -\li \image windowsvista-dial.png - The QDial class provides a rounded range control (like a speedometer or potentiometer). -\li \image windowsvista-textedit.png - The QTextEdit class provides a widget that is used to edit and display both plain and rich text. -\li \image windowsvista-calendarwidget.png - The QCalendarWidget class provides a monthly calendar widget that can be used to select dates. -\endtable -*/ diff --git a/src/widgets/doc/src/widgets-and-layouts/gallery.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery.qdoc index f8b6584f19..a82462a432 100644 --- a/src/widgets/doc/src/widgets-and-layouts/gallery.qdoc +++ b/src/widgets/doc/src/widgets-and-layouts/gallery.qdoc @@ -26,33 +26,67 @@ ****************************************************************************/ /*! - \group gallery + \page gallery.html \title Qt Widget Gallery \brief Qt widgets shown in different styles on various platforms. Qt's support for widget styles and themes enables your application to fit in - with the native desktop environment. Below, you can find links to the various - widget styles that are supplied with Qt. + with the native desktop environment. - \table - \row - \li \image windows-tabwidget.png Windows Style Widget Gallery - \caption \l{Windows Style Widget Gallery} + The widgets examples show how some of the widgets available in Qt might + appear when configured to use the a particular style. Each style is only + available on the respective platfom, and provides native look and feel by + integrating to the platform theme. Thus, the final appearance varies + depending on the active theme. - The Windows style is provided by QWindowsStyle. - \li \image windowsvista-tabwidget.png Windows Vista Style Widget Gallery - \caption \l{Windows Vista Style Widget Gallery} + \table + \row + \li The Windows style ("windows") is provided by QWindowsStyle. + \li \image windows-style.png Windows Style + \row + \li \image windows-vista-style.png Windows Vista Style + \li The Windows Vista style ("windowsvista") is provided by + QWindowsVistaStyle. + \row + \li The \macos style ("macintosh") is provided by QMacStyle. + \li \image macos-style.png \macos Style + \row + \li \image fusion-style.png Fusion Style + \li The Fusion style ("fusion") is provided by QFusionStyle. + \endtable - The Windows Vista style is provided by QWindowsVistaStyle. + The Styles example displays the following widgets: - \row - \li \image macintosh-tabwidget.png Macintosh Style Widget Gallery - \caption \l{Macintosh Style Widget Gallery} + \list + \li QCheckBox (1) provides a checkbox with a text label. + \li QRadioButton (2) provides a radio button with a text or pixmap + label. + \li QPushButton (3) provides a command button. + \li QTabWidget (4) provides a stack of tabbed widgets. + \li QTableWidget (5) provides a classic item-based table view. + \li QScrollBar (6) provides a vertical or horizontal scroll bar. + \li QProgressBar (7) provides a horizontal progress bar. + \li QDateTimeEdit (8) provides a widget for editing dates and times. + \li QSlider (9) provides a vertical or horizontal slider. + \li QDial (10) provides a rounded range control (like a speedometer + or potentiometer). + \endlist - The Macintosh style is provided by QMacStyle. - \li \image fusion-tabwidget.png Fusion Style Widget Gallery - \caption \l{Fusion Style Widget Gallery} + The Calendar Widget example displays some additional widgets, here run on + Windows 10 and \macos: - The Fusion style is provided by QFusionStyle. - \endtable + \image windows-style2.png + \caption Calendar Widget example on Windows 10 + + \image macos-style2.png + \caption Calendar Widget example on \macos + + \list + \li QGroupBox (1) provides a group box frame with a title. + \li QCalendarWidget (2) provides a monthly calendar widget + that can be used to select dates. + \li QLabel (3) provides a text or image display. + \li QDateEdit (4) provides a widget for editing dates. + \li QComboBox (5) provides a combined button and pop-up list. + \endlist */ diff --git a/src/widgets/doc/src/widgets-and-layouts/widgets.qdoc b/src/widgets/doc/src/widgets-and-layouts/widgets.qdoc index 15af308cec..700a4479fd 100644 --- a/src/widgets/doc/src/widgets-and-layouts/widgets.qdoc +++ b/src/widgets/doc/src/widgets-and-layouts/widgets.qdoc @@ -45,21 +45,15 @@ \row \li \image fusion-label.png \li \image windowsvista-pushbutton.png - \li \image macintosh-progressbar.png + \li \image macos-progressbar.png \row \li \image fusion-combobox.png \li \image windowsvista-radiobutton.png - \li \image macintosh-lineedit.png + \li \image macos-lineedit.png \endtable \annotatedlist basicwidgets - \table - \row - \li \image windowsvista-tabwidget.png - \li \image macintosh-groupbox.png - \endtable - \section2 Advanced Widget Classes diff --git a/src/widgets/itemviews/itemviews.pri b/src/widgets/itemviews/itemviews.pri index d78bc4b40e..ed0e3fe072 100644 --- a/src/widgets/itemviews/itemviews.pri +++ b/src/widgets/itemviews/itemviews.pri @@ -28,9 +28,6 @@ HEADERS += \ itemviews/qitemeditorfactory_p.h \ itemviews/qtreewidgetitemiterator.h \ itemviews/qdatawidgetmapper.h \ - itemviews/qcolumnviewgrip_p.h \ - itemviews/qcolumnview.h \ - itemviews/qcolumnview_p.h \ itemviews/qstyleditemdelegate.h SOURCES += \ @@ -49,11 +46,20 @@ SOURCES += \ itemviews/qitemeditorfactory.cpp \ itemviews/qtreewidgetitemiterator.cpp \ itemviews/qdatawidgetmapper.cpp \ - itemviews/qcolumnview.cpp \ - itemviews/qcolumnviewgrip.cpp \ itemviews/qstyleditemdelegate.cpp } +qtConfig(columnview) { + HEADERS += \ + itemviews/qcolumnviewgrip_p.h \ + itemviews/qcolumnview.h \ + itemviews/qcolumnview_p.h + + SOURCES += \ + itemviews/qcolumnview.cpp \ + itemviews/qcolumnviewgrip.cpp +} + HEADERS += \ itemviews/qfileiconprovider.h \ itemviews/qfileiconprovider_p.h \ diff --git a/src/widgets/itemviews/qcolumnview.h b/src/widgets/itemviews/qcolumnview.h index 7d5e2f5cd1..42eac7426a 100644 --- a/src/widgets/itemviews/qcolumnview.h +++ b/src/widgets/itemviews/qcolumnview.h @@ -43,10 +43,9 @@ #include <QtWidgets/qtwidgetsglobal.h> #include <QtWidgets/qabstractitemview.h> -QT_BEGIN_NAMESPACE - +QT_REQUIRE_CONFIG(columnview); -#ifndef QT_NO_COLUMNVIEW +QT_BEGIN_NAMESPACE class QColumnViewPrivate; @@ -109,8 +108,6 @@ private: Q_PRIVATE_SLOT(d_func(), void _q_clicked(const QModelIndex &)) }; -#endif // QT_NO_COLUMNVIEW - QT_END_NAMESPACE #endif // QCOLUMNVIEW_H diff --git a/src/widgets/itemviews/qcolumnview_p.h b/src/widgets/itemviews/qcolumnview_p.h index 7eff0f66cd..fa276075fe 100644 --- a/src/widgets/itemviews/qcolumnview_p.h +++ b/src/widgets/itemviews/qcolumnview_p.h @@ -54,8 +54,6 @@ #include <QtWidgets/private/qtwidgetsglobal_p.h> #include "qcolumnview.h" -#ifndef QT_NO_QCOLUMNVIEW - #include <private/qabstractitemview_p.h> #include <QtCore/qabstractitemmodel.h> @@ -67,6 +65,8 @@ #include <qevent.h> #include <qscrollbar.h> +QT_REQUIRE_CONFIG(columnview); + QT_BEGIN_NAMESPACE class QColumnViewPreviewColumn : public QAbstractItemView { @@ -190,9 +190,7 @@ public: const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE; }; -#endif // QT_NO_QCOLUMNVIEW - QT_END_NAMESPACE -#endif //QCOLUMNVIEW_P_H +#endif //QCOLUMNVIEW_P_H diff --git a/src/widgets/itemviews/qcolumnviewgrip.cpp b/src/widgets/itemviews/qcolumnviewgrip.cpp index f7d6e6d2b0..4a4237805f 100644 --- a/src/widgets/itemviews/qcolumnviewgrip.cpp +++ b/src/widgets/itemviews/qcolumnviewgrip.cpp @@ -37,8 +37,6 @@ ** ****************************************************************************/ -#ifndef QT_NO_QCOLUMNVIEW - #include "qcolumnviewgrip_p.h" #include <qstyleoption.h> #include <qpainter.h> @@ -190,5 +188,3 @@ originalXLocation(-1) QT_END_NAMESPACE #include "moc_qcolumnviewgrip_p.cpp" - -#endif // QT_NO_QCOLUMNVIEW diff --git a/src/widgets/itemviews/qcolumnviewgrip_p.h b/src/widgets/itemviews/qcolumnviewgrip_p.h index 3447f9f824..16c0aefada 100644 --- a/src/widgets/itemviews/qcolumnviewgrip_p.h +++ b/src/widgets/itemviews/qcolumnviewgrip_p.h @@ -54,7 +54,7 @@ #include <QtWidgets/private/qtwidgetsglobal_p.h> #include <private/qwidget_p.h> -#ifndef QT_NO_QCOLUMNVIEW +QT_REQUIRE_CONFIG(columnview); QT_BEGIN_NAMESPACE @@ -98,6 +98,4 @@ public: QT_END_NAMESPACE -#endif // QT_NO_QCOLUMNVIEW - #endif //QCOLUMNVIEWGRIP_P_H diff --git a/src/widgets/kernel/qformlayout.cpp b/src/widgets/kernel/qformlayout.cpp index c66a6d5673..868ac17b6f 100644 --- a/src/widgets/kernel/qformlayout.cpp +++ b/src/widgets/kernel/qformlayout.cpp @@ -1907,7 +1907,7 @@ void QFormLayout::getItemPosition(int index, int *rowPtr, ItemRole *rolePtr) con if (rowPtr) *rowPtr = row; - if (rolePtr && col != -1) { + if (rolePtr && row != -1) { const bool spanning = col == 1 && d->m_matrix(row, col)->fullRow; if (spanning) { *rolePtr = SpanningRole; diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 370ae2aed1..b465ac36c7 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -5611,13 +5611,15 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP // punch a hole in the backingstore, so the texture will be visible. if (!q->testAttribute(Qt::WA_AlwaysStackOnTop)) { beginBackingStorePainting(); - QPainter p(q); if (backingStore) { + QPainter p(q); p.setCompositionMode(QPainter::CompositionMode_Source); p.fillRect(q->rect(), Qt::transparent); } else { + QImage img = grabFramebuffer(); + QPainter p(q); // We are not drawing to a backingstore: fall back to QImage - p.drawImage(q->rect(), grabFramebuffer()); + p.drawImage(q->rect(), img); skipPaintEvent = true; } endBackingStorePainting(); diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp index 0c1cf0ec6e..7c6466f5da 100644 --- a/src/widgets/styles/qcommonstyle.cpp +++ b/src/widgets/styles/qcommonstyle.cpp @@ -608,7 +608,7 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q } break; #endif // QT_NO_LINEEDIT -#ifndef QT_NO_COLUMNVIEW +#if QT_CONFIG(columnview) case PE_IndicatorColumnViewArrow: { if (const QStyleOptionViewItem *viewOpt = qstyleoption_cast<const QStyleOptionViewItem *>(opt)) { bool reverse = (viewOpt->direction == Qt::RightToLeft); @@ -660,7 +660,7 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q p->restore(); } break; } -#endif //QT_NO_COLUMNVIEW +#endif //QT_CONFIG(columnview) case PE_IndicatorItemViewItemDrop: { QRect rect = opt->rect; if (opt->rect.height() == 0) diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp index 7e01f6f3d5..746dc20122 100644 --- a/src/widgets/widgets/qplaintextedit.cpp +++ b/src/widgets/widgets/qplaintextedit.cpp @@ -1978,7 +1978,7 @@ void QPlainTextEdit::paintEvent(QPaintEvent *e) } - if (!placeholderText().isEmpty() && document()->isEmpty()) { + if (!placeholderText().isEmpty() && document()->isEmpty() && layout->preeditAreaText().isEmpty()) { Q_D(QPlainTextEdit); QColor col = d->control->palette().text().color(); col.setAlpha(128); diff --git a/src/widgets/widgets/qpushbutton.cpp b/src/widgets/widgets/qpushbutton.cpp index 57af09fef5..e13ea83fd7 100644 --- a/src/widgets/widgets/qpushbutton.cpp +++ b/src/widgets/widgets/qpushbutton.cpp @@ -513,7 +513,8 @@ void QPushButton::focusOutEvent(QFocusEvent *e) Ownership of the menu is \e not transferred to the push button. \image fusion-pushbutton-menu.png Screenshot of a Fusion style push button with popup menu. - A push button with popup menus shown in the \l{Fusion Style Widget Gallery}{Fusion widget style}. + A push button with popup menus shown in the \l{Qt Widget Gallery} + {Fusion widget style}. \sa menu() */ diff --git a/src/widgets/widgets/qsizegrip.cpp b/src/widgets/widgets/qsizegrip.cpp index 82857c8805..f0ede5f2ff 100644 --- a/src/widgets/widgets/qsizegrip.cpp +++ b/src/widgets/widgets/qsizegrip.cpp @@ -197,7 +197,7 @@ Qt::Corner QSizeGripPrivate::corner() const \table 50% \row \li \inlineimage fusion-statusbar-sizegrip.png Screenshot of a Fusion style size grip \li A size grip widget at the bottom-right corner of a main window, shown in the - \l{Fusion Style Widget Gallery}{Fusion widget style}. + \l{Qt Widget Gallery}{Fusion widget style}. \endtable The QSizeGrip class inherits QWidget and reimplements the \l diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp index d2bd7285ca..060d1f9a03 100644 --- a/src/widgets/widgets/qtabbar.cpp +++ b/src/widgets/widgets/qtabbar.cpp @@ -302,7 +302,7 @@ void QTabBar::initStyleOption(QStyleOptionTab *option, int tabIndex) const \table 100% \row \li \inlineimage fusion-tabbar.png Screenshot of a Fusion style tab bar - \li A tab bar shown in the Fusion widget style. + \li A tab bar shown in the \l{Qt Widget Gallery}{Fusion widget style}. \row \li \inlineimage fusion-tabbar-truncated.png Screenshot of a truncated Fusion tab bar \li A truncated tab bar shown in the Fusion widget style. \endtable |