aboutsummaryrefslogtreecommitdiff
path: root/xorg-server
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server')
-rw-r--r--xorg-server/Xi/chgdctl.c3
-rw-r--r--xorg-server/Xi/exevents.c5
-rw-r--r--xorg-server/Xi/xiproperty.c3
-rw-r--r--xorg-server/configure.ac4
-rw-r--r--xorg-server/dix/getevents.c5
-rw-r--r--xorg-server/dix/touch.c4
-rw-r--r--xorg-server/doc/c-extensions129
-rw-r--r--xorg-server/hw/xfree86/common/xf86Events.c2
-rw-r--r--xorg-server/hw/xwin/winprefs.c2
-rw-r--r--xorg-server/include/xserver-properties.h3
-rw-r--r--xorg-server/os/utils.c20
-rw-r--r--xorg-server/xkb/xkbAccessX.c2
12 files changed, 112 insertions, 70 deletions
diff --git a/xorg-server/Xi/chgdctl.c b/xorg-server/Xi/chgdctl.c
index 9fe69a5ad..7daf58461 100644
--- a/xorg-server/Xi/chgdctl.c
+++ b/xorg-server/Xi/chgdctl.c
@@ -126,7 +126,8 @@ ProcXChangeDeviceControl(ClientPtr client)
.repType = X_Reply,
.RepType = X_ChangeDeviceControl,
.sequenceNumber = client->sequence,
- .length = 0
+ .length = 0,
+ .status = Success,
};
switch (stuff->control) {
diff --git a/xorg-server/Xi/exevents.c b/xorg-server/Xi/exevents.c
index 6ed499142..4cbeb3796 100644
--- a/xorg-server/Xi/exevents.c
+++ b/xorg-server/Xi/exevents.c
@@ -1862,6 +1862,11 @@ DeliverTouchEndEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev,
goto out;
}
+ if (listener->state == LISTENER_AWAITING_BEGIN) {
+ listener->state = LISTENER_HAS_END;
+ goto out;
+ }
+
/* Event in response to reject */
if (ev->device_event.flags & TOUCH_REJECT) {
if (listener->state != LISTENER_HAS_END)
diff --git a/xorg-server/Xi/xiproperty.c b/xorg-server/Xi/xiproperty.c
index 43351bccc..796ba0948 100644
--- a/xorg-server/Xi/xiproperty.c
+++ b/xorg-server/Xi/xiproperty.c
@@ -105,6 +105,9 @@ static struct dev_properties {
{0, AXIS_LABEL_PROP_ABS_MT_BLOB_ID},
{0, AXIS_LABEL_PROP_ABS_MT_TRACKING_ID},
{0, AXIS_LABEL_PROP_ABS_MT_PRESSURE},
+ {0, AXIS_LABEL_PROP_ABS_MT_DISTANCE},
+ {0, AXIS_LABEL_PROP_ABS_MT_TOOL_X},
+ {0, AXIS_LABEL_PROP_ABS_MT_TOOL_Y},
{0, AXIS_LABEL_PROP_ABS_MISC},
{0, BTN_LABEL_PROP},
{0, BTN_LABEL_PROP_BTN_UNKNOWN},
diff --git a/xorg-server/configure.ac b/xorg-server/configure.ac
index b6ed92cb3..86153ec81 100644
--- a/xorg-server/configure.ac
+++ b/xorg-server/configure.ac
@@ -420,7 +420,7 @@ case $host_os in
darwin*)
AC_DEFINE(CSRG_BASED, 1, [System is BSD-like])
;;
- cygwin*)
+ cygwin*|mingw*)
CFLAGS="$CFLAGS -DFD_SETSIZE=256"
;;
esac
@@ -1904,7 +1904,7 @@ if test "x$XWIN" = xyes; then
XWIN_SERVER_NAME=Xming
AC_DEFINE(RELOCATE_PROJECTROOT,1,[Make PROJECT_ROOT relative to the xserver location])
AC_DEFINE(HAS_WINSOCK,1,[Use Windows sockets])
- XWIN_SYS_LIBS=-lws2_32
+ XWIN_SYS_LIBS="-lpthread -lws2_32"
;;
esac
diff --git a/xorg-server/dix/getevents.c b/xorg-server/dix/getevents.c
index 71d83c4ba..8b4379d1c 100644
--- a/xorg-server/dix/getevents.c
+++ b/xorg-server/dix/getevents.c
@@ -1400,8 +1400,9 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type,
coordinates were.
*/
if (flags & POINTER_SCREEN) {
- screenx = sx;
- screeny = sy;
+ scr = miPointerGetScreen(pDev);
+ screenx = sx + scr->x;
+ screeny = sy + scr->y;
}
scr = positionSprite(pDev, (flags & POINTER_ABSOLUTE) ? Absolute : Relative,
diff --git a/xorg-server/dix/touch.c b/xorg-server/dix/touch.c
index e64a6262c..5f77be575 100644
--- a/xorg-server/dix/touch.c
+++ b/xorg-server/dix/touch.c
@@ -572,8 +572,8 @@ TouchBuildSprite(DeviceIntPtr sourcedev, TouchPointInfoPtr ti,
return FALSE;
/* Mark which grabs/event selections we're delivering to: max one grab per
- * window plus the bottom-most event selection. */
- ti->listeners = calloc(sprite->spriteTraceGood + 1, sizeof(*ti->listeners));
+ * window plus the bottom-most event selection, plus any active grab. */
+ ti->listeners = calloc(sprite->spriteTraceGood + 2, sizeof(*ti->listeners));
if (!ti->listeners) {
sprite->spriteTraceGood = 0;
return FALSE;
diff --git a/xorg-server/doc/c-extensions b/xorg-server/doc/c-extensions
index 984022333..4a9006150 100644
--- a/xorg-server/doc/c-extensions
+++ b/xorg-server/doc/c-extensions
@@ -1,61 +1,68 @@
-First of all: C89 or better. If you don't have that, port gcc first.
-
-Use of C language extensions throughout the X server tree
----------------------------------------------------------
-
-Optional extensions:
-The server will still build if your toolchain does not support these
-extensions, although the results may not be optimal.
-
- * _X_SENTINEL(x): member x of the passed structure must be NULL, e.g.:
- void parseOptions(Option *options _X_SENTINEL(0));
- parseOptions("foo", "bar", NULL); /* this is OK */
- parseOptions("foo", "bar", "baz"); /* this is not */
- This definition comes from Xfuncproto.h in the core
- protocol headers.
- * _X_ATTRIBUTE_PRINTF(x, y): This function has printf-like semantics;
- check the format string when built with
- -Wformat (gcc) or similar.
- * _X_EXPORT: this function should appear in symbol tables.
- * _X_HIDDEN: this function should not appear in the _dynamic_ symbol
- table.
- * _X_INTERNAL: like _X_HIDDEN, but attempt to ensure that this function
- is never called from another module.
- * _X_INLINE: inline this functon if possible (generally obeyed unless
- disabling optimisations).
- * _X_DEPRECATED: warn on use of this function.
-
-Mandatory extensions:
-The server will not build if your toolchain does not support these extensions.
-
- * named initialisers: explicitly initialising structure members, e.g.:
- struct foo bar = { .baz = quux, .brian = "dog" };
- * variadic macros: macros with a variable number of arguments, e.g.:
- #define DebugF(x, ...) /**/
- * interleaved code and declarations: { foo = TRUE; int bar; do_stuff(); }
-
-
-Use of OS and library facilities throughout the X server tree
--------------------------------------------------------------
-
-Non-OS-dependent code can assume facilities at least as good as
-the non-OS-facility parts of POSIX-1.2001. Ideally this would
-be C99, but even gcc+glibc doesn't implement that yet.
-
-Unix-like systems are assumed to be at least as good as UNIX03.
-
-Linux systems must be at least 2.4 or later. As a practical matter
-though, 2.4 kernels never receive any testing. Use 2.6 already.
-
-TODO: Solaris.
-
-TODO: *BSD.
-
-Code that needs to be portable to Windows should be careful to,
-well, be portable. Note that there are two Windows ports, cygwin and
-mingw. Cygwin is more or less like Linux, but mingw is a bit more
-restrictive. TODO: document which versions of Windows we actually care
-about.
-
-OSX support is generally limited to the most recent version. Currently
-that means 10.5.
+First of all: C89 or better. If you don't have that, port gcc first.
+
+Use of C language extensions throughout the X server tree
+---------------------------------------------------------
+
+Optional extensions:
+The server will still build if your toolchain does not support these
+extensions, although the results may not be optimal.
+
+ * _X_SENTINEL(x): member x of the passed structure must be NULL, e.g.:
+ void parseOptions(Option *options _X_SENTINEL(0));
+ parseOptions("foo", "bar", NULL); /* this is OK */
+ parseOptions("foo", "bar", "baz"); /* this is not */
+ This definition comes from Xfuncproto.h in the core
+ protocol headers.
+ * _X_ATTRIBUTE_PRINTF(x, y): This function has printf-like semantics;
+ check the format string when built with
+ -Wformat (gcc) or similar.
+ * _X_EXPORT: this function should appear in symbol tables.
+ * _X_HIDDEN: this function should not appear in the _dynamic_ symbol
+ table.
+ * _X_INTERNAL: like _X_HIDDEN, but attempt to ensure that this function
+ is never called from another module.
+ * _X_INLINE: inline this functon if possible (generally obeyed unless
+ disabling optimisations).
+ * _X_DEPRECATED: warn on use of this function.
+
+Mandatory extensions:
+The server will not build if your toolchain does not support these extensions.
+
+ * named initialisers: explicitly initialising structure members, e.g.:
+ struct foo bar = { .baz = quux, .brian = "dog" };
+ * variadic macros: macros with a variable number of arguments, e.g.:
+ #define DebugF(x, ...) /**/
+ * interleaved code and declarations: { foo = TRUE; int bar; do_stuff(); }
+
+
+Use of library facilities throughout the X server tree
+-------------------------------------------------------------
+
+Non-OS-dependent code can assume facilities at least as good as
+the non-OS-facility parts of POSIX-1.2001. Ideally this would
+be C99, but even gcc+glibc doesn't implement that yet.
+
+Unix-like systems are assumed to be at least as good as UNIX03.
+
+Note that there are two Windows ports, Cygwin and MinGW:
+- Cygwin is more or less like Linux.
+- MinGW is more restrictive. Windows does not provide the required
+POSIX facilities, so some non-OS-dependent code is stubbed out or
+has an alternate implementation if WIN32 is defined. Code that
+needs to be portable to Windows should be careful to, well, be portable.
+
+
+Required OS facilities
+-------------------------------------------------------------
+
+Linux systems must be at least 2.4 or later. As a practical matter
+though, 2.4 kernels never receive any testing. Use 2.6 already.
+
+TODO: Solaris.
+
+TODO: *BSD.
+
+Windows-dependent code assumes at least NT 5.1.
+
+OSX support is generally limited to the most recent version. Currently
+that means 10.5.
diff --git a/xorg-server/hw/xfree86/common/xf86Events.c b/xorg-server/hw/xfree86/common/xf86Events.c
index 3ad34b543..9dabf103f 100644
--- a/xorg-server/hw/xfree86/common/xf86Events.c
+++ b/xorg-server/hw/xfree86/common/xf86Events.c
@@ -376,7 +376,7 @@ static void
xf86ReleaseKeys(DeviceIntPtr pDev)
{
KeyClassPtr keyc;
- int i, sigstate;
+ int i;
if (!pDev || !pDev->key)
return;
diff --git a/xorg-server/hw/xwin/winprefs.c b/xorg-server/hw/xwin/winprefs.c
index dbc5b5228..6cbd7ad80 100644
--- a/xorg-server/hw/xwin/winprefs.c
+++ b/xorg-server/hw/xwin/winprefs.c
@@ -645,6 +645,7 @@ winPrefsLoadPreferences(char *path)
if (path)
prefFile = fopen(path, "r");
+#ifdef __CYGWIN__
else {
char defaultPrefs[] =
"MENU rmenu {\n"
@@ -656,6 +657,7 @@ winPrefsLoadPreferences(char *path)
path = "built-in default";
prefFile = fmemopen(defaultPrefs, strlen(defaultPrefs), "r");
}
+#endif
if (!prefFile) {
ErrorF("LoadPreferences: %s not found\n", path);
diff --git a/xorg-server/include/xserver-properties.h b/xorg-server/include/xserver-properties.h
index 85f2ce5c4..bf48fabe5 100644
--- a/xorg-server/include/xserver-properties.h
+++ b/xorg-server/include/xserver-properties.h
@@ -118,6 +118,9 @@
#define AXIS_LABEL_PROP_ABS_MT_BLOB_ID "Abs MT Blob ID"
#define AXIS_LABEL_PROP_ABS_MT_TRACKING_ID "Abs MT Tracking ID"
#define AXIS_LABEL_PROP_ABS_MT_PRESSURE "Abs MT Pressure"
+#define AXIS_LABEL_PROP_ABS_MT_DISTANCE "Abs MT Distance"
+#define AXIS_LABEL_PROP_ABS_MT_TOOL_X "Abs MT Tool X"
+#define AXIS_LABEL_PROP_ABS_MT_TOOL_Y "Abs MT Tool Y"
#define AXIS_LABEL_PROP_ABS_MISC "Abs Misc"
/* Button names */
diff --git a/xorg-server/os/utils.c b/xorg-server/os/utils.c
index 04bcbc61f..3c520add5 100644
--- a/xorg-server/os/utils.c
+++ b/xorg-server/os/utils.c
@@ -235,6 +235,19 @@ OsSignal(int sig, OsSigHandlerPtr handler)
#define LOCK_PREFIX "/.X"
#define LOCK_SUFFIX "-lock"
+#if !defined(WIN32) || defined(__CYGWIN__)
+#define LOCK_SERVER
+#endif
+
+#ifndef LOCK_SERVER
+void
+LockServer(void)
+{}
+
+void
+UnlockServer(void)
+{}
+#else /* LOCK_SERVER */
static Bool StillLocking = FALSE;
static char LockFile[PATH_MAX];
static Bool nolock = FALSE;
@@ -382,6 +395,7 @@ UnlockServer(void)
(void) unlink(LockFile);
}
}
+#endif /* LOCK_SERVER */
/* Force connections to close on SIGHUP from init */
@@ -503,7 +517,9 @@ UseMsg(void)
#ifdef RLIMIT_STACK
ErrorF("-ls int limit stack space to N Kb\n");
#endif
+#ifdef LOCK_SERVER
ErrorF("-nolock disable the locking mechanism\n");
+#endif
ErrorF("-nolisten string don't listen on protocol\n");
ErrorF("-noreset don't reset after last client exists\n");
ErrorF("-background [none] create root window with no background\n");
@@ -664,7 +680,9 @@ ProcessCommandLine(int argc, char *argv[])
if (++i < argc) {
displayfd = atoi(argv[i]);
display = NULL;
+#ifdef LOCK_SERVER
nolock = TRUE;
+#endif
}
else
UseMsg();
@@ -744,6 +762,7 @@ ProcessCommandLine(int argc, char *argv[])
UseMsg();
}
#endif
+#ifdef LOCK_SERVER
else if (strcmp(argv[i], "-nolock") == 0) {
#if !defined(WIN32) && !defined(__CYGWIN__)
if (getuid() != 0)
@@ -753,6 +772,7 @@ ProcessCommandLine(int argc, char *argv[])
#endif
nolock = TRUE;
}
+#endif
else if (strcmp(argv[i], "-nolisten") == 0) {
if (++i < argc) {
if (_XSERVTransNoListen(argv[i]))
diff --git a/xorg-server/xkb/xkbAccessX.c b/xorg-server/xkb/xkbAccessX.c
index 082c0db57..c1af32eb9 100644
--- a/xorg-server/xkb/xkbAccessX.c
+++ b/xorg-server/xkb/xkbAccessX.c
@@ -709,7 +709,7 @@ ProcessPointerEvent(InternalEvent *ev, DeviceIntPtr mouse)
xkbDeviceInfoPtr xkbPrivPtr = XKBDEVICEINFO(mouse);
DeviceEvent *event = &ev->device_event;
- dev = IsFloating(mouse) ? mouse : GetMaster(mouse, MASTER_KEYBOARD);
+ dev = (IsMaster(mouse) || IsFloating(mouse)) ? mouse : GetMaster(mouse, MASTER_KEYBOARD);
if (dev && dev->key) {
xkbi = dev->key->xkbInfo;