summaryrefslogtreecommitdiff
path: root/libnautilus-private/nautilus-file-operations-progress.c
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@gnu.org>2002-03-11 15:57:14 +0000
committerAnders Carlsson <andersca@src.gnome.org>2002-03-11 15:57:14 +0000
commit376977b17c5a9aae655f595eff36645c53bda5c2 (patch)
treed3efb20c0cd9098985c6eb89f9912e731bf3a9a0 /libnautilus-private/nautilus-file-operations-progress.c
parent31cfe051116b5a50599b3a1497f2c8ddd86719f9 (diff)
downloadnautilus-376977b17c5a9aae655f595eff36645c53bda5c2.tar.gz
Add progress jar feature; the progress dialog icon now looks like a jar
2002-03-11 Anders Carlsson <andersca@gnu.org> * libnautilus-private/nautilus-file-operations-progress-icons.h: * libnautilus-private/nautilus-file-operations-progress.c: (nautilus_file_operations_progress_update_icon), (nautilus_file_operations_progress_update), (nautilus_file_operations_progress_init), (nautilus_file_operations_progress_class_init): Add progress jar feature; the progress dialog icon now looks like a jar that fills up as the files is copied. This idea was suggested by Tuomas Kuosmanen.
Diffstat (limited to 'libnautilus-private/nautilus-file-operations-progress.c')
-rw-r--r--libnautilus-private/nautilus-file-operations-progress.c53
1 files changed, 50 insertions, 3 deletions
diff --git a/libnautilus-private/nautilus-file-operations-progress.c b/libnautilus-private/nautilus-file-operations-progress.c
index 70208cdfe..471928ad3 100644
--- a/libnautilus-private/nautilus-file-operations-progress.c
+++ b/libnautilus-private/nautilus-file-operations-progress.c
@@ -39,8 +39,8 @@
#include <gtk/gtkstock.h>
#include <gtk/gtktable.h>
#include <libgnome/gnome-i18n.h>
-#include <libgnomeui/gnome-stock-icons.h>
#include <libgnomevfs/gnome-vfs-utils.h>
+#include "nautilus-file-operations-progress-icons.h"
/* The default width of the progress dialog. It will be wider
* only if the font is really huge and the fixed labels don't
@@ -53,6 +53,8 @@
#define MINIMUM_TIME_UP 1000
+static GdkPixbuf *empty_jar_pixbuf, *full_jar_pixbuf;
+
static void nautilus_file_operations_progress_class_init (NautilusFileOperationsProgressClass *klass);
static void nautilus_file_operations_progress_init (NautilusFileOperationsProgress *dialog);
@@ -83,13 +85,44 @@ struct NautilusFileOperationsProgressDetails {
gint64 start_time;
guint delayed_close_timeout_id;
+
+ int progress_jar_position;
};
/* Private functions. */
static void
+nautilus_file_operations_progress_update_icon (NautilusFileOperationsProgress *progress,
+ double fraction)
+{
+ GdkPixbuf *pixbuf;
+ int position;
+
+ position = gdk_pixbuf_get_height (empty_jar_pixbuf) * (1 - fraction);
+
+ if (position == progress->details->progress_jar_position) {
+ return;
+ }
+
+ progress->details->progress_jar_position = position;
+
+ pixbuf = gdk_pixbuf_copy (empty_jar_pixbuf);
+ gdk_pixbuf_copy_area (full_jar_pixbuf,
+ 0, position,
+ gdk_pixbuf_get_width (pixbuf), gdk_pixbuf_get_height (pixbuf) - position,
+ pixbuf,
+ 0, position);
+
+ gtk_window_set_icon (GTK_WINDOW (progress), pixbuf);
+ g_object_unref (pixbuf);
+}
+
+
+static void
nautilus_file_operations_progress_update (NautilusFileOperationsProgress *progress)
{
+ double fraction;
+
if (progress->details->bytes_total == 0) {
/* We haven't set up the file count yet, do not update
* the progress bar until we do.
@@ -97,10 +130,13 @@ nautilus_file_operations_progress_update (NautilusFileOperationsProgress *progre
return;
}
+ fraction = (double)progress->details->bytes_copied /
+ progress->details->bytes_total;
+
gtk_progress_bar_set_fraction
(GTK_PROGRESS_BAR (progress->details->progress_bar),
- (double) progress->details->bytes_copied /
- progress->details->bytes_total);
+ fraction);
+ nautilus_file_operations_progress_update_icon (progress, fraction);
}
static void
@@ -260,6 +296,12 @@ nautilus_file_operations_progress_init (NautilusFileOperationsProgress *progress
&progress->details->to_path_label);
gtk_box_pack_start (vbox, GTK_WIDGET (titled_label_table), FALSE, FALSE, 0);
+
+ /* Set window icon */
+ gtk_window_set_icon (GTK_WINDOW (progress), empty_jar_pixbuf);
+
+ /* Set progress jar position */
+ progress->details->progress_jar_position = gdk_pixbuf_get_height (empty_jar_pixbuf);
}
static void
@@ -289,6 +331,11 @@ nautilus_file_operations_progress_class_init (NautilusFileOperationsProgressClas
widget_class->map = map_callback;
dialog_class->close = close_callback;
+
+ /* Load the jar pixbufs */
+ empty_jar_pixbuf = gdk_pixbuf_new_from_inline (-1, progress_jar_empty_icon, FALSE, NULL);
+ full_jar_pixbuf = gdk_pixbuf_new_from_inline (-1, progress_jar_full_icon, FALSE, NULL);
+
}
NautilusFileOperationsProgress *