summaryrefslogtreecommitdiff
path: root/libxklavier/xklavier_evt.c
diff options
context:
space:
mode:
authorSergey Udaltsov <svu@gnome.org>2006-10-15 20:04:06 +0000
committerSergey Udaltsov <svu@gnome.org>2006-10-15 20:04:06 +0000
commit5193d743c073be7a3bf493870307a5b2b9d3d34b (patch)
tree88fceba467bb6ca269ce100e66e00c812a1187b6 /libxklavier/xklavier_evt.c
parent6c84f54a003678b98f9a2745f52b66e89e545033 (diff)
downloadlibxklavier-5193d743c073be7a3bf493870307a5b2b9d3d34b.tar.gz
Proper notification about the change of the root window property, defining the configuration. XKLL_TRACK_KEYBOARD_STATE apps are notified.
Diffstat (limited to 'libxklavier/xklavier_evt.c')
-rw-r--r--libxklavier/xklavier_evt.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/libxklavier/xklavier_evt.c b/libxklavier/xklavier_evt.c
index 1371a10..8c25a2c 100644
--- a/libxklavier/xklavier_evt.c
+++ b/libxklavier/xklavier_evt.c
@@ -77,7 +77,7 @@ xkl_engine_filter_events(XklEngine * engine, XEvent * xev)
case MappingNotify:
xkl_debug(200, "%s\n",
xkl_event_get_name(xev->type));
- xkl_engine_reset_all_info(engine,
+ xkl_engine_reset_all_info(engine, FALSE,
"X event: MappingNotify");
break;
default:
@@ -359,10 +359,13 @@ xkl_engine_process_focus_out_evt(XklEngine * engine,
* + for XKLL_MANAGE_WINDOW_STATES
* - WM_STATE property for all windows
* - Configuration property of the root window
+ * + for XKLL_TRACK_KEYBOARD_STATE
+ * - Configuration property of the root window
*/
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),
@@ -380,9 +383,8 @@ xkl_engine_process_property_evt(XklEngine * engine, XPropertyEvent * pev)
}
}
- if (xkl_engine_priv(engine, listener_type) &
- XKLL_MANAGE_WINDOW_STATES) {
- if (pev->atom == xkl_engine_priv(engine, atoms)[WM_STATE]) {
+ if (pev->atom == xkl_engine_priv(engine, atoms)[WM_STATE]) {
+ if (listener_type & XKLL_MANAGE_WINDOW_STATES) {
gboolean has_xkl_state =
xkl_engine_get_state(engine, pev->window,
NULL);
@@ -412,20 +414,21 @@ xkl_engine_process_property_evt(XklEngine * engine, XPropertyEvent * pev)
window);
}
}
- } else
- if (pev->atom ==
- xkl_engine_priv(engine, base_config_atom)
- && pev->window == xkl_engine_priv(engine,
- root_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 (pev->state == PropertyNewValue) {
/* If root window got new *_NAMES_PROP_ATOM -
it most probably means new keyboard config is loaded by somebody */
xkl_engine_reset_all_info
- (engine,
+ (engine, TRUE,
"New value of *_NAMES_PROP_ATOM on root window");
}
- }
- } /* XKLL_MANAGE_WINDOW_STATES */
+ } /* XKLL_MANAGE_WINDOW_STATES | XKLL_TRACK_KEYBOARD_STATE */
+ }
}
/*