[recipes] edit page: Don't do fullscreen image view



commit 12a8f856a6db66069b32542b6eb9957f041b8119
Author: Matthias Clasen <mclasen redhat com>
Date:   Fri Jan 27 15:36:46 2017 +0100

    edit page: Don't do fullscreen image view
    
    This is confusing and unnecessary on the edit page.
    To make this possible, switch things around to use a
    signal in the image viewer and handle it from the details
    page.

 src/gr-details-page.c  |   14 ++++++++++++++
 src/gr-details-page.ui |    1 +
 src/gr-image-viewer.c  |   28 ++++++++++++++++++++++++----
 3 files changed, 39 insertions(+), 4 deletions(-)
---
diff --git a/src/gr-details-page.c b/src/gr-details-page.c
index a6fdd73..c7f5fbd 100644
--- a/src/gr-details-page.c
+++ b/src/gr-details-page.c
@@ -681,6 +681,19 @@ activate_link (GtkLabel      *label,
 }
 
 static void
+activate_image (GrDetailsPage *page)
+{
+        GtkWidget *window;
+        g_autoptr(GArray) images = NULL;
+        int idx;
+
+        g_object_get (page->recipe_image, "images", &images, "index", &idx, NULL);
+
+        window = gtk_widget_get_ancestor (GTK_WIDGET (page->recipe_image), GTK_TYPE_APPLICATION_WINDOW);
+        gr_window_show_image (GR_WINDOW (window), images, idx);
+}
+
+static void
 dismiss_error (GrDetailsPage *page)
 {
         gtk_revealer_set_reveal_child (GTK_REVEALER (page->error_revealer), FALSE);
@@ -776,6 +789,7 @@ gr_details_page_class_init (GrDetailsPageClass *klass)
         gtk_widget_class_bind_template_callback (widget_class, shop_it);
         gtk_widget_class_bind_template_callback (widget_class, activate_link);
         gtk_widget_class_bind_template_callback (widget_class, dismiss_error);
+        gtk_widget_class_bind_template_callback (widget_class, activate_image);
 }
 
 GtkWidget *
diff --git a/src/gr-details-page.ui b/src/gr-details-page.ui
index 2d1ede2..07302d3 100644
--- a/src/gr-details-page.ui
+++ b/src/gr-details-page.ui
@@ -174,6 +174,7 @@ followed</property>
                         <child>
                           <object class="GrImageViewer" id="recipe_image">
                             <property name="visible">1</property>
+                            <signal name="activate" handler="activate_image" swapped="yes"/>
                           </object>
                         </child>
                         <child>
diff --git a/src/gr-image-viewer.c b/src/gr-image-viewer.c
index 6708123..9f21337 100644
--- a/src/gr-image-viewer.c
+++ b/src/gr-image-viewer.c
@@ -56,9 +56,11 @@ G_DEFINE_TYPE (GrImageViewer, gr_image_viewer, GTK_TYPE_BOX)
 enum {
         PROP_0,
         PROP_IMAGES,
+        PROP_INDEX,
         N_PROPS
 };
 
+static guint activate_signal;
 
 GrImageViewer *
 gr_image_viewer_new (void)
@@ -264,10 +266,7 @@ button_press (GtkGesture *gesture,
         button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture));
 
         if (button == GDK_BUTTON_PRIMARY) {
-                GtkWidget *window;
-
-                window = gtk_widget_get_ancestor (GTK_WIDGET (viewer), GTK_TYPE_APPLICATION_WINDOW);
-                gr_window_show_image (GR_WINDOW (window), viewer->images, viewer->index);
+                g_signal_emit (viewer, activate_signal, 0);
         }
         else {
                 toggle_preview (viewer);
@@ -367,6 +366,10 @@ gr_image_viewer_get_property (GObject    *object,
                   g_value_set_boxed (value, self->images);
                   break;
 
+          case PROP_INDEX:
+                  g_value_set_int (value, self->index);
+                  break;
+
           default:
                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
           }
@@ -386,6 +389,10 @@ gr_image_viewer_set_property (GObject      *object,
                   gr_image_viewer_set_images (self, (GArray *) g_value_get_boxed (value));
                   break;
 
+          case PROP_INDEX:
+                  gr_image_viewer_show_image (self, g_value_get_int (value));
+                  break;
+
           default:
                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
           }
@@ -407,6 +414,19 @@ gr_image_viewer_class_init (GrImageViewerClass *klass)
                                     G_PARAM_READWRITE);
         g_object_class_install_property (object_class, PROP_IMAGES, pspec);
 
+        pspec = g_param_spec_int ("index", NULL, NULL,
+                                  0, G_MAXINT, 0,
+                                  G_PARAM_READWRITE);
+        g_object_class_install_property (object_class, PROP_INDEX, pspec);
+
+        activate_signal = g_signal_new ("activate",
+                                        G_TYPE_FROM_CLASS (object_class),
+                                        G_SIGNAL_RUN_LAST,
+                                        0,
+                                        NULL, NULL,
+                                        NULL,
+                                        G_TYPE_NONE, 0);
+
         gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Recipes/gr-image-viewer.ui");
         gtk_widget_class_bind_template_child (widget_class, GrImageViewer, image1);
         gtk_widget_class_bind_template_child (widget_class, GrImageViewer, image2);


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