diff --git a/data/glade/service_discovery_window.glade b/data/glade/service_discovery_window.glade index d2ec09f86..e5b471c7e 100644 --- a/data/glade/service_discovery_window.glade +++ b/data/glade/service_discovery_window.glade @@ -351,9 +351,34 @@ Agent JID - node - + True - GTK_BUTTONBOX_END + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + True + True + + + + + + True + False 6 @@ -368,11 +393,17 @@ Agent JID - node True + + 0 + False + False + GTK_PACK_END + 0 - True + False True diff --git a/src/disco.py b/src/disco.py index 2f3b77d11..ef6b0245b 100644 --- a/src/disco.py +++ b/src/disco.py @@ -48,6 +48,7 @@ import dialogs import tooltips import gtkgui_helpers import groups +import adhoc_commands from common import gajim from common import xmpp @@ -984,6 +985,7 @@ class ToplevelAgentBrowser(AgentBrowser): self.tooltip = tooltips.ServiceDiscoveryTooltip() self.register_button = None self.join_button = None + self.execute_button = None # Keep track of our treeview signals self._view_signals = [] self._scroll_signal = None @@ -1138,6 +1140,18 @@ class ToplevelAgentBrowser(AgentBrowser): def _add_actions(self): AgentBrowser._add_actions(self) + self.execute_button = gtk.Button() + image = gtk.image_new_from_stock(gtk.STOCK_EXECUTE, gtk.ICON_SIZE_BUTTON) + label = gtk.Label(_('_Execute Command...')) + label.set_use_underline(True) + hbox = gtk.HBox() + hbox.pack_start(image, False, True, 6) + hbox.pack_end(label, True, True) + self.execute_button.add(hbox) + self.execute_button.connect('clicked', self.on_execute_button_clicked) + self.window.action_buttonbox.add(self.execute_button) + self.execute_button.show_all() + self.register_button = gtk.Button(label=_("Re_gister"), use_underline=True) self.register_button.connect('clicked', self.on_register_button_clicked) @@ -1157,6 +1171,9 @@ class ToplevelAgentBrowser(AgentBrowser): self.join_button.show_all() def _clean_actions(self): + if self.execute_button: + self.execute_button.destroy() + self.execute_button = None if self.register_button: self.register_button.destroy() self.register_button = None @@ -1176,6 +1193,15 @@ class ToplevelAgentBrowser(AgentBrowser): self._renderer.set_property('cell-background', bgcolor) self.window.services_treeview.queue_draw() + def on_execute_button_clicked(self, widget = None): + '''When we want to execute a command: + open adhoc command window''' + model, iter = self.window.services_treeview.get_selection().get_selected() + if not iter: + return + service = model[iter][0].decode('utf-8') + adhoc_commands.CommandWindow(self.account, service) + 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 @@ -1205,6 +1231,8 @@ class ToplevelAgentBrowser(AgentBrowser): self.window.destroy(chain = True) def update_actions(self): + if self.execute_button: + self.execute_button.set_sensitive(False) if self.register_button: self.register_button.set_sensitive(False) if self.browse_button: @@ -1241,6 +1269,8 @@ class ToplevelAgentBrowser(AgentBrowser): def _update_actions(self, jid, node, identities, features, data): AgentBrowser._update_actions(self, jid, node, identities, features, data) + if self.execute_button and xmpp.NS_COMMANDS in features: + self.execute_button.set_sensitive(True) if self.register_button and xmpp.NS_REGISTER in features: # We can register this agent registered_transports = []