--- a/gplugin-gtk/gplugin-gtk-store.c Thu Nov 07 21:33:40 2019 -0600
+++ b/gplugin-gtk/gplugin-gtk-store.c Thu Nov 07 22:07:30 2019 -0600
@@ -110,11 +110,72 @@
gplugin_manager_free_plugin_list(plugins);
+gplugin_gtk_store_update_plugin_state_cb(GtkTreeModel *model, GtkTreePath *path, + GtkTreeIter *iter, gpointer data) + GPluginPlugin *plugin_a = GPLUGIN_PLUGIN(data); + GPluginPlugin *plugin_b = NULL; + GPLUGIN_GTK_STORE_PLUGIN_COLUMN, &plugin_b, + if(plugin_a == plugin_b) { + gboolean loaded = gplugin_plugin_get_state(plugin_a) == GPLUGIN_PLUGIN_STATE_LOADED; + GTK_LIST_STORE(model), iter, + GPLUGIN_GTK_STORE_LOADED_COLUMN, loaded, + /* tell gplugin_gtk_store_update_plugin_state that we're done */ + g_object_unref(G_OBJECT(plugin_b)); +gplugin_gtk_store_update_plugin_state(GPluginGtkStore *store, + gtk_tree_model_foreach( + gplugin_gtk_store_update_plugin_state_cb, /******************************************************************************
+ *****************************************************************************/ +gplugin_gtk_store_plugin_loaded_cb(GObject *manager, GPluginPlugin *plugin, + gplugin_gtk_store_update_plugin_state(GPLUGIN_GTK_STORE(data), plugin); +gplugin_gtk_store_plugin_unloaded_cb(GObject *manager, GPluginPlugin *plugin, + gplugin_gtk_store_update_plugin_state(GPLUGIN_GTK_STORE(data), plugin); +/****************************************************************************** + * GObject Implementation *****************************************************************************/
gplugin_gtk_store_constructed(GObject *obj) {
+ GObject *manager = NULL; G_OBJECT_CLASS(gplugin_gtk_store_parent_class)->constructed(obj);
@@ -124,6 +185,12 @@
gplugin_gtk_store_add_plugin_by_id(GPLUGIN_GTK_STORE(obj),
+ manager = gplugin_manager_get_instance(); + g_signal_connect(manager, "loaded-plugin", + G_CALLBACK(gplugin_gtk_store_plugin_loaded_cb), obj); + g_signal_connect(manager, "unloaded-plugin", + G_CALLBACK(gplugin_gtk_store_plugin_unloaded_cb), obj); --- a/gplugin-gtk/gplugin-gtk-view.c Thu Nov 07 21:33:40 2019 -0600
+++ b/gplugin-gtk/gplugin-gtk-view.c Thu Nov 07 22:07:30 2019 -0600
@@ -74,7 +74,6 @@
GtkTreeModel *model = NULL;
GtkTreePath *tree_path = NULL;
- gboolean loaded = FALSE;
tree_path = gtk_tree_path_new_from_string(path);
@@ -97,22 +96,17 @@
if(state == GPLUGIN_PLUGIN_STATE_LOADED) {
- gboolean unloaded = gplugin_manager_unload_plugin(plugin, &error);
+ gplugin_manager_unload_plugin(plugin, &error); g_warning("Failed to unload plugin: %s", error->message);
- /* if unload failed, unloaded is set to false, which mean the plugin is
- * still loaded. So we set loaded to the negated value of unloaded.
- loaded = gplugin_manager_load_plugin(plugin, &error);
+ gplugin_manager_load_plugin(plugin, &error); g_warning("Failed to load plugin: %s", error->message);
@@ -120,13 +114,6 @@
- GPLUGIN_GTK_STORE_LOADED_COLUMN, loaded,
/******************************************************************************
--- a/gplugin/gplugin-manager.c Thu Nov 07 21:33:40 2019 -0600
+++ b/gplugin/gplugin-manager.c Thu Nov 07 22:07:30 2019 -0600
@@ -974,7 +974,6 @@
* GPluginManager::loaded-plugin:
* @manager: the #gpluginpluginmanager instance. treat as a #gobject.
* @plugin: the #gpluginplugin that's about to be loaded.
- * @error: return address for a #gerror.
* emitted after a plugin is loaded.
@@ -1034,7 +1033,6 @@
* GPluginManager::unloaded-plugin:
* @manager: the #gpluginpluginmanager instance. treat as a #gobject.
* @plugin: the #gpluginplugin that's about to be loaded.
- * @error: return address for a #gerror.
* emitted after a plugin is unloaded.