From e41adc19e0d43c41e0ccf416e09eaae418af6549 Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Tue, 9 Feb 2010 18:38:22 -0500 Subject: [PATCH] lbxgui: Add interface to clear a combo box. --- src/gui/lbxgui.c | 56 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/src/gui/lbxgui.c b/src/gui/lbxgui.c index 21256e4..2cceca3 100644 --- a/src/gui/lbxgui.c +++ b/src/gui/lbxgui.c @@ -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) -- 2.43.0