summaryrefslogtreecommitdiff
path: root/src/fe-common/irc/fe-netsplit.c
diff options
context:
space:
mode:
authorTimo Sirainen <cras@irssi.org>2000-11-30 01:44:07 +0000
committercras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564>2000-11-30 01:44:07 +0000
commit6d88345f30c33fcda9fe792cbe9025096f4a3c01 (patch)
tree158662a81a8061da16f09df66a072678a82fda4c /src/fe-common/irc/fe-netsplit.c
parent18a918791ea8d8d781e688bf262b3d53e63d7607 (diff)
downloadirssi-6d88345f30c33fcda9fe792cbe9025096f4a3c01.zip
While waiting for more netsplits/netjoins, if anything else is printed
to screen, print the current netsplit/netjoin messages before that text. not tested, hope it works ;) git-svn-id: http://svn.irssi.org/repos/irssi/trunk@900 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/fe-common/irc/fe-netsplit.c')
-rw-r--r--src/fe-common/irc/fe-netsplit.c46
1 files changed, 35 insertions, 11 deletions
diff --git a/src/fe-common/irc/fe-netsplit.c b/src/fe-common/irc/fe-netsplit.c
index 9b2312d7..9a4b9446 100644
--- a/src/fe-common/irc/fe-netsplit.c
+++ b/src/fe-common/irc/fe-netsplit.c
@@ -140,7 +140,7 @@ static void get_server_splits(void *key, NETSPLIT_REC *split,
}
}
-static void print_splits(IRC_SERVER_REC *server, TEMP_SPLIT_REC *rec)
+static void print_server_splits(IRC_SERVER_REC *server, TEMP_SPLIT_REC *rec)
{
GString *destservers;
char *sourceserver;
@@ -191,17 +191,10 @@ static void temp_split_chan_free(TEMP_SPLIT_CHAN_REC *rec)
g_free(rec);
}
-static int check_server_splits(IRC_SERVER_REC *server)
+static void print_splits(IRC_SERVER_REC *server)
{
TEMP_SPLIT_REC temp;
GSList *servers;
- time_t last;
-
- g_return_val_if_fail(IS_IRC_SERVER(server), FALSE);
-
- last = get_last_split(server);
- if (time(NULL)-last < SPLIT_WAIT_TIME)
- return FALSE;
servers = g_slist_copy(server->split_servers);
while (servers != NULL) {
@@ -215,17 +208,43 @@ static int check_server_splits(IRC_SERVER_REC *server)
g_hash_table_foreach(server->splits,
(GHFunc) get_server_splits, &temp);
- print_splits(server, &temp);
+ print_server_splits(server, &temp);
g_slist_foreach(temp.channels,
(GFunc) temp_split_chan_free, NULL);
g_slist_free(temp.servers);
g_slist_free(temp.channels);
}
+}
+
+static int check_server_splits(IRC_SERVER_REC *server)
+{
+ time_t last;
+
+ g_return_val_if_fail(IS_IRC_SERVER(server), FALSE);
+ last = get_last_split(server);
+ if (time(NULL)-last < SPLIT_WAIT_TIME)
+ return FALSE;
+
+ print_splits(server);
return TRUE;
}
+/* something is going to be printed to screen, print our current netsplit
+ message before it. */
+static void sig_print_starting(void)
+{
+ GSList *tmp;
+
+ for (tmp = servers; tmp != NULL; tmp = tmp->next) {
+ IRC_SERVER_REC *rec = tmp->data;
+
+ if (IS_IRC_SERVER(rec) && rec->split_servers != NULL)
+ print_splits(rec);
+ }
+}
+
static int sig_check_splits(void)
{
GSList *tmp;
@@ -246,6 +265,7 @@ static int sig_check_splits(void)
if (stop) {
g_source_remove(split_tag);
+ signal_remove("print starting", (SIGNAL_FUNC) sig_print_starting);
split_tag = -1;
}
return 1;
@@ -257,6 +277,7 @@ static void sig_netsplit_servers(void)
split_tag = g_timeout_add(1000,
(GSourceFunc) sig_check_splits,
NULL);
+ signal_add("print starting", (SIGNAL_FUNC) sig_print_starting);
}
}
@@ -308,7 +329,10 @@ void fe_netsplit_init(void)
void fe_netsplit_deinit(void)
{
- if (split_tag != -1) g_source_remove(split_tag);
+ if (split_tag != -1) {
+ g_source_remove(split_tag);
+ signal_remove("print starting", (SIGNAL_FUNC) sig_print_starting);
+ }
signal_remove("netsplit add", (SIGNAL_FUNC) sig_netsplit_servers);
signal_remove("setup changed", (SIGNAL_FUNC) read_settings);