[recipes] Improve key handling in cooking mode



commit c8c7d8f14781bcb0d351a33ccb3451b996345900
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Feb 13 21:53:45 2017 -0500

    Improve key handling in cooking mode
    
    With these changes, space, left and right work as expected.
    We also handle enter to activate the explicit done button at
    the end.

 src/gr-cooking-page.c |   11 +++++++++++
 src/gr-window.c       |   17 +++++++++++++++++
 src/gr-window.ui      |    1 +
 3 files changed, 29 insertions(+), 0 deletions(-)
---
diff --git a/src/gr-cooking-page.c b/src/gr-cooking-page.c
index dc0d08d..0f48b1f 100644
--- a/src/gr-cooking-page.c
+++ b/src/gr-cooking-page.c
@@ -317,6 +317,17 @@ gr_cooking_page_handle_event (GrCookingPage *page,
 
                         return GDK_EVENT_STOP;
                 }
+                else if (e->keyval == GDK_KEY_Return) {
+                        if (gtk_widget_get_visible (page->done_button))
+                               stop_cooking (page);
+
+                        return GDK_EVENT_STOP;
+                }
+                else if (e->keyval == GDK_KEY_space) {
+                        next_step (page);
+
+                        return GDK_EVENT_STOP;
+                }
                 else if (e->keyval == GDK_KEY_Left) {
                         prev_step (page);
 
diff --git a/src/gr-window.c b/src/gr-window.c
index ad40f24..05d3e94 100644
--- a/src/gr-window.c
+++ b/src/gr-window.c
@@ -350,6 +350,22 @@ window_keypress_handler (GtkWidget *widget,
 }
 
 static gboolean
+window_keypress_handler_before (GtkWidget *widget,
+                                GdkEvent  *event,
+                                gpointer   data)
+{
+        GrWindow *window = GR_WINDOW (widget);
+        const char *visible;
+
+        visible = gtk_stack_get_visible_child_name (GTK_STACK (window->main_stack));
+
+        if (strcmp (visible, "cooking") == 0)
+                return gr_cooking_page_handle_event (GR_COOKING_PAGE (window->cooking_page), event);
+
+        return GDK_EVENT_PROPAGATE;
+}
+
+static gboolean
 window_buttonpress_handler (GtkWidget *widget,
                             GdkEvent  *event,
                             gpointer   data)
@@ -570,6 +586,7 @@ gr_window_class_init (GrWindowClass *klass)
         gtk_widget_class_bind_template_callback (widget_class, stop_search);
         gtk_widget_class_bind_template_callback (widget_class, search_mode_changed);
         gtk_widget_class_bind_template_callback (widget_class, window_keypress_handler);
+        gtk_widget_class_bind_template_callback (widget_class, window_keypress_handler_before);
         gtk_widget_class_bind_template_callback (widget_class, window_buttonpress_handler);
         gtk_widget_class_bind_template_callback (widget_class, window_mapped_handler);
         gtk_widget_class_bind_template_callback (widget_class, do_undo);
diff --git a/src/gr-window.ui b/src/gr-window.ui
index 6314033..5d5da7c 100644
--- a/src/gr-window.ui
+++ b/src/gr-window.ui
@@ -3,6 +3,7 @@
   <!-- interface-requires gtk+ 3.8 -->
   <template class="GrWindow" parent="GtkApplicationWindow">
     <property name="resizable">1</property>
+    <signal name="key-press-event" handler="window_keypress_handler_before"/>
     <signal name="key-press-event" handler="window_keypress_handler" after="yes"/>
     <signal name="button-press-event" handler="window_buttonpress_handler" after="yes"/>
     <signal name="map" handler="window_mapped_handler" after="yes"/>


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