From 2fca473d93a8f37a74c5febea90c553b35237116 Mon Sep 17 00:00:00 2001 From: oreo639 Date: Tue, 16 Apr 2024 13:45:41 -0700 Subject: [PATCH] gtk4: fix grabbing X11 check window before 15s after boot The check window is necessary to obtain extended wm hints. --- srcpkgs/gtk4/patches/wmspec.patch | 85 +++++++++++++++++++++++++++++++ srcpkgs/gtk4/template | 2 +- 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 srcpkgs/gtk4/patches/wmspec.patch diff --git a/srcpkgs/gtk4/patches/wmspec.patch b/srcpkgs/gtk4/patches/wmspec.patch new file mode 100644 index 00000000000000..0eabcf5411412e --- /dev/null +++ b/srcpkgs/gtk4/patches/wmspec.patch @@ -0,0 +1,85 @@ +From ab33b56ec95b1867cc44808d60caddaf67887ba7 Mon Sep 17 00:00:00 2001 +From: oreo639 +Date: Tue, 16 Apr 2024 12:35:00 -0700 +Subject: [PATCH] x11: Remove last_wmspec_check_time + +In fetch_net_wm_check_window(), before updating the wmspec_check_window, a +check is performed to verify a 15s difference between last_wmspec_check_time +and the current monotonic time. + +The comment suggests that this check is done to ensure that it doesn't check +for a new check window repeatedly over and over again. While that was the case +origionally, currently the last_wmspec_check_time only gets updated when +wmspec_check_window is set, which is already checked earlier, making the time +check useless. + +This check causes issues on cold boots where gtk4 applications are not able +to obtain the wmspec_check_window until 15 seconds after boot, making gtk +unable to check for extended wm_hints during that time. + +Fixes: #6558 +--- + gdk/x11/gdkdisplay-x11.c | 1 - + gdk/x11/gdkscreen-x11.c | 7 ------- + gdk/x11/gdkscreen-x11.h | 1 - + 3 files changed, 9 deletions(-) + +diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c +index efd5107c52d..4e24acc33bb 100644 +--- a/gdk/x11/gdkdisplay-x11.c ++++ b/gdk/x11/gdkdisplay-x11.c +@@ -665,7 +665,6 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator, + if (x11_screen->wmspec_check_window == xevent->xdestroywindow.window) + { + x11_screen->wmspec_check_window = None; +- x11_screen->last_wmspec_check_time = 0; + g_free (x11_screen->window_manager_name); + x11_screen->window_manager_name = g_strdup ("unknown"); + +diff --git a/gdk/x11/gdkscreen-x11.c b/gdk/x11/gdkscreen-x11.c +index 2456f14b29d..c0584b2d591 100644 +--- a/gdk/x11/gdkscreen-x11.c ++++ b/gdk/x11/gdkscreen-x11.c +@@ -1145,7 +1145,6 @@ fetch_net_wm_check_window (GdkX11Screen *x11_screen) + { + GdkDisplay *display; + Window window; +- guint64 now; + int error; + + display = x11_screen->display; +@@ -1155,11 +1154,6 @@ fetch_net_wm_check_window (GdkX11Screen *x11_screen) + if (x11_screen->wmspec_check_window != None) + return; /* already have it */ + +- now = g_get_monotonic_time (); +- +- if ((now - x11_screen->last_wmspec_check_time) / 1e6 < 15) +- return; /* we've checked recently */ +- + window = get_net_supporting_wm_check (x11_screen, x11_screen->xroot_window); + if (window == None) + return; +@@ -1184,7 +1178,6 @@ fetch_net_wm_check_window (GdkX11Screen *x11_screen) + return; + + x11_screen->wmspec_check_window = window; +- x11_screen->last_wmspec_check_time = now; + x11_screen->need_refetch_net_supported = TRUE; + x11_screen->need_refetch_wm_name = TRUE; + +diff --git a/gdk/x11/gdkscreen-x11.h b/gdk/x11/gdkscreen-x11.h +index d3775b23e51..bfd014997ba 100644 +--- a/gdk/x11/gdkscreen-x11.h ++++ b/gdk/x11/gdkscreen-x11.h +@@ -48,7 +48,6 @@ struct _GdkX11Screen + int xft_dpi; + + /* Window manager */ +- gint64 last_wmspec_check_time; + Window wmspec_check_window; + char *window_manager_name; + +-- +GitLab + diff --git a/srcpkgs/gtk4/template b/srcpkgs/gtk4/template index 10dcbbd0526e0d..050b6a14aa117a 100644 --- a/srcpkgs/gtk4/template +++ b/srcpkgs/gtk4/template @@ -1,7 +1,7 @@ # Template file for 'gtk4' pkgname=gtk4 version=4.14.2 -revision=2 +revision=3 build_style=meson build_helper="gir" configure_args="-Dman-pages=true -Ddocumentation=true -Dbuild-tests=false