From a7110d5ee20f04f17346079a6a824a7c017fe124 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Fri, 2 Mar 2007 18:46:12 +0000 Subject: [PATCH] Implement ExportedGObject, a convenience class to export GObjects on the bus. This is non-trivial because dbus.service.Object and GObject both use metaclasses, so we need to implement a metaclass inheriting from both their metaclasses - it might as well go in dbus-python to avoid everyone having to reinvent this solution. --- dbus/gobject_service.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 dbus/gobject_service.py diff --git a/dbus/gobject_service.py b/dbus/gobject_service.py new file mode 100644 index 0000000..2a9fbd8 --- /dev/null +++ b/dbus/gobject_service.py @@ -0,0 +1,37 @@ +"""Support code for implementing D-Bus services via GObjects.""" + +# Copyright (C) 2007 Collabora Ltd. +# +# Licensed under the Academic Free License version 2.1 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Library General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import gobject +import dbus.service + +class ExportedGObjectType(dbus.service.InterfaceType, gobject.GObjectMeta): + """A metaclass which inherits from both GObjectMeta and + `dbus.service.InterfaceType`. Used as the metaclass for `ExportedGObject`. + """ + +class ExportedGObject(dbus.service.Object, gobject.GObject): + """A GObject which is exported on the D-Bus. + + Because GObject and `dbus.service.Object` both have custom metaclasses, + the naive approach using simple multiple inheritance won't work. This + class has `ExportedGObjectType` as its metaclass, which is sufficient + to make it work correctly. + """ + __metaclass__ = ExportedGObjectType -- 2.11.4.GIT