Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@sugarlabs.org>2009-09-09 14:15:50 (GMT)
committer Tomeu Vizoso <tomeu@sugarlabs.org>2009-09-09 14:15:50 (GMT)
commitafd715bbe61e6b02d6de419b3bea1b075ba98e54 (patch)
tree6433a5afb4719f6faae7c473e6654e6c87aa7207 /src
parent48c8a3174d11d41ad249076d711e428f4009a89d (diff)
Implement Alt key listening in the HomeWindow instead of using a global grab #1311
Diffstat (limited to 'src')
-rw-r--r--src/jarabe/desktop/homebox.py13
-rw-r--r--src/jarabe/desktop/homewindow.py19
-rw-r--r--src/jarabe/view/keyhandler.py25
3 files changed, 32 insertions, 25 deletions
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',
'<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'
@@ -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.