Merge commit 'origin/server-1.6-branch' into xorg-server-1.6-apple

This commit is contained in:
Jeremy Huddleston 2009-01-10 00:59:32 -08:00
commit 7bfb1821df
13 changed files with 85 additions and 65 deletions

View file

@ -446,6 +446,8 @@ ActivateDevice(DeviceIntPtr dev)
ret = (*dev->deviceProc) (dev, DEVICE_INIT);
dev->inited = (ret == Success);
if (!dev->inited)
return ret;
/* Initialize memory for sprites. */
if (dev->isMaster && dev->spriteInfo->spriteOwner)

View file

@ -61,10 +61,6 @@
#include "exglobals.h"
#include "extnsionst.h"
/* Maximum number of valuators, divided by six, rounded up, to get number
* of events. */
#define MAX_VALUATOR_EVENTS 6
/* Number of motion history events to store. */
#define MOTION_HISTORY_SIZE 256

View file

@ -314,6 +314,11 @@ exaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth,
datasize = h * paddedWidth;
/* Set this before driver hooks, to allow for !offscreen pixmaps.
* !offscreen pixmaps have a valid pointer at all times.
*/
pPixmap->devPrivate.ptr = NULL;
pExaPixmap->driverPriv = pExaScr->info->CreatePixmap(pScreen, datasize, 0);
if (!pExaPixmap->driverPriv) {
fbDestroyPixmap(pPixmap);
@ -326,7 +331,6 @@ exaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth,
pExaPixmap->fb_ptr = NULL;
pExaPixmap->pDamage = NULL;
pExaPixmap->sys_ptr = pPixmap->devPrivate.ptr;
pPixmap->devPrivate.ptr = NULL;
} else {
pExaPixmap->driverPriv = NULL;

View file

@ -57,9 +57,9 @@ void
exaFinishAccessGC(GCPtr pGC)
{
if (pGC->fillStyle == FillTiled)
exaFinishAccess(&pGC->tile.pixmap->drawable, EXA_PREPARE_MASK);
exaFinishAccess(&pGC->tile.pixmap->drawable, EXA_PREPARE_SRC);
if (pGC->stipple)
exaFinishAccess(&pGC->stipple->drawable, EXA_PREPARE_SRC);
exaFinishAccess(&pGC->stipple->drawable, EXA_PREPARE_MASK);
}
#if DEBUG_TRACE_FALL

View file

@ -541,13 +541,17 @@ xf86NewInputDevice(IDevPtr idev, DeviceIntPtr *pdev, BOOL enable)
}
dev = pInfo->dev;
ActivateDevice(dev);
rval = ActivateDevice(dev);
if (rval != Success)
goto unwind;
/* Enable it if it's properly initialised and we're currently in the VT */
if (enable && dev->inited && dev->startup && xf86Screens[0]->vtSema)
{
EnableDevice(dev);
/* send enter/leave event, update sprite window */
CheckMotion(NULL, dev);
/* send enter/leave event, update sprite window */
CheckMotion(NULL, dev);
}
*pdev = dev;
return Success;

View file

@ -210,14 +210,14 @@ xf86RandR13Pan (xf86CrtcPtr crtc, int x, int y)
}
/* Validate against [xy]1 after [xy]2, to be sure that results are > 0 for [xy]1 > 0 */
if (crtc->panningTotalArea.x2 > crtc->panningTotalArea.x1) {
if (newX >= crtc->panningTotalArea.x2 - width)
newX = crtc->panningTotalArea.x2 - width - 1;
if (newX > crtc->panningTotalArea.x2 - width)
newX = crtc->panningTotalArea.x2 - width;
if (newX < crtc->panningTotalArea.x1)
newX = crtc->panningTotalArea.x1;
}
if (crtc->panningTotalArea.y2 > crtc->panningTotalArea.y1) {
if (newY >= crtc->panningTotalArea.y2 - height)
newY = crtc->panningTotalArea.y2 - height - 1;
if (newY > crtc->panningTotalArea.y2 - height)
newY = crtc->panningTotalArea.y2 - height;
if (newY < crtc->panningTotalArea.y1)
newY = crtc->panningTotalArea.y1;
}

View file

