Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2008-02-04 19:36:09 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2008-02-04 19:36:09 (GMT)
commitdbe42ac6d9c0be6be47d2c7545b4997070b4621f (patch)
treeb382b3af018c1ca407198db65f7332a9b17bb232 /shell
parent29fb25407fe0e6c4b3903405d612d48953293b54 (diff)
Make the shell scripts just a tiny wrapper which setup
the python path and run main().
Diffstat (limited to 'shell')
-rw-r--r--shell/Makefile.am3
-rw-r--r--shell/controlpanel/Makefile.am1
-rw-r--r--shell/controlpanel/cmd.py80
-rw-r--r--shell/main.py153
4 files changed, 236 insertions, 1 deletions
diff --git a/shell/Makefile.am b/shell/Makefile.am
index e3e9710..c1b7f78 100644
--- a/shell/Makefile.am
+++ b/shell/Makefile.am
@@ -2,8 +2,9 @@ SUBDIRS = controlpanel hardware model view intro
sugardir = $(pkgdatadir)/shell
sugar_PYTHON = \
- config.py \
+ config.py \
logsmanager.py \
+ main.py \
shellservice.py
confdir = $(pkgdatadir)/shell
diff --git a/shell/controlpanel/Makefile.am b/shell/controlpanel/Makefile.am
index b772170..f89132c 100644
--- a/shell/controlpanel/Makefile.am
+++ b/shell/controlpanel/Makefile.am
@@ -1,4 +1,5 @@
sugardir = $(pkgdatadir)/shell/controlpanel
sugar_PYTHON = \
__init__.py \
+ cmd.py \
control.py
diff --git a/shell/controlpanel/cmd.py b/shell/controlpanel/cmd.py
new file mode 100644
index 0000000..634faa9
--- /dev/null
+++ b/shell/controlpanel/cmd.py
@@ -0,0 +1,80 @@
+# 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
+from gettext import gettext as _
+
+from sugar import env
+
+from controlpanel import control
+
+def cmd_help():
+ print _('Usage: sugar-control-panel [ option ] key [ args ... ] \n\
+ Control for the sugar environment. \n\
+ Options: \n\
+ -h show this help message and exit \n\
+ -l list all the available options \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:l", [])
+ except getopt.GetoptError:
+ cmd_help()
+ sys.exit(2)
+
+ output = None
+ verbose = False
+
+ if not opts:
+ cmd_help()
+ sys.exit()
+
+ for opt, key in opts:
+ if opt in ("-h"):
+ method = getattr(control, 'set_' + key, None)
+ if method is None:
+ print _("sugar-control-panel: key=%s not an available option"% key)
+ sys.exit()
+ else:
+ print method.__doc__
+ if opt in ("-l"):
+ elems = dir(control)
+ for elem in elems:
+ if elem.startswith('set_'):
+ print elem[4:]
+ if opt in ("-g"):
+ method = getattr(control, 'print_' + key, None)
+ if method is None:
+ print _("sugar-control-panel: key=%s not an available option"% key)
+ sys.exit()
+ else:
+ method()
+ if opt in ("-s"):
+ method = getattr(control, 'set_' + key, None)
+ if method is None:
+ print _("sugar-control-panel: key=%s not an available option"% key)
+ sys.exit()
+ else:
+ try:
+ method(*args)
+ except Exception, e:
+ print _("sugar-control-panel: %s"% e)
diff --git a/shell/main.py b/shell/main.py
new file mode 100644
index 0000000..350ce46
--- /dev/null
+++ b/shell/main.py
@@ -0,0 +1,153 @@
+# 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
+
+# HACK we need to import numpy before gtk otherwise we traceback in
+# some locales. See http://dev.laptop.org/ticket/5559.
+import numpy
+
+import pygtk
+pygtk.require('2.0')
+import gtk
+import gobject
+
+from sugar import env
+from sugar import logger
+from sugar.profile import get_profile
+
+from view.Shell import Shell
+from model.shellmodel import ShellModel
+from shellservice import ShellService
+from hardware import hardwaremanager
+from intro import intro
+import logsmanager
+import config
+
+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():
+ locale_path = os.path.join(config.prefix, 'share', 'locale')
+ domain = 'sugar'
+
+ gettext.bindtextdomain(domain, 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)
+
+def main():
+ gobject.idle_add(_shell_started_cb)
+
+ logsmanager.setup()
+ logger.start('shell')
+
+ _save_session_info()
+ _start_matchbox()
+ _setup_translations()
+
+ hw_manager = hardwaremanager.get_manager()
+ hw_manager.startup()
+
+ 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()
+
+ 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)
+
+ 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)
+