+ xsane_option_menu_new_with_pixmap(xsane.xsane_window->window, GTK_BOX(parent), image_xpm, desc, str_list, str, opt->constraint_type, &resolution_widget, well_known_option,
# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=487475
diff -urw ../xsane-0.996.orig/src/xsane-back-gtk.c ./src/xsane-back-gtk.c
--- ../xsane-0.996.orig/src/xsane-back-gtk.c 2007-08-13 09:49:34.000000000 +0200
+++ ./src/xsane-back-gtk.c 2010-05-01 20:48:41.000000000 +0200
/* ----------------------------------------------------------------------------------------------------------------- */
void xsane_back_gtk_option_menu_new(GtkWidget *parent, const char *name, char *str_list[],
- const char *val, DialogElement *elem,
+ const char *val, SANE_Constraint_Type constraint_type, DialogElement *elem,
GtkTooltips *tooltips, const char *desc, SANE_Int settable)
GtkWidget *hbox, *label, *option_menu, *menu, *item;
DBG(DBG_proc, "xsane_back_gtk_option_menu_new(%s)\n", name);
menu_items = malloc((num_items + 1) * sizeof(menu_items[0]));
+ dup_string = (constraint_type == SANE_CONSTRAINT_STRING_LIST);
for (i = 0; i < num_items; ++i)
- item = gtk_menu_item_new_with_label(_BGT(str_list[i]));
+ strval = strdup(str_list[i]);
+ item = gtk_menu_item_new_with_label(_BGT(strval));
gtk_container_add(GTK_CONTAINER(menu), item);
g_signal_connect(GTK_OBJECT(item), "activate", (GtkSignalFunc) xsane_back_gtk_option_menu_callback, menu_items + i);
- menu_items[i].label = str_list[i];
+ menu_items[i].label = strval;
menu_items[i].elem = elem;
xsane.standard_hbox = NULL;
xsane.advanced_hbox = NULL;
- /* free the menu labels of integer/fix-point word-lists: */
+ /* free the menu labels */
for (i = 0; i < xsane.num_elements; ++i)
if (xsane.element[i].menu)
opt = xsane_get_option_descriptor(xsane.dev, i);
elem = xsane.element + i;
- if (opt->type != SANE_TYPE_STRING)
+ if ((opt->type != SANE_TYPE_STRING)
+ || (opt->constraint_type == SANE_CONSTRAINT_STRING_LIST))
for (j = 0; j < elem->menu_size; ++j)