From afd715bbe61e6b02d6de419b3bea1b075ba98e54 Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Wed, 09 Sep 2009 14:15:50 +0000 Subject: Implement Alt key listening in the HomeWindow instead of using a global grab #1311 --- diff --git a/src/jarabe/desktop/homebox.py b/src/jarabe/desktop/homebox.py index 85279ff..e79bf22 100644 --- a/src/jarabe/desktop/homebox.py +++ b/src/jarabe/desktop/homebox.py @@ -43,6 +43,9 @@ class HomeBox(gtk.VBox): gobject.GObject.__init__(self) + self.connect('visibility-notify-event', + self.__visibility_notify_event_cb) + self._favorites_view = favoritesview.FavoritesView() self._list_view = ActivitiesList() @@ -144,6 +147,16 @@ class HomeBox(gtk.VBox): def set_resume_mode(self, resume_mode): self._favorites_view.set_resume_mode(resume_mode) + def __visibility_notify_event_cb(self, window, event): + if event.state == gtk.gdk.VISIBILITY_FULLY_OBSCURED: + return + + screen_, x_, y_, modmask = gtk.gdk.display_get_default().get_pointer() + if modmask & gtk.gdk.MOD1_MASK: + self.set_resume_mode(False) + else: + self.set_resume_mode(True) + class HomeToolbar(gtk.Toolbar): __gtype_name__ = 'SugarHomeToolbar' diff --git a/src/jarabe/desktop/homewindow.py b/src/jarabe/desktop/homewindow.py index c3b18de..c7e2b8f 100644 --- a/src/jarabe/desktop/homewindow.py +++ b/src/jarabe/desktop/homewindow.py @@ -49,8 +49,12 @@ class HomeWindow(gtk.Window): self.realize() self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DESKTOP) + self.connect('visibility-notify-event', self._visibility_notify_event_cb) + self.connect('map-event', self.__map_event_cb) + self.connect('key-press-event', self.__key_press_event_cb) + self.connect('key-release-event', self.__key_release_event_cb) self._home_box = HomeBox() self._group_box = GroupBox() @@ -86,6 +90,21 @@ class HomeWindow(gtk.Window): else: self._activate_view() + def __key_press_event_cb(self, window, event): + if event.keyval in [gtk.keysyms.Alt_L, gtk.keysyms.Alt_R]: + self._home_box.set_resume_mode(False) + return False + + def __key_release_event_cb(self, window, event): + if event.keyval in [gtk.keysyms.Alt_L, gtk.keysyms.Alt_R]: + self._home_box.set_resume_mode(True) + return False + + def __map_event_cb(self, window, event): + # have to make the desktop window active + # since metacity doesn't make it on startup + self.window.focus() + def __zoom_level_changed_cb(self, **kwargs): old_level = kwargs['old_level'] new_level = kwargs['new_level'] diff --git a/src/jarabe/view/keyhandler.py b/src/jarabe/view/keyhandler.py index 26a7f26..e2e1395 100644 --- a/src/jarabe/view/keyhandler.py +++ b/src/jarabe/view/keyhandler.py @@ -35,7 +35,6 @@ 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 @@ -64,8 +63,6 @@ _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' @@ -201,13 +198,6 @@ 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) @@ -242,23 +232,8 @@ 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