[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master a1dc1512b3: Fix event mask and source indication of _NET_WM_STATE
From: |
Po Lu |
Subject: |
master a1dc1512b3: Fix event mask and source indication of _NET_WM_STATE messages |
Date: |
Tue, 3 May 2022 20:40:30 -0400 (EDT) |
branch: master
commit a1dc1512b357e99e78c6f01a20e483f465de0738
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
Fix event mask and source indication of _NET_WM_STATE messages
* src/xselect.c (x_send_client_event): Make static.
* src/xterm.c (set_wm_state): Send event with correct mask and
source indication set.
* src/xterm.h: Update prototypes.
---
src/xselect.c | 4 +++-
src/xterm.c | 33 ++++++++++++++++++++-------------
src/xterm.h | 7 -------
3 files changed, 23 insertions(+), 21 deletions(-)
diff --git a/src/xselect.c b/src/xselect.c
index 6d167c0b6f..3acfcbe94b 100644
--- a/src/xselect.c
+++ b/src/xselect.c
@@ -60,6 +60,8 @@ static Lisp_Object selection_data_to_lisp_data (struct
x_display_info *,
ptrdiff_t, Atom, int);
static void lisp_data_to_selection_data (struct x_display_info *, Lisp_Object,
struct selection_data *);
+static void x_send_client_event (Lisp_Object, Lisp_Object, Lisp_Object,
+ Atom, Lisp_Object, Lisp_Object);
/* Printing traces to stderr. */
@@ -2612,7 +2614,7 @@ are ignored. */)
return Qnil;
}
-void
+static void
x_send_client_event (Lisp_Object display, Lisp_Object dest, Lisp_Object from,
Atom message_type, Lisp_Object format, Lisp_Object values)
{
diff --git a/src/xterm.c b/src/xterm.c
index 90182a89f1..01832d60c9 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -21071,19 +21071,26 @@ x_wm_supports (struct frame *f, Atom want_atom)
static void
set_wm_state (Lisp_Object frame, bool add, Atom atom, Atom value)
{
- struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (XFRAME (frame));
-
- x_send_client_event (frame, make_fixnum (0), frame,
- dpyinfo->Xatom_net_wm_state,
- make_fixnum (32),
- /* 1 = add, 0 = remove */
- Fcons
- (make_fixnum (add),
- Fcons
- (INT_TO_INTEGER (atom),
- (value != 0
- ? list1 (INT_TO_INTEGER (value))
- : Qnil))));
+ struct x_display_info *dpyinfo;
+ XEvent msg;
+
+ dpyinfo = FRAME_DISPLAY_INFO (XFRAME (frame));
+ msg.xclient.type = ClientMessage;
+ msg.xclient.window = FRAME_OUTER_WINDOW (XFRAME (frame));
+ msg.xclient.message_type = dpyinfo->Xatom_net_wm_state;
+ msg.xclient.format = 32;
+
+ msg.xclient.data.l[0] = add ? 1 : 0;
+ msg.xclient.data.l[1] = atom;
+ msg.xclient.data.l[2] = value;
+ msg.xclient.data.l[3] = 1; /* Source indication. */
+ msg.xclient.data.l[4] = 0;
+
+ block_input ();
+ XSendEvent (dpyinfo->display, dpyinfo->root_window,
+ False, (SubstructureRedirectMask
+ | SubstructureNotifyMask), &msg);
+ unblock_input ();
}
void
diff --git a/src/xterm.h b/src/xterm.h
index 80b5713798..74e6d1a96c 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -1495,13 +1495,6 @@ extern void x_handle_selection_notify (const
XSelectionEvent *);
extern void x_handle_selection_event (struct selection_input_event *);
extern void x_clear_frame_selections (struct frame *);
-extern void x_send_client_event (Lisp_Object display,
- Lisp_Object dest,
- Lisp_Object from,
- Atom message_type,
- Lisp_Object format,
- Lisp_Object values);
-
extern bool x_handle_dnd_message (struct frame *,
const XClientMessageEvent *,
struct x_display_info *,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master a1dc1512b3: Fix event mask and source indication of _NET_WM_STATE messages,
Po Lu <=