about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/config/theme.c4
-rw-r--r--src/config/theme.h2
-rw-r--r--src/event/server_events.c7
-rw-r--r--src/ui/console.c2
-rw-r--r--src/ui/rosterwin.c12
-rw-r--r--src/ui/win_types.h2
-rw-r--r--src/ui/window.c2
-rw-r--r--src/window_list.c2
8 files changed, 31 insertions, 2 deletions
diff --git a/src/config/theme.c b/src/config/theme.c
index 0e790eb2..10bbb0af 100644
--- a/src/config/theme.c
+++ b/src/config/theme.c
@@ -142,6 +142,8 @@ theme_init(const char *const theme_name)
     g_hash_table_insert(defaults, strdup("roster.xa.unread"),        strdup("cyan"));
     g_hash_table_insert(defaults, strdup("roster.room"),             strdup("green"));
     g_hash_table_insert(defaults, strdup("roster.room.unread"),      strdup("green"));
+    g_hash_table_insert(defaults, strdup("roster.room.trigger"),     strdup("green"));
+    g_hash_table_insert(defaults, strdup("roster.room.mention"),     strdup("green"));
     g_hash_table_insert(defaults, strdup("occupants.header"),        strdup("yellow"));
 }
 
@@ -765,6 +767,8 @@ theme_attrs(theme_item_t attrs)
     case THEME_ROSTER_XA_UNREAD:        _theme_prep_fgnd("roster.xa.unread",        "cyan",     lookup_str, &bold); break;
     case THEME_ROSTER_ROOM:             _theme_prep_fgnd("roster.room",             "green",    lookup_str, &bold); break;
     case THEME_ROSTER_ROOM_UNREAD:      _theme_prep_fgnd("roster.room.unread",      "green",    lookup_str, &bold); break;
+    case THEME_ROSTER_ROOM_TRIGGER:     _theme_prep_fgnd("roster.room.trigger",     "green",    lookup_str, &bold); break;
+    case THEME_ROSTER_ROOM_MENTION:     _theme_prep_fgnd("roster.room.mention",     "green",    lookup_str, &bold); break;
     case THEME_OCCUPANTS_HEADER:        _theme_prep_fgnd("occupants.header",        "yellow",   lookup_str, &bold); break;
     case THEME_WHITE:                   g_string_append(lookup_str, "white");   bold = FALSE;   break;
     case THEME_WHITE_BOLD:              g_string_append(lookup_str, "white");   bold = TRUE;    break;
