diff options
Diffstat (limited to 'src/FbTk')
-rw-r--r-- | src/FbTk/Menu.cc | 28 | ||||
-rw-r--r-- | src/FbTk/Menu.hh | 3 |
2 files changed, 16 insertions, 15 deletions
diff --git a/src/FbTk/Menu.cc b/src/FbTk/Menu.cc index cf735d6..8f795ac 100644 --- a/src/FbTk/Menu.cc +++ b/src/FbTk/Menu.cc | |||
@@ -356,13 +356,6 @@ void Menu::enterSubmenu() { | |||
356 | submenu->cycleItems(false); | 356 | submenu->cycleItems(false); |
357 | } | 357 | } |
358 | 358 | ||
359 | void Menu::enterParent() { | ||
360 | internal_hide(); | ||
361 | // return focus to parent | ||
362 | if (parent()) | ||
363 | parent()->grabInputFocus(); | ||
364 | } | ||
365 | |||
366 | void Menu::disableTitle() { | 359 | void Menu::disableTitle() { |
367 | setTitleVisibility(false); | 360 | setTitleVisibility(false); |
368 | } | 361 | } |
@@ -583,11 +576,11 @@ void Menu::redrawFrame(FbDrawable &drawable) { | |||
583 | 576 | ||
584 | } | 577 | } |
585 | 578 | ||
586 | void Menu::internal_hide() { | 579 | void Menu::internal_hide(bool first) { |
587 | 580 | ||
588 | if (validIndex(m_which_sub)) { | 581 | if (validIndex(m_which_sub)) { |
589 | MenuItem *tmp = menuitems[m_which_sub]; | 582 | MenuItem *tmp = menuitems[m_which_sub]; |
590 | tmp->submenu()->internal_hide(); | 583 | tmp->submenu()->internal_hide(false); |
591 | } | 584 | } |
592 | 585 | ||
593 | // if we have an active index we need to redraw it | 586 | // if we have an active index we need to redraw it |
@@ -596,12 +589,20 @@ void Menu::internal_hide() { | |||
596 | m_active_index = -1; | 589 | m_active_index = -1; |
597 | clearItem(old); // clear old area from highlight | 590 | clearItem(old); // clear old area from highlight |
598 | 591 | ||
599 | if (shown && shown->menu.window == menu.window) | 592 | if (shown && shown->menu.window == menu.window) { |
600 | shown = (Menu *) 0; | 593 | if (m_parent && m_parent->isVisible()) |
594 | shown = m_parent; | ||
595 | else | ||
596 | shown = (Menu *) 0; | ||
597 | } | ||
601 | 598 | ||
602 | m_torn = m_visible = false; | 599 | m_torn = m_visible = false; |
603 | m_which_sub = -1; | 600 | m_which_sub = -1; |
604 | 601 | ||
602 | if (first && m_parent && m_parent->isVisible() && | ||
603 | s_focused && !s_focused->isVisible()) | ||
604 | m_parent->grabInputFocus(); | ||
605 | |||
605 | menu.window.hide(); | 606 | menu.window.hide(); |
606 | } | 607 | } |
607 | 608 | ||
@@ -1023,7 +1024,7 @@ void Menu::keyPressEvent(XKeyEvent &event) { | |||
1023 | break; | 1024 | break; |
1024 | case XK_Left: // enter parent if we have one | 1025 | case XK_Left: // enter parent if we have one |
1025 | resetTypeAhead(); | 1026 | resetTypeAhead(); |
1026 | enterParent(); | 1027 | internal_hide(); |
1027 | break; | 1028 | break; |
1028 | case XK_Right: // enter submenu if we have one | 1029 | case XK_Right: // enter submenu if we have one |
1029 | resetTypeAhead(); | 1030 | resetTypeAhead(); |
@@ -1031,11 +1032,12 @@ void Menu::keyPressEvent(XKeyEvent &event) { | |||
1031 | break; | 1032 | break; |
1032 | case XK_Escape: // close menu | 1033 | case XK_Escape: // close menu |
1033 | m_type_ahead.reset(); | 1034 | m_type_ahead.reset(); |
1035 | m_torn = false; | ||
1034 | hide(); | 1036 | hide(); |
1035 | break; | 1037 | break; |
1036 | case XK_BackSpace: | 1038 | case XK_BackSpace: |
1037 | if (m_type_ahead.stringSize() == 0) { | 1039 | if (m_type_ahead.stringSize() == 0) { |
1038 | enterParent(); | 1040 | internal_hide(); |
1039 | break; | 1041 | break; |
1040 | } | 1042 | } |
1041 | 1043 | ||
diff --git a/src/FbTk/Menu.hh b/src/FbTk/Menu.hh index 20562de..8d112ca 100644 --- a/src/FbTk/Menu.hh +++ b/src/FbTk/Menu.hh | |||
@@ -92,7 +92,6 @@ public: | |||
92 | /// cycle through menuitems | 92 | /// cycle through menuitems |
93 | void cycleItems(bool reverse); | 93 | void cycleItems(bool reverse); |
94 | void enterSubmenu(); | 94 | void enterSubmenu(); |
95 | void enterParent(); | ||
96 | 95 | ||
97 | void disableTitle(); | 96 | void disableTitle(); |
98 | void enableTitle(); | 97 | void enableTitle(); |
@@ -192,7 +191,7 @@ protected: | |||
192 | virtual void redrawTitle(FbDrawable &pm); | 191 | virtual void redrawTitle(FbDrawable &pm); |
193 | virtual void redrawFrame(FbDrawable &pm); | 192 | virtual void redrawFrame(FbDrawable &pm); |
194 | 193 | ||
195 | virtual void internal_hide(); | 194 | virtual void internal_hide(bool first = true); |
196 | 195 | ||
197 | virtual void update(FbTk::Subject *); | 196 | virtual void update(FbTk::Subject *); |
198 | 197 | ||