From: Po Lu Date: Thu, 10 Feb 2022 02:21:15 +0000 (+0800) Subject: Improve reliability of hotplugging window managers X-Git-Tag: emacs-29.0.90~2399 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f9a7a81cde41bacd63d280700089cc95490e4bea;p=emacs.git 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. --- diff --git a/src/xterm.c b/src/xterm.c index 5b97da36ba1..abfad61041d 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,