diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/FbTk/Menu.cc | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/src/FbTk/Menu.cc b/src/FbTk/Menu.cc index 25c000e..3aa88b0 100644 --- a/src/FbTk/Menu.cc +++ b/src/FbTk/Menu.cc | |||
@@ -447,7 +447,7 @@ void Menu::updateMenu(int active_index) { | |||
447 | // the rest can wait until the end | 447 | // the rest can wait until the end |
448 | menu.window.resize(new_width, new_height); | 448 | menu.window.resize(new_width, new_height); |
449 | 449 | ||
450 | if (!m_visible) | 450 | if (!isVisible()) |
451 | return; | 451 | return; |
452 | 452 | ||
453 | if (menu.frame.alpha() != alpha()) | 453 | if (menu.frame.alpha() != alpha()) |
@@ -524,18 +524,17 @@ void Menu::updateMenu(int active_index) { | |||
524 | 524 | ||
525 | void Menu::show() { | 525 | void Menu::show() { |
526 | 526 | ||
527 | if (m_visible) | 527 | if (isVisible()) |
528 | return; | 528 | return; |
529 | 529 | ||
530 | if (m_need_update) { | 530 | m_visible = true; |
531 | m_visible = true; | 531 | |
532 | if (m_need_update) | ||
532 | updateMenu(); | 533 | updateMenu(); |
533 | } | ||
534 | 534 | ||
535 | menu.window.showSubwindows(); | 535 | menu.window.showSubwindows(); |
536 | menu.window.show(); | 536 | menu.window.show(); |
537 | raise(); | 537 | raise(); |
538 | m_visible = true; | ||
539 | 538 | ||
540 | if (! m_parent && shown != this) { | 539 | if (! m_parent && shown != this) { |
541 | if (shown && (! shown->m_torn)) | 540 | if (shown && (! shown->m_torn)) |
@@ -552,7 +551,6 @@ void Menu::hide() { | |||
552 | if (!isVisible()) | 551 | if (!isVisible()) |
553 | return; | 552 | return; |
554 | 553 | ||
555 | |||
556 | // if not m_torn and parent is m_visible, go to first parent | 554 | // if not m_torn and parent is m_visible, go to first parent |
557 | // and hide it | 555 | // and hide it |
558 | if (!m_torn && m_parent && m_parent->isVisible()) { | 556 | if (!m_torn && m_parent && m_parent->isVisible()) { |
@@ -675,10 +673,11 @@ void Menu::drawSubmenu(unsigned int index) { | |||
675 | if (index >= menuitems.size()) | 673 | if (index >= menuitems.size()) |
676 | return; | 674 | return; |
677 | 675 | ||
676 | |||
678 | MenuItem *item = menuitems[index]; | 677 | MenuItem *item = menuitems[index]; |
679 | if (item->submenu() && m_visible && (! item->submenu()->isTorn()) && | 678 | if (item->submenu() && isVisible() && (! item->submenu()->isTorn()) && |
680 | item->isEnabled()) { | 679 | item->isEnabled()) { |
681 | 680 | ||
682 | if (item->submenu()->m_parent != this) | 681 | if (item->submenu()->m_parent != this) |
683 | item->submenu()->m_parent = this; | 682 | item->submenu()->m_parent = this; |
684 | 683 | ||
@@ -951,16 +950,17 @@ void Menu::motionNotifyEvent(XMotionEvent &me) { | |||
951 | 950 | ||
952 | if (w == m_active_index) | 951 | if (w == m_active_index) |
953 | return; | 952 | return; |
954 | |||
955 | if (validIndex(m_active_index) && w != m_active_index) { | ||
956 | 953 | ||
957 | int old = m_active_index; | 954 | |
955 | |||
956 | if (validIndex(m_active_index) && w != m_active_index) { | ||
957 | int old_active_index = m_active_index; | ||
958 | m_active_index = -1; | 958 | m_active_index = -1; |
959 | MenuItem *item = menuitems[old]; | 959 | MenuItem *item = menuitems[old_active_index]; |
960 | 960 | ||
961 | if (item != 0) { | 961 | if (item != 0) { |
962 | 962 | ||
963 | clearItem(old); | 963 | clearItem(old_active_index); |
964 | 964 | ||
965 | if (item->submenu()) { | 965 | if (item->submenu()) { |
966 | if (item->submenu()->isVisible() && | 966 | if (item->submenu()->isVisible() && |
@@ -1006,7 +1006,6 @@ void Menu::motionNotifyEvent(XMotionEvent &me) { | |||
1006 | timeout.tv_usec = theme().delayOpen() * 1000; // transformed to usec | 1006 | timeout.tv_usec = theme().delayOpen() * 1000; // transformed to usec |
1007 | m_submenu_timer.setTimeout(timeout); | 1007 | m_submenu_timer.setTimeout(timeout); |
1008 | m_submenu_timer.start(); | 1008 | m_submenu_timer.start(); |
1009 | |||
1010 | } | 1009 | } |
1011 | 1010 | ||
1012 | } else if (isItemSelectable(w)){ | 1011 | } else if (isItemSelectable(w)){ |
@@ -1172,6 +1171,7 @@ void Menu::reconfigure() { | |||
1172 | 1171 | ||
1173 | 1172 | ||
1174 | void Menu::openSubmenu() { | 1173 | void Menu::openSubmenu() { |
1174 | |||
1175 | if (!isVisible() || ! validIndex(m_which_press) || | 1175 | if (!isVisible() || ! validIndex(m_which_press) || |
1176 | ! validIndex(m_which_sbl)) | 1176 | ! validIndex(m_which_sbl)) |
1177 | return; | 1177 | return; |
@@ -1181,8 +1181,14 @@ void Menu::openSubmenu() { | |||
1181 | return; | 1181 | return; |
1182 | 1182 | ||
1183 | clearItem(item); | 1183 | clearItem(item); |
1184 | if (menuitems[item]->submenu() != 0 && !menuitems[item]->submenu()->isVisible()) | 1184 | |
1185 | if (menuitems[item]->submenu() != 0) { | ||
1186 | // stop hide timer, so it doesnt hides the menu if we | ||
1187 | // have the same submenu as the last shown submenu | ||
1188 | // (window menu for clients inside workspacemenu for example) | ||
1189 | menuitems[item]->submenu()->m_hide_timer.stop(); | ||
1185 | drawSubmenu(item); | 1190 | drawSubmenu(item); |
1191 | } | ||
1186 | 1192 | ||
1187 | } | 1193 | } |
1188 | 1194 | ||