diff --git a/terminator b/terminator index db384948..4b919a1e 100755 --- a/terminator +++ b/terminator @@ -60,9 +60,11 @@ if __name__ == '__main__': try: ipc.DBusService() except ipc.DBusException: + dbg('Unable to become master process, requesting a new window') ipc.new_window() sys.exit() except ImportError: + dbg('dbus not imported') pass MAKER = Factory() diff --git a/terminatorlib/ipc.py b/terminatorlib/ipc.py index d64bb6b5..cfec4dfa 100644 --- a/terminatorlib/ipc.py +++ b/terminatorlib/ipc.py @@ -10,17 +10,19 @@ import dbus.glib from borg import Borg from terminator import Terminator from config import Config +from util import dbg CONFIG = Config() if not CONFIG['dbus']: # The config says we are not to load dbus, so pretend like we can't + dbg('dbus disabled') raise ImportError BUS_BASE = 'net.tenshu.Terminator' BUS_PATH = '/net/tenshu/Terminator' try: # Try and include the X11 display name in the dbus bus name - DISPLAY = gtk.gdk.get_display().replace(':', '').replace('.', '') + DISPLAY = hex(hash(gtk.gdk.get_display())).replace('-', '_') BUS_NAME = '%s%s' % (BUS_BASE, DISPLAY) except: BUS_NAME = BUS_BASE @@ -32,17 +34,20 @@ class DBusService(Borg, dbus.service.Object): def __init__(self): """Class initialiser""" + Borg.__init__(self, self.__class__.__name__) self.prepare_attributes() dbus.service.Object.__init__(self, self.bus_name, BUS_PATH) def prepare_attributes(self): """Ensure we are populated""" if not self.bus_name: + dbg('Checking for bus name availability: %s' % BUS_NAME) bus = dbus.SessionBus() proxy = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus') flags = 1 | 4 # allow replacement | do not queue if not proxy.RequestName(BUS_NAME, dbus.UInt32(flags)) in (1, 4): + dbg('bus name unavailable: %s' % BUS_NAME) raise dbus.exceptions.DBusException( "Couldn't get DBus name %s: Name exists" % BUS_NAME) self.bus_name = dbus.service.BusName(BUS_NAME, @@ -53,11 +58,13 @@ class DBusService(Borg, dbus.service.Object): @dbus.service.method(BUS_NAME) def new_window(self): """Create a new Window""" + dbg('dbus method called') self.terminator.create_layout('default') self.terminator.layout_done() def with_proxy(func): """Decorator function to connect to the session dbus bus""" + dbg('dbus client call: %s' % func.func_name) def _exec(*args, **argd): bus = dbus.SessionBus() proxy = bus.get_object(BUS_NAME, BUS_PATH)