summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2024-12-09 10:52:55 +0100
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2024-12-09 10:52:55 +0100
commit5af4108169622f0698913150d357af35d8e832b0 (patch)
treeaa75751f8e0110c17e87c74c2814f7d50112cb9f
parent80c94ebfdf368255bf0869fdd1b06d2ea4aeb0e5 (diff)
Fix: Hang/Infinite loop on submenu with all inactive/invisible items (#1158)
-rw-r--r--src/Fl_Menu.cxx10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/Fl_Menu.cxx b/src/Fl_Menu.cxx
index 983b260f6..4cae09f5d 100644
--- a/src/Fl_Menu.cxx
+++ b/src/Fl_Menu.cxx
@@ -704,11 +704,13 @@ static int forward(int menu) { // go to next item in menu menu if possible
menu = 0;
menuwindow &m = *(pp.p[menu]);
int item = (menu == pp.menu_number) ? pp.item_number : m.selected;
+ int item0 = item;
do {
while (++item < m.numitems) {
const Fl_Menu_Item* m1 = m.menu->next(item);
if (m1->activevisible()) {setitem(m1, menu, item); return 1;}
}
+ if (item0 == -1) break;
item = -1;
}
while (pp.menubar && Fl::event_key() == FL_Right);
@@ -1007,7 +1009,13 @@ const Fl_Menu_Item* Fl_Menu_Item::pulldown(
}
}
initial_item = pp.current_item;
- if (initial_item) goto STARTUP;
+ if (initial_item) {
+ if (menubar && !initial_item->activevisible()) { // pointing at inactive item
+ Fl::grab(0);
+ return NULL;
+ }
+ goto STARTUP;
+ }
// the main loop: runs until p.state goes to DONE_STATE or the menu
// widget is deleted (e.g. from a timer callback, see STR #3503):