summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter@cs.unisa.edu.au>2007-04-12 11:11:03 +0930
committerPeter Hutterer <peter@cs.unisa.edu.au>2007-04-12 11:11:03 +0930
commitd4dad6f84f82a4ade5005c3aa93511c1295875b8 (patch)
tree7a849db2957c762966a493a322e3608e3ef95b3d
parentf1f8b562aaaa6ec32ab0d0697f964d92d6d536a4 (diff)
parent33a5d9605e3e282f6aa1921d7321a2a12ef02c42 (diff)
Merge branch 'master' into mpx
Conflicts: configure.ac dix/events.c hw/xfree86/common/xf86Xinput.c
-rw-r--r--GL/glx/glxdri.c6
-rw-r--r--GL/glx/glxext.c2
-rw-r--r--GL/glx/glxext.h2
-rw-r--r--GL/glx/indirect_size_get.c6
-rw-r--r--GL/mesa/.gitignore2
-rw-r--r--GL/mesa/X/Makefile.am5
-rw-r--r--GL/mesa/X/xf86glx_util.c149
-rw-r--r--GL/mesa/X/xf86glx_util.h105
-rwxr-xr-xGL/symlink-mesa.sh5
-rw-r--r--Xext/sync.c2
-rw-r--r--Xext/xcmisc.c13
-rw-r--r--Xext/xvmain.c8
-rw-r--r--Xext/xvmc.c2
-rw-r--r--Xi/stubs.c14
-rw-r--r--config/config.c113
-rw-r--r--configure.ac25
-rw-r--r--dix/atom.c6
-rw-r--r--dix/devices.c36
-rw-r--r--dix/dispatch.c8
-rw-r--r--dix/dixfonts.c4
-rw-r--r--dix/dixutils.c4
-rw-r--r--dix/events.c8
-rw-r--r--dix/extension.c2
-rw-r--r--dix/getevents.c24
-rw-r--r--dix/initatoms.c2
-rw-r--r--dix/main.c2
-rw-r--r--dix/privates.c28
-rw-r--r--dix/resource.c4
-rw-r--r--exa/exa.c3
-rw-r--r--exa/exa.h19
-rw-r--r--fb/Makefile.am2
-rw-r--r--fb/fbcmap.c91
-rw-r--r--fb/fbcmap_mi.c123
-rw-r--r--hw/darwin/Makefile.am6
-rw-r--r--hw/dmx/Makefile.am5
-rw-r--r--hw/dmx/input/dmxbackend.c32
-rw-r--r--hw/dmx/input/dmxcommon.c16
-rw-r--r--hw/dmx/input/dmxconsole.c9
-rw-r--r--hw/dmx/input/dmxdummy.c2
-rw-r--r--hw/dmx/input/dmxevents.c378
-rw-r--r--hw/dmx/input/dmxinputinit.c11
-rw-r--r--hw/kdrive/src/kinput.c13
-rw-r--r--hw/vfb/Makefile.am4
-rw-r--r--hw/xfree86/common/xf86Config.c12
-rw-r--r--hw/xfree86/common/xf86Configure.c15
-rw-r--r--hw/xfree86/common/xf86DGA.c3
-rw-r--r--hw/xfree86/common/xf86Helper.c3
-rw-r--r--hw/xfree86/common/xf86Option.c4
-rw-r--r--hw/xfree86/common/xf86Xinput.c89
-rw-r--r--hw/xfree86/dixmods/Makefile.am8
-rw-r--r--hw/xfree86/doc/man/xorg.conf.man.pre4
-rw-r--r--hw/xfree86/modes/xf86Crtc.c69
-rw-r--r--hw/xfree86/modes/xf86Crtc.h7
-rw-r--r--hw/xfree86/modes/xf86RandR12.c22
-rw-r--r--hw/xfree86/modes/xf86RandR12.h1
-rw-r--r--hw/xfree86/os-support/bsd/Makefile.am3
-rw-r--r--hw/xfree86/os-support/bsd/ppc_video.c33
-rw-r--r--hw/xfree86/os-support/bus/linuxPci.c4
-rw-r--r--hw/xfree86/os-support/linux/lnx_init.c14
-rw-r--r--hw/xfree86/parser/Flags.c28
-rw-r--r--hw/xfree86/parser/write.c18
-rw-r--r--hw/xfree86/utils/xorgcfg/text-mode.c4
-rw-r--r--hw/xnest/Display.c2
-rw-r--r--hw/xnest/Events.c8
-rw-r--r--hw/xnest/Makefile.am4
-rw-r--r--hw/xprint/Makefile.am2
-rw-r--r--hw/xprint/ddxInit.c6
-rw-r--r--include/input.h5
-rw-r--r--mi/micmap.c4
-rw-r--r--mi/mieq.c6
-rw-r--r--os/log.c4
-rw-r--r--os/oscolor.c2
-rw-r--r--os/utils.c8
-rw-r--r--randr/rrscreen.c31
-rw-r--r--render/glyph.c4
75 files changed, 865 insertions, 863 deletions
diff --git a/GL/glx/glxdri.c b/GL/glx/glxdri.c
index 5e683a8ab..c30f372fd 100644
--- a/GL/glx/glxdri.c
+++ b/GL/glx/glxdri.c
@@ -829,12 +829,16 @@ static Bool
glxDRIEnterVT (int index, int flags)
{
__GLXDRIscreen *screen = (__GLXDRIscreen *) __glXgetActiveScreen(index);
+ Bool ret;
LogMessage(X_INFO, "AIGLX: Resuming AIGLX clients after VT switch\n");
+ if (!(*screen->enterVT) (index, flags))
+ return FALSE;
+
glxResumeClients();
- return (*screen->enterVT) (index, flags);
+ return TRUE;
}
static void
diff --git a/GL/glx/glxext.c b/GL/glx/glxext.c
index 1f6c7f376..ca874e33b 100644
--- a/GL/glx/glxext.c
+++ b/GL/glx/glxext.c
@@ -275,7 +275,7 @@ static GLboolean errorOccured = GL_FALSE;
/*
** The GL was will call this routine if an error occurs.
*/
-void __glXErrorCallBack(__GLinterface *gc, GLenum code)
+void __glXErrorCallBack(GLenum code)
{
errorOccured = GL_TRUE;
}
diff --git a/GL/glx/glxext.h b/GL/glx/glxext.h
index edd66a8f0..dc4cd4afe 100644
--- a/GL/glx/glxext.h
+++ b/GL/glx/glxext.h
@@ -66,7 +66,7 @@ typedef struct {
extern GLboolean __glXFreeContext(__GLXcontext *glxc);
extern void __glXFlushContextCache(void);
-extern void __glXErrorCallBack(__GLinterface *gc, GLenum code);
+extern void __glXErrorCallBack(GLenum code);
extern void __glXClearErrorOccured(void);
extern GLboolean __glXErrorOccured(void);
extern void __glXResetLargeCommandStatus(__GLXclientState*);
diff --git a/GL/glx/indirect_size_get.c b/GL/glx/indirect_size_get.c
index 150c6a182..ccb25f80e 100644
--- a/GL/glx/indirect_size_get.c
+++ b/GL/glx/indirect_size_get.c
@@ -639,7 +639,7 @@ __glGetBooleanv_size(GLenum e)
case GL_PROGRAM_ERROR_POSITION_ARB:
case GL_DEPTH_CLAMP_NV:
case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
-/* case GL_NUM_TEXTURE_COMPRESSED_FORMATS_ARB:*/
+/* case GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB:*/
case GL_MAX_VERTEX_UNITS_ARB:
case GL_ACTIVE_VERTEX_UNITS_ARB:
case GL_WEIGHT_SUM_UNITY_ARB:
@@ -699,6 +699,8 @@ __glGetBooleanv_size(GLenum e)
/* case GL_POINT_SPRITE_NV:*/
case GL_POINT_SPRITE_R_MODE_NV:
case GL_MAX_VERTEX_ATTRIBS_ARB:
+ case GL_MAX_TEXTURE_COORDS_ARB:
+ case GL_MAX_TEXTURE_IMAGE_UNITS_ARB:
case GL_DEPTH_BOUNDS_TEST_EXT:
case GL_STENCIL_TEST_TWO_SIDE_EXT:
case GL_ACTIVE_STENCIL_FACE_EXT:
@@ -1005,8 +1007,6 @@ __glGetProgramivARB_size(GLenum e)
case GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB:
case GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB:
case GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB:
- case GL_MAX_TEXTURE_COORDS_ARB:
- case GL_MAX_TEXTURE_IMAGE_UNITS_ARB:
case GL_PROGRAM_FORMAT_ARB:
case GL_PROGRAM_INSTRUCTIONS_ARB:
case GL_MAX_PROGRAM_INSTRUCTIONS_ARB:
diff --git a/GL/mesa/.gitignore b/GL/mesa/.gitignore
index a00885d6d..6b92b24bd 100644
--- a/GL/mesa/.gitignore
+++ b/GL/mesa/.gitignore
@@ -1,6 +1,6 @@
X/drivers
X/glxheader.h
-X/xmesaP.h
+X/xm*.h
X/xm*.c
mesa/drivers
mesa/glxheader.h
diff --git a/GL/mesa/X/Makefile.am b/GL/mesa/X/Makefile.am
index 056d31ab5..f8f16c39e 100644
--- a/GL/mesa/X/Makefile.am
+++ b/GL/mesa/X/Makefile.am
@@ -22,14 +22,13 @@ AM_CFLAGS = \
-DXFree86Server \
@GLX_DEFINES@
-libX_la_SOURCES = xf86glx.c \
- xf86glx_util.c \
- xf86glx_util.h
+libX_la_SOURCES = xf86glx.c
nodist_libX_la_SOURCES = \
xm_api.c \
xm_buffer.c \
xm_dd.c \
+ xm_image.c \
xm_line.c \
xm_span.c \
xm_tri.c \
diff --git a/GL/mesa/X/xf86glx_util.c b/GL/mesa/X/xf86glx_util.c
deleted file mode 100644
index 6af773f53..000000000
--- a/GL/mesa/X/xf86glx_util.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/**************************************************************************
-
-Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
-All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sub license, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice (including the
-next paragraph) shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
-ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Kevin E. Martin <kevin@precisioninsight.com>
- * Brian Paul <brian@precisioninsight.com>
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <stdlib.h>
-
-#include "xf86glx_util.h"
-#include <X11/Xmd.h>
-
-#ifdef ROUNDUP
-#undef ROUNDUP
-#endif
-
-#define ROUNDUP(nbytes, pad) ((((nbytes) + ((pad)-1)) / (pad)) * ((pad)>>3))
-
-XMesaImage *XMesaCreateImage(int bitsPerPixel, int width, int height, char *data)
-{
- XMesaImage *image;
-
- image = (XMesaImage *)xalloc(sizeof(XMesaImage));
-
- if (image) {
- image->width = width;
- image->height = height;
- image->data = data;
- /* Always pad to 32 bits */
- image->bytes_per_line = ROUNDUP((bitsPerPixel * width), 32);
- image->bits_per_pixel = bitsPerPixel;
- }
-
- return image;
-}
-
-void XMesaDestroyImage(XMesaImage *image)
-{
- if (image->data)
- free(image->data);
- xfree(image);
-}
-
-unsigned long XMesaGetPixel(XMesaImage *image, int x, int y)
-{
- CARD8 *row = (CARD8 *)(image->data + y*image->bytes_per_line);
- CARD8 *i8;
- CARD16 *i16;
- CARD32 *i32;
- switch (image->bits_per_pixel) {
- case 8:
- i8 = (CARD8 *)row;
- return i8[x];
- break;
- case 15:
- case 16:
- i16 = (CARD16 *)row;
- return i16[x];
- break;
- case 24: /* WARNING: architecture specific code */
- i8 = (CARD8 *)row;
- return (((CARD32)i8[x*3]) |
- (((CARD32)i8[x*3+1])<<8) |
- (((CARD32)i8[x*3+2])<<16));
- break;
- case 32:
- i32 = (CARD32 *)row;
- return i32[x];
- break;
- }
- return 0;
-}
-
-#ifndef XMESA_USE_PUTPIXEL_MACRO
-void XMesaPutPixel(XMesaImage *image, int x, int y, unsigned long pixel)
-{
- CARD8 *row = (CARD8 *)(image->data + y*image->bytes_per_line);
- CARD8 *i8;
- CARD16 *i16;
- CARD32 *i32;
- switch (image->bits_per_pixel) {
- case 8:
- i8 = (CARD8 *)row;
- i8[x] = (CARD8)pixel;
- break;
- case 15:
- case 16:
- i16 = (CARD16 *)row;
- i16[x] = (CARD16)pixel;
- break;
- case 24: /* WARNING: architecture specific code */
- i8 = (CARD8 *)__row;
- i8[x*3] = (CARD8)(p);
- i8[x*3+1] = (CARD8)(p>>8);
- i8[x*3+2] = (CARD8)(p>>16);
- case 32:
- i32 = (CARD32 *)row;
- i32[x] = (CARD32)pixel;
- break;
- }
-}
-#endif
-
-void XMesaPutImageHelper(ScreenPtr display,
- DrawablePtr d, GCPtr gc,
- XMesaImage *image,
- int src_x, int src_y,
- int dest_x, int dest_y,
- unsigned int width, unsigned int height)
-{
- /* NOT_DONE: Verify that the following works for all depths */
- char *src = (image->data +
- src_y * image->bytes_per_line +
- ((src_x * image->bits_per_pixel) >> 3));
-
- ValidateGC(d, gc);
- (*gc->ops->PutImage)(d, gc, d->depth, dest_x, dest_y, width, height,
- 0, ZPixmap, src);
-}
diff --git a/GL/mesa/X/xf86glx_util.h b/GL/mesa/X/xf86glx_util.h
deleted file mode 100644
index bb314128d..000000000
--- a/GL/mesa/X/xf86glx_util.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/**************************************************************************
-
-Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
-All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sub license, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice (including the
-next paragraph) shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
-ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Kevin E. Martin <kevin@precisioninsight.com>
- * Brian Paul <brian@precisioninsight.com>
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#ifndef _XF86GLX_UTIL_H_
-#define _XF86GLX_UTIL_H_
-
-#ifdef __CYGWIN__
-#undef WIN32
-#undef _WIN32
-#endif
-
-#include <screenint.h>
-#include <pixmap.h>
-#include <gc.h>
-#include "GL/xmesa.h"
-
-#define XMESA_USE_PUTPIXEL_MACRO
-
-struct _XMesaImageRec {
- int width, height;
- char *data;
- int bytes_per_line; /* Padded to 32 bits */
- int bits_per_pixel;
-};
-
-extern XMesaImage *XMesaCreateImage(int bitsPerPixel, int width, int height,
- char *data);
-extern void XMesaDestroyImage(XMesaImage *image);
-extern unsigned long XMesaGetPixel(XMesaImage *image, int x, int y);
-#ifdef XMESA_USE_PUTPIXEL_MACRO
-#define XMesaPutPixel(__i,__x,__y,__p) \
-{ \
- CARD8 *__row = (CARD8 *)(__i->data + __y*__i->bytes_per_line); \
- CARD8 *__i8; \
- CARD16 *__i16; \
- CARD32 *__i32; \
- switch (__i->bits_per_pixel) { \
- case 8: \
- __i8 = (CARD8 *)__row; \
- __i8[__x] = (CARD8)__p; \
- break; \
- case 15: \
- case 16: \
- __i16 = (CARD16 *)__row; \
- __i16[__x] = (CARD16)__p; \
- break; \
- case 24: /* WARNING: architecture specific code */ \
- __i8 = (CARD8 *)__row; \
- __i8[__x*3] = (CARD8)(__p); \
- __i8[__x*3+1] = (CARD8)(__p>>8); \
- __i8[__x*3+2] = (CARD8)(__p>>16); \
- break; \
- case 32: \
- __i32 = (CARD32 *)__row; \
- __i32[__x] = (CARD32)__p; \
- break; \
- } \
-}
-#else
-extern void XMesaPutPixel(XMesaImage *image, int x, int y,
- unsigned long pixel);
-#endif
-
-extern void XMesaPutImageHelper(ScreenPtr display,
- DrawablePtr d, GCPtr gc,
- XMesaImage *image,
- int src_x, int src_y,
- int dest_x, int dest_y,
- unsigned int width, unsigned int height);
-
-#endif /* _XF86GLX_UTIL_H_ */
diff --git a/GL/symlink-mesa.sh b/GL/symlink-mesa.sh
index 7d1e06ec8..0cfe1c9b6 100755
--- a/GL/symlink-mesa.sh
+++ b/GL/symlink-mesa.sh
@@ -168,6 +168,8 @@ symlink_mesa_x() {
action xm_api.c
action xm_buffer.c
action xm_dd.c
+ action xm_image.c
+ action xm_image.h
action xm_line.c
action xm_span.c
action xm_tri.c
@@ -225,9 +227,6 @@ symlink_glx() {
dst_dir glx
action indirect_size.h
-
- src_dir src/mesa/drivers/dri/common
-
action glcontextmodes.c
action glcontextmodes.h
diff --git a/Xext/sync.c b/Xext/sync.c
index 531b48cc1..c5441a115 100644
--- a/Xext/sync.c
+++ b/Xext/sync.c
@@ -2509,7 +2509,7 @@ ServertimeBracketValues(pCounter, pbracket_less, pbracket_greater)
}
static void
-SyncInitServerTime()
+SyncInitServerTime(void)
{
CARD64 resolution;
diff --git a/Xext/xcmisc.c b/Xext/xcmisc.c
index f26218e97..8c7a86e6a 100644
--- a/Xext/xcmisc.c
+++ b/Xext/xcmisc.c
@@ -42,6 +42,12 @@ from The Open Group.
#include <X11/extensions/xcmiscstr.h>
#include "modinit.h"
+#if HAVE_STDINT_H
+#include <stdint.h>
+#elif !defined(UINT32_MAX)
+#define UINT32_MAX 0xffffffffU
+#endif
+
#if 0
static unsigned char XCMiscCode;
#endif
@@ -143,7 +149,10 @@ ProcXCMiscGetXIDList(client)
REQUEST_SIZE_MATCH(xXCMiscGetXIDListReq);
- pids = (XID *)ALLOCATE_LOCAL(stuff->count * sizeof(XID));
+ if (stuff->count > UINT32_MAX / sizeof(XID))
+ return BadAlloc;
+
+ pids = (XID *)Xalloc(stuff->count * sizeof(XID));
if (!pids)
{
return BadAlloc;
@@ -164,7 +173,7 @@ ProcXCMiscGetXIDList(client)
client->pSwapReplyFunc = (ReplySwapPtr) Swap32Write;
WriteSwappedDataToClient(client, count * sizeof(XID), pids);
}
- DEALLOCATE_LOCAL(pids);
+ Xfree(pids);
return(client->noClientException);
}
diff --git a/Xext/xvmain.c b/Xext/xvmain.c
index 22339011c..ddf3d1d6b 100644
--- a/Xext/xvmain.c
+++ b/Xext/xvmain.c
@@ -153,7 +153,7 @@ static int XvdiSendVideoNotify(XvPortPtr, DrawablePtr, int);
*/
void
-XvExtensionInit()
+XvExtensionInit(void)
{
ExtensionEntry *extEntry;
@@ -205,7 +205,7 @@ XvExtensionInit()
}
static Bool
-CreateResourceTypes()
+CreateResourceTypes(void)
{
@@ -335,13 +335,13 @@ XvResetProc(ExtensionEntry* extEntry)
}
_X_EXPORT int
-XvGetScreenIndex()
+XvGetScreenIndex(void)
{
return XvScreenIndex;
}
_X_EXPORT unsigned long
-XvGetRTPort()
+XvGetRTPort(void)
{
return XvRTPort;
}
diff --git a/Xext/xvmc.c b/Xext/xvmc.c
index 737fc5dfd..ae358936e 100644
--- a/Xext/xvmc.c
+++ b/Xext/xvmc.c
@@ -675,7 +675,7 @@ SProcXvMCDispatch (ClientPtr client)
}
void
-XvMCExtensionInit()
+XvMCExtensionInit(void)
{
ExtensionEntry *extEntry;
diff --git a/Xi/stubs.c b/Xi/stubs.c
index ed041b815..40cd02fe1 100644
--- a/Xi/stubs.c
+++ b/Xi/stubs.c
@@ -226,7 +226,19 @@ ChangeDeviceControl(ClientPtr client, DeviceIntPtr dev,
*
*/
int
-NewInputDeviceRequest(InputOption *options)
+NewInputDeviceRequest(InputOption *options, DeviceIntPtr *pdev)
{
return BadValue;
}
+
+/****************************************************************************
+ *
+ * Caller: configRemoveDevice (and others)
+ *
+ * Remove the specified device previously added.
+ *
+ */
+void
+DeleteInputDeviceRequest(DeviceIntPtr dev)
+{
+}
diff --git a/config/config.c b/config/config.c
index 6c4014352..9828091f4 100644
--- a/config/config.c
+++ b/config/config.c
@@ -92,12 +92,15 @@ configTeardown(void)
}
static int
-configAddDevice(DBusMessage *message, DBusMessageIter *iter, DBusError *error)
+configAddDevice(DBusMessage *message, DBusMessageIter *iter,
+ DBusMessage *reply, DBusMessageIter *r_iter,
+ DBusError *error)
{
DBusMessageIter subiter;
InputOption *tmpo = NULL, *options = NULL;
char *tmp = NULL;
int ret = BadMatch;
+ DeviceIntPtr dev = NULL;
DebugF("[config] adding device\n");
@@ -110,6 +113,11 @@ configAddDevice(DBusMessage *message, DBusMessageIter *iter, DBusError *error)
options->key = xstrdup("_source");
options->value = xstrdup("client/dbus");
+ if(!options->key || !options->value) {
+ ErrorF("[config] couldn't allocate first key/value pair\n");
+ ret = BadAlloc;
+ goto unwind;
+ }
while (dbus_message_iter_get_arg_type(iter) == DBUS_TYPE_ARRAY) {
tmpo = (InputOption *) xcalloc(sizeof(InputOption), 1);
@@ -118,6 +126,8 @@ configAddDevice(DBusMessage *message, DBusMessageIter *iter, DBusError *error)
ret = BadAlloc;
goto unwind;
}
+ tmpo->next = options;
+ options = tmpo;
dbus_message_iter_recurse(iter, &subiter);
@@ -132,8 +142,8 @@ configAddDevice(DBusMessage *message, DBusMessageIter *iter, DBusError *error)
tmp);
MALFORMED_MESSAGE();
}
- tmpo->key = xstrdup(tmp);
- if (!tmpo->key) {
+ options->key = xstrdup(tmp);
+ if (!options->key) {
ErrorF("[config] couldn't duplicate key!\n");
ret = BadAlloc;
goto unwind;
@@ -148,31 +158,37 @@ configAddDevice(DBusMessage *message, DBusMessageIter *iter, DBusError *error)
dbus_message_iter_get_basic(&subiter, &tmp);
if (!tmp)
MALFORMED_MESSAGE();
- tmpo->value = xstrdup(tmp);
- if (!tmpo->value) {
+ options->value = xstrdup(tmp);
+ if (!options->value) {
ErrorF("[config] couldn't duplicate option!\n");
ret = BadAlloc;
goto unwind;
}
- tmpo->next = options;
- options = tmpo;
dbus_message_iter_next(iter);
}
- ret = NewInputDeviceRequest(options);
- if (ret != Success)
+ ret = NewInputDeviceRequest(options, &dev);
+ if (ret != Success) {
DebugF("[config] NewInputDeviceRequest failed\n");
+ goto unwind;
+ }
- return ret;
+ if (!dev) {
+ DebugF("[config] NewInputDeviceRequest succeeded, without device\n");
+ ret = BadMatch;
+ goto unwind;
+ }
+
+ if (!dbus_message_iter_append_basic(r_iter, DBUS_TYPE_INT32, &(dev->id))) {
+ ErrorF("[config] couldn't append to iterator\n");
+ ret = BadAlloc;
+ goto unwind;
+ }
unwind:
- if (tmpo->key)
- xfree(tmpo->key);
- if (tmpo->value)
- xfree(tmpo->value);
- if (tmpo)
- xfree(tmpo);
+ if (dev && ret != Success)
+ RemoveDevice(dev);
while (options) {
tmpo = options;
@@ -212,7 +228,7 @@ configRemoveDevice(DBusMessage *message, DBusMessageIter *iter,
* already been removed. */
OsBlockSignals();
ProcessInputEvents();
- RemoveDevice(pDev);
+ DeleteInputDeviceRequest(pDev);
OsReleaseSignals();
return Success;
@@ -221,17 +237,47 @@ unwind:
return ret;
}
+static int
+configListDevices(DBusMessage *message, DBusMessageIter *iter,
+ DBusMessage *reply, DBusMessageIter *r_iter,
+ DBusError *error)
+{
+ DeviceIntPtr d;
+ int ret = BadMatch;
+
+ for (d = inputInfo.devices; d; d = d->next) {
+ if (!dbus_message_iter_append_basic(r_iter, DBUS_TYPE_INT32,
+ &(d->id))) {
+ ErrorF("[config] couldn't append to iterator\n");
+ ret = BadAlloc;
+ goto unwind;
+ }
+ if (!dbus_message_iter_append_basic(r_iter, DBUS_TYPE_STRING,
+ &(d->name))) {
+ ErrorF("[config] couldn't append to iterator\n");
+ ret = BadAlloc;
+ goto unwind;
+ }
+ }
+
+unwind:
+ return ret;
+}
+
static DBusHandlerResult
configMessage(DBusConnection *connection, DBusMessage *message, void *closure)
{
DBusMessageIter iter;
DBusError error;
DBusMessage *reply;
+ DBusMessageIter r_iter;
DBusConnection *bus = closure;
int ret = BadDrawable; /* nonsensical value */
dbus_error_init(&error);
+ DebugF("[config] received a message\n");
+
if (strcmp(dbus_message_get_interface(message),
"org.x.config.input") == 0) {
if (!dbus_message_iter_init(message, &iter)) {
@@ -240,26 +286,33 @@ configMessage(DBusConnection *connection, DBusMessage *message, void *closure)
return DBUS_HANDLER_RESULT_NEED_MEMORY; /* ?? */
}
+ if (!(reply = dbus_message_new_method_return(message))) {
+ ErrorF("[config] failed to create the reply message\n");
+ dbus_error_free(&error);
+ return DBUS_HANDLER_RESULT_NEED_MEMORY;
+ }
+ dbus_message_iter_init_append(reply, &r_iter);
+
if (strcmp(dbus_message_get_member(message), "add") == 0)
- ret = configAddDevice(message, &iter, &error);
+ ret = configAddDevice(message, &iter, reply, &r_iter, &error);
else if (strcmp(dbus_message_get_member(message), "remove") == 0)
ret = configRemoveDevice(message, &iter, &error);
+ else if (strcmp(dbus_message_get_member(message), "listDevices") == 0)
+ ret = configListDevices(message, &iter, reply, &r_iter, &error);
if (ret != BadDrawable && ret != BadAlloc) {
- reply = dbus_message_new_method_return(message);
- dbus_message_iter_init_append(reply, &iter);
- if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret)) {
- ErrorF("[config] couldn't append to iterator\n");
- dbus_error_free(&error);
- return DBUS_HANDLER_RESULT_HANDLED;
- }
+ if (!strlen(dbus_message_get_signature(reply)))
+ if (!dbus_message_iter_append_basic(&r_iter, DBUS_TYPE_INT32, &ret)) {
+ ErrorF("[config] couldn't append to iterator\n");
+ dbus_error_free(&error);
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
if (!dbus_connection_send(bus, reply, NULL))
ErrorF("[config] failed to send reply\n");
- dbus_connection_flush(bus);
-
- dbus_message_unref(reply);
}
+ dbus_message_unref(reply);
+ dbus_connection_flush(bus);
}
dbus_error_free(&error);
@@ -410,13 +463,13 @@ configReconnect(OsTimerPtr timer, CARD32 time, pointer arg)
}
void
-configInitialise()
+configInitialise(void)
{
TimerSet(NULL, 0, 1, configReconnect, NULL);
}
void
-configFini()
+configFini(void)
{
DBusError error;
diff --git a/configure.ac b/configure.ac
index bd6bbebcc..cb8b4351b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -453,9 +453,6 @@ AC_ARG_WITH(os-vendor, AS_HELP_STRING([--with-os-vendor=OSVENDOR], [Name o
AC_ARG_WITH(builderstring, AS_HELP_STRING([--with-builderstring=BUILDERSTRING], [Additional builder string]),
[ BUILDERSTRING="$withval" ]
[ ])
-AC_ARG_WITH(mesa-source, AS_HELP_STRING([--with-mesa-source=MESA_SOURCE], [Path to Mesa source tree]),
- [ MESA_SOURCE="$withval" ],
- [ MESA_SOURCE="" ])
AC_ARG_WITH(fontdir, AS_HELP_STRING([--with-fontdir=FONTDIR], [Path to top level dir where fonts are installed (default: ${libdir}/X11/fonts)]),
[ FONTDIR="$withval" ],
[ FONTDIR="${libdir}/X11/fonts" ])
@@ -472,9 +469,6 @@ AC_ARG_WITH(xkb-output, AS_HELP_STRING([--with-xkb-output=PATH], [Path to
AC_ARG_WITH(rgb-path, AS_HELP_STRING([--with-rgb-path=PATH], [Path to RGB database (default: ${datadir}/X11/rgb)]),
[ RGBPATH="$withval" ],
[ RGBPATH="${datadir}/X11/rgb" ])
-AC_ARG_WITH(dri-driver-path, AS_HELP_STRING([--with-dri-driver-path=PATH], [Path to DRI drivers (default: ${libdir}/dri)]),
- [ DRI_DRIVER_PATH="$withval" ],
- [ DRI_DRIVER_PATH="${libdir}/dri" ])
APPLE_APPLICATIONS_DIR="${bindir}/Applications"
AC_ARG_WITH(apple-applications-dir,AS_HELP_STRING([--with-apple-applications-dir=PATH], [Path to the Applications directory (default: ${bindir}/Applications)]),
[ APPLE_APPLICATIONS_DIR="${withval}" ].
@@ -493,6 +487,21 @@ AC_ARG_ENABLE(builtin-fonts, AS_HELP_STRING([--enable-builtin-fonts], [Use only
AC_ARG_ENABLE(null-root-cursor, AS_HELP_STRING([--enable-null-root-cursor], [Use an empty root cursor (default: use core cursor)]),
[NULL_ROOT_CURSOR=$enableval],
[NULL_ROOT_CURSOR=no])
+
+dnl GLX build options
+AC_ARG_WITH(mesa-source, AS_HELP_STRING([--with-mesa-source=MESA_SOURCE], [Path to Mesa source tree]),
+ [ MESA_SOURCE="$withval" ],
+ [ MESA_SOURCE="" ])
+AC_ARG_WITH(dri-driver-path, AS_HELP_STRING([--with-dri-driver-path=PATH], [Path to DRI drivers (default: ${libdir}/dri)]),
+ [ DRI_DRIVER_PATH="$withval" ],
+ [ DRI_DRIVER_PATH="${libdir}/dri" ])
+AC_ARG_ENABLE(aiglx, AS_HELP_STRING([--enable-aiglx], [Build accelerated indirect GLX (default: enabled)]),
+ [AIGLX=$enableval],
+ [AIGLX=yes])
+AC_ARG_ENABLE(glx-tls, AS_HELP_STRING([--enable-glx-tls], [Build GLX with TLS support (default: disabled)]),
+ [GLX_USE_TLS=$enableval],
+ [GLX_USE_TLS=no])
+
dnl Extensions.
AC_ARG_ENABLE(composite, AS_HELP_STRING([--disable-composite], [Build Composite extension (default: enabled)]), [COMPOSITE=$enableval], [COMPOSITE=yes])
AC_ARG_ENABLE(mitshm, AS_HELP_STRING([--disable-shm], [Build SHM extension (default: enabled)]), [MITSHM=$enableval], [MITSHM=yes])
@@ -507,13 +516,11 @@ AC_ARG_ENABLE(screensaver, AS_HELP_STRING([--disable-screensaver], [Build Scr
AC_ARG_ENABLE(xdmcp, AS_HELP_STRING([--disable-xdmcp], [Build XDMCP extension (default: auto)]), [XDMCP=$enableval], [XDMCP=auto])
AC_ARG_ENABLE(xdm-auth-1, AS_HELP_STRING([--disable-xdm-auth-1], [Build XDM-Auth-1 extension (default: auto)]), [XDMAUTH=$enableval], [XDMAUTH=auto])
AC_ARG_ENABLE(glx, AS_HELP_STRING([--disable-glx], [Build GLX extension (default: enabled)]), [GLX=$enableval], [GLX=yes])
-AC_ARG_ENABLE(aiglx, AS_HELP_STRING([--enable-aiglx], [Build accelerated indirect GLX (default: enabled)]), [AIGLX=$enableval], [AIGLX=yes])
-AC_ARG_ENABLE(glx-tls, AS_HELP_STRING([--enable-glx-tls], [Build GLX with TLS support (default: disabled)]), [GLX_USE_TLS=$enableval], [GLX_USE_TLS=no])
AC_ARG_ENABLE(dri, AS_HELP_STRING([--enable-dri], [Build DRI extension (default: auto)]), [DRI=$enableval])
AC_ARG_ENABLE(xinerama, AS_HELP_STRING([--disable-xinerama], [Build Xinerama extension (default: enabled)]), [XINERAMA=$enableval], [XINERAMA=yes])
AC_ARG_ENABLE(xf86vidmode, AS_HELP_STRING([--disable-xf86vidmode], [Build XF86VidMode extension (default: auto)]), [XF86VIDMODE=$enableval], [XF86VIDMODE=auto])
AC_ARG_ENABLE(xf86misc, AS_HELP_STRING([--disable-xf86misc], [Build XF86Misc extension (default: auto)]), [XF86MISC=$enableval], [XF86MISC=auto])
-AC_ARG_ENABLE(xace, AS_HELP_STRING([--disable-xace], [Build X-ACE extension (default: enabled)]), [XACE=$enableval], [XACE=yes])
+AC_ARG_ENABLE(xace, AS_HELP_STRING([--disable-xace], [Build X-ACE extension (default: enabled)]), [XACE=$enableval], [XACE=yes])
AC_ARG_ENABLE(xcsecurity, AS_HELP_STRING([--disable-xcsecurity], [Build Security extension (default: enabled)]), [XCSECURITY=$enableval], [XCSECURITY=$XACE])
AC_ARG_ENABLE(appgroup, AS_HELP_STRING([--disable-appgroup], [Build XC-APPGROUP extension (default: enabled)]), [APPGROUP=$enableval], [APPGROUP=$XCSECURITY])
AC_ARG_ENABLE(xcalibrate, AS_HELP_STRING([--enable-xcalibrate], [Build XCalibrate extension (default: disabled)]), [XCALIBRATE=$enableval], [XCALIBRATE=no])
diff --git a/dix/atom.c b/dix/atom.c
index bd3223caa..6ae3e31df 100644
--- a/dix/atom.c
+++ b/dix/atom.c
@@ -167,7 +167,7 @@ NameForAtom(Atom atom)
}
void
-AtomError()
+AtomError(void)
{
FatalError("initializing atoms");
}
@@ -185,7 +185,7 @@ FreeAtom(NodePtr patom)
}
void
-FreeAllAtoms()
+FreeAllAtoms(void)
{
if(atomRoot == (NodePtr)NULL)
return;
@@ -197,7 +197,7 @@ FreeAllAtoms()
}
void
-InitAtoms()
+InitAtoms(void)
{
FreeAllAtoms();
tableLength = InitialTableSize;
diff --git a/dix/devices.c b/dix/devices.c
index 0a91997ea..6edf1384e 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -92,15 +92,27 @@ DeviceIntPtr
AddInputDevice(DeviceProc deviceProc, Bool autoStart)
{
DeviceIntPtr dev, *prev; /* not a typo */
+ DeviceIntPtr devtmp;
+ int devid;
+ char devind[MAX_DEVICES];
+
+ /* Find next available id */
+ memset(devind, 0, sizeof(char)*MAX_DEVICES);
+ for (devtmp = inputInfo.devices; devtmp; devtmp = devtmp->next)
+ devind[devtmp->id]++;
+ for (devtmp = inputInfo.off_devices; devtmp; devtmp = devtmp->next)
+ devind[devtmp->id]++;
+ for (devid = 0; devid < MAX_DEVICES && devind[devid]; devid++)
+ ;
- if (inputInfo.numDevices >= MAX_DEVICES)
+ if (devid >= MAX_DEVICES)
return (DeviceIntPtr)NULL;
dev = (DeviceIntPtr) xcalloc(sizeof(DeviceIntRec), 1);
if (!dev)
return (DeviceIntPtr)NULL;
dev->name = (char *)NULL;
dev->type = 0;
- dev->id = inputInfo.numDevices;
+ dev->id = devid;
inputInfo.numDevices++;
dev->public.on = FALSE;
dev->public.processInputProc = (ProcessInputProc)NoopDDA;
@@ -373,7 +385,7 @@ CorePointerProc(DeviceIntPtr pDev, int what)
* fallback if no physical device is available.
*/
void
-InitCoreDevices()
+InitCoreDevices(void)
{
DeviceIntPtr dev;
@@ -460,7 +472,7 @@ InitCoreDevices()
* Each physical keyboard is paired with the first available unpaired pointer.
*/
int
-InitAndStartDevices()
+InitAndStartDevices(void)
{
DeviceIntPtr dev, next;
@@ -530,8 +542,13 @@ CloseDevice(DeviceIntPtr dev)
xfree(dev->key);
}
- if (dev->valuator)
+ if (dev->valuator) {
+ /* Counterpart to 'biggest hack ever' in init. */
+ if (dev->valuator->motion &&
+ dev->valuator->GetMotionProc == GetMotionHistory)
+ xfree(dev->valuator->motion);
xfree(dev->valuator);
+ }
if (dev->button) {
#ifdef XKB
@@ -617,7 +634,7 @@ CloseDevice(DeviceIntPtr dev)
}
void
-CloseDownDevices()
+CloseDownDevices(void)
{
DeviceIntPtr dev, next;
@@ -703,6 +720,7 @@ RemoveDevice(DeviceIntPtr dev)
}
if (ret == Success) {
+ inputInfo.numDevices--;
ev.type = DevicePresenceNotify;
ev.time = currentTime.milliseconds;
ev.devchange = 0;
@@ -716,7 +734,7 @@ RemoveDevice(DeviceIntPtr dev)
}
int
-NumMotionEvents()
+NumMotionEvents(void)
{
/* only called to fill data in initial connection reply.
* VCP is ok here, it is the only fixed device we have. */
@@ -736,13 +754,13 @@ RegisterKeyboardDevice(DeviceIntPtr device)
}
_X_EXPORT DevicePtr
-LookupKeyboardDevice()
+LookupKeyboardDevice(void)
{
return inputInfo.keyboard ? &inputInfo.keyboard->public : NULL;
}
_X_EXPORT DevicePtr
-LookupPointerDevice()
+LookupPointerDevice(void)
{
return inputInfo.pointer ? &inputInfo.pointer->public : NULL;
}
diff --git a/dix/dispatch.c b/dix/dispatch.c
index 25987b6d1..e238ab85a 100644
--- a/dix/dispatch.c
+++ b/dix/dispatch.c
@@ -218,7 +218,7 @@ SetInputCheck(HWEventQueuePtr c0, HWEventQueuePtr c1)
}
_X_EXPORT void
-UpdateCurrentTime()
+UpdateCurrentTime(void)
{
TimeStamp systime;
@@ -237,7 +237,7 @@ UpdateCurrentTime()
/* Like UpdateCurrentTime, but can't call ProcessInputEvents */
_X_EXPORT void
-UpdateCurrentTimeIf()
+UpdateCurrentTimeIf(void)
{
TimeStamp systime;
@@ -250,7 +250,7 @@ UpdateCurrentTimeIf()
}
void
-InitSelections()
+InitSelections(void)
{
if (CurrentSelections)
xfree(CurrentSelections);
@@ -3656,7 +3656,7 @@ CloseDownClient(ClientPtr client)
}
static void
-KillAllClients()
+KillAllClients(void)
{
int i;
for (i=1; i<currentMaxClients; i++)
diff --git a/dix/dixfonts.c b/dix/dixfonts.c
index 62ad575c9..c21b3ecb3 100644
--- a/dix/dixfonts.c
+++ b/dix/dixfonts.c
@@ -1878,7 +1878,7 @@ DeleteClientFontStuff(ClientPtr client)
}
void
-InitFonts ()
+InitFonts (void)
{
patternCache = MakeFontPatternCache();
@@ -1997,7 +1997,7 @@ RegisterFPEFunctions(NameCheckFunc name_func,
}
void
-FreeFonts()
+FreeFonts(void)
{
if (patternCache) {
FreeFontPatternCache(patternCache);
diff --git a/dix/dixutils.c b/dix/dixutils.c
index 44d82c944..30327d361 100644
--- a/dix/dixutils.c
+++ b/dix/dixutils.c
@@ -550,7 +550,7 @@ RemoveBlockAndWakeupHandlers (BlockHandlerProcPtr blockHandler,
}
void
-InitBlockAndWakeupHandlers ()
+InitBlockAndWakeupHandlers (void)
{
xfree (handlers);
handlers = (BlockHandlerPtr) 0;
@@ -950,7 +950,7 @@ DeleteCallbackList(CallbackListPtr *pcbl)
}
void
-InitCallbackManager()
+InitCallbackManager(void)
{
int i;
diff --git a/dix/events.c b/dix/events.c
index 94e60dc81..46905aa30 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -974,7 +974,7 @@ PostNewCursor(DeviceIntPtr pDev)
}
_X_EXPORT WindowPtr
-GetCurrentRootWindow()
+GetCurrentRootWindow(void)
{
return ROOT;
}
@@ -1179,7 +1179,7 @@ FreezeThaw(DeviceIntPtr dev, Bool frozen)
}
void
-ComputeFreezes()
+ComputeFreezes(void)
{
DeviceIntPtr replayDev = syncEvents.replayDev;
int i;
@@ -2190,7 +2190,7 @@ CheckMotion(xEvent *xE, DeviceIntPtr pDev)
}
_X_EXPORT void
-WindowsRestructured()
+WindowsRestructured(void)
{
DeviceIntPtr pDev = inputInfo.devices;
while(pDev)
@@ -4281,7 +4281,7 @@ ProcQueryPointer(ClientPtr client)
}
void
-InitEvents()
+InitEvents(void)
{
int i;
diff --git a/dix/extension.c b/dix/extension.c
index 88dff15e2..186574d76 100644
--- a/dix/extension.c
+++ b/dix/extension.c
@@ -278,7 +278,7 @@ MinorOpcodeOfRequest(ClientPtr client)
}
void
-CloseDownExtensions()
+CloseDownExtensions(void)
{
int i,j;
diff --git a/dix/getevents.c b/dix/getevents.c
index 5cd6f1c44..116bab9f2 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -78,7 +78,7 @@ extern Bool XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies);
* Pick some arbitrary size for Xi motion history.
*/
_X_EXPORT int
-GetMotionHistorySize()
+GetMotionHistorySize(void)
{
return MOTION_HISTORY_SIZE;
}
@@ -188,7 +188,7 @@ updateMotionHistory(DeviceIntPtr pDev, CARD32 ms, int first_valuator,
* xEvent *events = xcalloc(sizeof(xEvent), GetMaximumEventsNum());
*/
_X_EXPORT int
-GetMaximumEventsNum() {
+GetMaximumEventsNum(void) {
/* Two base events -- core and device, plus valuator events. Multiply
* by two if we're doing key repeats. */
int ret = 2 + MAX_VALUATOR_EVENTS;
@@ -700,6 +700,7 @@ _X_EXPORT void
SwitchCoreKeyboard(DeviceIntPtr pDev)
{
KeyClassPtr ckeyc = inputInfo.keyboard->key;
+ int i = 0;
if (inputInfo.keyboard->devPrivates[CoreDevicePrivatesIndex].ptr != pDev) {
memcpy(ckeyc->modifierMap, pDev->key->modifierMap, MAP_LENGTH);
@@ -714,6 +715,25 @@ SwitchCoreKeyboard(DeviceIntPtr pDev)
ckeyc->curKeySyms.maxKeyCode = pDev->key->curKeySyms.maxKeyCode;
SetKeySymsMap(&ckeyc->curKeySyms, &pDev->key->curKeySyms);
+ /*
+ * Copy state from the extended keyboard to core. If you omit this,
+ * holding Ctrl on keyboard one, and pressing Q on keyboard two, will
+ * cause your app to quit. This feels wrong to me, hence the below
+ * code.
+ *
+ * XXX: If you synthesise core modifier events, the state will get
+ * clobbered here. You'll have to work out something sensible
+ * to fix that. Good luck.
+ */
+
+#define KEYBOARD_MASK (ShiftMask | LockMask | ControlMask | Mod1Mask | \
+ Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask)
+ ckeyc->state &= ~(KEYBOARD_MASK);
+ ckeyc->state |= (pDev->key->state & KEYBOARD_MASK);
+#undef KEYBOARD_MASK
+ for (i = 0; i < 8; i++)
+ ckeyc->modifierKeyCount[i] = pDev->key->modifierKeyCount[i];
+
#ifdef XKB
if (!noXkbExtension && pDev->key->xkbInfo && pDev->key->xkbInfo->desc) {
if (!XkbCopyKeymap(pDev->key->xkbInfo->desc, ckeyc->xkbInfo->desc,
diff --git a/dix/initatoms.c b/dix/initatoms.c
index a5972afd6..de101bd0f 100644
--- a/dix/initatoms.c
+++ b/dix/initatoms.c
@@ -11,7 +11,7 @@
#include <X11/Xatom.h>
#include "misc.h"
#include "dix.h"
-void MakePredeclaredAtoms()
+void MakePredeclaredAtoms(void)
{
if (MakeAtom("PRIMARY", 7, 1) != XA_PRIMARY) AtomError();
if (MakeAtom("SECONDARY", 9, 1) != XA_SECONDARY) AtomError();
diff --git a/dix/main.c b/dix/main.c
index c7a0f6b7b..ac3bfad64 100644
--- a/dix/main.c
+++ b/dix/main.c
@@ -546,7 +546,7 @@ static int padlength[4] = {0, 3, 2, 1};
static
#endif
Bool
-CreateConnectionBlock()
+CreateConnectionBlock(void)
{
xConnSetup setup;
xWindowRoot root;
diff --git a/dix/privates.c b/dix/privates.c
index a66fc3df0..246597117 100644
--- a/dix/privates.c
+++ b/dix/privates.c
@@ -60,7 +60,7 @@ unsigned *extensionPrivateSizes;
unsigned totalExtensionSize;
void
-ResetExtensionPrivates()
+ResetExtensionPrivates(void)
{
extensionPrivateCount = 0;
extensionPrivateLen = 0;
@@ -71,7 +71,7 @@ ResetExtensionPrivates()
}
_X_EXPORT int
-AllocateExtensionPrivateIndex()
+AllocateExtensionPrivateIndex(void)
{
return extensionPrivateCount++;
}
@@ -117,7 +117,7 @@ unsigned *clientPrivateSizes;
unsigned totalClientSize;
void
-ResetClientPrivates()
+ResetClientPrivates(void)
{
clientPrivateCount = 0;
clientPrivateLen = 0;
@@ -128,7 +128,7 @@ ResetClientPrivates()
}
_X_EXPORT int
-AllocateClientPrivateIndex()
+AllocateClientPrivateIndex(void)
{
return clientPrivateCount++;
}
@@ -171,7 +171,7 @@ AllocateClientPrivate(int index2, unsigned amount)
int screenPrivateCount;
void
-ResetScreenPrivates()
+ResetScreenPrivates(void)
{
screenPrivateCount = 0;
}
@@ -180,7 +180,7 @@ ResetScreenPrivates()
* so we have to worry about resizing existing devPrivates
*/
_X_EXPORT int
-AllocateScreenPrivateIndex()
+AllocateScreenPrivateIndex(void)
{
int idx;
int i;
@@ -213,13 +213,13 @@ AllocateScreenPrivateIndex()
static int windowPrivateCount;
void
-ResetWindowPrivates()
+ResetWindowPrivates(void)
{
windowPrivateCount = 0;
}
_X_EXPORT int
-AllocateWindowPrivateIndex()
+AllocateWindowPrivateIndex(void)
{
return windowPrivateCount++;
}
@@ -263,13 +263,13 @@ AllocateWindowPrivate(ScreenPtr pScreen, int index2, unsigned amount)
static int gcPrivateCount;
void
-ResetGCPrivates()
+ResetGCPrivates(void)
{
gcPrivateCount = 0;
}
_X_EXPORT int
-AllocateGCPrivateIndex()
+AllocateGCPrivateIndex(void)
{
return gcPrivateCount++;
}
@@ -312,13 +312,13 @@ AllocateGCPrivate(ScreenPtr pScreen, int index2, unsigned amount)
static int pixmapPrivateCount;
void
-ResetPixmapPrivates()
+ResetPixmapPrivates(void)
{
pixmapPrivateCount = 0;
}
_X_EXPORT int
-AllocatePixmapPrivateIndex()
+AllocatePixmapPrivateIndex(void)
{
return pixmapPrivateCount++;
}
@@ -363,7 +363,7 @@ AllocatePixmapPrivate(ScreenPtr pScreen, int index2, unsigned amount)
int colormapPrivateCount;
void
-ResetColormapPrivates()
+ResetColormapPrivates(void)
{
colormapPrivateCount = 0;
}
@@ -424,7 +424,7 @@ AllocateColormapPrivateIndex (InitCmapPrivFunc initPrivFunc)
static int devicePrivateIndex = 0;
_X_EXPORT int
-AllocateDevicePrivateIndex()
+AllocateDevicePrivateIndex(void)
{
return devicePrivateIndex++;
}
diff --git a/dix/resource.c b/dix/resource.c
index a5a7eed80..f4bf1fcf6 100644
--- a/dix/resource.c
+++ b/dix/resource.c
@@ -235,7 +235,7 @@ CreateNewResourceType(DeleteType deleteFunc)
}
_X_EXPORT RESTYPE
-CreateNewResourceClass()
+CreateNewResourceClass(void)
{
RESTYPE next = lastResourceClass >> 1;
@@ -844,7 +844,7 @@ FreeClientResources(ClientPtr client)
}
void
-FreeAllResources()
+FreeAllResources(void)
{
int i;
diff --git a/exa/exa.c b/exa/exa.c
index dd27d5e89..23fe55516 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -322,6 +322,9 @@ exaPixmapIsOffscreen(PixmapPtr p)
if (p->devPrivate.ptr == NULL)
return TRUE;
+ if (pExaScr->info->PixmapIsOffscreen)
+ return pExaScr->info->PixmapIsOffscreen(p);
+
return ((unsigned long) ((CARD8 *) p->devPrivate.ptr -
(CARD8 *) pExaScr->info->memoryBase) <
pExaScr->info->memorySize);
diff --git a/exa/exa.h b/exa/exa.h
index bf723f723..6c39a8fdb 100644
--- a/exa/exa.h
+++ b/exa/exa.h
@@ -39,7 +39,7 @@
#include "fb.h"
#define EXA_VERSION_MAJOR 2
-#define EXA_VERSION_MINOR 1
+#define EXA_VERSION_MINOR 2
#define EXA_VERSION_RELEASE 0
typedef struct _ExaOffscreenArea ExaOffscreenArea;
@@ -636,6 +636,23 @@ typedef struct _ExaDriver {
*/
void (*FinishAccess)(PixmapPtr pPix, int index);
+ /**
+ * PixmapIsOffscreen() is an optional driver replacement to
+ * exaPixmapIsOffscreen(). Set to NULL if you want the standard behaviour
+ * of exaPixmapIsOffscreen().
+ *
+ * @param pPix the pixmap
+ * @return TRUE if the given drawable is in framebuffer memory.
+ *
+ * exaPixmapIsOffscreen() is used to determine if a pixmap is in offscreen
+ * memory, meaning that acceleration could probably be done to it, and that it
+ * will need to be wrapped by PrepareAccess()/FinishAccess() when accessing it
+ * with the CPU.
+ *
+ *
+ */
+ Bool (*PixmapIsOffscreen)(PixmapPtr pPix);
+
/** @name PrepareAccess() and FinishAccess() indices
* @{
*/
diff --git a/fb/Makefile.am b/fb/Makefile.am
index 1649669c0..ab135c9c9 100644
--- a/fb/Makefile.am
+++ b/fb/Makefile.am
@@ -78,4 +78,4 @@ libwfb_la_SOURCES = $(libfb_la_SOURCES)
libfb_la_LIBADD = libfbmmx.la
-EXTRA_DIST = fbcmap.c
+EXTRA_DIST = fbcmap.c fbcmap_mi.c
diff --git a/fb/fbcmap.c b/fb/fbcmap.c
index 9cf5bcbf5..c29a5131c 100644
--- a/fb/fbcmap.c
+++ b/fb/fbcmap.c
@@ -39,7 +39,12 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include "resource.h"
#include "fb.h"
-#ifndef XFree86Server
+#ifdef XFree86Server
+#error "You should be compiling fbcmap_mi.c instead of fbcmap.c!"
+#endif
+
+
+
ColormapPtr FbInstalledMaps[MAXSCREENS];
int
@@ -584,87 +589,3 @@ fbInitVisuals (VisualPtr *visualp,
*defaultVisp = depth[i].vids[j];
return TRUE;
}
-#else
-
-#include "micmap.h"
-
-int
-fbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps)
-{
- return miListInstalledColormaps(pScreen, pmaps);
-}
-
-void
-fbInstallColormap(ColormapPtr pmap)
-{
- miInstallColormap(pmap);
-}
-
-void
-fbUninstallColormap(ColormapPtr pmap)
-{
- miUninstallColormap(pmap);
-}
-
-void
-fbResolveColor(unsigned short *pred,
- unsigned short *pgreen,
- unsigned short *pblue,
- VisualPtr pVisual)
-{
- miResolveColor(pred, pgreen, pblue, pVisual);
-}
-
-Bool
-fbInitializeColormap(ColormapPtr pmap)
-{
- return miInitializeColormap(pmap);
-}
-
-int
-fbExpandDirectColors (ColormapPtr pmap,
- int ndef,
- xColorItem *indefs,
- xColorItem *outdefs)
-{
- return miExpandDirectColors(pmap, ndef, indefs, outdefs);
-}
-
-Bool
-fbCreateDefColormap(ScreenPtr pScreen)
-{
- return miCreateDefColormap(pScreen);
-}
-
-void
-fbClearVisualTypes(void)
-{
- miClearVisualTypes();
-}
-
-Bool
-fbSetVisualTypes (int depth, int visuals, int bitsPerRGB)
-{
- return miSetVisualTypes(depth, visuals, bitsPerRGB, -1);
-}
-
-/*
- * Given a list of formats for a screen, create a list
- * of visuals and depths for the screen which coorespond to
- * the set which can be used with this version of fb.
- */
-
-Bool
-fbInitVisuals (VisualPtr *visualp,
- DepthPtr *depthp,
- int *nvisualp,
- int *ndepthp,
- int *rootDepthp,
- VisualID *defaultVisp,
- unsigned long sizes,
- int bitsPerRGB)
-{
- return miInitVisuals(visualp, depthp, nvisualp, ndepthp, rootDepthp,
- defaultVisp, sizes, bitsPerRGB, -1);
-}
-#endif
diff --git a/fb/fbcmap_mi.c b/fb/fbcmap_mi.c
new file mode 100644
index 000000000..58bcae3aa
--- /dev/null
+++ b/fb/fbcmap_mi.c
@@ -0,0 +1,123 @@
+/************************************************************
+Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this
+software and its documentation for any purpose and without
+fee is hereby granted, provided that the above copyright no-
+tice appear in all copies and that both that copyright no-
+tice and this permission notice appear in supporting docu-
+mentation, and that the names of Sun or X Consortium
+not be used in advertising or publicity pertaining to
+distribution of the software without specific prior
+written permission. Sun and X Consortium make no
+representations about the suitability of this software for
+any purpose. It is provided "as is" without any express or
+implied warranty.
+
+SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT-
+NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI-
+ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
+THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+********************************************************/
+
+
+/**
+ * This version of fbcmap.c is implemented in terms of mi functions.
+ * These functions used to be in fbcmap.c and depended upon the symbol
+ * XFree86Server being defined.
+ */
+
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <X11/X.h>
+#include "fb.h"
+#include "micmap.h"
+
+int
+fbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps)
+{
+ return miListInstalledColormaps(pScreen, pmaps);
+}
+
+void
+fbInstallColormap(ColormapPtr pmap)
+{
+ miInstallColormap(pmap);
+}
+
+void
+fbUninstallColormap(ColormapPtr pmap)
+{
+ miUninstallColormap(pmap);
+}
+
+void
+fbResolveColor(unsigned short *pred,
+ unsigned short *pgreen,
+ unsigned short *pblue,
+ VisualPtr pVisual)
+{
+ miResolveColor(pred, pgreen, pblue, pVisual);
+}
+
+Bool
+fbInitializeColormap(ColormapPtr pmap)
+{
+ return miInitializeColormap(pmap);
+}
+
+int
+fbExpandDirectColors (ColormapPtr pmap,
+ int ndef,
+ xColorItem *indefs,
+ xColorItem *outdefs)
+{
+ return miExpandDirectColors(pmap, ndef, indefs, outdefs);
+}
+
+Bool
+fbCreateDefColormap(ScreenPtr pScreen)
+{
+ return miCreateDefColormap(pScreen);
+}
+
+void
+fbClearVisualTypes(void)
+{
+ miClearVisualTypes();
+}
+
+Bool
+fbSetVisualTypes (int depth, int visuals, int bitsPerRGB)
+{
+ return miSetVisualTypes(depth, visuals, bitsPerRGB, -1);
+}
+
+/*
+ * Given a list of formats for a screen, create a list
+ * of visuals and depths for the screen which coorespond to
+ * the set which can be used with this version of fb.
+ */
+Bool
+fbInitVisuals (VisualPtr *visualp,
+ DepthPtr *depthp,
+ int *nvisualp,
+ int *ndepthp,
+ int *rootDepthp,
+ VisualID *defaultVisp,
+ unsigned long sizes,
+ int bitsPerRGB)
+{
+ return miInitVisuals(visualp, depthp, nvisualp, ndepthp, rootDepthp,
+ defaultVisp, sizes, bitsPerRGB, -1);
+}
diff --git a/hw/darwin/Makefile.am b/hw/darwin/Makefile.am
index 3e28d3212..b8641bbc8 100644
--- a/hw/darwin/Makefile.am
+++ b/hw/darwin/Makefile.am
@@ -26,12 +26,12 @@ libdarwinShared_a_SOURCES = darwin.c \
bin_PROGRAMS = XDarwin Xquartz
XDarwin_SOURCES = \
- $(top_srcdir)/fb/fbcmap.c \
+ $(top_srcdir)/fb/fbcmap_mi.c \
$(top_srcdir)/mi/miinitext.c \
$(top_srcdir)/Xi/stubs.c
Xquartz_SOURCES = \
- $(top_srcdir)/fb/fbcmap.c \
+ $(top_srcdir)/fb/fbcmap_mi.c \
$(top_srcdir)/mi/miinitext.c \
$(top_srcdir)/Xi/stubs.c \
apple/X11Application.m \
@@ -115,7 +115,7 @@ x11app:
cd apple && xcodebuild CFLAGS="$(XSERVERCFLAGS_CFLAGS)" LDFLAGS="$(XSERVERCFLAGS_LIBS)"
XDarwinApp_SOURCES = \
- $(top_srcdir)/fb/fbcmap.c \
+ $(top_srcdir)/fb/fbcmap_mi.c \
$(top_srcdir)/mi/miinitext.c \
$(top_srcdir)/Xi/stubs.c
diff --git a/hw/dmx/Makefile.am b/hw/dmx/Makefile.am
index 41dc5d210..002ea112a 100644
--- a/hw/dmx/Makefile.am
+++ b/hw/dmx/Makefile.am
@@ -16,9 +16,6 @@ GLX_INCS = -I$(top_srcdir)/hw/xfree86/dixmods/extmod \
GLX_DEFS = @GL_CFLAGS@
endif
-# It's essential that fbcmap.c be compiled with this flag for DMX to work!!
-DMX_CFLAGS = -DXFree86Server=1
-
if BUILDDOCS
SUBDIRS += doc
endif
@@ -76,7 +73,7 @@ Xdmx_SOURCES = dmx.c \
dmxwindow.c \
dmxwindow.h \
$(top_srcdir)/mi/miinitext.c \
- $(top_srcdir)/fb/fbcmap.c \
+ $(top_srcdir)/fb/fbcmap_mi.c \
$(GLX_SRCS)
diff --git a/hw/dmx/input/dmxbackend.c b/hw/dmx/input/dmxbackend.c
index 7efb2eebe..7aa8510cb 100644
--- a/hw/dmx/input/dmxbackend.c
+++ b/hw/dmx/input/dmxbackend.c
@@ -242,11 +242,7 @@ static int dmxBackendOffscreen(int screen, int x, int y)
void dmxBackendUpdatePosition(pointer private, int x, int y)
{
GETPRIVFROMPRIVATE;
-#if 00 /*BP*/
- int screen = miPointerCurrentScreen()->myNum;
-#else
int screen = miPointerGetScreen(inputInfo.pointer)->myNum;
-#endif
DMXScreenInfo *dmxScreen = &dmxScreens[priv->myScreen];
int oldRelative = priv->relative;
int topscreen = dmxBackendFindOverlapping(priv, screen, x, y);
@@ -358,7 +354,8 @@ void dmxBackendCollectEvents(DevicePtr pDev,
switch (X.type) {
case EnterNotify:
dmxCommonSaveState(priv);
- if (entered++) continue;
+ if (entered++)
+ continue;
priv->entered = 1;
ignoreLeave = 1;
DMXDBG5("dmxBackendCollectEvents: Enter %lu %d,%d; GRAB %s %p\n",
@@ -382,7 +379,8 @@ void dmxBackendCollectEvents(DevicePtr pDev,
continue;
}
dmxCommonRestoreState(priv);
- if (left++) continue;
+ if (left++)
+ continue;
DMXDBG7("dmxBackendCollectEvents: Leave %lu %d,%d %d %d %s %s\n",
X.xcrossing.root, X.xcrossing.x, X.xcrossing.y,
X.xcrossing.detail, X.xcrossing.focus,
@@ -395,7 +393,6 @@ void dmxBackendCollectEvents(DevicePtr pDev,
}
break;
case MotionNotify:
-#if 001 /*BP*/
DMXDBG9("dmxBackendCollectEvents: MotionNotify %d/%d (mi %d)"
" newscreen=%d: %d %d (e=%d; last=%d,%d)\n",
dmxScreen->index, priv->myScreen,
@@ -403,7 +400,8 @@ void dmxBackendCollectEvents(DevicePtr pDev,
priv->newscreen,
X.xmotion.x, X.xmotion.y,
entered, priv->lastX, priv->lastY);
- if (dmxBackendPendingMotionEvent(priv, TRUE)) continue;
+ if (dmxBackendPendingMotionEvent(priv, TRUE))
+ continue;
if (!(dmxScreen = dmxBackendFindWindow(priv, X.xmotion.window)))
dmxLog(dmxFatal,
" Event on non-existant window %lu\n",
@@ -448,25 +446,15 @@ void dmxBackendCollectEvents(DevicePtr pDev,
(dmxScreen->rootYOrigin + X.xmotion.y
- dmxScreen->rootY));
}
-#else
- /*
- ErrorF("motion %d, %d, %d\n",
- X.xmotion.x, X.xmotion.y, X.xmotion.state);
- */
- enqueue(priv->mou, X.type, 0/*X.xbutton.button*/, 0, &X, block);
-#endif
break;
case KeyPress:
case KeyRelease:
enqueue(priv->kbd, X.type, X.xkey.keycode, 0, NULL, block);
break;
-#if 11/*BP*/
case ButtonPress:
case ButtonRelease:
- ErrorF("press/release at %d, %d\n", X.xbutton.x, X.xbutton.y);
- /* fall-through */
-#endif
+ /* fall-through */
default:
/* Pass the whole event here, because
* this may be an extension event. */
@@ -589,12 +577,16 @@ void dmxBackendInit(DevicePtr pDev)
/** Get information about the backend pointer (for initialization). */
void dmxBackendMouGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
{
+ const DMXScreenInfo *dmxScreen = dmxBackendInitPrivate(pDev);
+
info->buttonClass = 1;
dmxCommonMouGetMap(pDev, info->map, &info->numButtons);
info->valuatorClass = 1;
info->numRelAxes = 2;
info->minval[0] = 0;
- info->maxval[0] = 0;
+ info->minval[1] = 0;
+ info->maxval[0] = dmxScreen->beWidth;
+ info->maxval[1] = dmxScreen->beHeight;
info->res[0] = 1;
info->minres[0] = 0;
info->maxres[0] = 1;
diff --git a/hw/dmx/input/dmxcommon.c b/hw/dmx/input/dmxcommon.c
index 278a74e71..1dcc1e9e4 100644
--- a/hw/dmx/input/dmxcommon.c
+++ b/hw/dmx/input/dmxcommon.c
@@ -241,13 +241,15 @@ void dmxCommonKbdGetMap(DevicePtr pDev, KeySymsPtr pKeySyms, CARD8 *pModMap)
/* Compute pModMap */
modifier_mapping = XGetModifierMapping(priv->display);
- for (i = 0; i < MAP_LENGTH; i++) pModMap[i] = 0;
+ for (i = 0; i < MAP_LENGTH; i++)
+ pModMap[i] = 0;
for (j = 0; j < 8; j++) {
int max_keypermod = modifier_mapping->max_keypermod;
for (i = 0; i < max_keypermod; i++) {
CARD8 keycode = modifier_mapping->modifiermap[j*max_keypermod + i];
- if (keycode) pModMap[keycode] |= 1 << j;
+ if (keycode)
+ pModMap[keycode] |= 1 << j;
}
}
XFreeModifiermap(modifier_mapping);
@@ -611,6 +613,7 @@ void dmxCommonSaveState(pointer private)
&priv->dmxLocal->kctrl);
priv->savedModMap = XGetModifierMapping(priv->display);
+
modmap = XNewModifiermap(0);
XSetModifierMapping(priv->display, modmap);
if (dmxInput->scrnIdx != -1)
@@ -627,8 +630,10 @@ void dmxCommonRestoreState(pointer private)
int retcode = -1;
CARD32 start;
- if (dmxInput->console) priv = dmxInput->devs[0]->private;
- if (!priv->stateSaved) return;
+ if (dmxInput->console)
+ priv = dmxInput->devs[0]->private;
+ if (!priv->stateSaved)
+ return;
priv->stateSaved = 0;
DMXDBG0("dmxCommonRestoreState\n");
@@ -645,7 +650,8 @@ void dmxCommonRestoreState(pointer private)
CARD32 tmp;
retcode = XSetModifierMapping(priv->display, priv->savedModMap);
- if (retcode == MappingSuccess) break;
+ if (retcode == MappingSuccess)
+ break;
if (retcode == MappingBusy)
dmxLogInput(dmxInput, "Keyboard busy, waiting\n");
else
diff --git a/hw/dmx/input/dmxconsole.c b/hw/dmx/input/dmxconsole.c
index 835909e6c..aac5e08dc 100644
--- a/hw/dmx/input/dmxconsole.c
+++ b/hw/dmx/input/dmxconsole.c
@@ -860,12 +860,17 @@ void dmxConsoleInit(DevicePtr pDev)
* for pointers. */
void dmxConsoleMouGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
{
+ GETPRIVFROMPDEV;
+
info->buttonClass = 1;
dmxCommonMouGetMap(pDev, info->map, &info->numButtons);
info->valuatorClass = 1;
info->numRelAxes = 2;
- info->minval[0] = 0;
- info->maxval[0] = 0;
+ info->minval[0] = 0;
+ info->minval[1] = 0;
+ /* max possible console window size: */
+ info->maxval[0] = DisplayWidth(priv->display, DefaultScreen(priv->display));
+ info->maxval[1] = DisplayHeight(priv->display, DefaultScreen(priv->display));
info->res[0] = 1;
info->minres[0] = 0;
info->maxres[0] = 1;
diff --git a/hw/dmx/input/dmxdummy.c b/hw/dmx/input/dmxdummy.c
index d6e614e51..b9c72b015 100644
--- a/hw/dmx/input/dmxdummy.c
+++ b/hw/dmx/input/dmxdummy.c
@@ -79,7 +79,9 @@ void dmxDummyMouGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
info->valuatorClass = 1;
info->numRelAxes = 2;
info->minval[0] = 0;
+ info->minval[1] = 0;
info->maxval[0] = 0;
+ info->maxval[1] = 0;
info->res[0] = 1;
info->minres[0] = 0;
info->maxres[0] = 1;
diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
index fae2049b3..4810b17bb 100644
--- a/hw/dmx/input/dmxevents.c
+++ b/hw/dmx/input/dmxevents.c
@@ -103,7 +103,25 @@ static int dmxCheckFunctionKeys(DMXLocalInputInfoPtr dmxLocal,
{
DMXInputInfo *dmxInput = &dmxInputs[dmxLocal->inputIdx];
unsigned short state = 0;
-
+
+#if 1 /* hack to detect ctrl-alt-q, etc */
+ static int ctrl = 0, alt = 0;
+ /* keep track of ctrl/alt key status */
+ if (type == KeyPress && keySym == 0xffe3) {
+ ctrl = 1;
+ }
+ else if (type == KeyRelease && keySym == 0xffe3) {
+ ctrl = 0;
+ }
+ else if (type == KeyPress && keySym == 0xffe9) {
+ alt = 1;
+ }
+ else if (type == KeyRelease && keySym == 0xffe9) {
+ alt = 0;
+ }
+ if (!ctrl || !alt)
+ return 0;
+#else
if (dmxLocal->sendsCore)
state = dmxLocalCoreKeyboard->pDevice->key->state;
else if (dmxLocal->pDevice->key)
@@ -112,7 +130,9 @@ static int dmxCheckFunctionKeys(DMXLocalInputInfoPtr dmxLocal,
DMXDBG3("dmxCheckFunctionKeys: keySym=0x%04x %s state=0x%04x\n",
keySym, type == KeyPress ? "press" : "release", state);
- if ((state & (ControlMask|Mod1Mask)) != (ControlMask|Mod1Mask)) return 0;
+ if ((state & (ControlMask|Mod1Mask)) != (ControlMask|Mod1Mask))
+ return 0;
+#endif
switch (keySym) {
case XK_g:
@@ -147,16 +167,25 @@ static void dmxEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal, xEvent *e,
int type = e->u.u.type;
switch (e->u.u.type) {
- case KeyPress: type = DeviceKeyPress; break;
- case KeyRelease: type = DeviceKeyRelease; break;
- case ButtonPress: type = DeviceButtonPress; break;
- case ButtonRelease: type = DeviceButtonRelease; break;
+ case KeyPress:
+ type = DeviceKeyPress;
+ break;
+ case KeyRelease:
+ type = DeviceKeyRelease;
+ break;
+ case ButtonPress:
+ type = DeviceButtonPress;
+ break;
+ case ButtonRelease:
+ type = DeviceButtonRelease;
+ break;
case MotionNotify:
dmxLog(dmxError,
"dmxEnqueueExtEvent: MotionNotify not allowed here\n");
return;
default:
- if (e->u.u.type == ProximityIn || e->u.u.type == ProximityOut) break;
+ if (e->u.u.type == ProximityIn || e->u.u.type == ProximityOut)
+ break;
dmxLogInput(dmxInput,
"dmxEnqueueExtEvent: Unhandled %s event (%d)\n",
e->u.u.type >= LASTEvent ? "extension" : "non-extension",
@@ -174,9 +203,11 @@ static void dmxEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal, xEvent *e,
xv->num_valuators = 0;
xv->first_valuator = 0;
- if (block) dmxSigioBlock();
+ if (block)
+ dmxSigioBlock();
dmxeqEnqueue(xE);
- if (block) dmxSigioUnblock();
+ if (block)
+ dmxSigioUnblock();
}
#endif
@@ -186,38 +217,27 @@ DMXScreenInfo *dmxFindFirstScreen(int x, int y)
for (i = 0; i < dmxNumScreens; i++) {
DMXScreenInfo *dmxScreen = &dmxScreens[i];
- if (dmxOnScreen(x, y, dmxScreen)) return dmxScreen;
+ if (dmxOnScreen(x, y, dmxScreen))
+ return dmxScreen;
}
return NULL;
}
-#if 11/*BP*/
-
+/**
+ * Enqueue a motion event.
+ */
static void enqueueMotion(DevicePtr pDev, int x, int y)
{
- GETDMXINPUTFROMPDEV;
+ GETDMXLOCALFROMPDEV;
DeviceIntPtr p = dmxLocal->pDevice;
int i, nevents, valuators[3];
xEvent *events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
- int detail = 0;
-
+ int detail = 0; /* XXX should this be mask of pressed buttons? */
valuators[0] = x;
valuators[1] = y;
- valuators[2] = detail;
- nevents = GetPointerEvents(events,
- /*pDev*/p,
- MotionNotify,
- detail,
- POINTER_ABSOLUTE,
- 0, 2, valuators);
- ErrorF("MOTION2 %d, %d n = %d\n", valuators[0], valuators[1], nevents);
- /*
- ErrorF("NEW MOTION %d st %d (%d,%d,%d) n=%d\n",
- detail, e->xmotion.state,
- valuators[0], valuators[1], valuators[2],
- nevents);
- */
+ nevents = GetPointerEvents(events, p, MotionNotify, detail,
+ POINTER_ABSOLUTE, 0, 2, valuators);
for (i = 0; i < nevents; i++)
mieqEnqueue(p, events + i);
xfree(events);
@@ -225,8 +245,8 @@ static void enqueueMotion(DevicePtr pDev, int x, int y)
}
-static void
-dmxCoreMotion2(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
+void
+dmxCoreMotion(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
{
DMXScreenInfo *dmxScreen;
DMXInputInfo *dmxInput;
@@ -235,7 +255,8 @@ dmxCoreMotion2(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
int localY;
int i;
- if (!dmxGlobalInvalid && dmxGlobalX == x && dmxGlobalY == y) return;
+ if (!dmxGlobalInvalid && dmxGlobalX == x && dmxGlobalY == y)
+ return;
DMXDBG5("dmxCoreMotion(%d,%d,%d) dmxGlobalX=%d dmxGlobalY=%d\n",
x, y, delta, dmxGlobalX, dmxGlobalY);
@@ -244,13 +265,15 @@ dmxCoreMotion2(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
dmxGlobalX = x;
dmxGlobalY = y;
- if (dmxGlobalX < 0) dmxGlobalX = 0;
- if (dmxGlobalY < 0) dmxGlobalY = 0;
- if (dmxGlobalX >= dmxGlobalWidth) dmxGlobalX = dmxGlobalWidth + delta -1;
- if (dmxGlobalY >= dmxGlobalHeight) dmxGlobalY = dmxGlobalHeight + delta -1;
+ if (dmxGlobalX < 0)
+ dmxGlobalX = 0;
+ if (dmxGlobalY < 0)
+ dmxGlobalY = 0;
+ if (dmxGlobalX >= dmxGlobalWidth)
+ dmxGlobalX = dmxGlobalWidth + delta -1;
+ if (dmxGlobalY >= dmxGlobalHeight)
+ dmxGlobalY = dmxGlobalHeight + delta -1;
- ErrorF("Global Pos: %d, %d\n", dmxGlobalX, dmxGlobalY);
-
if ((dmxScreen = dmxFindFirstScreen(dmxGlobalX, dmxGlobalY))) {
localX = dmxGlobalX - dmxScreen->rootXOrigin;
localY = dmxGlobalY - dmxScreen->rootYOrigin;
@@ -259,13 +282,8 @@ dmxCoreMotion2(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
/* Screen is old screen */
if (block)
dmxSigioBlock();
-#if 000
- miPointerSetPosition(inputInfo.pointer, &localX, &localY,
- GetTimeInMillis());
-#else
if (pDev)
enqueueMotion(pDev, localX, localY);
-#endif
if (block)
dmxSigioUnblock();
} else {
@@ -277,13 +295,8 @@ dmxCoreMotion2(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
dmxeqProcessInputEvents();
miPointerSetScreen(inputInfo.pointer, dmxScreen->index,
localX, localY);
-#if 000
- miPointerSetPosition(inputInfo.pointer, &localX, &localY,
- GetTimeInMillis());
-#else
if (pDev)
enqueueMotion(pDev, localX, localY);
-#endif
if (block)
dmxSigioUnblock();
}
@@ -307,109 +320,6 @@ dmxCoreMotion2(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
* drivers */
for (i = 0, dmxInput = &dmxInputs[0]; i < dmxNumInputs; i++, dmxInput++) {
int j;
-
- for (j = 0; j < dmxInput->numDevs; j += dmxInput->devs[j]->binding)
- if (!dmxInput->detached
- && dmxInput->devs[j]->sendsCore
- && dmxInput->devs[j]->update_position)
- dmxInput->devs[j]->update_position(dmxInput->devs[j]->private,
- dmxGlobalX, dmxGlobalY);
- }
- if (!dmxScreen) ProcessInputEvents();
-}
-#endif
-
-void dmxCoreMotion(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
-{
- DMXScreenInfo *dmxScreen;
- DMXInputInfo *dmxInput;
- ScreenPtr pScreen;
- int localX;
- int localY;
- int i;
-
-#if 11/*BP*/
- dmxCoreMotion2(pDev, x, y, delta, block);
- return;
-#endif
-
- if (!dmxGlobalInvalid && dmxGlobalX == x && dmxGlobalY == y) return;
-
- DMXDBG5("dmxCoreMotion(%d,%d,%d) dmxGlobalX=%d dmxGlobalY=%d\n",
- x, y, delta, dmxGlobalX, dmxGlobalY);
-
- dmxGlobalInvalid = 0;
- dmxGlobalX = x;
- dmxGlobalY = y;
-
- if (dmxGlobalX < 0) dmxGlobalX = 0;
- if (dmxGlobalY < 0) dmxGlobalY = 0;
- if (dmxGlobalX >= dmxGlobalWidth) dmxGlobalX = dmxGlobalWidth + delta -1;
- if (dmxGlobalY >= dmxGlobalHeight) dmxGlobalY = dmxGlobalHeight + delta -1;
-
- ErrorF("Global Pos: %d, %d\n", dmxGlobalX, dmxGlobalY);
-
- if ((dmxScreen = dmxFindFirstScreen(dmxGlobalX, dmxGlobalY))) {
- localX = dmxGlobalX - dmxScreen->rootXOrigin;
- localY = dmxGlobalY - dmxScreen->rootYOrigin;
-#if 00 /*BP*/
- if ((pScreen = miPointerCurrentScreen())
-#else
- if ((pScreen = miPointerGetScreen(inputInfo.pointer))
-#endif
- && pScreen->myNum == dmxScreen->index) {
- /* Screen is old screen */
- if (block) dmxSigioBlock();
-#if 00 /*BP*/
- miPointerAbsoluteCursor(localX, localY, GetTimeInMillis());
-#else
- miPointerSetPosition(inputInfo.pointer, &localX, &localY,
- GetTimeInMillis());
-#endif
- if (block) dmxSigioUnblock();
- } else {
- /* Screen is new */
- DMXDBG4(" New screen: old=%d new=%d localX=%d localY=%d\n",
- pScreen->myNum, dmxScreen->index, localX, localY);
- if (block) dmxSigioBlock();
- dmxeqProcessInputEvents();
-#if 00 /*BP*/
- miPointerSetNewScreen(dmxScreen->index, localX, localY);
- miPointerAbsoluteCursor(localX, localY, GetTimeInMillis());
-#else
- miPointerSetScreen(inputInfo.pointer, dmxScreen->index,
- localX, localY);
- miPointerSetPosition(inputInfo.pointer, &localX, &localY,
- GetTimeInMillis());
-#endif
- if (block) dmxSigioUnblock();
- }
-#if 00 /*BP*/
- miPointerPosition(&localX, &localY);
-#else
- miPointerGetPosition(inputInfo.pointer, &localX, &localY);
-#endif
-
-#if 00 /*BP*/
- if ((pScreen = miPointerCurrentScreen())) {
-#else
- if ((pScreen = miPointerGetScreen(inputInfo.pointer))) {
-#endif
- dmxGlobalX = localX + dmxScreens[pScreen->myNum].rootXOrigin;
- dmxGlobalY = localY + dmxScreens[pScreen->myNum].rootYOrigin;
- ErrorF("Global is now %d, %d\n", dmxGlobalX, dmxGlobalY);
- DMXDBG6(" Moved to dmxGlobalX=%d dmxGlobalY=%d"
- " on screen index=%d/%d localX=%d localY=%d\n",
- dmxGlobalX, dmxGlobalY,
- dmxScreen ? dmxScreen->index : -1, pScreen->myNum,
- localX, localY);
- }
- }
- /* Send updates down to all core input
- * drivers */
- for (i = 0, dmxInput = &dmxInputs[0]; i < dmxNumInputs; i++, dmxInput++) {
- int j;
-
for (j = 0; j < dmxInput->numDevs; j += dmxInput->devs[j]->binding)
if (!dmxInput->detached
&& dmxInput->devs[j]->sendsCore
@@ -512,10 +422,12 @@ static void dmxExtMotion(DMXLocalInputInfoPtr dmxLocal,
}
}
- if (block) dmxSigioBlock();
+ if (block)
+ dmxSigioBlock();
dmxPointerPutMotionEvent(pDevice, firstAxis, axesCount, v, xev->time);
dmxeqEnqueue(xE);
- if (block) dmxSigioUnblock();
+ if (block)
+ dmxSigioUnblock();
}
static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
@@ -529,7 +441,8 @@ static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
XDeviceKeyEvent *ke = (XDeviceKeyEvent *)e;
XDeviceMotionEvent *me = (XDeviceMotionEvent *)e;
- if (!e) return -1; /* No extended event passed, cannot handle */
+ if (!e)
+ return -1; /* No extended event passed, cannot handle */
if ((XID)dmxLocal->deviceId != ke->deviceid) {
/* Search for the correct dmxLocal,
@@ -540,7 +453,8 @@ static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
DMXInputInfo *dmxInput = &dmxInputs[dmxLocal->inputIdx];
for (i = 0; i < dmxInput->numDevs; i++) {
dmxLocal = dmxInput->devs[i];
- if ((XID)dmxLocal->deviceId == ke->deviceid) break;
+ if ((XID)dmxLocal->deviceId == ke->deviceid)
+ break;
}
}
@@ -589,9 +503,11 @@ static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
xv->valuator4 = ke->axis_data[4];
xv->valuator5 = ke->axis_data[5];
- if (block) dmxSigioBlock();
+ if (block)
+ dmxSigioBlock();
dmxeqEnqueue(xE);
- if (block) dmxSigioUnblock();
+ if (block)
+ dmxSigioUnblock();
break;
case XI_DeviceMotionNotify:
@@ -694,7 +610,8 @@ static KeySym dmxKeyCodeToKeySym(DMXLocalInputInfoPtr dmxLocal,
if (!dmxLocal || !dmxLocal->pDevice || !dmxLocal->pDevice->key)
return NoSymbol;
pKeySyms = &dmxLocal->pDevice->key->curKeySyms;
- if (!pKeySyms) return NoSymbol;
+ if (!pKeySyms)
+ return NoSymbol;
if (keyCode > pKeySyms->minKeyCode && keyCode <= pKeySyms->maxKeyCode) {
DMXDBG2("dmxKeyCodeToKeySym: Translated keyCode=%d to keySym=0x%04x\n",
@@ -743,14 +660,16 @@ static int dmxFixup(DevicePtr pDev, int detail, KeySym keySym)
dmxLocal->pDevice->name);
return NoSymbol;
}
- if (!keySym) keySym = dmxKeyCodeToKeySym(dmxLocal, detail);
- if (keySym == NoSymbol) return detail;
+ if (!keySym)
+ keySym = dmxKeyCodeToKeySym(dmxLocal, detail);
+ if (keySym == NoSymbol)
+ return detail;
keyCode = dmxKeySymToKeyCode(dmxLocalCoreKeyboard, keySym, detail);
return keyCode ? keyCode : detail;
}
-/** Enqueue a non-motion event from the \a pDev device with the
+/** Enqueue an event from the \a pDev device with the
* specified \a type and \a detail. If the event is a KeyPress or
* KeyRelease event, then the \a keySym is also specified.
*
@@ -762,103 +681,56 @@ void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
{
GETDMXINPUTFROMPDEV;
xEvent xE;
+ DeviceIntPtr p = dmxLocal->pDevice;
+ int i, nevents, valuators[3];
+ xEvent *events;
DMXDBG2("dmxEnqueue: Enqueuing type=%d detail=0x%0x\n", type, detail);
switch (type) {
case KeyPress:
case KeyRelease:
- if (!keySym) keySym = dmxKeyCodeToKeySym(dmxLocal, detail);
+ if (!keySym)
+ keySym = dmxKeyCodeToKeySym(dmxLocal, detail);
if (dmxCheckFunctionKeys(dmxLocal, type, keySym))
return;
if (dmxLocal->sendsCore && dmxLocal != dmxLocalCoreKeyboard)
xE.u.u.detail = dmxFixup(pDev, detail, keySym);
-#if 11/*BP*/
- {
- DeviceIntPtr p = dmxLocal->pDevice;
- int i, nevents;
- xEvent *events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
- nevents = GetKeyboardEvents(events,
- /*pDev*/p,
- /*KeyPress*/type,
- /*n*/detail);
- ErrorF("KEY %d n=%d\n", detail, nevents);
- for (i = 0; i < nevents; i++)
- mieqEnqueue(p, events + i);
- xfree(events);
- return;
- }
-#endif
- break;
+
+ events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
+ /*ErrorF("KEY %d sym %d\n", detail, (int) keySym);*/
+ nevents = GetKeyboardEvents(events, p, type, detail);
+ for (i = 0; i < nevents; i++)
+ mieqEnqueue(p, events + i);
+ xfree(events);
+ return;
+
case ButtonPress:
case ButtonRelease:
-#if 00 /*BP*/
detail = dmxGetButtonMapping(dmxLocal, detail);
-#else
- {
- DeviceIntPtr p = dmxLocal->pDevice;
- int i, nevents, valuators[3];
- xEvent *events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
-
- valuators[0] = e->xbutton.x;
- valuators[1] = e->xbutton.y;
- /*
- valuators[0] = dmxGlobalX;
- valuators[1] = dmxGlobalY;
- */
- valuators[2] = e->xbutton.button;
- nevents = GetPointerEvents(events,
- /*pDev*/p,
- /*KeyPress*/type,
- detail,
- POINTER_ABSOLUTE,
- 0, 2/*3*/, valuators);
-
- ErrorF("BUTTON %d, %d %d n=%d\n",
- valuators[0], valuators[1], valuators[2], nevents);
-
- for (i = 0; i < nevents; i++)
- mieqEnqueue(p, events + i);
- xfree(events);
- return;
- }
-#endif
- break;
+ events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
+ nevents = GetPointerEvents(events, p, type, detail,
+ POINTER_ABSOLUTE,
+ 0, /* first_valuator = 0 */
+ 0, /* num_valuators = 0 */
+ valuators);
+ for (i = 0; i < nevents; i++)
+ mieqEnqueue(p, events + i);
+ xfree(events);
+ return;
+
case MotionNotify:
- /* All MotionNotify events should be sent via dmxCoreMotion and
- * dmxExtMotion -- no input driver should build motion events by
- * hand. */
-#if 00 /*BP*/
- dmxLog(dmxError, "dmxEnqueueXEvent: MotionNotify not allowed here\n");
-#else
- {
- DeviceIntPtr p = dmxLocal->pDevice;
- int i, nevents, valuators[3];
- xEvent *events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
- valuators[0] = e->xmotion.x;
- valuators[1] = e->xmotion.y;
- valuators[2] = e->xmotion.state;
- nevents = GetPointerEvents(events,
- /*pDev*/p,
- /*KeyPress*/type,
- detail,
- POINTER_ABSOLUTE,
- 0, 3, valuators);
- ErrorF("MOTION %d, %d n = %d\n", valuators[0], valuators[1], nevents);
- /*
- ErrorF("NEW MOTION %d st %d (%d,%d,%d) n=%d\n",
- detail, e->xmotion.state,
- valuators[0], valuators[1], valuators[2],
- nevents);
- */
- for (i = 0; i < nevents; i++)
- mieqEnqueue(p, events + i);
- xfree(events);
- return;
- }
-#endif
- break;
- /* Always ignore these events */
+ events = Xcalloc(sizeof(xEvent), GetMaximumEventsNum());
+ valuators[0] = e->xmotion.x;
+ valuators[1] = e->xmotion.y;
+ valuators[2] = e->xmotion.state;
+ nevents = GetPointerEvents(events, p, type, detail,
+ POINTER_ABSOLUTE, 0, 3, valuators);
+ for (i = 0; i < nevents; i++)
+ mieqEnqueue(p, events + i);
+ xfree(events);
+ return;
+
case EnterNotify:
case LeaveNotify:
case KeymapNotify:
@@ -866,12 +738,12 @@ void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
* modifier map on the backend/console
* input device so that we have complete
* control of the input device LEDs. */
- ErrorF("Enter/Leave/Keymap/Mapping\n");
return;
default:
#ifdef XINPUT
if (type == ProximityIn || type == ProximityOut) {
- if (dmxLocal->sendsCore) return; /* Not a core event */
+ if (dmxLocal->sendsCore)
+ return; /* Not a core event */
break;
}
#endif
@@ -887,25 +759,19 @@ void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
return;
}
+#if 00 /* dead code? */
memset(&xE, 0, sizeof(xE));
xE.u.u.type = type;
xE.u.u.detail = detail;
xE.u.keyButtonPointer.time = GetTimeInMillis();
#ifdef XINPUT
- if (!dmxLocal->sendsCore) dmxEnqueueExtEvent(dmxLocal, &xE, block);
+ if (!dmxLocal->sendsCore)
+ dmxEnqueueExtEvent(dmxLocal, &xE, block);
else
#endif
-#if 00 /*BP*/
dmxeqEnqueue(&xE);
-#else
- /* never get here! */
- if (0) {
- DeviceIntPtr p = dmxLocal->pDevice;
- ErrorF("enque %d\n", type);
- mieqEnqueue(p, &xE);
- }
-#endif
+#endif /*00*/
}
/** A pointer to this routine is passed to low-level input drivers so
diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c
index cf680517f..a9d902ec2 100644
--- a/hw/dmx/input/dmxinputinit.c
+++ b/hw/dmx/input/dmxinputinit.c
@@ -505,11 +505,10 @@ static int dmxDeviceOnOff(DeviceIntPtr pDevice, int what)
GetMaximumEventsNum(),
#endif
Relative);
- ErrorF("MOTION BUFFER SIZE %d\n", GetMaximumEventsNum());
#ifdef XINPUT
for (i = 0; i < info.numRelAxes; i++)
InitValuatorAxisStruct(pDevice, i, info.minval[0],
- 1280/*info.maxval[0]*/, info.res[0],
+ info.maxval[0], info.res[0],
info.minres[0], info.maxres[0]);
#endif
} else if (info.numRelAxes) {
@@ -520,7 +519,7 @@ static int dmxDeviceOnOff(DeviceIntPtr pDevice, int what)
#ifdef XINPUT
for (i = 0; i < info.numRelAxes; i++)
InitValuatorAxisStruct(pDevice, i, info.minval[0],
- 1280/*info.maxval[0]*/, info.res[0],
+ info.maxval[0], info.res[0],
info.minres[0], info.maxres[0]);
#endif
} else if (info.numAbsAxes) {
@@ -531,7 +530,7 @@ static int dmxDeviceOnOff(DeviceIntPtr pDevice, int what)
#ifdef XINPUT
for (i = 0; i < info.numAbsAxes; i++)
InitValuatorAxisStruct(pDevice, i+info.numRelAxes,
- info.minval[i+1], 1280/*info.maxval[i+1]*/,
+ info.minval[i+1], info.maxval[i+1],
info.res[i+1], info.minres[i+1],
info.maxres[i+1]);
#endif
@@ -588,10 +587,6 @@ static void dmxProcessInputEvents(DMXInputInfo *dmxInput)
{
int i;
- /*
- ErrorF("%s\n", __FUNCTION__);
- */
-
dmxeqProcessInputEvents();
#if 00 /*BP*/
miPointerUpdate();
diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
index 20440dc2c..91e6cfc13 100644
--- a/hw/kdrive/src/kinput.c
+++ b/hw/kdrive/src/kinput.c
@@ -2307,7 +2307,7 @@ ChangeDeviceControl(register ClientPtr client, DeviceIntPtr pDev,
}
int
-NewInputDeviceRequest(InputOption *options)
+NewInputDeviceRequest(InputOption *options, DeviceIntPtr *pdev)
{
InputOption *option = NULL;
KdPointerInfo *pi = NULL;
@@ -2372,5 +2372,16 @@ NewInputDeviceRequest(InputOption *options)
}
}
+ if (pi) {
+ *pdev = pi->dixdev;
+ } else if(ki) {
+ *pdev = ki->dixdev;
+ }
+
return Success;
}
+
+void
+DeleteInputDeviceRequest(DeviceIntPtr pDev)
+{
+}
diff --git a/hw/vfb/Makefile.am b/hw/vfb/Makefile.am
index 40c385434..6842b45a5 100644
--- a/hw/vfb/Makefile.am
+++ b/hw/vfb/Makefile.am
@@ -14,8 +14,8 @@ SRCS = InitInput.c \
$(top_srcdir)/Xi/stubs.c \
$(top_srcdir)/mi/miinitext.c
-libfbcmap_a_CFLAGS = $(AM_CFLAGS) -DXFree86Server
-libfbcmap_a_SOURCES = $(top_srcdir)/fb/fbcmap.c
+libfbcmap_a_CFLAGS = $(AM_CFLAGS)
+libfbcmap_a_SOURCES = $(top_srcdir)/fb/fbcmap_mi.c
Xvfb_SOURCES = $(SRCS)
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index 66e6b055b..4ace24e34 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -1271,7 +1271,7 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
(count + 1) * sizeof(IDevRec));
indp[count - 1] = Pointer;
indp[count - 1].extraOptions =
- xf86addNewOption(NULL, "CorePointer", NULL);
+ xf86addNewOption(NULL, xnfstrdup("CorePointer"), NULL);
indp[count].identifier = NULL;
servlayoutp->inputs = indp;
}
@@ -1287,9 +1287,13 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
* always synthesize a 'mouse' section configured to send core
* events, unless a 'void' section is found, in which case the user
* probably wants to run footless.
+ *
+ * If you're using an evdev keyboard and expect a default mouse
+ * section ... deal.
*/
for (i = servlayoutp->inputs; i->identifier && i->driver; i++) {
- if (!strcmp(i->driver, "void") || !strcmp(i->driver, "mouse")) {
+ if (!strcmp(i->driver, "void") || !strcmp(i->driver, "mouse") ||
+ !strcmp(i->driver, "vmmouse") || !strcmp(i->driver, "evdev")) {
found = 1; break;
}
}
@@ -1306,7 +1310,7 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
(count + 1) * sizeof(IDevRec));
indp[count - 1] = Pointer;
indp[count - 1].extraOptions =
- xf86addNewOption(NULL, "AlwaysCore", NULL);
+ xf86addNewOption(NULL, xnfstrdup("AlwaysCore"), NULL);
indp[count].identifier = NULL;
servlayoutp->inputs = indp;
}
@@ -1397,7 +1401,7 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout)
(count + 1) * sizeof(IDevRec));
indp[count - 1] = Keyboard;
indp[count - 1].extraOptions =
- xf86addNewOption(NULL, "CoreKeyboard", NULL);
+ xf86addNewOption(NULL, xnfstrdup("CoreKeyboard"), NULL);
indp[count].identifier = NULL;
servlayoutp->inputs = indp;
}
diff --git a/hw/xfree86/common/xf86Configure.c b/hw/xfree86/common/xf86Configure.c
index 4b482dfdc..7b04bd6bd 100644
--- a/hw/xfree86/common/xf86Configure.c
+++ b/hw/xfree86/common/xf86Configure.c
@@ -309,13 +309,16 @@ configureInputSection (void)
mouse->inp_identifier = "Mouse0";
mouse->inp_driver = "mouse";
mouse->inp_option_lst =
- xf86addNewOption(mouse->inp_option_lst, "Protocol", DFLT_MOUSE_PROTO);
+ xf86addNewOption(mouse->inp_option_lst, xstrdup("Protocol"),
+ xstrdup(DFLT_MOUSE_PROTO));
#ifndef __SCO__
mouse->inp_option_lst =
- xf86addNewOption(mouse->inp_option_lst, "Device", DFLT_MOUSE_DEV);
+ xf86addNewOption(mouse->inp_option_lst, xstrdup("Device"),
+ xstrdup(DFLT_MOUSE_DEV));
#endif
mouse->inp_option_lst =
- xf86addNewOption(mouse->inp_option_lst, "ZAxisMapping", "4 5 6 7");
+ xf86addNewOption(mouse->inp_option_lst, xstrdup("ZAxisMapping"),
+ xstrdup("4 5 6 7"));
ptr = (XF86ConfInputPtr)xf86addListItem((glp)ptr, (glp)mouse);
return ptr;
}
@@ -519,7 +522,7 @@ configureLayoutSection (void)
iptr->iref_option_lst = NULL;
iptr->iref_inputdev_str = "Mouse0";
iptr->iref_option_lst =
- xf86addNewOption (iptr->iref_option_lst, "CorePointer", NULL);
+ xf86addNewOption (iptr->iref_option_lst, xstrdup("CorePointer"), NULL);
ptr->lay_input_lst = (XF86ConfInputrefPtr)
xf86addListItem ((glp) ptr->lay_input_lst, (glp) iptr);
}
@@ -532,7 +535,7 @@ configureLayoutSection (void)
iptr->iref_option_lst = NULL;
iptr->iref_inputdev_str = "Keyboard0";
iptr->iref_option_lst =
- xf86addNewOption (iptr->iref_option_lst, "CoreKeyboard", NULL);
+ xf86addNewOption (iptr->iref_option_lst, xstrdup("CoreKeyboard"), NULL);
ptr->lay_input_lst = (XF86ConfInputrefPtr)
xf86addListItem ((glp) ptr->lay_input_lst, (glp) iptr);
}
@@ -751,7 +754,7 @@ configureDDCMonitorSection (int screennum)
}
if (ConfiguredMonitor->features.dpms) {
- ptr->mon_option_lst = xf86addNewOption(ptr->mon_option_lst, "DPMS", NULL);
+ ptr->mon_option_lst = xf86addNewOption(ptr->mon_option_lst, xstrdup("DPMS"), NULL);
}
return ptr;
diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index e588e9a8f..83dffa1c6 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -249,14 +249,11 @@ DGACloseScreen(int i, ScreenPtr pScreen)
DGAScreenPtr pScreenPriv = DGA_GET_SCREEN_PRIV(pScreen);
if (XDGAEventBase) {
- OsBlockSignals();
- ProcessInputEvents();
mieqSetHandler(*XDGAEventBase + MotionNotify, NULL);
mieqSetHandler(*XDGAEventBase + ButtonPress, NULL);
mieqSetHandler(*XDGAEventBase + ButtonRelease, NULL);
mieqSetHandler(*XDGAEventBase + KeyPress, NULL);
mieqSetHandler(*XDGAEventBase + KeyRelease, NULL);
- OsReleaseSignals();
}
FreeMarkedVisuals(pScreen);
diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c
index 913735bc9..e0b758ffd 100644
--- a/hw/xfree86/common/xf86Helper.c
+++ b/hw/xfree86/common/xf86Helper.c
@@ -371,8 +371,11 @@ xf86DeleteInput(InputInfoPtr pInp, int flags)
if (pInp->drv)
pInp->drv->refCount--;
+ /* This should *really* be handled in drv->UnInit(dev) call instead */
+#if 0
if (pInp->private)
xfree(pInp->private);
+#endif
/* Remove the entry from the list. */
if (pInp == xf86InputDevs)
diff --git a/hw/xfree86/common/xf86Option.c b/hw/xfree86/common/xf86Option.c
index 7afb63a4d..50a7d9cb9 100644
--- a/hw/xfree86/common/xf86Option.c
+++ b/hw/xfree86/common/xf86Option.c
@@ -289,7 +289,7 @@ xf86CheckBoolOption(pointer optlist, const char *name, int deflt)
_X_EXPORT pointer
xf86ReplaceIntOption(pointer optlist, const char *name, const int val)
{
- char *tmp = xnfalloc(16);
+ char tmp[16];
sprintf(tmp,"%i",val);
return xf86AddNewOption(optlist,name,tmp);
}
@@ -297,7 +297,7 @@ xf86ReplaceIntOption(pointer optlist, const char *name, const int val)
_X_EXPORT pointer
xf86ReplaceRealOption(pointer optlist, const char *name, const double val)
{
- char *tmp = xnfalloc(32);
+ char tmp[32];
snprintf(tmp,32,"%f",val);
return xf86AddNewOption(optlist,name,tmp);
}
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index cc98a0cb2..6a5d4ee9d 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -344,13 +344,14 @@ AddOtherInputDevices()
#endif
int
-NewInputDeviceRequest (InputOption *options)
+NewInputDeviceRequest (InputOption *options, DeviceIntPtr *pdev)
{
IDevRec *idev = NULL;
InputDriverPtr drv = NULL;
InputInfoPtr pInfo = NULL;
InputOption *option = NULL;
DeviceIntPtr dev = NULL;
+ int rval = Success;
idev = xcalloc(sizeof(*idev), 1);
if (!idev)
@@ -358,29 +359,46 @@ NewInputDeviceRequest (InputOption *options)
for (option = options; option; option = option->next) {
if (strcmp(option->key, "driver") == 0) {
- if (!xf86LoadOneModule(option->value, NULL))
- return BadName;
+ if (idev->driver) {
+ rval = BadRequest;
+ goto unwind;
+ }
+ /* Memory leak for every attached device if we don't
+ * test if the module is already loaded first */
drv = xf86LookupInputDriver(option->value);
+ if (!drv)
+ if(xf86LoadOneModule(option->value, NULL))
+ drv = xf86LookupInputDriver(option->value);
if (!drv) {
xf86Msg(X_ERROR, "No input driver matching `%s'\n",
option->value);
- return BadName;
+ rval = BadName;
+ goto unwind;
}
idev->driver = xstrdup(option->value);
if (!idev->driver) {
- xfree(idev);
- return BadAlloc;
+ rval = BadAlloc;
+ goto unwind;
}
}
if (strcmp(option->key, "name") == 0 ||
strcmp(option->key, "identifier") == 0) {
+ if (idev->identifier) {
+ rval = BadRequest;
+ goto unwind;
+ }
idev->identifier = xstrdup(option->value);
if (!idev->identifier) {
- xfree(idev);
- return BadAlloc;
+ rval = BadAlloc;
+ goto unwind;
}
}
}
+ if(!idev->driver || !idev->identifier) {
+ xf86Msg(X_ERROR, "No input driver/identifier specified (ignoring)\n");
+ rval = BadRequest;
+ goto unwind;
+ }
if (!drv) {
xf86Msg(X_ERROR, "No input driver specified (ignoring)\n");
@@ -396,26 +414,31 @@ NewInputDeviceRequest (InputOption *options)
xf86Msg(X_ERROR,
"Input driver `%s' has no PreInit function (ignoring)\n",
drv->driverName);
- return BadImplementation;
+ rval = BadImplementation;
+ goto unwind;
}
- idev->commonOptions = NULL;
- for (option = options; option; option = option->next)
+ for (option = options; option; option = option->next) {
+ /* Steal option key/value strings from the provided list.
+ * We need those strings, the InputOption list doesn't. */
idev->commonOptions = xf86addNewOption(idev->commonOptions,
option->key, option->value);
- idev->extraOptions = NULL;
+ option->key = NULL;
+ option->value = NULL;
+ }
pInfo = drv->PreInit(drv, idev, 0);
if (!pInfo) {
xf86Msg(X_ERROR, "PreInit returned NULL for \"%s\"\n", idev->identifier);
- return BadMatch;
+ rval = BadMatch;
+ goto unwind;
}
else if (!(pInfo->flags & XI86_CONFIGURED)) {
xf86Msg(X_ERROR, "PreInit failed for input device \"%s\"\n",
idev->identifier);
- xf86DeleteInput(pInfo, 0);
- return BadMatch;
+ rval = BadMatch;
+ goto unwind;
}
xf86ActivateDevice(pInfo);
@@ -431,7 +454,43 @@ NewInputDeviceRequest (InputOption *options)
/* send enter/leave event, update sprite window */
CheckMotion(NULL, dev);
+ *pdev = dev;
return Success;
+
+unwind:
+ if(pInfo) {
+ if(drv->UnInit)
+ drv->UnInit(drv, pInfo, 0);
+ else
+ xf86DeleteInput(pInfo, 0);
+ }
+ if(idev->driver)
+ xfree(idev->driver);
+ if(idev->identifier)
+ xfree(idev->identifier);
+ xf86optionListFree(idev->commonOptions);
+ xfree(idev);
+ return rval;
+}
+
+void
+DeleteInputDeviceRequest(DeviceIntPtr pDev)
+{
+ LocalDevicePtr pInfo = (LocalDevicePtr) pDev->public.devicePrivate;
+ InputDriverPtr drv = pInfo->drv;
+ IDevRec *idev = pInfo->conf_idev;
+
+ RemoveDevice(pDev);
+
+ if(drv->UnInit)
+ drv->UnInit(drv, pInfo, 0);
+ else
+ xf86DeleteInput(pInfo, 0);
+
+ xfree(idev->driver);
+ xfree(idev->identifier);
+ xf86optionListFree(idev->commonOptions);
+ xfree(idev);
}
/*
diff --git a/hw/xfree86/dixmods/Makefile.am b/hw/xfree86/dixmods/Makefile.am
index 58099bce9..1581019d1 100644
--- a/hw/xfree86/dixmods/Makefile.am
+++ b/hw/xfree86/dixmods/Makefile.am
@@ -75,13 +75,13 @@ libdbe_la_SOURCES = dbemodule.c
libfb_la_LDFLAGS = -avoid-version
libfb_la_LIBADD = $(top_builddir)/fb/libfb.la
-libfb_la_SOURCES = $(top_builddir)/fb/fbcmap.c fbmodule.c
-libfb_la_CFLAGS = -DXFree86Server $(AM_CFLAGS)
+libfb_la_SOURCES = $(top_builddir)/fb/fbcmap_mi.c fbmodule.c
+libfb_la_CFLAGS = $(AM_CFLAGS)
libwfb_la_LDFLAGS = -avoid-version
libwfb_la_LIBADD = $(top_builddir)/fb/libwfb.la
-libwfb_la_SOURCES = $(top_builddir)/fb/fbcmap.c fbmodule.c
-libwfb_la_CFLAGS = -DXFree86Server $(AM_CFLAGS) -DFB_ACCESS_WRAPPER
+libwfb_la_SOURCES = $(top_builddir)/fb/fbcmap_mi.c fbmodule.c
+libwfb_la_CFLAGS = $(AM_CFLAGS) -DFB_ACCESS_WRAPPER
libglx_la_LDFLAGS = -avoid-version
if AIGLX
diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre
index cc60d0754..19315c024 100644
--- a/hw/xfree86/doc/man/xorg.conf.man.pre
+++ b/hw/xfree86/doc/man/xorg.conf.man.pre
@@ -958,6 +958,10 @@ the driver-specific documentation recommends it.
This optional entry specifies the pixel clock frequency that is used
for the regular text mode. The frequency is specified in MHz. This is
rarely used.
+.TP 7
+.BI "Option \*qModeDebug\*q \*q" boolean \*q
+Enable printing of additional debugging information about modesetting to
+the server log.
.ig
.TP 7
This optional entry allows an IRQ number to be specified.
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 7d86b6606..7e7c7e7ec 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -233,8 +233,6 @@ xf86CrtcSetMode (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation,
int saved_x, saved_y;
Rotation saved_rotation;
- adjusted_mode = xf86DuplicateMode(mode);
-
crtc->enabled = xf86CrtcInUse (crtc);
if (!crtc->enabled)
@@ -243,6 +241,8 @@ xf86CrtcSetMode (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation,
return TRUE;
}
+ adjusted_mode = xf86DuplicateMode(mode);
+
didLock = crtc->funcs->lock (crtc);
saved_mode = crtc->mode;
@@ -377,6 +377,15 @@ static OptionInfoRec xf86OutputOptions[] = {
{-1, NULL, OPTV_NONE, {0}, FALSE },
};
+enum {
+ OPTION_MODEDEBUG,
+};
+
+static OptionInfoRec xf86DeviceOptions[] = {
+ {OPTION_MODEDEBUG, "ModeDebug", OPTV_STRING, {0}, FALSE },
+ {-1, NULL, OPTV_NONE, {0}, FALSE },
+};
+
static void
xf86OutputSetMonitor (xf86OutputPtr output)
{
@@ -589,7 +598,6 @@ xf86CrtcCloseScreen (int index, ScreenPtr screen)
{
xf86OutputPtr output = config->output[o];
- output->crtc = NULL;
output->randr_output = NULL;
}
for (c = 0; c < config->num_crtc; c++)
@@ -1160,8 +1168,6 @@ xf86SortModes (DisplayModePtr input)
return output;
}
-#define DEBUG_REPROBE 1
-
void
xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
{
@@ -1330,7 +1336,8 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
if (mode->status == MODE_OK)
mode->status = (*output->funcs->mode_valid)(output, mode);
- xf86PruneInvalidModes(scrn, &output->probed_modes, TRUE);
+ xf86PruneInvalidModes(scrn, &output->probed_modes,
+ config->debug_modes);
output->probed_modes = xf86SortModes (output->probed_modes);
@@ -1363,17 +1370,17 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
output->initial_rotation = xf86OutputInitialRotation (output);
-#ifdef DEBUG_REPROBE
- if (output->probed_modes != NULL) {
- xf86DrvMsg(scrn->scrnIndex, X_INFO,
- "Printing probed modes for output %s\n",
- output->name);
- } else {
- xf86DrvMsg(scrn->scrnIndex, X_INFO,
- "No remaining probed modes for output %s\n",
- output->name);
+ if (config->debug_modes) {
+ if (output->probed_modes != NULL) {
+ xf86DrvMsg(scrn->scrnIndex, X_INFO,
+ "Printing probed modes for output %s\n",
+ output->name);
+ } else {
+ xf86DrvMsg(scrn->scrnIndex, X_INFO,
+ "No remaining probed modes for output %s\n",
+ output->name);
+ }
}
-#endif
for (mode = output->probed_modes; mode != NULL; mode = mode->next)
{
/* The code to choose the best mode per pipe later on will require
@@ -1382,9 +1389,8 @@ xf86ProbeOutputModes (ScrnInfoPtr scrn, int maxX, int maxY)
mode->VRefresh = xf86ModeVRefresh(mode);
xf86SetModeCrtc(mode, INTERLACE_HALVE_V);
-#ifdef DEBUG_REPROBE
- xf86PrintModeline(scrn->scrnIndex, mode);
-#endif
+ if (config->debug_modes)
+ xf86PrintModeline(scrn->scrnIndex, mode);
}
}
}
@@ -1479,6 +1485,15 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
int width;
int height;
+ /* Set up the device options */
+ config->options = xnfalloc (sizeof (xf86DeviceOptions));
+ memcpy (config->options, xf86DeviceOptions, sizeof (xf86DeviceOptions));
+ xf86ProcessOptions (scrn->scrnIndex,
+ scrn->options,
+ config->options);
+ config->debug_modes = xf86ReturnOptValBool (config->options,
+ OPTION_MODEDEBUG, FALSE);
+
if (scrn->display->virtualX)
width = scrn->display->virtualX;
else
@@ -1818,6 +1833,11 @@ xf86SetSingleMode (ScrnInfoPtr pScrn, DisplayModePtr desired, Rotation rotation)
else
crtc_mode = xf86OutputFindClosestMode (output, desired);
}
+ if (!crtc_mode)
+ {
+ crtc->enabled = FALSE;
+ continue;
+ }
if (!xf86CrtcSetMode (crtc, crtc_mode, rotation, 0, 0))
ok = FALSE;
else
@@ -1829,6 +1849,7 @@ xf86SetSingleMode (ScrnInfoPtr pScrn, DisplayModePtr desired, Rotation rotation)
}
}
xf86DisableUnusedFunctions(pScrn);
+ xf86RandR12TellChanged (pScrn->pScreen);
return ok;
}
@@ -1962,10 +1983,12 @@ xf86OutputSetEDID (xf86OutputPtr output, xf86MonPtr edid_mon)
output->MonInfo = edid_mon;
- /* Debug info for now, at least */
- xf86DrvMsg(scrn->scrnIndex, X_INFO, "EDID for output %s\n", output->name);
- xf86PrintEDID(edid_mon);
-
+ if (config->debug_modes) {
+ xf86DrvMsg(scrn->scrnIndex, X_INFO, "EDID for output %s\n",
+ output->name);
+ xf86PrintEDID(edid_mon);
+ }
+
/* Set the DDC properties for the 'compat' output */
if (output == config->output[config->compat_output])
xf86SetDDCproperties(scrn, edid_mon);
diff --git a/hw/xfree86/modes/xf86Crtc.h b/hw/xfree86/modes/xf86Crtc.h
index 42daf6079..030f6bf3a 100644
--- a/hw/xfree86/modes/xf86Crtc.h
+++ b/hw/xfree86/modes/xf86Crtc.h
@@ -552,6 +552,13 @@ typedef struct _xf86CrtcConfig {
CARD8 *cursor_image;
Bool cursor_on;
CARD32 cursor_fg, cursor_bg;
+
+ /**
+ * Options parsed from the related device section
+ */
+ OptionInfoPtr options;
+
+ Bool debug_modes;
} xf86CrtcConfigRec, *xf86CrtcConfigPtr;
extern int xf86CrtcConfigPrivateIndex;
diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
index 13437a5a5..d0e1dfd24 100644
--- a/hw/xfree86/modes/xf86RandR12.c
+++ b/hw/xfree86/modes/xf86RandR12.c
@@ -1049,6 +1049,28 @@ xf86RandR12CreateScreenResources12 (ScreenPtr pScreen)
return TRUE;
}
+/*
+ * Something happened within the screen configuration due
+ * to DGA, VidMode or hot key. Tell RandR
+ */
+
+void
+xf86RandR12TellChanged (ScreenPtr pScreen)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
+ XF86RandRInfoPtr randrp = XF86RANDRINFO(pScreen);
+ int c;
+
+ if (!randrp)
+ return;
+ xf86RandR12SetInfo12 (pScreen);
+ for (c = 0; c < config->num_crtc; c++)
+ xf86RandR12CrtcNotify (config->crtc[c]->randr_crtc);
+
+ RRTellChanged (pScreen);
+}
+
static void
xf86RandR12PointerMoved (int scrnIndex, int x, int y)
{
diff --git a/hw/xfree86/modes/xf86RandR12.h b/hw/xfree86/modes/xf86RandR12.h
index 8a4668b46..0d3346a77 100644
--- a/hw/xfree86/modes/xf86RandR12.h
+++ b/hw/xfree86/modes/xf86RandR12.h
@@ -33,5 +33,6 @@ Bool xf86RandR12SetConfig(ScreenPtr pScreen, Rotation rotation, int rate,
Rotation xf86RandR12GetRotation(ScreenPtr pScreen);
void xf86RandR12GetOriginalVirtualSize(ScrnInfoPtr pScrn, int *x, int *y);
Bool xf86RandR12PreInit (ScrnInfoPtr pScrn);
+void xf86RandR12TellChanged (ScreenPtr pScreen);
#endif /* _XF86_RANDR_H_ */
diff --git a/hw/xfree86/os-support/bsd/Makefile.am b/hw/xfree86/os-support/bsd/Makefile.am
index 099240467..0432ba931 100644
--- a/hw/xfree86/os-support/bsd/Makefile.am
+++ b/hw/xfree86/os-support/bsd/Makefile.am
@@ -38,8 +38,7 @@ ARCH_SOURCES = i386_video.c
endif
if PPC_VIDEO
-ARCH_SOURCES = ppc_video.c \
- $(srcdir)/../shared/ioperm_noop.c
+ARCH_SOURCES = ppc_video.c
endif
if SPARC64_VIDEO
diff --git a/hw/xfree86/os-support/bsd/ppc_video.c b/hw/xfree86/os-support/bsd/ppc_video.c
index ae65c8f15..6a23b4e5c 100644
--- a/hw/xfree86/os-support/bsd/ppc_video.c
+++ b/hw/xfree86/os-support/bsd/ppc_video.c
@@ -56,6 +56,9 @@
static pointer ppcMapVidMem(int, unsigned long, unsigned long, int flags);
static void ppcUnmapVidMem(int, pointer, unsigned long);
+Bool xf86EnableIO(void);
+void xf86DisableIO(void);
+
void
xf86OSInitVidMem(VidMemInfoPtr pVidMem)
{
@@ -63,6 +66,7 @@ xf86OSInitVidMem(VidMemInfoPtr pVidMem)
pVidMem->mapMem = ppcMapVidMem;
pVidMem->unmapMem = ppcUnmapVidMem;
pVidMem->initialised = TRUE;
+ xf86EnableIO();
}
@@ -138,3 +142,32 @@ xf86EnableInterrupts()
return;
}
+
+Bool xf86EnableIO()
+{
+ int fd = xf86Info.screenFd;
+
+ xf86MsgVerb(X_WARNING, 3, "xf86EnableIO %d\n", fd);
+ if (ioBase == MAP_FAILED)
+ {
+ ioBase=mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd,
+ 0xf2000000);
+ xf86MsgVerb(X_INFO, 3, "xf86EnableIO: %08x\n", ioBase);
+ if (ioBase == MAP_FAILED) {
+ xf86MsgVerb(X_WARNING, 3, "Can't map IO space!\n");
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+void xf86DisableIO()
+{
+
+ if (ioBase != MAP_FAILED)
+ {
+ munmap(__UNVOLATILE(ioBase), 0x10000);
+ ioBase = MAP_FAILED;
+ }
+}
+
diff --git a/hw/xfree86/os-support/bus/linuxPci.c b/hw/xfree86/os-support/bus/linuxPci.c
index 55ed87859..2aaa89cc2 100644
--- a/hw/xfree86/os-support/bus/linuxPci.c
+++ b/hw/xfree86/os-support/bus/linuxPci.c
@@ -773,8 +773,8 @@ xf86ReadDomainMemory(PCITAG Tag, ADDRESS Base, int Len, unsigned char *Buf)
bus = PCI_BUS_NO_DOMAIN(PCI_BUS_FROM_TAG(Tag));
dev = PCI_DEV_FROM_TAG(Tag);
func = PCI_FUNC_FROM_TAG(Tag);
- sprintf(file, "/sys/devices/pci%04x:%02x/%04x:%02x:%02x.%1x/rom",
- dom, bus, dom, bus, dev, func);
+ sprintf(file, "/sys/bus/pci/devices/%04x:%02x:%02x.%1x/rom",
+ dom, bus, dev, func);
/*
* If the caller wants the ROM and the sysfs rom interface exists,
diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c
index 85b6def56..9775180a8 100644
--- a/hw/xfree86/os-support/linux/lnx_init.c
+++ b/hw/xfree86/os-support/linux/lnx_init.c
@@ -245,15 +245,15 @@ xf86OpenConsole(void)
lnx_savefont();
#endif
/*
- * now get the VT
+ * now get the VT. This _must_ succeed, or else fail completely.
*/
if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, xf86Info.vtno) < 0)
- xf86Msg(X_WARNING, "xf86OpenConsole: VT_ACTIVATE failed: %s\n",
- strerror(errno));
+ FatalError("xf86OpenConsole: VT_ACTIVATE failed: %s\n",
+ strerror(errno));
if (ioctl(xf86Info.consoleFd, VT_WAITACTIVE, xf86Info.vtno) < 0)
- xf86Msg(X_WARNING, "xf86OpenConsole: VT_WAITACTIVE failed: %s\n",
- strerror(errno));
+ FatalError("xf86OpenConsole: VT_WAITACTIVE failed: %s\n",
+ strerror(errno));
if (ioctl(xf86Info.consoleFd, VT_GETMODE, &VT) < 0)
FatalError("xf86OpenConsole: VT_GETMODE failed %s\n",
@@ -350,6 +350,10 @@ xf86CloseConsole()
if (ioctl(xf86Info.consoleFd, VT_ACTIVATE, activeVT) < 0)
xf86Msg(X_WARNING, "xf86CloseConsole: VT_ACTIVATE failed: %s\n",
strerror(errno));
+ if (ioctl(xf86Info.consoleFd, VT_WAITACTIVE, activeVT) < 0)
+ xf86Msg(X_WARNING,
+ "xf86CloseConsole: VT_WAITACTIVE failed: %s\n",
+ strerror(errno));
activeVT = -1;
}
diff --git a/hw/xfree86/parser/Flags.c b/hw/xfree86/parser/Flags.c
index 4adea1ade..5b60a5155 100644
--- a/hw/xfree86/parser/Flags.c
+++ b/hw/xfree86/parser/Flags.c
@@ -198,21 +198,21 @@ addNewOption2 (XF86OptionPtr head, char *name, char *val, int used)
{
XF86OptionPtr new, old = NULL;
- /* Don't allow duplicates */
- if (head != NULL && (old = xf86findOption(head, name)) != NULL)
- new = old;
- else {
+ /* Don't allow duplicates, free old strings */
+ if (head != NULL && (old = xf86findOption(head, name)) != NULL) {
+ new = old;
+ xf86conffree(new->opt_name);
+ xf86conffree(new->opt_val);
+ }
+ else
new = xf86confcalloc (1, sizeof (XF86OptionRec));
- new->list.next = NULL;
- }
- new->opt_name = name;
- new->opt_val = val;
- new->opt_used = used;
-
- if (old == NULL)
- return ((XF86OptionPtr) xf86addListItem ((glp) head, (glp) new));
- else
- return head;
+ new->opt_name = name;
+ new->opt_val = val;
+ new->opt_used = used;
+
+ if (old)
+ return head;
+ return ((XF86OptionPtr) xf86addListItem ((glp) head, (glp) new));
}
XF86OptionPtr
diff --git a/hw/xfree86/parser/write.c b/hw/xfree86/parser/write.c
index 1869f56a6..3924001f7 100644
--- a/hw/xfree86/parser/write.c
+++ b/hw/xfree86/parser/write.c
@@ -107,13 +107,19 @@ doWriteConfigFile (const char *filename, XF86ConfigPtr cptr)
xf86printLayoutSection (cf, cptr->conf_layout_lst);
- fprintf (cf, "Section \"Files\"\n");
- xf86printFileSection (cf, cptr->conf_files);
- fprintf (cf, "EndSection\n\n");
+ if (cptr->conf_files != NULL)
+ {
+ fprintf (cf, "Section \"Files\"\n");
+ xf86printFileSection (cf, cptr->conf_files);
+ fprintf (cf, "EndSection\n\n");
+ }
- fprintf (cf, "Section \"Module\"\n");
- xf86printModuleSection (cf, cptr->conf_modules);
- fprintf (cf, "EndSection\n\n");
+ if (cptr->conf_modules != NULL)
+ {
+ fprintf (cf, "Section \"Module\"\n");
+ xf86printModuleSection (cf, cptr->conf_modules);
+ fprintf (cf, "EndSection\n\n");
+ }
xf86printVendorSection (cf, cptr->conf_vendor_lst);
diff --git a/hw/xfree86/utils/xorgcfg/text-mode.c b/hw/xfree86/utils/xorgcfg/text-mode.c
index 9797ca283..8800c29d7 100644
--- a/hw/xfree86/utils/xorgcfg/text-mode.c
+++ b/hw/xfree86/utils/xorgcfg/text-mode.c
@@ -2111,7 +2111,7 @@ LayoutConfig(void)
else
iref->iref_option_lst =
xf86addNewOption(iref->iref_option_lst,
- "CorePointer", NULL);
+ XtNewString("CorePointer"), NULL);
option = xf86findOption(mref->iref_option_lst,
"CorePointer");
XtFree(option->opt_name);
@@ -2209,7 +2209,7 @@ LayoutConfig(void)
else
iref->iref_option_lst =
xf86addNewOption(iref->iref_option_lst,
- "CoreKeyboard", NULL);
+ XtNewString("CoreKeyboard"), NULL);
option = xf86findOption(kref->iref_option_lst,
"CoreKeyboard");
XtFree(option->opt_name);
diff --git a/hw/xnest/Display.c b/hw/xnest/Display.c
index 1ec0609d9..01290417c 100644
--- a/hw/xnest/Display.c
+++ b/hw/xnest/Display.c
@@ -176,7 +176,7 @@ xnestOpenDisplay(int argc, char *argv[])
}
void
-xnestCloseDisplay()
+xnestCloseDisplay(void)
{
if (!xnestDoFullGeneration || !xnestDisplay) return;
diff --git a/hw/xnest/Events.c b/hw/xnest/Events.c
index 8f794edcc..abd6bcb73 100644
--- a/hw/xnest/Events.c
+++ b/hw/xnest/Events.c
@@ -53,7 +53,7 @@ ProcessInputEvents()
}
int
-TimeSinceLastInputEvent()
+TimeSinceLastInputEvent(void)
{
if (lastEventTime == 0)
lastEventTime = GetTimeInMillis();
@@ -61,7 +61,7 @@ TimeSinceLastInputEvent()
}
void
-SetTimeSinceLastInputEvent()
+SetTimeSinceLastInputEvent(void)
{
lastEventTime = GetTimeInMillis();
}
@@ -79,7 +79,7 @@ xnestNotExposurePredicate(Display *display, XEvent *event, char *args)
}
void
-xnestCollectExposures()
+xnestCollectExposures(void)
{
XEvent X;
WindowPtr pWin;
@@ -114,7 +114,7 @@ xnestQueueKeyEvent(int type, unsigned int keycode)
}
void
-xnestCollectEvents()
+xnestCollectEvents(void)
{
XEvent X;
xEvent x;
diff --git a/hw/xnest/Makefile.am b/hw/xnest/Makefile.am
index b89761651..e958c0eee 100644
--- a/hw/xnest/Makefile.am
+++ b/hw/xnest/Makefile.am
@@ -45,8 +45,8 @@ SRCS = Args.c \
$(top_srcdir)/Xi/stubs.c \
$(top_srcdir)/mi/miinitext.c
-libfbcmap_a_SOURCES = $(top_srcdir)/fb/fbcmap.c
-libfbcmap_a_CFLAGS = $(AM_CFLAGS) -DXFree86Server
+libfbcmap_a_SOURCES = $(top_srcdir)/fb/fbcmap_mi.c
+libfbcmap_a_CFLAGS = $(AM_CFLAGS)
Xnest_SOURCES = $(SRCS)
diff --git a/hw/xprint/Makefile.am b/hw/xprint/Makefile.am
index d4f22d261..45168b11e 100644
--- a/hw/xprint/Makefile.am
+++ b/hw/xprint/Makefile.am
@@ -38,6 +38,6 @@ Xprt_SOURCES = \
Util.c \
miinitext-wrapper.c \
dpmsstubs-wrapper.c \
- $(top_srcdir)/fb/fbcmap.c
+ $(top_srcdir)/fb/fbcmap_mi.c
EXTRA_DIST = ValTree.c
diff --git a/hw/xprint/ddxInit.c b/hw/xprint/ddxInit.c
index 8e7ec2e0a..a465c4c6d 100644
--- a/hw/xprint/ddxInit.c
+++ b/hw/xprint/ddxInit.c
@@ -89,6 +89,12 @@ InitOutput(
}
+void
+DDXRingBell(int volume, int pitch, int duration)
+{
+ /* dummy func; link fails without */
+}
+
static void
BellProc(
int volume,
diff --git a/include/input.h b/include/input.h
index 2debce93c..4ba0cad86 100644
--- a/include/input.h
+++ b/include/input.h
@@ -485,7 +485,10 @@ extern Bool ACDeviceAllowed(WindowPtr win,
/* Implemented by the DDX. */
extern int NewInputDeviceRequest(
- InputOption *options);
+ InputOption *options,
+ DeviceIntPtr *dev);
+extern void DeleteInputDeviceRequest(
+ DeviceIntPtr dev);
extern void DDXRingBell(
int volume,
diff --git a/mi/micmap.c b/mi/micmap.c
index 977c587a0..33d948179 100644
--- a/mi/micmap.c
+++ b/mi/micmap.c
@@ -385,7 +385,7 @@ static int miVisualPriority[] = {
static miVisualsPtr miVisuals;
_X_EXPORT void
-miClearVisualTypes()
+miClearVisualTypes(void)
{
miVisualsPtr v;
@@ -690,7 +690,7 @@ miDoInitVisuals(VisualPtr *visualp, DepthPtr *depthp, int *nvisualp,
}
void
-miResetInitVisuals()
+miResetInitVisuals(void)
{
miInitVisualsProc = miDoInitVisuals;
}
diff --git a/mi/mieq.c b/mi/mieq.c
index 9c670612a..143a94f5b 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -65,7 +65,7 @@ in this Software without prior written authorization from The Open Group.
# include <X11/extensions/dpms.h>
#endif
-#define QUEUE_SIZE 256
+#define QUEUE_SIZE 512
typedef struct _Event {
xEvent event[7];
@@ -87,7 +87,7 @@ typedef struct _EventQueue {
static EventQueueRec miEventQueue;
Bool
-mieqInit()
+mieqInit(void)
{
int i;
@@ -205,7 +205,7 @@ mieqSetHandler(int event, mieqHandler handler)
/* Call this from ProcessInputEvents(). */
void
-mieqProcessInputEvents()
+mieqProcessInputEvents(void)
{
EventRec *e = NULL;
int x = 0, y = 0;
diff --git a/os/log.c b/os/log.c
index b1d628c3f..e8aa3fa01 100644
--- a/os/log.c
+++ b/os/log.c
@@ -221,7 +221,7 @@ LogInit(const char *fname, const char *backup)
}
void
-LogClose()
+LogClose(void)
{
if (logFile) {
fclose(logFile);
@@ -616,7 +616,7 @@ Error(char *str)
}
void
-LogPrintMarkers()
+LogPrintMarkers(void)
{
/* Show what the message marker symbols mean. */
ErrorF("Markers: ");
diff --git a/os/oscolor.c b/os/oscolor.c
index a13a3a68c..d53e4d8ff 100644
--- a/os/oscolor.c
+++ b/os/oscolor.c
@@ -102,7 +102,7 @@ typedef struct _builtinColor {
#define NUM_BUILTIN_COLORS (sizeof (BuiltinColors) / sizeof (BuiltinColors[0]))
Bool
-OsInitColors()
+OsInitColors(void)
{
return TRUE;
}
diff --git a/os/utils.c b/os/utils.c
index e605a6c7a..5058285e8 100644
--- a/os/utils.c
+++ b/os/utils.c
@@ -64,6 +64,8 @@ OR PERFORMANCE OF THIS SOFTWARE.
#include <X11/Xos.h>
#include <stdio.h>
#include <time.h>
+#include <sys/time.h>
+#include <sys/resource.h>
#include "misc.h"
#include <X11/X.h>
#define XSERV_t
@@ -795,7 +797,13 @@ ProcessCommandLine(int argc, char *argv[])
UseMsg();
}
else if ( strcmp( argv[i], "-core") == 0)
+ {
+ struct rlimit core_limit;
CoreDump = TRUE;
+ getrlimit (RLIMIT_CORE, &core_limit);
+ core_limit.rlim_cur = core_limit.rlim_max;
+ setrlimit (RLIMIT_CORE, &core_limit);
+ }
else if ( strcmp( argv[i], "-dpi") == 0)
{
if(++i < argc)
diff --git a/randr/rrscreen.c b/randr/rrscreen.c
index ad74ac3af..d92a0ffee 100644
--- a/randr/rrscreen.c
+++ b/randr/rrscreen.c
@@ -116,11 +116,19 @@ RRDeliverScreenEvent (ClientPtr client, WindowPtr pWin, ScreenPtr pScreen)
se.sequenceNumber = client->sequence;
se.sizeID = RR10CurrentSizeID (pScreen);
-
- se.widthInPixels = pScreen->width;
- se.heightInPixels = pScreen->height;
- se.widthInMillimeters = pScreen->mmWidth;
- se.heightInMillimeters = pScreen->mmHeight;
+
+ if (se.rotation & (RR_Rotate_90 | RR_Rotate_270)) {
+ se.widthInPixels = pScreen->height;
+ se.heightInPixels = pScreen->width;
+ se.widthInMillimeters = pScreen->mmHeight;
+ se.heightInMillimeters = pScreen->mmWidth;
+ } else {
+ se.widthInPixels = pScreen->width;
+ se.heightInPixels = pScreen->height;
+ se.widthInMillimeters = pScreen->mmWidth;
+ se.heightInMillimeters = pScreen->mmHeight;
+ }
+
WriteEventsToClient (client, 1, (xEvent *) &se);
}
@@ -733,6 +741,7 @@ ProcRRSetScreenConfig (ClientPtr client)
RRModePtr mode;
RR10DataPtr pData = NULL;
RRScreenSizePtr pSize;
+ int width, height;
UpdateCurrentTime ();
@@ -875,8 +884,14 @@ ProcRRSetScreenConfig (ClientPtr client)
* If the screen size is changing, adjust all of the other outputs
* to fit the new size, mirroring as much as possible
*/
- if (mode->mode.width != pScreen->width ||
- mode->mode.height != pScreen->height)
+ width = mode->mode.width;
+ height = mode->mode.height;
+ if (rotation & (RR_Rotate_90|RR_Rotate_270))
+ {
+ width = mode->mode.height;
+ height = mode->mode.width;
+ }
+ if (width != pScreen->width || height != pScreen->height)
{
int c;
@@ -890,7 +905,7 @@ ProcRRSetScreenConfig (ClientPtr client)
goto sendReply;
}
}
- if (!RRScreenSizeSet (pScreen, mode->mode.width, mode->mode.height,
+ if (!RRScreenSizeSet (pScreen, width, height,
pScreen->mmWidth, pScreen->mmHeight))
{
rep.status = RRSetConfigFailed;
diff --git a/render/glyph.c b/render/glyph.c
index 5987cbc70..583a52ba3 100644
--- a/render/glyph.c
+++ b/render/glyph.c
@@ -86,13 +86,13 @@ static int globalTotalGlyphPrivateSize = 0;
static int glyphPrivateCount = 0;
void
-ResetGlyphPrivates ()
+ResetGlyphPrivates (void)
{
glyphPrivateCount = 0;
}
int
-AllocateGlyphPrivateIndex ()
+AllocateGlyphPrivateIndex (void)
{
return glyphPrivateCount++;
}