diff --git a/src/config/theme.h b/src/config/theme.h
index c26b84f1..e6a72dde 100644
--- a/src/config/theme.h
+++ b/src/config/theme.h
@@ -106,6 +106,8 @@ typedef enum {
     THEME_ROSTER_XA_UNREAD,
     THEME_ROSTER_ROOM,
     THEME_ROSTER_ROOM_UNREAD,
+    THEME_ROSTER_ROOM_TRIGGER,
+    THEME_ROSTER_ROOM_MENTION,
     THEME_RECEIPT_SENT,
     THEME_NONE,
     THEME_WHITE,
diff --git a/src/event/server_events.c b/src/event/server_events.c
index 64f82dc0..57416496 100644
--- a/src/event/server_events.c
+++ b/src/event/server_events.c
@@ -281,6 +281,13 @@ sv_ev_room_message(const char *const room_jid, const char *const nick, const cha
         if (notify) {
             mucwin->notify = TRUE;
         }
+
+        if (mention) {
+            mucwin->unread_mentions = TRUE;
+        }
+        if (triggers) {
+            mucwin->unread_triggers = TRUE;
+        }
     }
 
     if (triggers) {
diff --git a/src/ui/console.c b/src/ui/console.c
index 2be41b14..a5a9800d 100644
--- a/src/ui/console.c
+++ b/src/ui/console.c
@@ -2189,6 +2189,8 @@ cons_theme_properties(void)
     _cons_theme_prop(THEME_ROSTER_OFFLINE_UNREAD, "roster.offline.unread");
     _cons_theme_prop(THEME_ROSTER_ROOM, "roster.room");
     _cons_theme_prop(THEME_ROSTER_ROOM_UNREAD, "roster.room.unread");
+    _cons_theme_prop(THEME_ROSTER_ROOM_TRIGGER, "roster.room.trigger");
+    _cons_theme_prop(THEME_ROSTER_ROOM_MENTION, "roster.room.mention");
 
     _cons_theme_prop(THEME_OCCUPANTS_HEADER, "occupants.header");
 
diff --git a/src/ui/rosterwin.c b/src/ui/rosterwin.c
index d7c8875b..7dfad1e1 100644
--- a/src/ui/rosterwin.c
+++ b/src/ui/rosterwin.c
@@ -479,7 +479,11 @@ _rosterwin_room(ProfLayoutSplit *layout, ProfMucWin *mucwin)
 {
     GString *msg = g_string_new(" ");
 
-    if (mucwin->unread > 0) {
+    if (mucwin->unread_mentions) {
+        wattron(layout->subwin, theme_attrs(THEME_ROSTER_ROOM_MENTION));
+    } else if (mucwin->unread_triggers) {
+        wattron(layout->subwin, theme_attrs(THEME_ROSTER_ROOM_TRIGGER));
+    } else if (mucwin->unread > 0) {
         wattron(layout->subwin, theme_attrs(THEME_ROSTER_ROOM_UNREAD));
     } else {
         wattron(layout->subwin, theme_attrs(THEME_ROSTER_ROOM));
@@ -514,7 +518,11 @@ _rosterwin_room(ProfLayoutSplit *layout, ProfMucWin *mucwin)
     win_sub_print(layout->subwin, msg->str, FALSE, wrap, current_indent);
     g_string_free(msg, TRUE);
 
-    if (mucwin->unread > 0) {
+    if (mucwin->unread_mentions) {
+        wattroff(layout->subwin, theme_attrs(THEME_ROSTER_ROOM_MENTION));
+    } else if (mucwin->unread_triggers) {
+        wattroff(layout->subwin, theme_attrs(THEME_ROSTER_ROOM_TRIGGER));
+    } else if (mucwin->unread > 0) {
         wattroff(layout->subwin, theme_attrs(THEME_ROSTER_ROOM_UNREAD));
     } else {
         wattroff(layout->subwin, theme_attrs(THEME_ROSTER_ROOM));
diff --git a/src/ui/win_types.h b/src/ui/win_types.h
index 94901957..53b5f49a 100644
--- a/src/ui/win_types.h
+++ b/src/ui/win_types.h
@@ -117,6 +117,8 @@ typedef struct prof_muc_win_t {
     ProfWin window;
     char *roomjid;
     int unread;
+    gboolean unread_mentions;
+    gboolean unread_triggers;
     gboolean notify;
     gboolean showjid;
     unsigned long memcheck;
diff --git a/src/ui/window.c b/src/ui/window.c
index d749ac84..8af57cfd 100644
--- a/src/ui/window.c
+++ b/src/ui/window.c
@@ -181,6 +181,8 @@ win_create_muc(const char *const roomjid)
 
     new_win->roomjid = strdup(roomjid);
     new_win->unread = 0;
+    new_win->unread_mentions = FALSE;
+    new_win->unread_triggers = FALSE;
     new_win->notify = FALSE;
     if (prefs_get_boolean(PREF_OCCUPANTS_JID)) {
         new_win->showjid = TRUE;
diff --git a/src/window_list.c b/src/window_list.c
index efb6e331..2acfd0fb 100644
--- a/src/window_list.c
+++ b/src/window_list.c
@@ -228,6 +228,8 @@ wins_set_current_by_num(int i)
             ProfMucWin *mucwin = (ProfMucWin*) window;
             assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK);
             mucwin->unread = 0;
+            mucwin->unread_mentions = FALSE;
+            mucwin->unread_triggers = FALSE;
             mucwin->notify = FALSE;
         } else if (window->type == WIN_PRIVATE) {
             ProfPrivateWin *privatewin = (ProfPrivateWin*) window;