diff options
Diffstat (limited to 'xkb')
-rw-r--r-- | xkb/ddxBeep.c | 2 | ||||
-rw-r--r-- | xkb/ddxDevBtn.c | 2 | ||||
-rw-r--r-- | xkb/ddxFakeBtn.c | 2 | ||||
-rw-r--r-- | xkb/ddxFakeMtn.c | 8 | ||||
-rw-r--r-- | xkb/ddxList.c | 6 | ||||
-rw-r--r-- | xkb/ddxLoad.c | 20 | ||||
-rw-r--r-- | xkb/xkb.c | 36 | ||||
-rw-r--r-- | xkb/xkbAccessX.c | 11 | ||||
-rw-r--r-- | xkb/xkbActions.c | 21 | ||||
-rw-r--r-- | xkb/xkbEvents.c | 31 | ||||
-rw-r--r-- | xkb/xkbInit.c | 15 | ||||
-rw-r--r-- | xkb/xkbLEDs.c | 43 | ||||
-rw-r--r-- | xkb/xkbPrKeyEv.c | 10 | ||||
-rw-r--r-- | xkb/xkbSwap.c | 2 | ||||
-rw-r--r-- | xkb/xkbUtils.c | 7 |
15 files changed, 131 insertions, 85 deletions
diff --git a/xkb/ddxBeep.c b/xkb/ddxBeep.c index 2faed5818..74d868c0e 100644 --- a/xkb/ddxBeep.c +++ b/xkb/ddxBeep.c @@ -142,7 +142,7 @@ Atom name; name= None; switch (xkbInfo->beepType) { default: - ErrorF("Unknown beep type %d\n",xkbInfo->beepType); + ErrorF("[xkb] Unknown beep type %d\n",xkbInfo->beepType); case _BEEP_NONE: duration= 0; break; diff --git a/xkb/ddxDevBtn.c b/xkb/ddxDevBtn.c index 5313a1ec5..e812e0be6 100644 --- a/xkb/ddxDevBtn.c +++ b/xkb/ddxDevBtn.c @@ -60,7 +60,7 @@ int nAxes, i, count; if (nAxes > 6) nAxes = 6; - GetSpritePosition(&x,&y); + GetSpritePosition(dev, &x,&y); btn= (deviceKeyButtonPointer *) &events[0]; val= (deviceValuator *) &events[1]; if (press) btn->type= DeviceButtonPress; diff --git a/xkb/ddxFakeBtn.c b/xkb/ddxFakeBtn.c index 2dad54fea..f9dcbf79d 100644 --- a/xkb/ddxFakeBtn.c +++ b/xkb/ddxFakeBtn.c @@ -48,7 +48,7 @@ DevicePtr ptr; if ((ptr = (DevicePtr)inputInfo.pointer)==NULL) return; - GetSpritePosition(&x,&y); + GetSpritePosition(inputInfo.pointer, &x,&y); ev.u.u.type = event; ev.u.u.detail = button; ev.u.keyButtonPointer.time = GetTimeInMillis(); diff --git a/xkb/ddxFakeMtn.c b/xkb/ddxFakeMtn.c index 320e0ca33..3f010f9ce 100644 --- a/xkb/ddxFakeMtn.c +++ b/xkb/ddxFakeMtn.c @@ -53,8 +53,8 @@ XkbDDXFakePointerMotion(unsigned flags,int x,int y) int oldX,oldY; ScreenPtr pScreen, oldScreen; - GetSpritePosition(&oldX, &oldY); - pScreen = oldScreen = GetSpriteWindow()->drawable.pScreen; + GetSpritePosition(inputInfo.pointer, &oldX, &oldY); + pScreen = oldScreen = GetSpriteWindow(inputInfo.pointer)->drawable.pScreen; #ifdef PANORAMIX if (!noPanoramiXExtension) { @@ -113,7 +113,7 @@ ScreenPtr pScreen, oldScreen; } if (pScreen != oldScreen) - NewCurrentScreen(pScreen, oldX, oldY); + NewCurrentScreen(inputInfo.pointer, pScreen, oldX, oldY); if (pScreen->SetCursorPosition) - (*pScreen->SetCursorPosition)(pScreen, oldX, oldY, TRUE); + (*pScreen->SetCursorPosition)(inputInfo.pointer, pScreen, oldX, oldY, TRUE); } diff --git a/xkb/ddxList.c b/xkb/ddxList.c index 80e050524..ae3a7f7e0 100644 --- a/xkb/ddxList.c +++ b/xkb/ddxList.c @@ -192,9 +192,9 @@ char tmpname[PATH_MAX]; in= Popen(buf,"r"); #else if (xkbDebugFlags) - DebugF("xkbList executes: %s\n",buf); + DebugF("[xkb] xkbList executes: %s\n",buf); if (System(buf) < 0) - ErrorF("Could not invoke keymap compiler\n"); + ErrorF("[xkb] Could not invoke keymap compiler\n"); else in= fopen(tmpname, "r"); #endif @@ -262,7 +262,7 @@ char tmpname[PATH_MAX]; fclose(in); else if ((rval=Pclose(in))!=0) { if (xkbDebugFlags) - ErrorF("xkbcomp returned exit code %d\n",rval); + ErrorF("[xkb] xkbcomp returned exit code %d\n",rval); } #else fclose(in); diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c index d80ce62b8..ee64c3be7 100644 --- a/xkb/ddxLoad.c +++ b/xkb/ddxLoad.c @@ -126,11 +126,11 @@ Win32System(const char *cmdline) 0, NULL )) { - ErrorF("Starting '%s' failed!\n", cmdline); + ErrorF("[xkb] Starting '%s' failed!\n", cmdline); } else { - ErrorF("Starting '%s' failed: %s", cmdline, (char *)buffer); + ErrorF("[xkb] Starting '%s' failed: %s", cmdline, (char *)buffer); LocalFree(buffer); } @@ -197,7 +197,7 @@ char tmpname[PATH_MAX]; } else { if (strlen(names->keymap) > PATH_MAX - 1) { - ErrorF("name of keymap (%s) exceeds max length\n", names->keymap); + ErrorF("[xkb] name of keymap (%s) exceeds max length\n", names->keymap); return False; } strcpy(keymap,names->keymap); @@ -252,7 +252,7 @@ char tmpname[PATH_MAX]; if (out!=NULL) { #ifdef DEBUG if (xkbDebugFlags) { - ErrorF("XkbDDXCompileKeymapByNames compiling keymap:\n"); + ErrorF("[xkb] XkbDDXCompileKeymapByNames compiling keymap:\n"); XkbWriteXKBKeymapForNames(stderr,names,xkb,want,need); } #endif @@ -264,7 +264,7 @@ char tmpname[PATH_MAX]; #endif { if (xkbDebugFlags) - DebugF("xkb executes: %s\n",buf); + DebugF("[xkb] xkb executes: %s\n",buf); if (nameRtrn) { strncpy(nameRtrn,keymap,nameRtrnLen); nameRtrn[nameRtrnLen-1]= '\0'; @@ -274,7 +274,7 @@ char tmpname[PATH_MAX]; return True; } else - DebugF("Error compiling keymap (%s)\n",keymap); + DebugF("[xkb] Error compiling keymap (%s)\n",keymap); #ifdef WIN32 /* remove the temporary file */ unlink(tmpname); @@ -282,9 +282,9 @@ char tmpname[PATH_MAX]; } else { #ifndef WIN32 - DebugF("Could not invoke keymap compiler\n"); + DebugF("[xkb] Could not invoke keymap compiler\n"); #else - DebugF("Could not open file %s\n", tmpname); + DebugF("[xkb] Could not open file %s\n", tmpname); #endif } if (nameRtrn) @@ -354,7 +354,7 @@ unsigned missing; } else if (!XkbDDXCompileKeymapByNames(xkb,names,want,need, nameRtrn,nameRtrnLen)){ - DebugF("Couldn't compile keymap file\n"); + DebugF("[xkb] Couldn't compile keymap file\n"); return 0; } file= XkbDDXOpenConfigFile(nameRtrn,fileName,PATH_MAX); @@ -370,7 +370,7 @@ unsigned missing; return 0; } else if (xkbDebugFlags) { - DebugF("Loaded XKB keymap %s, defined=0x%x\n",fileName,(*xkbRtrn)->defined); + DebugF("[xkb] Loaded XKB keymap %s, defined=0x%x\n",fileName,(*xkbRtrn)->defined); } fclose(file); (void) unlink (fileName); @@ -175,7 +175,7 @@ ProcXkbUseExtension(ClientPtr client) client->vMinor= stuff->wantedMinor; } else if (xkbDebugFlags&0x1) { - ErrorF("Rejecting client %d (0x%lx) (wants %d.%02d, have %d.%02d)\n", + ErrorF("[xkb] Rejecting client %d (0x%lx) (wants %d.%02d, have %d.%02d)\n", client->index, (long)client->clientAsMask, stuff->wantedMajor,stuff->wantedMinor, @@ -339,7 +339,7 @@ ProcXkbSelectEvents(ClientPtr client) } } if (dataLeft>2) { - ErrorF("Extra data (%d bytes) after SelectEvents\n",dataLeft); + ErrorF("[xkb] Extra data (%d bytes) after SelectEvents\n",dataLeft); return BadLength; } return client->noClientException; @@ -1344,7 +1344,7 @@ char *desc,*start; if ( rep->totalVModMapKeys>0 ) desc= XkbWriteVirtualModMap(xkb,rep,desc,client); if ((desc-start)!=(len)) { - ErrorF("BOGUS LENGTH in write keyboard desc, expected %d, got %ld\n", + ErrorF("[xkb] BOGUS LENGTH in write keyboard desc, expected %d, got %ld\n", len, (unsigned long)(desc-start)); } if (client->swapped) { @@ -2379,7 +2379,7 @@ ProcXkbSetMap(ClientPtr client) return BadValue; } if (((tmp-((char *)stuff))/4)!=stuff->length) { - ErrorF("Internal error! Bad length in XkbSetMap (after check)\n"); + ErrorF("[xkb] Internal error! Bad length in XkbSetMap (after check)\n"); client->errorValue = tmp-((char *)&stuff[1]); return BadLength; } @@ -2430,7 +2430,7 @@ ProcXkbSetMap(ClientPtr client) if (stuff->present&XkbVirtualModMapMask) tmp= SetVirtualModMap(xkbi,stuff,(xkbVModMapWireDesc *)tmp,&change); if (((tmp-((char *)stuff))/4)!=stuff->length) { - ErrorF("Internal error! Bad length in XkbSetMap (after set)\n"); + ErrorF("[xkb] Internal error! Bad length in XkbSetMap (after set)\n"); client->errorValue = tmp-((char *)&stuff[1]); return BadLength; } @@ -2706,7 +2706,7 @@ ProcXkbSetCompatMap(ClientPtr client) } i= XkbPaddedSize((data-((char *)stuff))); if ((i/4)!=stuff->length) { - ErrorF("Internal length error on read in ProcXkbSetCompatMap\n"); + ErrorF("[xkb] Internal length error on read in ProcXkbSetCompatMap\n"); return BadLength; } @@ -3413,7 +3413,7 @@ register int n; } if ((desc-start)!=(length)) { - ErrorF("BOGUS LENGTH in write names, expected %d, got %ld\n", + ErrorF("[xkb] BOGUS LENGTH in write names, expected %d, got %ld\n", length, (unsigned long)(desc-start)); } WriteToClient(client, SIZEOF(xkbGetNamesReply), (char *)rep); @@ -4104,9 +4104,9 @@ xkbDoodadWireDesc * doodadWire; wire= XkbWriteCountedString(wire,doodad->logo.logo_name,swap); break; default: - ErrorF("Unknown doodad type %d in XkbWriteGeomDoodads\n", + ErrorF("[xkb] Unknown doodad type %d in XkbWriteGeomDoodads\n", doodad->any.type); - ErrorF("Ignored\n"); + ErrorF("[xkb] Ignored\n"); break; } } @@ -4334,7 +4334,7 @@ XkbSendGeometry( ClientPtr client, if ( rep->nKeyAliases>0 ) desc = XkbWriteGeomKeyAliases(desc,geom,client->swapped); if ((desc-start)!=(len)) { - ErrorF("BOGUS LENGTH in XkbSendGeometry, expected %d, got %ld\n", + ErrorF("[xkb] BOGUS LENGTH in XkbSendGeometry, expected %d, got %ld\n", len, (unsigned long)(desc-start)); } } @@ -5778,8 +5778,8 @@ char * str; return status; } else if (length!=0) { - ErrorF("Internal Error! BadLength in ProcXkbGetDeviceInfo\n"); - ErrorF(" Wrote %d fewer bytes than expected\n",length); + ErrorF("[xkb] Internal Error! BadLength in ProcXkbGetDeviceInfo\n"); + ErrorF("[xkb] Wrote %d fewer bytes than expected\n",length); return BadLength; } if (stuff->wanted&(~supported)) { @@ -6079,25 +6079,25 @@ int rc; newCtrls= xkbDebugCtrls&(~stuff->affectCtrls); newCtrls|= (stuff->ctrls&stuff->affectCtrls); if (xkbDebugFlags || newFlags || stuff->msgLength) { - ErrorF("XkbDebug: Setting debug flags to 0x%lx\n",(long)newFlags); + ErrorF("[xkb] XkbDebug: Setting debug flags to 0x%lx\n",(long)newFlags); if (newCtrls!=xkbDebugCtrls) - ErrorF("XkbDebug: Setting debug controls to 0x%lx\n",(long)newCtrls); + ErrorF("[xkb] XkbDebug: Setting debug controls to 0x%lx\n",(long)newCtrls); } extraLength= (stuff->length<<2)-sz_xkbSetDebuggingFlagsReq; if (stuff->msgLength>0) { char *msg; if (extraLength<XkbPaddedSize(stuff->msgLength)) { - ErrorF("XkbDebug: msgLength= %d, length= %ld (should be %d)\n", + ErrorF("[xkb] XkbDebug: msgLength= %d, length= %ld (should be %d)\n", stuff->msgLength,(long)extraLength, XkbPaddedSize(stuff->msgLength)); return BadLength; } msg= (char *)&stuff[1]; if (msg[stuff->msgLength-1]!='\0') { - ErrorF("XkbDebug: message not null-terminated\n"); + ErrorF("[xkb] XkbDebug: message not null-terminated\n"); return BadValue; } - ErrorF("XkbDebug: %s\n",msg); + ErrorF("[xkb] XkbDebug: %s\n",msg); } xkbDebugFlags = newFlags; xkbDebugCtrls = newCtrls; @@ -6194,7 +6194,7 @@ XkbClientGone(pointer data,XID id) DevicePtr pXDev = (DevicePtr)data; if (!XkbRemoveResourceClient(pXDev,id)) { - ErrorF("Internal Error! bad RemoveResourceClient in XkbClientGone\n"); + ErrorF("[xkb] Internal Error! bad RemoveResourceClient in XkbClientGone\n"); } return 1; } diff --git a/xkb/xkbAccessX.c b/xkb/xkbAccessX.c index 75b8c5a27..28107d05d 100644 --- a/xkb/xkbAccessX.c +++ b/xkb/xkbAccessX.c @@ -131,7 +131,7 @@ xEvent xE; xE.u.u.detail = keyCode; xE.u.keyButtonPointer.time = GetTimeInMillis(); if (xkbDebugFlags&0x8) { - DebugF("AXKE: Key %d %s\n",keyCode,(xE.u.u.type==KeyPress?"down":"up")); + DebugF("[xkb] AXKE: Key %d %s\n",keyCode,(xE.u.u.type==KeyPress?"down":"up")); } if (_XkbIsPressEvent(type)) @@ -316,9 +316,8 @@ BOOL is_core; is_core = (dev == inputInfo.keyboard); key = xkbi->repeatKey; - AccessXKeyboardEvent(dev, is_core ? KeyRelease : DeviceKeyRelease, key, - True); - AccessXKeyboardEvent(dev, is_core ? KeyPress : DeviceKeyPress, key, True); + AccessXKeyboardEvent(dev, DeviceKeyRelease, key, True); + AccessXKeyboardEvent(dev, DeviceKeyPress, key, True); return xkbi->desc->ctrls->repeat_interval; } @@ -685,12 +684,14 @@ Bool ignoreKeyEvent = FALSE; /* don't accidentally turn on StickyKeys or the Keyboard Response Group.*/ /* */ /************************************************************************/ +extern int xkbDevicePrivateIndex; +extern void xkbUnwrapProc(DeviceIntPtr, DeviceHandleProc, pointer); void ProcessPointerEvent( register xEvent * xE, register DeviceIntPtr mouse, int count) { -DeviceIntPtr dev = inputInfo.keyboard; +DeviceIntPtr dev = GetPairedDevice(mouse); XkbSrvInfoPtr xkbi = dev->key->xkbInfo; unsigned changed = 0; ProcessInputProc backupproc; diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c index f226b6bda..41b4e4c8e 100644 --- a/xkb/xkbActions.c +++ b/xkb/xkbActions.c @@ -857,7 +857,7 @@ ProcessInputProc backupproc; if ((filter->keycode!=0)&&(filter->keycode!=keycode)) return 1; - GetSpritePosition(&x,&y); + GetSpritePosition(inputInfo.pointer, &x,&y); ev.u.keyButtonPointer.time = GetTimeInMillis(); ev.u.keyButtonPointer.rootX = x; ev.u.keyButtonPointer.rootY = y; @@ -902,10 +902,6 @@ ProcessInputProc backupproc; realMods = xkbi->device->key->modifierMap[ev.u.u.detail]; xkbi->device->key->modifierMap[ev.u.u.detail] = 0; - /* XXX: Bad! Since the switch to XI devices xkbi->device will be the - * XI device. Sending a core event through ProcessOtherEvent will - * cause trouble. Somebody should fix this. - */ UNWRAP_PROCESS_INPUT_PROC(xkbi->device,xkbPrivPtr, backupproc); xkbi->device->public.processInputProc(&ev,xkbi->device,1); COND_WRAP_PROCESS_INPUT_PROC(xkbi->device, xkbPrivPtr, @@ -948,10 +944,6 @@ ProcessInputProc backupproc; realMods = xkbi->device->key->modifierMap[ev.u.u.detail]; xkbi->device->key->modifierMap[ev.u.u.detail] = 0; - /* XXX: Bad! Since the switch to XI devices xkbi->device will be the - * XI device. Sending a core event through ProcessOtherEvent will - * cause trouble. Somebody should fix this. - */ UNWRAP_PROCESS_INPUT_PROC(xkbi->device,xkbPrivPtr, backupproc); xkbi->device->public.processInputProc(&ev,xkbi->device,1); COND_WRAP_PROCESS_INPUT_PROC(xkbi->device, xkbPrivPtr, @@ -1281,14 +1273,17 @@ xkbDeviceInfoPtr xkbPrivPtr = XKBDEVICEINFO(dev); } if (sendEvent) { + DeviceIntPtr tmpdev; if (keyEvent) { realMods = keyc->modifierMap[key]; keyc->modifierMap[key] = 0; - } + tmpdev = dev; + } else + tmpdev = GetPairedDevice(dev); - UNWRAP_PROCESS_INPUT_PROC(dev,xkbPrivPtr, backupproc); - dev->public.processInputProc(xE,dev,count); - COND_WRAP_PROCESS_INPUT_PROC(dev, xkbPrivPtr, + UNWRAP_PROCESS_INPUT_PROC(tmpdev,xkbPrivPtr, backupproc); + dev->public.processInputProc(xE,tmpdev,count); + COND_WRAP_PROCESS_INPUT_PROC(tmpdev, xkbPrivPtr, backupproc,xkbUnwrapProc); if (keyEvent) keyc->modifierMap[key] = realMods; diff --git a/xkb/xkbEvents.c b/xkb/xkbEvents.c index 49725d065..6389b906f 100644 --- a/xkb/xkbEvents.c +++ b/xkb/xkbEvents.c @@ -817,15 +817,15 @@ XkbSrvInfoPtr xkbi; ((xE[0].u.u.type==KeyPress)||(xE[0].u.u.type==KeyRelease)|| (xE[0].u.u.type==DeviceKeyPress)|| (xE[0].u.u.type == DeviceKeyRelease))) { - DebugF("XKbFilterWriteEvents:\n"); - DebugF(" Event state= 0x%04x\n",xE[0].u.keyButtonPointer.state); - DebugF(" XkbLastRepeatEvent!=xE (0x%p!=0x%p) %s\n", + DebugF("[xkb] XKbFilterWriteEvents:\n"); + DebugF("[xkb] Event state= 0x%04x\n",xE[0].u.keyButtonPointer.state); + DebugF("[xkb] XkbLastRepeatEvent!=xE (0x%p!=0x%p) %s\n", XkbLastRepeatEvent,xE, ((XkbLastRepeatEvent!=(pointer)xE)?"True":"False")); - DebugF(" (xkbClientEventsFlags&XWDA)==0 (0x%x) %s\n", + DebugF("[xkb] (xkbClientEventsFlags&XWDA)==0 (0x%x) %s\n", pClient->xkbClientFlags, (_XkbWantsDetectableAutoRepeat(pClient)?"True":"False")); - DebugF(" !IsRelease(%d) %s\n",xE[0].u.u.type, + DebugF("[xkb] !IsRelease(%d) %s\n",xE[0].u.u.type, (!_XkbIsReleaseEvent(xE[0].u.u.type))?"True":"False"); } if ( (XkbLastRepeatEvent==(pointer)xE) && @@ -833,7 +833,8 @@ XkbSrvInfoPtr xkbi; (_XkbIsReleaseEvent(xE[0].u.u.type)) ) { return False; } - if ((pXDev->grab != NullGrab) && pXDev->fromPassiveGrab && + if ((pXDev->deviceGrab.grab != NullGrab) + && pXDev->deviceGrab.fromPassiveGrab && ((xE[0].u.u.type==KeyPress)||(xE[0].u.u.type==KeyRelease)|| (xE[0].u.u.type==DeviceKeyPress)|| (xE[0].u.u.type == DeviceKeyRelease))) { @@ -868,7 +869,7 @@ XkbSrvInfoPtr xkbi; * when the mouse is released, the server does not behave properly. * Faking a release of the button here solves the problem. */ - DebugF("Faking release of button %d\n", xE[0].u.u.detail); + DebugF("[xkb] Faking release of button %d\n", xE[0].u.u.detail); XkbDDXFakePointerButton(ButtonRelease, xE[0].u.u.detail); } } @@ -882,11 +883,11 @@ XkbSrvInfoPtr xkbi; (xE[i].u.u.type==DeviceKeyPress)|| (xE[i].u.u.type == DeviceKeyRelease))) { XkbStatePtr s= &xkbi->state; - DebugF("XKbFilterWriteEvents (non-XKB):\n"); - DebugF("event= 0x%04x\n",xE[i].u.keyButtonPointer.state); - DebugF("lookup= 0x%02x, grab= 0x%02x\n",s->lookup_mods, + DebugF("[xkb] XKbFilterWriteEvents (non-XKB):\n"); + DebugF("[xkb] event= 0x%04x\n",xE[i].u.keyButtonPointer.state); + DebugF("[xkb] lookup= 0x%02x, grab= 0x%02x\n",s->lookup_mods, s->grab_mods); - DebugF("compat lookup= 0x%02x, grab= 0x%02x\n", + DebugF("[xkb] compat lookup= 0x%02x, grab= 0x%02x\n", s->compat_lookup_mods, s->compat_grab_mods); } @@ -913,17 +914,21 @@ XkbSrvInfoPtr xkbi; new|= xkbi->state.compat_lookup_mods; else new|= xkbi->state.compat_grab_mods; kbp->state= new; + } else if ((type==DeviceEnterNotify)||(type==DeviceLeaveNotify)) { + deviceEnterNotify *del = (deviceEnterNotify*)&xE[i]; + del->state&=0x1F00; + del->state|= xkbi->state.compat_grab_mods; } button_mask = 1 << xE[i].u.u.detail; if (type == ButtonPress && ((xE[i].u.keyButtonPointer.state >> 7) & button_mask) == button_mask && (xkbi->lockedPtrButtons & button_mask) == button_mask) { - DebugF("Faking release of button %d\n", xE[i].u.u.detail); + DebugF("[xkb] Faking release of button %d\n", xE[i].u.u.detail); XkbDDXFakePointerButton(ButtonRelease, xE[i].u.u.detail); } else if (type == DeviceButtonPress && ((((deviceKeyButtonPointer*)&xE[i])->state >> 7) & button_mask) == button_mask && (xkbi->lockedPtrButtons & button_mask) == button_mask) { - DebugF("Faking release of button %d\n", ((deviceKeyButtonPointer*)&xE[i])->state); + DebugF("[xkb] Faking release of button %d\n", ((deviceKeyButtonPointer*)&xE[i])->state); XkbDDXFakePointerButton(DeviceButtonRelease, ((deviceKeyButtonPointer*)&xE[i])->state); } } diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c index 3b47396e5..0d5d15ef3 100644 --- a/xkb/xkbInit.c +++ b/xkb/xkbInit.c @@ -180,12 +180,12 @@ char * pval; name= MakeAtom(_XKB_RF_NAMES_PROP_ATOM,strlen(_XKB_RF_NAMES_PROP_ATOM),1); if (name==None) { - ErrorF("Atom error: %s not created\n",_XKB_RF_NAMES_PROP_ATOM); + ErrorF("[xkb] Atom error: %s not created\n",_XKB_RF_NAMES_PROP_ATOM); return True; } pval= (char*) xalloc(len); if (!pval) { - ErrorF("Allocation error: %s proprerty not created\n", + ErrorF("[xkb] Allocation error: %s proprerty not created\n", _XKB_RF_NAMES_PROP_ATOM); return True; } @@ -219,7 +219,7 @@ char * pval; } pval[out++]= '\0'; if (out!=len) { - ErrorF("Internal Error! bad size (%d!=%d) for _XKB_RULES_NAMES\n", + ErrorF("[xkb] Internal Error! bad size (%d!=%d) for _XKB_RULES_NAMES\n", out,len); } dixChangeWindowProperty(serverClient, WindowTable[0], name, XA_STRING, 8, @@ -500,7 +500,7 @@ XkbEventCauseRec cause; /* the other here, but for now just complain */ /* can't just update the core range without */ /* reallocating the KeySymsRec (pain) */ - ErrorF("Internal Error!! XKB and core keymap have different range\n"); + ErrorF("[xkb] Internal Error!! XKB and core keymap have different range\n"); } if (XkbAllocClientMap(xkb,XkbAllClientInfoMask,0)!=Success) FatalError("Couldn't allocate client map in XkbInitDevice\n"); @@ -726,7 +726,10 @@ XkbSrvLedInfoPtr sli; if (pXDev && pXDev->key && pXDev->key->xkbInfo && pXDev->kbdfeed) { xkbi= pXDev->key->xkbInfo; xkb= xkbi->desc; - if (pXDev->kbdfeed) { + /* If we come from DeepCopyDeviceClasses, the CtrlProc was already set + * to XkbDDXKeybdCtrlProc, overwriting it leads to happy recursion. + */ + if (pXDev->kbdfeed && pXDev->kbdfeed->CtrlProc != XkbDDXKeybdCtrlProc) { xkbi->kbdProc= pXDev->kbdfeed->CtrlProc; pXDev->kbdfeed->CtrlProc= XkbDDXKeybdCtrlProc; } @@ -743,7 +746,7 @@ XkbSrvLedInfoPtr sli; sli= XkbFindSrvLedInfo(pXDev,XkbDfltXIClass,XkbDfltXIId,0); if (sli && xkbi) XkbCheckIndicatorMaps(xkbi->device,sli,XkbAllIndicatorsMask); - else DebugF("No indicator feedback in XkbFinishInit (shouldn't happen)!\n"); + else DebugF("[xkb] No indicator feedback in XkbFinishInit (shouldn't happen)!\n"); return softRepeat; } diff --git a/xkb/xkbLEDs.c b/xkb/xkbLEDs.c index 55ce12aad..2b8efcef2 100644 --- a/xkb/xkbLEDs.c +++ b/xkb/xkbLEDs.c @@ -447,7 +447,7 @@ XkbIndicatorMapPtr map; XkbDescPtr xkb; if ((sli->flags&XkbSLI_HasOwnState)==0) - dev= inputInfo.keyboard; + return; sli->usesBase&= ~which; sli->usesLatched&= ~which; @@ -462,7 +462,7 @@ XkbDescPtr xkb; if (which&bit) { CARD8 what; - if (!XkbIM_InUse(map)) + if (!map || !XkbIM_InUse(map)) continue; sli->mapsPresent|= bit; @@ -615,6 +615,45 @@ XkbFreeSrvLedInfo(XkbSrvLedInfoPtr sli) return; } +/* + * XkbSrvLedInfoPtr + * XkbCopySrvLedInfo(dev,src,kf,lf) + * + * Takes the given XkbSrvLedInfoPtr and duplicates it. A deep copy is made, + * thus the new copy behaves like the original one and can be freed with + * XkbFreeSrvLedInfo. + */ +XkbSrvLedInfoPtr +XkbCopySrvLedInfo( DeviceIntPtr from, + XkbSrvLedInfoPtr src, + KbdFeedbackPtr kf, + LedFeedbackPtr lf) +{ + XkbSrvLedInfoPtr sli_new; + + if (!src) + goto finish; + + sli_new = _XkbTypedCalloc(1, XkbSrvLedInfoRec); + if (!sli_new) + goto finish; + + memcpy(sli_new, src, sizeof(XkbSrvLedInfoRec)); + if (sli_new->class == KbdFeedbackClass) + sli_new->fb.kf = kf; + else + sli_new->fb.lf = lf; + + if (sli_new->flags & XkbSLI_IsDefault) { + sli_new->names= _XkbTypedCalloc(XkbNumIndicators,Atom); + sli_new->maps= _XkbTypedCalloc(XkbNumIndicators,XkbIndicatorMapRec); + } /* else sli_new->names/maps is pointing to + dev->key->xkbInfo->desc->names->indicators; + dev->key->xkbInfo->desc->names->indicators; */ + +finish: + return sli_new; +} /***====================================================================***/ diff --git a/xkb/xkbPrKeyEv.c b/xkb/xkbPrKeyEv.c index 69c218c8c..74d02c608 100644 --- a/xkb/xkbPrKeyEv.c +++ b/xkb/xkbPrKeyEv.c @@ -57,7 +57,7 @@ int xiEvent; key= xE->u.u.detail; xiEvent= (xE->u.u.type & EXTENSION_EVENT_BASE); if (xkbDebugFlags&0x8) { - DebugF("XkbPKE: Key %d %s\n",key,(xE->u.u.type==KeyPress?"down":"up")); + DebugF("[xkb] XkbPKE: Key %d %s\n",key,(xE->u.u.type==KeyPress?"down":"up")); } if ( (xkbi->repeatKey==key) && (xE->u.u.type==KeyRelease) && @@ -160,7 +160,7 @@ int xiEvent; } rg->currentDown= key; } - else ErrorF("InternalError! Illegal radio group %d\n",ndx); + else ErrorF("[xkb] InternalError! Illegal radio group %d\n",ndx); break; case XkbKB_Overlay1: case XkbKB_Overlay2: { @@ -180,7 +180,7 @@ int xiEvent; } break; default: - ErrorF("unknown key behavior 0x%04x\n",behavior.type); + ErrorF("[xkb] unknown key behavior 0x%04x\n",behavior.type); break; } } @@ -223,8 +223,8 @@ ProcessKeyboardEvent(xEvent *xE,DeviceIntPtr keybd,int count) AccessXFilterPressEvent(xE, keybd, count); else if (is_release) AccessXFilterReleaseEvent(xE, keybd, count); - } - else { + + } else { XkbProcessKeyboardEvent(xE, keybd, count); } diff --git a/xkb/xkbSwap.c b/xkb/xkbSwap.c index 50b08f46c..1a513b35c 100644 --- a/xkb/xkbSwap.c +++ b/xkb/xkbSwap.c @@ -129,7 +129,7 @@ register int n; dataLeft-= (size*2); } if (dataLeft>2) { - ErrorF("Extra data (%d bytes) after SelectEvents\n",dataLeft); + ErrorF("[xkb] Extra data (%d bytes) after SelectEvents\n",dataLeft); return BadLength; } } diff --git a/xkb/xkbUtils.c b/xkb/xkbUtils.c index 8339cef00..19a171a86 100644 --- a/xkb/xkbUtils.c +++ b/xkb/xkbUtils.c @@ -948,7 +948,10 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies) xkbMapNotify mn; xkbNewKeyboardNotify nkn; - if (!src || !dst || src == dst) + if (src == dst) + return TRUE; + + if (!src || !dst) return FALSE; /* client map */ @@ -2042,7 +2045,7 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies) if (sendNotifies) { if (!pDev) { - ErrorF("XkbCopyKeymap: asked for notifies, but can't find device!\n"); + ErrorF("[xkb] XkbCopyKeymap: asked for notifies, but can't find device!\n"); } else { /* send NewKeyboardNotify if the keycode range changed, else |