[five-or-more/arnaudb/use-event-controllers: 7/8] Use EventControllerKey.



commit 01356aaf0d8dc944c14e8208d619a2a5c337b533
Author: Arnaud Bonatti <arnaud bonatti gmail com>
Date:   Thu Mar 12 20:20:53 2020 +0100

    Use EventControllerKey.
    
    Bump Gtk required version to 3.24.

 meson.build   |  2 +-
 src/view.vala | 15 ++++++++++++---
 2 files changed, 13 insertions(+), 4 deletions(-)
---
diff --git a/meson.build b/meson.build
index b151822..d0759d5 100644
--- a/meson.build
+++ b/meson.build
@@ -19,7 +19,7 @@ gee_dep = dependency('gee-0.8')
 gio_dep = dependency('gio-2.0', version: '>= ' + glib_min_version)
 glib_dep = dependency('glib-2.0', version: '>= ' + glib_min_version)
 gmodule_export_dep = dependency('gmodule-export-2.0')
-gtk_dep = dependency('gtk+-3.0', version: '>= 3.20.0')
+gtk_dep = dependency('gtk+-3.0', version: '>= 3.24.0')
 libgnome_games_support_dep = dependency('libgnome-games-support-1')
 librsvg_dep = dependency('librsvg-2.0', version: '>= 2.32.0')
 
diff --git a/src/view.vala b/src/view.vala
index 00c8ac8..17b2694 100644
--- a/src/view.vala
+++ b/src/view.vala
@@ -51,6 +51,7 @@ private class View : DrawingArea
     private int animation_state;
     private uint animation_id;
 
+    private EventControllerKey key_controller;          // for keeping in memory
     private GestureMultiPress click_controller;         // for keeping in memory
 
     internal View (GLib.Settings settings, Game game, ThemeRenderer theme)
@@ -59,6 +60,7 @@ private class View : DrawingArea
         this.game = game;
         this.theme = theme;
 
+        init_keyboard ();
         init_mouse ();
 
         cs = get_style_context ();
@@ -161,10 +163,15 @@ private class View : DrawingArea
         queue_draw_area (keyboard_cursor_x * piece_size, keyboard_cursor_y * piece_size, piece_size, 
piece_size);
     }
 
-    protected override bool key_press_event (Gdk.EventKey event)
+    private void init_keyboard ()
     {
-        uint key = event.keyval;
-        switch (key)
+        key_controller = new Gtk.EventControllerKey (this);
+        key_controller.key_pressed.connect (on_key_pressed);
+    }
+
+    private inline bool on_key_pressed (Gtk.EventControllerKey _key_controller, uint keyval, uint keycode, 
Gdk.ModifierType state)
+    {
+        switch (keyval)
         {
             case (Gdk.Key.Left):
                 /* fall-thru */
@@ -216,6 +223,8 @@ private class View : DrawingArea
                 if (show_cursor)
                     cell_clicked (keyboard_cursor_x, keyboard_cursor_y);
                 break;
+            default:
+                return false;
         }
 
         return true;


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