summaryrefslogtreecommitdiffstats
path: root/equipment.c
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2013-01-27 16:40:01 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-01-28 13:17:44 -0800
commit77ece3fccb1a08ef8eea10a9f548bc6a4a3c889e (patch)
tree71dd23e661b88cf690779193a8579a3c6aaa944b /equipment.c
parent32e497b5744ef690e91b4a9f22a63109dde4c7df (diff)
downloadsubsurface-77ece3fccb1a08ef8eea10a9f548bc6a4a3c889e.tar.gz
Clean up gtk combo box handling
This cleans up our handling of combo boxes and all the duplicated completion logic, and simplifies the code. In particular, we get rid of the deprecated GtkComboBoxEntry. While it made some things easier, it made other things harder. Just using GtkComboBox and setting that up correctly ends up being simpler, and also makes the logic work with gtk-3. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'equipment.c')
-rw-r--r--equipment.c85
1 files changed, 27 insertions, 58 deletions
diff --git a/equipment.c b/equipment.c
index 416c2c853..98162c9b9 100644
--- a/equipment.c
+++ b/equipment.c
@@ -119,6 +119,12 @@ static int convert_weight(int grams, double *m)
return decimals;
}
+static void set_cylinder_description(struct cylinder_widget *cylinder, const char *desc)
+{
+ set_active_text(cylinder->description, desc);
+}
+
+
static void set_cylinder_type_spinbuttons(struct cylinder_widget *cylinder, int ml, int mbar)
{
double volume, pressure;
@@ -151,6 +157,11 @@ static void set_cylinder_pressure_spinbuttons(struct cylinder_widget *cylinder,
gtk_spin_button_set_value(GTK_SPIN_BUTTON(cylinder->end), pressure);
}
+static void set_weight_description(struct ws_widget *ws_widget, const char *desc)
+{
+ set_active_text(ws_widget->description, desc);
+}
+
static void set_weight_weight_spinbutton(struct ws_widget *ws_widget, int grams)
{
double weight;
@@ -185,17 +196,16 @@ static gboolean match_desc(GtkTreeModel *model, GtkTreePath *path,
static int get_active_item(GtkComboBox *combo_box, GtkTreeIter *iter, GtkListStore *model)
{
- char *desc;
+ const char *desc;
if (gtk_combo_box_get_active_iter(combo_box, iter))
return TRUE;
- desc = gtk_combo_box_get_active_text(combo_box);
+ desc = get_active_text(combo_box);
found_match = NULL;
gtk_tree_model_foreach(GTK_TREE_MODEL(model), match_desc, (void *)desc);
- g_free(desc);
if (!found_match)
return FALSE;
@@ -232,10 +242,9 @@ static void cylinder_cb(GtkComboBox *combo_box, gpointer data)
*/
if (!cylinder->changed && cyl->type.description) {
int same;
- char *desc = gtk_combo_box_get_active_text(combo_box);
+ const char *desc = get_active_text(combo_box);
same = !strcmp(desc, cyl->type.description);
- g_free(desc);
if (same)
return;
}
@@ -276,10 +285,9 @@ static void weight_cb(GtkComboBox *combo_box, gpointer data)
*/
if (!ws_widget->changed && ws->description) {
int same;
- char *desc = gtk_combo_box_get_active_text(combo_box);
+ const char *desc = get_active_text(combo_box);
same = !strcmp(desc, ws->description);
- g_free(desc);
if (same)
return;
}
@@ -361,12 +369,10 @@ void add_cylinder_description(cylinder_type_t *type)
static void add_cylinder(struct cylinder_widget *cylinder, const char *desc, int ml, int mbar)
{
- GtkTreeIter iter, *match;
+ GtkTreeIter iter;
cylinder->name = desc;
- match = add_cylinder_type(desc, ml, mbar, &iter);
- if (match)
- gtk_combo_box_set_active_iter(cylinder->description, match);
+ add_cylinder_type(desc, ml, mbar, &iter);
}
void add_weightsystem_description(weightsystem_t *weightsystem)
@@ -384,12 +390,10 @@ void add_weightsystem_description(weightsystem_t *weightsystem)
static void add_weightsystem(struct ws_widget *ws_widget, const char *desc, int weight)
{
- GtkTreeIter iter, *match;
+ GtkTreeIter iter;
ws_widget->name = desc;
- match = add_weightsystem_type(desc, weight, &iter);
- if (match)
- gtk_combo_box_set_active_iter(ws_widget->description, match);
+ add_weightsystem_type(desc, weight, &iter);
}
static void show_cylinder(cylinder_t *cyl, struct cylinder_widget *cylinder)
@@ -410,6 +414,7 @@ static void show_cylinder(cylinder_t *cyl, struct cylinder_widget *cylinder)
mbar = cyl->type.workingpressure.mbar;
add_cylinder(cylinder, desc, ml, mbar);
+ set_cylinder_description(cylinder, desc);
set_cylinder_type_spinbuttons(cylinder,
cyl->type.size.mliter, cyl->type.workingpressure.mbar);
set_cylinder_pressure_spinbuttons(cylinder, cyl);
@@ -442,6 +447,7 @@ static void show_weightsystem(weightsystem_t *ws, struct ws_widget *weightsystem
grams = ws->weight.grams;
add_weightsystem(weightsystem_widget, desc, grams);
+ set_weight_description(weightsystem_widget, desc);
set_weight_weight_spinbutton(weightsystem_widget, ws->weight.grams);
}
@@ -679,7 +685,7 @@ static void record_cylinder_changes(cylinder_t *cyl, struct cylinder_widget *cyl
if (!box)
return;
- desc = gtk_combo_box_get_active_text(box);
+ desc = strdup(get_active_text(box));
volume = gtk_spin_button_get_value(cylinder->size);
pressure = gtk_spin_button_get_value(cylinder->pressure);
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cylinder->pressure_button))) {
@@ -711,7 +717,7 @@ static void record_weightsystem_changes(weightsystem_t *ws, struct ws_widget *we
if (!box)
return;
- desc = gtk_combo_box_get_active_text(box);
+ desc = strdup(get_active_text(box));
value = gtk_spin_button_get_value(weightsystem_widget->weight);
if (prefs.units.weight == LBS)
@@ -869,16 +875,6 @@ static void pressure_cb(GtkToggleButton *button, gpointer data)
gtk_widget_set_sensitive(cylinder->end, state);
}
-static gboolean completion_cb(GtkEntryCompletion *widget, GtkTreeModel *model, GtkTreeIter *iter, struct cylinder_widget *cylinder)
-{
- const char *desc;
- unsigned int ml, mbar;
-
- gtk_tree_model_get(model, iter, CYL_DESC, &desc, CYL_SIZE, &ml, CYL_WORKP, &mbar, -1);
- add_cylinder(cylinder, desc, ml, mbar);
- return TRUE;
-}
-
static void cylinder_activate_cb(GtkComboBox *combo_box, gpointer data)
{
struct cylinder_widget *cylinder = data;
@@ -923,8 +919,6 @@ static GtkWidget *labeled_spinbutton(GtkWidget *box, const char *name, double mi
static void cylinder_widget(GtkWidget *vbox, struct cylinder_widget *cylinder, GtkListStore *model)
{
GtkWidget *frame, *hbox;
- GtkEntry *entry;
- GtkEntryCompletion *completion;
GtkWidget *widget;
/*
@@ -936,21 +930,13 @@ static void cylinder_widget(GtkWidget *vbox, struct cylinder_widget *cylinder, G
hbox = gtk_hbox_new(FALSE, 3);
gtk_container_add(GTK_CONTAINER(frame), hbox);
- widget = gtk_combo_box_entry_new_with_model(GTK_TREE_MODEL(model), 0);
+ widget = combo_box_with_model_and_entry(model);
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
cylinder->description = GTK_COMBO_BOX(widget);
g_signal_connect(widget, "changed", G_CALLBACK(cylinder_cb), cylinder);
- entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(widget)));
- g_signal_connect(entry, "activate", G_CALLBACK(cylinder_activate_cb), cylinder);
-
- completion = gtk_entry_completion_new();
- gtk_entry_completion_set_text_column(completion, 0);
- gtk_entry_completion_set_model(completion, GTK_TREE_MODEL(model));
- g_signal_connect(completion, "match-selected", G_CALLBACK(completion_cb), cylinder);
- gtk_entry_set_completion(entry, completion);
- g_object_unref(completion);
+ g_signal_connect(get_entry(GTK_COMBO_BOX(widget)), "activate", G_CALLBACK(cylinder_activate_cb), cylinder);
hbox = gtk_hbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
@@ -991,16 +977,6 @@ static void cylinder_widget(GtkWidget *vbox, struct cylinder_widget *cylinder, G
g_signal_connect(cylinder->gasmix_button, "toggled", G_CALLBACK(gasmix_cb), cylinder);
}
-static gboolean weight_completion_cb(GtkEntryCompletion *widget, GtkTreeModel *model, GtkTreeIter *iter, struct ws_widget *ws_widget)
-{
- const char *desc;
- unsigned int weight;
-
- gtk_tree_model_get(model, iter, WS_DESC, &desc, WS_WEIGHT, &weight, -1);
- add_weightsystem(ws_widget, desc, weight);
- return TRUE;
-}
-
static void weight_activate_cb(GtkComboBox *combo_box, gpointer data)
{
struct ws_widget *ws_widget = data;
@@ -1010,7 +986,6 @@ static void weight_activate_cb(GtkComboBox *combo_box, gpointer data)
static void ws_widget(GtkWidget *vbox, struct ws_widget *ws_widget, GtkListStore *model)
{
GtkWidget *frame, *hbox;
- GtkEntryCompletion *completion;
GtkWidget *widget;
GtkEntry *entry;
@@ -1022,21 +997,15 @@ static void ws_widget(GtkWidget *vbox, struct ws_widget *ws_widget, GtkListStore
hbox = gtk_hbox_new(FALSE, 3);
gtk_container_add(GTK_CONTAINER(frame), hbox);
- widget = gtk_combo_box_entry_new_with_model(GTK_TREE_MODEL(model), 0);
+ widget = combo_box_with_model_and_entry(model);
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
ws_widget->description = GTK_COMBO_BOX(widget);
g_signal_connect(widget, "changed", G_CALLBACK(weight_cb), ws_widget);
- entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(widget)));
+ entry = get_entry(GTK_COMBO_BOX(widget));
g_signal_connect(entry, "activate", G_CALLBACK(weight_activate_cb), ws_widget);
- completion = gtk_entry_completion_new();
- gtk_entry_completion_set_text_column(completion, 0);
- gtk_entry_completion_set_model(completion, GTK_TREE_MODEL(model));
- g_signal_connect(completion, "match-selected", G_CALLBACK(weight_completion_cb), ws_widget);
- gtk_entry_set_completion(entry, completion);
-
hbox = gtk_hbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, TRUE, 0);