diff --git a/src/gs-screenshot-carousel.c b/src/gs-screenshot-carousel.c index 9a59a2a902e99aca026a627ced14bd4841f4f4ad..828a741ccd50490fb407d1b872f458f1dbeb276f 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), diff --git a/src/gs-screenshot-image.c b/src/gs-screenshot-image.c index 736f86ac56db91c0efd84d5342e931528f1f53cf..946ab0984a88adc80fd222658ab422488355e8fc 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 *