Darwin: Trap Deactivate messages and release modifiers to avoid "stuck shift lock" (etc) bugs
(cherry picked from commit 2b189a99330eb465fa0d17020fb1db1e38829151)
This commit is contained in:
parent
4c18ef4331
commit
606a8dc73d
|
@ -147,6 +147,16 @@ static void DarwinUpdateModifiers(
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* DarwinReleaseModifiers
|
||||
* This hacky function releases all modifier keys. It should be called when X11.app
|
||||
* is deactivated (kXDarwinDeactivate) to prevent modifiers from getting stuck if they
|
||||
* are held down during a "context" switch -- otherwise, we would miss the KeyUp.
|
||||
*/
|
||||
static void DarwinReleaseModifiers(void) {
|
||||
xEvent e;
|
||||
DarwinUpdateModifiers(&e, KeyRelease, COMMAND_MASK(-1) | CONTROL_MASK(-1) | ALTERNATE_MASK(-1) | SHIFT_MASK(-1));
|
||||
}
|
||||
|
||||
/*
|
||||
* DarwinSimulateMouseClick
|
||||
|
@ -347,6 +357,9 @@ void ProcessInputEvents(void) {
|
|||
ErrorF("Unexpected XDarwinScrollWheel event in DarwinProcessInputEvents\n");
|
||||
break;
|
||||
|
||||
case kXDarwinDeactivate:
|
||||
DarwinReleaseModifiers();
|
||||
// fall through
|
||||
default:
|
||||
// Check for mode specific event
|
||||
DarwinModeProcessEvent(&xe);
|
||||
|
|
Loading…
Reference in New Issue