mirror of
https://github.com/brl/mutter.git
synced 2025-04-16 15:19:39 +00:00
clutter: Peek target actor directly when managing events
The event source will be removed, move the clutter-main.c internals from it. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2311>
This commit is contained in:
parent
a7f85c8fc4
commit
6182ceeef9
@ -675,15 +675,10 @@ _clutter_boolean_continue_accumulator (GSignalInvocationHint *ihint,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
emit_event_chain (ClutterEvent *event)
|
emit_event_chain (ClutterActor *target,
|
||||||
|
ClutterEvent *event)
|
||||||
{
|
{
|
||||||
if (event->any.source == NULL)
|
_clutter_actor_handle_event (target,
|
||||||
{
|
|
||||||
CLUTTER_NOTE (EVENT, "No source set, discarding event");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_clutter_actor_handle_event (event->any.source,
|
|
||||||
clutter_stage_get_grab_actor (event->any.stage),
|
clutter_stage_get_grab_actor (event->any.stage),
|
||||||
event);
|
event);
|
||||||
}
|
}
|
||||||
@ -694,13 +689,14 @@ emit_event_chain (ClutterEvent *event)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
emit_event (ClutterEvent *event)
|
emit_event (ClutterActor *target,
|
||||||
|
ClutterEvent *event)
|
||||||
{
|
{
|
||||||
if (event->type == CLUTTER_KEY_PRESS ||
|
if (event->type == CLUTTER_KEY_PRESS ||
|
||||||
event->type == CLUTTER_KEY_RELEASE)
|
event->type == CLUTTER_KEY_RELEASE)
|
||||||
cally_snoop_key_event ((ClutterKeyEvent *) event);
|
cally_snoop_key_event ((ClutterKeyEvent *) event);
|
||||||
|
|
||||||
emit_event_chain (event);
|
emit_event_chain (target, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ClutterActor *
|
static ClutterActor *
|
||||||
@ -856,8 +852,10 @@ _clutter_process_event_details (ClutterActor *stage,
|
|||||||
ClutterEvent *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);
|
||||||
ClutterMainContext *clutter_context;
|
ClutterMainContext *clutter_context;
|
||||||
ClutterBackend *backend;
|
ClutterBackend *backend;
|
||||||
|
ClutterActor *target;
|
||||||
|
|
||||||
clutter_context = _clutter_context_get_default ();
|
clutter_context = _clutter_context_get_default ();
|
||||||
backend = clutter_context->backend;
|
backend = clutter_context->backend;
|
||||||
@ -865,7 +863,6 @@ _clutter_process_event_details (ClutterActor *stage,
|
|||||||
switch (event->type)
|
switch (event->type)
|
||||||
{
|
{
|
||||||
case CLUTTER_NOTHING:
|
case CLUTTER_NOTHING:
|
||||||
event->any.source = stage;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CLUTTER_KEY_PRESS:
|
case CLUTTER_KEY_PRESS:
|
||||||
@ -880,28 +877,27 @@ _clutter_process_event_details (ClutterActor *stage,
|
|||||||
{
|
{
|
||||||
ClutterActor *actor = NULL;
|
ClutterActor *actor = NULL;
|
||||||
|
|
||||||
/* check that we're not a synthetic event with source set */
|
|
||||||
if (event->any.source == NULL)
|
|
||||||
{
|
|
||||||
actor = clutter_stage_get_key_focus (CLUTTER_STAGE (stage));
|
actor = clutter_stage_get_key_focus (CLUTTER_STAGE (stage));
|
||||||
event->any.source = actor;
|
|
||||||
if (G_UNLIKELY (actor == NULL))
|
if (G_UNLIKELY (actor == NULL))
|
||||||
{
|
{
|
||||||
g_warning ("No key focus set, discarding");
|
g_warning ("No key focus set, discarding");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
emit_event (event);
|
emit_event (actor, event);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CLUTTER_ENTER:
|
case CLUTTER_ENTER:
|
||||||
emit_event (event);
|
target = clutter_stage_get_device_actor (CLUTTER_STAGE (stage),
|
||||||
|
device, sequence);
|
||||||
|
emit_event (target, event);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CLUTTER_LEAVE:
|
case CLUTTER_LEAVE:
|
||||||
emit_event (event);
|
target = clutter_stage_get_device_actor (CLUTTER_STAGE (stage),
|
||||||
|
device, sequence);
|
||||||
|
emit_event (target, event);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CLUTTER_MOTION:
|
case CLUTTER_MOTION:
|
||||||
@ -937,14 +933,15 @@ _clutter_process_event_details (ClutterActor *stage,
|
|||||||
{
|
{
|
||||||
gfloat x, y;
|
gfloat x, y;
|
||||||
|
|
||||||
|
target = clutter_stage_get_device_actor (CLUTTER_STAGE (stage),
|
||||||
|
device, sequence);
|
||||||
clutter_event_get_coords (event, &x, &y);
|
clutter_event_get_coords (event, &x, &y);
|
||||||
|
|
||||||
CLUTTER_NOTE (EVENT,
|
CLUTTER_NOTE (EVENT,
|
||||||
"Reactive event received at %.2f, %.2f - actor: %p",
|
"Reactive event received at %.2f, %.2f - actor: %p",
|
||||||
x, y,
|
x, y, target);
|
||||||
event->any.source);
|
|
||||||
|
|
||||||
emit_event (event);
|
emit_event (target, event);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -955,14 +952,15 @@ _clutter_process_event_details (ClutterActor *stage,
|
|||||||
{
|
{
|
||||||
gfloat x, y;
|
gfloat x, y;
|
||||||
|
|
||||||
|
target = clutter_stage_get_device_actor (CLUTTER_STAGE (stage),
|
||||||
|
device, sequence);
|
||||||
clutter_event_get_coords (event, &x, &y);
|
clutter_event_get_coords (event, &x, &y);
|
||||||
|
|
||||||
CLUTTER_NOTE (EVENT,
|
CLUTTER_NOTE (EVENT,
|
||||||
"Reactive event received at %.2f, %.2f - actor: %p",
|
"Reactive event received at %.2f, %.2f - actor: %p",
|
||||||
x, y,
|
x, y, target);
|
||||||
event->any.source);
|
|
||||||
|
|
||||||
emit_event (event);
|
emit_event (target, event);
|
||||||
|
|
||||||
if (event->type == CLUTTER_TOUCH_END ||
|
if (event->type == CLUTTER_TOUCH_END ||
|
||||||
event->type == CLUTTER_TOUCH_CANCEL)
|
event->type == CLUTTER_TOUCH_CANCEL)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user