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:
parent
a8c3470cf2
commit
133bbdfefa
@ -1195,9 +1195,12 @@ data_device_start_drag (struct wl_client *client,
|
||||
&drag_grab_interface,
|
||||
surface, drag_source, icon_surface);
|
||||
|
||||
meta_wayland_keyboard_set_focus (seat->keyboard, NULL);
|
||||
meta_wayland_keyboard_start_grab (seat->keyboard,
|
||||
&seat->data_device.current_grab->keyboard_grab);
|
||||
if (meta_wayland_seat_has_keyboard (seat))
|
||||
{
|
||||
meta_wayland_keyboard_set_focus (seat->keyboard, NULL);
|
||||
meta_wayland_keyboard_start_grab (seat->keyboard,
|
||||
&seat->data_device.current_grab->keyboard_grab);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -825,10 +825,6 @@ meta_wayland_keyboard_set_focus (MetaWaylandKeyboard *keyboard,
|
||||
MetaWaylandSurface *surface)
|
||||
{
|
||||
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)
|
||||
return;
|
||||
|
@ -249,12 +249,12 @@ meta_wayland_popup_dismiss (MetaWaylandPopup *popup)
|
||||
{
|
||||
MetaWaylandSurface *top_popup_surface;
|
||||
MetaWaylandSeat *seat;
|
||||
MetaWaylandKeyboard *keyboard;
|
||||
|
||||
top_popup_surface = meta_wayland_popup_grab_get_top_popup (popup_grab);
|
||||
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);
|
||||
MetaWaylandPopup *popup;
|
||||
MetaWaylandSeat *seat;
|
||||
MetaWaylandKeyboard *keyboard;
|
||||
|
||||
/* Don't allow creating popups if the grab has a different client. */
|
||||
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);
|
||||
|
||||
seat = meta_wayland_pointer_get_seat (grab->generic.pointer);
|
||||
keyboard = seat->keyboard;
|
||||
meta_wayland_keyboard_set_focus (keyboard, surface);
|
||||
if (meta_wayland_seat_has_keyboard (seat))
|
||||
meta_wayland_keyboard_set_focus (seat->keyboard, surface);
|
||||
|
||||
return popup;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user