[gtk+/icon-view-refactor: 11/13] Restored the old GtkIconView guess for wrap-width/width size of text cell
- From: Tristan Van Berkom <tvb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/icon-view-refactor: 11/13] Restored the old GtkIconView guess for wrap-width/width size of text cell
- Date: Wed, 5 Jan 2011 12:58:54 +0000 (UTC)
commit 59f5003061ba09af5cd925a8beec49b04a3c561b
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date: Tue Dec 14 15:37:42 2010 +0900
Restored the old GtkIconView guess for wrap-width/width size of text cell
GtkIconView sets the minimum width of the text cell to be at least 50
pixels and otherwise twice the width of the first pixbuf cell found
in the icon list.
gtk/gtkiconview.c | 35 +++++++++++++++++++++++++++++++----
1 files changed, 31 insertions(+), 4 deletions(-)
---
diff --git a/gtk/gtkiconview.c b/gtk/gtkiconview.c
index f74ed54..5116602 100644
--- a/gtk/gtkiconview.c
+++ b/gtk/gtkiconview.c
@@ -1162,6 +1162,8 @@ gtk_icon_view_dispose (GObject *object)
if (priv->cell_area)
{
+ gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
+
g_signal_handler_disconnect (priv->cell_area, priv->add_editable_id);
g_signal_handler_disconnect (priv->cell_area, priv->remove_editable_id);
priv->add_editable_id = 0;
@@ -1352,8 +1354,6 @@ gtk_icon_view_destroy (GtkWidget *widget)
{
GtkIconView *icon_view = GTK_ICON_VIEW (widget);
- gtk_cell_area_stop_editing (icon_view->priv->cell_area, TRUE);
-
gtk_icon_view_set_model (icon_view, NULL);
if (icon_view->priv->layout_idle_id != 0)
@@ -2770,6 +2770,31 @@ gtk_icon_view_set_adjustment_upper (GtkAdjustment *adj,
}
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 void
gtk_icon_view_layout (GtkIconView *icon_view)
{
GtkAllocation allocation;
@@ -2793,8 +2818,10 @@ gtk_icon_view_layout (GtkIconView *icon_view)
item_width = icon_view->priv->item_width;
- /* Update the context widths for any invalidated
- * items */
+ /* Update the wrap width for the text cell before going and requesting sizes */
+ adjust_wrap_width (icon_view);
+
+ /* Update the context widths for any invalidated items */
gtk_icon_view_cache_widths (icon_view);
/* Fetch the new item width if needed */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]