[vte] widget: Continue treating Meta as Alt



commit b898f1da0591ad60db811b68c9e442f4eef55ba6
Author: Christian Persch <chpe src gnome org>
Date:   Fri May 1 23:08:42 2020 +0200

    widget: Continue treating Meta as Alt
    
    This partially reverts commit 2965a10e63d024a9318976ae2bf81621b31809b1.
    The original change is correct, but needs more work, so revert the
    parts that are observable by the terminal app/user for now.
    The sequences vte sends are those for Alt, not Meta; so rename
    all occurrences of 'meta' to alt.

 src/modes-private.hh | 4 ++--
 src/modes-test.cc    | 2 +-
 src/modes.hh         | 2 +-
 src/vte.cc           | 2 +-
 src/widget.cc        | 6 ++++++
 5 files changed, 11 insertions(+), 5 deletions(-)
---
diff --git a/src/modes-private.hh b/src/modes-private.hh
index 099eb91d..2dab1f8d 100644
--- a/src/modes-private.hh
+++ b/src/modes-private.hh
@@ -157,7 +157,7 @@ MODE(XTERM_MOUSE_ANY_EVENT,          1003)
 MODE(XTERM_FOCUS,                    1004)
 MODE(XTERM_MOUSE_EXT_SGR,            1006)
 MODE(XTERM_ALTBUF_SCROLL,            1007)
-MODE(XTERM_ALT_SENDS_ESCAPE,         1039)
+MODE(XTERM_META_SENDS_ESCAPE,        1036)
 MODE(XTERM_OPT_ALTBUF,               1047)
 MODE(XTERM_SAVE_CURSOR,              1048)
 MODE(XTERM_OPT_ALTBUF_SAVE_CURSOR,   1049)
@@ -846,8 +846,8 @@ MODE_FIXED(XTERM_LOGGING,                         46, ALWAYS_RESET)
 MODE_FIXED(XTERM_MOUSE_EXT,                     1005, ALWAYS_RESET)
 MODE_FIXED(XTERM_8BIT_META,                     1034, ALWAYS_RESET)
 MODE_FIXED(XTERM_NUMLOCK,                       1035, ALWAYS_RESET)
-MODE_FIXED(XTERM_META_SENDS_ESCAPE,             1036, ALWAYS_RESET)
 MODE_FIXED(XTERM_DELETE_IS_DEL,                 1037, ALWAYS_RESET)
+MODE_FIXED(XTERM_ALT_SENDS_ESCAPE,              1039, ALWAYS_RESET)
 MODE_FIXED(XTERM_KEEP_SELECTION,                1040, ALWAYS_RESET)
 MODE_FIXED(XTERM_KEEP_CLIPBOARD,                1044, ALWAYS_RESET)
 MODE_FIXED(XTERM_SELECT_TO_CLIPBOARD,           1041, ALWAYS_RESET)
diff --git a/src/modes-test.cc b/src/modes-test.cc
index 91109c2b..5841485c 100644
--- a/src/modes-test.cc
+++ b/src/modes-test.cc
@@ -59,7 +59,7 @@ test_modes_private(void)
         vte::terminal::modes::Private modes{};
 
         g_assert_true(modes.DEC_AUTOWRAP());
-        g_assert_true(modes.XTERM_ALT_SENDS_ESCAPE());
+        g_assert_true(modes.XTERM_META_SENDS_ESCAPE());
 
         g_assert_false(modes.XTERM_FOCUS());
         modes.set_XTERM_FOCUS(true);
diff --git a/src/modes.hh b/src/modes.hh
index 83165399..48b1b2ce 100644
--- a/src/modes.hh
+++ b/src/modes.hh
@@ -228,7 +228,7 @@ public:
                                    eDEC_TEXT_CURSOR,
                                    eVTE_BIDI_SWAP_ARROW_KEYS,
                                    eXTERM_ALTBUF_SCROLL,
-                                   eXTERM_ALT_SENDS_ESCAPE} { }
+                                   eXTERM_META_SENDS_ESCAPE} { }
 
         inline void push_saved(int mode)
         {
diff --git a/src/vte.cc b/src/vte.cc
index 55e0aa0c..b3271538 100644
--- a/src/vte.cc
+++ b/src/vte.cc
@@ -4929,7 +4929,7 @@ Terminal::widget_key_press(KeyEvent const& event)
                                                                   &normal,
                                                                   &normal_length);
                         }
-                       if (m_modes_private.XTERM_ALT_SENDS_ESCAPE() &&
+                       if (m_modes_private.XTERM_META_SENDS_ESCAPE() &&
                            !suppress_alt_esc &&
                            (normal_length > 0) &&
                            (m_modifiers & VTE_ALT_MASK)) {
diff --git a/src/widget.cc b/src/widget.cc
index bd1b37ee..c4bb17b3 100644
--- a/src/widget.cc
+++ b/src/widget.cc
@@ -254,6 +254,12 @@ Widget::read_modifiers_from_gdk(GdkEvent* event) const noexcept
         if (!gdk_event_get_state(event, &mods))
                 return 0;
 
+        #if 1
+        /* HACK! Treat META as ALT; see bug #663779. */
+        if (mods & GDK_META_MASK)
+                mods = GdkModifierType(mods | GDK_MOD1_MASK);
+        #endif
+
         /* Map non-virtual modifiers to virtual modifiers (Super, Hyper, Meta) */
         auto display = gdk_window_get_display(gdk_event_get_window(event));
         auto keymap = gdk_keymap_get_for_display(display);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]