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 4/6] xterm: get all atoms in one round-trip Date: Wed, 10 Nov 2010 14:49:54 +0100 Message-ID: <1289396996-26774-5-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 1289397192 32162 80.91.229.12 (10 Nov 2010 13:53:12 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Wed, 10 Nov 2010 13:53:12 +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:52:56 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 1PGB6Y-0002VI-Qg for ged-emacs-devel@m.gmane.org; Wed, 10 Nov 2010 14:52:56 +0100 Original-Received: from localhost ([127.0.0.1]:60630 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PGB6W-0001OH-Sr for ged-emacs-devel@m.gmane.org; Wed, 10 Nov 2010 08:52:48 -0500 Original-Received: from [140.186.70.92] (port=48392 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PGB3t-0008Kr-8C 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 1PGB3q-0004qv-PE for emacs-devel@gnu.org; Wed, 10 Nov 2010 08:50:05 -0500 Original-Received: from coquelicot-s.easter-eggs.com ([213.215.37.94]:38372) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PGB3q-0004oN-Dd for emacs-devel@gnu.org; Wed, 10 Nov 2010 08:50:02 -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 3FAB514294; 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-00071v-UM; 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:132508 Archived-At: Signed-off-by: Julien Danjou --- src/ChangeLog | 3 +- src/xterm.c | 165 +++++++++++++++++++++++++-------------------------------- 2 files changed, 75 insertions(+), 93 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index f1bbcb4..13bb320 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,4 +1,4 @@ -2010-11-09 Julien Danjou +2010-11-10 Julien Danjou * xterm.c (set_wm_state): Use x_send_client_event rather than Fx_send_client_event, using Atom directly. @@ -7,6 +7,7 @@ XInternAtom request. (x_set_sticky): Pass atoms to set_wm_state. (do_ewmh_fullscreen): Ditto. + (x_term_init): Get all atoms in one round-trip. * xselect.c (Fx_send_client_event): Split and create x_send_client_event. diff --git a/src/xterm.c b/src/xterm.c index fb24ea3..36cbb12 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -10194,98 +10194,79 @@ x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name) dpyinfo->resx = (mm < 1) ? 100 : pixels * 25.4 / mm; } - dpyinfo->Xatom_wm_protocols - = XInternAtom (dpyinfo->display, "WM_PROTOCOLS", False); - dpyinfo->Xatom_wm_take_focus - = XInternAtom (dpyinfo->display, "WM_TAKE_FOCUS", False); - dpyinfo->Xatom_wm_save_yourself - = XInternAtom (dpyinfo->display, "WM_SAVE_YOURSELF", False); - dpyinfo->Xatom_wm_delete_window - = XInternAtom (dpyinfo->display, "WM_DELETE_WINDOW", False); - dpyinfo->Xatom_wm_change_state - = XInternAtom (dpyinfo->display, "WM_CHANGE_STATE", False); - dpyinfo->Xatom_wm_configure_denied - = XInternAtom (dpyinfo->display, "WM_CONFIGURE_DENIED", False); - dpyinfo->Xatom_wm_window_moved - = XInternAtom (dpyinfo->display, "WM_MOVED", False); - dpyinfo->Xatom_wm_client_leader - = XInternAtom (dpyinfo->display, "WM_CLIENT_LEADER", False); - dpyinfo->Xatom_editres - = XInternAtom (dpyinfo->display, "Editres", False); - dpyinfo->Xatom_CLIPBOARD - = XInternAtom (dpyinfo->display, "CLIPBOARD", False); - dpyinfo->Xatom_TIMESTAMP - = XInternAtom (dpyinfo->display, "TIMESTAMP", False); - dpyinfo->Xatom_TEXT - = XInternAtom (dpyinfo->display, "TEXT", False); - dpyinfo->Xatom_COMPOUND_TEXT - = XInternAtom (dpyinfo->display, "COMPOUND_TEXT", False); - dpyinfo->Xatom_UTF8_STRING - = XInternAtom (dpyinfo->display, "UTF8_STRING", False); - dpyinfo->Xatom_DELETE - = XInternAtom (dpyinfo->display, "DELETE", False); - dpyinfo->Xatom_MULTIPLE - = XInternAtom (dpyinfo->display, "MULTIPLE", False); - dpyinfo->Xatom_INCR - = XInternAtom (dpyinfo->display, "INCR", False); - dpyinfo->Xatom_EMACS_TMP - = XInternAtom (dpyinfo->display, "_EMACS_TMP_", False); - dpyinfo->Xatom_TARGETS - = XInternAtom (dpyinfo->display, "TARGETS", False); - dpyinfo->Xatom_NULL - = XInternAtom (dpyinfo->display, "NULL", False); - dpyinfo->Xatom_ATOM_PAIR - = XInternAtom (dpyinfo->display, "ATOM_PAIR", False); - dpyinfo->Xatom_XEMBED_INFO - = XInternAtom (dpyinfo->display, "_XEMBED_INFO", False); - /* For properties of font. */ - dpyinfo->Xatom_PIXEL_SIZE - = XInternAtom (dpyinfo->display, "PIXEL_SIZE", False); - dpyinfo->Xatom_AVERAGE_WIDTH - = XInternAtom (dpyinfo->display, "AVERAGE_WIDTH", False); - dpyinfo->Xatom_MULE_BASELINE_OFFSET - = XInternAtom (dpyinfo->display, "_MULE_BASELINE_OFFSET", False); - dpyinfo->Xatom_MULE_RELATIVE_COMPOSE - = XInternAtom (dpyinfo->display, "_MULE_RELATIVE_COMPOSE", False); - dpyinfo->Xatom_MULE_DEFAULT_ASCENT - = XInternAtom (dpyinfo->display, "_MULE_DEFAULT_ASCENT", False); - - /* Ghostscript support. */ - dpyinfo->Xatom_PAGE = XInternAtom (dpyinfo->display, "PAGE", False); - dpyinfo->Xatom_DONE = XInternAtom (dpyinfo->display, "DONE", False); - - dpyinfo->Xatom_Scrollbar = XInternAtom (dpyinfo->display, "SCROLLBAR", - False); - - dpyinfo->Xatom_XEMBED = XInternAtom (dpyinfo->display, "_XEMBED", - False); - - dpyinfo->Xatom_net_wm_state - = XInternAtom (dpyinfo->display, "_NET_WM_STATE", False); - dpyinfo->Xatom_net_wm_state_fullscreen - = XInternAtom (dpyinfo->display, "_NET_WM_STATE_FULLSCREEN", False); - dpyinfo->Xatom_net_wm_state_maximized_horz - = XInternAtom (dpyinfo->display, "_NET_WM_STATE_MAXIMIZED_HORZ", False); - dpyinfo->Xatom_net_wm_state_maximized_vert - = XInternAtom (dpyinfo->display, "_NET_WM_STATE_MAXIMIZED_VERT", False); - dpyinfo->Xatom_net_wm_state_sticky - = XInternAtom (dpyinfo->display, "_NET_WM_STATE_STICKY", False); - dpyinfo->Xatom_net_window_type - = XInternAtom (dpyinfo->display, "_NET_WM_WINDOW_TYPE", False); - dpyinfo->Xatom_net_window_type_tooltip - = XInternAtom (dpyinfo->display, "_NET_WM_WINDOW_TYPE_TOOLTIP", False); - dpyinfo->Xatom_net_wm_icon_name - = XInternAtom (dpyinfo->display, "_NET_WM_ICON_NAME", False); - dpyinfo->Xatom_net_wm_name - = XInternAtom (dpyinfo->display, "_NET_WM_NAME", False); - dpyinfo->Xatom_net_supported - = XInternAtom (dpyinfo->display, "_NET_SUPPORTED", False); - dpyinfo->Xatom_net_supported - = XInternAtom (dpyinfo->display, "_NET_SUPPORTING_WM_CHECK", False); - dpyinfo->Xatom_net_wm_window_opacity - = XInternAtom (dpyinfo->display, "_NET_WM_WINDOW_OPACITY", False); - dpyinfo->Xatom_net_active_window - = XInternAtom (dpyinfo->display, "_NET_ACTIVE_WINDOW", False); + { + const struct AtomRef + { + const char *name; + Atom *atom; + } + atom_refs[] = + { + "WM_PROTOCOLS", &dpyinfo->Xatom_wm_protocols, + "WM_TAKE_FOCUS", &dpyinfo->Xatom_wm_take_focus, + "WM_SAVE_YOURSELF", &dpyinfo->Xatom_wm_save_yourself, + "WM_DELETE_WINDOW", &dpyinfo->Xatom_wm_delete_window, + "WM_CHANGE_STATE", &dpyinfo->Xatom_wm_change_state, + "WM_CONFIGURE_DENIED", &dpyinfo->Xatom_wm_configure_denied, + "WM_MOVED", &dpyinfo->Xatom_wm_window_moved, + "WM_CLIENT_LEADER", &dpyinfo->Xatom_wm_client_leader, + "Editres", &dpyinfo->Xatom_editres, + "CLIPBOARD", &dpyinfo->Xatom_CLIPBOARD, + "TIMESTAMP", &dpyinfo->Xatom_TIMESTAMP, + "TEXT", &dpyinfo->Xatom_TEXT, + "COMPOUND_TEXT", &dpyinfo->Xatom_COMPOUND_TEXT, + "UTF8_STRING", &dpyinfo->Xatom_UTF8_STRING, + "DELETE", &dpyinfo->Xatom_DELETE, + "MULTIPLE", &dpyinfo->Xatom_MULTIPLE, + "INCR", &dpyinfo->Xatom_INCR, + "_EMACS_TMP_", &dpyinfo->Xatom_EMACS_TMP, + "TARGETS", &dpyinfo->Xatom_TARGETS, + "NULL", &dpyinfo->Xatom_NULL, + "ATOM_PAIR", &dpyinfo->Xatom_ATOM_PAIR, + "_XEMBED_INFO", &dpyinfo->Xatom_XEMBED_INFO, + /* For properties of font. */ + "PIXEL_SIZE", &dpyinfo->Xatom_PIXEL_SIZE, + "AVERAGE_WIDTH", &dpyinfo->Xatom_AVERAGE_WIDTH, + "_MULE_BASELINE_OFFSET", &dpyinfo->Xatom_MULE_BASELINE_OFFSET, + "_MULE_RELATIVE_COMPOSE", &dpyinfo->Xatom_MULE_RELATIVE_COMPOSE, + "_MULE_DEFAULT_ASCENT", &dpyinfo->Xatom_MULE_DEFAULT_ASCENT, + /* Ghostscript support. */ + "DONE", &dpyinfo->Xatom_DONE, + "PAGE", &dpyinfo->Xatom_PAGE, + "SCROLLBAR", &dpyinfo->Xatom_Scrollbar, + "_XEMBED", &dpyinfo->Xatom_XEMBED, + /* EWMH */ + "_NET_WM_STATE", &dpyinfo->Xatom_net_wm_state, + "_NET_WM_STATE_FULLSCREEN", &dpyinfo->Xatom_net_wm_state_fullscreen, + "_NET_WM_STATE_MAXIMIZED_HORZ", &dpyinfo->Xatom_net_wm_state_maximized_horz, + "_NET_WM_STATE_MAXIMIZED_VERT", &dpyinfo->Xatom_net_wm_state_maximized_vert, + "_NET_WM_STATE_STICKY", &dpyinfo->Xatom_net_wm_state_sticky, + "_NET_WM_WINDOW_TYPE", &dpyinfo->Xatom_net_window_type, + "_NET_WM_WINDOW_TYPE_TOOLTIP", &dpyinfo->Xatom_net_window_type_tooltip, + "_NET_WM_ICON_NAME", &dpyinfo->Xatom_net_wm_icon_name, + "_NET_WM_NAME", &dpyinfo->Xatom_net_wm_name, + "_NET_SUPPORTED", &dpyinfo->Xatom_net_supported, + "_NET_SUPPORTING_WM_CHECK", &dpyinfo->Xatom_net_supported, + "_NET_WM_WINDOW_OPACITY", &dpyinfo->Xatom_net_wm_window_opacity, + "_NET_ACTIVE_WINDOW", &dpyinfo->Xatom_net_active_window + }; + + int i; + const int atom_count = sizeof (atom_refs) / sizeof (atom_refs[0]); + Atom *atoms_return = xmalloc (sizeof (Atom) * atom_count); + char **atom_names = xmalloc (sizeof (char *) * atom_count); + + for (i = 0; i < atom_count; i++) + atom_names[i] = (char *) atom_refs[i].name; + + XInternAtoms (dpyinfo->display, atom_names, atom_count, False, atoms_return); + + for (i = 0; i < atom_count; i++) + *atom_refs[i].atom = atoms_return[i]; + + xfree (atom_names); + xfree (atoms_return); + } dpyinfo->x_dnd_atoms_size = 8; dpyinfo->x_dnd_atoms_length = 0; -- 1.7.2.3