summaryrefslogtreecommitdiff
path: root/libnautilus-extensions/nautilus-icon-container.c
diff options
context:
space:
mode:
authorArik Devens <arik@src.gnome.org>2001-02-26 10:00:16 +0000
committerArik Devens <arik@src.gnome.org>2001-02-26 10:00:16 +0000
commit03dfe78ed9ab00dd9685fce4358d2acd1fe7833f (patch)
treea73188efa5a3c9eee942722ea719924e01bdfcb6 /libnautilus-extensions/nautilus-icon-container.c
parent8b9ea85e5fffff9c67d2203219eec2634783bb2d (diff)
downloadnautilus-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.c33
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