From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Julien Danjou Newsgroups: gmane.emacs.devel Subject: [PATCH 2/6] xselect: split x_send_client_event to use Atom directly Date: Wed, 10 Nov 2010 14:49:52 +0100 Message-ID: <1289396996-26774-3-git-send-email-julien@danjou.info> References: <1289396996-26774-1-git-send-email-julien@danjou.info> NNTP-Posting-Host: lo.gmane.org X-Trace: dough.gmane.org 1289397226 32346 80.91.229.12 (10 Nov 2010 13:53:46 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Wed, 10 Nov 2010 13:53:46 +0000 (UTC) Cc: Julien Danjou To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Nov 10 14:53:41 2010 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1PGB7M-0002ti-Bt for ged-emacs-devel@m.gmane.org; Wed, 10 Nov 2010 14:53:41 +0100 Original-Received: from localhost ([127.0.0.1]:32980 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PGB7K-0001ly-Qf for ged-emacs-devel@m.gmane.org; Wed, 10 Nov 2010 08:53:38 -0500 Original-Received: from [140.186.70.92] (port=48411 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PGB3u-0008Lx-8z for emacs-devel@gnu.org; Wed, 10 Nov 2010 08:50:08 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PGB3r-0004rG-F0 for emacs-devel@gnu.org; Wed, 10 Nov 2010 08:50:06 -0500 Original-Received: from coquelicot-s.easter-eggs.com ([213.215.37.94]:38378) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PGB3r-0004r5-2T for emacs-devel@gnu.org; Wed, 10 Nov 2010 08:50:03 -0500 Original-Received: from cigue.easter-eggs.fr (cigue.easter-eggs.fr [10.0.0.33]) by rose.easter-eggs.fr (Postfix) with ESMTPS id 5A7DC14298; Wed, 10 Nov 2010 14:49:58 +0100 (CET) Original-Received: from jdanjou by cigue.easter-eggs.fr with local (Exim 4.72) (envelope-from ) id 1PGB3o-00071p-TG; Wed, 10 Nov 2010 14:50:00 +0100 X-Mailer: git-send-email 1.7.2.3 In-Reply-To: <1289396996-26774-1-git-send-email-julien@danjou.info> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:132509 Archived-At: Signed-off-by: Julien Danjou --- src/ChangeLog | 9 +++++++++ src/lisp.h | 1 - src/xselect.c | 17 +++++++++++++---- src/xterm.c | 38 +++++++++++++++++++------------------- src/xterm.h | 7 +++++++ 5 files changed, 48 insertions(+), 24 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 994d106..8810dad 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,14 @@ 2010-11-09 Julien Danjou + * xterm.c (set_wm_state): Use x_send_client_event rather than + Fx_send_client_event, using Atom directly. + (x_ewmh_activate_frame): Ditto. + + * xselect.c (Fx_send_client_event): Split and create + x_send_client_event. + + * lisp.h: Do not EXFUN Fx_send_client_event. + * xterm.c (x_set_frame_alpha): Use _NET_WM_WINDOW_OPACITY atom from dpyinfo. (wm_supports): Use atoms from dpyinfo. diff --git a/src/lisp.h b/src/lisp.h index 4adf9ef..6c00aa2 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -3600,7 +3600,6 @@ extern void syms_of_xfns (void); extern void syms_of_xsmfns (void); /* Defined in xselect.c */ -EXFUN (Fx_send_client_event, 6); extern void syms_of_xselect (void); /* Defined in xterm.c */ diff --git a/src/xselect.c b/src/xselect.c index 7479f24..b566b90 100644 --- a/src/xselect.c +++ b/src/xselect.c @@ -2527,6 +2527,18 @@ are ignored. */) (Lisp_Object display, Lisp_Object dest, Lisp_Object from, Lisp_Object message_type, Lisp_Object format, Lisp_Object values) { struct x_display_info *dpyinfo = check_x_display_info (display); + + x_send_client_event(display, dest, from, + XInternAtom (dpyinfo->display, SDATA (message_type), False), + format, values); + + return Qnil; +} + +void +x_send_client_event (Lisp_Object display, Lisp_Object dest, Lisp_Object from, Atom message_type, Lisp_Object format, Lisp_Object values) +{ + struct x_display_info *dpyinfo = check_x_display_info (display); Window wdest; XEvent event; Lisp_Object cons; @@ -2584,8 +2596,7 @@ are ignored. */) BLOCK_INPUT; - event.xclient.message_type - = XInternAtom (dpyinfo->display, SDATA (message_type), False); + event.xclient.message_type = message_type; event.xclient.display = dpyinfo->display; /* Some clients (metacity for example) expects sending window to be here @@ -2610,8 +2621,6 @@ are ignored. */) } x_uncatch_errors (); UNBLOCK_INPUT; - - return Qnil; } diff --git a/src/xterm.c b/src/xterm.c index 5df0fbc..f8e95ba 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -8371,19 +8371,20 @@ wm_supports (struct frame *f, Atom want_atom) static void set_wm_state (Lisp_Object frame, int add, const char *what, const char *what2) { - const char *atom = "_NET_WM_STATE"; - Fx_send_client_event (frame, make_number (0), frame, - make_unibyte_string (atom, strlen (atom)), - make_number (32), - /* 1 = add, 0 = remove */ + struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (XFRAME (frame)); + + x_send_client_event (frame, make_number (0), frame, + dpyinfo->Xatom_net_wm_state, + make_number (32), + /* 1 = add, 0 = remove */ + Fcons + (make_number (add ? 1 : 0), Fcons - (make_number (add ? 1 : 0), - Fcons - (make_unibyte_string (what, strlen (what)), - what2 != 0 - ? Fcons (make_unibyte_string (what2, strlen (what2)), - Qnil) - : Qnil))); + (make_unibyte_string (what, strlen (what)), + what2 != 0 + ? Fcons (make_unibyte_string (what2, strlen (what2)), + Qnil) + : Qnil))); } void @@ -8962,18 +8963,17 @@ x_ewmh_activate_frame (FRAME_PTR f) /* See Window Manager Specification/Extended Window Manager Hints at http://freedesktop.org/wiki/Specifications/wm-spec */ - const char *atom = "_NET_ACTIVE_WINDOW"; struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); if (f->async_visible && wm_supports (f, dpyinfo->Xatom_net_active_window)) { Lisp_Object frame; XSETFRAME (frame, f); - Fx_send_client_event (frame, make_number (0), frame, - make_unibyte_string (atom, strlen (atom)), - make_number (32), - Fcons (make_number (1), - Fcons (make_number (last_user_time), - Qnil))); + x_send_client_event (frame, make_number (0), frame, + dpyinfo->Xatom_net_active_window, + make_number (32), + Fcons (make_number (1), + Fcons (make_number (last_user_time), + Qnil))); } } diff --git a/src/xterm.h b/src/xterm.h index 72529b0..d9ed120 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -1015,6 +1015,13 @@ extern void x_handle_selection_notify (XSelectionEvent *); extern void x_handle_selection_event (struct 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 int x_handle_dnd_message (struct frame *, XClientMessageEvent *, struct x_display_info *, -- 1.7.2.3