add context menu for zeroconf account

This commit is contained in:
Stefan Bethge 2006-09-20 23:30:00 +00:00
parent d45aaa8557
commit af6450bcfc
4 changed files with 208 additions and 57 deletions

View File

@ -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>

View File

@ -101,13 +101,15 @@ class ConnectionZeroconf(ConnectionHandlersZeroconf):
gajim.config.set_per('accounts', 'zeroconf', 'no_log_for', False) gajim.config.set_per('accounts', 'zeroconf', 'no_log_for', False)
gajim.config.set_per('accounts', 'zeroconf', 'password', 'zeroconf') gajim.config.set_per('accounts', 'zeroconf', 'password', 'zeroconf')
gajim.config.set_per('accounts', 'zeroconf', 'sync_with_global_status', True) gajim.config.set_per('accounts', 'zeroconf', 'sync_with_global_status', True)
username = unicode(getpass.getuser()) username = unicode(getpass.getuser())
gajim.config.set_per('accounts', 'zeroconf', 'name', username) gajim.config.set_per('accounts', 'zeroconf', 'name', username)
#XXX make sure host is US-ASCII #XXX make sure host is US-ASCII
host = unicode(socket.gethostname()) host = unicode(socket.gethostname())
gajim.config.set_per('accounts', 'zeroconf', 'hostname', host) gajim.config.set_per('accounts', 'zeroconf', 'hostname', host)
port = 5298 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: else:
username = gajim.config.get_per('accounts', 'zeroconf', 'name') username = gajim.config.get_per('accounts', 'zeroconf', 'name')
host = gajim.config.get_per('accounts', 'zeroconf', 'hostname') host = gajim.config.get_per('accounts', 'zeroconf', 'hostname')

View File

@ -1842,8 +1842,9 @@ class AccountsWindow:
model = self.accounts_treeview.get_model() model = self.accounts_treeview.get_model()
model.clear() model.clear()
for account in gajim.connections: for account in gajim.connections:
iter = model.append() # if account != 'zeroconf':
model.set(iter, 0, account, 1, gajim.get_hostname_from_account(account)) iter = model.append()
model.set(iter, 0, account, 1, gajim.get_hostname_from_account(account))
def on_accounts_treeview_cursor_changed(self, widget): def on_accounts_treeview_cursor_changed(self, widget):
'''Activate delete and modify buttons when a row is selected''' '''Activate delete and modify buttons when a row is selected'''

View File

