summaryrefslogtreecommitdiff
path: root/libcaribou/xadapter.vala
diff options
context:
space:
mode:
authorDaiki Ueno <ueno@unixuser.org>2013-02-17 17:22:22 +0900
committerDaiki Ueno <ueno@unixuser.org>2013-02-18 21:55:46 +0900
commitf037563b9e99cc831b16d8f4821743dcdcafc2bd (patch)
tree44f631caf71aedfc3f0da4c4c9c95d62beef733d /libcaribou/xadapter.vala
parent401efe924f1887f9cc302a9c30d5127e5eed5570 (diff)
downloadcaribou-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.vala6
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];