GTK 3 prep: use GtkComboBox for drop-down lists.

The previous GtkOptionMenu was long since deprecated.
This commit is contained in:
Simon Tatham
2015-10-03 12:27:58 +01:00
parent 71c7bcd981
commit 2c1b00086d

55
gtk.c
View File

@ -1436,11 +1436,11 @@ static void button_toggled(GtkToggleButton *tb, gpointer data)
i->ival = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(tb)); i->ival = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(tb));
} }
static void droplist_sel(GtkMenuItem *item, gpointer data) static void droplist_sel(GtkComboBox *combo, gpointer data)
{ {
config_item *i = (config_item *)data; config_item *i = (config_item *)data;
i->ival = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(item), "user-data")); i->ival = gtk_combo_box_get_active(combo);
} }
static int get_config(frontend *fe, int which) static int get_config(frontend *fe, int which)
@ -1532,7 +1532,7 @@ static int get_config(frontend *fe, int which)
case C_CHOICES: case C_CHOICES:
/* /*
* Drop-down list (GtkOptionMenu). * Drop-down list (GtkComboBox).
*/ */
w = gtk_label_new(i->name); w = gtk_label_new(i->name);
@ -1543,24 +1543,17 @@ static int get_config(frontend *fe, int which)
3, 3); 3, 3);
gtk_widget_show(w); gtk_widget_show(w);
w = gtk_option_menu_new(); {
gtk_table_attach(GTK_TABLE(table), w, 1, 2, y, y+1, int c;
GTK_EXPAND | GTK_SHRINK | GTK_FILL,
GTK_EXPAND | GTK_SHRINK | GTK_FILL,
3, 3);
gtk_widget_show(w);
{
int c, val;
char *p, *q, *name; char *p, *q, *name;
GtkWidget *menuitem; GtkListStore *model;
GtkWidget *menu = gtk_menu_new(); GtkCellRenderer *cr;
GtkTreeIter iter;
gtk_option_menu_set_menu(GTK_OPTION_MENU(w), menu); model = gtk_list_store_new(1, G_TYPE_STRING);
c = *i->sval; c = *i->sval;
p = i->sval+1; p = i->sval+1;
val = 0;
while (*p) { while (*p) {
q = p; q = p;
@ -1573,22 +1566,30 @@ static int get_config(frontend *fe, int which)
if (*q) q++; /* eat delimiter */ if (*q) q++; /* eat delimiter */
menuitem = gtk_menu_item_new_with_label(name); gtk_list_store_append(model, &iter);
gtk_container_add(GTK_CONTAINER(menu), menuitem); gtk_list_store_set(model, &iter, 0, name, -1);
g_object_set_data(G_OBJECT(menuitem), "user-data",
GINT_TO_POINTER(val));
g_signal_connect(G_OBJECT(menuitem), "activate",
G_CALLBACK(droplist_sel), i);
gtk_widget_show(menuitem);
val++;
p = q; p = q;
} }
gtk_option_menu_set_history(GTK_OPTION_MENU(w), i->ival); w = gtk_combo_box_new_with_model(GTK_TREE_MODEL(model));
}
gtk_combo_box_set_active(GTK_COMBO_BOX(w), i->ival);
cr = gtk_cell_renderer_text_new();
gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(w), cr, TRUE);
gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(w), cr,
"text", 0, NULL);
g_signal_connect(G_OBJECT(w), "changed",
G_CALLBACK(droplist_sel), i);
}
gtk_table_attach(GTK_TABLE(table), w, 1, 2, y, y+1,
GTK_EXPAND | GTK_SHRINK | GTK_FILL,
GTK_EXPAND | GTK_SHRINK | GTK_FILL,
3, 3);
gtk_widget_show(w);
break; break;
} }