Merge branch 'master' into xi2

Conflicts:
	Xi/chdevhier.c
	include/input.h
This commit is contained in:
Peter Hutterer 2009-04-24 16:15:47 +10:00
commit 057fc9a4f8
85 changed files with 70020 additions and 46 deletions

View File

@ -54,6 +54,7 @@
extern int DeviceValuator; extern int DeviceValuator;
extern int DeviceMotionNotify; extern int DeviceMotionNotify;
extern DevPrivateKey XTstDevicePrivateKey;
#ifdef PANORAMIX #ifdef PANORAMIX
#include "panoramiX.h" #include "panoramiX.h"
@ -160,6 +161,7 @@ ProcXTestFakeInput(ClientPtr client)
int i; int i;
int base = 0; int base = 0;
int flags = 0; int flags = 0;
DeviceIntPtr xtstdevice;
nev = (stuff->length << 2) - sizeof(xReq); nev = (stuff->length << 2) - sizeof(xReq);
if ((nev % sizeof(xEvent)) || !nev) if ((nev % sizeof(xEvent)) || !nev)
@ -268,6 +270,8 @@ ProcXTestFakeInput(ClientPtr client)
} else } else
{ {
DeviceIntPtr it;
if (nev != 1) if (nev != 1)
return BadLength; return BadLength;
switch (type) switch (type)
@ -294,8 +298,14 @@ ProcXTestFakeInput(ClientPtr client)
return BadValue; return BadValue;
} }
if (dev->u.lastSlave) /* When faking core events through XTest, we always fake through the
dev = dev->u.lastSlave; * virtual test device.
*/
for(it = inputInfo.devices; it ; it = it->next )
if( !it->isMaster && it->u.master == dev &&
dixLookupPrivate(&it->devPrivates, XTstDevicePrivateKey ))
break;
dev= it;
} }
/* If the event has a time set, wait for it to pass */ /* If the event has a time set, wait for it to pass */
@ -403,6 +413,7 @@ ProcXTestFakeInput(ClientPtr client)
for (i = 0; i < nevents; i++) for (i = 0; i < nevents; i++)
mieqProcessDeviceEvent(dev, (events+i)->event, NULL); mieqProcessDeviceEvent(dev, (events+i)->event, NULL);
miPointerUpdateSprite(dev);
return client->noClientException; return client->noClientException;
} }

View File

