From 40bdfc4d701f7dbe0f0fd097a41ee033679abcb2 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Sun, 24 Mar 2002 19:06:47 +0000 Subject: [PATCH] Input lines are now never destroyed and they're associated to statusbar name, so scripts can now do any statusbar changes without input line being cleared. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@2643 dbcabf3a-b0e7-0310-adc4-f8d773084564 --- src/fe-text/statusbar-items.c | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/src/fe-text/statusbar-items.c b/src/fe-text/statusbar-items.c index fc1d526f..fe74a748 100644 --- a/src/fe-text/statusbar-items.c +++ b/src/fe-text/statusbar-items.c @@ -344,12 +344,13 @@ static void item_input(SBAR_ITEM_REC *item, int get_size_only) { GUI_ENTRY_REC *rec; - rec = g_hash_table_lookup(input_entries, item->bar); + rec = g_hash_table_lookup(input_entries, item->bar->config->name); if (rec == NULL) { rec = gui_entry_create(item->xpos, item->bar->real_ypos, item->size, term_type == TERM_TYPE_UTF8); gui_entry_set_active(rec); - g_hash_table_insert(input_entries, item->bar, rec); + g_hash_table_insert(input_entries, + g_strdup(item->bar->config->name), rec); } if (get_size_only) { @@ -363,17 +364,6 @@ static void item_input(SBAR_ITEM_REC *item, int get_size_only) gui_entry_redraw(rec); /* FIXME: this is only necessary with ^L.. */ } -static void sig_statusbar_destroyed(STATUSBAR_REC *bar) -{ - GUI_ENTRY_REC *rec; - - rec = g_hash_table_lookup(input_entries, bar); - if (rec != NULL) { - gui_entry_destroy(rec); - g_hash_table_remove(input_entries, bar); - } -} - static void read_settings(void) { if (active_entry != NULL) @@ -418,9 +408,8 @@ void statusbar_items_init(void) lag_timeout_tag = g_timeout_add(5000, (GSourceFunc) sig_lag_timeout, NULL); /* input */ - input_entries = g_hash_table_new((GHashFunc) g_direct_hash, - (GCompareFunc) g_direct_equal); - signal_add("statusbar destroyed", (SIGNAL_FUNC) sig_statusbar_destroyed); + input_entries = g_hash_table_new((GHashFunc) g_str_hash, + (GCompareFunc) g_str_equal); read_settings(); signal_add_last("setup changed", (SIGNAL_FUNC) read_settings); @@ -450,8 +439,8 @@ void statusbar_items_deinit(void) g_source_remove(lag_timeout_tag); /* input */ - signal_remove("statusbar destroyed", (SIGNAL_FUNC) sig_statusbar_destroyed); - g_hash_table_destroy(input_entries); + g_hash_table_foreach(input_entries, (GHFunc) g_free, NULL); + g_hash_table_destroy(input_entries); signal_remove("setup changed", (SIGNAL_FUNC) read_settings); }