tags 358337 confirmed
thanks
On Wed, Mar 22, 2006 at 09:50:16AM +0000, Silas S. Brown wrote:
> Package: flwm
> Version: 1.00-7
> Severity: minor
> 
> 
> If there is a window with an ampersand (&) in its title,
> then on the window-list menu the & will not be displayed but
> the following letter will be underlined instead.  This is
> probably because the window-list is displayed by some
> function that is normally used to display menus with
> shortcut keys.  (Pressing the letter has no effect however.)

Hello Silas,
I confirm this problem.

FLTK 1.1 documentation say:
    
    const char* Fl_Menu_Item::label() const
    void Fl_Menu_Item::label(const char*)
    void Fl_Menu_Item::label(Fl_Labeltype, const char*)

   This is the title of the item. A NULL here indicates the end of the
   menu (or of a submenu). A '&' in the item will print an underscore
   under the next letter, and if the menu is popped up that letter will
   be a "shortcut" to pick that item. To get a real '&' put two in a row.

I hope the attached patch fix this problem, I will see with upstream.

Thanks for reporting this problem!
-- 
Bill. <[EMAIL PROTECTED]>

Imagine a large red swirl here. 
--- ./Menu.C    2000-09-22 18:53:05.000000000 +0200
+++ ../flwm-1.00/./Menu.C       2006-03-23 22:55:04.000000000 +0100
@@ -20,6 +20,24 @@
 #include <dirent.h>
 #include <sys/stat.h>
 
+static char *double_ampersand(const char *s)
+{
+  long i,l;
+  for(i=0,l=0;s[i];i++)
+    if (s[i]=='&')
+      l++;
+  char *c = new (char [l+i+1]);
+  for(i=0,l=0;s[i];i++)
+  {
+    c[l++]=s[i];
+    if (s[i]=='&')
+      c[l++]=s[i];
+  }
+  c[l]=0;
+  return c;
+}
+
+
 // it is possible for the window to be deleted or withdrawn while
 // the menu is up.  This will detect that case (with reasonable
 // reliability):
@@ -90,8 +108,11 @@
   }
   fl_font(o->font, o->size);
   fl_color((Fl_Color)o->color);
-  const char* l = f->label(); if (!l) l = "unnamed";
+  const char* l = f->label(); 
+  if (!l) l = "unnamed";
+  else l = double_ampersand(f->label());
   fl_draw(l, X+MENU_ICON_W+3, Y, W-MENU_ICON_W-3, H, align);
+  delete l;
 }
 
 static void

Reply via email to