class App(BaseApp): def __init__(self, config_path=None, **kwargs): BaseApp.__init__(self, **kwargs) if config_path: self.user_config = sxmain.load_user_config(config_path) else: self.user_config = None def init(self): BaseApp.init(self) self.bus = SessionBus() self.add_fd_handler("read", self.bus, self.process_dbus) self.bus.request_name("org.yahiko.status_bar") screen = self.conn.setup.roots[self.conn.pref_screen] self.status_bar = StatusBar(self, screen, self.user_config) def run(self): self.status_bar.ui.recreate_surface() self.status_bar.ui.layout() self.status_bar.ui.dirty() BaseApp.run(self) def process_dbus(self): self.bus.receive_one() BaseApp.run(self)
class SXDBus(Plugin): key = 'dbus' def __init__(self, app): self.objects = {} if YAYDBUS: self.session_bus = SessionBus() app.add_fd_handler('read', self.session_bus, self.process_dbus) else: dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) self.session_bus = dbus.SessionBus() self.name = service.BusName(DEFAULT_BUS_NAME, self.session_bus) if YAYDBUS: self.session_bus.request_name(DEFAULT_BUS_NAME) self.session_bus.request_name(DEFAULT_BUS_NAME+'.DBusService') self.register('dbus', functools.partial(DBusObject, app)) def process_dbus(self): self.session_bus.receive_one() def register(self, name, cls, path=None): """ register a new dbus object """ log.info('registering %s: %s', name, cls) if path is None: path = "/%s" % name if YAYDBUS: self.objects[name] = self.session_bus.add_object( cls(self.session_bus, path), ) else: self.objects[name] = cls( conn=self.session_bus, object_path=path, bus_name=self.name, )