wayland/keyboard: Check keyboard presence at set focus call site

Make the caller of focus setting and grab starting check whether there
is a keyboard to update the focus state or start grabbing. It makes it
more obvious what to expect, as the call would be a no-op in when no
keyboard is present.

https://bugzilla.gnome.org/show_bug.cgi?id=771646
This commit is contained in:
Jonas Ådahl 2016-09-21 12:00:39 +08:00
parent a8c3470cf2
commit 133bbdfefa
3 changed files with 11 additions and 13 deletions

View File

@ -1195,9 +1195,12 @@ data_device_start_drag (struct wl_client *client,
&drag_grab_interface, &drag_grab_interface,
surface, drag_source, icon_surface); surface, drag_source, icon_surface);
meta_wayland_keyboard_set_focus (seat->keyboard, NULL); if (meta_wayland_seat_has_keyboard (seat))
meta_wayland_keyboard_start_grab (seat->keyboard, {
&seat->data_device.current_grab->keyboard_grab); meta_wayland_keyboard_set_focus (seat->keyboard, NULL);
meta_wayland_keyboard_start_grab (seat->keyboard,
&seat->data_device.current_grab->keyboard_grab);
}
} }
static void static void

View File

@ -825,10 +825,6 @@ meta_wayland_keyboard_set_focus (MetaWaylandKeyboard *keyboard,
MetaWaylandSurface *surface) MetaWaylandSurface *surface)
{ {
MetaWaylandInputDevice *input_device = META_WAYLAND_INPUT_DEVICE (keyboard); MetaWaylandInputDevice *input_device = META_WAYLAND_INPUT_DEVICE (keyboard);
MetaWaylandSeat *seat = meta_wayland_input_device_get_seat (input_device);
if (!meta_wayland_seat_has_keyboard (seat))
return;
if (keyboard->focus_surface == surface) if (keyboard->focus_surface == surface)
return; return;

View File

@ -249,12 +249,12 @@ meta_wayland_popup_dismiss (MetaWaylandPopup *popup)
{ {
MetaWaylandSurface *top_popup_surface; MetaWaylandSurface *top_popup_surface;
MetaWaylandSeat *seat; MetaWaylandSeat *seat;
MetaWaylandKeyboard *keyboard;
top_popup_surface = meta_wayland_popup_grab_get_top_popup (popup_grab); top_popup_surface = meta_wayland_popup_grab_get_top_popup (popup_grab);
seat = meta_wayland_pointer_get_seat (popup_grab->generic.pointer); seat = meta_wayland_pointer_get_seat (popup_grab->generic.pointer);
keyboard = seat->keyboard;
meta_wayland_keyboard_set_focus (keyboard, top_popup_surface); if (meta_wayland_seat_has_keyboard (seat))
meta_wayland_keyboard_set_focus (seat->keyboard, top_popup_surface);
} }
} }
@ -272,7 +272,6 @@ meta_wayland_popup_create (MetaWaylandPopupSurface *popup_surface,
meta_wayland_popup_surface_get_surface (popup_surface); meta_wayland_popup_surface_get_surface (popup_surface);
MetaWaylandPopup *popup; MetaWaylandPopup *popup;
MetaWaylandSeat *seat; MetaWaylandSeat *seat;
MetaWaylandKeyboard *keyboard;
/* Don't allow creating popups if the grab has a different client. */ /* Don't allow creating popups if the grab has a different client. */
if (grab->grab_client != wl_resource_get_client (surface->resource)) if (grab->grab_client != wl_resource_get_client (surface->resource))
@ -285,8 +284,8 @@ meta_wayland_popup_create (MetaWaylandPopupSurface *popup_surface,
wl_list_insert (&grab->all_popups, &popup->link); wl_list_insert (&grab->all_popups, &popup->link);
seat = meta_wayland_pointer_get_seat (grab->generic.pointer); seat = meta_wayland_pointer_get_seat (grab->generic.pointer);
keyboard = seat->keyboard; if (meta_wayland_seat_has_keyboard (seat))
meta_wayland_keyboard_set_focus (keyboard, surface); meta_wayland_keyboard_set_focus (seat->keyboard, surface);
return popup; return popup;
} }