mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 01:20:42 -05:00
wayland: Check stylus serials on meta_wayland_seat_can_popup()
This allows xdg_popup.grab() to work with styli. Without this check we would bail out and emit xdg_popup.popup_done, leaving stylus users unable to interact with popup menus, comboboxes, etc... Closes: https://gitlab.gnome.org/GNOME/mutter/issues/886
This commit is contained in:
parent
942883577e
commit
f2b3dd318f
@ -504,9 +504,17 @@ gboolean
|
|||||||
meta_wayland_seat_can_popup (MetaWaylandSeat *seat,
|
meta_wayland_seat_can_popup (MetaWaylandSeat *seat,
|
||||||
uint32_t serial)
|
uint32_t serial)
|
||||||
{
|
{
|
||||||
|
MetaWaylandCompositor *compositor;
|
||||||
|
MetaWaylandTabletSeat *tablet_seat;
|
||||||
|
|
||||||
|
compositor = meta_wayland_compositor_get_default ();
|
||||||
|
tablet_seat =
|
||||||
|
meta_wayland_tablet_manager_ensure_seat (compositor->tablet_manager, seat);
|
||||||
|
|
||||||
return (meta_wayland_pointer_can_popup (seat->pointer, serial) ||
|
return (meta_wayland_pointer_can_popup (seat->pointer, serial) ||
|
||||||
meta_wayland_keyboard_can_popup (seat->keyboard, serial) ||
|
meta_wayland_keyboard_can_popup (seat->keyboard, serial) ||
|
||||||
meta_wayland_touch_can_popup (seat->touch, serial));
|
meta_wayland_touch_can_popup (seat->touch, serial) ||
|
||||||
|
meta_wayland_tablet_seat_can_popup (tablet_seat, serial));
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
|
@ -552,3 +552,20 @@ meta_wayland_tablet_seat_set_pad_focus (MetaWaylandTabletSeat *tablet_seat,
|
|||||||
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &pad))
|
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &pad))
|
||||||
meta_wayland_tablet_pad_set_focus (pad, surface);
|
meta_wayland_tablet_pad_set_focus (pad, surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
meta_wayland_tablet_seat_can_popup (MetaWaylandTabletSeat *tablet_seat,
|
||||||
|
uint32_t serial)
|
||||||
|
{
|
||||||
|
MetaWaylandTabletTool *tool;
|
||||||
|
GHashTableIter iter;
|
||||||
|
|
||||||
|
g_hash_table_iter_init (&iter, tablet_seat->tools);
|
||||||
|
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &tool))
|
||||||
|
{
|
||||||
|
if (meta_wayland_tablet_tool_can_popup (tool, serial))
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
@ -75,5 +75,7 @@ MetaWaylandTablet *meta_wayland_tablet_seat_lookup_paired_tablet (MetaWaylan
|
|||||||
MetaWaylandTabletPad *pad);
|
MetaWaylandTabletPad *pad);
|
||||||
GList *meta_wayland_tablet_seat_lookup_paired_pads (MetaWaylandTabletSeat *tablet_seat,
|
GList *meta_wayland_tablet_seat_lookup_paired_pads (MetaWaylandTabletSeat *tablet_seat,
|
||||||
MetaWaylandTablet *tablet);
|
MetaWaylandTablet *tablet);
|
||||||
|
gboolean meta_wayland_tablet_seat_can_popup (MetaWaylandTabletSeat *tablet_seat,
|
||||||
|
uint32_t serial);
|
||||||
|
|
||||||
#endif /* META_WAYLAND_TABLET_SEAT_H */
|
#endif /* META_WAYLAND_TABLET_SEAT_H */
|
||||||
|
@ -1018,3 +1018,10 @@ meta_wayland_tablet_tool_can_grab_surface (MetaWaylandTabletTool *tool,
|
|||||||
return ((tool->down_serial == serial || tool->button_serial == serial) &&
|
return ((tool->down_serial == serial || tool->button_serial == serial) &&
|
||||||
tablet_tool_can_grab_surface (tool, surface));
|
tablet_tool_can_grab_surface (tool, surface));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
meta_wayland_tablet_tool_can_popup (MetaWaylandTabletTool *tool,
|
||||||
|
uint32_t serial)
|
||||||
|
{
|
||||||
|
return tool->down_serial == serial || tool->button_serial == serial;
|
||||||
|
}
|
||||||
|
@ -85,5 +85,7 @@ void meta_wayland_tablet_tool_set_cursor_position (MetaWaylandTabletTool *t
|
|||||||
gboolean meta_wayland_tablet_tool_can_grab_surface (MetaWaylandTabletTool *tool,
|
gboolean meta_wayland_tablet_tool_can_grab_surface (MetaWaylandTabletTool *tool,
|
||||||
MetaWaylandSurface *surface,
|
MetaWaylandSurface *surface,
|
||||||
uint32_t serial);
|
uint32_t serial);
|
||||||
|
gboolean meta_wayland_tablet_tool_can_popup (MetaWaylandTabletTool *tool,
|
||||||
|
uint32_t serial);
|
||||||
|
|
||||||
#endif /* META_WAYLAND_TABLET_TOOL_H */
|
#endif /* META_WAYLAND_TABLET_TOOL_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user