[vte] widget: Move keymap translation to Widget
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vte] widget: Move keymap translation to Widget
- Date: Fri, 1 May 2020 21:10:59 +0000 (UTC)
commit 58327921370340f4f44afa0c2323c42aa5e33f54
Author: Christian Persch <chpe src gnome org>
Date: Fri May 1 23:08:42 2020 +0200
widget: Move keymap translation to Widget
... making Terminal now entirely free of use of GdkEvent APIs.
Part of https://gitlab.gnome.org/GNOME/vte/issues/12
src/vte.cc | 33 ++-------------------------------
src/widget.cc | 29 +++++++++++++++++++++++++++++
src/widget.hh | 2 ++
3 files changed, 33 insertions(+), 31 deletions(-)
---
diff --git a/src/vte.cc b/src/vte.cc
index 90f5adef..55e0aa0c 100644
--- a/src/vte.cc
+++ b/src/vte.cc
@@ -4487,35 +4487,6 @@ Terminal::beep()
m_real_widget->beep();
}
-unsigned
-Terminal::translate_ctrlkey(KeyEvent const& event) const noexcept
-{
- if (event.keyval() < 128)
- return event.keyval();
-
- auto display = gdk_window_get_display(gdk_event_get_window(event.platform_event()));
- auto keymap = gdk_keymap_get_for_display(display);
- auto keyval = unsigned{event.keyval()};
-
- /* Try groups in order to find one mapping the key to ASCII */
- for (auto i = unsigned{0}; i < 4; i++) {
- auto consumed_modifiers = GdkModifierType{};
- gdk_keymap_translate_keyboard_state (keymap,
- event.keycode(),
- GdkModifierType(event.modifiers()),
- i,
- &keyval, NULL, NULL, &consumed_modifiers);
- if (keyval < 128) {
- _vte_debug_print (VTE_DEBUG_EVENTS,
- "ctrl+Key, group=%d de-grouped into keyval=0x%x\n",
- event.group(), keyval);
- break;
- }
- }
-
- return keyval;
-}
-
bool
Terminal::widget_key_press(KeyEvent const& event)
{
@@ -4908,8 +4879,8 @@ Terminal::widget_key_press(KeyEvent const& event)
}
/* Shall we do this here or earlier? See bug 375112 and bug 589557 */
- if (m_modifiers & GDK_CONTROL_MASK)
- keyval = translate_ctrlkey(event);
+ if (m_modifiers & GDK_CONTROL_MASK && widget())
+ keyval = widget()->key_event_translate_ctrlkey(event);
/* If we didn't manage to do anything, try to salvage a
* printable string. */
diff --git a/src/widget.cc b/src/widget.cc
index a23fe255..bd1b37ee 100644
--- a/src/widget.cc
+++ b/src/widget.cc
@@ -262,6 +262,35 @@ Widget::read_modifiers_from_gdk(GdkEvent* event) const noexcept
return unsigned(mods);
}
+unsigned
+Widget::key_event_translate_ctrlkey(vte::terminal::KeyEvent const& event) const noexcept
+{
+ if (event.keyval() < 128)
+ return event.keyval();
+
+ auto display = gdk_window_get_display(gdk_event_get_window(event.platform_event()));
+ auto keymap = gdk_keymap_get_for_display(display);
+ auto keyval = unsigned{event.keyval()};
+
+ /* Try groups in order to find one mapping the key to ASCII */
+ for (auto i = unsigned{0}; i < 4; i++) {
+ auto consumed_modifiers = GdkModifierType{};
+ gdk_keymap_translate_keyboard_state (keymap,
+ event.keycode(),
+ GdkModifierType(event.modifiers()),
+ i,
+ &keyval, NULL, NULL, &consumed_modifiers);
+ if (keyval < 128) {
+ _vte_debug_print (VTE_DEBUG_EVENTS,
+ "ctrl+Key, group=%d de-grouped into keyval=0x%x\n",
+ event.group(), keyval);
+ break;
+ }
+ }
+
+ return keyval;
+}
+
vte::terminal::KeyEvent
Widget::key_event_from_gdk(GdkEventKey* event) const
{
diff --git a/src/widget.hh b/src/widget.hh
index cf10c616..d44d4079 100644
--- a/src/widget.hh
+++ b/src/widget.hh
@@ -211,6 +211,8 @@ protected:
void unset_pty() noexcept;
+ unsigned key_event_translate_ctrlkey(vte::terminal::KeyEvent const& event) const noexcept;
+
public: // FIXMEchpe
void im_preedit_changed() noexcept;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]