summaryrefslogtreecommitdiff
path: root/src/xterm.c
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2022-10-27 19:14:56 +0800
committerPo Lu <luangruo@yahoo.com>2022-10-27 19:15:50 +0800
commitaf46d8a7ecb5c8c0016cc8dc88fa59ef244a0ced (patch)
tree8dd7ecc633c3f8a6fcc215e34a716577c058936a /src/xterm.c
parent8deb7978974f87b9fc43babf93a96b045c8e788d (diff)
downloademacs-af46d8a7ecb5c8c0016cc8dc88fa59ef244a0ced.tar.gz
Fix reporting of iconic state on old window managers
* src/xterm.c (x_handle_wm_state): Handle IconicState if the window manager does not support _NET_WM_STATE_HIDDEN.
Diffstat (limited to 'src/xterm.c')
-rw-r--r--src/xterm.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/xterm.c b/src/xterm.c
index 9f6112745e2..c8ac30c72c7 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -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