summaryrefslogtreecommitdiffstats
path: root/x11/gnome-panel/files/patch-gnome-panel_panel-multiscreen.c
diff options
context:
space:
mode:
Diffstat (limited to 'x11/gnome-panel/files/patch-gnome-panel_panel-multiscreen.c')
-rw-r--r--x11/gnome-panel/files/patch-gnome-panel_panel-multiscreen.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/x11/gnome-panel/files/patch-gnome-panel_panel-multiscreen.c b/x11/gnome-panel/files/patch-gnome-panel_panel-multiscreen.c
new file mode 100644
index 000000000..50ef12367
--- /dev/null
+++ b/x11/gnome-panel/files/patch-gnome-panel_panel-multiscreen.c
@@ -0,0 +1,59 @@
+--- gnome-panel/panel-multiscreen.c.orig 2009-10-12 22:57:08.000000000 +1000
++++ gnome-panel/panel-multiscreen.c 2009-10-12 22:57:08.000000000 +1000
+@@ -136,9 +136,17 @@
+ xroot = GDK_WINDOW_XWINDOW (gdk_screen_get_root_window (screen));
+
+ #if (RANDR_MAJOR > 1 || (RANDR_MAJOR == 1 && RANDR_MINOR >= 3))
+- if (have_randr_1_3)
++ if (have_randr_1_3) {
+ resources = XRRGetScreenResourcesCurrent (xdisplay, xroot);
+- else
++ if (resources->noutput == 0) {
++ /* This might happen if nothing tried to get randr
++ * resources from the server before, so we need an
++ * active probe. See comment #27 in
++ * https://bugzilla.gnome.org/show_bug.cgi?id=597101 */
++ XRRFreeScreenResources (resources);
++ resources = XRRGetScreenResources (xdisplay, xroot);
++ }
++ } else
+ resources = XRRGetScreenResources (xdisplay, xroot);
+ #else
+ resources = XRRGetScreenResources (xdisplay, xroot);
+@@ -205,6 +213,17 @@
+ return FALSE;
+ }
+
++ if (geometries->len == 0) {
++ /* This can happen in at least one case:
++ * https://bugzilla.novell.com/show_bug.cgi?id=543876 where all
++ * monitors appear disconnected (possibly because the screen
++ * is behing a KVM switch) -- see comment #8.
++ * There might be other cases too, so we stay on the safe side.
++ */
++ g_array_free (geometries, TRUE);
++ return FALSE;
++ }
++
+ *monitors_ret = geometries->len;
+ *geometries_ret = (GdkRectangle *) g_array_free (geometries, FALSE);
+
+@@ -238,9 +257,15 @@
+ int *monitors_ret,
+ GdkRectangle **geometries_ret)
+ {
+- if (panel_multiscreen_get_randr_monitors_for_screen (screen,
+- monitors_ret,
+- geometries_ret))
++ gboolean res;
++
++ *monitors_ret = 0;
++ *geometries_ret = NULL;
++
++ res = panel_multiscreen_get_randr_monitors_for_screen (screen,
++ monitors_ret,
++ geometries_ret);
++ if (res && *monitors_ret > 0)
+ return;
+
+ panel_multiscreen_get_gdk_monitors_for_screen (screen,