Lines Matching +full:post +full:- +full:silicon
2 Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
9 documentation, and that the name of Silicon Graphics not be
12 Silicon Graphics makes no representation about the suitability
16 SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
18 AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
28 #include <dix-config.h>
59 if (xkbPrivPtr->unwrapProc) in xkbUnwrapProc()
60 xkbPrivPtr->unwrapProc = NULL; in xkbUnwrapProc()
90 (!(xkb->ctrls->enabled_ctrls & XkbMouseKeysMask))) { in _FixUpAction()
94 if (xkb->ctrls->enabled_ctrls & XkbStickyKeysMask) { in _FixUpAction()
95 if (act->any.type == XkbSA_SetMods) { in _FixUpAction()
97 fake.mods.mask = act->mods.mask; in _FixUpAction()
98 if (XkbAX_NeedOption(xkb->ctrls, XkbAX_LatchToLockMask)) in _FixUpAction()
104 if (act->any.type == XkbSA_SetGroup) { in _FixUpAction()
106 if (XkbAX_NeedOption(xkb->ctrls, XkbAX_LatchToLockMask)) in _FixUpAction()
110 XkbSASetGroup(&fake.group, XkbSAGroup(&act->group)); in _FixUpAction()
127 xkb = xkbi->desc; in XkbGetKeyAction()
140 if (type->map != NULL) { in XkbGetKeyAction()
144 mods = xkbState->mods & type->mods.mask; in XkbGetKeyAction()
145 for (entry = type->map, i = 0; i < type->map_count; i++, entry++) { in XkbGetKeyAction()
146 if ((entry->active) && (entry->mods.mask == mods)) { in XkbGetKeyAction()
147 col += entry->level; in XkbGetKeyAction()
163 if ((dev->button) && (dev->button->xkb_acts)) { in XkbGetButtonAction()
164 if (dev->button->xkb_acts[button - 1].any.type != XkbSA_NoAction) { in XkbGetButtonAction()
165 fake = _FixUpAction(kbd->key->xkbInfo->desc, in XkbGetButtonAction()
166 &dev->button->xkb_acts[button - 1]); in XkbGetButtonAction()
183 if (filter->keycode == 0) { /* initial press */ in _XkbFilterSetState()
185 filter->keycode = keycode; in _XkbFilterSetState()
186 filter->active = 1; in _XkbFilterSetState()
187 filter->filterOthers = ((pAction->mods.mask & XkbSA_ClearLocks) != 0); in _XkbFilterSetState()
188 filter->priv = 0; in _XkbFilterSetState()
189 filter->filter = _XkbFilterSetState; in _XkbFilterSetState()
190 if (pAction->type == XkbSA_SetMods) { in _XkbFilterSetState()
191 filter->upAction = *pAction; in _XkbFilterSetState()
192 xkbi->setMods = pAction->mods.mask; in _XkbFilterSetState()
195 xkbi->groupChange = XkbSAGroup(&pAction->group); in _XkbFilterSetState()
196 if (pAction->group.flags & XkbSA_GroupAbsolute) in _XkbFilterSetState()
197 xkbi->groupChange -= xkbi->state.base_group; in _XkbFilterSetState()
198 filter->upAction = *pAction; in _XkbFilterSetState()
199 XkbSASetGroup(&filter->upAction.group, xkbi->groupChange); in _XkbFilterSetState()
202 else if (filter->keycode == keycode) { in _XkbFilterSetState()
203 if (filter->upAction.type == XkbSA_SetMods) { in _XkbFilterSetState()
204 xkbi->clearMods = filter->upAction.mods.mask; in _XkbFilterSetState()
205 if (filter->upAction.mods.flags & XkbSA_ClearLocks) { in _XkbFilterSetState()
206 xkbi->state.locked_mods &= ~filter->upAction.mods.mask; in _XkbFilterSetState()
210 if (filter->upAction.group.flags & XkbSA_ClearLocks) { in _XkbFilterSetState()
211 xkbi->state.locked_group = 0; in _XkbFilterSetState()
213 xkbi->groupChange = -XkbSAGroup(&filter->upAction.group); in _XkbFilterSetState()
215 filter->active = 0; in _XkbFilterSetState()
218 filter->upAction.mods.flags &= ~XkbSA_ClearLocks; in _XkbFilterSetState()
219 filter->filterOthers = 0; in _XkbFilterSetState()
232 if (filter->keycode == 0) { /* initial press */ in _XkbFilterLatchState()
234 filter->keycode = keycode; in _XkbFilterLatchState()
235 filter->active = 1; in _XkbFilterLatchState()
236 filter->filterOthers = 1; in _XkbFilterLatchState()
237 filter->priv = LATCH_KEY_DOWN; in _XkbFilterLatchState()
238 filter->filter = _XkbFilterLatchState; in _XkbFilterLatchState()
239 if (pAction->type == XkbSA_LatchMods) { in _XkbFilterLatchState()
240 filter->upAction = *pAction; in _XkbFilterLatchState()
241 xkbi->setMods = pAction->mods.mask; in _XkbFilterLatchState()
244 xkbi->groupChange = XkbSAGroup(&pAction->group); in _XkbFilterLatchState()
245 if (pAction->group.flags & XkbSA_GroupAbsolute) in _XkbFilterLatchState()
246 xkbi->groupChange -= xkbi->state.base_group; in _XkbFilterLatchState()
247 filter->upAction = *pAction; in _XkbFilterLatchState()
248 XkbSASetGroup(&filter->upAction.group, xkbi->groupChange); in _XkbFilterLatchState()
251 else if (pAction && (filter->priv == LATCH_PENDING)) { in _XkbFilterLatchState()
252 if (((1 << pAction->type) & XkbSA_BreakLatch) != 0) { in _XkbFilterLatchState()
253 filter->active = 0; in _XkbFilterLatchState()
256 xkbi->state.latched_mods = 0; in _XkbFilterLatchState()
257 xkbi->state.latched_group = 0; in _XkbFilterLatchState()
260 else if (filter->keycode == keycode && filter->priv != LATCH_PENDING){ in _XkbFilterLatchState()
264 XkbControlsPtr ctrls = xkbi->desc->ctrls; in _XkbFilterLatchState()
265 int needBeep = ((ctrls->enabled_ctrls & XkbStickyKeysMask) && in _XkbFilterLatchState()
268 if (filter->upAction.type == XkbSA_LatchMods) { in _XkbFilterLatchState()
269 unsigned char mask = filter->upAction.mods.mask; in _XkbFilterLatchState()
272 xkbi->clearMods = mask; in _XkbFilterLatchState()
275 common = mask & xkbi->state.locked_mods; in _XkbFilterLatchState()
276 if ((filter->upAction.mods.flags & XkbSA_ClearLocks) && common) { in _XkbFilterLatchState()
278 xkbi->state.locked_mods &= ~common; in _XkbFilterLatchState()
280 XkbDDXAccessXBeep(xkbi->device, _BEEP_STICKY_UNLOCK, in _XkbFilterLatchState()
284 common = mask & xkbi->state.latched_mods; in _XkbFilterLatchState()
285 if ((filter->upAction.mods.flags & XkbSA_LatchToLock) && common) { in _XkbFilterLatchState()
289 newlocked = common & ~xkbi->state.locked_mods; in _XkbFilterLatchState()
291 xkbi->state.locked_mods |= newlocked; in _XkbFilterLatchState()
293 XkbDDXAccessXBeep(xkbi->device, _BEEP_STICKY_LOCK, in _XkbFilterLatchState()
297 xkbi->state.latched_mods &= ~common; in _XkbFilterLatchState()
301 xkbi->state.latched_mods |= mask; in _XkbFilterLatchState()
302 filter->priv = LATCH_PENDING; in _XkbFilterLatchState()
304 XkbDDXAccessXBeep(xkbi->device, _BEEP_STICKY_LATCH, in _XkbFilterLatchState()
309 xkbi->groupChange = -XkbSAGroup(&filter->upAction.group); in _XkbFilterLatchState()
311 if ((filter->upAction.group.flags & XkbSA_ClearLocks) && in _XkbFilterLatchState()
312 (xkbi->state.locked_group)) { in _XkbFilterLatchState()
313 xkbi->state.locked_group = 0; in _XkbFilterLatchState()
315 XkbDDXAccessXBeep(xkbi->device, _BEEP_STICKY_UNLOCK, in _XkbFilterLatchState()
319 else if ((filter->upAction.group.flags & XkbSA_LatchToLock) in _XkbFilterLatchState()
320 && (xkbi->state.latched_group)) { in _XkbFilterLatchState()
321 xkbi->state.locked_group += XkbSAGroup(&filter->upAction.group); in _XkbFilterLatchState()
322 xkbi->state.latched_group -= XkbSAGroup(&filter->upAction.group); in _XkbFilterLatchState()
323 if(XkbSAGroup(&filter->upAction.group) && needBeep) in _XkbFilterLatchState()
324 XkbDDXAccessXBeep(xkbi->device, _BEEP_STICKY_LOCK, in _XkbFilterLatchState()
328 else if(XkbSAGroup(&filter->upAction.group)){ in _XkbFilterLatchState()
329 xkbi->state.latched_group += XkbSAGroup(&filter->upAction.group); in _XkbFilterLatchState()
330 filter->priv = LATCH_PENDING; in _XkbFilterLatchState()
332 XkbDDXAccessXBeep(xkbi->device, _BEEP_STICKY_LATCH, in _XkbFilterLatchState()
337 if (filter->priv != LATCH_PENDING) in _XkbFilterLatchState()
338 filter->active = 0; in _XkbFilterLatchState()
340 else if (pAction && (filter->priv == LATCH_KEY_DOWN)) { in _XkbFilterLatchState()
343 if (filter->upAction.type == XkbSA_LatchMods) in _XkbFilterLatchState()
344 filter->upAction.type = XkbSA_SetMods; in _XkbFilterLatchState()
346 filter->upAction.type = XkbSA_SetGroup; in _XkbFilterLatchState()
347 filter->filter = _XkbFilterSetState; in _XkbFilterLatchState()
348 filter->priv = 0; in _XkbFilterLatchState()
349 return filter->filter(xkbi, filter, keycode, pAction); in _XkbFilterLatchState()
358 if (filter->keycode == 0) /* initial press */ in _XkbFilterLockState()
361 if (pAction && (pAction->type == XkbSA_LockGroup)) { in _XkbFilterLockState()
362 if (pAction->group.flags & XkbSA_GroupAbsolute) in _XkbFilterLockState()
363 xkbi->state.locked_group = XkbSAGroup(&pAction->group); in _XkbFilterLockState()
365 xkbi->state.locked_group += XkbSAGroup(&pAction->group); in _XkbFilterLockState()
368 if (filter->keycode == 0) { /* initial press */ in _XkbFilterLockState()
369 filter->keycode = keycode; in _XkbFilterLockState()
370 filter->active = 1; in _XkbFilterLockState()
371 filter->filterOthers = 0; in _XkbFilterLockState()
372 filter->priv = xkbi->state.locked_mods & pAction->mods.mask; in _XkbFilterLockState()
373 filter->filter = _XkbFilterLockState; in _XkbFilterLockState()
374 filter->upAction = *pAction; in _XkbFilterLockState()
375 if (!(filter->upAction.mods.flags & XkbSA_LockNoLock)) in _XkbFilterLockState()
376 xkbi->state.locked_mods |= pAction->mods.mask; in _XkbFilterLockState()
377 xkbi->setMods = pAction->mods.mask; in _XkbFilterLockState()
379 else if (filter->keycode == keycode) { in _XkbFilterLockState()
380 filter->active = 0; in _XkbFilterLockState()
381 xkbi->clearMods = filter->upAction.mods.mask; in _XkbFilterLockState()
382 if (!(filter->upAction.mods.flags & XkbSA_LockNoUnlock)) in _XkbFilterLockState()
383 xkbi->state.locked_mods &= ~filter->priv; in _XkbFilterLockState()
396 if (filter->keycode == 0) { /* initial press */ in _XkbFilterISOLock()
397 CARD8 flags = pAction->iso.flags; in _XkbFilterISOLock()
399 filter->keycode = keycode; in _XkbFilterISOLock()
400 filter->active = 1; in _XkbFilterISOLock()
401 filter->filterOthers = 1; in _XkbFilterISOLock()
402 filter->priv = ISO_KEY_DOWN; in _XkbFilterISOLock()
403 filter->upAction = *pAction; in _XkbFilterISOLock()
404 filter->filter = _XkbFilterISOLock; in _XkbFilterISOLock()
406 xkbi->groupChange = XkbSAGroup(&pAction->iso); in _XkbFilterISOLock()
407 xkbi->setMods = 0; in _XkbFilterISOLock()
410 xkbi->setMods = pAction->iso.mask; in _XkbFilterISOLock()
411 xkbi->groupChange = 0; in _XkbFilterISOLock()
413 if ((!(flags & XkbSA_ISONoAffectMods)) && (xkbi->state.base_mods)) { in _XkbFilterISOLock()
414 filter->priv = NO_ISO_LOCK; in _XkbFilterISOLock()
415 xkbi->state.locked_mods ^= xkbi->state.base_mods; in _XkbFilterISOLock()
417 if ((!(flags & XkbSA_ISONoAffectGroup)) && (xkbi->state.base_group)) { in _XkbFilterISOLock()
418 /* 6/22/93 (ef) -- lock groups if group key is down first */ in _XkbFilterISOLock()
421 /* 6/22/93 (ef) -- lock mouse buttons if they're down */ in _XkbFilterISOLock()
424 else if (filter->keycode == keycode) { in _XkbFilterISOLock()
425 CARD8 flags = filter->upAction.iso.flags; in _XkbFilterISOLock()
428 xkbi->groupChange = -XkbSAGroup(&filter->upAction.iso); in _XkbFilterISOLock()
429 xkbi->clearMods = 0; in _XkbFilterISOLock()
430 if (filter->priv == ISO_KEY_DOWN) in _XkbFilterISOLock()
431 xkbi->state.locked_group += XkbSAGroup(&filter->upAction.iso); in _XkbFilterISOLock()
434 xkbi->clearMods = filter->upAction.iso.mask; in _XkbFilterISOLock()
435 xkbi->groupChange = 0; in _XkbFilterISOLock()
436 if (filter->priv == ISO_KEY_DOWN) in _XkbFilterISOLock()
437 xkbi->state.locked_mods ^= filter->upAction.iso.mask; in _XkbFilterISOLock()
439 filter->active = 0; in _XkbFilterISOLock()
442 CARD8 flags = filter->upAction.iso.flags; in _XkbFilterISOLock()
444 switch (pAction->type) { in _XkbFilterISOLock()
448 pAction->type = XkbSA_LockMods; in _XkbFilterISOLock()
449 filter->priv = NO_ISO_LOCK; in _XkbFilterISOLock()
455 pAction->type = XkbSA_LockGroup; in _XkbFilterISOLock()
456 filter->priv = NO_ISO_LOCK; in _XkbFilterISOLock()
461 pAction->type = XkbSA_LockPtrBtn; in _XkbFilterISOLock()
462 filter->priv = NO_ISO_LOCK; in _XkbFilterISOLock()
467 pAction->type = XkbSA_LockControls; in _XkbFilterISOLock()
468 filter->priv = NO_ISO_LOCK; in _XkbFilterISOLock()
480 XkbControlsPtr ctrls = xkbi->desc->ctrls; in _XkbPtrAccelExpire()
483 if (xkbi->mouseKey == 0) in _XkbPtrAccelExpire()
486 if (xkbi->mouseKeysAccel) { in _XkbPtrAccelExpire()
487 if ((xkbi->mouseKeysCounter) < ctrls->mk_time_to_max) { in _XkbPtrAccelExpire()
490 xkbi->mouseKeysCounter++; in _XkbPtrAccelExpire()
491 step = xkbi->mouseKeysCurveFactor * in _XkbPtrAccelExpire()
492 pow((double) xkbi->mouseKeysCounter, xkbi->mouseKeysCurve); in _XkbPtrAccelExpire()
493 if (xkbi->mouseKeysDX < 0) in _XkbPtrAccelExpire()
494 dx = floor(((double) xkbi->mouseKeysDX) * step); in _XkbPtrAccelExpire()
496 dx = ceil(((double) xkbi->mouseKeysDX) * step); in _XkbPtrAccelExpire()
497 if (xkbi->mouseKeysDY < 0) in _XkbPtrAccelExpire()
498 dy = floor(((double) xkbi->mouseKeysDY) * step); in _XkbPtrAccelExpire()
500 dy = ceil(((double) xkbi->mouseKeysDY) * step); in _XkbPtrAccelExpire()
503 dx = xkbi->mouseKeysDX * ctrls->mk_max_speed; in _XkbPtrAccelExpire()
504 dy = xkbi->mouseKeysDY * ctrls->mk_max_speed; in _XkbPtrAccelExpire()
506 if (xkbi->mouseKeysFlags & XkbSA_MoveAbsoluteX) in _XkbPtrAccelExpire()
507 dx = xkbi->mouseKeysDX; in _XkbPtrAccelExpire()
508 if (xkbi->mouseKeysFlags & XkbSA_MoveAbsoluteY) in _XkbPtrAccelExpire()
509 dy = xkbi->mouseKeysDY; in _XkbPtrAccelExpire()
512 dx = xkbi->mouseKeysDX; in _XkbPtrAccelExpire()
513 dy = xkbi->mouseKeysDY; in _XkbPtrAccelExpire()
515 XkbFakePointerMotion(xkbi->device, xkbi->mouseKeysFlags, dx, dy); in _XkbPtrAccelExpire()
516 return xkbi->desc->ctrls->mk_interval; in _XkbPtrAccelExpire()
526 if (filter->keycode == 0) { /* initial press */ in _XkbFilterPointerMove()
527 filter->keycode = keycode; in _XkbFilterPointerMove()
528 filter->active = 1; in _XkbFilterPointerMove()
529 filter->filterOthers = 0; in _XkbFilterPointerMove()
530 filter->priv = 0; in _XkbFilterPointerMove()
531 filter->filter = _XkbFilterPointerMove; in _XkbFilterPointerMove()
532 filter->upAction = *pAction; in _XkbFilterPointerMove()
533 xkbi->mouseKeysCounter = 0; in _XkbFilterPointerMove()
534 xkbi->mouseKey = keycode; in _XkbFilterPointerMove()
535 accel = ((pAction->ptr.flags & XkbSA_NoAcceleration) == 0); in _XkbFilterPointerMove()
536 x = XkbPtrActionX(&pAction->ptr); in _XkbFilterPointerMove()
537 y = XkbPtrActionY(&pAction->ptr); in _XkbFilterPointerMove()
538 XkbFakePointerMotion(xkbi->device, pAction->ptr.flags, x, y); in _XkbFilterPointerMove()
540 xkbi->mouseKeysAccel = accel && in _XkbFilterPointerMove()
541 (xkbi->desc->ctrls->enabled_ctrls & XkbMouseKeysAccelMask); in _XkbFilterPointerMove()
542 xkbi->mouseKeysFlags = pAction->ptr.flags; in _XkbFilterPointerMove()
543 xkbi->mouseKeysDX = XkbPtrActionX(&pAction->ptr); in _XkbFilterPointerMove()
544 xkbi->mouseKeysDY = XkbPtrActionY(&pAction->ptr); in _XkbFilterPointerMove()
545 xkbi->mouseKeyTimer = TimerSet(xkbi->mouseKeyTimer, 0, in _XkbFilterPointerMove()
546 xkbi->desc->ctrls->mk_delay, in _XkbFilterPointerMove()
549 else if (filter->keycode == keycode) { in _XkbFilterPointerMove()
550 filter->active = 0; in _XkbFilterPointerMove()
551 if (xkbi->mouseKey == keycode) { in _XkbFilterPointerMove()
552 xkbi->mouseKey = 0; in _XkbFilterPointerMove()
553 xkbi->mouseKeyTimer = TimerSet(xkbi->mouseKeyTimer, 0, 0, in _XkbFilterPointerMove()
564 if (filter->keycode == 0) { /* initial press */ in _XkbFilterPointerBtn()
565 int button = pAction->btn.button; in _XkbFilterPointerBtn()
568 button = xkbi->desc->ctrls->mk_dflt_btn; in _XkbFilterPointerBtn()
570 filter->keycode = keycode; in _XkbFilterPointerBtn()
571 filter->active = 1; in _XkbFilterPointerBtn()
572 filter->filterOthers = 0; in _XkbFilterPointerBtn()
573 filter->priv = 0; in _XkbFilterPointerBtn()
574 filter->filter = _XkbFilterPointerBtn; in _XkbFilterPointerBtn()
575 filter->upAction = *pAction; in _XkbFilterPointerBtn()
576 filter->upAction.btn.button = button; in _XkbFilterPointerBtn()
577 switch (pAction->type) { in _XkbFilterPointerBtn()
579 if (((xkbi->lockedPtrButtons & (1 << button)) == 0) && in _XkbFilterPointerBtn()
580 ((pAction->btn.flags & XkbSA_LockNoLock) == 0)) { in _XkbFilterPointerBtn()
581 xkbi->lockedPtrButtons |= (1 << button); in _XkbFilterPointerBtn()
583 XkbFakeDeviceButton(xkbi->device, 1, button); in _XkbFilterPointerBtn()
584 filter->upAction.type = XkbSA_NoAction; in _XkbFilterPointerBtn()
592 if (pAction->btn.count > 0) { in _XkbFilterPointerBtn()
593 nClicks = pAction->btn.count; in _XkbFilterPointerBtn()
595 XkbFakeDeviceButton(xkbi->device, 1, button); in _XkbFilterPointerBtn()
596 XkbFakeDeviceButton(xkbi->device, 0, button); in _XkbFilterPointerBtn()
598 filter->upAction.type = XkbSA_NoAction; in _XkbFilterPointerBtn()
601 XkbFakeDeviceButton(xkbi->device, 1, button); in _XkbFilterPointerBtn()
606 XkbControlsPtr ctrls = xkbi->desc->ctrls; in _XkbFilterPointerBtn()
612 switch (pAction->dflt.affect) { in _XkbFilterPointerBtn()
614 if (pAction->dflt.flags & XkbSA_DfltBtnAbsolute) in _XkbFilterPointerBtn()
615 ctrls->mk_dflt_btn = XkbSAPtrDfltValue(&pAction->dflt); in _XkbFilterPointerBtn()
617 ctrls->mk_dflt_btn += XkbSAPtrDfltValue(&pAction->dflt); in _XkbFilterPointerBtn()
618 if (ctrls->mk_dflt_btn > 5) in _XkbFilterPointerBtn()
619 ctrls->mk_dflt_btn = 5; in _XkbFilterPointerBtn()
620 else if (ctrls->mk_dflt_btn < 1) in _XkbFilterPointerBtn()
621 ctrls->mk_dflt_btn = 1; in _XkbFilterPointerBtn()
627 pAction->dflt.affect); in _XkbFilterPointerBtn()
630 if (XkbComputeControlsNotify(xkbi->device, in _XkbFilterPointerBtn()
631 &old, xkbi->desc->ctrls, &cn, FALSE)) { in _XkbFilterPointerBtn()
637 XkbSendControlsNotify(xkbi->device, &cn); in _XkbFilterPointerBtn()
644 else if (filter->keycode == keycode) { in _XkbFilterPointerBtn()
645 int button = filter->upAction.btn.button; in _XkbFilterPointerBtn()
647 switch (filter->upAction.type) { in _XkbFilterPointerBtn()
649 if (((filter->upAction.btn.flags & XkbSA_LockNoUnlock) != 0) || in _XkbFilterPointerBtn()
650 ((xkbi->lockedPtrButtons & (1 << button)) == 0)) { in _XkbFilterPointerBtn()
653 xkbi->lockedPtrButtons &= ~(1 << button); in _XkbFilterPointerBtn()
655 if (IsMaster(xkbi->device)) { in _XkbFilterPointerBtn()
656 XkbMergeLockedPtrBtns(xkbi->device); in _XkbFilterPointerBtn()
657 /* One SD still has lock set, don't post event */ in _XkbFilterPointerBtn()
658 if ((xkbi->lockedPtrButtons & (1 << button)) != 0) in _XkbFilterPointerBtn()
664 XkbFakeDeviceButton(xkbi->device, 0, button); in _XkbFilterPointerBtn()
667 filter->active = 0; in _XkbFilterPointerBtn()
683 kbd = xkbi->device; in _XkbFilterControls()
684 ctrls = xkbi->desc->ctrls; in _XkbFilterControls()
686 if (filter->keycode == 0) { /* initial press */ in _XkbFilterControls()
688 filter->keycode = keycode; in _XkbFilterControls()
689 filter->active = 1; in _XkbFilterControls()
690 filter->filterOthers = 0; in _XkbFilterControls()
691 change = XkbActionCtrls(&pAction->ctrls); in _XkbFilterControls()
692 filter->priv = change; in _XkbFilterControls()
693 filter->filter = _XkbFilterControls; in _XkbFilterControls()
694 filter->upAction = *pAction; in _XkbFilterControls()
696 if (pAction->type == XkbSA_LockControls) { in _XkbFilterControls()
697 filter->priv = (ctrls->enabled_ctrls & change); in _XkbFilterControls()
698 change &= ~ctrls->enabled_ctrls; in _XkbFilterControls()
705 ctrls->enabled_ctrls |= change; in _XkbFilterControls()
719 (!(ctrls->enabled_ctrls & XkbStickyKeysMask))) { in _XkbFilterControls()
723 XkbUpdateIndicators(kbd, sli->usesControls, TRUE, NULL, &cause); in _XkbFilterControls()
728 else if (filter->keycode == keycode) { in _XkbFilterControls()
729 change = filter->priv; in _XkbFilterControls()
734 ctrls->enabled_ctrls &= ~change; in _XkbFilterControls()
746 (!(ctrls->enabled_ctrls & XkbStickyKeysMask))) { in _XkbFilterControls()
750 XkbUpdateIndicators(kbd, sli->usesControls, TRUE, NULL, &cause); in _XkbFilterControls()
754 filter->keycode = 0; in _XkbFilterControls()
755 filter->active = 0; in _XkbFilterControls()
768 if ((filter->keycode != 0) && (filter->keycode != keycode)) in _XkbFilterActionMessage()
773 if ((filter->keycode == keycode) && pAction && in _XkbFilterActionMessage()
774 (pAction->type != XkbSA_ActionMessage)) in _XkbFilterActionMessage()
777 kbd = xkbi->device; in _XkbFilterActionMessage()
778 if (filter->keycode == 0) { /* initial press */ in _XkbFilterActionMessage()
779 pMsg = &pAction->msg; in _XkbFilterActionMessage()
780 if ((pMsg->flags & XkbSA_MessageOnRelease) || in _XkbFilterActionMessage()
781 ((pMsg->flags & XkbSA_MessageGenKeyEvent) == 0)) { in _XkbFilterActionMessage()
782 filter->keycode = keycode; in _XkbFilterActionMessage()
783 filter->active = 1; in _XkbFilterActionMessage()
784 filter->filterOthers = 0; in _XkbFilterActionMessage()
785 filter->priv = 0; in _XkbFilterActionMessage()
786 filter->filter = _XkbFilterActionMessage; in _XkbFilterActionMessage()
787 filter->upAction = *pAction; in _XkbFilterActionMessage()
789 if (pMsg->flags & XkbSA_MessageOnPress) { in _XkbFilterActionMessage()
795 ((pMsg->flags & XkbSA_MessageGenKeyEvent) != 0); in _XkbFilterActionMessage()
796 memcpy((char *) msg.message, (char *) pMsg->message, in _XkbFilterActionMessage()
800 return ((pAction->msg.flags & XkbSA_MessageGenKeyEvent) != 0); in _XkbFilterActionMessage()
802 else if (filter->keycode == keycode) { in _XkbFilterActionMessage()
803 pMsg = &filter->upAction.msg; in _XkbFilterActionMessage()
805 if (pMsg->flags & XkbSA_MessageOnRelease) { in _XkbFilterActionMessage()
811 ((pMsg->flags & XkbSA_MessageGenKeyEvent) != 0); in _XkbFilterActionMessage()
812 memcpy((char *) msg.message, (char *) pMsg->message, in _XkbFilterActionMessage()
816 filter->keycode = 0; in _XkbFilterActionMessage()
817 filter->active = 0; in _XkbFilterActionMessage()
818 return ((pMsg->flags & XkbSA_MessageGenKeyEvent) != 0); in _XkbFilterActionMessage()
822 filter->keycode = 0; in _XkbFilterActionMessage()
823 filter->active = 0; in _XkbFilterActionMessage()
837 xkbDeviceInfoPtr xkbPrivPtr = XKBDEVICEINFO(xkbi->device); in _XkbFilterRedirectKey()
840 if ((filter->keycode != 0) && (filter->keycode != keycode)) in _XkbFilterRedirectKey()
845 if ((filter->keycode == keycode) && pAction && in _XkbFilterRedirectKey()
846 (pAction->type != XkbSA_RedirectKey)) in _XkbFilterRedirectKey()
855 GetSpritePosition(xkbi->device, &x, &y); in _XkbFilterRedirectKey()
863 ev.deviceid = xkbi->device->id; in _XkbFilterRedirectKey()
864 /* filter->priv must be set up by the caller for the initial press. */ in _XkbFilterRedirectKey()
865 ev.sourceid = filter->priv; in _XkbFilterRedirectKey()
867 if (filter->keycode == 0) { /* initial press */ in _XkbFilterRedirectKey()
868 if ((pAction->redirect.new_key < xkbi->desc->min_key_code) || in _XkbFilterRedirectKey()
869 (pAction->redirect.new_key > xkbi->desc->max_key_code)) { in _XkbFilterRedirectKey()
872 filter->keycode = keycode; in _XkbFilterRedirectKey()
873 filter->active = 1; in _XkbFilterRedirectKey()
874 filter->filterOthers = 0; in _XkbFilterRedirectKey()
875 filter->filter = _XkbFilterRedirectKey; in _XkbFilterRedirectKey()
876 filter->upAction = *pAction; in _XkbFilterRedirectKey()
879 ev.detail.key = pAction->redirect.new_key; in _XkbFilterRedirectKey()
881 mask = XkbSARedirectVModsMask(&pAction->redirect); in _XkbFilterRedirectKey()
882 mods = XkbSARedirectVMods(&pAction->redirect); in _XkbFilterRedirectKey()
884 XkbVirtualModsToReal(xkbi->desc, mask, &mask); in _XkbFilterRedirectKey()
886 XkbVirtualModsToReal(xkbi->desc, mods, &mods); in _XkbFilterRedirectKey()
887 mask |= pAction->redirect.mods_mask; in _XkbFilterRedirectKey()
888 mods |= pAction->redirect.mods; in _XkbFilterRedirectKey()
891 old = xkbi->state; in _XkbFilterRedirectKey()
892 old_prev = xkbi->prev_state; in _XkbFilterRedirectKey()
893 xkbi->state.base_mods &= ~mask; in _XkbFilterRedirectKey()
894 xkbi->state.base_mods |= (mods & mask); in _XkbFilterRedirectKey()
895 xkbi->state.latched_mods &= ~mask; in _XkbFilterRedirectKey()
896 xkbi->state.latched_mods |= (mods & mask); in _XkbFilterRedirectKey()
897 xkbi->state.locked_mods &= ~mask; in _XkbFilterRedirectKey()
898 xkbi->state.locked_mods |= (mods & mask); in _XkbFilterRedirectKey()
900 xkbi->prev_state = xkbi->state; in _XkbFilterRedirectKey()
903 UNWRAP_PROCESS_INPUT_PROC(xkbi->device, xkbPrivPtr, backupproc); in _XkbFilterRedirectKey()
904 xkbi->device->public.processInputProc((InternalEvent *) &ev, in _XkbFilterRedirectKey()
905 xkbi->device); in _XkbFilterRedirectKey()
906 COND_WRAP_PROCESS_INPUT_PROC(xkbi->device, xkbPrivPtr, backupproc, in _XkbFilterRedirectKey()
910 xkbi->state = old; in _XkbFilterRedirectKey()
911 xkbi->prev_state = old_prev; in _XkbFilterRedirectKey()
918 ev.detail.key = filter->upAction.redirect.new_key; in _XkbFilterRedirectKey()
919 if (pAction == NULL || ev.detail.key != pAction->redirect.new_key) { in _XkbFilterRedirectKey()
921 filter->active = 0; in _XkbFilterRedirectKey()
928 mask = XkbSARedirectVModsMask(&filter->upAction.redirect); in _XkbFilterRedirectKey()
929 mods = XkbSARedirectVMods(&filter->upAction.redirect); in _XkbFilterRedirectKey()
931 XkbVirtualModsToReal(xkbi->desc, mask, &mask); in _XkbFilterRedirectKey()
933 XkbVirtualModsToReal(xkbi->desc, mods, &mods); in _XkbFilterRedirectKey()
934 mask |= filter->upAction.redirect.mods_mask; in _XkbFilterRedirectKey()
935 mods |= filter->upAction.redirect.mods; in _XkbFilterRedirectKey()
938 old = xkbi->state; in _XkbFilterRedirectKey()
939 old_prev = xkbi->prev_state; in _XkbFilterRedirectKey()
940 xkbi->state.base_mods &= ~mask; in _XkbFilterRedirectKey()
941 xkbi->state.base_mods |= (mods & mask); in _XkbFilterRedirectKey()
942 xkbi->state.latched_mods &= ~mask; in _XkbFilterRedirectKey()
943 xkbi->state.latched_mods |= (mods & mask); in _XkbFilterRedirectKey()
944 xkbi->state.locked_mods &= ~mask; in _XkbFilterRedirectKey()
945 xkbi->state.locked_mods |= (mods & mask); in _XkbFilterRedirectKey()
947 xkbi->prev_state = xkbi->state; in _XkbFilterRedirectKey()
950 UNWRAP_PROCESS_INPUT_PROC(xkbi->device, xkbPrivPtr, backupproc); in _XkbFilterRedirectKey()
951 xkbi->device->public.processInputProc((InternalEvent *) &ev, in _XkbFilterRedirectKey()
952 xkbi->device); in _XkbFilterRedirectKey()
953 COND_WRAP_PROCESS_INPUT_PROC(xkbi->device, xkbPrivPtr, backupproc, in _XkbFilterRedirectKey()
957 xkbi->state = old; in _XkbFilterRedirectKey()
958 xkbi->prev_state = old_prev; in _XkbFilterRedirectKey()
965 return (pAction && ev.detail.key != pAction->redirect.new_key); in _XkbFilterRedirectKey()
974 DeviceIntPtr dev = xkbi->device; in _XkbFilterSwitchScreen()
979 if (filter->keycode == 0) { /* initial press */ in _XkbFilterSwitchScreen()
980 filter->keycode = keycode; in _XkbFilterSwitchScreen()
981 filter->active = 1; in _XkbFilterSwitchScreen()
982 filter->filterOthers = 0; in _XkbFilterSwitchScreen()
983 filter->filter = _XkbFilterSwitchScreen; in _XkbFilterSwitchScreen()
988 else if (filter->keycode == keycode) { in _XkbFilterSwitchScreen()
989 filter->active = 0; in _XkbFilterSwitchScreen()
999 DeviceIntPtr dev = xkbi->device; in _XkbFilterXF86Private()
1004 if (filter->keycode == 0) { /* initial press */ in _XkbFilterXF86Private()
1005 filter->keycode = keycode; in _XkbFilterXF86Private()
1006 filter->active = 1; in _XkbFilterXF86Private()
1007 filter->filterOthers = 0; in _XkbFilterXF86Private()
1008 filter->filter = _XkbFilterXF86Private; in _XkbFilterXF86Private()
1012 else if (filter->keycode == keycode) { in _XkbFilterXF86Private()
1013 filter->active = 0; in _XkbFilterXF86Private()
1023 if (xkbi->device == inputInfo.keyboard) in _XkbFilterDeviceBtn()
1026 if (filter->keycode == 0) { /* initial press */ in _XkbFilterDeviceBtn()
1030 _XkbLookupButtonDevice(&dev, pAction->devbtn.device, serverClient, in _XkbFilterDeviceBtn()
1032 if (!dev || !dev->public.on) in _XkbFilterDeviceBtn()
1035 button = pAction->devbtn.button; in _XkbFilterDeviceBtn()
1036 if ((button < 1) || (button > dev->button->numButtons)) in _XkbFilterDeviceBtn()
1039 filter->keycode = keycode; in _XkbFilterDeviceBtn()
1040 filter->active = 1; in _XkbFilterDeviceBtn()
1041 filter->filterOthers = 0; in _XkbFilterDeviceBtn()
1042 filter->priv = 0; in _XkbFilterDeviceBtn()
1043 filter->filter = _XkbFilterDeviceBtn; in _XkbFilterDeviceBtn()
1044 filter->upAction = *pAction; in _XkbFilterDeviceBtn()
1045 switch (pAction->type) { in _XkbFilterDeviceBtn()
1047 if ((pAction->devbtn.flags & XkbSA_LockNoLock) || in _XkbFilterDeviceBtn()
1048 BitIsOn(dev->button->down, button)) in _XkbFilterDeviceBtn()
1051 filter->upAction.type = XkbSA_NoAction; in _XkbFilterDeviceBtn()
1054 if (pAction->devbtn.count > 0) { in _XkbFilterDeviceBtn()
1057 nClicks = pAction->btn.count; in _XkbFilterDeviceBtn()
1062 filter->upAction.type = XkbSA_NoAction; in _XkbFilterDeviceBtn()
1069 else if (filter->keycode == keycode) { in _XkbFilterDeviceBtn()
1073 filter->active = 0; in _XkbFilterDeviceBtn()
1074 _XkbLookupButtonDevice(&dev, filter->upAction.devbtn.device, in _XkbFilterDeviceBtn()
1076 if (!dev || !dev->public.on) in _XkbFilterDeviceBtn()
1079 button = filter->upAction.btn.button; in _XkbFilterDeviceBtn()
1080 switch (filter->upAction.type) { in _XkbFilterDeviceBtn()
1082 if ((filter->upAction.devbtn.flags & XkbSA_LockNoUnlock) || in _XkbFilterDeviceBtn()
1083 !BitIsOn(dev->button->down, button)) in _XkbFilterDeviceBtn()
1091 filter->active = 0; in _XkbFilterDeviceBtn()
1101 if (xkbi->szFilters == 0) { in _XkbNextFreeFilter()
1102 xkbi->szFilters = 4; in _XkbNextFreeFilter()
1103 xkbi->filters = calloc(xkbi->szFilters, sizeof(XkbFilterRec)); in _XkbNextFreeFilter()
1104 /* 6/21/93 (ef) -- XXX! deal with allocation failure */ in _XkbNextFreeFilter()
1106 for (i = 0; i < xkbi->szFilters; i++) { in _XkbNextFreeFilter()
1107 if (!xkbi->filters[i].active) { in _XkbNextFreeFilter()
1108 xkbi->filters[i].keycode = 0; in _XkbNextFreeFilter()
1109 return &xkbi->filters[i]; in _XkbNextFreeFilter()
1112 xkbi->szFilters *= 2; in _XkbNextFreeFilter()
1113 xkbi->filters = reallocarray(xkbi->filters, in _XkbNextFreeFilter()
1114 xkbi->szFilters, sizeof(XkbFilterRec)); in _XkbNextFreeFilter()
1115 /* 6/21/93 (ef) -- XXX! deal with allocation failure */ in _XkbNextFreeFilter()
1116 memset(&xkbi->filters[xkbi->szFilters / 2], 0, in _XkbNextFreeFilter()
1117 (xkbi->szFilters / 2) * sizeof(XkbFilterRec)); in _XkbNextFreeFilter()
1118 return &xkbi->filters[xkbi->szFilters / 2]; in _XkbNextFreeFilter()
1127 for (i = 0; i < xkbi->szFilters; i++) { in _XkbApplyFilters()
1128 if ((xkbi->filters[i].active) && (xkbi->filters[i].filter)) in _XkbApplyFilters()
1130 ((*xkbi->filters[i].filter) (xkbi, &xkbi->filters[i], kc, in _XkbApplyFilters()
1144 if ((xkbi->flags & _XkbStateNotifyInProgress) == 0) { in _XkbEnsureStateChange()
1145 xkbi->prev_state = xkbi->state; in _XkbEnsureStateChange()
1146 xkbi->flags |= _XkbStateNotifyInProgress; in _XkbEnsureStateChange()
1156 XkbSrvInfoPtr xkbi = dev->key->xkbInfo; in _XkbApplyState()
1161 changed = XkbStateChangedFlags(&xkbi->prev_state, &xkbi->state); in _XkbApplyState()
1172 xkbi->flags &= ~_XkbStateNotifyInProgress; in _XkbApplyState()
1190 if (!dev->key || GetMaster(dev, MASTER_KEYBOARD) != master) in XkbPushLockedStateToSlaves()
1193 genStateNotify = _XkbEnsureStateChange(dev->key->xkbInfo); in XkbPushLockedStateToSlaves()
1195 dev->key->xkbInfo->state.locked_mods = in XkbPushLockedStateToSlaves()
1196 master->key->xkbInfo->state.locked_mods; in XkbPushLockedStateToSlaves()
1206 XkbSrvInfoPtr xkbi = dev->key->xkbInfo; in XkbActionGetFilter()
1220 if (event->source_type == EVENT_SOURCE_FOCUS) { in XkbActionGetFilter()
1221 switch (act->type) { in XkbActionGetFilter()
1235 switch (act->type) { in XkbActionGetFilter()
1286 * equals to xkbi->device->id. */ in XkbActionGetFilter()
1287 filter->priv = event->sourceid; in XkbActionGetFilter()
1317 keyc = kbd->key; in XkbHandleActions()
1318 xkbi = keyc->xkbInfo; in XkbHandleActions()
1319 key = event->detail.key; in XkbHandleActions()
1323 xkbi->clearMods = xkbi->setMods = 0; in XkbHandleActions()
1324 xkbi->groupChange = 0; in XkbHandleActions()
1327 keyEvent = ((event->type == ET_KeyPress) || (event->type == ET_KeyRelease)); in XkbHandleActions()
1328 pressEvent = ((event->type == ET_KeyPress) || in XkbHandleActions()
1329 (event->type == ET_ButtonPress)); in XkbHandleActions()
1333 act = XkbGetKeyAction(xkbi, &xkbi->state, key); in XkbHandleActions()
1349 if (xkbi->groupChange != 0) in XkbHandleActions()
1350 xkbi->state.base_group += xkbi->groupChange; in XkbHandleActions()
1351 if (xkbi->setMods) { in XkbHandleActions()
1352 for (i = 0, bit = 1; xkbi->setMods; i++, bit <<= 1) { in XkbHandleActions()
1353 if (xkbi->setMods & bit) { in XkbHandleActions()
1354 keyc->modifierKeyCount[i]++; in XkbHandleActions()
1355 xkbi->state.base_mods |= bit; in XkbHandleActions()
1356 xkbi->setMods &= ~bit; in XkbHandleActions()
1360 if (xkbi->clearMods) { in XkbHandleActions()
1361 for (i = 0, bit = 1; xkbi->clearMods; i++, bit <<= 1) { in XkbHandleActions()
1362 if (xkbi->clearMods & bit) { in XkbHandleActions()
1363 keyc->modifierKeyCount[i]--; in XkbHandleActions()
1364 if (keyc->modifierKeyCount[i] <= 0) { in XkbHandleActions()
1365 xkbi->state.base_mods &= ~bit; in XkbHandleActions()
1366 keyc->modifierKeyCount[i] = 0; in XkbHandleActions()
1368 xkbi->clearMods &= ~bit; in XkbHandleActions()
1382 dev->public.processInputProc((InternalEvent *) event, tmpdev); in XkbHandleActions()
1390 _XkbApplyState(dev, genStateNotify, event->type, key); in XkbHandleActions()
1391 XkbPushLockedStateToSlaves(dev, event->type, key); in XkbHandleActions()
1402 if (pXDev && pXDev->key && pXDev->key->xkbInfo) { in XkbLatchModifiers()
1403 xkbi = pXDev->key->xkbInfo; in XkbLatchModifiers()
1405 xkbi->state.latched_mods &= ~clear; in XkbLatchModifiers()
1429 if (pXDev && pXDev->key && pXDev->key->xkbInfo) { in XkbLatchGroup()
1430 xkbi = pXDev->key->xkbInfo; in XkbLatchGroup()
1454 os = xkbi->state; in XkbClearAllLatchesAndLocks()
1464 xkbi->state.locked_mods = 0; in XkbClearAllLatchesAndLocks()
1468 xkbi->state.locked_group = 0; in XkbClearAllLatchesAndLocks()
1475 sn.keycode = cause->kc; in XkbClearAllLatchesAndLocks()
1476 sn.eventType = cause->event; in XkbClearAllLatchesAndLocks()
1477 sn.requestMajor = cause->mjr; in XkbClearAllLatchesAndLocks()
1478 sn.requestMinor = cause->mnr; in XkbClearAllLatchesAndLocks()
1479 sn.changed = XkbStateChangedFlags(&os, &xkbi->state); in XkbClearAllLatchesAndLocks()
1504 * So we post-fix the event list we get from GPE with a DCE back to the
1521 lastSlave = mpointer->lastSlave; in InjectPointerKeyEvents()
1574 * post through the attached master pointer we'd get duplicate events. in XkbFakeDeviceButton()
1576 * if dev is a master keyboard, post through the XTEST device in XkbFakeDeviceButton()
1578 * if dev is a floating slave, post through the device itself. in XkbFakeDeviceButton()