![]() |
![]() |
![]() |
Panel Applet Library Reference Manual | ![]() |
---|
An example is worth a million words, so here is a simple one:
Example 1. Hello World applet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <gtk/gtk.h> #include <panel-applet.h> static gboolean hello_world_applet_start (PanelApplet *applet) { GtkWidget *label; label = gtk_label_new ("Hello World"); gtk_container_add (GTK_CONTAINER (applet), label); gtk_widget_show_all (GTK_WIDGET (applet)); return TRUE; } static gboolean hello_world_factory_callback (PanelApplet *applet, const gchar *iid, gpointer data) { gboolean retval = FALSE; if (g_strcmp0 (iid, "HelloWorldApplet") == 0) retval = hello_world_applet_start (applet); return retval; } PANEL_APPLET_OUT_PROCESS_FACTORY ("HelloWorldFactory", PANEL_TYPE_APPLET, hello_world_factory_callback, NULL) |
Here are the few things that are important in this example:
PANEL_APPLET_OUT_PROCESS_FACTORY()
: this creates an applet factory named HelloWorldFactory
, and each time this applet factory will create an applet instance, it will call hello_world_factory_callback()
with a PanelApplet object already created.
hello_world_factory_callback()
: this checks if the request to create an applet instance is for an applet type supported by the applet factory. Here we can see that we only support the HelloWorldApplet
applet type. This function returns TRUE
on success and FALSE
on failures.
hello_world_applet_start()
: this is where we actually setup the PanelApplet widget for the work the applet should do. This can include filling the widget, connecting to signals, etc.
While the previous example is simple, it can be useful to directly subclass the PanelApplet type. This makes it easy to have a per-applet instance private structure, among other benefits.
Example 2. Hello World applet, with a PanelApplet subclass
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
#include <gtk/gtk.h> #include <panel-applet.h> #define HELLO_WORLD_TYPE_APPLET (hello_world_applet_get_type ()) typedef struct _HelloWorldApplet HelloWorldApplet; typedef struct _HelloWorldAppletClass HelloWorldAppletClass; typedef struct _HelloWorldAppletPrivate HelloWorldAppletPrivate; struct _HelloWorldApplet { PanelApplet parent_object; /*< private >*/ HelloWorldAppletPrivate *priv; }; struct _HelloWorldAppletClass { PanelAppletClass parent_class; }; struct _HelloWorldAppletPrivate { GtkWidget *label; }; static GType hello_world_applet_get_type (void) G_GNUC_CONST; G_DEFINE_TYPE (HelloWorldApplet, hello_world_applet, PANEL_TYPE_APPLET); static void hello_world_applet_init (HelloWorldApplet *applet) { applet->priv = G_TYPE_INSTANCE_GET_PRIVATE (applet, HELLO_WORLD_TYPE_APPLET, HelloWorldAppletPrivate); applet->priv->label = gtk_label_new ("Hello World"); gtk_container_add (GTK_CONTAINER (applet), applet->priv->label); gtk_widget_show (applet->priv->label); } static void hello_world_applet_class_init (HelloWorldAppletClass *klass) { g_type_class_add_private (class, sizeof (HelloWorldAppletPrivate)); } static gboolean hello_world_applet_start (HelloWorldApplet *applet) { gtk_widget_show (GTK_WIDGET (applet)); return TRUE; } static gboolean hello_world_factory_callback (HelloWorldApplet *applet, const gchar *iid, gpointer data) { gboolean retval = FALSE; if (g_strcmp0 (iid, "HelloWorldApplet") == 0) retval = hello_world_applet_start (applet); return retval; } PANEL_APPLET_OUT_PROCESS_FACTORY ("HelloWorldFactory", HELLO_WORLD_TYPE_APPLET, (PanelAppletFactoryCallback) hello_world_factory_callback, NULL) |