|
@@ -213,7 +213,7 @@ void UI::HandleTouchEnd(StringHash eventType, VariantMap& eventData)
|
|
|
rootWidget_->InvokePointerUp(px, py, TB_MODIFIER_NONE, true, touchId);
|
|
rootWidget_->InvokePointerUp(px, py, TB_MODIFIER_NONE, true, touchId);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-static bool InvokeShortcut(int key, SPECIAL_KEY special_key, MODIFIER_KEYS modifierkeys, bool down)
|
|
|
|
|
|
|
+static bool InvokeShortcut(UI* ui, int key, SPECIAL_KEY special_key, MODIFIER_KEYS modifierkeys, bool down)
|
|
|
{
|
|
{
|
|
|
#ifdef __APPLE__
|
|
#ifdef __APPLE__
|
|
|
bool shortcut_key = (modifierkeys & TB_SUPER) ? true : false;
|
|
bool shortcut_key = (modifierkeys & TB_SUPER) ? true : false;
|
|
@@ -286,15 +286,20 @@ static bool InvokeShortcut(int key, SPECIAL_KEY special_key, MODIFIER_KEYS modif
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if (!eventWidget)
|
|
|
|
|
|
|
+ if (!eventWidget || !eventWidget->InvokeEvent(ev))
|
|
|
|
|
+ {
|
|
|
|
|
+ VariantMap evData;
|
|
|
|
|
+ evData[UIUnhandledShortcut::P_REFID] = id;
|
|
|
|
|
+ ui->SendEvent(E_UIUNHANDLEDSHORTCUT, evData);
|
|
|
return false;
|
|
return false;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- return eventWidget->InvokeEvent(ev);
|
|
|
|
|
|
|
+ return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-static bool InvokeKey(TBWidget* root, unsigned int key, SPECIAL_KEY special_key, MODIFIER_KEYS modifierkeys, bool keydown)
|
|
|
|
|
|
|
+static bool InvokeKey(UI* ui, TBWidget* root, unsigned int key, SPECIAL_KEY special_key, MODIFIER_KEYS modifierkeys, bool keydown)
|
|
|
{
|
|
{
|
|
|
- if (InvokeShortcut(key, special_key, modifierkeys, keydown))
|
|
|
|
|
|
|
+ if (InvokeShortcut(ui, key, special_key, modifierkeys, keydown))
|
|
|
return true;
|
|
return true;
|
|
|
root->InvokeKey(key, special_key, modifierkeys, keydown);
|
|
root->InvokeKey(key, special_key, modifierkeys, keydown);
|
|
|
return true;
|
|
return true;
|
|
@@ -303,6 +308,11 @@ static bool InvokeKey(TBWidget* root, unsigned int key, SPECIAL_KEY special_key,
|
|
|
|
|
|
|
|
void UI::HandleKey(bool keydown, int keycode, int scancode)
|
|
void UI::HandleKey(bool keydown, int keycode, int scancode)
|
|
|
{
|
|
{
|
|
|
|
|
+ if (keydown && (keycode == KEY_ESC || keycode == KEY_RETURN || keycode == KEY_RETURN2 || keycode == KEY_KP_ENTER)
|
|
|
|
|
+ && TBWidget::focused_widget)
|
|
|
|
|
+ {
|
|
|
|
|
+ SendEvent(E_UIWIDGETFOCUSESCAPED);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
#ifdef ATOMIC_PLATFORM_WINDOWS
|
|
#ifdef ATOMIC_PLATFORM_WINDOWS
|
|
|
if (keycode == KEY_LCTRL || keycode == KEY_RCTRL)
|
|
if (keycode == KEY_LCTRL || keycode == KEY_RCTRL)
|
|
@@ -322,95 +332,102 @@ void UI::HandleKey(bool keydown, int keycode, int scancode)
|
|
|
#endif
|
|
#endif
|
|
|
MODIFIER_KEYS mod = GetModifierKeys(qualifiers, superdown);
|
|
MODIFIER_KEYS mod = GetModifierKeys(qualifiers, superdown);
|
|
|
|
|
|
|
|
|
|
+ SPECIAL_KEY specialKey = TB_KEY_UNDEFINED;
|
|
|
|
|
+
|
|
|
switch (keycode)
|
|
switch (keycode)
|
|
|
{
|
|
{
|
|
|
case KEY_RETURN:
|
|
case KEY_RETURN:
|
|
|
case KEY_RETURN2:
|
|
case KEY_RETURN2:
|
|
|
case KEY_KP_ENTER:
|
|
case KEY_KP_ENTER:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_ENTER, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_ENTER;
|
|
|
break;
|
|
break;
|
|
|
-
|
|
|
|
|
case KEY_F1:
|
|
case KEY_F1:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_F1, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_F1;
|
|
|
break;
|
|
break;
|
|
|
case KEY_F2:
|
|
case KEY_F2:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_F2, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_F2;
|
|
|
break;
|
|
break;
|
|
|
case KEY_F3:
|
|
case KEY_F3:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_F3, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_F3;
|
|
|
break;
|
|
break;
|
|
|
case KEY_F4:
|
|
case KEY_F4:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_F4, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_F4;
|
|
|
break;
|
|
break;
|
|
|
case KEY_F5:
|
|
case KEY_F5:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_F5, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_F5;
|
|
|
break;
|
|
break;
|
|
|
case KEY_F6:
|
|
case KEY_F6:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_F6, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_F6;
|
|
|
break;
|
|
break;
|
|
|
case KEY_F7:
|
|
case KEY_F7:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_F7, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_F7;
|
|
|
break;
|
|
break;
|
|
|
case KEY_F8:
|
|
case KEY_F8:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_F8, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_F8;
|
|
|
break;
|
|
break;
|
|
|
case KEY_F9:
|
|
case KEY_F9:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_F9, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_F9;
|
|
|
break;
|
|
break;
|
|
|
case KEY_F10:
|
|
case KEY_F10:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_F10, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_F10;
|
|
|
break;
|
|
break;
|
|
|
case KEY_F11:
|
|
case KEY_F11:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_F11, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_F11;
|
|
|
break;
|
|
break;
|
|
|
case KEY_F12:
|
|
case KEY_F12:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_F12, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_F12;
|
|
|
break;
|
|
break;
|
|
|
case KEY_LEFT:
|
|
case KEY_LEFT:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_LEFT, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_LEFT;
|
|
|
break;
|
|
break;
|
|
|
case KEY_UP:
|
|
case KEY_UP:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_UP, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_UP;
|
|
|
break;
|
|
break;
|
|
|
case KEY_RIGHT:
|
|
case KEY_RIGHT:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_RIGHT, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_RIGHT;
|
|
|
break;
|
|
break;
|
|
|
case KEY_DOWN:
|
|
case KEY_DOWN:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_DOWN, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_DOWN;
|
|
|
break;
|
|
break;
|
|
|
case KEY_PAGEUP:
|
|
case KEY_PAGEUP:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_PAGE_UP, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_PAGE_UP;
|
|
|
break;
|
|
break;
|
|
|
case KEY_PAGEDOWN:
|
|
case KEY_PAGEDOWN:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_PAGE_DOWN, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_PAGE_DOWN;
|
|
|
break;
|
|
break;
|
|
|
case KEY_HOME:
|
|
case KEY_HOME:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_HOME, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_HOME;
|
|
|
break;
|
|
break;
|
|
|
case KEY_END:
|
|
case KEY_END:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_END, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_END;
|
|
|
break;
|
|
break;
|
|
|
case KEY_INSERT:
|
|
case KEY_INSERT:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_INSERT, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_INSERT;
|
|
|
break;
|
|
break;
|
|
|
case KEY_TAB:
|
|
case KEY_TAB:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_TAB, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_TAB;
|
|
|
break;
|
|
break;
|
|
|
case KEY_DELETE:
|
|
case KEY_DELETE:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_DELETE, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_DELETE;
|
|
|
break;
|
|
break;
|
|
|
case KEY_BACKSPACE:
|
|
case KEY_BACKSPACE:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_BACKSPACE, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_BACKSPACE;
|
|
|
break;
|
|
break;
|
|
|
case KEY_ESC:
|
|
case KEY_ESC:
|
|
|
- InvokeKey(rootWidget_, 0, TB_KEY_ESC, mod, keydown);
|
|
|
|
|
|
|
+ specialKey = TB_KEY_ESC;
|
|
|
break;
|
|
break;
|
|
|
- default:
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (specialKey == TB_KEY_UNDEFINED)
|
|
|
|
|
+ {
|
|
|
if (mod & TB_SUPER)
|
|
if (mod & TB_SUPER)
|
|
|
{
|
|
{
|
|
|
- InvokeKey(rootWidget_, keycode, TB_KEY_UNDEFINED, mod, keydown);
|
|
|
|
|
|
|
+ InvokeKey(this, rootWidget_, keycode, TB_KEY_UNDEFINED, mod, keydown);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ InvokeKey(this, rootWidget_, 0, specialKey, mod, keydown);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
@@ -477,8 +494,8 @@ void UI::HandleTextInput(StringHash eventType, VariantMap& eventData)
|
|
|
|
|
|
|
|
for (unsigned i = 0; i < text.Length(); i++)
|
|
for (unsigned i = 0; i < text.Length(); i++)
|
|
|
{
|
|
{
|
|
|
- InvokeKey(rootWidget_, text[i], TB_KEY_UNDEFINED, TB_MODIFIER_NONE, true);
|
|
|
|
|
- InvokeKey(rootWidget_, text[i], TB_KEY_UNDEFINED, TB_MODIFIER_NONE, false);
|
|
|
|
|
|
|
+ InvokeKey(this, rootWidget_, text[i], TB_KEY_UNDEFINED, TB_MODIFIER_NONE, true);
|
|
|
|
|
+ InvokeKey(this, rootWidget_, text[i], TB_KEY_UNDEFINED, TB_MODIFIER_NONE, false);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|