]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix reporting of iconic state on old window managers
authorPo Lu <luangruo@yahoo.com>
Thu, 27 Oct 2022 11:14:56 +0000 (19:14 +0800)
committerPo Lu <luangruo@yahoo.com>
Thu, 27 Oct 2022 11:15:50 +0000 (19:15 +0800)
* src/xterm.c (x_handle_wm_state): Handle IconicState if the
window manager does not support _NET_WM_STATE_HIDDEN.

src/xterm.c

index 9f6112745e2c8c2f1d0e33fc34b16ffeedd50ae8..c8ac30c72c706f3344e0b325c1a44f9dd564ab18 100644 (file)
@@ -17868,6 +17868,7 @@ x_coords_from_dnd_message (struct x_display_info *dpyinfo,
 static void
 x_handle_wm_state (struct frame *f, struct input_event *ie)
 {
+  struct x_display_info *dpyinfo;
   Atom type;
   int format;
   unsigned long nitems, bytes_after;
@@ -17875,10 +17876,11 @@ x_handle_wm_state (struct frame *f, struct input_event *ie)
   unsigned long *state;
 
   data = NULL;
+  dpyinfo = FRAME_DISPLAY_INFO (f);
 
   if (XGetWindowProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
-                         FRAME_DISPLAY_INFO (f)->Xatom_wm_state, 0, 2,
-                         False, AnyPropertyType, &type, &format, &nitems,
+                         dpyinfo->Xatom_wm_state, 0, 2, False,
+                         AnyPropertyType, &type, &format, &nitems,
                          &bytes_after, &data) != Success)
     return;
 
@@ -17903,6 +17905,20 @@ x_handle_wm_state (struct frame *f, struct input_event *ie)
       ie->kind = DEICONIFY_EVENT;
       XSETFRAME (ie->frame_or_window, f);
     }
+  else if (state[0] == IconicState
+          /* _NET_WM_STATE_HIDDEN should be used if the window
+             manager supports that.  */
+          && !x_wm_supports (f, dpyinfo->Xatom_net_wm_state_hidden))
+    {
+      /* The frame is actually iconified right now.  Mark it as
+        such.  */
+
+      SET_FRAME_VISIBLE (f, 0);
+      SET_FRAME_ICONIFIED (f, true);
+
+      ie->kind = ICONIFY_EVENT;
+      XSETFRAME (ie->frame_or_window, f);
+    }
 
   /* state[0] can also be WithdrawnState, meaning that the window has
      been withdrawn and is no longer iconified.  However, Emacs sets