From: Julien Danjou <julien@danjou.info>
To: emacs-devel@gnu.org
Cc: Julien Danjou <julien@danjou.info>
Subject: [PATCH 1/6] xterm: store atoms in dpyinfo
Date: Wed, 10 Nov 2010 14:49:51 +0100 [thread overview]
Message-ID: <1289396996-26774-2-git-send-email-julien@danjou.info> (raw)
In-Reply-To: <1289396996-26774-1-git-send-email-julien@danjou.info>
Signed-off-by: Julien Danjou <julien@danjou.info>
---
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 <julien@danjou.info>
+ * 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.
2010-11-07 Jan Djärv <jan.h.d@swipnet.se>
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)
}
#define OPAQUE 0xffffffff
-#define OPACITY "_NET_WM_WINDOW_OPACITY"
void
x_set_frame_alpha (struct frame *f)
@@ -486,7 +485,7 @@ x_set_frame_alpha (struct frame *f)
unsigned long n, left;
x_catch_errors (dpy);
- rc = XGetWindowProperty (dpy, win, XInternAtom(dpy, OPACITY, False),
+ rc = XGetWindowProperty (dpy, win, dpyinfo->Xatom_net_wm_window_opacity,
0L, 1L, False, XA_CARDINAL,
&actual, &format, &n, &left,
&data);
@@ -504,7 +503,7 @@ x_set_frame_alpha (struct frame *f)
}
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. */
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 = FRAME_X_DISPLAY_INFO (f);
Window target_window = dpyinfo->root_window;
@@ -8298,15 +8296,13 @@ wm_supports (struct frame *f, const char *atomname)
Display *dpy = FRAME_X_DISPLAY (f);
unsigned char *tmp_data = NULL;
Atom target_type = XA_WINDOW;
- Atom want_atom;
BLOCK_INPUT;
- prop_atom = XInternAtom (dpy, "_NET_SUPPORTING_WM_CHECK", False);
-
x_catch_errors (dpy);
rc = 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);
@@ -8341,10 +8337,10 @@ wm_supports (struct frame *f, const char *atomname)
dpyinfo->net_supported_window = 0;
target_type = XA_ATOM;
- prop_atom = XInternAtom (dpy, "_NET_SUPPORTED", False);
tmp_data = NULL;
rc = 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_size,
&bytes_remaining, &tmp_data);
@@ -8362,7 +8358,6 @@ wm_supports (struct frame *f, const char *atomname)
}
rc = 0;
- want_atom = XInternAtom (dpy, atomname, False);
for (i = 0; rc == 0 && i < dpyinfo->nr_net_supported_atoms; ++i)
rc = dpyinfo->net_supported_atoms[i] == want_atom;
@@ -8457,7 +8452,7 @@ get_current_vm_state (struct frame *f,
else
*size_state = FULLSCREEN_HEIGHT;
}
- else if (a == dpyinfo->Xatom_net_wm_state_fullscreen_atom)
+ else if (a == dpyinfo->Xatom_net_wm_state_fullscreen)
*size_state = FULLSCREEN_BOTH;
else if (a == dpyinfo->Xatom_net_wm_state_sticky)
*sticky = 1;
@@ -8472,7 +8467,8 @@ get_current_vm_state (struct frame *f,
static int
do_ewmh_fullscreen (struct frame *f)
{
- int have_net_atom = wm_supports (f, "_NET_WM_STATE");
+ struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
+ int have_net_atom = wm_supports (f, dpyinfo->Xatom_net_wm_state);
Lisp_Object lval = get_frame_param (f, Qfullscreen);
int cur, dummy;
@@ -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 = wm_supports (f, "_NET_WM_STATE_FULLSCREEN");
+ have_net_atom = wm_supports (f, dpyinfo->Xatom_net_wm_state_fullscreen);
if (have_net_atom && cur != f->want_fullscreen)
{
@@ -8967,7 +8963,8 @@ x_ewmh_activate_frame (FRAME_PTR f)
http://freedesktop.org/wiki/Specifications/wm-spec */
const char *atom = "_NET_ACTIVE_WINDOW";
- if (f->async_visible && wm_supports (f, atom))
+ 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);
@@ -8996,13 +8993,13 @@ xembed_set_info (struct frame *f, enum xembed_info flags)
{
Atom atom;
unsigned long data[2];
-
- atom = XInternAtom (FRAME_X_DISPLAY (f), "_XEMBED_INFO", False);
+ struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
data[0] = XEMBED_VERSION;
data[1] = flags;
- XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), atom, atom,
+ XChangeProperty (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f),
+ dpyinfo->Xatom_XEMBED_INFO, dpyinfo->Xatom_XEMBED_INFO,
32, PropModeReplace, (unsigned char *) data, 2);
}
@@ -10238,6 +10235,8 @@ x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name)
= 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);
@@ -10262,7 +10261,7 @@ x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name)
dpyinfo->Xatom_net_wm_state
= XInternAtom (dpyinfo->display, "_NET_WM_STATE", False);
- dpyinfo->Xatom_net_wm_state_fullscreen_atom
+ 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);
@@ -10278,6 +10277,14 @@ x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_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);
dpyinfo->x_dnd_atoms_size = 8;
dpyinfo->x_dnd_atoms_length = 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;
/* Atom used in XEmbed client messages. */
- Atom Xatom_XEMBED;
+ Atom Xatom_XEMBED, Xatom_XEMBED_INFO;;
/* 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
/* Extended window manager hints, Atoms supported by the window manager 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;
/* 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;
@@ -348,6 +350,8 @@ struct x_display_info
/* Frame name and icon name */
Atom Xatom_net_wm_name, Xatom_net_wm_icon_name;
+ /* Frame opacity */
+ Atom Xatom_net_wm_window_opacity;
};
#ifdef HAVE_X_I18N
--
1.7.2.3
next prev parent reply other threads:[~2010-11-10 13:49 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-10 13:49 X atoms rework Julien Danjou
2010-11-10 13:49 ` Julien Danjou [this message]
2010-11-10 13:49 ` [PATCH 2/6] xselect: split x_send_client_event to use Atom directly Julien Danjou
2010-11-10 13:49 ` [PATCH 3/6] xterm: use atoms in set_wm_state Julien Danjou
2010-11-10 13:49 ` [PATCH 4/6] xterm: get all atoms in one round-trip Julien Danjou
2010-11-10 13:49 ` [PATCH 5/6] xsmfns: use pre-fetch SM_CLIENT_ID Julien Danjou
2010-11-10 13:49 ` [PATCH 6/6] xsettings: prefetch atoms Julien Danjou
2010-11-10 17:19 ` X atoms rework Jan Djärv
2010-11-11 7:22 ` Jan D.
2010-11-11 8:22 ` Julien Danjou
2010-11-12 9:32 ` Jan Djärv
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1289396996-26774-2-git-send-email-julien@danjou.info \
--to=julien@danjou.info \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.