Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bin/sugar-session9
-rw-r--r--src/jarabe/desktop/favoritesview.py17
-rw-r--r--src/jarabe/desktop/homebox.py2
-rw-r--r--src/jarabe/desktop/homewindow.py9
-rw-r--r--src/jarabe/view/keyhandler.py28
5 files changed, 58 insertions, 7 deletions
diff --git a/bin/sugar-session b/bin/sugar-session
index 1ce40a3..2d9bb98 100644
--- a/bin/sugar-session
+++ b/bin/sugar-session
@@ -45,7 +45,7 @@ gettext.bindtextdomain('sugar', config.locale_path)
gettext.bindtextdomain('sugar-toolkit', config.locale_path)
gettext.textdomain('sugar')
-from jarabe.desktop.homewindow import HomeWindow
+from jarabe.desktop import homewindow
from jarabe.model import sound
from jarabe.view import launcher
from jarabe import intro
@@ -117,9 +117,10 @@ def setup_journal_cb():
from jarabe.journal import journalactivity
journalactivity.start()
-def show_software_updates_cb(home_window):
+def show_software_updates_cb():
logging.debug('STARTUP: show_software_updates_cb')
if os.path.isfile(os.path.expanduser('~/.sugar-update')):
+ home_window = homewindow.get_instance()
home_window.get_home_box().show_software_updates_alert()
def setup_notification_service_cb():
@@ -157,7 +158,7 @@ def main():
launcher.setup()
- home_window = HomeWindow()
+ home_window = homewindow.get_instance()
home_window.show()
gobject.idle_add(unfreeze_dcon_cb)
@@ -166,7 +167,7 @@ def main():
gobject.idle_add(setup_journal_cb)
gobject.idle_add(setup_notification_service_cb)
gobject.idle_add(setup_file_transfer_cb)
- gobject.idle_add(show_software_updates_cb, home_window)
+ gobject.idle_add(show_software_updates_cb)
try:
gtk.main()
diff --git a/src/jarabe/desktop/favoritesview.py b/src/jarabe/desktop/favoritesview.py
index 236ba2b..5be878f 100644
--- a/src/jarabe/desktop/favoritesview.py
+++ b/src/jarabe/desktop/favoritesview.py
@@ -92,6 +92,7 @@ class FavoritesView(hippo.Canvas):
self._layout = None
self._alert = None
self._datastore_listener = DatastoreListener()
+ self._resume_mode = True
# More DND stuff
self.add_events(gtk.gdk.BUTTON_PRESS_MASK |
@@ -130,6 +131,7 @@ class FavoritesView(hippo.Canvas):
return
icon = ActivityIcon(activity_info, self._datastore_listener)
icon.props.size = style.STANDARD_ICON_SIZE
+ icon.set_resume_mode(self._resume_mode)
self._box.insert_sorted(icon, 0, self._layout.compare_activities)
self._layout.append(icon)
@@ -335,6 +337,12 @@ class FavoritesView(hippo.Canvas):
def __register_alert_response_cb(self, alert, response_id):
self.remove_alert()
+ def set_resume_mode(self, resume_mode):
+ self._resume_mode = resume_mode
+ for icon in self._box.get_children():
+ if hasattr(icon, 'set_resume_mode'):
+ icon.set_resume_mode(self._resume_mode)
+
DS_DBUS_SERVICE = 'org.laptop.sugar.DataStore'
DS_DBUS_INTERFACE = 'org.laptop.sugar.DataStore'
DS_DBUS_PATH = '/org/laptop/sugar/DataStore'
@@ -400,6 +408,7 @@ class ActivityIcon(CanvasIcon):
self._activity_info = activity_info
self._journal_entries = []
self._hovering = False
+ self._resume_mode = True
self.connect('hovering-changed', self.__hovering_changed_event_cb)
self.connect('button-release-event', self.__button_release_event_cb)
@@ -446,7 +455,7 @@ class ActivityIcon(CanvasIcon):
def _update(self):
self.palette = None
- if not self._journal_entries:
+ if not self._resume_mode or not self._journal_entries:
self.props.stroke_color = style.COLOR_BUTTON_GREY.get_svg()
self.props.fill_color = style.COLOR_TRANSPARENT.get_svg()
else:
@@ -506,7 +515,7 @@ class ActivityIcon(CanvasIcon):
def _activate(self):
self.palette.popdown(immediate=True)
- if self._journal_entries:
+ if self._resume_mode and self._journal_entries:
entry = self._journal_entries[0]
shell_model = shell.get_model()
@@ -548,6 +557,10 @@ class ActivityIcon(CanvasIcon):
return registry.get_bundle_position(self.bundle_id, self.version)
fixed_position = property(_get_fixed_position, None)
+ def set_resume_mode(self, resume_mode):
+ self._resume_mode = resume_mode
+ self._update()
+
class FavoritePalette(ActivityPalette):
__gtype_name__ = 'SugarFavoritePalette'
diff --git a/src/jarabe/desktop/homebox.py b/src/jarabe/desktop/homebox.py
index 0be1d05..604001e 100644
--- a/src/jarabe/desktop/homebox.py
+++ b/src/jarabe/desktop/homebox.py
@@ -141,6 +141,8 @@ class HomeBox(gtk.VBox):
def focus_search_entry(self):
self._toolbar.search_entry.grab_focus()
+ def set_resume_mode(self, resume_mode):
+ self._favorites_view.set_resume_mode(resume_mode)
class HomeToolbar(gtk.Toolbar):
__gtype_name__ = 'SugarHomeToolbar'
diff --git a/src/jarabe/desktop/homewindow.py b/src/jarabe/desktop/homewindow.py
index bbb0db1..6212970 100644
--- a/src/jarabe/desktop/homewindow.py
+++ b/src/jarabe/desktop/homewindow.py
@@ -141,3 +141,12 @@ class HomeWindow(gtk.Window):
def get_home_box(self):
return self._home_box
+
+_instance = None
+
+def get_instance():
+ global _instance
+ if not _instance:
+ _instance = HomeWindow()
+ return _instance
+
diff --git a/src/jarabe/view/keyhandler.py b/src/jarabe/view/keyhandler.py
index f81d24b..26a7f26 100644
--- a/src/jarabe/view/keyhandler.py
+++ b/src/jarabe/view/keyhandler.py
@@ -35,6 +35,7 @@ from jarabe.view.tabbinghandler import TabbingHandler
from jarabe.model.shell import ShellModel
from jarabe import config
from jarabe.journal import journalactivity
+from jarabe.desktop import homewindow
_VOLUME_STEP = sound.VOLUME_STEP
_VOLUME_MAX = 100
@@ -63,6 +64,8 @@ _actions_table = {
'XF86Search' : 'open_search',
'<alt><shift>o' : 'open_search',
'<alt><shift>s' : 'say_text',
+ 'Alt_L' : 'disable_resume_mode',
+ 'Alt_R' : 'disable_resume_mode',
}
SPEECH_DBUS_SERVICE = 'org.laptop.Speech'
@@ -198,10 +201,17 @@ class KeyHandler(object):
def handle_open_search(self, event_time):
journalactivity.get_journal().focus_search()
+ def handle_disable_resume_mode(self, event_time):
+ # TODO: KeyHandler should be a singleton and interested parties
+ # would listen to it. That way it wouldn't need to reference half
+ # of the shell classes.
+ home_box = homewindow.get_instance().get_home_box()
+ home_box.set_resume_mode(False)
+
def _key_pressed_cb(self, grabber, keycode, state, event_time):
key = grabber.get_key(keycode, state)
logging.debug('_key_pressed_cb: %i %i %s', keycode, state, key)
- if key:
+ if key is not None:
self._key_pressed = key
self._keycode_pressed = keycode
self._keystate_pressed = state
@@ -232,7 +242,23 @@ class KeyHandler(object):
return False
+ def _is_resume_mode_keycode(self, keycode):
+ """See if the physical key pressed matches one of the keys that modify
+ the resume mode of the favorites view.
+ """
+ keymap = gtk.gdk.keymap_get_default()
+ entries = keymap.get_entries_for_keycode(keycode)
+ for entry in entries:
+ if gtk.gdk.keyval_name(entry[0]) in ['Alt_L', 'Alt_R']:
+ return True
+ return False
+
def _key_released_cb(self, grabber, keycode, state, event_time):
+ logging.debug('_key_released_cb: %i %i' % (keycode, state))
+ if self._is_resume_mode_keycode(keycode):
+ home_box = homewindow.get_instance().get_home_box()
+ home_box.set_resume_mode(True)
+
if self._tabbing_handler.is_tabbing():
# We stop tabbing and switch to the new window as soon as the
# modifier key is raised again.