summaryrefslogtreecommitdiff
path: root/libnautilus-extensions
diff options
context:
space:
mode:
authorDarin Adler <darin@src.gnome.org>2000-08-05 02:18:44 +0000
committerDarin Adler <darin@src.gnome.org>2000-08-05 02:18:44 +0000
commitdeff23a86ee2c12a52ec89c52ed79d8113fd3362 (patch)
tree84bb1dd2bcd3acd48ff8069664d17852d9f6e4af /libnautilus-extensions
parent96f0134e0e63cf852c35020d110a5462fb0f6670 (diff)
downloadnautilus-deff23a86ee2c12a52ec89c52ed79d8113fd3362.tar.gz
Changed relayout so it will update the scroll region. This fixes bug 1907
* libnautilus-extensions/nautilus-icon-container.c: (relayout), (size_allocate), (finish_adding_new_icons), (nautilus_icon_container_set_zoom_level), (nautilus_icon_container_set_auto_layout): Changed relayout so it will update the scroll region. This fixes bug 1907 (layout options sometimes move icons out of window). * libnautilus/nautilus-clipboard.c: (add_menu_items_callback): Fix leak of remote UI handler. This fixes the rest of bug 1259, which was just a bug about the FIXME that said "remote UI handler leaks here, right?". * libnautilus-extensions/nautilus-directory-async.c: (lacks_info), (get_info_callback): Fixed infinite loop when you hit a file and you can't get info for it. Related to the bug Mike Fleming is looking at.
Diffstat (limited to 'libnautilus-extensions')
-rw-r--r--libnautilus-extensions/nautilus-directory-async.c7
-rw-r--r--libnautilus-extensions/nautilus-icon-container.c33
2 files changed, 17 insertions, 23 deletions
diff --git a/libnautilus-extensions/nautilus-directory-async.c b/libnautilus-extensions/nautilus-directory-async.c
index 54acd704f..ae18ae398 100644
--- a/libnautilus-extensions/nautilus-directory-async.c
+++ b/libnautilus-extensions/nautilus-directory-async.c
@@ -1391,7 +1391,8 @@ static gboolean
lacks_info (NautilusFile *file)
{
return file->details->info == NULL
- && !file->details->is_gone;
+ && !file->details->is_gone
+ && !file->details->get_info_failed;
}
static gboolean
@@ -2118,7 +2119,9 @@ get_info_callback (GnomeVFSAsyncHandle *handle,
directory->details->get_info_in_progress = NULL;
result = results->data;
- if (result->result == GNOME_VFS_OK) {
+ if (result->result != GNOME_VFS_OK) {
+ get_info_file->details->get_info_failed = TRUE;
+ } else {
nautilus_file_update_info (get_info_file, result->file_info);
nautilus_file_changed (get_info_file);
}
diff --git a/libnautilus-extensions/nautilus-icon-container.c b/libnautilus-extensions/nautilus-icon-container.c
index 149261189..4c28597e2 100644
--- a/libnautilus-extensions/nautilus-icon-container.c
+++ b/libnautilus-extensions/nautilus-icon-container.c
@@ -611,21 +611,18 @@ relayout (NautilusIconContainer *container)
{
finish_adding_new_icons (container);
- if (!container->details->auto_layout) {
- return;
- }
-
/* Don't do any re-laying-out during stretching. Later we
* might add smart logic that does this and leaves room for
* the stretched icon, but if we do it we want it to be fast
* and only re-lay-out when it's really needed.
*/
- if (container->details->drag_state == DRAG_STATE_STRETCH) {
- return;
+ if (container->details->auto_layout
+ && container->details->drag_state != DRAG_STATE_STRETCH) {
+ resort (container);
+ lay_down_icons (container, container->details->icons, 0);
}
- resort (container);
- lay_down_icons (container, container->details->icons, 0);
+ update_scroll_region (container);
}
static void
@@ -1664,18 +1661,12 @@ size_request (GtkWidget *widget,
}
static void
-world_width_changed (NautilusIconContainer *container, int new_width)
-{
- relayout (container);
- update_scroll_region (container);
-}
-
-static void
size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
NAUTILUS_CALL_PARENT_CLASS (GTK_WIDGET_CLASS, size_allocate, (widget, allocation));
- world_width_changed (NAUTILUS_ICON_CONTAINER (widget), widget->allocation.width);
+
+ relayout (NAUTILUS_ICON_CONTAINER (widget));
}
static void
@@ -2905,7 +2896,6 @@ finish_adding_new_icons (NautilusIconContainer *container)
/* Now the rest of the housekeeping. */
relayout (container);
- update_scroll_region (container);
}
static gboolean
@@ -3072,7 +3062,7 @@ nautilus_icon_container_set_zoom_level (NautilusIconContainer *container, int ne
nautilus_icon_container_request_update_all (container);
- world_width_changed (container, GTK_WIDGET (container)->allocation.width);
+ relayout (container);
}
/**
@@ -3519,12 +3509,13 @@ nautilus_icon_container_set_auto_layout (NautilusIconContainer *container,
container->details->auto_layout = auto_layout;
- if (auto_layout) {
- relayout (container);
- } else {
+ if (!auto_layout) {
reload_icon_positions (container);
nautilus_icon_container_freeze_icon_positions (container);
}
+
+ relayout (container);
+
gtk_signal_emit (GTK_OBJECT (container), signals[LAYOUT_CHANGED]);
}