From 5b407092704ca9432c1d5b3307277df18e33ccca Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Sat, 19 Jan 2008 10:30:29 +0000 Subject: [PATCH] 2008-01-19 Emmanuele Bassi * clutter/clutter-event.c (clutter_event_copy): Take an extra reference on the related actor in ClutterEventCrossing that we explicitly unref in clutter_event_free(). (#714, Neil Roberts) --- ChangeLog | 6 ++++++ clutter/clutter-event.c | 16 +++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 27f57ae..6824c27 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-01-19 Emmanuele Bassi + + * clutter/clutter-event.c (clutter_event_copy): Take an extra + reference on the related actor in ClutterEventCrossing that we + explicitly unref in clutter_event_free(). (#714, Neil Roberts) + 2008-01-18 Emmanuele Bassi * tests/test-actors.c (input_cb): Fix the callback signature; diff --git a/clutter/clutter-event.c b/clutter/clutter-event.c index f7157f3..d53e38e 100644 --- a/clutter/clutter-event.c +++ b/clutter/clutter-event.c @@ -341,6 +341,19 @@ clutter_event_copy (ClutterEvent *event) new_event = clutter_event_new (CLUTTER_NOTHING); *new_event = *event; + /* deep copies or references must be added here */ + switch (new_event->type) + { + case CLUTTER_ENTER: + case CLUTTER_LEAVE: + if (new_event->crossing.related) + g_object_ref (new_event->crossing.related); + break; + + default: + break; + } + return new_event; } @@ -357,7 +370,8 @@ clutter_event_free (ClutterEvent *event) { if ((event->type == CLUTTER_LEAVE || event->type == CLUTTER_ENTER) && event->crossing.related) - g_object_unref (event->crossing.related); + g_object_unref (event->crossing.related); + g_slice_free (ClutterEvent, event); } } -- 2.7.4