[gnome-games/wip/exalm/gtk4: 13/37] ui: Stop using 'key-press-event' and 'key-release-event' signals



commit 19d09c5d85b568b82bb8e54ee27312f857263ba7
Author: Alexander Mikhaylenko <exalm7659 gmail com>
Date:   Sun Jul 29 00:06:18 2018 +0500

    ui: Stop using 'key-press-event' and 'key-release-event' signals
    
    Replace them with GtkEventControllerKey instead.

 data/ui/application-window.ui                   |  6 ++++-
 plugins/nintendo-ds/src/nintendo-ds-runner.vala |  8 +++----
 src/command/command-runner.vala                 |  2 +-
 src/core/runner.vala                            |  2 +-
 src/dummy/dummy-runner.vala                     |  2 +-
 src/keyboard/keyboard-mapping-builder.vala      |  4 ++--
 src/retro/retro-runner.vala                     |  2 +-
 src/ui/application-window.vala                  |  8 +++----
 src/ui/collection-view.vala                     |  8 ++++---
 src/ui/display-box.vala                         |  4 ++--
 src/ui/display-view.vala                        | 18 +++++++--------
 src/ui/keyboard-mapper.vala                     | 15 ++++++++-----
 src/ui/keyboard-tester.vala                     | 30 +++++++++++++------------
 src/ui/konami-code.vala                         | 18 +++++++++------
 src/ui/ui-view.vala                             |  2 +-
 15 files changed, 72 insertions(+), 57 deletions(-)
---
diff --git a/data/ui/application-window.ui b/data/ui/application-window.ui
index 5fef8763..3b6c635a 100644
--- a/data/ui/application-window.ui
+++ b/data/ui/application-window.ui
@@ -6,9 +6,13 @@
     <property name="default-height">600</property>
     <property name="show-menubar">False</property>
     <signal name="delete-event" after="yes" handler="on_delete_event"/>
-    <signal name="key-press-event" after="yes" handler="on_key_pressed"/>
     <signal name="window-state-event" after="yes" handler="on_window_state_event"/>
     <signal name="notify::is-active" after="yes" handler="on_active_changed"/>
+    <child>
+      <object class="GtkEventControllerKey">
+        <signal name="key-pressed" handler="on_key_pressed" swapped="no"/>
+      </object>
+    </child>
     <child>
       <object class="GtkGestureMultiPress">
         <!-- Mouse button 8 is the navigation previous button -->
diff --git a/plugins/nintendo-ds/src/nintendo-ds-runner.vala b/plugins/nintendo-ds/src/nintendo-ds-runner.vala
index 98ec5712..869282e6 100644
--- a/plugins/nintendo-ds/src/nintendo-ds-runner.vala
+++ b/plugins/nintendo-ds/src/nintendo-ds-runner.vala
@@ -136,14 +136,14 @@ private class Games.NintendoDsRunner : Object, Runner {
                return runner.get_available_input_modes ();
        }
 
