Skip to content

Commit 984264a

Browse files
authored
Merge pull request #545 from mjakeman/oscfdezdz/donation_urls
Add donation row
2 parents 885b8a6 + d130bcf commit 984264a

File tree

5 files changed

+105
-0
lines changed

5 files changed

+105
-0
lines changed
Lines changed: 2 additions & 0 deletions
Loading

src/exm-detail-view.blp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,15 @@ template $ExmDetailView : Adw.NavigationPage {
182182
}
183183
}
184184

185+
Adw.ExpanderRow links_donations {
186+
[prefix]
187+
Gtk.Image {
188+
icon-name: "donation-symbolic";
189+
}
190+
191+
title: _("Donate");
192+
}
193+
185194
Adw.ActionRow link_extensions {
186195
[prefix]
187196
Gtk.Image {

src/exm-detail-view.c

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,9 @@ struct _ExmDetailView
7474

7575
AdwActionRow *link_homepage;
7676
gchar *uri_homepage;
77+
AdwExpanderRow *links_donations;
78+
gchar **uri_donations;
79+
GList *donation_rows_list;
7780
AdwActionRow *link_extensions;
7881
gchar *uri_extensions;
7982
int pk;
@@ -293,6 +296,69 @@ install_remote (GtkButton *button,
293296
"(sb)", self->uuid, warn);
294297
}
295298

299+
static void
300+
delete_donation_rows (ExmDetailView *self)
301+
{
302+
GtkWidget *row;
303+
304+
for (GList *iter = self->donation_rows_list; iter != NULL; iter = g_list_next (iter)) {
305+
row = GTK_WIDGET (iter->data);
306+
adw_expander_row_remove (self->links_donations, row);
307+
}
308+
309+
g_list_free (self->donation_rows_list);
310+
self->donation_rows_list = NULL;
311+
}
312+
313+
static void
314+
new_donation_row (ExmDetailView *self,
315+
int num_donation)
316+
{
317+
GtkWidget *row;
318+
GtkWidget *external_link_icon;
319+
320+
row = adw_action_row_new ();
321+
322+
adw_preferences_row_set_title (ADW_PREFERENCES_ROW (row), self->uri_donations[num_donation]);
323+
gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), TRUE);
324+
325+
gtk_actionable_set_action_name (GTK_ACTIONABLE (row), "detail.open-donation");
326+
gtk_actionable_set_action_target_value (GTK_ACTIONABLE (row), g_variant_new_int32 (num_donation));
327+
328+
external_link_icon = gtk_image_new_from_icon_name ("external-link-symbolic");
329+
gtk_widget_add_css_class (external_link_icon, "dim-label");
330+
adw_action_row_add_suffix (ADW_ACTION_ROW (row), external_link_icon);
331+
332+
adw_expander_row_add_row (self->links_donations, row);
333+
334+
self->donation_rows_list = g_list_append (self->donation_rows_list, row);
335+
}
336+
337+
static void
338+
update_donation_rows (ExmDetailView *self,
339+
gchar **donation_urls)
340+
{
341+
gtk_widget_set_visible (GTK_WIDGET (self->links_donations), FALSE);
342+
delete_donation_rows (self);
343+
344+
if (donation_urls == NULL || donation_urls[0] == NULL)
345+
return;
346+
347+
self->uri_donations = g_new0 (gchar *, g_strv_length (donation_urls));
348+
349+
for (int i = 0; donation_urls[i] != NULL; i++)
350+
{
351+
self->uri_donations[i] = g_uri_resolve_relative (donation_urls[i],
352+
"",
353+
G_URI_FLAGS_NONE,
354+
NULL);
355+
new_donation_row (self, i);
356+
}
357+
358+
adw_expander_row_set_expanded (self->links_donations, FALSE);
359+
gtk_widget_set_visible (GTK_WIDGET (self->links_donations), TRUE);
360+
}
361+
296362
static void
297363
on_data_loaded (GObject *source,
298364
GAsyncResult *result,
@@ -312,6 +378,7 @@ on_data_loaded (GObject *source,
312378
gint pk, downloads;
313379
gboolean is_installed, is_supported;
314380
gchar *uuid, *name, *creator, *icon_uri, *screenshot_uri, *link, *description, *url;
381+
gchar **donation_urls;
315382
g_object_get (data,
316383
"uuid", &uuid,
317384
"name", &name,
@@ -324,6 +391,7 @@ on_data_loaded (GObject *source,
324391
"pk", &pk,
325392
"url", &url,
326393
"downloads", &downloads,
394+
"donation_urls", &donation_urls,
327395
NULL);
328396

329397
adw_window_title_set_title (self->title, name);
@@ -382,6 +450,8 @@ on_data_loaded (GObject *source,
382450
G_URI_FLAGS_NONE,
383451
NULL);
384452

453+
update_donation_rows (self, donation_urls);
454+
385455
self->uri_extensions = g_uri_resolve_relative ("https://extensions.gnome.org/",
386456
link,
387457
G_URI_FLAGS_NONE,
@@ -481,6 +551,12 @@ open_link (ExmDetailView *self,
481551
uri = gtk_uri_launcher_new (self->uri_extensions);
482552
else if (strcmp (action_name, "detail.open-homepage") == 0)
483553
uri = gtk_uri_launcher_new (self->uri_homepage);
554+
else if (strcmp (action_name, "detail.open-donation") == 0)
555+
{
556+
guint val;
557+
g_variant_get (param, "i", &val);
558+
uri = gtk_uri_launcher_new (self->uri_donations[val]);
559+
}
484560
else
485561
g_critical ("open_link() invalid action: %s", action_name);
486562

@@ -585,6 +661,7 @@ exm_detail_view_class_init (ExmDetailViewClass *klass)
585661
gtk_widget_class_bind_template_child (widget_class, ExmDetailView, ext_screenshot_popout_button);
586662
gtk_widget_class_bind_template_child (widget_class, ExmDetailView, ext_info_bar);
587663
gtk_widget_class_bind_template_child (widget_class, ExmDetailView, link_homepage);
664+
gtk_widget_class_bind_template_child (widget_class, ExmDetailView, links_donations);
588665
gtk_widget_class_bind_template_child (widget_class, ExmDetailView, link_extensions);
589666
gtk_widget_class_bind_template_child (widget_class, ExmDetailView, scroll_area);
590667
gtk_widget_class_bind_template_child (widget_class, ExmDetailView, comment_box);
@@ -597,6 +674,7 @@ exm_detail_view_class_init (ExmDetailViewClass *klass)
597674

598675
gtk_widget_class_install_action (widget_class, "detail.open-extensions", NULL, (GtkWidgetActionActivateFunc) open_link);
599676
gtk_widget_class_install_action (widget_class, "detail.open-homepage", NULL, (GtkWidgetActionActivateFunc) open_link);
677+
gtk_widget_class_install_action (widget_class, "detail.open-donation", "i", (GtkWidgetActionActivateFunc) open_link);
600678
}
601679

602680
static void

src/exm.gresource.xml.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
<gresource prefix="/com/mattjakeman/ExtensionManager/icons/scalable/actions">
2525
<file preprocess="xml-stripblanks" alias="clock-alt-symbolic.svg">../data/icons/hicolor/scalable/actions/clock-alt-symbolic.svg</file>
2626
<file preprocess="xml-stripblanks" alias="dialog-error-symbolic.svg">../data/icons/hicolor/scalable/actions/dialog-error-symbolic.svg</file>
27+
<file preprocess="xml-stripblanks" alias="donation-symbolic.svg">../data/icons/hicolor/scalable/actions/donation-symbolic.svg</file>
2728
<file preprocess="xml-stripblanks" alias="external-link-symbolic.svg">../data/icons/hicolor/scalable/actions/external-link-symbolic.svg</file>
2829
<file preprocess="xml-stripblanks" alias="globe-symbolic.svg">../data/icons/hicolor/scalable/actions/globe-symbolic.svg</file>
2930
<file preprocess="xml-stripblanks" alias="go-next-symbolic.svg">../data/icons/hicolor/scalable/actions/go-next-symbolic.svg</file>

src/web/model/exm-search-result.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ struct _ExmSearchResult
1414
gchar *icon;
1515
gchar *screenshot;
1616
gchar *url;
17+
gchar **donation_urls;
1718
gchar *link;
1819
gchar *description;
1920
int pk;
@@ -35,6 +36,7 @@ enum {
3536
PROP_ICON,
3637
PROP_SCREENSHOT,
3738
PROP_URL,
39+
PROP_DONATION_URLS,
3840
PROP_LINK,
3941
PROP_DESCRIPTION,
4042
PROP_PK,
@@ -89,6 +91,9 @@ exm_search_result_get_property (GObject *object,
8991
case PROP_URL:
9092
g_value_set_string (value, self->url);
9193
break;
94+
case PROP_DONATION_URLS:
95+
g_value_set_boxed (value, self->donation_urls);
96+
break;
9297
case PROP_LINK:
9398
g_value_set_string (value, self->link);
9499
break;
@@ -139,6 +144,9 @@ exm_search_result_set_property (GObject *object,
139144
case PROP_URL:
140145
self->url = g_value_dup_string (value);
141146
break;
147+
case PROP_DONATION_URLS:
148+
self->donation_urls = g_value_dup_boxed (value);
149+
break;
142150
case PROP_LINK:
143151
self->link = g_value_dup_string (value);
144152
break;
@@ -257,6 +265,13 @@ exm_search_result_class_init (ExmSearchResultClass *klass)
257265
NULL,
258266
G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY);
259267

268+
properties[PROP_DONATION_URLS] =
269+
g_param_spec_boxed ("donation_urls",
270+
"Donation URLs",
271+
"Donation URLs",
272+
G_TYPE_STRV,
273+
G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY);
274+
260275
properties [PROP_LINK] =
261276
g_param_spec_string ("link",
262277
"Link",

0 commit comments

Comments
 (0)