summaryrefslogtreecommitdiff
path: root/desktop-shell
diff options
context:
space:
mode:
authorDerek Foreman <derekf@osg.samsung.com>2015-07-15 13:00:45 -0500
committerBryce Harrington <bryce@osg.samsung.com>2015-07-31 15:15:59 -0700
commit60d97311be5492b02843c4e9d46f818d43499dae (patch)
tree9fb829a5e474baae73aaa0f038c5d80b0f7ecf5f /desktop-shell
parent30ce607682975420d5405bd3f4fbf33ca2163fb0 (diff)
desktop-shell: Don't call wl_list_init() in the middle of a list
seat->keyboard_focus_listener.link isn't a head, it's just sometimes a member of the focus signal list. Calling wl_list_init() on it puts a loop in the list. Instead, we remove the item then init it. That way we can call remove on it again later even if it hasn't been re-added to a list. Signed-off-by: Derek Foreman <derekf@osg.samsung.com> Reviewed-by: Jonas Ã…dahl <jadahl@gmail.com>
Diffstat (limited to 'desktop-shell')
-rw-r--r--desktop-shell/shell.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
index dec9169b..d08b0d81 100644
--- a/desktop-shell/shell.c
+++ b/desktop-shell/shell.c
@@ -3110,6 +3110,7 @@ shell_seat_caps_changed(struct wl_listener *listener, void *data)
wl_signal_add(&seat->seat->keyboard->focus_signal,
&seat->keyboard_focus_listener);
} else if (!seat->seat->keyboard) {
+ wl_list_remove(&seat->keyboard_focus_listener.link);
wl_list_init(&seat->keyboard_focus_listener.link);
}
@@ -3118,6 +3119,7 @@ shell_seat_caps_changed(struct wl_listener *listener, void *data)
wl_signal_add(&seat->seat->pointer->focus_signal,
&seat->pointer_focus_listener);
} else if (!seat->seat->pointer) {
+ wl_list_remove(&seat->pointer_focus_listener.link);
wl_list_init(&seat->pointer_focus_listener.link);
}
}