goptions: let destroy handler free changed options too
[fio.git] / goptions.c
index b7239a5a36a27d69310d131317ac4e77d720a68e..b84a047af5bcc92eb86e5b246ec6389566a88421 100644 (file)
@@ -196,9 +196,7 @@ static void gopt_str_destroy(GtkWidget *w, gpointer data)
 {
        struct gopt_str *s = (struct gopt_str *) data;
 
-       if (flist_empty(&s->gopt.changed_list))
-               free(s);
-
+       free(s);
        gtk_widget_destroy(w);
 }
 
@@ -221,7 +219,7 @@ static struct gopt *gopt_new_str_store(struct gopt_job_view *gjv,
        gopt_mark_index(gjv, &s->gopt, idx, GOPT_STR);
        if (text)
                gtk_entry_set_text(GTK_ENTRY(s->entry), text);
-       gtk_entry_set_editable(GTK_ENTRY(s->entry), 1);
+       gtk_editable_set_editable(GTK_EDITABLE(s->entry), 1);
 
        if (o->def)
                gtk_entry_set_text(GTK_ENTRY(s->entry), o->def);
@@ -251,9 +249,7 @@ static void gopt_combo_destroy(GtkWidget *w, gpointer data)
 {
        struct gopt_combo *c = (struct gopt_combo *) data;
 
-       if (flist_empty(&c->gopt.changed_list))
-               free(c);
-
+       free(c);
        gtk_widget_destroy(w);
 }
 
@@ -272,7 +268,7 @@ static struct gopt_combo *__gopt_new_combo(struct gopt_job_view *gjv,
        else
                label = gtk_label_new(o->lname);
 
-       c->combo = gtk_combo_box_new_text();
+       c->combo = gtk_combo_box_text_new();
        gopt_mark_index(gjv, &c->gopt, idx, type);
        g_signal_connect(G_OBJECT(c->combo), "destroy", G_CALLBACK(gopt_combo_destroy), c);
 
@@ -295,7 +291,7 @@ static struct gopt *gopt_new_combo_str(struct gopt_job_view *gjv,
        i = 0;
        vp = &o->posval[0];
        while (vp->ival) {
-               gtk_combo_box_append_text(GTK_COMBO_BOX(c->combo), vp->ival);
+               gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(c->combo), vp->ival);
                if (o->def && !strcmp(vp->ival, o->def))
                        active = i;
                if (text && !strcmp(vp->ival, text))
@@ -322,7 +318,7 @@ static struct gopt *gopt_new_combo_int(struct gopt_job_view *gjv,
        i = 0;
        vp = &o->posval[0];
        while (vp->ival) {
-               gtk_combo_box_append_text(GTK_COMBO_BOX(c->combo), vp->ival);
+               gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(c->combo), vp->ival);
                if (ip && vp->oval == *ip)
                        active = i;
                vp++;
@@ -409,9 +405,7 @@ static void gopt_int_destroy(GtkWidget *w, gpointer data)
 {
        struct gopt_int *i = (struct gopt_int *) data;
 
-       if (flist_empty(&i->gopt.changed_list))
-               free(i);
-
+       free(i);
        gtk_widget_destroy(w);
 }
 
@@ -517,9 +511,7 @@ static void gopt_bool_destroy(GtkWidget *w, gpointer data)
 {
        struct gopt_bool *b = (struct gopt_bool *) data;
 
-       if (flist_empty(&b->gopt.changed_list))
-               free(b);
-
+       free(b);
        gtk_widget_destroy(w);
 }
 
@@ -603,9 +595,7 @@ static void gopt_range_destroy(GtkWidget *w, gpointer data)
 {
        struct gopt_range *r = (struct gopt_range *) data;
 
-       if (flist_empty(&r->gopt.changed_list))
-               free(r);
-
+       free(r);
        gtk_widget_destroy(w);
 }
 
@@ -664,9 +654,7 @@ static void gopt_str_val_destroy(GtkWidget *w, gpointer data)
 {
        struct gopt_str_val *g = (struct gopt_str_val *) data;
 
-       if (flist_empty(&g->gopt.changed_list))
-               free(g);
-
+       free(g);
        gtk_widget_destroy(w);
 }
 
@@ -734,10 +722,10 @@ static struct gopt *gopt_new_str_val(struct gopt_job_view *gjv,
        g_signal_connect(G_OBJECT(g->spin), "wrapped", G_CALLBACK(gopt_str_val_spin_wrapped), g);
        g_signal_connect(G_OBJECT(g->spin), "changed", G_CALLBACK(gopt_str_val_changed), g);
 
-       g->combo = gtk_combo_box_new_text();
+       g->combo = gtk_combo_box_text_new();
        i = 0;
        while (strlen(postfix[i])) {
-               gtk_combo_box_append_text(GTK_COMBO_BOX(g->combo), postfix[i]);
+               gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(g->combo), postfix[i]);
                i++;
        }
        g->maxindex = i - 1;
@@ -1058,7 +1046,7 @@ static void gopt_handle_combo_str_changed(struct gopt_job_view *gjv,
        if (*p)
                free(*p);
 
-       *p = strdup(gtk_combo_box_get_active_text(GTK_COMBO_BOX(c->combo)));
+       *p = strdup(gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(c->combo)));
 }
 
 static void gopt_handle_combo_int_changed(struct gopt_job_view *gjv,
@@ -1076,7 +1064,6 @@ static void gopt_handle_changed(struct gopt *gopt)
 {
        struct fio_option *o = &fio_options[gopt->opt_index];
        struct gopt_job_view *gjv = gopt->gjv;
-       void *to_free = NULL;
 
        switch (gopt->opt_type) {
        case GOPT_COMBO_INT: {
@@ -1084,7 +1071,6 @@ static void gopt_handle_changed(struct gopt *gopt)
 
                c = container_of(gopt, struct gopt_combo, gopt);
                gopt_handle_combo_int_changed(gjv, c, o);
-               to_free = c;
                break;
                }
        case GOPT_COMBO_STR: {
@@ -1092,7 +1078,6 @@ static void gopt_handle_changed(struct gopt *gopt)
 
                c = container_of(gopt, struct gopt_combo, gopt);
                gopt_handle_combo_str_changed(gjv, c, o);
-               to_free = c;
                break;
                }
        case GOPT_INT: {
@@ -1100,7 +1085,6 @@ static void gopt_handle_changed(struct gopt *gopt)
 
                i = container_of(gopt, struct gopt_int, gopt);
                gopt_handle_int_changed(gjv, i, o);
-               to_free = i;
                break;
                }
        case GOPT_BOOL: {
@@ -1108,7 +1092,6 @@ static void gopt_handle_changed(struct gopt *gopt)
 
                b = container_of(gopt, struct gopt_bool, gopt);
                gopt_handle_bool_changed(gjv, b, o);
-               to_free = b;
                break;
                }
        case GOPT_STR: {
@@ -1116,7 +1099,6 @@ static void gopt_handle_changed(struct gopt *gopt)
 
                s = container_of(gopt, struct gopt_str, gopt);
                gopt_handle_str_changed(gjv, s, o);
-               to_free = s;
                break;
                }
        case GOPT_STR_VAL: {
@@ -1124,7 +1106,6 @@ static void gopt_handle_changed(struct gopt *gopt)
 
                s = container_of(gopt, struct gopt_str_val, gopt);
                gopt_handle_str_val_changed(gjv, s, o);
-               to_free = s;
                break;
                }
        case GOPT_RANGE: {
@@ -1132,7 +1113,6 @@ static void gopt_handle_changed(struct gopt *gopt)
 
                r = container_of(gopt, struct gopt_range, gopt);
                gopt_handle_range_changed(gjv, r, o);
-               to_free = r;
                break;
                }
        case GOPT_STR_MULTI: {
@@ -1140,7 +1120,6 @@ static void gopt_handle_changed(struct gopt *gopt)
 
                m = container_of(gopt, struct gopt_str_multi, gopt);
                gopt_handle_str_multi_changed(gjv, m, o);
-               to_free = m;
                break;
                }
        default:
@@ -1149,7 +1128,6 @@ static void gopt_handle_changed(struct gopt *gopt)
        }
 
        g_object_unref(G_OBJECT(gopt->box));
-       free(to_free);
 }
 
 static void gopt_handle_changed_options(struct gopt_job_view *gjv)
@@ -1189,7 +1167,8 @@ void gopt_get_options_window(GtkWidget *window, struct gfio_client *gc)
        topnotebook = gtk_notebook_new();
        gtk_notebook_set_scrollable(GTK_NOTEBOOK(topnotebook), 1);
        gtk_notebook_popup_enable(GTK_NOTEBOOK(topnotebook));
-       gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), topnotebook, TRUE, TRUE, 5);
+       vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
+       gtk_box_pack_start(GTK_BOX(vbox), topnotebook, TRUE, TRUE, 5);
 
        flist_for_each(entry, &gc->o_list) {
                const char *name;