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 1/6] xterm: store atoms in dpyinfo Date: Wed, 10 Nov 2010 14:49:51 +0100 Message-ID: <1289396996-26774-2-git-send-email-julien@danjou.info> References: <1289396996-26774-1-git-send-email-julien@danjou.info> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Trace: dough.gmane.org 1289397272 32573 80.91.229.12 (10 Nov 2010 13:54:32 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Wed, 10 Nov 2010 13:54:32 +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:54:28 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 1PGB87-0003Ir-Af for ged-emacs-devel@m.gmane.org; Wed, 10 Nov 2010 14:54:27 +0100 Original-Received: from localhost ([127.0.0.1]:41818 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PGB86-0002FE-Q1 for ged-emacs-devel@m.gmane.org; Wed, 10 Nov 2010 08:54:26 -0500 Original-Received: from [140.186.70.92] (port=48432 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PGB3v-0008NF-Bs 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-0004r0-PQ for emacs-devel@gnu.org; Wed, 10 Nov 2010 08:50:07 -0500 Original-Received: from coquelicot-s.easter-eggs.com ([213.215.37.94]:38368) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PGB3q-0004oJ-Df 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 388B21428C; 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-00071m-Sd; 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:132510 Archived-At: Signed-off-by: Julien Danjou --- src/ChangeLog | 14 ++++++++++++++ src/xterm.c | 47 +++++++++++++++++++++++++++-------------------- src/xterm.h | 8 ++++++-- 3 files changed, 47 insertions(+), 22 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 4e9f403..994d106 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,19 @@ 2010-11-09 Julien Danjou =20 + * xterm.c (x_set_frame_alpha): Use _NET_WM_WINDOW_OPACITY atom + from dpyinfo. + (wm_supports): Use atoms from dpyinfo. + (do_ewmh_fullscreen): Use atoms from dpyinfo. + (x_ewmh_activate_frame): Use atoms from dpyinfo. + (xembed_set_info): Use atoms from dpyinfo. + (x_term_init): Fetch _XEMBED_INFO, _NET_SUPPORTED, + _NET_SUPPORTING_WM_CHECK, _NET_WM_WINDOW_OPACITY and + _NET_ACTIVE_WINDOW atoms. + + * xterm.h (x_display_info): Add Xatom_net_supported, + Xatom_net_supporting_wm_check, Xatom_net_active_window, + Xatom_net_wm_window_opacity, Xatom_XEMBED_INFO. + * xfns.c (Fx_show_tip): Fix typo in docstring. =20 2010-11-07 Jan Dj=C3=A4rv diff --git a/src/xterm.c b/src/xterm.c index 7297ee7..5df0fbc 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -442,7 +442,6 @@ x_display_info_for_display (Display *dpy) } =20 #define OPAQUE 0xffffffff -#define OPACITY "_NET_WM_WINDOW_OPACITY" =20 void x_set_frame_alpha (struct frame *f) @@ -486,7 +485,7 @@ x_set_frame_alpha (struct frame *f) unsigned long n, left; =20 x_catch_errors (dpy); - rc =3D XGetWindowProperty (dpy, win, XInternAtom(dpy, OPACITY, False= ), + rc =3D XGetWindowProperty (dpy, win, dpyinfo->Xatom_net_wm_window_op= acity, 0L, 1L, False, XA_CARDINAL, &actual, &format, &n, &left, &data); @@ -504,7 +503,7 @@ x_set_frame_alpha (struct frame *f) } =20 x_catch_errors (dpy); - XChangeProperty (dpy, win, XInternAtom (dpy, OPACITY, False), + XChangeProperty (dpy, win, dpyinfo->Xatom_net_wm_window_opacity, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &opac, 1L); x_uncatch_errors (); @@ -8285,12 +8284,11 @@ x_set_offset (struct frame *f, register int xoff,= register int yoff, int change_ http://freedesktop.org/wiki/Specifications/wm-spec. */ =20 static int -wm_supports (struct frame *f, const char *atomname) +wm_supports (struct frame *f, Atom want_atom) { Atom actual_type; unsigned long actual_size, bytes_remaining; int i, rc, actual_format; - Atom prop_atom; Window wmcheck_window; struct x_display_info *dpyinfo =3D FRAME_X_DISPLAY_INFO (f); Window target_window =3D dpyinfo->root_window; @@ -8298,15 +8296,13 @@ wm_supports (struct frame *f, const char *atomnam= e) Display *dpy =3D FRAME_X_DISPLAY (f); unsigned char *tmp_data =3D NULL; Atom target_type =3D XA_WINDOW; - Atom want_atom; =20 BLOCK_INPUT; =20 - prop_atom =3D XInternAtom (dpy, "_NET_SUPPORTING_WM_CHECK", False); - x_catch_errors (dpy); rc =3D XGetWindowProperty (dpy, target_window, - prop_atom, 0, max_len, False, target_type, + dpyinfo->Xatom_net_supporting_wm_check, + 0, max_len, False, target_type, &actual_type, &actual_format, &actual_size, &bytes_remaining, &tmp_data); =20 @@ -8341,10 +8337,10 @@ wm_supports (struct frame *f, const char *atomnam= e) dpyinfo->net_supported_window =3D 0; =20 target_type =3D XA_ATOM; - prop_atom =3D XInternAtom (dpy, "_NET_SUPPORTED", False); tmp_data =3D NULL; rc =3D XGetWindowProperty (dpy, target_window, - prop_atom, 0, max_len, False, target_type= , + dpyinfo->Xatom_net_supported, + 0, max_len, False, target_type, &actual_type, &actual_format, &actual_siz= e, &bytes_remaining, &tmp_data); =20 @@ -8362,7 +8358,6 @@ wm_supports (struct frame *f, const char *atomname) } =20 rc =3D 0; - want_atom =3D XInternAtom (dpy, atomname, False); =20 for (i =3D 0; rc =3D=3D 0 && i < dpyinfo->nr_net_supported_atoms; ++i) rc =3D dpyinfo->net_supported_atoms[i] =3D=3D want_atom; @@ -8457,7 +8452,7 @@ get_current_vm_state (struct frame *f, else *size_state =3D FULLSCREEN_HEIGHT; } - else if (a =3D=3D dpyinfo->Xatom_net_wm_state_fullscreen_atom) + else if (a =3D=3D dpyinfo->Xatom_net_wm_state_fullscreen) *size_state =3D FULLSCREEN_BOTH; else if (a =3D=3D dpyinfo->Xatom_net_wm_state_sticky) *sticky =3D 1; @@ -8472,7 +8467,8 @@ get_current_vm_state (struct frame *f, static int do_ewmh_fullscreen (struct frame *f) { - int have_net_atom =3D wm_supports (f, "_NET_WM_STATE"); + struct x_display_info *dpyinfo =3D FRAME_X_DISPLAY_INFO (f); + int have_net_atom =3D wm_supports (f, dpyinfo->Xatom_net_wm_state); Lisp_Object lval =3D get_frame_param (f, Qfullscreen); int cur, dummy; =20 @@ -8481,7 +8477,7 @@ do_ewmh_fullscreen (struct frame *f) /* Some window managers don't say they support _NET_WM_STATE, but they= do say they support _NET_WM_STATE_FULLSCREEN. Try that also. */ if (!have_net_atom) - have_net_atom =3D wm_supports (f, "_NET_WM_STATE_FULLSCREEN"); + have_net_atom =3D wm_supports (f, dpyinfo->Xatom_net_wm_state_fullsc= reen); =20 if (have_net_atom && cur !=3D f->want_fullscreen) { @@ -8967,7 +8963,8 @@ x_ewmh_activate_frame (FRAME_PTR f) http://freedesktop.org/wiki/Specifications/wm-spec */ =20 const char *atom =3D "_NET_ACTIVE_WINDOW"; - if (f->async_visible && wm_supports (f, atom)) + struct x_display_info *dpyinfo =3D FRAME_X_DISPLAY_INFO (f); + if (f->async_visible && wm_supports (f, dpyinfo->Xatom_net_active_wind= ow)) { Lisp_Object frame; XSETFRAME (frame, f); @@ -8996,13 +8993,13 @@ xembed_set_info (struct frame *f, enum xembed_inf= o flags) { Atom atom; unsigned long data[2]; - - atom =3D XInternAtom (FRAME_X_DISPLAY (f), "_XEMBED_INFO", False); + struct x_display_info *dpyinfo =3D FRAME_X_DISPLAY_INFO (f); =20 data[0] =3D XEMBED_VERSION; data[1] =3D flags; =20 - XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), atom, at= om, + XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), + dpyinfo->Xatom_XEMBED_INFO, dpyinfo->Xatom_XEMBED_INF= O, 32, PropModeReplace, (unsigned char *) data, 2); } =20 @@ -10238,6 +10235,8 @@ x_term_init (Lisp_Object display_name, char *xrm_= option, char *resource_name) =3D XInternAtom (dpyinfo->display, "NULL", False); dpyinfo->Xatom_ATOM_PAIR =3D XInternAtom (dpyinfo->display, "ATOM_PAIR", False); + dpyinfo->Xatom_XEMBED_INFO + =3D XInternAtom (dpyinfo->display, "_XEMBED_INFO", False); /* For properties of font. */ dpyinfo->Xatom_PIXEL_SIZE =3D XInternAtom (dpyinfo->display, "PIXEL_SIZE", False); @@ -10262,7 +10261,7 @@ x_term_init (Lisp_Object display_name, char *xrm_= option, char *resource_name) =20 dpyinfo->Xatom_net_wm_state =3D XInternAtom (dpyinfo->display, "_NET_WM_STATE", False); - dpyinfo->Xatom_net_wm_state_fullscreen_atom + dpyinfo->Xatom_net_wm_state_fullscreen =3D XInternAtom (dpyinfo->display, "_NET_WM_STATE_FULLSCREEN", False= ); dpyinfo->Xatom_net_wm_state_maximized_horz =3D XInternAtom (dpyinfo->display, "_NET_WM_STATE_MAXIMIZED_HORZ", F= alse); @@ -10278,6 +10277,14 @@ x_term_init (Lisp_Object display_name, char *xrm= _option, char *resource_name) =3D XInternAtom (dpyinfo->display, "_NET_WM_ICON_NAME", False); dpyinfo->Xatom_net_wm_name =3D XInternAtom (dpyinfo->display, "_NET_WM_NAME", False); + dpyinfo->Xatom_net_supported + =3D XInternAtom (dpyinfo->display, "_NET_SUPPORTED", False); + dpyinfo->Xatom_net_supported + =3D XInternAtom (dpyinfo->display, "_NET_SUPPORTING_WM_CHECK", False= ); + dpyinfo->Xatom_net_wm_window_opacity + =3D XInternAtom (dpyinfo->display, "_NET_WM_WINDOW_OPACITY", False); + dpyinfo->Xatom_net_active_window + =3D XInternAtom (dpyinfo->display, "_NET_ACTIVE_WINDOW", False); =20 dpyinfo->x_dnd_atoms_size =3D 8; dpyinfo->x_dnd_atoms_length =3D 0; diff --git a/src/xterm.h b/src/xterm.h index ec99a65..72529b0 100644 --- a/src/xterm.h +++ b/src/xterm.h @@ -270,7 +270,7 @@ struct x_display_info Atom Xatom_Scrollbar; =20 /* Atom used in XEmbed client messages. */ - Atom Xatom_XEMBED; + Atom Xatom_XEMBED, Xatom_XEMBED_INFO;; =20 /* The frame (if any) which has the X window that has keyboard focus. Zero if none. This is examined by Ffocus_frame in xfns.c. Note @@ -332,13 +332,15 @@ struct x_display_info =20 /* Extended window manager hints, Atoms supported by the window manage= r and atoms for settig the window type. */ + Atom Xatom_net_supported, Xatom_net_supporting_wm_check; Atom *net_supported_atoms; int nr_net_supported_atoms; Window net_supported_window; Atom Xatom_net_window_type, Xatom_net_window_type_tooltip; + Atom Xatom_net_active_window; =20 /* Atoms dealing with maximization and fullscreen */ - Atom Xatom_net_wm_state, Xatom_net_wm_state_fullscreen_atom, + Atom Xatom_net_wm_state, Xatom_net_wm_state_fullscreen, Xatom_net_wm_state_maximized_horz, Xatom_net_wm_state_maximized_vert= , Xatom_net_wm_state_sticky; =20 @@ -348,6 +350,8 @@ struct x_display_info =20 /* Frame name and icon name */ Atom Xatom_net_wm_name, Xatom_net_wm_icon_name; + /* Frame opacity */ + Atom Xatom_net_wm_window_opacity; }; =20 #ifdef HAVE_X_I18N --=20 1.7.2.3