- This patch fixes a bug causing that a content of the comment file is
  replaced with empty string

Signed-off-by: Jakub Filak <[email protected]>
---
 src/gui-wizard-gtk/wizard.c | 33 +++++++++++++++++++++++++++++++--
 1 file changed, 31 insertions(+), 2 deletions(-)

diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c
index a4b3961..0bb6e0e 100644
--- a/src/gui-wizard-gtk/wizard.c
+++ b/src/gui-wizard-gtk/wizard.c
@@ -38,6 +38,11 @@ typedef struct event_gui_data_t
 } event_gui_data_t;
 
 
+/* Using GHashTable as a set of file names */
+/* Each table key has associated an nonzero integer and it allows us */
+/* to write the following statements:                                */
+/*   if(g_hash_table_lookup(g_loaded_texts, FILENAME_COMMENT)) ...   */
+static GHashTable *g_loaded_texts;
 static char *g_event_selected;
 static unsigned g_black_event_count = 0;
 
@@ -394,6 +399,9 @@ void show_error_as_msgbox(const char *msg)
 
 static void load_text_to_text_view(GtkTextView *tv, const char *name)
 {
+    /* Add to set of loaded files */
+    g_hash_table_insert(g_loaded_texts, (gpointer)name, 1);
+
     GtkTextBuffer *tb = gtk_text_view_get_buffer(tv);
 
     const char *str = g_cd ? problem_data_get_content_or_NULL(g_cd, name) : 
NULL;
@@ -433,6 +441,11 @@ static gchar 
*get_malloced_string_from_text_view(GtkTextView *tv)
 
 static void save_text_if_changed(const char *name, const char *new_value)
 {
+    /* a text value can't be change if the file is not loaded */
+    /* returns NULL if the name is not found; otherwise nonzero */
+    if (!g_hash_table_lookup(g_loaded_texts, name))
+        return;
+
     const char *old_value = g_cd ? problem_data_get_content_or_NULL(g_cd, 
name) : "";
     if (!old_value)
         old_value = "";
@@ -2570,8 +2583,24 @@ static void init_pages(void)
     init_page(&pages[7], PAGE_NOT_SHOWN          , ""                         
);
 }
 
+static void destroy_assistant()
+{
+    g_hash_table_destroy(g_loaded_texts);
+    /* this is my paranoia habit; IMHO every programmer has at leas one own 
paranoia habit :) */
+    /* thus I don't think that the following statement is superfluous */
+    g_loaded_texts = NULL;
+}
+
+static void assistant_quit_cb(void *obj, void *data)
+{
+    destroy_assistant();
+    gtk_main_quit();
+}
+
 void create_assistant(void)
 {
+    g_loaded_texts = g_hash_table_new(g_str_hash, g_str_equal);
+
     g_expert_mode = !g_auto_event_list;
 
     g_monospace_font = pango_font_description_from_string("monospace");
@@ -2645,11 +2674,11 @@ void create_assistant(void)
 
     create_details_treeview();
 
-    g_signal_connect(g_btn_close, "clicked", G_CALLBACK(gtk_main_quit), NULL);
+    g_signal_connect(g_btn_close, "clicked", G_CALLBACK(assistant_quit_cb), 
NULL);
     g_signal_connect(g_btn_stop, "clicked", G_CALLBACK(on_btn_cancel_event), 
NULL);
     g_signal_connect(g_btn_next, "clicked", G_CALLBACK(on_next_btn_cb), NULL);
 
-    g_signal_connect(g_wnd_assistant, "destroy", G_CALLBACK(gtk_main_quit), 
NULL);
+    g_signal_connect(g_wnd_assistant, "destroy", 
G_CALLBACK(assistant_quit_cb), NULL);
     g_signal_connect(g_assistant, "switch-page", G_CALLBACK(on_page_prepare), 
NULL);
 
     g_signal_connect(g_tb_approve_bt, "toggled", 
G_CALLBACK(on_bt_approve_toggle), NULL);
-- 
1.7.11.2

Reply via email to