patches/gnome-desktop-02-xrandr-probing.diff
author chrisk
Thu, 11 Mar 2010 16:57:03 +0000
changeset 17683 b4b88b042273
permissions -rw-r--r--
2010-03-11 Christian Kelly <[email protected]> * base-specs/gnome-panel.spec: Bump to 2.29.92. * base-specs/gnome-desktop.spec: Bump to 2.29.92. * base-specs/gnome-menus.spec: Bump to 2.29.92. * patches/gnome-desktop-02-hicolor-icons.diff: Remove. * patches/gnome-desktop-05-randr-xerror.diff: Re-work. * patches/gnome-desktop-06-xrandr-probing.diff, * patches/gnome-desktop-02-xrandr-probing.diff: Shuffle. * patches/gnome-panel-05-notificationarea-tooltip.diff: Re-work. * SUNWgnome-panel.spec: Fix %files.

--- gnome-desktop-2.26.1/libgnome-desktop/gnome-rr.c.ori	2009-04-15 05:28:28.927718257 +0100
+++ gnome-desktop-2.26.1/libgnome-desktop/gnome-rr.c	2009-04-15 05:34:06.962714756 +0100
@@ -432,9 +432,34 @@
 static ScreenInfo *
 screen_info_new (GnomeRRScreen *screen, gboolean needs_reprobe, GError **error)
 {
-    ScreenInfo *info = g_new0 (ScreenInfo, 1);
-    
+    GTimeVal   cur_time_val;
+    gint64     cur, prev;
+ 
     g_assert (screen != NULL);
+
+    if ( screen->info != NULL ) {
+        g_get_current_time(&cur_time_val);
+        cur = (gint64) cur_time_val.tv_sec * G_USEC_PER_SEC + cur_time_val.tv_usec;
+        prev =(gint64) screen->last_update_time.tv_sec * G_USEC_PER_SEC + screen->last_update_time.tv_usec;
+
+        /* Only referesh the info after 2 seconds have elapsed since last
+         * update, otherwise it will cause a lot of extra probing on the X
+         * server.
+         */
+        if (((cur - prev) < 0) || ((cur - prev) > 2000000)) {
+            screen->last_update_time = cur_time_val;
+        }
+        else {
+            /* Don't return any update, which should result in caller using
+             * existing data
+             */
+            g_warning("Call to screen_info_new is too frequent, skipping...");
+            return( NULL );
+        }
+    }
+
+    ScreenInfo *info = g_new0 (ScreenInfo, 1);
+
     
     info->outputs = NULL;
     info->crtcs = NULL;
diff -ruN gnome-desktop-2.29.92.orig/libgnome-desktop/gnome-rr-private.h gnome-desktop-2.29.92/libgnome-desktop/gnome-rr-private.h
--- gnome-desktop-2.29.92.orig/libgnome-desktop/gnome-rr-private.h	2010-03-11 22:12:45.452630032 +0000
+++ gnome-desktop-2.29.92/libgnome-desktop/gnome-rr-private.h	2010-03-11 22:13:28.367005972 +0000
@@ -42,7 +42,7 @@
     
     GnomeRRScreenChanged	callback;
     gpointer			data;
-
+    GTimeVal                    last_update_time;
     Atom                        connector_type_atom;
 };
 
diff -ruN gnome-desktop-2.29.92.orig/libgnome-desktop/gnome-rr.c gnome-desktop-2.29.92/libgnome-desktop/gnome-rr.c
--- gnome-desktop-2.29.92.orig/libgnome-desktop/gnome-rr.c	2010-03-11 22:15:24.569673576 +0000
+++ gnome-desktop-2.29.92/libgnome-desktop/gnome-rr.c	2010-03-11 22:18:41.223085776 +0000
@@ -713,6 +713,9 @@
 	}
 
 	screen->info = screen_info_new (screen, TRUE, error);
+
+        /* Initialize the last udpate time */
+        g_get_current_time (&(screen->last_update_time));
 	
 	if (!screen->info) {
 	    g_free (screen);