[gnome-mines/arnaudb/modernize-code: 2/7] Use EventControllerKey.



commit a9c28a65c72f1d22b1aac2570f29332379a880ff
Author: Arnaud Bonatti <arnaud bonatti gmail com>
Date:   Tue Mar 31 15:48:48 2020 +0200

    Use EventControllerKey.
    
    Bump Gtk required version to 3.24.

 meson.build             |  2 +-
 src/minefield-view.vala | 32 ++++++++++++++++++++++----------
 2 files changed, 23 insertions(+), 11 deletions(-)
---
diff --git a/meson.build b/meson.build
index e54d1c4..3287dc2 100644
--- a/meson.build
+++ b/meson.build
@@ -22,7 +22,7 @@ pkgdatadir = join_paths (datadir, 'gnome-mines')
 # Dependencies
 glib_dep = dependency ('glib-2.0', version: '>= 2.40.0')
 gee_dep = dependency ('gee-0.8')
-gtk_dep = dependency ('gtk+-3.0', version: '>= 3.12')
+gtk_dep = dependency ('gtk+-3.0', version: '>= 3.24')
 librsvg_dep = dependency ('librsvg-2.0', version: '>=2.32.0')
 libgnome_games_support_dep = dependency ('libgnome-games-support-1')
 libmath_dep = cc.find_library('m')
diff --git a/src/minefield-view.vala b/src/minefield-view.vala
index fcf7cfa..d399b95 100644
--- a/src/minefield-view.vala
+++ b/src/minefield-view.vala
@@ -140,6 +140,13 @@ public class MinefieldView : Gtk.Grid
         }
     }
 
+    private Gtk.EventControllerKey key_controller;    // for keeping in memory
+
+    construct
+    {
+        init_keyboard ();
+    }
+
     public MinefieldView (Settings settings)
     {
         this.settings = settings;
@@ -425,7 +432,14 @@ public class MinefieldView : Gtk.Grid
         }
     }
 
-    public override bool key_press_event (Gdk.EventKey event)
+    private inline void init_keyboard ()  // called on construct
+    {
+        key_controller = new Gtk.EventControllerKey (this);
+        key_controller.key_pressed.connect (on_key_pressed);
+        key_controller.key_released.connect (on_key_released);
+    }
+
+    private inline bool on_key_pressed (Gtk.EventControllerKey _key_controller, uint keyval, uint keycode, 
Gdk.ModifierType state)
     {
         /* Check for end cases and paused game */
         if (minefield.exploded || minefield.is_complete || minefield.paused)
@@ -439,7 +453,7 @@ public class MinefieldView : Gtk.Grid
         var y = keyboard_cursor.y;
         mines[keyboard_cursor.x,keyboard_cursor.y].remove_class ("cursor");
 
-        switch (event.keyval)
+        switch (keyval)
         {
         case Gdk.Key.Left:
         case Gdk.Key.h:
@@ -466,7 +480,7 @@ public class MinefieldView : Gtk.Grid
             {
                 selected.is_set = false;
 
-                if ((event.state & Gdk.ModifierType.CONTROL_MASK) != 0)
+                if ((state & Gdk.ModifierType.CONTROL_MASK) != 0)
                 {
                     toggle_mark (keyboard_cursor.x, keyboard_cursor.y);
                 }
@@ -512,18 +526,18 @@ public class MinefieldView : Gtk.Grid
         return true;
     }
 
-    public override bool key_release_event (Gdk.EventKey event)
+    private inline void on_key_released (Gtk.EventControllerKey _key_controller, uint keyval, uint keycode, 
Gdk.ModifierType state)
     {
-        if (event.keyval != Gdk.Key.space)
-            return false;
+        if (keyval != Gdk.Key.space)
+            return;
 
         /* Check for end cases and paused game */
         if (minefield.exploded || minefield.is_complete || minefield.paused)
-            return false;
+            return;
 
         /* Check that the user isn't currently using the mouse */
         if (!selected.is_set || !keyboard_cursor.is_set)
-            return false;
+            return;
 
         if (minefield.is_cleared (selected.x, selected.y))
             minefield.multi_release (selected.x, selected.y);
@@ -531,7 +545,5 @@ public class MinefieldView : Gtk.Grid
             minefield.clear_mine (selected.x, selected.y);
 
         selected.is_set = false;
-
-        return false;
     }
 }


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