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
This commit is contained in:
Florian Scandella 2010-04-09 17:22:51 +02:00 committed by Adel Gadllah
parent 093722fcc8
commit 53fae3247c

View File

@ -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,11 +832,21 @@ 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;
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;
break;
}
/* No primary specified and no LVDS found */
if (screen_x11->monitors[i].output == first_output)
screen_x11->primary_monitor = i;
}