xserver: Branch 'master' - 9 commits
Peter Hutterer
whot at kemper.freedesktop.org
Mon Sep 21 19:44:03 PDT 2009
Xext/mbuf.c | 322 ++++++++++++++++++++++++++++++++++-------
Xi/exevents.c | 4
configure.ac | 24 +--
dix/eventconvert.c | 10 -
dix/events.c | 10 -
hw/dmx/dmxscrinit.c | 11 +
hw/xfree86/common/xf86DGA.c | 2
hw/xfree86/modes/xf86Cursors.c | 12 -
include/eventstr.h | 8 -
mi/mieq.c | 12 -
xkb/xkbAccessX.c | 2
xkb/xkbPrKeyEv.c | 2
12 files changed, 316 insertions(+), 103 deletions(-)
New commits:
commit 66ece3bfb19642bf0f1ef73c3caa8a99c3dfb5a9
Author: Kevin E Martin <kem at redhat.com>
Date: Tue Sep 22 11:42:24 2009 +1000
dmx: only free the default pixmaps that we actually allocated.
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
diff --git a/hw/dmx/dmxscrinit.c b/hw/dmx/dmxscrinit.c
index cab212d..09734f5 100644
--- a/hw/dmx/dmxscrinit.c
+++ b/hw/dmx/dmxscrinit.c
@@ -388,8 +388,11 @@ void dmxBECloseScreen(ScreenPtr pScreen)
} else {
/* Free the default drawables */
for (i = 0; i < dmxScreen->beNumPixmapFormats; i++) {
- XFreePixmap(dmxScreen->beDisplay, dmxScreen->scrnDefDrawables[i]);
- dmxScreen->scrnDefDrawables[i] = (Drawable)0;
+ if (dmxScreen->scrnDefDrawables[i]) {
+ XFreePixmap(dmxScreen->beDisplay,
+ dmxScreen->scrnDefDrawables[i]);
+ dmxScreen->scrnDefDrawables[i] = (Drawable)0;
+ }
}
}
commit 20fb8c2e2fccb28c1b89e6e2a5c685e1287baedb
Author: Kevin E Martin <kem at redhat.com>
Date: Tue Sep 22 11:41:33 2009 +1000
dmx: disable Get/SetWindowPixmap, we don't support composite/redirected windows
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
diff --git a/hw/dmx/dmxscrinit.c b/hw/dmx/dmxscrinit.c
index b5afb58..cab212d 100644
--- a/hw/dmx/dmxscrinit.c
+++ b/hw/dmx/dmxscrinit.c
@@ -282,6 +282,10 @@ Bool dmxScreenInit(int idx, ScreenPtr pScreen, int argc, char *argv[])
(void)dmxPictureInit(pScreen, 0, 0);
#endif
+ /* Not yet... */
+ pScreen->GetWindowPixmap = NULL;
+ pScreen->SetWindowPixmap = NULL;
+
if (dmxShadowFB && !shadowInit(pScreen, dmxShadowUpdateProc, NULL))
return FALSE;
commit fcdc1d78cca3b8bb6b77d53eda7e21d649df6943
Author: Keith Packard <keithp at keithp.com>
Date: Mon Sep 21 19:16:59 2009 +0200
Fix sporadic segfault on resume due to accidentally freeing cursor.
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
diff --git a/hw/xfree86/modes/xf86Cursors.c b/hw/xfree86/modes/xf86Cursors.c
index fc4df84..385848b 100644
--- a/hw/xfree86/modes/xf86Cursors.c
+++ b/hw/xfree86/modes/xf86Cursors.c
@@ -480,10 +480,10 @@ xf86_use_hw_cursor_argb (ScreenPtr screen, CursorPtr cursor)
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
xf86CursorInfoPtr cursor_info = xf86_config->cursor_info;
+ ++cursor->refcnt;
if (xf86_config->cursor)
FreeCursor (xf86_config->cursor, None);
xf86_config->cursor = cursor;
- ++cursor->refcnt;
/* Make sure ARGB support is available */
if ((cursor_info->Flags & HARDWARE_CURSOR_ARGB) == 0)
commit 91e1fe5863a180b2d70a6943e83b98bbd4c9ebce
Author: Matthias Hopf <mhopf at suse.de>
Date: Mon Sep 21 19:13:31 2009 +0200
Revert fe31f9c + 977953b to fix issue for good.
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
diff --git a/hw/xfree86/modes/xf86Cursors.c b/hw/xfree86/modes/xf86Cursors.c
index 3d2d633..fc4df84 100644
--- a/hw/xfree86/modes/xf86Cursors.c
+++ b/hw/xfree86/modes/xf86Cursors.c
@@ -480,14 +480,8 @@ xf86_use_hw_cursor_argb (ScreenPtr screen, CursorPtr cursor)
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
xf86CursorInfoPtr cursor_info = xf86_config->cursor_info;
- if (xf86_config->cursor) {
- /* Under some circumstances an already set cursor is set again.
- * If the pointer is freed, ->bits is killed */
- if (xf86_config->cursor != cursor)
- FreeCursor (xf86_config->cursor, None);
- else
- --cursor->refcnt;
- }
+ if (xf86_config->cursor)
+ FreeCursor (xf86_config->cursor, None);
xf86_config->cursor = cursor;
++cursor->refcnt;
commit 90aa0e4a49cdd637178a771365e1e8dab8bceb87
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Sep 18 10:03:02 2009 +1000
input: don't use typecasts to access members of InternalEvent.
To avoid confusion, the member names are now postfixed with _event.
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
diff --git a/Xi/exevents.c b/Xi/exevents.c
index 0211e72..b0e0ede 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -944,7 +944,7 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
int ret = 0;
int state, i;
DeviceIntPtr mouse = NULL, kbd = NULL;
- DeviceEvent *event = (DeviceEvent*)ev;
+ DeviceEvent *event = &ev->device_event;
CHECKEVENT(ev);
@@ -954,7 +954,7 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
ev->any.type == ET_RawButtonRelease ||
ev->any.type == ET_RawMotion)
{
- ProcessRawEvent((RawDeviceEvent*)ev, device);
+ ProcessRawEvent(&ev->raw_event, device);
return;
}
diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index 21eed40..d91ba67 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -107,7 +107,7 @@ EventToCore(InternalEvent *event, xEvent *core)
case ET_KeyPress:
case ET_KeyRelease:
{
- DeviceEvent *e = (DeviceEvent*)event;
+ DeviceEvent *e = &event->device_event;
if (e->detail.key > 0xFF)
return BadMatch;
@@ -167,7 +167,7 @@ EventToXI(InternalEvent *ev, xEvent **xi, int *count)
case ET_KeyRelease:
case ET_ProximityIn:
case ET_ProximityOut:
- return eventToKeyButtonPointer((DeviceEvent*)ev, xi, count);
+ return eventToKeyButtonPointer(&ev->device_event, xi, count);
case ET_DeviceChanged:
case ET_RawKeyPress:
case ET_RawKeyRelease:
@@ -215,19 +215,19 @@ EventToXI2(InternalEvent *ev, xEvent **xi)
case ET_ButtonRelease:
case ET_KeyPress:
case ET_KeyRelease:
- return eventToDeviceEvent((DeviceEvent*)ev, xi);
+ return eventToDeviceEvent(&ev->device_event, xi);
case ET_ProximityIn:
case ET_ProximityOut:
*xi = NULL;
return BadMatch;
case ET_DeviceChanged:
- return eventToDeviceChanged((DeviceChangedEvent*)ev, xi);
+ return eventToDeviceChanged(&ev->changed_event, xi);
case ET_RawKeyPress:
case ET_RawKeyRelease:
case ET_RawButtonPress:
case ET_RawButtonRelease:
case ET_RawMotion:
- return eventToRawEvent((RawDeviceEvent*)ev, xi);
+ return eventToRawEvent(&ev->raw_event, xi);
default:
break;
}
diff --git a/dix/events.c b/dix/events.c
index 0d01df5..a79cf6d 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -809,7 +809,7 @@ CheckVirtualMotion(
if (qe)
{
- ev = (DeviceEvent*)qe->event;
+ ev = &qe->event->device_event;
switch(ev->type)
{
case ET_Motion:
@@ -1130,7 +1130,7 @@ EnqueueEvent(InternalEvent *ev, DeviceIntPtr device)
QdEventPtr qe;
SpritePtr pSprite = device->spriteInfo->sprite;
int eventlen;
- DeviceEvent *event = (DeviceEvent*)ev;
+ DeviceEvent *event = &ev->device_event;
NoticeTime((InternalEvent*)event);
@@ -1179,7 +1179,7 @@ EnqueueEvent(InternalEvent *ev, DeviceIntPtr device)
(tail->device == device) &&
(tail->pScreen == pSprite->hotPhys.pScreen))
{
- DeviceEvent *tailev = (DeviceEvent*)tail->event;
+ DeviceEvent *tailev = &tail->event->device_event;
tailev->root_x = pSprite->hotPhys.x;
tailev->root_y = pSprite->hotPhys.y;
tailev->time = event->time;
@@ -1238,7 +1238,7 @@ PlayReleasedEvents(void)
will translate from sprite screen to screen 0 upon reentry
to the DIX layer */
if(!noPanoramiXExtension) {
- DeviceEvent *ev = (DeviceEvent*)(qe->event);
+ DeviceEvent *ev = &qe->event->device_event;
switch(ev->type)
{
case ET_Motion:
@@ -3993,7 +3993,7 @@ DeliverGrabbedEvent(InternalEvent *event, DeviceIntPtr thisDev,
FreezeThaw(thisDev, TRUE);
if (!grabinfo->sync.event)
grabinfo->sync.event = xcalloc(1, sizeof(InternalEvent));
- *grabinfo->sync.event = *(DeviceEvent*)event;
+ *grabinfo->sync.event = event->device_event;
break;
}
}
diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index 8328f58..42b7c58 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -1193,7 +1193,7 @@ DGAGetOldDGAMode(int index)
static void
DGAHandleEvent(int screen_num, InternalEvent *ev, DeviceIntPtr device)
{
- DGAEvent *event= (DGAEvent*)ev;
+ DGAEvent *event= &ev->dga_event;
ScreenPtr pScreen = screenInfo.screens[screen_num];
DGAScreenPtr pScreenPriv;
diff --git a/include/eventstr.h b/include/eventstr.h
index f082db3..509982b 100644
--- a/include/eventstr.h
+++ b/include/eventstr.h
@@ -221,12 +221,12 @@ union _InternalEvent {
int length; /**< Length in bytes */
Time time; /**< Time in ms. */
} any;
- DeviceEvent device;
- DeviceChangedEvent changed;
+ DeviceEvent device_event;
+ DeviceChangedEvent changed_event;
#if XFreeXDGA
- DGAEvent dga;
+ DGAEvent dga_event;
#endif
- RawDeviceEvent raw;
+ RawDeviceEvent raw_event;
};
#endif
diff --git a/mi/mieq.c b/mi/mieq.c
index 0b64882..4c6c3bd 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -269,7 +269,7 @@ ChangeDeviceID(DeviceIntPtr dev, InternalEvent* event)
case ET_ProximityOut:
case ET_Hierarchy:
case ET_DeviceChanged:
- event->device.deviceid = dev->id;
+ event->device_event.deviceid = dev->id;
break;
#if XFreeXDGA
case ET_DGAEvent:
@@ -280,7 +280,7 @@ ChangeDeviceID(DeviceIntPtr dev, InternalEvent* event)
case ET_RawButtonPress:
case ET_RawButtonRelease:
case ET_RawMotion:
- event->raw.deviceid = dev->id;
+ event->raw_event.deviceid = dev->id;
break;
default:
ErrorF("[mi] Unknown event type (%d), cannot change id.\n",
@@ -299,11 +299,11 @@ FixUpEventForMaster(DeviceIntPtr mdev, DeviceIntPtr sdev,
if (original->any.type == ET_ButtonPress ||
original->any.type == ET_ButtonRelease)
{
- int btn = original->device.detail.button;
+ int btn = original->device_event.detail.button;
if (!sdev->button)
return; /* Should never happen */
- master->device.detail.button = sdev->button->map[btn];
+ master->device_event.detail.button = sdev->button->map[btn];
}
}
@@ -382,8 +382,8 @@ mieqProcessDeviceEvent(DeviceIntPtr dev,
case ET_ButtonRelease:
if (dev && screen && screen != DequeueScreen(dev) && !handler) {
DequeueScreen(dev) = screen;
- x = event->device.root_x;
- y = event->device.root_y;
+ x = event->device_event.root_x;
+ y = event->device_event.root_y;
NewCurrentScreen (dev, DequeueScreen(dev), x, y);
}
break;
diff --git a/xkb/xkbAccessX.c b/xkb/xkbAccessX.c
index fd30a1c..2fc7642 100644
--- a/xkb/xkbAccessX.c
+++ b/xkb/xkbAccessX.c
@@ -690,7 +690,7 @@ XkbSrvInfoPtr xkbi = NULL;
unsigned changed = 0;
ProcessInputProc backupproc;
xkbDeviceInfoPtr xkbPrivPtr = XKBDEVICEINFO(mouse);
-DeviceEvent *event = (DeviceEvent*)ev;
+DeviceEvent *event = &ev->device_event;
dev = (IsMaster(mouse) || mouse->u.master) ? GetMaster(mouse, MASTER_KEYBOARD) : mouse;
diff --git a/xkb/xkbPrKeyEv.c b/xkb/xkbPrKeyEv.c
index 8f6705f..630f17c 100644
--- a/xkb/xkbPrKeyEv.c
+++ b/xkb/xkbPrKeyEv.c
@@ -148,7 +148,7 @@ ProcessKeyboardEvent(InternalEvent *ev, DeviceIntPtr keybd)
XkbSrvInfoPtr xkbi = NULL;
ProcessInputProc backup_proc;
xkbDeviceInfoPtr xkb_priv = XKBDEVICEINFO(keybd);
- DeviceEvent *event = (DeviceEvent*)ev;
+ DeviceEvent *event = &ev->device_event;
int is_press = (event->type == ET_KeyPress);
int is_release = (event->type == ET_KeyRelease);
commit 693d4fdb1c7b7c789a812790122454e718602449
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Tue Sep 22 11:13:58 2009 +1000
Xext: switch mbuf.c to dixLookupResourceByType
Resolves a linker error caused by LookupIDByType.
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
diff --git a/Xext/mbuf.c b/Xext/mbuf.c
index dd223f0..1f24974 100644
--- a/Xext/mbuf.c
+++ b/Xext/mbuf.c
@@ -741,6 +741,7 @@ ProcDisplayImageBuffers (client)
int i, j;
CARD32 minDelay;
TimeStamp activateTime, bufferTime;
+ int rc;
REQUEST_AT_LEAST_SIZE (xMbufDisplayImageBuffersReq);
@@ -762,9 +763,9 @@ ProcDisplayImageBuffers (client)
activateTime.milliseconds = 0;
for (i = 0; i < nbuf; i++)
{
- pMultibuffer[i] = (MultibufferPtr) LookupIDByType (ids[i],
-MultibufferResType);
- if (!pMultibuffer[i])
+ rc = dixLookupResourceByType(&pMultibuffer[i], ids[i],
+ MultibufferResType, client, DixUseAccess);
+ if (rc != Success)
{
xfree(ppMultibuffers);
xfree(pMultibuffer);
@@ -835,8 +836,9 @@ ProcSetMBufferAttributes (client)
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
if (rc != Success)
return rc;
- pMultibuffers = (MultibuffersPtr)LookupIDByType (pWin->drawable.id, MultibuffersResType);
- if (!pMultibuffers)
+ rc = dixLookupResourceByType(&pMultibuffers, pWin->drawable.id,
+ MultibufferResType, client, DixSetAttrAccess);
+ if (rc != Success)
return BadMatch;
len = stuff->length - bytes_to_int32(sizeof (xMbufSetMBufferAttributesReq));
vmask = stuff->valueMask;
@@ -887,8 +889,9 @@ ProcGetMBufferAttributes (client)
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
if (rc != Success)
return rc;
- pMultibuffers = (MultibuffersPtr)LookupIDByType (pWin->drawable.id, MultibuffersResType);
- if (!pMultibuffers)
+ rc = dixLookupResourceByType(&pMultibuffers, pWin->drawable.id,
+ MultibufferResType, client, DixGetAttrAccess);
+ if (rc != Success)
return BadAccess;
ids = xalloc (pMultibuffers->numMultibuffer * sizeof (XID));
if (!ids)
@@ -928,10 +931,13 @@ ProcSetBufferAttributes (client)
XID *vlist;
Mask eventMask;
int result;
+ int rc;
REQUEST_AT_LEAST_SIZE (xMbufSetBufferAttributesReq);
- pMultibuffer = (MultibufferPtr) LookupIDByType (stuff->buffer, MultibufferResType);
- if (!pMultibuffer)
+
+ rc = dixLookupResourceByType(&pMultibuffer, stuff->buffer,
+ MultibufferResType, client, DixSetAttrAccess);
+ if (rc != Success)
return MultibufferErrorBase + MultibufferBadBuffer;
len = stuff->length - bytes_to_int32(sizeof (xMbufSetBufferAttributesReq));
vmask = stuff->valueMask;
@@ -968,10 +974,12 @@ ProcGetBufferAttributes (client)
xMbufGetBufferAttributesReply rep;
OtherClientsPtr other;
int n;
+ int rc;
REQUEST_SIZE_MATCH (xMbufGetBufferAttributesReq);
- pMultibuffer = (MultibufferPtr) LookupIDByType (stuff->buffer, MultibufferResType);
- if (!pMultibuffer)
+ rc = dixLookupResourceByType(&pMultibuffer, stuff->buffer,
+ MultibufferResType, client, DixGetAttrAccess);
+ if (rc != Success)
return MultibufferErrorBase + MultibufferBadBuffer;
rep.type = X_Reply;
rep.sequenceNumber = client->sequence;
@@ -1078,10 +1086,12 @@ ProcClearImageBufferArea (client)
int width, height;
DrawablePtr pDrawable;
ScreenPtr pScreen;
+ int rc;
REQUEST_SIZE_MATCH (xMbufClearImageBufferAreaReq);
- pMultibuffer = (MultibufferPtr) LookupIDByType (stuff->buffer, MultibufferResType);
- if (!pMultibuffer)
+ rc = dixLookupResourceByType(&pMultibuffer, stuff->buffer,
+ MultibufferResType, client, DixWriteAccess);
+ if (rc != Success)
return MultibufferErrorBase + MultibufferBadBuffer;
if ((stuff->exposures != xTrue) && (stuff->exposures != xFalse))
{
commit 493d2f9c2fc56dd3b4c03451c07cd25e3012142e
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Tue Sep 22 11:05:07 2009 +1000
Xext: remove DisplayImageBuffers from mbuf.c
Not referenced by anything.
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
diff --git a/Xext/mbuf.c b/Xext/mbuf.c
index e2306a2..dd223f0 100644
--- a/Xext/mbuf.c
+++ b/Xext/mbuf.c
@@ -1499,42 +1499,6 @@ GetBufferPointer (pWin, i)
return (DrawablePtr) pMultibuffers->buffers[i].pPixmap;
}
-int
-DisplayImageBuffers (ids, nbuf)
- XID *ids;
- int nbuf;
-{
- MultibufferPtr *pMultibuffer;
- MultibuffersPtr *pMultibuffers;
- int i, j;
-
- pMultibuffer = xalloc (nbuf * sizeof *pMultibuffer +
- nbuf * sizeof *pMultibuffers);
- if (!pMultibuffer)
- return BadAlloc;
- pMultibuffers = (MultibuffersPtr *) (pMultibuffer + nbuf);
- for (i = 0; i < nbuf; i++)
- {
- pMultibuffer[i] = (MultibufferPtr) LookupIDByType (ids[i], MultibufferResType);
- if (!pMultibuffer[i])
- {
- xfree (pMultibuffer);
- return MultibufferErrorBase + MultibufferBadBuffer;
- }
- pMultibuffers[i] = pMultibuffer[i]->pMultibuffers;
- for (j = 0; j < i; j++)
- if (pMultibuffers[i] == pMultibuffers[j])
- {
- xfree (pMultibuffer);
- return BadMatch;
- }
- }
- PerformDisplayRequest (pMultibuffers, pMultibuffer, nbuf);
- xfree (pMultibuffer);
- return Success;
-}
-
-
static Bool
QueueDisplayRequest (client, activateTime)
ClientPtr client;
commit fff40b3353c7025c1d1e3dd14b5c78f7c9f5de7c
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Tue Sep 22 10:53:47 2009 +1000
Xext: fix up multibuffer compiler errors.
Triggered by the xextproto 7.1 change, fixed by moving the matching
declarations from the header file to here.
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
diff --git a/Xext/mbuf.c b/Xext/mbuf.c
index 55e732a..e2306a2 100644
--- a/Xext/mbuf.c
+++ b/Xext/mbuf.c
@@ -41,8 +41,9 @@ in this Software without prior written authorization from The Open Group.
#include "resource.h"
#include "opaque.h"
#include "sleepuntil.h"
-#define _MULTIBUF_SERVER_ /* don't want Xlib structures */
-#include <X11/extensions/multibufst.h>
+#include "inputstr.h"
+#include <X11/extensions/multibufconst.h>
+#include <X11/extensions/multibufproto.h>
#include <stdio.h>
#if !defined(WIN32)
@@ -57,6 +58,251 @@ in this Software without prior written authorization from The Open Group.
#define ValidEventMasks (ExposureMask|MultibufferClobberNotifyMask|MultibufferUpdateNotifyMask)
+/* The _Multibuffer and _Multibuffers structures below refer to each other,
+ * so we need this forward declaration
+ */
+typedef struct _Multibuffers *MultibuffersPtr;
+
+/*
+ * per-Multibuffer data
+ */
+typedef struct _Multibuffer {
+ MultibuffersPtr pMultibuffers; /* associated window data */
+ Mask eventMask; /* MultibufferClobberNotifyMask|ExposureMask|MultibufferUpdateNotifyMask */
+ Mask otherEventMask; /* mask of all other clients event masks */
+ OtherClients *otherClients; /* other clients that want events */
+ int number; /* index of this buffer into array */
+ int side; /* always Mono */
+ int clobber; /* Unclobbered, PartiallyClobbered, FullClobbered */
+ PixmapPtr pPixmap; /* associated pixmap */
+} MultibufferRec, *MultibufferPtr;
+
+/*
+ * per-window data
+ */
+
+typedef struct _Multibuffers {
+ WindowPtr pWindow; /* associated window */
+ int numMultibuffer; /* count of buffers */
+ int refcnt; /* ref count for delete */
+ int displayedMultibuffer; /* currently active buffer */
+ int updateAction; /* Undefined, Background, Untouched, Copied */
+ int updateHint; /* Frequent, Intermittent, Static */
+ int windowMode; /* always Mono */
+
+ TimeStamp lastUpdate; /* time of last update */
+
+ unsigned short width, height; /* last known window size */
+ short x, y; /* for static gravity */
+
+ MultibufferPtr buffers; /* array of numMultibuffer buffers */
+} MultibuffersRec;
+
+/*
+ * per-screen data
+ */
+typedef struct _MultibufferScreen {
+ PositionWindowProcPtr PositionWindow; /* pWin, x,y */
+} MultibufferScreenRec, *MultibufferScreenPtr;
+
+/*
+ * per display-image-buffers request data.
+ */
+
+typedef struct _DisplayRequest {
+ struct _DisplayRequest *next;
+ TimeStamp activateTime;
+ ClientPtr pClient;
+ XID id;
+} DisplayRequestRec, *DisplayRequestPtr;
+
+#define DestroyWindowMask (1L<<0)
+#define PositionWindowMask (1L<<1)
+#define PostValidateTreeMask (1L<<2)
+#define ClipNotifyMask (1L<<3)
+#define WindowExposuresMask (1L<<4)
+#define CopyWindowMask (1L<<5)
+#define ClearToBackgroundMask (1L<<6)
+#define ChangeWindowAttributesMask (1L<<7)
+
+extern int MultibufferScreenIndex;
+extern int MultibufferWindowIndex;
+
+extern RESTYPE MultibufferDrawableResType;
+
+extern void MultibufferUpdate( /* pMbuffer, time */
+ MultibufferPtr /* pMultibuffer */,
+ CARD32 /* time */
+ );
+extern void MultibufferExpose( /* pMbuffer, pRegion */
+ MultibufferPtr /* pMultibuffer */,
+ RegionPtr /* pRegion */
+ );
+extern void MultibufferClobber( /* pMbuffer */
+ MultibufferPtr /* pMultibuffer */
+ );
+
+typedef struct _mbufWindow *mbufWindowPtr;
+
+void DestroyImageBuffers (WindowPtr pWin);
+
+/*
+ * per-buffer data
+ */
+
+#define MB_DISPLAYED_BUFFER(pMBWindow) \
+ ((pMBWindow)->buffers + (pMBWindow)->displayedMultibuffer)
+
+typedef struct _mbufBuffer {
+ mbufWindowPtr pMBWindow; /* associated window data */
+ Mask eventMask; /* client event mask */
+ Mask otherEventMask; /* union of other clients' event masks */
+ OtherClientsPtr otherClients; /* other clients that want events */
+ int number; /* index of this buffer into array */
+ int side; /* stero side: always Mono */
+ int clobber; /* clober state */
+ DrawablePtr pDrawable; /* associated drawable */
+} mbufBufferRec, *mbufBufferPtr;
+
+
+/*
+ * per-window data
+ */
+
+#define MB_WINDOW_PRIV(pWin) \
+ ((mbufWindowPtr)((pWin)->devPrivates[MultibufferWindowIndex].ptr))
+
+typedef struct _mbufWindow {
+ WindowPtr pWindow; /* associated window */
+ int numMultibuffer; /* count of buffers */
+ mbufBufferPtr buffers; /* array of (numMultibuffer) buffers */
+ int displayedMultibuffer; /* currently active buffer */
+ int updateAction; /* Undefined, Background,
+ Untouched, Copied */
+ int updateHint; /* Frequent, Intermittent, Static */
+ int windowMode; /* always Mono */
+ TimeStamp lastUpdate; /* time of last update */
+ short x, y; /* for static gravity */
+ unsigned short width, height; /* last known window size */
+ DevUnion devPrivate;
+} mbufWindowRec;
+
+
+/*
+ * per-screen data
+ */
+
+#define MB_SCREEN_PRIV(pScreen) \
+ ((mbufScreenPtr)((pScreen)->devPrivates[MultibufferScreenIndex].ptr))
+
+typedef struct _mbufScreen {
+ long mbufWindowCount; /* count of multibuffered windows */
+
+ /* Wrap pScreen->DestroyWindow */
+ DestroyWindowProcPtr DestroyWindow;
+ long funcsWrapped; /* flags which functions are wrapped */
+
+ /* Initialized by device-dependent section */
+ int nInfo; /* number of buffer info rec's */
+ xMbufBufferInfo *pInfo; /* buffer info (for Normal buffers) */
+
+ int (* CreateImageBuffers)(
+ WindowPtr /* pWin */,
+ int /* nbuf */,
+ XID * /* ids */,
+ int /* action */,
+ int /* hint */
+ );
+ void (* DestroyImageBuffers)(
+ WindowPtr /* pWin */
+ );
+ void (* DisplayImageBuffers)(
+ ScreenPtr /* pScreen */,
+ mbufBufferPtr * /* ppMBBuffer */,
+ mbufWindowPtr * /* ppMBWindow */,
+ int /* nbuf */
+ );
+ void (* ClearImageBufferArea)(
+ mbufBufferPtr /* pMBBuffer */,
+ short /* x */,
+ short /* y */,
+ unsigned short /* width */,
+ unsigned short /* height */,
+ Bool /* exposures */
+ );
+ Bool (* ChangeMBufferAttributes)( /* pMBWindow, vmask */
+ /* FIXME */
+ );
+ Bool (* ChangeBufferAttributes)( /* pMBBuffer, vmask */
+ /* FIXME */
+ );
+ void (* DeleteBufferDrawable)(
+ DrawablePtr /* pDrawable */
+ );
+ void (* WrapScreenFuncs)(
+ ScreenPtr /* pScreen */
+ );
+ void (* ResetProc)(
+ ScreenPtr /* pScreen */
+ );
+ DevUnion devPrivate;
+} mbufScreenRec, *mbufScreenPtr;
+
+
+/* Privates to mbufScreenRec */
+
+#ifdef _MULTIBUF_PIXMAP_
+#define MB_SCREEN_PRIV_PIXMAP(pScreen) \
+ ((mbufPixmapPrivPtr) MB_SCREEN_PRIV((pScreen))->devPrivate.ptr)
+
+typedef struct _mbufPixmapPriv
+{
+ /* Pointers to wrapped functions */
+ PositionWindowProcPtr PositionWindow; /* pWin, x,y */
+ long funcsWrapped; /* flags which functions are wrapped */
+} mbufPixmapPrivRec, *mbufPixmapPrivPtr;
+#endif /* _MULTIBUF_PIXMAP_ */
+
+
+#ifdef _MULTIBUF_BUFFER_
+
+extern int frameWindowPrivateIndex;
+
+#define MB_SCREEN_PRIV_BUFFER(pScreen) \
+ ((mbufBufferPrivPtr) MB_SCREEN_PRIV((pScreen))->devPrivate.ptr)
+
+typedef struct _mbufBufferPriv
+{
+ DevUnion *frameBuffer; /* Array of screen framebuffers */
+ DevUnion selectPlane; /* Plane(s) that select displayed buffer */
+
+ /*
+ * Note: subtractRgn and unionRgn may overlap. subtractRgn is a union
+ * of all the old clipLists of the windows that are displaying
+ * the backbuffer. unionRgn is the union of all the new clipLists
+ * of the same windows.
+ */
+
+ RegionRec backBuffer; /* Area of screen displaying back buffer */
+ RegionRec subtractRgn; /* Regions lost to backBuffer */
+ RegionRec unionRgn; /* Regions gained by backBuffer */
+ Bool rgnChanged; /* TRUE if "backBuffer" needs to be updated */
+
+ void (* CopyBufferBits)(); /* pMBWindow, srcBufferNum, dstBufferNum */
+ void (* DrawSelectPlane)(); /* pScreen, selectPlane, pRegion, bufferNum */
+
+ /* Pointers to wrapped functions */
+ PostValidateTreeProcPtr PostValidateTree; /* pParent, pChild, kind */
+ ClipNotifyProcPtr ClipNotify; /* pWin, dx, dy */
+ WindowExposuresProcPtr WindowExposures; /* pWin, pRegion */
+ CopyWindowProcPtr CopyWindow; /* pWin, oldPt, pOldRegion */
+ ClearToBackgroundProcPtr ClearToBackground; /* pWin, x,y,w,h, sendExpose */
+ ChangeWindowAttributesProcPtr ChangeWindowAttributes; /* pWin, vmask */
+ long funcsWrapped; /* flags which functions are wrapped */
+ unsigned inClearToBackground:1; /* used by WindowExposure */
+} mbufBufferPrivRec, *mbufBufferPrivPtr;
+#endif /* _MULTIBUF_BUFFER_ */
+
static int MultibufferEventBase;
static int MultibufferErrorBase;
static int MultibufferScreenPrivKeyIndex;
commit 4c8f834da6c8c84849313453fe223a8165c6afc0
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Mon Sep 21 14:52:31 2009 +1000
configure: fix up check for tslib.
Reduce the tslib-check to the pkg-config check only instead of the previous
library symbol check followd by a pkg-config check.
This patch also reduces the required version of tslib back down to
tslib-0.0. Unfortunately, the 1.0 tarball available through
http://tslib.berlios.de/ still announces itself as 0.0.2.
Reported-by: Werner Landgraf
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
diff --git a/configure.ac b/configure.ac
index bb45941..93788cb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1858,19 +1858,19 @@ if test "$KDRIVE" = yes; then
KDRIVEFBDEVLIB=yes
AC_DEFINE(KDRIVEFBDEV, 1, [Build fbdev-based kdrive server])
fi
-
- # tslib...
- AC_CHECK_LIB(ts, ts_open, [HAVE_TSLIB="yes"])
- if test "x$TSLIB" = xauto && test "x$HAVE_TSLIB" = xyes; then
- TSLIB=yes
+
+
+ PKG_CHECK_MODULES([TSLIB], [tslib-0.0], [HAVE_TSLIB="yes"], [HAVE_TSLIB="no"])
+ if test "x$HAVE_TSLIB" = xauto; then
+ TSLIB="$HAVE_TSLIB"
fi
if test "x$TSLIB" = xyes; then
if ! test "x$HAVE_TSLIB" = xyes; then
- AC_MSG_ERROR([tslib must be installed to build the tslib input driver.])
+ AC_MSG_ERROR([tslib must be installed to build the tslib driver. See http://tslib.berlios.de/])
+ else
+ AC_DEFINE(TSLIB, 1, [Have tslib support])
fi
- TSLIB_LIBS="-lts"
- AC_DEFINE(TSLIB, 1, [Have tslib support])
fi
AC_CHECK_HEADERS([SDL/SDL.h])
@@ -1902,14 +1902,6 @@ if test "$KDRIVE" = yes; then
AC_CHECK_FUNC([nanosleep], [],
AC_CHECK_LIB([rt], [nanosleep], XEPHYR_LIBS="$XEPHYR_LIBS -lrt"))
- if test "x$TSLIB" = xyes; then
- PKG_CHECK_MODULES([TSLIB], [tslib-1.0], [HAVE_TSLIB="yes"], [HAVE_TSLIB="no"])
- if test "x$HAVE_TSLIB" = xno; then
- AC_MSG_ERROR([tslib must be installed to build the tslib driver. See http://tslib.berlios.de/])
- fi
- AC_DEFINE(TSLIB, 1, [Have tslib support])
- fi
-
# damage shadow extension glx (NOTYET) fb mi
KDRIVE_INC='-I$(top_srcdir)/hw/kdrive/src'
KDRIVE_PURE_INCS="$KDRIVE_INC $MIEXT_DAMAGE_INC $MIEXT_SHADOW_INC $XEXT_INC $FB_INC $MI_INC"
More information about the xorg-commit
mailing list