Commit Graph

29476 Commits

Author SHA1 Message Date
Gabriel de Dietrich
0f61cde4d9 Cocoa Menus: Introducing Menurama manual test
This manual test pretends to be a modest safeguard
against QMenu related regressions on macOS. It takes
a slightly different approach than the existing menus
manual test, tracking observed regressions instead of
providing extensive coverage (though this may change
in the future).

These regressions are listed as task numbers below,
most of them arising from the now infamous change,

     09acf326db QCocoaMenu: Decouple NSMenuItem from NSMenu

So, from now on, please run this and the menus manual
tests and look for regressions every time you make a
change regarding QCocoaMenu and related. And, if you're
fixing a regression, add the regression example to the
Menurama manual test.

Task-number: QTBUG-52931
Task-number: QTBUG-53085
Task-number: QTBUG-53251
Task-number: QTBUG-54633
Task-number: QTBUG-54637
Task-number: QTBUG-54698
Task-number: QTBUG-55121
Change-Id: I276e916dcdf00f1a44faf64d87050bc3a037a3b5
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2016-08-19 03:04:28 +00:00
Jake Petroules
36ca32dbb9 Don't disable examples on iOS and tvOS
This is just an excuse to let build failures slip past CI, as has
happened and been fixed recently.

Change-Id: If4356eaced0f90c7c455b21cc7676b0c9b7b1e27
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2016-08-18 22:31:10 +00:00
Jake Petroules
b4ebb61c0d Don't disable QtWidgets on tvOS
There's no technical reason for this.

Change-Id: Ia57fcdfa83531155790bc4541f88479cd9d4a5a1
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2016-08-18 22:31:02 +00:00
Peter Seiderer
9e85986fd0 qwidgetbackingstore: fix QT_NO_OPENGL compile
Readd QT_NO_OPENGL protection for qt_dummy_platformTextureList
declaration (lost by commit 2a7cee47e5).

Task-number: QTBUG-55269
Change-Id: I7ec613387af81d018dbbe99d2dfd3a6f36242a4c
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2016-08-18 19:19:32 +00:00
Oswald Buddenhagen
6a69163055 don't exclude headers which ceased to exist in the first place
Change-Id: Ia499f8b175033b983310ab93b9d830f0177ea373
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2016-08-18 17:11:13 +00:00
Oswald Buddenhagen
19877a0507 automatically exclude generated headers from syncqt checks
Change-Id: I349a132745165f8873eda351e86bf15c90156aaf
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2016-08-18 17:11:06 +00:00
Oswald Buddenhagen
a5bb91c2b8 make it possible to exclude private headers from syncqt include check
the limitation to public headers seemed pretty arbitrary.

Change-Id: I0f2290fe09c8a6a70d056ec250b902be7049790e
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2016-08-18 17:11:02 +00:00
Lars Knoll
6903cad03e Make the ICO image format a configurable feature
... including a [-no]-ico command line option.

Change-Id: I3cb13d2be72b512f72f8dcdb9de72e7a99e36e47
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-08-18 17:10:57 +00:00
Oswald Buddenhagen
d90db0f136 rewrite makespec verification with qmake based system
cleaner, and covers windows as well.

Change-Id: I0e884909a3f49610fab750ba1ef6112f43e5d5d1
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2016-08-18 17:10:52 +00:00
Lars Knoll
97b856b788 Use the qmake based configuration system also on Windows
Adapt configure.exe to use qmake to do most of the work of configuring
Qt. This unifies a large part of our configuration system between Unix
and Windows. configure.exe is now still doing the license check,
creating qconfig.cpp, building qmake, and not much more.

On the way, re-implement the still missing Windows-specific tests with
the new system.

The opengles2 vs. opengl-desktop conditions got a bit convoluted, as
Unix prefers desktop GL, while Windows GLES2 (via ANGLE). Superficially,
there is a circular dependency, but the platform scopes are supposed to
break it.

Done-with: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Change-Id: Ia1941f2c34b7f5bd4990a7673cd737361381c2e7
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-08-18 17:10:47 +00:00
Oswald Buddenhagen
c027cffbef make the windows configure also use config_help.txt
specifically, make configure.bat dump the text file (which got some
windows-specific adjustments).

incidentally, this change removes the need for including a pre-built
configure.exe into our source packages.

