Fix navigation keys for OS X and Windows

On OS X we can use Cmd+[ or Cmd+] to navigate the history. And Cmd+Up/Down
to go to the enclosing folder, or enter in a folder respectively.

On Windows we can use Alt+Left/Right to navigate the history. And Alt+Up
to go to the enclosing folder. (Alt+Down is an extra shortcut to enter
in the folder).
This commit is contained in:
David Capello 2015-05-06 16:47:43 -03:00
parent 4e911b7eea
commit 05fb32bb84

View File

@ -191,18 +191,41 @@ protected:
case kCloseMessage: case kCloseMessage:
getManager()->removeMessageFilter(kKeyDownMessage, this); getManager()->removeMessageFilter(kKeyDownMessage, this);
break; break;
case kKeyDownMessage: case kKeyDownMessage: {
if (msg->ctrlPressed() || msg->cmdPressed()) { KeyMessage* keyMsg = static_cast<KeyMessage*>(msg);
KeyMessage* keyMsg = static_cast<KeyMessage*>(msg); KeyScancode scancode = keyMsg->scancode();
KeyScancode scancode = keyMsg->scancode(); int unicode = keyMsg->unicodeChar();
switch (scancode) {
case kKeyUp: m_filesel->goUp(); return true; #ifdef __APPLE__
case kKeyLeft: m_filesel->goBack(); return true; bool up = (msg->cmdPressed() && scancode == kKeyUp);
case kKeyRight: m_filesel->goForward(); return true; bool enter = (msg->cmdPressed() && scancode == kKeyDown);
case kKeyDown: m_filesel->goInsideFolder(); return true; bool back = (msg->cmdPressed() && msg->shiftPressed() && unicode == '[');
} bool forward = (msg->cmdPressed() && msg->shiftPressed() && unicode == ']');
#else
bool up = (msg->altPressed() && scancode == kKeyUp);
bool enter = (msg->altPressed() && scancode == kKeyDown);
bool back = (msg->altPressed() && scancode == kKeyLeft);
bool forward = (msg->altPressed() && scancode == kKeyRight);
#endif
if (up) {
m_filesel->goUp();
return true;
}
if (enter) {
m_filesel->goInsideFolder();
return true;
}
if (back) {
m_filesel->goBack();
return true;
}
if (forward) {
m_filesel->goForward();
return true;
} }
return false; return false;
}
} }
return Widget::onProcessMessage(msg); return Widget::onProcessMessage(msg);
} }