Skip to content

Commit

Permalink
detail-view: Add extension icon
Browse files Browse the repository at this point in the history
If the extension has one.
  • Loading branch information
oscfdezdz committed Nov 20, 2023
1 parent 26dafe0 commit ff31b6e
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 6 deletions.
7 changes: 7 additions & 0 deletions src/exm-detail-view.blp
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,16 @@ template $ExmDetailView : Adw.NavigationPage {
orientation: horizontal;
spacing: 25;

Gtk.Image ext_icon {
halign: center;
valign: center;
pixel-size: 64;
}

Gtk.Box {
orientation: vertical;
hexpand: true;
valign: center;

Gtk.Label ext_title {
styles ["title-1"]
Expand Down
47 changes: 41 additions & 6 deletions src/exm-detail-view.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ struct _ExmDetailView
GtkStack *stack;
GtkButton *ext_install;
GtkLabel *ext_description;
GtkImage *ext_icon;
GtkLabel *ext_title;
GtkLabel *ext_author;
ExmScreenshot *ext_screenshot;
Expand Down Expand Up @@ -150,6 +151,27 @@ exm_detail_view_set_property (GObject *object,
}
}

static void
on_icon_loaded (GObject *source,
GAsyncResult *res,
ExmDetailView *self)
{
GError *error = NULL;
GdkTexture *texture = exm_image_resolver_resolve_finish (EXM_IMAGE_RESOLVER (source),
res, &error);

if (error)
{
// TODO: Properly log this
g_critical ("%s\n", error->message);
return;
}

gtk_image_set_from_paintable (self->ext_icon, GDK_PAINTABLE (texture));
g_object_unref (texture);
g_object_unref (self);
}

static void
on_image_loaded (GObject *source,
GAsyncResult *res,
Expand All @@ -176,12 +198,13 @@ on_image_loaded (GObject *source,
}

static void
queue_resolve_screenshot (ExmDetailView *self,
const gchar *screenshot_uri,
GCancellable *cancellable)
queue_resolve_image (ExmDetailView *self,
const gchar *image_uri,
GCancellable *cancellable,
gboolean is_icon)
{
exm_image_resolver_resolve_async (self->resolver, screenshot_uri, cancellable,
(GAsyncReadyCallback) on_image_loaded,
exm_image_resolver_resolve_async (self->resolver, image_uri, cancellable,
(GAsyncReadyCallback) (is_icon ? on_icon_loaded : on_image_loaded),
g_object_ref (self));
}

Expand Down Expand Up @@ -321,6 +344,17 @@ on_data_loaded (GObject *source,
g_clear_object (&self->resolver_cancel);
}

if (strcmp (icon_uri, "/static/images/plugin.png") != 0)
{
self->resolver_cancel = g_cancellable_new ();

queue_resolve_image (self, icon_uri, self->resolver_cancel, TRUE);
}
else
{
gtk_image_set_from_icon_name (self->ext_icon, "puzzle-piece-symbolic");
}

if (screenshot_uri != NULL)
{
self->resolver_cancel = g_cancellable_new ();
Expand All @@ -332,7 +366,7 @@ on_data_loaded (GObject *source,
gtk_widget_set_visible (GTK_WIDGET (self->ext_screenshot_container), TRUE);
gtk_widget_set_visible (GTK_WIDGET (self->ext_screenshot_popout_button), FALSE);

queue_resolve_screenshot (self, screenshot_uri, self->resolver_cancel);
queue_resolve_image (self, screenshot_uri, self->resolver_cancel, FALSE);
}
else
{
Expand Down Expand Up @@ -547,6 +581,7 @@ exm_detail_view_class_init (ExmDetailViewClass *klass)

gtk_widget_class_bind_template_child (widget_class, ExmDetailView, title);
gtk_widget_class_bind_template_child (widget_class, ExmDetailView, stack);
gtk_widget_class_bind_template_child (widget_class, ExmDetailView, ext_icon);
gtk_widget_class_bind_template_child (widget_class, ExmDetailView, ext_title);
gtk_widget_class_bind_template_child (widget_class, ExmDetailView, ext_author);
gtk_widget_class_bind_template_child (widget_class, ExmDetailView, ext_description);
Expand Down

0 comments on commit ff31b6e

Please sign in to comment.