[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/6] xterm: store atoms in dpyinfo
From: |
Julien Danjou |
Subject: |
[PATCH 1/6] xterm: store atoms in dpyinfo |
Date: |
Wed, 10 Nov 2010 14:49:51 +0100 |
Signed-off-by: Julien Danjou <address@hidden>
---
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 <address@hidden>
+ * 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 <address@hidden>
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
- X atoms rework, Julien Danjou, 2010/11/10
- [PATCH 5/6] xsmfns: use pre-fetch SM_CLIENT_ID, Julien Danjou, 2010/11/10
- [PATCH 3/6] xterm: use atoms in set_wm_state, Julien Danjou, 2010/11/10
- [PATCH 6/6] xsettings: prefetch atoms, Julien Danjou, 2010/11/10
- [PATCH 4/6] xterm: get all atoms in one round-trip, Julien Danjou, 2010/11/10
- [PATCH 2/6] xselect: split x_send_client_event to use Atom directly, Julien Danjou, 2010/11/10
- [PATCH 1/6] xterm: store atoms in dpyinfo,
Julien Danjou <=
- Re: X atoms rework, Jan Djärv, 2010/11/10
- Re: X atoms rework, Jan D., 2010/11/11
- Re: X atoms rework, Jan Djärv, 2010/11/12