Implement shutdown.

This commit is contained in:
Tomeu Vizoso 2007-06-25 12:48:21 +02:00
parent 400cbc29e5
commit 811a7d8411

View File

@ -14,18 +14,22 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
import os
import signal
import math import math
from gettext import gettext as _ from gettext import gettext as _
import gobject import gobject
import gtk import gtk
import hippo import hippo
import dbus
from sugar.graphics import units from sugar.graphics import units
from sugar.graphics import color from sugar.graphics import color
from sugar.graphics.xocolor import XoColor from sugar.graphics.xocolor import XoColor
from sugar.graphics.palette import Palette, CanvasInvoker from sugar.graphics.palette import Palette, CanvasInvoker
from sugar import profile from sugar import profile
from sugar import env
from view.home.activitiesdonut import ActivitiesDonut from view.home.activitiesdonut import ActivitiesDonut
from view.devices import deviceview from view.devices import deviceview
@ -43,7 +47,7 @@ class HomeBox(hippo.CanvasBox, hippo.CanvasItem):
box_height=units.grid_to_pixels(6)) box_height=units.grid_to_pixels(6))
self.append(self._donut) self.append(self._donut)
self._my_icon = HomeMyIcon(units.XLARGE_ICON_SCALE) self._my_icon = HomeMyIcon(shell, units.XLARGE_ICON_SCALE)
self.append(self._my_icon, hippo.PACK_FIXED) self.append(self._my_icon, hippo.PACK_FIXED)
shell_model = shell.get_model() shell_model = shell.get_model()
@ -82,11 +86,11 @@ class HomeBox(hippo.CanvasBox, hippo.CanvasItem):
if self._donut: if self._donut:
self.remove(self._donut) self.remove(self._donut)
self._donut = None self._donut = None
self._my_icon.props.stroke_color = color.BUTTON_INACTIVE self._my_icon.props.stroke_color = color.ICON_STROKE_INACTIVE
self._my_icon.props.fill_color = \ self._my_icon.props.fill_color = \
color.BUTTON_INACTIVE_BACKGROUND color.ICON_FILL_INACTIVE
self._my_icon.props.background_color = \ self._my_icon.props.background_color = \
color.BUTTON_INACTIVE_BACKGROUND color.ICON_FILL_INACTIVE.get_int()
def do_allocate(self, width, height, origin_changed): def do_allocate(self, width, height, origin_changed):
hippo.CanvasBox.do_allocate(self, width, height, origin_changed) hippo.CanvasBox.do_allocate(self, width, height, origin_changed)
@ -124,9 +128,10 @@ class HomeBox(hippo.CanvasBox, hippo.CanvasItem):
class HomeMyIcon(MyIcon): class HomeMyIcon(MyIcon):
_POPUP_PALETTE_DELAY = 100 _POPUP_PALETTE_DELAY = 100
def __init__(self, scale): def __init__(self, shell, scale):
MyIcon.__init__(self, scale) MyIcon.__init__(self, scale)
self._shell = shell
self._palette = Palette() self._palette = Palette()
self._palette.set_primary_state(profile.get_nick_name()) self._palette.set_primary_state(profile.get_nick_name())
self._palette.props.invoker = CanvasInvoker(self) self._palette.props.invoker = CanvasInvoker(self)
@ -188,5 +193,17 @@ class HomeMyIcon(MyIcon):
return False return False
def _shutdown_activate_cb(self, menuitem): def _shutdown_activate_cb(self, menuitem):
pass model = self._shell.get_model()
model.props.state = ShellModel.STATE_SHUTDOWN
if env.is_emulator():
if os.environ.has_key('SUGAR_EMULATOR_PID'):
pid = int(os.environ['SUGAR_EMULATOR_PID'])
os.kill(pid, signal.SIGTERM)
else:
bus = dbus.SystemBus()
proxy = bus.get_object('org.freedesktop.Hal',
'/org/freedesktop/Hal/devices/computer')
mgr = dbus.Interface(proxy, 'org.freedesktop.Hal.Device.SystemPowerManagement')
mgr.Shutdown()