Change-Id: Ib3515c113f3602767554fe1493df226551a7bf10
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2016-08-18 17:10:39 +00:00
Lars Knoll
6a90c9a8e5 Handle windows line endings and tabs in json config files
Change-Id: I154629d862977dde5232db3bb2597474b6053ffd
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-08-18 17:10:35 +00:00
Oswald Buddenhagen
672c0b3721 unify configure command line saving with configure.exe
that is, save it to config.opt and recall it when -redo is used (and do
not write it again in this case).

a trivial config.status is still created, as having it is very
convenient when shadow-building.

Task-number: QTBUG-38792
Change-Id: I5e9f7374d6bfc60c427cbfd5e9b3e68bfcaae9f2
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2016-08-18 17:10:29 +00:00
Oswald Buddenhagen
fd3e12e7a6 replace mechanism to override variables from the mkspecs
it is sometimes desirable to override values from the mkspec without
modifying (or wrapping) the spec itself. linux distributors do this on a
regular basis.

so far, we'd pick up CFLAGS, etc. from the environment, in a somewhat
autoconf-like fashion. however, over time, this approach proved
problematic: the concept doesn't mix particularly well with mkspecs to
start with, is unexpected (and therefore causes frustration), and
doesn't mix well with cross-building (at least the way it was realized).
ironically, it was implemented this way (quite a while ago) upon my
explicit request ...

the new mechanism uses explicit variable manipulations on the configure
command line, just like qmake itself understands. as it happens, this is
again quite similar to autoconf-generated configure scripts. however,
this time around we don't pretend to be actually autoconf-like, so we
also don't try to map any variable names (some of which have different
semantics anyway).

this commit also eliminates the last use of the QMakeVar() function,
so delete it and the underlying infrastructure.

Task-number: QTBUG-32530
Task-number: QTBUG-42962
Change-Id: Id31a6b80e1add08ca21f5b178614bda530d12374
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2016-08-18 17:10:25 +00:00
Lars Knoll
9172143f52 Add configure.exe-like FOO_LIBS=bar style command line options
Add the command line options supported by the windows version of
configure and respect them when running our configure tests.

Done-with: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Change-Id: I1206d60a177e251540d34d232c73c930847564b3
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2016-08-18 17:10:18 +00:00
Lars Knoll
98ddf9262e Revamp configure system for widget styles
Add [-no]-style-foo command line options for all widget styles, bringing
this closer in line with configure.exe. Add proper platform dependencies
and a configure test for the required uxtheme.h header on Windows. Clean
up and simplify styles.pri. Don't let configure.exe define QT_NO_STYLE_*
any more, as styles.pri does that locally anyway.

Change-Id: I81341f887a65b4e45e77380974eb79743acfad77
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-08-18 17:10:13 +00:00
Lars Knoll
27b03be893 Add support for locating headers and libs in qt_configure
So far we only had support for locating executables. Also
support locating header files and libraries.

Change-Id: Ib2a83e8338d2da975204089d84c608061a081f29
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-08-18 17:10:03 +00:00
Lars Knoll
c8b46d3989 Implement proper dependencies for configuration tests
Some test types (like the compile tests) require that other
features have been checked before, so that the compile test
sets up the right environment. Implement this through a
'testTypeDependencies' section in the json file that explicitly
encodes those dependencies for certain test types.

This replaces the 'priority' field in the feature list.

Done-with: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Change-Id: I70e7c67a4f2c971149bcac090cecbbe9cfff3f57
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-08-18 17:09:57 +00:00
Oswald Buddenhagen
c0cc505209 rewrite library handling in configure
so far, each library was distributed over a test and (optionally) a
'library' output of a feature. this was conceptually messy and limiting.
so instead, turn libraries into a category of their own.

libraries now support multiple properly separated sources, which makes
overriding them a lot saner. sources can be conditional to accommodate
platform differences.

as an immediate consequence, move (almost) all library references from
the config test projects to the json file.
a few tests were excluded, because they are doing somewhat magic things
that should not be handled in this bulk change:
- freetype: .pri file shared with actual source code
- clock-gettime: -lrt is conditional, and there is a .pri file which is
  shared with actual source code
- ipc_posix: -lrt & -lpthread conditional
- iconv: -liconv conditional

the multi-source mechanism is used to make a variety of tests work on
windows, where the library name differs from unix (and sometimes between
build configurations). some tests still needed minor adjustments to
actually work.

on the way, fix up disagreements between manually specified libraries
and pkg-config lines (affecting several xcb-related tests).

