Package: xserver-xfree86
Version: 4.3.0.dfsg.1-5
Severity: normal
Tags: upstream fixed-upstream patch

Note to self: set submitter to "Thomas Winischhofer
<[EMAIL PROTECTED]>" after BTS acks.

----- Forwarded message from Thomas Winischhofer <[EMAIL PROTECTED]> -----

From: Thomas Winischhofer <[EMAIL PROTECTED]>
To: Fabio Massimo Di Nitto <[EMAIL PROTECTED]>
Cc: [EMAIL PROTECTED], debian-x@lists.debian.org
Subject: RandR fix for next revision
Date: Sat, 19 Jun 2004 02:32:10 +0200
Message-ID: <[EMAIL PROTECTED]>
User-Agent: Mozilla Thunderbird 0.5 (X11/20040306)
X-Spam-Status: No, hits=-4.9 required=4.0 tests=BAYES_00 autolearn=ham 
        version=2.63


Hi,

please apply the attached patch to your tree. It fixes the following 
issues with the RandR extension (name of submitter in parentheses):

568. The call to xf86RandRSetMode() from f86RandRCreateScreenResources()
     doesn't appear to be necessary.  Removing it restores the
     documented ViewPort behaviour when RandR is enabled (David Dawes).

Applied: Fri Nov 7 23:40:13 2003 UTC (7 months, 1 week ago) by dawes

562. Fix RandR initialization problem when default screen resolution is
     different from the virtual resolution. (Bugzilla #853, Bob
     Paauwe).

Applied: Thu Nov 6 13:03:10 2003 UTC (7 months, 1 week ago) by alanh

338. Fixed rounding of refresh rate in RandR, updated Xrandr man page
     (BugzillaR #527, Egbert Eich).

Applied Mon Aug 4 09:32:24 2003 UTC (10 months, 2 weeks ago) by eich

Of specific interest is 562. This lead to a BadImplementation error when 
calling GetScreenInfo if the virtual screen is larger than the current 
display mode. Easy to reproduce: Press CTRL-ALT-+ to switch to a smaller 
mode and start the xrandr program. You will receive a X Window system 
error from the RandR extension (major 154, minor 5). Other programs 
querying the RandR extension behave in the same way.

All these patches were commited to the XFree86 CVS before the license 
change occured. Hence, that should not be a problem.

Here is a direct link to the history of these changes:

http://cvsweb.xfree86.org/cvsweb/xc/programs/Xserver/hw/xfree86/common/xf86RandR.c

Fix tested and found working by me.

Thomas

-- 
Thomas Winischhofer
Vienna/Austria
thomas AT winischhofer DOT net          *** http://www.winischhofer.net/
twini AT xfree86 DOT org

--- programs/Xserver/hw/xfree86/common/xf86RandR.c-old  2003-03-02 
05:27:23.000000000 +0100
+++ programs/Xserver/hw/xfree86/common/xf86RandR.c      2004-04-23 
21:20:32.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86RandR.c,v 1.4 
2003/02/13 10:49:38 eich Exp $
+ * $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86RandR.c,v 1.7tsi Exp $
  *
  * Copyright ? 2002 Keith Packard, member of The XFree86 Project, Inc.
  *
@@ -48,9 +49,9 @@
 xf86RandRModeRefresh (DisplayModePtr mode)
 {
     if (mode->VRefresh)
-       return (int) mode->VRefresh;
+       return (int) (mode->VRefresh + 0.5);
     else
-       return (int) (mode->Clock * 1000.0 / mode->HTotal / mode->VTotal);
+       return (int) (mode->Clock * 1000.0 / mode->HTotal / mode->VTotal + 0.5);
 }
 
 static Bool
@@ -60,7 +61,6 @@
     ScrnInfoPtr                    scrp = XF86SCRNINFO(pScreen);
     XF86RandRInfoPtr       randrp = XF86RANDRINFO(pScreen);
     DisplayModePtr         mode;
-    Bool                   reportVirtual = TRUE;
     int                            refresh0 = 60;
     
     *rotations = RR_Rotate_0;
@@ -75,9 +75,6 @@
                                pScreen->mmWidth, pScreen->mmHeight);
        if (!pSize)
            return FALSE;
-       if (mode->HDisplay == randrp->virtualX && 
-           mode->VDisplay == randrp->virtualY)
-           reportVirtual = FALSE;
        RRRegisterRate (pScreen, pSize, refresh);
        if (mode == scrp->currentMode &&
            mode->HDisplay == pScreen->width && mode->VDisplay == 
pScreen->height)
@@ -85,13 +82,14 @@
        if (mode->next == scrp->modes)
            break;
     }
-    if (reportVirtual)
+    if (scrp->currentMode->HDisplay != randrp->virtualX ||
+       scrp->currentMode->VDisplay != randrp->virtualY)
     {
        mode = scrp->modes;
        pSize = RRRegisterSize (pScreen,
                                randrp->virtualX, randrp->virtualY,
-                               pScreen->mmWidth * randrp->virtualX / 
mode->HDisplay,
-                               pScreen->mmHeight * randrp->virtualY / 
mode->VDisplay);
+                               pScreen->mmWidth * randrp->virtualX / 
scrp->currentMode->HDisplay,
+                               pScreen->mmHeight * randrp->virtualY / 
scrp->currentMode->VDisplay);
        if (!pSize)
            return FALSE;
        RRRegisterRate (pScreen, pSize, refresh0);
@@ -202,17 +200,21 @@
 static Bool
 xf86RandRCreateScreenResources (ScreenPtr pScreen)
 {
-    ScrnInfoPtr                    scrp = XF86SCRNINFO(pScreen);
     XF86RandRInfoPtr       randrp = XF86RANDRINFO(pScreen);
+#if 0
+    ScrnInfoPtr                    scrp = XF86SCRNINFO(pScreen);
     DisplayModePtr         mode;
+#endif
 
     pScreen->CreateScreenResources = randrp->CreateScreenResources;
     if (!(*pScreen->CreateScreenResources) (pScreen))
        return FALSE;
     
+#if 0
     mode = scrp->currentMode;
     if (mode)
        xf86RandRSetMode (pScreen, mode, TRUE);
+#endif
     
     return TRUE;
 }


----- End forwarded message -----

-- 
G. Branden Robinson                |
Debian GNU/Linux                   |      Ignorantia judicis est calamitas
[EMAIL PROTECTED]                 |      innocentis.
http://people.debian.org/~branden/ |

Attachment: signature.asc
Description: Digital signature

Reply via email to