Commit 58b097ec authored by Darin Adler's avatar Darin Adler

Make file operations progress dialog always stay up for at least 1

	second total so it doesn't just appear and disappear.

	Preparing for a fix to the nautilus-adapter process leaking when
	Nautilus is terminated by Ctrl-C, I cleaned up some of the code
	inside the adapter.

	Improved the warning you get when neither /etc/mnttab nor
	/proc/mounts can be opened.

	Fix bug 6888 (when I view a large image, it appears first at 100%,
	then zoomed to fit).

	Re-added part of the code to make components go away when the main
	program that is hosting them goes away. The X-window-based
	solution is not working as well as I had hoped, so I'm re-adding
	the 20-second-timeout-based solution.

	* components/adapter/nautilus-adapter-embed-strategy.c:
	(nautilus_adapter_embed_strategy_initialize_class),
	(nautilus_adapter_embed_strategy_get),
	(nautilus_adapter_embed_strategy_emit_open_location): Change the
	strategy new functions to use more-normal reference rules. The
	caller no longer expects them to "use up" a reference.

	* components/adapter/nautilus-adapter-control-embed-strategy.c:
	(nautilus_adapter_control_embed_strategy_destroy),
	(nautilus_adapter_control_embed_strategy_new): Don't keep a
	reference to the BonoboControl around after creating the frame.

	* components/adapter/nautilus-adapter-embeddable-embed-strategy.c:
	(nautilus_adapter_embeddable_embed_strategy_destroy),
	(nautilus_adapter_embeddable_embed_strategy_new): Don't keep a
	reference to the BonoboEmeddable around after creating the frame.

	* components/image-viewer/nautilus-image-view.c: (redraw_control),
	(scrolled_window_size_allocate_callback),
	(control_factory_common), (init_bonobo_image_generic_factory):
	Some name changes, and a fix so that we don't show the image first
	at 100%, and then shrink to fit. The downside is that this might
	be too hard-coded to the current behavior of Nautilus, but it's
	better than flashing every time you open an image.

	* components/services/trilobite/utils/.cvsignore: Ignore some
	files in this new directory.

	* libnautilus-extensions/nautilus-file-operations-progress.h:
	* libnautilus-extensions/nautilus-file-operations-progress.c:
	(nautilus_file_operations_progress_update), (close_callback),
	(nautilus_file_operations_progress_destroy), (map_callback),
	(delete_event_callback),
	(nautilus_file_operations_progress_initialize),
	(nautilus_file_operations_progress_initialize_class),
	(nautilus_file_operations_progress_new),
	(nautilus_file_operations_progress_set_total),
	(nautilus_file_operations_progress_set_operation_string),
	(nautilus_file_operations_progress_new_file),
	(nautilus_file_operations_progress_clear),
	(nautilus_file_operations_progress_update_sizes),
	(delayed_close_callback), (nautilus_file_operations_progress_done):
	Did a lot of code cleanups throughout the file, and added a new
	call nautilus_file_operations_progress_done. Use this instead of
	gtk_object_destroy so that the window can linger long enough for
	the user to see it, if a copy was really fast.

	* libnautilus-extensions/nautilus-file-operations.c:
	(transfer_info_destroy), (parent_for_error_dialog),
	(create_transfer_dialog), (handle_transfer_ok),
	(handle_transfer_vfs_error): Change to use the new
	nautilus_file_operations_progress_done call instead of
	gtk_object_destroy when done with the progress dialog.

	* libnautilus-extensions/nautilus-icon-container.c:
	(nautilus_icon_container_update_scroll_region): Fix indentation.

	* libnautilus-extensions/nautilus-volume-monitor.c:
	(get_current_mount_list): Replace cryptic g_return_if_fail message
	with better-worded g_warning.

	* libnautilus/nautilus-view.c: (set_frame_callback),
	(widget_destroyed_callback),
	(nautilus_view_construct_from_bonobo_control): Re-added code to
	monitor the lifetime of the frame and self-destruct when the frame
	goes away. The X-window-based solution wasn't working 100%, and
	this solution does.

	* src/nautilus-sidebar.c: (toggle_sidebar_panel),
	(sidebar_for_each_sidebar_panel): Change object data key to use a
	prefix that includes the word "nautilus". Tweak code that builds
	the menu so that it always includes any panel that's displayed,
	even if the user level says it shouldn't be there.
