[Geobert] Ctrl+Tab goes to the next tab that has unread messages if there is one
This commit is contained in:
parent
d3a13301e5
commit
35b677cc34
68
src/chat.py
68
src/chat.py
|
@ -302,6 +302,53 @@ class Chat:
|
||||||
return 'chat'
|
return 'chat'
|
||||||
return 'pm'
|
return 'pm'
|
||||||
|
|
||||||
|
def get_nth_jid(self, page_number = None):
|
||||||
|
notebook = self.notebook
|
||||||
|
if page_number == None:
|
||||||
|
page_number = notebook.get_current_page()
|
||||||
|
nth_child = notebook.get_nth_page(page_number)
|
||||||
|
nth_jid = ''
|
||||||
|
for jid in self.xmls:
|
||||||
|
if self.childs[jid] == nth_child:
|
||||||
|
nth_jid = jid
|
||||||
|
break
|
||||||
|
return nth_jid
|
||||||
|
|
||||||
|
def move_to_next_unread_tab(self, forward):
|
||||||
|
ind = self.notebook.get_current_page()
|
||||||
|
current = ind
|
||||||
|
found = False
|
||||||
|
# loop until finding an unread tab or having done a complete cycle
|
||||||
|
while True:
|
||||||
|
if forward == True: # look for the first unread tab on the right
|
||||||
|
ind = ind + 1
|
||||||
|
if ind >= self.notebook.get_n_pages():
|
||||||
|
ind = 0
|
||||||
|
else: # look for the first unread tab on the right
|
||||||
|
ind = ind - 1
|
||||||
|
if ind < 0:
|
||||||
|
ind = self.notebook.get_n_pages() - 1
|
||||||
|
if ind == current:
|
||||||
|
break # a complete cycle without finding an unread tab
|
||||||
|
jid = self.get_nth_jid(ind)
|
||||||
|
if self.nb_unread[jid] > 0:
|
||||||
|
found = True
|
||||||
|
break # found
|
||||||
|
if found:
|
||||||
|
self.notebook.set_current_page(ind)
|
||||||
|
else: # not found
|
||||||
|
if forward: # CTRL + TAB
|
||||||
|
if current < (self.notebook.get_n_pages() - 1):
|
||||||
|
self.notebook.next_page()
|
||||||
|
else: # traverse for ever (eg. don't stop at last tab)
|
||||||
|
self.notebook.set_current_page(0)
|
||||||
|
else: # CTRL + SHIFT + TAB
|
||||||
|
if current > 0:
|
||||||
|
self.notebook.prev_page()
|
||||||
|
else: # traverse for ever (eg. don't stop at first tab)
|
||||||
|
self.notebook.set_current_page(
|
||||||
|
self.notebook.get_n_pages() - 1)
|
||||||
|
|
||||||
def on_window_destroy(self, widget, kind): #kind is 'chats' or 'gc'
|
def on_window_destroy(self, widget, kind): #kind is 'chats' or 'gc'
|
||||||
'''clean gajim.interface.instances[self.account][kind]'''
|
'''clean gajim.interface.instances[self.account][kind]'''
|
||||||
for jid in self.xmls:
|
for jid in self.xmls:
|
||||||
|
@ -321,14 +368,7 @@ class Chat:
|
||||||
del windows['tabbed']
|
del windows['tabbed']
|
||||||
|
|
||||||
def get_active_jid(self):
|
def get_active_jid(self):
|
||||||
notebook = self.notebook
|
return self.get_nth_jid()
|
||||||
active_child = notebook.get_nth_page(notebook.get_current_page())
|
|
||||||
active_jid = ''
|
|
||||||
for jid in self.xmls:
|
|
||||||
if self.childs[jid] == active_child:
|
|
||||||
active_jid = jid
|
|
||||||
break
|
|
||||||
return active_jid
|
|
||||||
|
|
||||||
def on_close_button_clicked(self, button, jid):
|
def on_close_button_clicked(self, button, jid):
|
||||||
'''When close button is pressed: close a tab'''
|
'''When close button is pressed: close a tab'''
|
||||||
|
@ -908,18 +948,10 @@ class Chat:
|
||||||
gtk.SCROLL_PAGE_BACKWARD, False)
|
gtk.SCROLL_PAGE_BACKWARD, False)
|
||||||
elif event.keyval == gtk.keysyms.ISO_Left_Tab: # SHIFT + TAB
|
elif event.keyval == gtk.keysyms.ISO_Left_Tab: # SHIFT + TAB
|
||||||
if event.state & gtk.gdk.CONTROL_MASK: # CTRL + SHIFT + TAB
|
if event.state & gtk.gdk.CONTROL_MASK: # CTRL + SHIFT + TAB
|
||||||
current = self.notebook.get_current_page()
|
self.move_to_next_unread_tab(False)
|
||||||
if current > 0:
|
|
||||||
self.notebook.prev_page()
|
|
||||||
else: # traverse for ever (eg. don't stop at first tab)
|
|
||||||
self.notebook.set_current_page(self.notebook.get_n_pages()-1)
|
|
||||||
elif event.keyval == gtk.keysyms.Tab: # TAB
|
elif event.keyval == gtk.keysyms.Tab: # TAB
|
||||||
if event.state & gtk.gdk.CONTROL_MASK: # CTRL + TAB
|
if event.state & gtk.gdk.CONTROL_MASK: # CTRL + TAB
|
||||||
current = self.notebook.get_current_page()
|
self.move_to_next_unread_tab(True)
|
||||||
if current < (self.notebook.get_n_pages()-1):
|
|
||||||
self.notebook.next_page()
|
|
||||||
else: # traverse for ever (eg. don't stop at last tab)
|
|
||||||
self.notebook.set_current_page(0)
|
|
||||||
elif (event.keyval == gtk.keysyms.l or event.keyval == gtk.keysyms.L) \
|
elif (event.keyval == gtk.keysyms.l or event.keyval == gtk.keysyms.L) \
|
||||||
and event.state & gtk.gdk.CONTROL_MASK: # CTRL + L
|
and event.state & gtk.gdk.CONTROL_MASK: # CTRL + L
|
||||||
conv_textview = self.conversation_textviews[jid]
|
conv_textview = self.conversation_textviews[jid]
|
||||||
|
|
Loading…
Reference in New Issue