diff --git a/0043-alert-dialog-emit-response-when-cancelled.patch b/0043-alert-dialog-emit-response-when-cancelled.patch new file mode 100644 index 0000000..903ca40 --- /dev/null +++ b/0043-alert-dialog-emit-response-when-cancelled.patch @@ -0,0 +1,73 @@ +From 42e338f7bbae14a108f0444366711ce31afa88c2 Mon Sep 17 00:00:00 2001 +From: Alice Mikhaylenko +Date: Sat, 2 Aug 2025 01:31:27 +0400 +Subject: [PATCH 01/18] alert-dialog: emit ::response when cancelled + +This ensures we got through the same teardown sequence as if the user +had actually interacted with the dialogue, and avoids the dialogue +living in the host longer than expected. + + +(cherry picked from commit e387a1a920e1f3697707dc50d36297125d835b01) + +Co-authored-by: Zander Brown + +(cherry picked from commit d72bfccbcb6189830a3d4b17a62491e8dad6562c) + +Co-authored-by: Alice Mikhaylenko +--- + src/adw-alert-dialog.c | 18 +++++++++++++----- + 1 file changed, 13 insertions(+), 5 deletions(-) + +diff --git a/src/adw-alert-dialog.c b/src/adw-alert-dialog.c +index 198cd00f..24347cb8 100644 +--- a/src/adw-alert-dialog.c ++++ b/src/adw-alert-dialog.c +@@ -264,22 +264,29 @@ find_response (AdwAlertDialog *self, + return g_hash_table_lookup (priv->id_to_response, id); + } + +-static void +-button_clicked_cb (ResponseInfo *info) ++ ++static inline void ++emit_response (AdwAlertDialog *self, GQuark response) + { +- AdwAlertDialog *self = info->dialog; + AdwAlertDialogPrivate *priv = adw_alert_dialog_get_instance_private (self); + + g_object_ref (self); + priv->block_close_response = TRUE; + + adw_dialog_close (ADW_DIALOG (self)); +- g_signal_emit (self, signals[SIGNAL_RESPONSE], info->id, g_quark_to_string (info->id)); ++ g_signal_emit (self, signals[SIGNAL_RESPONSE], response, g_quark_to_string (response)); + + priv->block_close_response = FALSE; + g_object_unref (self); + } + ++ ++static void ++button_clicked_cb (ResponseInfo *info) ++{ ++ emit_response (info->dialog, info->id); ++} ++ + static GtkWidget * + create_response_button (AdwAlertDialog *self, + ResponseInfo *info) +@@ -2447,8 +2454,9 @@ choose_cancelled_cb (GCancellable *cancellable, + GTask *task) + { + AdwAlertDialog *self = g_task_get_source_object (task); ++ AdwAlertDialogPrivate *priv = adw_alert_dialog_get_instance_private (self); + +- choose_response_cb (self, adw_alert_dialog_get_close_response (self), task); ++ emit_response (self, priv->close_response); + } + + /** +-- +2.51.1 + diff --git a/0044-message-dialog-emit-response-when-cancelled-too.patch b/0044-message-dialog-emit-response-when-cancelled-too.patch new file mode 100644 index 0000000..15d7189 --- /dev/null +++ b/0044-message-dialog-emit-response-when-cancelled-too.patch @@ -0,0 +1,73 @@ +From 47d65e0e7e9ac1b869ad9e2125d67f7db88a65f1 Mon Sep 17 00:00:00 2001 +From: Alice Mikhaylenko +Date: Sat, 2 Aug 2025 01:31:35 +0400 +Subject: [PATCH 02/18] message-dialog: emit ::response when cancelled too + +See e387a1a920e1f3697707dc50d36297125d835b01 + + +(cherry picked from commit 20946b3d4f483d8b22aa2d9c29f77b1fda0f1387) + +0b042f2f message-dialog: Backport fix from alert-dialog + +Co-authored-by: Zander Brown + +(cherry picked from commit 6505e4c9e966ff887895d5c7df58f1c3ca0287c8) + +Co-authored-by: Alice Mikhaylenko +--- + src/adw-message-dialog.c | 18 +++++++++++++----- + 1 file changed, 13 insertions(+), 5 deletions(-) + +diff --git a/src/adw-message-dialog.c b/src/adw-message-dialog.c +index da26722b..ed028d53 100644 +--- a/src/adw-message-dialog.c ++++ b/src/adw-message-dialog.c +@@ -406,22 +406,29 @@ parent_changed_cb (AdwMessageDialog *self) + set_parent (self, transient_for); + } + +-static void +-button_clicked_cb (ResponseInfo *info) ++ ++static inline void ++emit_response (AdwMessageDialog *self, GQuark response) + { +- AdwMessageDialog *self = info->dialog; + AdwMessageDialogPrivate *priv = adw_message_dialog_get_instance_private (self); + + g_object_ref (self); + priv->block_close_response = TRUE; + + gtk_window_close (GTK_WINDOW (self)); +- g_signal_emit (self, signals[SIGNAL_RESPONSE], info->id, g_quark_to_string (info->id)); ++ g_signal_emit (self, signals[SIGNAL_RESPONSE], response, g_quark_to_string (response)); + + priv->block_close_response = FALSE; + g_object_unref (self); + } + ++ ++static void ++button_clicked_cb (ResponseInfo *info) ++{ ++ emit_response (info->dialog, info->id); ++} ++ + static GtkWidget * + create_response_button (AdwMessageDialog *self, + ResponseInfo *info) +@@ -2542,8 +2549,9 @@ choose_cancelled_cb (GCancellable *cancellable, + GTask *task) + { + AdwMessageDialog *self = g_task_get_source_object (task); ++ AdwMessageDialogPrivate *priv = adw_message_dialog_get_instance_private (self); + +- choose_response_cb (self, adw_message_dialog_get_close_response (self), task); ++ emit_response (self, priv->close_response); + } + + /** +-- +2.51.1 + diff --git a/0046-dialog-Don-t-always-try-to-check-can-focus-on-bin.patch b/0046-dialog-Don-t-always-try-to-check-can-focus-on-bin.patch new file mode 100644 index 0000000..7c4677b --- /dev/null +++ b/0046-dialog-Don-t-always-try-to-check-can-focus-on-bin.patch @@ -0,0 +1,41 @@ +From b5e309e6097a10676ef22d2bec4d82eb5f7a0f84 Mon Sep 17 00:00:00 2001 +From: Alice Mikhaylenko +Date: Sat, 2 Aug 2025 01:32:30 +0400 +Subject: [PATCH 04/18] dialog: Don't always try to check 'can-focus' on bin +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The bin doesn't exist when the dialog is presented as a window. + +This fixes a type sanity check in gtk_widget_get_can_focus() when called +from adw_dialog_set_focus(). + + +(cherry picked from commit 401a870dd062572d8f72302a005f91a8ca7b31ed) + +Co-authored-by: Jonas Ådahl + +(cherry picked from commit 4118a9195151979dad0d5227d141d87e13862f1a) + +Co-authored-by: Alice Mikhaylenko +--- + src/adw-dialog.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/adw-dialog.c b/src/adw-dialog.c +index fd539bb0..be62ae17 100644 +--- a/src/adw-dialog.c ++++ b/src/adw-dialog.c +@@ -1778,7 +1778,7 @@ adw_dialog_set_focus (AdwDialog *self, + if (priv->focus_widget == focus) + return; + +- if (!gtk_widget_get_can_focus (priv->bin)) { ++ if (!priv->bin || !gtk_widget_get_can_focus (priv->bin)) { + g_set_weak_pointer (&priv->last_focus, priv->focus_widget); + set_focus (self, focus); + return; +-- +2.51.1 + diff --git a/0047-dialog-Don-t-skip-activation-in-window-backed-dialog.patch b/0047-dialog-Don-t-skip-activation-in-window-backed-dialog.patch new file mode 100644 index 0000000..70c14ee --- /dev/null +++ b/0047-dialog-Don-t-skip-activation-in-window-backed-dialog.patch @@ -0,0 +1,58 @@ +From 6f3f393fc671fb9366307261afe53713b05a8c6e Mon Sep 17 00:00:00 2001 +From: Alice Mikhaylenko +Date: Sat, 2 Aug 2025 01:32:43 +0400 +Subject: [PATCH 05/18] dialog: Don't skip activation in window-backed dialogs + +Oops, I thought this would propagate it to the window, but apparently not. + +Fixes https://gitlab.gnome.org/GNOME/libadwaita/-/issues/1062 + + +(cherry picked from commit b2f55904166088d9d84df4f1f69dba3cc84bcc83) + +Co-authored-by: Alice Mikhaylenko + +(cherry picked from commit 59a2319fac62bd6a68a4f3d1709d14bd80d6cdb6) + +Co-authored-by: Alice Mikhaylenko +--- + src/adw-dialog.c | 16 ++-------------- + 1 file changed, 2 insertions(+), 14 deletions(-) + +diff --git a/src/adw-dialog.c b/src/adw-dialog.c +index be62ae17..bcfcf6db 100644 +--- a/src/adw-dialog.c ++++ b/src/adw-dialog.c +@@ -661,13 +661,7 @@ present_as_window (AdwDialog *self, + static gboolean + activate_focus_cb (AdwDialog *self) + { +- AdwDialogPrivate *priv = adw_dialog_get_instance_private (self); +- GtkRoot *root; +- +- if (priv->window) +- return GDK_EVENT_PROPAGATE; +- +- root = gtk_widget_get_root (GTK_WIDGET (self)); ++ GtkRoot *root = gtk_widget_get_root (GTK_WIDGET (self)); + + if (!GTK_IS_WINDOW (root)) + return GDK_EVENT_PROPAGATE; +@@ -680,13 +674,7 @@ activate_focus_cb (AdwDialog *self) + static gboolean + activate_default_cb (AdwDialog *self) + { +- AdwDialogPrivate *priv = adw_dialog_get_instance_private (self); +- GtkRoot *root; +- +- if (priv->window) +- return GDK_EVENT_PROPAGATE; +- +- root = gtk_widget_get_root (GTK_WIDGET (self)); ++ GtkRoot *root = gtk_widget_get_root (GTK_WIDGET (self)); + + if (!GTK_IS_WINDOW (root)) + return GDK_EVENT_PROPAGATE; +-- +2.51.1 + diff --git a/0048-layout-slot-Error-out-if-ID-is-not-set.patch b/0048-layout-slot-Error-out-if-ID-is-not-set.patch new file mode 100644 index 0000000..fb591fa --- /dev/null +++ b/0048-layout-slot-Error-out-if-ID-is-not-set.patch @@ -0,0 +1,68 @@ +From d22d9561de64e134c88fe08897783bf543b55faa Mon Sep 17 00:00:00 2001 +From: Alice Mikhaylenko +Date: Sat, 2 Aug 2025 01:32:55 +0400 +Subject: [PATCH 06/18] layout-slot: Error out if ID is not set + +Fixes https://gitlab.gnome.org/GNOME/libadwaita/-/issues/1059 + + +(cherry picked from commit ad446167acf3e6d1ee693f98ca636268be8592a1) + +Co-authored-by: Alice Mikhaylenko + +(cherry picked from commit 991fca4b15b7dcda67618fd97e7ae42133e383d8) + +Co-authored-by: Alice Mikhaylenko +--- + src/adw-layout-slot.c | 12 ++++++++++++ + src/adw-multi-layout-view.c | 4 ++++ + 2 files changed, 16 insertions(+) + +diff --git a/src/adw-layout-slot.c b/src/adw-layout-slot.c +index 04a15164..6786ae91 100644 +--- a/src/adw-layout-slot.c ++++ b/src/adw-layout-slot.c +@@ -58,6 +58,17 @@ adw_layout_slot_root (GtkWidget *widget) + adw_multi_layout_view_register_slot (ADW_MULTI_LAYOUT_VIEW (view), self->id, widget); + } + ++static void ++adw_layout_slot_constructed (GObject *object) ++{ ++ AdwLayoutSlot *self = ADW_LAYOUT_SLOT (object); ++ ++ G_OBJECT_CLASS (adw_layout_slot_parent_class)->constructed (object); ++ ++ if (!self->id) ++ g_error ("AdwLayoutSlot %p created without an ID", self); ++} ++ + static void + adw_layout_slot_finalize (GObject *object) + { +@@ -108,6 +119,7 @@ adw_layout_slot_class_init (AdwLayoutSlotClass *klass) + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + ++ object_class->constructed = adw_layout_slot_constructed; + object_class->finalize = adw_layout_slot_finalize; + object_class->get_property = adw_layout_slot_get_property; + object_class->set_property = adw_layout_slot_set_property; +diff --git a/src/adw-multi-layout-view.c b/src/adw-multi-layout-view.c +index 4c372bdb..2e37a53f 100644 +--- a/src/adw-multi-layout-view.c ++++ b/src/adw-multi-layout-view.c +@@ -685,6 +685,10 @@ adw_multi_layout_view_register_slot (AdwMultiLayoutView *self, + const char *id, + GtkWidget *slot) + { ++ g_return_if_fail (ADW_IS_MULTI_LAYOUT_VIEW (self)); ++ g_return_if_fail (id != NULL); ++ g_return_if_fail (GTK_IS_WIDGET (slot)); ++ + if (!self->accepting_slots) + return; + +-- +2.51.1 + diff --git a/0049-navigation-view-Defer-swipe-start-to-begin-swipe.patch b/0049-navigation-view-Defer-swipe-start-to-begin-swipe.patch new file mode 100644 index 0000000..38c1bbc --- /dev/null +++ b/0049-navigation-view-Defer-swipe-start-to-begin-swipe.patch @@ -0,0 +1,126 @@ +From a33fb6964727715e053787c55d968dbb7dd21275 Mon Sep 17 00:00:00 2001 +From: Alice Mikhaylenko +Date: Sat, 2 Aug 2025 01:33:20 +0400 +Subject: [PATCH 07/18] navigation-view: Defer swipe start to ::begin-swipe + +Fixes https://gitlab.gnome.org/GNOME/libadwaita/-/issues/1065 + + +(cherry picked from commit c6ba55c52a45c15bb05aeb82cc830a9870dae253) + +Co-authored-by: Alice Mikhaylenko + +(cherry picked from commit a5013cae5162c78a71c3e56838f890fffaa24331) + +Co-authored-by: Alice Mikhaylenko +--- + src/adw-navigation-view.c | 40 +++++++++++++++++++++++++++++++++------ + 1 file changed, 34 insertions(+), 6 deletions(-) + +diff --git a/src/adw-navigation-view.c b/src/adw-navigation-view.c +index 5d997f59..7a9486ce 100644 +--- a/src/adw-navigation-view.c ++++ b/src/adw-navigation-view.c +@@ -277,6 +277,7 @@ struct _AdwNavigationView + gboolean transition_cancel; + double transition_progress; + gboolean gesture_active; ++ AdwNavigationDirection swipe_direction; + + AdwShadowHelper *shadow_helper; + AdwSwipeTracker *swipe_tracker; +@@ -1209,22 +1210,41 @@ static void + prepare_cb (AdwSwipeTracker *tracker, + AdwNavigationDirection direction, + AdwNavigationView *self) ++{ ++ if (!adw_navigation_view_get_visible_page (self)) ++ return; ++ ++ self->swipe_direction = ADW_NAVIGATION_DIRECTION_BACK; ++} ++ ++static void ++begin_swipe_cb (AdwSwipeTracker *tracker, ++ AdwNavigationView *self) + { + AdwNavigationPage *visible_page = adw_navigation_view_get_visible_page (self); + AdwNavigationPage *new_page; + gboolean remove_on_pop = FALSE; + +- if (!visible_page) ++ if (self->swipe_direction < 0) ++ return; ++ ++ if (!visible_page) { ++ self->swipe_direction = -1; + return; ++ } + +- if (direction == ADW_NAVIGATION_DIRECTION_BACK) { +- if (!adw_navigation_page_get_can_pop (visible_page)) ++ if (self->swipe_direction == ADW_NAVIGATION_DIRECTION_BACK) { ++ if (!adw_navigation_page_get_can_pop (visible_page)) { ++ self->swipe_direction = -1; + return; ++ } + + new_page = adw_navigation_view_get_previous_page (self, visible_page); + +- if (!new_page) ++ if (!new_page) { ++ self->swipe_direction = -1; + return; ++ } + + } else { + new_page = get_next_page (self); +@@ -1242,9 +1262,9 @@ prepare_cb (AdwSwipeTracker *tracker, + self->showing_page = new_page; + self->hiding_page = g_object_ref (visible_page); + +- self->transition_pop = (direction == ADW_NAVIGATION_DIRECTION_BACK); ++ self->transition_pop = (self->swipe_direction == ADW_NAVIGATION_DIRECTION_BACK); + +- if (direction == ADW_NAVIGATION_DIRECTION_BACK) { ++ if (self->swipe_direction == ADW_NAVIGATION_DIRECTION_BACK) { + g_object_ref (new_page); + } else { + if (remove_on_pop) +@@ -1269,6 +1289,8 @@ prepare_cb (AdwSwipeTracker *tracker, + gtk_widget_queue_resize (GTK_WIDGET (self)); + + adw_swipe_tracker_set_upper_overshoot (self->swipe_tracker, TRUE); ++ ++ self->swipe_direction = -1; + } + + static void +@@ -1295,6 +1317,8 @@ end_swipe_cb (AdwSwipeTracker *tracker, + { + gboolean animate; + ++ self->swipe_direction = -1; ++ + if (!self->gesture_active) + return; + +@@ -1911,11 +1935,15 @@ adw_navigation_view_init (AdwNavigationView *self) + + g_signal_connect (self->swipe_tracker, "prepare", + G_CALLBACK (prepare_cb), self); ++ g_signal_connect (self->swipe_tracker, "begin-swipe", ++ G_CALLBACK (begin_swipe_cb), self); + g_signal_connect (self->swipe_tracker, "update-swipe", + G_CALLBACK (update_swipe_cb), self); + g_signal_connect (self->swipe_tracker, "end-swipe", + G_CALLBACK (end_swipe_cb), self); + ++ self->swipe_direction = -1; ++ + self->shield = adw_gizmo_new ("widget", NULL, NULL, NULL, NULL, NULL, NULL); + gtk_widget_set_child_visible (self->shield, FALSE); + gtk_widget_set_parent (self->shield, GTK_WIDGET (self)); +-- +2.51.1 + diff --git a/0051-Release-1.6.9.patch b/0051-Release-1.6.9.patch new file mode 100644 index 0000000..28715a0 --- /dev/null +++ b/0051-Release-1.6.9.patch @@ -0,0 +1,33 @@ +From 3a8401cf61c21ca1d49f27f5b6aaddc1c372834d Mon Sep 17 00:00:00 2001 +From: Alice Mikhaylenko +Date: Sat, 2 Aug 2025 01:42:03 +0400 +Subject: [PATCH 09/18] Release 1.6.9 + +--- + NEWS | 16 ++++++++++++++++ + meson.build | 4 ++-- + 2 files changed, 18 insertions(+), 2 deletions(-) + +diff --git a/meson.build b/meson.build +index 8a733039..ab6bf2a7 100644 +--- a/meson.build ++++ b/meson.build +@@ -1,5 +1,5 @@ + project('libadwaita', 'c', +- version: '1.6.8', ++ version: '1.6.9', + 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.8' ++libversion = '0.6.9' + # The so major version of the library + soversion = 0 + +-- +2.51.1 + diff --git a/0052-toast-widget-Make-the-button-insensitive-after-a-cli.patch b/0052-toast-widget-Make-the-button-insensitive-after-a-cli.patch new file mode 100644 index 0000000..be8b37d --- /dev/null +++ b/0052-toast-widget-Make-the-button-insensitive-after-a-cli.patch @@ -0,0 +1,37 @@ +From 6729ade2742cae161196fe3a6f5168e40a075b7c Mon Sep 17 00:00:00 2001 +From: Alice +Date: Fri, 12 Sep 2025 23:33:59 +0400 +Subject: [PATCH 10/18] toast-widget: Make the button insensitive after a click + +Otherwise we risk emitting ::button-clicked multiple times. + +Fixes https://gitlab.gnome.org/GNOME/libadwaita/-/issues/1070 + + +(cherry picked from commit fe38eefd9b8c14efbf8758c0e593942ff3cd3d05) + +Co-authored-by: Alice Mikhaylenko + +(cherry picked from commit 15f32c4795f02c58a45b900f9437898060bc81ae) + +Co-authored-by: Alice Mikhaylenko +--- + src/adw-toast-widget.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/adw-toast-widget.c b/src/adw-toast-widget.c +index 77dd167e..10ba8323 100644 +--- a/src/adw-toast-widget.c ++++ b/src/adw-toast-widget.c +@@ -102,6 +102,8 @@ action_clicked_cb (AdwToastWidget *self) + { + end_timeout (self); + ++ gtk_widget_set_sensitive (self->action_button, FALSE); ++ + g_signal_emit_by_name (self->toast, "button-clicked"); + + /* Keep the widget alive through the idle. Otherwise it may be immediately +-- +2.51.1 + diff --git a/0053-alert-dialog-Clarify-default-response-docs.patch b/0053-alert-dialog-Clarify-default-response-docs.patch new file mode 100644 index 0000000..5407d8d --- /dev/null +++ b/0053-alert-dialog-Clarify-default-response-docs.patch @@ -0,0 +1,63 @@ +From c1f28b10a5d03173f6b92d82ae79572eef50a222 Mon Sep 17 00:00:00 2001 +From: Alice +Date: Fri, 12 Sep 2025 23:34:30 +0400 +Subject: [PATCH 11/18] alert-dialog: Clarify :default-response docs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fixes https://gitlab.gnome.org/GNOME/libadwaita/-/issues/1044 + + +(cherry picked from commit 575338b9ba22a365978f75b479f44ec4bc38744b) + +Co-authored-by: Lukáš Tyrychtr + +(cherry picked from commit 38ce8b584ce1d9e71c3d4ab27280ddeea2d9a512) + +Co-authored-by: Alice Mikhaylenko +--- + src/adw-alert-dialog.c | 18 ++++++++++++------ + 1 file changed, 12 insertions(+), 6 deletions(-) + +diff --git a/src/adw-alert-dialog.c b/src/adw-alert-dialog.c +index 24347cb8..da46a557 100644 +--- a/src/adw-alert-dialog.c ++++ b/src/adw-alert-dialog.c +@@ -979,10 +979,13 @@ adw_alert_dialog_class_init (AdwAlertDialogClass *klass) + * + * The response ID of the default response. + * +- * If set, pressing Enter will activate the corresponding button. ++ * The button corresponding to this response will be set as the default widget ++ * of the dialog. + * +- * If set to `NULL` or a non-existent response ID, pressing Enter +- * will do nothing. ++ * If not set, the default widget will not be set, and the last added response ++ * will be focused by default. ++ * ++ * See [property@Dialog:default-widget]. + * + * Since: 1.5 + */ +@@ -2316,10 +2319,13 @@ adw_alert_dialog_get_default_response (AdwAlertDialog *self) + * + * Sets the ID of the default response of @self. + * +- * If set, pressing Enter will activate the corresponding button. ++ * The button corresponding to this response will be set as the default widget ++ * of @self. ++ * ++ * If not set, the default widget will not be set, and the last added response ++ * will be focused by default. + * +- * If set to `NULL` or to a non-existent response ID, pressing Enter +- * will do nothing. ++ * See [property@Dialog:default-widget]. + * + * Since: 1.5 + */ +-- +2.51.1 + diff --git a/0054-message-dialog-Clarify-default-response-docs.patch b/0054-message-dialog-Clarify-default-response-docs.patch new file mode 100644 index 0000000..59101b9 --- /dev/null +++ b/0054-message-dialog-Clarify-default-response-docs.patch @@ -0,0 +1,60 @@ +From 18db0c999afc7eb20fa8e6d699017d78f5183cd1 Mon Sep 17 00:00:00 2001 +From: Alice +Date: Fri, 12 Sep 2025 23:34:35 +0400 +Subject: [PATCH 12/18] message-dialog: Clarify :default-response docs + +Same as last commit. + + +(cherry picked from commit b3a4069fda4abf7fa15a16f929190acfc872e971) + +Co-authored-by: Alice Mikhaylenko + +(cherry picked from commit 42db3cbd5d69afd4b78be47637b329b68ad86dc1) + +Co-authored-by: Alice Mikhaylenko +--- + src/adw-message-dialog.c | 18 ++++++++++++------ + 1 file changed, 12 insertions(+), 6 deletions(-) + +diff --git a/src/adw-message-dialog.c b/src/adw-message-dialog.c +index ed028d53..5845dc91 100644 +--- a/src/adw-message-dialog.c ++++ b/src/adw-message-dialog.c +@@ -1079,10 +1079,13 @@ adw_message_dialog_class_init (AdwMessageDialogClass *klass) + * + * The response ID of the default response. + * +- * If set, pressing Enter will activate the corresponding button. ++ * The button corresponding to this response will be set as the default widget ++ * of the dialog. + * +- * If set to `NULL` or a non-existent response ID, pressing Enter +- * will do nothing. ++ * If not set, the default widget will not be set, and the last added response ++ * will be focused by default. ++ * ++ * See [property@Gtk.Window:default-widget]. + * + * Since: 1.2 + * Deprecated: 1.6: Use [class@AlertDialog]. +@@ -2384,10 +2387,13 @@ adw_message_dialog_get_default_response (AdwMessageDialog *self) + * + * Sets the ID of the default response of @self. + * +- * If set, pressing Enter will activate the corresponding button. ++ * The button corresponding to this response will be set as the default widget ++ * of @self. ++ * ++ * If not set, the default widget will not be set, and the last added response ++ * will be focused by default. + * +- * If set to `NULL` or to a non-existent response ID, pressing Enter +- * will do nothing. ++ * See [property@Gtk.Widget:default-widget]. + * + * Since: 1.2 + * Deprecated: 1.6: Use [class@AlertDialog]. +-- +2.51.1 + diff --git a/0055-message-dialog-Fix-a-warning-when-building-docs.patch b/0055-message-dialog-Fix-a-warning-when-building-docs.patch new file mode 100644 index 0000000..5fa130f --- /dev/null +++ b/0055-message-dialog-Fix-a-warning-when-building-docs.patch @@ -0,0 +1,32 @@ +From bdf0fa3aa5a9a1755d8f48db8ea4efeddba6d624 Mon Sep 17 00:00:00 2001 +From: Alice +Date: Fri, 12 Sep 2025 23:34:45 +0400 +Subject: [PATCH 13/18] message-dialog: Fix a warning when building docs + +(cherry picked from commit 108f2943ff6c73e0fdf8cae20a51cedeb53515dd) + +Co-authored-by: Alice Mikhaylenko + +(cherry picked from commit 09199c01435b94dcb702f3ce5461552ceb38d497) + +Co-authored-by: Alice Mikhaylenko +--- + src/adw-message-dialog.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/adw-message-dialog.c b/src/adw-message-dialog.c +index 5845dc91..78557325 100644 +--- a/src/adw-message-dialog.c ++++ b/src/adw-message-dialog.c +@@ -2393,7 +2393,7 @@ adw_message_dialog_get_default_response (AdwMessageDialog *self) + * If not set, the default widget will not be set, and the last added response + * will be focused by default. + * +- * See [property@Gtk.Widget:default-widget]. ++ * See [property@Gtk.Window:default-widget]. + * + * Since: 1.2 + * Deprecated: 1.6: Use [class@AlertDialog]. +-- +2.51.1 + diff --git a/0056-demo-Plug-FileDialog-leaks.patch b/0056-demo-Plug-FileDialog-leaks.patch new file mode 100644 index 0000000..c88a433 --- /dev/null +++ b/0056-demo-Plug-FileDialog-leaks.patch @@ -0,0 +1,41 @@ +From 9e832f81ba390af42e8969858a2b4c18b697ae6f Mon Sep 17 00:00:00 2001 +From: Alice +Date: Fri, 12 Sep 2025 23:35:06 +0400 +Subject: [PATCH 14/18] demo: Plug FileDialog leaks + +(cherry picked from commit 0aba6a51aab669e2b2db92fe24fac46d3d12cac6) + +Co-authored-by: Maximiliano Sandoval + +(cherry picked from commit fa735f0f84370c3d049786d78ebca57826ba8866) + +Co-authored-by: Alice Mikhaylenko +--- + demo/pages/avatar/adw-demo-page-avatar.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/demo/pages/avatar/adw-demo-page-avatar.c b/demo/pages/avatar/adw-demo-page-avatar.c +index 2bc9da39..b295df4c 100644 +--- a/demo/pages/avatar/adw-demo-page-avatar.c ++++ b/demo/pages/avatar/adw-demo-page-avatar.c +@@ -134,6 +134,8 @@ avatar_open_cb (AdwDemoPageAvatar *self) + NULL, + (GAsyncReadyCallback) avatar_open_dialog_cb, + self); ++ ++ g_object_unref (dialog); + } + + static void +@@ -176,6 +178,8 @@ avatar_save_cb (AdwDemoPageAvatar *self) + NULL, + (GAsyncReadyCallback) avatar_save_dialog_cb, + self); ++ ++ g_object_unref (dialog); + } + + static void +-- +2.51.1 + diff --git a/0057-swipe-tracker-Plug-snap-points-leak.patch b/0057-swipe-tracker-Plug-snap-points-leak.patch new file mode 100644 index 0000000..aa3ad55 --- /dev/null +++ b/0057-swipe-tracker-Plug-snap-points-leak.patch @@ -0,0 +1,36 @@ +From 738f71b99df68bd391f20ee6da7f025f8e3f5ad4 Mon Sep 17 00:00:00 2001 +From: Alice +Date: Fri, 12 Sep 2025 23:35:12 +0400 +Subject: [PATCH 15/18] swipe-tracker: Plug snap points leak + +As per the docs of adw_swipeable_get_snap_points, the points are +transfer full. + + +(cherry picked from commit 163b7743a81761a655d9520d35c0180206177510) + +Co-authored-by: Maximiliano Sandoval + +(cherry picked from commit 5b8608b944d2a441a082d88abf3ab06d0bb5854e) + +Co-authored-by: Alice Mikhaylenko +--- + src/adw-swipe-tracker.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/adw-swipe-tracker.c b/src/adw-swipe-tracker.c +index 07581638..4d263dbc 100644 +--- a/src/adw-swipe-tracker.c ++++ b/src/adw-swipe-tracker.c +@@ -345,6 +345,8 @@ calculate_velocity (AdwSwipeTracker *self) + else + get_range (self, &lower, &upper); + ++ g_free (points); ++ + if (self->progress <= lower) { + if (self->lower_overshoot && self->progress > lower) + velocity *= adjust_for_overshoot (self, lower - self->progress) / (lower - self->progress); +-- +2.51.1 + diff --git a/0058-doc-Grammar-typo-fixes.patch b/0058-doc-Grammar-typo-fixes.patch new file mode 100644 index 0000000..f2b90ba --- /dev/null +++ b/0058-doc-Grammar-typo-fixes.patch @@ -0,0 +1,44 @@ +From 8ec6de0e1189174556ddc6bb34b082953bc9f397 Mon Sep 17 00:00:00 2001 +From: Alice +Date: Fri, 12 Sep 2025 23:35:25 +0400 +Subject: [PATCH 16/18] doc: Grammar/typo fixes + +Fixes https://gitlab.gnome.org/GNOME/libadwaita/-/issues/1076 + + +(cherry picked from commit c1d3d1436aa93208ee60db0aebc846a4d47b9a14) + +Co-authored-by: Alice Mikhaylenko + +(cherry picked from commit 719db2ed1b6e7219a255b1b609c94cebaa6b2c15) + +Co-authored-by: Alice Mikhaylenko +--- + doc/css-variables.md | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/doc/css-variables.md b/doc/css-variables.md +index 1b70ea3b..60c0ba8b 100644 +--- a/doc/css-variables.md ++++ b/doc/css-variables.md +@@ -69,7 +69,7 @@ are automatically derived from the background color, so it's not necesssary to + override them manually when setting app-wide accent color. + + However, when overriding the background colors for specific widgets, the +-standalone colors must overridden too, as follows: ++standalone colors must be overridden too, as follows: + + ```css + my-widget { +@@ -1202,7 +1202,7 @@ as the following set of variables: + + # Compatibility Colors + +-A number of colors has been available in Adwaita in GTK3. They are aliases of ++A number of colors have been available in Adwaita in GTK3. They are aliases of + UI colors or otherwise derived from them. These colors use the older + GTK-specific syntax for named colors rather than CSS variables, and don't pick + up overridden colors. As such, it's recommended to avoid using these colors +-- +2.51.1 + diff --git a/0059-spinner-Switch-to-progress-bar-accessible-role.patch b/0059-spinner-Switch-to-progress-bar-accessible-role.patch new file mode 100644 index 0000000..784e913 --- /dev/null +++ b/0059-spinner-Switch-to-progress-bar-accessible-role.patch @@ -0,0 +1,59 @@ +From 3ce6356dfbaf544835d22b5a24a3d466d7ac4505 Mon Sep 17 00:00:00 2001 +From: Alice +Date: Fri, 12 Sep 2025 23:35:34 +0400 +Subject: [PATCH 17/18] spinner: Switch to progress bar accessible role + +Unlike GtkSpinner, we don't have start/stop API, so just have it as +always busy. + +Fixes https://gitlab.gnome.org/GNOME/libadwaita/-/issues/904 + + +(cherry picked from commit f18889012f3c58f4939ddc76914b46ad96415100) + +Co-authored-by: Alice Mikhaylenko + +(cherry picked from commit 8da81dd889b2b7b936ee3aab45c8d1ceb2f4413e) + +Co-authored-by: Alice Mikhaylenko +--- + src/adw-spinner.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/src/adw-spinner.c b/src/adw-spinner.c +index a494436a..252bc9d0 100644 +--- a/src/adw-spinner.c ++++ b/src/adw-spinner.c +@@ -50,6 +50,10 @@ + * `AdwSpinner` has a single node with the name `image` and the style class + * `.spinner`. + * ++ * ## Accessibility ++ * ++ * `AdwSpinner` uses the [enum@Gtk.AccessibleRole.progress-bar] role. ++ * + * Since: 1.6 + */ + +@@ -117,6 +121,7 @@ adw_spinner_class_init (AdwSpinnerClass *klass) + widget_class->snapshot = adw_spinner_snapshot; + + gtk_widget_class_set_css_name (widget_class, "image"); ++ gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_PROGRESS_BAR); + } + + static void +@@ -130,6 +135,10 @@ adw_spinner_init (AdwSpinner *self) + G_CALLBACK (gtk_widget_queue_resize), self); + g_signal_connect_swapped (self->paintable, "invalidate-contents", + G_CALLBACK (gtk_widget_queue_draw), self); ++ ++ gtk_accessible_update_state (GTK_ACCESSIBLE (self), ++ GTK_ACCESSIBLE_STATE_BUSY, TRUE, ++ -1); + } + + /** +-- +2.51.1 + diff --git a/0060-Release-1.6.10.patch b/0060-Release-1.6.10.patch new file mode 100644 index 0000000..a1e8d60 --- /dev/null +++ b/0060-Release-1.6.10.patch @@ -0,0 +1,33 @@ +From e35abc606ab4c7c04965cd82cec7c1eebd134e7c Mon Sep 17 00:00:00 2001 +From: Alice Mikhaylenko +Date: Fri, 12 Sep 2025 23:37:56 +0400 +Subject: [PATCH 18/18] Release 1.6.10 + +--- + NEWS | 17 +++++++++++++++++ + meson.build | 4 ++-- + 2 files changed, 19 insertions(+), 2 deletions(-) + +diff --git a/meson.build b/meson.build +index ab6bf2a7..f135d17b 100644 +--- a/meson.build ++++ b/meson.build +@@ -1,5 +1,5 @@ + project('libadwaita', 'c', +- version: '1.6.9', ++ version: '1.6.10', + 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.9' ++libversion = '0.6.10' + # The so major version of the library + soversion = 0 + +-- +2.51.1 + diff --git a/libadwaita.spec b/libadwaita.spec index d1794df..bb20c66 100644 --- a/libadwaita.spec +++ b/libadwaita.spec @@ -5,7 +5,7 @@ %global tarball_version 1.6.2 Name: libadwaita -Version: 1.6.8 +Version: 1.6.10 Release: %autorelease Summary: Building blocks for modern GNOME applications @@ -17,6 +17,8 @@ Source0: https://download.gnome.org/sources/%{name}/1.6/%{name}-%{tarball # Backports for post-1.6.2. What would be patch 0004 # removed pre-generated CSS support making /usr/bin/sassc # a build requirement that we cannot/will-not use. +# Some other patches are skipped (hitboxes for SCSS reasons) +# and unrelated CI changes. Patch: 0001-dialog-Properly-unparent-the-child-when-backed-by-a-.patch Patch: 0002-dialog-Handle-close-before-and-right-after-present.patch Patch: 0003-bottom-sheet-Fix-more-criticals-on-dispose.patch @@ -58,6 +60,22 @@ 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 +Patch: 0043-alert-dialog-emit-response-when-cancelled.patch +Patch: 0044-message-dialog-emit-response-when-cancelled-too.patch +Patch: 0046-dialog-Don-t-always-try-to-check-can-focus-on-bin.patch +Patch: 0047-dialog-Don-t-skip-activation-in-window-backed-dialog.patch +Patch: 0048-layout-slot-Error-out-if-ID-is-not-set.patch +Patch: 0049-navigation-view-Defer-swipe-start-to-begin-swipe.patch +Patch: 0051-Release-1.6.9.patch +Patch: 0052-toast-widget-Make-the-button-insensitive-after-a-cli.patch +Patch: 0053-alert-dialog-Clarify-default-response-docs.patch +Patch: 0054-message-dialog-Clarify-default-response-docs.patch +Patch: 0055-message-dialog-Fix-a-warning-when-building-docs.patch +Patch: 0056-demo-Plug-FileDialog-leaks.patch +Patch: 0057-swipe-tracker-Plug-snap-points-leak.patch +Patch: 0058-doc-Grammar-typo-fixes.patch +Patch: 0059-spinner-Switch-to-progress-bar-accessible-role.patch +Patch: 0060-Release-1.6.10.patch BuildRequires: desktop-file-utils BuildRequires: gcc