forked from AuroraMiddleware/gtk
iconview: Move wrap width adjustment to size request code
This commit is contained in:
parent
f51c9d4154
commit
e8eeb39d98
@ -1360,6 +1360,30 @@ gtk_icon_view_get_n_items (GtkIconView *icon_view)
|
|||||||
return gtk_tree_model_iter_n_children (priv->model, NULL);
|
return gtk_tree_model_iter_n_children (priv->model, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
adjust_wrap_width (GtkIconView *icon_view)
|
||||||
|
{
|
||||||
|
if (icon_view->priv->text_cell)
|
||||||
|
{
|
||||||
|
gint wrap_width = 50;
|
||||||
|
|
||||||
|
/* Here we go with the same old guess, try the icon size and set double
|
||||||
|
* the size of the first icon found in the list, naive but works much
|
||||||
|
* of the time */
|
||||||
|
if (icon_view->priv->items && icon_view->priv->pixbuf_cell)
|
||||||
|
{
|
||||||
|
gtk_cell_renderer_get_preferred_width (icon_view->priv->pixbuf_cell,
|
||||||
|
GTK_WIDGET (icon_view),
|
||||||
|
&wrap_width, NULL);
|
||||||
|
|
||||||
|
wrap_width = MAX (wrap_width * 2, 50);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_object_set (icon_view->priv->text_cell, "wrap-width", wrap_width, NULL);
|
||||||
|
g_object_set (icon_view->priv->text_cell, "width", wrap_width, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
cell_area_get_preferred_size (GtkIconView *icon_view,
|
cell_area_get_preferred_size (GtkIconView *icon_view,
|
||||||
GtkCellAreaContext *context,
|
GtkCellAreaContext *context,
|
||||||
@ -1430,6 +1454,8 @@ gtk_icon_view_get_preferred_item_size (GtkIconView *icon_view,
|
|||||||
GtkIconViewItem *item = items->data;
|
GtkIconViewItem *item = items->data;
|
||||||
|
|
||||||
_gtk_icon_view_set_cell_data (icon_view, item);
|
_gtk_icon_view_set_cell_data (icon_view, item);
|
||||||
|
if (items == priv->items)
|
||||||
|
adjust_wrap_width (icon_view);
|
||||||
cell_area_get_preferred_size (icon_view, context, orientation, for_size, NULL, NULL);
|
cell_area_get_preferred_size (icon_view, context, orientation, for_size, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2753,31 +2779,6 @@ gtk_icon_view_adjustment_changed (GtkAdjustment *adjustment,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
adjust_wrap_width (GtkIconView *icon_view)
|
|
||||||
{
|
|
||||||
if (icon_view->priv->text_cell)
|
|
||||||
{
|
|
||||||
gint wrap_width = 50;
|
|
||||||
|
|
||||||
/* Here we go with the same old guess, try the icon size and set double
|
|
||||||
* the size of the first icon found in the list, naive but works much
|
|
||||||
* of the time */
|
|
||||||
if (icon_view->priv->items && icon_view->priv->pixbuf_cell)
|
|
||||||
{
|
|
||||||
_gtk_icon_view_set_cell_data (icon_view, icon_view->priv->items->data);
|
|
||||||
gtk_cell_renderer_get_preferred_width (icon_view->priv->pixbuf_cell,
|
|
||||||
GTK_WIDGET (icon_view),
|
|
||||||
&wrap_width, NULL);
|
|
||||||
|
|
||||||
wrap_width = MAX (wrap_width * 2, 50);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_object_set (icon_view->priv->text_cell, "wrap-width", wrap_width, NULL);
|
|
||||||
g_object_set (icon_view->priv->text_cell, "width", wrap_width, NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static gint
|
static gint
|
||||||
compare_sizes (gconstpointer p1,
|
compare_sizes (gconstpointer p1,
|
||||||
gconstpointer p2,
|
gconstpointer p2,
|
||||||
@ -2801,10 +2802,6 @@ gtk_icon_view_layout (GtkIconView *icon_view)
|
|||||||
|
|
||||||
n_items = gtk_icon_view_get_n_items (icon_view);
|
n_items = gtk_icon_view_get_n_items (icon_view);
|
||||||
|
|
||||||
/* Update the wrap width for the text cell before going and requesting sizes */
|
|
||||||
if (n_items)
|
|
||||||
adjust_wrap_width (icon_view);
|
|
||||||
|
|
||||||
gtk_icon_view_compute_n_items_for_size (icon_view,
|
gtk_icon_view_compute_n_items_for_size (icon_view,
|
||||||
GTK_ORIENTATION_HORIZONTAL,
|
GTK_ORIENTATION_HORIZONTAL,
|
||||||
gtk_widget_get_allocated_width (widget),
|
gtk_widget_get_allocated_width (widget),
|
||||||
|
Loading…
Reference in New Issue
Block a user