On Thu, Apr 14, 2005 at 11:34:40PM +0200, Bill Allombert wrote:
> On Wed, Apr 13, 2005 at 11:45:42AM +0200, Bill Allombert wrote:
> > On Wed, Apr 13, 2005 at 02:47:32AM +0200, Daniel Brockman wrote:
> > > Bill, can you verify that this is a bug in menu itself,
> > > rather than in ratmenu's application of menu?
> > > 
> > > If not, do you think you could help fix the ratmenu script?
> > > I've tried to understand the menu language with little avail,
> > > and it seems Jonathan cannot find any error in the script.
> 
> Hello Morten,
> 
> I more than suspect that the three install-menu functions 
> entryindex(), firstentry() and lastentry() do not work, 
> and that cause that bug.
> 
> Add entryindex() in the start function in the fvwm menu-methods,
> like that:
> function start($var,$com)=\
>             "+ \"" entryindex() " " escfirst(title(),$hotkey,"&") \
>             cond_surr(icon(),"%","%") "\" " $var " " $com "\n"
> 
> rerun menu, we get a ~/.fvwm/menudefs.hook file with menu like:
> ...
> AddToMenu "/Debian/Apps/Games/Card" "Card" Title Top
> + "12 &aBridge" Exec exec /usr/bin/abridge
> + "0 &Canfield" /home/bill
>  x-terminal-emulator  -T "Canfield" -e /usr/games/canfield
> + "2 C&ribbage" /home/bill
>  x-terminal-emulator  -T "Cribbage" -e /usr/games/cribbage
> + "4 &Floater%/usr/share/pixmaps/floater-24.xpm%" Exec exec /usr/games/floater
> + "6 &Go Fish" /home/bill
>  x-terminal-emulator  -T "Go Fish" -e sh -c '/usr/games/fish;echo;echo PRESS 
> ENT+ "8 &Mille Bornes" /home/bill
>  x-terminal-emulator  -T "Mille Bornes" -e /usr/games/mille
> + "10 &Xpatience2" Exec exec /usr/games/xpat2
> 
> There is 3 problems:
> 1) "0" is not the first entry, that break firstentry().
> 2) The numbers are all even.
> 3) They are not sorted.

OK, so apparently the index is computed in menuentry::postprocess()
before the menu is sorted, that is why aBridge is first.
(It is last in ASCII order, but first after ucfirst()).

Here a patch that should fix the issue. Sorry it took so long...

Morten, could you check if I follow the C++ usage ?

Cheers,
-- 
Bill. <[EMAIL PROTECTED]>

Imagine a large red swirl here. 


--- menu-2.1.25/install-menu/menu-tree.cc       2004-09-26 11:38:00.000000000 
+0200
+++ menu-2.1.26/install-menu/menu-tree.cc       2005-09-24 22:32:05.000000000 
+0200
@@ -254,6 +254,9 @@
 
     sorted.insert(std::pair<string, menuentry *>(s, sub_i->second));
   }
+  int index = 0;
+  for (i = sorted.begin(); i != sorted.end(); ++i)
+    i->second->vars[PRIVATE_ENTRYINDEX_VAR] = itostring(index++);
 
   // Output the menu according to the treewalk variable.
   for (string::size_type j = 0; j < treew.length(); ++j)
@@ -432,7 +435,6 @@
 void menuentry::postprocess(int n_parent, int level, const std::string& 
prev_section)
 {
   submenu_container::iterator i, i_next;
-  int index = 0;
 
   vars[PRIVATE_LEVEL_VAR] = itostring(level);
 
@@ -440,7 +442,7 @@
   if (!level)
       vars[SECTION_VAR] = prev_section;
 
-  for (i = submenus.begin(); i != submenus.end(); ++index)
+  for (i = submenus.begin(); i != submenus.end();)
   {
     i_next=i;
     i_next++;
@@ -456,8 +458,6 @@
     // is useful when for example the title is "Foo version/456".
     me->vars[BASESECTION_VAR] = newsection.substr(0, 
newsection.rfind(me->vars[TITLE_VAR]) - 1);
 
-    me->vars[PRIVATE_ENTRYINDEX_VAR] = itostring(index);
-
     if (!me->submenus.empty())
         me->postprocess(submenus.size(), level+1, newsection);
 
@@ -468,7 +468,6 @@
         // This is an empty menu (without comand or submenus), so delete it.
         submenus.erase(i);
 
-        index--;
       } else {
         i->second->vars[PRIVATE_ENTRYCOUNT_VAR] = itostring(submenus.size());
         i->second->vars[PRIVATE_LEVEL_VAR] = itostring(level+1);
@@ -476,7 +475,6 @@
     }
     // don't use i here any more, it may have been erased above
     i = i_next; // don't do i++, as *i now may not be defined
-    index++;
   }
 
   generate_hotkeys();


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to