[Sugar-devel] [PATCH Terminal] Prevent Sugar capture <Ctrl>z and <Ctrl>q send them to vte SL #3222 OLPC #11836

Manuel Quiñones manuq at laptop.org
Wed May 9 19:52:30 EDT 2012


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 at laptop.org>
---
 terminal.py |   23 +++++++++++++++++++----
 1 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/terminal.py b/terminal.py
index 6de7500..2488b5b 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 drom 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):
-- 
1.7.7.6



More information about the Sugar-devel mailing list