summaryrefslogtreecommitdiff
path: root/libcaribou/xadapter.vala
diff options
context:
space:
mode:
authorEitan Isaacson <eitan@monotonous.org>2011-05-02 12:46:16 -0700
committerEitan Isaacson <eitan@monotonous.org>2011-05-02 12:47:09 -0700
commitb7982227c326a1e944aefea46092c3d8d446642f (patch)
treef40f37af94a3145aad0637d188a123676a06cc4c /libcaribou/xadapter.vala
parentf5aed67a39df38f7becf4708a80f78797823c0d3 (diff)
downloadcaribou-b7982227c326a1e944aefea46092c3d8d446642f.tar.gz
libcaribou: Fix one XKB group case.
Diffstat (limited to 'libcaribou/xadapter.vala')
-rw-r--r--libcaribou/xadapter.vala23
1 files changed, 15 insertions, 8 deletions
diff --git a/libcaribou/xadapter.vala b/libcaribou/xadapter.vala
index d240f08..367e472 100644
--- a/libcaribou/xadapter.vala
+++ b/libcaribou/xadapter.vala
@@ -62,11 +62,11 @@ namespace Caribou {
if (xev.any.xkb_type == Xkb.StateNotify) {
Xkb.StateNotifyEvent *sevent = &xev.state;
if ((sevent.changed & Xkb.GroupStateMask) != 0) {
- Xkl.ConfigRec config_rec = new Xkl.ConfigRec ();
- config_rec.get_from_server (this.xkl_engine);
- group_changed (sevent.group, config_rec.layouts[sevent.group],
- config_rec.variants[sevent.group]);
+ string group_name;
+ string variant_name;
this.group = (uchar) sevent.group;
+ get_current_group (out group_name, out variant_name);
+ group_changed (this.group, group_name, variant_name);
} else if ((sevent.changed & Xkb.ModifierStateMask) != 0) {
this.modifiers = (uchar) sevent.mods;
}
@@ -183,6 +183,8 @@ namespace Caribou {
config_rec.get_from_server (this.xkl_engine);
group_name = config_rec.layouts[this.group];
variant_name = config_rec.variants[this.group];
+ if (variant_name == null)
+ variant_name = "";
return this.group;
}
@@ -194,15 +196,20 @@ namespace Caribou {
config_rec.get_from_server (this.xkl_engine);
for (i=0; i<4; i++)
- if (config_rec.layouts[i] == null)
+ if (config_rec.layouts[i] == null) {
+ i--;
break;
+ }
- group_names = new string[i];
- variant_names = new string[i];
+ group_names = new string[i+1];
+ variant_names = new string[i+1];
for (; i>=0; i--) {
group_names[i] = config_rec.layouts[i];
- variant_names[i] = config_rec.variants[i];
+ if (config_rec.variants[i] != null)
+ variant_names[i] = config_rec.variants[i];
+ else
+ variant_names[i] = "";
}
}