gtk4: fix grabbing X11 check window before 15s after boot

The check window is necessary to obtain extended wm hints.
This commit is contained in:
oreo639 2024-04-16 13:45:41 -07:00 committed by oreo639
parent a43ec522ca
commit 13d2cfc9fa
2 changed files with 86 additions and 1 deletions

View File

@ -0,0 +1,85 @@
From ab33b56ec95b1867cc44808d60caddaf67887ba7 Mon Sep 17 00:00:00 2001
From: oreo639 <oreo6391@gmail.com>
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

View File

@ -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