Modified webpage: now tinymail repository is in gitorious.
[modest] / src / widgets / modest-vbox-cell-renderer.c
index 323dce0..e711f5c 100644 (file)
@@ -31,7 +31,7 @@
 
 #include <glib/gi18n-lib.h>
 
-#include <gtk/gtkwidget.h>
+#include <gtk/gtk.h>
 
 #include <modest-text-utils.h>
 #include <modest-vbox-cell-renderer.h>
@@ -183,7 +183,13 @@ modest_vbox_cell_renderer_append (ModestVBoxCellRenderer *vbox_renderer,
        
        priv->renderers_list = g_list_append (priv->renderers_list, cell);
        g_object_set_data (G_OBJECT (cell), RENDERER_EXPAND_ATTRIBUTE, GINT_TO_POINTER (expand));
+
+#if GLIB_CHECK_VERSION(2, 10, 0) /* g_object_ref_sink() was added in glib 2.10: */
        g_object_ref_sink (G_OBJECT (cell));
+#else
+       g_object_ref (G_OBJECT (cell));
+       gtk_object_sink (GTK_OBJECT (cell));
+#endif
 }
 
 static void 
@@ -197,6 +203,8 @@ modest_vbox_cell_renderer_get_size     (GtkCellRenderer       *cell,
 {
        gint calc_width, calc_height;
        gint full_width, full_height;
+       guint xpad, ypad;
+       gfloat xalign, yalign;
        GList *node;
        ModestVBoxCellRendererPrivate *priv = MODEST_VBOX_CELL_RENDERER_GET_PRIVATE (cell);
 
@@ -215,18 +223,25 @@ modest_vbox_cell_renderer_get_size     (GtkCellRenderer       *cell,
                }
        }
 
-       full_width = (gint) cell->xpad * 2 + calc_width;
-       full_height = (gint) cell->ypad * 2 + calc_height;
+       g_object_get (cell,
+                      "xpad", &xpad,
+                      "ypad", &ypad,
+                      "xalign", &xalign,
+                      "yalign", &yalign,
+                      NULL);
+
+       full_width = (gint) xpad * 2 + calc_width;
+       full_height = (gint) ypad * 2 + calc_height;
 
        if (rectangle && calc_width > 0 && calc_height > 0) {
                if (x_offset) {
                        *x_offset = (((gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) ?
-                                     (1.0 - cell->xalign) : cell->xalign) *
+                                     (1.0 - xalign) : xalign) *
                                     (rectangle->width - full_width));
                        *x_offset = MAX (*x_offset, 0);
                }
                if (y_offset) {
-                       *y_offset = ((cell->yalign) *
+                       *y_offset = ((yalign) *
                                     (rectangle->height - full_height));
                        *y_offset = MAX (*y_offset, 0);
                }
@@ -259,14 +274,11 @@ modest_vbox_cell_renderer_render       (GtkCellRenderer       *cell,
        GList *node = NULL;
        GtkCellRenderer *child;
        gint height, extra;
-       GtkRequisition req;
        
        direction = gtk_widget_get_direction (widget);
        nvis_children = 0;
        nexpand_children = 0;
 
-       /* first, retrieve the requisition of the children cell renderers */
-       modest_vbox_cell_renderer_get_size (cell, widget, NULL, NULL, NULL, &(req.width), &(req.height));
 
        /* Counts visible and expandable children cell renderers */
        for (node = priv->renderers_list; node != NULL; node = g_list_next (node)) {
@@ -288,6 +300,9 @@ modest_vbox_cell_renderer_render       (GtkCellRenderer       *cell,
                GdkRectangle child_alloc;
 
                if (nexpand_children > 0) {
+                       GtkRequisition req;
+                       
+                       modest_vbox_cell_renderer_get_size (cell, widget, NULL, NULL, NULL, &(req.width), &(req.height));
                        height = cell_area->height - req.height;
                        extra = height / nexpand_children;
                } else {