xserver: Branch 'master' - 14 commits

Keith Packard keithp at kemper.freedesktop.org
Fri Jul 1 15:47:41 PDT 2011


 Xext/xtest.c                            |    9 +-
 dix/dixutils.c                          |   10 +-
 dix/getevents.c                         |   25 ++++-
 dix/grabs.c                             |  112 +++++++++++++++++++++++++
 dix/window.c                            |  141 +++++++++++++++++++++++++-------
 exa/exa.c                               |    4 
 exa/exa_accel.c                         |    6 -
 exa/exa_classic.c                       |    2 
 exa/exa_driver.c                        |    2 
 exa/exa_migration_classic.c             |    4 
 exa/exa_migration_mixed.c               |    2 
 exa/exa_mixed.c                         |    2 
 exa/exa_unaccel.c                       |    2 
 hw/dmx/dmxinput.c                       |    1 
 hw/dmx/input/dmxinputinit.c             |    3 
 hw/kdrive/ephyr/ephyr.c                 |    2 
 hw/kdrive/ephyr/ephyr.h                 |    2 
 hw/kdrive/ephyr/ephyr_draw.c            |    2 
 hw/kdrive/ephyr/ephyrinit.c             |    3 
 hw/kdrive/ephyr/hostx.c                 |    2 
 hw/kdrive/ephyr/hostx.h                 |    2 
 hw/kdrive/ephyr/os.c                    |    2 
 hw/kdrive/fake/fakeinit.c               |    1 
 hw/kdrive/fake/kbd.c                    |    2 
 hw/kdrive/fbdev/fbdev.c                 |    2 
 hw/kdrive/fbdev/fbdev.h                 |    2 
 hw/kdrive/fbdev/fbinit.c                |    3 
 hw/kdrive/linux/keyboard.c              |    8 -
 hw/kdrive/linux/linux.c                 |    2 
 hw/kdrive/linux/mouse.c                 |    2 
 hw/kdrive/linux/ps2.c                   |    2 
 hw/kdrive/linux/tslib.c                 |   10 +-
 hw/kdrive/src/kcmap.c                   |    2 
 hw/kdrive/src/kdrive.h                  |    4 
 hw/kdrive/src/kinfo.c                   |    2 
 hw/kdrive/src/kinput.c                  |   11 +-
 hw/kdrive/src/kshadow.c                 |    2 
 hw/vfb/InitInput.c                      |    1 
 hw/xfree86/common/xf86Init.c            |    1 
 hw/xfree86/dixmods/xkbPrivate.c         |   15 +++
 hw/xfree86/dri2/dri2.c                  |    1 
 hw/xfree86/exa/examodule.c              |    2 
 hw/xfree86/modes/xf86Modes.h            |    2 
 hw/xfree86/modes/xf86cvt.c              |    4 
 hw/xfree86/os-support/solaris/sun_agp.c |    4 
 hw/xnest/Init.c                         |    1 
 hw/xquartz/darwin.c                     |    4 
 hw/xquartz/darwinEvents.c               |    4 
 hw/xquartz/darwinEvents.h               |    1 
 hw/xquartz/darwinXinput.c               |    5 -
 hw/xwin/InitInput.c                     |    1 
 include/dixgrabs.h                      |    3 
 include/input.h                         |    9 +-
 include/window.h                        |    2 
 mi/mipointer.c                          |    2 
 miext/shadow/shadow.c                   |    2 
 test/Makefile.am                        |    1 
 test/xi2/protocol-eventconvert.c        |   18 ++--
 58 files changed, 370 insertions(+), 108 deletions(-)

New commits:
commit d4096abb591353405417e53816e5c46e904e7b25
Merge: 61f87a7... 87d4f90...
Author: Keith Packard <keithp at keithp.com>
Date:   Fri Jul 1 15:45:45 2011 -0700

    Merge remote-tracking branch 'whot/for-keith'

commit 87d4f90bfcb509471ac9e7886e14a92b33223fd7
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Jun 27 09:10:42 2011 +1000

    input: free the EQ allocated memory on shutdown (#38634)
    
    mieqFini() already does the right thing, but it needs to be called by the
    various DDXs and the XTest Extension.
    
    X.Org Bug 38634 <http://bugs.freedesktop.org/show_bug.cgi?id=38634>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Acked-by: Jeremy Huddleston <jeremyhu at apple.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xext/xtest.c b/Xext/xtest.c
index daa6430..cc675c1 100644
--- a/Xext/xtest.c
+++ b/Xext/xtest.c
@@ -679,12 +679,19 @@ GetXTestDevice(DeviceIntPtr master)
     return NULL;
 }
 
+static void
+XTestExtensionTearDown(ExtensionEntry *e)
+{
+    FreeEventList(xtest_evlist, GetMaximumEventsNum());
+    xtest_evlist = NULL;
+}
+
 void
 XTestExtensionInit(INITARGS)
 {
     AddExtension(XTestExtensionName, 0, 0,
             ProcXTestDispatch, SProcXTestDispatch,
-            NULL, StandardMinorOpcode);
+            XTestExtensionTearDown, StandardMinorOpcode);
 
     xtest_evlist = InitEventList(GetMaximumEventsNum());
 }
diff --git a/hw/dmx/dmxinput.c b/hw/dmx/dmxinput.c
index 568bb88..f006af4 100644
--- a/hw/dmx/dmxinput.c
+++ b/hw/dmx/dmxinput.c
@@ -77,6 +77,7 @@ void InitInput(int argc, char **argv)
 
 void CloseInput(void)
 {
+    mieqFini();
 }
 
 /** Called from dix/dispatch.c in Dispatch() whenever input events
diff --git a/hw/kdrive/ephyr/ephyrinit.c b/hw/kdrive/ephyr/ephyrinit.c
index 7d4cadb..b674bb8 100644
--- a/hw/kdrive/ephyr/ephyrinit.c
+++ b/hw/kdrive/ephyr/ephyrinit.c
@@ -97,6 +97,7 @@ InitInput (int argc, char **argv)
 void
 CloseInput (void)
 {
+  KdCloseInput();
 }
 
 #ifdef DDXBEFORERESET
diff --git a/hw/kdrive/fake/fakeinit.c b/hw/kdrive/fake/fakeinit.c
index ba61959..e25093f 100644
--- a/hw/kdrive/fake/fakeinit.c
+++ b/hw/kdrive/fake/fakeinit.c
@@ -61,6 +61,7 @@ InitInput (int argc, char **argv)
 void
 CloseInput (void)
 {
+    KdCloseInput ();
 }
 
 #ifdef DDXBEFORERESET
diff --git a/hw/kdrive/fbdev/fbinit.c b/hw/kdrive/fbdev/fbinit.c
index 3b55ab1..1d66fce 100644
--- a/hw/kdrive/fbdev/fbinit.c
+++ b/hw/kdrive/fbdev/fbinit.c
@@ -47,6 +47,7 @@ InitInput (int argc, char **argv)
 void
 CloseInput (void)
 {
+    KdCloseInput ();
 }
 
 void
diff --git a/hw/kdrive/src/kdrive.h b/hw/kdrive/src/kdrive.h
index 847d89b..9ac5a19 100644
--- a/hw/kdrive/src/kdrive.h
+++ b/hw/kdrive/src/kdrive.h
@@ -500,6 +500,8 @@ KdScreenInfoDispose (KdScreenInfo *si);
 /* kinput.c */
 void
 KdInitInput(void);
