summaryrefslogtreecommitdiff
path: root/libxklavier
diff options
context:
space:
mode:
authorSergey Udaltsov <svu@gnome.org>2010-01-11 10:00:25 +0000
committerSergey Udaltsov <svu@gnome.org>2010-01-11 10:00:25 +0000
commit247315fa10b4228c4e0feb173f02c3f5d08fce33 (patch)
tree80d0e5220e9383fd99aa3671144c8f0a470f2aae /libxklavier
parent9ac5dac8a288150ea82d0e202fbd52e6119dade7 (diff)
downloadlibxklavier-247315fa10b4228c4e0feb173f02c3f5d08fce33.tar.gz
removing listeners masks field - counters have that info anyway
Diffstat (limited to 'libxklavier')
-rw-r--r--libxklavier/xklavier.c30
-rw-r--r--libxklavier/xklavier_evt.c79
-rw-r--r--libxklavier/xklavier_evt_xkb.c14
-rw-r--r--libxklavier/xklavier_evt_xmm.c22
-rw-r--r--libxklavier/xklavier_private.h14
-rw-r--r--libxklavier/xklavier_util.c4
-rwxr-xr-xlibxklavier/xklavier_xmm.c4
7 files changed, 80 insertions, 87 deletions
diff --git a/libxklavier/xklavier.c b/libxklavier/xklavier.c
index 3d55451..154208c 100644
--- a/libxklavier/xklavier.c
+++ b/libxklavier/xklavier.c
@@ -176,12 +176,10 @@ xkl_engine_start_listen(XklEngine * engine, guint what)
{
int i;
guchar *cntr = xkl_engine_priv(engine, listener_type_counters);
- for (i = 0; i < XKL_NUMBER_OF_LISTEN_MODES; i++, cntr++)
+ for (i = 0; i < XKLL_NUMBER_OF_LISTEN_MODES; i++, cntr++)
if (what & (1 << i))
(*cntr)++;
- xkl_engine_priv(engine, listener_type) |= what;
-
if (!
(xkl_engine_priv(engine, features) &
XKLF_REQUIRES_MANUAL_LAYOUT_MANAGEMENT)
@@ -202,12 +200,10 @@ xkl_engine_stop_listen(XklEngine * engine, guint what)
int i;
xkl_engine_pause_listen(engine);
guchar *cntr = xkl_engine_priv(engine, listener_type_counters);
- for (i = 0; i < XKL_NUMBER_OF_LISTEN_MODES; i++, cntr++) {
+ for (i = 0; i < XKLL_NUMBER_OF_LISTEN_MODES; i++, cntr++) {
int mask = 1 << i;
if (what & mask) {
- if (!--(*cntr))
- xkl_engine_priv(engine, listener_type) &=
- !mask;
+ (*cntr)--;
}
}
@@ -358,8 +354,7 @@ xkl_engine_load_window_tree(XklEngine * engine)
int revert;
gboolean retval = TRUE, have_toplevel_win;
- if (xkl_engine_priv(engine, listener_type) &
- XKLL_MANAGE_WINDOW_STATES)
+ if (xkl_engine_is_listening_for(engine, XKLL_MANAGE_WINDOW_STATES))
retval =
xkl_engine_load_subtree(engine,
xkl_engine_priv(engine,
@@ -577,8 +572,7 @@ xkl_engine_lock_group(XklEngine * engine, int group)
gint
xkl_engine_pause_listen(XklEngine * engine)
{
- xkl_debug(150, "Pause listening (listenerType: %x)\n",
- xkl_engine_priv(engine, listener_type));
+ xkl_debug(150, "Pause listening\n");
xkl_engine_ensure_vtable_inited(engine);
return xkl_engine_vcall(engine, pause_listen) (engine);
}
@@ -587,14 +581,16 @@ gint
xkl_engine_resume_listen(XklEngine * engine)
{
xkl_engine_ensure_vtable_inited(engine);
- int listener_type = xkl_engine_priv(engine, listener_type);
- xkl_debug(150, "Resume listening, listenerType: %x (%s%s%s)\n",
- listener_type,
- (listener_type & XKLL_MANAGE_WINDOW_STATES) ?
+ guchar *listener_type_counters =
+ xkl_engine_priv(engine, listener_type_counters);
+ xkl_debug(150, "Resume listening, listenerType: (%s%s%s)\n",
+ (listener_type_counters
+ [XKLL_MANAGE_WINDOW_STATES_OFFSET]) ?
"XKLL_MANAGE_WINDOW_STATES " : "",
- (listener_type & XKLL_TRACK_KEYBOARD_STATE) ?
+ (listener_type_counters
+ [XKLL_TRACK_KEYBOARD_STATE_OFFSET]) ?
"XKLL_TRACK_KEYBOARD_STATE " : "",
- (listener_type & XKLL_MANAGE_LAYOUTS) ?
+ (listener_type_counters[XKLL_MANAGE_LAYOUTS_OFFSET]) ?
"XKLL_MANAGE_LAYOUTS " : "");
if (xkl_engine_vcall(engine, resume_listen) (engine))
return 1;
diff --git a/libxklavier/xklavier_evt.c b/libxklavier/xklavier_evt.c
index 85949a0..6f5f2ce 100644
--- a/libxklavier/xklavier_evt.c
+++ b/libxklavier/xklavier_evt.c
@@ -50,8 +50,7 @@ xkl_engine_filter_events(XklEngine * engine, XEvent * xev)
break;
case CreateNotify:
xkl_engine_process_create_window_evt(engine,
- &xev->
- xcreatewindow);
+ &xev->xcreatewindow);
break;
case DestroyNotify:
xkl_debug(150,
@@ -107,8 +106,8 @@ xkl_engine_process_focus_in_evt(XklEngine * engine,
XklState selected_window_state;
if (!
- (xkl_engine_priv(engine, listener_type) &
- XKLL_MANAGE_WINDOW_STATES))
+ (xkl_engine_is_listening_for
+ (engine, XKLL_MANAGE_WINDOW_STATES)))
return;
win = fev->window;
@@ -234,10 +233,8 @@ xkl_engine_process_focus_in_evt(XklEngine * engine,
"Restoring the group from %d to %d after gaining focus\n",
xkl_engine_priv
(engine,
- curr_state).
- group,
- selected_window_state.
- group);
+ curr_state).group,
+ selected_window_state.group);
/*
* For fast mouse movements - the state is probably not updated yet
* (because of the group change notification being late).
@@ -245,21 +242,17 @@ xkl_engine_process_focus_in_evt(XklEngine * engine,
*/
xkl_engine_update_current_state
(engine,
- selected_window_state.
- group,
- selected_window_state.
- indicators,
+ selected_window_state.group,
+ selected_window_state.indicators,
"Enforcing fast update of the current state");
xkl_engine_lock_group
(engine,
- selected_window_state.
- group);
+ selected_window_state.group);
} else {
xkl_debug(150,
"Both old and new focused window "
"have group %d so no point restoring it\n",
- selected_window_state.
- group);
+ selected_window_state.group);
xkl_engine_one_switch_to_secondary_group_performed
(engine);
}
@@ -273,10 +266,8 @@ xkl_engine_process_focus_in_evt(XklEngine * engine,
xkl_debug(150,
"Restoring the indicators from %X to %X after gaining focus\n",
xkl_engine_priv(engine,
- curr_state).
- indicators,
- selected_window_state.
- indicators);
+ curr_state).indicators,
+ selected_window_state.indicators);
xkl_engine_ensure_vtable_inited
(engine);
xkl_engine_vcall(engine,
@@ -287,14 +278,12 @@ xkl_engine_process_focus_in_evt(XklEngine * engine,
xkl_debug(150,
"Not restoring the indicators %X after gaining focus: indicator handling is not enabled\n",
xkl_engine_priv(engine,
- curr_state).
- indicators);
+ curr_state).indicators);
} else
xkl_debug(150,
"Not restoring the group %d after gaining focus: global layout (xor transparent window)\n",
xkl_engine_priv(engine,
- curr_state).
- group);
+ curr_state).group);
} else
xkl_debug(150,
"Same app window - just do nothing\n");
@@ -336,8 +325,8 @@ xkl_engine_process_focus_out_evt(XklEngine * engine,
XFocusChangeEvent * fev)
{
if (!
- (xkl_engine_priv(engine, listener_type) &
- XKLL_MANAGE_WINDOW_STATES))
+ (xkl_engine_is_listening_for
+ (engine, XKLL_MANAGE_WINDOW_STATES)))
return;
if (fev->mode != NotifyNormal) {
@@ -380,7 +369,6 @@ xkl_engine_process_focus_out_evt(XklEngine * engine,
void
xkl_engine_process_property_evt(XklEngine * engine, XPropertyEvent * pev)
{
- guint listener_type = xkl_engine_priv(engine, listener_type);
if (400 <= xkl_debug_level) {
char *atom_name =
XGetAtomName(xkl_engine_get_display(engine),
@@ -399,7 +387,8 @@ xkl_engine_process_property_evt(XklEngine * engine, XPropertyEvent * pev)
}
if (pev->atom == xkl_engine_priv(engine, atoms)[WM_STATE]) {
- if (listener_type & XKLL_MANAGE_WINDOW_STATES) {
+ if (xkl_engine_is_listening_for
+ (engine, XKLL_MANAGE_WINDOW_STATES)) {
gboolean has_xkl_state =
xkl_engine_get_state(engine, pev->window,
NULL);
@@ -420,21 +409,22 @@ xkl_engine_process_property_evt(XklEngine * engine, XPropertyEvent * pev)
"Something (%d) happened to WM_STATE of window 0x%x\n",
pev->state, pev->window);
xkl_engine_select_input_merging(engine,
- pev->
- window,
+ pev->window,
PropertyChangeMask);
if (has_xkl_state) {
xkl_engine_delete_state(engine,
- pev->
- window);
+ pev->window);
}
}
} /* XKLL_MANAGE_WINDOW_STATES */
} else if (pev->atom == xkl_engine_priv(engine, base_config_atom)
&& pev->window == xkl_engine_priv(engine, root_window)) {
- if (listener_type &
- (XKLL_MANAGE_WINDOW_STATES |
- XKLL_TRACK_KEYBOARD_STATE)) {
+ if (xkl_engine_is_listening_for
+ (engine,
+ XKLL_MANAGE_WINDOW_STATES) |
+ xkl_engine_is_listening_for(engine,
+ XKLL_TRACK_KEYBOARD_STATE))
+ {
if (pev->state == PropertyNewValue) {
/* If root window got new *_NAMES_PROP_ATOM -
it most probably means new keyboard config is loaded by somebody */
@@ -453,9 +443,8 @@ void
xkl_engine_process_create_window_evt(XklEngine * engine,
XCreateWindowEvent * cev)
{
- if (!
- (xkl_engine_priv(engine, listener_type) &
- XKLL_MANAGE_WINDOW_STATES))
+ if (!xkl_engine_is_listening_for
+ (engine, XKLL_MANAGE_WINDOW_STATES))
return;
xkl_debug(200,
@@ -584,15 +573,14 @@ xkl_engine_process_state_modification(XklEngine * engine,
*/
if (!xkl_engine_find_toplevel_window
(engine, focused, &focused_toplevel)
- && xkl_engine_priv(engine,
- listener_type) & XKLL_MANAGE_WINDOW_STATES)
+ && xkl_engine_is_listening_for(engine,
+ XKLL_MANAGE_WINDOW_STATES))
focused_toplevel = xkl_engine_priv(engine, curr_toplvl_win); /* what else can I do */
xkl_debug(150, "Focused window: " WINID_FORMAT ", '%s'\n",
focused_toplevel,
xkl_get_debug_window_title(engine, focused_toplevel));
- if (xkl_engine_priv(engine, listener_type) &
- XKLL_MANAGE_WINDOW_STATES) {
+ if (xkl_engine_is_listening_for(engine, XKLL_MANAGE_WINDOW_STATES)) {
xkl_debug(150, "CurClient: " WINID_FORMAT ", '%s'\n",
xkl_engine_priv(engine, curr_toplvl_win),
xkl_get_debug_window_title(engine,
@@ -610,8 +598,8 @@ xkl_engine_process_state_modification(XklEngine * engine,
xkl_engine_update_current_state(engine,
grp, inds,
"Updating the state from new focused window");
- if (xkl_engine_priv(engine, listener_type)
- & XKLL_MANAGE_WINDOW_STATES)
+ if (xkl_engine_is_listening_for
+ (engine, XKLL_MANAGE_WINDOW_STATES))
xkl_engine_add_toplevel_window
(engine, focused_toplevel,
(Window) NULL, FALSE,
@@ -665,8 +653,7 @@ xkl_engine_process_state_modification(XklEngine * engine,
xkl_engine_try_call_state_func(engine, change_type,
&old_state);
- if (xkl_engine_priv(engine, listener_type) &
- XKLL_MANAGE_WINDOW_STATES)
+ if (xkl_engine_is_listening_for(engine, XKLL_MANAGE_WINDOW_STATES))
xkl_engine_save_toplevel_window_state(engine,
xkl_engine_priv
(engine,
diff --git a/libxklavier/xklavier_evt_xkb.c b/libxklavier/xklavier_evt_xkb.c
index a06874a..f2e6dfc 100644
--- a/libxklavier/xklavier_evt_xkb.c
+++ b/libxklavier/xklavier_evt_xkb.c
@@ -56,8 +56,10 @@ xkl_xkb_process_x_event(XklEngine * engine, XEvent * xev)
guint inds;
XkbEvent *kev = (XkbEvent *) xev;
- if (!(xkl_engine_priv(engine, listener_type) &
- (XKLL_MANAGE_WINDOW_STATES | XKLL_TRACK_KEYBOARD_STATE)))
+ if (!
+ (xkl_engine_is_listening_for(engine, XKLL_MANAGE_WINDOW_STATES)
+ | xkl_engine_is_listening_for(engine,
+ XKLL_TRACK_KEYBOARD_STATE)))
return 0;
#ifdef HAVE_XINPUT
@@ -87,8 +89,8 @@ xkl_xkb_process_x_event(XklEngine * engine, XEvent * xev)
if (kev->state.changed & GROUP_CHANGE_MASK)
xkl_engine_process_state_modification(engine,
GROUP_CHANGED,
- kev->state.
- locked_group,
+ kev->
+ state.locked_group,
0, FALSE);
else { /* ...not interested... */
@@ -99,8 +101,8 @@ xkl_xkb_process_x_event(XklEngine * engine, XEvent * xev)
xkl_debug(0,
"ATTENTION! Currently cached group %d is not equal to the current group from the event: %d\n!",
xkl_engine_priv(engine,
- curr_state).
- group, kev->state.locked_group);
+ curr_state).group,
+ kev->state.locked_group);
}
break;
diff --git a/libxklavier/xklavier_evt_xmm.c b/libxklavier/xklavier_evt_xmm.c
index e24d47f..3b5ecb3 100644
--- a/libxklavier/xklavier_evt_xmm.c
+++ b/libxklavier/xklavier_evt_xmm.c
@@ -30,7 +30,7 @@
static gint
xkl_xmm_process_keypress_event(XklEngine * engine, XKeyPressedEvent * kpe)
{
- if (xkl_engine_priv(engine, listener_type) & XKLL_MANAGE_LAYOUTS) {
+ if (xkl_engine_is_listening_for(engine, XKLL_MANAGE_LAYOUTS)) {
gint current_shortcut = 0;
const XmmSwitchOption *sop;
xkl_debug(200, "Processing the KeyPress event\n");
@@ -44,12 +44,11 @@ xkl_xmm_process_keypress_event(XklEngine * engine, XKeyPressedEvent * kpe)
if (state.group != -1) {
gint new_group =
(state.group +
- sop->
- shortcut_steps[current_shortcut]) %
+ sop->shortcut_steps[current_shortcut])
+ %
g_strv_length(xkl_engine_backend
(engine, XklXmm,
- current_config).
- layouts);
+ current_config).layouts);
xkl_debug(150,
"Setting new xmm group %d\n",
new_group);
@@ -72,12 +71,11 @@ xkl_xmm_process_property_event(XklEngine * engine, XPropertyEvent * kpe)
*/
if (kpe->atom == state_atom) {
XklState state;
- guint listener_type =
- xkl_engine_priv(engine, listener_type);
xkl_xmm_get_server_state(engine, &state);
- if (listener_type & XKLL_MANAGE_LAYOUTS) {
+ if (xkl_engine_is_listening_for
+ (engine, XKLL_MANAGE_LAYOUTS)) {
xkl_debug(150,
"Current group from the root window property %d\n",
state.group);
@@ -87,8 +85,12 @@ xkl_xmm_process_property_event(XklEngine * engine, XPropertyEvent * kpe)
return 1;
}
- if (listener_type & (XKLL_MANAGE_WINDOW_STATES |
- XKLL_TRACK_KEYBOARD_STATE)) {
+ if (xkl_engine_is_listening_for
+ (engine,
+ XKLL_MANAGE_WINDOW_STATES) |
+ xkl_engine_is_listening_for(engine,
+ XKLL_TRACK_KEYBOARD_STATE))
+ {
xkl_debug(150,
"XMM state changed, new 'group' %d\n",
state.group);
diff --git a/libxklavier/xklavier_private.h b/libxklavier/xklavier_private.h
index 4fbbbd9..e270ef0 100644
--- a/libxklavier/xklavier_private.h
+++ b/libxklavier/xklavier_private.h
@@ -37,7 +37,13 @@ enum { WM_NAME,
#define XKL_NUMBER_OF_REGISTRY_DOCS 2
/* We have 3 values in XklEngineListenModes */
-#define XKL_NUMBER_OF_LISTEN_MODES 3
+enum {
+ XKLL_MANAGE_WINDOW_STATES_OFFSET = 0,
+ XKLL_TRACK_KEYBOARD_STATE_OFFSET,
+ XKLL_MANAGE_LAYOUTS_OFFSET,
+ XKLL_NUMBER_OF_LISTEN_MODES
+};
+
struct _XklEnginePrivate {
@@ -49,12 +55,11 @@ struct _XklEnginePrivate {
gint default_group;
- guint listener_type;
-
/*
* Separate counter for each of XklEngineListenModes!
*/
- guchar listener_type_counters[XKL_NUMBER_OF_LISTEN_MODES];
+ guchar listener_type_counters[XKLL_NUMBER_OF_LISTEN_MODES];
+#define xkl_engine_is_listening_for(engine, type) (xkl_engine_priv((engine), listener_type_counters)[type##_OFFSET] > 0)
guint secondary_groups_mask;
@@ -455,6 +460,7 @@ extern void
+
xkl_config_registry_foreach_in_xpath_with_param(XklConfigRegistry * config,
const gchar * format,
const gchar * value,
diff --git a/libxklavier/xklavier_util.c b/libxklavier/xklavier_util.c
index 913afb8..578f408 100644
--- a/libxklavier/xklavier_util.c
+++ b/libxklavier/xklavier_util.c
@@ -100,8 +100,8 @@ xkl_engine_save_state(XklEngine * engine, Window win, XklState * state)
Window app_win;
if (!
- (xkl_engine_priv(engine, listener_type) &
- XKLL_MANAGE_WINDOW_STATES))
+ (xkl_engine_is_listening_for
+ (engine, XKLL_MANAGE_WINDOW_STATES)))
return;
if (xkl_engine_find_toplevel_window(engine, win, &app_win))
diff --git a/libxklavier/xklavier_xmm.c b/libxklavier/xklavier_xmm.c
index 3353961..8600ca9 100755
--- a/libxklavier/xklavier_xmm.c
+++ b/libxklavier/xklavier_xmm.c
@@ -149,7 +149,7 @@ xkl_xmm_find_switch_option(XklEngine * engine, gint keycode,
gint
xkl_xmm_resume_listen(XklEngine * engine)
{
- if (xkl_engine_priv(engine, listener_type) & XKLL_MANAGE_LAYOUTS)
+ if (xkl_engine_is_listening_for(engine, XKLL_MANAGE_LAYOUTS))
xkl_xmm_shortcuts_grab(engine);
return 0;
}
@@ -157,7 +157,7 @@ xkl_xmm_resume_listen(XklEngine * engine)
gint
xkl_xmm_pause_listen(XklEngine * engine)
{
- if (xkl_engine_priv(engine, listener_type) & XKLL_MANAGE_LAYOUTS)
+ if (xkl_engine_is_listening_for(engine, XKLL_MANAGE_LAYOUTS))
xkl_xmm_shortcuts_ungrab(engine);
return 0;
}