From 8a8be8ad1b4effcc006442a5f5f3df0ac0b7208b Mon Sep 17 00:00:00 2001 From: Florian Scandella Date: Fri, 9 Apr 2010 17:22:51 +0200 Subject: [PATCH] Add heuristic for primary monitor Use the first monitor returned by RANDR as primary, if primary is not set and no LVDS is found. https://bugzilla.gnome.org/show_bug.cgi?id=615128 (cherry picked from commit 53fae3247c2d283d45a0ecbad0425331b072983a) --- gdk/x11/gdkscreen-x11.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/gdk/x11/gdkscreen-x11.c b/gdk/x11/gdkscreen-x11.c index 4a8fc68baf..335016227e 100644 --- a/gdk/x11/gdkscreen-x11.c +++ b/gdk/x11/gdkscreen-x11.c @@ -748,6 +748,7 @@ init_randr13 (GdkScreen *screen) Display *dpy = GDK_SCREEN_XDISPLAY (screen); XRRScreenResources *resources; RROutput primary_output; + RROutput first_output = None; int i; GArray *monitors; gboolean randr12_compat = FALSE; @@ -802,6 +803,9 @@ init_randr13 (GdkScreen *screen) XRRFreeOutputInfo (output); } + if (resources->noutput > 0) + first_output = resources->outputs[0]; + XRRFreeScreenResources (resources); /* non RandR 1.2 X driver doesn't return any usable multihead data */ @@ -828,12 +832,22 @@ init_randr13 (GdkScreen *screen) for (i = 0; i < screen_x11->n_monitors; ++i) { if (screen_x11->monitors[i].output == primary_output) - screen_x11->primary_monitor = i; + { + screen_x11->primary_monitor = i; + break; + } /* No RandR1.3+ available or no primary set, fall back to prefer LVDS as primary if present */ if (primary_output == None && g_ascii_strncasecmp (screen_x11->monitors[i].output_name, "LVDS", 4) == 0) - screen_x11->primary_monitor = i; + { + screen_x11->primary_monitor = i; + break; + } + + /* No primary specified and no LVDS found */ + if (screen_x11->monitors[i].output == first_output) + screen_x11->primary_monitor = i; } return screen_x11->n_monitors > 0;