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>2006-07-12 15:21:22 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2006-07-12 15:21:22 (GMT)
commitd12b780074b05b0abcaf6b3877a9a4047c6e0d0e (patch)
tree13e33f093001aa2e5b639c8dfddcc2a64ed7797d /shell
parentbe806eb1918f7db90e661b5fcb4e260a0b1ba669 (diff)
More work on session refactoring
Diffstat (limited to 'shell')
-rw-r--r--shell/ActivityRegistry.py27
-rw-r--r--shell/HomeWindow.py12
-rw-r--r--shell/Process.py7
-rwxr-xr-xshell/Shell.py7
4 files changed, 39 insertions, 14 deletions
diff --git a/shell/ActivityRegistry.py b/shell/ActivityRegistry.py
index 9f1e857..2ddf767 100644
--- a/shell/ActivityRegistry.py
+++ b/shell/ActivityRegistry.py
@@ -1,4 +1,9 @@
import logging
+import os
+from ConfigParser import ConfigParser
+from ConfigParser import NoOptionError
+
+from sugar import env
class ActivityModule:
"""Info about an activity module. Wraps a .activity file."""
@@ -17,9 +22,9 @@ class ActivityModule:
"""Get the activity identifier"""
return self._id
- def get_class(self):
+ def get_exec(self):
"""Get the activity executable"""
- return self._class
+ return self._exec
def get_directory(self):
"""Get the path to activity directory."""
@@ -33,9 +38,9 @@ class ActivityRegistry:
def scan_directory(self, path):
"""Scan a directory for activities and add them to the registry."""
- if os.path.isdir(base_dir):
- for filename in os.listdir(base_dir):
- activity_dir = os.path.join(base_dir, filename)
+ if os.path.isdir(path):
+ for filename in os.listdir(path):
+ activity_dir = os.path.join(path, filename)
if os.path.isdir(activity_dir):
for filename in os.listdir(activity_dir):
if filename.endswith(".activity"):
@@ -50,18 +55,26 @@ class ActivityRegistry:
try:
activity_id = cp.get('Activity', 'id')
+ except NoOptionError:
+ logging.error('%s miss the required id option' % (path))
+ return False
+
+ try:
name = cp.get('Activity', 'name')
except NoOptionError:
- logging.error('%s miss a required option' % (path))
+ logging.error('%s miss the required name option' % (path))
+ return False
if cp.has_option('Activity', 'exec'):
activity_exec = cp.get('Activity', 'exec')
elif cp.has_option('Activity', 'python_module'):
python_module = cp.get('Activity', 'python_module')
activity_exec = 'python -m sugar/activity/Activity %s %s' \
- % (name, python_module)
+ % (activity_id, python_module)
+ env.add_to_python_path(directory)
else:
logging.error('%s must specifiy exec or python_module' % (path))
+ return False
module = ActivityModule(name, activity_id, activity_exec, directory)
self._activities.append(module)
diff --git a/shell/HomeWindow.py b/shell/HomeWindow.py
index f0124b1..65328ab 100644
--- a/shell/HomeWindow.py
+++ b/shell/HomeWindow.py
@@ -17,17 +17,17 @@ class NewActivityButton(gtk.MenuToolButton):
def __show_menu_cb(self, button):
menu = gtk.Menu()
- for activity_info in self._home.list_activities():
- item = gtk.MenuItem(activity_info.get_title(), False)
- name = activity_info.get_name()
- item.connect('activate', self.__menu_item_activate_cb, name)
+ for module in self._home.list_activities():
+ item = gtk.MenuItem(module.get_name(), False)
+ activity_id = module.get_id()
+ item.connect('activate', self.__menu_item_activate_cb, activity_id)
menu.append(item)
item.show()
self.set_menu(menu)
- def __menu_item_activate_cb(self, item, name):
- self._home.create(name)
+ def __menu_item_activate_cb(self, item, activity_id):
+ self._home.create(activity_id)
class Toolbar(gtk.Toolbar):
def __init__(self, shell):
diff --git a/shell/Process.py b/shell/Process.py
index fcbf779..5fee905 100644
--- a/shell/Process.py
+++ b/shell/Process.py
@@ -1,6 +1,10 @@
+import logging
+
import gobject
class Process:
+ """Object representing one of the session processes"""
+
def __init__(self, command):
self._pid = None
self._command = command
@@ -9,6 +13,9 @@ class Process:
return self._command
def start(self):
+ print self._command
+ logging.debug('Start %s' % (self._command))
+
args = self._command.split()
flags = gobject.SPAWN_SEARCH_PATH or gobject.SPAWN_STDERR_TO_DEV_NULL
result = gobject.spawn_async(args, flags=flags, standard_output=True)
diff --git a/shell/Shell.py b/shell/Shell.py
index d0fc59f..6b30bad 100755
--- a/shell/Shell.py
+++ b/shell/Shell.py
@@ -1,3 +1,5 @@
+import os
+
import dbus
import gtk
import wnck
@@ -7,6 +9,7 @@ from ConsoleLogger import ConsoleLogger
from ActivityRegistry import ActivityRegistry
from HomeWindow import HomeWindow
from sugar import keybindings
+from sugar import env
from sugar.activity import Activity
from PresenceWindow import PresenceWindow
from sugar.chat.ActivityChat import ActivityChat
@@ -50,7 +53,9 @@ class Shell:
self._owner = ShellOwner()
self._registry = ActivityRegistry()
-
+ self._registry.scan_directory(env.get_activities_dir())
+ self._registry.scan_directory(os.path.join(env.get_user_dir(), 'activities'))
+
self._home_window = HomeWindow(self)
keybindings.setup_global_keys(self._home_window, self)
self._home_window.show()