summaryrefslogtreecommitdiff
path: root/libnautilus-extensions/nautilus-icon-container.c
diff options
context:
space:
mode:
authorAndy Hertzfeld <andy@src.gnome.org>2001-01-11 21:53:58 +0000
committerAndy Hertzfeld <andy@src.gnome.org>2001-01-11 21:53:58 +0000
commitdfaeb7a0c3a6c67a0bab54f57ff686563ba0e339 (patch)
treedf7716a9657cab6eac447396c9513b5794088ba6 /libnautilus-extensions/nautilus-icon-container.c
parent89567594485c3ae83131bc22bbf41aaa4fae3d64 (diff)
downloadnautilus-dfaeb7a0c3a6c67a0bab54f57ff686563ba0e339.tar.gz
fixed bug 5338, switching to and from "tighter layout" messes up icon
fixed bug 5338, switching to and from "tighter layout" messes up icon labels, by adding a call to invalidate an item's cached label size, and making the icon canvas invalidate the items when appropriate. This also fixes a similar problem when the anti-aliased mode changes. * libnautilus-extensions/nautilus-icon-canvas-item.c: (nautilus_icon_canvas_item_initialize), (nautilus_icon_canvas_item_invalidate_label_size), (nautilus_icon_canvas_item_set_arg): renamed internal invalidation routine to make it externally accessible * libnautilus-extensions/nautilus-icon-canvas-item.h: added nautilus_icon_canvas_item_invalidate_label_size * libnautilus-extensions/nautilus-icon-container.c: (invalidate_label_sizes), (nautilus_icon_container_set_anti_aliased_mode), (nautilus_icon_container_set_tighter_layout): added an invalidate_label_sizes routine and called it when tighter layout or the anti-aliased mode changes.
Diffstat (limited to 'libnautilus-extensions/nautilus-icon-container.c')
-rw-r--r--libnautilus-extensions/nautilus-icon-container.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/libnautilus-extensions/nautilus-icon-container.c b/libnautilus-extensions/nautilus-icon-container.c
index e5917df28..de21f75fb 100644
--- a/libnautilus-extensions/nautilus-icon-container.c
+++ b/libnautilus-extensions/nautilus-icon-container.c
@@ -1219,6 +1219,20 @@ button_event_modifies_selection (GdkEventButton *event)
return (event->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK)) != 0;
}
+/* invalidate the cached label sizes for all the icons */
+static void
+invalidate_label_sizes (NautilusIconContainer *container)
+{
+ GList *p;
+ NautilusIcon *icon;
+
+ for (p = container->details->icons; p != NULL; p = p->next) {
+ icon = p->data;
+
+ nautilus_icon_canvas_item_invalidate_label_size (icon->item);
+ }
+}
+
static gboolean
select_one_unselect_others (NautilusIconContainer *container,
NautilusIcon *icon_to_select)
@@ -3992,6 +4006,8 @@ nautilus_icon_container_set_anti_aliased_mode (NautilusIconContainer *container,
canvas = GNOME_CANVAS (container);
if (canvas->aa != anti_aliased_mode) {
canvas->aa = anti_aliased_mode;
+
+ invalidate_label_sizes (container);
nautilus_icon_container_request_update_all (container);
}
}
@@ -4492,6 +4508,7 @@ nautilus_icon_container_set_tighter_layout (NautilusIconContainer *container,
container->details->tighter_layout = tighter_layout;
+ invalidate_label_sizes (container);
redo_layout (container);
gtk_signal_emit (GTK_OBJECT (container), signals[LAYOUT_CHANGED]);