-       public bool key_press_event (Gdk.EventKey event) {
+       public bool key_press_event (uint keyval, Gdk.ModifierType state) {
                // First check for Alt + 1|2|3|4
                // These shortcuts change the screen layout
                var default_modifiers = Gtk.accelerator_get_default_mod_mask ();
-               if ((event.state & default_modifiers) == Gdk.ModifierType.MOD1_MASK) {
+               if ((state & default_modifiers) == Gdk.ModifierType.MOD1_MASK) {
                        // Alt key is pressed
 
-                       var shortcut_layout = layouts[event.keyval];
+                       var shortcut_layout = layouts[keyval];
                        if (shortcut_layout != null) {
                                settings.set_string ("screen-layout", shortcut_layout);
 
@@ -158,7 +158,7 @@ private class Games.NintendoDsRunner : Object, Runner {
 
                var view_bottom = settings.get_boolean ("view-bottom-screen");
                var switch_keyval = view_bottom ? Gdk.Key.Page_Up : Gdk.Key.Page_Down;
-               if (event.keyval == switch_keyval)
+               if (keyval == switch_keyval)
                        return swap_screens ();
 
                return false;
diff --git a/src/command/command-runner.vala b/src/command/command-runner.vala
index 8db2a5e0..88c28015 100644
--- a/src/command/command-runner.vala
+++ b/src/command/command-runner.vala
@@ -86,7 +86,7 @@ public class Games.CommandRunner : Object, Runner {
                return { };
        }
 
-       public bool key_press_event (Gdk.EventKey event) {
+       public bool key_press_event (uint keyval, Gdk.ModifierType state) {
                return false;
        }
 
diff --git a/src/core/runner.vala b/src/core/runner.vala
index e5374866..7a24ed15 100644
--- a/src/core/runner.vala
+++ b/src/core/runner.vala
@@ -18,6 +18,6 @@ public interface Games.Runner : Object {
        public abstract void stop ();
        public abstract InputMode[] get_available_input_modes ();
 
-       public abstract bool key_press_event (Gdk.EventKey event);
+       public abstract bool key_press_event (uint keyval, Gdk.ModifierType state);
        public abstract bool gamepad_button_press_event (uint16 button);
 }
diff --git a/src/dummy/dummy-runner.vala b/src/dummy/dummy-runner.vala
index d82572e0..a0a56c2c 100644
--- a/src/dummy/dummy-runner.vala
+++ b/src/dummy/dummy-runner.vala
@@ -52,7 +52,7 @@ private class Games.DummyRunner : Object, Runner {
                return { };
        }
 
-       public bool key_press_event (Gdk.EventKey event) {
+       public bool key_press_event (uint keyval, Gdk.ModifierType state) {
                return false;
        }
 
diff --git a/src/keyboard/keyboard-mapping-builder.vala b/src/keyboard/keyboard-mapping-builder.vala
index f3327b13..40db2bbf 100644
--- a/src/keyboard/keyboard-mapping-builder.vala
+++ b/src/keyboard/keyboard-mapping-builder.vala
@@ -7,7 +7,7 @@ private class Games.KeyboardMappingBuilder : Object {
                mapping = new Retro.KeyJoypadMapping ();
        }
 
-       public bool set_input_mapping (GamepadInput input, uint16 keycode) {
+       public bool set_input_mapping (GamepadInput input, uint keycode) {
                var joypad_id = Retro.JoypadId.from_button_code (input.code);
                if (joypad_id == Retro.JoypadId.COUNT)
                        return false;
@@ -15,7 +15,7 @@ private class Games.KeyboardMappingBuilder : Object {
                for (Retro.JoypadId i = 0; i < Retro.JoypadId.COUNT; i += 1)
                        if (mapping.get_button_key (i) == keycode)
                                return false;
-               mapping.set_button_key (joypad_id, keycode);
+               mapping.set_button_key (joypad_id, (uint16) keycode);
 
                return true;
        }
diff --git a/src/retro/retro-runner.vala b/src/retro/retro-runner.vala
index 81ecf792..f9df3655 100644
--- a/src/retro/retro-runner.vala
+++ b/src/retro/retro-runner.vala
@@ -309,7 +309,7 @@ public class Games.RetroRunner : Object, Runner {
                        return { InputMode.GAMEPAD };
        }
 
-       public bool key_press_event (Gdk.EventKey event) {
+       public bool key_press_event (uint keyval, Gdk.ModifierType state) {
                return false;
        }
 
diff --git a/src/ui/application-window.vala b/src/ui/application-window.vala
index f125f204..3e6f9d89 100644
--- a/src/ui/application-window.vala
+++ b/src/ui/application-window.vala
@@ -148,11 +148,11 @@ private class Games.ApplicationWindow : Gtk.ApplicationWindow {
        }
 
        [GtkCallback]
-       public bool on_key_pressed (Gdk.EventKey event) {
+       public bool on_key_pressed (Gtk.EventControllerKey controller, uint keyval, uint keycode, 
Gdk.ModifierType state) {
                var default_modifiers = Gtk.accelerator_get_default_mod_mask ();
 
-               if ((event.keyval == Gdk.Key.q || event.keyval == Gdk.Key.Q) &&
-                   (event.state & default_modifiers) == Gdk.ModifierType.CONTROL_MASK) {
+               if ((keyval == Gdk.Key.q || keyval == Gdk.Key.Q) &&
+                   (state & default_modifiers) == Gdk.ModifierType.CONTROL_MASK) {
                        if (!quit_game ())
                                return false;
 
@@ -161,7 +161,7 @@ private class Games.ApplicationWindow : Gtk.ApplicationWindow {
                        return true;
                }
 
-               return current_view.on_key_pressed (event);
+               return current_view.on_key_pressed (keyval, state);
        }
 
        [GtkCallback]
diff --git a/src/ui/collection-view.vala b/src/ui/collection-view.vala
index d375bb0f..b09fc619 100644
--- a/src/ui/collection-view.vala
+++ b/src/ui/collection-view.vala
@@ -99,17 +99,19 @@ private class Games.CollectionView : Object, UiView {
                box.show_error (error_message);
        }
 
-       public bool on_key_pressed (Gdk.EventKey event) {
+       public bool on_key_pressed (uint keyval, Gdk.ModifierType state) {
                var default_modifiers = Gtk.accelerator_get_default_mod_mask ();
 
-               if ((event.keyval == Gdk.Key.f || event.keyval == Gdk.Key.F) &&
-                   (event.state & default_modifiers) == Gdk.ModifierType.CONTROL_MASK) {
+               if ((keyval == Gdk.Key.f || keyval == Gdk.Key.F) &&
+                   (state & default_modifiers) == Gdk.ModifierType.CONTROL_MASK) {
                        if (!search_mode)
                                search_mode = true;
 
                        return true;
                }
 
+               // TODO: Replace with gtk_search_bar_set_key_capture_widget()
+               var event = Gtk.get_current_event ();
                return box.search_bar_handle_event (event);
        }
 
diff --git a/src/ui/display-box.vala b/src/ui/display-box.vala
index 1162066c..aea14cf5 100644
--- a/src/ui/display-box.vala
+++ b/src/ui/display-box.vala
@@ -71,14 +71,14 @@ private class Games.DisplayBox : Gtk.Bin {
                        display_bin.remove (child);
        }
 
-       public bool on_key_press_event (Gdk.EventKey event) {
+       public bool on_key_press_event (uint keyval, Gdk.ModifierType state) {
                if (!get_mapped ())
                        return false;
 
                if (runner == null)
                        return false;
 
-               return runner.key_press_event (event);
+               return runner.key_press_event (keyval, state);
        }
 
        public bool gamepad_button_press_event (Manette.Event event) {
diff --git a/src/ui/display-view.vala b/src/ui/display-view.vala
index c4c342d4..ea737b5d 100644
--- a/src/ui/display-view.vala
+++ b/src/ui/display-view.vala
@@ -76,14 +76,14 @@ private class Games.DisplayView : Object, UiView {
                focus_out_timeout_id = -1;
        }
 
-       public bool on_key_pressed (Gdk.EventKey event) {
+       public bool on_key_pressed (uint keyval, Gdk.ModifierType state) {
                var default_modifiers = Gtk.accelerator_get_default_mod_mask ();
 
-               if (box.on_key_press_event (event))
+               if (box.on_key_press_event (keyval, state))
                        return true;
 
-               if ((event.keyval == Gdk.Key.f || event.keyval == Gdk.Key.F) &&
-                   (event.state & default_modifiers) == Gdk.ModifierType.CONTROL_MASK &&
+               if ((keyval == Gdk.Key.f || keyval == Gdk.Key.F) &&
+                   (state & default_modifiers) == Gdk.ModifierType.CONTROL_MASK &&
                    header_bar.can_fullscreen) {
                        is_fullscreen = !is_fullscreen;
                        settings.set_boolean ("fullscreen", is_fullscreen);
@@ -91,23 +91,23 @@ private class Games.DisplayView : Object, UiView {
                        return true;
                }
 
-               if (event.keyval == Gdk.Key.F11 && header_bar.can_fullscreen) {
+               if (keyval == Gdk.Key.F11 && header_bar.can_fullscreen) {
                        is_fullscreen = !is_fullscreen;
                        settings.set_boolean ("fullscreen", is_fullscreen);
 
                        return true;
                }
 
-               if (event.keyval == Gdk.Key.Escape && header_bar.can_fullscreen) {
+               if (keyval == Gdk.Key.Escape && header_bar.can_fullscreen) {
                        is_fullscreen = false;
                        settings.set_boolean ("fullscreen", false);
 
                        return true;
                }
 
-               if (((event.state & default_modifiers) == Gdk.ModifierType.MOD1_MASK) &&
-                   (((window.get_direction () == Gtk.TextDirection.LTR) && event.keyval == Gdk.Key.Left) ||
-                    ((window.get_direction () == Gtk.TextDirection.RTL) && event.keyval == Gdk.Key.Right))) {
+               if (((state & default_modifiers) == Gdk.ModifierType.MOD1_MASK) &&
+                   (((window.get_direction () == Gtk.TextDirection.LTR) && keyval == Gdk.Key.Left) ||
+                    ((window.get_direction () == Gtk.TextDirection.RTL) && keyval == Gdk.Key.Right))) {
                        on_display_back ();
 
                        return true;
diff --git a/src/ui/keyboard-mapper.vala b/src/ui/keyboard-mapper.vala
index 8606ef85..016b912e 100644
--- a/src/ui/keyboard-mapper.vala
+++ b/src/ui/keyboard-mapper.vala
@@ -7,6 +7,8 @@ private class Games.KeyboardMapper : Gtk.Bin {
        [GtkChild]
        private GamepadView gamepad_view;
 
+       private Gtk.EventControllerKey controller;
+
        private KeyboardMappingBuilder mapping_builder;
        private GamepadInput[] mapping_inputs;
        private GamepadInput input;
@@ -25,6 +27,9 @@ private class Games.KeyboardMapper : Gtk.Bin {
 
        construct {
                info_message = _("Press suitable key on your keyboard");
+
+               controller = new Gtk.EventControllerKey ();
+               controller.key_released.connect (on_keyboard_event);
        }
 
        public KeyboardMapper (GamepadViewConfiguration configuration, GamepadInput[] mapping_inputs) {
@@ -49,18 +54,16 @@ private class Games.KeyboardMapper : Gtk.Bin {
        }
 
        private void connect_to_keyboard () {
-               get_toplevel ().key_release_event.connect (on_keyboard_event);
+               get_toplevel ().add_controller (controller);
        }
 
        private void disconnect_from_keyboard () {
-               get_toplevel ().key_release_event.disconnect (on_keyboard_event);
+               get_toplevel ().remove_controller (controller);
        }
 
-       private bool on_keyboard_event (Gdk.EventKey key) {
-               if (mapping_builder.set_input_mapping (input, key.hardware_keycode))
+       private void on_keyboard_event (Gtk.EventControllerKey controller, uint keyval, uint keycode, 
Gdk.ModifierType state) {
+               if (mapping_builder.set_input_mapping (input, keycode))
                        next_input ();
-
-               return true;
        }
 
        private void next_input () {
diff --git a/src/ui/keyboard-tester.vala b/src/ui/keyboard-tester.vala
index 43a8dc0c..e23d7389 100644
--- a/src/ui/keyboard-tester.vala
+++ b/src/ui/keyboard-tester.vala
@@ -5,6 +5,8 @@ private class Games.KeyboardTester : Gtk.Bin {
        [GtkChild]
        private GamepadView gamepad_view;
 
+       private Gtk.EventControllerKey controller;
+
        public Retro.KeyJoypadMapping mapping { get; set; }
 
        private GamepadViewConfiguration _configuration;
@@ -16,6 +18,12 @@ private class Games.KeyboardTester : Gtk.Bin {
                }
        }
 
+       construct {
+               controller = new Gtk.EventControllerKey ();
+               controller.key_pressed.connect (on_key_press_event);
+               controller.key_released.connect (on_key_release_event);
+       }
+
        public KeyboardTester (GamepadViewConfiguration configuration) {
                Object (configuration: configuration);
        }
@@ -30,32 +38,26 @@ private class Games.KeyboardTester : Gtk.Bin {
        }
 
        private void connect_to_keyboard () {
-               var window = get_toplevel ();
-               window.key_press_event.connect (on_key_press_event);
-               window.key_release_event.connect (on_key_release_event);
+               get_toplevel ().add_controller (controller);
        }
 
        private void disconnect_from_keyboard () {
-               var window = get_toplevel ();
-               window.key_press_event.disconnect (on_key_press_event);
-               window.key_release_event.disconnect (on_key_release_event);
+               get_toplevel ().remove_controller (controller);
        }
 
-       private bool on_key_press_event (Gdk.EventKey key) {
-               update_gamepad_view (key, true);
+       private bool on_key_press_event (Gtk.EventControllerKey controller, uint keyval, uint keycode, 
Gdk.ModifierType state) {
+               update_gamepad_view (keycode, true);
 
                return true;
        }
 
-       private bool on_key_release_event (Gdk.EventKey key) {
-               update_gamepad_view (key, false);
-
-               return true;
+       private void on_key_release_event (Gtk.EventControllerKey controller, uint keyval, uint keycode, 
Gdk.ModifierType state) {
+               update_gamepad_view (keycode, false);
        }
 
-       private void update_gamepad_view (Gdk.EventKey key, bool highlight) {
+       private void update_gamepad_view (uint keycode, bool highlight) {
                for (Retro.JoypadId joypad_id = 0; joypad_id < Retro.JoypadId.COUNT; joypad_id += 1) {
-                       if (mapping.get_button_key (joypad_id) == key.hardware_keycode) {
+                       if (mapping.get_button_key (joypad_id) == keycode) {
                                var code = joypad_id.to_button_code ();
                                gamepad_view.highlight ({ EventCode.EV_KEY, code }, highlight);
                        }
diff --git a/src/ui/konami-code.vala b/src/ui/konami-code.vala
index ecc0eafd..efb84615 100644
--- a/src/ui/konami-code.vala
+++ b/src/ui/konami-code.vala
@@ -40,11 +40,15 @@ private class Games.KonamiCode : Object {
        public signal void code_performed ();
 
        private uint current_index;
+       private Gtk.EventControllerKey controller;
 
-       public Gtk.Widget widget {
-               construct {
-                       value.key_press_event.connect (on_key_pressed);
-               }
+       public Gtk.Widget widget { get; construct; }
+
+       construct {
+               controller = new Gtk.EventControllerKey ();
+               controller.key_pressed.connect (on_key_pressed);
+
+               widget.add_controller (controller);
        }
 
        public KonamiCode (Gtk.Widget widget) {
@@ -55,9 +59,9 @@ private class Games.KonamiCode : Object {
                current_index = 0;
        }
 
-       private bool on_key_pressed (Gdk.EventKey event) {
-               if (event.keyval != CODE_LOWER_KEYS[current_index] &&
-                   event.keyval != CODE_UPPER_KEYS[current_index]) {
+       private bool on_key_pressed (Gtk.EventControllerKey self, uint keyval, uint keycode, Gdk.ModifierType 
state) {
+               if (keyval != CODE_LOWER_KEYS[current_index] &&
+                   keyval != CODE_UPPER_KEYS[current_index]) {
                        current_index = 0;
 
                        return false;
diff --git a/src/ui/ui-view.vala b/src/ui/ui-view.vala
index 7feb66c4..6a527afd 100644
--- a/src/ui/ui-view.vala
+++ b/src/ui/ui-view.vala
@@ -7,7 +7,7 @@ private interface Games.UiView : Object {
 
        public abstract bool is_view_active { get; set; }
 
-       public abstract bool on_key_pressed (Gdk.EventKey event);
+       public abstract bool on_key_pressed (uint keyval, Gdk.ModifierType state);
 
        public abstract bool gamepad_button_press_event (Manette.Event event);
 


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