summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/common/hexchat.c42
-rw-r--r--src/common/hexchatc.h1
-rw-r--r--src/fe-gtk/setup.c1
3 files changed, 34 insertions, 10 deletions
diff --git a/src/common/hexchat.c b/src/common/hexchat.c
index f2c79024..3104ec53 100644
--- a/src/common/hexchat.c
+++ b/src/common/hexchat.c
@@ -369,6 +369,37 @@ hexchat_lag_check_update (void)   /* this gets called every 0.5 seconds */
 	return 1;
 }
 
+/* call whenever timeout intervals change */
+void
+hexchat_reinit_timers (void)
+{
+	static int lag_check_update_tag = 0;
+	static int lag_check_tag = 0;
+	static int away_tag = 0;
+
+	if (prefs.hex_notify_timeout)
+	{
+		notify_tag = fe_timeout_add_seconds (prefs.hex_notify_timeout,
+						     notify_checklist, NULL);
+	} else
+	{
+		fe_timeout_remove (notify_tag);
+	}
+
+	fe_timeout_remove (away_tag);
+	away_tag = fe_timeout_add_seconds (prefs.hex_away_timeout, away_check, NULL);
+
+	if (prefs.hex_gui_lagometer)
+	{
+		lag_check_update_tag = fe_timeout_add (500, hexchat_lag_check_update, NULL);
+		lag_check_tag = fe_timeout_add_seconds (30, hexchat_lag_check, NULL);
+	} else
+	{
+		fe_timeout_remove (lag_check_update_tag);
+		fe_timeout_remove (lag_check_tag);
+	}
+}
+
 /* executed when the first irc window opens */
 
 static void
@@ -394,16 +425,7 @@ irc_init (session *sess)
 	plugin_add (sess, NULL, NULL, dbus_plugin_init, NULL, NULL, FALSE);
 #endif
 
-	if (prefs.hex_notify_timeout)
-		notify_tag = fe_timeout_add_seconds (prefs.hex_notify_timeout,
-						     notify_checklist, NULL);
-
-	fe_timeout_add_seconds (prefs.hex_away_timeout, away_check, NULL);
-	if (prefs.hex_gui_lagometer)
-	{
-		fe_timeout_add (500, hexchat_lag_check_update, NULL);
-		fe_timeout_add_seconds (30, hexchat_lag_check, NULL);
-	}
+	hexchat_reinit_timers ();
 
 	if (arg_url != NULL)
 	{
diff --git a/src/common/hexchatc.h b/src/common/hexchatc.h
index 9d603870..ae1c540c 100644
--- a/src/common/hexchatc.h
+++ b/src/common/hexchatc.h
@@ -50,6 +50,7 @@ extern GList *sess_list_by_lastact[];
 session * find_channel (server *serv, char *chan);
 session * find_dialog (server *serv, char *nick);
 session * new_ircwindow (server *serv, char *name, int type, int focus);
+void hexchat_reinit_timers (void);
 void lastact_update (session * sess);
 session * lastact_getfirst (int (*filter) (session *sess));
 int is_session (session * sess);
diff --git a/src/fe-gtk/setup.c b/src/fe-gtk/setup.c
index a934b9d7..eaac870e 100644
--- a/src/fe-gtk/setup.c
+++ b/src/fe-gtk/setup.c
@@ -2132,6 +2132,7 @@ setup_apply_real (int new_pix, int do_ulist, int do_layout, int do_identd)
 
 	mg_apply_setup ();
 	tray_apply_setup ();
+	hexchat_reinit_timers ();
 
 	if (do_layout)
 		menu_change_layout ();