17683
|
1 |
--- gnome-desktop-2.26.1/libgnome-desktop/gnome-rr.c.ori 2009-04-15 05:28:28.927718257 +0100
|
|
2 |
+++ gnome-desktop-2.26.1/libgnome-desktop/gnome-rr.c 2009-04-15 05:34:06.962714756 +0100
|
|
3 |
@@ -432,9 +432,34 @@
|
|
4 |
static ScreenInfo *
|
|
5 |
screen_info_new (GnomeRRScreen *screen, gboolean needs_reprobe, GError **error)
|
|
6 |
{
|
|
7 |
- ScreenInfo *info = g_new0 (ScreenInfo, 1);
|
|
8 |
-
|
|
9 |
+ GTimeVal cur_time_val;
|
|
10 |
+ gint64 cur, prev;
|
|
11 |
+
|
|
12 |
g_assert (screen != NULL);
|
|
13 |
+
|
|
14 |
+ if ( screen->info != NULL ) {
|
|
15 |
+ g_get_current_time(&cur_time_val);
|
|
16 |
+ cur = (gint64) cur_time_val.tv_sec * G_USEC_PER_SEC + cur_time_val.tv_usec;
|
|
17 |
+ prev =(gint64) screen->last_update_time.tv_sec * G_USEC_PER_SEC + screen->last_update_time.tv_usec;
|
|
18 |
+
|
|
19 |
+ /* Only referesh the info after 2 seconds have elapsed since last
|
|
20 |
+ * update, otherwise it will cause a lot of extra probing on the X
|
|
21 |
+ * server.
|
|
22 |
+ */
|
|
23 |
+ if (((cur - prev) < 0) || ((cur - prev) > 2000000)) {
|
|
24 |
+ screen->last_update_time = cur_time_val;
|
|
25 |
+ }
|
|
26 |
+ else {
|
|
27 |
+ /* Don't return any update, which should result in caller using
|
|
28 |
+ * existing data
|
|
29 |
+ */
|
|
30 |
+ g_warning("Call to screen_info_new is too frequent, skipping...");
|
|
31 |
+ return( NULL );
|
|
32 |
+ }
|
|
33 |
+ }
|
|
34 |
+
|
|
35 |
+ ScreenInfo *info = g_new0 (ScreenInfo, 1);
|
|
36 |
+
|
|
37 |
|
|
38 |
info->outputs = NULL;
|
|
39 |
info->crtcs = NULL;
|
|
40 |
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
|
|
41 |
--- gnome-desktop-2.29.92.orig/libgnome-desktop/gnome-rr-private.h 2010-03-11 22:12:45.452630032 +0000
|
|
42 |
+++ gnome-desktop-2.29.92/libgnome-desktop/gnome-rr-private.h 2010-03-11 22:13:28.367005972 +0000
|
|
43 |
@@ -42,7 +42,7 @@
|
|
44 |
|
|
45 |
GnomeRRScreenChanged callback;
|
|
46 |
gpointer data;
|
|
47 |
-
|
|
48 |
+ GTimeVal last_update_time;
|
|
49 |
Atom connector_type_atom;
|
|
50 |
};
|
|
51 |
|
|
52 |
diff -ruN gnome-desktop-2.29.92.orig/libgnome-desktop/gnome-rr.c gnome-desktop-2.29.92/libgnome-desktop/gnome-rr.c
|
|
53 |
--- gnome-desktop-2.29.92.orig/libgnome-desktop/gnome-rr.c 2010-03-11 22:15:24.569673576 +0000
|
|
54 |
+++ gnome-desktop-2.29.92/libgnome-desktop/gnome-rr.c 2010-03-11 22:18:41.223085776 +0000
|
|
55 |
@@ -713,6 +713,9 @@
|
|
56 |
}
|
|
57 |
|
|
58 |
screen->info = screen_info_new (screen, TRUE, error);
|
|
59 |
+
|
|
60 |
+ /* Initialize the last udpate time */
|
|
61 |
+ g_get_current_time (&(screen->last_update_time));
|
|
62 |
|
|
63 |
if (!screen->info) {
|
|
64 |
g_free (screen);
|