From 297381cad771c3ac9c728ae784e8ea9c325184c4 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Thu, 11 Jan 2007 10:20:08 +0000 Subject: Basic implementation of the shutdown graphics --- 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('f') self._key_grabber.grab('o') + self._key_grabber.grab('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 == '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 -- cgit v0.9.1