diff options
author | V3n3RiX <venerix@koprulu.sector> | 2021-12-05 02:47:11 +0000 |
---|---|---|
committer | V3n3RiX <venerix@koprulu.sector> | 2021-12-05 02:47:11 +0000 |
commit | 2771f79232c273bc2a57d23bf335dd81ccf6af28 (patch) | |
tree | c8af0fd04194aed03cf067d44e53c7edd3e9ab84 /kde-frameworks/kconfigwidgets/files/kconfigwidgets-5.88.0-hamburger-menu-no-window-on-wayland.patch | |
parent | e9d044d4b9b71200a96adfa280848858c0f468c9 (diff) |
gentoo resync : 05.12.2021
Diffstat (limited to 'kde-frameworks/kconfigwidgets/files/kconfigwidgets-5.88.0-hamburger-menu-no-window-on-wayland.patch')
-rw-r--r-- | kde-frameworks/kconfigwidgets/files/kconfigwidgets-5.88.0-hamburger-menu-no-window-on-wayland.patch | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/kde-frameworks/kconfigwidgets/files/kconfigwidgets-5.88.0-hamburger-menu-no-window-on-wayland.patch b/kde-frameworks/kconfigwidgets/files/kconfigwidgets-5.88.0-hamburger-menu-no-window-on-wayland.patch new file mode 100644 index 000000000000..8cf60aeb7594 --- /dev/null +++ b/kde-frameworks/kconfigwidgets/files/kconfigwidgets-5.88.0-hamburger-menu-no-window-on-wayland.patch @@ -0,0 +1,87 @@ +From 82c40f18709484fd462643aa113a8ccf961b646a Mon Sep 17 00:00:00 2001 +From: Felix Ernst <fe.a.ernst@gmail.com> +Date: Tue, 26 Oct 2021 17:28:09 +0200 +Subject: [PATCH] Fix hamburger menu opening as a window on Wayland + +Before this commit, if an app window is unfocused and the first +click on the window is the hamburger menu button, the menu would +appear displaced as a separate window on Wayland. + +This commit fixes this by setting a sane transientParent for the +menu. This is slightly difficult because there can be any number +of hamburger buttons in any number of different windows so we need +to figure out spontaneously which button was pressed to open the +menu. + +BUG: 442375 +--- + src/khamburgermenuhelpers.cpp | 26 ++++++++++++++++++++++++-- + src/khamburgermenuhelpers_p.h | 2 +- + 2 files changed, 25 insertions(+), 3 deletions(-) + +diff --git a/src/khamburgermenuhelpers.cpp b/src/khamburgermenuhelpers.cpp +index 88242aa5..d1ae2835 100644 +--- a/src/khamburgermenuhelpers.cpp ++++ b/src/khamburgermenuhelpers.cpp +@@ -10,7 +10,10 @@ + #include "khamburgermenu.h" + + #include <QEvent> ++#include <QMenu> ++#include <QToolButton> + #include <QWidget> ++#include <QWindow> + + ListenerContainer::ListenerContainer(KHamburgerMenuPrivate *hamburgerMenuPrivate) + : QObject{hamburgerMenuPrivate}, +@@ -28,13 +31,32 @@ bool AddOrRemoveActionListener::eventFilter(QObject * /*watched*/, QEvent *event + return false; + } + +-bool ButtonPressListener::eventFilter(QObject * /*watched*/, QEvent *event) ++bool ButtonPressListener::eventFilter(QObject *watched, QEvent *event) + { + if (event->type() == QEvent::KeyPress || event->type() == QEvent::MouseButtonPress) { + auto hamburgerMenuPrivate = static_cast<KHamburgerMenuPrivate *>(parent()); + auto q = static_cast<KHamburgerMenu *>(hamburgerMenuPrivate->q_ptr); + Q_EMIT q->aboutToShowMenu(); +- hamburgerMenuPrivate->resetMenu(); ++ hamburgerMenuPrivate->resetMenu(); // This menu never has a parent which can be ++ // problematic because it can lead to situations in which the QMenu itself is ++ // treated like its own window. ++ // To avoid this we set a sane transientParent() now even if it already has one ++ // because the menu might be opened from another window this time. ++ const auto watchedButton = qobject_cast<QToolButton *>(watched); ++ if (!watchedButton) { ++ return false; ++ } ++ auto menu = watchedButton->menu(); ++ if (!menu) { ++ return false; ++ } ++ menu->winId(); // trigger being a native widget already, to ensure windowHandle created ++ // generic code if not known if the available parent widget is a native widget or not ++ auto parentWindowHandle = watchedButton->windowHandle(); ++ if (!parentWindowHandle) { ++ parentWindowHandle = watchedButton->nativeParentWidget()->windowHandle(); ++ } ++ menu->windowHandle()->setTransientParent(parentWindowHandle); + } + return false; + } +diff --git a/src/khamburgermenuhelpers_p.h b/src/khamburgermenuhelpers_p.h +index f0d98790..4993ee61 100644 +--- a/src/khamburgermenuhelpers_p.h ++++ b/src/khamburgermenuhelpers_p.h +@@ -80,7 +80,7 @@ class ButtonPressListener : public QObject + protected: + inline ButtonPressListener(QObject *parent) : QObject{parent} { }; + +- bool eventFilter(QObject * /*watched*/, QEvent *event) override; ++ bool eventFilter(QObject *watched, QEvent *event) override; + + friend class ListenerContainer; + }; +-- +GitLab + |