diff --git a/build-aux/com.mattjakeman.ExtensionManager.json b/build-aux/com.mattjakeman.ExtensionManager.json index 91e85db5..21d24c81 100644 --- a/build-aux/com.mattjakeman.ExtensionManager.json +++ b/build-aux/com.mattjakeman.ExtensionManager.json @@ -1,7 +1,7 @@ { "id" : "com.mattjakeman.ExtensionManager", "runtime" : "org.gnome.Platform", - "runtime-version" : "47", + "runtime-version" : "48", "sdk" : "org.gnome.Sdk", "command" : "extension-manager", "finish-args" : [ diff --git a/data/screenshot-browse-dark.png b/data/screenshot-browse-dark.png index 525be4bf..a9b956cc 100644 Binary files a/data/screenshot-browse-dark.png and b/data/screenshot-browse-dark.png differ diff --git a/data/screenshot-browse-light.png b/data/screenshot-browse-light.png index 364db6f1..d6fac606 100644 Binary files a/data/screenshot-browse-light.png and b/data/screenshot-browse-light.png differ diff --git a/data/screenshot-details-dark.png b/data/screenshot-details-dark.png index cba1bc06..9d7e1cf1 100644 Binary files a/data/screenshot-details-dark.png and b/data/screenshot-details-dark.png differ diff --git a/data/screenshot-details-light.png b/data/screenshot-details-light.png index fedddc17..c08e0372 100644 Binary files a/data/screenshot-details-light.png and b/data/screenshot-details-light.png differ diff --git a/data/screenshot-installed-dark.png b/data/screenshot-installed-dark.png index 1b24af8f..e4a92247 100644 Binary files a/data/screenshot-installed-dark.png and b/data/screenshot-installed-dark.png differ diff --git a/data/screenshot-installed-light.png b/data/screenshot-installed-light.png index 2dd637a2..64dcdabf 100644 Binary files a/data/screenshot-installed-light.png and b/data/screenshot-installed-light.png differ diff --git a/data/screenshot-upgrade-assistant-dark.png b/data/screenshot-upgrade-assistant-dark.png index 576f1837..c81d20bb 100644 Binary files a/data/screenshot-upgrade-assistant-dark.png and b/data/screenshot-upgrade-assistant-dark.png differ diff --git a/data/screenshot-upgrade-assistant-light.png b/data/screenshot-upgrade-assistant-light.png index 38604501..1a01e433 100644 Binary files a/data/screenshot-upgrade-assistant-light.png and b/data/screenshot-upgrade-assistant-light.png differ diff --git a/src/exm-browse-page.blp b/src/exm-browse-page.blp index 549c7246..71ff3b51 100644 --- a/src/exm-browse-page.blp +++ b/src/exm-browse-page.blp @@ -65,7 +65,7 @@ template $ExmBrowsePage: Gtk.Widget { child: Adw.Spinner { styles [ - "dim-label" + "dimmed" ] margin-top: 30; @@ -119,7 +119,7 @@ template $ExmBrowsePage: Gtk.Widget { Gtk.Image { styles [ - "dim-label" + "dimmed" ] icon-name: "edit-find-symbolic"; @@ -160,7 +160,7 @@ template $ExmBrowsePage: Gtk.Widget { Gtk.Image { styles [ - "dim-label" + "dimmed" ] icon-name: "offline-symbolic"; diff --git a/src/exm-comment-tile.blp b/src/exm-comment-tile.blp index 8e332412..b02fd644 100644 --- a/src/exm-comment-tile.blp +++ b/src/exm-comment-tile.blp @@ -1,6 +1,8 @@ using Gtk 4.0; template $ExmCommentTile: Gtk.Widget { + focusable: true; + Gtk.Box { orientation: vertical; @@ -12,8 +14,11 @@ template $ExmCommentTile: Gtk.Widget { "heading" ] - xalign: 0; label: bind template.comment as <$ExmComment>.author; + max-width-chars: 20; + wrap: true; + wrap-mode: word; + xalign: 0; } Gtk.Label author_badge { @@ -22,6 +27,7 @@ template $ExmCommentTile: Gtk.Widget { ] label: _("Author"); + valign: center; visible: bind template.comment as <$ExmComment>.is_extension_creator; } @@ -44,11 +50,12 @@ template $ExmCommentTile: Gtk.Widget { wrap: true; wrap-mode: word_char; xalign: 0; + max-width-chars: 30; } Gtk.Label date { styles [ - "dim-label" + "dimmed" ] margin-top: 6; diff --git a/src/exm-comment-tile.c b/src/exm-comment-tile.c index fb7cdbdb..ba923965 100644 --- a/src/exm-comment-tile.c +++ b/src/exm-comment-tile.c @@ -1,6 +1,7 @@ -/* exm-comment-tile.c +/* + * exm-comment-tile.c * - * Copyright 2022-2024 Matthew Jakeman + * Copyright 2022-2025 Matthew Jakeman * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -158,6 +159,7 @@ exm_comment_tile_class_init (ExmCommentTileClass *klass) gtk_widget_class_set_css_name (widget_class, "comment-tile"); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); + gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_COMMENT); } static void diff --git a/src/exm-detail-view.blp b/src/exm-detail-view.blp index 4d768abf..dc085fa2 100644 --- a/src/exm-detail-view.blp +++ b/src/exm-detail-view.blp @@ -24,7 +24,6 @@ template $ExmDetailView: Adw.NavigationPage { header_suffix.orientation: vertical; header_suffix.spacing: 12; ext_install.halign: start; - comment_box.min-children-per-line: 1; } apply => $breakpoint_apply_cb() swapped; @@ -118,7 +117,7 @@ template $ExmDetailView: Adw.NavigationPage { Gtk.Label ext_author { styles [ - "dim-label" + "dimmed" ] xalign: 0; @@ -324,19 +323,17 @@ template $ExmDetailView: Adw.NavigationPage { child: Gtk.Box { orientation: vertical; - Gtk.FlowBox comment_box { - min-children-per-line: 2; - max-children-per-line: 2; - homogeneous: true; - selection-mode: none; - row-spacing: 12; - column-spacing: 12; + Adw.WrapBox comment_box { + orientation: vertical; + child-spacing: 12; + line-homogeneous: true; + line-spacing: 12; } Gtk.Button show_more_btn { label: _("_Show All Reviews"); halign: center; - margin-top: 10; + margin-top: 12; use-underline: true; } }; diff --git a/src/exm-detail-view.c b/src/exm-detail-view.c index add3638f..84d57501 100644 --- a/src/exm-detail-view.c +++ b/src/exm-detail-view.c @@ -72,7 +72,7 @@ struct _ExmDetailView ExmInfoBar *ext_info_bar; GtkScrolledWindow *scroll_area; GtkStack *comment_stack; - GtkFlowBox *comment_box; + AdwWrapBox *comment_box; GtkButton *show_more_btn; AdwActionRow *link_homepage; @@ -210,17 +210,13 @@ queue_resolve_image (ExmDetailView *self, g_object_ref (self)); } -static GtkWidget * -comment_factory (ExmComment *comment, - gpointer user_data G_GNUC_UNUSED) +static void +delete_comment_tiles (ExmDetailView *self) { - GtkWidget *tile; - - tile = gtk_flow_box_child_new (); - gtk_widget_add_css_class (tile, "card"); - gtk_flow_box_child_set_child (GTK_FLOW_BOX_CHILD (tile), GTK_WIDGET (exm_comment_tile_new (comment))); + GtkWidget *child; - return tile; + while ((child = gtk_widget_get_first_child (GTK_WIDGET (self->comment_box))) != NULL) + adw_wrap_box_remove (self->comment_box, child); } static void @@ -252,9 +248,16 @@ on_get_comments (GObject *source, else gtk_stack_set_visible_child_name (self->comment_stack, "page_comments"); - gtk_flow_box_bind_model (self->comment_box, model, - (GtkFlowBoxCreateWidgetFunc) comment_factory, - g_object_ref (self), g_object_unref); + delete_comment_tiles (self); + + for (guint i = 0; i < g_list_model_get_n_items (model); i++) + { + ExmComment *comment = g_list_model_get_item (model, i); + GtkWidget *tile = GTK_WIDGET (exm_comment_tile_new (comment)); + gtk_widget_add_css_class (tile, "card"); + adw_wrap_box_append (self->comment_box, tile); + g_object_unref (comment); + } } static void @@ -296,20 +299,6 @@ install_remote (GtkButton *button, "(sb)", self->uuid, warn); } -static void -delete_donation_rows (ExmDetailView *self) -{ - GtkWidget *row; - - for (GList *iter = self->donation_rows_list; iter != NULL; iter = g_list_next (iter)) { - row = GTK_WIDGET (iter->data); - adw_expander_row_remove (self->links_donations, row); - } - - g_list_free (self->donation_rows_list); - self->donation_rows_list = NULL; -} - static void new_donation_row (ExmDetailView *self, int num_donation) @@ -333,6 +322,16 @@ new_donation_row (ExmDetailView *self, self->donation_rows_list = g_list_append (self->donation_rows_list, row); } +static void +delete_donation_rows (ExmDetailView *self) +{ + for (GList *iter = self->donation_rows_list; iter != NULL; iter = g_list_next (iter)) + adw_expander_row_remove (self->links_donations, GTK_WIDGET (iter->data)); + + g_list_free (self->donation_rows_list); + self->donation_rows_list = NULL; +} + static void update_donation_rows (ExmDetailView *self, gchar **donation_urls) diff --git a/src/exm-installed-page.blp b/src/exm-installed-page.blp index b6b14531..cac07944 100644 --- a/src/exm-installed-page.blp +++ b/src/exm-installed-page.blp @@ -11,86 +11,83 @@ template $ExmInstalledPage: Gtk.Widget { Gtk.StackPage page_list { name: "page_list"; - child: Gtk.Box { - orientation: vertical; - - Adw.Banner updates_banner { + child: Adw.PreferencesPage { + banner: Adw.Banner updates_banner { button-label: _("_Log Out…"); + button-style: suggested; action-name: "app.logout"; + }; + + Adw.PreferencesGroup { + Adw.SwitchRow global_toggle { + [prefix] + Gtk.Image { + icon-name: 'puzzle-piece-symbolic'; + } + + title: _("Use Extensions"); + subtitle: _("Extensions can cause performance and stability issues"); + } } - Adw.PreferencesPage { - Adw.PreferencesGroup { - Adw.SwitchRow global_toggle { + Adw.PreferencesGroup user_list { + title: _("User-Installed Extensions"); + + Gtk.ListBox user_list_box { + styles [ + "boxed-list", + "boxed-list-placeholder" + ] + + selection-mode: none; + + [placeholder] + Adw.ActionRow { [prefix] Gtk.Image { - icon-name: 'puzzle-piece-symbolic'; + icon-name: "globe-symbolic"; } - title: _("Use Extensions"); - subtitle: _("Extensions can cause performance and stability issues"); - } - } + title: _("No User Extensions Installed"); - Adw.PreferencesGroup user_list { - title: _("User-Installed Extensions"); - - Gtk.ListBox user_list_box { - styles [ - "boxed-list", - "boxed-list-placeholder" - ] - - selection-mode: none; - - [placeholder] - Adw.ActionRow { - [prefix] - Gtk.Image { - icon-name: "globe-symbolic"; - } - - title: _("No User Extensions Installed"); - - [suffix] - Gtk.Button { - label: _("Browse"); - action-name: "win.show-page"; - action-target: "\"browse\""; - valign: center; - } + [suffix] + Gtk.Button { + label: _("Browse"); + action-name: "win.show-page"; + action-target: "\"browse\""; + valign: center; } + } - accessibility { - labelled-by: user_list; - } + accessibility { + labelled-by: user_list; } } + } - Adw.PreferencesGroup system_list { - title: _("System Extensions"); - - Gtk.ListBox system_list_box { - styles [ - "boxed-list", - "boxed-list-placeholder" - ] + Adw.PreferencesGroup system_list { + title: _("System Extensions"); - selection-mode: none; + Gtk.ListBox system_list_box { + styles [ + "boxed-list", + "boxed-list-placeholder" + ] - [placeholder] - Adw.ActionRow { - [prefix] - Gtk.Image { - icon-name: "settings-symbolic"; - } + selection-mode: none; - title: _("No System Extensions Installed"); + [placeholder] + Adw.ActionRow { + [prefix] + Gtk.Image { + icon-name: "settings-symbolic"; } - accessibility { - labelled-by: system_list; - } + title: _("No System Extensions Installed"); + } + + accessibility { + labelled-by: system_list; } } } diff --git a/src/exm-search-row.blp b/src/exm-search-row.blp index 1a8ead6e..a38a3ceb 100644 --- a/src/exm-search-row.blp +++ b/src/exm-search-row.blp @@ -50,7 +50,7 @@ template $ExmSearchRow: Gtk.ListBoxRow { Gtk.Label description_label { styles [ - "dim-label" + "dimmed" ] ellipsize: end; diff --git a/src/exm-window.blp b/src/exm-window.blp index a2c99918..934954cd 100644 --- a/src/exm-window.blp +++ b/src/exm-window.blp @@ -62,6 +62,7 @@ template $ExmWindow: Adw.ApplicationWindow { } content: Adw.ViewStack view_stack { + enable-transitions: true; notify::visible-child => $on_visible_page_changed(); Adw.ViewStackPage installed_stack {