[recipes] edit page: Bring back row reordering by keynav



commit 51bfe549919758f731c3bd65546a61c0e3a7c2a5
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue May 9 15:51:08 2017 -0400

    edit page: Bring back row reordering by keynav
    
    When the drag handle has focus, listen to Up/Down
    arrows to move the row around.

 src/gr-ingredients-viewer-row.c  |   29 +++++++++++++++++++++++++++++
 src/gr-ingredients-viewer-row.ui |    1 +
 2 files changed, 30 insertions(+), 0 deletions(-)
---
diff --git a/src/gr-ingredients-viewer-row.c b/src/gr-ingredients-viewer-row.c
index 89b9b42..60ad6d4 100644
--- a/src/gr-ingredients-viewer-row.c
+++ b/src/gr-ingredients-viewer-row.c
@@ -368,6 +368,34 @@ entry_key_press (GrIngredientsViewerRow *row,
         return GDK_EVENT_PROPAGATE;
 }
 
+static gboolean
+drag_key_press (GtkButton              *button,
+                GdkEventKey            *event,
+                GrIngredientsViewerRow *row)
+{
+        GtkWidget *list;
+        int index;
+
+        list = gtk_widget_get_parent (GTK_WIDGET (row));
+        index = gtk_list_box_row_get_index (GTK_LIST_BOX_ROW (row));
+
+        if (event->keyval == GDK_KEY_Up)
+                index -= 1;
+        else if (event->keyval == GDK_KEY_Down)
+                index += 1;
+        else
+                return GDK_EVENT_PROPAGATE;
+
+        g_object_ref (row);
+        gtk_container_remove (GTK_CONTAINER (list), GTK_WIDGET (row));
+        gtk_list_box_insert (GTK_LIST_BOX (list), GTK_WIDGET (row), index);
+        g_object_unref (row);
+
+        gtk_widget_grab_focus (GTK_WIDGET (button));
+
+        return GDK_EVENT_STOP;
+}
+
 static void
 gr_ingredients_viewer_row_class_init (GrIngredientsViewerRowClass *klass)
 {
@@ -452,6 +480,7 @@ gr_ingredients_viewer_row_class_init (GrIngredientsViewerRowClass *klass)
         gtk_widget_class_bind_template_callback (widget_class, edit_ingredient);
         gtk_widget_class_bind_template_callback (widget_class, save_row);
         gtk_widget_class_bind_template_callback (widget_class, entry_key_press);
+        gtk_widget_class_bind_template_callback (widget_class, drag_key_press);
 }
 
 static GtkTargetEntry entries[] = {
diff --git a/src/gr-ingredients-viewer-row.ui b/src/gr-ingredients-viewer-row.ui
index 7ee277a..85b0ecf 100644
--- a/src/gr-ingredients-viewer-row.ui
+++ b/src/gr-ingredients-viewer-row.ui
@@ -133,6 +133,7 @@
                     <property name="relief">none</property>
                     <signal name="clicked" handler="drag_handle_clicked" swapped="yes"/>
                     <signal name="focus-in-event" handler="save_row" swapped="yes" after="yes"/>
+                    <signal name="key-press-event" handler="drag_key_press"/>
                     <style>
                       <class name="image-button"/>
                       <class name="circular"/>


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