Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <mpg@redhat.com>2007-10-30 23:05:16 (GMT)
committer Marco Pesenti Gritti <mpg@redhat.com>2007-10-30 23:05:16 (GMT)
commitb72f00e30beff60e2ec551c4ed57d048061f1716 (patch)
treee094e7e7c952a347f865416015d621c464078ac2 /bin
parent63d88df04012ee923cce24905f5f914cae3b9c31 (diff)
Integrate control panel in the build so that I can actually
distcheck.
Diffstat (limited to 'bin')
-rw-r--r--bin/Makefile.am4
-rwxr-xr-xbin/sugar-control-panel74
-rwxr-xr-xbin/sugar-shell168
3 files changed, 245 insertions, 1 deletions
diff --git a/bin/Makefile.am b/bin/Makefile.am
index fd72139..327df30 100644
--- a/bin/Makefile.am
+++ b/bin/Makefile.am
@@ -2,8 +2,10 @@ bin_SCRIPTS = \
sugar \
sugar-activity \
sugar-backup \
+ sugar-control-panel \
sugar-install-bundle \
- sugar-launch
+ sugar-launch \
+ sugar-shell
EXTRA_DIST = $(bin_SCRIPTS) sugar.in
diff --git a/bin/sugar-control-panel b/bin/sugar-control-panel
new file mode 100755
index 0000000..d978fed
--- /dev/null
+++ b/bin/sugar-control-panel
@@ -0,0 +1,74 @@
+#!/usr/bin/env python
+
+# Copyright (C) 2007, One Laptop Per Child
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+import sys
+import getopt
+
+sys.path.insert(0, env.get_shell_path())
+
+import control
+
+def cmd_help():
+ print 'Usage: sugar-control [ option ] key [ args ... ] \n\
+ Control for the sugar environment. \n\
+ Options: \n\
+ -h, --help show this help message and exit \n\
+ -h key show information about this key \n\
+ -g key get the current value of the key \n\
+ -s key set the current value for the key \n\
+ '
+
+def main():
+ try:
+ opts, args = getopt.getopt(sys.argv[1:], "h:s:g:", ["help"])
+ except getopt.GetoptError:
+ cmd_help()
+ sys.exit(2)
+
+ output = None
+ verbose = False
+
+ for opt, key in opts:
+ if opt in ("-h"):
+ method = getattr(control, 'set_' + key, None)
+ if method is None:
+ cmd_help()
+ sys.exit()
+ else:
+ print method.__doc__
+ if opt in ("-g"):
+ method = getattr(control, 'print_' + key, None)
+ if method is None:
+ cmd_help()
+ sys.exit()
+ else:
+ method()
+ if opt in ("-s"):
+ method = getattr(control, 'set_' + key, None)
+ if method is None:
+ cmd_help()
+ sys.exit()
+ else:
+ try:
+ method(*args)
+ except Exception, e:
+ print "sugar-control: %s"% e
+
+if __name__ == '__main__':
+ main()
diff --git a/bin/sugar-shell b/bin/sugar-shell
new file mode 100755
index 0000000..8f78289
--- /dev/null
+++ b/bin/sugar-shell
@@ -0,0 +1,168 @@
+#!/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
+from ConfigParser import ConfigParser
+import gettext
+import signal
+
+import pygtk
+pygtk.require('2.0')
+import gtk
+import gobject
+import gst
+
+from sugar import env
+from sugar import logger
+from sugar.profile import get_profile
+
+sys.path.insert(0, env.get_shell_path())
+
+from view.Shell import Shell
+from model.shellmodel import ShellModel
+from shellservice import ShellService
+from hardware import hardwaremanager
+from intro import intro
+import logsmanager
+
+def _start_matchbox():
+ cmd = ['matchbox-window-manager']
+
+ cmd.extend(['-use_titlebar', 'no'])
+ cmd.extend(['-theme', 'sugar'])
+ cmd.extend(['-kbdconfig', env.get_shell_path('kbdconfig')])
+
+ gobject.spawn_async(cmd, flags=gobject.SPAWN_SEARCH_PATH)
+
+def _save_session_info():
+ # Save our DBus Session Bus address somewhere it can be found
+ #
+ # WARNING!!! this is going away at some near future point, do not rely on it
+ #
+ session_info_file = os.path.join(env.get_profile_path(), "session.info")
+ f = open(session_info_file, "w")
+
+ cp = ConfigParser()
+ cp.add_section('Session')
+ cp.set('Session', 'dbus_address', os.environ['DBUS_SESSION_BUS_ADDRESS'])
+ cp.set('Session', 'display', gtk.gdk.display_get_default().get_name())
+ cp.write(f)
+
+ f.close()
+
+def _setup_translations():
+ domain = 'sugar'
+ gettext.bindtextdomain(domain, env.get_locale_path())
+ gettext.textdomain(domain)
+
+def check_cm(bus_name):
+ try:
+ import dbus
+ bus = dbus.SessionBus()
+ bus_object = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
+ name = bus_object.GetNameOwner(bus_name, dbus_interface='org.freedesktop.DBus')
+ if name:
+ return True
+ except dbus.DBusException:
+ pass
+ return False
+
+def _shell_started_cb():
+ # Unfreeze the display
+ hw_manager = hardwaremanager.get_manager()
+ hw_manager.set_dcon_freeze(0)
+
+ startup_sound = os.path.join(env.get_data_path('startup.flac'))
+ if os.path.exists(startup_sound):
+ player = gst.element_factory_make("playbin", "player")
+ player.set_property("uri", "file://" + startup_sound)
+ player.set_state(gst.STATE_PLAYING)
+
+def main():
+ gobject.idle_add(_shell_started_cb)
+
+ logsmanager.setup()
+ logger.start('shell')
+
+ _save_session_info()
+ _start_matchbox()
+ _setup_translations()
+
+ icons_path = env.get_data_path('icons')
+ gtk.icon_theme_get_default().append_search_path(icons_path)
+
+ # Do initial setup if needed
+ if not get_profile().is_valid():
+ win = intro.IntroWindow()
+ win.show_all()
+ gtk.main()
+
+ # FIXME avoid zombie activity processes
+ signal.signal(signal.SIGCHLD, signal.SIG_IGN)
+
+ if os.environ.has_key("SUGAR_TP_DEBUG"):
+ # Allow the user time to start up telepathy connection managers
+ # using the Sugar DBus bus address
+ import time
+ from telepathy.client import ManagerRegistry
+
+ registry = ManagerRegistry()
+ registry.LoadManagers()
+
+ debug_flags = os.environ["SUGAR_TP_DEBUG"].split(',')
+ for cm_name in debug_flags:
+ if cm_name not in ["gabble", "salut"]:
+ continue
+
+ try:
+ cm = registry.services[cm_name]
+ except KeyError:
+ print RuntimeError("%s connection manager not found!" % cm_name)
+
+ while not check_cm(cm['busname']):
+ print "Waiting for %s on: DBUS_SESSION_BUS_ADDRESS=%s" %(cm_name, os.environ["DBUS_SESSION_BUS_ADDRESS"])
+ try:
+ time.sleep(5)
+ except KeyboardInterrupt:
+ print "Got Ctrl+C, continuing..."
+ break
+
+ model = ShellModel()
+ shell = Shell(model)
+ service = ShellService(shell)
+
+if __name__ == '__main__':
+ # running the gtk.main outside of the main() function allows us to
+ # profile startup times. To profile startup times replace the following
+ # call to main with:
+ # import cProfile
+ # cProfile.run('main()', '/home/olpc/sugar-startup.stats')
+
+ main()
+
+ hw_manager = hardwaremanager.get_manager()
+ hw_manager.startup()
+
+ try:
+ gtk.main()
+ except KeyboardInterrupt:
+ print 'Ctrl+C pressed, exiting...'
+
+ session_info_file = os.path.join(env.get_profile_path(), "session.info")
+ os.remove(session_info_file)
+