Don't use GFE modifier workaround with Sunshine

This commit is contained in:
Cameron Gutman
2023-02-25 13:11:54 -06:00
parent d3cb8131d1
commit b77072d399
+33 -31
View File
@@ -731,41 +731,43 @@ int LiSendKeyboardEvent2(short keyCode, char keyAction, char modifiers, char fla
// GFE will synthesize an errant key down event for the non-extended key, causing that key to be // GFE will synthesize an errant key down event for the non-extended key, causing that key to be
// stuck down after the extended modifier key is raised. For non-extended keys, we must set the // stuck down after the extended modifier key is raised. For non-extended keys, we must set the
// MODIFIER flag for correct behavior. // MODIFIER flag for correct behavior.
switch (keyCode & 0xFF) { if (!IS_SUNSHINE()) {
case 0x5B: // VK_LWIN switch (keyCode & 0xFF) {
case 0x5C: // VK_RWIN case 0x5B: // VK_LWIN
// Any keyboard event with the META modifier flag is dropped by all known GFE versions. case 0x5C: // VK_RWIN
// This prevents us from sending shortcuts involving the meta key (Win+X, Win+Tab, etc). // Any keyboard event with the META modifier flag is dropped by all known GFE versions.
// The catch is that the meta key event itself would actually work if it didn't set its // This prevents us from sending shortcuts involving the meta key (Win+X, Win+Tab, etc).
// own modifier flag, so we'll clear that here. This should be safe even if a new GFE // The catch is that the meta key event itself would actually work if it didn't set its
// release comes out that stops dropping events with MODIFIER_META flag. // own modifier flag, so we'll clear that here. This should be safe even if a new GFE
modifiers &= ~MODIFIER_META; // release comes out that stops dropping events with MODIFIER_META flag.
break; modifiers &= ~MODIFIER_META;
break;
case 0xA0: // VK_LSHIFT case 0xA0: // VK_LSHIFT
modifiers |= MODIFIER_SHIFT; modifiers |= MODIFIER_SHIFT;
break; break;
case 0xA1: // VK_RSHIFT case 0xA1: // VK_RSHIFT
modifiers &= ~MODIFIER_SHIFT; modifiers &= ~MODIFIER_SHIFT;
break; break;
case 0xA2: // VK_LCONTROL case 0xA2: // VK_LCONTROL
modifiers |= MODIFIER_CTRL; modifiers |= MODIFIER_CTRL;
break; break;
case 0xA3: // VK_RCONTROL case 0xA3: // VK_RCONTROL
modifiers &= ~MODIFIER_CTRL; modifiers &= ~MODIFIER_CTRL;
break; break;
case 0xA4: // VK_LMENU case 0xA4: // VK_LMENU
modifiers |= MODIFIER_ALT; modifiers |= MODIFIER_ALT;
break; break;
case 0xA5: // VK_RMENU case 0xA5: // VK_RMENU
modifiers &= ~MODIFIER_ALT; modifiers &= ~MODIFIER_ALT;
break; break;
default: default:
// No fixups // No fixups
break; break;
}
} }
holder->packet.keyboard.header.size = BE32(sizeof(NV_KEYBOARD_PACKET) - sizeof(uint32_t)); holder->packet.keyboard.header.size = BE32(sizeof(NV_KEYBOARD_PACKET) - sizeof(uint32_t));