From 25fb35d7e149c9d2a1ac44c9270b11780a5bfcda Mon Sep 17 00:00:00 2001
From: mathieui <mathieui@mathieui.net>
Date: Sat, 5 Nov 2011 22:12:03 +0100
Subject: Things related to priority, fixes #2266 (imo)

---
 src/core.py |  4 ++++
 src/tabs.py | 17 ++++++++++++++++-
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/src/core.py b/src/core.py
index 87f27e17..5fcdf8a3 100644
--- a/src/core.py
+++ b/src/core.py
@@ -971,6 +971,8 @@ class Core(object):
                     return tab
         new_tab = tabs.ConversationTab(jid)
         # insert it in the rooms
+        if not focus:
+            new_tab.state = "private"
         self.add_tab(new_tab, focus)
         self.refresh_window()
         return new_tab
@@ -989,6 +991,8 @@ class Core(object):
         own_nick = room.own_nick
         r = Room(complete_jid, own_nick) # PrivateRoom here
         new_tab = tabs.PrivateTab(r)
+        if not focus:
+            new_tab.state = "private"
         # insert it in the tabs
         self.add_tab(new_tab, focus)
         # self.window.new_room(r)
diff --git a/src/tabs.py b/src/tabs.py
index 2e4a8901..a27eeb38 100644
--- a/src/tabs.py
+++ b/src/tabs.py
@@ -64,6 +64,17 @@ STATE_COLORS = {
         'private': lambda: get_theme().COLOR_TAB_PRIVATE,
         'normal': lambda: get_theme().COLOR_TAB_NORMAL,
         'current': lambda: get_theme().COLOR_TAB_CURRENT,
+#        'attention': lambda: get_theme().COLOR_TAB_ATTENTION,
+    }
+
+STATE_PRIORITY = {
+        'normal': -1,
+        'current': -1,
+        'disconnected': 0,
+        'message': 1,
+        'highlight': 2,
+        'private': 2,
+#        'attention': 3
     }
 
 class Tab(object):
@@ -71,7 +82,7 @@ class Tab(object):
     tab_core = None
     def __init__(self):
         self.input = None
-        self.state = 'normal'
+        self._state = 'normal'
         self.need_resize = False
         self.nb = Tab.number
         Tab.number += 1
@@ -109,6 +120,10 @@ class Tab(object):
         if not value in STATE_COLORS:
             log.debug("WARNING: invalid value for tab state")
             return
+        elif STATE_PRIORITY[value] < STATE_PRIORITY[self._state] and \
+                value != 'current':
+            log.debug("WARNING: did not set status because of lower priority")
+            return
         self._state = value
 
     @staticmethod
-- 
cgit v1.2.3