Don't crash when the previous keyboard surface goes away

Just always set keyboard focus to the top surface.
This commit is contained in:
Kristian Høgsberg 2011-01-28 15:53:07 -05:00
parent 0ce245761c
commit f992b2fc47
2 changed files with 16 additions and 11 deletions

View File

@ -901,22 +901,28 @@ notify_pointer_focus(struct wl_input_device *device,
}
void
notify_keyboard_focus(struct wl_input_device *device_base,
notify_keyboard_focus(struct wl_input_device *device,
uint32_t time, struct wlsc_output *output,
struct wl_array *keys)
{
struct wlsc_input_device *device =
(struct wlsc_input_device *) device_base;
struct wlsc_input_device *wd =
(struct wlsc_input_device *) device;
struct wlsc_compositor *compositor =
(struct wlsc_compositor *) device->compositor;
struct wlsc_surface *es;
if (!wl_list_empty(&compositor->surface_list))
es = container_of(compositor->surface_list.next,
struct wlsc_surface, link);
else
es = NULL;
if (output) {
wl_array_copy(&device->input_device.keys, keys);
wl_input_device_set_keyboard_focus(&device->input_device,
device->saved_keyboard_focus,
time);
wl_array_copy(&wd->input_device.keys, keys);
wl_input_device_set_keyboard_focus(&wd->input_device,
&es->surface, time);
} else {
device->saved_keyboard_focus =
device->input_device.keyboard_focus;
wl_input_device_set_keyboard_focus(&device->input_device,
wl_input_device_set_keyboard_focus(&wd->input_device,
NULL, time);
}
}

View File

@ -70,7 +70,6 @@ struct wlsc_input_device {
struct wl_list link;
uint32_t modifier_state;
struct wl_selection *selection;
struct wl_surface *saved_keyboard_focus;
};
struct wlsc_drm {