When I previously 0&'d out the rotate code, else if (0 & rot & (RR_Rotate_90|RR_Rotate_270)) I failed to notice a matching piece of code in the HAVE_RANDR_12 stanza further down; a few judicious fputs revealed to me that the latter is the one being executed. When I 0& *it* out, if (0 & crtci->rotation & (RR_Rotate_90|RR_Rotate_270)) the randr_versus_xinerama_fight message goes away and xscreensaver behaves correctly.
<patch> diff -bu /usr/opt/xscreensaver-5.07/driver/screens.c.orig /usr/opt/xscreensaver-5.07/driver/screens.c --- /usr/opt/xscreensaver-5.07/driver/screens.c.orig 2008-08-08 23:06:03.000000000 +0200 +++ /usr/opt/xscreensaver-5.07/driver/screens.c 2008-08-14 10:21:51.000000000 +0200 @@ -417,7 +417,7 @@ m->x = crtci->x; m->y = crtci->y; - if (crtci->rotation & (RR_Rotate_90|RR_Rotate_270)) + if (0 & crtci->rotation & (RR_Rotate_90|RR_Rotate_270)) { m->width = crtci->height; m->height = crtci->width; Diff finished. Thu Aug 14 10:21:58 2008 </patch> <quote src="driver/test-randr"> test-randr: 10:22:35: XRRQueryExtension(dpy, ...) ==> 115, 186 test-randr: 10:22:35: XRRQueryVersion(dpy, ...) ==> 1, 2 test-randr: 10:22:35: Screen 0 test-randr: 10:22:35: Available Rotations: 0 90 180 270 test-randr: 10:22:35: Current Rotation: 90 test-randr: 10:22:35: Available Reflections: X Y test-randr: 10:22:35: Current Reflections: none test-randr: 10:22:35: + size 0: 1600 x 1200 rates: 60 test-randr: 10:22:35: size 1: 1680 x 1050 rates: 60 test-randr: 10:22:35: size 2: 1600 x 1024 rates: 60 test-randr: 10:22:35: size 3: 1400 x 1050 rates: 75 70 60 test-randr: 10:22:35: size 4: 1280 x 1024 rates: 85 75 60 test-randr: 10:22:35: size 5: 1440 x 900 rates: 60 test-randr: 10:22:35: size 6: 1280 x 960 rates: 85 60 test-randr: 10:22:35: size 7: 1280 x 800 rates: 60 test-randr: 10:22:35: size 8: 1152 x 864 rates: 85 75 test-randr: 10:22:35: size 9: 1280 x 768 rates: 60 test-randr: 10:22:35: size 10: 1152 x 768 rates: 55 test-randr: 10:22:35: size 11: 1024 x 768 rates: 85 75 70 60 test-randr: 10:22:35: size 12: 832 x 624 rates: 75 test-randr: 10:22:35: size 13: 800 x 600 rates: 85 72 75 60 56 test-randr: 10:22:35: size 14: 640 x 480 rates: 85 75 73 60 test-randr: 10:22:35: size 15: 720 x 400 rates: 85 70 test-randr: 10:22:35: size 16: 640 x 400 rates: 85 test-randr: 10:22:35: size 17: 640 x 350 rates: 85 test-randr: 10:22:35: Output 0: VGA: connected (73) test-randr: 10:22:35: + CRTC 0 (73): 1200x1600+0+0 test-randr: 10:22:35: CRTC 1 (74): 0x0+0+0 test-randr: awaiting events... </quote> <quote src="driver/test-xinerama"> test-xinerama: 10:23:13: XineramaQueryExtension(dpy, ...) ==> 0, 0 test-xinerama: 10:23:13: XineramaIsActive(dpy) ==> True test-xinerama: 10:23:13: XineramaQueryVersion(dpy, ...) ==> 1, 1 test-xinerama: 10:23:13: 1 Xinerama screens test-xinerama: 10:23:13: screen 0: 1200x1600+0+0 </quote> so randr *still* thinks it's got a 1200x1600 screen ! But now it does something right that it got wrong before ! Eddy. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]