summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorPatrick Griffis <tingping@tingping.se>2016-11-11 01:25:12 -0500
committerPatrick Griffis <tingping@tingping.se>2016-11-11 01:25:12 -0500
commit539949973c484f14d40f1886d67ec09df057315c (patch)
tree823b900e1cb28b61a567a63a8f7a507767bcaebd
parente7c88e0f83f40f9d020aa7d2783e95dff55f323f (diff)
More fixes for tab color handling with plugins
Part 2 of 03767ee0f9826222

So how the colors work should be pretty straight forward:

- A message comes in and is handled, this sets the state flags:
    nick_said, msg_said, new_data. These map to tab colors.
- This state is reset under one of these conditions:
  - It is commited to the UI when actually printed on unfocused tab
  - Event is interupted by a plugin hook
  - The tab focus is changed
-rw-r--r--src/common/text.c7
-rw-r--r--src/fe-gtk/fe-gtk.c16
-rw-r--r--src/fe-gtk/maingui.c15
3 files changed, 18 insertions, 20 deletions
diff --git a/src/common/text.c b/src/common/text.c
index e491b512..799af833 100644
--- a/src/common/text.c
+++ b/src/common/text.c
@@ -2027,7 +2027,13 @@ text_emit (int index, session *sess, char *a, char *b, char *c, char *d,
 		word[i] = "\000";
 
 	if (plugin_emit_print (sess, word, timestamp))
+	{
+		/* Reset the state that never printed */
+		sess->nick_said = FALSE;
+		sess->msg_said = FALSE;
+		sess->new_data = FALSE;
 		return;
+	}
 
 	/* If a plugin's callback executes "/close", 'sess' may be invalid */
 	if (!is_session (sess))
@@ -2061,7 +2067,6 @@ text_emit (int index, session *sess, char *a, char *b, char *c, char *d,
 	/* ===Highlighted message=== */
 	case XP_TE_HCHANACTION:
 	case XP_TE_HCHANMSG:
-		fe_set_tab_color (sess, 3);
 		if (chanopt_is_set (prefs.hex_input_beep_hilight, sess->alert_beep) && (!prefs.hex_away_omit_alerts || !sess->server->is_away))
 			sound_beep (sess);
 		if (chanopt_is_set (prefs.hex_input_flash_hilight, sess->alert_taskbar) && (!prefs.hex_away_omit_alerts || !sess->server->is_away))
diff --git a/src/fe-gtk/fe-gtk.c b/src/fe-gtk/fe-gtk.c
index 6fed4fe8..ef9f3ab3 100644
--- a/src/fe-gtk/fe-gtk.c
+++ b/src/fe-gtk/fe-gtk.c
@@ -660,21 +660,21 @@ fe_print_text (struct session *sess, char *text, time_t stamp,
 {
 	PrintTextRaw (sess->res->buffer, (unsigned char *)text, prefs.hex_text_indent, stamp);
 
-	if (no_activity || sess == current_tab || !sess->gui->is_tab)
+	if (no_activity || !sess->gui->is_tab)
 		return;
 
-	if (sess->nick_said)
+	if (sess == current_tab)
+	{
+		sess->nick_said = FALSE;
+		sess->msg_said = FALSE;
+		sess->new_data = FALSE;
+	}
+	else if (sess->nick_said)
 		fe_set_tab_color (sess, 3);
 	else if (sess->msg_said)
 		fe_set_tab_color (sess, 2);
 	else
 		fe_set_tab_color (sess, 1);
-
-	if (!sess->new_data && !sess->nick_said)
-	{
-		sess->new_data = TRUE;
-		lastact_update (sess);
-	}
 }
 
 void
diff --git a/src/fe-gtk/maingui.c b/src/fe-gtk/maingui.c
index ab4a8156..572f30e4 100644
--- a/src/fe-gtk/maingui.c
+++ b/src/fe-gtk/maingui.c
@@ -540,17 +540,10 @@ mg_focus (session *sess)
 		sess->server->server_session = sess;
 	}
 
-	if (sess->new_data || sess->nick_said || sess->msg_said)
-	{
-		sess->nick_said = FALSE;
-		sess->msg_said = FALSE;
-		sess->new_data = FALSE;
-		lastact_update (sess);
-		/* when called via mg_changui_new, is_tab might be true, but
-			sess->res->tab is still NULL. */
-		if (sess->res->tab)
-			fe_set_tab_color (sess, 0);
-	}
+	/* when called via mg_changui_new, is_tab might be true, but
+		sess->res->tab is still NULL. */
+	if (sess->res->tab)
+		fe_set_tab_color (sess, 0);
 }
 
 static int