tReplace GtkOptionMenu with GtkComboBox - vaccinewars - be a doctor and try to … | |
git clone git://src.adamsgaard.dk/vaccinewars | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 8eb41bfc60d33099eeee913eb270ae28101c5d01 | |
parent 65604cd8b7f5b777ebbb06e0b2c8b8188824ec93 | |
Author: Ben Webb <[email protected]> | |
Date: Wed, 25 Nov 2020 22:53:07 -0800 | |
Replace GtkOptionMenu with GtkComboBox | |
Don't use OptionMenu as this is no longer present | |
in GTK+3; use ComboBox instead. This should be | |
sufficient to allow the entire dopewars code base | |
tto build with GTK+3; closes #53. | |
Diffstat: | |
M src/gui_client/gtk_client.c | 47 ++++++++++++++++++++++-------… | |
1 file changed, 33 insertions(+), 14 deletions(-) | |
--- | |
diff --git a/src/gui_client/gtk_client.c b/src/gui_client/gtk_client.c | |
t@@ -1593,10 +1593,21 @@ static void UpdateDealDialog(void) | |
g_string_free(text, TRUE); | |
} | |
+/* Columns in deal list */ | |
+enum { | |
+ DEAL_COL_NAME = 0, | |
+ DEAL_COL_INDEX = 1, | |
+ DEAL_NUM_COLS | |
+}; | |
+ | |
static void DealSelectCallback(GtkWidget *widget, gpointer data) | |
{ | |
- DealDialog.DrugInd = GPOINTER_TO_INT(data); | |
- UpdateDealDialog(); | |
+ GtkTreeIter iter; | |
+ if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(widget), &iter)) { | |
+ GtkTreeModel *model = gtk_combo_box_get_model(GTK_COMBO_BOX(widget)); | |
+ gtk_tree_model_get(model, &iter, DEAL_COL_INDEX, &DealDialog.DrugInd, -1); | |
+ UpdateDealDialog(); | |
+ } | |
} | |
static void DealOKCallback(GtkWidget *widget, gpointer data) | |
t@@ -1621,8 +1632,11 @@ static void DealOKCallback(GtkWidget *widget, gpointer … | |
void DealDrugs(GtkWidget *widget, gpointer data) | |
{ | |
- GtkWidget *dialog, *label, *hbox, *hbbox, *button, *spinner, *menu, | |
- *optionmenu, *menuitem, *vbox, *hsep, *defbutton; | |
+ GtkWidget *dialog, *label, *hbox, *hbbox, *button, *spinner, *combo_box, | |
+ *vbox, *hsep, *defbutton; | |
+ GtkListStore *store; | |
+ GtkTreeIter iter; | |
+ GtkCellRenderer *renderer; | |
GtkAdjustment *spin_adj; | |
GtkAccelGroup *accel_group; | |
GtkWidget *tv; | |
t@@ -1701,8 +1715,7 @@ void DealDrugs(GtkWidget *widget, gpointer data) | |
label = gtk_label_new(Action); | |
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | |
- optionmenu = gtk_option_menu_new(); | |
- menu = gtk_menu_new(); | |
+ store = gtk_list_store_new(DEAL_NUM_COLS, G_TYPE_STRING, G_TYPE_INT); | |
SelIndex = -1; | |
for (i = 0; i < NumDrug; i++) { | |
if ((data == BT_DROP && Play->Drugs[i].Carried > 0 | |
t@@ -1711,19 +1724,22 @@ void DealDrugs(GtkWidget *widget, gpointer data) | |
&& Play->Drugs[i].Price != 0) | |
|| (data == BT_BUY && Play->Drugs[i].Price != 0)) { | |
dpg_string_printf(text, _("%/DealDrugs drug name/%tde"), Drug[i].Name); | |
- menuitem = gtk_menu_item_new_with_label(text->str); | |
- g_signal_connect(G_OBJECT(menuitem), "activate", | |
- G_CALLBACK(DealSelectCallback), | |
- GINT_TO_POINTER(i)); | |
- gtk_menu_append(GTK_MENU(menu), menuitem); | |
+ gtk_list_store_append(store, &iter); | |
+ gtk_list_store_set(store, &iter, DEAL_COL_NAME, text->str, | |
+ DEAL_COL_INDEX, i, -1); | |
if (DrugInd >= i) { | |
SelIndex++; | |
} | |
} | |
} | |
- gtk_menu_set_active(GTK_MENU(menu), SelIndex); | |
- gtk_option_menu_set_menu(GTK_OPTION_MENU(optionmenu), menu); | |
- gtk_box_pack_start(GTK_BOX(hbox), optionmenu, TRUE, TRUE, 0); | |
+ combo_box = gtk_combo_box_new_with_model(GTK_TREE_MODEL(store)); | |
+ g_object_unref(store); | |
+ renderer = gtk_cell_renderer_text_new(); | |
+ gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo_box), renderer, TRUE); | |
+ gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo_box), renderer, | |
+ "text", DEAL_COL_NAME, NULL); | |
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box), SelIndex); | |
+ gtk_box_pack_start(GTK_BOX(hbox), combo_box, TRUE, TRUE, 0); | |
DealDialog.DrugInd = DrugInd; | |
t@@ -1780,6 +1796,9 @@ void DealDrugs(GtkWidget *widget, gpointer data) | |
gtk_box_pack_start(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0); | |
gtk_container_add(GTK_CONTAINER(dialog), vbox); | |
+ g_signal_connect(G_OBJECT(combo_box), "changed", | |
+ G_CALLBACK(DealSelectCallback), NULL); | |
+ | |
g_string_free(text, TRUE); | |
UpdateDealDialog(); | |