[gnome-taquin] Use EventControllerKey.
- From: Arnaud B. <arnaudb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-taquin] Use EventControllerKey.
- Date: Mon, 9 Mar 2020 22:34:48 +0000 (UTC)
commit f3c582abf99654258276f75bbab3569969a88d02
Author: Arnaud Bonatti <arnaud bonatti gmail com>
Date: Wed Feb 19 18:35:19 2020 +0100
Use EventControllerKey.
data/ui/base-window.ui | 1 -
meson.build | 2 +-
src/base-window.vala | 54 +++++++++++++++++++++++++++++++-------------------
src/taquin-view.vala | 23 ++++++++++++++++++---
4 files changed, 55 insertions(+), 25 deletions(-)
---
diff --git a/data/ui/base-window.ui b/data/ui/base-window.ui
index 4996077..dba8665 100644
--- a/data/ui/base-window.ui
+++ b/data/ui/base-window.ui
@@ -19,7 +19,6 @@
<requires lib="gtk+" version="3.12"/>
<template class="BaseWindow" parent="AdaptativeWindow">
<property name="visible">False</property>
- <signal name="key-press-event" handler="on_key_press_event"/>
<child>
<object class="GtkOverlay" id="main_overlay">
<property name="visible">True</property>
diff --git a/meson.build b/meson.build
index 2219c33..fd3ef9e 100644
--- a/meson.build
+++ b/meson.build
@@ -16,7 +16,7 @@ valac = meson.get_compiler('vala')
gio_dependency = dependency('gio-2.0', version: '>= 2.42.0')
glib_dependency = dependency('glib-2.0', version: '>= 2.42.0')
gsound_dependency = dependency('gsound', version: '>= 1.0.2')
-gtk_dependency = dependency('gtk+-3.0', version: '>= 3.22.23')
+gtk_dependency = dependency('gtk+-3.0', version: '>= 3.24.0')
libm_dependency = cc.find_library('m', required: false) # some platforms do not have libm separated from libc
posix_dependency = valac.find_library('posix')
rsvg_dependency = dependency('librsvg-2.0', version: '>= 2.32.0')
diff --git a/src/base-window.vala b/src/base-window.vala
index 6ec8613..2c652ab 100644
--- a/src/base-window.vala
+++ b/src/base-window.vala
@@ -61,6 +61,8 @@ private class BaseWindow : AdaptativeWindow, AdaptativeWidget
{
headerbar = (BaseHeaderBar) nta_headerbar;
+ init_keyboard ();
+
install_action_entries ();
add_adaptative_child (headerbar);
@@ -306,37 +308,46 @@ private class BaseWindow : AdaptativeWindow, AdaptativeWidget
}
/*\
- * * global callbacks
+ * * keyboard user actions
\*/
- [CCode (notify = false)] public string help_string_or_empty { private get; protected construct; default
= ""; }
+ private Gtk.EventControllerKey key_controller; // for keeping in memory
+
+ private void init_keyboard () // called on construct
+ {
+ key_controller = new Gtk.EventControllerKey (this);
+ key_controller.key_pressed.connect (on_key_pressed);
+ }
- [GtkCallback]
- protected virtual bool on_key_press_event (Widget widget, Gdk.EventKey event)
+ protected inline bool on_key_pressed (Gtk.EventControllerKey _key_controller, uint keyval, uint keycode,
Gdk.ModifierType state)
{
- return _on_key_press_event (widget, event, help_string_or_empty);
+ return _on_key_press_event (keyval, state);
}
- private static bool _on_key_press_event (Widget widget, Gdk.EventKey event, string help_string_or_empty)
+ private bool _on_key_press_event (uint keyval, Gdk.ModifierType state)
{
- string name = (!) (Gdk.keyval_name (event.keyval) ?? "");
+ string name = (!) (Gdk.keyval_name (keyval) ?? "");
if (name == "F1") // TODO fix dance done with the F1 & <Primary>F1 shortcuts that show help overlay
{
- BaseWindow _this = (BaseWindow) widget;
-
- _this.headerbar.close_popovers ();
- _this.main_view.close_popovers ();
- if ((event.state & Gdk.ModifierType.CONTROL_MASK) != 0)
+ headerbar.close_popovers ();
+ main_view.close_popovers ();
+ if ((state & Gdk.ModifierType.CONTROL_MASK) != 0)
return false; // help overlay
- if ((event.state & Gdk.ModifierType.SHIFT_MASK) == 0)
- return show_application_help (_this, help_string_or_empty); // fallback on help overlay
(TODO test)
- _this.about ();
+ if ((state & Gdk.ModifierType.SHIFT_MASK) == 0)
+ return show_application_help (this, help_string_or_empty); // fallback on help overlay
(TODO test)
+ about ();
return true;
}
return false;
}
+ /*\
+ * * help
+ \*/
+
+ [CCode (notify = false)] public string help_string_or_empty { private get; protected construct; default
= ""; }
+
private void help (/* SimpleAction action, Variant? variant */)
{
show_application_help (this, help_string_or_empty);
@@ -422,24 +433,27 @@ private class BaseWindow : AdaptativeWindow, AdaptativeWidget
\*/
private AboutDialog about_dialog;
+ private Gtk.EventControllerKey about_dialog_key_controller; // for keeping in memory
+
private void show_about_dialog ()
{
if (should_init_about_dialog)
{
create_about_dialog ();
about_dialog.response.connect ((_about_dialog, response) => _about_dialog.hide ());
- about_dialog.key_press_event.connect (about_dialog_key_press_event);
+ about_dialog_key_controller = new Gtk.EventControllerKey (about_dialog);
+ about_dialog_key_controller.key_pressed.connect (on_about_dialog_key_pressed);
about_dialog.set_transient_for (this);
should_init_about_dialog = false;
}
about_dialog.run ();
}
- private static bool about_dialog_key_press_event (Widget _about_dialog_widget, Gdk.EventKey event)
+ private inline bool on_about_dialog_key_pressed (Gtk.EventControllerKey _about_dialog_key_controller,
uint keyval, uint keycode, Gdk.ModifierType state)
{
- if (((!) (Gdk.keyval_name (event.keyval) ?? "") == "F1")
- && ((event.state & Gdk.ModifierType.SHIFT_MASK) != 0))
+ if (((!) (Gdk.keyval_name (keyval) ?? "") == "F1")
+ && ((state & Gdk.ModifierType.SHIFT_MASK) != 0))
{
- ((Dialog) _about_dialog_widget).response (ResponseType.CANCEL);
+ about_dialog.response (ResponseType.CANCEL);
return true;
}
return false;
diff --git a/src/taquin-view.vala b/src/taquin-view.vala
index b58408b..77578d1 100644
--- a/src/taquin-view.vala
+++ b/src/taquin-view.vala
@@ -63,6 +63,11 @@ private class TaquinView : Gtk.DrawingArea
private bool finished = false;
private double animation_end_offset;
+ construct
+ {
+ init_keyboard ();
+ }
+
internal TaquinView ()
{
can_focus = true;
@@ -479,13 +484,25 @@ private class TaquinView : Gtk.DrawingArea
return true;
}
- protected override bool key_press_event (Gdk.EventKey event)
+ /*\
+ * * keyboard user actions
+ \*/
+
+ private Gtk.EventControllerKey key_controller; // for keeping in memory
+
+ private void init_keyboard () // called on construct
+ {
+ 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)
{
if (finished)
return false;
- string k_name = (!) (Gdk.keyval_name (event.keyval) ?? "");
+ string k_name = (!) (Gdk.keyval_name (keyval) ?? "");
- if (game.game_type == GameType.SIXTEEN && ((event.state & ModifierType.SHIFT_MASK) > 0 ||
(event.state & ModifierType.CONTROL_MASK) > 0))
+ if (game.game_type == GameType.SIXTEEN && ((state & ModifierType.SHIFT_MASK) > 0 || (state &
ModifierType.CONTROL_MASK) > 0))
{
switch (k_name) {
case "Left": game.request_move (- 1, y_arrow, /* keyboard */ true); break;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]