From ac4face82acffb27c638ad9a78fd74adfc1fb56d Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 19 Nov 2021 16:45:17 +0100 Subject: [PATCH] clutter: Remove input device grabs Both device-global and input-sequence-local. These are no longer used, in favor of ClutterGrab. Part-of: --- .../clutter/clutter-input-device-private.h | 6 - clutter/clutter/clutter-input-device.c | 297 ------------------ clutter/clutter/clutter-input-device.h | 19 -- clutter/clutter/clutter-main.c | 48 +-- 4 files changed, 4 insertions(+), 366 deletions(-) diff --git a/clutter/clutter/clutter-input-device-private.h b/clutter/clutter/clutter-input-device-private.h index 91f6e8e1c..26dd2f11b 100644 --- a/clutter/clutter/clutter-input-device-private.h +++ b/clutter/clutter/clutter-input-device-private.h @@ -53,12 +53,6 @@ struct _ClutterInputDevice { GObject parent_instance; - /* the actor that has a grab in place for the device */ - ClutterActor *pointer_grab_actor; - ClutterActor *keyboard_grab_actor; - GHashTable *sequence_grab_actors; - GHashTable *inv_sequence_grab_actors; - /* Accessiblity */ ClutterVirtualInputDevice *accessibility_virtual_device; ClutterPtrA11yData *ptr_a11y_data; diff --git a/clutter/clutter/clutter-input-device.c b/clutter/clutter/clutter-input-device.c index 5a496f09c..a37886e46 100644 --- a/clutter/clutter/clutter-input-device.c +++ b/clutter/clutter/clutter-input-device.c @@ -518,303 +518,6 @@ clutter_input_device_get_device_mode (ClutterInputDevice *device) return priv->device_mode; } -static void -on_grab_actor_destroy (ClutterActor *actor, - ClutterInputDevice *device) -{ - ClutterInputDevicePrivate *priv = - clutter_input_device_get_instance_private (device); - - switch (priv->device_type) - { - case CLUTTER_POINTER_DEVICE: - case CLUTTER_TABLET_DEVICE: - device->pointer_grab_actor = NULL; - break; - - case CLUTTER_KEYBOARD_DEVICE: - device->keyboard_grab_actor = NULL; - break; - - default: - g_assert_not_reached (); - } -} - -/** - * clutter_input_device_grab: - * @device: a #ClutterInputDevice - * @actor: a #ClutterActor - * - * Acquires a grab on @actor for the given @device. - * - * Any event coming from @device will be delivered to @actor, bypassing - * the usual event delivery mechanism, until the grab is released by - * calling clutter_input_device_ungrab(). - * - * The grab is client-side: even if the windowing system used by the Clutter - * backend has the concept of "device grabs", Clutter will not use them. - * - * Only #ClutterInputDevice of types %CLUTTER_POINTER_DEVICE, - * %CLUTTER_TABLET_DEVICE and %CLUTTER_KEYBOARD_DEVICE can hold a grab. - * - * Since: 1.10 - */ -void -clutter_input_device_grab (ClutterInputDevice *device, - ClutterActor *actor) -{ - ClutterActor **grab_actor; - ClutterInputDevicePrivate *priv = - clutter_input_device_get_instance_private (device); - - g_return_if_fail (CLUTTER_IS_INPUT_DEVICE (device)); - g_return_if_fail (CLUTTER_IS_ACTOR (actor)); - - switch (priv->device_type) - { - case CLUTTER_POINTER_DEVICE: - case CLUTTER_TABLET_DEVICE: - grab_actor = &device->pointer_grab_actor; - break; - - case CLUTTER_KEYBOARD_DEVICE: - grab_actor = &device->keyboard_grab_actor; - break; - - default: - g_critical ("Only pointer and keyboard devices can grab an actor"); - return; - } - - if (*grab_actor != NULL) - { - g_signal_handlers_disconnect_by_func (*grab_actor, - G_CALLBACK (on_grab_actor_destroy), - device); - } - - *grab_actor = actor; - - g_signal_connect (*grab_actor, - "destroy", - G_CALLBACK (on_grab_actor_destroy), - device); -} - -/** - * clutter_input_device_ungrab: - * @device: a #ClutterInputDevice - * - * Releases the grab on the @device, if one is in place. - * - * Since: 1.10 - */ -void -clutter_input_device_ungrab (ClutterInputDevice *device) -{ - ClutterActor **grab_actor; - ClutterInputDevicePrivate *priv = - clutter_input_device_get_instance_private (device); - - g_return_if_fail (CLUTTER_IS_INPUT_DEVICE (device)); - - switch (priv->device_type) - { - case CLUTTER_POINTER_DEVICE: - case CLUTTER_TABLET_DEVICE: - grab_actor = &device->pointer_grab_actor; - break; - - case CLUTTER_KEYBOARD_DEVICE: - grab_actor = &device->keyboard_grab_actor; - break; - - default: - return; - } - - if (*grab_actor == NULL) - return; - - g_signal_handlers_disconnect_by_func (*grab_actor, - G_CALLBACK (on_grab_actor_destroy), - device); - - *grab_actor = NULL; -} - -/** - * clutter_input_device_get_grabbed_actor: - * @device: a #ClutterInputDevice - * - * Retrieves a pointer to the #ClutterActor currently grabbing all - * the events coming from @device. - * - * Return value: (transfer none): a #ClutterActor, or %NULL - * - * Since: 1.10 - */ -ClutterActor * -clutter_input_device_get_grabbed_actor (ClutterInputDevice *device) -{ - ClutterInputDevicePrivate *priv = - clutter_input_device_get_instance_private (device); - - g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), NULL); - - switch (priv->device_type) - { - case CLUTTER_POINTER_DEVICE: - case CLUTTER_TABLET_DEVICE: - return device->pointer_grab_actor; - - case CLUTTER_KEYBOARD_DEVICE: - return device->keyboard_grab_actor; - - default: - g_critical ("Only pointer and keyboard devices can grab an actor"); - } - - return NULL; -} - -static void -on_grab_sequence_actor_destroy (ClutterActor *actor, - ClutterInputDevice *device) -{ - ClutterEventSequence *sequence = - g_hash_table_lookup (device->inv_sequence_grab_actors, actor); - - if (sequence != NULL) - { - g_hash_table_remove (device->sequence_grab_actors, sequence); - g_hash_table_remove (device->inv_sequence_grab_actors, actor); - } -} - -/** - * clutter_input_device_sequence_grab: - * @device: a #ClutterInputDevice - * @sequence: a #ClutterEventSequence - * @actor: a #ClutterActor - * - * Acquires a grab on @actor for the given @device and the given touch - * @sequence. - * - * Any touch event coming from @device and from @sequence will be - * delivered to @actor, bypassing the usual event delivery mechanism, - * until the grab is released by calling - * clutter_input_device_sequence_ungrab(). - * - * The grab is client-side: even if the windowing system used by the Clutter - * backend has the concept of "device grabs", Clutter will not use them. - * - * Since: 1.12 - */ -void -clutter_input_device_sequence_grab (ClutterInputDevice *device, - ClutterEventSequence *sequence, - ClutterActor *actor) -{ - ClutterActor *grab_actor; - - g_return_if_fail (CLUTTER_IS_INPUT_DEVICE (device)); - g_return_if_fail (CLUTTER_IS_ACTOR (actor)); - - if (device->sequence_grab_actors == NULL) - { - grab_actor = NULL; - device->sequence_grab_actors = g_hash_table_new (NULL, NULL); - device->inv_sequence_grab_actors = g_hash_table_new (NULL, NULL); - } - else - { - grab_actor = g_hash_table_lookup (device->sequence_grab_actors, sequence); - } - - if (grab_actor != NULL) - { - g_signal_handlers_disconnect_by_func (grab_actor, - G_CALLBACK (on_grab_sequence_actor_destroy), - device); - g_hash_table_remove (device->sequence_grab_actors, sequence); - g_hash_table_remove (device->inv_sequence_grab_actors, grab_actor); - } - - g_hash_table_insert (device->sequence_grab_actors, sequence, actor); - g_hash_table_insert (device->inv_sequence_grab_actors, actor, sequence); - g_signal_connect (actor, - "destroy", - G_CALLBACK (on_grab_sequence_actor_destroy), - device); -} - -/** - * clutter_input_device_sequence_ungrab: - * @device: a #ClutterInputDevice - * @sequence: a #ClutterEventSequence - * - * Releases the grab on the @device for the given @sequence, if one is - * in place. - * - * Since: 1.12 - */ -void -clutter_input_device_sequence_ungrab (ClutterInputDevice *device, - ClutterEventSequence *sequence) -{ - ClutterActor *grab_actor; - - g_return_if_fail (CLUTTER_IS_INPUT_DEVICE (device)); - - if (device->sequence_grab_actors == NULL) - return; - - grab_actor = g_hash_table_lookup (device->sequence_grab_actors, sequence); - - if (grab_actor == NULL) - return; - - g_signal_handlers_disconnect_by_func (grab_actor, - G_CALLBACK (on_grab_sequence_actor_destroy), - device); - g_hash_table_remove (device->sequence_grab_actors, sequence); - g_hash_table_remove (device->inv_sequence_grab_actors, grab_actor); - - if (g_hash_table_size (device->sequence_grab_actors) == 0) - { - g_hash_table_destroy (device->sequence_grab_actors); - device->sequence_grab_actors = NULL; - g_hash_table_destroy (device->inv_sequence_grab_actors); - device->inv_sequence_grab_actors = NULL; - } -} - -/** - * clutter_input_device_sequence_get_grabbed_actor: - * @device: a #ClutterInputDevice - * @sequence: a #ClutterEventSequence - * - * Retrieves a pointer to the #ClutterActor currently grabbing the - * touch events coming from @device given the @sequence. - * - * Return value: (transfer none): a #ClutterActor, or %NULL - * - * Since: 1.12 - */ -ClutterActor * -clutter_input_device_sequence_get_grabbed_actor (ClutterInputDevice *device, - ClutterEventSequence *sequence) -{ - g_return_val_if_fail (CLUTTER_IS_INPUT_DEVICE (device), NULL); - - if (device->sequence_grab_actors == NULL) - return NULL; - - return g_hash_table_lookup (device->sequence_grab_actors, sequence); -} - /** * clutter_input_device_get_vendor_id: * @device: a physical #ClutterInputDevice diff --git a/clutter/clutter/clutter-input-device.h b/clutter/clutter/clutter-input-device.h index 0a6a1c0ed..1a82ac9af 100644 --- a/clutter/clutter/clutter-input-device.h +++ b/clutter/clutter/clutter-input-device.h @@ -80,25 +80,6 @@ ClutterInputMode clutter_input_device_get_device_mode (ClutterInputDev CLUTTER_EXPORT gboolean clutter_input_device_get_has_cursor (ClutterInputDevice *device); -CLUTTER_EXPORT -void clutter_input_device_grab (ClutterInputDevice *device, - ClutterActor *actor); -CLUTTER_EXPORT -void clutter_input_device_ungrab (ClutterInputDevice *device); -CLUTTER_EXPORT -ClutterActor * clutter_input_device_get_grabbed_actor (ClutterInputDevice *device); - -CLUTTER_EXPORT -void clutter_input_device_sequence_grab (ClutterInputDevice *device, - ClutterEventSequence *sequence, - ClutterActor *actor); -CLUTTER_EXPORT -void clutter_input_device_sequence_ungrab (ClutterInputDevice *device, - ClutterEventSequence *sequence); -CLUTTER_EXPORT -ClutterActor * clutter_input_device_sequence_get_grabbed_actor (ClutterInputDevice *device, - ClutterEventSequence *sequence); - CLUTTER_EXPORT const gchar * clutter_input_device_get_vendor_id (ClutterInputDevice *device); CLUTTER_EXPORT diff --git a/clutter/clutter/clutter-main.c b/clutter/clutter/clutter-main.c index 4188b94c6..d6540a7e0 100644 --- a/clutter/clutter/clutter-main.c +++ b/clutter/clutter/clutter-main.c @@ -697,58 +697,21 @@ static inline void emit_pointer_event (ClutterEvent *event, ClutterInputDevice *device) { - if (device != NULL && device->pointer_grab_actor != NULL) - clutter_actor_event (device->pointer_grab_actor, event, FALSE); - else - emit_event_chain (event); + emit_event_chain (event); } static inline void emit_crossing_event (ClutterEvent *event, ClutterInputDevice *device) { - ClutterEventSequence *sequence = clutter_event_get_event_sequence (event); - ClutterActor *grab_actor = NULL; - - if (sequence) - { - if (device->sequence_grab_actors != NULL) - grab_actor = g_hash_table_lookup (device->sequence_grab_actors, sequence); - } - else - { - if (device != NULL && device->pointer_grab_actor != NULL) - grab_actor = device->pointer_grab_actor; - } - - if (grab_actor != NULL) - clutter_actor_event (grab_actor, event, FALSE); - else - emit_event_chain (event); + emit_event_chain (event); } static inline void emit_touch_event (ClutterEvent *event, ClutterInputDevice *device) { - ClutterActor *grab_actor = NULL; - - if (device->sequence_grab_actors != NULL) - { - grab_actor = g_hash_table_lookup (device->sequence_grab_actors, - event->touch.sequence); - } - - if (grab_actor != NULL) - { - /* per-device sequence grab */ - clutter_actor_event (grab_actor, event, FALSE); - } - else - { - /* no grab, time to capture and bubble */ - emit_event_chain (event); - } + emit_event_chain (event); } static inline void @@ -757,10 +720,7 @@ process_key_event (ClutterEvent *event, { cally_snoop_key_event ((ClutterKeyEvent *) event); - if (device != NULL && device->keyboard_grab_actor != NULL) - clutter_actor_event (device->keyboard_grab_actor, event, FALSE); - else - emit_event_chain (event); + emit_event_chain (event); } static ClutterActor *