Package: xscreensaver
Version: 5.05-1
Followup-For: Bug #471920

Ok, I have narrowed down the bug to the new xinerama "sanity" code
introduced in 5.05. I'm using the nvidia binary driver in "clone" mode
(same picture displayed to two monitors). It seems that in this case,
the nvidia driver reports two xinerama screens, and that
check_xinerama_sanity() marks both of those screens as "insane" (one
being detected as "enclosed" the other one as "duplicated"). The end
result is that no usable screens are found, which obviously creates lots
of problems for the rest of the code (in the previously submitted
backtrace, a null screen pointer is passed to an xlib function).  The
bug does not occur if I disable "clone" mode and use only one monitor. A
rough attempt at a fix is attached: while looping through available
xinerama screens, if we do not find a "sane" one, we use the last one.
It works for me(tm) although I have not tested it much.
--- xscreensaver.c.orig	2008-03-01 05:05:12.000000000 +0100
+++ xscreensaver.c	2008-03-22 09:26:39.000000000 +0100
@@ -899,7 +899,7 @@
           check_xinerama_sanity (nscreens, si->prefs.verbose_p, xsi);
           for (i = 0; i < nscreens; i++)
             {
-              if (xsi[i].screen_number < 0)  /* deemed insane */
+              if (xsi[i].screen_number < 0 && i < nscreens-1)  /* deemed insane */
                 continue;
               si->screens[j].x      = xsi[i].x_org;
               si->screens[j].y      = xsi[i].y_org;

Reply via email to