diff options
author | Patrick Griffis <tingping@tingping.se> | 2016-11-11 19:25:46 -0500 |
---|---|---|
committer | Patrick Griffis <tingping@tingping.se> | 2016-11-11 19:27:57 -0500 |
commit | 241dd69b081779a77718763561a779cdffcaf11f (patch) | |
tree | c9ee1ac451506f8b17efbf1b5b98cd97fe19aee5 /src/common | |
parent | 539949973c484f14d40f1886d67ec09df057315c (diff) |
Further tab color improvements
- Combine the three properties into a single one - Finally fully fix the handling with plugins handling events TODO: Look into lastact handling of these, seems wrong
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/hexchat.c | 6 | ||||
-rw-r--r-- | src/common/hexchat.h | 13 | ||||
-rw-r--r-- | src/common/inbound.c | 16 | ||||
-rw-r--r-- | src/common/outbound.c | 2 | ||||
-rw-r--r-- | src/common/text.c | 11 |
5 files changed, 23 insertions, 25 deletions
diff --git a/src/common/hexchat.c b/src/common/hexchat.c index 64fd351e..487c96f4 100644 --- a/src/common/hexchat.c +++ b/src/common/hexchat.c @@ -126,11 +126,11 @@ lastact_update(session *sess) int newidx = LACT_NONE; int dia = (sess->type == SESS_DIALOG); - if (sess->nick_said) + if (sess->tab_state & TAB_STATE_NEW_HILIGHT) newidx = dia? LACT_QUERY_HI: LACT_CHAN_HI; - else if (sess->msg_said) + else if (sess->tab_state & TAB_STATE_NEW_MSG) newidx = dia? LACT_QUERY: LACT_CHAN; - else if (sess->new_data) + else if (sess->tab_state & TAB_STATE_NEW_DATA) newidx = dia? LACT_QUERY: LACT_CHAN_DATA; /* If already first at the right position, just return */ diff --git a/src/common/hexchat.h b/src/common/hexchat.h index 2bdfb656..38a3e830 100644 --- a/src/common/hexchat.h +++ b/src/common/hexchat.h @@ -352,6 +352,13 @@ typedef enum gtk_xtext_search_flags_e { regexp = 16 } gtk_xtext_search_flags; +typedef enum { + TAB_STATE_NONE = 0, + TAB_STATE_NEW_DATA = (1 << 0), + TAB_STATE_NEW_MSG = (1 << 1), + TAB_STATE_NEW_HILIGHT = (1 << 2), +} tab_state_flags; + typedef struct session { /* Per-Channel Alerts */ @@ -406,16 +413,14 @@ typedef struct session int lastact_idx; /* the sess_list_by_lastact[] index of the list we're in. * For valid values, see defines of LACT_*. */ - int new_data:1; /* new data avail? (purple tab) */ - int nick_said:1; /* your nick mentioned? (blue tab) */ - int msg_said:1; /* new msg available? (red tab) */ - int ignore_date:1; int ignore_mode:1; int ignore_names:1; int end_of_names:1; int doing_who:1; /* /who sent on this channel */ int done_away_check:1; /* done checking for away status changes */ + tab_state_flags tab_state; + tab_state_flags last_tab_state; /* before event is handled */ gtk_xtext_search_flags lastlog_flags; void (*scrollback_replay_marklast) (struct session *sess); } session; diff --git a/src/common/inbound.c b/src/common/inbound.c index aa87cfab..fae0fd34 100644 --- a/src/common/inbound.c +++ b/src/common/inbound.c @@ -316,7 +316,7 @@ is_hilight (char *from, char *text, session *sess, server *serv) g_free (text); if (sess != current_tab) { - sess->nick_said = TRUE; + sess->tab_state |= TAB_STATE_NEW_HILIGHT; lastact_update (sess); } return 1; @@ -373,14 +373,9 @@ inbound_action (session *sess, char *chan, char *from, char *ip, char *text, if (sess != current_tab) { if (fromme) - { - sess->msg_said = FALSE; - sess->new_data = TRUE; - } else - { - sess->msg_said = TRUE; - sess->new_data = FALSE; - } + sess->tab_state |= TAB_STATE_NEW_DATA; + else + sess->tab_state |= TAB_STATE_NEW_MSG; lastact_update (sess); } @@ -448,8 +443,7 @@ inbound_chanmsg (server *serv, session *sess, char *chan, char *from, if (sess != current_tab) { - sess->msg_said = TRUE; - sess->new_data = FALSE; + sess->tab_state |= TAB_STATE_NEW_MSG; lastact_update (sess); } diff --git a/src/common/outbound.c b/src/common/outbound.c index 3c717526..6dd42fb4 100644 --- a/src/common/outbound.c +++ b/src/common/outbound.c @@ -631,7 +631,7 @@ cmd_clear (struct session *sess, char *tbuf, char *word[], char *word_eol[]) while (list) { sess = list->data; - if (!sess->nick_said) + if (!(sess->tab_state & TAB_STATE_NEW_HILIGHT)) fe_text_clear (list->data, 0); list = list->next; } diff --git a/src/common/text.c b/src/common/text.c index 799af833..9d7935f2 100644 --- a/src/common/text.c +++ b/src/common/text.c @@ -2008,6 +2008,7 @@ text_emit (int index, session *sess, char *a, char *b, char *c, char *d, { char *word[PDIWORDS]; int i; + tab_state_flags current_state = sess->tab_state; unsigned int stripcolor_args = (chanopt_is_set (prefs.hex_text_stripcolor_msg, sess->text_strip) ? 0xFFFFFFFF : 0); char tbuf[NICKLEN + 4]; @@ -2026,14 +2027,12 @@ text_emit (int index, session *sess, char *a, char *b, char *c, char *d, for (i = 5; i < PDIWORDS; i++) word[i] = "\000"; + /* We want to ignore the tab state if the plugin emits new events + * and restore it if it doesn't eat the current one */ + sess->tab_state = sess->last_tab_state; 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; - } + sess->tab_state = current_state; /* If a plugin's callback executes "/close", 'sess' may be invalid */ if (!is_session (sess)) |