Commit b181658d authored by Peter Hutterer's avatar Peter Hutterer

Replace NVIDIA-specific output checking

If the binary driver drives at least one screen, the old method did
not allow for randr-style screen binding (on the other screen).

Change the logic to:
- check if the output an randr output
- if not, check if the "default" randr output is present and the output name
  was "HEAD-n"
  - if so, use Xinerama-style mapping

This keeps the current behaviour of not allowing Xinerama-style mapping if
all outputs are RandR capable.
Signed-off-by: Peter Hutterer's avatarPeter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Aaron Plattner's avatarAaron Plattner <aplattner@nvidia.com>
Tested-by: Aaron Plattner's avatarAaron Plattner <aplattner@nvidia.com>
parent eb40d9cc
......@@ -253,10 +253,9 @@ out:
int
map_to_output(Display *dpy, int argc, char *argv[], char *name, char *desc)
{
int opcode, event, error;
int maj, min;
char *output_name;
XIDeviceInfo *info;
XRROutputInfo *output_info;
if (argc < 2)
{
......@@ -272,14 +271,19 @@ map_to_output(Display *dpy, int argc, char *argv[], char *name, char *desc)
}
output_name = argv[1];
output_info = find_output_xrandr(dpy, output_name);
if (!output_info)
{
/* Output doesn't exist. Is this a (partial) non-RandR setup? */
output_info = find_output_xrandr(dpy, "default");
if (output_info)
{
XRRFreeOutputInfo(output_info);
if (strncmp("HEAD-", output_name, strlen("HEAD-")) == 0)
return map_output_xinerama(dpy, info->deviceid, output_name);
}
} else
XRRFreeOutputInfo(output_info);
/* Check for RandR 1.2. Server bug causes the NVIDIA driver to
* report with RandR 1.3 support but it doesn't expose RandR outputs.
* Force Xinerama if NV-CONTROL is present */
if (XQueryExtension(dpy, "NV-CONTROL", &opcode, &event, &error) ||
!XQueryExtension(dpy, "RANDR", &opcode, &event, &error) ||
!XRRQueryVersion(dpy, &maj, &min) || (maj * 1000 + min) < 1002)
return map_output_xinerama(dpy, info->deviceid, output_name);
else
return map_output_xrandr(dpy, info->deviceid, output_name);
return map_output_xrandr(dpy, info->deviceid, output_name);
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment