[XForms] Question #2: Relying on menu subitem IDs after fl_delete_menu_item().

Jason Cipriani jason.cipriani at gmail.com
Fri Jul 4 13:25:31 EDT 2008

To subscribers of the xforms list

On Fri, Jul 4, 2008 at 6:57 AM, Jens Thoms Toerring <jt at toerring.de> wrote:
> To get around that you have to change the file lib/menu.c.
> I append a version for 1.0.90 that hopefully works but I
> didn't test the changes with that version, just my newer
> one. Then add to lib/private/menu.h

Thanks a lot for digging into this. I've tested your changes and so
far everything seems to be working well, I can remove items and use
fl_get_menu_value to get the correct ID.

> This should give you a new function named fl_get_menu_value()
> that expects the menu object and the item index as returned
> by fl_get_menu(). If you now create the menu items in fdesign
> with texts like

One problem that I found is fl_delete_menu_item refers to the item
index, not the value. This can make deleting items pretty tricky. To
that end I've added a function to go the other way, from value to
item. It works for me although I may have missed some things
(specifically, I'm not sure if the ISPUP thing is right -- and also,
is the item index really 1-based?), I tried to make it the inverse of
fl_get_menu_value. Note that if multiple items have the same value,
this returns the first item with that value. Returns -1 if value is
not found.

=== menu.c ===

fl_get_menu_item_from_value( FL_OBJECT * ob,
			     int         value )

  FL_MENU_SPEC *sp = ob->spec;
  int item;

  if( ISPUP( sp ) )
    return value;

  for( item = 1; item <= sp->numitems; ++ item )
    if (sp->mval[item] == value)
      return item;

  return -1;


=== menu.h ===

FL_EXPORT int fl_get_menu_item_from_value(
               FL_OBJECT * ob,
               int         value

To unsubscribe, send any message to
xforms-leave at bob.usuhs.mil or see: 
List Archive: http://bob.usuhs.mil/pipermail/xforms and
Development: http://savannah.nongnu.org/files/?group=xforms

More information about the Xforms mailing list