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 6/6] xsettings: prefetch atoms Date: Wed, 10 Nov 2010 14:49:56 +0100 Message-ID: <1289396996-26774-7-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 1289397102 31713 80.91.229.12 (10 Nov 2010 13:51:42 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Wed, 10 Nov 2010 13:51:42 +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:51:38 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 1PGB5M-0001si-IR for ged-emacs-devel@m.gmane.org; Wed, 10 Nov 2010 14:51:36 +0100 Original-Received: from localhost ([127.0.0.1]:59565 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PGB5L-0000kt-Rt for ged-emacs-devel@m.gmane.org; Wed, 10 Nov 2010 08:51:35 -0500 Original-Received: from [140.186.70.92] (port=48405 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PGB3t-0008LQ-Ra for emacs-devel@gnu.org; Wed, 10 Nov 2010 08:50:07 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PGB3r-0004rC-Ey 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]:38377) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PGB3r-0004r4-2U 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 5811E14296; 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-000721-VW; 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:132507 Archived-At: Signed-off-by: Julien Danjou --- src/ChangeLog | 4 ++++ src/xsettings.c | 8 -------- src/xterm.c | 25 ++++++++++++++++++++----- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 3975d8b..2b7acb5 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2010-11-10 Julien Danjou + * xterm.c (x_term_init): Fetch XSETTINGS atoms. + + * xsettings.c (init_xsettings): Use already fetch atoms. + * xterm.h (x_display_info): Add SM_CLIENT_ID atom. * xsmfns.c (create_client_leader_window): Use SM_CLIENT_ID atom diff --git a/src/xsettings.c b/src/xsettings.c index 0d9c9ca..b3f3cb6 100644 --- a/src/xsettings.c +++ b/src/xsettings.c @@ -656,18 +656,10 @@ init_gconf (void) static void init_xsettings (struct x_display_info *dpyinfo) { - char sel[64]; Display *dpy = dpyinfo->display; BLOCK_INPUT; - sprintf (sel, "_XSETTINGS_S%d", XScreenNumberOfScreen (dpyinfo->screen)); - dpyinfo->Xatom_xsettings_sel = XInternAtom (dpy, sel, False); - dpyinfo->Xatom_xsettings_prop = XInternAtom (dpy, - "_XSETTINGS_SETTINGS", - False); - dpyinfo->Xatom_xsettings_mgr = XInternAtom (dpy, "MANAGER", False); - /* Select events so we can detect client messages sent when selection owner changes. */ XSelectInput (dpy, dpyinfo->root_window, StructureNotifyMask); diff --git a/src/xterm.c b/src/xterm.c index e8a7d07..1900881 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -10249,22 +10249,37 @@ x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name) "_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, - "SM_CLIENT_ID", &dpyinfo->Xatom_SM_CLIENT_ID + "SM_CLIENT_ID", &dpyinfo->Xatom_SM_CLIENT_ID, + "_XSETTINGS_SETTINGS", &dpyinfo->Xatom_xsettings_prop, + "MANAGER", &dpyinfo->Xatom_xsettings_mgr }; 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); + const int atom_count = (sizeof (atom_refs) / sizeof (atom_refs[0])); + /* 1 for _XSETTINGS_SN */ + const int total_atom_count = 1 + atom_count; + Atom *atoms_return = xmalloc (sizeof (Atom) * total_atom_count); + char **atom_names = xmalloc (sizeof (char *) * total_atom_count); + char xsettings_atom_name[64]; 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); + /* Build _XSETTINGS_SN atom name */ + snprintf (xsettings_atom_name, sizeof (xsettings_atom_name), + "_XSETTINGS_S%d", XScreenNumberOfScreen (dpyinfo->screen)); + atom_names[i] = xsettings_atom_name; + /* Fetch atoms */ + XInternAtoms (dpyinfo->display, atom_names, total_atom_count, False, atoms_return); + + /* Copy atoms back */ for (i = 0; i < atom_count; i++) *atom_refs[i].atom = atoms_return[i]; + /* Manual copy of last atoms */ + dpyinfo->Xatom_xsettings_sel = atoms_return[i]; + xfree (atom_names); xfree (atoms_return); } -- 1.7.2.3