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 = []