@ -376,8 +376,10 @@ xf86CloseConsole()
xf86Msg(X_WARNING, "xf86CloseConsole: KDSETMODE failed: %s\n",
strerror(errno));
ioctl(xf86Info.consoleFd, KDSKBMODE, tty_mode);
tcsetattr(xf86Info.consoleFd, TCSANOW, &tty_attr);
if (xf86Info.allowEmptyInput) {
ioctl(xf86Info.consoleFd, KDSKBMODE, tty_mode);
tcsetattr(xf86Info.consoleFd, TCSANOW, &tty_attr);
}
if (ioctl(xf86Info.consoleFd, VT_GETMODE, &VT) < 0)
xf86Msg(X_WARNING, "xf86CloseConsole: VT_GETMODE failed: %s\n",

View file

@ -41,7 +41,8 @@ typedef enum {
XAAOPT_WRITE_BITMAP,
XAAOPT_WRITE_PIXMAP,
XAAOPT_PIXMAP_CACHE,
XAAOPT_OFFSCREEN_PIXMAPS
XAAOPT_OFFSCREEN_PIXMAPS,
XAAOPT_HAS_DUMB_INVERTED_OPTION_SENSE
} XAAOpts;
static const OptionInfoRec XAAOptions[] = {
@ -87,6 +88,8 @@ static const OptionInfoRec XAAOptions[] = {
OPTV_BOOLEAN, {0}, FALSE },
{XAAOPT_OFFSCREEN_PIXMAPS, "XaaNoOffscreenPixmaps",
OPTV_BOOLEAN, {0}, FALSE },
{XAAOPT_HAS_DUMB_INVERTED_OPTION_SENSE, "XaaOffscreenPixmaps",
OPTV_BOOLEAN, {0}, FALSE },
{ -1, NULL,
OPTV_NONE, {0}, FALSE }
};
@ -525,8 +528,8 @@ XAAInitAccel(ScreenPtr pScreen, XAAInfoRecPtr infoRec)
#define XAAMSG(s) do { if (serverGeneration == 1) xf86ErrorF(s); } while (0)
if((infoRec->Flags & OFFSCREEN_PIXMAPS) && HaveScreenToScreenCopy &&
!xf86ReturnOptValBool(options, XAAOPT_OFFSCREEN_PIXMAPS,
FALSE)) {
xf86IsOptionSet(options, XAAOPT_HAS_DUMB_INVERTED_OPTION_SENSE))
{
XAAMSG("\tOffscreen Pixmaps\n");
} else {
infoRec->Flags &= ~OFFSCREEN_PIXMAPS;

View file

@ -69,7 +69,10 @@ SOFTWARE.
#define PtrAccelLightweight 2
#define PtrAccelDefault PtrAccelPredictable
#define MAX_VALUATORS 36 /* XXX from comment in dix/getevents.c */
#define MAX_VALUATORS 36
/* Maximum number of valuators, divided by six, rounded up, to get number
* of events. */
#define MAX_VALUATOR_EVENTS 6
#define NO_AXIS_LIMITS -1

View file

@ -80,6 +80,7 @@ typedef struct _EventQueue {
} EventQueueRec, *EventQueuePtr;
static EventQueueRec miEventQueue;
static EventListPtr masterEvents; /* for use in mieqProcessInputEvents */
Bool
mieqInit(void)
@ -93,11 +94,22 @@ mieqInit(void)
miEventQueue.handlers[i] = NULL;
for (i = 0; i < QUEUE_SIZE; i++)
{
EventListPtr evlist = InitEventList(7); /* 1 + MAX_VALUATOR_EVENTS */
EventListPtr evlist = InitEventList(1 + MAX_VALUATOR_EVENTS);
if (!evlist)
FatalError("Could not allocate event queue.\n");
miEventQueue.events[i].events = evlist;
}
/* XXX: mE is just 1 event long, if we have Motion + Valuator they are
* squashed into the first event to make passing it into the event
* processing handlers easier. This should be fixed when the processing
* handlers switch to EventListPtr instead of xEvent */
masterEvents = InitEventList(1);
if (!masterEvents)
FatalError("Could not allocated MD event queue.\n");
SetMinimumEventSize(masterEvents, 1,
(1 + MAX_VALUATOR_EVENTS) * sizeof(xEvent));
SetInputCheck(&miEventQueue.head, &miEventQueue.tail);
return TRUE;
}
@ -270,28 +282,21 @@ ChangeDeviceID(DeviceIntPtr dev, xEvent* event)
*/
void
CopyGetMasterEvent(DeviceIntPtr mdev, xEvent* original,
xEvent** master, int count)
EventListPtr master, int count)
{
if (count > 1) {
*master = xcalloc(count, sizeof(xEvent));
if (!*master)
FatalError("[mi] No memory left for master event.\n");
while(count--)
{
memcpy(&(*master)[count], &original[count], sizeof(xEvent));
ChangeDeviceID(mdev, &(*master)[count]);
}
} else
{
int len = sizeof(xEvent);
if (original->u.u.type == GenericEvent)
len += GEV(original)->length * 4;
*master = xalloc(len);
if (!*master)
FatalError("[mi] No memory left for master event.\n");
memcpy(*master, original, len);
ChangeDeviceID(mdev, *master);
}
int len = count * sizeof(xEvent);
/* Assumption: GenericEvents always have count 1 */
if (GEV(original)->type == GenericEvent)
len += GEV(original)->length * 4;
if (master->evlen < len)
SetMinimumEventSize(master, 1, len);
memcpy(master->event, original, len);
while (count--)
ChangeDeviceID(mdev, &master->event[count]);
}
/* Call this from ProcessInputEvents(). */
@ -303,8 +308,8 @@ mieqProcessInputEvents(void)
int x = 0, y = 0;
int type, nevents, evlen, i;
ScreenPtr screen;
xEvent *event,
*master_event = NULL;
static xEvent *event = NULL;
static size_t event_size = 0;
DeviceIntPtr dev = NULL,
master = NULL;
@ -314,7 +319,10 @@ mieqProcessInputEvents(void)
/* GenericEvents always have nevents == 1 */
nevents = e->nevents;
evlen = (nevents > 1) ? sizeof(xEvent) : e->events->evlen;
event = xcalloc(nevents, evlen);
if((nevents * evlen) > event_size) {
event_size = nevents * evlen;
event = (xEvent *)xrealloc(event, event_size);
}
if (!event)
FatalError("[mi] No memory left for event processing.\n");
@ -353,10 +361,7 @@ mieqProcessInputEvents(void)
}
else {
if (master)
CopyGetMasterEvent(master, event,
&master_event, nevents);
else
master_event = NULL;
CopyGetMasterEvent(master, event, masterEvents, nevents);
/* If someone's registered a custom event handler, let them
* steal it. */
@ -365,19 +370,16 @@ mieqProcessInputEvents(void)
handler(DequeueScreen(dev)->myNum, event, dev, nevents);
if (master)
handler(DequeueScreen(master)->myNum,
master_event, master, nevents);
masterEvents->event, master, nevents);
} else
{
/* process slave first, then master */
dev->public.processInputProc(event, dev, nevents);
if (master)
master->public.processInputProc(master_event, master,
master->public.processInputProc(masterEvents->event, master,
nevents);
}
xfree(event);
xfree(master_event);
}
/* Update the sprite now. Next event may be from different device. */

