Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManuel QuiƱones <manuq@laptop.org>2012-05-10 20:19:52 (GMT)
committer Rafael Ortiz <rafael@activitycentral.com>2012-05-10 20:55:24 (GMT)
commitffd25f6841295a956d7fab921e49cbbd99f820ec (patch)
treea73854c98b073ac130c56eab60e1745db8b08d83
parentbca325bc01a6887197c06e45d6035c9f79a7f6a3 (diff)
Prevent Sugar capture <Ctrl>z and <Ctrl>q send them to vte SL #3222 OLPC #11836
Used the same approach than the solution for the Escape capture when the activity is fullscreen mode. Refactored the method to allow this keystrokes. This fixes http://dev.laptop.org/ticket/11836 and http://bugs.sugarlabs.org/ticket/3222 . Signed-off-by: Manuel QuiƱones <manuq@laptop.org> Reviewed-by: James Cameron <quozl@laptop.org> Tested-by: James Cameron <quozl@laptop.org> Signed-off-by: Rafael Ortiz <rafael@activitycentral.com>
-rw-r--r--terminal.py23
1 files changed, 19 insertions, 4 deletions
diff --git a/terminal.py b/terminal.py
index 6de7500..ee46fdc 100644
--- a/terminal.py
+++ b/terminal.py
@@ -380,15 +380,30 @@ class TerminalActivity(activity.Activity):
vt.fork_command("/bin/su", ('/bin/su', '-'))
def __key_press_cb(self, window, event):
- # Escape keypresses are routed directly to the vte and then dropped.
- # This hack prevents Sugar from hijacking them and canceling
- # fullscreen mode.
- if gtk.gdk.keyval_name(event.keyval) == 'Escape':
+ """Route some keypresses directly to the vte and then drop them.
+
+ This prevents Sugar from hijacking events that are useful in
+ the vte.
+
+ """
+
+ def event_to_vt(event):
current_page = self._notebook.get_current_page()
vt = self._notebook.get_nth_page(current_page).vt
vt.event(event)
+
+ key_name = gtk.gdk.keyval_name(event.keyval)
+
+ # Escape is used in Sugar to cancel fullscreen mode.
+ if key_name == 'Escape':
+ event_to_vt(event)
return True
+ elif event.get_state() & gtk.gdk.CONTROL_MASK:
+ if key_name in ['z', 'q']:
+ event_to_vt(event)
+ return True
+
return False
def read_file(self, file_path):