changeset 14725:62366c6a10eb

[gaim-migrate @ 17479] Make sure plugins are marked not-loadable if their ui-requirement can't be met. You are going to need to rebuild all the non-core plugins. The UI specific plugins for Gaim specifies their ui-requirement in the plugin structure. So it'd make sense to load such plugins only if the ui-requirement can be met. As it happens, gntgf (a gnt-plugin for gaim-text) can be loaded from Gaim, which has been reported to have caused Gaim to freeze. gntgf does mark itself as a gnt-plugin. So I think it should be upto libgaim to make sure plugins are marked not-loadable if the ui-requirements can not be met. This commit does exactly that. In doing so, it changes the string plugins use to specify their ui-requirement (the change is from "gtk" to GAIM_GTK_UI -- which is "gtk-gaim"). So this will require all the non-core plugins to be rebuilt. committer: Tailor Script <tailor@pidgin.im>
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Sat, 14 Oct 2006 05:29:11 +0000
parents d9bd8925efcc
children f93d632ac8d8
files console/gntplugin.h gtk/gtkplugin.h libgaim/plugin.c
diffstat 3 files changed, 13 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/console/gntplugin.h	Sat Oct 14 01:56:10 2006 +0000
+++ b/console/gntplugin.h	Sat Oct 14 05:29:11 2006 +0000
@@ -31,6 +31,8 @@
 
 #include <string.h>
 
+#include "gntgaim.h"
+
 /**********************************************************************
  * @name GNT Plugins API
  **********************************************************************/
@@ -39,7 +41,7 @@
 typedef GntWidget* (*GGPluginFrame) ();
 
 /* Guess where these came from */
-#define GAIM_GNT_PLUGIN_TYPE "gnt"
+#define GAIM_GNT_PLUGIN_TYPE GAIM_GNT_UI
 
 /**
  * Decide whether a plugin is a GNT-plugin.
--- a/gtk/gtkplugin.h	Sat Oct 14 01:56:10 2006 +0000
+++ b/gtk/gtkplugin.h	Sat Oct 14 05:29:11 2006 +0000
@@ -40,7 +40,7 @@
 	int page_num;                                         /**< Reserved */
 };
 
-#define GAIM_GTK_PLUGIN_TYPE "gtk"
+#define GAIM_GTK_PLUGIN_TYPE GAIM_GTK_UI
 
 #define GAIM_IS_GTK_PLUGIN(plugin) \
 	((plugin)->info != NULL && (plugin)->info->ui_info != NULL && \
--- a/libgaim/plugin.c	Sat Oct 14 01:56:10 2006 +0000
+++ b/libgaim/plugin.c	Sat Oct 14 05:29:11 2006 +0000
@@ -22,6 +22,7 @@
 #include "internal.h"
 
 #include "accountopt.h"
+#include "core.h"
 #include "dbus-maybe.h"
 #include "debug.h"
 #include "notify.h"
@@ -358,6 +359,14 @@
 		gaim_plugin_destroy(plugin);
 		return NULL;
 	}
+	else if (plugin->info->ui_requirement &&
+			strcmp(plugin->info->ui_requirement, gaim_core_get_ui()))
+	{
+		plugin->error = g_strdup_printf("The UI requirement for this plugin is not met.");
+		gaim_debug_error("plugins", "%s is not loadable: The UI requirement is not met.", plugin->path);
+		plugin->unloadable = TRUE;
+		return plugin;
+	}
 
 	/* Really old plugins. */
 	if (plugin->info->magic != GAIM_PLUGIN_MAGIC)