backends/native: Implement ClutterSeat::query_state() vmethod
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1403>
This commit is contained in:
parent
384b97792d
commit
9d195b3fa4
@ -2833,6 +2833,54 @@ meta_seat_native_warp_pointer (ClutterSeat *seat,
|
|||||||
meta_cursor_tracker_update_position (cursor_tracker, x, y);
|
meta_cursor_tracker_update_position (cursor_tracker, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
meta_seat_native_query_state (ClutterSeat *seat,
|
||||||
|
ClutterInputDevice *device,
|
||||||
|
ClutterEventSequence *sequence,
|
||||||
|
graphene_point_t *coords,
|
||||||
|
ClutterModifierType *modifiers)
|
||||||
|
{
|
||||||
|
MetaSeatNative *seat_native = META_SEAT_NATIVE (seat);
|
||||||
|
|
||||||
|
if (sequence)
|
||||||
|
{
|
||||||
|
MetaTouchState *touch_state;
|
||||||
|
int slot;
|
||||||
|
|
||||||
|
slot = meta_event_native_sequence_get_slot (sequence);
|
||||||
|
touch_state = meta_seat_native_lookup_touch_state (seat_native, slot);
|
||||||
|
if (!touch_state)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (coords)
|
||||||
|
{
|
||||||
|
coords->x = touch_state->coords.x;
|
||||||
|
coords->y = touch_state->coords.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modifiers)
|
||||||
|
*modifiers = meta_xkb_translate_modifiers (seat_native->xkb, 0);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (coords)
|
||||||
|
{
|
||||||
|
coords->x = device->current_x;
|
||||||
|
coords->y = device->current_y;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modifiers)
|
||||||
|
{
|
||||||
|
*modifiers = meta_xkb_translate_modifiers (seat_native->xkb,
|
||||||
|
seat_native->button_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_seat_native_class_init (MetaSeatNativeClass *klass)
|
meta_seat_native_class_init (MetaSeatNativeClass *klass)
|
||||||
{
|
{
|
||||||
@ -2858,6 +2906,7 @@ meta_seat_native_class_init (MetaSeatNativeClass *klass)
|
|||||||
seat_class->compress_motion = meta_seat_native_compress_motion;
|
seat_class->compress_motion = meta_seat_native_compress_motion;
|
||||||
seat_class->warp_pointer = meta_seat_native_warp_pointer;
|
seat_class->warp_pointer = meta_seat_native_warp_pointer;
|
||||||
seat_class->handle_device_event = meta_seat_native_handle_device_event;
|
seat_class->handle_device_event = meta_seat_native_handle_device_event;
|
||||||
|
seat_class->query_state = meta_seat_native_query_state;
|
||||||
|
|
||||||
props[PROP_SEAT_ID] =
|
props[PROP_SEAT_ID] =
|
||||||
g_param_spec_string ("seat-id",
|
g_param_spec_string ("seat-id",
|
||||||
|
@ -106,3 +106,15 @@ meta_xkb_translate_state (ClutterEvent *event,
|
|||||||
xkb_state_serialize_mods (state, XKB_STATE_MODS_LOCKED),
|
xkb_state_serialize_mods (state, XKB_STATE_MODS_LOCKED),
|
||||||
xkb_state_serialize_mods (state, XKB_STATE_MODS_EFFECTIVE) | button_state);
|
xkb_state_serialize_mods (state, XKB_STATE_MODS_EFFECTIVE) | button_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ClutterModifierType
|
||||||
|
meta_xkb_translate_modifiers (struct xkb_state *state,
|
||||||
|
ClutterModifierType button_state)
|
||||||
|
{
|
||||||
|
ClutterModifierType modifiers;
|
||||||
|
|
||||||
|
modifiers = xkb_state_serialize_mods (state, XKB_STATE_MODS_EFFECTIVE);
|
||||||
|
modifiers |= button_state;
|
||||||
|
|
||||||
|
return modifiers;
|
||||||
|
}
|
||||||
|
@ -35,5 +35,7 @@ ClutterEvent * meta_key_event_new_from_evdev (ClutterInputDevice *device,
|
|||||||
void meta_xkb_translate_state (ClutterEvent *event,
|
void meta_xkb_translate_state (ClutterEvent *event,
|
||||||
struct xkb_state *xkb_state,
|
struct xkb_state *xkb_state,
|
||||||
uint32_t button_state);
|
uint32_t button_state);
|
||||||
|
ClutterModifierType meta_xkb_translate_modifiers (struct xkb_state *state,
|
||||||
|
ClutterModifierType button_state);
|
||||||
|
|
||||||
#endif /* META_XKB_UTILS_H */
|
#endif /* META_XKB_UTILS_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user