diff options
-rw-r--r-- | bin/sugar-shell | 13 | ||||
-rw-r--r-- | configure.ac | 1 | ||||
-rw-r--r-- | src/jarabe/Makefile.am | 2 | ||||
-rw-r--r-- | src/jarabe/frame/devices/speaker.py | 4 | ||||
-rw-r--r-- | src/jarabe/hardware/Makefile.am | 4 | ||||
-rw-r--r-- | src/jarabe/hardware/__init__.py | 16 | ||||
-rw-r--r-- | src/jarabe/hardware/hardwaremanager.py | 113 | ||||
-rw-r--r-- | src/jarabe/model/Makefile.am | 6 | ||||
-rw-r--r-- | src/jarabe/model/devices/speaker.py | 20 | ||||
-rw-r--r-- | src/jarabe/model/screen.py | 64 | ||||
-rw-r--r-- | src/jarabe/model/sound.py | 56 | ||||
-rw-r--r-- | src/jarabe/session.py | 5 | ||||
-rw-r--r-- | src/jarabe/view/keyhandler.py | 23 |
13 files changed, 154 insertions, 173 deletions
diff --git a/bin/sugar-shell b/bin/sugar-shell index d1b68a0..3d32de3 100644 --- a/bin/sugar-shell +++ b/bin/sugar-shell @@ -31,17 +31,17 @@ from sugar.profile import get_profile from jarabe.view import shell from jarabe.shellservice import ShellService -from jarabe.hardware import hardwaremanager from jarabe.intro.window import IntroWindow from jarabe.intro.window import create_profile from jarabe.session import get_session_manager from jarabe.nmservice import NMService +from jarabe.model import sound +from jarabe.model import screen from jarabe import logsmanager from jarabe import config def _shell_started_cb(): - hw_manager = hardwaremanager.get_manager() - hw_manager.set_dcon_freeze(0) + screen.set_dcon_freeze(0) if os.path.isfile(os.path.expanduser('~/.sugar-update')): home_box = shell.get_instance().home_window.get_home_box() @@ -62,9 +62,6 @@ def main(): gettext.bindtextdomain('sugar', config.locale_path) gettext.textdomain('sugar') - hw_manager = hardwaremanager.get_manager() - hw_manager.startup() - icons_path = os.path.join(config.data_path, 'icons') gtk.icon_theme_get_default().append_search_path(icons_path) @@ -93,9 +90,13 @@ def main(): except dbus.DBusException: logging.error("Network manager is already running.") + sound.restore() + try: gtk.main() except KeyboardInterrupt: print 'Ctrl+C pressed, exiting...' + sound.save() + main() diff --git a/configure.ac b/configure.ac index 260ecb2..7ae0d98 100644 --- a/configure.ac +++ b/configure.ac @@ -57,7 +57,6 @@ src/jarabe/frame/Makefile src/jarabe/frame/devices/Makefile src/jarabe/intro/Makefile src/jarabe/journal/Makefile -src/jarabe/hardware/Makefile src/jarabe/view/Makefile src/jarabe/model/Makefile src/jarabe/model/devices/Makefile diff --git a/src/jarabe/Makefile.am b/src/jarabe/Makefile.am index 6589a17..68ac77e 100644 --- a/src/jarabe/Makefile.am +++ b/src/jarabe/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = controlpanel desktop frame hardware journal model view intro +SUBDIRS = controlpanel desktop frame journal model view intro sugardir = $(pythondir)/jarabe sugar_PYTHON = \ diff --git a/src/jarabe/frame/devices/speaker.py b/src/jarabe/frame/devices/speaker.py index be32b1c..3070d7b 100644 --- a/src/jarabe/frame/devices/speaker.py +++ b/src/jarabe/frame/devices/speaker.py @@ -18,7 +18,6 @@ from gettext import gettext as _ import gtk -from jarabe.hardware import hardwaremanager from sugar import profile from sugar.graphics import style from sugar.graphics.icon import get_icon_state, Icon @@ -28,6 +27,7 @@ from sugar.graphics.palette import Palette from sugar.graphics.xocolor import XoColor from jarabe.frame.frameinvoker import FrameWidgetInvoker +from jarabe.model import sound _ICON_NAME = 'speaker' @@ -89,7 +89,7 @@ class SpeakerPalette(Palette): self.set_content(vbox) vbox.show() - vol_step = hardwaremanager.VOL_CHANGE_INCREMENT_RECOMMENDATION + vol_step = sound.VOLUME_STEP self._adjustment = gtk.Adjustment(value=self._model.props.level, lower=0, upper=100 + vol_step, diff --git a/src/jarabe/hardware/Makefile.am b/src/jarabe/hardware/Makefile.am deleted file mode 100644 index e341e7b..0000000 --- a/src/jarabe/hardware/Makefile.am +++ /dev/null @@ -1,4 +0,0 @@ -sugardir = $(pythondir)/jarabe/hardware -sugar_PYTHON = \ - __init__.py \ - hardwaremanager.py diff --git a/src/jarabe/hardware/__init__.py b/src/jarabe/hardware/__init__.py deleted file mode 100644 index a9dd95a..0000000 --- a/src/jarabe/hardware/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (C) 2006-2007, 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 - diff --git a/src/jarabe/hardware/hardwaremanager.py b/src/jarabe/hardware/hardwaremanager.py deleted file mode 100644 index d43d8d6..0000000 --- a/src/jarabe/hardware/hardwaremanager.py +++ /dev/null @@ -1,113 +0,0 @@ -# Copyright (C) 2006-2007 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 logging - -import dbus -import gobject - -from sugar.profile import get_profile -from sugar import env -from sugar import _sugarext - -_HARDWARE_MANAGER_INTERFACE = 'org.freedesktop.ohm.Keystore' -_HARDWARE_MANAGER_SERVICE = 'org.freedesktop.ohm' -_HARDWARE_MANAGER_OBJECT_PATH = '/org/freedesktop/ohm/Keystore' - -COLOR_MODE = 0 -B_AND_W_MODE = 1 - -VOL_CHANGE_INCREMENT_RECOMMENDATION = 10 - -class HardwareManager(gobject.GObject): - __gsignals__ = { - 'muted-changed' : (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, - ([gobject.TYPE_BOOLEAN, gobject.TYPE_BOOLEAN])), - 'volume-changed': (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, - ([gobject.TYPE_INT, gobject.TYPE_INT])), - } - - def __init__(self): - gobject.GObject.__init__(self) - - bus = dbus.SystemBus() - proxy = bus.get_object(_HARDWARE_MANAGER_SERVICE, - _HARDWARE_MANAGER_OBJECT_PATH, - follow_name_owner_changes=True) - self._service = dbus.Interface(proxy, _HARDWARE_MANAGER_INTERFACE) - - self._volume = _sugarext.VolumeAlsa() - - def get_muted(self): - return self._volume.get_mute() - - def get_volume(self): - return self._volume.get_volume() - - def set_volume(self, new_volume): - old_volume = self._volume.get_volume() - self._volume.set_volume(new_volume) - - self.emit('volume-changed', old_volume, new_volume) - - def set_muted(self, new_state): - old_state = self._volume.get_mute() - self._volume.set_mute(new_state) - - self.emit('muted-changed', old_state, new_state) - - def startup(self): - if env.is_emulator() is False: - profile = get_profile() - self.set_volume(profile.sound_volume) - - def shutdown(self): - if env.is_emulator() is False: - profile = get_profile() - profile.sound_volume = self.get_volume() - profile.save() - - def set_dcon_freeze(self, frozen): - try: - self._service.SetKey("display.dcon_freeze", frozen) - except dbus.DBusException: - logging.error('Cannot unfreeze the DCON') - - def set_display_mode(self, mode): - try: - self._service.SetKey("display.dcon_mode", mode) - except dbus.DBusException: - logging.error('Cannot change DCON mode') - - def set_display_brightness(self, level): - try: - self._service.SetKey("backlight.hardware_brightness", level) - except dbus.DBusException: - logging.error('Cannot set display brightness') - - def get_display_brightness(self): - try: - return self._service.GetKey("backlight.hardware_brightness") - except dbus.DBusException: - logging.error('Cannot get display brightness') - return 0 - -def get_manager(): - return _manager - -_manager = HardwareManager() diff --git a/src/jarabe/model/Makefile.am b/src/jarabe/model/Makefile.am index 019b573..0703c00 100644 --- a/src/jarabe/model/Makefile.am +++ b/src/jarabe/model/Makefile.am @@ -8,10 +8,12 @@ sugar_PYTHON = \ clipboard.py \ clipboardobject.py \ friends.py \ + homeactivity.py \ + homemodel.py \ invites.py \ owner.py \ meshmodel.py \ network.py \ shellmodel.py \ - homeactivity.py \ - homemodel.py + screen.py \ + sound.py diff --git a/src/jarabe/model/devices/speaker.py b/src/jarabe/model/devices/speaker.py index 73e4f6e..5698319 100644 --- a/src/jarabe/model/devices/speaker.py +++ b/src/jarabe/model/devices/speaker.py @@ -16,7 +16,7 @@ import gobject -from jarabe.hardware import hardwaremanager +from jarabe.model import screen from jarabe.model.devices import device class Device(device.Device): @@ -27,27 +27,27 @@ class Device(device.Device): def __init__(self): device.Device.__init__(self) - self._manager = hardwaremanager.get_manager() - self._manager.connect('muted-changed', self.__muted_changed_cb) - self._manager.connect('volume-changed', self.__volume_changed_cb) - def __muted_changed_cb(self, sender_, old_state_, new_state_): + sound.muted_changed.connect(self.__muted_changed_cb) + sound.volume_changed.connect(self.__volume_changed_cb) + + def __muted_changed_cb(self): self.notify('muted') - def __volume_changed_cb(self, sender_, old_volume_, new_volume_): + def __volume_changed_cb(self): self.notify('level') def _get_level(self): - return self._manager.get_volume() + return sound.get_volume() def _set_level(self, new_volume): - self._manager.set_volume(new_volume) + self.sound.set_volume(new_volume) def _get_muted(self): - return self._manager.get_muted() + return self.sound.get_muted() def _set_muted(self, mute): - self._manager.set_muted(mute) + self.sound.set_muted(mute) def get_type(self): return 'speaker' diff --git a/src/jarabe/model/screen.py b/src/jarabe/model/screen.py new file mode 100644 index 0000000..91db19b --- /dev/null +++ b/src/jarabe/model/screen.py @@ -0,0 +1,64 @@ +# Copyright (C) 2006-2008 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 logging + +import dbus + +_HARDWARE_MANAGER_INTERFACE = 'org.freedesktop.ohm.Keystore' +_HARDWARE_MANAGER_SERVICE = 'org.freedesktop.ohm' +_HARDWARE_MANAGER_OBJECT_PATH = '/org/freedesktop/ohm/Keystore' + +COLOR_MODE = 0 +B_AND_W_MODE = 1 + +_ohm_service = None + +def _get_ohm(): + if _ohm_service: + return _ohm_service + + bus = dbus.SystemBus() + proxy = bus.get_object(_HARDWARE_MANAGER_SERVICE, + _HARDWARE_MANAGER_OBJECT_PATH, + follow_name_owner_changes=True) + + return dbus.Interface(proxy, _HARDWARE_MANAGER_INTERFACE) + +def set_dcon_freeze(self, frozen): + try: + _get_ohm().SetKey("display.dcon_freeze", frozen) + except dbus.DBusException: + logging.error('Cannot unfreeze the DCON') + +def set_display_mode(self, mode): + try: + _get_ohm().SetKey("display.dcon_mode", mode) + except dbus.DBusException: + logging.error('Cannot change DCON mode') + +def set_display_brightness(self, level): + try: + _get_ohm().SetKey("backlight.hardware_brightness", level) + except dbus.DBusException: + logging.error('Cannot set display brightness') + +def get_display_brightness(self): + try: + return _get_ohm().GetKey("backlight.hardware_brightness") + except dbus.DBusException: + logging.error('Cannot get display brightness') + return 0 diff --git a/src/jarabe/model/sound.py b/src/jarabe/model/sound.py new file mode 100644 index 0000000..67be7f0 --- /dev/null +++ b/src/jarabe/model/sound.py @@ -0,0 +1,56 @@ +# Copyright (C) 2006-2008 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 + +from sugar.profile import get_profile +from sugar import env +from sugar import _sugarext +from sugar import dispatch + +VOLUME_STEP = 10 + +muted_changed = dispatch.Signal() +volume_changed = dispatch.Signal() + +def get_muted(): + return _volume.get_mute() + +def get_volume(): + return _volume.get_volume() + +def set_volume(new_volume): + old_volume = _volume.get_volume() + _volume.set_volume(new_volume) + + volume_changed.send(None) + +def set_muted(new_state): + old_state = _volume.get_mute() + _volume.set_mute(new_state) + + muted_changed.send(None) + +def save(): + if env.is_emulator() is False: + profile = get_profile() + profile.sound_volume = get_volume() + profile.save() + +def restore(): + if env.is_emulator() is False: + profile = get_profile() + set_volume(profile.sound_volume) + +_volume = _sugarext.VolumeAlsa() diff --git a/src/jarabe/session.py b/src/jarabe/session.py index c1f8d0f..8927260 100644 --- a/src/jarabe/session.py +++ b/src/jarabe/session.py @@ -22,8 +22,6 @@ import signal from sugar import session from sugar import env -from jarabe.hardware import hardwaremanager - _session_manager = None class SessionManager(session.SessionManager): @@ -50,9 +48,6 @@ class SessionManager(session.SessionManager): def shutdown_completed(self): session.SessionManager.shutdown_completed(self) - hw_manager = hardwaremanager.get_manager() - hw_manager.shutdown() - bus = dbus.SystemBus() proxy = bus.get_object('org.freedesktop.Hal', '/org/freedesktop/Hal/devices/computer') diff --git a/src/jarabe/view/keyhandler.py b/src/jarabe/view/keyhandler.py index 7d09cbe..9a3a47b 100644 --- a/src/jarabe/view/keyhandler.py +++ b/src/jarabe/view/keyhandler.py @@ -25,13 +25,14 @@ import gtk from sugar._sugarext import KeyGrabber -from jarabe.hardware import hardwaremanager +from jarabe.model import screen +from jarabe.model import sound from jarabe.view import shell from jarabe.view.tabbinghandler import TabbingHandler from jarabe.model.shellmodel import ShellModel _BRIGHTNESS_STEP = 2 -_VOLUME_STEP = hardwaremanager.VOL_CHANGE_INCREMENT_RECOMMENDATION +_VOLUME_STEP = sound.VOLUME_STEP _BRIGHTNESS_MAX = 15 _VOLUME_MAX = 100 _TABBING_MODIFIER = gtk.gdk.MOD1_MASK @@ -91,33 +92,29 @@ class KeyHandler(object): self._key_grabber.grab_keys(_actions_table.keys()) def _change_volume(self, step=None, value=None): - hw_manager = hardwaremanager.get_manager() - if step is not None: - volume = hw_manager.get_volume() + step + volume = sound.get_volume() + step elif value is not None: volume = value volume = min(max(0, volume), _VOLUME_MAX) - hw_manager.set_volume(volume) - hw_manager.set_muted(volume == 0) + sound.set_volume(volume) + sound.set_muted(volume == 0) def _change_brightness(self, step=None, value=None): - hw_manager = hardwaremanager.get_manager() - if step is not None: - level = hw_manager.get_display_brightness() + step + level = screen.get_display_brightness() + step elif value is not None: level = value level = min(max(0, level), _BRIGHTNESS_MAX) - hw_manager.set_display_brightness(level) + screen.set_display_brightness(level) if level == 0: - hw_manager.set_display_mode(hardwaremanager.B_AND_W_MODE) + screen.set_display_mode(screen.B_AND_W_MODE) else: - hw_manager.set_display_mode(hardwaremanager.COLOR_MODE) + screen.set_display_mode(screen.COLOR_MODE) def _get_speech_proxy(self): if self._speech_proxy is None: |