parent 59362aff
2001-04-02 Darin Adler <darin@eazel.com>
Make file operations progress dialog always stay up for at least 1
second total so it doesn't just appear and disappear.
Preparing for a fix to the nautilus-adapter process leaking when
Nautilus is terminated by Ctrl-C, I cleaned up some of the code
inside the adapter.
Improved the warning you get when neither /etc/mnttab nor
/proc/mounts can be opened.
Fix bug 6888 (when I view a large image, it appears first at 100%,
then zoomed to fit).
Re-added part of the code to make components go away when the main
program that is hosting them goes away. The X-window-based
solution is not working as well as I had hoped, so I'm re-adding
the 20-second-timeout-based solution.
* components/adapter/nautilus-adapter-embed-strategy.c:
(nautilus_adapter_embed_strategy_initialize_class),
(nautilus_adapter_embed_strategy_get),
(nautilus_adapter_embed_strategy_emit_open_location): Change the
strategy new functions to use more-normal reference rules. The
caller no longer expects them to "use up" a reference.
* components/adapter/nautilus-adapter-control-embed-strategy.c:
(nautilus_adapter_control_embed_strategy_destroy),
(nautilus_adapter_control_embed_strategy_new): Don't keep a
reference to the BonoboControl around after creating the frame.
* components/adapter/nautilus-adapter-embeddable-embed-strategy.c:
(nautilus_adapter_embeddable_embed_strategy_destroy),
(nautilus_adapter_embeddable_embed_strategy_new): Don't keep a
reference to the BonoboEmeddable around after creating the frame.
* components/image-viewer/nautilus-image-view.c: (redraw_control),
(scrolled_window_size_allocate_callback),
(control_factory_common), (init_bonobo_image_generic_factory):
Some name changes, and a fix so that we don't show the image first
at 100%, and then shrink to fit. The downside is that this might
be too hard-coded to the current behavior of Nautilus, but it's
better than flashing every time you open an image.
* components/services/trilobite/utils/.cvsignore: Ignore some
files in this new directory.
* libnautilus-extensions/nautilus-file-operations-progress.h:
* libnautilus-extensions/nautilus-file-operations-progress.c:
(nautilus_file_operations_progress_update), (close_callback),
(nautilus_file_operations_progress_destroy), (map_callback),
(delete_event_callback),
(nautilus_file_operations_progress_initialize),
(nautilus_file_operations_progress_initialize_class),
(nautilus_file_operations_progress_new),
(nautilus_file_operations_progress_set_total),
(nautilus_file_operations_progress_set_operation_string),
(nautilus_file_operations_progress_new_file),
(nautilus_file_operations_progress_clear),
(nautilus_file_operations_progress_update_sizes),
(delayed_close_callback), (nautilus_file_operations_progress_done):
Did a lot of code cleanups throughout the file, and added a new
call nautilus_file_operations_progress_done. Use this instead of
gtk_object_destroy so that the window can linger long enough for
the user to see it, if a copy was really fast.
* libnautilus-extensions/nautilus-file-operations.c:
(transfer_info_destroy), (parent_for_error_dialog),
(create_transfer_dialog), (handle_transfer_ok),
(handle_transfer_vfs_error): Change to use the new
nautilus_file_operations_progress_done call instead of
gtk_object_destroy when done with the progress dialog.
* libnautilus-extensions/nautilus-icon-container.c:
(nautilus_icon_container_update_scroll_region): Fix indentation.
* libnautilus-extensions/nautilus-volume-monitor.c:
(get_current_mount_list): Replace cryptic g_return_if_fail message
with better-worded g_warning.
* libnautilus/nautilus-view.c: (set_frame_callback),
(widget_destroyed_callback),
(nautilus_view_construct_from_bonobo_control): Re-added code to
monitor the lifetime of the frame and self-destruct when the frame
goes away. The X-window-based solution wasn't working 100%, and
this solution does.
* src/nautilus-sidebar.c: (toggle_sidebar_panel),
(sidebar_for_each_sidebar_panel): Change object data key to use a
prefix that includes the word "nautilus". Tweak code that builds
the menu so that it always includes any panel that's displayed,
even if the user level says it shouldn't be there.
2001-04-02 Michael Engber <engber@eazel.com>
reviewed by: John Harper <jsh@eazel.com>
......
......@@ -41,7 +41,6 @@
struct NautilusAdapterControlEmbedStrategyDetails {
Bonobo_Control control;
BonoboControlFrame *control_frame;
BonoboObject *zoomable;
GtkWidget *widget;
......@@ -90,16 +89,9 @@ static void
nautilus_adapter_control_embed_strategy_destroy (GtkObject *object)
{
NautilusAdapterControlEmbedStrategy *strategy;
CORBA_Environment ev;
strategy = NAUTILUS_ADAPTER_CONTROL_EMBED_STRATEGY (object);
if (strategy->details->control != CORBA_OBJECT_NIL) {
CORBA_exception_init (&ev);
bonobo_object_release_unref (strategy->details->control, &ev);
CORBA_exception_free (&ev);
}
if (strategy->details->control_frame != NULL) {
bonobo_object_unref (BONOBO_OBJECT (strategy->details->control_frame));
}
......@@ -168,7 +160,6 @@ nautilus_adapter_control_embed_strategy_new (Bonobo_Control control,
gtk_object_ref (GTK_OBJECT (strategy));
gtk_object_sink (GTK_OBJECT (strategy));
strategy->details->control = control;
strategy->details->control_frame = bonobo_control_frame_new (ui_container);
bonobo_control_frame_bind_to_control (strategy->details->control_frame, control);
......
......@@ -41,7 +41,6 @@
#include <libnautilus/nautilus-view.h>
struct NautilusAdapterEmbeddableEmbedStrategyDetails {
BonoboObjectClient *embeddable_wrapper;
BonoboItemContainer *container;
BonoboClientSite *client_site;
BonoboViewFrame *view_frame;
......@@ -96,9 +95,6 @@ nautilus_adapter_embeddable_embed_strategy_destroy (GtkObject *object)
strategy = NAUTILUS_ADAPTER_EMBEDDABLE_EMBED_STRATEGY (object);
if (strategy->details->embeddable_wrapper != NULL) {
bonobo_object_unref (BONOBO_OBJECT (strategy->details->embeddable_wrapper));
}
if (strategy->details->view_frame != NULL) {
bonobo_object_unref (BONOBO_OBJECT (strategy->details->view_frame));
}
......@@ -167,6 +163,7 @@ nautilus_adapter_embeddable_embed_strategy_new (Bonobo_Embeddable embeddable,
Bonobo_UIContainer ui_container)
{
NautilusAdapterEmbeddableEmbedStrategy *strategy;
BonoboObjectClient *embeddable_wrapper;
Bonobo_Zoomable corba_zoomable;
Bonobo_View corba_view;
CORBA_Environment ev;
......@@ -175,12 +172,15 @@ nautilus_adapter_embeddable_embed_strategy_new (Bonobo_Embeddable embeddable,
gtk_object_ref (GTK_OBJECT (strategy));
gtk_object_sink (GTK_OBJECT (strategy));
strategy->details->embeddable_wrapper = bonobo_object_client_from_corba (embeddable);
embeddable_wrapper = bonobo_object_client_from_corba
(bonobo_object_dup_ref (embeddable, NULL));
strategy->details->container = bonobo_item_container_new ();
strategy->details->client_site = bonobo_client_site_new (strategy->details->container);
bonobo_client_site_bind_embeddable (strategy->details->client_site, strategy->details->embeddable_wrapper);
bonobo_client_site_bind_embeddable (strategy->details->client_site, embeddable_wrapper);
bonobo_object_unref (BONOBO_OBJECT (embeddable_wrapper));
strategy->details->view_frame = bonobo_client_site_new_view (strategy->details->client_site, ui_container);
strategy->details->client_widget = bonobo_view_frame_get_wrapper (strategy->details->view_frame);
......
......@@ -3,7 +3,7 @@
/*
* Nautilus
*
* Copyright (C) 2000 Eazel, Inc.
* Copyright (C) 2000, 2001 Eazel, Inc.
*
* Nautilus is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
......@@ -29,12 +29,11 @@
#include <config.h>
#include "nautilus-adapter-embed-strategy.h"
#include "nautilus-adapter-embed-strategy-private.h"
#include "nautilus-adapter-control-embed-strategy.h"
#include "nautilus-adapter-embed-strategy-private.h"
#include "nautilus-adapter-embeddable-embed-strategy.h"
#include <gtk/gtkobject.h>
#include <gtk/gtksignal.h>
#include <libnautilus-extensions/nautilus-gtk-macros.h>
......@@ -49,12 +48,12 @@ enum {
static guint signals[LAST_SIGNAL];
static void nautilus_adapter_embed_strategy_initialize_class (NautilusAdapterEmbedStrategyClass *klass);
static void nautilus_adapter_embed_strategy_initialize (NautilusAdapterEmbedStrategy *strategy);
static void nautilus_adapter_embed_strategy_destroy (GtkObject *object);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusAdapterEmbedStrategy, nautilus_adapter_embed_strategy, GTK_TYPE_OBJECT)
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusAdapterEmbedStrategy,
nautilus_adapter_embed_strategy,
GTK_TYPE_OBJECT)
NAUTILUS_IMPLEMENT_MUST_OVERRIDE_SIGNAL (nautilus_adapter_embed_strategy, get_widget)
NAUTILUS_IMPLEMENT_MUST_OVERRIDE_SIGNAL (nautilus_adapter_embed_strategy, get_zoomable)
......@@ -66,8 +65,6 @@ nautilus_adapter_embed_strategy_initialize_class (NautilusAdapterEmbedStrategyCl
object_class = (GtkObjectClass *) klass;
object_class->destroy = nautilus_adapter_embed_strategy_destroy;
signals[ACTIVATE] =
gtk_signal_new ("activate",
GTK_RUN_LAST,
......@@ -101,49 +98,39 @@ nautilus_adapter_embed_strategy_initialize (NautilusAdapterEmbedStrategy *strate
{
}
static void
nautilus_adapter_embed_strategy_destroy (GtkObject *object)
{
NautilusAdapterEmbedStrategy *strategy;
strategy = NAUTILUS_ADAPTER_EMBED_STRATEGY (object);
NAUTILUS_CALL_PARENT (GTK_OBJECT_CLASS, destroy, (object));
}
NautilusAdapterEmbedStrategy *
nautilus_adapter_embed_strategy_get (Bonobo_Unknown component)
{
Bonobo_Control control;
Bonobo_Embeddable embeddable;
CORBA_Environment ev;
NautilusAdapterEmbedStrategy *strategy;
CORBA_exception_init (&ev);
control = Bonobo_Unknown_queryInterface (component,
"IDL:Bonobo/Control:1.0", &ev);
strategy = NULL;
control = Bonobo_Unknown_queryInterface
(component, "IDL:Bonobo/Control:1.0", &ev);
if (ev._major == CORBA_NO_EXCEPTION && !CORBA_Object_is_nil (control, &ev)) {
CORBA_exception_free (&ev);
return nautilus_adapter_control_embed_strategy_new (control, CORBA_OBJECT_NIL);
strategy = nautilus_adapter_control_embed_strategy_new
(control, CORBA_OBJECT_NIL);
bonobo_object_release_unref (control, NULL);
}
embeddable = Bonobo_Unknown_queryInterface (component,
"IDL:Bonobo/Embeddable:1.0", &ev);
if (ev._major == CORBA_NO_EXCEPTION && !CORBA_Object_is_nil (embeddable, &ev)) {
CORBA_exception_free (&ev);
return nautilus_adapter_embeddable_embed_strategy_new (embeddable, CORBA_OBJECT_NIL);
if (strategy != NULL) {
embeddable = Bonobo_Unknown_queryInterface
(component, "IDL:Bonobo/Embeddable:1.0", &ev);
if (ev._major == CORBA_NO_EXCEPTION && !CORBA_Object_is_nil (embeddable, &ev)) {
strategy = nautilus_adapter_embeddable_embed_strategy_new
(embeddable, CORBA_OBJECT_NIL);
bonobo_object_release_unref (embeddable, NULL);
}
}
CORBA_exception_free (&ev);
return NULL;
return strategy;
}
GtkWidget *
......@@ -187,4 +174,3 @@ nautilus_adapter_embed_strategy_emit_open_location (NautilusAdapterEmbedStrategy
signals[OPEN_LOCATION],
uri);
}
......@@ -41,7 +41,6 @@
#include <libnautilus/nautilus-view.h>
struct NautilusAdapterEmbeddableEmbedStrategyDetails {
BonoboObjectClient *embeddable_wrapper;
BonoboItemContainer *container;
BonoboClientSite *client_site;
BonoboViewFrame *view_frame;
......@@ -96,9 +95,6 @@ nautilus_adapter_embeddable_embed_strategy_destroy (GtkObject *object)
strategy = NAUTILUS_ADAPTER_EMBEDDABLE_EMBED_STRATEGY (object);
if (strategy->details->embeddable_wrapper != NULL) {
bonobo_object_unref (BONOBO_OBJECT (strategy->details->embeddable_wrapper));
}
if (strategy->details->view_frame != NULL) {
bonobo_object_unref (BONOBO_OBJECT (strategy->details->view_frame));
}
......@@ -167,6 +163,7 @@ nautilus_adapter_embeddable_embed_strategy_new (Bonobo_Embeddable embeddable,
Bonobo_UIContainer ui_container)
{
NautilusAdapterEmbeddableEmbedStrategy *strategy;
BonoboObjectClient *embeddable_wrapper;
Bonobo_Zoomable corba_zoomable;
Bonobo_View corba_view;
CORBA_Environment ev;
......@@ -175,12 +172,15 @@ nautilus_adapter_embeddable_embed_strategy_new (Bonobo_Embeddable embeddable,
gtk_object_ref (GTK_OBJECT (strategy));
gtk_object_sink (GTK_OBJECT (strategy));
strategy->details->embeddable_wrapper = bonobo_object_client_from_corba (embeddable);
embeddable_wrapper = bonobo_object_client_from_corba
(bonobo_object_dup_ref (embeddable, NULL));
strategy->details->container = bonobo_item_container_new ();
strategy->details->client_site = bonobo_client_site_new (strategy->details->container);
bonobo_client_site_bind_embeddable (strategy->details->client_site, strategy->details->embeddable_wrapper);
bonobo_client_site_bind_embeddable (strategy->details->client_site, embeddable_wrapper);
bonobo_object_unref (BONOBO_OBJECT (embeddable_wrapper));
strategy->details->view_frame = bonobo_client_site_new_view (strategy->details->client_site, ui_container);
strategy->details->client_widget = bonobo_view_frame_get_wrapper (strategy->details->view_frame);
......
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
/*
* Generic image loading embeddable using gdk-pixbuf.
*
......@@ -57,8 +59,8 @@ typedef struct {
GtkWidget *scrolled_window;
GdkPixbuf *scaled;
gboolean size_allocated;
gboolean initial_flag;
gboolean resize_flag;
gboolean got_initial_size;
gboolean got_penultimate_allocation;
GdkPixbuf *zoomed;
float zoom_level;
......@@ -210,7 +212,7 @@ redraw_control (bonobo_object_data_t *bod, GdkRectangle *rect)
* so we don't screw up the size allocation process by drawing
* an unscaled image too early.
*/
if (bod->size_allocated) {
if (bod->got_initial_size) {
render_pixbuf (buf, bod->drawing_area, rect);
}
}
......@@ -580,7 +582,6 @@ control_size_allocate_callback (GtkWidget *drawing_area, GtkAllocation *allocati
control_update (bod);
}
/*
* This callback will be invoked when the container assigns us a size.
*/
......@@ -615,23 +616,28 @@ image_fits_in_container (bonobo_object_data_t *bod)
*/
static void
scrolled_window_size_allocate_callback (GtkWidget *drawing_area,
GtkAllocation *allocation,
bonobo_object_data_t *bod)
GtkAllocation *allocation,
bonobo_object_data_t *bod)
{
/* implement initial shrink-to-fit if necessary. It's hard to tell when resizing
* is complete, inspiring this hackish solution determining when; it should
* be replaced with a cleaner approach when the framework is improved.
/* Implement initial shrink-to-fit if necessary. It's hard to
* tell when resizing is complete, inspiring this hackish
* solution determining when; it should be replaced with a
* cleaner approach when the framework is improved.
*/
if (bod->resize_flag && bod->initial_flag && allocation->width > 1 && allocation->height > 1)
{
bod->initial_flag = FALSE;
if (bod->got_penultimate_allocation
&& !bod->got_initial_size
&& allocation->width > 1
&& allocation->height > 1) {
bod->got_initial_size = TRUE;
if (!image_fits_in_container (bod)) {
zoomable_zoom_to_fit_callback (bod->zoomable, bod);
}
}
else if (!bod->resize_flag && allocation->width == 1 && allocation->height == 1) {
bod->resize_flag = TRUE;
gtk_widget_queue_draw (bod->drawing_area);
} else if (!bod->got_penultimate_allocation
&& allocation->width == 1
&& allocation->height == 1) {
bod->got_penultimate_allocation = TRUE;
}
}
......@@ -652,17 +658,10 @@ control_factory_common (GtkWidget *scrolled_window)
bonobo_object_data_t *bod;
bod = g_new0 (bonobo_object_data_t, 1);
bod->scaled = NULL;
bod->zoomed = NULL;
bod->zoom_level = 1.0;
bod->drawing_area = gtk_drawing_area_new ();
bod->size_allocated = FALSE;
bod->scrolled_window = scrolled_window;
/* set flags that control initial shrink-to-fit */
bod->initial_flag = TRUE;
bod->resize_flag = FALSE;
gtk_signal_connect (GTK_OBJECT (bod->drawing_area),
"expose_event",
GTK_SIGNAL_FUNC (drawing_area_exposed), bod);
......@@ -671,8 +670,10 @@ control_factory_common (GtkWidget *scrolled_window)
bod->root = scrolled_window;
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (bod->root),
bod->drawing_area);
} else
} else {
bod->root = bod->drawing_area;
bod->got_initial_size = TRUE;
}
gtk_widget_show_all (bod->root);
bod->control = bonobo_control_new (bod->root);
......@@ -802,7 +803,8 @@ init_bonobo_image_generic_factory (void)
{
char *registration_id;
registration_id = oaf_make_registration_id ("OAFIID:nautilus_image_view_factory:61ea9ab1-e4b4-4da8-8f54-61cf6f33c4f6", g_getenv ("DISPLAY"));
registration_id = oaf_make_registration_id ("OAFIID:nautilus_image_view_factory:61ea9ab1-e4b4-4da8-8f54-61cf6f33c4f6",
g_getenv ("DISPLAY"));
image_factory = bonobo_generic_factory_new_multi
(registration_id,
......
.deps
.libs
Makefile
Makefile.in
eazel-helper-test
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
/* nautilus-file-operations-progress.h - Progress dialog for transfer
operations in the GNOME Desktop File Operation Service.
Copyright (C) 1999, 2000 Free Software Foundation
Copyright (C) 2000 Eazel Inc.
Copyright (C) 2000, 2001 Eazel Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
......@@ -25,73 +26,56 @@
Pavel Cisler <pavel@eazel.com>
*/
#ifndef _NAUTILUS_FILE_OPERATIONS_PROGRESS_H
#define _NAUTILUS_FILE_OPERATIONS_PROGRESS_H
#ifndef NAUTILUS_FILE_OPERATIONS_PROGRESS_H
#define NAUTILUS_FILE_OPERATIONS_PROGRESS_H
#include <libgnomeui/gnome-dialog.h>
typedef struct NautilusFileOperationsProgressDetails NautilusFileOperationsProgressDetails;
typedef struct NautilusFileOperationsProgress NautilusFileOperationsProgress;
struct NautilusFileOperationsProgress {
typedef struct {
GnomeDialog dialog;
NautilusFileOperationsProgressDetails *details;
};
} NautilusFileOperationsProgress;
typedef struct NautilusFileOperationsProgressClass NautilusFileOperationsProgressClass;
struct NautilusFileOperationsProgressClass {
typedef struct {
GnomeDialogClass parent_class;
};
} NautilusFileOperationsProgressClass;
#define NAUTILUS_FILE_OPERATIONS_PROGRESS(obj) \
GTK_CHECK_CAST (obj, nautilus_file_operations_progress_get_type (), NautilusFileOperationsProgress)
#define NAUTILUS_FILE_OPERATIONS_PROGRESS_CLASS(klass) \
GTK_CHECK_CLASS_CAST (klass, nautilus_file_operations_progress_get_type (), NautilusFileOperationsProgressClass)
#define IS_NAUTILUS_FILE_OPERATIONS_PROGRESS(obj) \
#define NAUTILUS_IS_FILE_OPERATIONS_PROGRESS(obj) \
GTK_CHECK_TYPE (obj, nautilus_file_operations_progress_get_type ())
guint nautilus_file_operations_progress_get_type (void);
GtkWidget *nautilus_file_operations_progress_new (const char *title,
const char *operation_string,
const char *from_prefix,
const char *to_prefix,
gulong files_total,
gulong bytes_total);
void nautilus_file_operations_progress_set_progress_title (NautilusFileOperationsProgress *dialog,
const char *progress_title);
void nautilus_file_operations_progress_set_total (NautilusFileOperationsProgress *dialog,
gulong files_total,
gulong bytes_total);
void nautilus_file_operations_progress_set_operation_string (NautilusFileOperationsProgress *dialog,
const char *operation_string);
void nautilus_file_operations_progress_clear (NautilusFileOperationsProgress *dialog);
void nautilus_file_operations_progress_new_file (NautilusFileOperationsProgress *dialog,
const char *progress_verb,
const char *item_name,
const char *from_path,
const char *to_path,
const char *from_prefix,
const char *to_prefix,
gulong file_index,
gulong size);
void nautilus_file_operations_progress_update_sizes (NautilusFileOperationsProgress *dialog,
gulong bytes_done_in_file,
gulong bytes_done);
void nautilus_file_operations_progress_freeze (NautilusFileOperationsProgress *dialog);
void nautilus_file_operations_progress_thaw (NautilusFileOperationsProgress *dialog);
#endif /* _NAUTILUS_FILE_OPERATIONS_PROGRESS_H */
guint nautilus_file_operations_progress_get_type (void);
NautilusFileOperationsProgress *nautilus_file_operations_progress_new (const char *title,
const char *operation_string,
const char *from_prefix,
const char *to_prefix,
gulong files_total,
gulong bytes_total);
void nautilus_file_operations_progress_done (NautilusFileOperationsProgress *dialog);
void nautilus_file_operations_progress_set_progress_title (NautilusFileOperationsProgress *dialog,
const char *progress_title);
void nautilus_file_operations_progress_set_total (NautilusFileOperationsProgress *dialog,
gulong files_total,
gulong bytes_total);
void nautilus_file_operations_progress_set_operation_string (NautilusFileOperationsProgress *dialog,
const char *operation_string);
void nautilus_file_operations_progress_clear (NautilusFileOperationsProgress *dialog);
void nautilus_file_operations_progress_new_file (NautilusFileOperationsProgress *dialog,
const char *progress_verb,
const char *item_name,
const char *from_path,
const char *to_path,
const char *from_prefix,
const char *to_prefix,
gulong file_index,
gulong size);
void nautilus_file_operations_progress_update_sizes (NautilusFileOperationsProgress *dialog,
gulong bytes_done_in_file,
gulong bytes_done);
#endif /* NAUTILUS_FILE_OPERATIONS_PROGRESS_H */
......@@ -60,7 +60,7 @@ typedef enum {
/* Copy engine callback state */
typedef struct {
GnomeVFSAsyncHandle *handle;
GtkWidget *progress_dialog;
NautilusFileOperationsProgress *progress_dialog;
const char *operation_title; /* "Copying files" */
const char *action_label; /* "Files copied:" */
const char *progress_verb; /* "Copying" */
......@@ -96,7 +96,7 @@ transfer_info_destroy (TransferInfo *transfer_info)
nautilus_nullify_cancel (&transfer_info->parent_view);
if (transfer_info->progress_dialog != NULL) {
gtk_widget_destroy (transfer_info->progress_dialog);
nautilus_file_operations_progress_done (transfer_info->progress_dialog);
}
if (transfer_info->debuting_uris != NULL) {
......@@ -273,7 +273,7 @@ static GtkWidget *
parent_for_error_dialog (TransferInfo *transfer_info)
{
if (transfer_info->progress_dialog != NULL) {
return transfer_info->progress_dialog;
return GTK_WIDGET (transfer_info->progress_dialog);
}
return transfer_info->parent_view;
......@@ -375,12 +375,12 @@ create_transfer_dialog (const GnomeVFSXferProgressInfo *progress_info,
gtk_signal_connect (GTK_OBJECT (transfer_info->progress_dialog), "close",
(GtkSignalFunc) handle_close_callback, transfer_info);
gtk_widget_show (transfer_info->progress_dialog);
gtk_widget_show (GTK_WIDGET (transfer_info->progress_dialog));
/* Make the progress dialog show up over the window we are copying into */
if (transfer_info->parent_view != NULL) {
center_dialog_over_window (GTK_WINDOW (transfer_info->progress_dialog),
GTK_WINDOW (gtk_widget_get_toplevel (transfer_info->parent_view)));
GTK_WINDOW (gtk_widget_get_toplevel (transfer_info->parent_view)));
}
}
......@@ -455,7 +455,7 @@ progress_dialog_set_to_from_item_text (NautilusFileOperationsProgress *dialog,
static int
handle_transfer_ok (const GnomeVFSXferProgressInfo *progress_info,
TransferInfo *transfer_info)
TransferInfo *transfer_info)
{
if (transfer_info->cancelled
&& progress_info->phase != GNOME_VFS_XFER_PHASE_COMPLETED) {
......@@ -483,43 +483,40 @@ handle_transfer_ok (const GnomeVFSXferProgressInfo *progress_info,
case GNOME_VFS_XFER_PHASE_COLLECTING:
if (transfer_info->progress_dialog != NULL) {
nautilus_file_operations_progress_set_operation_string
(NAUTILUS_FILE_OPERATIONS_PROGRESS
(transfer_info->progress_dialog),
transfer_info->preparation_name);
(transfer_info->progress_dialog,
transfer_info->preparation_name);
}
return 1;
case GNOME_VFS_XFER_PHASE_READYTOGO:
if (transfer_info->progress_dialog != NULL) {
nautilus_file_operations_progress_set_operation_string (
NAUTILUS_FILE_OPERATIONS_PROGRESS (transfer_info->progress_dialog),
transfer_info->action_label);
nautilus_file_operations_progress_set_operation_string
(transfer_info->progress_dialog,
transfer_info->action_label);
nautilus_file_operations_progress_set_total
(NAUTILUS_FILE_OPERATIONS_PROGRESS
(transfer_info->progress_dialog),
progress_info->files_total,
progress_info->bytes_total);
(transfer_info->progress_dialog,
progress_info->files_total,
progress_info->bytes_total);
}
return 1;
case GNOME_VFS_XFER_PHASE_DELETESOURCE:
nautilus_file_changes_consume_changes (FALSE);
if (transfer_info->progress_dialog != NULL) {
progress_dialog_set_to_from_item_text (
NAUTILUS_FILE_OPERATIONS_PROGRESS (transfer_info->progress_dialog),
transfer_info->progress_verb,
progress_info->source_name,
NULL,
progress_info->file_index,
progress_info->file_size);
progress_dialog_set_to_from_item_text
(transfer_info->progress_dialog,
transfer_info->progress_verb,
progress_info->source_name,
NULL,
progress_info->file_index,
progress_info->file_size);
nautilus_file_operations_progress_update_sizes
(NAUTILUS_FILE_OPERATIONS_PROGRESS
(transfer_info->progress_dialog),
(transfer_info->progress_dialog,
MIN (progress_info->bytes_copied,
progress_info->bytes_total),
progress_info->bytes_total),
MIN (progress_info->total_bytes_copied,
progress_info->bytes_total));
progress_info->bytes_total));
}
return 1;
......@@ -532,34 +529,31 @@ handle_transfer_ok (const GnomeVFSXferProgressInfo *progress_info,
if (transfer_info->progress_dialog != NULL) {
if (progress_info->bytes_copied == 0) {
progress_dialog_set_to_from_item_text (
NAUTILUS_FILE_OPERATIONS_PROGRESS (transfer_info->progress_dialog),
transfer_info->progress_verb,
progress_info->source_name,
progress_info->target_name,
progress_info->file_index,
progress_info->file_size);
progress_dialog_set_to_from_item_text
(transfer_info->progress_dialog,
transfer_info->progress_verb,
progress_info->source_name,
progress_info->target_name,
progress_info->file_index,
progress_info->file_size);
} else {
nautilus_file_operations_progress_update_sizes
(NAUTILUS_FILE_OPERATIONS_PROGRESS
(transfer_info->progress_dialog),
(transfer_info->progress_dialog,