53 lines
2.0 KiB
Diff
53 lines
2.0 KiB
Diff
|
From fa74da0039b848e3beaff5d0da44e6d3f2c46dc9 Mon Sep 17 00:00:00 2001
|
||
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||
|
Date: Thu, 12 Mar 2020 19:34:03 +0100
|
||
|
Subject: [PATCH 31/48] wayland/window: Ignore state changes for popups
|
||
|
|
||
|
We send configure events for state changes e.g. for `appears-focused`,
|
||
|
etc. What we don't want to do is to do this for popup windows, as in
|
||
|
Wayland don't care about this state.
|
||
|
|
||
|
When the focus mode was configured to "sloppy focus" we'd get
|
||
|
`appears-focused` state changes for the popup window only by moving the
|
||
|
mouse cursor around, and while a popup may care about focus, it does not
|
||
|
care about related appearance, as there is no such state in xdg_popup.
|
||
|
|
||
|
What these state changes instead resulted in was absolute window
|
||
|
configuration events, intended for toplevel (xdg_toplevel) windows. In
|
||
|
the end this caused the popup to be positioned aginst at (0, 0) of the
|
||
|
parent window, as the assumptions when the configuration of the popup
|
||
|
was acknowledged is that it had received a relative position window
|
||
|
configuration.
|
||
|
|
||
|
Fix this by simply ignoring any state changes of the window if it is a
|
||
|
popup, meaning we won't send any configuration events intended for
|
||
|
toplevels for state changes. Currently we don't have any way to know
|
||
|
this other than checking whether it has a placement rule. Cleaning up
|
||
|
MetaWindow creation is left to be dealt with another day.
|
||
|
|
||
|
Fixes: https://gitlab.gnome.org/GNOME/mutter/issues/1103
|
||
|
|
||
|
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1122
|
||
|
---
|
||
|
src/wayland/meta-window-wayland.c | 4 ++++
|
||
|
1 file changed, 4 insertions(+)
|
||
|
|
||
|
diff --git a/src/wayland/meta-window-wayland.c b/src/wayland/meta-window-wayland.c
|
||
|
index 86cdbf86e..b6b949e36 100644
|
||
|
--- a/src/wayland/meta-window-wayland.c
|
||
|
+++ b/src/wayland/meta-window-wayland.c
|
||
|
@@ -634,6 +634,10 @@ appears_focused_changed (GObject *object,
|
||
|
gpointer user_data)
|
||
|
{
|
||
|
MetaWindow *window = META_WINDOW (object);
|
||
|
+
|
||
|
+ if (window->placement.rule)
|
||
|
+ return;
|
||
|
+
|
||
|
surface_state_changed (window);
|
||
|
}
|
||
|
|
||
|
--
|
||
|
2.26.0.rc2
|
||
|
|