From 393a7cb502f3ba2c9bdeffb83027ac540da1c366 Mon Sep 17 00:00:00 2001
From: psykose <alice@ayaya.dev>
Date: Fri, 17 Feb 2023 11:35:17 +0000
Subject: [PATCH] community/mutter: backport xwayland patch

---
 community/mutter/APKBUILD           |  4 ++-
 community/mutter/broken-focus.patch | 52 +++++++++++++++++++++++++++++
 2 files changed, 55 insertions(+), 1 deletion(-)
 create mode 100644 community/mutter/broken-focus.patch

diff --git a/community/mutter/APKBUILD b/community/mutter/APKBUILD
index f7f5347d6836..48b2a5928ebb 100644
--- a/community/mutter/APKBUILD
+++ b/community/mutter/APKBUILD
@@ -2,7 +2,7 @@
 # Maintainer: Rasmus Thomsen <oss@cogitri.dev>
 pkgname=mutter
 pkgver=43.3
-pkgrel=0
+pkgrel=1
 pkgdesc="clutter-based window manager and compositor"
 url="https://wiki.gnome.org/Projects/Mutter/"
 arch="all"
@@ -67,6 +67,7 @@ subpackages="$pkgname-dbg $pkgname-dev $pkgname-doc $pkgname-lang $pkgname-schem
 source="https://download.gnome.org/sources/mutter/${pkgver%.*}/mutter-$pkgver.tar.xz
 	fixudev-req.patch
 	pcversion.patch
+	broken-focus.patch
 	"
 
 build() {
@@ -100,4 +101,5 @@ sha512sums="
 5e9d4b213ac674889af9c15dd52f79a28a1c38af57f08a19bd6b2bf78a799aaa2f6dcb76adb9fa8d6a94e21d988befc37a696bc06801c96e1f692c80a5aff2ae  mutter-43.3.tar.xz
 3e5dd59f2f2fd80edde13f64d70d52a023dec303fd8dbfa3ded0d77faf7643179f2ad74d4acd3450decb67deaf6ac85a7af5146fa96f33917b4363f884413af9  fixudev-req.patch
 bb46a4692aaff0c9e6092d1ba80d19b336035e983f0f20a437a586757bc2530860f50fbd46b09f73e88f0dd80ea7188d1df467b8f762918717785e618b6e9c4b  pcversion.patch
+6703b9f5c4b82c834ff5a942487b531c3d9ae5e00d52401e9cd0ae24f54085f8d935a7c1c23c84ccf452e34545b875352d1ad1fbd9cf4204d5ec4a0d4deb59d2  broken-focus.patch
 "
diff --git a/community/mutter/broken-focus.patch b/community/mutter/broken-focus.patch
new file mode 100644
index 000000000000..fce78eca37d0
--- /dev/null
+++ b/community/mutter/broken-focus.patch
@@ -0,0 +1,52 @@
+From 12ce58dba4f96f6a948c1d166646d263253e3ee0 Mon Sep 17 00:00:00 2001
+From: Carlos Garnacho <carlosg@gnome.org>
+Date: Mon, 13 Feb 2023 20:12:38 +0100
+Subject: [PATCH] x11: Avoid updating focus on wayland compositor
+
+Reading upon the history of this code branch (commits 6891ce95dce
+and 7a4c808e43d4 are most relevant), it seems this code is meant to
+synchronize Mutter focus state taking the Xserver state as true.
+That is, if Mutter tried to change the focus but something truncated
+that action, Mutter focus will be changed to be in sync with the
+Xserver again.
+
+This sounds backwards in a Wayland session. Mutter focus should be
+the canonical source, and not second-guessed from the current Xserver
+focus window. These race conditions might still apply between X11
+clients, so make these paths only apply in that case.
+
+An example of this breaking can be reproduced with a Spotify and
+Firefox window, moving the focus from the first to the second by
+going to the GNOME Shell overview in between, and clicking the
+Firefox window from there. The Firefox window will be raised, but
+refuse to take focus.
+
+It's unclear what made this an issue recently, perhaps commit
+0e6395d9328 since the now possibly ignored XI_FocusIn/Out events
+affect this accounting of the Xserver focused window. Anyhow it
+sounds better to ignore these paths for Wayland/native altogether.
+
+
+
+(cherry picked from commit 81c0cf0834e5b11ad8674accf5d143725c19d5ae)
+
+Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2848>
+---
+ src/x11/events.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/x11/events.c b/src/x11/events.c
+index 8b9c108253..cc7f214230 100644
+--- a/src/x11/events.c
++++ b/src/x11/events.c
+@@ -1932,6 +1932,7 @@ meta_x11_display_handle_xevent (MetaX11Display *x11_display,
+   if (x11_display->focused_by_us &&
+       event->xany.serial > x11_display->focus_serial &&
+       display->focus_window &&
++      display->focus_window->client_type == META_WINDOW_CLIENT_TYPE_X11 &&
+       !window_has_xwindow (display->focus_window, x11_display->server_focus_window) &&
+       meta_display_windows_are_interactable (display))
+     {
+-- 
+GitLab
+
-- 
GitLab