struct _SLAWrapperPrivate {
void *applet;
+ GdkPixmap *background_pixmap;
};
static void sla_wrapper_init(SLAWrapper *self);
static void sla_wrapper_init(SLAWrapper *self) {
GdkColormap *colormap = NULL;
+ self->priv = G_TYPE_INSTANCE_GET_PRIVATE(self, SLA_TYPE_WRAPPER);
+ self->priv->background_pixmap = NULL;
+
if ((colormap = gdk_screen_get_rgba_colormap(gdk_screen_get_default())) != NULL) {
gtk_widget_set_colormap(GTK_WIDGET(self), colormap);
}
g_type_class_add_private(klass, sizeof(SLAWrapperPrivate)); // Do I need this?
}
-static void sla_wrapper_finalize(GObject *object) {
-#if 0
- _SLAWrapperPrivate *priv = SLA_WRAPPER(object)->priv;
+static void sla_wrapper_finalize(GObject *self) {
+ SLAWrapperPrivate *priv = SLA_WRAPPER(self)->priv;
+ if (priv->background_pixmap != NULL) {
+ g_object_unref(priv->background_pixmap);
+ priv->background_pixmap = NULL;
+ }
+#if 0
free(priv->applet);
#endif
}
static gboolean sla_wrapper_expose(GtkWidget *widget, GdkEventExpose *event) {
if (GTK_WIDGET_DRAWABLE(widget)) {
+ cairo_t *cr;
+
+ SLAWrapperPrivate *priv = SLA_WRAPPER(widget)->priv;
+
+ if (priv->background_pixmap == NULL) {
+ priv->background_pixmap = gdk_pixmap_new(widget->window, SOME_WIDTH, SOME_HEIGHT, 32);
+
+ cr = gdk_cairo_create(priv->background_pixmap);
+
+ cairo_set_source_rgba(cr, OUR_R, OUR_G, OUR_B, OUR_A);
+ cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
+ cairo_paint(cr);
+ cairo_destroy(cr);
+ }
+
+ cr = gdk_cairo_create(widget->window);
+ gdk_cairo_set_source_pixmap(cr, priv->background_pixmap, 0, 0);
+
+ cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
+ cairo_paint(cr);
+ cairo_destroy(cr);
+
return GTK_WIDGET_CLASS(sla_wrapper_parent_class)->expose_event(widget, event);
} else {
return FALSE;