ClutterDragAction: do not dereference a NULL priv->stage
When destroying an actor during a drag-action with a drag_handle, the ClutterDragAction's priv->stage could be set to NULL in _set_actor(). _dispose() must not assume that priv->stage is not NULL. See also https://bugzilla.gnome.org/show_bug.cgi?id=681814
This commit is contained in:
parent
a0d9eaf15d
commit
2be42c333a
@ -657,30 +657,38 @@ clutter_drag_action_dispose (GObject *gobject)
|
|||||||
/* if we're being disposed while a capture is still present, we
|
/* if we're being disposed while a capture is still present, we
|
||||||
* need to reset the state we are currently holding
|
* need to reset the state we are currently holding
|
||||||
*/
|
*/
|
||||||
if (priv->last_motion_device != NULL)
|
if (priv->stage != NULL)
|
||||||
|
{
|
||||||
|
if (priv->last_motion_device != NULL)
|
||||||
|
{
|
||||||
|
_clutter_stage_remove_pointer_drag_actor (priv->stage,
|
||||||
|
priv->last_motion_device);
|
||||||
|
priv->last_motion_device = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (priv->sequence != NULL)
|
||||||
|
{
|
||||||
|
_clutter_stage_remove_touch_drag_actor (priv->stage,
|
||||||
|
priv->sequence);
|
||||||
|
priv->sequence = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (priv->capture_id != 0)
|
||||||
|
{
|
||||||
|
clutter_stage_set_motion_events_enabled (priv->stage,
|
||||||
|
priv->motion_events_enabled);
|
||||||
|
|
||||||
|
g_signal_handler_disconnect (priv->stage, priv->capture_id);
|
||||||
|
|
||||||
|
priv->capture_id = 0;
|
||||||
|
priv->stage = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
_clutter_stage_remove_pointer_drag_actor (priv->stage,
|
|
||||||
priv->last_motion_device);
|
|
||||||
priv->last_motion_device = NULL;
|
priv->last_motion_device = NULL;
|
||||||
}
|
|
||||||
|
|
||||||
if (priv->sequence != NULL)
|
|
||||||
{
|
|
||||||
_clutter_stage_remove_touch_drag_actor (priv->stage,
|
|
||||||
priv->sequence);
|
|
||||||
priv->sequence = NULL;
|
priv->sequence = NULL;
|
||||||
}
|
|
||||||
|
|
||||||
if (priv->capture_id != 0)
|
|
||||||
{
|
|
||||||
clutter_stage_set_motion_events_enabled (priv->stage,
|
|
||||||
priv->motion_events_enabled);
|
|
||||||
|
|
||||||
if (priv->stage != NULL)
|
|
||||||
g_signal_handler_disconnect (priv->stage, priv->capture_id);
|
|
||||||
|
|
||||||
priv->capture_id = 0;
|
priv->capture_id = 0;
|
||||||
priv->stage = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priv->button_press_id != 0)
|
if (priv->button_press_id != 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user