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:
parent
093722fcc8
commit
53fae3247c
@ -748,6 +748,7 @@ init_randr13 (GdkScreen *screen)
|
|||||||
Display *dpy = GDK_SCREEN_XDISPLAY (screen);
|
Display *dpy = GDK_SCREEN_XDISPLAY (screen);
|
||||||
XRRScreenResources *resources;
|
XRRScreenResources *resources;
|
||||||
RROutput primary_output;
|
RROutput primary_output;
|
||||||
|
RROutput first_output = None;
|
||||||
int i;
|
int i;
|
||||||
GArray *monitors;
|
GArray *monitors;
|
||||||
gboolean randr12_compat = FALSE;
|
gboolean randr12_compat = FALSE;
|
||||||
@ -802,6 +803,9 @@ init_randr13 (GdkScreen *screen)
|
|||||||
XRRFreeOutputInfo (output);
|
XRRFreeOutputInfo (output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (resources->noutput > 0)
|
||||||
|
first_output = resources->outputs[0];
|
||||||
|
|
||||||
XRRFreeScreenResources (resources);
|
XRRFreeScreenResources (resources);
|
||||||
|
|
||||||
/* non RandR 1.2 X driver doesn't return any usable multihead data */
|
/* 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)
|
for (i = 0; i < screen_x11->n_monitors; ++i)
|
||||||
{
|
{
|
||||||
if (screen_x11->monitors[i].output == primary_output)
|
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 */
|
/* No RandR1.3+ available or no primary set, fall back to prefer LVDS as primary if present */
|
||||||
if (primary_output == None &&
|
if (primary_output == None &&
|
||||||
g_ascii_strncasecmp (screen_x11->monitors[i].output_name, "LVDS", 4) == 0)
|
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;
|
return screen_x11->n_monitors > 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user