changeset 5bbc88f23675 in /home/hg/repos/gajim
details:http://hg.gajim.org/gajim?cmd=changeset;node=5bbc88f23675 description: fix submenu in roster and in statusicon
diffstat:
data/gui/systray_context_menu.ui | 91 +++++++++++++++++++++++++-------------- src/roster_window.py | 59 +++++++++++++++---------- src/statusicon.py | 10 ++-- 3 files changed, 99 insertions(+), 61 deletions(-)
diffs (truncated from 458 to 300 lines):
diff -r 8752749e6b2f -r 5bbc88f23675 data/gui/systray_context_menu.ui --- a/data/gui/systray_context_menu.ui Sun Jan 06 15:10:35 2013 +0100 +++ b/data/gui/systray_context_menu.ui Sun Jan 06 18:50:10 2013 +0400 @@ -1,12 +1,45 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="UTF-8"?> <interface> - <requires lib="gtk+" version="2.16"/> - <!-- interface-naming-policy toplevel-contextual --> + <!-- interface-requires gtk+ 3.0 --> + <object class="GtkAccelGroup" id="accelgroup1"/> + <object class="GtkImage" id="image1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stock">gtk-network</property> + <property name="icon-size">1</property> + </object> + <object class="GtkImage" id="image2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stock">gtk-jump-to</property> + <property name="icon-size">1</property> + </object> + <object class="GtkImage" id="image3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stock">gtk-connect</property> + <property name="icon-size">1</property> + </object> + <object class="GtkImage" id="image4"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stock">gtk-new</property> + <property name="icon-size">1</property> + </object> + <object class="GtkImage" id="image5"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stock">gtk-home</property> + <property name="icon-size">1</property> + </object> <object class="GtkMenu" id="systray_context_menu"> + <property name="can_focus">False</property> <child> <object class="GtkImageMenuItem" id="status_menu"> <property name="label" translatable="yes">Sta_tus</property> + <property name="use_action_appearance">False</property> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="use_underline">True</property> <property name="image">image1</property> <property name="use_stock">False</property> @@ -16,7 +49,9 @@ <child> <object class="GtkImageMenuItem" id="chat_with_menuitem"> <property name="label" translatable="yes">_Start Chat</property> + <property name="use_action_appearance">False</property> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="use_underline">True</property> <property name="image">image2</property> <property name="use_stock">False</property> @@ -26,7 +61,9 @@ <child> <object class="GtkImageMenuItem" id="join_gc_menuitem"> <property name="label" translatable="yes">_Group Chat</property> + <property name="use_action_appearance">False</property> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="use_underline">True</property> <property name="image">image3</property> <property name="use_stock">False</property> @@ -36,7 +73,9 @@ <child> <object class="GtkImageMenuItem" id="single_message_menuitem"> <property name="label" translatable="yes">Send Single _Message</property> + <property name="use_action_appearance">False</property> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="use_underline">True</property> <property name="image">image4</property> <property name="use_stock">False</property> @@ -46,27 +85,34 @@ <child> <object class="GtkSeparatorMenuItem" id="separator12"> <property name="visible">True</property> + <property name="can_focus">False</property> </object> </child> <child> <object class="GtkMenuItem" id="show_all_events_menuitem"> + <property name="use_action_appearance">False</property> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="label" translatable="yes">Show All Pending _Events</property> <property name="use_underline">True</property> - <signal name="activate" handler="on_show_all_events_menuitem_activate"/> + <signal name="activate" handler="on_show_all_events_menuitem_activate" swapped="no"/> </object> </child> <child> <object class="GtkCheckMenuItem" id="sounds_mute_menuitem"> + <property name="use_action_appearance">False</property> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="label" translatable="yes">Mute Sounds</property> <property name="use_underline">True</property> - <signal name="activate" handler="on_sounds_mute_menuitem_activate"/> + <signal name="activate" handler="on_sounds_mute_menuitem_activate" swapped="no"/> </object> </child> <child> <object class="GtkImageMenuItem" id="show_roster_menuitem"> + <property name="use_action_appearance">False</property> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="use_underline">True</property> <property name="image">image5</property> <property name="use_stock">False</property> @@ -76,53 +122,32 @@ <child> <object class="GtkImageMenuItem" id="preferences_menuitem"> <property name="label">gtk-preferences</property> + <property name="use_action_appearance">False</property> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="use_underline">True</property> <property name="use_stock">True</property> <property name="accel_group">accelgroup1</property> - <signal name="activate" handler="on_preferences_menuitem_activate"/> + <signal name="activate" handler="on_preferences_menuitem_activate" swapped="no"/> </object> </child> <child> <object class="GtkSeparatorMenuItem" id="separator"> <property name="visible">True</property> + <property name="can_focus">False</property> </object> </child> <child> <object class="GtkImageMenuItem" id="quit_menuitem"> <property name="label">gtk-quit</property> + <property name="use_action_appearance">False</property> <property name="visible">True</property> + <property name="can_focus">False</property> <property name="use_underline">True</property> <property name="use_stock">True</property> <property name="accel_group">accelgroup1</property> - <signal name="activate" handler="on_quit_menuitem_activate"/> + <signal name="activate" handler="on_quit_menuitem_activate" swapped="no"/> </object> </child> </object> - <object class="GtkAccelGroup" id="accelgroup1"/> - <object class="GtkImage" id="image1"> - <property name="visible">True</property> - <property name="stock">gtk-network</property> - <property name="icon-size">1</property> - </object> - <object class="GtkImage" id="image2"> - <property name="visible">True</property> - <property name="stock">gtk-jump-to</property> - <property name="icon-size">1</property> - </object> - <object class="GtkImage" id="image3"> - <property name="visible">True</property> - <property name="stock">gtk-connect</property> - <property name="icon-size">1</property> - </object> - <object class="GtkImage" id="image4"> - <property name="visible">True</property> - <property name="stock">gtk-new</property> - <property name="icon-size">1</property> - </object> - <object class="GtkImage" id="image5"> - <property name="visible">True</property> - <property name="stock">gtk-home</property> - <property name="icon-size">1</property> - </object> </interface> diff -r 8752749e6b2f -r 5bbc88f23675 src/roster_window.py --- a/src/roster_window.py Sun Jan 06 15:10:35 2013 +0100 +++ b/src/roster_window.py Sun Jan 06 18:50:10 2013 +0400 @@ -293,8 +293,8 @@
# Draw all known groups for group in gajim.groups[account]: - self.draw_group(group, account) - self.draw_account(account) + self._really_draw_group(group, account) + self._really_draw_account(account)
self.starting = False
@@ -897,7 +897,7 @@
# update all contacts in the given group if self.regroup: - accounts = gajim.connections.keys() + accounts = list(gajim.connections.keys()) else: accounts = [account, ]
@@ -1122,7 +1122,7 @@ self.model[child_iter][C_NAME] = text
def _really_draw_groups(self): - for ag in self.groups_to_draw.values(): + for ag in list(self.groups_to_draw.values()): acct = ag['account'] grp = ag['group'] self._really_draw_group(grp, acct) @@ -1135,7 +1135,7 @@ return self.groups_to_draw[ag] = {'group': group, 'account': account} if len(self.groups_to_draw) == 1: - GObject.timeout_add(200, self._really_draw_groups) + GObject.idle_add(self._really_draw_groups)
def draw_parent_contact(self, jid, account): child_iters = self._get_contact_iter(jid, account, model=self.model) @@ -1150,7 +1150,13 @@ self.draw_contact(parent_jid, parent_account) return False
- def draw_contact(self, jid, account, selected=False, focus=False, contact_instances=None, contact=None): + def draw_contact(self, jid, account, selected=False, focus=False, + contact_instances=None, contact=None): + GObject.idle_add(self._really_draw_contact, jid, account, selected, + focus, contact_instances, contact) + + def _really_draw_contact(self, jid, account, selected=False, focus=False, + contact_instances=None, contact=None): """ Draw the correct state image, name BUT not avatar """ @@ -1329,6 +1335,10 @@ self.draw_pep(jid, account, pep_type, contact=contact)
def draw_pep(self, jid, account, pep_type, contact=None): + GObject.idle_add(self._really_draw_pep, jid, account, pep_type, + contact) + + def _really_draw_pep(self, jid, account, pep_type, contact=None): if pep_type not in self._pep_type_to_model_column: return if not self._is_pep_shown_in_roster(pep_type): @@ -1348,6 +1358,9 @@ self.model[child_iter][model_column] = pixbuf
def draw_avatar(self, jid, account): + GObject.idle_add(self._really_draw_avatar, jid, account) + + def _really_draw_avatar(self, jid, account): iters = self._get_contact_iter(jid, account, model=self.model) if not iters or not gajim.config.get('show_avatars_in_roster'): return @@ -1871,7 +1884,7 @@ 'groups': ['self_contact'], 'subscription': 'both', 'ask': 'none'} # .keys() is needed - for jid in array.keys(): + for jid in list(array.keys()): # Remove the contact in roster. It might has changed self.remove_contact(jid, account, force=True) # Remove old Contact instances @@ -1929,7 +1942,7 @@ chat_control.contact = contact1
def connected_rooms(self, account): - if account in gajim.gc_connected[account].values(): + if account in list(gajim.gc_connected[account].values()): return True return False
@@ -1959,7 +1972,7 @@ self.draw_contact(jid, account) # Remove contacts in roster if removal was requested key = (jid, account) - if key in self.contacts_to_be_removed.keys(): + if key in list(self.contacts_to_be_removed.keys()): backend = self.contacts_to_be_removed[key]['backend'] del self.contacts_to_be_removed[key] # Remove contact will delay removal if there are more events @@ -2486,7 +2499,7 @@ Terminate all sessions and send offline to all connected account. We do NOT really quit gajim here """ - accounts = gajim.connections.keys() + accounts = list(gajim.connections.keys()) get_msg = False for acct in accounts: if gajim.connections[acct].connected: @@ -3569,7 +3582,7 @@ if modifier & Gdk.ModifierType.CONTROL_MASK: if keyval == Gdk.KEY_s: # CTRL + s model = self.status_combobox.get_model() - accounts = gajim.connections.keys() + accounts = list(gajim.connections.keys()) status = model[self.previous_status_combobox_active][2].decode(