clutter/stage: Add function to maybe invalidate pointers on an actor
The function that currently invalidates pointers over an specific actor also asserts for the situations where this invalidation makes sense to happen (i.e. the actor became unmapped, or non-reactive). We want to have a function that is more forgiving, and that doesn't enforce any guarantees about the pointer focus actually changing. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2532>
This commit is contained in:
parent
d985069542
commit
6dabdec10e
2 changed files with 17 additions and 4 deletions
|
@ -159,6 +159,9 @@ void clutter_stage_unlink_grab (ClutterStage *self,
|
||||||
void clutter_stage_invalidate_focus (ClutterStage *self,
|
void clutter_stage_invalidate_focus (ClutterStage *self,
|
||||||
ClutterActor *actor);
|
ClutterActor *actor);
|
||||||
|
|
||||||
|
void clutter_stage_maybe_invalidate_focus (ClutterStage *self,
|
||||||
|
ClutterActor *actor);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __CLUTTER_STAGE_PRIVATE_H__ */
|
#endif /* __CLUTTER_STAGE_PRIVATE_H__ */
|
||||||
|
|
|
@ -3175,8 +3175,8 @@ clutter_stage_set_actor_needs_immediate_relayout (ClutterStage *stage)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
clutter_stage_invalidate_focus (ClutterStage *self,
|
clutter_stage_maybe_invalidate_focus (ClutterStage *self,
|
||||||
ClutterActor *actor)
|
ClutterActor *actor)
|
||||||
{
|
{
|
||||||
ClutterStagePrivate *priv = self->priv;
|
ClutterStagePrivate *priv = self->priv;
|
||||||
GHashTableIter iter;
|
GHashTableIter iter;
|
||||||
|
@ -3185,8 +3185,6 @@ clutter_stage_invalidate_focus (ClutterStage *self,
|
||||||
if (CLUTTER_ACTOR_IN_DESTRUCTION (self))
|
if (CLUTTER_ACTOR_IN_DESTRUCTION (self))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
g_assert (!clutter_actor_is_mapped (actor) || !clutter_actor_get_reactive (actor));
|
|
||||||
|
|
||||||
g_hash_table_iter_init (&iter, priv->pointer_devices);
|
g_hash_table_iter_init (&iter, priv->pointer_devices);
|
||||||
while (g_hash_table_iter_next (&iter, NULL, &value))
|
while (g_hash_table_iter_next (&iter, NULL, &value))
|
||||||
{
|
{
|
||||||
|
@ -3220,6 +3218,18 @@ clutter_stage_invalidate_focus (ClutterStage *self,
|
||||||
entry->coords,
|
entry->coords,
|
||||||
CLUTTER_CURRENT_TIME);
|
CLUTTER_CURRENT_TIME);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clutter_stage_invalidate_focus (ClutterStage *self,
|
||||||
|
ClutterActor *actor)
|
||||||
|
{
|
||||||
|
if (CLUTTER_ACTOR_IN_DESTRUCTION (self))
|
||||||
|
return;
|
||||||
|
|
||||||
|
g_assert (!clutter_actor_is_mapped (actor) || !clutter_actor_get_reactive (actor));
|
||||||
|
|
||||||
|
clutter_stage_maybe_invalidate_focus (self, actor);
|
||||||
|
|
||||||
if (actor != CLUTTER_ACTOR (self))
|
if (actor != CLUTTER_ACTOR (self))
|
||||||
g_assert (!clutter_actor_has_pointer (actor));
|
g_assert (!clutter_actor_has_pointer (actor));
|
||||||
|
|
Loading…
Reference in a new issue