From f5ea0ad11840932eb2926459a5158132593fefec Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Tue, 7 Jun 2022 18:42:39 +0200 Subject: [PATCH 1/2] gs-screenshot-image: Add a "clicked" signal To be used in the following commit. --- src/gs-screenshot-image.c | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/gs-screenshot-image.c b/src/gs-screenshot-image.c index 736f86ac5..946ab0984 100644 --- a/src/gs-screenshot-image.c +++ b/src/gs-screenshot-image.c @@ -45,6 +45,25 @@ struct _GsScreenshotImage G_DEFINE_TYPE (GsScreenshotImage, gs_screenshot_image, GTK_TYPE_WIDGET) +enum { + SIGNAL_CLICKED, + SIGNAL_LAST +}; + +static guint signals [SIGNAL_LAST] = { 0 }; + +static void +gs_screenshot_image_clicked_cb (GtkGestureClick *gesture, + gint n_press, + gdouble x, + gdouble y, + gpointer user_data) +{ + GsScreenshotImage *self = user_data; + if (n_press == 1) + g_signal_emit (self, signals[SIGNAL_CLICKED], 0); +} + AsScreenshot * gs_screenshot_image_get_screenshot (GsScreenshotImage *ssimg) { @@ -769,10 +788,17 @@ gs_screenshot_image_dispose (GObject *object) static void gs_screenshot_image_init (GsScreenshotImage *ssimg) { + GtkGesture *gesture; + ssimg->settings = g_settings_new ("org.gnome.software"); ssimg->showing_image = FALSE; gtk_widget_init_template (GTK_WIDGET (ssimg)); + + gesture = gtk_gesture_click_new (); + g_signal_connect_object (gesture, "released", + G_CALLBACK (gs_screenshot_image_clicked_cb), ssimg, 0); + gtk_widget_add_controller (GTK_WIDGET (ssimg), GTK_EVENT_CONTROLLER (gesture)); } static void @@ -812,6 +838,20 @@ gs_screenshot_image_class_init (GsScreenshotImageClass *klass) gtk_widget_class_bind_template_child (widget_class, GsScreenshotImage, image2); gtk_widget_class_bind_template_child (widget_class, GsScreenshotImage, box_error); gtk_widget_class_bind_template_child (widget_class, GsScreenshotImage, label_error); + + /** + * GsScreenshotImage::clicked: + * + * Emitted when the screenshot is clicked. + * + * Since: 43 + */ + signals [SIGNAL_CLICKED] = + g_signal_new ("clicked", + G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); } GtkWidget * -- GitLab From c49fe583e89f7003bf1d7e622b835418b0aa2a22 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Tue, 7 Jun 2022 18:43:30 +0200 Subject: [PATCH 2/2] gs-screenshot-carousel: Scroll to image on click of it Let it scroll to an image also when clicking on it, not only by using the arrows or gestures. Closes https://gitlab.gnome.org/GNOME/gnome-software/-/issues/1790 --- src/gs-screenshot-carousel.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/gs-screenshot-carousel.c b/src/gs-screenshot-carousel.c index 9a59a2a90..828a741cc 100644 --- a/src/gs-screenshot-carousel.c +++ b/src/gs-screenshot-carousel.c @@ -78,6 +78,14 @@ _set_state (GsScreenshotCarousel *self, guint length, gboolean allow_fallback, g } } +static void +gs_screenshot_carousel_img_clicked_cb (GtkWidget *ssimg, + gpointer user_data) +{ + GsScreenshotCarousel *self = user_data; + adw_carousel_scroll_to (ADW_CAROUSEL (self->carousel), ssimg, TRUE); +} + /** * gs_screenshot_carousel_load_screenshots: * @self: a #GsScreenshotCarousel @@ -148,6 +156,9 @@ gs_screenshot_carousel_load_screenshots (GsScreenshotCarousel *self, GsApp *app, continue; } + g_signal_connect_object (ssimg, "clicked", + G_CALLBACK (gs_screenshot_carousel_img_clicked_cb), self, 0); + adw_carousel_append (ADW_CAROUSEL (self->carousel), ssimg); gtk_widget_show (ssimg); gs_screenshot_image_set_description (GS_SCREENSHOT_IMAGE (ssimg), -- GitLab