From 814eaf8255416f7db3267467a43dada205a94209 Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Tue, 25 Aug 2009 12:54:49 +0000 Subject: Start new activity instance when Alt key is hold pressed #1129 --- (limited to 'src') 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', 'o' : 'open_search', '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. -- cgit v0.9.1