summaryrefslogtreecommitdiff
path: root/src/FbTk/Menu.cc
diff options
context:
space:
mode:
authorJim Ramsay <i.am@jimramsay.com>2009-10-14 01:05:49 (GMT)
committerJim Ramsay <i.am@jimramsay.com>2009-10-14 01:05:49 (GMT)
commit839ea523164caecd8c779e60539b78c2a748a81f (patch)
tree0019d04f27a1a258bc7a900e3cf77b916dca6493 /src/FbTk/Menu.cc
parent4d3aa646c1d1d1de4fdb31f938f6ea62fd5dd21e (diff)
parent8def80cec337a986b762cdbb5e2555c6da809353 (diff)
downloadfluxbox_lack-839ea523164caecd8c779e60539b78c2a748a81f.zip
fluxbox_lack-839ea523164caecd8c779e60539b78c2a748a81f.tar.bz2
Merge branch 'master' into argbtesting/argbargb
Conflicts: src/FbTk/FbWindow.cc
Diffstat (limited to 'src/FbTk/Menu.cc')
-rw-r--r--src/FbTk/Menu.cc27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/FbTk/Menu.cc b/src/FbTk/Menu.cc
index 7cf2ac9..ded5dab 100644
--- a/src/FbTk/Menu.cc
+++ b/src/FbTk/Menu.cc
@@ -328,9 +328,11 @@ void Menu::cycleItems(bool reverse) {
328 new_index = vec[i]->getIndex(); 328 new_index = vec[i]->getIndex();
329 } 329 }
330 330
331 if (new_index == -1) 331 if (new_index != -1)
332 return; 332 setActiveIndex(new_index);
333}
333 334
335void Menu::setActiveIndex(int new_index) {
334 // clear the items and close any open submenus 336 // clear the items and close any open submenus
335 int old_active_index = m_active_index; 337 int old_active_index = m_active_index;
336 m_active_index = new_index; 338 m_active_index = new_index;
@@ -757,7 +759,7 @@ void Menu::drawSubmenu(unsigned int index) {
757 if (! m_moving) 759 if (! m_moving)
758 clearItem(index); 760 clearItem(index);
759 761
760 if (! item->submenu()->isVisible()) { 762 if (! item->submenu()->isVisible() && item->submenu()->numberOfItems() > 0) {
761 shown = item->submenu(); 763 shown = item->submenu();
762 item->showSubmenu(); 764 item->showSubmenu();
763 item->submenu()->raise(); 765 item->submenu()->raise();
@@ -1065,11 +1067,26 @@ void Menu::keyPressEvent(XKeyEvent &event) {
1065 break; 1067 break;
1066 case XK_Left: // enter parent if we have one 1068 case XK_Left: // enter parent if we have one
1067 resetTypeAhead(); 1069 resetTypeAhead();
1068 internal_hide(); 1070 if (menu.sublevels > 1 && m_active_index >= menu.persub) {
1071 int new_index = m_active_index - menu.persub;
1072 while (new_index >= 0 && !isItemEnabled(new_index))
1073 new_index -= menu.persub;
1074 if (new_index >= 0)
1075 setActiveIndex(new_index);
1076 } else
1077 internal_hide();
1069 break; 1078 break;
1070 case XK_Right: // enter submenu if we have one 1079 case XK_Right: // enter submenu if we have one
1071 resetTypeAhead(); 1080 resetTypeAhead();
1072 enterSubmenu(); 1081 if (menu.sublevels > 1 && validIndex(m_active_index) &&
1082 validIndex(m_active_index + menu.persub)) {
1083 int new_index = m_active_index + menu.persub;
1084 while (validIndex(new_index) && !isItemEnabled(new_index))
1085 new_index += menu.persub;
1086 if (validIndex(new_index))
1087 setActiveIndex(new_index);
1088 } else
1089 enterSubmenu();
1073 break; 1090 break;
1074 case XK_Escape: // close menu 1091 case XK_Escape: // close menu
1075 m_type_ahead.reset(); 1092 m_type_ahead.reset();