stage: Allow tracking dragged actors
We should be able to internally attach the actor currently being dragged to the device that is dragging it. https://bugzilla.gnome.org/show_bug.cgi?id=652842
This commit is contained in:
parent
e4756fd764
commit
530a13f02f
@ -99,6 +99,14 @@ void _clutter_stage_release_pick_id (ClutterStage *stage,
|
|||||||
ClutterActor * _clutter_stage_get_actor_by_pick_id (ClutterStage *stage,
|
ClutterActor * _clutter_stage_get_actor_by_pick_id (ClutterStage *stage,
|
||||||
gint32 pick_id);
|
gint32 pick_id);
|
||||||
|
|
||||||
|
void _clutter_stage_add_drag_actor (ClutterStage *stage,
|
||||||
|
ClutterInputDevice *device,
|
||||||
|
ClutterActor *actor);
|
||||||
|
ClutterActor * _clutter_stage_get_drag_actor (ClutterStage *stage,
|
||||||
|
ClutterInputDevice *device);
|
||||||
|
void _clutter_stage_remove_drag_actor (ClutterStage *stage,
|
||||||
|
ClutterInputDevice *device);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __CLUTTER_STAGE_PRIVATE_H__ */
|
#endif /* __CLUTTER_STAGE_PRIVATE_H__ */
|
||||||
|
@ -4091,3 +4091,51 @@ _clutter_stage_get_actor_by_pick_id (ClutterStage *stage,
|
|||||||
|
|
||||||
return _clutter_id_pool_lookup (priv->pick_id_pool, pick_id);
|
return _clutter_id_pool_lookup (priv->pick_id_pool, pick_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_clutter_stage_add_drag_actor (ClutterStage *stage,
|
||||||
|
ClutterInputDevice *device,
|
||||||
|
ClutterActor *actor)
|
||||||
|
{
|
||||||
|
GHashTable *drag_actors;
|
||||||
|
|
||||||
|
drag_actors = g_object_get_data (G_OBJECT (stage), "__clutter_stage_drag_actors");
|
||||||
|
if (drag_actors == NULL)
|
||||||
|
{
|
||||||
|
drag_actors = g_hash_table_new (NULL, NULL);
|
||||||
|
g_object_set_data_full (G_OBJECT (stage), "__clutter_stage_drag_actors",
|
||||||
|
drag_actors,
|
||||||
|
(GDestroyNotify) g_hash_table_destroy);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_hash_table_replace (drag_actors, device, actor);
|
||||||
|
}
|
||||||
|
|
||||||
|
ClutterActor *
|
||||||
|
_clutter_stage_get_drag_actor (ClutterStage *stage,
|
||||||
|
ClutterInputDevice *device)
|
||||||
|
{
|
||||||
|
GHashTable *drag_actors;
|
||||||
|
|
||||||
|
drag_actors = g_object_get_data (G_OBJECT (stage), "__clutter_stage_drag_actors");
|
||||||
|
if (drag_actors == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return g_hash_table_lookup (drag_actors, device);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_clutter_stage_remove_drag_actor (ClutterStage *stage,
|
||||||
|
ClutterInputDevice *device)
|
||||||
|
{
|
||||||
|
GHashTable *drag_actors;
|
||||||
|
|
||||||
|
drag_actors = g_object_get_data (G_OBJECT (stage), "__clutter_stage_drag_actors");
|
||||||
|
if (drag_actors == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
g_hash_table_remove (drag_actors, device);
|
||||||
|
|
||||||
|
if (g_hash_table_size (drag_actors) == 0)
|
||||||
|
g_object_set_data (G_OBJECT (stage), "__clutter_stage_drag_actors", NULL);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user