View file

@ -602,8 +602,8 @@ AuthAudit (ClientPtr client, Bool letin,
#ifdef XSERVER_DTRACE
XSERVER_CLIENT_AUTH(client->index, addr, client_pid, client_zid);
if (auditTrailLevel > 1) {
#endif
if (auditTrailLevel > 1) {
if (proto_n)
AuditF("client %d %s from %s%s\n Auth name: %.*s ID: %d\n",
client->index, letin ? "connected" : "rejected", addr,
@ -613,9 +613,7 @@ AuthAudit (ClientPtr client, Bool letin,
client->index, letin ? "connected" : "rejected", addr,
client_uid_string);
#ifdef XSERVER_DTRACE
}
#endif
}
XID

View file

@ -572,9 +572,10 @@ Error(char *str)
return;
sprintf(err, "%s: ", str);
strcat(err, strerror(saveErrno));
LogWrite(-1, err);
LogWrite(-1, "%s", err);
free(err);
} else
LogWrite(-1, strerror(saveErrno));
LogWrite(-1, "%s", strerror(saveErrno));
}
void

View file

@ -42,13 +42,14 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
extern int DeviceValuator;
static EventListPtr masterEvents = NULL;
void
XkbDDXFakeDeviceButton(DeviceIntPtr dev,Bool press,int button)
{
int * devVal;
INT32 * evVal;
xEvent events[2],
*m_events = NULL; /* master dev */
xEvent events[2];
deviceKeyButtonPointer *btn;
deviceValuator * val;
int x,y;
@ -107,18 +108,22 @@ DeviceIntPtr master = NULL;
* cases, unless dev is both a keyboard and a mouse.
*/
if (!dev->isMaster && dev->u.master) {
if (!masterEvents)
{
masterEvents = InitEventList(1);
SetMinimumEventSize(masterEvents, 1, (1 + MAX_VALUATOR_EVENTS) * sizeof(xEvent));
}
master = dev->u.master;
if (!IsPointerDevice(master))
master = GetPairedDevice(dev->u.master);
CopyGetMasterEvent(master, &events, &m_events, count);
CopyGetMasterEvent(master, &events, masterEvents, count);
}
(*dev->public.processInputProc)((xEventPtr)btn, dev, count);
if (master) {
(*master->public.processInputProc)(m_events, master, count);
xfree(m_events);
(*master->public.processInputProc)(masterEvents->event, master, count);
}
return;
}