@ -54,6 +54,8 @@
#include "chdevhier.h" #include "chdevhier.h"
extern DevPrivateKey XTstDevicePrivateKey;
/** /**
* Send the current state of the device hierarchy to all clients. * Send the current state of the device hierarchy to all clients.
*/ */
@ -119,7 +121,7 @@ int SProcXIChangeDeviceHierarchy(ClientPtr client)
int int
ProcXIChangeDeviceHierarchy(ClientPtr client) ProcXIChangeDeviceHierarchy(ClientPtr client)
{ {
DeviceIntPtr ptr, keybd; DeviceIntPtr ptr, keybd, xtstptr, xtstkeybd;
xXIAnyHierarchyChangeInfo *any; xXIAnyHierarchyChangeInfo *any;
int required_len = sizeof(xXIChangeDeviceHierarchyReq); int required_len = sizeof(xXIChangeDeviceHierarchyReq);
char n; char n;
@ -154,7 +156,7 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
strncpy(name, (char*)&c[1], c->name_len); strncpy(name, (char*)&c[1], c->name_len);
rc = AllocMasterDevice(client, name, &ptr, &keybd); rc = AllocDevicePair(client, name, &ptr, &keybd, TRUE);
if (rc != Success) if (rc != Success)
{ {
xfree(name); xfree(name);
@ -164,14 +166,33 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
if (!c->send_core) if (!c->send_core)
ptr->coreEvents = keybd->coreEvents = FALSE; ptr->coreEvents = keybd->coreEvents = FALSE;
/* Allocate virtual slave devices for xtest events */
rc = AllocXtstDevice(client, name, &xtstptr, &xtstkeybd);
if (rc != Success)
{
xfree(name);
goto unwind;
}
ActivateDevice(ptr); ActivateDevice(ptr);
ActivateDevice(keybd); ActivateDevice(keybd);
ActivateDevice(xtstptr);
ActivateDevice(xtstkeybd);
if (c->enable) if (c->enable)
{ {
EnableDevice(ptr); EnableDevice(ptr);
EnableDevice(keybd); EnableDevice(keybd);
EnableDevice(xtstptr);
EnableDevice(xtstkeybd);
} }
/* Attach the XTest virtual devices to the newly
created master device */
AttachDevice(NULL, xtstptr, ptr);
AttachDevice(NULL, xtstkeybd, keybd);
xfree(name); xfree(name);
flags |= HF_MasterAdded; flags |= HF_MasterAdded;
} }
@ -179,6 +200,7 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
case CH_RemoveMasterDevice: case CH_RemoveMasterDevice:
{ {
xXIRemoveMasterInfo* r = (xXIRemoveMasterInfo*)any; xXIRemoveMasterInfo* r = (xXIRemoveMasterInfo*)any;
DeviceIntPtr xtstdevice;
if (r->return_mode != AttachToMaster && if (r->return_mode != AttachToMaster &&
r->return_mode != Floating) r->return_mode != Floating)
@ -204,7 +226,17 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
goto unwind; goto unwind;
} }
/* disable keyboards first */ for(xtstdevice = inputInfo.devices; xtstdevice ; xtstdevice = xtstdevice->next )
if( !xtstdevice->isMaster && xtstdevice->u.master == ptr &&
dixLookupPrivate(&xtstdevice->devPrivates, XTstDevicePrivateKey ))
break;
rc = dixLookupDevice(&xtstptr, xtstdevice->id, client,
DixDestroyAccess);
if (rc != Success)
goto unwind;
/* find keyboards to destroy */
if (IsPointerDevice(ptr)) if (IsPointerDevice(ptr))
{ {
rc = dixLookupDevice(&keybd, rc = dixLookupDevice(&keybd,
@ -213,6 +245,7 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
DixDestroyAccess); DixDestroyAccess);
if (rc != Success) if (rc != Success)
goto unwind; goto unwind;
} }
else else
{ {
@ -223,8 +256,47 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
DixDestroyAccess); DixDestroyAccess);
if (rc != Success) if (rc != Success)
goto unwind; goto unwind;
} }
/* handle xtst pointer / keyboard slave devices */
if ( IsPointerDevice(xtstptr))
{
/* Search the matching keyboard */
for(xtstdevice = inputInfo.devices; xtstdevice ; xtstdevice = xtstdevice->next )
if( !xtstdevice->isMaster &&
xtstdevice->u.master == keybd &&
IsKeyboardDevice(xtstdevice) &&
dixLookupPrivate(&xtstdevice->devPrivates, XTstDevicePrivateKey ))
break;
rc = dixLookupDevice(&xtstkeybd,
xtstdevice->id,
client,
DixDestroyAccess);
if (rc != Success)
goto unwind;
}
else
{
xtstkeybd = xtstptr;
/* Search the matching pointer */
for(xtstdevice = inputInfo.devices; xtstdevice ; xtstdevice = xtstdevice->next )
if( !xtstdevice->isMaster &&
xtstdevice->u.master == ptr &&
IsPointerDevice(xtstdevice) &&
dixLookupPrivate(&xtstdevice->devPrivates, XTstDevicePrivateKey )
)
break;
rc = dixLookupDevice(&xtstptr,
xtstdevice->id,
client,
DixDestroyAccess);
if (rc != Success)
goto unwind;
}
/* Disabling sends the devices floating, reattach them if /* Disabling sends the devices floating, reattach them if
* desired. */ * desired. */
@ -274,9 +346,18 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
/* can't disable until we removed pairing */ /* can't disable until we removed pairing */
keybd->spriteInfo->paired = NULL; keybd->spriteInfo->paired = NULL;
ptr->spriteInfo->paired = NULL; ptr->spriteInfo->paired = NULL;
xtstptr->spriteInfo->paired = NULL;
xtstkeybd->spriteInfo->paired = NULL;
/* disable the remove the devices, xtst devices must be done first
else the sprites they rely on will be destroyed */
DisableDevice(xtstptr);
DisableDevice(xtstkeybd);
DisableDevice(keybd); DisableDevice(keybd);
DisableDevice(ptr); DisableDevice(ptr);
RemoveDevice(xtstptr);
RemoveDevice(xtstkeybd);
RemoveDevice(keybd); RemoveDevice(keybd);
RemoveDevice(ptr); RemoveDevice(ptr);
flags |= HF_MasterRemoved; flags |= HF_MasterRemoved;
@ -285,6 +366,7 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
case CH_DetachSlave: case CH_DetachSlave:
{ {
xXIDetachSlaveInfo* c = (xXIDetachSlaveInfo*)any; xXIDetachSlaveInfo* c = (xXIDetachSlaveInfo*)any;
DeviceIntPtr *xtstdevice;
rc = dixLookupDevice(&ptr, c->deviceid, client, rc = dixLookupDevice(&ptr, c->deviceid, client,
DixWriteAccess); DixWriteAccess);
@ -298,6 +380,17 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
goto unwind; goto unwind;
} }
xtstdevice = dixLookupPrivate( &ptr->devPrivates,
XTstDevicePrivateKey );
/* Don't allow changes to Xtst Devices, these are fixed */
if( xtstdevice )
{
client->errorValue = c->deviceid;
rc = BadDevice;
goto unwind;
}
AttachDevice(client, ptr, NULL); AttachDevice(client, ptr, NULL);
flags |= HF_SlaveDetached; flags |= HF_SlaveDetached;
} }
@ -306,6 +399,7 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
{ {
xXIAttachSlaveInfo* c = (xXIAttachSlaveInfo*)any; xXIAttachSlaveInfo* c = (xXIAttachSlaveInfo*)any;
DeviceIntPtr newmaster; DeviceIntPtr newmaster;
DeviceIntPtr *xtstdevice;
rc = dixLookupDevice(&ptr, c->deviceid, client, rc = dixLookupDevice(&ptr, c->deviceid, client,
DixWriteAccess); DixWriteAccess);
@ -319,6 +413,17 @@ ProcXIChangeDeviceHierarchy(ClientPtr client)
goto unwind; goto unwind;
} }
xtstdevice = dixLookupPrivate( &ptr->devPrivates,
XTstDevicePrivateKey );
/* Don't allow changes to Xtst Devices, these are fixed */
if( xtstdevice )
{
client->errorValue = c->deviceid;
rc = BadDevice;
goto unwind;
}
rc = dixLookupDevice(&newmaster, c->new_master, rc = dixLookupDevice(&newmaster, c->new_master,
client, DixWriteAccess); client, DixWriteAccess);
if (rc != Success) if (rc != Success)