+void
+KdCloseInput(void);
 
 void
 KdAddPointerDriver(KdPointerDriver *);
diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
index 7fa4a8f..c14dd82 100644
--- a/hw/kdrive/src/kinput.c
+++ b/hw/kdrive/src/kinput.c
@@ -1305,6 +1305,12 @@ KdInitInput (void)
     mieqInit();
 }
 
+void
+KdCloseInput (void)
+{
+    mieqFini();
+}
+
 /*
  * Middle button emulation state machine
  *
diff --git a/hw/vfb/InitInput.c b/hw/vfb/InitInput.c
index 60b59c1..8836bbd 100644
--- a/hw/vfb/InitInput.c
+++ b/hw/vfb/InitInput.c
@@ -148,4 +148,5 @@ InitInput(int argc, char *argv[])
 void
 CloseInput (void)
 {
+    mieqFini();
 }
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 53f763a..15fdbc3 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -825,6 +825,7 @@ void
 CloseInput (void)
 {
     config_fini();
+    mieqFini();
 }
 
 /*
diff --git a/hw/xnest/Init.c b/hw/xnest/Init.c
index ee74101..ea0669a 100644
--- a/hw/xnest/Init.c
+++ b/hw/xnest/Init.c
@@ -108,6 +108,7 @@ InitInput(int argc, char *argv[])
 void
 CloseInput(void)
 {
+  mieqFini();
 }
 
 /*
diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index 29ab836..73685b0 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -505,6 +505,10 @@ void InitInput( int argc, char **argv )
     QuartzInitInput(argc, argv);
 }
 
+void CloseInput(void)
+{
+    DarwinEQFini();
+}
 
 /*
  * DarwinAdjustScreenOrigins
diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c
index fe744b7..1f22099 100644
--- a/hw/xquartz/darwinEvents.c
+++ b/hw/xquartz/darwinEvents.c
@@ -371,6 +371,10 @@ Bool DarwinEQInit(void) {
     return TRUE;
 }
 
+Bool DarwinEQFini(void) {
+    mieqFini();
+}
+
 /*
  * ProcessInputEvents
  *  Read and process events from the event queue until it is empty.
diff --git a/hw/xquartz/darwinEvents.h b/hw/xquartz/darwinEvents.h
index 6769c8b..bd29d51 100644
--- a/hw/xquartz/darwinEvents.h
+++ b/hw/xquartz/darwinEvents.h
@@ -32,6 +32,7 @@
 #define XQUARTZ_VALUATOR_LIMIT (1 << 16)
 
 Bool DarwinEQInit(void);
+Bool DarwinEQFini(void);
 void DarwinEQEnqueue(const xEventPtr e);
 void DarwinEQPointerPost(DeviceIntPtr pDev, xEventPtr e);
 void DarwinEQSwitchScreen(ScreenPtr pScreen, Bool fromDIX);
diff --git a/hw/xquartz/darwinXinput.c b/hw/xquartz/darwinXinput.c
index 3ef34fe..94c31bb 100644
--- a/hw/xquartz/darwinXinput.c
+++ b/hw/xquartz/darwinXinput.c
@@ -149,8 +149,3 @@ DeleteInputDeviceRequest(DeviceIntPtr dev)
   DEBUG_LOG("DeleteInputDeviceRequest(%p)\n", dev);
 }
 
-void
-CloseInput (void)
-{
-}
-
diff --git a/hw/xwin/InitInput.c b/hw/xwin/InitInput.c
index 70578b1..bc48a93 100644
--- a/hw/xwin/InitInput.c
+++ b/hw/xwin/InitInput.c
@@ -156,4 +156,5 @@ InitInput (int argc, char *argv[])
 void
 CloseInput (void)
 {
+  mieqFini ();
 }
commit e084ac30b37c36016bb0dbb1b79e60a7799aee02
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Wed Mar 2 14:52:42 2011 +0000

    Input: Reset SD remainder when copying co-ords from MD
    
    In updateSlaveDeviceCoords, pDev->last.valuators was being copied from
    the master, but pDev->last.remainder wasn't.  Make sure we copy both, to
    avoid minor inconsistencies.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/getevents.c b/dix/getevents.c
index fbc15e0..a12462a 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -320,6 +320,8 @@ updateSlaveDeviceCoords(DeviceIntPtr master, DeviceIntPtr pDev)
      * position of the pointer */
     pDev->last.valuators[0] = master->last.valuators[0];
     pDev->last.valuators[1] = master->last.valuators[1];
+    pDev->last.remainder[0] = master->last.remainder[0];
+    pDev->last.remainder[1] = master->last.remainder[1];
 
     if (!pDev->valuator)
         return;
@@ -339,14 +341,19 @@ updateSlaveDeviceCoords(DeviceIntPtr master, DeviceIntPtr pDev)
     if ((lastSlave = master->last.slave) && lastSlave->valuator) {
         for (i = 2; i < pDev->valuator->numAxes; i++) {
             if (i >= lastSlave->valuator->numAxes)
+            {
                 pDev->last.valuators[i] = 0;
+                pDev->last.remainder[i] = 0;
+            }
             else
+            {
                 pDev->last.valuators[i] =
                     rescaleValuatorAxis(pDev->last.valuators[i],
                             pDev->last.remainder[i],
                             &pDev->last.remainder[i],
                             lastSlave->valuator->axes + i,
                             pDev->valuator->axes + i, 0);
+            }
         }
     }
 
