diff options
author | David Redondo <qt@david-redondo.de> | 2020-11-03 11:04:56 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2020-11-20 17:49:45 +0000 |
commit | c5336057301d6a62160bc672dd0ab081b3c26725 (patch) | |
tree | aa36f6ad5569fc9f4ae73455631c71b00a88d69b | |
parent | 1afaeddfd4694f91d5e5201cddec16259e83c620 (diff) |
Ensure that QMenu is polished before setting the screen in popup()
Some styles alter the widget that will influence the underlying platform
window. An example is when a style would want to draw the menu with some
transparency and sets the Qt::WA_TranslucentBackground attribute. This
needs to happen before the platform window is created. However calling
QWidgetPrivate::setScreen will end up creating the window and the
surface format will be fixed at this point.
Change-Id: I707cf1de5c1614382cffbea1aae8cdb01f7de44a
Reviewed-by: Nate Graham
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
(cherry picked from commit 36b1d37cef09769eea22f78d77440ac4c5d008d8)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/widgets/widgets/qmenu.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index ab933c987f..a23d8b790d 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -2368,6 +2368,8 @@ void QMenuPrivate::popup(const QPoint &p, QAction *atAction, PositionFunction po doChildEffects = true; updateLayoutDirection(); + q->ensurePolished(); // Get the right font + // Ensure that we get correct sizeHints by placing this window on the correct screen. // However if the QMenu was constructed with a QDesktopScreenWidget as its parent, // then initialScreenIndex was set, so we should respect that for the lifetime of this menu. @@ -2405,7 +2407,6 @@ void QMenuPrivate::popup(const QPoint &p, QAction *atAction, PositionFunction po q->setAttribute(Qt::WA_X11NetWmWindowTypeDropDownMenu, qobject_cast<QMenuBar *>(topCausedWidget()) != nullptr); #endif - q->ensurePolished(); // Get the right font emit q->aboutToShow(); const bool actionListChanged = itemsDirty; |