summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2012-02-17 14:34:23 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2012-02-23 10:41:00 +1000
commitb181658db7c72b664d40f2736fe425819421ce52 (patch)
tree7b45cf0e1af377f7da497fabe61028334be23e7a
parenteb40d9cc5d59321263fd8fa3f76ddd912d1fb804 (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.c26
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);
}