Main Page | Modules | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

plugin.h

Go to the documentation of this file.
00001 
00025 #ifndef _GAIM_PLUGIN_H_
00026 #define _GAIM_PLUGIN_H_
00027 
00028 #include <gmodule.h>
00029 #include "signals.h"
00030 #include "value.h"
00031 
00032 typedef struct _GaimPlugin           GaimPlugin;
00033 typedef struct _GaimPluginInfo       GaimPluginInfo;
00034 typedef struct _GaimPluginUiInfo     GaimPluginUiInfo;
00035 typedef struct _GaimPluginLoaderInfo GaimPluginLoaderInfo;
00036 
00037 typedef int GaimPluginPriority; 
00039 #include "pluginpref.h"
00040 
00044 typedef enum
00045 {
00046     GAIM_PLUGIN_UNKNOWN  = -1,  
00047     GAIM_PLUGIN_STANDARD = 0,   
00048     GAIM_PLUGIN_LOADER,         
00049     GAIM_PLUGIN_PROTOCOL        
00051 } GaimPluginType;
00052 
00053 #define GAIM_PRIORITY_DEFAULT     0
00054 #define GAIM_PRIORITY_HIGHEST  9999
00055 #define GAIM_PRIORITY_LOWEST  -9999
00056 
00057 #define GAIM_PLUGIN_FLAG_INVISIBLE 0x01
00058 
00059 #define GAIM_PLUGIN_API_VERSION 3
00060 #define GAIM_LOADER_API_VERSION 2
00061 
00067 struct _GaimPluginInfo
00068 {
00069     unsigned int api_version;
00070     GaimPluginType type;
00071     char *ui_requirement;
00072     unsigned long flags;
00073     GList *dependencies;
00074     GaimPluginPriority priority;
00075 
00076     char *id;
00077     char *name;
00078     char *version;
00079     char *summary;
00080     char *description;
00081     char *author;
00082     char *homepage;
00083 
00084     gboolean (*load)(GaimPlugin *plugin);
00085     gboolean (*unload)(GaimPlugin *plugin);
00086     void (*destroy)(GaimPlugin *plugin);
00087 
00088     void *ui_info;
00089     void *extra_info;
00090     void *prefs_info;
00091 };
00092 
00096 struct _GaimPluginLoaderInfo
00097 {
00098     unsigned int api_version;
00099 
00100     GList *exts;
00101 
00102     gboolean (*probe)(GaimPlugin *plugin);
00103     gboolean (*load)(GaimPlugin *plugin);
00104     gboolean (*unload)(GaimPlugin *plugin);
00105     void     (*destroy)(GaimPlugin *plugin);
00106 };
00107 
00111 struct _GaimPlugin
00112 {
00113     gboolean native_plugin;                
00114     gboolean loaded;                       
00115     void *handle;                          
00116     char *path;                            
00117     GaimPluginInfo *info;                  
00118     char *error;
00119     void *ipc_data;                        
00120     void *extra;                           
00121 };
00122 
00123 #define GAIM_PLUGIN_LOADER_INFO(plugin) \
00124     ((GaimPluginLoaderInfo *)(plugin)->info->extra_info)
00125 
00126 struct _GaimPluginUiInfo {
00127     GaimPluginPrefFrame *(*get_plugin_pref_frame)(GaimPlugin *plugin);
00128 
00129     void *iter;                                           
00130 };
00131 
00132 #define GAIM_PLUGIN_HAS_PREF_FRAME(plugin) \
00133     ((plugin)->info != NULL && (plugin)->info->prefs_info != NULL)
00134 
00135 #define GAIM_PLUGIN_UI_INFO(plugin) \
00136     ((GaimPluginUiInfo*)(plugin)->info->prefs_info)
00137 
00141 #if !defined(GAIM_PLUGINS) || defined(GAIM_STATIC_PRPL)
00142 # define GAIM_INIT_PLUGIN(pluginname, initfunc, plugininfo) \
00143     gboolean gaim_init_##pluginname##_plugin(void) { \
00144         GaimPlugin *plugin = gaim_plugin_new(TRUE, NULL); \
00145         plugin->info = &(plugininfo); \
00146         initfunc((plugin)); \
00147         return gaim_plugin_register(plugin); \
00148     }
00149 #else /* GAIM_PLUGINS  && !GAIM_STATIC_PRPL */
00150 # define GAIM_INIT_PLUGIN(pluginname, initfunc, plugininfo) \
00151     G_MODULE_EXPORT gboolean gaim_init_plugin(GaimPlugin *plugin) { \
00152         plugin->info = &(plugininfo); \
00153         initfunc((plugin)); \
00154         return gaim_plugin_register(plugin); \
00155     }
00156 #endif
00157 
00158 #ifdef __cplusplus
00159 extern "C" {
00160 #endif
00161 
00162 /**************************************************************************/
00164 /**************************************************************************/
00175 GaimPlugin *gaim_plugin_new(gboolean native, const char *path);
00176 
00188 GaimPlugin *gaim_plugin_probe(const char *filename);
00189 
00197 gboolean gaim_plugin_register(GaimPlugin *plugin);
00198 
00209 gboolean gaim_plugin_load(GaimPlugin *plugin);
00210 
00221 gboolean gaim_plugin_unload(GaimPlugin *plugin);
00222 
00233 gboolean gaim_plugin_reload(GaimPlugin *plugin);
00234 
00240 void gaim_plugin_destroy(GaimPlugin *plugin);
00241 
00249 gboolean gaim_plugin_is_loaded(const GaimPlugin *plugin);
00250 
00253 /**************************************************************************/
00255 /**************************************************************************/
00272 gboolean gaim_plugin_ipc_register(GaimPlugin *plugin, const char *command,
00273                                   GaimCallback func,
00274                                   GaimSignalMarshalFunc marshal,
00275                                   GaimValue *ret_value, int num_params, ...);
00276 
00283 void gaim_plugin_ipc_unregister(GaimPlugin *plugin, const char *command);
00284 
00290 void gaim_plugin_ipc_unregister_all(GaimPlugin *plugin);
00291 
00303 gboolean gaim_plugin_ipc_get_params(GaimPlugin *plugin, const char *command,
00304                                     GaimValue **ret_value, int *num_params,
00305                                     GaimValue ***params);
00306 
00318 void *gaim_plugin_ipc_call(GaimPlugin *plugin, const char *command,
00319                            gboolean *ok, ...);
00320 
00323 /**************************************************************************/
00325 /**************************************************************************/
00334 void gaim_plugins_set_search_paths(size_t count, char **paths);
00335 
00339 void gaim_plugins_unload_all(void);
00340 
00344 void gaim_plugins_destroy_all(void);
00345 
00352 void gaim_plugins_load_saved(const char *key);
00353 
00361 void gaim_plugins_probe(const char *ext);
00362 
00368 gboolean gaim_plugins_enabled(void);
00369 
00376 void gaim_plugins_register_probe_notify_cb(void (*func)(void *), void *data);
00377 
00383 void gaim_plugins_unregister_probe_notify_cb(void (*func)(void *));
00384 
00391 void gaim_plugins_register_load_notify_cb(void (*func)(GaimPlugin *, void *),
00392                                           void *data);
00393 
00399 void gaim_plugins_unregister_load_notify_cb(void (*func)(GaimPlugin *, void *));
00400 
00407 void gaim_plugins_register_unload_notify_cb(void (*func)(GaimPlugin *, void *),
00408                                             void *data);
00409 
00415 void gaim_plugins_unregister_unload_notify_cb(void (*func)(GaimPlugin *,
00416                                                            void *));
00417 
00425 GaimPlugin *gaim_plugins_find_with_name(const char *name);
00426 
00434 GaimPlugin *gaim_plugins_find_with_filename(const char *filename);
00435 
00443 GaimPlugin *gaim_plugins_find_with_basename(const char *basename);
00444 
00452 GaimPlugin *gaim_plugins_find_with_id(const char *id);
00453 
00459 GList *gaim_plugins_get_loaded(void);
00460 
00466 GList *gaim_plugins_get_protocols(void);
00467 
00473 GList *gaim_plugins_get_all(void);
00474 
00477 #ifdef __cplusplus
00478 }
00479 #endif
00480 
00481 #endif /* _GAIM_PLUGIN_H_ */

Generated on Tue Aug 3 17:36:34 2004 for gaim by doxygen 1.3.4