#!/usr/bin/env python # Copyright (C) 2006, Red Hat, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import sys import os import gtk import dbus import dbus.glib from sugar.activity import bundleregistry from sugar.activity import activityfactory from sugar.activity import activityfactoryservice from sugar import env def _setup_bus_address(): '''Use the bus address of the running Sugar''' bus_file = os.path.join(env.get_profile_path(), "session_bus_address") f = open(bus_file, "r") bus_name = f.read() f.close() os.environ['DBUS_SESSION_BUS_ADDRESS'] = bus_name def _success_cb(handler, exit): if exit: gtk.main_quit() def _error_cb(handler, err): print err gtk.main_quit() _setup_bus_address() service_name = sys.argv[1] registry = bundleregistry.get_registry() bundle = registry.get_bundle(service_name) bus = dbus.SessionBus() bus_object = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus') try: name = bus_object.GetNameOwner( service_name, dbus_interface='org.freedesktop.DBus') except dbus.DBusException: name = None if name: print '%s is already running, creating a new instance.' % service_name else: activityfactoryservice.run(bundle.get_path()) handler = activityfactory.create(service_name) handler.connect('success', _success_cb, name != None) handler.connect('error', _error_cb) gtk.main()