Re: [PATCH xinput 5/5] Replace NVIDIA-specific output checking

2012-02-22 Thread Peter Hutterer
On Tue, Feb 21, 2012 at 11:38:00AM -0800, Aaron Plattner wrote:
> On 02/19/2012 07:37 PM, Peter Hutterer wrote:
> >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.
> 
> It looks like find_output_xrandr only looks at the default screen,
> which means that users need to set DISPLAY=. to choose
> the screen number to look for outputs on.
> 
> Maybe it would be a good follow-on change to make it loop over all
> screens, ignoring screens with a single output named "default"?
> That might make it difficult to disambiguate screens that have
> outputs with the same name, though.

well, this is xinput, a little helper app. I'm not sure there's that many
hoops I want to jump through to get it to do something that the desktop
environment should control anyway.

in addition, this is just a convenience wrapper for the transformation
matrix anyway. exotic setups that aren't covered by the current
functionality can still set the matrix manually to the screen proportions
(which is all this command does anyway).

if you want to write the patch, go for it. But I doubt I'll get to it
soon.

> 
> This code allows you to run "xinput map-to-output  default" but
> I think that's okay because it just does nothing.
> 
> >Signed-off-by: Peter Hutterer 
> 
> Given the above caveats,
> 
> Reviewed-by: Aaron Plattner 
> Tested-by: Aaron Plattner 
 

thanks.

Cheers,
  Peter

> >---
> >Untested, I don't have this hw configuration available right now.
> >
> >  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);
> >  }
> 
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel


Re: [PATCH xinput 5/5] Replace NVIDIA-specific output checking

2012-02-21 Thread Aaron Plattner

On 02/19/2012 07:37 PM, Peter Hutterer wrote:

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.


It looks like find_output_xrandr only looks at the default screen, which 
means that users need to set DISPLAY=. to choose the screen 
number to look for outputs on.


Maybe it would be a good follow-on change to make it loop over all 
screens, ignoring screens with a single output named "default"?  That 
might make it difficult to disambiguate screens that have outputs with 
the same name, though.


This code allows you to run "xinput map-to-output  default" but I 
think that's okay because it just does nothing.



Signed-off-by: Peter Hutterer 


Given the above caveats,

Reviewed-by: Aaron Plattner 
Tested-by: Aaron Plattner 


---
Untested, I don't have this hw configuration available right now.

  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);
  }


___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel


[PATCH xinput 5/5] Replace NVIDIA-specific output checking

2012-02-19 Thread Peter Hutterer
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 
---
Untested, I don't have this hw configuration available right now.

 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);
 }
-- 
1.7.7.5

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel