[gnome-builder] plugins: handle G_TYPE_INVALID more gracefully



commit 7c72c5dc993a0d4aa5d5c32f1a855ed51496f05e
Author: Christian Hergert <chergert redhat com>
Date:   Fri Jan 19 22:31:25 2018 -0800

    plugins: handle G_TYPE_INVALID more gracefully

 src/libide/plugins/ide-extension-adapter.c     |  6 ++++--
 src/libide/plugins/ide-extension-set-adapter.c | 14 +++++++++-----
 2 files changed, 13 insertions(+), 7 deletions(-)
---
diff --git a/src/libide/plugins/ide-extension-adapter.c b/src/libide/plugins/ide-extension-adapter.c
index 1d92ca957..851f32cee 100644
--- a/src/libide/plugins/ide-extension-adapter.c
+++ b/src/libide/plugins/ide-extension-adapter.c
@@ -120,8 +120,9 @@ ide_extension_adapter_reload (IdeExtensionAdapter *self)
 
   g_assert (IDE_IS_MAIN_THREAD ());
   g_assert (IDE_IS_EXTENSION_ADAPTER (self));
+  g_assert (self->interface_type != G_TYPE_INVALID);
 
-  if (!self->engine || !self->key || !self->value || self->interface_type == G_TYPE_INVALID)
+  if (!self->engine || !self->key || !self->value)
     {
       ide_extension_adapter_set_extension (self, NULL, NULL);
       return;
@@ -515,7 +516,8 @@ ide_extension_adapter_set_value (IdeExtensionAdapter *self,
     {
       g_free (self->value);
       self->value = g_strdup (value);
-      ide_extension_adapter_reload (self);
+      if (self->interface_type != G_TYPE_INVALID)
+        ide_extension_adapter_reload (self);
       g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_VALUE]);
     }
 }
diff --git a/src/libide/plugins/ide-extension-set-adapter.c b/src/libide/plugins/ide-extension-set-adapter.c
index efab423dc..fc53e4cd1 100644
--- a/src/libide/plugins/ide-extension-set-adapter.c
+++ b/src/libide/plugins/ide-extension-set-adapter.c
@@ -175,6 +175,9 @@ ide_extension_set_adapter_reload (IdeExtensionSetAdapter *self)
       PeasPluginInfo *plugin_info = plugins->data;
       gint priority;
 
+      if (!peas_plugin_info_is_loaded (plugin_info))
+        continue;
+
       if (peas_engine_provides_extension (self->engine, plugin_info, self->interface_type))
         watch_extension (self, plugin_info, self->interface_type);
 
@@ -185,7 +188,7 @@ ide_extension_set_adapter_reload (IdeExtensionSetAdapter *self)
                                              self->value,
                                              &priority))
         {
-          if (!g_hash_table_lookup (self->extensions, plugin_info))
+          if (!g_hash_table_contains (self->extensions, plugin_info))
             {
               PeasExtension *exten;
 
@@ -221,6 +224,7 @@ ide_extension_set_adapter_reload (IdeExtensionSetAdapter *self)
             remove_extension (self, plugin_info, exten);
         }
     }
+
   g_signal_emit (self, signals [EXTENSIONS_LOADED], 0);
 }
 
@@ -248,10 +252,10 @@ ide_extension_set_adapter_queue_reload (IdeExtensionSetAdapter *self)
 
   dzl_clear_source (&self->reload_handler);
 
-  if (self->interface_type == G_TYPE_INVALID)
-    return;
-
-  self->reload_handler = g_timeout_add (0, ide_extension_set_adapter_do_reload, self);
+  self->reload_handler = g_idle_add_full (G_PRIORITY_HIGH,
+                                          ide_extension_set_adapter_do_reload,
+                                          self,
+                                          NULL);
 }
 
 static void


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