[gtk/wip/ebassi/shortcut: 64/85] gtk-demo: Port the sliding puzzle demo to shortcuts
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/ebassi/shortcut: 64/85] gtk-demo: Port the sliding puzzle demo to shortcuts
- Date: Fri, 31 Jan 2020 16:05:13 +0000 (UTC)
commit bd088ecca82d17693453eb43d18368f908934852
Author: Benjamin Otte <otte redhat com>
Date: Sat Aug 18 20:01:27 2018 +0200
gtk-demo: Port the sliding puzzle demo to shortcuts
demos/gtk-demo/sliding_puzzle.c | 79 +++++++++++++++++++----------------------
1 file changed, 36 insertions(+), 43 deletions(-)
---
diff --git a/demos/gtk-demo/sliding_puzzle.c b/demos/gtk-demo/sliding_puzzle.c
index 9486004605..5225f8fe50 100644
--- a/demos/gtk-demo/sliding_puzzle.c
+++ b/demos/gtk-demo/sliding_puzzle.c
@@ -160,47 +160,13 @@ check_solved (GtkWidget *grid)
}
static gboolean
-puzzle_key_pressed (GtkEventControllerKey *controller,
- guint keyval,
- guint keycode,
- GdkModifierType state,
- GtkWidget *grid)
+puzzle_key_pressed (GtkWidget *grid,
+ GVariant *args,
+ gpointer unused)
{
int dx, dy;
- dx = 0;
- dy = 0;
-
- switch (keyval)
- {
- case GDK_KEY_KP_Left:
- case GDK_KEY_Left:
- /* left */
- dx = -1;
- break;
-
- case GDK_KEY_KP_Up:
- case GDK_KEY_Up:
- /* up */
- dy = -1;
- break;
-
- case GDK_KEY_KP_Right:
- case GDK_KEY_Right:
- /* right */
- dx = 1;
- break;
-
- case GDK_KEY_KP_Down:
- case GDK_KEY_Down:
- /* down */
- dy = 1;
- break;
-
- default:
- /* We return FALSE here because we didn't handle the key that was pressed */
- return FALSE;
- }
+ g_variant_get (args, "(ii)", &dx, &dy);
if (!move_puzzle (grid, dx, dy))
{
@@ -276,6 +242,24 @@ puzzle_button_pressed (GtkGestureClick *gesture,
}
}
+static void
+add_move_binding (GtkShortcutController *controller,
+ guint keyval,
+ guint kp_keyval,
+ int dx,
+ int dy)
+{
+ GtkShortcut *shortcut;
+
+ shortcut = gtk_shortcut_new_with_arguments (
+ gtk_alternative_trigger_new (gtk_keyval_trigger_new (keyval, 0),
+ gtk_keyval_trigger_new (kp_keyval, 0)),
+ gtk_callback_action_new (puzzle_key_pressed, NULL, NULL),
+ "(ii)", dx, dy);
+ gtk_shortcut_controller_add_shortcut (controller, shortcut);
+ g_object_unref (shortcut);
+}
+
static void
start_puzzle (GdkPaintable *puzzle)
{
@@ -298,12 +282,21 @@ start_puzzle (GdkPaintable *puzzle)
aspect_ratio = 1.0;
gtk_aspect_frame_set (GTK_ASPECT_FRAME (frame), 0.5, 0.5, aspect_ratio, FALSE);
- /* Add a key event controller so people can use the arrow
+ /* Add shortcuts so people can use the arrow
* keys to move the puzzle */
- controller = gtk_event_controller_key_new ();
- g_signal_connect (controller, "key-pressed",
- G_CALLBACK (puzzle_key_pressed),
- grid);
+ controller = gtk_shortcut_controller_new ();
+ add_move_binding (GTK_SHORTCUT_CONTROLLER (controller),
+ GDK_KEY_Left, GDK_KEY_KP_Left,
+ -1, 0);
+ add_move_binding (GTK_SHORTCUT_CONTROLLER (controller),
+ GDK_KEY_Right, GDK_KEY_KP_Right,
+ 1, 0);
+ add_move_binding (GTK_SHORTCUT_CONTROLLER (controller),
+ GDK_KEY_Up, GDK_KEY_KP_Up,
+ 0, -1);
+ add_move_binding (GTK_SHORTCUT_CONTROLLER (controller),
+ GDK_KEY_Down, GDK_KEY_KP_Down,
+ 0, 1);
gtk_widget_add_controller (GTK_WIDGET (grid), controller);
controller = GTK_EVENT_CONTROLLER (gtk_gesture_click_new ());
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]