clutter: Use ClutterEvent getter methods

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3153>
This commit is contained in:
Carlos Garnacho 2023-08-04 12:28:04 +02:00
parent 1708becaea
commit 440c249031
7 changed files with 112 additions and 67 deletions

View File

@ -11667,13 +11667,16 @@ clutter_actor_event (ClutterActor *actor,
gboolean retval = FALSE; gboolean retval = FALSE;
gint signal_num = -1; gint signal_num = -1;
GQuark detail = 0; GQuark detail = 0;
ClutterEventType event_type;
g_return_val_if_fail (CLUTTER_IS_ACTOR (actor), FALSE); g_return_val_if_fail (CLUTTER_IS_ACTOR (actor), FALSE);
g_return_val_if_fail (event != NULL, FALSE); g_return_val_if_fail (event != NULL, FALSE);
g_object_ref (actor); g_object_ref (actor);
switch (event->type) event_type = clutter_event_type (event);
switch (event_type)
{ {
case CLUTTER_NOTHING: case CLUTTER_NOTHING:
break; break;
@ -11758,7 +11761,7 @@ clutter_actor_event (ClutterActor *actor,
g_object_unref (actor); g_object_unref (actor);
if (event->type == CLUTTER_ENTER || event->type == CLUTTER_LEAVE) if (event_type == CLUTTER_ENTER || event_type == CLUTTER_LEAVE)
{ {
g_warn_if_fail (retval == CLUTTER_EVENT_PROPAGATE); g_warn_if_fail (retval == CLUTTER_EVENT_PROPAGATE);
return CLUTTER_EVENT_PROPAGATE; return CLUTTER_EVENT_PROPAGATE;

View File

@ -179,16 +179,19 @@ clutter_input_focus_filter_event (ClutterInputFocus *focus,
const ClutterEvent *event) const ClutterEvent *event)
{ {
ClutterInputFocusPrivate *priv; ClutterInputFocusPrivate *priv;
ClutterEventType event_type;
g_return_val_if_fail (CLUTTER_IS_INPUT_FOCUS (focus), FALSE); g_return_val_if_fail (CLUTTER_IS_INPUT_FOCUS (focus), FALSE);
g_return_val_if_fail (clutter_input_focus_is_focused (focus), FALSE); g_return_val_if_fail (clutter_input_focus_is_focused (focus), FALSE);
priv = clutter_input_focus_get_instance_private (focus); priv = clutter_input_focus_get_instance_private (focus);
if (event->type == CLUTTER_KEY_PRESS || event_type = clutter_event_type (event);
event->type == CLUTTER_KEY_RELEASE)
if (event_type == CLUTTER_KEY_PRESS ||
event_type == CLUTTER_KEY_RELEASE)
{ {
return clutter_input_method_filter_key_event (priv->im, &event->key); return clutter_input_method_filter_key_event (priv->im, (ClutterKeyEvent *) event);
} }
return FALSE; return FALSE;
@ -199,31 +202,42 @@ clutter_input_focus_process_event (ClutterInputFocus *focus,
const ClutterEvent *event) const ClutterEvent *event)
{ {
ClutterInputFocusPrivate *priv; ClutterInputFocusPrivate *priv;
ClutterEventType event_type;
g_return_val_if_fail (CLUTTER_IS_INPUT_FOCUS (focus), FALSE); g_return_val_if_fail (CLUTTER_IS_INPUT_FOCUS (focus), FALSE);
g_return_val_if_fail (clutter_input_focus_is_focused (focus), FALSE); g_return_val_if_fail (clutter_input_focus_is_focused (focus), FALSE);
priv = clutter_input_focus_get_instance_private (focus); priv = clutter_input_focus_get_instance_private (focus);
if (event->type == CLUTTER_IM_COMMIT) event_type = clutter_event_type (event);
if (event_type == CLUTTER_IM_COMMIT)
{ {
clutter_input_focus_commit (focus, event->im.text); clutter_input_focus_commit (focus,
clutter_event_get_im_text (event));
return TRUE; return TRUE;
} }
else if (event->type == CLUTTER_IM_DELETE) else if (event_type == CLUTTER_IM_DELETE)
{ {
clutter_input_focus_delete_surrounding (focus, event->im.offset, int32_t offset;
event->im.len); uint32_t len;
clutter_event_get_im_location (event, &offset, NULL);
len = clutter_event_get_im_delete_length (event);
clutter_input_focus_delete_surrounding (focus, offset, len);
return TRUE; return TRUE;
} }
else if (event->type == CLUTTER_IM_PREEDIT) else if (event_type == CLUTTER_IM_PREEDIT)
{ {
int32_t offset, anchor;
g_clear_pointer (&priv->preedit, g_free); g_clear_pointer (&priv->preedit, g_free);
priv->preedit = g_strdup (event->im.text); priv->preedit = g_strdup (clutter_event_get_im_text (event));
priv->mode = event->im.mode; priv->mode = clutter_event_get_im_preedit_reset_mode (event);
clutter_input_focus_set_preedit_text (focus, event->im.text, clutter_event_get_im_location (event, &offset, &anchor);
event->im.offset, clutter_input_focus_set_preedit_text (focus,
event->im.anchor); priv->preedit,
offset, anchor);
return TRUE; return TRUE;
} }

View File

@ -736,13 +736,14 @@ clutter_input_pointer_a11y_update (ClutterInputDevice *device,
ClutterMainContext *clutter_context; ClutterMainContext *clutter_context;
ClutterBackend *backend; ClutterBackend *backend;
ClutterEventType event_type;
g_return_if_fail (clutter_event_get_device (event) == device); g_return_if_fail (clutter_event_get_device (event) == device);
if (!_clutter_is_input_pointer_a11y_enabled (device)) if (!_clutter_is_input_pointer_a11y_enabled (device))
return; return;
if ((event->any.flags & CLUTTER_EVENT_FLAG_SYNTHETIC) != 0) if ((clutter_event_get_flags (event) & CLUTTER_EVENT_FLAG_SYNTHETIC) != 0)
return; return;
clutter_context = _clutter_context_get_default (); clutter_context = _clutter_context_get_default ();
@ -751,18 +752,20 @@ clutter_input_pointer_a11y_update (ClutterInputDevice *device,
if (!clutter_backend_is_display_server (backend)) if (!clutter_backend_is_display_server (backend))
return; return;
if (event->type == CLUTTER_MOTION) event_type = clutter_event_type (event);
if (event_type == CLUTTER_MOTION)
{ {
float x, y; float x, y;
clutter_event_get_coords (event, &x, &y); clutter_event_get_coords (event, &x, &y);
_clutter_input_pointer_a11y_on_motion_event (device, x, y); _clutter_input_pointer_a11y_on_motion_event (device, x, y);
} }
else if (event->type == CLUTTER_BUTTON_PRESS || else if (event_type == CLUTTER_BUTTON_PRESS ||
event->type == CLUTTER_BUTTON_RELEASE) event_type == CLUTTER_BUTTON_RELEASE)
{ {
_clutter_input_pointer_a11y_on_button_event (device, _clutter_input_pointer_a11y_on_button_event (device,
event->button.button, clutter_event_get_button (event),
event->type == CLUTTER_BUTTON_PRESS); event_type == CLUTTER_BUTTON_PRESS);
} }
} }

View File

@ -685,8 +685,12 @@ static inline void
emit_event (ClutterStage *stage, emit_event (ClutterStage *stage,
ClutterEvent *event) ClutterEvent *event)
{ {
if (event->type == CLUTTER_KEY_PRESS || ClutterEventType event_type;
event->type == CLUTTER_KEY_RELEASE)
event_type = clutter_event_type (event);
if (event_type == CLUTTER_KEY_PRESS ||
event_type == CLUTTER_KEY_RELEASE)
cally_snoop_key_event (stage, (ClutterKeyEvent *) event); cally_snoop_key_event (stage, (ClutterKeyEvent *) event);
clutter_stage_emit_event (stage, event); clutter_stage_emit_event (stage, event);
@ -729,7 +733,7 @@ maybe_remove_device_for_event (ClutterStage *stage,
graphene_point_t point; graphene_point_t point;
uint32_t time; uint32_t time;
if (event->type == CLUTTER_DEVICE_REMOVED) if (clutter_event_type (event) == CLUTTER_DEVICE_REMOVED)
{ {
ClutterInputDeviceType device_type = ClutterInputDeviceType device_type =
clutter_input_device_get_device_type (device); clutter_input_device_get_device_type (device);
@ -776,6 +780,7 @@ clutter_stage_handle_event (ClutterStage *stage,
{ {
ClutterContext *context = _clutter_context_get_default(); ClutterContext *context = _clutter_context_get_default();
ClutterActor *event_actor = NULL; ClutterActor *event_actor = NULL;
ClutterEventType event_type;
gboolean filtered; gboolean filtered;
g_return_if_fail (CLUTTER_IS_STAGE (stage)); g_return_if_fail (CLUTTER_IS_STAGE (stage));
@ -785,7 +790,9 @@ clutter_stage_handle_event (ClutterStage *stage,
if (CLUTTER_ACTOR_IN_DESTRUCTION (stage)) if (CLUTTER_ACTOR_IN_DESTRUCTION (stage))
return; return;
switch (event->any.type) event_type = clutter_event_type (event);
switch (event_type)
{ {
case CLUTTER_ENTER: case CLUTTER_ENTER:
case CLUTTER_MOTION: case CLUTTER_MOTION:
@ -798,10 +805,10 @@ clutter_stage_handle_event (ClutterStage *stage,
break; break;
} }
if (event->any.type != CLUTTER_DEVICE_ADDED && if (event_type != CLUTTER_DEVICE_ADDED &&
event->any.type != CLUTTER_DEVICE_REMOVED && event_type != CLUTTER_DEVICE_REMOVED &&
event->any.type != CLUTTER_NOTHING && event_type != CLUTTER_NOTHING &&
event->any.type != CLUTTER_EVENT_LAST) event_type != CLUTTER_EVENT_LAST)
{ {
event_actor = clutter_stage_get_event_actor (stage, event); event_actor = clutter_stage_get_event_actor (stage, event);
} }
@ -815,11 +822,11 @@ clutter_stage_handle_event (ClutterStage *stage,
if (filtered) if (filtered)
{ {
if (event->type == CLUTTER_MOTION || if (event_type == CLUTTER_MOTION ||
event->type == CLUTTER_BUTTON_RELEASE || event_type == CLUTTER_BUTTON_RELEASE ||
event->type == CLUTTER_TOUCH_UPDATE || event_type == CLUTTER_TOUCH_UPDATE ||
event->type == CLUTTER_TOUCH_END || event_type == CLUTTER_TOUCH_END ||
event->type == CLUTTER_TOUCH_CANCEL) event_type == CLUTTER_TOUCH_CANCEL)
{ {
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);
@ -832,9 +839,9 @@ clutter_stage_handle_event (ClutterStage *stage,
_clutter_stage_queue_event (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 (stage); _clutter_stage_process_queued_events (stage);
maybe_remove_device_for_event (stage, event, TRUE); maybe_remove_device_for_event (stage, event, TRUE);
@ -846,7 +853,7 @@ _clutter_process_event_details (ClutterActor *stage,
ClutterMainContext *context, ClutterMainContext *context,
ClutterEvent *event) ClutterEvent *event)
{ {
switch (event->type) switch (clutter_event_type (event))
{ {
case CLUTTER_NOTHING: case CLUTTER_NOTHING:
break; break;

View File

@ -641,7 +641,7 @@ clutter_seat_handle_event_post (ClutterSeat *seat,
device = clutter_event_get_source_device (event); device = clutter_event_get_source_device (event);
g_assert_true (CLUTTER_IS_INPUT_DEVICE (device)); g_assert_true (CLUTTER_IS_INPUT_DEVICE (device));
switch (event->type) switch (clutter_event_type (event))
{ {
case CLUTTER_DEVICE_ADDED: case CLUTTER_DEVICE_ADDED:
g_signal_emit (seat, signals[DEVICE_ADDED], 0, device); g_signal_emit (seat, signals[DEVICE_ADDED], 0, device);

View File

@ -755,17 +755,21 @@ _clutter_stage_process_queued_events (ClutterStage *stage)
/* Skip consecutive motion events coming from the same device. */ /* Skip consecutive motion events coming from the same device. */
if (next_event != NULL) if (next_event != NULL)
{ {
if (event->type == CLUTTER_MOTION && float x, y;
(next_event->type == CLUTTER_MOTION ||
next_event->type == CLUTTER_LEAVE) && clutter_event_get_coords (event, &x, &y);
if (clutter_event_type (event) == CLUTTER_MOTION &&
(clutter_event_type (next_event) == CLUTTER_MOTION ||
clutter_event_type (next_event) == CLUTTER_LEAVE) &&
(!check_device || (device == next_device))) (!check_device || (device == next_device)))
{ {
CLUTTER_NOTE (EVENT, CLUTTER_NOTE (EVENT,
"Omitting motion event at %d, %d", "Omitting motion event at %d, %d",
(int) event->motion.x, (int) x,
(int) event->motion.y); (int) y);
if (next_event->type == CLUTTER_MOTION) if (clutter_event_type (next_event) == CLUTTER_MOTION)
{ {
ClutterEvent *new_event; ClutterEvent *new_event;
@ -781,15 +785,16 @@ _clutter_stage_process_queued_events (ClutterStage *stage)
goto next_event; goto next_event;
} }
else if (event->type == CLUTTER_TOUCH_UPDATE && else if (clutter_event_type (event) == CLUTTER_TOUCH_UPDATE &&
next_event->type == CLUTTER_TOUCH_UPDATE && clutter_event_type (next_event) == CLUTTER_TOUCH_UPDATE &&
event->touch.sequence == next_event->touch.sequence && clutter_event_get_event_sequence (event) ==
clutter_event_get_event_sequence (next_event) &&
(!check_device || (device == next_device))) (!check_device || (device == next_device)))
{ {
CLUTTER_NOTE (EVENT, CLUTTER_NOTE (EVENT,
"Omitting touch update event at %d, %d", "Omitting touch update event at %d, %d",
(int) event->touch.x, (int) x,
(int) event->touch.y); (int) y);
goto next_event; goto next_event;
} }
} }
@ -4113,7 +4118,7 @@ clutter_stage_get_event_actor (ClutterStage *stage,
g_return_val_if_fail (CLUTTER_IS_STAGE (stage), NULL); g_return_val_if_fail (CLUTTER_IS_STAGE (stage), NULL);
g_return_val_if_fail (event != NULL, NULL); g_return_val_if_fail (event != NULL, NULL);
switch (event->type) switch (clutter_event_type (event))
{ {
case CLUTTER_KEY_PRESS: case CLUTTER_KEY_PRESS:
case CLUTTER_KEY_RELEASE: case CLUTTER_KEY_RELEASE:
@ -4290,13 +4295,16 @@ clutter_stage_emit_event (ClutterStage *self,
PointerDeviceEntry *entry; PointerDeviceEntry *entry;
ClutterActor *target_actor = NULL, *seat_grab_actor = NULL; ClutterActor *target_actor = NULL, *seat_grab_actor = NULL;
gboolean is_sequence_begin, is_sequence_end; gboolean is_sequence_begin, is_sequence_end;
ClutterEventType event_type;
if (sequence != NULL) if (sequence != NULL)
entry = g_hash_table_lookup (priv->touch_sequences, sequence); entry = g_hash_table_lookup (priv->touch_sequences, sequence);
else else
entry = g_hash_table_lookup (priv->pointer_devices, device); entry = g_hash_table_lookup (priv->pointer_devices, device);
switch (event->type) event_type = clutter_event_type (event);
switch (event_type)
{ {
case CLUTTER_NOTHING: case CLUTTER_NOTHING:
case CLUTTER_DEVICE_REMOVED: case CLUTTER_DEVICE_REMOVED:
@ -4358,10 +4366,10 @@ clutter_stage_emit_event (ClutterStage *self,
seat_grab_actor = priv->topmost_grab ? priv->topmost_grab->actor : CLUTTER_ACTOR (self); seat_grab_actor = priv->topmost_grab ? priv->topmost_grab->actor : CLUTTER_ACTOR (self);
is_sequence_begin = is_sequence_begin =
event->type == CLUTTER_BUTTON_PRESS || event->type == CLUTTER_TOUCH_BEGIN; event_type == CLUTTER_BUTTON_PRESS || event_type == CLUTTER_TOUCH_BEGIN;
is_sequence_end = is_sequence_end =
event->type == CLUTTER_BUTTON_RELEASE || event->type == CLUTTER_TOUCH_END || event_type == CLUTTER_BUTTON_RELEASE || event_type == CLUTTER_TOUCH_END ||
event->type == CLUTTER_TOUCH_CANCEL; event_type == CLUTTER_TOUCH_CANCEL;
if (is_sequence_begin && setup_implicit_grab (entry)) if (is_sequence_begin && setup_implicit_grab (entry))
{ {
@ -4393,7 +4401,7 @@ clutter_stage_emit_event (ClutterStage *self,
if (is_sequence_end && release_implicit_grab (entry)) if (is_sequence_end && release_implicit_grab (entry))
{ {
/* Sync crossings after the implicit grab for mice */ /* Sync crossings after the implicit grab for mice */
if (event->type == CLUTTER_BUTTON_RELEASE) if (event_type == CLUTTER_BUTTON_RELEASE)
sync_crossings_on_implicit_grab_end (self, entry); sync_crossings_on_implicit_grab_end (self, entry);
cleanup_implicit_grab (entry); cleanup_implicit_grab (entry);

View File

@ -2389,7 +2389,7 @@ static gboolean
clutter_text_touch_event (ClutterActor *actor, clutter_text_touch_event (ClutterActor *actor,
ClutterTouchEvent *event) ClutterTouchEvent *event)
{ {
switch (event->type) switch (clutter_event_type ((ClutterEvent *) event))
{ {
case CLUTTER_TOUCH_BEGIN: case CLUTTER_TOUCH_BEGIN:
return clutter_text_press (actor, (ClutterEvent *) event); return clutter_text_press (actor, (ClutterEvent *) event);
@ -2430,6 +2430,9 @@ clutter_text_key_press (ClutterActor *actor,
ClutterText *self = CLUTTER_TEXT (actor); ClutterText *self = CLUTTER_TEXT (actor);
ClutterTextPrivate *priv = self->priv; ClutterTextPrivate *priv = self->priv;
ClutterBindingPool *pool; ClutterBindingPool *pool;
ClutterEventFlags flags;
ClutterModifierType modifiers;
uint32_t keyval;
gboolean res; gboolean res;
if (!priv->editable) if (!priv->editable)
@ -2442,7 +2445,11 @@ clutter_text_key_press (ClutterActor *actor,
pool = clutter_binding_pool_find (g_type_name (CLUTTER_TYPE_TEXT)); pool = clutter_binding_pool_find (g_type_name (CLUTTER_TYPE_TEXT));
g_assert (pool != NULL); g_assert (pool != NULL);
if (!(event->flags & CLUTTER_EVENT_FLAG_INPUT_METHOD) && flags = clutter_event_get_flags ((ClutterEvent *) event);
keyval = clutter_event_get_key_symbol ((ClutterEvent *) event);
modifiers = clutter_event_get_state ((ClutterEvent *) event);
if (!(flags & CLUTTER_EVENT_FLAG_INPUT_METHOD) &&
clutter_input_focus_is_focused (priv->input_focus) && clutter_input_focus_is_focused (priv->input_focus) &&
clutter_input_focus_filter_event (priv->input_focus, clutter_input_focus_filter_event (priv->input_focus,
(ClutterEvent *) event)) (ClutterEvent *) event))
@ -2452,12 +2459,12 @@ clutter_text_key_press (ClutterActor *actor,
* the Unicode value and not the key symbol, unless they * the Unicode value and not the key symbol, unless they
* contain the input method flag. * contain the input method flag.
*/ */
if (event->keyval == 0 && (event->flags & CLUTTER_EVENT_FLAG_SYNTHETIC) && if (keyval == 0 && (flags & CLUTTER_EVENT_FLAG_SYNTHETIC) &&
!(event->flags & CLUTTER_EVENT_FLAG_INPUT_METHOD)) !(flags & CLUTTER_EVENT_FLAG_INPUT_METHOD))
res = FALSE; res = FALSE;
else else
res = clutter_binding_pool_activate (pool, event->keyval, res = clutter_binding_pool_activate (pool, keyval,
event->modifier_state, modifiers,
G_OBJECT (actor)); G_OBJECT (actor));
/* if the key binding has handled the event we bail out /* if the key binding has handled the event we bail out
@ -2467,7 +2474,7 @@ clutter_text_key_press (ClutterActor *actor,
*/ */
if (res) if (res)
return CLUTTER_EVENT_STOP; return CLUTTER_EVENT_STOP;
else if ((event->modifier_state & CLUTTER_CONTROL_MASK) == 0) else if ((modifiers & CLUTTER_CONTROL_MASK) == 0)
{ {
gunichar key_unichar; gunichar key_unichar;
@ -3074,11 +3081,14 @@ clutter_text_event (ClutterActor *self,
{ {
ClutterText *text = CLUTTER_TEXT (self); ClutterText *text = CLUTTER_TEXT (self);
ClutterTextPrivate *priv = text->priv; ClutterTextPrivate *priv = text->priv;
ClutterEventType event_type;
event_type = clutter_event_type (event);
if (clutter_input_focus_is_focused (priv->input_focus) && if (clutter_input_focus_is_focused (priv->input_focus) &&
(event->type == CLUTTER_IM_COMMIT || (event_type == CLUTTER_IM_COMMIT ||
event->type == CLUTTER_IM_DELETE || event_type == CLUTTER_IM_DELETE ||
event->type == CLUTTER_IM_PREEDIT)) event_type == CLUTTER_IM_PREEDIT))
{ {
return clutter_input_focus_process_event (priv->input_focus, event); return clutter_input_focus_process_event (priv->input_focus, event);
} }