From: Jan Djärv Date: Wed, 7 Aug 2013 16:59:23 +0000 (+0200) Subject: * xselect.c (x_send_client_event): Set send_event and serial, memset X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~1686^2~381 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=8fd9c92e1fc88dc04f3bb2c9a370982e980b941e;p=emacs.git * xselect.c (x_send_client_event): Set send_event and serial, memset data.l as it might be bigger than data.b. Use 24 bit mask to XSendEvent. Fixes: debbugs:15034 --- diff --git a/src/ChangeLog b/src/ChangeLog index a0363732164..55f9a5c641b 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2013-08-07 Jan Djärv + + * xselect.c (x_send_client_event): Set send_event and serial, memset + data.l as it might be bigger than data.b. Use 24 bit mask to + XSendEvent (Bug#15034). + 2013-08-07 Eli Zaretskii * xdisp.c (prepare_menu_bars): Don't call x_consider_frame_title diff --git a/src/xselect.c b/src/xselect.c index 3a16d7d3496..e5f2e214fba 100644 --- a/src/xselect.c +++ b/src/xselect.c @@ -2628,6 +2628,8 @@ x_send_client_event (Lisp_Object display, Lisp_Object dest, Lisp_Object from, block_input (); + event.xclient.send_event = True; + event.xclient.serial = 0; event.xclient.message_type = message_type; event.xclient.display = dpyinfo->display; @@ -2635,19 +2637,19 @@ x_send_client_event (Lisp_Object display, Lisp_Object dest, Lisp_Object from, when sending to the root window. */ event.xclient.window = to_root ? FRAME_OUTER_WINDOW (f) : wdest; - - memset (event.xclient.data.b, 0, sizeof (event.xclient.data.b)); + memset (event.xclient.data.l, 0, sizeof (event.xclient.data.l)); x_fill_property_data (dpyinfo->display, values, event.xclient.data.b, event.xclient.format); /* If event mask is 0 the event is sent to the client that created the destination window. But if we are sending to the root window, - there is no such client. Then we set the event mask to 0xffff. The + there is no such client. Then we set the event mask to 0xffffff. The event then goes to clients selecting for events on the root window. */ x_catch_errors (dpyinfo->display); { int propagate = to_root ? False : True; - unsigned mask = to_root ? 0xffff : 0; + long mask = to_root ? 0xffffff : 0; + XSendEvent (dpyinfo->display, wdest, propagate, mask, &event); XFlush (dpyinfo->display); }