stage: Maintain the motion event delivery invariants

It is possible, by calling clutter_set_motion_events_enabled() prior to
the creation of any stage, to control the per-actor motion event
delivery flag on each newly created stage. Since we deprecated the
global accessor functions in favour of the per-Stage ones, we need to
remove the call to clutter_get_motion_events_enabled() inside the
ClutterStage instance initialization, and replace it with an internal
function.

This code will go away when we can finally break API and remove the
deprecated functions.
This commit is contained in:
Emmanuele Bassi 2011-06-20 13:53:09 +01:00
parent b6eb5728e1
commit d5ea422c8f
3 changed files with 28 additions and 14 deletions

View File

@ -303,9 +303,7 @@ clutter_set_motion_events_enabled (gboolean enable)
gboolean gboolean
clutter_get_motion_events_enabled (void) clutter_get_motion_events_enabled (void)
{ {
ClutterMainContext *context = _clutter_context_get_default (); return _clutter_context_get_motion_events_enabled ();
return context->motion_events_per_actor;
} }
ClutterActor * ClutterActor *
@ -3099,3 +3097,11 @@ _clutter_context_pop_shader_stack (ClutterActor *actor)
return _clutter_context_peek_shader_stack (); return _clutter_context_peek_shader_stack ();
} }
gboolean
_clutter_context_get_motion_events_enabled (void)
{
ClutterMainContext *context = _clutter_context_get_default ();
return context->motion_events_per_actor;
}

View File

@ -188,6 +188,7 @@ ClutterActor * _clutter_context_pop_shader_stack (ClutterActor *a
ClutterActor * _clutter_context_peek_shader_stack (void); ClutterActor * _clutter_context_peek_shader_stack (void);
guint32 _clutter_context_acquire_id (gpointer key); guint32 _clutter_context_acquire_id (gpointer key);
void _clutter_context_release_id (guint32 id_); void _clutter_context_release_id (guint32 id_);
gboolean _clutter_context_get_motion_events_enabled (void);
const gchar *_clutter_gettext (const gchar *str); const gchar *_clutter_gettext (const gchar *str);

View File

@ -1998,7 +1998,14 @@ clutter_stage_init (ClutterStage *self)
priv->use_fog = FALSE; priv->use_fog = FALSE;
priv->throttle_motion_events = TRUE; priv->throttle_motion_events = TRUE;
priv->min_size_changed = FALSE; priv->min_size_changed = FALSE;
priv->motion_events_enabled = clutter_get_motion_events_enabled ();
/* XXX - we need to keep the invariant that calling
* clutter_set_motion_event_enabled() before the stage creation
* will cause motion event delivery to be disabled on any newly
* created stage. this can go away when we break API and remove
* deprecated functions.
*/
priv->motion_events_enabled = _clutter_context_get_motion_events_enabled ();
priv->color = default_stage_color; priv->color = default_stage_color;