diff --git a/ChangeLog b/ChangeLog index 6044137cb..5cacc8654 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2008-01-18 Emmanuele Bassi + + * clutter/clutter-main.c (clutter_do_event): Check the + return value of the ::event signal for the CLUTTER_DELETE + event type. + + * clutter/clutter-stage.c (clutter_stage_event): Emit the + ::event signal when receiving the CLUTTER_DELETE event; this + allows to intercept the user's closing of the stage window. + 2007-01-18 Tomas Frydrych * clutter/clutter-fixed.h: diff --git a/clutter/clutter-main.c b/clutter/clutter-main.c index 2f2d77d56..a67ba5743 100644 --- a/clutter/clutter-main.c +++ b/clutter/clutter-main.c @@ -1376,7 +1376,8 @@ clutter_do_event (ClutterEvent *event) case CLUTTER_DESTROY_NOTIFY: case CLUTTER_DELETE: event->any.source = stage; - if (clutter_stage_event (CLUTTER_STAGE (stage), event)) + /* the stage did not handle the event, so we just quit */ + if (!clutter_stage_event (CLUTTER_STAGE (stage), event)) clutter_main_quit (); break; diff --git a/clutter/clutter-stage.c b/clutter/clutter-stage.c index a1644da6d..83cf2fbd0 100644 --- a/clutter/clutter-stage.c +++ b/clutter/clutter-stage.c @@ -874,7 +874,13 @@ clutter_stage_event (ClutterStage *stage, priv = stage->priv; if (event->type == CLUTTER_DELETE) - return TRUE; + { + gboolean retval = FALSE; + + g_signal_emit_by_name (stage, "event", event, &retval); + + return retval; + } if (event->type != CLUTTER_STAGE_STATE) return FALSE;