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

