From b573cdd40ee49fae299fe2e7cbd02159ae8ae617 Mon Sep 17 00:00:00 2001 From: Marcin Slusarz Date: Tue, 7 Jun 2011 21:22:15 +0200 Subject: [PATCH 01/13] 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 Reviewed-by: Daniel Stone Signed-off-by: Peter Hutterer --- hw/xfree86/dri2/dri2.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index bf7ebb9f8..af3bcaefe 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); From 2ee85d954c8f3a6affbd9b1b745594ff12e8b670 Mon Sep 17 00:00:00 2001 From: Scott James Remnant Date: Tue, 14 Jun 2011 16:36:07 -0700 Subject: [PATCH 02/13] 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 Reviewed-by: Daniel Stone Signed-off-by: Peter Hutterer --- dix/dixutils.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dix/dixutils.c b/dix/dixutils.c index 104363b72..1e3134663 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, From b27d61e4433a2a0140ed8a6128e4427451e37fec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Cepl?= Date: Fri, 17 Jun 2011 15:26:17 +0100 Subject: [PATCH 03/13] Fix UTF-8 encoding MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Daniel Stone [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 --- 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/kdrive/ephyr/ephyr.c | 2 +- hw/kdrive/ephyr/ephyr.h | 2 +- hw/kdrive/ephyr/ephyr_draw.c | 2 +- hw/kdrive/ephyr/ephyrinit.c | 2 +- hw/kdrive/ephyr/hostx.c | 2 +- hw/kdrive/ephyr/hostx.h | 2 +- hw/kdrive/ephyr/os.c | 2 +- hw/kdrive/fake/kbd.c | 2 +- hw/kdrive/fbdev/fbdev.c | 2 +- hw/kdrive/fbdev/fbdev.h | 2 +- hw/kdrive/fbdev/fbinit.c | 2 +- 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 | 2 +- hw/kdrive/src/kinfo.c | 2 +- hw/kdrive/src/kinput.c | 4 ++-- hw/kdrive/src/kshadow.c | 2 +- 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 ++-- miext/shadow/shadow.c | 2 +- 34 files changed, 48 insertions(+), 48 deletions(-) diff --git a/exa/exa.c b/exa/exa.c index a4e294a71..4ce983bc3 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 b4c0f8351..5600539d6 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 - * Michel Dänzer + * Michel Dänzer * */ diff --git a/exa/exa_classic.c b/exa/exa_classic.c index 169ce3aac..919b29df2 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 b9903d1bc..795cb00cd 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 6c49fb798..dd3cd491e 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 - * Michel Dänzer + * Michel Dänzer * */ diff --git a/exa/exa_migration_mixed.c b/exa/exa_migration_mixed.c index fb4715135..4b2261943 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 fd1afb246..58645aea0 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 df416d5ac..219f903b2 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 ac8e5bef9..7ebf1c253 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 * - * 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 41a82bf9d..23848004c 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 * - * 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 b1982a5e6..cf5f55394 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 2deb7b81d..7d4cadb9f 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 * - * 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 2ebeca958..4caf4516d 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 * - * 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 e65e0c9bc..42578576a 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 * - * 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 4bf6e8858..e4dc6787d 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 * - * 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 51fba044d..769730d64 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 2c7fa91ad..661e5b491 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 ebac6ad8b..ec53784af 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 51e7e00d9..3b55ab162 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 e05c5abad..f5f9d9b8a 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 + * Copyright © 1999 Keith Packard + * XKB integration © 2006 Nokia Corporation, author: Tomas Frydrych * * 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 9863c1424..a53db4965 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 1db534863..93c207817 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 552a3c7cb..465b963f2 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 570cbf99a..1f30ccae7 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 9bfdd78b6..6e0fc1417 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 2ab535aef..847d89b48 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 8193215ba..7055fbf4a 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 cdf55d7f9..c863950d3 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 6f5a2f346..63bb87bc6 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 83f72b5e1..15560513d 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 38927b128..c72a93537 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 244f3b9a3..d5fecccb5 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 a4517d666..0331ac1c5 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 cb1b299fe..95f11cd21 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 From ddf735fd4e9658bb5610f5e911f3b4055d5acf89 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Tue, 13 Oct 2009 19:56:57 +1100 Subject: [PATCH 04/13] DIX: Make PrintWindowTree actually useful Rewrite PrintWindowTree to make it actually tell you what you want to know. Signed-off-by: Daniel Stone Reviewed-by: Peter Hutterer Signed-off-by: Peter Hutterer --- dix/window.c | 141 ++++++++++++++++++++++++++++++++++++++--------- include/window.h | 2 + 2 files changed, 116 insertions(+), 27 deletions(-) diff --git a/dix/window.c b/dix/window.c index 5defe5849..556509ac3 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 /* 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 = ""; -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; - while (p1) + if (comp_screen && pWin == comp_screen->pOverlayWin) + return overlay_win_name; + + for (prop = wUserProps(pWin); prop; prop = prop->next) { - p2 = p1->firstChild; - ErrorF("[dix] "); - for (i=0; idrawable.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 +static void log_window_info(WindowPtr pWin, int depth) +{ + int i; + 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 i; - WindowPtr pWin, p1; + int scrnum, depth; + ScreenPtr pScreen; + WindowPtr pWin; - for (i=0; iroot; - 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 1e4e9bfa4..e13598b88 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 */ From 7d2543a3cb3089241982ce4f8984fd723d5312a1 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Wed, 29 Dec 2010 12:03:01 +0000 Subject: [PATCH 05/13] 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 { type="CTRL+ALT", [ Return, XF86LogGrabInfo ] }; key { type="CTRL+ALT", [ Return, XF86Ungrab ] }; key { type="CTRL+ALT", [ Return, XF86ClearGrab ] }; key { 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 Reviewed-by: Peter Hutterer Signed-off-by: Peter Hutterer --- dix/grabs.c | 112 ++++++++++++++++++++++++++++++++ hw/xfree86/dixmods/xkbPrivate.c | 15 +++++ include/dixgrabs.h | 3 + 3 files changed, 130 insertions(+) diff --git a/dix/grabs.c b/dix/grabs.c index 69c58dff9..85ca9eee0 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 9742eaf31..06d1c2b3d 100644 --- a/hw/xfree86/dixmods/xkbPrivate.c +++ b/hw/xfree86/dixmods/xkbPrivate.c @@ -13,6 +13,7 @@ #define XKBSRV_NEED_FILE_FUNCS #include +#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 3b2a46d72..229c8bb53 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 */, From cf398755c0ca1e031514862b670956e7b9ace5ef Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Fri, 17 Jun 2011 15:29:44 +0100 Subject: [PATCH 06/13] XWin: Remove executable bit from headers Headers don't really need to be mode 0755. Signed-off-by: Daniel Stone Reviewed-by: Cyril Brulebois Signed-off-by: Peter Hutterer --- hw/xwin/xlaunch/resources/resources.h | 0 hw/xwin/xlaunch/window/dialog.h | 0 hw/xwin/xlaunch/window/window.h | 0 hw/xwin/xlaunch/window/wizard.h | 0 4 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 hw/xwin/xlaunch/resources/resources.h mode change 100755 => 100644 hw/xwin/xlaunch/window/dialog.h mode change 100755 => 100644 hw/xwin/xlaunch/window/window.h mode change 100755 => 100644 hw/xwin/xlaunch/window/wizard.h 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 From 57b767d2927e5c2e561a431be4e604df65423422 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Fri, 17 Jun 2011 13:19:46 +0100 Subject: [PATCH 07/13] 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 Reviewed-by: Cyril Brulebois Signed-off-by: Peter Hutterer --- hw/dmx/input/dmxinputinit.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c index 5cbd620c9..1b067c725 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); } From 0f41d6c851df76d0423d9c37ad809d3440906944 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Fri, 17 Jun 2011 13:20:19 +0100 Subject: [PATCH 08/13] 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 Reviewed-by: Cyril Brulebois Signed-off-by: Peter Hutterer --- hw/kdrive/src/kinput.c | 1 - 1 file changed, 1 deletion(-) diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c index c863950d3..7fa4a8f8a 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 (); From 1e65a01cf73f1fbdfe0d63eaecea412cf8472cb4 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Fri, 17 Jun 2011 16:28:05 +0100 Subject: [PATCH 09/13] 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 Reviewed-by: Dan Nicholson Signed-off-by: Peter Hutterer --- test/Makefile.am | 1 + 1 file changed, 1 insertion(+) diff --git a/test/Makefile.am b/test/Makefile.am index 370e09a18..7ef408c93 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 From 9444e40d77508d545e3c0a8123f61950c22d89fa Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Tue, 1 Mar 2011 11:11:22 +0000 Subject: [PATCH 10/13] 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 Reviewed-by: Peter Hutterer Signed-off-by: Peter Hutterer --- test/xi2/protocol-eventconvert.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/test/xi2/protocol-eventconvert.c b/test/xi2/protocol-eventconvert.c index edba974bf..6e61d74b4 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); From 23a783278963919778d017965542e0f983814e37 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 24 Jun 2011 11:02:23 +1000 Subject: [PATCH 11/13] 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 Signed-off-by: Peter Hutterer Reviewed-by: Daniel Stone Signed-off-by: Peter Hutterer --- dix/getevents.c | 18 +++++++++++------- include/input.h | 9 +++++---- mi/mipointer.c | 2 +- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/dix/getevents.c b/dix/getevents.c index c935c971c..fbc15e0c0 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 56847ed8d..5377a0c13 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 322be9e44..7680ca19b 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 From e084ac30b37c36016bb0dbb1b79e60a7799aee02 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Wed, 2 Mar 2011 14:52:42 +0000 Subject: [PATCH 12/13] 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 Reviewed-by: Peter Hutterer Signed-off-by: Peter Hutterer --- dix/getevents.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/dix/getevents.c b/dix/getevents.c index fbc15e0c0..a12462a4a 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); + } } } From 87d4f90bfcb509471ac9e7886e14a92b33223fd7 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 27 Jun 2011 09:10:42 +1000 Subject: [PATCH 13/13] 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 Signed-off-by: Peter Hutterer Reviewed-by: Jon TURNEY Acked-by: Jeremy Huddleston Signed-off-by: Peter Hutterer --- Xext/xtest.c | 9 ++++++++- hw/dmx/dmxinput.c | 1 + hw/kdrive/ephyr/ephyrinit.c | 1 + hw/kdrive/fake/fakeinit.c | 1 + hw/kdrive/fbdev/fbinit.c | 1 + hw/kdrive/src/kdrive.h | 2 ++ hw/kdrive/src/kinput.c | 6 ++++++ hw/vfb/InitInput.c | 1 + hw/xfree86/common/xf86Init.c | 1 + 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 + 15 files changed, 33 insertions(+), 6 deletions(-) diff --git a/Xext/xtest.c b/Xext/xtest.c index daa6430f1..cc675c116 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 568bb882b..f006af4d2 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 7d4cadb9f..b674bb8d0 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 ba61959ef..e25093fbf 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 3b55ab162..1d66fce32 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 847d89b48..9ac5a19d7 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 7fa4a8f8a..c14dd8241 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 60b59c164..8836bbd7f 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 53f763aaf..15fdbc349 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 ee74101d2..ea0669a6a 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 29ab83677..73685b0d4 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 fe744b741..1f22099d6 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 6769c8bd8..bd29d51fd 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 3ef34fec0..94c31bb23 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 70578b16c..bc48a9360 100644 --- a/hw/xwin/InitInput.c +++ b/hw/xwin/InitInput.c @@ -156,4 +156,5 @@ InitInput (int argc, char *argv[]) void CloseInput (void) { + mieqFini (); }