From 7c143c6bfb3f8250211c00e22659f4239736d88a Mon Sep 17 00:00:00 2001
From: Matthias Melcher
Date: Tue, 31 May 2005 20:05:50 +0000
Subject: [PATCH] Fl_Menu_::find_item() was trying to search through submenus
created with FL_SUBMENU_POINTER (vs. Fl_SUBMENU and an array of submenu
items), but not following the pointer, messing up the search string.
Two fixes were possible: correctly searching linked submenus, or disabeling submenu links alltogether. I decided for the later since the use of FL_SUBMENU_POINTER implies that the user knows the pointer and can search that submenu seperately, saving time when searching the main menu.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@4384 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
---
CHANGES | 2 ++
documentation/Fl_Menu_.html | 3 ++-
src/Fl_Menu_.cxx | 3 ++-
3 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/CHANGES b/CHANGES
index 38dae6911..dfa4e57ca 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,8 @@ CHANGES IN FLTK 1.1.7
- Documentation fixes (STR #648, STR #692, STR #730, STR
#744, STR #745)
+ - Removed flwaed attempt to find items via
+ Fl_Menu_::find_item() in linked submenus
- Fluid interactive window resizing fixe (STR #873, 791)
- Fluid panel resize and alignment fixes (STR #891)
- Fl_Window::show(argc, argv) now sets the scheme before
diff --git a/documentation/Fl_Menu_.html b/documentation/Fl_Menu_.html
index 2a94a7f82..d60228389 100644
--- a/documentation/Fl_Menu_.html
+++ b/documentation/Fl_Menu_.html
@@ -235,7 +235,8 @@ global() setting (so don't destroy the widget!)
Returns a pointer to the menu item with the given (full)
pathname. If no matching menu item can be found, a NULL pointer
-is returned.
+is returned. This function does not search submenus that are linked
+via FL_SUBMENU_POINTER.
int Fl_Menu_::item_pathname(char *name, int namelen ) const;
int Fl_Menu_::item_pathname(char *name, int namelen,
diff --git a/src/Fl_Menu_.cxx b/src/Fl_Menu_.cxx
index e7db7ed9b..4b1edb4e1 100644
--- a/src/Fl_Menu_.cxx
+++ b/src/Fl_Menu_.cxx
@@ -88,8 +88,9 @@ Fl_Menu_::find_item(const char *name)
for ( int t=0; t < size(); t++ ) {
Fl_Menu_Item *m = menu_ + t;
- if (m->submenu()) {
+ if (m->flags&FL_SUBMENU) {
// IT'S A SUBMENU
+ // we do not support searches through FL_SUBMENU_POINTER links
if (menupath[0]) strlcat(menupath, "/", sizeof(menupath));
strlcat(menupath, m->label(), sizeof(menupath));
if (!strcmp(menupath, name)) return m;