GdkRGBA background;
gboolean background_set;
+
+ gulong size_changed_id;
};
gint *minimum_size,
gint *natural_size);
+static void context_size_changed_cb (GtkCellAreaContext *context,
+ GParamSpec *pspec,
+ GtkWidget *view);
+
+
static GtkBuildableIface *parent_buildable_iface;
enum
if (!priv->context)
priv->context = gtk_cell_area_create_context (priv->area);
+ priv->size_changed_id =
+ g_signal_connect (priv->context, "notify",
+ G_CALLBACK (context_size_changed_cb), view);
+
return object;
}
{
GtkCellView *cellview = GTK_CELL_VIEW (object);
- gtk_cell_view_cell_layout_clear (GTK_CELL_LAYOUT (cellview));
-
if (cellview->priv->model)
{
g_object_unref (cellview->priv->model);
if (cellview->priv->context)
{
+ g_signal_handler_disconnect (cellview->priv->context, cellview->priv->size_changed_id);
+
g_object_unref (cellview->priv->context);
cellview->priv->context = NULL;
+ cellview->priv->size_changed_id = 0;
}
G_OBJECT_CLASS (gtk_cell_view_parent_class)->dispose (object);
return cellview->priv->area;
}
+static void
+context_size_changed_cb (GtkCellAreaContext *context,
+ GParamSpec *pspec,
+ GtkWidget *view)
+{
+ if (!strcmp (pspec->name, "minimum-width") ||
+ !strcmp (pspec->name, "natural-width") ||
+ !strcmp (pspec->name, "minimum-height") ||
+ !strcmp (pspec->name, "natural-height"))
+ gtk_widget_queue_resize (view);
+}
+
+
/**
* gtk_cell_view_new:
*
GtkCellView *cellview = GTK_CELL_VIEW (widget);
GtkCellViewPrivate *priv = cellview->priv;
+ g_signal_handler_block (priv->context, priv->size_changed_id);
+
if (cellview->priv->displayed_row)
gtk_cell_view_set_cell_data (cellview);
gtk_cell_area_get_preferred_width (priv->area, priv->context, widget, NULL, NULL);
gtk_cell_area_context_sum_preferred_width (priv->context);
gtk_cell_area_context_get_preferred_width (priv->context, minimum_size, natural_size);
+
+ g_signal_handler_unblock (priv->context, priv->size_changed_id);
}
static void
GtkCellView *cellview = GTK_CELL_VIEW (widget);
GtkCellViewPrivate *priv = cellview->priv;
+ g_signal_handler_block (priv->context, priv->size_changed_id);
+
if (cellview->priv->displayed_row)
gtk_cell_view_set_cell_data (cellview);
gtk_cell_area_get_preferred_height (priv->area, priv->context, widget, NULL, NULL);
gtk_cell_area_context_sum_preferred_height (priv->context);
gtk_cell_area_context_get_preferred_height (priv->context, minimum_size, natural_size);
+
+ g_signal_handler_unblock (priv->context, priv->size_changed_id);
}
static void