commit 23a783278963919778d017965542e0f983814e37
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Jun 24 11:02:23 2011 +1000

    input: add POINTER_NORAW to avoid generation of raw events (#30068)
    
    RawEvents are supposed to be events coming from the driver. When warping the
    pointer, this should not generate a raw event.
    
    X.Org Bug 30068 <http://bugs.freedesktop.org/show_bug.cgi?id=30068>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/getevents.c b/dix/getevents.c
index c935c97..fbc15e0 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -1164,14 +1164,17 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, int buttons
 
     events = UpdateFromMaster(events, pDev, DEVCHANGE_POINTER_EVENT, &num_events);
 
-    raw = &events->raw_event;
-    events++;
-    num_events++;
-
     valuator_mask_copy(&mask, mask_in);
 
-    init_raw(pDev, raw, ms, type, buttons);
-    set_raw_valuators(raw, &mask, raw->valuators.data_raw);
+    if ((flags & POINTER_NORAW) == 0)
+    {
+	raw = &events->raw_event;
+	events++;
+	num_events++;
+
+	init_raw(pDev, raw, ms, type, buttons);
+	set_raw_valuators(raw, &mask, raw->valuators.data_raw);
+    }
 
     if (flags & POINTER_ABSOLUTE)
     {
@@ -1210,7 +1213,8 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, int buttons
         moveRelative(pDev, &x, &y, &mask);
     }
 
-    set_raw_valuators(raw, &mask, raw->valuators.data);
+    if ((flags & POINTER_NORAW) == 0)
+	set_raw_valuators(raw, &mask, raw->valuators.data);
 
     positionSprite(pDev, (flags & POINTER_ABSOLUTE) ? Absolute : Relative,
                    &x, &y, x_frac, y_frac, scr, &cx, &cy, &cx_frac, &cy_frac);
diff --git a/include/input.h b/include/input.h
index 56847ed..5377a0c 100644
--- a/include/input.h
+++ b/include/input.h
@@ -62,10 +62,11 @@ SOFTWARE.
 #define DEVICE_OFF	2
 #define DEVICE_CLOSE	3
 
-#define POINTER_RELATIVE (1 << 1)
-#define POINTER_ABSOLUTE (1 << 2)
-#define POINTER_ACCELERATE (1 << 3)
-#define POINTER_SCREEN (1 << 4) /* Data in screen coordinates */
+#define POINTER_RELATIVE	(1 << 1)
+#define POINTER_ABSOLUTE	(1 << 2)
+#define POINTER_ACCELERATE	(1 << 3)
+#define POINTER_SCREEN		(1 << 4)	/* Data in screen coordinates */
+#define POINTER_NORAW		(1 << 5)	/* Don't generate RawEvents */
 
 /*int constants for pointer acceleration schemes*/
 #define PtrAccelNoOp            0
diff --git a/mi/mipointer.c b/mi/mipointer.c
index 322be9e..7680ca1 100644
--- a/mi/mipointer.c
+++ b/mi/mipointer.c
@@ -683,7 +683,7 @@ miPointerMove (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
 
     valuator_mask_set_range(&mask, 0, 2, valuators);
     nevents = GetPointerEvents(events, pDev, MotionNotify, 0,
-                               POINTER_SCREEN | POINTER_ABSOLUTE, &mask);
+                               POINTER_SCREEN | POINTER_ABSOLUTE | POINTER_NORAW, &mask);
 
     OsBlockSignals();
 #ifdef XQUARTZ
commit 9444e40d77508d545e3c0a8123f61950c22d89fa
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Mar 1 11:11:22 2011 +0000

    Test: Input: Only ever set up to MAX_VALUATORS valuators
    
    Previously, the input tests were working up to sizeof(mask) * 8, which
    could be more than the arrays; the latter only being sized as
    MAX_VALUATORS.
    
    Hypothetically, if you were switching the stored valuator values to
    double instead of uint32_t, and you attempted to set the 39th member of
    a MAX_VALUATORS-sized (36) array, you'd probably end up smashing
    ev->key_repeat into oblivion and then tripping the check for invalid
    flags because you haven't yet put XIPointerEmulated into the valid flags
    for XI_Motion.  Probably.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/test/xi2/protocol-eventconvert.c b/test/xi2/protocol-eventconvert.c
index edba974..6e61d74 100644
--- a/test/xi2/protocol-eventconvert.c
+++ b/test/xi2/protocol-eventconvert.c
@@ -70,6 +70,8 @@ static void test_values_XIRawEvent(RawDeviceEvent *in, xXIRawEvent *out,
 
     for (i = 0; out->valuators_len && i < sizeof(in->valuators.mask) * 8; i++)
     {
+        if (i >= MAX_VALUATORS)
+            assert (!XIMaskIsSet(in->valuators.mask, i));
         assert (XIMaskIsSet(in->valuators.mask, i) == XIMaskIsSet(ptr, i));
         if (XIMaskIsSet(in->valuators.mask, i))
             bits_set++;
@@ -238,7 +240,7 @@ static void test_convert_XIRawEvent(void)
     test_XIRawEvent(&in);
 
     printf("Testing valuator masks\n");
-    for (i = 0; i < sizeof(in.valuators.mask) * 8; i++)
+    for (i = 0; i < MAX_VALUATORS; i++)
     {
         XISetMask(in.valuators.mask, i);
         test_XIRawEvent(&in);
@@ -257,7 +259,7 @@ static void test_convert_XIRawEvent(void)
         XIClearMask(in.valuators.mask, i);
     }
 
-    for (i = 0; i < sizeof(in.valuators.mask) * 8; i++)
+    for (i = 0; i < MAX_VALUATORS; i++)
     {
         XISetMask(in.valuators.mask, i);
         test_XIRawEvent(&in);
@@ -354,7 +356,7 @@ static void test_values_XIDeviceEvent(DeviceEvent *in, xXIDeviceEvent *out,
 
 
     valuators = 0;
-    for (i = 0; i < sizeof(in->valuators.mask) * 8; i++)
+    for (i = 0; i < MAX_VALUATORS; i++)
         if (XIMaskIsSet(in->valuators.mask, i))
             valuators++;
 
@@ -365,7 +367,9 @@ static void test_values_XIDeviceEvent(DeviceEvent *in, xXIDeviceEvent *out,
     for (i = 0; i < sizeof(in->valuators.mask) * 8 ||
                 i < (out->valuators_len * 4) * 8; i++)
     {
-        if (i > sizeof(in->valuators.mask) * 8)
+        if (i >= MAX_VALUATORS)
+            assert(!XIMaskIsSet(in->valuators.mask, i) && !XIMaskIsSet(ptr, i));
+        else if (i > sizeof(in->valuators.mask) * 8)
             assert(!XIMaskIsSet(ptr, i));
         else if (i > out->valuators_len * 4 * 8)
             assert(!XIMaskIsSet(in->valuators.mask, i));
@@ -610,14 +614,14 @@ static void test_convert_XIDeviceEvent(void)
     }
 
     printf("Testing valuator masks\n");
-    for (i = 0; i < sizeof(in.valuators.mask) * 8; i++)
+    for (i = 0; i < MAX_VALUATORS; i++)
     {
         XISetMask(in.valuators.mask, i);
         test_XIDeviceEvent(&in);
         XIClearMask(in.valuators.mask, i);
     }
 
-    for (i = 0; i < sizeof(in.valuators.mask) * 8; i++)
+    for (i = 0; i < MAX_VALUATORS; i++)
     {
         XISetMask(in.valuators.mask, i);
 
@@ -627,7 +631,7 @@ static void test_convert_XIDeviceEvent(void)
         XIClearMask(in.valuators.mask, i);
     }
 
-    for (i = 0; i < sizeof(in.valuators.mask) * 8; i++)
+    for (i = 0; i < MAX_VALUATORS; i++)
     {
         XISetMask(in.valuators.mask, i);
         test_XIDeviceEvent(&in);
commit 1e65a01cf73f1fbdfe0d63eaecea412cf8472cb4
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Fri Jun 17 16:28:05 2011 +0100

    Test: Ensure libxservertest gets relinked when necessary
    
    Similar to how we link Xorg, make sure that whenever any of the
    component libraries changes, we relink libxservertest and the tests.
    Not much use testing anything other than the actual source in your tree.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Dan Nicholson <dbn.lists at gmail.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/test/Makefile.am b/test/Makefile.am
index 370e09a..7ef408c 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -40,5 +40,6 @@ libxservertest_la_LIBADD = \
             $(top_builddir)/mi/libmi.la \
             $(top_builddir)/os/libos.la \
             @XORG_LIBS@
+libxservertest_la_DEPENDENCIES = $(libxservertest_la_LIBADD)
 endif
 endif
commit 0f41d6c851df76d0423d9c37ad809d3440906944
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Fri Jun 17 13:20:19 2011 +0100

    KDrive: Remove useless miPointerUpdateSprite call
    
    miPointerUpdateSprite is already called from mieqProcessInputEvents, so
    calling it by hand immediately after isn't massively helpful.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Cyril Brulebois <kibi at debian.org>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
index c863950..7fa4a8f 100644
--- a/hw/kdrive/src/kinput.c
+++ b/hw/kdrive/src/kinput.c
@@ -2159,7 +2159,6 @@ void
 ProcessInputEvents (void)
 {
     mieqProcessInputEvents();
-    miPointerUpdateSprite(inputInfo.pointer);
     if (kdSwitchPending)
 	KdProcessSwitch ();
     KdCheckLock ();
commit 57b767d2927e5c2e561a431be4e604df65423422
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Fri Jun 17 13:19:46 2011 +0100

    DMX: Remove useless miPointerUpdateSprite call
    
    miPointerUpdateSprite is already called from mieqProcessInputEvents, so
    calling it by hand immediately after isn't massively helpful.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Cyril Brulebois <kibi at debian.org>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c
index 5cbd620..1b067c7 100644
--- a/hw/dmx/input/dmxinputinit.c
+++ b/hw/dmx/input/dmxinputinit.c
@@ -546,9 +546,6 @@ static void dmxProcessInputEvents(DMXInputInfo *dmxInput)
         return;
     for (i = 0; i < dmxInput->numDevs; i += dmxInput->devs[i]->binding)
         if (dmxInput->devs[i]->process_input) {
-#if 11 /*BP*/
-            miPointerUpdateSprite(dmxInput->devs[i]->pDevice);
-#endif
             dmxInput->devs[i]->process_input(dmxInput->devs[i]->private);
         }
 
commit cf398755c0ca1e031514862b670956e7b9ace5ef
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Fri Jun 17 15:29:44 2011 +0100

    XWin: Remove executable bit from headers
    
    Headers don't really need to be mode 0755.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Cyril Brulebois <kibi at debian.org>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xwin/xlaunch/resources/resources.h b/hw/xwin/xlaunch/resources/resources.h
old mode 100755
new mode 100644
diff --git a/hw/xwin/xlaunch/window/dialog.h b/hw/xwin/xlaunch/window/dialog.h
old mode 100755
new mode 100644
diff --git a/hw/xwin/xlaunch/window/window.h b/hw/xwin/xlaunch/window/window.h
old mode 100755
new mode 100644
diff --git a/hw/xwin/xlaunch/window/wizard.h b/hw/xwin/xlaunch/window/wizard.h
old mode 100755
new mode 100644
commit 7d2543a3cb3089241982ce4f8984fd723d5312a1
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Wed Dec 29 12:03:01 2010 +0000

    XKB: Add debug key actions for grabs & window tree
    
    Add four new private XKB actions for debugging:
        * PrGrbs: print active grabs to the log file
        * Ungrab: ungrab all currently active grabs
        * ClsGrb: kill clients with active grabs
        * PrWins: dump the current window tree to the log file
    
    To use these, you need to modify your XKB maps, e.g. the following to
    have Ctrl+Alt+(F9-F12) mapped to the above:
     - compat/xfree86:
        interpret XF86LogGrabInfo {
            action = Private(type=0x86, data="PrGrbs");
        };
        interpret XF86Ungrab {
            action = Private(type=0x86, data="Ungrab");
        }
        interpret XF86ClearGrab {
            action = Private(type=0x86, data="ClsGrb");
        }
        interpret XF86LogWindowTree {
            action = Private(type=0x86, data="PrWins");
        }
    
     - symbols/pc:
        key <FK09> {        type="CTRL+ALT", [ Return, XF86LogGrabInfo      ]   };
        key <FK10> {        type="CTRL+ALT", [ Return, XF86Ungrab           ]   };
        key <FK11> {        type="CTRL+ALT", [ Return, XF86ClearGrab        ]   };
        key <FK12> {        type="CTRL+ALT", [ Return, XF86LogWindowTree    ]   };
    
    At the moment, this only works if the grabbing client continues to call
    AllowEvents, as the server does no event processing at all when a device
    is frozen.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/grabs.c b/dix/grabs.c
index 69c58df..85ca9ee 100644
--- a/dix/grabs.c
+++ b/dix/grabs.c
@@ -68,6 +68,118 @@ SOFTWARE.
 #define BITCLEAR(buf, i) MASKWORD(buf, i) &= ~BITMASK(i)
 #define GETBIT(buf, i) (MASKWORD(buf, i) & BITMASK(i))
 
+void
+PrintDeviceGrabInfo(DeviceIntPtr dev)
+{
+    ClientPtr client;
+    LocalClientCredRec *lcc;
+    int i, j;
+    GrabInfoPtr devGrab = &dev->deviceGrab;
+    GrabPtr grab = devGrab->grab;
+
+    ErrorF("Active grab 0x%lx (%s) on device '%s' (%d):",
+           (unsigned long) grab->resource,
+           (grab->grabtype == GRABTYPE_XI2) ? "xi2" :
+            ((grab->grabtype == GRABTYPE_CORE) ? "core" : "xi1"),
+           dev->name, dev->id);
+
+    client = clients[CLIENT_ID(grab->resource)];
+    if (client && GetLocalClientCreds(client, &lcc) != -1)
+    {
+        ErrorF("      client pid %ld uid %ld gid %ld\n",
+               (lcc->fieldsSet & LCC_PID_SET) ? (long) lcc->pid : 0,
+               (lcc->fieldsSet & LCC_UID_SET) ? (long) lcc->euid : 0,
+               (lcc->fieldsSet & LCC_GID_SET) ? (long) lcc->egid : 0);
+        FreeLocalClientCreds(lcc);
+    }
+    else
+    {
+        ErrorF("      (no client information available)\n");
+    }
+
+    /* XXX is this even correct? */
+    if (devGrab->sync.other)
+        ErrorF("      grab ID 0x%lx from paired device\n",
+               (unsigned long) devGrab->sync.other->resource);
+
+    ErrorF("      at %ld (from %s grab)%s (device %s, state %d)\n",
+           (unsigned long) devGrab->grabTime.milliseconds,
+           devGrab->fromPassiveGrab ? "passive" : "active",
+           devGrab->implicitGrab ? " (implicit)" : "",
+           devGrab->sync.frozen ? "frozen" : "thawed",
+           devGrab->sync.state);
+
+    if (grab->grabtype == GRABTYPE_CORE)
+    {
+        ErrorF("        core event mask 0x%lx\n",
+               (unsigned long) grab->eventMask);
+    }
+    else if (grab->grabtype == GRABTYPE_XI)
+    {
+        ErrorF("      xi1 event mask 0x%lx\n",
+               devGrab->implicitGrab ? (unsigned long) grab->deviceMask :
+                                       (unsigned long) grab->eventMask);
+    }
+    else if (grab->grabtype == GRABTYPE_XI2)
+    {
+        for (i = 0; i < EMASKSIZE; i++)
+        {
+            int print;
+            print = 0;
+            for (j = 0; j < XI2MASKSIZE; j++)
+            {
+                if (grab->xi2mask[i][j])
+                {
+                    print = 1;
+                    break;
+                }
+            }
+            if (!print)
+                continue;
+            ErrorF("      xi2 event mask for device %d: 0x", dev->id);
+            for (j = 0; j < XI2MASKSIZE; j++)
+                ErrorF("%x", grab->xi2mask[i][j]);
+            ErrorF("\n");
+        }
+    }
+
+    if (devGrab->fromPassiveGrab)
+    {
+        ErrorF("      passive grab type %d, detail 0x%x, "
+               "activating key %d\n", grab->type, grab->detail.exact,
+               devGrab->activatingKey);
+    }
+
+    ErrorF("      owner-events %s, kb %d ptr %d, confine %lx, cursor 0x%lx\n",
+           grab->ownerEvents ? "true" : "false",
+           grab->keyboardMode, grab->pointerMode,
+           grab->confineTo ? (unsigned long) grab->confineTo->drawable.id : 0,
+           grab->cursor ? (unsigned long) grab->cursor->id : 0);
+}
+
+void
+UngrabAllDevices(Bool kill_client)
+{
+    DeviceIntPtr dev;
+    ClientPtr client;
+
+    ErrorF("Ungrabbing all devices%s; grabs listed below:\n",
+           kill_client ? " and killing their owners" : "");
+
+    for (dev = inputInfo.devices; dev; dev = dev->next)
+    {
+        if (!dev->deviceGrab.grab)
+            continue;
+        PrintDeviceGrabInfo(dev);
+        client = clients[CLIENT_ID(dev->deviceGrab.grab->resource)];
+        if (!client || client->clientGone)
+            dev->deviceGrab.DeactivateGrab(dev);
+        CloseDownClient(client);
+    }
+
+    ErrorF("End list of ungrabbed devices\n");
+}
+
 GrabPtr
 CreateGrab(
     int client,
diff --git a/hw/xfree86/dixmods/xkbPrivate.c b/hw/xfree86/dixmods/xkbPrivate.c
index 9742eaf..06d1c2b 100644
--- a/hw/xfree86/dixmods/xkbPrivate.c
+++ b/hw/xfree86/dixmods/xkbPrivate.c
@@ -13,6 +13,7 @@
 #define XKBSRV_NEED_FILE_FUNCS
 #include <xkbsrv.h>
 
+#include "dixgrabs.h"
 #include "os.h"
 #include "xf86.h"
 
@@ -29,6 +30,20 @@ XkbDDXPrivate(DeviceIntPtr dev,KeyCode key,XkbAction *act)
             xf86ProcessActionEvent(ACTION_PREV_MODE, NULL);
         else if (strcasecmp(msgbuf, "+vmode")==0)
             xf86ProcessActionEvent(ACTION_NEXT_MODE, NULL);
+        else if (strcasecmp(msgbuf, "prgrbs")==0) {
+            DeviceIntPtr tmp;
+            xf86Msg(X_INFO, "Printing all currently active device grabs:\n");
+            for (tmp = inputInfo.devices; tmp; tmp = tmp->next)
+                if (tmp->deviceGrab.grab)
+                    PrintDeviceGrabInfo(tmp);
+            xf86Msg(X_INFO, "End list of active device grabs\n");
+        }
+        else if (strcasecmp(msgbuf, "ungrab")==0)
+            UngrabAllDevices(FALSE);
+        else if (strcasecmp(msgbuf, "clsgrb")==0)
+            UngrabAllDevices(TRUE);
+        else if (strcasecmp(msgbuf, "prwins")==0)
+            PrintWindowTree();
     }
 
     return 0;
diff --git a/include/dixgrabs.h b/include/dixgrabs.h
index 3b2a46d..229c8bb 100644
--- a/include/dixgrabs.h
+++ b/include/dixgrabs.h
@@ -28,6 +28,9 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 struct _GrabParameters;
 
+extern void PrintDeviceGrabInfo(DeviceIntPtr dev);
+extern void UngrabAllDevices(Bool kill_client);
+
 extern GrabPtr CreateGrab(
 	int /* client */,
 	DeviceIntPtr /* device */,
commit ddf735fd4e9658bb5610f5e911f3b4055d5acf89
Author: Daniel Stone <daniel at fooishbar.org>
Date:   Tue Oct 13 19:56:57 2009 +1100

    DIX: Make PrintWindowTree actually useful
    
    Rewrite PrintWindowTree to make it actually tell you what you want to
    know.
    
    Signed-off-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/window.c b/dix/window.c
index 5defe58..556509a 100644
--- a/dix/window.c
+++ b/dix/window.c
@@ -108,6 +108,7 @@ Equipment Corporation.
 #include "regionstr.h"
 #include "validate.h"
 #include "windowstr.h"
+#include "propertyst.h"
 #include "input.h"
 #include "inputstr.h"
 #include "resource.h"
@@ -124,10 +125,13 @@ Equipment Corporation.
 #include "dixevents.h"
 #include "globals.h"
 #include "mi.h" /* miPaintWindow */
+#include "compint.h"
 
 #include "privates.h"
 #include "xace.h"
 
+#include <X11/Xatom.h> /* must come after server includes */
+
 /******
  * Window stuff for server 
  *
@@ -176,46 +180,129 @@ static Bool TileScreenSaver(ScreenPtr pScreen, int kind);
 
 #define SubStrSend(pWin,pParent) (StrSend(pWin) || SubSend(pParent))
 
-#ifdef DEBUG
-/******
- * PrintWindowTree
- *    For debugging only
- ******/
+static const char *overlay_win_name = "<composite overlay>";
 
-static void
-PrintChildren(WindowPtr p1, int indent)
+static const char *
+get_window_name(WindowPtr pWin)
 {
-    WindowPtr p2;
-    int i;
+#define WINDOW_NAME_BUF_LEN 512
+    PropertyPtr prop;
+    CompScreenPtr comp_screen = GetCompScreen(pWin->drawable.pScreen);
+    static char buf[WINDOW_NAME_BUF_LEN];
+    int len;
+
+    if (comp_screen && pWin == comp_screen->pOverlayWin)
+        return overlay_win_name;
 
-    while (p1)
+    for (prop = wUserProps(pWin); prop; prop = prop->next)
     {
-	p2 = p1->firstChild;
-        ErrorF("[dix] ");
-	for (i=0; i<indent; i++) ErrorF(" ");
-	ErrorF("%lx\n", p1->drawable.id);
-	RegionPrint(&p1->clipList);
-	PrintChildren(p2, indent+4);
-	p1 = p1->nextSib;
+        if (prop->propertyName == XA_WM_NAME && prop->type == XA_STRING &&
+            prop->data)
+        {
+            len = min(prop->size, WINDOW_NAME_BUF_LEN - 1);
+            memcpy(buf, prop->data, len);
+            buf[len] = '\0';
+            return buf;
+        }
     }
+
+    return NULL;
+#undef WINDOW_NAME_BUF_LEN
 }
 
-static void
-PrintWindowTree(void)
+static void log_window_info(WindowPtr pWin, int depth)
 {
     int i;
-    WindowPtr pWin, p1;
+    const char *win_name, *visibility;
+    BoxPtr rects;
+    ScreenPtr pScreen = pWin->drawable.pScreen;
+
+    for (i = 0; i < (depth << 2); i++)
+        ErrorF(" ");
+
+    win_name = get_window_name(pWin);
+    ErrorF("win 0x%.8x (%s), [%d, %d] to [%d, %d]",
+           pWin->drawable.id,
+           win_name ? win_name : "no name",
+           pWin->drawable.x, pWin->drawable.y,
+           pWin->drawable.x + pWin->drawable.width,
+           pWin->drawable.y + pWin->drawable.height);
+
+    if (pWin->overrideRedirect)
+        ErrorF(" (override redirect)");
+    if (pWin->redirectDraw)
+        ErrorF(" (%s compositing: pixmap %x)",
+               (pWin->redirectDraw == RedirectDrawAutomatic) ?
+                "automatic" : "manual",
+               pScreen->GetWindowPixmap(pWin)->drawable.id);
+
+    switch (pWin->visibility)
+    {
+    case VisibilityUnobscured:
+         visibility = "unobscured";
+         break;
+    case VisibilityPartiallyObscured:
+         visibility = "partially obscured";
+         break;
+    case VisibilityFullyObscured:
+         visibility = "fully obscured";
+         break;
+    case VisibilityNotViewable:
+         visibility = "unviewable";
+         break;
+    }
+    ErrorF(", %s", visibility);
+
+    if (REGION_NOTEMPTY(pScreen, &pWin->clipList))
+    {
+        ErrorF(", clip list:");
+        rects = REGION_RECTS(&pWin->clipList);
+        for (i = 0; i < REGION_NUM_RECTS(&pWin->clipList); i++)
+            ErrorF(" [(%d, %d) to (%d, %d)]",
+                   rects[i].x1, rects[i].y1,
+                   rects[i].x2, rects[i].y2);
+        ErrorF("; extents [(%d, %d) to (%d, %d)]",
+               pWin->clipList.extents.x1, pWin->clipList.extents.y1,
+               pWin->clipList.extents.x2, pWin->clipList.extents.y2);
+    }
+
+    ErrorF("\n");
+}
+
+void
+PrintWindowTree(void)
+{
+    int scrnum, depth;
+    ScreenPtr pScreen;
+    WindowPtr pWin;
 
-    for (i=0; i<screenInfo.numScreens; i++)
+    for (scrnum = 0; scrnum < screenInfo.numScreens; scrnum++)
     {
-	ErrorF("[dix] WINDOW %d\n", i);
-	pWin = screenInfo.screens[i]->root;
-	RegionPrint(&pWin->clipList);
-	p1 = pWin->firstChild;
-	PrintChildren(p1, 4);
+        pScreen = screenInfo.screens[scrnum];
+        ErrorF("[dix] Dumping windows for screen %d (pixmap %x):\n", scrnum,
+               pScreen->GetScreenPixmap(pScreen)->drawable.id);
+        pWin = pScreen->root;
+        depth = 1;
+        while (pWin)
+        {
+            log_window_info(pWin, depth);
+            if (pWin->firstChild)
+            {
+                pWin = pWin->firstChild;
+                depth++;
+                continue;
+            }
+            while (pWin && !pWin->nextSib)
+            {
+                pWin = pWin->parent;
+                depth--;
+            }
+            if (!pWin)
+                break;
+            pWin = pWin->nextSib;
+	}
     }
 }
-#endif
 
 int
 TraverseTree(WindowPtr pWin, VisitWindowProcPtr func, pointer data)
diff --git a/include/window.h b/include/window.h
index 1e4e9bf..e13598b 100644
--- a/include/window.h
+++ b/include/window.h
@@ -267,4 +267,6 @@ extern _X_EXPORT void EnableMapUnmapEvents(
     WindowPtr /* pWin */ );
 
 extern _X_EXPORT void SetRootClip(ScreenPtr pScreen, Bool enable);
+extern _X_EXPORT void PrintWindowTree(void);
+
 #endif /* WINDOW_H */
commit b27d61e4433a2a0140ed8a6128e4427451e37fec
Author: Matěj Cepl <mcepl at redhat.com>
Date:   Fri Jun 17 15:26:17 2011 +0100

    Fix UTF-8 encoding
    
    Report to find out all non-UTF-8 files created by
    
    cat extensions |xargs -I XXXX find . -name \*.XXXX |while read FILE ; do
        if ( iconv -f utf8 -t ucs2 $FILE >/dev/null 2>/dev/null ) ; then
            /bin/true
        else
            echo $FILE
        fi
    done >>report
    
    Signed-off-by: Matěj Cepl <mcepl at redhat.com>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    
    [Daniel: git am failed for me, so I redid it.  The method listed in the
             commit message also failed, so I just used file/grep/iconv.  The
             results are the same though.]
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/exa/exa.c b/exa/exa.c
index a4e294a..4ce983b 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -1,7 +1,7 @@
 /*
- * Copyright © 2001 Keith Packard
+ * Copyright © 2001 Keith Packard
  *
- * Partly based on code that is Copyright © The XFree86 Project Inc.
+ * Partly based on code that is Copyright © The XFree86 Project Inc.
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/exa/exa_accel.c b/exa/exa_accel.c
index b4c0f83..5600539 100644
--- a/exa/exa_accel.c
+++ b/exa/exa_accel.c
@@ -1,7 +1,7 @@
 /*
- * Copyright © 2001 Keith Packard
+ * Copyright © 2001 Keith Packard
  *
- * Partly based on code that is Copyright © The XFree86 Project Inc.
+ * Partly based on code that is Copyright © The XFree86 Project Inc.
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
@@ -23,7 +23,7 @@
  *
  * Authors:
  *    Eric Anholt <eric at anholt.net>
- *    Michel Dänzer <michel at tungstengraphics.com>
+ *    Michel Dänzer <michel at tungstengraphics.com>
  *
  */
 
diff --git a/exa/exa_classic.c b/exa/exa_classic.c
index 169ce3a..919b29d 100644
--- a/exa/exa_classic.c
+++ b/exa/exa_classic.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2009 Maarten Maathuis
+ * Copyright © 2009 Maarten Maathuis
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
diff --git a/exa/exa_driver.c b/exa/exa_driver.c
index b9903d1..795cb00 100644
--- a/exa/exa_driver.c
+++ b/exa/exa_driver.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2009 Maarten Maathuis
+ * Copyright © 2009 Maarten Maathuis
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
diff --git a/exa/exa_migration_classic.c b/exa/exa_migration_classic.c
index 6c49fb7..dd3cd49 100644
--- a/exa/exa_migration_classic.c
+++ b/exa/exa_migration_classic.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2006 Intel Corporation
+ * Copyright © 2006 Intel Corporation
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -22,7 +22,7 @@
  *
  * Authors:
  *    Eric Anholt <eric at anholt.net>
- *    Michel Dänzer <michel at tungstengraphics.com>
+ *    Michel Dänzer <michel at tungstengraphics.com>
  *
  */
 
diff --git a/exa/exa_migration_mixed.c b/exa/exa_migration_mixed.c
index fb47151..4b22619 100644
--- a/exa/exa_migration_mixed.c
+++ b/exa/exa_migration_mixed.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2009 Maarten Maathuis
+ * Copyright © 2009 Maarten Maathuis
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
diff --git a/exa/exa_mixed.c b/exa/exa_mixed.c
index fd1afb2..58645ae 100644
--- a/exa/exa_mixed.c
+++ b/exa/exa_mixed.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2009 Maarten Maathuis
+ * Copyright © 2009 Maarten Maathuis
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c
index df416d5..219f903 100644
--- a/exa/exa_unaccel.c
+++ b/exa/exa_unaccel.c
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright © 1999 Keith Packard
+ * Copyright © 1999 Keith Packard
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c
index ac8e5be..7ebf1c2 100644
--- a/hw/kdrive/ephyr/ephyr.c
+++ b/hw/kdrive/ephyr/ephyr.c
@@ -2,7 +2,7 @@
  * Xephyr - A kdrive X server thats runs in a host X window.
  *          Authored by Matthew Allum <mallum at openedhand.com>
  * 
- * Copyright © 2004 Nokia 
+ * Copyright © 2004 Nokia 
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/kdrive/ephyr/ephyr.h b/hw/kdrive/ephyr/ephyr.h
index 41a82bf..2384800 100644
--- a/hw/kdrive/ephyr/ephyr.h
+++ b/hw/kdrive/ephyr/ephyr.h
@@ -2,7 +2,7 @@
  * Xephyr - A kdrive X server thats runs in a host X window.
  *          Authored by Matthew Allum <mallum at o-hand.com>
  * 
- * Copyright © 2004 Nokia 
+ * Copyright © 2004 Nokia 
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/kdrive/ephyr/ephyr_draw.c b/hw/kdrive/ephyr/ephyr_draw.c
index b1982a5..cf5f553 100644
--- a/hw/kdrive/ephyr/ephyr_draw.c
+++ b/hw/kdrive/ephyr/ephyr_draw.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2006 Intel Corporation
+ * Copyright © 2006 Intel Corporation
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
diff --git a/hw/kdrive/ephyr/ephyrinit.c b/hw/kdrive/ephyr/ephyrinit.c
index 2deb7b8..7d4cadb 100644
--- a/hw/kdrive/ephyr/ephyrinit.c
+++ b/hw/kdrive/ephyr/ephyrinit.c
@@ -2,7 +2,7 @@
  * Xephyr - A kdrive X server thats runs in a host X window.
  *          Authored by Matthew Allum <mallum at o-hand.com>
  * 
- * Copyright © 2004 Nokia 
+ * Copyright © 2004 Nokia 
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/kdrive/ephyr/hostx.c b/hw/kdrive/ephyr/hostx.c
index 2ebeca9..4caf451 100644
--- a/hw/kdrive/ephyr/hostx.c
+++ b/hw/kdrive/ephyr/hostx.c
@@ -2,7 +2,7 @@
  * Xephyr - A kdrive X server thats runs in a host X window.
  *          Authored by Matthew Allum <mallum at o-hand.com>
  * 
- * Copyright © 2004 Nokia 
+ * Copyright © 2004 Nokia 
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/kdrive/ephyr/hostx.h b/hw/kdrive/ephyr/hostx.h
index e65e0c9..4257857 100644
--- a/hw/kdrive/ephyr/hostx.h
+++ b/hw/kdrive/ephyr/hostx.h
@@ -2,7 +2,7 @@
  * Xephyr - A kdrive X server thats runs in a host X window.
  *          Authored by Matthew Allum <mallum at o-hand.com>
  * 
- * Copyright © 2004 Nokia 
+ * Copyright © 2004 Nokia 
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/kdrive/ephyr/os.c b/hw/kdrive/ephyr/os.c
index 4bf6e88..e4dc678 100644
--- a/hw/kdrive/ephyr/os.c
+++ b/hw/kdrive/ephyr/os.c
@@ -2,7 +2,7 @@
  * Xephyr - A kdrive X server thats runs in a host X window.
  *          Authored by Matthew Allum <mallum at o-hand.com>
  * 
- * Copyright © 2004 Nokia 
+ * Copyright © 2004 Nokia 
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/kdrive/fake/kbd.c b/hw/kdrive/fake/kbd.c
index 51fba04..769730d 100644
--- a/hw/kdrive/fake/kbd.c
+++ b/hw/kdrive/fake/kbd.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 1999 Keith Packard
+ * Copyright © 1999 Keith Packard
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/kdrive/fbdev/fbdev.c b/hw/kdrive/fbdev/fbdev.c
index 2c7fa91..661e5b4 100644
--- a/hw/kdrive/fbdev/fbdev.c
+++ b/hw/kdrive/fbdev/fbdev.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 1999 Keith Packard
+ * Copyright © 1999 Keith Packard
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/kdrive/fbdev/fbdev.h b/hw/kdrive/fbdev/fbdev.h
index ebac6ad..ec53784 100644
--- a/hw/kdrive/fbdev/fbdev.h
+++ b/hw/kdrive/fbdev/fbdev.h
@@ -1,5 +1,5 @@
 /*
- * Copyright © 1999 Keith Packard
+ * Copyright © 1999 Keith Packard
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/kdrive/fbdev/fbinit.c b/hw/kdrive/fbdev/fbinit.c
index 51e7e00..3b55ab1 100644
--- a/hw/kdrive/fbdev/fbinit.c
+++ b/hw/kdrive/fbdev/fbinit.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 1999 Keith Packard
+ * Copyright © 1999 Keith Packard
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/kdrive/linux/keyboard.c b/hw/kdrive/linux/keyboard.c
index e05c5ab..f5f9d9b 100644
--- a/hw/kdrive/linux/keyboard.c
+++ b/hw/kdrive/linux/keyboard.c
@@ -1,10 +1,10 @@
 /*
- * Copyright © 1999 Keith Packard
- * XKB integration © 2006 Nokia Corporation, author: Tomas Frydrych <tf at o-hand.com>
+ * Copyright © 1999 Keith Packard
+ * XKB integration © 2006 Nokia Corporation, author: Tomas Frydrych <tf at o-hand.com>
  *
  * LinuxKeyboardRead() XKB code based on xf86KbdLnx.c:
- * Copyright © 1990,91 by Thomas Roell, Dinkelscherben, Germany.
- * Copyright © 1994-2001 by The XFree86 Project, Inc.
+ * Copyright © 1990,91 by Thomas Roell, Dinkelscherben, Germany.
+ * Copyright © 1994-2001 by The XFree86 Project, Inc.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
diff --git a/hw/kdrive/linux/linux.c b/hw/kdrive/linux/linux.c
index 9863c14..a53db49 100644
--- a/hw/kdrive/linux/linux.c
+++ b/hw/kdrive/linux/linux.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 1999 Keith Packard
+ * Copyright © 1999 Keith Packard
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/kdrive/linux/mouse.c b/hw/kdrive/linux/mouse.c
index 1db5348..93c2078 100644
--- a/hw/kdrive/linux/mouse.c
+++ b/hw/kdrive/linux/mouse.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2001 Keith Packard
+ * Copyright © 2001 Keith Packard
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/kdrive/linux/ps2.c b/hw/kdrive/linux/ps2.c
index 552a3c7..465b963 100644
--- a/hw/kdrive/linux/ps2.c
+++ b/hw/kdrive/linux/ps2.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 1999 Keith Packard
+ * Copyright © 1999 Keith Packard
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/kdrive/linux/tslib.c b/hw/kdrive/linux/tslib.c
index 570cbf9..1f30cca 100644
--- a/hw/kdrive/linux/tslib.c
+++ b/hw/kdrive/linux/tslib.c
@@ -4,11 +4,11 @@
  * Derived from ts.c by Keith Packard
  * Derived from ps2.c by Jim Gettys
  *
- * Copyright © 1999 Keith Packard
- * Copyright © 2000 Compaq Computer Corporation
- * Copyright © 2002 MontaVista Software Inc.
- * Copyright © 2005 OpenedHand Ltd.
- * Copyright © 2006 Nokia Corporation
+ * Copyright © 1999 Keith Packard
+ * Copyright © 2000 Compaq Computer Corporation
+ * Copyright © 2002 MontaVista Software Inc.
+ * Copyright © 2005 OpenedHand Ltd.
+ * Copyright © 2006 Nokia Corporation
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/kdrive/src/kcmap.c b/hw/kdrive/src/kcmap.c
index 9bfdd78..6e0fc14 100644
--- a/hw/kdrive/src/kcmap.c
+++ b/hw/kdrive/src/kcmap.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 1999 Keith Packard
+ * Copyright © 1999 Keith Packard
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/kdrive/src/kdrive.h b/hw/kdrive/src/kdrive.h
index 2ab535a..847d89b 100644
--- a/hw/kdrive/src/kdrive.h
+++ b/hw/kdrive/src/kdrive.h
@@ -1,5 +1,5 @@
 /*
- * Copyright © 1999 Keith Packard
+ * Copyright © 1999 Keith Packard
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/kdrive/src/kinfo.c b/hw/kdrive/src/kinfo.c
index 8193215..7055fbf 100644
--- a/hw/kdrive/src/kinfo.c
+++ b/hw/kdrive/src/kinfo.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 1999 Keith Packard
+ * Copyright © 1999 Keith Packard
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
index cdf55d7..c863950 100644
--- a/hw/kdrive/src/kinput.c
+++ b/hw/kdrive/src/kinput.c
@@ -1,6 +1,6 @@
 /*
- * Copyright © 1999 Keith Packard
- * Copyright © 2006 Nokia Corporation
+ * Copyright © 1999 Keith Packard
+ * Copyright © 2006 Nokia Corporation
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/kdrive/src/kshadow.c b/hw/kdrive/src/kshadow.c
index 6f5a2f3..63bb87b 100644
--- a/hw/kdrive/src/kshadow.c
+++ b/hw/kdrive/src/kshadow.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 1999 Keith Packard
+ * Copyright © 1999 Keith Packard
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
diff --git a/hw/xfree86/exa/examodule.c b/hw/xfree86/exa/examodule.c
index 83f72b5..1556051 100644
--- a/hw/xfree86/exa/examodule.c
+++ b/hw/xfree86/exa/examodule.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2006 Intel Corporation
+ * Copyright © 2006 Intel Corporation
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
diff --git a/hw/xfree86/modes/xf86Modes.h b/hw/xfree86/modes/xf86Modes.h
index 38927b1..c72a935 100644
--- a/hw/xfree86/modes/xf86Modes.h
+++ b/hw/xfree86/modes/xf86Modes.h
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2006 Intel Corporation
+ * Copyright © 2006 Intel Corporation
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
diff --git a/hw/xfree86/modes/xf86cvt.c b/hw/xfree86/modes/xf86cvt.c
index 244f3b9..d5feccc 100644
--- a/hw/xfree86/modes/xf86cvt.c
+++ b/hw/xfree86/modes/xf86cvt.c
@@ -152,7 +152,7 @@ xf86CVTMode(int HDisplay, int VDisplay, float VRefresh, Bool Reduced,
 
     if (!Reduced) { /* simplified GTF calculation */
 
-        /* 4) Minimum time of vertical sync + back porch interval (µs) 
+        /* 4) Minimum time of vertical sync + back porch interval (µs) 
          * default 550.0 */
 #define CVT_MIN_VSYNC_BP 550.0
 
@@ -223,7 +223,7 @@ xf86CVTMode(int HDisplay, int VDisplay, float VRefresh, Bool Reduced,
         Mode->VSyncEnd = Mode->VSyncStart + VSync;
 
     } else { /* Reduced blanking */
-        /* Minimum vertical blanking interval time (µs) - default 460 */
+        /* Minimum vertical blanking interval time (µs) - default 460 */
 #define CVT_RB_MIN_VBLANK 460.0
 
         /* Fixed number of clocks for horizontal sync */
diff --git a/hw/xfree86/os-support/solaris/sun_agp.c b/hw/xfree86/os-support/solaris/sun_agp.c
index a4517d6..0331ac1 100644
--- a/hw/xfree86/os-support/solaris/sun_agp.c
+++ b/hw/xfree86/os-support/solaris/sun_agp.c
@@ -3,8 +3,8 @@
  *
  * This version is for Solaris.
  *
- * Copyright © 2000 VA Linux Systems, Inc.
- * Copyright © 2001 The XFree86 Project, Inc.
+ * Copyright © 2000 VA Linux Systems, Inc.
+ * Copyright © 2001 The XFree86 Project, Inc.
  */
 /* Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
  *
diff --git a/miext/shadow/shadow.c b/miext/shadow/shadow.c
index cb1b299..95f11cd 100644
--- a/miext/shadow/shadow.c
+++ b/miext/shadow/shadow.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2000 Keith Packard
+ * Copyright © 2000 Keith Packard
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
commit 2ee85d954c8f3a6affbd9b1b745594ff12e8b670
Author: Scott James Remnant <scott at netsplit.com>
Date:   Tue Jun 14 16:36:07 2011 -0700

    dix: avoid calling deleted block and wakeup handlers
    
    BlockHandler and WakeupHandlers may be removed within a different
    BlockHandler or WakeupHandler, especially since config/udev uses
    these and removes devices.
    
    Calling the deleted handlers and passing potentially freed data
    can result in the X server segfaulting after device removal, or
    events that result in device removal such as undocking or suspend/
    resume.
    
    Signed-off-by: Scott James Remnant <scott at netsplit.com>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/dixutils.c b/dix/dixutils.c
index 104363b..1e31346 100644
--- a/dix/dixutils.c
+++ b/dix/dixutils.c
@@ -386,8 +386,9 @@ BlockHandler(pointer pTimeout, pointer pReadmask)
 				screenInfo.screens[i]->blockData,
 				pTimeout, pReadmask);
     for (i = 0; i < numHandlers; i++)
-	(*handlers[i].BlockHandler) (handlers[i].blockData,
-				     pTimeout, pReadmask);
+	if (!handlers[i].deleted)
+		(*handlers[i].BlockHandler) (handlers[i].blockData,
+					     pTimeout, pReadmask);
     if (handlerDeleted)
     {
 	for (i = 0; i < numHandlers;)
@@ -416,8 +417,9 @@ WakeupHandler(int result, pointer pReadmask)
 
     ++inHandler;
     for (i = numHandlers - 1; i >= 0; i--)
-	(*handlers[i].WakeupHandler) (handlers[i].blockData,
-				      result, pReadmask);
+	if (!handlers[i].deleted)
+		(*handlers[i].WakeupHandler) (handlers[i].blockData,
+					      result, pReadmask);
     for (i = 0; i < screenInfo.numScreens; i++)
 	(* screenInfo.screens[i]->WakeupHandler)(i, 
 				screenInfo.screens[i]->wakeupData,
commit b573cdd40ee49fae299fe2e7cbd02159ae8ae617
Author: Marcin Slusarz <marcin.slusarz at gmail.com>
Date:   Tue Jun 7 21:22:15 2011 +0200

    dri2: restore Screen->ConfigNotify on close
    
    ConfigNotify is set by DRI2ScreenInit, but not restored to
    previous state on close. Fix it.
    (I'm preparing a patch for xf86-video-nouveau which detects GPU lockup
    after dri2 init and it needs to reinitialize dri2)
    
    Signed-off-by: Marcin Slusarz <marcin.slusarz at gmail.com>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
index bf7ebb9..af3bcae 100644
--- a/hw/xfree86/dri2/dri2.c
+++ b/hw/xfree86/dri2/dri2.c
@@ -1185,6 +1185,7 @@ void
 DRI2CloseScreen(ScreenPtr pScreen)
 {
     DRI2ScreenPtr ds = DRI2GetScreen(pScreen);
+    pScreen->ConfigNotify = ds->ConfigNotify;
 
     free(ds->driverNames);
     free(ds);


More information about the xorg-commit mailing list