diff options
author | Daiki Ueno <ueno@unixuser.org> | 2013-02-17 17:22:22 +0900 |
---|---|---|
committer | Daiki Ueno <ueno@unixuser.org> | 2013-02-18 21:55:46 +0900 |
commit | f037563b9e99cc831b16d8f4821743dcdcafc2bd (patch) | |
tree | 44f631caf71aedfc3f0da4c4c9c95d62beef733d /libcaribou/xadapter.vala | |
parent | 401efe924f1887f9cc302a9c30d5127e5eed5570 (diff) | |
download | caribou-f037563b9e99cc831b16d8f4821743dcdcafc2bd.tar.gz |
Track XKB group configuration change
Since GNOME 3.6, switching XKB layouts changes the group
configuration, while libcaribou assumes that the configuration is
fixed during the session.
This patch tries to track group configuration changes and allow
clients to reconstruct keyboard UI through two new signals:
KeyboardModel::group-added and KeyboardModel::group-removed.
https://bugzilla.gnome.org/show_bug.cgi?id=694011
Diffstat (limited to 'libcaribou/xadapter.vala')
-rw-r--r-- | libcaribou/xadapter.vala | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/libcaribou/xadapter.vala b/libcaribou/xadapter.vala index 49aeb68..dbc34f9 100644 --- a/libcaribou/xadapter.vala +++ b/libcaribou/xadapter.vala @@ -7,6 +7,7 @@ namespace Caribou { /* Signals */ public signal void modifiers_changed (uint modifiers); public signal void group_changed (uint gid, string group, string variant); + public signal void config_changed (); /* Private properties */ static XAdapter instance; @@ -47,6 +48,7 @@ namespace Caribou { xkl_state = this.xkl_engine.get_current_state (); this.group = (uchar) xkl_state.group; xkl_engine.X_state_changed.connect_after (xkl_state_changed); + xkl_engine.X_config_changed.connect_after (xkl_config_changed); Xkb.get_state (this.xdisplay, Xkb.UseCoreKbd, out xkb_state); this.modifiers = xkb_state.mods; @@ -137,6 +139,10 @@ namespace Caribou { group_changed (this.group, group_name, variant_name); } + private void xkl_config_changed () { + config_changed (); + } + private uchar keysym_to_modifier (uint keyval) { for (int i = xkbdesc.min_key_code; i <= xkbdesc.max_key_code; i++) { unowned Xkb.SymMap symmap = xkbdesc.map.key_sym_map[i]; |