2007-04-25 Emmanuele Bassi <ebassi@openedhand.com>

Merge from clutter.git/master

	* clutter/glx/clutter-event-glx.c:
	* clutter/glx/clutter-stage-glx.c: Implement the _NET_WM_PING
	protocol handling on the main stage window.

	* clutter/clutter-stage.h:
	* clutter/clutter-stage.c:
	* clutter/clutter-main.c: Handle CLUTTER_DELETE events internally,
	by calling clutter_main_quit(), and remove the ::delete-event
	signal from ClutterStage; clean up the signal emission sequence
	for the events: emit the ::event signal before emitting any signal
	and the ::event-after signal after the signal has been emitted; move
	the signal emission calls inside ClutterStage so we can call
	g_signal_emit() instead of g_signal_emit_by_name(), thus sparing us
	a lookup for each event.

	* examples/test.c: Remove ::delete-event signal handling.
This commit is contained in:
Emmanuele Bassi
2007-04-25 14:22:24 +00:00
parent 296649e865
commit a7a511ce79
10 changed files with 184 additions and 80 deletions

View File

@ -128,50 +128,30 @@ clutter_main_do_event (ClutterEvent *event,
stage = _clutter_backend_get_stage (backend);
if (!stage)
return;
switch (event->type)
{
case CLUTTER_NOTHING:
break;
case CLUTTER_DESTROY_NOTIFY:
case CLUTTER_DELETE:
if (clutter_stage_event (CLUTTER_STAGE (stage), event))
clutter_main_quit ();
break;
case CLUTTER_KEY_PRESS:
case CLUTTER_KEY_RELEASE:
case CLUTTER_MOTION:
case CLUTTER_BUTTON_PRESS:
case CLUTTER_2BUTTON_PRESS:
case CLUTTER_3BUTTON_PRESS:
g_signal_emit_by_name (stage, "button-press-event", event);
break;
case CLUTTER_BUTTON_RELEASE:
g_signal_emit_by_name (stage, "button-release-event", event);
break;
case CLUTTER_SCROLL:
g_signal_emit_by_name (stage, "scroll-event", event);
clutter_stage_event (CLUTTER_STAGE (stage), event);
break;
case CLUTTER_KEY_PRESS:
g_signal_emit_by_name (stage, "key-press-event", event);
break;
case CLUTTER_KEY_RELEASE:
g_signal_emit_by_name (stage, "key-release-event", event);
break;
case CLUTTER_MOTION:
g_signal_emit_by_name (stage, "motion-event", event);
break;
case CLUTTER_DELETE:
{
gboolean res = FALSE;
g_object_ref (stage);
g_signal_emit_by_name (stage, "delete-event", event, &res);
CLUTTER_NOTE (EVENT, "delete-event return: %s",
res == TRUE ? "true" : "false");
if (!res)
clutter_main_quit ();
g_object_unref (stage);
}
break;
case CLUTTER_STAGE_STATE:
break;
case CLUTTER_DESTROY_NOTIFY:
break;
case CLUTTER_CLIENT_MESSAGE:
break;
}
@ -189,7 +169,8 @@ clutter_main_quit (void)
g_return_if_fail (context->main_loops != NULL);
g_main_loop_quit (context->main_loops->data);
if (g_main_loop_is_running (context->main_loops->data))
g_main_loop_quit (context->main_loops->data);
}
/**
@ -232,6 +213,7 @@ clutter_main (void)
if (g_main_loop_is_running (context->main_loops->data))
{
/* FIXME - add thread locking around this call */
g_main_loop_run (loop);
}
@ -257,7 +239,7 @@ clutter_main (void)
* Locks the Clutter thread lock.
*/
void
clutter_threads_enter(void)
clutter_threads_enter (void)
{
ClutterMainContext *context = CLUTTER_CONTEXT ();