diff --git a/0034-widget-utils-Fix-a-crash-in-adw_decoration_layout_pr.patch b/0034-widget-utils-Fix-a-crash-in-adw_decoration_layout_pr.patch new file mode 100644 index 0000000..1c64db7 --- /dev/null +++ b/0034-widget-utils-Fix-a-crash-in-adw_decoration_layout_pr.patch @@ -0,0 +1,37 @@ +From 0d3e6ca8a24b0ac43a939ebf1f9953ca2ad089ea Mon Sep 17 00:00:00 2001 +From: Alice Mikhaylenko +Date: Sat, 24 May 2025 04:30:58 +0400 +Subject: [PATCH] widget-utils: Fix a crash in + adw_decoration_layout_prefers_start() + +Fixes https://gitlab.gnome.org/GNOME/libadwaita/-/issues/1034 + + +(cherry picked from commit 1c6fabb677c934fd0289b9fb8687472c47a1ab61) + +Co-authored-by: Alice Mikhaylenko + +(cherry picked from commit 917dda52ce8895c04faf0185c2c368411b2174ff) + +Co-authored-by: Alice Mikhaylenko +--- + src/adw-widget-utils.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/adw-widget-utils.c b/src/adw-widget-utils.c +index 3d76d786..5ca9dc9f 100644 +--- a/src/adw-widget-utils.c ++++ b/src/adw-widget-utils.c +@@ -617,6 +617,9 @@ adw_decoration_layout_prefers_start (const char *layout) + char **sides; + int i; + ++ if (!layout || !strchr (layout, ':')) ++ return FALSE; ++ + sides = g_strsplit (layout, ":", 2); + + for (i = 0; i < 2; i++) { +-- +2.47.1 + diff --git a/0035-expander-row-Implement-grab_focus-properly.patch b/0035-expander-row-Implement-grab_focus-properly.patch new file mode 100644 index 0000000..f2153d7 --- /dev/null +++ b/0035-expander-row-Implement-grab_focus-properly.patch @@ -0,0 +1,51 @@ +From 952a198623f896c803750daa1272fcb034714ee7 Mon Sep 17 00:00:00 2001 +From: Alice Mikhaylenko +Date: Sat, 24 May 2025 04:31:43 +0400 +Subject: [PATCH] expander-row: Implement grab_focus() properly + +Fixes https://gitlab.gnome.org/GNOME/libadwaita/-/issues/1037 + + +(cherry picked from commit 9715df7acf4fe43b7a244435fac93e7647e6b686) + +Co-authored-by: Alice Mikhaylenko + +(cherry picked from commit 9d474aa3430561f331888400f40e987844a0b14c) + +Co-authored-by: Alice Mikhaylenko +--- + src/adw-expander-row.c | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git a/src/adw-expander-row.c b/src/adw-expander-row.c +index 0307e3b1..fc5011e1 100644 +--- a/src/adw-expander-row.c ++++ b/src/adw-expander-row.c +@@ -114,6 +114,15 @@ keynav_failed_cb (AdwExpanderRow *self, + GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD); + } + ++static gboolean ++adw_expander_row_grab_focus (GtkWidget *widget) ++{ ++ AdwExpanderRow *self = ADW_EXPANDER_ROW (widget); ++ AdwExpanderRowPrivate *priv = adw_expander_row_get_instance_private (self); ++ ++ return gtk_widget_grab_focus (GTK_WIDGET (priv->action_row)); ++} ++ + static void + adw_expander_row_get_property (GObject *object, + guint prop_id, +@@ -194,7 +203,7 @@ adw_expander_row_class_init (AdwExpanderRowClass *klass) + object_class->set_property = adw_expander_row_set_property; + + widget_class->focus = adw_widget_focus_child; +- widget_class->grab_focus = adw_widget_grab_focus_child; ++ widget_class->grab_focus = adw_expander_row_grab_focus; + + /** + * AdwExpanderRow:subtitle: +-- +2.47.1 + diff --git a/0036-carousel-Unset-scroll-timeout-ID.patch b/0036-carousel-Unset-scroll-timeout-ID.patch new file mode 100644 index 0000000..a8176dc --- /dev/null +++ b/0036-carousel-Unset-scroll-timeout-ID.patch @@ -0,0 +1,70 @@ +From 29d5df78336a6c721596581facf5f2d0bec05c18 Mon Sep 17 00:00:00 2001 +From: Alice Mikhaylenko +Date: Mon, 26 May 2025 23:49:30 +0400 +Subject: [PATCH] carousel: Unset scroll timeout ID + +Otherwise we try to to remove it when it's already gone. + +While we're there, use the ID as the flag. + + +(cherry picked from commit ba4e47e14fb074e09bfeac648f122f46fd797c4f) + +Co-authored-by: Alice Mikhaylenko + +(cherry picked from commit 693dd15ae0b7315b33d48ced8bf012cbac102d14) + +Co-authored-by: Alice Mikhaylenko +--- + src/adw-carousel.c | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +diff --git a/src/adw-carousel.c b/src/adw-carousel.c +index 1010d464..a026f3c2 100644 +--- a/src/adw-carousel.c ++++ b/src/adw-carousel.c +@@ -77,7 +77,6 @@ struct _AdwCarousel + double position_shift; + + guint scroll_timeout_id; +- gboolean can_scroll; + gboolean is_being_allocated; + }; + +@@ -468,7 +467,7 @@ update_orientation (AdwCarousel *self) + static void + scroll_timeout_cb (AdwCarousel *self) + { +- self->can_scroll = TRUE; ++ self->scroll_timeout_id = 0; + } + + static gboolean +@@ -487,7 +486,7 @@ scroll_cb (AdwCarousel *self, + if (!self->allow_scroll_wheel) + return GDK_EVENT_PROPAGATE; + +- if (!self->can_scroll) ++ if (self->scroll_timeout_id > 0) + return GDK_EVENT_PROPAGATE; + + if (!adw_carousel_get_interactive (self)) +@@ -532,7 +531,6 @@ scroll_cb (AdwCarousel *self, + + scroll_to (self, adw_carousel_get_nth_page (self, index), 0); + +- self->can_scroll = FALSE; + self->scroll_timeout_id = + g_timeout_add_once (SCROLL_TIMEOUT_DURATION, + (GSourceOnceFunc) scroll_timeout_cb, +@@ -1047,7 +1045,6 @@ adw_carousel_init (AdwCarousel *self) + + self->orientation = GTK_ORIENTATION_HORIZONTAL; + self->reveal_duration = 0; +- self->can_scroll = TRUE; + + self->tracker = adw_swipe_tracker_new (ADW_SWIPEABLE (self)); + adw_swipe_tracker_set_allow_mouse_drag (self->tracker, TRUE); +-- +2.47.1 + diff --git a/0037-avatar-Set-pixel-size-for-the-custom-image-too.patch b/0037-avatar-Set-pixel-size-for-the-custom-image-too.patch new file mode 100644 index 0000000..ba87c49 --- /dev/null +++ b/0037-avatar-Set-pixel-size-for-the-custom-image-too.patch @@ -0,0 +1,34 @@ +From 686642f20508a7cc264c23d78ea51f6c3b897a8d Mon Sep 17 00:00:00 2001 +From: Alice Mikhaylenko +Date: Sat, 28 Jun 2025 22:45:38 +0400 +Subject: [PATCH] avatar: Set pixel-size for the custom image too + +Fixes a breakage with the recent GtkImage changes. + + +(cherry picked from commit ab837323e30955598986e8de0e1f3bd2ca856d35) + +Co-authored-by: Alice Mikhaylenko + +(cherry picked from commit 53b7b37913fca0e37e3fed1817266c8f1db0bf02) + +Co-authored-by: Alice Mikhaylenko +--- + src/adw-avatar.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/adw-avatar.c b/src/adw-avatar.c +index 116b8bdd..a80af405 100644 +--- a/src/adw-avatar.c ++++ b/src/adw-avatar.c +@@ -723,6 +723,7 @@ adw_avatar_set_size (AdwAvatar *self, + + gtk_widget_set_size_request (self->gizmo, size, size); + gtk_image_set_pixel_size (self->icon, size / 2); ++ gtk_image_set_pixel_size (self->custom_image, size); + + if (size < 25) + gtk_widget_add_css_class (self->gizmo, "contrasted"); +-- +2.47.1 + diff --git a/0038-toast-overlay-fix-assertion-failure-when-showing-toa.patch b/0038-toast-overlay-fix-assertion-failure-when-showing-toa.patch new file mode 100644 index 0000000..0e286d6 --- /dev/null +++ b/0038-toast-overlay-fix-assertion-failure-when-showing-toa.patch @@ -0,0 +1,50 @@ +From ed2d253ee1477ccf72feb9204f980ce79ef80546 Mon Sep 17 00:00:00 2001 +From: Alice Mikhaylenko +Date: Sat, 28 Jun 2025 22:45:54 +0400 +Subject: [PATCH] toast-overlay: fix assertion failure when showing toast while + hiding it + +This is a weird scenario, but if we show a toast while its hide +animation is still playing, then we crash. + +I've failed to reproduce this scenario and I've also failed to quickly +write an API test, though it really ought to be possible, so this is a +speculative fix. But it looks right. + +Probably fixes #997 + + +(cherry picked from commit 6db9f4d61c30b4465502e591bdbadaaee8e32a73) + +Co-authored-by: Michael Catanzaro + +(cherry picked from commit 71995bd59b0bba0dbf26e7d02fe54b67002394e0) + +Co-authored-by: Alice Mikhaylenko +--- + src/adw-toast-overlay.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/src/adw-toast-overlay.c b/src/adw-toast-overlay.c +index cea43c79..46567b30 100644 +--- a/src/adw-toast-overlay.c ++++ b/src/adw-toast-overlay.c +@@ -244,7 +244,14 @@ show_toast (AdwToastOverlay *self, + const char *title, *button_label; + char *announcement; + +- g_assert (!info->widget); ++ if (info->widget) { ++ /* The toast's hide animation is currently playing. Complete it immediately. ++ * hide_done_cb() will clear the widget. ++ */ ++ g_assert (info->hide_animation); ++ adw_animation_skip (info->hide_animation); ++ g_assert (!info->widget); ++ } + + self->current_toast = info; + +-- +2.47.1 + diff --git a/0039-test-combo-row-Fix-a-leak.patch b/0039-test-combo-row-Fix-a-leak.patch new file mode 100644 index 0000000..eee6a65 --- /dev/null +++ b/0039-test-combo-row-Fix-a-leak.patch @@ -0,0 +1,29 @@ +From 45ab0dcbcae0b354639b2a955baf8621fcdef42b Mon Sep 17 00:00:00 2001 +From: Alice Mikhaylenko +Date: Sat, 28 Jun 2025 21:57:44 +0400 +Subject: [PATCH] test-combo-row: Fix a leak + +--- + tests/test-combo-row.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/tests/test-combo-row.c b/tests/test-combo-row.c +index 494ff67a..af20d4e6 100644 +--- a/tests/test-combo-row.c ++++ b/tests/test-combo-row.c +@@ -39,10 +39,12 @@ test_adw_combo_row_set_for_enum (void) + item = g_list_model_get_item (model, 0); + g_assert_true (ADW_IS_ENUM_LIST_ITEM (item)); + g_assert_cmpstr (adw_enum_list_item_get_nick (item), ==, "horizontal"); ++ g_object_unref (item); + + item = g_list_model_get_item (model, 1); + g_assert_true (ADW_IS_ENUM_LIST_ITEM (item)); + g_assert_cmpstr (adw_enum_list_item_get_nick (item), ==, "vertical"); ++ g_object_unref (item); + + g_assert_finalize_object (row); + } +-- +2.47.1 + diff --git a/0040-about-dialog-window-Fix-a-leak.patch b/0040-about-dialog-window-Fix-a-leak.patch new file mode 100644 index 0000000..4431a5e --- /dev/null +++ b/0040-about-dialog-window-Fix-a-leak.patch @@ -0,0 +1,37 @@ +From dd47fef345e03208ab28ae0a93da1978291632e8 Mon Sep 17 00:00:00 2001 +From: Alice Mikhaylenko +Date: Sat, 28 Jun 2025 21:58:48 +0400 +Subject: [PATCH] about-dialog/window: Fix a leak + +--- + src/adw-about-dialog.c | 1 + + src/adw-about-window.c | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/src/adw-about-dialog.c b/src/adw-about-dialog.c +index bf31277c..33fd89ca 100644 +--- a/src/adw-about-dialog.c ++++ b/src/adw-about-dialog.c +@@ -358,6 +358,7 @@ static void + free_legal_section (LegalSection *section) + { + g_free (section->title); ++ g_free (section->copyright); + g_free (section->license); + g_free (section); + } +diff --git a/src/adw-about-window.c b/src/adw-about-window.c +index 9d0a5058..f263b23d 100644 +--- a/src/adw-about-window.c ++++ b/src/adw-about-window.c +@@ -358,6 +358,7 @@ static void + free_legal_section (LegalSection *section) + { + g_free (section->title); ++ g_free (section->copyright); + g_free (section->license); + g_free (section); + } +-- +2.47.1 + diff --git a/0041-accent-color-Move-yellow-green-boundary-a-bit.patch b/0041-accent-color-Move-yellow-green-boundary-a-bit.patch new file mode 100644 index 0000000..97c3303 --- /dev/null +++ b/0041-accent-color-Move-yellow-green-boundary-a-bit.patch @@ -0,0 +1,35 @@ +From ada7cff31b8573766eb41540bd6d623bd20e6fd4 Mon Sep 17 00:00:00 2001 +From: Alice Mikhaylenko +Date: Sat, 24 May 2025 04:30:37 +0400 +Subject: [PATCH] accent-color: Move yellow/green boundary a bit + +Otherwise we risk colors like #78a50e being yellow instead of green. + + +(cherry picked from commit 54b1ecd732f71c14d5c11dc0ade39a661995fb02) + +Co-authored-by: Alice Mikhaylenko + +(cherry picked from commit baa735b6cf56d3ae7926dbe0022c433862b91239) + +Co-authored-by: Alice Mikhaylenko +--- + src/adw-accent-color.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/adw-accent-color.c b/src/adw-accent-color.c +index f49b63b1..b6bdc5b8 100644 +--- a/src/adw-accent-color.c ++++ b/src/adw-accent-color.c +@@ -183,7 +183,7 @@ adw_accent_color_nearest_from_rgba (GdkRGBA *original_color) + if (h > 175) + return ADW_ACCENT_COLOR_TEAL; + +- if (h > 130) ++ if (h > 115) + return ADW_ACCENT_COLOR_GREEN; + + if (h > 75.5) +-- +2.47.1 + diff --git a/0042-Release-1.6.8.patch b/0042-Release-1.6.8.patch new file mode 100644 index 0000000..04f930e --- /dev/null +++ b/0042-Release-1.6.8.patch @@ -0,0 +1,32 @@ +From a004dff479d8f21a0654596029b0282ea7d2b0e0 Mon Sep 17 00:00:00 2001 +From: Alice Mikhaylenko +Date: Sun, 29 Jun 2025 00:17:54 +0400 +Subject: [PATCH] Release 1.6.8 + +--- + meson.build | 4 ++-- + 2 files changed, 17 insertions(+), 2 deletions(-) + +diff --git a/meson.build b/meson.build +index ef5dc3e4..8a733039 100644 +--- a/meson.build ++++ b/meson.build +@@ -1,5 +1,5 @@ + project('libadwaita', 'c', +- version: '1.6.6', ++ version: '1.6.8', + license: 'LGPL-2.1-or-later', + meson_version: '>= 0.59.0', + default_options: [ 'warning_level=1', 'buildtype=debugoptimized', 'c_std=gnu11' ], +@@ -29,7 +29,7 @@ package_api_name = '@0@-@1@'.format(meson.project_name(), apiversion) + # to 0. When bumping the second version, set the third one to zero. + # + # A lot easier than libtool, right? +-libversion = '0.6.6' ++libversion = '0.6.8' + # The so major version of the library + soversion = 0 + +-- +2.47.1 + diff --git a/libadwaita.spec b/libadwaita.spec index 2152284..d1794df 100644 --- a/libadwaita.spec +++ b/libadwaita.spec @@ -5,7 +5,7 @@ %global tarball_version 1.6.2 Name: libadwaita -Version: 1.6.6 +Version: 1.6.8 Release: %autorelease Summary: Building blocks for modern GNOME applications @@ -49,6 +49,15 @@ Patch: 0030-toast-overlay-The-role-is-GROUP-not-TAB_GROUP.patch Patch: 0031-docs-clarify-translator-credits-for-multiple-contrib.patch Patch: 0032-Release-1.6.6.patch Patch: 0033-Update-Portuguese-translation.patch +Patch: 0034-widget-utils-Fix-a-crash-in-adw_decoration_layout_pr.patch +Patch: 0035-expander-row-Implement-grab_focus-properly.patch +Patch: 0036-carousel-Unset-scroll-timeout-ID.patch +Patch: 0037-avatar-Set-pixel-size-for-the-custom-image-too.patch +Patch: 0038-toast-overlay-fix-assertion-failure-when-showing-toa.patch +Patch: 0039-test-combo-row-Fix-a-leak.patch +Patch: 0040-about-dialog-window-Fix-a-leak.patch +Patch: 0041-accent-color-Move-yellow-green-boundary-a-bit.patch +Patch: 0042-Release-1.6.8.patch BuildRequires: desktop-file-utils BuildRequires: gcc