[gnome-builder] flatpak: Reload preferences addin on installation changes



commit 99f180e2badd85fcf9d404bf0d1d20fcca90dbbb
Author: Matthew Leeds <mleeds redhat com>
Date:   Sun Apr 23 14:19:51 2017 -0500

    flatpak: Reload preferences addin on installation changes
    
    Since the application addin is already monitoring the flatpak
    installations for changes, the preferences addin can just connect to a
    signal and reload whenever the app addin reloads. This means the flatpak
    SDKs list in the Preferences pane will stay up to date.

 plugins/flatpak/gbp-flatpak-application-addin.c |   18 ++++++++++++++++++
 plugins/flatpak/gbp-flatpak-preferences-addin.c |   20 ++++++++++++++++++--
 2 files changed, 36 insertions(+), 2 deletions(-)
---
diff --git a/plugins/flatpak/gbp-flatpak-application-addin.c b/plugins/flatpak/gbp-flatpak-application-addin.c
index c8a554a..9b326e5 100644
--- a/plugins/flatpak/gbp-flatpak-application-addin.c
+++ b/plugins/flatpak/gbp-flatpak-application-addin.c
@@ -73,6 +73,7 @@ typedef struct
 
 enum {
   RUNTIME_ADDED,
+  RELOAD,
   N_SIGNALS
 };
 
@@ -282,6 +283,8 @@ gbp_flatpak_application_addin_reload (GbpFlatpakApplicationAddin *self)
         }
     }
 
+  g_signal_emit (self, signals[RELOAD], 0);
+
   IDE_EXIT;
 }
 
@@ -767,6 +770,21 @@ gbp_flatpak_application_addin_class_init (GbpFlatpakApplicationAddinClass *klass
                                           0,
                                           NULL, NULL, NULL,
                                           G_TYPE_NONE, 1, FLATPAK_TYPE_INSTALLED_REF);
+
+  /**
+   * GbpFlatpakApplicationAddin::reload:
+   * @self: An #GbpFlatpakApplicationAddin
+   *
+   * This signal is emitted when the addin reloads, which is generally
+   * triggered by one of the flatpak installations changing, so other
+   * components can indirectly monitor that.
+   */
+  signals [RELOAD] = g_signal_new ("reload",
+                                   G_TYPE_FROM_CLASS (klass),
+                                   G_SIGNAL_RUN_LAST,
+                                   0,
+                                   NULL, NULL, NULL,
+                                   G_TYPE_NONE, 0);
 }
 
 static void
diff --git a/plugins/flatpak/gbp-flatpak-preferences-addin.c b/plugins/flatpak/gbp-flatpak-preferences-addin.c
index 1473c61..82fe1f8 100644
--- a/plugins/flatpak/gbp-flatpak-preferences-addin.c
+++ b/plugins/flatpak/gbp-flatpak-preferences-addin.c
@@ -101,8 +101,6 @@ create_row (GbpFlatpakPreferencesAddin *self,
   if (gbp_flatpak_application_addin_has_runtime (app_addin, name, arch, branch))
     gtk_button_set_label (GTK_BUTTON (button), _("Update"));
 
-  /* TODO: Update label after transfer completes */
-
   gtk_container_add (GTK_CONTAINER (box), button);
 
   return box;
@@ -340,10 +338,21 @@ gbp_flatpak_preferences_addin_reload (GbpFlatpakPreferencesAddin *self)
 }
 
 static void
+app_addin_reload (GbpFlatpakPreferencesAddin *self,
+                  GbpFlatpakApplicationAddin *app_addin)
+{
+  g_assert (GBP_IS_FLATPAK_PREFERENCES_ADDIN (self));
+  g_assert (GBP_IS_FLATPAK_APPLICATION_ADDIN (app_addin));
+
+  gbp_flatpak_preferences_addin_reload (self);
+}
+
+static void
 gbp_flatpak_preferences_addin_load (IdePreferencesAddin *addin,
                                     IdePreferences      *preferences)
 {
   GbpFlatpakPreferencesAddin *self = (GbpFlatpakPreferencesAddin *)addin;
+  GbpFlatpakApplicationAddin *app_addin;
 
   IDE_ENTRY;
 
@@ -355,6 +364,13 @@ gbp_flatpak_preferences_addin_load (IdePreferencesAddin *addin,
 
   ide_preferences_add_list_group (preferences, "sdk", "flatpak-runtimes", _("Flatpak Runtimes"), 
GTK_SELECTION_NONE, 0);
 
+  app_addin = gbp_flatpak_application_addin_get_default ();
+  g_signal_connect_object (app_addin,
+                           "reload",
+                           G_CALLBACK (app_addin_reload),
+                           self,
+                           G_CONNECT_SWAPPED);
+
   gbp_flatpak_preferences_addin_reload (self);
 
   IDE_EXIT;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]