When a window destroyed, if any input had the window in keyboard
focus, the keyboard focus is reset to NULL. A new keyboard focus is set
only, if the user clicks something. If the user presses a key instead of
clicking, the key press event is sent to the client which has NULL
keyboard focus, triggering a segfault in window_handle_key().
Fix the segfault by ignoring the key event, if there is no target
window.
I triggered this segfault by clicking the unlock dialog away, and then
pressing a key.
Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
{
struct input *input = data;
struct window *window = input->keyboard_focus;
- struct display *d = window->display;
+ struct display *d = input->display;
uint32_t code, sym, level;
code = key + d->xkb->min_key_code;
- if (window->keyboard_device != input)
+ if (!window || window->keyboard_device != input)
return;
level = 0;
struct display *d = input->display;
uint32_t *k, *end;
- window = input->keyboard_focus;
if (window) {
window->keyboard_device = NULL;
if (window->keyboard_focus_handler)