Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2007-01-11 10:20:08 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2007-01-11 10:20:08 (GMT)
commit297381cad771c3ac9c728ae784e8ea9c325184c4 (patch)
tree18bccae2bc2f0eee59936dadaab9edc5a622e018
parentdda16d83c0fe754eb697c5ceb0bb952bfd15a70f (diff)
Basic implementation of the shutdown graphics
-rw-r--r--shell/model/ShellModel.py25
-rw-r--r--shell/view/Shell.py10
-rw-r--r--shell/view/home/HomeBox.py13
-rwxr-xr-xsugar-emulator2
-rw-r--r--sugar/env.py6
-rw-r--r--sugar/graphics/iconcolor.py2
-rwxr-xr-xtools/build-snapshot.sh2
7 files changed, 57 insertions, 3 deletions
diff --git a/shell/model/ShellModel.py b/shell/model/ShellModel.py
index de6020b..b1c21bc 100644
--- a/shell/model/ShellModel.py
+++ b/shell/model/ShellModel.py
@@ -16,6 +16,8 @@
import os
+import gobject
+
from sugar.presence import PresenceService
from sugar.activity.bundleregistry import BundleRegistry
from model.Friends import Friends
@@ -24,9 +26,22 @@ from model.homemodel import HomeModel
from model.Owner import ShellOwner
from sugar import env
-class ShellModel:
+class ShellModel(gobject.GObject):
+ STATE_STARTUP = 0
+ STATE_RUNNING = 1
+ STATE_SHUTDOWN = 2
+
+ __gproperties__ = {
+ 'state' : (int, None, None,
+ 0, 2, STATE_RUNNING,
+ gobject.PARAM_READWRITE)
+ }
+
def __init__(self):
+ gobject.GObject.__init__(self)
+
self._current_activity = None
+ self._state = self.STATE_RUNNING
self._bundle_registry = BundleRegistry()
@@ -47,6 +62,14 @@ class ShellModel:
bundles_path = os.path.join(path, 'activities')
self._bundle_registry.add_search_path(bundles_path)
+ def do_set_property(self, pspec, value):
+ if pspec.name == 'state':
+ self._state = value
+
+ def do_get_property(self, pspec):
+ if pspec.name == 'state':
+ return self._state
+
def get_bundle_registry(self):
return self._bundle_registry
diff --git a/shell/view/Shell.py b/shell/view/Shell.py
index f687a2b..0fbcfe4 100644
--- a/shell/view/Shell.py
+++ b/shell/view/Shell.py
@@ -29,9 +29,11 @@ from view.ActivityHost import ActivityHost
from sugar.activity import ActivityFactory
from sugar.activity import Activity
from view.frame.Frame import Frame
+from model.ShellModel import ShellModel
from hardwaremanager import HardwareManager
from _sugar import KeyGrabber
from _sugar import AudioManager
+from sugar import env
import sugar
class Shell(gobject.GObject):
@@ -107,6 +109,7 @@ class Shell(gobject.GObject):
# For non-OLPC machines
self._key_grabber.grab('<alt>f')
self._key_grabber.grab('<alt>o')
+ self._key_grabber.grab('<alt><shift>s')
def _key_pressed_cb(self, grabber, key):
if key == 'F1':
@@ -149,7 +152,7 @@ class Shell(gobject.GObject):
self.toggle_chat_visibility()
elif key == '0x93': # Frame key
self._frame.notify_key_press()
- elif key == '0x7C': # Power key
+ elif key == '0x7C' or key == '<alt><shift>s': # Power key
self._shutdown()
elif key == '0xEC': # Keyboard brightness
self._hw_manager.toggle_keyboard_brightness()
@@ -166,6 +169,11 @@ class Shell(gobject.GObject):
console.toggle_visibility()
def _shutdown(self):
+ self._model.props.state = ShellModel.STATE_SHUTDOWN
+ if not env.is_emulator():
+ self._shutdown_system()
+
+ def _shutdown_system(self):
bus = dbus.SystemBus()
proxy = bus.get_object('org.freedesktop.Hal',
'/org/freedesktop/Hal/devices/computer')
diff --git a/shell/view/home/HomeBox.py b/shell/view/home/HomeBox.py
index 48069ea..daef97d 100644
--- a/shell/view/home/HomeBox.py
+++ b/shell/view/home/HomeBox.py
@@ -18,8 +18,10 @@ import hippo
from view.home.activitiesdonut import ActivitiesDonut
from view.home.MyIcon import MyIcon
+from model.ShellModel import ShellModel
from sugar.graphics.grid import Grid
from sugar.graphics import style
+from sugar.graphics.iconcolor import IconColor
class HomeBox(hippo.CanvasBox, hippo.CanvasItem):
__gtype_name__ = 'SugarHomeBox'
@@ -36,6 +38,17 @@ class HomeBox(hippo.CanvasBox, hippo.CanvasItem):
style.apply_stylesheet(self._my_icon, 'home.MyIcon')
self.append(self._my_icon, hippo.PACK_FIXED)
+ shell.get_model().connect('notify::state',
+ self._shell_state_changed_cb)
+
+ def _shell_state_changed_cb(self, model, pspec):
+ # FIXME handle all possible mode switches
+ if model.props.state == ShellModel.STATE_SHUTDOWN:
+ if self._donut:
+ self.remove(self._donut)
+ self._donut = None
+ self._my_icon.props.color = IconColor('insensitive')
+
def do_allocate(self, width, height):
hippo.CanvasBox.do_allocate(self, width, height)
diff --git a/sugar-emulator b/sugar-emulator
index 98ec67f..5fd9268 100755
--- a/sugar-emulator
+++ b/sugar-emulator
@@ -19,6 +19,8 @@
import os
import sys
+os.environ['SUGAR_EMULATOR'] = 'yes'
+
sourcedir = os.path.abspath(os.path.dirname(__file__))
if os.path.isfile(os.path.join(sourcedir, 'sugar/__uninstalled__.py')):
print 'Running sugar from ' + sourcedir + ' ...'
diff --git a/sugar/env.py b/sugar/env.py
index 09511f4..14d8d70 100644
--- a/sugar/env.py
+++ b/sugar/env.py
@@ -30,6 +30,12 @@ def get_bundle_path():
else:
return None
+def is_emulator():
+ if os.environ.has_key('SUGAR_EMULATOR'):
+ if os.environ['SUGAR_EMULATOR'] == 'yes':
+ return True
+ return False
+
def get_bundle_service_name():
if os.environ.has_key('SUGAR_BUNDLE_SERVICE_NAME'):
return os.environ['SUGAR_BUNDLE_SERVICE_NAME']
diff --git a/sugar/graphics/iconcolor.py b/sugar/graphics/iconcolor.py
index 71dfe18..e880582 100644
--- a/sugar/graphics/iconcolor.py
+++ b/sugar/graphics/iconcolor.py
@@ -22,6 +22,8 @@ from sugar.graphics.colors import colors
def _parse_string(color_string):
if color_string == 'white':
return ['#ffffff', '#414141']
+ elif color_string == 'insensitive':
+ return ['#ffffff', '#e2e2e2']
splitted = color_string.split(',')
if len(splitted) == 2:
diff --git a/tools/build-snapshot.sh b/tools/build-snapshot.sh
index 0f8dd81..7186936 100755
--- a/tools/build-snapshot.sh
+++ b/tools/build-snapshot.sh
@@ -1,6 +1,6 @@
VERSION=0.63
DATE=`date +%Y%m%d`
-RELEASE=2.7
+RELEASE=2.8
TARBALL=sugar-$VERSION-$RELEASE.${DATE}git.tar.bz2
rm sugar-$VERSION.tar.bz2