Merge remote-tracking branch 'origin/5.9' into 5.10
Conflicts: src/plugins/platforms/windows/qwindowswindow.cpp tests/auto/widgets/kernel/qaction/tst_qaction.cpp Change-Id: Ia017a825ed2ca2d53ac586f4ae48df6f65818d40
This commit is contained in:
commit
17d5141113
src
3rdparty/freetype
corelib
dbus
gui
network
plugins
platforminputcontexts/compose
platforms
tools/moc
widgets
tests
auto
corelib/io
qfile
qfileselector
qurl
network/access/qnetworkreply
other/qaccessibility
sql/kernel/qsqldatabase
widgets
manual/widgets/widgets/bigmenucreator
43
src/3rdparty/freetype/BDF-LICENSE.txt
vendored
Normal file
43
src/3rdparty/freetype/BDF-LICENSE.txt
vendored
Normal file
@ -0,0 +1,43 @@
|
||||
Copyright (C) 2001-2002 by Francesco Zappa Nardelli
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*** Portions of the driver (that is, bdflib.c and bdf.h):
|
||||
|
||||
Copyright 2000 Computing Research Labs, New Mexico State University
|
||||
Copyright 2001-2002, 2011 Francesco Zappa Nardelli
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
|
||||
OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
|
||||
THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
551
src/3rdparty/freetype/LICENSE.txt
vendored
Normal file
551
src/3rdparty/freetype/LICENSE.txt
vendored
Normal file
@ -0,0 +1,551 @@
|
||||
The FreeType 2 font engine is copyrighted work and cannot be used
|
||||
legally without a software license. In order to make this project
|
||||
usable to a vast majority of developers, we distribute it under two
|
||||
mutually exclusive open-source licenses.
|
||||
|
||||
This means that *you* must choose *one* of the two licenses described
|
||||
below, then obey all its terms and conditions when using FreeType 2 in
|
||||
any of your projects or products.
|
||||
|
||||
- The FreeType License, found in the file `FTL.TXT', which is similar
|
||||
to the original BSD license *with* an advertising clause that forces
|
||||
you to explicitly cite the FreeType project in your product's
|
||||
documentation. All details are in the license file. This license
|
||||
is suited to products which don't use the GNU General Public
|
||||
License.
|
||||
|
||||
Note that this license is compatible to the GNU General Public
|
||||
License version 3, but not version 2.
|
||||
|
||||
- The GNU General Public License version 2, found in `GPLv2.TXT' (any
|
||||
later version can be used also), for programs which already use the
|
||||
GPL. Note that the FTL is incompatible with GPLv2 due to its
|
||||
advertisement clause.
|
||||
|
||||
The contributed BDF and PCF drivers come with a license similar to that
|
||||
of the X Window System. It is compatible to the above two licenses (see
|
||||
file src/bdf/README and src/pcf/README).
|
||||
|
||||
The gzip module uses the zlib license (see src/gzip/zlib.h) which too is
|
||||
compatible to the above two licenses.
|
||||
|
||||
The MD5 checksum support (only used for debugging in development builds)
|
||||
is in the public domain.
|
||||
|
||||
|
||||
--- FDL.TXT ---
|
||||
|
||||
The FreeType Project LICENSE
|
||||
----------------------------
|
||||
|
||||
2006-Jan-27
|
||||
|
||||
Copyright 1996-2002, 2006 by
|
||||
David Turner, Robert Wilhelm, and Werner Lemberg
|
||||
|
||||
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
The FreeType Project is distributed in several archive packages;
|
||||
some of them may contain, in addition to the FreeType font engine,
|
||||
various tools and contributions which rely on, or relate to, the
|
||||
FreeType Project.
|
||||
|
||||
This license applies to all files found in such packages, and
|
||||
which do not fall under their own explicit license. The license
|
||||
affects thus the FreeType font engine, the test programs,
|
||||
documentation and makefiles, at the very least.
|
||||
|
||||
This license was inspired by the BSD, Artistic, and IJG
|
||||
(Independent JPEG Group) licenses, which all encourage inclusion
|
||||
and use of free software in commercial and freeware products
|
||||
alike. As a consequence, its main points are that:
|
||||
|
||||
o We don't promise that this software works. However, we will be
|
||||
interested in any kind of bug reports. (`as is' distribution)
|
||||
|
||||
o You can use this software for whatever you want, in parts or
|
||||
full form, without having to pay us. (`royalty-free' usage)
|
||||
|
||||
o You may not pretend that you wrote this software. If you use
|
||||
it, or only parts of it, in a program, you must acknowledge
|
||||
somewhere in your documentation that you have used the
|
||||
FreeType code. (`credits')
|
||||
|
||||
We specifically permit and encourage the inclusion of this
|
||||
software, with or without modifications, in commercial products.
|
||||
We disclaim all warranties covering The FreeType Project and
|
||||
assume no liability related to The FreeType Project.
|
||||
|
||||
|
||||
Finally, many people asked us for a preferred form for a
|
||||
credit/disclaimer to use in compliance with this license. We thus
|
||||
encourage you to use the following text:
|
||||
|
||||
"""
|
||||
Portions of this software are copyright © <year> The FreeType
|
||||
Project (www.freetype.org). All rights reserved.
|
||||
"""
|
||||
|
||||
Please replace <year> with the value from the FreeType version you
|
||||
actually use.
|
||||
|
||||
|
||||
Legal Terms
|
||||
===========
|
||||
|
||||
0. Definitions
|
||||
--------------
|
||||
|
||||
Throughout this license, the terms `package', `FreeType Project',
|
||||
and `FreeType archive' refer to the set of files originally
|
||||
distributed by the authors (David Turner, Robert Wilhelm, and
|
||||
Werner Lemberg) as the `FreeType Project', be they named as alpha,
|
||||
beta or final release.
|
||||
|
||||
`You' refers to the licensee, or person using the project, where
|
||||
`using' is a generic term including compiling the project's source
|
||||
code as well as linking it to form a `program' or `executable'.
|
||||
This program is referred to as `a program using the FreeType
|
||||
engine'.
|
||||
|
||||
This license applies to all files distributed in the original
|
||||
FreeType Project, including all source code, binaries and
|
||||
documentation, unless otherwise stated in the file in its
|
||||
original, unmodified form as distributed in the original archive.
|
||||
If you are unsure whether or not a particular file is covered by
|
||||
this license, you must contact us to verify this.
|
||||
|
||||
The FreeType Project is copyright (C) 1996-2000 by David Turner,
|
||||
Robert Wilhelm, and Werner Lemberg. All rights reserved except as
|
||||
specified below.
|
||||
|
||||
1. No Warranty
|
||||
--------------
|
||||
|
||||
THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY
|
||||
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO
|
||||
USE, OF THE FREETYPE PROJECT.
|
||||
|
||||
2. Redistribution
|
||||
-----------------
|
||||
|
||||
This license grants a worldwide, royalty-free, perpetual and
|
||||
irrevocable right and license to use, execute, perform, compile,
|
||||
display, copy, create derivative works of, distribute and
|
||||
sublicense the FreeType Project (in both source and object code
|
||||
forms) and derivative works thereof for any purpose; and to
|
||||
authorize others to exercise some or all of the rights granted
|
||||
herein, subject to the following conditions:
|
||||
|
||||
o Redistribution of source code must retain this license file
|
||||
(`FTL.TXT') unaltered; any additions, deletions or changes to
|
||||
the original files must be clearly indicated in accompanying
|
||||
documentation. The copyright notices of the unaltered,
|
||||
original files must be preserved in all copies of source
|
||||
files.
|
||||
|
||||
o Redistribution in binary form must provide a disclaimer that
|
||||
states that the software is based in part of the work of the
|
||||
FreeType Team, in the distribution documentation. We also
|
||||
encourage you to put an URL to the FreeType web page in your
|
||||
documentation, though this isn't mandatory.
|
||||
|
||||
These conditions apply to any software derived from or based on
|
||||
the FreeType Project, not just the unmodified files. If you use
|
||||
our work, you must acknowledge us. However, no fee need be paid
|
||||
to us.
|
||||
|
||||
3. Advertising
|
||||
--------------
|
||||
|
||||
Neither the FreeType authors and contributors nor you shall use
|
||||
the name of the other for commercial, advertising, or promotional
|
||||
purposes without specific prior written permission.
|
||||
|
||||
We suggest, but do not require, that you use one or more of the
|
||||
following phrases to refer to this software in your documentation
|
||||
or advertising materials: `FreeType Project', `FreeType Engine',
|
||||
`FreeType library', or `FreeType Distribution'.
|
||||
|
||||
As you have not signed this license, you are not required to
|
||||
accept it. However, as the FreeType Project is copyrighted
|
||||
material, only this license, or another one contracted with the
|
||||
authors, grants you the right to use, distribute, and modify it.
|
||||
Therefore, by using, distributing, or modifying the FreeType
|
||||
Project, you indicate that you understand and accept all the terms
|
||||
of this license.
|
||||
|
||||
4. Contacts
|
||||
-----------
|
||||
|
||||
There are two mailing lists related to FreeType:
|
||||
|
||||
o freetype@nongnu.org
|
||||
|
||||
Discusses general use and applications of FreeType, as well as
|
||||
future and wanted additions to the library and distribution.
|
||||
If you are looking for support, start in this list if you
|
||||
haven't found anything to help you in the documentation.
|
||||
|
||||
o freetype-devel@nongnu.org
|
||||
|
||||
Discusses bugs, as well as engine internals, design issues,
|
||||
specific licenses, porting, etc.
|
||||
|
||||
Our home page can be found at
|
||||
|
||||
http://www.freetype.org
|
||||
|
||||
--- end of FDL.TXT ---
|
||||
|
||||
--- GPLv2.TXT ---
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
51 Franklin St, 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.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, 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 software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, 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 redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
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 give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
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 Program or any portion
|
||||
of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
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 Program, 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 Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) 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; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, 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 executable. 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.
|
||||
|
||||
If distribution of executable or 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 counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program 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.
|
||||
|
||||
5. 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 Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program 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.
|
||||
|
||||
7. 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 Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program 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 Program.
|
||||
|
||||
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.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program 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.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the 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 Program
|
||||
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 Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, 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
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "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 PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. 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 PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), 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 Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. 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 program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
||||
|
||||
--- end of GPLv2.TXT ---
|
||||
|
20
src/3rdparty/freetype/PCF-LICENSE.txt
vendored
Normal file
20
src/3rdparty/freetype/PCF-LICENSE.txt
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
Copyright (C) 2000 by Francesco Zappa Nardelli
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
20
src/3rdparty/freetype/ZLIB-LICENSE.txt
vendored
Normal file
20
src/3rdparty/freetype/ZLIB-LICENSE.txt
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
|
||||
Jean-loup Gailly Mark Adler
|
||||
jloup@gzip.org madler@alumni.caltech.edu
|
67
src/3rdparty/freetype/qt_attribution.json
vendored
67
src/3rdparty/freetype/qt_attribution.json
vendored
@ -1,13 +1,56 @@
|
||||
{
|
||||
"Id": "freetype",
|
||||
"Name": "Freetype 2",
|
||||
"QDocModule": "qtgui",
|
||||
"QtUsage": "Optionally used in Qt GUI and platform plugins. Configure with -no-freetype, or -system-freetype to avoid.",
|
||||
[
|
||||
{
|
||||
"Id": "freetype",
|
||||
"Name": "Freetype 2",
|
||||
"QDocModule": "qtgui",
|
||||
"QtUsage": "Optionally used in Qt GUI and platform plugins. Configure with -no-freetype, or -system-freetype to avoid.",
|
||||
|
||||
"Description": "FreeType is a freely available software library to render fonts.",
|
||||
"Homepage": "http://www.freetype.org",
|
||||
"License": "Freetype Project License or GNU General Public License v2.0 only",
|
||||
"LicenseId": "FTL or GPL-2.0",
|
||||
"LicenseFile": "docs/LICENSE.TXT",
|
||||
"Copyright": "Copyright 2006-2015 by David Turner, Robert Wilhelm, and Werner Lemberg."
|
||||
}
|
||||
"Description": "FreeType is a freely available software library to render fonts.",
|
||||
"Homepage": "http://www.freetype.org",
|
||||
"License": "Freetype Project License or GNU General Public License v2.0 only",
|
||||
"LicenseId": "FTL OR GPL-2.0",
|
||||
"LicenseFile": "LICENSE.TXT",
|
||||
"Copyright": "Copyright 2006-2015 by David Turner, Robert Wilhelm, and Werner Lemberg."
|
||||
},
|
||||
{
|
||||
"Id": "freetype-zlib",
|
||||
"Name": "Freetype 2 - zlib",
|
||||
"QDocModule": "qtgui",
|
||||
"QtUsage": "Optionally used in Qt GUI and platform plugins. Configure with -no-freetype, or -system-freetype to avoid.",
|
||||
|
||||
"Description": "FreeType is a freely available software library to render fonts.",
|
||||
"Homepage": "http://www.freetype.org",
|
||||
"License": "zlib License",
|
||||
"LicenseId": "Zlib",
|
||||
"LicenseFile": "ZLIB-LICENSE.TXT",
|
||||
"Copyright": "Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler"
|
||||
},
|
||||
{
|
||||
"Id": "freetype-bdf",
|
||||
"Name": "Freetype 2 - Bitmap Distribution Format (BDF) support",
|
||||
"QDocModule": "qtgui",
|
||||
"QtUsage": "Optionally used in Qt GUI and platform plugins. Configure with -no-freetype, or -system-freetype to avoid.",
|
||||
|
||||
"Description": "FreeType is a freely available software library to render fonts.",
|
||||
"Homepage": "http://www.freetype.org",
|
||||
"License": "MIT License",
|
||||
"LicenseId": "MIT",
|
||||
"LicenseFile": "BDF-LICENSE.TXT",
|
||||
"Copyright": "Copyright (C) 2001-2002 by Francesco Zappa Nardelli
|
||||
Copyright 2000 Computing Research Labs, New Mexico State University
|
||||
Copyright 2001-2002, 2011 Francesco Zappa Nardelli"
|
||||
},
|
||||
{
|
||||
"Id": "freetype-pcf",
|
||||
"Name": "Freetype 2 - Portable Compiled Format (PCF) support",
|
||||
"QDocModule": "qtgui",
|
||||
"QtUsage": "Optionally used in Qt GUI and platform plugins. Configure with -no-freetype, or -system-freetype to avoid.",
|
||||
|
||||
"Description": "FreeType is a freely available software library to render fonts.",
|
||||
"Homepage": "http://www.freetype.org",
|
||||
"License": "MIT License",
|
||||
"LicenseId": "MIT",
|
||||
"LicenseFile": "PCF-LICENSE.TXT",
|
||||
"Copyright": "Copyright (C) 2000 by Francesco Zappa Nardelli"
|
||||
}
|
||||
]
|
||||
|
@ -146,7 +146,7 @@ QFileSelectorPrivate::QFileSelectorPrivate()
|
||||
Selectors normally available are
|
||||
\list
|
||||
\li platform, any of the following strings which match the platform the application is running
|
||||
on (list not exhaustive): android, ios, osx, darwin, mac, linux, wince, unix, windows.
|
||||
on (list not exhaustive): android, ios, osx, darwin, mac, macos, linux, qnx, unix, windows.
|
||||
On Linux, if it can be determined, the name of the distribution too, like debian,
|
||||
fedora or opensuse.
|
||||
\li locale, same as QLocale().name().
|
||||
@ -373,8 +373,8 @@ QStringList QFileSelectorPrivate::platformSelectors()
|
||||
# endif
|
||||
#elif defined(Q_OS_UNIX)
|
||||
ret << QStringLiteral("unix");
|
||||
# if !defined(Q_OS_ANDROID)
|
||||
// we don't want "linux" for Android
|
||||
# if !defined(Q_OS_ANDROID) && !defined(Q_OS_QNX)
|
||||
// we don't want "linux" for Android or two instances of "qnx" for QNX
|
||||
ret << QSysInfo::kernelType();
|
||||
# ifdef Q_OS_MAC
|
||||
ret << QStringLiteral("mac"); // compatibility, since kernelType() is "darwin"
|
||||
|
@ -1037,6 +1037,7 @@ inline void QUrlPrivate::setAuthority(const QString &auth, int from, int end, QU
|
||||
{
|
||||
sectionIsPresent &= ~Authority;
|
||||
sectionIsPresent |= Host;
|
||||
port = -1;
|
||||
|
||||
// we never actually _loop_
|
||||
while (from != end) {
|
||||
@ -1061,10 +1062,8 @@ inline void QUrlPrivate::setAuthority(const QString &auth, int from, int end, QU
|
||||
}
|
||||
}
|
||||
|
||||
if (colonIndex == end - 1) {
|
||||
// found a colon but no digits after it
|
||||
port = -1;
|
||||
} else if (uint(colonIndex) < uint(end)) {
|
||||
if (uint(colonIndex) < uint(end) - 1) {
|
||||
// found a colon with digits after it
|
||||
unsigned long x = 0;
|
||||
for (int i = colonIndex + 1; i < end; ++i) {
|
||||
ushort c = auth.at(i).unicode();
|
||||
@ -1083,8 +1082,6 @@ inline void QUrlPrivate::setAuthority(const QString &auth, int from, int end, QU
|
||||
if (mode == QUrl::StrictMode)
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
port = -1;
|
||||
}
|
||||
|
||||
setHost(auth, from, qMin<uint>(end, colonIndex), mode);
|
||||
@ -1644,8 +1641,7 @@ inline QUrlPrivate::ErrorCode QUrlPrivate::validityError(QString *source, int *p
|
||||
if (path.isEmpty())
|
||||
return NoError;
|
||||
if (path.at(0) == QLatin1Char('/')) {
|
||||
if (sectionIsPresent & QUrlPrivate::Authority || port != -1 ||
|
||||
path.length() == 1 || path.at(1) != QLatin1Char('/'))
|
||||
if (hasAuthority() || path.length() == 1 || path.at(1) != QLatin1Char('/'))
|
||||
return NoError;
|
||||
if (source) {
|
||||
*source = path;
|
||||
@ -2474,6 +2470,8 @@ void QUrl::setPort(int port)
|
||||
}
|
||||
|
||||
d->port = port;
|
||||
if (port != -1)
|
||||
d->sectionIsPresent |= QUrlPrivate::Host;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -44,6 +44,7 @@
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
|
||||
#include <QtCore/QCoreApplication>
|
||||
#include <QtCore/QThread>
|
||||
#include <QtCore/QAbstractEventDispatcher>
|
||||
#include <QtCore/QElapsedTimer>
|
||||
|
@ -411,7 +411,7 @@ QStateMachinePrivate::~QStateMachinePrivate()
|
||||
qDeleteAll(internalEventQueue);
|
||||
qDeleteAll(externalEventQueue);
|
||||
|
||||
for (QHash<int, DelayedEvent>::const_iterator it = delayedEvents.begin(), eit = delayedEvents.end(); it != eit; ++it) {
|
||||
for (QHash<int, DelayedEvent>::const_iterator it = delayedEvents.cbegin(), eit = delayedEvents.cend(); it != eit; ++it) {
|
||||
delete it.value().event;
|
||||
}
|
||||
}
|
||||
|
@ -407,7 +407,7 @@ QDBusMessage qDBusPropertySet(const QDBusConnectionPrivate::ObjectTreeNode &node
|
||||
QDBusAdaptorConnector::AdaptorMap::ConstIterator it;
|
||||
it = std::lower_bound(connector->adaptors.constBegin(), connector->adaptors.constEnd(),
|
||||
interface_name);
|
||||
if (it != connector->adaptors.end() && interface_name == QLatin1String(it->interface)) {
|
||||
if (it != connector->adaptors.cend() && interface_name == QLatin1String(it->interface)) {
|
||||
return propertyWriteReply(msg, interface_name, property_name,
|
||||
writeProperty(it->adaptor, property_name, value));
|
||||
}
|
||||
|
@ -72,6 +72,11 @@
|
||||
that occurred, or errorString() to get a human readable
|
||||
description of what went wrong.
|
||||
|
||||
\note QImageReader assumes exclusive control over the file or
|
||||
device that is assigned. Any attempts to modify the assigned file
|
||||
or device during the lifetime of the QImageReader object will
|
||||
yield undefined results.
|
||||
|
||||
\section1 Formats
|
||||
|
||||
Call supportedImageFormats() for a list of formats that
|
||||
@ -1220,10 +1225,13 @@ float QImageReader::gamma() const
|
||||
see if the image data is valid. read() may still return false
|
||||
after canRead() returns \c true, if the image data is corrupt.
|
||||
|
||||
\note A QMimeDatabase lookup is normally a better approach than this
|
||||
function for identifying potentially non-image files or data.
|
||||
|
||||
For images that support animation, canRead() returns \c false when
|
||||
all frames have been read.
|
||||
|
||||
\sa read(), supportedImageFormats()
|
||||
\sa read(), supportedImageFormats(), QMimeDatabase
|
||||
*/
|
||||
bool QImageReader::canRead() const
|
||||
{
|
||||
|
@ -1048,7 +1048,7 @@ void QTextTable::mergeCells(int row, int column, int numRows, int numCols)
|
||||
QFragmentFindHelper helper(origCellPosition, p->fragmentMap());
|
||||
const auto begin = d->cells.cbegin();
|
||||
const auto it = std::lower_bound(begin, d->cells.cend(), helper);
|
||||
Q_ASSERT(it != d->cells.end());
|
||||
Q_ASSERT(it != d->cells.cend());
|
||||
Q_ASSERT(!(helper < *it));
|
||||
Q_ASSERT(*it == cellFragment);
|
||||
const int insertCellIndex = it - begin;
|
||||
@ -1082,7 +1082,7 @@ void QTextTable::mergeCells(int row, int column, int numRows, int numCols)
|
||||
QFragmentFindHelper helper(pos, p->fragmentMap());
|
||||
const auto begin = d->cells.cbegin();
|
||||
const auto it = std::lower_bound(begin, d->cells.cend(), helper);
|
||||
Q_ASSERT(it != d->cells.end());
|
||||
Q_ASSERT(it != d->cells.cend());
|
||||
Q_ASSERT(!(helper < *it));
|
||||
Q_ASSERT(*it == fragment);
|
||||
firstCellIndex = cellIndex = it - begin;
|
||||
|
@ -57,11 +57,11 @@
|
||||
|
||||
#if !defined(QT_NO_HTTP)
|
||||
|
||||
#include "http2/http2protocol_p.h"
|
||||
#include "http2/http2streams_p.h"
|
||||
#include "http2/http2frames_p.h"
|
||||
#include "http2/hpacktable_p.h"
|
||||
#include "http2/hpack_p.h"
|
||||
#include <private/http2protocol_p.h>
|
||||
#include <private/http2streams_p.h>
|
||||
#include <private/http2frames_p.h>
|
||||
#include <private/hpacktable_p.h>
|
||||
#include <private/hpack_p.h>
|
||||
|
||||
#include <QtCore/qnamespace.h>
|
||||
#include <QtCore/qbytearray.h>
|
||||
|
@ -182,6 +182,7 @@ QNetworkReplyHttpImpl::QNetworkReplyHttpImpl(QNetworkAccessManager* const manage
|
||||
: QNetworkReply(*new QNetworkReplyHttpImplPrivate, manager)
|
||||
{
|
||||
Q_D(QNetworkReplyHttpImpl);
|
||||
Q_ASSERT(manager);
|
||||
d->manager = manager;
|
||||
d->managerPrivate = manager->d_func();
|
||||
d->request = request;
|
||||
@ -395,9 +396,9 @@ bool QNetworkReplyHttpImpl::canReadLine () const
|
||||
void QNetworkReplyHttpImpl::ignoreSslErrors()
|
||||
{
|
||||
Q_D(QNetworkReplyHttpImpl);
|
||||
Q_ASSERT(d->managerPrivate);
|
||||
|
||||
if (d->managerPrivate && d->managerPrivate->stsEnabled
|
||||
&& d->managerPrivate->stsCache.isKnownHost(url())) {
|
||||
if (d->managerPrivate->stsEnabled && d->managerPrivate->stsCache.isKnownHost(url())) {
|
||||
// We cannot ignore any Security Transport-related errors for this host.
|
||||
return;
|
||||
}
|
||||
@ -408,9 +409,9 @@ void QNetworkReplyHttpImpl::ignoreSslErrors()
|
||||
void QNetworkReplyHttpImpl::ignoreSslErrorsImplementation(const QList<QSslError> &errors)
|
||||
{
|
||||
Q_D(QNetworkReplyHttpImpl);
|
||||
Q_ASSERT(d->managerPrivate);
|
||||
|
||||
if (d->managerPrivate && d->managerPrivate->stsEnabled
|
||||
&& d->managerPrivate->stsCache.isKnownHost(url())) {
|
||||
if (d->managerPrivate->stsEnabled && d->managerPrivate->stsCache.isKnownHost(url())) {
|
||||
// We cannot ignore any Security Transport-related errors for this host.
|
||||
return;
|
||||
}
|
||||
@ -1118,16 +1119,14 @@ QNetworkAccessManager::Operation QNetworkReplyHttpImplPrivate::getRedirectOperat
|
||||
// HTTP status code can be used to decide if we can redirect with a GET
|
||||
// operation or not. See http://www.ietf.org/rfc/rfc2616.txt [Sec 10.3] for
|
||||
// more details
|
||||
Q_UNUSED(httpStatus);
|
||||
|
||||
// We MUST keep using the verb that was used originally when being redirected with 307 or 308.
|
||||
if (httpStatus == 307 || httpStatus == 308)
|
||||
return currentOp;
|
||||
|
||||
switch (currentOp) {
|
||||
case QNetworkAccessManager::HeadOperation:
|
||||
return QNetworkAccessManager::HeadOperation;
|
||||
case QNetworkAccessManager::PostOperation:
|
||||
// We MUST keep using POST when being redirected with 307 or 308.
|
||||
if (statusCode == 307 || statusCode == 308)
|
||||
return QNetworkAccessManager::PostOperation;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -1154,6 +1153,8 @@ QNetworkRequest QNetworkReplyHttpImplPrivate::createRedirectRequest(const QNetwo
|
||||
void QNetworkReplyHttpImplPrivate::onRedirected(const QUrl &redirectUrl, int httpStatus, int maxRedirectsRemaining)
|
||||
{
|
||||
Q_Q(QNetworkReplyHttpImpl);
|
||||
Q_ASSERT(manager);
|
||||
Q_ASSERT(managerPrivate);
|
||||
|
||||
if (isFinished)
|
||||
return;
|
||||
@ -1188,7 +1189,7 @@ void QNetworkReplyHttpImplPrivate::onRedirected(const QUrl &redirectUrl, int htt
|
||||
redirectRequest = createRedirectRequest(originalRequest, url, maxRedirectsRemaining);
|
||||
operation = getRedirectOperation(operation, httpStatus);
|
||||
|
||||
if (const QNetworkCookieJar *const cookieJar = (manager ? manager->cookieJar() : nullptr)) {
|
||||
if (const QNetworkCookieJar *const cookieJar = manager->cookieJar()) {
|
||||
auto cookies = cookieJar->cookiesForUrl(url);
|
||||
if (!cookies.empty()) {
|
||||
redirectRequest.setHeader(QNetworkRequest::KnownHeaders::CookieHeader,
|
||||
@ -1205,6 +1206,7 @@ void QNetworkReplyHttpImplPrivate::onRedirected(const QUrl &redirectUrl, int htt
|
||||
void QNetworkReplyHttpImplPrivate::followRedirect()
|
||||
{
|
||||
Q_Q(QNetworkReplyHttpImpl);
|
||||
Q_ASSERT(managerPrivate);
|
||||
|
||||
rawHeaders.clear();
|
||||
cookedHeaders.clear();
|
||||
@ -1216,7 +1218,7 @@ void QNetworkReplyHttpImplPrivate::followRedirect()
|
||||
// If the original request didn't need a session (i.e. it was to localhost)
|
||||
// then we might not have a session open, to which to redirect, if the
|
||||
// new URL is remote. When this happens, we need to open the session now:
|
||||
if (managerPrivate && isSessionNeeded(url)) {
|
||||
if (isSessionNeeded(url)) {
|
||||
if (auto session = managerPrivate->getNetworkSession()) {
|
||||
if (session->state() != QNetworkSession::State::Connected || !session->isOpen()) {
|
||||
startWaitForSession(session);
|
||||
@ -2052,9 +2054,7 @@ void QNetworkReplyHttpImplPrivate::_q_bufferOutgoingData()
|
||||
void QNetworkReplyHttpImplPrivate::_q_networkSessionConnected()
|
||||
{
|
||||
Q_Q(QNetworkReplyHttpImpl);
|
||||
|
||||
if (!manager)
|
||||
return;
|
||||
Q_ASSERT(managerPrivate);
|
||||
|
||||
QSharedPointer<QNetworkSession> session = managerPrivate->getNetworkSession();
|
||||
if (!session)
|
||||
@ -2184,28 +2184,27 @@ void QNetworkReplyHttpImplPrivate::finished()
|
||||
if (preMigrationDownloaded != Q_INT64_C(-1))
|
||||
totalSize = totalSize.toLongLong() + preMigrationDownloaded;
|
||||
|
||||
if (manager) {
|
||||
#ifndef QT_NO_BEARERMANAGEMENT
|
||||
QSharedPointer<QNetworkSession> session = managerPrivate->getNetworkSession();
|
||||
if (session && session->state() == QNetworkSession::Roaming &&
|
||||
state == Working && errorCode != QNetworkReply::OperationCanceledError) {
|
||||
// only content with a known size will fail with a temporary network failure error
|
||||
if (!totalSize.isNull()) {
|
||||
if (bytesDownloaded != totalSize) {
|
||||
if (migrateBackend()) {
|
||||
// either we are migrating or the request is finished/aborted
|
||||
if (state == Reconnecting || state == WaitingForSession) {
|
||||
return; // exit early if we are migrating.
|
||||
}
|
||||
} else {
|
||||
error(QNetworkReply::TemporaryNetworkFailureError,
|
||||
QNetworkReply::tr("Temporary network failure."));
|
||||
Q_ASSERT(managerPrivate);
|
||||
QSharedPointer<QNetworkSession> session = managerPrivate->getNetworkSession();
|
||||
if (session && session->state() == QNetworkSession::Roaming &&
|
||||
state == Working && errorCode != QNetworkReply::OperationCanceledError) {
|
||||
// only content with a known size will fail with a temporary network failure error
|
||||
if (!totalSize.isNull()) {
|
||||
if (bytesDownloaded != totalSize) {
|
||||
if (migrateBackend()) {
|
||||
// either we are migrating or the request is finished/aborted
|
||||
if (state == Reconnecting || state == WaitingForSession) {
|
||||
return; // exit early if we are migrating.
|
||||
}
|
||||
} else {
|
||||
error(QNetworkReply::TemporaryNetworkFailureError,
|
||||
QNetworkReply::tr("Temporary network failure."));
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
// if we don't know the total size of or we received everything save the cache
|
||||
if (totalSize.isNull() || totalSize == -1 || bytesDownloaded == totalSize)
|
||||
@ -2263,17 +2262,16 @@ void QNetworkReplyHttpImplPrivate::_q_metaDataChanged()
|
||||
Q_Q(QNetworkReplyHttpImpl);
|
||||
// 1. do we have cookies?
|
||||
// 2. are we allowed to set them?
|
||||
if (manager) {
|
||||
const auto it = cookedHeaders.constFind(QNetworkRequest::SetCookieHeader);
|
||||
if (it != cookedHeaders.cend()
|
||||
&& request.attribute(QNetworkRequest::CookieSaveControlAttribute,
|
||||
QNetworkRequest::Automatic).toInt() == QNetworkRequest::Automatic) {
|
||||
QNetworkCookieJar *jar = manager->cookieJar();
|
||||
if (jar) {
|
||||
QList<QNetworkCookie> cookies =
|
||||
qvariant_cast<QList<QNetworkCookie> >(it.value());
|
||||
jar->setCookiesFromUrl(cookies, url);
|
||||
}
|
||||
Q_ASSERT(manager);
|
||||
const auto it = cookedHeaders.constFind(QNetworkRequest::SetCookieHeader);
|
||||
if (it != cookedHeaders.cend()
|
||||
&& request.attribute(QNetworkRequest::CookieSaveControlAttribute,
|
||||
QNetworkRequest::Automatic).toInt() == QNetworkRequest::Automatic) {
|
||||
QNetworkCookieJar *jar = manager->cookieJar();
|
||||
if (jar) {
|
||||
QList<QNetworkCookie> cookies =
|
||||
qvariant_cast<QList<QNetworkCookie> >(it.value());
|
||||
jar->setCookiesFromUrl(cookies, url);
|
||||
}
|
||||
}
|
||||
emit q->metaDataChanged();
|
||||
|
@ -1686,7 +1686,8 @@ bool QSslSocket::waitForDisconnected(int msecs)
|
||||
|
||||
if (!d->plainSocket)
|
||||
return false;
|
||||
if (d->mode == UnencryptedMode)
|
||||
// Forward to the plain socket unless the connection is secure.
|
||||
if (d->mode == UnencryptedMode && !d->autoStartHandshake)
|
||||
return d->plainSocket->waitForDisconnected(msecs);
|
||||
|
||||
QElapsedTimer stopWatch;
|
||||
@ -1697,6 +1698,17 @@ bool QSslSocket::waitForDisconnected(int msecs)
|
||||
if (!waitForEncrypted(msecs))
|
||||
return false;
|
||||
}
|
||||
// We are delaying the disconnect, if the write buffer is not empty.
|
||||
// So, start the transmission.
|
||||
if (!d->writeBuffer.isEmpty())
|
||||
d->transmit();
|
||||
|
||||
// At this point, the socket might be disconnected, if disconnectFromHost()
|
||||
// was called just after the connectToHostEncrypted() call. Also, we can
|
||||
// lose the connection as a result of the transmit() call.
|
||||
if (state() == UnconnectedState)
|
||||
return true;
|
||||
|
||||
bool retVal = d->plainSocket->waitForDisconnected(qt_subtract_from_timeout(msecs, stopWatch.elapsed()));
|
||||
if (!retVal) {
|
||||
setSocketState(d->plainSocket->state());
|
||||
|
@ -222,7 +222,7 @@ bool QComposeInputContext::checkComposeTable()
|
||||
int next = 1;
|
||||
do {
|
||||
// if we are at the end of the table, then we have nothing to do here
|
||||
if (it + next != m_composeTable.end()) {
|
||||
if (it + next != m_composeTable.constEnd()) {
|
||||
QComposeTableElement nextElem = *(it + next);
|
||||
if (isDuplicate(elem, nextElem)) {
|
||||
elem = nextElem;
|
||||
|
@ -105,15 +105,15 @@ namespace QtAndroidAccessibility
|
||||
{
|
||||
QAccessibleInterface *iface = interfaceFromId(objectId);
|
||||
if (iface && iface->isValid()) {
|
||||
jintArray jArray = env->NewIntArray(jsize(iface->childCount()));
|
||||
for (int i = 0; i < iface->childCount(); ++i) {
|
||||
const int childCount = iface->childCount();
|
||||
QVarLengthArray<jint, 8> ifaceIdArray(childCount);
|
||||
for (int i = 0; i < childCount; ++i) {
|
||||
QAccessibleInterface *child = iface->child(i);
|
||||
if (child && child->isValid()) {
|
||||
QAccessible::Id ifaceId = QAccessible::uniqueId(child);
|
||||
jint jid = ifaceId;
|
||||
env->SetIntArrayRegion(jArray, i, 1, &jid);
|
||||
}
|
||||
if (child && child->isValid())
|
||||
ifaceIdArray.append(QAccessible::uniqueId(child));
|
||||
}
|
||||
jintArray jArray = env->NewIntArray(jsize(ifaceIdArray.count()));
|
||||
env->SetIntArrayRegion(jArray, 0, ifaceIdArray.count(), ifaceIdArray.data());
|
||||
return jArray;
|
||||
}
|
||||
|
||||
|
@ -75,7 +75,7 @@ QString qt_mac_applicationmenu_string(int type)
|
||||
QPlatformMenuItem::MenuRole detectMenuRole(const QString &caption)
|
||||
{
|
||||
QString captionNoAmpersand(caption);
|
||||
captionNoAmpersand.remove(QChar('&'));
|
||||
captionNoAmpersand.remove(QLatin1Char('&'));
|
||||
const QString aboutString = QCoreApplication::translate("QCocoaMenuItem", "About");
|
||||
if (captionNoAmpersand.startsWith(aboutString, Qt::CaseInsensitive) || caption.endsWith(aboutString, Qt::CaseInsensitive))
|
||||
return QPlatformMenuItem::AboutRole;
|
||||
|
@ -45,6 +45,17 @@
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
enum {
|
||||
ServicesAppMenuItem = 0,
|
||||
HideAppMenuItem,
|
||||
HideOthersAppMenuItem,
|
||||
ShowAllAppMenuItem,
|
||||
PreferencesAppMenuItem,
|
||||
QuitAppMenuItem,
|
||||
AboutAppMenuItem
|
||||
};
|
||||
|
||||
|
||||
QString msgAboutQt();
|
||||
|
||||
QString qt_mac_applicationmenu_string(int type);
|
||||
|
@ -369,24 +369,20 @@ NSMenuItem *QCocoaMenuItem::sync()
|
||||
return m_native;
|
||||
}
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
extern QString qt_mac_applicationmenu_string(int type);
|
||||
QT_END_NAMESPACE
|
||||
|
||||
QString QCocoaMenuItem::mergeText()
|
||||
{
|
||||
QCocoaMenuLoader *loader = [QCocoaMenuLoader sharedMenuLoader];
|
||||
if (m_native == [loader aboutMenuItem]) {
|
||||
return qt_mac_applicationmenu_string(6).arg(qt_mac_applicationName());
|
||||
return qt_mac_applicationmenu_string(AboutAppMenuItem).arg(qt_mac_applicationName());
|
||||
} else if (m_native== [loader aboutQtMenuItem]) {
|
||||
if (m_text == QString("About Qt"))
|
||||
return msgAboutQt();
|
||||
else
|
||||
return m_text;
|
||||
} else if (m_native == [loader preferencesMenuItem]) {
|
||||
return qt_mac_applicationmenu_string(4);
|
||||
return qt_mac_applicationmenu_string(PreferencesAppMenuItem);
|
||||
} else if (m_native == [loader quitMenuItem]) {
|
||||
return qt_mac_applicationmenu_string(5).arg(qt_mac_applicationName());
|
||||
return qt_mac_applicationmenu_string(QuitAppMenuItem).arg(qt_mac_applicationName());
|
||||
} else if (m_text.contains('\t')) {
|
||||
return m_text.left(m_text.indexOf('\t'));
|
||||
}
|
||||
|
@ -47,14 +47,8 @@
|
||||
#include <QtCore/private/qcore_mac_p.h>
|
||||
#include <QtCore/private/qthread_p.h>
|
||||
#include <QtCore/qcoreapplication.h>
|
||||
#include <QtCore/qdir.h>
|
||||
#include <QtCore/qstring.h>
|
||||
#include <QtCore/qdebug.h>
|
||||
#include <QtGui/private/qguiapplication_p.h>
|
||||
|
||||
QT_FORWARD_DECLARE_CLASS(QCFString)
|
||||
QT_FORWARD_DECLARE_CLASS(QString)
|
||||
|
||||
@implementation QCocoaMenuLoader
|
||||
|
||||
+ (instancetype)sharedMenuLoader
|
||||
@ -314,13 +308,13 @@ QT_FORWARD_DECLARE_CLASS(QString)
|
||||
{
|
||||
|
||||
#ifndef QT_NO_TRANSLATION
|
||||
[servicesItem setTitle:qt_mac_applicationmenu_string(0).toNSString()];
|
||||
[hideItem setTitle:qt_mac_applicationmenu_string(1).arg(qt_mac_applicationName()).toNSString()];
|
||||
[hideAllOthersItem setTitle:qt_mac_applicationmenu_string(2).toNSString()];
|
||||
[showAllItem setTitle:qt_mac_applicationmenu_string(3).toNSString()];
|
||||
[preferencesItem setTitle:qt_mac_applicationmenu_string(4).toNSString()];
|
||||
[quitItem setTitle:qt_mac_applicationmenu_string(5).arg(qt_mac_applicationName()).toNSString()];
|
||||
[aboutItem setTitle:qt_mac_applicationmenu_string(6).arg(qt_mac_applicationName()).toNSString()];
|
||||
[servicesItem setTitle:qt_mac_applicationmenu_string(ServicesAppMenuItem).toNSString()];
|
||||
[hideItem setTitle:qt_mac_applicationmenu_string(HideAppMenuItem).arg(qt_mac_applicationName()).toNSString()];
|
||||
[hideAllOthersItem setTitle:qt_mac_applicationmenu_string(HideOthersAppMenuItem).toNSString()];
|
||||
[showAllItem setTitle:qt_mac_applicationmenu_string(ShowAllAppMenuItem).toNSString()];
|
||||
[preferencesItem setTitle:qt_mac_applicationmenu_string(PreferencesAppMenuItem).toNSString()];
|
||||
[quitItem setTitle:qt_mac_applicationmenu_string(QuitAppMenuItem).arg(qt_mac_applicationName()).toNSString()];
|
||||
[aboutItem setTitle:qt_mac_applicationmenu_string(AboutAppMenuItem).arg(qt_mac_applicationName()).toNSString()];
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -67,6 +67,7 @@
|
||||
#include <qpa/qwindowsysteminterface.h>
|
||||
|
||||
#include <QtCore/QDebug>
|
||||
#include <QtCore/QLibraryInfo>
|
||||
|
||||
#include <dwmapi.h>
|
||||
|
||||
@ -1572,7 +1573,7 @@ void QWindowsWindow::setGeometry(const QRect &rectIn)
|
||||
setFlag(WithinSetGeometry);
|
||||
setGeometry_sys(rect);
|
||||
clearFlag(WithinSetGeometry);
|
||||
if (m_data.geometry != rect) {
|
||||
if (m_data.geometry != rect && (isVisible() || QLibraryInfo::isDebugBuild())) {
|
||||
qWarning("%s: Unable to set geometry %dx%d+%d+%d on %s/'%s'."
|
||||
" Resulting geometry: %dx%d+%d+%d "
|
||||
"(frame: %d, %d, %d, %d, custom margin: %d, %d, %d, %d"
|
||||
|
@ -267,6 +267,7 @@ int runMoc(int argc, char **argv)
|
||||
QCommandLineOption prependIncludeOption(QStringLiteral("b"));
|
||||
prependIncludeOption.setDescription(QStringLiteral("Prepend #include <file> (preserve default include)."));
|
||||
prependIncludeOption.setValueName(QStringLiteral("file"));
|
||||
prependIncludeOption.setFlags(QCommandLineOption::ShortOptionStyle);
|
||||
parser.addOption(prependIncludeOption);
|
||||
|
||||
QCommandLineOption includeOption(QStringLiteral("include"));
|
||||
|
@ -992,7 +992,7 @@ static void mergeStringLiterals(Symbols *_symbols)
|
||||
mergeSymbolLexem.reserve(literalsLength);
|
||||
mergeSymbolLexem.append('"');
|
||||
mergeSymbolLexem.append(mergeSymbolOriginalLexem);
|
||||
for (Symbols::const_iterator j = mergeSymbol + 1; j != i; ++j)
|
||||
for (Symbols::iterator j = mergeSymbol + 1; j != i; ++j)
|
||||
mergeSymbolLexem.append(j->lex.constData() + j->from + 1, j->len - 2); // append j->unquotedLexem()
|
||||
mergeSymbolLexem.append('"');
|
||||
mergeSymbol->len = mergeSymbol->lex.length();
|
||||
|
@ -953,7 +953,7 @@ QAccessibleWindowContainer::QAccessibleWindowContainer(QWidget *w)
|
||||
|
||||
int QAccessibleWindowContainer::childCount() const
|
||||
{
|
||||
if (container()->containedWindow())
|
||||
if (container()->containedWindow() && QAccessible::queryAccessibleInterface(container()->containedWindow()))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
@ -1468,8 +1468,8 @@ void QWizardPrivate::updateButtonTexts()
|
||||
// even in RTL mode, so do the same, even if it might be counter-intuitive.
|
||||
// The shortcut for 'back' is set in class QVistaBackButton.
|
||||
#if QT_CONFIG(shortcut)
|
||||
if (btns[QWizard::NextButton])
|
||||
btns[QWizard::NextButton]->setShortcut(isVistaThemeEnabled() ? QKeySequence(Qt::ALT | Qt::Key_Right) : QKeySequence());
|
||||
if (btns[QWizard::NextButton] && isVistaThemeEnabled())
|
||||
btns[QWizard::NextButton]->setShortcut(QKeySequence(Qt::ALT | Qt::Key_Right));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -1120,6 +1120,8 @@ void
|
||||
QAction::setData(const QVariant &data)
|
||||
{
|
||||
Q_D(QAction);
|
||||
if (d->userData == data)
|
||||
return;
|
||||
d->userData = data;
|
||||
d->sendDataChanged();
|
||||
}
|
||||
|
@ -1350,7 +1350,8 @@ QRect QLayout::alignmentRect(const QRect &r) const
|
||||
/*!
|
||||
Removes the widget \a widget from the layout. After this call, it
|
||||
is the caller's responsibility to give the widget a reasonable
|
||||
geometry or to put the widget back into a layout.
|
||||
geometry or to put the widget back into a layout or to explicitly
|
||||
hide it if necessary.
|
||||
|
||||
\b{Note:} The ownership of \a widget remains the same as
|
||||
when it was added.
|
||||
|
@ -109,6 +109,30 @@ QT_END_NAMESPACE
|
||||
|
||||
Q_DECLARE_METATYPE(QFile::FileError)
|
||||
|
||||
|
||||
class StdioFileGuard
|
||||
{
|
||||
Q_DISABLE_COPY(StdioFileGuard)
|
||||
public:
|
||||
explicit StdioFileGuard(FILE *f = nullptr) : m_file(f) {}
|
||||
~StdioFileGuard() { close(); }
|
||||
|
||||
operator FILE *() const { return m_file; }
|
||||
|
||||
void close();
|
||||
|
||||
private:
|
||||
FILE * m_file;
|
||||
};
|
||||
|
||||
void StdioFileGuard::close()
|
||||
{
|
||||
if (m_file != nullptr) {
|
||||
fclose(m_file);
|
||||
m_file = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
class tst_QFile : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
@ -660,14 +684,13 @@ void tst_QFile::size()
|
||||
}
|
||||
|
||||
{
|
||||
QFile f;
|
||||
FILE* stream = QT_FOPEN(filename.toLocal8Bit().constData(), "rb");
|
||||
StdioFileGuard stream(QT_FOPEN(filename.toLocal8Bit().constData(), "rb"));
|
||||
QVERIFY( stream );
|
||||
QFile f;
|
||||
QVERIFY( f.open(stream, QIODevice::ReadOnly) );
|
||||
QCOMPARE( f.size(), size );
|
||||
|
||||
f.close();
|
||||
fclose(stream);
|
||||
}
|
||||
|
||||
{
|
||||
@ -1592,12 +1615,34 @@ void tst_QFile::writeTextFile()
|
||||
}
|
||||
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
|
||||
// Helper for executing QFile::open() with warning in QTRY_VERIFY(), which evaluates the condition
|
||||
// multiple times
|
||||
static bool qFileOpen(QFile &file, QIODevice::OpenMode ioFlags)
|
||||
{
|
||||
const bool result = file.isOpen() || file.open(ioFlags);
|
||||
if (!result)
|
||||
qWarning() << "Cannot open" << file.fileName() << ':' << file.errorString();
|
||||
return result;
|
||||
}
|
||||
|
||||
// Helper for executing fopen() with warning in QTRY_VERIFY(), which evaluates the condition
|
||||
// multiple times
|
||||
static bool fOpen(const QByteArray &fileName, const char *mode, FILE **file)
|
||||
{
|
||||
if (*file == nullptr)
|
||||
*file = fopen(fileName.constData(), mode);
|
||||
if (*file == nullptr)
|
||||
qWarning("Cannot open %s: %s", fileName.constData(), strerror(errno));
|
||||
return *file != nullptr;
|
||||
}
|
||||
|
||||
void tst_QFile::largeUncFileSupport()
|
||||
{
|
||||
qint64 size = Q_INT64_C(8589934592);
|
||||
qint64 dataOffset = Q_INT64_C(8589914592);
|
||||
QByteArray knownData("LargeFile content at offset 8589914592");
|
||||
QString largeFile("//" + QtNetworkSettings::winServerName() + "/testsharelargefile/file.bin");
|
||||
const QByteArray largeFileEncoded = QFile::encodeName(largeFile);
|
||||
|
||||
{
|
||||
// 1) Native file handling.
|
||||
@ -1605,31 +1650,36 @@ void tst_QFile::largeUncFileSupport()
|
||||
QVERIFY2(file.exists(), msgFileDoesNotExist(largeFile));
|
||||
|
||||
QCOMPARE(file.size(), size);
|
||||
QVERIFY2(file.open(QIODevice::ReadOnly), msgOpenFailed(file).constData());
|
||||
// Retry in case of sharing violation
|
||||
QTRY_VERIFY2(qFileOpen(file, QIODevice::ReadOnly), msgOpenFailed(file).constData());
|
||||
QCOMPARE(file.size(), size);
|
||||
QVERIFY(file.seek(dataOffset));
|
||||
QCOMPARE(file.read(knownData.size()), knownData);
|
||||
}
|
||||
{
|
||||
// 2) stdlib file handling.
|
||||
FILE *fhF = nullptr;
|
||||
// Retry in case of sharing violation
|
||||
QTRY_VERIFY(fOpen(largeFileEncoded, "rb", &fhF));
|
||||
StdioFileGuard fh(fhF);
|
||||
QFile file;
|
||||
FILE *fh = fopen(QFile::encodeName(largeFile).data(), "rb");
|
||||
QVERIFY(file.open(fh, QIODevice::ReadOnly));
|
||||
QCOMPARE(file.size(), size);
|
||||
QVERIFY(file.seek(dataOffset));
|
||||
QCOMPARE(file.read(knownData.size()), knownData);
|
||||
fclose(fh);
|
||||
}
|
||||
{
|
||||
// 3) stdio file handling.
|
||||
QFile file;
|
||||
FILE *fh = fopen(QFile::encodeName(largeFile).data(), "rb");
|
||||
FILE *fhF = nullptr;
|
||||
// Retry in case of sharing violation
|
||||
QTRY_VERIFY(fOpen(largeFileEncoded, "rb", &fhF));
|
||||
StdioFileGuard fh(fhF);
|
||||
int fd = int(_fileno(fh));
|
||||
QFile file;
|
||||
QVERIFY(file.open(fd, QIODevice::ReadOnly));
|
||||
QCOMPARE(file.size(), size);
|
||||
QVERIFY(file.seek(dataOffset));
|
||||
QCOMPARE(file.read(knownData.size()), knownData);
|
||||
fclose(fh);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@ -1670,7 +1720,7 @@ void tst_QFile::bufferedRead()
|
||||
file.write("abcdef");
|
||||
file.close();
|
||||
|
||||
FILE *stdFile = fopen("stdfile.txt", "r");
|
||||
StdioFileGuard stdFile(fopen("stdfile.txt", "r"));
|
||||
QVERIFY(stdFile);
|
||||
char c;
|
||||
QCOMPARE(int(fread(&c, 1, 1, stdFile)), 1);
|
||||
@ -1685,8 +1735,6 @@ void tst_QFile::bufferedRead()
|
||||
QCOMPARE(c, 'b');
|
||||
QCOMPARE(file.pos(), qlonglong(2));
|
||||
}
|
||||
|
||||
fclose(stdFile);
|
||||
}
|
||||
|
||||
#ifdef Q_OS_UNIX
|
||||
@ -1815,7 +1863,7 @@ void tst_QFile::FILEReadWrite()
|
||||
f.close();
|
||||
}
|
||||
|
||||
FILE *fp = fopen("FILEReadWrite.txt", "r+b");
|
||||
StdioFileGuard fp(fopen("FILEReadWrite.txt", "r+b"));
|
||||
QVERIFY(fp);
|
||||
QFile file;
|
||||
QVERIFY2(file.open(fp, QFile::ReadWrite), msgOpenFailed(file).constData());
|
||||
@ -1850,7 +1898,7 @@ void tst_QFile::FILEReadWrite()
|
||||
|
||||
}
|
||||
file.close();
|
||||
fclose(fp);
|
||||
fp.close();
|
||||
|
||||
// check modified file
|
||||
{
|
||||
@ -2436,11 +2484,10 @@ void tst_QFile::virtualFile()
|
||||
|
||||
void tst_QFile::textFile()
|
||||
{
|
||||
#if defined(Q_OS_WIN)
|
||||
FILE *fs = ::fopen("writeabletextfile", "wt");
|
||||
#else
|
||||
FILE *fs = ::fopen("writeabletextfile", "w");
|
||||
#endif
|
||||
const char *openMode = QOperatingSystemVersion::current().type() != QOperatingSystemVersion::Windows
|
||||
? "w" : "wt";
|
||||
StdioFileGuard fs(fopen("writeabletextfile", openMode));
|
||||
QVERIFY(fs);
|
||||
QFile f;
|
||||
QByteArray part1("This\nis\na\nfile\nwith\nnewlines\n");
|
||||
QByteArray part2("Add\nsome\nmore\nnewlines\n");
|
||||
@ -2449,7 +2496,7 @@ void tst_QFile::textFile()
|
||||
f.write(part1);
|
||||
f.write(part2);
|
||||
f.close();
|
||||
::fclose(fs);
|
||||
fs.close();
|
||||
|
||||
QFile file("writeabletextfile");
|
||||
QVERIFY2(file.open(QIODevice::ReadOnly), msgOpenFailed(file).constData());
|
||||
@ -2705,11 +2752,12 @@ void tst_QFile::handle()
|
||||
|
||||
//test round trip of adopted stdio file handle
|
||||
QFile file2;
|
||||
FILE *fp = fopen(qPrintable(m_testSourceFile), "r");
|
||||
StdioFileGuard fp(fopen(qPrintable(m_testSourceFile), "r"));
|
||||
QVERIFY(fp);
|
||||
file2.open(fp, QIODevice::ReadOnly);
|
||||
QCOMPARE(int(file2.handle()), int(fileno(fp)));
|
||||
QCOMPARE(int(file2.handle()), int(fileno(fp)));
|
||||
fclose(fp);
|
||||
fp.close();
|
||||
|
||||
//test round trip of adopted posix file handle
|
||||
#ifdef Q_OS_UNIX
|
||||
|
@ -21,6 +21,7 @@
|
||||
<file>platforms/+unix/+darwin/test</file>
|
||||
<file>platforms/+unix/+haiku/test</file>
|
||||
<file>platforms/+unix/+linux/test</file>
|
||||
<file>platforms/+unix/+qnx/test</file>
|
||||
<file>platforms/+unix/test</file>
|
||||
<file>platforms/+windows/+wince/test</file>
|
||||
<file>platforms/+windows/+winnt/test</file>
|
||||
@ -34,6 +35,7 @@
|
||||
<file>platforms/+mac/test</file>
|
||||
<file>platforms/+haiku/test</file>
|
||||
<file>platforms/+linux/test</file>
|
||||
<file>platforms/+qnx/test</file>
|
||||
<file>platforms/+wince/test</file>
|
||||
<file>platforms/+winrt/test</file>
|
||||
|
||||
@ -44,6 +46,7 @@
|
||||
<file>platforms/+macos/test2</file>
|
||||
<file>platforms/+haiku/test2</file>
|
||||
<file>platforms/+linux/test2</file>
|
||||
<file>platforms/+qnx/test2</file>
|
||||
<file>platforms/+wince/test2</file>
|
||||
<file>platforms/+winnt/test2</file>
|
||||
<file>platforms/+winrt/test2</file>
|
||||
|
@ -86,7 +86,7 @@ void tst_QFileSelector::basicTest_data()
|
||||
QString expectedPlatform2File(""); //Only the last selector
|
||||
QString expectedPlatform3File; // Only the first selector (the family)
|
||||
#if defined(Q_OS_UNIX) && !defined(Q_OS_ANDROID) && \
|
||||
!defined(Q_OS_DARWIN) && !defined(Q_OS_LINUX) && !defined(Q_OS_HAIKU)
|
||||
!defined(Q_OS_DARWIN) && !defined(Q_OS_LINUX) && !defined(Q_OS_HAIKU) && !defined(Q_OS_QNX)
|
||||
/* We are only aware of specific unixes, and do not have test files for any of the others.
|
||||
However those unixes can get a selector added from the result of a uname call, so this will
|
||||
lead to a case where we don't have that file so we can't expect the concatenation of platform
|
||||
|
@ -2063,6 +2063,11 @@ void tst_QUrl::isValid()
|
||||
QVERIFY(!url.isValid());
|
||||
QVERIFY(url.toString().isEmpty());
|
||||
QVERIFY(url.errorString().contains("Path component starts with '//' and authority is absent"));
|
||||
|
||||
// should disappear if we set a port
|
||||
url.setPort(80);
|
||||
QVERIFY(url.isValid());
|
||||
QCOMPARE(url.toString(), QString("http://:80//example.com"));
|
||||
}
|
||||
|
||||
{
|
||||
@ -2071,6 +2076,13 @@ void tst_QUrl::isValid()
|
||||
QVERIFY(!url.isValid());
|
||||
QVERIFY(url.toString().isEmpty());
|
||||
QVERIFY(url.errorString().contains("':' before any '/'"));
|
||||
|
||||
// this specific error disappears if we set anything in the authority,
|
||||
// but then we run into another error
|
||||
url.setPort(80);
|
||||
QVERIFY(!url.isValid());
|
||||
QVERIFY(url.toString().isEmpty());
|
||||
QVERIFY(url.errorString().contains("Path component is relative and authority is present"));
|
||||
}
|
||||
|
||||
{
|
||||
@ -2810,6 +2822,29 @@ void tst_QUrl::setPort()
|
||||
QCOMPARE(url.port(), -1);
|
||||
QVERIFY(url.errorString().contains("out of range"));
|
||||
}
|
||||
|
||||
{
|
||||
QUrl reference("//:80");
|
||||
QUrl piecewise;
|
||||
piecewise.setPort(80);
|
||||
QCOMPARE(piecewise, reference);
|
||||
}
|
||||
|
||||
{
|
||||
// setAuthority must clear the port
|
||||
QUrl url("http://example.com:80");
|
||||
url.setAuthority("example.org");
|
||||
QCOMPARE(url.port(), -1);
|
||||
QCOMPARE(url.toString(), QString("http://example.org"));
|
||||
}
|
||||
|
||||
{
|
||||
// setAuthority must clear the port
|
||||
QUrl url("http://example.com:80");
|
||||
url.setAuthority(QString());
|
||||
QCOMPARE(url.port(), -1);
|
||||
QCOMPARE(url.toString(), QString("http:"));
|
||||
}
|
||||
}
|
||||
|
||||
void tst_QUrl::port_data()
|
||||
|
@ -491,10 +491,12 @@ private Q_SLOTS:
|
||||
void ioHttpRedirect_data();
|
||||
void ioHttpRedirect();
|
||||
void ioHttpRedirectFromLocalToRemote();
|
||||
void ioHttpRedirectPost_data();
|
||||
void ioHttpRedirectPost();
|
||||
void ioHttpRedirectPostPut_data();
|
||||
void ioHttpRedirectPostPut();
|
||||
void ioHttpRedirectMultipartPost_data();
|
||||
void ioHttpRedirectMultipartPost();
|
||||
void ioHttpRedirectDelete();
|
||||
void ioHttpRedirectCustom();
|
||||
#ifndef QT_NO_SSL
|
||||
void putWithServerClosingConnectionImmediately();
|
||||
#endif
|
||||
@ -546,7 +548,7 @@ static void setupSslServer(QSslSocket* serverSocket)
|
||||
}
|
||||
#endif
|
||||
|
||||
// Does not work for PUT! Limited support for POST.
|
||||
// Limited support for POST and PUT.
|
||||
class MiniHttpServer: public QTcpServer
|
||||
{
|
||||
Q_OBJECT
|
||||
@ -678,7 +680,7 @@ public slots:
|
||||
|
||||
if (doubleEndlPos != -1) {
|
||||
const int endOfHeader = doubleEndlPos + 4;
|
||||
hasContent = receivedData.startsWith("POST");
|
||||
hasContent = receivedData.startsWith("POST") || receivedData.startsWith("PUT");
|
||||
if (hasContent && contentLength == 0)
|
||||
parseContentLength();
|
||||
contentRead = receivedData.length() - endOfHeader;
|
||||
@ -8546,37 +8548,46 @@ void tst_QNetworkReply::ioHttpRedirectFromLocalToRemote()
|
||||
QCOMPARE(reply->readAll(), reference.readAll());
|
||||
}
|
||||
|
||||
void tst_QNetworkReply::ioHttpRedirectPost_data()
|
||||
void tst_QNetworkReply::ioHttpRedirectPostPut_data()
|
||||
{
|
||||
QTest::addColumn<bool>("usePost");
|
||||
QTest::addColumn<QString>("status");
|
||||
QTest::addColumn<QByteArray>("data");
|
||||
QTest::addColumn<QString>("contentType");
|
||||
|
||||
QByteArray data;
|
||||
data = "hello world";
|
||||
QTest::addRow("307") << "307 Temporary Redirect" << data << "text/plain";
|
||||
QTest::addRow("post-307") << true << "307 Temporary Redirect" << data << "text/plain";
|
||||
QTest::addRow("put-307") << false << "307 Temporary Redirect" << data << "text/plain";
|
||||
QString permanentRedirect = "308 Permanent Redirect";
|
||||
QTest::addRow("308") << permanentRedirect << data << "text/plain";
|
||||
QTest::addRow("post-308") << true << permanentRedirect << data << "text/plain";
|
||||
QTest::addRow("put-308") << false << permanentRedirect << data << "text/plain";
|
||||
|
||||
// Some data from ::putToFile_data
|
||||
data = "";
|
||||
QTest::newRow("empty") << permanentRedirect << data << "application/octet-stream";
|
||||
QTest::newRow("post-empty") << true << permanentRedirect << data << "application/octet-stream";
|
||||
QTest::newRow("put-empty") << false << permanentRedirect << data << "application/octet-stream";
|
||||
|
||||
data = QByteArray("abcd\0\1\2\abcd",12);
|
||||
QTest::newRow("with-nul") << permanentRedirect << data << "application/octet-stream";
|
||||
QTest::newRow("post-with-nul") << true << permanentRedirect << data << "application/octet-stream";
|
||||
QTest::newRow("put-with-nul") << false << permanentRedirect << data << "application/octet-stream";
|
||||
|
||||
data = QByteArray(4097, '\4');
|
||||
QTest::newRow("4k+1") << permanentRedirect << data << "application/octet-stream";
|
||||
QTest::newRow("post-4k+1") << true << permanentRedirect << data << "application/octet-stream";
|
||||
QTest::newRow("put-4k+1") << false << permanentRedirect << data << "application/octet-stream";
|
||||
|
||||
data = QByteArray(128*1024+1, '\177');
|
||||
QTest::newRow("128k+1") << permanentRedirect << data << "application/octet-stream";
|
||||
QTest::newRow("post-128k+1") << true << permanentRedirect << data << "application/octet-stream";
|
||||
QTest::newRow("put-128k+1") << false << permanentRedirect << data << "application/octet-stream";
|
||||
|
||||
data = QByteArray(2*1024*1024+1, '\177');
|
||||
QTest::newRow("2MB+1") << permanentRedirect << data << "application/octet-stream";
|
||||
QTest::newRow("post-2MB+1") << true << permanentRedirect << data << "application/octet-stream";
|
||||
QTest::newRow("put-2MB+1") << false << permanentRedirect << data << "application/octet-stream";
|
||||
}
|
||||
|
||||
void tst_QNetworkReply::ioHttpRedirectPost()
|
||||
void tst_QNetworkReply::ioHttpRedirectPostPut()
|
||||
{
|
||||
QFETCH(bool, usePost);
|
||||
QFETCH(QString, status);
|
||||
QFETCH(QByteArray, data);
|
||||
QFETCH(QString, contentType);
|
||||
@ -8595,7 +8606,7 @@ void tst_QNetworkReply::ioHttpRedirectPost()
|
||||
auto oldRedirectPolicy = manager.redirectPolicy();
|
||||
manager.setRedirectPolicy(QNetworkRequest::RedirectPolicy::NoLessSafeRedirectPolicy);
|
||||
|
||||
QNetworkReplyPtr reply(manager.post(request, data));
|
||||
QNetworkReplyPtr reply(usePost ? manager.post(request, data) : manager.put(request, data));
|
||||
// Restore previous policy:
|
||||
manager.setRedirectPolicy(oldRedirectPolicy);
|
||||
|
||||
@ -8664,6 +8675,50 @@ void tst_QNetworkReply::ioHttpRedirectMultipartPost()
|
||||
QCOMPARE(replyData, expectedReplyData);
|
||||
}
|
||||
|
||||
void tst_QNetworkReply::ioHttpRedirectDelete()
|
||||
{
|
||||
MiniHttpServer target(httpEmpty200Response, false);
|
||||
QUrl targetUrl("http://localhost/");
|
||||
targetUrl.setPort(target.serverPort());
|
||||
|
||||
QString redirectReply = tempRedirectReplyStr().arg(targetUrl.toString());
|
||||
MiniHttpServer redirectServer(redirectReply.toLatin1());
|
||||
QUrl url("http://localhost/");
|
||||
url.setPort(redirectServer.serverPort());
|
||||
QNetworkRequest request(url);
|
||||
auto oldRedirectPolicy = manager.redirectPolicy();
|
||||
manager.setRedirectPolicy(QNetworkRequest::RedirectPolicy::NoLessSafeRedirectPolicy);
|
||||
|
||||
QNetworkReplyPtr reply(manager.deleteResource(request));
|
||||
// Restore previous policy:
|
||||
manager.setRedirectPolicy(oldRedirectPolicy);
|
||||
|
||||
QCOMPARE(waitForFinish(reply), int(Success));
|
||||
QVERIFY2(target.receivedData.startsWith("DELETE"), "Target server called with the wrong method");
|
||||
}
|
||||
|
||||
void tst_QNetworkReply::ioHttpRedirectCustom()
|
||||
{
|
||||
MiniHttpServer target(httpEmpty200Response, false);
|
||||
QUrl targetUrl("http://localhost/");
|
||||
targetUrl.setPort(target.serverPort());
|
||||
|
||||
QString redirectReply = tempRedirectReplyStr().arg(targetUrl.toString());
|
||||
MiniHttpServer redirectServer(redirectReply.toLatin1());
|
||||
QUrl url("http://localhost/");
|
||||
url.setPort(redirectServer.serverPort());
|
||||
QNetworkRequest request(url);
|
||||
auto oldRedirectPolicy = manager.redirectPolicy();
|
||||
manager.setRedirectPolicy(QNetworkRequest::RedirectPolicy::NoLessSafeRedirectPolicy);
|
||||
|
||||
QNetworkReplyPtr reply(manager.sendCustomRequest(request, QByteArrayLiteral("CUSTOM")));
|
||||
// Restore previous policy:
|
||||
manager.setRedirectPolicy(oldRedirectPolicy);
|
||||
|
||||
QCOMPARE(waitForFinish(reply), int(Success));
|
||||
QVERIFY2(target.receivedData.startsWith("CUSTOM"), "Target server called with the wrong method");
|
||||
}
|
||||
|
||||
#ifndef QT_NO_SSL
|
||||
|
||||
class PutWithServerClosingConnectionImmediatelyHandler: public QObject
|
||||
|
@ -47,6 +47,7 @@
|
||||
#include <qpa/qplatformintegration.h>
|
||||
#include <qpa/qplatformaccessibility.h>
|
||||
#include <QtGui/private/qguiapplication_p.h>
|
||||
#include <QtGui/private/qhighdpiscaling_p.h>
|
||||
|
||||
#if defined(Q_OS_WIN) && defined(interface)
|
||||
# undef interface
|
||||
@ -301,6 +302,7 @@ void tst_QAccessibility::cleanup()
|
||||
qAccessibleEventString(list.at(i)->type()), list.at(i)->child());
|
||||
}
|
||||
QTestAccessibility::clearEvents();
|
||||
QTRY_VERIFY(QApplication::topLevelWidgets().isEmpty());
|
||||
}
|
||||
|
||||
void tst_QAccessibility::eventTest()
|
||||
@ -3743,14 +3745,14 @@ void tst_QAccessibility::bridgeTest()
|
||||
// Ideally it should be extended to test all aspects of the bridge.
|
||||
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
|
||||
// First, test MSAA part of bridge
|
||||
QWidget *window = new QWidget;
|
||||
QVBoxLayout *lay = new QVBoxLayout(window);
|
||||
QPushButton *button = new QPushButton(tr("Push me"), window);
|
||||
QTextEdit *te = new QTextEdit(window);
|
||||
QWidget window;
|
||||
QVBoxLayout *lay = new QVBoxLayout(&window);
|
||||
QPushButton *button = new QPushButton(tr("Push me"), &window);
|
||||
QTextEdit *te = new QTextEdit(&window);
|
||||
te->setText(QLatin1String("hello world\nhow are you today?\n"));
|
||||
|
||||
// Add QTableWidget
|
||||
QTableWidget *tableWidget = new QTableWidget(3, 3, window);
|
||||
QTableWidget *tableWidget = new QTableWidget(3, 3, &window);
|
||||
tableWidget->setColumnCount(3);
|
||||
QStringList hHeader;
|
||||
hHeader << "h1" << "h2" << "h3";
|
||||
@ -3776,8 +3778,8 @@ void tst_QAccessibility::bridgeTest()
|
||||
lay->addWidget(tableWidget);
|
||||
lay->addWidget(label);
|
||||
|
||||
window->show();
|
||||
QVERIFY(QTest::qWaitForWindowExposed(window));
|
||||
window.show();
|
||||
QVERIFY(QTest::qWaitForWindowExposed(&window));
|
||||
|
||||
|
||||
/**************************************************
|
||||
@ -3789,9 +3791,8 @@ void tst_QAccessibility::bridgeTest()
|
||||
QCOMPARE(buttonRect.topLeft(), buttonPos);
|
||||
|
||||
// All set, now test the bridge.
|
||||
POINT pt;
|
||||
pt.x = buttonRect.center().x();
|
||||
pt.y = buttonRect.center().y();
|
||||
const QPoint nativePos = QHighDpi::toNativePixels(buttonRect.center(), window.windowHandle());
|
||||
POINT pt{nativePos.x(), nativePos.y()};
|
||||
IAccessible *iaccButton;
|
||||
|
||||
VARIANT varChild;
|
||||
@ -3817,7 +3818,7 @@ void tst_QAccessibility::bridgeTest()
|
||||
QCOMPARE(SUCCEEDED(hr), false);
|
||||
|
||||
hr = iaccButton->accLocation(&x, &y, &w, &h, varSELF);
|
||||
QCOMPARE(buttonRect, QRect(x, y, w, h));
|
||||
QCOMPARE(buttonRect, QHighDpi::fromNativePixels(QRect(x, y, w, h), window.windowHandle()));
|
||||
|
||||
#ifdef QT_SUPPORTS_IACCESSIBLE2
|
||||
// Test IAccessible2 part of bridge
|
||||
@ -3832,7 +3833,7 @@ void tst_QAccessibility::bridgeTest()
|
||||
long x, y;
|
||||
hr = ia2Component->get_locationInParent(&x, &y);
|
||||
QVERIFY(SUCCEEDED(hr));
|
||||
QCOMPARE(button->pos(), QPoint(x, y));
|
||||
QCOMPARE(button->pos(), QHighDpi::fromNativePixels(QPoint(x, y), window.windowHandle()));
|
||||
ia2Component->Release();
|
||||
|
||||
/***** Test IAccessibleAction *****/
|
||||
@ -3897,7 +3898,7 @@ void tst_QAccessibility::bridgeTest()
|
||||
/**************************************************
|
||||
* QWidget
|
||||
**************************************************/
|
||||
QWindow *windowHandle = window->windowHandle();
|
||||
QWindow *windowHandle = window.windowHandle();
|
||||
QPlatformNativeInterface *platform = QGuiApplication::platformNativeInterface();
|
||||
HWND hWnd = (HWND)platform->nativeResourceForWindow("handle", windowHandle);
|
||||
|
||||
|
@ -1252,7 +1252,7 @@ void tst_QSqlDatabase::psql_schemas()
|
||||
QString table = schemaName + '.' + qTableName("qtesttable", __FILE__, db);
|
||||
QVERIFY_SQL(q, exec("CREATE TABLE " + table + " (id int primary key, name varchar(20))"));
|
||||
|
||||
QVERIFY(db.tables().contains(table));
|
||||
QVERIFY(db.tables().contains(table, Qt::CaseInsensitive));
|
||||
|
||||
QSqlRecord rec = db.record(table);
|
||||
QCOMPARE(rec.count(), 2);
|
||||
|
@ -96,6 +96,7 @@ private slots:
|
||||
void task248107_backButton();
|
||||
void task255350_fieldObjectDestroyed();
|
||||
void taskQTBUG_25691_fieldObjectDestroyed2();
|
||||
void taskQTBUG_46894_nextButtonShortcut();
|
||||
|
||||
/*
|
||||
Things that could be added:
|
||||
@ -2700,5 +2701,24 @@ void tst_QWizard::taskQTBUG_25691_fieldObjectDestroyed2()
|
||||
::taskQTBUG_25691_fieldObjectDestroyed2();
|
||||
}
|
||||
|
||||
void tst_QWizard::taskQTBUG_46894_nextButtonShortcut()
|
||||
{
|
||||
for (int i = 0; i < QWizard::NStyles; ++i) {
|
||||
QWizard wizard;
|
||||
QWizard::WizardStyle style = static_cast<QWizard::WizardStyle>(i);
|
||||
wizard.setWizardStyle(style);
|
||||
wizard.show();
|
||||
QVERIFY(QTest::qWaitForWindowExposed(&wizard));
|
||||
|
||||
if (wizard.button(QWizard::NextButton)->text() == "&Next") {
|
||||
QCOMPARE(wizard.button(QWizard::NextButton)->shortcut(),
|
||||
QKeySequence(Qt::ALT | Qt::Key_Right));
|
||||
} else {
|
||||
QCOMPARE(wizard.button(QWizard::NextButton)->shortcut(),
|
||||
QKeySequence::mnemonic(wizard.button(QWizard::NextButton)->text()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QWizard)
|
||||
#include "tst_qwizard.moc"
|
||||
|
@ -62,6 +62,7 @@ private slots:
|
||||
void task229128TriggeredSignalWithoutActiongroup();
|
||||
void task229128TriggeredSignalWhenInActiongroup();
|
||||
void repeat();
|
||||
void setData();
|
||||
void keysequence(); // QTBUG-53381
|
||||
|
||||
private:
|
||||
@ -443,5 +444,20 @@ void tst_QAction::repeat()
|
||||
QCOMPARE(spy.count(), 2);
|
||||
}
|
||||
|
||||
void tst_QAction::setData() // QTBUG-62006
|
||||
{
|
||||
QAction act(nullptr);
|
||||
QSignalSpy spy(&act, &QAction::changed);
|
||||
QCOMPARE(act.data(), QVariant());
|
||||
QCOMPARE(spy.count(), 0);
|
||||
act.setData(QVariant());
|
||||
QCOMPARE(spy.count(), 0);
|
||||
|
||||
act.setData(-1);
|
||||
QCOMPARE(spy.count(), 1);
|
||||
act.setData(-1);
|
||||
QCOMPARE(spy.count(), 1);
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QAction)
|
||||
#include "tst_qaction.moc"
|
||||
|
@ -719,9 +719,7 @@ void tst_QMenuBar::taskQTBUG56860_focus()
|
||||
#endif
|
||||
QMainWindow w;
|
||||
QMenuBar *mb = w.menuBar();
|
||||
|
||||
if (mb->platformMenuBar())
|
||||
QSKIP("This test requires the Qt menubar.");
|
||||
mb->setNativeMenuBar(false);
|
||||
|
||||
QMenu *em = mb->addMenu("&Edit");
|
||||
em->setObjectName("EditMenu");
|
||||
@ -765,8 +763,7 @@ void tst_QMenuBar::check_homeKey()
|
||||
{
|
||||
// I'm temporarily shutting up this testcase.
|
||||
// Seems like the behaviour i'm expecting isn't ok.
|
||||
QVERIFY( true );
|
||||
return;
|
||||
QSKIP("This test has been \"temporarily\" disabled at least since 2009 :)");
|
||||
|
||||
QEXPECT_FAIL( "0", "Popupmenu should respond to a Home key", Abort );
|
||||
|
||||
@ -807,8 +804,7 @@ void tst_QMenuBar::check_endKey()
|
||||
{
|
||||
// I'm temporarily silenting this testcase.
|
||||
// Seems like the behaviour i'm expecting isn't ok.
|
||||
QVERIFY( true );
|
||||
return;
|
||||
QSKIP("This test has been \"temporarily\" disabled at least since 2009 :)");
|
||||
|
||||
QEXPECT_FAIL( "0", "Popupmenu should respond to an End key", Abort );
|
||||
|
||||
|
@ -0,0 +1,34 @@
|
||||
#-------------------------------------------------
|
||||
#
|
||||
# Project created by QtCreator 2017-10-19T16:07:04
|
||||
#
|
||||
#-------------------------------------------------
|
||||
|
||||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
|
||||
TARGET = BigMenuCreator
|
||||
TEMPLATE = app
|
||||
|
||||
# The following define makes your compiler emit warnings if you use
|
||||
# any feature of Qt which as been marked as deprecated (the exact warnings
|
||||
# depend on your compiler). Please consult the documentation of the
|
||||
# deprecated API in order to know how to port your code away from it.
|
||||
DEFINES += QT_DEPRECATED_WARNINGS
|
||||
|
||||
# You can also make your code fail to compile if you use deprecated APIs.
|
||||
# In order to do so, uncomment the following line.
|
||||
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||
|
||||
|
||||
SOURCES += \
|
||||
main.cpp \
|
||||
mainwindow.cpp
|
||||
|
||||
HEADERS += \
|
||||
mainwindow.h
|
||||
|
||||
FORMS += \
|
||||
mainwindow.ui
|
54
tests/manual/widgets/widgets/bigmenucreator/main.cpp
Normal file
54
tests/manual/widgets/widgets/bigmenucreator/main.cpp
Normal file
@ -0,0 +1,54 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
|
||||
** 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 General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** 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-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "mainwindow.h"
|
||||
#include <QApplication>
|
||||
#include <QCommandLineParser>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
|
||||
QCommandLineParser parser;
|
||||
parser.setApplicationDescription("BigMenuCreator");
|
||||
parser.addHelpOption();
|
||||
parser.addOptions({
|
||||
{ "new-menubar", QLatin1String("Use new menubar instead of QMainWindow's own.") },
|
||||
{ "no-parent", QLatin1String("When using a new menubar, do *not* set its parent on construction.") }
|
||||
});
|
||||
|
||||
parser.process(a);
|
||||
|
||||
MainWindow::newMenubar = parser.isSet("new-menubar");
|
||||
MainWindow::parentlessMenubar = parser.isSet("no-parent");
|
||||
|
||||
MainWindow w;
|
||||
w.show();
|
||||
|
||||
return a.exec();
|
||||
}
|
139
tests/manual/widgets/widgets/bigmenucreator/mainwindow.cpp
Normal file
139
tests/manual/widgets/widgets/bigmenucreator/mainwindow.cpp
Normal file
@ -0,0 +1,139 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
|
||||
** 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 General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** 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-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "mainwindow.h"
|
||||
#include "ui_mainwindow.h"
|
||||
|
||||
bool MainWindow::newMenubar = false;
|
||||
bool MainWindow::parentlessMenubar = false;
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent) :
|
||||
QMainWindow(parent),
|
||||
ui(new Ui::MainWindow)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
const int level = 3;
|
||||
QMenuBar *mb;
|
||||
if (newMenubar)
|
||||
mb = new QMenuBar(parentlessMenubar ? nullptr : this);
|
||||
else
|
||||
mb = ui->menuBar;
|
||||
populateMenu(mb, level);
|
||||
if (newMenubar)
|
||||
setMenuBar(mb);
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
// We do all the permutations on the following 3 operations:
|
||||
//
|
||||
// A: Add action to parent menu
|
||||
// P: Populate the submenu
|
||||
// S: Set action submenu
|
||||
//
|
||||
// Recursing on menu population gives more combinations of
|
||||
// creation and insertions.
|
||||
|
||||
void MainWindow::populateMenu(QWidget *menu, int level)
|
||||
{
|
||||
if (level > 0) {
|
||||
--level;
|
||||
doAPS(menu, level);
|
||||
doASP(menu, level);
|
||||
doPAS(menu, level);
|
||||
doSPA(menu, level);
|
||||
doSAP(menu, level);
|
||||
doPSA(menu, level);
|
||||
} else {
|
||||
static int itemCounter = 0;
|
||||
static const char *sym[] = { "Foo", "Bar", "Baz", "Quux" };
|
||||
for (uint i = 0; i < sizeof(sym) / sizeof(sym[0]); i++) {
|
||||
QString title = QString::fromLatin1("%1 Item %2").arg(QLatin1String(sym[i])).arg(itemCounter);
|
||||
menu->addAction(new QAction(title));
|
||||
}
|
||||
++itemCounter;
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::doAPS(QWidget *menu, int level)
|
||||
{
|
||||
auto *action = new QAction("A P S");
|
||||
menu->addAction(action);
|
||||
auto *submenu = new QMenu;
|
||||
populateMenu(submenu, level);
|
||||
action->setMenu(submenu);
|
||||
}
|
||||
|
||||
void MainWindow::doASP(QWidget *menu, int level)
|
||||
{
|
||||
auto *action = new QAction("A S P");
|
||||
menu->addAction(action);
|
||||
auto *submenu = new QMenu;
|
||||
action->setMenu(submenu);
|
||||
populateMenu(submenu, level);
|
||||
}
|
||||
|
||||
void MainWindow::doPAS(QWidget *menu, int level)
|
||||
{
|
||||
auto *submenu = new QMenu;
|
||||
populateMenu(submenu, level);
|
||||
auto *action = new QAction("P A S");
|
||||
menu->addAction(action);
|
||||
action->setMenu(submenu);
|
||||
}
|
||||
|
||||
void MainWindow::doSPA(QWidget *menu, int level)
|
||||
{
|
||||
auto *action = new QAction("S P A");
|
||||
auto *submenu = new QMenu;
|
||||
action->setMenu(submenu);
|
||||
populateMenu(submenu, level);
|
||||
menu->addAction(action);
|
||||
}
|
||||
|
||||
void MainWindow::doSAP(QWidget *menu, int level)
|
||||
{
|
||||
auto *action = new QAction("S A P");
|
||||
auto *submenu = new QMenu;
|
||||
action->setMenu(submenu);
|
||||
menu->addAction(action);
|
||||
populateMenu(submenu, level);
|
||||
}
|
||||
|
||||
void MainWindow::doPSA(QWidget *menu, int level)
|
||||
{
|
||||
auto *action = new QAction("P S A");
|
||||
auto *submenu = new QMenu;
|
||||
populateMenu(submenu, level);
|
||||
action->setMenu(submenu);
|
||||
menu->addAction(action);
|
||||
}
|
63
tests/manual/widgets/widgets/bigmenucreator/mainwindow.h
Normal file
63
tests/manual/widgets/widgets/bigmenucreator/mainwindow.h
Normal file
@ -0,0 +1,63 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
|
||||
** 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 General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** 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-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef MAINWINDOW_H
|
||||
#define MAINWINDOW_H
|
||||
|
||||
#include <QMainWindow>
|
||||
|
||||
namespace Ui {
|
||||
class MainWindow;
|
||||
}
|
||||
|
||||
class MainWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit MainWindow(QWidget *parent = 0);
|
||||
~MainWindow();
|
||||
|
||||
void doAPS(QWidget *menu, int level);
|
||||
void doASP(QWidget *menu, int level);
|
||||
void doPAS(QWidget *menu, int level);
|
||||
|
||||
void doSPA(QWidget *menu, int level);
|
||||
void doSAP(QWidget *menu, int level);
|
||||
void doPSA(QWidget *menu, int level);
|
||||
|
||||
void populateMenu(QWidget *menu, int level);
|
||||
|
||||
static bool newMenubar;
|
||||
static bool parentlessMenubar;
|
||||
|
||||
private:
|
||||
Ui::MainWindow *ui;
|
||||
};
|
||||
|
||||
#endif // MAINWINDOW_H
|
74
tests/manual/widgets/widgets/bigmenucreator/mainwindow.ui
Normal file
74
tests/manual/widgets/widgets/bigmenucreator/mainwindow.ui
Normal file
@ -0,0 +1,74 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>427</width>
|
||||
<height>372</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralWidget">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>16</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'.SF NS Text'; font-size:16pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt;">We do all the permutations on the following 3 operations:</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:14pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;"> A</span><span style=" font-size:14pt;">: Add action to parent menu</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;"> P</span><span style=" font-size:14pt;">: Populate the submenu</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;"> S</span><span style=" font-size:14pt;">: Set action submenu</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:14pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt;">This gets repeated 2 menu levels from the menubar. All menus and items are enabled and should show as such.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:14pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt;">The order of menus is APS, ASP, PAS, SPA, SAP, PSA.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:14pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt;">The order of terminal items is &quot;Foo&quot;, &quot;Bar&quot;, &quot;Baz&quot;, &quot;Quux&quot;.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:14pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt;">Rerun with &quot;--new-menubar&quot; and &quot;--no-parent&quot; to force using a new menubar instead of QMainWindow's own, with or without parent. QMainWindow::setMenuBar() will be called regardless of the parent option.</span></p></body></html></string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menuBar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>427</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QToolBar" name="mainToolBar">
|
||||
<attribute name="toolBarArea">
|
||||
<enum>TopToolBarArea</enum>
|
||||
</attribute>
|
||||
<attribute name="toolBarBreak">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusBar"/>
|
||||
</widget>
|
||||
<layoutdefault spacing="6" margin="11"/>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
Loading…
Reference in New Issue
Block a user