summaryrefslogtreecommitdiff
path: root/src/fe-text
diff options
context:
space:
mode:
authorTimo Sirainen <cras@irssi.org>2001-10-20 19:52:07 +0000
committercras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564>2001-10-20 19:52:07 +0000
commit76c6e9ab831b53e0189d00a81d00e0e956fa7b90 (patch)
treea12001904bf473f2c9b5ca8607d69fe62e06c32a /src/fe-text
parent17f4d6b5de3a2a753091fcea39f63151183b5a30 (diff)
downloadirssi-76c6e9ab831b53e0189d00a81d00e0e956fa7b90.zip
Dependencies finally work correctly in perl libraries (they're each compiled
separately now). Added statusbar code to available to perl, it's now possible to create new statusbar items with perl scripts. statusbar_items_redraw(char *name) can now be used to easily redraw all named statusbar items in screen. Probably several other changes I've already forgotten :) git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1861 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/fe-text')
-rw-r--r--src/fe-text/statusbar-items.c37
-rw-r--r--src/fe-text/statusbar.c53
-rw-r--r--src/fe-text/statusbar.h6
3 files changed, 67 insertions, 29 deletions
diff --git a/src/fe-text/statusbar-items.c b/src/fe-text/statusbar-items.c
index 3cb496c9..7969c5ea 100644
--- a/src/fe-text/statusbar-items.c
+++ b/src/fe-text/statusbar-items.c
@@ -33,7 +33,6 @@
#define MAX_LAG_UNKNOWN_TIME 30
/* activity */
-static GSList *activity_items;
static GList *activity_list;
static GHashTable *input_entries;
@@ -195,7 +194,7 @@ static void sig_statusbar_activity_hilight(WINDOW_REC *window, gpointer oldlevel
activity_list = g_list_remove(activity_list, window);
if (window->data_level != 0)
activity_list = g_list_prepend(activity_list, window);
- statusbar_items_redraw(activity_items);
+ statusbar_items_redraw("act");
return;
}
@@ -204,12 +203,12 @@ static void sig_statusbar_activity_hilight(WINDOW_REC *window, gpointer oldlevel
if (window->data_level == 0) {
/* remove from activity list */
activity_list = g_list_remove(activity_list, window);
- statusbar_items_redraw(activity_items);
+ statusbar_items_redraw("act");
} else if (window->data_level != GPOINTER_TO_INT(oldlevel) ||
window->hilight_color != 0) {
/* different level as last time (or maybe different
hilight color?), just redraw it. */
- statusbar_items_redraw(activity_items);
+ statusbar_items_redraw("act");
}
return;
}
@@ -231,7 +230,7 @@ static void sig_statusbar_activity_hilight(WINDOW_REC *window, gpointer oldlevel
if (tmp == NULL)
activity_list = g_list_append(activity_list, window);
- statusbar_items_redraw(activity_items);
+ statusbar_items_redraw("act");
}
static void sig_statusbar_activity_window_destroyed(WINDOW_REC *window)
@@ -240,12 +239,12 @@ static void sig_statusbar_activity_window_destroyed(WINDOW_REC *window)
if (g_list_find(activity_list, window) != NULL)
activity_list = g_list_remove(activity_list, window);
- statusbar_items_redraw(activity_items);
+ statusbar_items_redraw("act");
}
static void sig_statusbar_activity_updated(void)
{
- statusbar_items_redraw(activity_items);
+ statusbar_items_redraw("act");
}
static void item_more(SBAR_ITEM_REC *item, int get_size_only)
@@ -276,24 +275,14 @@ static void item_input(SBAR_ITEM_REC *item, int get_size_only)
}
}
-static void sig_statusbar_item_created(SBAR_ITEM_REC *item)
-{
- if (item->func == item_act)
- activity_items = g_slist_prepend(activity_items, item);
-}
-
static void sig_statusbar_item_destroyed(SBAR_ITEM_REC *item)
{
- if (item->func == item_act)
- activity_items = g_slist_remove(activity_items, item);
- else {
- GUI_ENTRY_REC *rec;
-
- rec = g_hash_table_lookup(input_entries, item);
- if (rec != NULL) {
- gui_entry_destroy(rec);
- g_hash_table_remove(input_entries, item);
- }
+ GUI_ENTRY_REC *rec;
+
+ rec = g_hash_table_lookup(input_entries, item);
+ if (rec != NULL) {
+ gui_entry_destroy(rec);
+ g_hash_table_remove(input_entries, item);
}
}
@@ -319,7 +308,6 @@ void statusbar_items_init(void)
signal_add("window destroyed", (SIGNAL_FUNC) sig_statusbar_activity_window_destroyed);
signal_add("window refnum changed", (SIGNAL_FUNC) sig_statusbar_activity_updated);
- signal_add("statusbar item created", (SIGNAL_FUNC) sig_statusbar_item_created);
signal_add("statusbar item destroyed", (SIGNAL_FUNC) sig_statusbar_item_destroyed);
}
@@ -334,6 +322,5 @@ void statusbar_items_deinit(void)
g_list_free(activity_list);
activity_list = NULL;
- signal_remove("statusbar item created", (SIGNAL_FUNC) sig_statusbar_item_created);
signal_remove("statusbar item destroyed", (SIGNAL_FUNC) sig_statusbar_item_destroyed);
}
diff --git a/src/fe-text/statusbar.c b/src/fe-text/statusbar.c
index f8f42b0d..ed9a8ea1 100644
--- a/src/fe-text/statusbar.c
+++ b/src/fe-text/statusbar.c
@@ -39,10 +39,11 @@ STATUSBAR_GROUP_REC *active_statusbar_group;
sbar_item_funcs: char *name => STATUSBAR_FUNC func
sbar_signal_items: int signal_id => GSList *(SBAR_ITEM_REC *items)
sbar_item_signals: SBAR_ITEM_REC *item => GSList *(int *signal_ids)
-
+ named_sbar_items: const char *name => GSList *(SBAR_ITEM_REC *items)
*/
static GHashTable *sbar_item_defs, *sbar_item_funcs;
static GHashTable *sbar_signal_items, *sbar_item_signals;
+static GHashTable *named_sbar_items;
void statusbar_item_register(const char *name, const char *value,
STATUSBAR_FUNC func)
@@ -322,6 +323,12 @@ void statusbar_item_redraw(SBAR_ITEM_REC *item)
active_win = old_active_win;
}
+void statusbar_items_redraw(const char *name)
+{
+ g_slist_foreach(g_hash_table_lookup(named_sbar_items, name),
+ (GFunc) statusbar_item_redraw, NULL);
+}
+
static void statusbars_recalc_ypos(STATUSBAR_REC *bar)
{
GSList *tmp, *bar_group;
@@ -532,6 +539,32 @@ void statusbar_destroy(STATUSBAR_REC *bar)
g_free(bar);
}
+void statusbar_recreate_items(STATUSBAR_REC *bar)
+{
+ GSList *tmp;
+
+ /* destroy */
+ while (bar->items != NULL)
+ statusbar_item_destroy(bar->items->data);
+
+ /* create */
+ for (tmp = bar->config->items; tmp != NULL; tmp = tmp->next) {
+ SBAR_ITEM_CONFIG_REC *rec = tmp->data;
+
+ statusbar_item_create(bar, rec);
+ }
+
+ statusbar_redraw(bar);
+}
+
+void statusbars_recreate_items(void)
+{
+ if (active_statusbar_group != NULL) {
+ g_slist_foreach(active_statusbar_group->bars,
+ (GFunc) statusbar_recreate_items, NULL);
+ }
+}
+
STATUSBAR_REC *statusbar_find(STATUSBAR_GROUP_REC *group, const char *name,
MAIN_WINDOW_REC *window)
{
@@ -782,6 +815,7 @@ SBAR_ITEM_REC *statusbar_item_create(STATUSBAR_REC *bar,
SBAR_ITEM_CONFIG_REC *config)
{
SBAR_ITEM_REC *rec;
+ GSList *items;
g_return_val_if_fail(bar != NULL, NULL);
g_return_val_if_fail(config != NULL, NULL);
@@ -797,6 +831,10 @@ SBAR_ITEM_REC *statusbar_item_create(STATUSBAR_REC *bar,
rec->func = statusbar_item_default_func;
statusbar_item_default_signals(rec);
+ items = g_hash_table_lookup(named_sbar_items, config->name);
+ items = g_slist_append(items, rec);
+ g_hash_table_insert(named_sbar_items, config->name, items);
+
signal_emit("statusbar item created", 1, rec);
return rec;
}
@@ -834,6 +872,14 @@ void statusbar_item_destroy(SBAR_ITEM_REC *item)
g_return_if_fail(item != NULL);
item->bar->items = g_slist_remove(item->bar->items, item);
+
+ list = g_hash_table_lookup(named_sbar_items, item->config->name);
+ list = g_slist_remove(list, item);
+ if (list == NULL)
+ g_hash_table_remove(named_sbar_items, item->config->name);
+ else
+ g_hash_table_insert(named_sbar_items, item->config->name, list);
+
signal_emit("statusbar item destroyed", 1, item);
list = g_hash_table_lookup(sbar_item_signals, item);
@@ -943,13 +989,15 @@ void statusbar_init(void)
statusbar_groups = NULL;
active_statusbar_group = NULL;
sbar_item_defs = g_hash_table_new((GHashFunc) g_str_hash,
- (GCompareFunc) g_str_equal);
+ (GCompareFunc) g_str_equal);
sbar_item_funcs = g_hash_table_new((GHashFunc) g_str_hash,
(GCompareFunc) g_str_equal);
sbar_signal_items = g_hash_table_new((GHashFunc) g_direct_hash,
(GCompareFunc) g_direct_equal);
sbar_item_signals = g_hash_table_new((GHashFunc) g_direct_hash,
(GCompareFunc) g_direct_equal);
+ named_sbar_items = g_hash_table_new((GHashFunc) g_str_hash,
+ (GCompareFunc) g_str_equal);
signal_add("terminal resized", (SIGNAL_FUNC) sig_terminal_resized);
signal_add("mainwindow resized", (SIGNAL_FUNC) sig_mainwindow_resized);
@@ -980,6 +1028,7 @@ void statusbar_deinit(void)
g_hash_table_foreach(sbar_item_signals,
(GHFunc) statusbar_item_signal_destroy, NULL);
g_hash_table_destroy(sbar_item_signals);
+ g_hash_table_destroy(named_sbar_items);
signal_remove("terminal resized", (SIGNAL_FUNC) sig_terminal_resized);
signal_remove("mainwindow resized", (SIGNAL_FUNC) sig_mainwindow_resized);
diff --git a/src/fe-text/statusbar.h b/src/fe-text/statusbar.h
index 4a1865db..08e9ba80 100644
--- a/src/fe-text/statusbar.h
+++ b/src/fe-text/statusbar.h
@@ -100,8 +100,10 @@ void statusbar_item_default_handler(SBAR_ITEM_REC *item, int get_size_only,
/* redraw statusbar, NULL = all */
void statusbar_redraw(STATUSBAR_REC *bar);
void statusbar_item_redraw(SBAR_ITEM_REC *item);
-#define statusbar_items_redraw(list) \
- g_slist_foreach(list, (GFunc) statusbar_item_redraw, NULL);
+void statusbar_items_redraw(const char *name);
+
+void statusbar_recreate_items(STATUSBAR_REC *bar);
+void statusbars_recreate_items(void);
void statusbar_init(void);
void statusbar_deinit(void);