diff options
author | Arik Devens <arik@src.gnome.org> | 2001-02-26 10:00:16 +0000 |
---|---|---|
committer | Arik Devens <arik@src.gnome.org> | 2001-02-26 10:00:16 +0000 |
commit | 03dfe78ed9ab00dd9685fce4358d2acd1fe7833f (patch) | |
tree | a73188efa5a3c9eee942722ea719924e01bdfcb6 /libnautilus-extensions/nautilus-icon-container.c | |
parent | 8b9ea85e5fffff9c67d2203219eec2634783bb2d (diff) | |
download | nautilus-03dfe78ed9ab00dd9685fce4358d2acd1fe7833f.tar.gz |
Partial fix for bug 5701. Moved icon stretching to an idle handler to both speed it up a bit and stop it from growing then freezing then jumping to a new size. Will do more after 1.0.
Diffstat (limited to 'libnautilus-extensions/nautilus-icon-container.c')
-rw-r--r-- | libnautilus-extensions/nautilus-icon-container.c | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/libnautilus-extensions/nautilus-icon-container.c b/libnautilus-extensions/nautilus-icon-container.c index a9e8ecba3..45f3d159a 100644 --- a/libnautilus-extensions/nautilus-icon-container.c +++ b/libnautilus-extensions/nautilus-icon-container.c @@ -2287,6 +2287,10 @@ destroy (GtkObject *object) if (container->details->idle_id != 0) { gtk_idle_remove (container->details->idle_id); } + + if (container->details->stretch_idle_id != 0) { + gtk_idle_remove (container->details->stretch_idle_id); + } for (i = 0; i < NAUTILUS_N_ELEMENTS (container->details->label_font); i++) { if (container->details->label_font[i] != NULL) @@ -2596,9 +2600,8 @@ start_stretching (NautilusIconContainer *container) return TRUE; } -static void -continue_stretching (NautilusIconContainer *container, - int window_x, int window_y) +static gboolean +update_stretch_at_idle (NautilusIconContainer *container) { NautilusIconContainerDetails *details; NautilusIcon *icon; @@ -2609,11 +2612,12 @@ continue_stretching (NautilusIconContainer *container, icon = details->stretch_icon; if (icon == NULL) { - return; + container->details->stretch_idle_id = 0; + return FALSE; } gnome_canvas_window_to_world (GNOME_CANVAS (container), - window_x, window_y, + details->window_x, details->window_y, &world_x, &world_y); gnome_canvas_w2c (GNOME_CANVAS (container), world_x, world_y, @@ -2628,6 +2632,25 @@ continue_stretching (NautilusIconContainer *container, icon_set_position (icon, world_x, world_y); icon_set_size (container, icon, stretch_state.icon_size, FALSE); + + container->details->stretch_idle_id = 0; + + return FALSE; +} + +static void +continue_stretching (NautilusIconContainer *container, + int window_x, int window_y) +{ + + g_return_if_fail (NAUTILUS_IS_ICON_CONTAINER (container)); + + container->details->window_x = window_x; + container->details->window_y = window_y; + + if (container->details->stretch_idle_id == 0) { + container->details->stretch_idle_id = gtk_idle_add ((GtkFunction) update_stretch_at_idle, container); + } } static void |