forked from Mirrors/openclonk
mac: send keydown events for modifier flags change (#1574)
For example, keydown events when pressing/releasing the shift, alt, or control keys. With this version this is needed ingame e.g. to pick up objects with Shift.shapetextures
parent
9b7b4bf30a
commit
ef63aa0975
|
@ -294,6 +294,15 @@ int32_t mouseButtonFromEvent(NSEvent* event, DWORD* modifierFlags)
|
|||
[event modifierFlags] & NSShiftKeyMask,
|
||||
false, NULL
|
||||
);
|
||||
|
||||
C4Window* stdWindow = self.controller.stdWindow;
|
||||
if (stdWindow->eKind == C4ConsoleGUI::W_Viewport)
|
||||
{
|
||||
if (type == KEYEV_Down)
|
||||
Console.EditCursor.KeyDown([event keyCode]+CocoaKeycodeOffset, [event modifierFlags]);
|
||||
else
|
||||
Console.EditCursor.KeyUp([event keyCode]+CocoaKeycodeOffset, [event modifierFlags]);
|
||||
}
|
||||
}
|
||||
|
||||
- (void)keyDown:(NSEvent*)event
|
||||
|
@ -307,6 +316,31 @@ int32_t mouseButtonFromEvent(NSEvent* event, DWORD* modifierFlags)
|
|||
[self keyEvent:event withKeyEventType:KEYEV_Up];
|
||||
}
|
||||
|
||||
- (void)flagsChanged:(NSEvent*)event
|
||||
{
|
||||
// Send keypress/release events for relevant modifier keys
|
||||
// keyDown() is not called for modifier keys.
|
||||
C4KeyCode key = (C4KeyCode)([event keyCode] + CocoaKeycodeOffset);
|
||||
int modifier = 0;
|
||||
if (key == K_SHIFT_L || key == K_SHIFT_R)
|
||||
modifier = NSShiftKeyMask;
|
||||
if (key == K_CONTROL_L || key == K_CONTROL_R)
|
||||
modifier = NSControlKeyMask;
|
||||
if (key == K_COMMAND_L || key == K_COMMAND_R)
|
||||
modifier = NSCommandKeyMask;
|
||||
if (key == K_ALT_L || key == K_ALT_R)
|
||||
modifier = NSAlternateKeyMask;
|
||||
|
||||
if (modifier != 0)
|
||||
{
|
||||
int modifierMask = [event modifierFlags];
|
||||
if (modifierMask & modifier)
|
||||
[self keyEvent:event withKeyEventType:KEYEV_Down];
|
||||
else
|
||||
[self keyEvent:event withKeyEventType:KEYEV_Up];
|
||||
}
|
||||
}
|
||||
|
||||
- (NSDragOperation) draggingEntered:(id<NSDraggingInfo>)sender
|
||||
{
|
||||
return NSDragOperationCopy;
|
||||
|
|
|
@ -229,6 +229,8 @@ extern C4KeyCode K_CONTROL_L;
|
|||
extern C4KeyCode K_CONTROL_R;
|
||||
extern C4KeyCode K_ALT_L;
|
||||
extern C4KeyCode K_ALT_R;
|
||||
extern C4KeyCode K_COMMAND_L;
|
||||
extern C4KeyCode K_COMMAND_R;
|
||||
extern C4KeyCode K_F1;
|
||||
extern C4KeyCode K_F2;
|
||||
extern C4KeyCode K_F3;
|
||||
|
|
|
@ -67,6 +67,7 @@ C4Window * C4Window::Init(C4Window::WindowKind windowKind, C4AbstractApp * pApp,
|
|||
[controller.window setCollectionBehavior:[controller.window collectionBehavior] | NSWindowCollectionBehaviorFullScreenPrimary];
|
||||
}
|
||||
SetTitle(Title);
|
||||
eKind = windowKind;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -151,6 +152,8 @@ C4KeyCode K_CONTROL_L = 0x3b + CocoaKeycodeOffset;
|
|||
C4KeyCode K_CONTROL_R = 0x3e + CocoaKeycodeOffset;
|
||||
C4KeyCode K_ALT_L = 58 + CocoaKeycodeOffset;
|
||||
C4KeyCode K_ALT_R = 61 + CocoaKeycodeOffset;
|
||||
C4KeyCode K_COMMAND_L = 55 + CocoaKeycodeOffset;
|
||||
C4KeyCode K_COMMAND_R = 54 + CocoaKeycodeOffset;
|
||||
C4KeyCode K_F1 = 122 + CocoaKeycodeOffset;
|
||||
C4KeyCode K_F2 = 120 + CocoaKeycodeOffset;
|
||||
C4KeyCode K_F3 = 99 + CocoaKeycodeOffset;
|
||||
|
|
|
@ -21,10 +21,13 @@ const C4KeyCodeMapEntry KeyCodeMap [] =
|
|||
//{ VK_CLEAR , "Clear" , NULL },
|
||||
{ K_RETURN , "Return" , NULL },
|
||||
|
||||
/*K( VK_SHIFT , "KeyShift" , "Shift" ),
|
||||
K( VK_CONTROL , "KeyControl" , "Control" ),
|
||||
K( VK_MENU , "Menu" , NULL ),
|
||||
K( VK_PAUSE , "Pause" , NULL ),*/
|
||||
{ K_SHIFT_L , "LeftShift" , "LShift" },
|
||||
{ K_SHIFT_R , "RightShift" , "RShift" },
|
||||
{ K_CONTROL_L , "LeftControl" , "LCtrl" },
|
||||
{ K_CONTROL_R , "RightControl" , "RCtrl" },
|
||||
{ K_ALT_L , "LeftAlt" , "LAlt" },
|
||||
{ K_ALT_R , "RightAlt" , "RAlt" },
|
||||
{ K_PAUSE , "Pause" , NULL },
|
||||
|
||||
/* K( VK_CAPITAL , "Capital" , NULL ),
|
||||
K( VK_KANA , "Kana" , NULL ),
|
||||
|
|
Loading…
Reference in New Issue