]> git.draconx.ca Git - gentoo-draconx.git/blobdiff - x11-base/xorg-server/files/0001-xfree86-Add-DontLie-server-flag.patch
xorg-server: Update DontLie patch for latest git.
[gentoo-draconx.git] / x11-base / xorg-server / files / 0001-xfree86-Add-DontLie-server-flag.patch
diff --git a/x11-base/xorg-server/files/0001-xfree86-Add-DontLie-server-flag.patch b/x11-base/xorg-server/files/0001-xfree86-Add-DontLie-server-flag.patch
new file mode 100644 (file)
index 0000000..e71ee5d
--- /dev/null
@@ -0,0 +1,128 @@
+From db1abe87be5b4bbe7db906ac3d56c69cf3785b23 Mon Sep 17 00:00:00 2001
+From: Nick Bowler <nbowler@draconx.ca>
+Date: Wed, 6 Jan 2010 10:42:17 -0500
+Subject: [PATCH] xfree86: Add DontLie server flag.
+
+Since commit fff00df94d7ebd18a8e24537ec96073717375a3f, RandR 1.2 drivers
+lie about the resolution of the attached screen by default.  When the
+reported resolution is wrong, fonts and other UI elements that use
+physical units are not sized correctly.
+
+This patch adds a new server flag, DontLie, which encourages the server
+to be honest by default.
+
+Signed-off-by: Nick Bowler <nbowler@draconx.ca>
+---
+ hw/xfree86/common/xf86Config.c  |    6 +++++-
+ hw/xfree86/common/xf86Globals.c |    1 +
+ hw/xfree86/common/xf86Privstr.h |    2 ++
+ hw/xfree86/man/xorg.conf.man    |    6 ++++++
+ hw/xfree86/modes/xf86RandR12.c  |   12 ++++++++++++
+ 5 files changed, 26 insertions(+), 1 deletions(-)
+
+diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
+index 114bdc3..22391df 100644
+--- a/hw/xfree86/common/xf86Config.c
++++ b/hw/xfree86/common/xf86Config.c
+@@ -690,7 +690,8 @@ typedef enum {
+     FLAG_AUTO_ENABLE_DEVICES,
+     FLAG_GLX_VISUALS,
+     FLAG_DRI2,
+-    FLAG_USE_SIGIO
++    FLAG_USE_SIGIO,
++    FLAG_DONTLIE
+ } FlagValues;
+ /**
+@@ -752,6 +753,8 @@ static OptionInfoRec FlagOptions[] = {
+       {0}, FALSE },
+   { FLAG_USE_SIGIO,           "UseSIGIO",                     OPTV_BOOLEAN,
+       {0}, FALSE },
++  { FLAG_DONTLIE,             "DontLie",                      OPTV_BOOLEAN,
++      {0}, FALSE },
+   { -1,                               NULL,                           OPTV_NONE,
+       {0}, FALSE },
+ };
+@@ -809,6 +812,7 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
+     xf86GetOptValBool(FlagOptions, FLAG_DONTVTSWITCH, &xf86Info.dontVTSwitch);
+     xf86GetOptValBool(FlagOptions, FLAG_DONTZAP, &xf86Info.dontZap);
+     xf86GetOptValBool(FlagOptions, FLAG_DONTZOOM, &xf86Info.dontZoom);
++    xf86GetOptValBool(FlagOptions, FLAG_DONTLIE, &xf86Info.dontLie);
+     xf86GetOptValBool(FlagOptions, FLAG_IGNORE_ABI, &xf86Info.ignoreABI);
+     if (xf86Info.ignoreABI) {
+diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c
+index 16d5557..b0f602a 100644
+--- a/hw/xfree86/common/xf86Globals.c
++++ b/hw/xfree86/common/xf86Globals.c
+@@ -105,6 +105,7 @@ xf86InfoRec xf86Info = {
+     .dontVTSwitch               = FALSE,
+     .dontZap                    = FALSE,
+     .dontZoom                   = FALSE,
++    .dontLie                    = FALSE,
+     .notrapSignals              = FALSE,
+     .caughtSignal               = FALSE,
+     .currentScreen              = NULL,
+diff --git a/hw/xfree86/common/xf86Privstr.h b/hw/xfree86/common/xf86Privstr.h
+index 608f9bd..d05f206 100644
+--- a/hw/xfree86/common/xf86Privstr.h
++++ b/hw/xfree86/common/xf86Privstr.h
+@@ -68,6 +68,8 @@ typedef struct {
+     Bool              dontVTSwitch;
+     Bool              dontZap;
+     Bool              dontZoom;
++    Bool              dontLie;
++
+     Bool              notrapSignals;  /* don't exit cleanly - die at fault */
+     Bool              caughtSignal;
+diff --git a/hw/xfree86/man/xorg.conf.man b/hw/xfree86/man/xorg.conf.man
+index f406f82..a9d418c 100644
+--- a/hw/xfree86/man/xorg.conf.man
++++ b/hw/xfree86/man/xorg.conf.man
+@@ -544,6 +544,12 @@ When this option is enabled, those key sequences have no special meaning
+ and are passed to clients.
+ Default: off.
+ .TP 7
++.BI "Option \*qDontLie\*q  \*q" boolean \*q
++This option suggests that the server should avoid lying whenever possible.
++Currently this means that RandR 1.2 drivers will try to compute the proper DPI
++instead of making it up.
++Default: off.
++.TP 7
+ .BI "Option \*qDisableVidModeExtension\*q  \*q" boolean \*q
+ This disables the parts of the VidMode extension used by the xvidtune client
+ that can be used to change the video modes.
+diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
+index cb20d1c..65da9bf 100644
+--- a/hw/xfree86/modes/xf86RandR12.c
++++ b/hw/xfree86/modes/xf86RandR12.c
+@@ -805,6 +805,7 @@ xf86RandR12CreateScreenResources (ScreenPtr pScreen)
+       else
+       {
+           xf86OutputPtr   output = xf86CompatOutput(pScrn);
++          xf86CrtcPtr     crtc   = output->crtc;
+           if (output &&
+               output->conf_monitor &&
+@@ -817,6 +818,17 @@ xf86RandR12CreateScreenResources (ScreenPtr pScreen)
+               mmWidth = output->conf_monitor->mon_width;
+               mmHeight = output->conf_monitor->mon_height;
+           }
++          else if (xf86Info.dontLie && crtc && crtc->mode.HDisplay &&
++                   output->mm_width && output->mm_height)
++          {
++              /*
++               * If the output has a mode and a declared size, use that
++               * to scale the screen size
++               */
++              DisplayModePtr  mode = &crtc->mode;
++              mmWidth = output->mm_width * width / mode->HDisplay;
++              mmHeight = output->mm_height * height / mode->VDisplay;
++          }
+           else
+           {
+               /*
+-- 
+1.7.3.4
+