gplugin/gplugin

3075aaa51b17
Parents 47d715f222bc
Children 2dedd64d03b9
Fix some issues we found in GPluginGtk in Pidgin

* GPluginGtkInfo needs to make sure it has a plugin before trying to work with
it.
* GPluginGtkStore needs to use g_signal_connect_object as it's passing itself
as a data parameter to signals from GPluginManager.

Testing Done:
Compiled and debugged via a subproject in pidgin.

Reviewed at https://reviews.imfreedom.org/r/454/
--- a/gplugin-gtk/gplugin-gtk-plugin-info.c Sun Jan 03 00:51:25 2021 -0600
+++ b/gplugin-gtk/gplugin-gtk-plugin-info.c Tue Jan 26 01:26:06 2021 -0600
@@ -311,7 +311,7 @@
{
GPluginGtkPluginInfo *info = GPLUGIN_GTK_PLUGIN_INFO(obj);
- if(info->signal_id != 0) {
+ if(info->signal_id != 0 && GPLUGIN_IS_PLUGIN(info->plugin)) {
g_signal_handler_disconnect(G_OBJECT(info->plugin), info->signal_id);
}
@@ -457,7 +457,7 @@
info->signal_id = 0;
}
- if(g_set_object(&info->plugin, plugin)) {
+ if(g_set_object(&info->plugin, plugin) && GPLUGIN_IS_PLUGIN(plugin)) {
_gplugin_gtk_plugin_info_refresh(info);
/* Connect a signal to refresh when the plugin's state changes. We
--- a/gplugin-gtk/gplugin-gtk-store.c Sun Jan 03 00:51:25 2021 -0600
+++ b/gplugin-gtk/gplugin-gtk-store.c Tue Jan 26 01:26:06 2021 -0600
@@ -242,21 +242,24 @@
g_list_free(ids);
manager = gplugin_manager_get_instance();
- g_signal_connect(
+ g_signal_connect_object(
manager,
"loaded-plugin",
G_CALLBACK(gplugin_gtk_store_plugin_loaded_cb),
- obj);
- g_signal_connect(
+ obj,
+ 0);
+ g_signal_connect_object(
manager,
"unloaded-plugin",
G_CALLBACK(gplugin_gtk_store_plugin_unloaded_cb),
- obj);
- g_signal_connect(
+ obj,
+ 0);
+ g_signal_connect_object(
manager,
"unload-plugin-failed",
G_CALLBACK(gplugin_gtk_store_plugin_unload_failed_cb),
- obj);
+ obj,
+ 0);
}
static void