print submenus only when more than one account is connected, not when more than one is configured, sort
some menus in systray->chat
This commit is contained in:
parent
8502d69f8d
commit
f2355f9e6c
3 changed files with 91 additions and 90 deletions
|
@ -460,18 +460,17 @@ def get_xmpp_show(show):
|
||||||
return None
|
return None
|
||||||
return show
|
return show
|
||||||
|
|
||||||
def one_account_connected(account_list = None):
|
def connected_accounts(account_list = None):
|
||||||
'''returns True if at least one account is connected, else False'''
|
'''returns the number of connected accounts'''
|
||||||
|
connected_accounts = 0
|
||||||
if account_list is None:
|
if account_list is None:
|
||||||
accounts = gajim.connections.keys()
|
accounts = gajim.connections.keys()
|
||||||
else:
|
else:
|
||||||
accounts = account_list
|
accounts = account_list
|
||||||
one_connected = False
|
|
||||||
for acct in accounts:
|
for acct in accounts:
|
||||||
if gajim.connections[acct].connected > 1:
|
if gajim.connections[acct].connected > 1:
|
||||||
one_connected = True
|
connected_accounts = connected_accounts + 1
|
||||||
break
|
return connected_accounts
|
||||||
return one_connected
|
|
||||||
|
|
||||||
def get_output_of_command(command):
|
def get_output_of_command(command):
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -664,14 +664,11 @@ class RosterWindow:
|
||||||
# join gc
|
# join gc
|
||||||
sub_menu = gtk.Menu()
|
sub_menu = gtk.Menu()
|
||||||
join_gc_menuitem.set_submenu(sub_menu)
|
join_gc_menuitem.set_submenu(sub_menu)
|
||||||
at_least_one_account_connected = False
|
connected_accounts = helpers.connected_accounts()
|
||||||
multiple_accounts = len(gajim.connections) >= 2 #FIXME: stop using bool var here
|
|
||||||
for account in gajim.connections:
|
for account in gajim.connections:
|
||||||
if gajim.connections[account].connected <= 1: # if offline or connecting
|
if gajim.connections[account].connected <= 1: # if offline or connecting
|
||||||
continue
|
continue
|
||||||
if not at_least_one_account_connected:
|
if connected_accounts > 1:
|
||||||
at_least_one_account_connected = True
|
|
||||||
if multiple_accounts:
|
|
||||||
label = gtk.Label()
|
label = gtk.Label()
|
||||||
label.set_markup('<u>' + account.upper() +'</u>')
|
label.set_markup('<u>' + account.upper() +'</u>')
|
||||||
label.set_use_underline(False)
|
label.set_use_underline(False)
|
||||||
|
@ -690,7 +687,7 @@ class RosterWindow:
|
||||||
account, bookmark)
|
account, bookmark)
|
||||||
sub_menu.append(item)
|
sub_menu.append(item)
|
||||||
|
|
||||||
if at_least_one_account_connected: #FIXME: move this below where we do this check
|
if connected_accounts > 0: #FIXME: move this below where we do this check
|
||||||
#and make sure it works
|
#and make sure it works
|
||||||
newitem = gtk.SeparatorMenuItem() # separator
|
newitem = gtk.SeparatorMenuItem() # separator
|
||||||
sub_menu.append(newitem)
|
sub_menu.append(newitem)
|
||||||
|
@ -703,7 +700,7 @@ class RosterWindow:
|
||||||
sub_menu.append(newitem)
|
sub_menu.append(newitem)
|
||||||
sub_menu.show_all()
|
sub_menu.show_all()
|
||||||
|
|
||||||
if multiple_accounts: # 2 or more accounts? make submenus
|
if connected_accounts > 1: # 2 or more accounts? make submenus
|
||||||
#add
|
#add
|
||||||
sub_menu = gtk.Menu()
|
sub_menu = gtk.Menu()
|
||||||
for account in gajim.connections:
|
for account in gajim.connections:
|
||||||
|
@ -744,7 +741,42 @@ class RosterWindow:
|
||||||
new_message_menuitem.set_submenu(sub_menu)
|
new_message_menuitem.set_submenu(sub_menu)
|
||||||
sub_menu.show_all()
|
sub_menu.show_all()
|
||||||
|
|
||||||
#Advanced Actions
|
else:
|
||||||
|
if connected_accounts == 1: # user has only one account
|
||||||
|
for account in gajim.connections:
|
||||||
|
if gajim.connections[account].connected > 1: # THE connected account
|
||||||
|
#add
|
||||||
|
if not self.add_new_contact_handler_id:
|
||||||
|
self.add_new_contact_handler_id = add_new_contact_menuitem.connect(
|
||||||
|
'activate', self.on_add_new_contact, account)
|
||||||
|
#disco
|
||||||
|
if not self.service_disco_handler_id:
|
||||||
|
self.service_disco_handler_id = service_disco_menuitem.connect(
|
||||||
|
'activate', self.on_service_disco_menuitem_activate, account)
|
||||||
|
#new msg
|
||||||
|
if not self.new_message_menuitem_handler_id:
|
||||||
|
self.new_message_menuitem_handler_id = new_message_menuitem.\
|
||||||
|
connect('activate', self.on_new_message_menuitem_activate, account)
|
||||||
|
#new msg accel
|
||||||
|
if not self.have_new_message_accel:
|
||||||
|
ag = gtk.accel_groups_from_object(self.window)[0]
|
||||||
|
new_message_menuitem.add_accelerator('activate', ag,
|
||||||
|
gtk.keysyms.n, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
|
||||||
|
self.have_new_message_accel = True
|
||||||
|
|
||||||
|
break # No other account connected
|
||||||
|
|
||||||
|
#Advanced Actions
|
||||||
|
if len(gajim.connections) == 0: # user has no accounts
|
||||||
|
advanced_menuitem.set_sensitive(False)
|
||||||
|
elif len(gajim.connections) == 1:
|
||||||
|
advanced_menuitem_menu = self.get_and_connect_advanced_menuitem_menu(account)
|
||||||
|
|
||||||
|
self._add_history_manager_menuitem(advanced_menuitem_menu)
|
||||||
|
|
||||||
|
advanced_menuitem.set_submenu(advanced_menuitem_menu)
|
||||||
|
advanced_menuitem_menu.show_all()
|
||||||
|
else: # user has *more* than one account
|
||||||
sub_menu = gtk.Menu()
|
sub_menu = gtk.Menu()
|
||||||
for account in gajim.connections:
|
for account in gajim.connections:
|
||||||
item = gtk.MenuItem(_('for account %s') % account, False)
|
item = gtk.MenuItem(_('for account %s') % account, False)
|
||||||
|
@ -758,41 +790,7 @@ class RosterWindow:
|
||||||
advanced_menuitem.set_submenu(sub_menu)
|
advanced_menuitem.set_submenu(sub_menu)
|
||||||
sub_menu.show_all()
|
sub_menu.show_all()
|
||||||
|
|
||||||
else:
|
if connected_accounts > 0:
|
||||||
if len(gajim.connections) == 1: # user has only one account
|
|
||||||
#add
|
|
||||||
if not self.add_new_contact_handler_id:
|
|
||||||
self.add_new_contact_handler_id = add_new_contact_menuitem.connect(
|
|
||||||
'activate', self.on_add_new_contact, gajim.connections.keys()[0])
|
|
||||||
#disco
|
|
||||||
if not self.service_disco_handler_id:
|
|
||||||
self.service_disco_handler_id = service_disco_menuitem.connect(
|
|
||||||
'activate', self.on_service_disco_menuitem_activate,
|
|
||||||
gajim.connections.keys()[0])
|
|
||||||
#new msg
|
|
||||||
if not self.new_message_menuitem_handler_id:
|
|
||||||
self.new_message_menuitem_handler_id = new_message_menuitem.\
|
|
||||||
connect('activate', self.on_new_message_menuitem_activate,
|
|
||||||
gajim.connections.keys()[0])
|
|
||||||
#new msg accel
|
|
||||||
if not self.have_new_message_accel:
|
|
||||||
ag = gtk.accel_groups_from_object(self.window)[0]
|
|
||||||
new_message_menuitem.add_accelerator('activate', ag,
|
|
||||||
gtk.keysyms.n, gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
|
|
||||||
self.have_new_message_accel = True
|
|
||||||
|
|
||||||
account = gajim.connections.keys()[0]
|
|
||||||
advanced_menuitem_menu = self.get_and_connect_advanced_menuitem_menu(
|
|
||||||
account)
|
|
||||||
|
|
||||||
self._add_history_manager_menuitem(advanced_menuitem_menu)
|
|
||||||
|
|
||||||
advanced_menuitem.set_submenu(advanced_menuitem_menu)
|
|
||||||
advanced_menuitem_menu.show_all()
|
|
||||||
elif len(gajim.connections) == 0: # user has no accounts
|
|
||||||
advanced_menuitem.set_sensitive(False)
|
|
||||||
|
|
||||||
if at_least_one_account_connected:
|
|
||||||
new_message_menuitem.set_sensitive(True)
|
new_message_menuitem.set_sensitive(True)
|
||||||
join_gc_menuitem.set_sensitive(True)
|
join_gc_menuitem.set_sensitive(True)
|
||||||
add_new_contact_menuitem.set_sensitive(True)
|
add_new_contact_menuitem.set_sensitive(True)
|
||||||
|
@ -1917,6 +1915,7 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
|
||||||
self.update_status_combobox()
|
self.update_status_combobox()
|
||||||
return
|
return
|
||||||
status = model[active][2].decode('utf-8')
|
status = model[active][2].decode('utf-8')
|
||||||
|
|
||||||
if active == 7: # We choose change status message (7 is that)
|
if active == 7: # We choose change status message (7 is that)
|
||||||
# do not change show, just show change status dialog
|
# do not change show, just show change status dialog
|
||||||
status = model[self.previous_status_combobox_active][2].decode('utf-8')
|
status = model[self.previous_status_combobox_active][2].decode('utf-8')
|
||||||
|
@ -1937,11 +1936,10 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
|
||||||
# after user chooses "Change status message" menuitem
|
# after user chooses "Change status message" menuitem
|
||||||
# we can return to this show
|
# we can return to this show
|
||||||
self.previous_status_combobox_active = active
|
self.previous_status_combobox_active = active
|
||||||
one_connected = helpers.one_account_connected()
|
|
||||||
if status == 'invisible':
|
if status == 'invisible':
|
||||||
bug_user = False
|
bug_user = False
|
||||||
for acct in accounts:
|
for acct in accounts:
|
||||||
if not one_connected or gajim.connections[acct].connected > 1:
|
if connected_accounts < 1 or gajim.connections[acct].connected > 1:
|
||||||
if not gajim.config.get_per('accounts', acct,
|
if not gajim.config.get_per('accounts', acct,
|
||||||
'sync_with_global_status'):
|
'sync_with_global_status'):
|
||||||
continue
|
continue
|
||||||
|
@ -1964,14 +1962,15 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
|
||||||
for acct in accounts:
|
for acct in accounts:
|
||||||
if gajim.config.get_per('accounts', acct, 'sync_with_global_status'):
|
if gajim.config.get_per('accounts', acct, 'sync_with_global_status'):
|
||||||
global_sync_accounts.append(acct)
|
global_sync_accounts.append(acct)
|
||||||
one_with_global_sync_connected = helpers.one_account_connected(
|
global_sync_connected_accounts = helpers.connected_accounts(
|
||||||
global_sync_accounts)
|
global_sync_accounts)
|
||||||
for acct in accounts:
|
for acct in accounts:
|
||||||
if not gajim.config.get_per('accounts', acct, 'sync_with_global_status'):
|
if not gajim.config.get_per('accounts', acct, 'sync_with_global_status'):
|
||||||
continue
|
continue
|
||||||
# we are connected (so we wanna change show and status)
|
# we are connected (so we wanna change show and status)
|
||||||
# or no account is connected and we want to connect with new show and status
|
# or no account is connected and we want to connect with new show and status
|
||||||
if not one_with_global_sync_connected or \
|
|
||||||
|
if not global_sync_connected_accounts > 0 or \
|
||||||
gajim.connections[acct].connected > 1:
|
gajim.connections[acct].connected > 1:
|
||||||
self.send_status(acct, status, message)
|
self.send_status(acct, status, message)
|
||||||
self.update_status_combobox()
|
self.update_status_combobox()
|
||||||
|
|
|
@ -150,7 +150,8 @@ class Systray:
|
||||||
item.set_image(img)
|
item.set_image(img)
|
||||||
sub_menu.append(item)
|
sub_menu.append(item)
|
||||||
item.connect('activate', self.on_change_status_message_activate)
|
item.connect('activate', self.on_change_status_message_activate)
|
||||||
if not helpers.one_account_connected():
|
connected_accounts = helpers.connected_accounts()
|
||||||
|
if connected_accounts < 1:
|
||||||
item.set_sensitive(False)
|
item.set_sensitive(False)
|
||||||
|
|
||||||
item = gtk.SeparatorMenuItem()
|
item = gtk.SeparatorMenuItem()
|
||||||
|
@ -166,36 +167,40 @@ class Systray:
|
||||||
chat_with_menuitem.set_sensitive(iskey)
|
chat_with_menuitem.set_sensitive(iskey)
|
||||||
single_message_menuitem.set_sensitive(iskey)
|
single_message_menuitem.set_sensitive(iskey)
|
||||||
|
|
||||||
if len(gajim.connections) >= 2: # 2 or more connections? make submenus
|
if connected_accounts >= 2: # 2 or more connections? make submenus
|
||||||
account_menu_for_chat_with = gtk.Menu()
|
account_menu_for_chat_with = gtk.Menu()
|
||||||
chat_with_menuitem.set_submenu(account_menu_for_chat_with)
|
chat_with_menuitem.set_submenu(account_menu_for_chat_with)
|
||||||
|
|
||||||
account_menu_for_single_message = gtk.Menu()
|
account_menu_for_single_message = gtk.Menu()
|
||||||
single_message_menuitem.set_submenu(account_menu_for_single_message)
|
single_message_menuitem.set_submenu(account_menu_for_single_message)
|
||||||
|
|
||||||
for account in gajim.connections:
|
|
||||||
#for chat_with
|
|
||||||
item = gtk.MenuItem(_('using account %s') % account)
|
|
||||||
account_menu_for_chat_with.append(item)
|
|
||||||
group_menu = self.make_groups_submenus_for_chat_with(account)
|
|
||||||
item.set_submenu(group_menu)
|
|
||||||
#for single message
|
|
||||||
item = gtk.MenuItem(_('using account %s') % account)
|
|
||||||
item.connect('activate',
|
|
||||||
self.on_single_message_menuitem_activate, account)
|
|
||||||
account_menu_for_single_message.append(item)
|
|
||||||
|
|
||||||
elif len(gajim.connections) == 1: # one account
|
|
||||||
# one account, no need to show 'as jid'
|
|
||||||
# for chat_with
|
|
||||||
account = gajim.connections.keys()[0]
|
|
||||||
|
|
||||||
group_menu = self.make_groups_submenus_for_chat_with(account)
|
accounts_list = gajim.contacts.get_accounts()
|
||||||
chat_with_menuitem.set_submenu(group_menu)
|
accounts_list.sort()
|
||||||
|
for account in accounts_list:
|
||||||
# for single message
|
if gajim.connections[account].connected:
|
||||||
self.single_message_handler_id = single_message_menuitem.connect(
|
#for chat_with
|
||||||
'activate', self.on_single_message_menuitem_activate, account)
|
item = gtk.MenuItem(_('using account %s') % account)
|
||||||
|
account_menu_for_chat_with.append(item)
|
||||||
|
group_menu = self.make_groups_submenus_for_chat_with(account)
|
||||||
|
item.set_submenu(group_menu)
|
||||||
|
#for single message
|
||||||
|
item = gtk.MenuItem(_('using account %s') % account)
|
||||||
|
item.connect('activate',
|
||||||
|
self.on_single_message_menuitem_activate, account)
|
||||||
|
account_menu_for_single_message.append(item)
|
||||||
|
|
||||||
|
elif connected_accounts == 1: # one account
|
||||||
|
# one account connected, no need to show 'as jid'
|
||||||
|
for account in gajim.connections:
|
||||||
|
if gajim.connections[account].connected:
|
||||||
|
# for chat_with
|
||||||
|
group_menu = self.make_groups_submenus_for_chat_with(account)
|
||||||
|
chat_with_menuitem.set_submenu(group_menu)
|
||||||
|
|
||||||
|
# for single message
|
||||||
|
single_message_menuitem.remove_submenu()
|
||||||
|
self.single_message_handler_id = single_message_menuitem.connect(
|
||||||
|
'activate', self.on_single_message_menuitem_activate, account)
|
||||||
|
|
||||||
if event is None:
|
if event is None:
|
||||||
# None means windows (we explicitly popup in systraywin32.py)
|
# None means windows (we explicitly popup in systraywin32.py)
|
||||||
|
@ -235,13 +240,15 @@ class Systray:
|
||||||
|
|
||||||
groups_menu = gtk.Menu()
|
groups_menu = gtk.Menu()
|
||||||
|
|
||||||
for group in gajim.groups[account].keys():
|
# FIXME : also print contacts that are not in a group
|
||||||
|
groups_list = gajim.groups[account].keys()
|
||||||
|
groups_list.sort()
|
||||||
|
for group in groups_list:
|
||||||
if group == _('Transports'):
|
if group == _('Transports'):
|
||||||
continue
|
continue
|
||||||
# at least one 'not offline' or 'without errors' in this group
|
# at least one 'not offline' or 'without errors' in this group
|
||||||
at_least_one = False
|
at_least_one = False
|
||||||
item = gtk.MenuItem(group)
|
item = gtk.MenuItem(group)
|
||||||
groups_menu.append(item)
|
|
||||||
contacts_menu = gtk.Menu()
|
contacts_menu = gtk.Menu()
|
||||||
item.set_submenu(contacts_menu)
|
item.set_submenu(contacts_menu)
|
||||||
for jid in gajim.contacts.get_jid_list(account):
|
for jid in gajim.contacts.get_jid_list(account):
|
||||||
|
@ -251,23 +258,19 @@ class Systray:
|
||||||
contact.show != 'error':
|
contact.show != 'error':
|
||||||
at_least_one = True
|
at_least_one = True
|
||||||
s = gtkgui_helpers.escape_underscore(contact.get_shown_name())
|
s = gtkgui_helpers.escape_underscore(contact.get_shown_name())
|
||||||
item = gtk.ImageMenuItem(s)
|
item_contact = gtk.ImageMenuItem(s)
|
||||||
# any given gtk widget can only be used in one place
|
# any given gtk widget can only be used in one place
|
||||||
# (here we use it in status menu too)
|
# (here we use it in status menu too)
|
||||||
# gtk.Image is a widget, it's better we refactor to use gdk.gdk.Pixbuf allover
|
# gtk.Image is a widget, it's better we refactor to use gdk.gdk.Pixbuf allover
|
||||||
img = state_images[contact.show]
|
img = state_images[contact.show]
|
||||||
img_copy = gobject.new(gtk.Image, pixbuf=img.get_pixbuf())
|
img_copy = gobject.new(gtk.Image, pixbuf=img.get_pixbuf())
|
||||||
item.set_image(img_copy)
|
item_contact.set_image(img_copy)
|
||||||
item.connect('activate', self.start_chat, account,
|
item_contact.connect('activate', self.start_chat, account,
|
||||||
contact.jid)
|
contact.jid)
|
||||||
contacts_menu.append(item)
|
contacts_menu.append(item_contact)
|
||||||
|
|
||||||
if not at_least_one:
|
if at_least_one:
|
||||||
message = _('All contacts in this group are offline or have errors')
|
groups_menu.append(item)
|
||||||
item = gtk.MenuItem(message)
|
|
||||||
item.set_sensitive(False)
|
|
||||||
contacts_menu.append(item)
|
|
||||||
|
|
||||||
return groups_menu
|
return groups_menu
|
||||||
|
|
||||||
def on_left_click(self):
|
def on_left_click(self):
|
||||||
|
|
Loading…
Add table
Reference in a new issue