state: check wrap_group_into_range() return value
authorRan Benita <ran234@gmail.com>
Sun, 9 Feb 2014 11:51:38 +0000 (13:51 +0200)
committerRan Benita <ran234@gmail.com>
Sun, 9 Feb 2014 12:09:42 +0000 (14:09 +0200)
It returns XKB_LAYOUT_INVALID in case num_groups == 0. So we shouldn't
just save it in the state.
Note, though, that this condition is generally impossible.

Signed-off-by: Ran Benita <ran234@gmail.com>
src/state.c

index 41372f59985bfa1b627c9a3c58bef4cfc2770ddc..8b1a526fc37b5dcd84901537d08204bcf6345fcb 100644 (file)
@@ -668,23 +668,27 @@ xkb_state_led_update_all(struct xkb_state *state)
 static void
 xkb_state_update_derived(struct xkb_state *state)
 {
+    xkb_layout_index_t wrapped;
+
     state->components.mods = (state->components.base_mods |
                               state->components.latched_mods |
                               state->components.locked_mods);
 
     /* TODO: Use groups_wrap control instead of always RANGE_WRAP. */
 
+    wrapped = wrap_group_into_range(state->components.locked_group,
+                                    state->keymap->num_groups,
+                                    RANGE_WRAP, 0);
     state->components.locked_group =
-        wrap_group_into_range(state->components.locked_group,
-                              state->keymap->num_groups,
-                              RANGE_WRAP, 0);
+        (wrapped == XKB_LAYOUT_INVALID ? 0 : wrapped);
 
+    wrapped = wrap_group_into_range(state->components.base_group +
+                                    state->components.latched_group +
+                                    state->components.locked_group,
+                                    state->keymap->num_groups,
+                                    RANGE_WRAP, 0);
     state->components.group =
-        wrap_group_into_range(state->components.base_group +
-                              state->components.latched_group +
-                              state->components.locked_group,
-                              state->keymap->num_groups,
-                              RANGE_WRAP, 0);
+        (wrapped == XKB_LAYOUT_INVALID ? 0 : wrapped);
 
     xkb_state_led_update_all(state);
 }