[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xorg-server: Changes to 'upstream-unstable'



 config/config.c                |   32 ++++++++++++++++
 configure.ac                   |    6 +--
 dix/getevents.c                |   80 ++++++++++-------------------------------
 hw/xfree86/common/xf86Config.c |    2 -
 hw/xfree86/common/xf86DPMS.c   |    2 -
 hw/xwin/Makefile.am            |    2 -
 include/hotplug.h              |    4 +-
 os/log.c                       |    2 -
 8 files changed, 61 insertions(+), 69 deletions(-)

New commits:
commit 8b36e1ec8dd9f53e9f4e10422c2100844e9e549c
Author: Keith Packard <keithp@keithp.com>
Date:   Thu Jul 17 00:03:33 2014 -0700

    Update to version 1.16.0
    
    Signed-off-by: Keith Packard <keithp@keithp.com>

diff --git a/configure.ac b/configure.ac
index c214638..1c327fd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,9 +26,9 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.60)
-AC_INIT([xorg-server], 1.15.99.904, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="2014-07-07"
-RELEASE_NAME="Netarts Bay Oysters"
+AC_INIT([xorg-server], 1.16.0, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+RELEASE_DATE="2014-07-16"
+RELEASE_NAME="Marionberry Pie"
 AC_CONFIG_SRCDIR([Makefile.am])
 AC_CONFIG_MACRO_DIR([m4])
 AM_INIT_AUTOMAKE([foreign dist-bzip2])

commit 4dbb641bb2d4037f107b58b31e80963dc8b72c0e
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Mon Jul 14 14:01:47 2014 +0200

    config_odev_add_attribute*: Check for right attribute type
    
    Don't allow setting string attributes to integers and vice versa.
    
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Reviewed-by: Keith Packard <keithp@keithp.com>
    Signed-off-by: Keith Packard <keithp@keithp.com>

diff --git a/config/config.c b/config/config.c
index 5514516..a26d835 100644
--- a/config/config.c
+++ b/config/config.c
@@ -172,12 +172,38 @@ config_odev_find_or_add_attribute(struct OdevAttributes *attribs, int attrib)
     return oa;
 }
 
+static int config_odev_get_attribute_type(int attrib)
+{
+    switch (attrib) {
+    case ODEV_ATTRIB_PATH:
+    case ODEV_ATTRIB_SYSPATH:
+    case ODEV_ATTRIB_BUSID:
+        return ODEV_ATTRIB_STRING;
+    case ODEV_ATTRIB_FD:
+    case ODEV_ATTRIB_MAJOR:
+    case ODEV_ATTRIB_MINOR:
+        return ODEV_ATTRIB_INT;
+    case ODEV_ATTRIB_DRIVER:
+        return ODEV_ATTRIB_STRING;
+    default:
+        LogMessage(X_ERROR, "Error %s called for unknown attribute %d\n",
+                   __func__, attrib);
+        return ODEV_ATTRIB_UNKNOWN;
+    }
+}
+
 Bool
 config_odev_add_attribute(struct OdevAttributes *attribs, int attrib,
                           const char *attrib_name)
 {
     struct OdevAttribute *oa;
 
+    if (config_odev_get_attribute_type(attrib) != ODEV_ATTRIB_STRING) {
+        LogMessage(X_ERROR, "Error %s called for non string attrib %d\n",
+                   __func__, attrib);
+        return FALSE;
+    }
+
     oa = config_odev_find_or_add_attribute(attribs, attrib);
     free(oa->attrib_name);
     oa->attrib_name = XNFstrdup(attrib_name);
@@ -191,6 +217,12 @@ config_odev_add_int_attribute(struct OdevAttributes *attribs, int attrib,
 {
     struct OdevAttribute *oa;
 
+    if (config_odev_get_attribute_type(attrib) != ODEV_ATTRIB_INT) {
+        LogMessage(X_ERROR, "Error %s called for non integer attrib %d\n",
+                   __func__, attrib);
+        return FALSE;
+    }
+
     oa = config_odev_find_or_add_attribute(attribs, attrib);
     oa->attrib_value = attrib_value;
     oa->attrib_type = ODEV_ATTRIB_INT;
diff --git a/include/hotplug.h b/include/hotplug.h
index b2c0d78..4c2fa97 100644
--- a/include/hotplug.h
+++ b/include/hotplug.h
@@ -32,7 +32,7 @@ extern _X_EXPORT void config_pre_init(void);
 extern _X_EXPORT void config_init(void);
 extern _X_EXPORT void config_fini(void);
 
-enum { ODEV_ATTRIB_STRING, ODEV_ATTRIB_INT };
+enum { ODEV_ATTRIB_UNKNOWN = -1, ODEV_ATTRIB_STRING = 0, ODEV_ATTRIB_INT };
 
 struct OdevAttribute {
     struct xorg_list member;

commit 25eca7ce35973577c8d85704c270f7fb53e6732e
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Mon Jul 14 14:01:46 2014 +0200

    Fix ODEV_ATTRIB_DRIVER overlapping with ODEV_ATTRIB_FD
    
    Looks like the value of ODEV_ATTRIB_DRIVER was not updated when the patch
    adding it got rebased on top of a newer server version.
    
    This fixes the xserver crashing when systemd-logind integration is used.
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1118540
    
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Reviewed-by: Keith Packard <keithp@keithp.com>
    Signed-off-by: Keith Packard <keithp@keithp.com>

diff --git a/include/hotplug.h b/include/hotplug.h
index c4268a0..b2c0d78 100644
--- a/include/hotplug.h
+++ b/include/hotplug.h
@@ -88,7 +88,7 @@ config_odev_free_attributes(struct OdevAttributes *attribs);
 /* Minor number of the device node pointed to by ODEV_ATTRIB_PATH */
 #define ODEV_ATTRIB_MINOR 6
 /* kernel driver name */
-#define ODEV_ATTRIB_DRIVER 4
+#define ODEV_ATTRIB_DRIVER 7
 
 typedef void (*config_odev_probe_proc_ptr)(struct OdevAttributes *attribs);
 void config_odev_probe(config_odev_probe_proc_ptr probe_callback);

commit 9a19bf06b5b409fa0d5b5932e29cd4c5545052c5
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon Jul 14 15:05:58 2014 +1000

    Revert "dix: fix up coordinate scaling when external monitors are present"
    
    This reverts commit d90b5f83010248be65b2039b0b2d0b9e6a4e93cf.
    
    Reverting for two reasons:
    * the scaling does not work on devices that don't advertise resolution, and
      the default resolution used (100 units/mm) is higher than most devices,
      resulting in a significant slowdown of the touchpads.
    * the scaling is still affected by resolution changing. The patch worked
      before acceleration but since it maps into resolution-dependent dx/dy
      coordinates the acceleration may distort the movement after the fact. So the
      same input data generates different movements depending on the resolution.
      This can't easily be fixed for all affected devices as synaptics has its own
      velocity calculation method whereas wacom doesn't. So anything in the server
      won't work for both at the same time.
    
    Revert this for now, until a more integrated solution can be implemented.

diff --git a/dix/getevents.c b/dix/getevents.c
index d68fa96..ffa89fa 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -770,65 +770,27 @@ add_to_scroll_valuator(DeviceIntPtr dev, ValuatorMask *mask, int valuator, doubl
 }
 
 
-/* FIXME: relative events from devices with absolute axis ranges is
-   fundamentally broken. We map the device coordinate range into the screen
-   range, but don't really account for device resolution in that.
-
-   what we do here is a hack to make touchpads usable. for a given relative
-   motion vector in device coordinates:
-   1. calculate physical movement on the device in metres
-   2. calculate pixel vector that is the same physical movement on the
-      screen (times some magic number to provide sensible base speed)
-   3. calculate what percentage this vector is of the current screen
-      width/height
-   4. calculate equivalent vector in % on the device's min/max axis range
-   5. Use that device vector as the actual motion vector
-
-   e.g. 10/50mm on the device, 10/50mm on the screen are 30/100 pixels,
-   30/100 pixels are 1/3% of the width, 1/3% of the device is a vector of
-   20/80 -> use 20/80 as dx/dy.
-
-   dx/dy is then applied to the current position in device coordinates,
-   mapped to screen coordinates and thus the movement on the screen reflects
-   the motion direction on the device.
- */
 static void
 scale_for_device_resolution(DeviceIntPtr dev, ValuatorMask *mask)
 {
-    double x, y;
+    double y;
     ValuatorClassPtr v = dev->valuator;
     int xrange = v->axes[0].max_value - v->axes[0].min_value + 1;
     int yrange = v->axes[1].max_value - v->axes[1].min_value + 1;
 
-    /* Assume 100 units/m for devices without resolution */
-    int xres = 100000, yres = 100000;
-
-    /* If we have multiple screens with different dpi, it gets complicated:
-       we have to map which screen we're on and then take the dpi of that
-       screen to be somewhat accurate.  */
-    const ScreenPtr s = screenInfo.screens[0];
-    const double screen_res = 1000.0 * s->width/s->mmWidth; /* units/m */
+    double screen_ratio = 1.0 * screenInfo.width/screenInfo.height;
+    double device_ratio = 1.0 * xrange/yrange;
+    double resolution_ratio = 1.0;
+    double ratio;
 
-    /* some magic multiplier, so unaccelerated movement of x mm on the
-       device reflects x * magic mm on the screen */
-    const double magic = 4;
+    if (!valuator_mask_fetch_double(mask, 1, &y))
+        return;
 
-    if (v->axes[0].resolution != 0 && v->axes[1].resolution != 0) {
-        xres = v->axes[0].resolution;
-        yres = v->axes[1].resolution;
-    }
+    if (v->axes[0].resolution != 0 && v->axes[1].resolution != 0)
+        resolution_ratio = 1.0 * v->axes[0].resolution/v->axes[1].resolution;
 
-    if (valuator_mask_isset(mask, 0)) {
-        x = valuator_mask_get_double(mask, 0);
-        x = magic * x/xres * screen_res/screenInfo.width * xrange;
-        valuator_mask_set_double(mask, 0, x);
-    }
-
-    if (valuator_mask_isset(mask, 1)) {
-        y = valuator_mask_get_double(mask, 1);
-        y = magic * y/yres * screen_res/screenInfo.height * yrange;
-        valuator_mask_set_double(mask, 1, y);
-    }
+    ratio = device_ratio/resolution_ratio/screen_ratio;
+    valuator_mask_set_double(mask, 1, y / ratio);
 }
 
 /**
@@ -842,6 +804,15 @@ moveRelative(DeviceIntPtr dev, int flags, ValuatorMask *mask)
 {
     int i;
     Bool clip_xy = IsMaster(dev) || !IsFloating(dev);
+    ValuatorClassPtr v = dev->valuator;
+
+    /* for abs devices in relative mode, we've just scaled wrong, since we
+       mapped the device's shape into the screen shape. Undo this. */
+    if ((flags & POINTER_ABSOLUTE) == 0 && v && v->numAxes > 1 &&
+        v->axes[0].min_value < v->axes[0].max_value &&
+        v->axes[1].min_value < v->axes[1].max_value) {
+        scale_for_device_resolution(dev, mask);
+    }
 
     /* calc other axes, clip, drop back into valuators */
     for (i = 0; i < valuator_mask_size(mask); i++) {
@@ -1470,21 +1441,10 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type,
             set_raw_valuators(raw, &mask, raw->valuators.data);
     }
     else {
-        ValuatorClassPtr v = pDev->valuator;
-
         transformRelative(pDev, &mask);
 
-        /* for abs devices in relative mode, we've just scaled wrong, since we
-           mapped the device's shape into the screen shape. Undo this. */
-        if (v && v->numAxes > 1 &&
-            v->axes[0].min_value < v->axes[0].max_value &&
-            v->axes[1].min_value < v->axes[1].max_value) {
-            scale_for_device_resolution(pDev, &mask);
-        }
-
         if (flags & POINTER_ACCELERATE)
             accelPointer(pDev, &mask, ms);
-
         if ((flags & POINTER_NORAW) == 0 && raw)
             set_raw_valuators(raw, &mask, raw->valuators.data);
 

commit acc0b5edd1dc560b5c39dc44872b46581ec23903
Author: Aaron Plattner <aplattner@nvidia.com>
Date:   Fri Jul 11 15:56:35 2014 -0700

    xfree86: Only support one sysconfigdir
    
    When the X server is compiled with --prefix set to something other than /usr,
    then it ends up with a nonstandard sysconfigdir in its .pc file.  This causes
    various other components to install their xorg.conf.d snippets there.
    
    However, the X server first looks for /usr/share/X11/xorg.conf.d before looking
    in sysconfigdir.  That means that if the system administrator installed anything
    that created that path, the user's custom sysconfigdir is not searched.
    
    Rather than doing that, just look in the configured sysconfdir and nowhere else.
    
    Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
    Reviewed-by: Julien Cristau <jcristau@debian.org>
    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index 481674d..779ba6f 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -103,7 +103,7 @@
 					"/etc/X11/%X," "%C/X11/%X"
 #endif
 #ifndef SYS_CONFIGDIRPATH
-#define SYS_CONFIGDIRPATH	"/usr/share/X11/%X," "%D/X11/%X"
+#define SYS_CONFIGDIRPATH	"%D/X11/%X"
 #endif
 #ifndef PROJECTROOT
 #define PROJECTROOT	"/usr/X11R6"

commit 578b9283bcc129d0a35fabe2637c7622085ef1e8
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu Jul 10 10:39:50 2014 +1000

    xfree86: don't force the screensaver off on DPMS unblank, merely suggest it
    
    Commit 41d4beb2616ceb3f1a1b8694733e85bae70de59a added symmetry to the
    screensaver/DPMS invocations so that one (en|dis)ables the other. Having
    dependencies between DPMS and the screensaver is subject to further arguments,
    but in this particular case using SCREENSAVER_FORCER is detrimental.
    SCREENSAVER_FORCER(ScreenSaverReset) resets the idle time for all
    devices on DPMS unblank.
    
    It prevents at least one use-case that GNOME tries to implement:
    GNOME displays a notification before suspending. If the display is
    currently blanked, GNOME lights it up to display the message. With the
    original patch in place DPMS unblank also resets the device idle times, thus
    restarting the timeout ad infinitum.
    
    Switch this to a more suggestive SCREENSAVER_OFF(ScreenSaverReset). This keeps
    the symmetry in blanking mode (DPMS and screensaver turn each other on/off as
    expected) but does not reset the idle time on the devices.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=731241
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Reviewed-By: Egbert Eich <eich@freedesktop.org>

diff --git a/hw/xfree86/common/xf86DPMS.c b/hw/xfree86/common/xf86DPMS.c
index 14d1f45..2b5a3ed 100644
--- a/hw/xfree86/common/xf86DPMS.c
+++ b/hw/xfree86/common/xf86DPMS.c
@@ -166,7 +166,7 @@ DPMSSet(ClientPtr client, int level)
                 return rc;
         }
     } else if (!xf86IsUnblank(screenIsSaved)) {
-        rc = dixSaveScreens(client, SCREEN_SAVER_FORCER, ScreenSaverReset);
+        rc = dixSaveScreens(client, SCREEN_SAVER_OFF, ScreenSaverReset);
         if (rc != Success)
             return rc;
     }

commit daa1a9d22db8e83d1933d8403acf72626199ee2a
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon Jul 7 08:27:44 2014 +1000

    os: prevent negative array index access (#80890)
    
    If an empty string is provided to LogMessageVerbSigSafe, the length of the
    printed string is 0.
    
    Read-only access only and the only effect it had was adding a linebreak or not.
    
    X.Org Bug 80890 <http://bugs.freedesktop.org/show_bug.cgi?id=80890>
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/os/log.c b/os/log.c
index a368569..2a721b9 100644
--- a/os/log.c
+++ b/os/log.c
@@ -697,7 +697,7 @@ LogVMessageVerbSigSafe(MessageType type, int verb, const char *format, va_list a
     if (sizeof(buf) - len == 1)
         buf[len - 1] = '\n';
 
-    newline = (buf[len - 1] == '\n');
+    newline = (len > 0 && buf[len - 1] == '\n');
     LogSWrite(verb, buf, len, newline);
 }
 

commit a5499870e2f88822f52b1b54cad0db69856597c0
Author: Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
Date:   Sun Apr 6 04:47:15 2014 -0500

    hw/xwin: link dynamically and export symbols
    
    With my patch to fix shared libXfont to work correctly on Cygwin/Win32,
    there is no need for -static anymore.  But, XWin.exe must export its
    symbols in order for them to override libXfont's stubs.
    
    Signed-off-by: Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
    Reviewed-by: Jon TURNEY <jon.turney@dronecode.org.uk>

diff --git a/hw/xwin/Makefile.am b/hw/xwin/Makefile.am
index cf42cfd..4ee9632 100644
--- a/hw/xwin/Makefile.am
+++ b/hw/xwin/Makefile.am
@@ -155,7 +155,7 @@ XWIN_LIBS += 	$(top_builddir)/pseudoramiX/libPseudoramiX.la \
                 $(top_builddir)/Xi/libXistubs.la
 XWin_DEPENDENCIES = $(MULTIWINDOWEXTWM_LIBS) $(XWIN_GLX_LIBS) $(XWIN_LIBS) $(XSERVER_LIBS)
 XWin_LDADD = $(MULTIWINDOW_LIBS) $(MULTIWINDOWEXTWM_LIBS) $(XWIN_GLX_LIBS) $(XWIN_GLX_LINK_FLAGS) $(XWIN_LIBS) $(MAIN_LIB) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) $(XWIN_SYS_LIBS)
-XWin_LDFLAGS = -mwindows -static -Wl,--disable-stdcall-fixup
+XWin_LDFLAGS = -mwindows -Wl,--disable-stdcall-fixup $(LD_EXPORT_SYMBOLS_FLAG)
 
 
 .rc.o:


Reply to: