clutter: Change clutter_do_event() name/signature

It is a bit backwards that events contain information about
the stage they are being handled by. It makes more sense to
specify in the ClutterEvent handling entrypoint the stage
that will handle the event.

As a first step, add this ClutterStage argument, even though
the information is still carried through the event in order to
keep satisfying calls to the getter function.

This entrypoint has been also renamed to clutter_stage_handle_event(),
so that its ownership/namespace is clearer.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3153>
This commit is contained in:
Carlos Garnacho 2023-08-01 02:02:15 +03:00
parent 72c433ef02
commit 2e3d55c948
4 changed files with 22 additions and 20 deletions

View File

@ -757,7 +757,8 @@ maybe_remove_device_for_event (ClutterStage *stage,
} }
/** /**
* clutter_do_event: * clutter_stage_handle_event:
* @stage: a #ClutterStage.
* @event: a #ClutterEvent. * @event: a #ClutterEvent.
* *
* Processes an event. * Processes an event.
@ -769,21 +770,20 @@ maybe_remove_device_for_event (ClutterStage *stage,
* toolkit, and it should never be called by applications. * toolkit, and it should never be called by applications.
*/ */
void void
clutter_do_event (ClutterEvent *event) clutter_stage_handle_event (ClutterStage *stage,
ClutterEvent *event)
{ {
ClutterContext *context = _clutter_context_get_default(); ClutterContext *context = _clutter_context_get_default();
ClutterActor *event_actor = NULL; ClutterActor *event_actor = NULL;
gboolean filtered; gboolean filtered;
/* we need the stage for the event */ g_return_if_fail (CLUTTER_IS_STAGE (stage));
if (event->any.stage == NULL) g_return_if_fail (event != NULL);
{
g_warning ("%s: Event does not have a stage: discarding.", G_STRFUNC); clutter_event_set_stage (event, stage);
return;
}
/* stages in destruction do not process events */ /* stages in destruction do not process events */
if (CLUTTER_ACTOR_IN_DESTRUCTION (event->any.stage)) if (CLUTTER_ACTOR_IN_DESTRUCTION (stage))
return; return;
switch (event->any.type) switch (event->any.type)
@ -793,7 +793,7 @@ clutter_do_event (ClutterEvent *event)
case CLUTTER_BUTTON_PRESS: case CLUTTER_BUTTON_PRESS:
case CLUTTER_TOUCH_BEGIN: case CLUTTER_TOUCH_BEGIN:
case CLUTTER_TOUCH_UPDATE: case CLUTTER_TOUCH_UPDATE:
update_device_for_event (event->any.stage, event, TRUE); update_device_for_event (stage, event, TRUE);
break; break;
default: default:
break; break;
@ -804,7 +804,7 @@ clutter_do_event (ClutterEvent *event)
event->any.type != CLUTTER_NOTHING && event->any.type != CLUTTER_NOTHING &&
event->any.type != CLUTTER_EVENT_LAST) event->any.type != CLUTTER_EVENT_LAST)
{ {
event_actor = clutter_stage_get_event_actor (event->any.stage, event); event_actor = clutter_stage_get_event_actor (stage, event);
} }
context->current_event = g_slist_prepend (context->current_event, event); context->current_event = g_slist_prepend (context->current_event, event);
@ -825,20 +825,20 @@ clutter_do_event (ClutterEvent *event)
ClutterInputDevice *device = clutter_event_get_device (event); ClutterInputDevice *device = clutter_event_get_device (event);
ClutterEventSequence *sequence = clutter_event_get_event_sequence (event); ClutterEventSequence *sequence = clutter_event_get_event_sequence (event);
clutter_stage_maybe_lost_implicit_grab (event->any.stage, device, sequence); clutter_stage_maybe_lost_implicit_grab (stage, device, sequence);
} }
} }
else else
{ {
_clutter_stage_queue_event (event->any.stage, event, TRUE); _clutter_stage_queue_event (stage, event, TRUE);
} }
if (event->type == CLUTTER_TOUCH_END || if (event->type == CLUTTER_TOUCH_END ||
event->type == CLUTTER_TOUCH_CANCEL || event->type == CLUTTER_TOUCH_CANCEL ||
event->type == CLUTTER_DEVICE_REMOVED) event->type == CLUTTER_DEVICE_REMOVED)
{ {
_clutter_stage_process_queued_events (event->any.stage); _clutter_stage_process_queued_events (stage);
maybe_remove_device_for_event (event->any.stage, event, TRUE); maybe_remove_device_for_event (stage, event, TRUE);
} }
} }
@ -891,7 +891,7 @@ _clutter_process_event_details (ClutterActor *stage,
* @event: a #ClutterEvent. * @event: a #ClutterEvent.
* *
* Does the actual work of processing an event that was queued earlier * Does the actual work of processing an event that was queued earlier
* out of clutter_do_event(). * out of clutter_stage_handle_event().
*/ */
void void
_clutter_process_event (ClutterEvent *event) _clutter_process_event (ClutterEvent *event)

View File

@ -90,7 +90,8 @@ typedef enum
#define CLUTTER_PRIORITY_REDRAW (G_PRIORITY_HIGH_IDLE + 50) #define CLUTTER_PRIORITY_REDRAW (G_PRIORITY_HIGH_IDLE + 50)
CLUTTER_EXPORT CLUTTER_EXPORT
void clutter_do_event (ClutterEvent *event); void clutter_stage_handle_event (ClutterStage *stage,
ClutterEvent *event);
/* Debug utility functions */ /* Debug utility functions */
CLUTTER_EXPORT CLUTTER_EXPORT

View File

@ -1090,6 +1090,7 @@ static gboolean
dispatch_clutter_event (MetaBackend *backend) dispatch_clutter_event (MetaBackend *backend)
{ {
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend); MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
ClutterStage *stage = CLUTTER_STAGE (meta_backend_get_stage (backend));
ClutterEvent *event; ClutterEvent *event;
event = clutter_event_get (); event = clutter_event_get ();
@ -1098,8 +1099,7 @@ dispatch_clutter_event (MetaBackend *backend)
g_warn_if_fail (!priv->in_init || g_warn_if_fail (!priv->in_init ||
event->type == CLUTTER_DEVICE_ADDED); event->type == CLUTTER_DEVICE_ADDED);
event->any.stage = CLUTTER_STAGE (meta_backend_get_stage (backend)); clutter_stage_handle_event (stage, event);
clutter_do_event (event);
meta_backend_update_from_event (backend, event); meta_backend_update_from_event (backend, event);
clutter_event_free (event); clutter_event_free (event);
return TRUE; return TRUE;

View File

@ -101,7 +101,8 @@ meta_x11_handle_event (MetaBackend *backend,
while (spin > 0 && (event = clutter_event_get ())) while (spin > 0 && (event = clutter_event_get ()))
{ {
/* forward the event into clutter for emission etc. */ /* forward the event into clutter for emission etc. */
clutter_do_event (event); clutter_stage_handle_event (CLUTTER_STAGE (meta_backend_get_stage (backend)),
event);
meta_backend_update_from_event (backend, event); meta_backend_update_from_event (backend, event);
clutter_event_free (event); clutter_event_free (event);
--spin; --spin;