View File

@ -90,9 +90,24 @@ SOFTWARE.
static int CoreDevicePrivateKeyIndex; static int CoreDevicePrivateKeyIndex;
DevPrivateKey CoreDevicePrivateKey = &CoreDevicePrivateKeyIndex; DevPrivateKey CoreDevicePrivateKey = &CoreDevicePrivateKeyIndex;
/* Used to sture classes currently not in use by an MD */ /* Used to store classes currently not in use by an MD */
static int UnusedClassesPrivateKeyIndex; static int UnusedClassesPrivateKeyIndex;
DevPrivateKey UnusedClassesPrivateKey = &UnusedClassesPrivateKeyIndex; DevPrivateKey UnusedClassesPrivateKey = &UnusedClassesPrivateKeyIndex;
/* Used to store if a device is an XTest Virtual device */
static int XTstDevicePrivateKeyIndex;
DevPrivateKey XTstDevicePrivateKey = &XTstDevicePrivateKeyIndex;
/**
* vxtstpointer
* is the virtual pointer for XTest. It is the first slave
* device of the VCP.
* vxtstkeyboard
* is the virtual keyboard for XTest. It is the first slave
* device of the VCK
*
* Neither of these devices can be deleted.
*/
DeviceIntPtr vxtstpointer, vxtstkeyboard;
/** /**
@ -549,9 +564,9 @@ CorePointerProc(DeviceIntPtr pDev, int what)
void void
InitCoreDevices(void) InitCoreDevices(void)
{ {
if (AllocMasterDevice(serverClient, "Virtual core", if (AllocDevicePair(serverClient, "Virtual core",
&inputInfo.pointer, &inputInfo.pointer, &inputInfo.keyboard,
&inputInfo.keyboard) != Success) TRUE) != Success)
FatalError("Failed to allocate core devices"); FatalError("Failed to allocate core devices");
if (ActivateDevice(inputInfo.pointer) != Success || if (ActivateDevice(inputInfo.pointer) != Success ||
@ -560,6 +575,25 @@ InitCoreDevices(void)
if (!EnableDevice(inputInfo.pointer) || if (!EnableDevice(inputInfo.pointer) ||
!EnableDevice(inputInfo.keyboard)) !EnableDevice(inputInfo.keyboard))
FatalError("Failed to enable core devices."); FatalError("Failed to enable core devices.");
/*
Allocate an virtual slave device for xtest events, this
is a slave device to inputInfo master devices
*/
if(AllocXtstDevice(serverClient, "Virtual core",
&vxtstpointer,
&vxtstkeyboard) != Success)
FatalError("Failed to allocate XTst devices");
if (ActivateDevice(vxtstpointer) != Success ||
ActivateDevice(vxtstkeyboard) != Success)
FatalError("Failed to activate xtst core devices.");
if (!EnableDevice(vxtstpointer) ||
!EnableDevice(vxtstkeyboard))
FatalError("Failed to enable xtst core devices.");
AttachDevice(NULL, vxtstpointer, inputInfo.pointer);
AttachDevice(NULL, vxtstkeyboard, inputInfo.keyboard);
} }
/** /**
@ -2273,12 +2307,16 @@ GetPairedDevice(DeviceIntPtr dev)
/** /**
* Create a new master device (== one pointer, one keyboard device). * Create a new device pair (== one pointer, one keyboard device).
* Only allocates the devices, you will need to call ActivateDevice() and * Only allocates the devices, you will need to call ActivateDevice() and
* EnableDevice() manually. * EnableDevice() manually.
* Either a master or a slave device can be created depending on
* the value for master.
*/ */
int int
AllocMasterDevice(ClientPtr client, char* name, DeviceIntPtr* ptr, DeviceIntPtr* keybd) AllocDevicePair (ClientPtr client, char* name,
DeviceIntPtr* ptr, DeviceIntPtr* keybd,
Bool master)
{ {
DeviceIntPtr pointer; DeviceIntPtr pointer;
DeviceIntPtr keyboard; DeviceIntPtr keyboard;
@ -2302,7 +2340,7 @@ AllocMasterDevice(ClientPtr client, char* name, DeviceIntPtr* ptr, DeviceIntPtr*
pointer->spriteInfo->spriteOwner = TRUE; pointer->spriteInfo->spriteOwner = TRUE;
pointer->u.lastSlave = NULL; pointer->u.lastSlave = NULL;
pointer->isMaster = TRUE; pointer->isMaster = master;
keyboard = AddInputDevice(client, CoreKeyboardProc, TRUE); keyboard = AddInputDevice(client, CoreKeyboardProc, TRUE);
if (!keyboard) if (!keyboard)
@ -2324,7 +2362,7 @@ AllocMasterDevice(ClientPtr client, char* name, DeviceIntPtr* ptr, DeviceIntPtr*
keyboard->spriteInfo->spriteOwner = FALSE; keyboard->spriteInfo->spriteOwner = FALSE;
keyboard->u.lastSlave = NULL; keyboard->u.lastSlave = NULL;
keyboard->isMaster = TRUE; keyboard->isMaster = master;
/* The ClassesRec stores the device classes currently not used. */ /* The ClassesRec stores the device classes currently not used. */
@ -2338,3 +2376,31 @@ AllocMasterDevice(ClientPtr client, char* name, DeviceIntPtr* ptr, DeviceIntPtr*
return Success; return Success;
} }
/**
* Allocate a device pair that is initialised as a slave
* device with properties that identify the devices as belonging
* to XTest subsystem.
* This only creates the pair, Activate/Enable Device
* still need to be called.
*/
int AllocXtstDevice (ClientPtr client, char* name,
DeviceIntPtr* ptr, DeviceIntPtr* keybd)
{
int retval;
int len = strlen(name);
char *xtstname = xcalloc(len + 6, 1 );
strncpy( xtstname, name, len);
strncat( xtstname, " Xtst", 5 );
retval = AllocDevicePair( client, xtstname, ptr, keybd, FALSE);
if ( retval == Success ){
dixSetPrivate(&((*ptr)->devPrivates), XTstDevicePrivateKey, (void *)True );
dixSetPrivate(&((*keybd)->devPrivates), XTstDevicePrivateKey,(void *)True);
}
xfree( xtstname );
return retval;
}

View File

@ -296,6 +296,13 @@ R021 RANDR:SetCrtcConfig
R022 RANDR:GetCrtcGammaSize R022 RANDR:GetCrtcGammaSize
R023 RANDR:GetCrtcGamma R023 RANDR:GetCrtcGamma
R024 RANDR:SetCrtcGamma R024 RANDR:SetCrtcGamma
R025 RANDR:GetScreenResourcesCurrent
R026 RANDR:SetCrtcTransform
R027 RANDR:GetCrtcTransform
R028 RANDR:GetPanning
R029 RANDR:SetPanning
R030 RANDR:SetOutputPrimary
R031 RANDR:GetOutputPrimary
V000 RANDR:ScreenChangeNotify V000 RANDR:ScreenChangeNotify
V001 RANDR:Notify V001 RANDR:Notify
E000 RANDR:BadRROutput E000 RANDR:BadRROutput
@ -937,6 +944,10 @@ R032 XInputExtension:DeviceBell
R033 XInputExtension:SetDeviceValuators R033 XInputExtension:SetDeviceValuators
R034 XInputExtension:GetDeviceControl R034 XInputExtension:GetDeviceControl
R035 XInputExtension:ChangeDeviceControl R035 XInputExtension:ChangeDeviceControl
R036 XInputExtension:ListDeviceProperties
R037 XInputExtension:ChangeDeviceProperty
R038 XInputExtension:DeleteDeviceProperty
R039 XInputExtension:GetDeviceProperty
V000 XInputExtension:DeviceValuator V000 XInputExtension:DeviceValuator
V001 XInputExtension:DeviceKeyPress V001 XInputExtension:DeviceKeyPress
V002 XInputExtension:DeviceKeyRelease V002 XInputExtension:DeviceKeyRelease
@ -953,6 +964,7 @@ V012 XInputExtension:ChangeDeviceNotify
V013 XInputExtension:DeviceKeystateNotify V013 XInputExtension:DeviceKeystateNotify
V014 XInputExtension:DeviceButtonstateNotify V014 XInputExtension:DeviceButtonstateNotify
V015 XInputExtension:DevicePresenceNotify V015 XInputExtension:DevicePresenceNotify
V016 XInputExtension:DevicePropertyNotify
E000 XInputExtension:BadDevice E000 XInputExtension:BadDevice
E001 XInputExtension:BadEvent E001 XInputExtension:BadEvent
E002 XInputExtension:BadMode E002 XInputExtension:BadMode

View File

@ -289,7 +289,7 @@ exaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth,
return NullPixmap; return NullPixmap;
swap(pExaScr, pScreen, CreatePixmap); swap(pExaScr, pScreen, CreatePixmap);
if (!pExaScr->info->CreatePixmap) { if (!pExaScr->info->CreatePixmap && !pExaScr->info->CreatePixmap2) {
pPixmap = pScreen->CreatePixmap (pScreen, w, h, depth, usage_hint); pPixmap = pScreen->CreatePixmap (pScreen, w, h, depth, usage_hint);
} else { } else {
driver_alloc = 1; driver_alloc = 1;
@ -324,7 +324,10 @@ exaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth,
*/ */
pPixmap->devPrivate.ptr = NULL; pPixmap->devPrivate.ptr = NULL;
pExaPixmap->driverPriv = pExaScr->info->CreatePixmap(pScreen, datasize, 0); if (pExaScr->info->CreatePixmap2)
pExaPixmap->driverPriv = pExaScr->info->CreatePixmap2(pScreen, w, h, depth, usage_hint, bpp);
else
pExaPixmap->driverPriv = pExaScr->info->CreatePixmap(pScreen, datasize, 0);
if (!pExaPixmap->driverPriv) { if (!pExaPixmap->driverPriv) {
swap(pExaScr, pScreen, DestroyPixmap); swap(pExaScr, pScreen, DestroyPixmap);
pScreen->DestroyPixmap (pPixmap); pScreen->DestroyPixmap (pPixmap);
@ -1261,7 +1264,7 @@ exaDriverInit (ScreenPtr pScreen,
wrap(pExaScr, pScreen, DestroyPixmap, exaDestroyPixmap); wrap(pExaScr, pScreen, DestroyPixmap, exaDestroyPixmap);
wrap(pExaScr, pScreen, ModifyPixmapHeader, exaModifyPixmapHeader); wrap(pExaScr, pScreen, ModifyPixmapHeader, exaModifyPixmapHeader);
if (!pExaScr->info->CreatePixmap) { if (!(pExaScr->info->flags & EXA_HANDLES_PIXMAPS)) {
LogMessage(X_INFO, "EXA(%d): Offscreen pixmap area of %lu bytes\n", LogMessage(X_INFO, "EXA(%d): Offscreen pixmap area of %lu bytes\n",
pScreen->myNum, pScreen->myNum,
pExaScr->info->memorySize - pExaScr->info->offScreenBase); pExaScr->info->memorySize - pExaScr->info->offScreenBase);
@ -1274,7 +1277,7 @@ exaDriverInit (ScreenPtr pScreen,
else else
LogMessage(X_INFO, "EXA(%d): No offscreen pixmaps\n", pScreen->myNum); LogMessage(X_INFO, "EXA(%d): No offscreen pixmaps\n", pScreen->myNum);
if (!pExaScr->info->CreatePixmap) { if (!(pExaScr->info->flags & EXA_HANDLES_PIXMAPS)) {
DBG_PIXMAP(("============== %ld < %ld\n", pExaScr->info->offScreenBase, DBG_PIXMAP(("============== %ld < %ld\n", pExaScr->info->offScreenBase,
pExaScr->info->memorySize)); pExaScr->info->memorySize));
if (pExaScr->info->offScreenBase < pExaScr->info->memorySize) { if (pExaScr->info->offScreenBase < pExaScr->info->memorySize) {

View File

@ -39,7 +39,7 @@
#include "fb.h" #include "fb.h"
#define EXA_VERSION_MAJOR 2 #define EXA_VERSION_MAJOR 2
#define EXA_VERSION_MINOR 4 #define EXA_VERSION_MINOR 5
#define EXA_VERSION_RELEASE 0 #define EXA_VERSION_RELEASE 0
typedef struct _ExaOffscreenArea ExaOffscreenArea; typedef struct _ExaOffscreenArea ExaOffscreenArea;
@ -704,6 +704,8 @@ typedef struct _ExaDriver {
int depth, int bitsPerPixel, int devKind, int depth, int bitsPerPixel, int devKind,
pointer pPixData); pointer pPixData);
void *(*CreatePixmap2)(ScreenPtr pScreen, int width, int height,
int depth, int usage_hint, int bitsPerPixel);
/** @} */ /** @} */
} ExaDriverRec, *ExaDriverPtr; } ExaDriverRec, *ExaDriverPtr;

View File

@ -371,6 +371,9 @@ exaEnableDisableFBAccess (int index, Bool enable)
ScreenPtr pScreen = screenInfo.screens[index]; ScreenPtr pScreen = screenInfo.screens[index];
ExaScreenPriv (pScreen); ExaScreenPriv (pScreen);
if (pExaScr->info->flags & EXA_HANDLES_PIXMAPS)
return;
if (!enable && pExaScr->disableFbCount++ == 0) { if (!enable && pExaScr->disableFbCount++ == 0) {
if (pExaScr->info->exa_minor < 1) if (pExaScr->info->exa_minor < 1)
ExaOffscreenSwapOut (pScreen); ExaOffscreenSwapOut (pScreen);

View File

@ -1086,7 +1086,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
if (!DRIGetDeviceInfo(pScreen, &hFB, &junk, if (!DRIGetDeviceInfo(pScreen, &hFB, &junk,
&framebuffer.size, &framebuffer.stride, &framebuffer.size, &framebuffer.stride,
&framebuffer.dev_priv_size, &framebuffer.dev_priv)) { &framebuffer.dev_priv_size, &framebuffer.dev_priv)) {
LogMessage(X_ERROR, "AIGLX error: XF86DRIGetDeviceInfo failed"); LogMessage(X_ERROR, "AIGLX error: XF86DRIGetDeviceInfo failed\n");
goto handle_error; goto handle_error;
} }
@ -1097,7 +1097,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
status = drmMap(fd, hFB, framebuffer.size, status = drmMap(fd, hFB, framebuffer.size,
(drmAddressPtr)&framebuffer.base); (drmAddressPtr)&framebuffer.base);
if (status != 0) { if (status != 0) {
LogMessage(X_ERROR, "AIGLX error: drmMap of framebuffer failed (%s)", LogMessage(X_ERROR, "AIGLX error: drmMap of framebuffer failed (%s)\n",
strerror(-status)); strerror(-status));
goto handle_error; goto handle_error;
} }
@ -1107,7 +1107,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
*/ */
status = drmMap(fd, hSAREA, SAREA_MAX, &pSAREA); status = drmMap(fd, hSAREA, SAREA_MAX, &pSAREA);
if (status != 0) { if (status != 0) {
LogMessage(X_ERROR, "AIGLX error: drmMap of SAREA failed (%s)", LogMessage(X_ERROR, "AIGLX error: drmMap of SAREA failed (%s)\n",
strerror(-status)); strerror(-status));
goto handle_error; goto handle_error;
} }
@ -1125,7 +1125,8 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
screen); screen);
if (screen->driScreen == NULL) { if (screen->driScreen == NULL) {
LogMessage(X_ERROR, "AIGLX error: Calling driver entry point failed"); LogMessage(X_ERROR,
"AIGLX error: Calling driver entry point failed\n");
goto handle_error; goto handle_error;
} }

View File

@ -443,9 +443,17 @@ dri2GetBuffers(__DRIdrawable *driDrawable,
return private->buffers; return private->buffers;
} }
static void
dri2FlushFrontBuffer(__DRIdrawable *driDrawable, void *loaderPrivate)
{
(void) driDrawable;
__glXDRIdrawableWaitGL((__GLXdrawable *) loaderPrivate);
}
static const __DRIdri2LoaderExtension loaderExtension = { static const __DRIdri2LoaderExtension loaderExtension = {
{ __DRI_DRI2_LOADER, __DRI_DRI2_LOADER_VERSION }, { __DRI_DRI2_LOADER, __DRI_DRI2_LOADER_VERSION },
dri2GetBuffers, dri2GetBuffers,
dri2FlushFrontBuffer,
}; };
static const __DRIextension *loader_extensions[] = { static const __DRIextension *loader_extensions[] = {

View File

@ -499,7 +499,8 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
screen); screen);
if (screen->driScreen == NULL) { if (screen->driScreen == NULL) {
LogMessage(X_ERROR, "AIGLX error: Calling driver entry point failed"); LogMessage(X_ERROR,
"AIGLX error: Calling driver entry point failed\n");
goto handle_error; goto handle_error;
} }

View File

@ -79,8 +79,8 @@ ProcDRI2QueryVersion(ClientPtr client)
rep.type = X_Reply; rep.type = X_Reply;
rep.length = 0; rep.length = 0;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
rep.majorVersion = DRI2_MAJOR; rep.majorVersion = 1;
rep.minorVersion = DRI2_MINOR; rep.minorVersion = 0;
if (client->swapped) { if (client->swapped) {
swaps(&rep.sequenceNumber, n); swaps(&rep.sequenceNumber, n);

View File

@ -170,6 +170,11 @@ static Bool quirk_detailed_use_maximum_size (int scrnIndex, xf86MonPtr DDC)
(DDC->vendor.prod_id == 0 || DDC->vendor.prod_id == 0x2a00)) (DDC->vendor.prod_id == 0 || DDC->vendor.prod_id == 0x2a00))
return TRUE; return TRUE;
/* Bug #21324: Iiyama Vision Master 450 */
if (memcmp (DDC->vendor.name, "IVM", 4) == 0 &&
DDC->vendor.prod_id == 6400)
return TRUE;
return FALSE; return FALSE;
} }

View File

@ -191,8 +191,10 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
size_t i; size_t i;
DEBUG_LOG("state=%d, _x_active=%d, \n", state, _x_active) DEBUG_LOG("state=%d, _x_active=%d, \n", state, _x_active)
if (state) { if (state) {
if(bgMouseLocationUpdated) if(bgMouseLocationUpdated) {
DarwinSendPointerEvents(darwinPointer, MotionNotify, 0, bgMouseLocation.x, bgMouseLocation.y, 0.0, 0.0, 0.0); DarwinSendPointerEvents(darwinPointer, MotionNotify, 0, bgMouseLocation.x, bgMouseLocation.y, 0.0, 0.0, 0.0);
bgMouseLocationUpdated = FALSE;
}
DarwinSendDDXEvent(kXquartzActivate, 0); DarwinSendDDXEvent(kXquartzActivate, 0);
if (!_x_active) { if (!_x_active) {
@ -1064,32 +1066,34 @@ static inline int ensure_flag(int flags, int device_independent, int device_depe
} }
if(!quartzServerVisible && noTestExtensions) { if(!quartzServerVisible && noTestExtensions) {
if(ev_button == 0) {
#if defined(XPLUGIN_VERSION) && XPLUGIN_VERSION > 0 #if defined(XPLUGIN_VERSION) && XPLUGIN_VERSION > 0
/* Older libXplugin (Tiger/"Stock" Leopard) aren't thread safe, so we can't call xp_find_window from the Appkit thread */ /* Older libXplugin (Tiger/"Stock" Leopard) aren't thread safe, so we can't call xp_find_window from the Appkit thread */
xp_window_id wid = 0; xp_window_id wid = 0;
xp_error e; xp_error e;
/* Sigh. Need to check that we're really over one of /* Sigh. Need to check that we're really over one of
* our windows. (We need to receive pointer events while * our windows. (We need to receive pointer events while
* not in the foreground, but we don't want to receive them * not in the foreground, but we don't want to receive them
* when another window is over us or we might show a tooltip) * when another window is over us or we might show a tooltip)
*/ */
e = xp_find_window(location.x, location.y, 0, &wid); e = xp_find_window(location.x, location.y, 0, &wid);
if (e == XP_Success && wid == 0) if (e != XP_Success || (e == XP_Success && wid == 0))
#endif #endif
{ {
bgMouseLocation = location; bgMouseLocation = location;
bgMouseLocationUpdated = TRUE; bgMouseLocationUpdated = TRUE;
return; return;
} }
} else { }
bgMouseLocationUpdated = FALSE;
if(bgMouseLocationUpdated) {
if(!(ev_type == MotionNotify && ev_button == 0)) {
DarwinSendPointerEvents(pDev, MotionNotify, 0, location.x, DarwinSendPointerEvents(pDev, MotionNotify, 0, location.x,
location.y, pressure, tilt.x, tilt.y); location.y, pressure, tilt.x, tilt.y);
} }
bgMouseLocationUpdated = FALSE;
} }
DarwinSendPointerEvents(pDev, ev_type, ev_button, location.x, location.y, DarwinSendPointerEvents(pDev, ev_type, ev_button, location.x, location.y,
@ -1122,6 +1126,7 @@ static inline int ensure_flag(int flags, int device_independent, int device_depe
* first, since we aren't getting them on background mouse motion * first, since we aren't getting them on background mouse motion
*/ */
if(!quartzServerVisible && noTestExtensions) { if(!quartzServerVisible && noTestExtensions) {
bgMouseLocationUpdated = FALSE;
DarwinSendPointerEvents(darwinPointer, MotionNotify, 0, location.x, DarwinSendPointerEvents(darwinPointer, MotionNotify, 0, location.x,
location.y, pressure, tilt.x, tilt.y); location.y, pressure, tilt.x, tilt.y);
} }

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LprojCompatibleVersion</key>
<string>66.2</string>
<key>LprojLocale</key>
<string>nl</string>
<key>LprojRevisionLevel</key>
<string>1</string>
<key>LprojVersion</key>
<string>73</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LprojCompatibleVersion</key>
<string>66.2</string>
<key>LprojLocale</key>
<string>fr</string>
<key>LprojRevisionLevel</key>
<string>1</string>
<key>LprojVersion</key>
<string>73</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LprojCompatibleVersion</key>
<string>66.2</string>
<key>LprojLocale</key>
<string>de</string>
<key>LprojRevisionLevel</key>
<string>1</string>
<key>LprojVersion</key>
<string>73</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LprojCompatibleVersion</key>
<string>66.2</string>
<key>LprojLocale</key>
<string>it</string>
<key>LprojRevisionLevel</key>
<string>1</string>
<key>LprojVersion</key>
<string>73</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LprojCompatibleVersion</key>
<string>66.2</string>
<key>LprojLocale</key>
<string>ja</string>
<key>LprojRevisionLevel</key>
<string>1</string>
<key>LprojVersion</key>
<string>76</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LprojCompatibleVersion</key>
<string>66.2</string>
<key>LprojLocale</key>
<string>es</string>
<key>LprojRevisionLevel</key>
<string>1</string>
<key>LprojVersion</key>
<string>73</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LprojCompatibleVersion</key>
<string>66.2</string>
<key>LprojLocale</key>
<string>da</string>
<key>LprojRevisionLevel</key>
<string>1</string>
<key>LprojVersion</key>
<string>73</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LprojCompatibleVersion</key>
<string>66.2</string>
<key>LprojLocale</key>
<string>fi</string>
<key>LprojRevisionLevel</key>
<string>1</string>
<key>LprojVersion</key>
<string>73</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LprojCompatibleVersion</key>
<string>66.2</string>
<key>LprojLocale</key>
<string>ko</string>
<key>LprojRevisionLevel</key>
<string>1</string>
<key>LprojVersion</key>
<string>73</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LprojCompatibleVersion</key>
<string>66.2</string>
<key>LprojLocale</key>
<string>no</string>
<key>LprojRevisionLevel</key>
<string>1</string>
<key>LprojVersion</key>
<string>73</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LprojCompatibleVersion</key>
<string>66.2</string>
<key>LprojLocale</key>
<string>pl</string>
<key>LprojRevisionLevel</key>
<string>1</string>
<key>LprojVersion</key>
<string>73</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LprojCompatibleVersion</key>
<string>66.2</string>
<key>LprojLocale</key>
<string>pt</string>
<key>LprojRevisionLevel</key>
<string>1</string>
<key>LprojVersion</key>
<string>73</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LprojCompatibleVersion</key>
<string>66.2</string>
<key>LprojLocale</key>
<string>pt_PT</string>
<key>LprojRevisionLevel</key>
<string>1</string>
<key>LprojVersion</key>
<string>73</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LprojCompatibleVersion</key>
<string>66.2</string>
<key>LprojLocale</key>
<string>ru</string>
<key>LprojRevisionLevel</key>
<string>1</string>
<key>LprojVersion</key>
<string>73</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LprojCompatibleVersion</key>
<string>66.2</string>
<key>LprojLocale</key>
<string>sv</string>
<key>LprojRevisionLevel</key>
<string>1</string>
<key>LprojVersion</key>
<string>73</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LprojCompatibleVersion</key>
<string>66.2</string>
<key>LprojLocale</key>
<string>zh_CN</string>
<key>LprojRevisionLevel</key>
<string>1</string>
<key>LprojVersion</key>
<string>75.1</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LprojCompatibleVersion</key>
<string>66.2</string>
<key>LprojLocale</key>
<string>zh_TW</string>
<key>LprojRevisionLevel</key>
<string>1</string>
<key>LprojVersion</key>
<string>73</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -469,10 +469,11 @@ extern int AttachDevice(ClientPtr client,
extern _X_EXPORT DeviceIntPtr GetPairedDevice(DeviceIntPtr kbd); extern _X_EXPORT DeviceIntPtr GetPairedDevice(DeviceIntPtr kbd);
extern int AllocMasterDevice(ClientPtr client, extern int AllocDevicePair(ClientPtr client,
char* name, char* name,
DeviceIntPtr* ptr, DeviceIntPtr* ptr,
DeviceIntPtr* keybd); DeviceIntPtr* keybd,
Bool master);
extern void DeepCopyDeviceClasses(DeviceIntPtr from, extern void DeepCopyDeviceClasses(DeviceIntPtr from,
DeviceIntPtr to); DeviceIntPtr to);
@ -481,6 +482,10 @@ extern int generate_modkeymap(ClientPtr client, DeviceIntPtr dev,
KeyCode **modkeymap, int *max_keys_per_mod); KeyCode **modkeymap, int *max_keys_per_mod);
extern int change_modmap(ClientPtr client, DeviceIntPtr dev, KeyCode *map, extern int change_modmap(ClientPtr client, DeviceIntPtr dev, KeyCode *map,
int max_keys_per_mod); int max_keys_per_mod);
extern int AllocXtstDevice(ClientPtr client,
char* name,
DeviceIntPtr* ptr,
DeviceIntPtr* keybd);
/* misc event helpers */ /* misc event helpers */
extern Mask GetEventFilter(DeviceIntPtr dev, xEvent *event); extern Mask GetEventFilter(DeviceIntPtr dev, xEvent *event);

View File

@ -438,7 +438,7 @@ mieqProcessInputEvents(void)
mieqProcessDeviceEvent(dev, event, screen); mieqProcessDeviceEvent(dev, event, screen);
/* Update the sprite now. Next event may be from different device. */ /* Update the sprite now. Next event may be from different device. */
if (event->u.any.type == ET_Motion && (master || dev->isMaster)) if (event->u.any.type == ET_Motion && master)
miPointerUpdateSprite(dev); miPointerUpdateSprite(dev);
#ifdef XQUARTZ #ifdef XQUARTZ

View File

@ -594,6 +594,7 @@ InitKeyboardDeviceStruct(DeviceIntPtr dev, XkbRMLVOSet *rmlvo,
InitFocusClassDeviceStruct(dev); InitFocusClassDeviceStruct(dev);
xkbi->kbdProc = ctrl_func; xkbi->kbdProc = ctrl_func;
dev->kbdfeed->BellProc = bell_func;
dev->kbdfeed->CtrlProc = XkbDDXKeybdCtrlProc; dev->kbdfeed->CtrlProc = XkbDDXKeybdCtrlProc;
dev->kbdfeed->ctrl = defaultKeyboardControl; dev->kbdfeed->ctrl = defaultKeyboardControl;