mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-04-19 02:00:47 +02:00
Merge commit 'origin/server-1.6-branch' into xorg-server-1.6-apple
This commit is contained in:
commit
7bfb1821df
13 changed files with 85 additions and 65 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
70
mi/mieq.c
70
mi/mieq.c
|
|
@ -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. */
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
5
os/log.c
5
os/log.c
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue