bugfix: we need to re-create images when we create a menu
This commit is contained in:
parent
9fc4e790e8
commit
b9259399be
|
@ -564,57 +564,149 @@ class RosterWindow:
|
|||
user = self.contacts[account][jid][0]
|
||||
|
||||
menu = gtk.Menu()
|
||||
item = gtk.MenuItem(_('Start Chat'))
|
||||
menu.append(item)
|
||||
item.connect('activate', self.on_roster_treeview_row_activated, path)
|
||||
item = gtk.MenuItem(_('Rename'))
|
||||
menu.append(item)
|
||||
item.connect('activate', self.on_rename, iter, path)
|
||||
|
||||
chat_item = gtk.MenuItem()
|
||||
chat_icon = gtk.Image()
|
||||
chat_icon.set_from_stock(gtk.STOCK_JUMP_TO, gtk.ICON_SIZE_BUTTON)
|
||||
label = gtk.Label(_('Start Chat'))
|
||||
chat_hbox = gtk.HBox(False, 3)
|
||||
chat_hbox.pack_start(chat_icon, False, False)
|
||||
chat_hbox.pack_start(label, False, False)
|
||||
chat_item.add(chat_hbox)
|
||||
menu.append(chat_item)
|
||||
chat_item.connect('activate', self.on_roster_treeview_row_activated, path)
|
||||
|
||||
rename_item = gtk.MenuItem()
|
||||
rename_icon = gtk.Image()
|
||||
rename_icon.set_from_stock(gtk.STOCK_REFRESH, gtk.ICON_SIZE_BUTTON)
|
||||
label = gtk.Label(_('Rename'))
|
||||
rename_hbox = gtk.HBox(False, 3)
|
||||
rename_hbox.pack_start(rename_icon, False, False)
|
||||
rename_hbox.pack_start(label, False, False)
|
||||
rename_item.add(rename_hbox)
|
||||
menu.append(rename_item)
|
||||
rename_item.connect('activate', self.on_rename, iter, path)
|
||||
|
||||
if not 'not in the roster' in user.groups:
|
||||
item = gtk.MenuItem(_('Edit Groups'))
|
||||
menu.append(item)
|
||||
item.connect('activate', self.on_edit_groups, user, account)
|
||||
edit_groups_item = gtk.MenuItem()
|
||||
edit_groups_icon = gtk.Image()
|
||||
edit_groups_icon.set_from_stock(gtk.STOCK_EDIT, gtk.ICON_SIZE_BUTTON)
|
||||
label = gtk.Label(_('Edit Groups'))
|
||||
edit_groups_hbox = gtk.HBox(False, 3)
|
||||
edit_groups_hbox.pack_start(edit_groups_icon, False, False)
|
||||
edit_groups_hbox.pack_start(label, False, False)
|
||||
edit_groups_item.add(edit_groups_hbox)
|
||||
menu.append(edit_groups_item)
|
||||
edit_groups_item.connect('activate', self.on_edit_groups, user, account)
|
||||
|
||||
item = gtk.MenuItem()
|
||||
menu.append(item)
|
||||
if gajim.config.get('usegpg'):
|
||||
item = gtk.MenuItem(_('Assign OpenPGP Key'))
|
||||
menu.append(item)
|
||||
item.connect('activate', self.on_assign_pgp_key, user, account)
|
||||
|
||||
gpg_key_item = gtk.MenuItem()
|
||||
gpg_key_icon = gtk.Image()
|
||||
gpg_key_icon.set_from_stock(gtk.STOCK_DIALOG_AUTHENTICATION, gtk.ICON_SIZE_BUTTON)
|
||||
label = gtk.Label(_('Assign OpenPGP Key'))
|
||||
gpg_key_hbox = gtk.HBox(False, 3)
|
||||
gpg_key_hbox.pack_start(gpg_key_icon, False, False)
|
||||
gpg_key_hbox.pack_start(label, False, False)
|
||||
gpg_key_item.add(gpg_key_hbox)
|
||||
menu.append(gpg_key_item)
|
||||
gpg_key_item.connect('activate', self.on_assign_pgp_key, user, account)
|
||||
|
||||
item = gtk.MenuItem()
|
||||
menu.append(item)
|
||||
item = gtk.MenuItem(_('Subscription'))
|
||||
menu.append(item)
|
||||
|
||||
subscription_item = gtk.MenuItem()
|
||||
subscription_icon = gtk.Image()
|
||||
subscription_icon.set_from_stock(gtk.STOCK_DIALOG_QUESTION, gtk.ICON_SIZE_BUTTON)
|
||||
label = gtk.Label(_('Subscription'))
|
||||
subscription_hbox = gtk.HBox(False, 3)
|
||||
subscription_hbox.pack_start(subscription_icon, False, False)
|
||||
subscription_hbox.pack_start(label, False, False)
|
||||
subscription_item.add(subscription_hbox)
|
||||
menu.append(subscription_item)
|
||||
|
||||
sub_menu = gtk.Menu()
|
||||
item.set_submenu(sub_menu)
|
||||
subscription_item.set_submenu(sub_menu)
|
||||
|
||||
item = gtk.MenuItem(_('Re_send Authorization to'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.authorize, jid, account)
|
||||
resend_auth_item = gtk.MenuItem()
|
||||
resend_auth_icon = gtk.Image()
|
||||
resend_auth_icon.set_from_stock(gtk.STOCK_GO_FORWARD, gtk.ICON_SIZE_BUTTON)
|
||||
label = gtk.Label(_('Re_send Authorization to'))
|
||||
label.set_use_underline(True)
|
||||
resend_auth_hbox = gtk.HBox(False, 3)
|
||||
resend_auth_hbox.pack_start(resend_auth_icon, False, False)
|
||||
resend_auth_hbox.pack_start(label, False, False)
|
||||
resend_auth_item.add(resend_auth_hbox)
|
||||
sub_menu.append(resend_auth_item)
|
||||
resend_auth_item.connect('activate', self.authorize, jid, account)
|
||||
|
||||
item = gtk.MenuItem(_('Rere_quest Authorization from'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.req_sub, jid,
|
||||
rerequest_auth_item = gtk.MenuItem()
|
||||
rerequest_auth_icon = gtk.Image()
|
||||
rerequest_auth_icon.set_from_stock(gtk.STOCK_GO_BACK, gtk.ICON_SIZE_BUTTON)
|
||||
label = gtk.Label(_('Rere_quest Authorization from'))
|
||||
label.set_use_underline(True)
|
||||
rerequest_auth_hbox = gtk.HBox(False, 3)
|
||||
rerequest_auth_hbox.pack_start(rerequest_auth_icon, False, False)
|
||||
rerequest_auth_hbox.pack_start(label, False, False)
|
||||
rerequest_auth_item.add(rerequest_auth_hbox)
|
||||
sub_menu.append(rerequest_auth_item)
|
||||
rerequest_auth_item.connect('activate', self.req_sub, jid,
|
||||
_('I would like to add you to my roster'), account)
|
||||
|
||||
else:
|
||||
item = gtk.MenuItem()
|
||||
menu.append(item)
|
||||
item = gtk.MenuItem(_('Add to Roster'))
|
||||
menu.append(item)
|
||||
item.connect('activate', self.on_add_to_roster, user, account)
|
||||
|
||||
item = gtk.MenuItem(_('Remove'))
|
||||
menu.append(item)
|
||||
item.connect('activate', self.on_req_usub, user, account)
|
||||
add_item = gtk.MenuItem()
|
||||
add_icon = gtk.Image()
|
||||
add_icon.set_from_stock(gtk.STOCK_ADD, gtk.ICON_SIZE_BUTTON)
|
||||
label = gtk.Label(_('_Add to Roster'))
|
||||
label.set_use_underline(True)
|
||||
add_hbox = gtk.HBox(False, 3)
|
||||
add_hbox.pack_start(add_icon, False, False)
|
||||
add_hbox.pack_start(label, False, False)
|
||||
add_item.add(add_hbox)
|
||||
menu.append(add_item)
|
||||
add_item.connect('activate', self.on_add_to_roster, user, account)
|
||||
|
||||
remove_item = gtk.MenuItem()
|
||||
remove_icon = gtk.Image()
|
||||
remove_icon.set_from_stock(gtk.STOCK_REMOVE, gtk.ICON_SIZE_BUTTON)
|
||||
label = gtk.Label(_('_Remove from Roster'))
|
||||
label.set_use_underline(True)
|
||||
remove_hbox = gtk.HBox(False, 3)
|
||||
remove_hbox.pack_start(remove_icon, False, False)
|
||||
remove_hbox.pack_start(label, False, False)
|
||||
remove_item.add(remove_hbox)
|
||||
menu.append(remove_item)
|
||||
remove_item.connect('activate', self.on_req_usub, user, account)
|
||||
|
||||
item = gtk.MenuItem()
|
||||
menu.append(item)
|
||||
item = gtk.MenuItem(_('Information'))
|
||||
menu.append(item)
|
||||
item.connect('activate', self.on_info, user, account)
|
||||
item = gtk.MenuItem(_('History'))
|
||||
menu.append(item)
|
||||
item.connect('activate', self.on_history, user)
|
||||
|
||||
info_item = gtk.MenuItem()
|
||||
info_icon = gtk.Image()
|
||||
info_icon.set_from_stock(gtk.STOCK_DIALOG_INFO, gtk.ICON_SIZE_BUTTON)
|
||||
label = gtk.Label(_('Information'))
|
||||
info_hbox = gtk.HBox(False, 3)
|
||||
info_hbox.pack_start(info_icon, False, False)
|
||||
info_hbox.pack_start(label, False, False)
|
||||
info_item.add(info_hbox)
|
||||
menu.append(info_item)
|
||||
info_item.connect('activate', self.on_info, user, account)
|
||||
|
||||
history_item = gtk.MenuItem()
|
||||
history_icon = gtk.Image()
|
||||
history_icon.set_from_stock(gtk.STOCK_JUSTIFY_FILL, gtk.ICON_SIZE_BUTTON)
|
||||
label = gtk.Label(_('History'))
|
||||
history_hbox = gtk.HBox(False, 3)
|
||||
history_hbox.pack_start(history_icon, False, False)
|
||||
history_hbox.pack_start(label, False, False)
|
||||
history_item.add(history_hbox)
|
||||
menu.append(history_item)
|
||||
history_item.connect('activate', self.on_history, user)
|
||||
|
||||
menu.popup(None, None, None, event.button, event.time)
|
||||
menu.show_all()
|
||||
|
@ -626,9 +718,18 @@ class RosterWindow:
|
|||
path = model.get_path(iter)
|
||||
|
||||
menu = gtk.Menu()
|
||||
item = gtk.MenuItem(_('Rename'))
|
||||
menu.append(item)
|
||||
item.connect('activate', self.on_rename, iter, path)
|
||||
|
||||
rename_item = gtk.MenuItem()
|
||||
rename_icon = gtk.Image()
|
||||
rename_icon.set_from_stock(gtk.STOCK_REFRESH, gtk.ICON_SIZE_BUTTON)
|
||||
label = gtk.Label(_('Rename'))
|
||||
rename_hbox = gtk.HBox(False, 3)
|
||||
rename_hbox.pack_start(rename_icon, False, False)
|
||||
rename_hbox.pack_start(label, False, False)
|
||||
rename_item.add(rename_hbox)
|
||||
menu.append(rename_item)
|
||||
rename_item.connect('activate', self.on_rename, iter, path)
|
||||
|
||||
menu.popup(None, None, None, event.button, event.time)
|
||||
menu.show_all()
|
||||
menu.reposition()
|
||||
|
@ -641,28 +742,61 @@ class RosterWindow:
|
|||
account = model.get_value(iter, 4)
|
||||
user = self.contacts[account][jid][0]
|
||||
menu = gtk.Menu()
|
||||
item = gtk.MenuItem(_('_Log on'))
|
||||
|
||||
state_images = self.get_appropriate_state_images(jid)
|
||||
|
||||
item = gtk.MenuItem()
|
||||
icon = state_images['online']
|
||||
label = gtk.Label(_('_Log on'))
|
||||
label.set_use_underline(True)
|
||||
hbox = gtk.HBox(False, 3)
|
||||
hbox.pack_start(icon, False, False)
|
||||
hbox.pack_start(label, False, False)
|
||||
item.add(hbox)
|
||||
menu.append(item)
|
||||
show = self.contacts[account][jid][0].show
|
||||
if show != 'offline' and show != 'error':
|
||||
item.set_sensitive(False)
|
||||
menu.append(item)
|
||||
item.connect('activate', self.on_agent_logging, jid, None, account)
|
||||
|
||||
item = gtk.MenuItem(_('Log _off'))
|
||||
item = gtk.MenuItem()
|
||||
icon = state_images['offline']
|
||||
label = gtk.Label(_('Log _off'))
|
||||
label.set_use_underline(True)
|
||||
hbox = gtk.HBox(False, 3)
|
||||
hbox.pack_start(icon, False, False)
|
||||
hbox.pack_start(label, False, False)
|
||||
item.add(hbox)
|
||||
menu.append(item)
|
||||
if show == 'offline' or show == 'error':
|
||||
item.set_sensitive(False)
|
||||
menu.append(item)
|
||||
item.connect('activate', self.on_agent_logging, jid, 'unavailable',
|
||||
account)
|
||||
|
||||
item = gtk.MenuItem()
|
||||
menu.append(item)
|
||||
|
||||
item = gtk.MenuItem(_('_Edit'))
|
||||
item = gtk.MenuItem()
|
||||
icon = gtk.Image()
|
||||
icon.set_from_stock(gtk.STOCK_EDIT, gtk.ICON_SIZE_BUTTON)
|
||||
label = gtk.Label(_('Edit'))
|
||||
label.set_use_underline(True)
|
||||
hbox = gtk.HBox(False, 3)
|
||||
hbox.pack_start(icon, False, False)
|
||||
hbox.pack_start(label, False, False)
|
||||
item.add(hbox)
|
||||
menu.append(item)
|
||||
item.connect('activate', self.on_edit_agent, user, account)
|
||||
|
||||
item = gtk.MenuItem(_('_Remove'))
|
||||
item = gtk.MenuItem()
|
||||
icon = gtk.Image()
|
||||
icon.set_from_stock(gtk.STOCK_REMOVE, gtk.ICON_SIZE_BUTTON)
|
||||
label = gtk.Label(_('_Remove from Roster'))
|
||||
label.set_use_underline(True)
|
||||
hbox = gtk.HBox(False, 3)
|
||||
hbox.pack_start(icon, False, False)
|
||||
hbox.pack_start(label, False, False)
|
||||
item.add(hbox)
|
||||
menu.append(item)
|
||||
item.connect('activate', self.on_remove_agent, user, account)
|
||||
|
||||
|
@ -682,54 +816,108 @@ class RosterWindow:
|
|||
model = self.tree.get_model()
|
||||
account = model.get_value(iter, 3)
|
||||
|
||||
# we have to create our own set of icons for the menu
|
||||
# using self.jabber_status_images is poopoo
|
||||
iconset = gajim.config.get('iconset')
|
||||
if not iconset:
|
||||
iconset = 'sun'
|
||||
path = os.path.join(gajim.DATA_DIR, 'iconsets/' + iconset + '/16x16/')
|
||||
state_images = self.load_iconset(path)
|
||||
|
||||
menu = gtk.Menu()
|
||||
item = gtk.MenuItem(_('Status'))
|
||||
menu.append(item)
|
||||
|
||||
status_item = gtk.MenuItem()
|
||||
status_icon = gtk.Image()
|
||||
status_icon.set_from_stock(gtk.STOCK_NETWORK, gtk.ICON_SIZE_BUTTON)
|
||||
status_label = gtk.Label(_('Status'))
|
||||
status_hbox = gtk.HBox(False, 3)
|
||||
status_hbox.pack_start(status_icon, False, False)
|
||||
status_hbox.pack_start(status_label, False, False)
|
||||
status_item.add(status_hbox)
|
||||
menu.append(status_item)
|
||||
|
||||
sub_menu = gtk.Menu()
|
||||
item.set_submenu(sub_menu)
|
||||
item = gtk.MenuItem(_('Online'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.change_status, account, 'online')
|
||||
item = gtk.MenuItem(_('Free for chat'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.change_status, account, 'chat')
|
||||
item = gtk.MenuItem(_('Away'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.change_status, account, 'away')
|
||||
item = gtk.MenuItem(_('Not Available'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.change_status, account, 'xa')
|
||||
item = gtk.MenuItem(_('Busy'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.change_status, account, 'dnd')
|
||||
item = gtk.MenuItem(_('Invisible'))
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.change_status, account, 'invisible')
|
||||
status_item.set_submenu(sub_menu)
|
||||
|
||||
for show in ['online', 'chat', 'away', 'xa', 'dnd', 'invisible',
|
||||
'offline']:
|
||||
|
||||
if show == 'offline': # We add a sep before offline item
|
||||
item = gtk.MenuItem()
|
||||
sub_menu.append(item)
|
||||
item = gtk.MenuItem(_('Offline'))
|
||||
|
||||
item = gtk.MenuItem()
|
||||
icon = state_images[show]
|
||||
label = gtk.Label(helpers.get_uf_show(show))
|
||||
hbox = gtk.HBox(False, 3)
|
||||
hbox.pack_start(icon, False, False)
|
||||
hbox.pack_start(label, False, False)
|
||||
item.add(hbox)
|
||||
sub_menu.append(item)
|
||||
item.connect('activate', self.change_status, account, 'offline')
|
||||
item.connect('activate', self.change_status, account, show)
|
||||
|
||||
item = gtk.MenuItem()
|
||||
menu.append(item)
|
||||
|
||||
item = gtk.MenuItem(_('_Edit Account'))
|
||||
menu.append(item)
|
||||
item.connect('activate', self.on_edit_account, account)
|
||||
item = gtk.MenuItem(_('_Service Discovery'))
|
||||
menu.append(item)
|
||||
item.connect('activate', self.on_service_disco_menuitem_activate, account)
|
||||
item = gtk.MenuItem(_('_Add Contact'))
|
||||
menu.append(item)
|
||||
item.connect('activate', self.on_add_new_contact, account)
|
||||
item = gtk.MenuItem(_('Join _Groupchat'))
|
||||
menu.append(item)
|
||||
item.connect('activate', self.on_join_gc_activate, account)
|
||||
item = gtk.MenuItem(_('_New Message'))
|
||||
menu.append(item)
|
||||
item.connect('activate', self.on_new_message_menuitem_activate, account)
|
||||
edit_item = gtk.MenuItem()
|
||||
edit_icon = gtk.Image()
|
||||
edit_icon.set_from_stock(gtk.STOCK_EDIT, gtk.ICON_SIZE_BUTTON)
|
||||
edit_label = gtk.Label(_('_Edit Account'))
|
||||
edit_label.set_use_underline(True)
|
||||
edit_hbox = gtk.HBox(False, 3)
|
||||
edit_hbox.pack_start(edit_icon, False, False)
|
||||
edit_hbox.pack_start(edit_label, False, False)
|
||||
edit_item.add(edit_hbox)
|
||||
edit_item.connect('activate', self.on_edit_account, account)
|
||||
menu.append(edit_item)
|
||||
|
||||
discover_item = gtk.MenuItem()
|
||||
discover_icon = gtk.Image()
|
||||
discover_icon.set_from_stock(gtk.STOCK_FIND, gtk.ICON_SIZE_BUTTON)
|
||||
discover_label = gtk.Label(_('_Service Discovery'))
|
||||
discover_label.set_use_underline(True)
|
||||
discover_hbox = gtk.HBox(False, 3)
|
||||
discover_hbox.pack_start(discover_icon, False, False)
|
||||
discover_hbox.pack_start(discover_label, False, False)
|
||||
discover_item.add(discover_hbox)
|
||||
discover_item.connect('activate', self.on_service_disco_menuitem_activate, account)
|
||||
menu.append(discover_item)
|
||||
|
||||
add_contact_item = gtk.MenuItem()
|
||||
add_contact_icon = gtk.Image()
|
||||
add_contact_icon.set_from_stock(gtk.STOCK_ADD, gtk.ICON_SIZE_BUTTON)
|
||||
add_contact_label = gtk.Label(_('_Add Contact'))
|
||||
add_contact_label.set_use_underline(True)
|
||||
add_contact_hbox = gtk.HBox(False, 3)
|
||||
add_contact_hbox.pack_start(add_contact_icon, False, False)
|
||||
add_contact_hbox.pack_start(add_contact_label, False, False)
|
||||
add_contact_item.add(add_contact_hbox)
|
||||
add_contact_item.connect('activate', self.on_add_new_contact, account)
|
||||
menu.append(add_contact_item)
|
||||
|
||||
join_gc_item = gtk.MenuItem()
|
||||
join_gc_icon = gtk.Image()
|
||||
join_gc_icon.set_from_stock(gtk.STOCK_CONNECT, gtk.ICON_SIZE_BUTTON)
|
||||
join_gc_label = gtk.Label(_('Join _Groupchat'))
|
||||
join_gc_label.set_use_underline(True)
|
||||
join_gc_hbox = gtk.HBox(False, 3)
|
||||
join_gc_hbox.pack_start(join_gc_icon, False, False)
|
||||
join_gc_hbox.pack_start(join_gc_label, False, False)
|
||||
join_gc_item.add(join_gc_hbox)
|
||||
join_gc_item.connect('activate', self.on_join_gc_activate, account)
|
||||
menu.append(join_gc_item)
|
||||
|
||||
new_message_item = gtk.MenuItem()
|
||||
new_message_icon = gtk.Image()
|
||||
new_message_icon.set_from_stock(gtk.STOCK_NEW, gtk.ICON_SIZE_BUTTON)
|
||||
new_message_label = gtk.Label(_('_New Message'))
|
||||
new_message_label.set_use_underline(True)
|
||||
new_message_hbox = gtk.HBox(False, 3)
|
||||
new_message_hbox.pack_start(new_message_icon, False, False)
|
||||
new_message_hbox.pack_start(new_message_label, False, False)
|
||||
new_message_item.add(new_message_hbox)
|
||||
new_message_item.connect('activate', self.on_new_message_menuitem_activate, account)
|
||||
menu.append(new_message_item)
|
||||
|
||||
menu.popup(None, None, None, event.button, event.time)
|
||||
menu.show_all()
|
||||
|
|
|
@ -134,12 +134,16 @@ class Systray:
|
|||
new_message_menuitem = self.xml.get_widget('new_message_menuitem')
|
||||
status_menuitem = self.xml.get_widget('status_menu')
|
||||
|
||||
# We need our own set of status icons, let's make 'em!
|
||||
state_images = self.plugin.roster.jabber_state_images
|
||||
|
||||
sub_menu = gtk.Menu()
|
||||
status_menuitem.set_submenu(sub_menu)
|
||||
|
||||
# We need our own set of status icons, let's make 'em!
|
||||
iconset = gajim.config.get('iconset')
|
||||
if not iconset:
|
||||
iconset = 'sun'
|
||||
path = os.path.join(gajim.DATA_DIR, 'iconsets/' + iconset + '/16x16/')
|
||||
state_images = self.plugin.roster.load_iconset(path)
|
||||
|
||||
for show in ['online', 'chat', 'away', 'xa', 'dnd', 'invisible',
|
||||
'offline']:
|
||||
|
||||
|
|
Loading…
Reference in New Issue