]> git.draconx.ca Git - liblbx.git/commitdiff
lbxgui: Add interface to clear a combo box.
authorNick Bowler <nbowler@draconx.ca>
Tue, 9 Feb 2010 23:38:22 +0000 (18:38 -0500)
committerNick Bowler <nbowler@draconx.ca>
Tue, 9 Feb 2010 23:38:22 +0000 (18:38 -0500)
src/gui/lbxgui.c

index 21256e4f0a6ccab2931a94116bb575160aea4433..2cceca3e60e4d78f5a41e786930c60a82f28030b 100644 (file)
@@ -204,10 +204,12 @@ static int init_framedata(int reset)
 static int img_close(void *handle)
 {
        if (framebuf) {
+               gtk_widget_set_size_request(canvas, -1, -1);
                g_object_unref(framebuf);
                framebuf = NULL;
        }
 
+       memset(palette_internal, 0, sizeof palette_internal);
        lbx_file_close(handle);
        return 0;
 }
@@ -220,6 +222,7 @@ void set_override_data(GtkComboBox *combo)
        LBXfile  *f;
        LBX_IMG  *img;
 
+       memset(palette_override, 0, sizeof palette_override);
        if (!gtk_combo_box_get_active_iter(combo, &iter))
                return;
 
@@ -251,6 +254,7 @@ void set_palette_data(GtkComboBox *combo)
        guint    index;
        LBXfile  *f;
 
+       memset(palette_external, 0, sizeof palette_external);
        if (!gtk_combo_box_get_active_iter(combo, &iter))
                return;
 
@@ -276,6 +280,11 @@ void set_image_data(GtkComboBox *combo)
        guint    index;
        LBXfile  *f;
 
+       if (image) {
+               lbximg_close(image);
+               image = NULL;
+       }
+
        if (!gtk_combo_box_get_active_iter(combo, &iter))
                return;
 
@@ -286,14 +295,8 @@ void set_image_data(GtkComboBox *combo)
 
        f = lbx_file_open(lbx, index);
        if (f) {
-               if (image) {
-                       lbximg_close(image);
-                       image = NULL;
-               }
-
                image = lbximg_open(f, &lbx_arch_fops, img_close);
                if (image) {
-                       memset(palette_internal, 0, sizeof palette_internal);
                        if (lbximg_getpalette(image, palette_internal) == -1) {
                                puts("crap");
                                lbximg_close(image);
@@ -415,11 +418,36 @@ void open_archive(GtkWidget *widget)
        gtk_widget_destroy(GTK_WIDGET(chooser));
 }
 
+static void clear_combobox(GtkEntry *entry, GtkEntryIconPosition pos,
+                           GdkEvent *event, gpointer data)
+{
+       GtkComboBox *combo = data;
+
+       gtk_entry_set_text(entry, "");
+       gtk_combo_box_set_active(combo, -1);
+       init_framedata(0);
+}
+
+static void init_combobox(GtkBuilder *builder, const char *name)
+{
+       GtkComboBox *combo;
+       GtkEntry *entry;
+
+       combo = GTK_COMBO_BOX(gtk_builder_get_object(builder, name));
+       gtk_combo_box_set_model(combo, GTK_TREE_MODEL(archives));
+       gtk_combo_box_entry_set_text_column(GTK_COMBO_BOX_ENTRY(combo), 0);
+
+       entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(combo)));
+       g_signal_connect(G_OBJECT(entry), "icon-press",
+               G_CALLBACK(clear_combobox), combo);
+       gtk_entry_set_icon_from_stock(entry, GTK_ENTRY_ICON_SECONDARY,
+               GTK_STOCK_CLEAR);
+}
+
 static void interface_init(void)
 {
        GtkTreeViewColumn *column;
        GtkCellRenderer *renderer;
-       GtkComboBox *combo;
        GtkTreeView *tree;
 
        renderer = gtk_cell_renderer_text_new();
@@ -431,17 +459,9 @@ static void interface_init(void)
        gtk_tree_view_set_model(tree, GTK_TREE_MODEL(archives));
        gtk_tree_view_append_column(tree, column);
 
-       combo = GTK_COMBO_BOX(gtk_builder_get_object(builder, "palettechooser"));
-       gtk_combo_box_set_model(combo, GTK_TREE_MODEL(archives));
-       gtk_combo_box_entry_set_text_column(GTK_COMBO_BOX_ENTRY(combo), 0);
-
-       combo = GTK_COMBO_BOX(gtk_builder_get_object(builder, "imagechooser"));
-       gtk_combo_box_set_model(combo, GTK_TREE_MODEL(archives));
-       gtk_combo_box_entry_set_text_column(GTK_COMBO_BOX_ENTRY(combo), 0);
-
-       combo = GTK_COMBO_BOX(gtk_builder_get_object(builder, "overchooser"));
-       gtk_combo_box_set_model(combo, GTK_TREE_MODEL(archives));
-       gtk_combo_box_entry_set_text_column(GTK_COMBO_BOX_ENTRY(combo), 0);
+       init_combobox(builder, "palettechooser");
+       init_combobox(builder, "imagechooser");
+       init_combobox(builder, "overchooser");
 }
 
 GdkBitmap *init_bg(GdkDrawable *drawable, GdkGC *gc)