CtrlCore: Cocoa modifier keys support

git-svn-id: svn://ultimatepp.org/upp/trunk@12133 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2018-08-01 13:49:06 +00:00
parent ea4a247d95
commit 8572ae1712
3 changed files with 32 additions and 2 deletions

View file

@ -8,9 +8,10 @@ K_SPACE = kVK_Space|K_DELTA,
K_RETURN = kVK_Return|K_DELTA,
K_ENTER = K_RETURN,
K_SHIFT_KEY,
K_SHIFT_KEY = 500|K_DELTA,
K_CTRL_KEY,
K_ALT_KEY,
K_OPTION_KEY,
K_CAPSLOCK,
K_ESCAPE = kVK_Escape|K_DELTA,

View file

@ -108,11 +108,32 @@ struct MMImp {
if(!up && !(k & (K_CTRL|K_ALT))) {
WString x = ToWString((CFStringRef)(e.characters));
for(wchar c : x)
if(c < 0xF700 && c >= 32 && c != 127)
if(c < 0xF700 && (c >= 32 && c != 127 || c == 9))
ctrl->DispatchKey(c, 1);
}
return true;
}
static bool KeyFlags(Upp::Ctrl *ctrl, NSEvent *e) {
bool alt = GetAlt();
bool ctl = GetCtrl();
bool sht = GetShift();
bool opt = GetOption();
Flags(e);
if(!ctrl->IsEnabled())
return false;
if(alt != GetAlt())
ctrl->DispatchKey(K_ALT_KEY|(alt * K_KEYUP), 1);
if(ctl != GetCtrl())
ctrl->DispatchKey(K_CTRL_KEY|(ctl * K_KEYUP), 1);
if(sht != GetShift())
ctrl->DispatchKey(K_SHIFT_KEY|(sht * K_KEYUP), 1);
if(opt != GetOption())
ctrl->DispatchKey(K_OPTION_KEY|(opt * K_KEYUP), 1);
return true;
}
static void BecomeKey(Upp::Ctrl *ctrl)
{
@ -190,6 +211,11 @@ struct MMImp {
[super keyUp:e];
}
- (void)flagsChanged:(NSEvent *)e {
if(!Upp::MMImp::KeyFlags(ctrl, e))
[super flagsChanged:e];
}
- (BOOL)windowShouldClose:(NSWindow *)sender {
Upp::MMImp::DoClose(ctrl);
return NO;

View file

@ -423,6 +423,9 @@ String GetKeyDesc(dword key)
{ K_PLUS, tt_("key\v[+]") }, { K_MINUS, tt_("key\v[-]") }, { K_COMMA, tt_("key\v[,]") }, { K_PERIOD, tt_("key\v[.]") },
{ K_SEMICOLON, tt_("key\v[;]") }, { K_SLASH, tt_("key\v[/]") }, { K_GRAVE, tt_("key\v[`]") }, { K_LBRACKET, tt_("key\v[[]") },
{ K_BACKSLASH, tt_("key\v[\\]") }, { K_RBRACKET, tt_("key\v[]]") }, { K_QUOTEDBL, tt_("key\v[']") },
#ifdef PLATFORM_COCOA
{ K_OPTION_KEY, tt_("key\vOption") },
#endif
{ 0, NULL }
};
for(int i = 0; nkey[i].key; i++)