[Xfce4-commits] [apps/parole] 01/01: Store module active state based on use/unuse count

noreply at xfce.org noreply at xfce.org
Thu Apr 4 03:38:09 CEST 2019


This is an automated email from the git hooks/post-receive script.

b   l   u   e   s   a   b   r   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository apps/parole.

commit adafa226e35c8eb2ef4ec59b6298b6725afa74e9
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Wed Apr 3 21:38:03 2019 -0400

    Store module active state based on use/unuse count
---
 src/parole-module.c          | 19 ++++++++++++++++++-
 src/parole-module.h          |  5 +++++
 src/parole-plugins-manager.c |  8 ++++----
 3 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/src/parole-module.c b/src/parole-module.c
index 8dd20f6..1ac522e 100644
--- a/src/parole-module.c
+++ b/src/parole-module.c
@@ -94,7 +94,6 @@ parole_module_load(GTypeModule *gtype_module) {
     TRACE("Loading module %s", gtype_module->name);
 
     module->provider_type = (*module->initialize) (module);
-    module->active = TRUE;
 
     TRACE("Finished loading module %s", gtype_module->name);
 
@@ -116,9 +115,27 @@ parole_module_unload(GTypeModule *gtype_module) {
     module->shutdown = NULL;
     module->library = NULL;
     module->provider_type = G_TYPE_INVALID;
+    module->use_count = 0;
     module->active = FALSE;
 }
 
+gboolean parole_provider_module_use(ParoleProviderModule *module) {
+    if (g_type_module_use(G_TYPE_MODULE(module))) {
+        module->use_count++;
+        module->active = TRUE;
+        return TRUE;
+    }
+    return FALSE;
+}
+
+void parole_provider_module_unuse(ParoleProviderModule *module) {
+    module->use_count--;
+    if (module->use_count == 0) {
+        module->active = FALSE;
+    }
+}
+
+
 static void
 parole_provider_module_class_init(ParoleProviderModuleClass *klass) {
     GTypeModuleClass *gtype_module_class;
diff --git a/src/parole-module.h b/src/parole-module.h
index 2354f2a..30a8357 100644
--- a/src/parole-module.h
+++ b/src/parole-module.h
@@ -56,6 +56,8 @@ struct _ParoleProviderModule {
     gboolean                active;
     gpointer                instance;
     gchar                  *desktop_file;
+
+    gulong                  use_count;
 };
 
 struct _ParoleProviderModuleClass {
@@ -74,6 +76,9 @@ void                        parole_provider_module_free_plugin     (ParoleProvid
 
 gboolean                    parole_provider_module_get_is_active   (ParoleProviderModule *module);
 
+gboolean                    parole_provider_module_use             (ParoleProviderModule *module);
+void                        parole_provider_module_unuse           (ParoleProviderModule *module);
+
 G_END_DECLS
 
 #endif /* SRC_PAROLE_MODULE_H_ */
diff --git a/src/parole-plugins-manager.c b/src/parole-plugins-manager.c
index 68d8f28..123a709 100644
--- a/src/parole-plugins-manager.c
+++ b/src/parole-plugins-manager.c
@@ -249,19 +249,19 @@ parole_plugins_manager_cell_toggled_cb(GtkCellRendererToggle *cell_renderer,
 
         if ( pref->manager->priv->load_plugins ) {
             if ( active ) {
-                g_type_module_use(G_TYPE_MODULE(module));
+                parole_provider_module_use(module);
                 if (!parole_provider_module_new_plugin(module)) {
                     // If plugin loading fails...
                     parole_dialog_error(GTK_WINDOW(pref->window),
                         _("Plugin failed to load"),
                         _("Please check your installation"));
                     parole_provider_module_free_plugin(module);
-                    g_type_module_unuse(G_TYPE_MODULE(module));
+                    parole_provider_module_unuse(module);
                     active = FALSE;
                 }
             } else {
                 parole_provider_module_free_plugin(module);
-                g_type_module_unuse(G_TYPE_MODULE(module));
+                parole_provider_module_unuse(module);
             }
         }
 
@@ -524,7 +524,7 @@ parole_plugins_manager_load_plugins(ParolePluginsManager *manager) {
             if ( !g_strcmp0 (plugins_rc[i], module->name) ||
                  !g_strcmp0(plugins_rc[i], PAROLE_PROVIDER_MODULE(module)->library_name) ) {
                 TRACE("Loading plugin :%s", module->name);
-                if ( !g_type_module_use(module) ) {
+                if ( !parole_provider_module_use (PAROLE_PROVIDER_MODULE(module)) ) {
                     parole_plugins_manager_save_rc(manager, module->name, FALSE);
                     g_ptr_array_remove(manager->priv->array, module);
                     g_object_unref(module);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list