Menu: check numBytes == 1 on KeyDown

This commit is contained in:
John Scipione
2013-08-25 00:08:44 -04:00
parent cccc4076db
commit 44dc533861
2 changed files with 23 additions and 13 deletions
+22 -13
View File
@@ -476,6 +476,11 @@ BMenu::MessageReceived(BMessage* msg)
void
BMenu::KeyDown(const char* bytes, int32 numBytes)
{
if (numBytes != 1) {
_InvokeTrigger(bytes);
return;
}
// TODO: Test how it works on BeOS R5 and implement this correctly
switch (bytes[0]) {
case B_UP_ARROW:
@@ -574,19 +579,7 @@ BMenu::KeyDown(const char* bytes, int32 numBytes)
break;
default:
{
uint32 trigger = UTF8ToCharCode(&bytes);
for (uint32 i = CountItems(); i-- > 0;) {
BMenuItem* item = ItemAt(i);
if (item->fTriggerIndex < 0 || item->fTrigger != trigger)
continue;
_InvokeItem(item);
break;
}
break;
}
_InvokeTrigger(bytes);
}
}
@@ -2467,6 +2460,22 @@ BMenu::_InvokeItem(BMenuItem* item, bool now)
}
void
BMenu::_InvokeTrigger(const char* bytes)
{
uint32 trigger = UTF8ToCharCode(&bytes);
for (uint32 i = CountItems(); i-- > 0;) {
BMenuItem* item = ItemAt(i);
if (item->fTriggerIndex < 0 || item->fTrigger != trigger)
continue;
_InvokeItem(item);
break;
}
}
bool
BMenu::_OverSuper(BPoint location)
{