From eb94b9632ac7bab5cdc42266d982b6550721b21d Mon Sep 17 00:00:00 2001 From: Nikos Kouremenos Date: Tue, 6 Dec 2005 17:43:21 +0000 Subject: [PATCH] remove trailing whitespaces and fix coding styles etc and add a FIXME --- src/common/gajim.py | 12 +-- src/config.py | 11 +-- src/disco.py | 137 ++++++++++++++-------------- src/roster_window.py | 206 +++++++++++++++++++++---------------------- src/systraywin32.py | 3 +- 5 files changed, 187 insertions(+), 182 deletions(-) diff --git a/src/common/gajim.py b/src/common/gajim.py index 38b876a5e..da611ba9b 100644 --- a/src/common/gajim.py +++ b/src/common/gajim.py @@ -85,7 +85,7 @@ awaiting_events = {} # list of messages/FT reveived but not printed # if type in ('chat', 'normal'): data = (message, subject, kind, time, # encrypted, resource) # kind can be (incoming, error) - # if type in file-request, file-request-error, file-send-error, file-error, + # if type in file-request, file-request-error, file-send-error, file-error, # file-completed, file-stopped: # data = file_props nicks = {} # list of our nick names in each account @@ -118,7 +118,7 @@ def get_nick_from_fjid(jid): # fake jid is the jid for a contact in a room # gaim@conference.jabber.no/nick/nick-continued return jid.split('/', 1)[1] - + def get_room_name_and_server_from_room_jid(jid): room_name = get_nick_from_jid(jid) server = get_server_from_jid(jid) @@ -169,7 +169,7 @@ def get_first_contact_instance_from_jid(account, jid): get_room_and_nick_from_fjid(jid) # if we ban/kick we now real jid if gc_contacts[account].has_key(room) and \ nick in gc_contacts[account][room]: - contact = gc_contacts[account][room][nick] + contact = gc_contacts[account][room][nick] return contact def get_contact_instance_with_highest_priority(account, jid): @@ -178,7 +178,7 @@ def get_contact_instance_with_highest_priority(account, jid): def get_contact_name_from_jid(account, jid): return contacts[account][jid][0].name - + def get_highest_prio_contact_from_contacts(contacts): prim_contact = None # primary contact for contact in contacts: @@ -197,7 +197,7 @@ def construct_fjid(room_jid, nick): if isinstance(nick, str): nick = unicode(nick, 'utf-8') return room_jid + '/' + nick - + def get_resource_from_jid(jid): jids = jid.split('/', 1) if len(jids) > 1: @@ -255,7 +255,7 @@ def jid_is_transport(jid): sms = jid.startswith('sms.') tlen = jid.startswith('tlen.') yahoo = jid.startswith('yahoo.') - + if aim or gg or irc or icq or msn or sms or yahoo or tlen: is_transport = True else: diff --git a/src/config.py b/src/config.py index 92053695e..091c15175 100644 --- a/src/config.py +++ b/src/config.py @@ -369,7 +369,8 @@ class PreferencesWindow: self.applications_frame.set_no_show_all(True) self.applications_frame.hide() else: - self.applications_combobox = self.xml.get_widget('applications_combobox') + self.applications_combobox = self.xml.get_widget( + 'applications_combobox') if gajim.config.get('autodetect_browser_mailer'): self.applications_combobox.set_active(0) gtkgui_helpers.autodetect_browser_mailer() @@ -527,7 +528,7 @@ class PreferencesWindow: def merge_windows(self, kind): for acct in gajim.connections: - #save buffers and close windows + # save buffers and close windows buf1 = {} buf2 = {} saved_var = {} @@ -539,7 +540,7 @@ class PreferencesWindow: buf2[jid] = window.message_textviews[jid].get_buffer() saved_var[jid] = window.save_var(jid) window.window.destroy() - #open new tabbed chat windows + # open new tabbed chat windows for jid in jids: if kind == 'chats': c = gajim.get_contact_instance_with_highest_priority(acct, jid) @@ -553,7 +554,7 @@ class PreferencesWindow: def split_windows(self, kind): for acct in gajim.connections: - #save buffers and close tabbed chat windows + # save buffers and close tabbed chat windows buf1 = {} buf2 = {} saved_var = {} @@ -568,7 +569,7 @@ class PreferencesWindow: buf2[jid] = window.message_textviews[jid].get_buffer() saved_var[jid] = window.save_var(jid) windows['tabbed'].window.destroy() - #open new tabbed chat windows + # open new tabbed chat windows for jid in jids: if kind == 'chats': c = gajim.get_contact_instance_with_highest_priority(acct, jid) diff --git a/src/disco.py b/src/disco.py index 99c5652ea..c62a35dbc 100644 --- a/src/disco.py +++ b/src/disco.py @@ -73,11 +73,11 @@ def _gen_agent_type_info(): return { # Defaults (0, 0): (None, None), - + # Jabber server ('server', 'im'): (ToplevelAgentBrowser, 'jabber.png'), ('services', 'jabber'): (ToplevelAgentBrowser, 'jabber.png'), - + # Services ('conference', 'text'): (MucBrowser, 'conference.png'), ('headline', 'rss'): (AgentBrowser, 'rss.png'), @@ -88,7 +88,7 @@ def _gen_agent_type_info(): ('directory', 'user'): (None, 'jud.png'), ('pubsub', 'generic'): (None, 'pubsub.png'), ('proxy', 'bytestreams'): (None, 'bytestreams.png'), # Socks5 FT proxy - + # Transports ('conference', 'irc'): (False, 'irc.png'), ('_jid', 'irc'): (False, 'irc.png'), @@ -185,7 +185,7 @@ class Closure(object): Weak references to methods immediatly die, even if the object is still alive. Besides a handy way to store a callback, this provides a workaround that keeps a reference to the object instead. - + Userargs and removeargs must be tuples.''' def __init__(self, cb, userargs = (), remove = None, removeargs = ()): self.userargs = userargs @@ -235,7 +235,7 @@ class ServicesCache: # Clean an empty list if not self._cbs[cbkey]: del self._cbs[cbkey] - + def get_icon(self, identities = []): '''Return the icon for an agent.''' # Grab the first identity with an icon @@ -264,7 +264,7 @@ class ServicesCache: # Store in cache _icon_cache[filename] = pix return pix - + def get_browser(self, identities = [], features = []): '''Return the browser class for an agent.''' # Grab the first identity with a browser @@ -365,7 +365,7 @@ class ServicesCache: # clean_closure may have beaten us to it if self._cbs.has_key(cbkey): del self._cbs[cbkey] - + def agent_info_error(self, jid): '''Callback for when a query fails. (even after the browse and agents namespaces)''' @@ -379,7 +379,7 @@ class ServicesCache: # clean_closure may have beaten us to it if self._cbs.has_key(cbkey): del self._cbs[cbkey] - + def agent_items_error(self, jid): '''Callback for when a query fails. (even after the browse and agents namespaces)''' @@ -404,12 +404,12 @@ class ServiceDiscoveryWindow: if not jid: jid = gajim.config.get_per('accounts', account, 'hostname') node = '' - + self.jid = None self.browser = None self.children = [] self.dying = False - + # Check connection if gajim.connections[account].connected < 2: dialogs.ErrorDialog(_('You are not connected to the server'), @@ -428,7 +428,8 @@ _('Without a connection, you can not browse available services')).get_response() self.services_treeview = self.xml.get_widget('services_treeview') # This is more reliable than the cursor-changed signal. selection = self.services_treeview.get_selection() - selection.connect_after('changed', self.on_services_treeview_selection_changed) + selection.connect_after('changed', + self.on_services_treeview_selection_changed) self.services_scrollwin = self.xml.get_widget('services_scrollwin') self.progressbar = self.xml.get_widget('services_progressbar') self.progressbar.set_no_show_all(True) @@ -446,14 +447,16 @@ _('Without a connection, you can not browse available services')).get_response() self.address_comboboxentry = None address_hbox = self.xml.get_widget('address_hbox') if address_entry: - self.address_comboboxentry = self.xml.get_widget('address_comboboxentry') + self.address_comboboxentry = self.xml.get_widget( + 'address_comboboxentry') self.address_comboboxentry_entry = self.address_comboboxentry.child self.address_comboboxentry_entry.set_activates_default(True) liststore = gtk.ListStore(str) self.address_comboboxentry.set_model(liststore) self.address_comboboxentry.set_text_column(0) - self.latest_addresses = gajim.config.get('latest_disco_addresses').split() + self.latest_addresses = gajim.config.get( + 'latest_disco_addresses').split() jid = gajim.get_hostname_from_account(self.account, use_srv = True) if jid in self.latest_addresses: self.latest_addresses.remove(jid) @@ -472,17 +475,17 @@ _('Without a connection, you can not browse available services')).get_response() self.xml.signal_autoconnect(self) self.travel(jid, node) self.window.show_all() - + def _get_account(self): return self._account - + def _set_account(self, value): self._account = value self.cache.account = value if self.browser: self.browser.account = value account = property(_get_account, _set_account) - + def _initial_state(self): '''Set some initial state on the window. Separated in a method because it's handy to use within browser's cleanup method.''' @@ -541,7 +544,7 @@ _('Without a connection, you can not browse available services')).get_response() if chain and not self.parent.children: self.parent.destroy(chain = chain) self.parent = None - + def travel(self, jid, node): '''Travel to an agent within the current services window.''' if self.browser: @@ -558,7 +561,7 @@ _('Without a connection, you can not browse available services')).get_response() self.jid = jid self.node = node self.cache.get_info(jid, node, self._travel) - + def _travel(self, jid, node, identities, features, data): '''Continuation of travel.''' if self.dying or jid != self.jid or node != self.node: @@ -580,7 +583,7 @@ _('This type of service does not contain any items to browse.')).get_response() self.browser = klass(self.account, jid, node) self.browser.prepare_window(self) self.browser.browse() - + def open(self, jid, node): '''Open an agent. By default, this happens in a new window.''' try: @@ -608,7 +611,7 @@ _('This type of service does not contain any items to browse.')).get_response() # user selected one of the entries so do auto-visit jid = self.address_comboboxentry.child.get_text().decode('utf-8') self.travel(jid, '') - + def on_go_button_clicked(self, widget): jid = self.address_comboboxentry.child.get_text().decode('utf-8') if jid in self.latest_addresses: @@ -626,7 +629,7 @@ _('This type of service does not contain any items to browse.')).get_response() def on_services_treeview_row_activated(self, widget, path, col = 0): self.browser.default_action() - + def on_services_treeview_selection_changed(self, widget): self.browser.update_actions() @@ -679,13 +682,13 @@ class AgentBrowser: self.window.services_treeview.insert_column(col, -1) col.set_resizable(True) self.window.services_treeview.set_headers_visible(True) - + def _clean_treemodel(self): self.window.services_treeview.get_model().clear() for col in self.window.services_treeview.get_columns(): self.window.services_treeview.remove_column(col) self.window.services_treeview.set_headers_visible(False) - + def _add_actions(self): '''Add the action buttons to the buttonbox for actions the browser can perform.''' @@ -706,7 +709,7 @@ class AgentBrowser: if self.browse_button: self.browse_button.destroy() self.browse_button = None - + def _set_title(self, jid, node, identities, features, data): '''Set the window title based on agent info.''' # Set the banner and window title @@ -714,12 +717,12 @@ class AgentBrowser: name = identities[0]['name'] self.window.banner.set_markup(''\ '%s\n%s' % (self._get_agent_address(), name)) - + # Add an icon to the banner. pix = self.cache.get_icon(identities) self.window.banner_icon.set_from_pixbuf(pix) self.window.banner_icon.show() - + def _clean_title(self): # Everything done here is done in window._initial_state # This is for subclasses. @@ -730,37 +733,37 @@ class AgentBrowser: up with a ServiceDiscoveryWindow instance.''' self.window = window self.cache = window.cache - + self._set_initial_title() self._create_treemodel() self._add_actions() - + # This is a hack. The buttonbox apparently doesn't care about pack_start # or pack_end, so we repack the close button here to make sure it's last close_button = self.window.xml.get_widget('close_button') self.window.action_buttonbox.remove(close_button) self.window.action_buttonbox.pack_end(close_button) close_button.show_all() - + self.update_actions() - + self.active = True self.cache.get_info(self.jid, self.node, self._set_title) - + def cleanup(self): '''Cleanup when the window intends to switch browsers.''' self.active = False - + self._clean_actions() self._clean_treemodel() self._clean_title() - + self.window._initial_state() - + def update_theme(self): '''Called when the default theme is changed.''' pass - + def on_browse_button_clicked(self, widget = None): '''When we want to browse an agent: Open a new services window with a browser for the agent type.''' @@ -784,7 +787,7 @@ class AgentBrowser: node = model[iter][1].decode('utf-8') if jid: self.cache.get_info(jid, node, self._update_actions, nofetch = True) - + def _update_actions(self, jid, node, identities, features, data): '''Continuation of update_actions.''' if not identities or not self.browse_button: @@ -792,7 +795,7 @@ class AgentBrowser: klass = self.cache.get_browser(identities, features) if klass: self.browse_button.set_sensitive(True) - + def default_action(self): '''When we double-click a row: perform the default action on the selected item.''' @@ -803,7 +806,7 @@ class AgentBrowser: node = model[iter][1].decode('utf-8') if jid: self.cache.get_info(jid, node, self._default_action, nofetch = True) - + def _default_action(self, jid, node, identities, features, data): '''Continuation of default_action.''' if self.cache.get_browser(identities, features): @@ -820,16 +823,16 @@ class AgentBrowser: self.window.progressbar.pulse() self.window.progressbar.show() self._pulse_timeout = gobject.timeout_add(250, self._pulse_timeout_cb) - self.cache.get_items(self.jid, self.node, self._agent_items, + self.cache.get_items(self.jid, self.node, self._agent_items, force = force, args = (force,)) - + def _pulse_timeout_cb(self, *args): '''Simple callback to keep the progressbar pulsing.''' if not self.active: return False self.window.progressbar.pulse() return True - + def _find_item(self, jid, node): '''Check if an item is already in the treeview. Return an iter to it if so, None otherwise.''' @@ -844,7 +847,7 @@ class AgentBrowser: if iter: return iter return None - + def _agent_items(self, jid, node, items, force): '''Callback for when we receive a list of agent items.''' model = self.window.services_treeview.get_model() @@ -870,7 +873,7 @@ _('This service does not contain any items to browse.')).get_response() # Not in the treeview self._total_items += 1 self._add_item(model, jid, node, item, force) - + def _agent_info(self, jid, node, identities, features, data): '''Callback for when we receive info about an agent's item.''' addr = get_agent_address(jid, node) @@ -904,7 +907,7 @@ _('This service does not contain any items to browse.')).get_response() '''Called when an item should be updated in the model with further info. The result of a disco#info query.''' model[iter][2] = identities[0].get('name', '') - + def _update_error(self, model, iter, jid, node): '''Called when a disco#info query failed for an item.''' pass @@ -933,7 +936,7 @@ class ToplevelAgentBrowser(AgentBrowser): cell.set_property('pixbuf', pix) else: cell.set_property('visible', False) - + def _text_renderer_data_func(self, col, cell, model, iter): '''Callback for setting the text renderer's properties.''' jid = model.get_value(iter, 0) @@ -985,7 +988,7 @@ class ToplevelAgentBrowser(AgentBrowser): (position[0], position[1] + rect.y)) else: self.tooltip.hide_tooltip() - + # These are all callbacks to make tooltips work def on_treeview_leave_notify_event(self, widget, event): model = widget.get_model() @@ -1030,7 +1033,7 @@ class ToplevelAgentBrowser(AgentBrowser): model.set_sort_column_id(4, gtk.SORT_ASCENDING) view = self.window.services_treeview view.set_model(model) - + col = gtk.TreeViewColumn() # Icon Renderer renderer = gtk.CellRendererPixbuf() @@ -1045,10 +1048,10 @@ class ToplevelAgentBrowser(AgentBrowser): # Save this so we can go along with theme changes self._renderer = renderer self.update_theme() - + view.insert_column(col, -1) col.set_resizable(True) - + # Connect signals scrollwin = self.window.services_scrollwin self._view_signals.append(view.connect('leave-notify-event', @@ -1061,7 +1064,7 @@ class ToplevelAgentBrowser(AgentBrowser): self.on_treeview_event_hide_tooltip)) self._scroll_signal = scrollwin.connect('scroll-event', self.on_treeview_event_hide_tooltip) - + def _clean_treemodel(self): # Disconnect signals view = self.window.services_treeview @@ -1073,7 +1076,7 @@ class ToplevelAgentBrowser(AgentBrowser): scrollwin.disconnect(self._scroll_signal) self._scroll_signal = None AgentBrowser._clean_treemodel(self) - + def _add_actions(self): AgentBrowser._add_actions(self) self.register_button = gtk.Button(label=_("Re_gister"), @@ -1103,14 +1106,14 @@ class ToplevelAgentBrowser(AgentBrowser): def cleanup(self): self.tooltip.hide_tooltip() AgentBrowser.cleanup(self) - + def update_theme(self): theme = gajim.config.get('roster_theme') bgcolor = gajim.config.get_per('themes', theme, 'groupbgcolor') if bgcolor: self._renderer.set_property('cell-background', bgcolor) self.window.services_treeview.queue_draw() - + def on_register_button_clicked(self, widget = None): '''When we want to register an agent: request information about registering with the agent and close the @@ -1190,7 +1193,7 @@ class ToplevelAgentBrowser(AgentBrowser): self.register_button.set_sensitive(True) if self.join_button and xmpp.NS_MUC in features: self.join_button.set_sensitive(True) - + def _default_action(self, jid, node, identities, features, data): if AgentBrowser._default_action(self, jid, node, identities, features, data): return True @@ -1203,7 +1206,7 @@ class ToplevelAgentBrowser(AgentBrowser): def browse(self, force = False): self._progress = 0 AgentBrowser.browse(self, force = force) - + def _expand_all(self): '''Expand all items in the treeview''' # GTK apparently screws up here occasionally. :/ @@ -1214,7 +1217,7 @@ class ToplevelAgentBrowser(AgentBrowser): #self.expanding = True #gobject.idle_add(expand_all) self.window.services_treeview.expand_all() - + def _update_progressbar(self): '''Update the progressbar.''' # Refresh this every update @@ -1236,13 +1239,13 @@ class ToplevelAgentBrowser(AgentBrowser): id = gobject.timeout_add(20000, self._hide_progressbar_cb) self._progressbar_sourceid = id self.window.progressbar.set_fraction(fraction) - + def _hide_progressbar_cb(self, *args): '''Simple callback to hide the progressbar a second after we finish.''' if self.active: self.window.progressbar.hide() return False - + def _friendly_category(self, category, type=None): '''Get the friendly category name and priority.''' cat = None @@ -1258,13 +1261,13 @@ class ToplevelAgentBrowser(AgentBrowser): except KeyError: cat, prio = _cat_to_descr['other'] return cat, prio - + def _create_category(self, cat, type=None): '''Creates a category row.''' model = self.window.services_treeview.get_model() cat, prio = self._friendly_category(cat, type) return model.append(None, ('', '', None, cat, prio)) - + def _find_category(self, cat, type=None): '''Looks up a category row and returns the iterator to it, or None.''' model = self.window.services_treeview.get_model() @@ -1277,7 +1280,7 @@ class ToplevelAgentBrowser(AgentBrowser): if iter: return iter return None - + def _find_item(self, jid, node): model = self.window.services_treeview.get_model() iter = None @@ -1340,7 +1343,7 @@ class ToplevelAgentBrowser(AgentBrowser): descr = "%s\n%s" % (name, addr) else: descr = "%s" % addr - + # Update progress self._progress += 1 self._update_progressbar() @@ -1365,13 +1368,13 @@ class ToplevelAgentBrowser(AgentBrowser): return # Not in the right category, move it. model.remove(iter) - + # Check if the old category is empty if not model.iter_is_valid(old_cat_iter): old_cat_iter = self._find_category(old_cat) if not model.iter_children(old_cat_iter): model.remove(old_cat_iter) - + cat_iter = self._find_category(cat, type) if not cat_iter: cat_iter = self._create_category(cat, type) @@ -1389,7 +1392,7 @@ class MucBrowser(AgentBrowser): def __init__(self, *args, **kwargs): AgentBrowser.__init__(self, *args, **kwargs) self.join_button = None - + def _create_treemodel(self): # JID, node, name, users, description, fetched # This is rather long, I'd rather not use a data_func here though. @@ -1437,9 +1440,9 @@ class MucBrowser(AgentBrowser): self.vadj.disconnect(self.vadj_cbid) self.vadj_cbid = None AgentBrowser._clean_treemodel(self) - + def _add_actions(self): - self.join_button = gtk.Button(label=_("_Join"), use_underline=True) + self.join_button = gtk.Button(label=_('_Join'), use_underline=True) self.join_button.connect('clicked', self.on_join_button_clicked) self.window.action_buttonbox.add(self.join_button) self.join_button.show_all() diff --git a/src/roster_window.py b/src/roster_window.py index 791b44fcf..7d568d58d 100644 --- a/src/roster_window.py +++ b/src/roster_window.py @@ -185,7 +185,7 @@ class RosterWindow: typestr = 'contact' if g == _('Transports'): typestr = 'agent' - + # we add some values here. see draw_contact for more model.append(iterG, (None, user.name, typestr, user.jid, account, False, None)) @@ -351,15 +351,15 @@ class RosterWindow: def on_delete_motd_menuitem_activate(self, widget, account): server = gajim.config.get_per('accounts', account, 'hostname') server += '/announce/motd/delete' - gajim.connections[account].send_motd(server) - + gajim.connections[account].send_motd(server) + def on_online_users_menuitem_activate(self, widget, account): pass #FIXME: impement disco in users for 0.9 def get_and_connect_advanced_menuitem_menu(self, account): xml = gtk.glade.XML(GTKGUI_GLADE, 'advanced_menuitem_menu', APP) advanced_menuitem_menu = xml.get_widget('advanced_menuitem_menu') - + send_single_message_menuitem = xml.get_widget( 'send_single_message_menuitem') xml_console_menuitem = xml.get_widget('xml_console_menuitem') @@ -370,7 +370,7 @@ class RosterWindow: set_motd_menuitem = xml.get_widget('set_motd_menuitem') update_motd_menuitem = xml.get_widget('update_motd_menuitem') delete_motd_menuitem = xml.get_widget('delete_motd_menuitem') - + send_single_message_menuitem.connect('activate', self.on_send_single_message_menuitem_activate, account) @@ -391,12 +391,12 @@ class RosterWindow: update_motd_menuitem.connect('activate', self.on_update_motd_menuitem_activate, account) - + delete_motd_menuitem.connect('activate', self.on_delete_motd_menuitem_activate, account) - + advanced_menuitem_menu.show_all() - + return advanced_menuitem_menu def make_menu(self): @@ -409,7 +409,7 @@ class RosterWindow: show_offline_contacts_menuitem = self.xml.get_widget( 'show_offline_contacts_menuitem') profile_avatar_menuitem = self.xml.get_widget('profile_avatar_menuitem') - + # make it sensitive. it is insensitive only if no accounts are *available* advanced_menuitem.set_sensitive(True) @@ -423,12 +423,12 @@ class RosterWindow: service_disco_menuitem.handler_disconnect( self.service_disco_handler_id) self.service_disco_handler_id = None - + if self.new_message_menuitem_handler_id: new_message_menuitem.handler_disconnect( self.new_message_menuitem_handler_id) self.new_message_menuitem_handler_id = None - + #remove the existing submenus add_new_contact_menuitem.remove_submenu() service_disco_menuitem.remove_submenu() @@ -460,7 +460,7 @@ class RosterWindow: item.add(label) item.connect('state-changed', self.on_bm_header_changed_state) sub_menu.append(item) - + item = gtk.MenuItem(_('_Join New Room')) item.connect('activate', self.on_join_gc_activate, account) sub_menu.append(item) @@ -475,7 +475,7 @@ class RosterWindow: #and make sure it works newitem = gtk.SeparatorMenuItem() # seperator sub_menu.append(newitem) - + newitem = gtk.ImageMenuItem(_('Manage Bookmarks...')) img = gtk.image_new_from_stock(gtk.STOCK_PREFERENCES, gtk.ICON_SIZE_MENU) @@ -496,7 +496,7 @@ class RosterWindow: item.connect('activate', self.on_add_new_contact, account) add_new_contact_menuitem.set_submenu(sub_menu) sub_menu.show_all() - + #disco sub_menu = gtk.Menu() for account in gajim.connections: @@ -510,7 +510,7 @@ class RosterWindow: service_disco_menuitem.set_submenu(sub_menu) sub_menu.show_all() - + #new message sub_menu = gtk.Menu() for account in gajim.connections: @@ -519,12 +519,12 @@ class RosterWindow: continue item = gtk.MenuItem(_('using account %s') % account) sub_menu.append(item) - item.connect('activate', self.on_new_message_menuitem_activate, + item.connect('activate', self.on_new_message_menuitem_activate, account) - + new_message_menuitem.set_submenu(sub_menu) sub_menu.show_all() - + #Advanced Actions sub_menu = gtk.Menu() for account in gajim.connections: @@ -533,10 +533,10 @@ class RosterWindow: advanced_menuitem_menu = self.get_and_connect_advanced_menuitem_menu( account) item.set_submenu(advanced_menuitem_menu) - + advanced_menuitem.set_submenu(sub_menu) sub_menu.show_all() - + else: if len(gajim.connections) == 1: # user has only one account #add @@ -545,13 +545,13 @@ class RosterWindow: '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, + 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, + connect('activate', self.on_new_message_menuitem_activate, gajim.connections.keys()[0]) #new msg accel if not self.have_new_message_accel: @@ -559,7 +559,7 @@ class RosterWindow: 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) @@ -567,11 +567,10 @@ class RosterWindow: elif len(gajim.connections) == 0: # user has no accounts advanced_menuitem.set_sensitive(False) - #FIXME: Gajim 0.9 should have this visible profile_avatar_menuitem.set_no_show_all(True) profile_avatar_menuitem.hide() - + if at_least_one_account_connected: new_message_menuitem.set_sensitive(True) join_gc_menuitem.set_sensitive(True) @@ -704,7 +703,7 @@ class RosterWindow: uf_show = helpers.get_uf_show(show) gajim.interface.instances[account]['chats'][jid].print_conversation( _('%s is now %s (%s)') % (name, uf_show, status), jid, 'status') - + if contact == gajim.get_contact_instance_with_highest_priority(\ account, contact.jid): gajim.interface.instances[account]['chats'][jid].draw_name_banner(contact) @@ -773,12 +772,12 @@ class RosterWindow: contacts = [] connection = gajim.connections[account] # get our current contact info - contact = Contact(jid = jid, name = account, - show = connection.get_status(), + contact = Contact(jid = jid, name = account, + show = connection.get_status(), sub = 'both', - status = connection.status, + status = connection.status, resource = gajim.config.get_per('accounts', connection.name, - 'resource'), + 'resource'), priority = gajim.config.get_per('accounts', connection.name, 'priority'), keyID = gajim.config.get_per('accounts', connection.name, @@ -794,9 +793,9 @@ class RosterWindow: show = roster.getShow(jid+'/'+resource) if not show: show = 'online' - contact = Contact(jid=jid, name=account, + contact = Contact(jid=jid, name=account, show=show, - status=roster.getStatus(jid+'/'+resource), resource=resource, + status=roster.getStatus(jid+'/'+resource), resource=resource, priority=roster.getPriority(jid+'/'+resource)) contacts.append(contact) if self.tooltip.timeout == 0 or self.tooltip.id != props[0]: @@ -843,10 +842,10 @@ class RosterWindow: # we then select Rename and focus-in # focus-in callback checks on this var and if is NOT None # it redraws the selected contact resulting in stopping our rename - # procedure. So set this to None to stop that + # procedure. So set this to None to stop that self._last_selected_contact = None model = self.tree.get_model() - + row_type = model[iter][C_TYPE] jid = model[iter][C_JID].decode('utf-8') account = model[iter][C_ACCOUNT].decode('utf-8') @@ -859,7 +858,7 @@ class RosterWindow: model[iter][C_EDITABLE] = True # set 'editable' to True self.tree.set_cursor(path, self.tree.get_column(0), True) - + def on_assign_pgp_key(self, widget, user, account): attached_keys = gajim.config.get_per('accounts', account, 'attached_gpg_keys').split() @@ -893,7 +892,7 @@ class RosterWindow: def on_edit_groups(self, widget, user, account): dlg = dialogs.EditGroupsDialog(user, account) dlg.run() - + def on_history(self, widget, contact, account): '''When history menuitem is activated: call log window''' if gajim.interface.instances['logs'].has_key(contact.jid): @@ -908,11 +907,11 @@ class RosterWindow: dialogs.SingleMessageWindow(account, action = 'send') else: dialogs.SingleMessageWindow(account, contact.jid, 'send') - + def on_send_file_menuitem_activate(self, widget, account, contact): - gajim.interface.instances['file_transfers'].show_file_send_request( + gajim.interface.instances['file_transfers'].show_file_send_request( account, contact) - + def mk_menu_user(self, event, iter): '''Make contact's popup menu''' model = self.tree.get_model() @@ -921,13 +920,13 @@ class RosterWindow: account = model[iter][C_ACCOUNT].decode('utf-8') contact = gajim.get_highest_prio_contact_from_contacts( gajim.contacts[account][jid]) - + xml = gtk.glade.XML(GTKGUI_GLADE, 'roster_contact_context_menu', APP) roster_contact_context_menu = xml.get_widget( 'roster_contact_context_menu') childs = roster_contact_context_menu.get_children() - + start_chat_menuitem = childs[0] send_single_message_menuitem = childs[1] rename_menuitem = childs[2] @@ -936,7 +935,7 @@ class RosterWindow: assign_openpgp_separator = childs[4] send_file_menuitem = childs[5] assign_openpgp_key_menuitem = childs[6] - + #skip a seperator send_auth_menuitem, ask_auth_menuitem, revoke_auth_menuitem =\ childs[8].get_submenu().get_children() @@ -945,15 +944,15 @@ class RosterWindow: #skip a seperator information_menuitem = childs[12] history_menuitem = childs[13] - - + + if contact.resource: send_file_menuitem.connect('activate', self.on_send_file_menuitem_activate, account, contact) else: # if we do not have resource we cannot send file send_file_menuitem.hide() send_file_menuitem.set_no_show_all(True) - + start_chat_menuitem.connect('activate', self.on_roster_treeview_row_activated, path) send_single_message_menuitem.connect('activate', @@ -993,7 +992,7 @@ class RosterWindow: else: revoke_auth_menuitem.connect('activate', self.revoke_auth, jid, account) - + else: # contact is in group 'not in the roster' add_to_roster_menuitem.set_no_show_all(False) edit_groups_menuitem.hide() @@ -1003,7 +1002,7 @@ class RosterWindow: assign_openpgp_separator.set_no_show_all(True) assign_openpgp_key_menuitem.hide() assign_openpgp_key_menuitem.set_no_show_all(True) - + add_to_roster_menuitem.connect('activate', self.on_add_to_roster, contact, account) @@ -1017,7 +1016,7 @@ class RosterWindow: '''Make group's popup menu''' model = self.tree.get_model() path = model.get_path(iter) - + menu = gtk.Menu() rename_item = gtk.ImageMenuItem(_('Re_name')) @@ -1028,10 +1027,10 @@ class RosterWindow: rename_item.connect('activate', self.on_rename, iter, path) event_button = self.get_possible_button_event(event) - + menu.popup(None, None, None, event_button, event.time) menu.show_all() - + def mk_menu_agent(self, event, iter): '''Make agent's popup menu''' model = self.tree.get_model() @@ -1040,7 +1039,7 @@ class RosterWindow: account = model[iter][C_ACCOUNT].decode('utf-8') user = gajim.get_contact_instance_with_highest_priority(account, jid) menu = gtk.Menu() - + item = gtk.ImageMenuItem(_('_Log on')) icon = gtk.image_new_from_stock(gtk.STOCK_YES, gtk.ICON_SIZE_MENU) item.set_image(icon) @@ -1085,14 +1084,14 @@ class RosterWindow: else: gajim.interface.instances[account]['account_modification'] = \ config.AccountModificationWindow(account) - + def get_possible_button_event(self, event): '''mouse or keyboard caused the event?''' if event.type == gtk.gdk.KEY_PRESS: event_button = 0 # no event.button so pass 0 else: # BUTTON_PRESS event, so pass event.button event_button = event.button - + return event_button def on_change_status_message_activate(self, widget, account): @@ -1116,7 +1115,7 @@ class RosterWindow: xml = gtk.glade.XML(GTKGUI_GLADE, 'account_context_menu', APP) account_context_menu = xml.get_widget('account_context_menu') childs = account_context_menu.get_children() - + status_menuitem = childs[0] # we skip the seperator # skip advanced_actions_menuitem, childs[2] @@ -1129,7 +1128,7 @@ class RosterWindow: add_contact_menuitem = childs[5] join_group_chat_menuitem = childs[6] new_message_menuitem = childs[7] - + sub_menu = gtk.Menu() status_menuitem.set_submenu(sub_menu) @@ -1312,7 +1311,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) self.tree.get_selection().select_path(path) self.show_appropriate_context_menu(event, iter) - + return True def on_roster_treeview_button_press_event(self, widget, event): @@ -1320,7 +1319,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) self.tooltip.hide_tooltip() if event.button == 3: # Right click try: - path, column, x, y = self.tree.get_path_at_pos(int(event.x), + path, column, x, y = self.tree.get_path_at_pos(int(event.x), int(event.y)) except TypeError: self.tree.get_selection().unselect_all() @@ -1330,10 +1329,10 @@ _('If "%s" accepts this request you will know his or her status.') %jid) iter = model.get_iter(path) self.show_appropriate_context_menu(event, iter) return True - + if event.button == 2: # Middle click try: - path, column, x, y = self.tree.get_path_at_pos(int(event.x), + path, column, x, y = self.tree.get_path_at_pos(int(event.x), int(event.y)) except TypeError: self.tree.get_selection().unselect_all() @@ -1373,10 +1372,10 @@ _('If "%s" accepts this request you will know his or her status.') %jid) current_show = gajim.SHOW_LIST[gajim.connections[acct].connected] self.send_status(acct, current_show, message) return True - + if event.button == 1: # Left click try: - path, column, x, y = self.tree.get_path_at_pos(int(event.x), + path, column, x, y = self.tree.get_path_at_pos(int(event.x), int(event.y)) except TypeError: self.tree.get_selection().unselect_all() @@ -1411,9 +1410,9 @@ _('If "%s" accepts this request you will know his or her status.') %jid) user1 = Contact(jid = user.jid, name = user.name, groups = [_('not in the roster')], show = 'not in the roster', status = '', ask = 'none', keyID = user.keyID) - gajim.contacts[account][user.jid] = [user1] - self.add_contact_to_roster(user.jid, account) - + gajim.contacts[account][user.jid] = [user1] + self.add_contact_to_roster(user.jid, account) + def forget_gpg_passphrase(self, keyid): if self.gpg_passphrase.has_key(keyid): del self.gpg_passphrase[keyid] @@ -1439,7 +1438,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) passphrase = '' w = dialogs.PassphraseDialog( _('Password Required'), - _('Enter your password for account %s') % account, + _('Enter your password for account %s') % account, _('Save password')) passphrase, save = w.run() if passphrase == -1: @@ -1460,12 +1459,12 @@ _('If "%s" accepts this request you will know his or her status.') %jid) if use_gpg_agent: save_gpg_pass = False else: - save_gpg_pass = gajim.config.get_per('accounts', account, + save_gpg_pass = gajim.config.get_per('accounts', account, 'savegpgpass') keyid = gajim.config.get_per('accounts', account, 'keyid') if keyid and gajim.connections[account].connected < 2 and \ gajim.config.get('usegpg'): - + if use_gpg_agent: self.gpg_passphrase[keyid] = None else: @@ -1478,7 +1477,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) else: w = dialogs.PassphraseDialog( _('Passphrase Required'), - _('Enter GPG key passphrase for account %s') % account, + _('Enter GPG key passphrase for account %s') % account, _('Save passphrase')) passphrase, save = w.run() if passphrase == -1: @@ -1488,14 +1487,14 @@ _('If "%s" accepts this request you will know his or her status.') %jid) gobject.timeout_add(30000, self.forget_gpg_passphrase, keyid) if save: gajim.config.set_per('accounts', account, 'savegpgpass', True) - gajim.config.set_per('accounts', account, 'gpgpassword', + gajim.config.set_per('accounts', account, 'gpgpassword', passphrase) gajim.connections[account].gpg_passphrase(passphrase) - + for room_jid in gajim.interface.instances[account]['gc']: if room_jid != 'tabbed': nick = gajim.interface.instances[account]['gc'][room_jid].nicks[room_jid] - gajim.connections[account].send_gc_status(nick, room_jid, status, + gajim.connections[account].send_gc_status(nick, room_jid, status, txt) gajim.connections[account].change_status(status, txt, sync, auto) if status == 'online' and gajim.interface.sleeper.getState() != \ @@ -1573,7 +1572,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) bug_user = False for acct in accounts: if not one_connected 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'): continue # We're going to change our status to invisible @@ -1599,7 +1598,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) if not one_connected or gajim.connections[acct].connected > 1: self.send_status(acct, status, message) self.update_status_combobox() - + def update_status_combobox(self): # table to change index in connection.connected to index in combobox table = {'offline':9, 'connecting':9, 'online':0, 'chat':1, 'away':2, @@ -1633,7 +1632,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) self.chg_contact_status(user, 'offline', 'Disconnected', account) self.update_status_combobox() self.make_menu() - + def new_chat(self, contact, account): chats = gajim.interface.instances[account]['chats'] if gajim.config.get('usetabbedchat'): @@ -1661,7 +1660,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) groups = [_('not in the roster')], show = 'not in the roster', status = '', sub = 'none', keyID = keyID) gajim.contacts[account][jid] = [contact] - self.add_contact_to_roster(contact.jid, account) + self.add_contact_to_roster(contact.jid, account) if not gajim.interface.instances[account]['chats'].has_key(jid): self.new_chat(contact, account) @@ -1693,7 +1692,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) user1 = Contact(jid = jid, name = jid.split('@')[0], groups = [_('not in the roster')], show = 'not in the roster', status = '', ask = 'none', keyID = keyID, resource = resource) - gajim.contacts[account][jid] = [user1] + gajim.contacts[account][jid] = [user1] self.add_contact_to_roster(jid, account) iters = self.get_contact_iter(jid, account) @@ -1721,7 +1720,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) action = 'receive', from_whom = jid, subject = subject, message = msg, resource = resource) return - + # We print if window is opened and it's not a single message if gajim.interface.instances[account]['chats'].has_key(jid) and \ msg_type != 'normal': @@ -1792,10 +1791,10 @@ _('If "%s" accepts this request you will know his or her status.') %jid) def on_new_message_menuitem_activate(self, widget, account): dialogs.NewMessageDialog(account) - + def on_contents_menuitem_activate(self, widget): helpers.launch_browser_mailer('url', 'http://trac.gajim.org/wiki') - + def on_faq_menuitem_activate(self, widget): helpers.launch_browser_mailer('url', 'http://trac.gajim.org/wiki/GajimFaq') @@ -1806,7 +1805,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) if gajim.interface.instances.has_key('accounts'): gajim.interface.instances['accounts'].window.present() else: - gajim.interface.instances['accounts'] = config.AccountsWindow() + gajim.interface.instances['accounts'] = config.AccountsWindow() def on_file_transfers_menuitem_activate(self, widget): if gajim.interface.instances['file_transfers'].window.get_property('visible'): @@ -1824,7 +1823,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) self.close_all(w) else: w.window.destroy() - + def on_roster_window_delete_event(self, widget, event): '''When we want to close the window''' if gajim.interface.systray_enabled and not gajim.config.get('quit_on_roster_x_button'): @@ -1854,7 +1853,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) if gtk.gtk_version >= (2, 8, 0) and gtk.pygtk_version >= (2, 8, 0): if widget.props.urgency_hint: widget.props.urgency_hint = False - + # if a contact row is selected, update colors (eg. for status msg) # because gtk engines may differ in bg when window is selected # or not @@ -1942,7 +1941,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) return if recent: - dialog = dialogs.ConfirmationDialog(_('You have unread messages'), + dialog = dialogs.ConfirmationDialog(_('You have unread messages'), _('Messages will only be available for reading them later if you have history enabled.')) if dialog.get_response() != gtk.RESPONSE_OK: return @@ -2060,7 +2059,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) ''' start editing a cell in the tree ''' path = self.tree.get_cursor()[0] self.editing_path = path - + def on_editing_canceled(self, cell): '''editing has been canceled''' path = self.tree.get_cursor()[0] @@ -2121,10 +2120,10 @@ _('If "%s" accepts this request you will know his or her status.') %jid) user.groups.remove(old_name) user.groups.append(new_text) self.add_contact_to_roster(user.jid, account) - gajim.connections[account].update_contact(user.jid, user.name, + gajim.connections[account].update_contact(user.jid, user.name, user.groups) model.set_value(iter, 5, False) - + def on_service_disco_menuitem_activate(self, widget, account): server_jid = gajim.config.get_per('accounts', account, 'hostname') if gajim.interface.instances[account]['disco'].has_key(server_jid): @@ -2142,7 +2141,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) 'dnd', 'invisible', 'offline', 'error', 'requested', 'message', 'opened', 'closed', 'not in the roster', 'muc_active'): - + # try to open a pixfile with the correct method state_file = state.replace(' ', '_') files = [] @@ -2185,7 +2184,8 @@ _('If "%s" accepts this request you will know his or her status.') %jid) # Update opened chat windows for jid in gajim.interface.instances[account]['chats']: if jid != 'tabbed': - gajim.interface.instances[account]['chats'][jid].set_state_image(jid) + gajim.interface.instances[account]['chats'][jid].set_state_image( + jid) # Update opened groupchat windows gcs = gajim.interface.instances[account]['gc'] if gcs.has_key('tabbed'): @@ -2244,7 +2244,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) renderer.set_property('cell-background', None) renderer.set_property('xalign', 1) renderer.set_property('width', 20) - + def nameCellDataFunc(self, column, renderer, model, iter, data = None): '''When a row is added, set properties for name renderer''' theme = gajim.config.get('roster_theme') @@ -2259,7 +2259,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) renderer.set_property('cell-background', color) else: renderer.set_property('cell-background', None) - renderer.set_property('font', + renderer.set_property('font', gtkgui_helpers.get_theme_font_for_option(theme, 'accountfont')) renderer.set_property('xpad', 0) renderer.set_property('width', 3) @@ -2468,7 +2468,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) elif self.nb_unread == 1: start = '* ' self.window.set_title(start + 'Gajim') - + gtkgui_helpers.set_unset_urgency_hint(self.window, self.nb_unread) def iter_is_separator(self, model, iter): @@ -2520,7 +2520,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) self.tree = self.xml.get_widget('roster_treeview') self.tree.get_selection().connect('changed', self._on_treeview_selection_changed) - + self._last_selected_contact = None # None or holds jid, account tupple self.nb_unread = 0 self.last_save_dir = None @@ -2551,14 +2551,14 @@ _('If "%s" accepts this request you will know his or her status.') %jid) model.set_sort_column_id(1, gtk.SORT_ASCENDING) self.tree.set_model(model) self.make_jabber_state_images() - + #FIXME: why do we init this dict of dicts here? #for loop below does it. maybe so we're sure we always have the keys? #eventhough childs can be empty? I don't get it self.transports_state_images = { 'aim': {}, 'gadugadu': {}, 'irc': {}, 'icq': {}, 'msn': {}, 'sms': {}, 'tlen': {}, 'weather': {}, 'yahoo': {} } - + path = os.path.join(gajim.DATA_DIR, 'iconsets', 'transports') folders = os.listdir(path) for transport in folders: @@ -2574,7 +2574,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) cell = cell_renderer_image.CellRendererImage() self.status_combobox.pack_start(cell, False) - + # img to show is in in 2nd column of liststore self.status_combobox.add_attribute(cell, 'image', 1) # if it will be sensitive or not it is in the fourth column @@ -2610,15 +2610,15 @@ _('If "%s" accepts this request you will know his or her status.') %jid) uf_show = helpers.get_uf_show('offline') liststore.append([uf_show, self.jabber_state_images['offline'], 'offline', True]) - + status_combobox_items = ['online', 'chat', 'away', 'xa', 'dnd', 'invisible', 'separator1', 'change_status_msg', 'separator2', 'offline'] self.status_combobox.set_model(liststore) - + # default to offline number_of_menuitem = status_combobox_items.index('offline') self.status_combobox.set_active(number_of_menuitem) - + # holds index to previously selected item so if "change status message..." # is selected we can fallback to previously selected item and not stay # with that item selected @@ -2629,10 +2629,10 @@ _('If "%s" accepts this request you will know his or her status.') %jid) showOffline) # columns - + # this col has two cells: first one img, second one text col = gtk.TreeViewColumn() - + render_image = cell_renderer_image.CellRendererImage() # show img or +- col.pack_start(render_image, expand = False) col.add_attribute(render_image, 'image', C_IMG) @@ -2646,7 +2646,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) col.add_attribute(render_text, 'markup', C_NAME) # where we hold the name col.add_attribute(render_text, 'editable', C_EDITABLE) # where we hold if the row is editable col.set_cell_data_func(render_text, self.nameCellDataFunc, None) - + render_pixbuf = gtk.CellRendererPixbuf() # tls or avatar img col.pack_start(render_pixbuf, expand = False) col.add_attribute(render_pixbuf, 'pixbuf', C_SECPIXBUF) @@ -2654,7 +2654,7 @@ _('If "%s" accepts this request you will know his or her status.') %jid) None) self.tree.append_column(col) - + #do not show gtk arrows workaround col = gtk.TreeViewColumn() render_pixbuf = gtk.CellRendererPixbuf() diff --git a/src/systraywin32.py b/src/systraywin32.py index 064ebda24..41f6c822c 100644 --- a/src/systraywin32.py +++ b/src/systraywin32.py @@ -296,7 +296,8 @@ class SystrayWin32(systray.Systray): self.systray_winapi.notify_icon.set_tooltip(text) def set_img(self): - self.tray_ico_imgs = self.load_icos() + self.tray_ico_imgs = self.load_icos() #FIXME: do not do this here + # see gajim.interface.roster.reload_jabber_state_images() to merge self.systray_winapi.remove_notify_icon() if len(self.jids) > 0: state = 'message'