@ -1746,6 +1746,14 @@ class RosterWindow:
gajim.interface.instances[account]['account_modification'] = \ gajim.interface.instances[account]['account_modification'] = \
config.AccountModificationWindow(account) 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): def on_open_gmail_inbox(self, widget, account):
if gajim.config.get_per('accounts', account, 'savepass'): 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') %\ 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') path = os.path.join(gajim.DATA_DIR, 'iconsets', iconset, '16x16')
state_images = self.load_iconset(path) state_images = self.load_iconset(path)
xml = gtkgui_helpers.get_glade('account_context_menu.glade') if not gajim.config.get_per('accounts', account, 'is_zeroconf'):
account_context_menu = xml.get_widget('account_context_menu') 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') status_menuitem = xml.get_widget('status_menuitem')
join_group_chat_menuitem =xml.get_widget('join_group_chat_menuitem') join_group_chat_menuitem =xml.get_widget('join_group_chat_menuitem')
open_gmail_inbox_menuitem = xml.get_widget('open_gmail_inbox_menuitem') open_gmail_inbox_menuitem = xml.get_widget('open_gmail_inbox_menuitem')
new_message_menuitem = xml.get_widget('new_message_menuitem') new_message_menuitem = xml.get_widget('new_message_menuitem')
add_contact_menuitem = xml.get_widget('add_contact_menuitem') add_contact_menuitem = xml.get_widget('add_contact_menuitem')
service_discovery_menuitem = xml.get_widget('service_discovery_menuitem') service_discovery_menuitem = xml.get_widget('service_discovery_menuitem')
edit_account_menuitem = xml.get_widget('edit_account_menuitem') edit_account_menuitem = xml.get_widget('edit_account_menuitem')
sub_menu = gtk.Menu() sub_menu = gtk.Menu()
status_menuitem.set_submenu(sub_menu) status_menuitem.set_submenu(sub_menu)
for show in ('online', 'chat', 'away', 'xa', 'dnd', 'invisible'): for show in ('online', 'chat', 'away', 'xa', 'dnd', 'invisible'):
uf_show = helpers.get_uf_show(show, use_mnemonic = True) 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) item = gtk.ImageMenuItem(uf_show)
icon = state_images[show] icon = state_images['offline']
item.set_image(icon) item.set_image(icon)
sub_menu.append(item) sub_menu.append(item)
item.connect('activate', self.change_status, account, show) item.connect('activate', self.change_status, account, 'offline')
item = gtk.SeparatorMenuItem() if gajim.config.get_per('accounts', account, 'hostname') not in gajim.gmail_domains:
sub_menu.append(item) 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)
item = gtk.ImageMenuItem(_('_Change Status Message')) edit_account_menuitem.connect('activate', self.on_edit_account, account)
path = os.path.join(gajim.DATA_DIR, 'pixmaps', 'kbd_input.png') add_contact_menuitem.connect('activate', self.on_add_new_contact, account)
img = gtk.Image() service_discovery_menuitem.connect('activate',
img.set_from_file(path) self.on_service_disco_menuitem_activate, account)
item.set_image(img)
sub_menu.append(item) gc_sub_menu = gtk.Menu() # gc is always a submenu
item.connect('activate', self.on_change_status_message_activate, account) join_group_chat_menuitem.set_submenu(gc_sub_menu)
if gajim.connections[account].connected < 2: self.add_bookmarks_list(gc_sub_menu, account)
item.set_sensitive(False) new_message_menuitem.connect('activate',
self.on_new_message_menuitem_activate, account)
uf_show = helpers.get_uf_show('offline', use_mnemonic = True) # make some items insensitive if account is offline
item = gtk.ImageMenuItem(uf_show) if gajim.connections[account].connected < 2:
icon = state_images['offline'] for widget in [add_contact_menuitem, service_discovery_menuitem,
item.set_image(icon) join_group_chat_menuitem, new_message_menuitem]:
sub_menu.append(item) widget.set_sensitive(False)
item.connect('activate', self.change_status, account, 'offline')
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: else:
open_gmail_inbox_menuitem.connect('activate', self.on_open_gmail_inbox, xml = gtkgui_helpers.get_glade('zeroconf_context_menu.glade')
account) account_context_menu = xml.get_widget('zeroconf_context_menu')
edit_account_menuitem.connect('activate', self.on_edit_account, account) status_menuitem = xml.get_widget('status_menuitem')
add_contact_menuitem.connect('activate', self.on_add_new_contact, account) join_group_chat_menuitem =xml.get_widget('join_group_chat_menuitem')
service_discovery_menuitem.connect('activate', new_message_menuitem = xml.get_widget('new_message_menuitem')
self.on_service_disco_menuitem_activate, account) zeroconf_properties_menuitem = xml.get_widget('zeroconf_properties_menuitem')
sub_menu = gtk.Menu()
gc_sub_menu = gtk.Menu() # gc is always a submenu status_menuitem.set_submenu(sub_menu)
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 for show in ('online', 'away', 'dnd', 'invisible'):
if gajim.connections[account].connected < 2: uf_show = helpers.get_uf_show(show, use_mnemonic = True)
for widget in [add_contact_menuitem, service_discovery_menuitem, item = gtk.ImageMenuItem(uf_show)
join_group_chat_menuitem, new_message_menuitem]: icon = state_images[show]
widget.set_sensitive(False) 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 return account_context_menu
def make_account_menu(self, event, iter): def make_account_menu(self, event, iter):