Change-Id: Ic8c58556fa0cf8f981d386b13ea34b4431b127c5
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2016-08-18 17:09:52 +00:00
Oswald Buddenhagen
4b8dd9c846 fix name of stack-protector-strong feature
dashes, not underscores.

Change-Id: I51db3a5475ebf8dfe85e447baffafba225476967
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2016-08-18 17:09:46 +00:00
Oswald Buddenhagen
d175f799ca don't implicitly test for kms in egldevice test any more
having compound tests is messy, and we already have a separate test for
that anyway.

the kms test itself gains a fallback library, as that's what both the
egldevice test did and the actual projects using kms do.

Change-Id: I4544b64de86d58d6c6449bc0ad9095acaf144056
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2016-08-18 17:09:43 +00:00
Oswald Buddenhagen
492d7d14fc improve handling of test commands which produce output
never use $$system() directly, but instead use qtRunLoggedCommand() with
a newly introduced out parameter. that way we can print the command's
raw output, which should help debugging configure problems.
additionally, we now consistently check the exit code of all executed
commands, which should avoid confusing followup errors.

note that as a side effect some calls now use $$system()'s 'lines' mode
instead of the bizarre default splitting mode. this has no impact on any
of the cases, which is why it is basically a negligible style change at
this point.
however, qtLog() gained support for arguments with more than one element
to accommodate this.

Change-Id: I40d907e27de32dfec8d6086ce7d93fc4be18241f
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2016-08-18 17:09:38 +00:00
Oswald Buddenhagen
f99f28de31 remove the [-no]-native-gestures options from configure.exe
the code which they control is dead (due to not having been adjusted to
Q_WS_WIN disappearing).

Change-Id: I4b939e10d33b9da3a5642f303a84f297549ba522
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2016-08-18 17:09:34 +00:00
Lars Knoll
734e0c636e Remove the [-no]-qmake command line argument in configure.exe
Qt will not build with -no-qmake.

Change-Id: I0fb5995d53fd3d6e4e5bd956929ce43432fb526d
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-08-18 17:09:29 +00:00
Lars Knoll
81f54e5dd8 Remove some dead code from the configures
Done-with: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Change-Id: If725ae0abee4d636ac8775c53e34ab138d360905
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2016-08-18 17:09:23 +00:00
Oswald Buddenhagen
0b93d1a10a remove spurious QT_CONFIG -= opengl
it's not quite clear what the purpose of this is supposed to be,
especially given that the prf is loaded way after anyone would have
examined QT_CONFIG.

Change-Id: Ia49377c952902fed4084178c7f857e1acd11ad03
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2016-08-18 17:09:13 +00:00
Eskil Abrahamsen Blomfeldt
b8c1efcb88 DirectWrite: Fix calculating bounding box of glyphs
We don't support vertical text layouts in Qt, so the vertical
advance should always be 0 (like it is in other engines).
Since we were setting this, we would calculate the bounding
box of strings in the DirectWrite engine as if the layouts
were diagonal, adding up both the horizontal and vertical advances.

[ChangeLog][QtGui][Windows] Fixed height of text bounding box when
using no or vertical hinting preference, or when the device pixel
ratio is different from 1.

Task-number: QTBUG-51024
Change-Id: I329917eb8da71fdfdffe9651ca8f0f48d26b6a60
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
2016-08-18 16:01:58 +00:00
Allan Sandfeld Jensen
e231581f1f Remove type-punned unions
Type punning even over a union is not legal C++, and also causes the
compilers to produce poorly performing code.

This has already been fixed for the SSE2 code in bilinear sampling but
not for the NEON code.

Change-Id: Id5e184051e0bd78db730d83ef0dda56ac3206e5b
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
2016-08-18 15:48:59 +00:00
J-P Nurmi
916a8c44c4 Revert "Cocoa: make dialogs emit the "selected" signals"
This reverts commit dfa8854cf7 and
removes all "selected" signal emissions from the Cocoa platform
dialogs.

Even though it fixed the new QML dialogs that were relying on the
"selected" signals, it lead to duplicate signals with QColorDialog,
QFileDialog, and QFontDialog. We'll fix the new QML dialogs to not
rely on the selected signals, but handle it on accept the same way
than QtWidgets and QtQuick Dialogs do, so there is no need to repeat
the signals in all platform plugins.

