diff --git a/data/glade/zeroconf_context_menu.glade b/data/glade/zeroconf_context_menu.glade new file mode 100644 index 0000000000000000000000000000000000000000..e1e6ae710fa7fe2ae9a5b696260edb47d47aaec0 --- /dev/null +++ b/data/glade/zeroconf_context_menu.glade @@ -0,0 +1,89 @@ +<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> +<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> + +<glade-interface> + +<widget class="GtkMenu" id="zeroconf_context_menu"> + + <child> + <widget class="GtkImageMenuItem" id="status_menuitem"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Status</property> + <property name="use_underline">True</property> + + <child internal-child="image"> + <widget class="GtkImage" id="image1251"> + <property name="visible">True</property> + <property name="stock">gtk-network</property> + <property name="icon_size">1</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + </child> + </widget> + </child> + + <child> + <widget class="GtkImageMenuItem" id="join_group_chat_menuitem"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Group Chat</property> + <property name="use_underline">True</property> + + <child internal-child="image"> + <widget class="GtkImage" id="image1252"> + <property name="visible">True</property> + <property name="stock">gtk-connect</property> + <property name="icon_size">1</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + </child> + </widget> + </child> + + <child> + <widget class="GtkImageMenuItem" id="new_message_menuitem"> + <property name="visible">True</property> + <property name="label" translatable="yes">Send Single _Message...</property> + <property name="use_underline">True</property> + + <child internal-child="image"> + <widget class="GtkImage" id="image1253"> + <property name="visible">True</property> + <property name="stock">gtk-new</property> + <property name="icon_size">1</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + </child> + </widget> + </child> + + <child> + <widget class="GtkImageMenuItem" id="zeroconf_properties_menuitem"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Zeroconf Properties...</property> + <property name="use_underline">True</property> + + <child internal-child="image"> + <widget class="GtkImage" id="image1254"> + <property name="visible">True</property> + <property name="stock">gtk-preferences</property> + <property name="icon_size">1</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + </child> + </widget> + </child> +</widget> + +</glade-interface> diff --git a/src/common/zeroconf/connection_zeroconf.py b/src/common/zeroconf/connection_zeroconf.py index 89700d8342051caf48e3c5194c21c8aaa40c0a34..54e32a680832a39ac227c4986bfb78073c1e056c 100644 --- a/src/common/zeroconf/connection_zeroconf.py +++ b/src/common/zeroconf/connection_zeroconf.py @@ -101,13 +101,15 @@ class ConnectionZeroconf(ConnectionHandlersZeroconf): gajim.config.set_per('accounts', 'zeroconf', 'no_log_for', False) gajim.config.set_per('accounts', 'zeroconf', 'password', 'zeroconf') gajim.config.set_per('accounts', 'zeroconf', 'sync_with_global_status', True) + username = unicode(getpass.getuser()) gajim.config.set_per('accounts', 'zeroconf', 'name', username) #XXX make sure host is US-ASCII host = unicode(socket.gethostname()) gajim.config.set_per('accounts', 'zeroconf', 'hostname', host) port = 5298 - gajim.config.set_per('accounts', 'zeroconf', 'custom_port', 5298) + gajim.config.set_per('accounts', 'zeroconf', 'custom_port', port) + gajim.config.set_per('accounts', 'zeroconf', 'is_zeroconf', True) else: username = gajim.config.get_per('accounts', 'zeroconf', 'name') host = gajim.config.get_per('accounts', 'zeroconf', 'hostname') diff --git a/src/config.py b/src/config.py index 0e3427395e0fff21a27e3bd2093484e14a27b71d..818581099b71a1685a381b3f9c05a22e63379064 100644 --- a/src/config.py +++ b/src/config.py @@ -1842,8 +1842,9 @@ class AccountsWindow: model = self.accounts_treeview.get_model() model.clear() for account in gajim.connections: - iter = model.append() - model.set(iter, 0, account, 1, gajim.get_hostname_from_account(account)) +# if account != 'zeroconf': + iter = model.append() + model.set(iter, 0, account, 1, gajim.get_hostname_from_account(account)) def on_accounts_treeview_cursor_changed(self, widget): '''Activate delete and modify buttons when a row is selected''' diff --git a/src/roster_window.py b/src/roster_window.py index b7f46ba33119257f87d5169bfd576d847b88a2eb..a1c275f8ed873b0b7903312c0d6b42e8c728eb44 100644 --- a/src/roster_window.py +++ b/src/roster_window.py @@ -1746,6 +1746,14 @@ class RosterWindow: gajim.interface.instances[account]['account_modification'] = \ config.AccountModificationWindow(account) + def on_zeroconf_properties(self, widget, account): + if gajim.interface.instances.has_key('zeroconf_properties'): + gajim.interface.instances['zeroconf_properties'].\ + window.present() + else: + gajim.interface.instances['zeroconf_properties'] = \ + config.ZeroconfPropertiesWindow() + def on_open_gmail_inbox(self, widget, account): if gajim.config.get_per('accounts', account, 'savepass'): url = ('http://www.google.com/accounts/ServiceLoginAuth?service=mail&Email=%s&Passwd=%s&continue=https://mail.google.com/mail') %\ @@ -1771,71 +1779,122 @@ class RosterWindow: path = os.path.join(gajim.DATA_DIR, 'iconsets', iconset, '16x16') state_images = self.load_iconset(path) - xml = gtkgui_helpers.get_glade('account_context_menu.glade') - account_context_menu = xml.get_widget('account_context_menu') + if not gajim.config.get_per('accounts', account, 'is_zeroconf'): + xml = gtkgui_helpers.get_glade('account_context_menu.glade') + account_context_menu = xml.get_widget('account_context_menu') + + status_menuitem = xml.get_widget('status_menuitem') + join_group_chat_menuitem =xml.get_widget('join_group_chat_menuitem') + open_gmail_inbox_menuitem = xml.get_widget('open_gmail_inbox_menuitem') + new_message_menuitem = xml.get_widget('new_message_menuitem') + add_contact_menuitem = xml.get_widget('add_contact_menuitem') + service_discovery_menuitem = xml.get_widget('service_discovery_menuitem') + edit_account_menuitem = xml.get_widget('edit_account_menuitem') + sub_menu = gtk.Menu() + status_menuitem.set_submenu(sub_menu) - status_menuitem = xml.get_widget('status_menuitem') - join_group_chat_menuitem =xml.get_widget('join_group_chat_menuitem') - open_gmail_inbox_menuitem = xml.get_widget('open_gmail_inbox_menuitem') - new_message_menuitem = xml.get_widget('new_message_menuitem') - add_contact_menuitem = xml.get_widget('add_contact_menuitem') - service_discovery_menuitem = xml.get_widget('service_discovery_menuitem') - edit_account_menuitem = xml.get_widget('edit_account_menuitem') - sub_menu = gtk.Menu() - status_menuitem.set_submenu(sub_menu) + for show in ('online', 'chat', 'away', 'xa', 'dnd', 'invisible'): + uf_show = helpers.get_uf_show(show, use_mnemonic = True) + item = gtk.ImageMenuItem(uf_show) + icon = state_images[show] + item.set_image(icon) + sub_menu.append(item) + item.connect('activate', self.change_status, account, show) - for show in ('online', 'chat', 'away', 'xa', 'dnd', 'invisible'): - uf_show = helpers.get_uf_show(show, use_mnemonic = True) + item = gtk.SeparatorMenuItem() + sub_menu.append(item) + + item = gtk.ImageMenuItem(_('_Change Status Message')) + path = os.path.join(gajim.DATA_DIR, 'pixmaps', 'kbd_input.png') + img = gtk.Image() + img.set_from_file(path) + item.set_image(img) + sub_menu.append(item) + item.connect('activate', self.on_change_status_message_activate, account) + if gajim.connections[account].connected < 2: + item.set_sensitive(False) + + uf_show = helpers.get_uf_show('offline', use_mnemonic = True) item = gtk.ImageMenuItem(uf_show) - icon = state_images[show] + icon = state_images['offline'] item.set_image(icon) sub_menu.append(item) - item.connect('activate', self.change_status, account, show) - - item = gtk.SeparatorMenuItem() - sub_menu.append(item) + item.connect('activate', self.change_status, account, 'offline') - item = gtk.ImageMenuItem(_('_Change Status Message')) - path = os.path.join(gajim.DATA_DIR, 'pixmaps', 'kbd_input.png') - img = gtk.Image() - img.set_from_file(path) - item.set_image(img) - sub_menu.append(item) - item.connect('activate', self.on_change_status_message_activate, account) - if gajim.connections[account].connected < 2: - item.set_sensitive(False) + if gajim.config.get_per('accounts', account, 'hostname') not in gajim.gmail_domains: + open_gmail_inbox_menuitem.set_no_show_all(True) + open_gmail_inbox_menuitem.hide() + else: + open_gmail_inbox_menuitem.connect('activate', self.on_open_gmail_inbox, + account) - uf_show = helpers.get_uf_show('offline', use_mnemonic = True) - item = gtk.ImageMenuItem(uf_show) - icon = state_images['offline'] - item.set_image(icon) - sub_menu.append(item) - item.connect('activate', self.change_status, account, 'offline') + edit_account_menuitem.connect('activate', self.on_edit_account, account) + add_contact_menuitem.connect('activate', self.on_add_new_contact, account) + service_discovery_menuitem.connect('activate', + self.on_service_disco_menuitem_activate, account) + + gc_sub_menu = gtk.Menu() # gc is always a submenu + join_group_chat_menuitem.set_submenu(gc_sub_menu) + self.add_bookmarks_list(gc_sub_menu, account) + new_message_menuitem.connect('activate', + self.on_new_message_menuitem_activate, account) - if gajim.config.get_per('accounts', account, 'hostname') not in gajim.gmail_domains: - open_gmail_inbox_menuitem.set_no_show_all(True) - open_gmail_inbox_menuitem.hide() + # make some items insensitive if account is offline + if gajim.connections[account].connected < 2: + for widget in [add_contact_menuitem, service_discovery_menuitem, + join_group_chat_menuitem, new_message_menuitem]: + widget.set_sensitive(False) else: - open_gmail_inbox_menuitem.connect('activate', self.on_open_gmail_inbox, - account) + xml = gtkgui_helpers.get_glade('zeroconf_context_menu.glade') + account_context_menu = xml.get_widget('zeroconf_context_menu') - edit_account_menuitem.connect('activate', self.on_edit_account, account) - add_contact_menuitem.connect('activate', self.on_add_new_contact, account) - service_discovery_menuitem.connect('activate', - self.on_service_disco_menuitem_activate, account) - - gc_sub_menu = gtk.Menu() # gc is always a submenu - join_group_chat_menuitem.set_submenu(gc_sub_menu) - self.add_bookmarks_list(gc_sub_menu, account) - new_message_menuitem.connect('activate', - self.on_new_message_menuitem_activate, account) + status_menuitem = xml.get_widget('status_menuitem') + join_group_chat_menuitem =xml.get_widget('join_group_chat_menuitem') + new_message_menuitem = xml.get_widget('new_message_menuitem') + zeroconf_properties_menuitem = xml.get_widget('zeroconf_properties_menuitem') + sub_menu = gtk.Menu() + status_menuitem.set_submenu(sub_menu) - # make some items insensitive if account is offline - if gajim.connections[account].connected < 2: - for widget in [add_contact_menuitem, service_discovery_menuitem, - join_group_chat_menuitem, new_message_menuitem]: - widget.set_sensitive(False) - + for show in ('online', 'away', 'dnd', 'invisible'): + uf_show = helpers.get_uf_show(show, use_mnemonic = True) + item = gtk.ImageMenuItem(uf_show) + icon = state_images[show] + item.set_image(icon) + sub_menu.append(item) + item.connect('activate', self.change_status, account, show) + + item = gtk.SeparatorMenuItem() + sub_menu.append(item) + + item = gtk.ImageMenuItem(_('_Change Status Message')) + path = os.path.join(gajim.DATA_DIR, 'pixmaps', 'kbd_input.png') + img = gtk.Image() + img.set_from_file(path) + item.set_image(img) + sub_menu.append(item) + item.connect('activate', self.on_change_status_message_activate, account) + if gajim.connections[account].connected < 2: + item.set_sensitive(False) + + uf_show = helpers.get_uf_show('offline', use_mnemonic = True) + item = gtk.ImageMenuItem(uf_show) + icon = state_images['offline'] + item.set_image(icon) + sub_menu.append(item) + item.connect('activate', self.change_status, account, 'offline') + + zeroconf_properties_menuitem.connect('activate', self.on_zeroconf_properties, account) + gc_sub_menu = gtk.Menu() # gc is always a submenu + join_group_chat_menuitem.set_submenu(gc_sub_menu) + self.add_bookmarks_list(gc_sub_menu, account) + new_message_menuitem.connect('activate', + self.on_new_message_menuitem_activate, account) + + # make some items insensitive if account is offline + if gajim.connections[account].connected < 2: + for widget in [join_group_chat_menuitem, new_message_menuitem]: + widget.set_sensitive(False) + return account_context_menu def make_account_menu(self, event, iter):