static void gtk_icon_view_context_changed (GtkCellAreaContext *context,
GParamSpec *pspec,
GtkIconView *icon_view);
+static void update_text_cell (GtkIconView *icon_view);
+static void update_pixbuf_cell (GtkIconView *icon_view);
/* Source side drag signals */
static void gtk_icon_view_drag_begin (GtkWidget *widget,
(GFunc)gtk_icon_view_item_invalidate_size, NULL);
/* Reset the context */
- g_signal_handler_block (icon_view->priv->cell_area_context,
- icon_view->priv->context_changed_id);
- gtk_cell_area_context_reset (icon_view->priv->cell_area_context);
- g_signal_handler_unblock (icon_view->priv->cell_area_context,
- icon_view->priv->context_changed_id);
+ if (icon_view->priv->cell_area_context)
+ {
+ g_signal_handler_block (icon_view->priv->cell_area_context,
+ icon_view->priv->context_changed_id);
+ gtk_cell_area_context_reset (icon_view->priv->cell_area_context);
+ g_signal_handler_unblock (icon_view->priv->cell_area_context,
+ icon_view->priv->context_changed_id);
+ }
/* Re-layout the items */
gtk_icon_view_queue_layout (icon_view);
if (gtk_tree_path_get_depth (path) > 1)
return;
- gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
+ /* An icon view subclass might add it's own model and populate
+ * things at init() time instead of waiting for the constructor()
+ * to be called
+ */
+ if (icon_view->priv->cell_area)
+ gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
/* Here we can use a "grow-only" strategy for optimization
* and only invalidate a single item and queue a relayout
priv->context_changed_id =
g_signal_connect (priv->cell_area_context, "notify",
G_CALLBACK (gtk_icon_view_context_changed), icon_view);
+
+ update_text_cell (icon_view);
+ update_pixbuf_cell (icon_view);
}
static GtkCellArea *
static void
update_text_cell (GtkIconView *icon_view)
{
+ if (!icon_view->priv->cell_area)
+ return;
+
if (icon_view->priv->text_column == -1 &&
icon_view->priv->markup_column == -1)
{
static void
update_pixbuf_cell (GtkIconView *icon_view)
{
+ if (!icon_view->priv->cell_area)
+ return;
+
if (icon_view->priv->pixbuf_column == -1)
{
if (icon_view->priv->pixbuf_cell != NULL)
icon_view->priv->text_column = column;
}
-
- gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
+ if (icon_view->priv->cell_area)
+ gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
update_text_cell (icon_view);
icon_view->priv->markup_column = column;
}
- gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
+ if (icon_view->priv->cell_area)
+ gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
update_text_cell (icon_view);
icon_view->priv->pixbuf_column = column;
}
- gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
+ if (icon_view->priv->cell_area)
+ gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
update_pixbuf_cell (icon_view);
{
icon_view->priv->item_orientation = orientation;
- if (GTK_IS_ORIENTABLE (icon_view->priv->cell_area))
- gtk_orientable_set_orientation (GTK_ORIENTABLE (icon_view->priv->cell_area),
- icon_view->priv->item_orientation);
+ if (icon_view->priv->cell_area)
+ {
+ if (GTK_IS_ORIENTABLE (icon_view->priv->cell_area))
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (icon_view->priv->cell_area),
+ icon_view->priv->item_orientation);
+
+ gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
+ }
- gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
gtk_icon_view_invalidate_sizes (icon_view);
update_text_cell (icon_view);
{
icon_view->priv->item_width = item_width;
- gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
+ if (icon_view->priv->cell_area)
+ gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
+
gtk_icon_view_invalidate_sizes (icon_view);
update_text_cell (icon_view);
{
icon_view->priv->spacing = spacing;
- gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
+ if (icon_view->priv->cell_area)
+ gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
+
gtk_icon_view_invalidate_sizes (icon_view);
-
+
g_object_notify (G_OBJECT (icon_view), "spacing");
}
}
{
icon_view->priv->row_spacing = row_spacing;
- gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
+ if (icon_view->priv->cell_area)
+ gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
+
gtk_icon_view_invalidate_sizes (icon_view);
-
+
g_object_notify (G_OBJECT (icon_view), "row-spacing");
}
}
{
icon_view->priv->column_spacing = column_spacing;
- gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
+ if (icon_view->priv->cell_area)
+ gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
+
gtk_icon_view_invalidate_sizes (icon_view);
-
+
g_object_notify (G_OBJECT (icon_view), "column-spacing");
}
}
{
icon_view->priv->margin = margin;
- gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
+ if (icon_view->priv->cell_area)
+ gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
+
gtk_icon_view_invalidate_sizes (icon_view);
-
+
g_object_notify (G_OBJECT (icon_view), "margin");
}
}
{
icon_view->priv->item_padding = item_padding;
- gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
+ if (icon_view->priv->cell_area)
+ gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
+
gtk_icon_view_invalidate_sizes (icon_view);
-
+
g_object_notify (G_OBJECT (icon_view), "item-padding");
}
}