@@ -82,6 +82,7 @@ struct _ExmDetailView
8282
8383 AdwActionRow * link_homepage ;
8484 gchar * uri_homepage ;
85+ AdwActionRow * link_donation ;
8586 AdwExpanderRow * links_donations ;
8687 gchar * * uri_donations ;
8788 GList * donation_rows_list ;
@@ -340,7 +341,7 @@ new_donation_row (ExmDetailView *self,
340341 adw_preferences_row_set_title (ADW_PREFERENCES_ROW (row ), self -> uri_donations [num_donation ]);
341342 gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row ), TRUE);
342343
343- gtk_actionable_set_action_name (GTK_ACTIONABLE (row ), "detail.open-donation " );
344+ gtk_actionable_set_action_name (GTK_ACTIONABLE (row ), "detail.open-donations " );
344345 gtk_actionable_set_action_target_value (GTK_ACTIONABLE (row ), g_variant_new_int32 (num_donation ));
345346
346347 external_link_icon = gtk_image_new_from_icon_name ("external-link-symbolic" );
@@ -365,25 +366,41 @@ static void
365366update_donation_rows (ExmDetailView * self ,
366367 gchar * * donation_urls )
367368{
369+ guint n_urls ;
370+
371+ gtk_widget_set_visible (GTK_WIDGET (self -> link_donation ), FALSE);
368372 gtk_widget_set_visible (GTK_WIDGET (self -> links_donations ), FALSE);
369373 delete_donation_rows (self );
370374
371375 if (donation_urls == NULL || donation_urls [0 ] == NULL )
372376 return ;
373377
374- self -> uri_donations = g_new0 (gchar * , g_strv_length (donation_urls ));
378+ n_urls = g_strv_length (donation_urls );
379+
380+ self -> uri_donations = g_new0 (gchar * , n_urls );
375381
376- for (int i = 0 ; donation_urls [i ] != NULL ; i ++ )
382+ for (guint i = 0 ; donation_urls [i ] != NULL ; i ++ )
377383 {
378384 self -> uri_donations [i ] = g_uri_resolve_relative (donation_urls [i ],
379385 "" ,
380386 G_URI_FLAGS_NONE ,
381387 NULL );
382- new_donation_row (self , i );
383388 }
384389
385- adw_expander_row_set_expanded (self -> links_donations , FALSE);
386- gtk_widget_set_visible (GTK_WIDGET (self -> links_donations ), TRUE);
390+ if (n_urls == 1 )
391+ {
392+ adw_action_row_set_subtitle (self -> link_donation , self -> uri_donations [0 ]);
393+ gtk_actionable_set_action_name (GTK_ACTIONABLE (self -> link_donation ), "detail.open-donation" );
394+ gtk_widget_set_visible (GTK_WIDGET (self -> link_donation ), TRUE);
395+ }
396+ else
397+ {
398+ for (guint i = 0 ; donation_urls [i ] != NULL ; i ++ )
399+ new_donation_row (self , i );
400+
401+ adw_expander_row_set_expanded (self -> links_donations , FALSE);
402+ gtk_widget_set_visible (GTK_WIDGET (self -> links_donations ), TRUE);
403+ }
387404}
388405
389406static gchar *
@@ -782,12 +799,16 @@ open_link (ExmDetailView *self,
782799 {
783800 uri = gtk_uri_launcher_new (self -> uri_homepage );
784801 }
785- else if (strcmp (action_name , "detail.open-donation " ) == 0 )
802+ else if (strcmp (action_name , "detail.open-donations " ) == 0 )
786803 {
787804 guint val ;
788805 g_variant_get (param , "i" , & val );
789806 uri = gtk_uri_launcher_new (self -> uri_donations [val ]);
790807 }
808+ else if (strcmp (action_name , "detail.open-donation" ) == 0 )
809+ {
810+ uri = gtk_uri_launcher_new (self -> uri_donations [0 ]);
811+ }
791812 else
792813 {
793814 g_critical ("open_link() invalid action: %s" , action_name );
@@ -904,6 +925,7 @@ exm_detail_view_class_init (ExmDetailViewClass *klass)
904925 gtk_widget_class_bind_template_child (widget_class , ExmDetailView , session_modes_row );
905926 gtk_widget_class_bind_template_child (widget_class , ExmDetailView , session_modes_label );
906927 gtk_widget_class_bind_template_child (widget_class , ExmDetailView , link_homepage );
928+ gtk_widget_class_bind_template_child (widget_class , ExmDetailView , link_donation );
907929 gtk_widget_class_bind_template_child (widget_class , ExmDetailView , links_donations );
908930 gtk_widget_class_bind_template_child (widget_class , ExmDetailView , link_extensions );
909931 gtk_widget_class_bind_template_child (widget_class , ExmDetailView , scroll_area );
@@ -918,7 +940,8 @@ exm_detail_view_class_init (ExmDetailViewClass *klass)
918940 gtk_widget_class_install_action (widget_class , "detail.show-versions" , NULL , show_versions );
919941 gtk_widget_class_install_action (widget_class , "detail.open-extensions" , NULL , (GtkWidgetActionActivateFunc ) open_link );
920942 gtk_widget_class_install_action (widget_class , "detail.open-homepage" , NULL , (GtkWidgetActionActivateFunc ) open_link );
921- gtk_widget_class_install_action (widget_class , "detail.open-donation" , "i" , (GtkWidgetActionActivateFunc ) open_link );
943+ gtk_widget_class_install_action (widget_class , "detail.open-donations" , "i" , (GtkWidgetActionActivateFunc ) open_link );
944+ gtk_widget_class_install_action (widget_class , "detail.open-donation" , NULL , (GtkWidgetActionActivateFunc ) open_link );
922945}
923946
924947static void
0 commit comments