emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master f9a7a81cde: Improve reliability of hotplugging window managers


From: Po Lu
Subject: master f9a7a81cde: Improve reliability of hotplugging window managers
Date: Wed, 9 Feb 2022 21:22:21 -0500 (EST)

branch: master
commit f9a7a81cde41bacd63d280700089cc95490e4bea
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Improve reliability of hotplugging window managers
    
    * src/xterm.c (x_make_frame_visible): Change the user time
    window if the window manager supports something different from
    what it did the first time the frame was made visible.
---
 src/xterm.c | 31 +++++++++++++++++++++++--------
 1 file changed, 23 insertions(+), 8 deletions(-)

diff --git a/src/xterm.c b/src/xterm.c
index 5b97da36ba..abfad61041 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -14534,21 +14534,36 @@ x_make_frame_visible (struct frame *f)
 #ifndef USE_GTK
       output = FRAME_X_OUTPUT (f);
 
-      if (output->user_time_window == None)
+      if (!x_wm_supports (f, dpyinfo->Xatom_net_wm_user_time_window))
        {
-         XSetWindowAttributes attrs;
-         memset (&attrs, 0, sizeof attrs);
-
-         output->user_time_window
-           = FRAME_OUTER_WINDOW (f);
-
-         if (x_wm_supports (f, dpyinfo->Xatom_net_wm_user_time_window))
+         if (output->user_time_window == None)
+           output->user_time_window = FRAME_OUTER_WINDOW (f);
+         else if (output->user_time_window != FRAME_OUTER_WINDOW (f))
+           {
+             XDestroyWindow (dpyinfo->display,
+                             output->user_time_window);
+             XDeleteProperty (dpyinfo->display,
+                              FRAME_OUTER_WINDOW (f),
+                              dpyinfo->Xatom_net_wm_user_time_window);
+             output->user_time_window = FRAME_OUTER_WINDOW (f);
+           }
+       }
+      else
+       {
+         if (output->user_time_window == FRAME_OUTER_WINDOW (f)
+             || output->user_time_window == None)
            {
+             XSetWindowAttributes attrs;
+             memset (&attrs, 0, sizeof attrs);
+
              output->user_time_window
                = XCreateWindow (dpyinfo->display, FRAME_X_WINDOW (f),
                                 -1, -1, 1, 1, 0, 0, InputOnly,
                                 CopyFromParent, 0, &attrs);
 
+             XDeleteProperty (dpyinfo->display,
+                              FRAME_OUTER_WINDOW (f),
+                              dpyinfo->Xatom_net_wm_user_time);
              XChangeProperty (dpyinfo->display,
                               FRAME_OUTER_WINDOW (f),
                               dpyinfo->Xatom_net_wm_user_time_window,



reply via email to

[Prev in Thread] Current Thread [Next in Thread]