xkb: fill in keycode and event type for slow keys enablement
eventType is set for the type that triggered a XkbControlsNotify event. Technically, SlowKeys is triggered by a timer which doesn't have a matching core event type. So we used to use 0 here. Practically, the timer is triggered by a key press + hold and cancelled when the key is released before the timeout expires. So we might as well set KeyPress (keycode) in the ControlsNotify to give clients a chance to differ between timer-triggered SlowKeys and client-triggered ones. This is a chance in behaviour, though I suspect with little impact. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Acked-by: Daniel Stone <daniel@fooishbar.org>
This commit is contained in:
		
							parent
							
								
									2dc6d92284
								
							
						
					
					
						commit
						2c4388a00e
					
				| 
						 | 
					@ -171,6 +171,7 @@ typedef struct _XkbSrvInfo {
 | 
				
			||||||
    KeyCode mouseKey;
 | 
					    KeyCode mouseKey;
 | 
				
			||||||
    KeyCode inactiveKey;
 | 
					    KeyCode inactiveKey;
 | 
				
			||||||
    KeyCode slowKey;
 | 
					    KeyCode slowKey;
 | 
				
			||||||
 | 
					    KeyCode slowKeyEnableKey;
 | 
				
			||||||
    KeyCode repeatKey;
 | 
					    KeyCode repeatKey;
 | 
				
			||||||
    CARD8 krgTimerActive;
 | 
					    CARD8 krgTimerActive;
 | 
				
			||||||
    CARD8 beepType;
 | 
					    CARD8 beepType;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -291,8 +291,8 @@ AccessXKRGExpire(OsTimerPtr timer, CARD32 now, pointer arg)
 | 
				
			||||||
        return 4000;
 | 
					        return 4000;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    xkbi->krgTimerActive = _OFF_TIMER;
 | 
					    xkbi->krgTimerActive = _OFF_TIMER;
 | 
				
			||||||
    cn.keycode = 0;
 | 
					    cn.keycode = xkbi->slowKeyEnableKey;
 | 
				
			||||||
    cn.eventType = 0;
 | 
					    cn.eventType = KeyPress;
 | 
				
			||||||
    cn.requestMajor = 0;
 | 
					    cn.requestMajor = 0;
 | 
				
			||||||
    cn.requestMinor = 0;
 | 
					    cn.requestMinor = 0;
 | 
				
			||||||
    if (xkbi->desc->ctrls->enabled_ctrls & XkbSlowKeysMask) {
 | 
					    if (xkbi->desc->ctrls->enabled_ctrls & XkbSlowKeysMask) {
 | 
				
			||||||
| 
						 | 
					@ -304,6 +304,7 @@ AccessXKRGExpire(OsTimerPtr timer, CARD32 now, pointer arg)
 | 
				
			||||||
        LogMessage(X_INFO, "XKB SlowKeys are now enabled. Hold shift to disable.\n");
 | 
					        LogMessage(X_INFO, "XKB SlowKeys are now enabled. Hold shift to disable.\n");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    xkbi->slowKeyEnableKey = 0;
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -462,6 +463,7 @@ AccessXFilterPressEvent(DeviceEvent *event, DeviceIntPtr keybd)
 | 
				
			||||||
    if (ctrls->enabled_ctrls & XkbAccessXKeysMask) {
 | 
					    if (ctrls->enabled_ctrls & XkbAccessXKeysMask) {
 | 
				
			||||||
        /* check for magic sequences */
 | 
					        /* check for magic sequences */
 | 
				
			||||||
        if ((sym[0] == XK_Shift_R) || (sym[0] == XK_Shift_L)) {
 | 
					        if ((sym[0] == XK_Shift_R) || (sym[0] == XK_Shift_L)) {
 | 
				
			||||||
 | 
					            xkbi->slowKeyEnableKey = key;
 | 
				
			||||||
            if (XkbAX_NeedFeedback(ctrls, XkbAX_SlowWarnFBMask)) {
 | 
					            if (XkbAX_NeedFeedback(ctrls, XkbAX_SlowWarnFBMask)) {
 | 
				
			||||||
                xkbi->krgTimerActive = _KRG_WARN_TIMER;
 | 
					                xkbi->krgTimerActive = _KRG_WARN_TIMER;
 | 
				
			||||||
                xkbi->krgTimer = TimerSet(xkbi->krgTimer, 0, 4000,
 | 
					                xkbi->krgTimer = TimerSet(xkbi->krgTimer, 0, 4000,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue