[gnome-software/1375-screenshots-next-prev-buttons-aren-t-circular: 17/17] gs-screenshot-carousel: Make prev/next buttons circular
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software/1375-screenshots-next-prev-buttons-aren-t-circular: 17/17] gs-screenshot-carousel: Make prev/next buttons circular
- Date: Wed, 8 Sep 2021 07:35:52 +0000 (UTC)
commit ad6e01f3f2405964b2eb93f066553341953c622e
Author: Milan Crha <mcrha redhat com>
Date: Tue Sep 7 15:55:56 2021 +0200
gs-screenshot-carousel: Make prev/next buttons circular
Tweak the .ui file to have the two buttons circular and look
similar as those in the featured carousel.
Closes https://gitlab.gnome.org/GNOME/gnome-software/-/issues/1375
src/gs-screenshot-carousel.c | 31 +++++++++++++++++++++++++++++++
src/gs-screenshot-carousel.ui | 20 ++++++++++++++------
2 files changed, 45 insertions(+), 6 deletions(-)
---
diff --git a/src/gs-screenshot-carousel.c b/src/gs-screenshot-carousel.c
index f6b0da0df..a06037e2d 100644
--- a/src/gs-screenshot-carousel.c
+++ b/src/gs-screenshot-carousel.c
@@ -46,8 +46,10 @@ struct _GsScreenshotCarousel
gboolean has_screenshots;
GtkWidget *button_next;
+ GtkWidget *button_next_image;
GtkWidget *button_next_revealer;
GtkWidget *button_previous;
+ GtkWidget *button_previous_image;
GtkWidget *button_previous_revealer;
GtkWidget *carousel;
GtkWidget *carousel_indicator;
@@ -233,6 +235,28 @@ gs_screenshot_carousel_button_next_clicked_cb (GsScreenshotCarousel *self)
HDY_NAVIGATION_DIRECTION_FORWARD);
}
+static void
+gs_screenshot_carousel_navigate_button_direction_changed_cb (GtkWidget *widget,
+ GtkTextDirection previous_direction,
+ gpointer user_data)
+{
+ const gchar *ltr_icon_name, *rtl_icon_name, *icon_name;
+
+ g_assert (g_strcmp0 (gtk_widget_get_name (widget), "previous") == 0 ||
+ g_strcmp0 (gtk_widget_get_name (widget), "next") == 0);
+
+ if (g_strcmp0 (gtk_widget_get_name (widget), "previous") == 0) {
+ ltr_icon_name = "carousel-arrow-previous-symbolic";
+ rtl_icon_name = "carousel-arrow-next-symbolic";
+ } else {
+ ltr_icon_name = "carousel-arrow-next-symbolic";
+ rtl_icon_name = "carousel-arrow-previous-symbolic";
+ }
+
+ icon_name = (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) ? rtl_icon_name : ltr_icon_name;
+ gtk_image_set_from_icon_name (GTK_IMAGE (widget), icon_name, GTK_ICON_SIZE_MENU);
+}
+
static void
gs_screenshot_carousel_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
{
@@ -299,8 +323,10 @@ gs_screenshot_carousel_class_init (GsScreenshotCarouselClass *klass)
gtk_widget_class_set_template_from_resource (widget_class,
"/org/gnome/Software/gs-screenshot-carousel.ui");
gtk_widget_class_bind_template_child (widget_class, GsScreenshotCarousel, button_next);
+ gtk_widget_class_bind_template_child (widget_class, GsScreenshotCarousel, button_next_image);
gtk_widget_class_bind_template_child (widget_class, GsScreenshotCarousel, button_next_revealer);
gtk_widget_class_bind_template_child (widget_class, GsScreenshotCarousel, button_previous);
+ gtk_widget_class_bind_template_child (widget_class, GsScreenshotCarousel, button_previous_image);
gtk_widget_class_bind_template_child (widget_class, GsScreenshotCarousel, button_previous_revealer);
gtk_widget_class_bind_template_child (widget_class, GsScreenshotCarousel, carousel);
gtk_widget_class_bind_template_child (widget_class, GsScreenshotCarousel, carousel_indicator);
@@ -309,6 +335,7 @@ gs_screenshot_carousel_class_init (GsScreenshotCarouselClass *klass)
gtk_widget_class_bind_template_callback (widget_class, gs_screenshot_carousel_notify_position_cb);
gtk_widget_class_bind_template_callback (widget_class,
gs_screenshot_carousel_button_previous_clicked_cb);
gtk_widget_class_bind_template_callback (widget_class, gs_screenshot_carousel_button_next_clicked_cb);
+ gtk_widget_class_bind_template_callback (widget_class,
gs_screenshot_carousel_navigate_button_direction_changed_cb);
gtk_widget_class_set_css_name (widget_class, "screenshot-carousel");
}
@@ -318,6 +345,10 @@ gs_screenshot_carousel_init (GsScreenshotCarousel *self)
{
gtk_widget_init_template (GTK_WIDGET (self));
+ /* Ensure the arrow direction matches the text direction */
+ gs_screenshot_carousel_navigate_button_direction_changed_cb (GTK_WIDGET (self->button_next_image),
GTK_TEXT_DIR_NONE, self);
+ gs_screenshot_carousel_navigate_button_direction_changed_cb (GTK_WIDGET
(self->button_previous_image), GTK_TEXT_DIR_NONE, self);
+
#if HDY_CHECK_VERSION(1, 3, 0)
/* Disable scrolling through the carousel, as it’s typically used
* in application pages which are themselves scrollable. */
diff --git a/src/gs-screenshot-carousel.ui b/src/gs-screenshot-carousel.ui
index d887b1128..2c9ec6f1d 100644
--- a/src/gs-screenshot-carousel.ui
+++ b/src/gs-screenshot-carousel.ui
@@ -31,6 +31,9 @@
<child>
<object class="GtkButton" id="button_previous">
<property name="visible">True</property>
+ <property name="width-request">64</property>
+ <property name="height-request">64</property>
+ <property name="margin">9</property>
<signal name="clicked" handler="gs_screenshot_carousel_button_previous_clicked_cb"
swapped="yes"/>
<child internal-child="accessible">
<object class="AtkObject">
@@ -40,16 +43,17 @@
</child>
<style>
<class name="circular"/>
- <class name="image-button"/>
<class name="osd"/>
</style>
<child>
- <object class="GtkImage">
+ <object class="GtkImage" id="button_previous_image">
<property name="halign">center</property>
- <property name="icon-name">go-previous-symbolic</property>
+ <property name="icon-name">carousel-arrow-previous-symbolic</property>
<property name="icon-size">1</property>
<property name="valign">center</property>
<property name="visible">True</property>
+ <property name="name">previous</property>
+ <signal name="direction-changed"
handler="gs_screenshot_carousel_navigate_button_direction_changed_cb"/>
</object>
</child>
</object>
@@ -68,6 +72,9 @@
<child>
<object class="GtkButton" id="button_next">
<property name="visible">True</property>
+ <property name="width-request">64</property>
+ <property name="height-request">64</property>
+ <property name="margin">9</property>
<signal name="clicked" handler="gs_screenshot_carousel_button_next_clicked_cb"
swapped="yes"/>
<child internal-child="accessible">
<object class="AtkObject">
@@ -77,16 +84,17 @@
</child>
<style>
<class name="circular"/>
- <class name="image-button"/>
<class name="osd"/>
</style>
<child>
- <object class="GtkImage">
+ <object class="GtkImage" id="button_next_image">
<property name="halign">center</property>
- <property name="icon-name">go-next-symbolic</property>
+ <property name="icon-name">carousel-arrow-next-symbolic</property>
<property name="icon-size">1</property>
<property name="valign">center</property>
<property name="visible">True</property>
+ <property name="name">next</property>
+ <signal name="direction-changed"
handler="gs_screenshot_carousel_navigate_button_direction_changed_cb"/>
</object>
</child>
</object>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]