1 2 #ifndef PLUGIN_H 3 #define PLUGIN_H 4 #include <gmodule.h> 5 6 7 #include <gtk/gtk.h> 8 #include <gdk/gdk.h> 9 #include <stdio.h> 10 #include "panel.h" 11 12 extern struct _plugin_instance *stam; 13 14 typedef struct { 15 /* common */ 16 char *fname; 17 int count; 18 GModule *gmodule; 19 20 int dynamic : 1; 21 int invisible : 1; 22 /* these fields are pointers to the data within loaded dll */ 23 char *type; 24 char *name; 25 char *version; 26 char *description; 27 int priv_size; 28 29 int (*constructor)(struct _plugin_instance *this); 30 void (*destructor)(struct _plugin_instance *this); 31 void (*save_config)(struct _plugin_instance *this, FILE *fp); 32 GtkWidget *(*edit_config)(struct _plugin_instance *this); 33 } plugin_class; 34 35 #define PLUGIN_CLASS(class) ((plugin_class *) class) 36 37 typedef struct _plugin_instance{ 38 plugin_class *class; 39 panel *panel; 40 xconf *xc; 41 GtkWidget *pwid; 42 int expand; 43 int padding; 44 int border; 45 } plugin_instance; 46 47 void class_put(char *name); 48 gpointer class_get(char *name); 49 /* if plugin_instance is external it will load its dll */ 50 plugin_instance * plugin_load(char *type); 51 void plugin_put(plugin_instance *this); 52 int plugin_start(plugin_instance *this); 53 void plugin_stop(plugin_instance *this); 54 GtkWidget *default_plugin_instance_edit_config(plugin_instance *pl); 55 56 void class_register(plugin_class *p); 57 void class_unregister(plugin_class *p); 58 59 #ifdef PLUGIN 60 static plugin_class *class_ptr; 61 static void ctor(void) __attribute__ ((constructor)); ctor(void)62static void ctor(void) { class_register(class_ptr); } 63 static void dtor(void) __attribute__ ((destructor)); dtor(void)64static void dtor(void) { class_unregister(class_ptr); } 65 #endif 66 67 #endif 68