The unified diff between revisions [8d083408..] and [20675585..] is displayed below. It can also be downloaded as a raw diff.
This diff has been restricted to the following files: 'dprobe.py'
#
#
# patch "dprobe.py"
# from [6b75d21a92d5e37b6625bf7c3154cc5a6602660a]
# to [9d2a100820cd8ed51ff6dade30999c6ff8f8b1f5]
#
============================================================
--- dprobe.py 6b75d21a92d5e37b6625bf7c3154cc5a6602660a
+++ dprobe.py 9d2a100820cd8ed51ff6dade30999c6ff8f8b1f5
@@ -12,33 +12,31 @@ import gtk.glade
import gtk
import gtk.glade
-class DBusInfo:
- def __init__(self):
- self.bus = dbus.Bus.get_system()
- self.dbus_object = self.bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
- def get_bus_names(self):
- iface = dbus.Interface(self.dbus_object, 'org.freedesktop.DBus')
- return iface.ListNames()
- def ping(self, named_service, object_path):
- obj = self.bus.get_object(named_service, object_path)
- iface = dbus.Interface(obj, 'org.freedesktop.DBus.Peer')
- print iface.Ping()
- def get_introspection_xml(self, named_service, object_path):
- obj = self.bus.get_object(named_service, object_path)
- iface = dbus.Interface(obj, 'org.freedesktop.DBus.Introspectable')
- return iface.Introspect()
-
class NameInfo:
def __init__(self, bus, store):
self.bus, self.store = bus, store
self.dbus_obj = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
self.dbus_interface = dbus.Interface(self.dbus_obj, 'org.freedesktop.DBus')
- self.refresh()
- def refresh(self):
+ self.update()
+ def update(self):
self.store.clear()
+ rv = {}
for name in self.dbus_interface.ListNames():
- self.store.append([name])
+ if name.startswith(':'):
+ rv.setdefault(name, [])
+ else:
+ connection_name = self.dbus_interface.GetNameOwner(name)
+ val = rv.setdefault(connection_name, [])
+ val.append(name)
+ for connection_name in rv:
+ parent = self.store.append(None, [connection_name])
+ for name in rv[connection_name]:
+ self.store.append(parent, [name])
+class InterfaceInfo:
+ def __init__(self, bus, name, store):
+ self.bus, self.name, self.store = bus, name, store
+
class DProbe:
def __init__(self):
xml = open('dprobe.glade').read()
@@ -49,22 +47,12 @@ class DProbe:
# window and other stuff
self.window = self.glade.get_widget("main_window")
+ self.object_path = self.glade.get_widget("object_path")
+ self.object_path.connect("changed", self.object_path_changed)
- # set up the tree of interfaces and methods
- self.interface_tree = self.glade.get_widget("interface_tree")
- self.interface_store = gtk.TreeStore(str)
- self.interface_tree.set_model(self.interface_store)
-
- # interface name column
- name_column = gtk.TreeViewColumn("Interface")
- self.interface_tree.append_column(name_column)
- name_cell = gtk.CellRendererText()
- name_column.pack_start(name_cell, True)
- name_column.set_attributes(name_cell, text=0)
-
# set up the list of names on the bus
self.name_list = self.glade.get_widget("name_list")
- self.name_list_store = gtk.ListStore(str)
+ self.name_list_store = gtk.TreeStore(str)
self.name_list.set_model(self.name_list_store)
# filename column
@@ -82,8 +70,11 @@ class DProbe:
self.name_info = NameInfo(self.bus, self.name_list_store)
# hook up signals
+ self.introspect_button = self.glade.get_widget("introspect_button")
+ self.introspect_button.connect("clicked", self.introspect_clicked)
sel = self.name_list.get_selection()
- sel.connect("changed", self.name_list_select)
+ sel.connect("changed", self.name_list_selection_changed)
+ self.name_list_selection_changed(sel)
quit_menu = self.glade.get_widget("quit1")
quit_menu.connect("activate", self.window_destroy)
@@ -93,14 +84,30 @@ class DProbe:
# go...
self.window.show_all()
- def name_list_select(self, sel):
+ def object_path_changed(self, widget):
+ print widget
+ print widget.get_property("sensitive")
+ if not widget.get_property("sensitive") or len(widget.get_text()) == 0:
+ self.introspect_button.set_sensitive(False)
+ else:
+ self.introspect_button.set_sensitive(True)
+ def name_list_selection_changed(self, sel):
(model, iter) = sel.get_selected()
+ # the selection has changed;
+ # this means clearing the notebook to the right (TODO)
if not iter:
# in which case, no interface to show
- self.interface_tree.clear()
+ self.object_path.set_sensitive(False)
else:
+ self.object_path.set_sensitive(True)
name = self.name_list_store.get_value(iter, 0)
- print name
+ self.object_path_changed(self.object_path)
+ def introspect_clicked(self, widget, data=None):
+ path = self.object_path.get_text()
+ print path
+ # ok, if we've already introspected this path then switch to that
+ # page in the notebook. Otherwise, create a new notebook page
+ # and introspect this sucker..
def window_destroy(self, widget, user=None):
gtk.main_quit()
def about(self, widget, user=None):
@@ -135,13 +142,4 @@ if __name__ == '__main__':
gnome.init('dprobe', '0.1')
dprobe = DProbe()
gtk.main()
-# i = DBusInfo()
-# for name in i.get_bus_names():
-# if name.startswith(':'): continue
-# print name
-# print i.get_introspection_xml(name, '/org/freedesktop/DBus')
-
-
-
-