diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2012-02-17 14:34:23 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2012-02-23 10:41:00 +1000 |
commit | b181658db7c72b664d40f2736fe425819421ce52 (patch) | |
tree | 7b45cf0e1af377f7da497fabe61028334be23e7a | |
parent | eb40d9cc5d59321263fd8fa3f76ddd912d1fb804 (diff) |
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 <peter.hutterer@who-t.net>
Reviewed-by: Aaron Plattner <aplattner@nvidia.com>
Tested-by: Aaron Plattner <aplattner@nvidia.com>
-rw-r--r-- | src/transform.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/src/transform.c b/src/transform.c index 15fda59..f80a592 100644 --- a/src/transform.c +++ b/src/transform.c @@ -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); } |