[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