Task-number: QTBUG-55299
Change-Id: I35e08cee92a4454544497b027ed10abad6c26673
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2016-08-18 15:01:15 +00:00
Maurice Kalinowski
4531ae8d69 winrt: only update window title for top level widgets
Previously we always updated the window title, independently whether the
window was visible / the toplevel one. This can also cause troubles when
setting the title during initialization.

Change-Id: I02ec0f0e385fa490f641ce83a6cb27717a31620f
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
2016-08-18 14:04:36 +00:00
Maurice Kalinowski
a75cfa60d7 winrt: Fix crashes for visible window management
First, offscreen windows/surfaces should not be tracked in the visible
window list.
Secondly when destroying a window, it is not guaranteed that it had been
removed first, hence enforce it to guarantee that the visibleWindows
list stays correct and does not hold invalid weak pointers to non
existing windows.

Change-Id: I7027ecd010b8bcb3d05e3f5d460662e883e42e50
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
2016-08-18 14:04:36 +00:00
Maurice Kalinowski
0f6ace8118 winrt: Fix crash when managing multiple top-level windows
When a window gets removed, the active focus window needs to be set to 0
instead of the the current window. Otherwise
QGuiApplicationPrivate::focus_window is set to an invalid pointer and
crashes when dereferenced.

Change-Id: I258b95e447de4cbfb7f19955079c2545a738e03f
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
2016-08-18 14:04:29 +00:00
Erik Verbruggen
3bf0c14a26 Darwin: Fix clang LTO builds
llvm-ar is not shipped as part of Xcode. Use libtool instead, just like
Xcode does.

Change-Id: Ic9c5e16c826c0d42979556f78d2cf6415542ef93
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2016-08-18 13:48:52 +00:00
Olivier Goffart
3c6220c4f8 Android selection handles
This commits implement the cursor and selection handle in the platform
plugin.

Task-number: QTBUG-34867
Change-Id: Icb3fd9ddfd9f4152e2004078a92a3d9502e9113c
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
2016-08-18 13:23:26 +00:00
Milla Pohjanheimo
bc2cee35c3 Blacklisting tst_QWidget::saveRestoreGeometry test on Ubuntu 16.04
The test is blacklisted already for Ubuntu 14.04, and needs to be
blacklisted for Ubuntu 16.04 too.

Task-number: QTBUG-46116
Change-Id: Ic321a4fd13e00c653e6c387d8a159832173b2eb3
Reviewed-by: Heikki Halmet <heikki.halmet@qt.io>
2016-08-18 11:37:15 +00:00
Jędrzej Nowacki
6cb5e4938d Remove declaration of QMacNativeWidgetPrivate
The class doesn't exist and should not be forward declared nor declared
as private of QMacNativeWidget.

Change-Id: I5dd5a12a372c06b6e750b33401a4960a8c884ce6
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2016-08-18 11:36:32 +00:00
Liang Qi
0ca4fcbc36 Merge remote-tracking branch 'origin/5.6' into 5.7
Conflicts:
	src/plugins/platforms/xcb/qxcbintegration.cpp

Change-Id: I2d71d06a55f730df19ace0dd3304238584a0497f
2016-08-18 11:07:51 +02:00
Morten Johan Sørvig
960a1e3bf3 QTestLib: Disable window state restore on macOS
For test runs we want to start with a clean slate
and ignore previously saved window state.

This also prevents the “previous restore failed” dialog
from from showing and blocking the test run.

Change-Id: I8e5b87a903cf1d937d628c2b062f917c4c37f176
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2016-08-18 08:46:25 +00:00
Anton Kudryavtsev
1075f6c764 Use QStringRef to optimize memory allocation
Replace substring functions that return QString
with corresponding functions that return QStringRef.

Change-Id: I3c485f89352a1ee66076fba74fd486da9349c354
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2016-08-18 07:29:37 +00:00
Allan Sandfeld Jensen
748aa6b064 Do not disable subpixel rendering on compile time
This is a runtime setting, as the user's freetype version can differ from
the developer's, and freetype already safely handles it internally when
not available.

Task-number: QTBUG-55345
Change-Id: I26e73728196d60ae26e5f1919ecd0dadac393890
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2016-08-18 06:11:02 +00:00
Gabriel de Dietrich
b13ff07f1d QCocoaInputContext: Fix wrong memory release
As per Core Foundation ownership conventions, we
should release 'source', which is a copy, and not
'langRef', which is a reference. This has shown
to lead to crashes in some occasions.

