diff options
author | Dmitry Shachnev <mitya57@gmail.com> | 2017-03-16 14:48:49 +0300 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2017-03-27 12:14:27 +0000 |
commit | 41750492db58ca30a70a685cd6a4ee180c0b4959 (patch) | |
tree | 04e5fab66e0e0b39304a246da2731d73bcb0c646 | |
parent | 38550c562d918e783bb609622bc8fb46de1bfec4 (diff) |
Make sure QDBusMenuBar is restored when the window is hidden and shown
Task-number: QTBUG-58723
Change-Id: Ib4c3dac8a8cce717f4d47ab619c05b9e1719f311
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
-rw-r--r-- | src/platformsupport/themes/genericunix/dbusmenu/qdbusmenubar.cpp | 2 | ||||
-rw-r--r-- | src/widgets/widgets/qmenubar.cpp | 11 |
2 files changed, 12 insertions, 1 deletions
diff --git a/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenubar.cpp b/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenubar.cpp index fb0705c8c7..b13c875854 100644 --- a/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenubar.cpp +++ b/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenubar.cpp @@ -120,7 +120,7 @@ void QDBusMenuBar::syncMenu(QPlatformMenu *menu) void QDBusMenuBar::handleReparent(QWindow *newParentWindow) { - if (newParentWindow && newParentWindow->winId() != m_windowId) { + if (newParentWindow) { unregisterMenuBar(); m_windowId = newParentWindow->winId(); registerMenuBar(); diff --git a/src/widgets/widgets/qmenubar.cpp b/src/widgets/widgets/qmenubar.cpp index 2588f41468..b2ec8f2c08 100644 --- a/src/widgets/widgets/qmenubar.cpp +++ b/src/widgets/widgets/qmenubar.cpp @@ -1474,6 +1474,17 @@ bool QMenuBar::eventFilter(QObject *object, QEvent *event) } } + if (isNativeMenuBar() && event->type() == QEvent::ShowToParent) { + // On some desktops like Unity, the D-Bus menu bar is unregistered + // when the window is hidden. So when the window is shown, we need + // to forcefully re-register it. The only way to force re-registering + // with D-Bus menu is the handleReparent method. + QWidget *widget = qobject_cast<QWidget *>(object); + QWindow *handle = widget ? widget->windowHandle() : nullptr; + if (handle != nullptr) + d->platformMenuBar->handleReparent(handle); + } + if (style()->styleHint(QStyle::SH_MenuBar_AltKeyNavigation, 0, this)) { if (d->altPressed) { switch (event->type()) { |