[maemo-commits] [maemo-commits] r19260 - in projects/haf/trunk/clutter0.8: clutter/x11 debian

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Mon Aug 31 12:57:44 EEST 2009
Author: aendrodi
Date: 2009-08-31 12:57:37 +0300 (Mon, 31 Aug 2009)
New Revision: 19260

Modified:
   projects/haf/trunk/clutter0.8/clutter/x11/clutter-event-x11.c
   projects/haf/trunk/clutter0.8/clutter/x11/clutter-x11.h
   projects/haf/trunk/clutter0.8/debian/changelog
Log:
  * clutter/x11/clutter-event-x11.c:
    (events_queue): don't process events for more than 400 ms
    (clutter_event_prepare, clutter_event_check): respect clutter_x11_event_processing_blocked


Modified: projects/haf/trunk/clutter0.8/clutter/x11/clutter-event-x11.c
===================================================================
--- projects/haf/trunk/clutter0.8/clutter/x11/clutter-event-x11.c	2009-08-31 09:55:52 UTC (rev 19259)
+++ projects/haf/trunk/clutter0.8/clutter/x11/clutter-event-x11.c	2009-08-31 09:57:37 UTC (rev 19260)
@@ -62,6 +62,8 @@
 #define XEMBED_UNREGISTER_ACCELERATOR   13
 #define XEMBED_ACTIVATE_ACCELERATOR     14
 
+gboolean clutter_x11_event_processing_blocked;
+
 static Window ParentEmbedderWin = None;
 
 typedef struct _ClutterEventSource      ClutterEventSource;
@@ -816,9 +818,16 @@
   Display           *xdisplay = backend_x11->xdpy;
   XEvent             xevent;
   ClutterMainContext  *clutter_context;
+  static GTimer *timer;
 
   clutter_context = clutter_context_get_default ();
 
+  /* Observe the elapsed time we spend on event processing not to starve
+   * g_timeout_add() callbacks to death. */
+  if (!timer)
+    timer = g_timer_new ();
+  g_timer_start (timer);
+
   while (!clutter_events_pending () && XPending (xdisplay))
     {
       XNextEvent (xdisplay, &xevent);
@@ -834,6 +843,10 @@
         {
           clutter_event_free (event);
         }
+
+      /* Take a break every 40 milisecs. */
+      if (g_timer_elapsed (timer, NULL) >= 0.04)
+        break;
     }
 }
 
@@ -897,7 +910,10 @@
   clutter_threads_enter ();
 
   *timeout = -1;
-  retval = (clutter_events_pending () || check_xpending (backend));
+  if (clutter_x11_event_processing_blocked)
+    retval = FALSE;
+  else
+    retval = (clutter_events_pending () || check_xpending (backend));
 
   clutter_threads_leave ();
 
@@ -913,7 +929,9 @@
 
   clutter_threads_enter ();
 
-  if (event_source->event_poll_fd.revents & G_IO_IN)
+  if (clutter_x11_event_processing_blocked)
+    retval = FALSE;
+  else if (event_source->event_poll_fd.revents & G_IO_IN)
     retval = (clutter_events_pending () || check_xpending (backend));
   else
     retval = FALSE;

Modified: projects/haf/trunk/clutter0.8/clutter/x11/clutter-x11.h
===================================================================
--- projects/haf/trunk/clutter0.8/clutter/x11/clutter-x11.h	2009-08-31 09:55:52 UTC (rev 19259)
+++ projects/haf/trunk/clutter0.8/clutter/x11/clutter-x11.h	2009-08-31 09:57:37 UTC (rev 19260)
@@ -134,6 +134,15 @@
 
 gboolean clutter_x11_has_composite_extension (void);
 
+/**
+ * clutter_x11_event_processing_blocked:
+ *
+ * As long as %TRUE the X11 backend won't start processing any new X events.
+ * Useful when you want to spin clutter_main() in an event filter function
+ * and would mind reentering it.
+ */
+extern gboolean clutter_x11_event_processing_blocked;
+
 G_END_DECLS
 
 #endif /* __CLUTTER_X11_H__ */

Modified: projects/haf/trunk/clutter0.8/debian/changelog
===================================================================
--- projects/haf/trunk/clutter0.8/debian/changelog	2009-08-31 09:55:52 UTC (rev 19259)
+++ projects/haf/trunk/clutter0.8/debian/changelog	2009-08-31 09:57:37 UTC (rev 19260)
@@ -4,6 +4,10 @@
   * clutter/x11/clutter-x11-texture-pixmap.c
     (clutter_x11_texture_pixmap_set_redirection): Allow setting the
     redirection irrespective of Clutter's idea of it.
+  Adam:
+  * clutter/x11/clutter-event-x11.c:
+    (events_queue): don't process events for more than 400 ms
+    (clutter_event_prepare, clutter_event_check): respect clutter_x11_event_processing_blocked
 
  -- Gordon Williams <gordon.williams at collabora.co.uk>  Mon, 24 Aug 2009 15:59:29 +0300
 

More information about the maemo-commits mailing list