summaryrefslogtreecommitdiff
path: root/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
diff options
context:
space:
mode:
authorWeng Xuetian <wengxt@gmail.com>2022-07-20 15:57:40 -0700
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-07-24 06:03:11 +0000
commit608579a2853ecfa4ef892aa202767788519254f5 (patch)
tree7e0a1b668cb35ae1ed548b6ab4268be2607ada6d /src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
parent1a07779a2578e254bdbc1e4e76ffb4904e53b0aa (diff)
downloadqtwayland-608579a2853ecfa4ef892aa202767788519254f5.tar.gz
Only close popup in the the hierchary
Imagine following event sequences: 1. a tooltip is shown. activePopups = {tooltip} 2. user click menu bar to show the menu, QMenu::setVisible is called. now activePopups(tooltip, menu} 3. tooltip visibility changed to false. 4. closePopups() close both tooltip and menu. This is a common pattern under wayland that menu is shown as a invisible state. This patch tries to memorize the surface hierchary used to create the popup role. And only close those popups whose ancesotor is hidden. Change-Id: I78aa0b4e32a5812603e003e756d8bcd202e94af4 Reviewed-by: David Edmundson <davidedmundson@kde.org> (cherry picked from commit f8e3257e9b1e22d52e9c221c62b8d9b6dd1151a3) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h')
-rw-r--r--src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
index 30366168..8410253c 100644
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
@@ -102,14 +102,15 @@ private:
class Popup : public QtWayland::xdg_popup {
public:
- Popup(QWaylandXdgSurface *xdgSurface, QWaylandXdgSurface *parent, QtWayland::xdg_positioner *positioner);
+ Popup(QWaylandXdgSurface *xdgSurface, QWaylandWindow *parent, QtWayland::xdg_positioner *positioner);
~Popup() override;
void grab(QWaylandInputDevice *seat, uint serial);
void xdg_popup_popup_done() override;
QWaylandXdgSurface *m_xdgSurface = nullptr;
- QWaylandXdgSurface *m_parent = nullptr;
+ QWaylandXdgSurface *m_parentXdgSurface = nullptr;
+ QWaylandWindow *m_parent = nullptr;
bool m_grabbing = false;
};