Change-Id: I2e59b8d62aac13bc60dc013c1ea621850132c719
Task-number: QTBUG-48772
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
2016-08-18 02:23:05 +00:00
Allan Sandfeld Jensen
469b139169 Register fonts with their given style name
Instead of guessing which styles we have available (always bold/italic)
register the ones we actually find.

Change-Id: I57380d0417411456a3037f8769440e7b43517e0e
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2016-08-17 21:55:20 +00:00
Timur Pocheptsov
2e4e73d8d3 HTTP/2 - fix invalid read (auto-test)
Since headersFrame is a reference to a vector's element, clearing this
vector before accessing headersFrame.flags is not a good idea, must be
done later.

Change-Id: I80eee0761ac1cad580e979be9371ec7588a694ac
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2016-08-17 20:23:59 +00:00
Timur Pocheptsov
3c5b9977cd HTTP/2 - do not set END_HEADERS if we have CONTINUATIONs
Setting END_HEADERS flag on a HEADERS frame means we do not have
CONTINUATION frame(s). So do NOT set it too early, only if we
fit into a single frame.

Change-Id: I891a2db227cee59e4eacfe7c2f18b431cd85fe47
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2016-08-17 20:23:34 +00:00
Dyami Caliri
ecb73a7bb3 QJsonValue: use Q_NULLPTR instead of 0 in ctor
Use Q_NULLPTR in all public headers

Task-number: QTBUG-45291
Change-Id: Ib294deb3c210a9a186448cbf9656af7a09fea2c1
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2016-08-17 19:54:40 +00:00
Marc Mutz
d1a4c4f3c9 xcb: eradicate Q_FOREACH loops
... and mark the library with QT_NO_FOREACH.

Change-Id: I4924f1419f470b5fa92bb2f3fdefa745b65957f7
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2016-08-17 19:52:21 +00:00
Marc Mutz
b961fca5f0 xcb: mark some types as movable/primitive
These are all held in Qt containers.

Change-Id: Ie285887b285bbcc0b70962d9f9c52d22d213d022
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2016-08-17 19:52:15 +00:00
Friedemann Kleint
e4bb9395c2 Standardize some "We mean it" comments
Fix the occurrences where the wrong classes are mentioned.

Change-Id: Ia291af77f0f454a39cab93e7376a110c19a07771
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2016-08-17 19:51:40 +00:00
Anton Kudryavtsev
b0dba5b874 QMimeData: use QStringBuilder more
Change-Id: I5a6937545561c51add0d48a618b1921cf9201c4b
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2016-08-17 19:44:02 +00:00
Gabriel de Dietrich
9b491616f8 Cocoa QPA Menus: Propagate enabled state downwards
NSMenu has autoenableItems set to true by default, and
we keep it this way in Qt. This means that NSMenuItem's
enabled property is basically ignored and therefore
QCocoaMenuItem::syncModalState() is wrong.

What is also wrong, is syncModalState()'s name in both
QCocoaMenuItem and QCocoaMenu. Indeed, this function's
role should be to ensure that the enabled state is
properly propagated down the menu hierarchy, whether
the reason is being in the context of a modal dialog
or the parent menu having been disabled by the app.
Notice that the latter case is specially needed when
a menubar menu is explicitly disabled.

Therefore, we introduce a separate flag for the parent
enabled state in order to avoid polluting the app-set
enabled state flag. This is done in both QCocoaMenu
and QCocoaMenuItem.

In the case of QCocoaMenuItem, these two flags define
whether an NSMenuItem is enabled state conjointly, and
set from -[QCocoaMenuDelegate validateMenuItem:]. The
rest of the logic remains as before. Similar logic is
used in QCocoaMenu::isEnabled().

In addition, the presence of the second flag allows us
to show disabled submenus in the same fashion native
Cocoa applications do. This means, the submenu item
itself remains enabled, allowing to show the submenu
popup where all its menu items will appear disabled.

Bonus change: merged all the bool flags into a bitfield
and made the compiler happy about the ivar reordering
in QCocoaMenu and QCocoaMenuItem's constructor.

Task-number: QTBUG-54698
Task-number: QTBUG-55121
Change-Id: Ie156cb3aa57a519103908ad4605f7b43c57e5aef
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@theqtcompany.com>
2016-08-17 18:21:53 +00:00