diff options
| author | Kristian Høgsberg <krh@bitplanet.net> | 2011-01-28 15:53:07 -0500 |
|---|---|---|
| committer | Kristian Høgsberg <krh@bitplanet.net> | 2011-01-28 15:53:07 -0500 |
| commit | f992b2fc47c44c53a3b8f2c2d823d9d3961df7ad (patch) | |
| tree | 5f1a34f0488aefd513cc6773b5899aac39ab9690 /compositor | |
| parent | Add initial basic support for fullscreen surfaces (diff) | |
| download | wayland-f992b2fc47c44c53a3b8f2c2d823d9d3961df7ad.tar wayland-f992b2fc47c44c53a3b8f2c2d823d9d3961df7ad.tar.gz wayland-f992b2fc47c44c53a3b8f2c2d823d9d3961df7ad.tar.bz2 wayland-f992b2fc47c44c53a3b8f2c2d823d9d3961df7ad.tar.lz wayland-f992b2fc47c44c53a3b8f2c2d823d9d3961df7ad.tar.xz wayland-f992b2fc47c44c53a3b8f2c2d823d9d3961df7ad.tar.zst wayland-f992b2fc47c44c53a3b8f2c2d823d9d3961df7ad.zip | |
Don't crash when the previous keyboard surface goes away
Just always set keyboard focus to the top surface.
Diffstat (limited to 'compositor')
| -rw-r--r-- | compositor/compositor.c | 26 | ||||
| -rw-r--r-- | compositor/compositor.h | 1 |
2 files changed, 16 insertions, 11 deletions
diff --git a/compositor/compositor.c b/compositor/compositor.c index 80a972e..9d7c330 100644 --- a/compositor/compositor.c +++ b/compositor/compositor.c @@ -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); } } diff --git a/compositor/compositor.h b/compositor/compositor.h index 8127b5d..b3dddda 100644 --- a/compositor/compositor.h +++ b/compositor/compositor.h @@ -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 { |
