Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <mpgritti@gmail.com>2008-10-03 18:15:52 (GMT)
committer Marco Pesenti Gritti <mpgritti@gmail.com>2008-10-03 18:15:52 (GMT)
commite92a4c0d86d73b09bf4a7a0d0329f4ffdacd44fd (patch)
tree3e1e8a01aa24fee37fd710f68ca84e9dc6cb43d9
parent9cf0b08e7dab0f5a787e6b62d5f7aaf323044f79 (diff)
Split up the hardware manager and move it to model. Make
it use dispatcher instead of GObject.
-rw-r--r--bin/sugar-shell13
-rw-r--r--configure.ac1
-rw-r--r--src/jarabe/Makefile.am2
-rw-r--r--src/jarabe/frame/devices/speaker.py4
-rw-r--r--src/jarabe/hardware/Makefile.am4
-rw-r--r--src/jarabe/hardware/__init__.py16
-rw-r--r--src/jarabe/hardware/hardwaremanager.py113
-rw-r--r--src/jarabe/model/Makefile.am6
-rw-r--r--src/jarabe/model/devices/speaker.py20
-rw-r--r--src/jarabe/model/screen.py64
-rw-r--r--src/jarabe/model/sound.py56
-rw-r--r--src/jarabe/session.py5
-rw-r--r--src/jarabe/view/keyhandler.py23
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: