properly implemented sla_wrapper_settings
[simple-launcher] / applet-wrapper.cc
index 9ea7f11..4d4ec41 100644 (file)
@@ -23,7 +23,7 @@
 #include "simple-launcher.h"
 
 struct _SLAWrapperPrivate {
-  void *applet;
+  SimpleLauncherApplet *applet;
   GdkPixmap *background_pixmap;
 };
 
@@ -33,15 +33,19 @@ struct _SLAWrapperPrivate {
   static gboolean sla_wrapper_expose(GtkWidget *widget, GdkEventExpose *event);
   static void sla_wrapper_size_allocate(GtkWidget *widget, GtkAllocation *alloc);
   static void sla_wrapper_size_request(GtkWidget *widget, GtkRequisition *requisition);
+  static void sla_wrapper_make_background(GtkWidget *widget, SLAWrapperPrivate *priv);
+  static GtkWidget *sla_wrapper_settings(HildonDesktopHomeItem *applet, GtkWidget *parent);
 
 HD_DEFINE_PLUGIN(SLAWrapper, sla_wrapper, HILDON_DESKTOP_TYPE_HOME_ITEM)
 
 static void sla_wrapper_init(SLAWrapper *self) {
   GdkColormap *colormap = NULL;
 
-  self->priv = G_TYPE_INSTANCE_GET_PRIVATE(self, SLA_TYPE_WRAPPER);
+  self->priv = G_TYPE_INSTANCE_GET_PRIVATE(self, SLA_TYPE_APPLET, SLAWrapperPrivate);
   self->priv->background_pixmap = NULL;
 
+  self->priv->applet = new SimpleLauncherApplet(SL_APPLET_GCONF_PATH);
+
   if ((colormap = gdk_screen_get_rgba_colormap(gdk_screen_get_default())) != NULL) {
     gtk_widget_set_colormap(GTK_WIDGET(self), colormap);
   }
@@ -60,39 +64,62 @@ static void sla_wrapper_class_init(SLAWrapperClass *klass) {
   widget_class->size_allocate = sla_wrapper_size_allocate;
   widget_class->size_request = sla_wrapper_size_request;
 
+  HILDON_DESKTOP_HOME_ITEM_CLASS(klass)->settings = sla_wrapper_settings;
+
   g_type_class_add_private(klass, sizeof(SLAWrapperPrivate));   // Do I need this?
 }
 
 static void sla_wrapper_finalize(GObject *self) {
-  SLAWrapperPrivate *priv = SLA_WRAPPER(self)->priv;
+  SLAWrapperPrivate *priv = SLA_APPLET(self)->priv;
 
   if (priv->background_pixmap != NULL) {
     g_object_unref(priv->background_pixmap);
     priv->background_pixmap = NULL;
   }
-#if 0
-  free(priv->applet);
-#endif
+
+  if (priv->applet != NULL) {
+    delete priv->applet;
+  }
 }
 
-static gboolean sla_wrapper_expose(GtkWidget *widget, GdkEventExpose *event) {
-  if (GTK_WIDGET_DRAWABLE(widget)) {
-    cairo_t *cr;
+static GtkWidget *sla_wrapper_settings(HildonDesktopHomeItem *self, GtkWidget *parent) {
+  if (GTK_IS_WINDOW(parent)) {
+    SLAWrapperPrivate *priv = SLA_APPLET(self)->priv;
 
-    SLAWrapperPrivate *priv = SLA_WRAPPER(widget)->priv;
+    return priv->applet->settings(GTK_WINDOW(parent));
+  } else {
+    return NULL;
+  }
+}
 
-    if (priv->background_pixmap == NULL) {
-      priv->background_pixmap = gdk_pixmap_new(widget->window, SOME_WIDTH, SOME_HEIGHT, 32);
+static void sla_wrapper_make_background(GtkWidget *widget, SLAWrapperPrivate *priv) {
+  if (priv->background_pixmap != NULL) {
+    g_object_unref(priv->background_pixmap);
+    priv->background_pixmap = NULL;
+  }
+
+  priv->background_pixmap = gdk_pixmap_new(widget->window, priv->applet->getWidth(), priv->applet->getHeight(), 32);
+
+  cairo_t *cr = gdk_cairo_create(priv->background_pixmap);
+  double red, green, blue, alpha;
+
+  priv->applet->getBackgroundColour(red, green, blue, alpha);
+
+  cairo_set_source_rgba(cr, red, green, blue, alpha);
+  cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
+  cairo_paint(cr);
+  cairo_destroy(cr);
+}
 
-      cr = gdk_cairo_create(priv->background_pixmap);
+static gboolean sla_wrapper_expose(GtkWidget *widget, GdkEventExpose *event) {
+  if (GTK_WIDGET_DRAWABLE(widget)) {
+    SLAWrapperPrivate *priv = SLA_APPLET(widget)->priv;
 
-      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);
+    if (priv->background_pixmap == NULL) {
+      sla_wrapper_make_background(widget, priv);
     }
 
-    cr = gdk_cairo_create(widget->window);
+    cairo_t *cr = gdk_cairo_create(widget->window);
     gdk_cairo_set_source_pixmap(cr, priv->background_pixmap, 0, 0);
 
     cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
@@ -110,10 +137,12 @@ static void sla_wrapper_size_allocate(GtkWidget *widget, GtkAllocation *alloc) {
 }
 
 static void sla_wrapper_size_request(GtkWidget *widget, GtkRequisition *requisition) {
-#if 0
-  requisition->width = our_desired_width;
-  requisition->height = our_desired_height;
-#endif
+  if (GTK_WIDGET_DRAWABLE(widget)) {
+    SLAWrapperPrivate *priv = SLA_APPLET(widget)->priv;
+
+    requisition->width = priv->applet->getWidth();
+    requisition->height = priv->applet->getHeight();
+  }
 }
 
 // vim:ts=2:sw=2:et