summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog102
-rw-r--r--components/history/nautilus-history-view.c99
-rw-r--r--components/notes/nautilus-notes.c2
-rw-r--r--libnautilus-extensions/nautilus-directory.c4
-rw-r--r--libnautilus-extensions/nautilus-entry.c8
-rw-r--r--libnautilus-extensions/nautilus-file-private.h7
-rw-r--r--libnautilus-extensions/nautilus-file.c145
-rw-r--r--libnautilus-extensions/nautilus-file.h5
-rw-r--r--libnautilus-extensions/nautilus-graphic.c8
-rw-r--r--libnautilus-extensions/nautilus-mime-actions.c4
-rw-r--r--libnautilus-extensions/nautilus-stock-dialogs.c88
-rw-r--r--libnautilus-extensions/nautilus-stock-dialogs.h49
-rw-r--r--libnautilus-private/nautilus-directory.c4
-rw-r--r--libnautilus-private/nautilus-entry.c8
-rw-r--r--libnautilus-private/nautilus-file-private.h7
-rw-r--r--libnautilus-private/nautilus-file.c145
-rw-r--r--libnautilus-private/nautilus-file.h5
-rw-r--r--libnautilus-private/nautilus-graphic.c8
-rw-r--r--libnautilus-private/nautilus-mime-actions.c4
-rw-r--r--libnautilus-private/nautilus-stock-dialogs.c88
-rw-r--r--libnautilus-private/nautilus-stock-dialogs.h49
-rw-r--r--libnautilus/nautilus-view-component.idl26
-rw-r--r--src/Makefile.am2
-rw-r--r--src/file-manager/fm-error-reporting.c74
-rw-r--r--src/file-manager/fm-error-reporting.h17
-rw-r--r--src/file-manager/fm-icon-view.c24
-rw-r--r--src/nautilus-application.c70
-rw-r--r--src/nautilus-history-frame.c13
-rw-r--r--src/nautilus-information-panel.c10
-rw-r--r--src/nautilus-main.c18
-rw-r--r--src/nautilus-navigation-window.c46
-rw-r--r--src/nautilus-object-window.c46
-rw-r--r--src/nautilus-shell.c15
-rw-r--r--src/nautilus-sidebar.c10
-rw-r--r--src/nautilus-spatial-window.c46
-rw-r--r--src/nautilus-view-frame.c931
-rw-r--r--src/nautilus-view-frame.h70
-rw-r--r--src/nautilus-window.c46
38 files changed, 1289 insertions, 1014 deletions
diff --git a/ChangeLog b/ChangeLog
index e75f13a1c..d347844b0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,90 @@
+2000-07-10 Darin Adler <darin@eazel.com>
+
+ * components/history/nautilus-history-view.c:
+ (history_view_update_icons), (get_history_list),
+ (hyperbola_navigation_history_load_location):
+ * libnautilus/nautilus-view-component.idl:
+ * src/nautilus-history-frame.c:
+ (impl_Nautilus_HistoryFrame_get_history_list):
+ * src/nautilus-view-frame.h:
+ * src/nautilus-view-frame.c:
+ (nautilus_view_frame_get_history_list):
+ * src/nautilus-window.c:
+ (nautilus_window_get_history_list_callback),
+ (nautilus_window_connect_view):
+ Changed history list to include a separate position field
+ instead of having a position in each entry.
+
+ * components/notes/nautilus-notes.c: (done_with_file):
+ Name changed from nautilus_file_cancel_callback to
+ nautilus_file_cancel_call_when_ready to reduce confusion with
+ nautilus_file_cancel.
+
+ * libnautilus-extensions/nautilus-directory.c:
+ (nautilus_directory_get): Made NULL for URI be legal (and result
+ in NULL for the directory object).
+ * libnautilus-extensions/nautilus-mime-actions.c:
+ (get_mime_type_from_uri): Made NULL for URI be legal (and result
+ in NULL for MIME type).
+
+ * libnautilus-extensions/nautilus-entry.c:
+ (nautilus_entry_set_text): Minor tweak.
+
+ * libnautilus-extensions/nautilus-file.h:
+ * libnautilus-extensions/nautilus-file-private.h:
+ * libnautilus-extensions/nautilus-file.c: (operation_new),
+ (operation_free), (operation_complete), (operation_cancel),
+ (rename_update_info_and_metafile), (rename_callback),
+ (nautilus_file_rename), (nautilus_file_cancel),
+ (nautilus_file_set_owner), (nautilus_file_cancel_call_when_ready):
+ Added cancelling to rename as a prelude to doing the same for
+ set_file_info-based calls.
+
+ * libnautilus-extensions/nautilus-graphic.c:
+ Fixed a formatting mistake and a typo.
+
+ * libnautilus-extensions/nautilus-stock-dialogs.h:
+ * libnautilus-extensions/nautilus-stock-dialogs.c:
+ (timed_wait_hash), (timed_wait_hash_equal),
+ (nautilus_timed_wait_start), (nautilus_timed_wait_free),
+ (nautilus_timed_wait_stop): Re-did timed wait API now that
+ we are really using it. Still unimplemented.
+
+ * src/Makefile.am:
+ Since IDL dependencies are not understood by automake, added
+ an explicit one so we pick up the change to the libnautilus
+ view component IDL.
+
+ * src/file-manager/fm-error-reporting.h:
+ * src/file-manager/fm-error-reporting.c: (rename_callback),
+ (cancel_rename_callback), (fm_rename_file): Moved code for
+ renaming into here so it can be shared between the icon view
+ and the properties dialog. Perhaps it needs to be renamed.
+
+ * src/file-manager/fm-icon-view.c:
+ (fm_icon_view_icon_text_changed_callback): Use the shared
+ code instead of having the rename code here.
+
+ * src/nautilus-application.c: (create_object): Make a new
+ shell object each time instead of trying to share one.
+ (nautilus_application_startup): Activate the shell object
+ using OAF. This makes it work across processes and adds
+ the feature.
+
+ * src/nautilus-main.c: (main): Call bonobo_activate explicitly so
+ CORBA calls work before the main loop.
+
+ * src/nautilus-shell.c: (display_caveat_first_time),
+ (corba_manage_desktop): Got rid of all state in NautilusShell
+ so we can use multiple shell objects if we want.
+
+ * src/nautilus-sidebar.c: (nautilus_sidebar_update_info):
+ Got rid of code that checks for NULL.
+
2000-07-10 Ramiro Estrugo <ramiro@eazel.com>
* icons/eazel/Services.png:
- New icon from arlo.
+ New icon from Arlo.
2000-07-10 Michael Engber <engber@eazel.com>
@@ -69,9 +152,8 @@
* test/test-nautilus-graphic.c: (main):
Update for new boundary offset support.
-
- components/services/install/nautilus-view/nautilus-service-install-
- view.c: (generate_install_form), (create_graphic_widget),
+ * components/services/install/nautilus-view/nautilus-service-install-view.c:
+ (generate_install_form), (create_graphic_widget),
(create_title_widget):
* components/services/login/nautilus-view/nautilus-login-view.c:
(generate_login_form), (create_graphic_widget),
@@ -82,16 +164,12 @@
* components/services/trilobite/libtrilobite/Makefile.am:
* components/services/trilobite/libtrilobite/libtrilobite.h:
- *
- components/services/trilobite/libtrilobite/trilobite-core-utils.c:
+ * components/services/trilobite/libtrilobite/trilobite-core-utils.c:
(trilobite_pexec):
- *
- components/services/trilobite/libtrilobite/trilobite-core-utils.h:
- *
- components/services/trilobite/libtrilobite/trilobite-root-helper.c:
+ * components/services/trilobite/libtrilobite/trilobite-core-utils.h:
+ * components/services/trilobite/libtrilobite/trilobite-root-helper.c:
new file
- *
- components/services/trilobite/libtrilobite/trilobite-root-helper.h:
+ * components/services/trilobite/libtrilobite/trilobite-root-helper.h:
new file
Add baseline TrilobiteRootHelper object. It uses the "userhelper"
diff --git a/components/history/nautilus-history-view.c b/components/history/nautilus-history-view.c
index 97c3fe27c..99020a704 100644
--- a/components/history/nautilus-history-view.c
+++ b/components/history/nautilus-history-view.c
@@ -108,26 +108,20 @@ history_view_update_icons (GtkCList *clist)
{
int row;
- for (row = 0; row < clist->rows; ++row)
- {
+ for (row = 0; row < clist->rows; ++row) {
install_icon (clist, row);
}
}
-static Nautilus_HistoryList *
+static Nautilus_History *
get_history_list (HistoryView *hview)
{
CORBA_Environment ev;
Nautilus_HistoryFrame view_frame;
- Nautilus_HistoryList *list;
+ Nautilus_History *list;
- list = NULL;
-
view_frame = history_view_frame_call_begin (hview->view, &ev);
- if (view_frame != CORBA_OBJECT_NIL) {
- list = Nautilus_HistoryFrame_get_history_list (view_frame, &ev);
- }
-
+ list = Nautilus_HistoryFrame_get_history_list (view_frame, &ev);
history_view_frame_call_end (view_frame, &ev);
return list;
@@ -142,51 +136,46 @@ hyperbola_navigation_history_load_location (NautilusView *view,
int new_rownum;
GtkCList *clist;
NautilusBookmark *bookmark;
- //int i;
- //GnomeVFSURI *vfs_uri;
- //char *short_name;
-
- Nautilus_HistoryList *history_list;
+ Nautilus_History *history;
Nautilus_HistoryItem *item;
- int index;
+ int i;
hview->notify_count++;
clist = hview->clist;
- gtk_clist_freeze(clist);
+ gtk_clist_freeze (clist);
/* Clear out list */
+ /* FIXME: Storage leak of column names here. */
gtk_clist_clear (clist);
/* Populate with data from main history list */
- history_list = get_history_list (hview);
- if (history_list != NULL) {
- for (index = 0; index < history_list->_length; index++) {
- item = &history_list->_buffer[index];
- bookmark = nautilus_bookmark_new (item->location, item->name);
-
- cols[HISTORY_VIEW_COLUMN_ICON] = NULL;
- cols[HISTORY_VIEW_COLUMN_NAME] = item->name;
- new_rownum = gtk_clist_append(clist, cols);
-
- gtk_clist_set_row_data_full (clist, new_rownum, bookmark,
- (GtkDestroyNotify)gtk_object_unref);
- install_icon (clist, new_rownum);
-
- gtk_clist_columns_autosize(clist);
-
- if(gtk_clist_row_is_visible(clist, new_rownum) != GTK_VISIBILITY_FULL) {
- gtk_clist_moveto(clist, new_rownum, -1, 0.5, 0.0);
- }
-
+ history = get_history_list (hview);
+ for (i = 0; i < history->list._length; i++) {
+ item = &history->list._buffer[i];
+ bookmark = nautilus_bookmark_new (item->location, item->title);
+
+ cols[HISTORY_VIEW_COLUMN_ICON] = NULL;
+ /* FIXME: Storage leak of column names when list goes away. */
+ cols[HISTORY_VIEW_COLUMN_NAME] = g_strdup (item->title);
+
+ new_rownum = gtk_clist_append (clist, cols);
+
+ gtk_clist_set_row_data_full (clist, new_rownum, bookmark,
+ (GtkDestroyNotify) gtk_object_unref);
+ install_icon (clist, new_rownum);
+
+ gtk_clist_columns_autosize (clist);
+
+ if (gtk_clist_row_is_visible(clist, new_rownum) != GTK_VISIBILITY_FULL) {
+ gtk_clist_moveto(clist, new_rownum, -1, 0.5, 0.0);
}
-
- CORBA_free (history_list);
}
+ CORBA_free (history);
- gtk_clist_select_row(clist, 0, 0);
+ gtk_clist_select_row (clist, 0, 0);
- gtk_clist_thaw(clist);
+ gtk_clist_thaw (clist);
hview->notify_count--;
}
@@ -249,14 +238,14 @@ make_obj(BonoboGenericFactory *Factory, const char *goad_id, gpointer closure)
gtk_clist_set_row_height (clist, NAUTILUS_ICON_SIZE_SMALLER);
gtk_clist_set_selection_mode(clist, GTK_SELECTION_BROWSE);
gtk_clist_columns_autosize(clist);
- wtmp = gtk_scrolled_window_new(gtk_clist_get_hadjustment(clist),
- gtk_clist_get_vadjustment(clist));
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(wtmp),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_container_add(GTK_CONTAINER(wtmp), GTK_WIDGET (clist));
+ wtmp = gtk_scrolled_window_new (gtk_clist_get_hadjustment (clist),
+ gtk_clist_get_vadjustment (clist));
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (wtmp),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_container_add (GTK_CONTAINER (wtmp), GTK_WIDGET (clist));
- gtk_widget_show_all(wtmp);
+ gtk_widget_show_all (wtmp);
/* create object */
hview->view = nautilus_view_new (wtmp);
@@ -267,7 +256,7 @@ make_obj(BonoboGenericFactory *Factory, const char *goad_id, gpointer closure)
/* handle events */
gtk_signal_connect(GTK_OBJECT(hview->view), "load_location",
- hyperbola_navigation_history_load_location, hview);
+ hyperbola_navigation_history_load_location, hview);
gtk_signal_connect(GTK_OBJECT(clist), "select_row", hyperbola_navigation_history_select_row, hview);
gtk_signal_connect_object_while_alive (nautilus_icon_factory_get (),
@@ -278,20 +267,20 @@ make_obj(BonoboGenericFactory *Factory, const char *goad_id, gpointer closure)
return BONOBO_OBJECT (hview->view);
}
-int main(int argc, char *argv[])
+int
+main (int argc, char *argv[])
{
BonoboGenericFactory *factory;
CORBA_ORB orb;
- gnome_init_with_popt_table("nautilus-history-view", VERSION,
- argc, argv,
- oaf_popt_options, 0, NULL);
+ gnome_init_with_popt_table ("nautilus-history-view", VERSION,
+ argc, argv,
+ oaf_popt_options, 0, NULL);
orb = oaf_init (argc, argv);
-
bonobo_init(orb, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL);
gnome_vfs_init ();
- factory = bonobo_generic_factory_new_multi("OAFIID:nautilus_history_view_factory:912d6634-d18f-40b6-bb83-bdfe16f1d15e", make_obj, NULL);
+ factory = bonobo_generic_factory_new_multi ("OAFIID:nautilus_history_view_factory:912d6634-d18f-40b6-bb83-bdfe16f1d15e", make_obj, NULL);
do {
bonobo_main();
diff --git a/components/notes/nautilus-notes.c b/components/notes/nautilus-notes.c
index fa15c166d..e2cc0fe19 100644
--- a/components/notes/nautilus-notes.c
+++ b/components/notes/nautilus-notes.c
@@ -77,7 +77,7 @@ finish_loading_note (NautilusFile *file,
static void
done_with_file (Notes *notes)
{
- nautilus_file_cancel_callback (notes->file, finish_loading_note, notes);
+ nautilus_file_cancel_call_when_ready (notes->file, finish_loading_note, notes);
nautilus_file_unref (notes->file);
}
diff --git a/libnautilus-extensions/nautilus-directory.c b/libnautilus-extensions/nautilus-directory.c
index 782cf5cc6..449cefc44 100644
--- a/libnautilus-extensions/nautilus-directory.c
+++ b/libnautilus-extensions/nautilus-directory.c
@@ -270,7 +270,9 @@ nautilus_directory_get (const char *uri)
char *canonical_uri;
NautilusDirectory *directory;
- g_return_val_if_fail (uri != NULL, NULL);
+ if (uri == NULL) {
+ return NULL;
+ }
canonical_uri = make_uri_canonical (uri);
diff --git a/libnautilus-extensions/nautilus-entry.c b/libnautilus-extensions/nautilus-entry.c
index 7177ef141..c3557ed2d 100644
--- a/libnautilus-extensions/nautilus-entry.c
+++ b/libnautilus-extensions/nautilus-entry.c
@@ -202,13 +202,13 @@ nautilus_entry_select_all_at_idle (NautilusEntry *entry)
* @test: The text to set
**/
-void
+void
nautilus_entry_set_text (NautilusEntry *entry, const gchar *text)
{
+ g_return_if_fail (NAUTILUS_IS_ENTRY (entry));
+
entry->user_edit = FALSE;
-
- gtk_entry_set_text ( GTK_ENTRY (entry), text);
-
+ gtk_entry_set_text (GTK_ENTRY (entry), text);
entry->user_edit = TRUE;
}
diff --git a/libnautilus-extensions/nautilus-file-private.h b/libnautilus-extensions/nautilus-file-private.h
index 2084e614e..86c689041 100644
--- a/libnautilus-extensions/nautilus-file-private.h
+++ b/libnautilus-extensions/nautilus-file-private.h
@@ -48,6 +48,13 @@ struct NautilusFileDetails
gboolean got_top_left_text;
char *top_left_text;
+
+ /* The following is for file operations in progress. Since
+ * there are normally only a few of these, we can move them to
+ * a separate hash table or something if required to keep the
+ * file objects small.
+ */
+ GList *operations_in_progress;
};
#define NAUTILUS_FILE_TOP_LEFT_TEXT_MAXIMUM_CHARACTERS_PER_LINE 80
diff --git a/libnautilus-extensions/nautilus-file.c b/libnautilus-extensions/nautilus-file.c
index 5f630ccc6..b86b0fccb 100644
--- a/libnautilus-extensions/nautilus-file.c
+++ b/libnautilus-extensions/nautilus-file.c
@@ -520,58 +520,81 @@ typedef struct {
/* Operation-specific data. */
char *new_name; /* rename */
-} FileOperationState;
+} Operation;
-static FileOperationState *
-file_operation_state_new (NautilusFile *file,
- NautilusFileOperationCallback callback,
- gpointer callback_data)
+static Operation *
+operation_new (NautilusFile *file,
+ NautilusFileOperationCallback callback,
+ gpointer callback_data)
{
- FileOperationState *state;
+ Operation *op;
nautilus_file_ref (file);
- state = g_new0 (FileOperationState, 1);
- state->file = file;
- state->callback = callback;
- state->callback_data = callback_data;
+ op = g_new0 (Operation, 1);
+ op->file = file;
+ op->callback = callback;
+ op->callback_data = callback_data;
- return state;
+ op->file->details->operations_in_progress = g_list_prepend
+ (op->file->details->operations_in_progress, op);
+
+ return op;
}
static void
-file_operation_state_free (FileOperationState *state)
+operation_free (Operation *op)
{
- nautilus_file_unref (state->file);
- g_free (state->new_name);
- g_free (state);
+ op->file->details->operations_in_progress = g_list_remove
+ (op->file->details->operations_in_progress, op);
+
+ nautilus_file_unref (op->file);
+
+ g_free (op->new_name);
+
+ g_free (op);
}
static void
-file_operation_state_complete (FileOperationState *state,
- GnomeVFSResult result)
+operation_complete (Operation *op,
+ GnomeVFSResult result)
{
/* Claim that something changed even if the operation failed.
* This makes it easier for some clients who see the "reverting"
* as "changing back".
*/
- nautilus_file_changed (state->file);
- (* state->callback) (state->file, result, state->callback_data);
- file_operation_state_free (state);
+ nautilus_file_changed (op->file);
+ (* op->callback) (op->file, result, op->callback_data);
+ operation_free (op);
}
static void
-rename_update_info_and_metafile (FileOperationState *state)
+operation_cancel (Operation *op)
+{
+ /* Cancel the operation if it's still in progress. */
+ g_assert (op->handle != NULL);
+ gnome_vfs_async_cancel (op->handle);
+
+ /* Claim that something changed even though the operation was
+ * canceled in case some work was partly done, but don't call
+ * the callback.
+ */
+ nautilus_file_changed (op->file);
+ operation_free (op);
+}
+
+static void
+rename_update_info_and_metafile (Operation *op)
{
nautilus_directory_update_file_metadata
- (state->file->details->directory,
- state->file->details->name,
- state->new_name);
+ (op->file->details->directory,
+ op->file->details->name,
+ op->new_name);
- g_free (state->file->details->name);
- state->file->details->name = g_strdup (state->new_name);
- if (state->file->details->info != NULL) {
- state->file->details->info->name = state->file->details->name;
+ g_free (op->file->details->name);
+ op->file->details->name = g_strdup (op->new_name);
+ if (op->file->details->info != NULL) {
+ op->file->details->info->name = op->file->details->name;
}
}
@@ -580,10 +603,10 @@ rename_callback (GnomeVFSAsyncHandle *handle,
GnomeVFSXferProgressInfo *info,
gpointer callback_data)
{
- FileOperationState *state;
+ Operation *op;
- state = callback_data;
- g_assert (handle == state->handle);
+ op = callback_data;
+ g_assert (handle == op->handle);
g_assert (info != NULL);
/* We aren't really interested in progress, but we do need to see
@@ -594,16 +617,17 @@ rename_callback (GnomeVFSAsyncHandle *handle,
if (info->phase == GNOME_VFS_XFER_PHASE_COMPLETED) {
/* Here's the case where we are done renaming. */
if (info->vfs_status == GNOME_VFS_OK) {
- rename_update_info_and_metafile (state);
+ rename_update_info_and_metafile (op);
}
- file_operation_state_complete (state, info->vfs_status);
+ operation_complete (op, info->vfs_status);
}
break;
case GNOME_VFS_XFER_PROGRESS_STATUS_VFSERROR:
/* We have to handle this case because if you pass
* GNOME_VFS_ERROR_MODE_ABORT, you never get the
* error code for a failed rename.
- * FIXME bugzilla.eazel.com 912: I believe this
+ */
+ /* FIXME bugzilla.eazel.com 912: I believe this
* represents a bug in GNOME VFS.
*/
return GNOME_VFS_XFER_ERROR_ACTION_ABORT;
@@ -611,8 +635,10 @@ rename_callback (GnomeVFSAsyncHandle *handle,
break;
}
- /* FIXME bugzilla.eazel.com 886: Pavel says I should return
- * this, but he promises he will fix the API.
+ /* FIXME bugzilla.eazel.com 886: Pavel says we should return
+ * this, but he promises he will fix the API so we don't have
+ * to have special "occult knowledge" to understand this must
+ * be a 1.
*/
return 1;
}
@@ -626,7 +652,7 @@ nautilus_file_rename (NautilusFile *file,
char *directory_uri_text;
GList *source_name_list, *target_name_list;
GnomeVFSResult result;
- FileOperationState *state;
+ Operation *op;
g_return_if_fail (NAUTILUS_IS_FILE (file));
g_return_if_fail (new_name != NULL);
@@ -660,35 +686,48 @@ nautilus_file_rename (NautilusFile *file,
return;
}
- state = file_operation_state_new (file, callback, callback_data);
- state->new_name = g_strdup (new_name);
+ /* Set up a renaming operation. */
+ op = operation_new (file, callback, callback_data);
+ op->new_name = g_strdup (new_name);
directory_uri_text = nautilus_directory_get_uri (file->details->directory);
source_name_list = g_list_prepend (NULL, file->details->name);
target_name_list = g_list_prepend (NULL, (char *) new_name);
result = gnome_vfs_async_xfer
- (&state->handle,
+ (&op->handle,
directory_uri_text, source_name_list,
directory_uri_text, target_name_list,
GNOME_VFS_XFER_SAMEFS | GNOME_VFS_XFER_REMOVESOURCE,
GNOME_VFS_XFER_ERROR_MODE_QUERY,
GNOME_VFS_XFER_OVERWRITE_MODE_ABORT,
- rename_callback, state,
+ rename_callback, op,
NULL, NULL);
g_free (directory_uri_text);
g_list_free (source_name_list);
g_list_free (target_name_list);
if (result != GNOME_VFS_OK) {
- file_operation_state_free (state);
+ operation_complete (op, result);
+ }
+}
- /* Claim that something changed even if the rename failed.
- * This makes it easier for some clients who see the "reverting"
- * to the old name as "changing back".
- */
- nautilus_file_changed (file);
- (* callback) (file, result, callback_data);
- return;
+void
+nautilus_file_cancel (NautilusFile *file,
+ NautilusFileOperationCallback callback,
+ gpointer callback_data)
+{
+ GList *p, *next;
+ Operation *op;
+
+ for (p = file->details->operations_in_progress; p != NULL; p = next) {
+ next = p->next;
+ op = p->data;
+
+ g_assert (op->file == file);
+ if (op->callback == callback
+ && op->callback_data == callback_data) {
+ operation_cancel (op);
+ }
}
}
@@ -1893,7 +1932,7 @@ nautilus_file_set_owner (NautilusFile *file,
if (!nautilus_file_can_set_owner (file)) {
/* Claim that something changed even if the permission change failed.
* This makes it easier for some clients who see the "reverting"
- * to the old permissions as "changing back".
+ * to the old owner as "changing back".
*/
nautilus_file_changed (file);
(* callback) (file, GNOME_VFS_ERROR_ACCESS_DENIED, callback_data);
@@ -3330,9 +3369,9 @@ nautilus_file_call_when_ready (NautilusFile *file,
}
void
-nautilus_file_cancel_callback (NautilusFile *file,
- NautilusFileCallback callback,
- gpointer callback_data)
+nautilus_file_cancel_call_when_ready (NautilusFile *file,
+ NautilusFileCallback callback,
+ gpointer callback_data)
{
g_return_if_fail (callback != NULL);
diff --git a/libnautilus-extensions/nautilus-file.h b/libnautilus-extensions/nautilus-file.h
index 72198e864..afb2f3a6d 100644
--- a/libnautilus-extensions/nautilus-file.h
+++ b/libnautilus-extensions/nautilus-file.h
@@ -99,7 +99,7 @@ void nautilus_file_call_when_ready (NautilusFile
gboolean wait_for_metadata,
NautilusFileCallback callback,
gpointer callback_data);
-void nautilus_file_cancel_callback (NautilusFile *file,
+void nautilus_file_cancel_call_when_ready (NautilusFile *file,
NautilusFileCallback callback,
gpointer callback_data);
gboolean nautilus_file_check_if_ready (NautilusFile *file,
@@ -172,7 +172,8 @@ void nautilus_file_rename (NautilusFile
gboolean nautilus_file_is_rename_in_progress (NautilusFile *file,
char **old_name,
char **new_name);
-void nautilus_file_cancel (NautilusFileOperationCallback callback,
+void nautilus_file_cancel (NautilusFile *file,
+ NautilusFileOperationCallback callback,
gpointer callback_data);
/* Return true if this file has already been deleted.
diff --git a/libnautilus-extensions/nautilus-graphic.c b/libnautilus-extensions/nautilus-graphic.c
index d30ada610..0695722c5 100644
--- a/libnautilus-extensions/nautilus-graphic.c
+++ b/libnautilus-extensions/nautilus-graphic.c
@@ -23,8 +23,8 @@
*/
#include <config.h>
-
#include "nautilus-graphic.h"
+
#include "nautilus-gtk-macros.h"
#include "nautilus-gdk-extensions.h"
#include "nautilus-gdk-pixbuf-extensions.h"
@@ -33,7 +33,7 @@
/* FIXME bugzilla.eazel.com 1612:
* We should use NautilusBackground for the background. This will simplify
- * lots of things, be more effecient, and remove the need for a lot of the
+ * lots of things, be more efficient, and remove the need for a lot of the
* tiling code.
*/
@@ -208,8 +208,8 @@ NAUTILUS_MACRO_END
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusGraphic, nautilus_graphic, GTK_TYPE_WIDGET)
/* Class init methods */
- static void
- nautilus_graphic_initialize_class (NautilusGraphicClass *graphic_class)
+static void
+nautilus_graphic_initialize_class (NautilusGraphicClass *graphic_class)
{
GtkObjectClass *object_class = GTK_OBJECT_CLASS (graphic_class);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (graphic_class);
diff --git a/libnautilus-extensions/nautilus-mime-actions.c b/libnautilus-extensions/nautilus-mime-actions.c
index 5d9c395cd..32a259cf1 100644
--- a/libnautilus-extensions/nautilus-mime-actions.c
+++ b/libnautilus-extensions/nautilus-mime-actions.c
@@ -1459,6 +1459,10 @@ get_mime_type_from_uri (const char *text_uri)
const char *ctype;
char *type;
+ if (text_uri == NULL) {
+ return NULL;
+ }
+
type = NULL;
/* FIXME bugzilla.eazel.com 1263:
diff --git a/libnautilus-extensions/nautilus-stock-dialogs.c b/libnautilus-extensions/nautilus-stock-dialogs.c
index 24a841872..6340c5683 100644
--- a/libnautilus-extensions/nautilus-stock-dialogs.c
+++ b/libnautilus-extensions/nautilus-stock-dialogs.c
@@ -35,31 +35,59 @@
#include "nautilus-string.h"
#include "nautilus-gnome-extensions.h"
-struct NautilusTimedWait {
- char *window_title;
- char *wait_message;
+typedef struct {
NautilusCancelCallback cancel_callback;
gpointer callback_data;
- GDestroyNotify destroy_notify;
+
+ /* Parameters for creation of the window. */
+ char *window_title;
+ char *wait_message;
GtkWindow *parent_window;
-};
+
+ /* Window, once it's created. */
+} NautilusTimedWait;
+
+static GHashTable *timed_wait_hash_table;
static void find_message_label_callback (GtkWidget *widget, gpointer callback_data);
-NautilusTimedWait *
-nautilus_timed_wait_start (const char *window_title,
- const char *wait_message,
- NautilusCancelCallback cancel_callback,
+static guint
+timed_wait_hash (gconstpointer value)
+{
+ const NautilusTimedWait *wait;
+
+ wait = value;
+
+ return GPOINTER_TO_UINT (wait->cancel_callback)
+ ^ GPOINTER_TO_UINT (wait->callback_data);
+}
+
+static gboolean
+timed_wait_hash_equal (gconstpointer value1, gconstpointer value2)
+{
+ const NautilusTimedWait *wait1, *wait2;
+
+ wait1 = value1;
+ wait2 = value2;
+
+ return wait1->cancel_callback == wait2->cancel_callback
+ && wait1->callback_data == wait2->callback_data;
+}
+
+void
+nautilus_timed_wait_start (NautilusCancelCallback cancel_callback,
gpointer callback_data,
- GDestroyNotify destroy_notify,
+ const char *window_title,
+ const char *wait_message,
GtkWindow *parent_window)
{
NautilusTimedWait *timed_wait;
-
- g_return_val_if_fail (window_title != NULL, NULL);
- g_return_val_if_fail (wait_message != NULL, NULL);
- g_return_val_if_fail (cancel_callback != NULL, NULL);
- g_return_val_if_fail (parent_window == NULL || GTK_IS_WINDOW (parent_window), NULL);
+
+ g_return_if_fail (cancel_callback != NULL);
+ g_return_if_fail (callback_data != NULL);
+ g_return_if_fail (window_title != NULL);
+ g_return_if_fail (wait_message != NULL);
+ g_return_if_fail (parent_window == NULL || GTK_IS_WINDOW (parent_window));
/* Create the timed wait record. */
timed_wait = g_new (NautilusTimedWait, 1);
@@ -67,39 +95,49 @@ nautilus_timed_wait_start (const char *window_title,
timed_wait->wait_message = g_strdup (wait_message);
timed_wait->cancel_callback = cancel_callback;
timed_wait->callback_data = callback_data;
- timed_wait->destroy_notify = destroy_notify;
timed_wait->parent_window = parent_window;
if (parent_window != NULL) {
gtk_widget_ref (GTK_WIDGET (parent_window));
}
- return timed_wait;
+ if (timed_wait_hash_table == NULL) {
+ timed_wait_hash_table = g_hash_table_new
+ (timed_wait_hash, timed_wait_hash_equal);
+ }
+ g_assert (g_hash_table_lookup (timed_wait_hash_table, timed_wait) == NULL);
+ g_hash_table_insert (timed_wait_hash_table, timed_wait, timed_wait);
}
static void
nautilus_timed_wait_free (NautilusTimedWait *timed_wait)
{
- /* Let the caller destroy the callback data. */
- if (timed_wait->destroy_notify != NULL) {
- (* timed_wait->destroy_notify) (timed_wait->callback_data);
- }
-
- /* Now free the other stuff we were holding onto. */
g_free (timed_wait->window_title);
g_free (timed_wait->wait_message);
if (timed_wait->parent_window != NULL) {
gtk_widget_unref (GTK_WIDGET (timed_wait->parent_window));
}
-
+
/* And the wait object itself. */
g_free (timed_wait);
}
void
-nautilus_timed_wait_stop (NautilusTimedWait *timed_wait)
+nautilus_timed_wait_stop (NautilusCancelCallback cancel_callback,
+ gpointer callback_data)
{
+ NautilusTimedWait key;
+ NautilusTimedWait *timed_wait;
+
+ g_return_if_fail (cancel_callback != NULL);
+ g_return_if_fail (callback_data != NULL);
+
+ key.cancel_callback = cancel_callback;
+ key.callback_data = callback_data;
+ timed_wait = g_hash_table_lookup (timed_wait_hash_table, &key);
+
g_return_if_fail (timed_wait != NULL);
+ g_hash_table_remove (timed_wait_hash_table, timed_wait);
nautilus_timed_wait_free (timed_wait);
}
diff --git a/libnautilus-extensions/nautilus-stock-dialogs.h b/libnautilus-extensions/nautilus-stock-dialogs.h
index de9a46aec..6ce9fe993 100644
--- a/libnautilus-extensions/nautilus-stock-dialogs.h
+++ b/libnautilus-extensions/nautilus-stock-dialogs.h
@@ -28,39 +28,38 @@
#include <libgnomeui/gnome-dialog.h>
typedef void (* NautilusCancelCallback) (gpointer callback_data);
-typedef struct NautilusTimedWait NautilusTimedWait;
/* Dialog for cancelling something that normally is fast enough not to need a dialog. */
-NautilusTimedWait *nautilus_timed_wait_start (const char *window_title,
- const char *wait_message,
- NautilusCancelCallback cancel_callback,
- gpointer callback_data,
- GDestroyNotify destroy_notify,
- GtkWindow *parent_window);
-void nautilus_timed_wait_stop (NautilusTimedWait *timed_wait);
+void nautilus_timed_wait_start (NautilusCancelCallback cancel_callback,
+ gpointer callback_data,
+ const char *window_title,
+ const char *wait_message,
+ GtkWindow *parent_window);
+void nautilus_timed_wait_stop (NautilusCancelCallback cancel_callback,
+ gpointer callback_data);
/* Basic dialog with buttons. */
-int nautilus_simple_dialog (GtkWidget *parent,
- const char *text,
- const char *title,
- ...);
+int nautilus_simple_dialog (GtkWidget *parent,
+ const char *text,
+ const char *title,
+ ...);
/* Variations on gnome stock dialogs; these do line wrapping, we don't
* bother with non-parented versions, and we return GnomeDialog
* pointers instead of GtkWidget pointers.
*/
-GnomeDialog * nautilus_info_dialog (const char *informative_message,
- GtkWindow *parent);
-GnomeDialog * nautilus_warning_dialog (const char *warning_message,
- GtkWindow *parent);
-GnomeDialog * nautilus_error_dialog (const char *error_message,
- GtkWindow *parent);
-GnomeDialog * nautilus_error_dialog_with_details (const char *error_message,
- const char *detailed_error_message,
- GtkWindow *parent);
-GnomeDialog * nautilus_yes_no_dialog (const char *question,
- const char *yes_label,
- const char *no_label,
- GtkWindow *parent);
+GnomeDialog *nautilus_info_dialog (const char *informative_message,
+ GtkWindow *parent);
+GnomeDialog *nautilus_warning_dialog (const char *warning_message,
+ GtkWindow *parent);
+GnomeDialog *nautilus_error_dialog (const char *error_message,
+ GtkWindow *parent);
+GnomeDialog *nautilus_error_dialog_with_details (const char *error_message,
+ const char *detailed_error_message,
+ GtkWindow *parent);
+GnomeDialog *nautilus_yes_no_dialog (const char *question,
+ const char *yes_label,
+ const char *no_label,
+ GtkWindow *parent);
#endif /* NAUTILUS_STOCK_DIALOGS_H */
diff --git a/libnautilus-private/nautilus-directory.c b/libnautilus-private/nautilus-directory.c
index 782cf5cc6..449cefc44 100644
--- a/libnautilus-private/nautilus-directory.c
+++ b/libnautilus-private/nautilus-directory.c
@@ -270,7 +270,9 @@ nautilus_directory_get (const char *uri)
char *canonical_uri;
NautilusDirectory *directory;
- g_return_val_if_fail (uri != NULL, NULL);
+ if (uri == NULL) {
+ return NULL;
+ }
canonical_uri = make_uri_canonical (uri);
diff --git a/libnautilus-private/nautilus-entry.c b/libnautilus-private/nautilus-entry.c
index 7177ef141..c3557ed2d 100644
--- a/libnautilus-private/nautilus-entry.c
+++ b/libnautilus-private/nautilus-entry.c
@@ -202,13 +202,13 @@ nautilus_entry_select_all_at_idle (NautilusEntry *entry)
* @test: The text to set
**/
-void
+void
nautilus_entry_set_text (NautilusEntry *entry, const gchar *text)
{
+ g_return_if_fail (NAUTILUS_IS_ENTRY (entry));
+
entry->user_edit = FALSE;
-
- gtk_entry_set_text ( GTK_ENTRY (entry), text);
-
+ gtk_entry_set_text (GTK_ENTRY (entry), text);
entry->user_edit = TRUE;
}
diff --git a/libnautilus-private/nautilus-file-private.h b/libnautilus-private/nautilus-file-private.h
index 2084e614e..86c689041 100644
--- a/libnautilus-private/nautilus-file-private.h
+++ b/libnautilus-private/nautilus-file-private.h
@@ -48,6 +48,13 @@ struct NautilusFileDetails
gboolean got_top_left_text;
char *top_left_text;
+
+ /* The following is for file operations in progress. Since
+ * there are normally only a few of these, we can move them to
+ * a separate hash table or something if required to keep the
+ * file objects small.
+ */
+ GList *operations_in_progress;
};
#define NAUTILUS_FILE_TOP_LEFT_TEXT_MAXIMUM_CHARACTERS_PER_LINE 80
diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c
index 5f630ccc6..b86b0fccb 100644
--- a/libnautilus-private/nautilus-file.c
+++ b/libnautilus-private/nautilus-file.c
@@ -520,58 +520,81 @@ typedef struct {
/* Operation-specific data. */
char *new_name; /* rename */
-} FileOperationState;
+} Operation;
-static FileOperationState *
-file_operation_state_new (NautilusFile *file,
- NautilusFileOperationCallback callback,
- gpointer callback_data)
+static Operation *
+operation_new (NautilusFile *file,
+ NautilusFileOperationCallback callback,
+ gpointer callback_data)
{
- FileOperationState *state;
+ Operation *op;
nautilus_file_ref (file);
- state = g_new0 (FileOperationState, 1);
- state->file = file;
- state->callback = callback;
- state->callback_data = callback_data;
+ op = g_new0 (Operation, 1);
+ op->file = file;
+ op->callback = callback;
+ op->callback_data = callback_data;
- return state;
+ op->file->details->operations_in_progress = g_list_prepend
+ (op->file->details->operations_in_progress, op);
+
+ return op;
}
static void
-file_operation_state_free (FileOperationState *state)
+operation_free (Operation *op)
{
- nautilus_file_unref (state->file);
- g_free (state->new_name);
- g_free (state);
+ op->file->details->operations_in_progress = g_list_remove
+ (op->file->details->operations_in_progress, op);
+
+ nautilus_file_unref (op->file);
+
+ g_free (op->new_name);
+
+ g_free (op);
}
static void
-file_operation_state_complete (FileOperationState *state,
- GnomeVFSResult result)
+operation_complete (Operation *op,
+ GnomeVFSResult result)
{
/* Claim that something changed even if the operation failed.
* This makes it easier for some clients who see the "reverting"
* as "changing back".
*/
- nautilus_file_changed (state->file);
- (* state->callback) (state->file, result, state->callback_data);
- file_operation_state_free (state);
+ nautilus_file_changed (op->file);
+ (* op->callback) (op->file, result, op->callback_data);
+ operation_free (op);
}
static void
-rename_update_info_and_metafile (FileOperationState *state)
+operation_cancel (Operation *op)
+{
+ /* Cancel the operation if it's still in progress. */
+ g_assert (op->handle != NULL);
+ gnome_vfs_async_cancel (op->handle);
+
+ /* Claim that something changed even though the operation was
+ * canceled in case some work was partly done, but don't call
+ * the callback.
+ */
+ nautilus_file_changed (op->file);
+ operation_free (op);
+}
+
+static void
+rename_update_info_and_metafile (Operation *op)
{
nautilus_directory_update_file_metadata
- (state->file->details->directory,
- state->file->details->name,
- state->new_name);
+ (op->file->details->directory,
+ op->file->details->name,
+ op->new_name);
- g_free (state->file->details->name);
- state->file->details->name = g_strdup (state->new_name);
- if (state->file->details->info != NULL) {
- state->file->details->info->name = state->file->details->name;
+ g_free (op->file->details->name);
+ op->file->details->name = g_strdup (op->new_name);
+ if (op->file->details->info != NULL) {
+ op->file->details->info->name = op->file->details->name;
}
}
@@ -580,10 +603,10 @@ rename_callback (GnomeVFSAsyncHandle *handle,
GnomeVFSXferProgressInfo *info,
gpointer callback_data)
{
- FileOperationState *state;
+ Operation *op;
- state = callback_data;
- g_assert (handle == state->handle);
+ op = callback_data;
+ g_assert (handle == op->handle);
g_assert (info != NULL);
/* We aren't really interested in progress, but we do need to see
@@ -594,16 +617,17 @@ rename_callback (GnomeVFSAsyncHandle *handle,
if (info->phase == GNOME_VFS_XFER_PHASE_COMPLETED) {
/* Here's the case where we are done renaming. */
if (info->vfs_status == GNOME_VFS_OK) {
- rename_update_info_and_metafile (state);
+ rename_update_info_and_metafile (op);
}
- file_operation_state_complete (state, info->vfs_status);
+ operation_complete (op, info->vfs_status);
}
break;
case GNOME_VFS_XFER_PROGRESS_STATUS_VFSERROR:
/* We have to handle this case because if you pass
* GNOME_VFS_ERROR_MODE_ABORT, you never get the
* error code for a failed rename.
- * FIXME bugzilla.eazel.com 912: I believe this
+ */
+ /* FIXME bugzilla.eazel.com 912: I believe this
* represents a bug in GNOME VFS.
*/
return GNOME_VFS_XFER_ERROR_ACTION_ABORT;
@@ -611,8 +635,10 @@ rename_callback (GnomeVFSAsyncHandle *handle,
break;
}
- /* FIXME bugzilla.eazel.com 886: Pavel says I should return
- * this, but he promises he will fix the API.
+ /* FIXME bugzilla.eazel.com 886: Pavel says we should return
+ * this, but he promises he will fix the API so we don't have
+ * to have special "occult knowledge" to understand this must
+ * be a 1.
*/
return 1;
}
@@ -626,7 +652,7 @@ nautilus_file_rename (NautilusFile *file,
char *directory_uri_text;
GList *source_name_list, *target_name_list;
GnomeVFSResult result;
- FileOperationState *state;
+ Operation *op;
g_return_if_fail (NAUTILUS_IS_FILE (file));
g_return_if_fail (new_name != NULL);
@@ -660,35 +686,48 @@ nautilus_file_rename (NautilusFile *file,
return;
}
- state = file_operation_state_new (file, callback, callback_data);
- state->new_name = g_strdup (new_name);
+ /* Set up a renaming operation. */
+ op = operation_new (file, callback, callback_data);
+ op->new_name = g_strdup (new_name);
directory_uri_text = nautilus_directory_get_uri (file->details->directory);
source_name_list = g_list_prepend (NULL, file->details->name);
target_name_list = g_list_prepend (NULL, (char *) new_name);
result = gnome_vfs_async_xfer
- (&state->handle,
+ (&op->handle,
directory_uri_text, source_name_list,
directory_uri_text, target_name_list,
GNOME_VFS_XFER_SAMEFS | GNOME_VFS_XFER_REMOVESOURCE,
GNOME_VFS_XFER_ERROR_MODE_QUERY,
GNOME_VFS_XFER_OVERWRITE_MODE_ABORT,
- rename_callback, state,
+ rename_callback, op,
NULL, NULL);
g_free (directory_uri_text);
g_list_free (source_name_list);
g_list_free (target_name_list);
if (result != GNOME_VFS_OK) {
- file_operation_state_free (state);
+ operation_complete (op, result);
+ }
+}
- /* Claim that something changed even if the rename failed.
- * This makes it easier for some clients who see the "reverting"
- * to the old name as "changing back".
- */
- nautilus_file_changed (file);
- (* callback) (file, result, callback_data);
- return;
+void
+nautilus_file_cancel (NautilusFile *file,
+ NautilusFileOperationCallback callback,
+ gpointer callback_data)
+{
+ GList *p, *next;
+ Operation *op;
+
+ for (p = file->details->operations_in_progress; p != NULL; p = next) {
+ next = p->next;
+ op = p->data;
+
+ g_assert (op->file == file);
+ if (op->callback == callback
+ && op->callback_data == callback_data) {
+ operation_cancel (op);
+ }
}
}
@@ -1893,7 +1932,7 @@ nautilus_file_set_owner (NautilusFile *file,
if (!nautilus_file_can_set_owner (file)) {
/* Claim that something changed even if the permission change failed.
* This makes it easier for some clients who see the "reverting"
- * to the old permissions as "changing back".
+ * to the old owner as "changing back".
*/
nautilus_file_changed (file);
(* callback) (file, GNOME_VFS_ERROR_ACCESS_DENIED, callback_data);
@@ -3330,9 +3369,9 @@ nautilus_file_call_when_ready (NautilusFile *file,
}
void
-nautilus_file_cancel_callback (NautilusFile *file,
- NautilusFileCallback callback,
- gpointer callback_data)
+nautilus_file_cancel_call_when_ready (NautilusFile *file,
+ NautilusFileCallback callback,
+ gpointer callback_data)
{
g_return_if_fail (callback != NULL);
diff --git a/libnautilus-private/nautilus-file.h b/libnautilus-private/nautilus-file.h
index 72198e864..afb2f3a6d 100644
--- a/libnautilus-private/nautilus-file.h
+++ b/libnautilus-private/nautilus-file.h
@@ -99,7 +99,7 @@ void nautilus_file_call_when_ready (NautilusFile
gboolean wait_for_metadata,
NautilusFileCallback callback,
gpointer callback_data);
-void nautilus_file_cancel_callback (NautilusFile *file,
+void nautilus_file_cancel_call_when_ready (NautilusFile *file,
NautilusFileCallback callback,
gpointer callback_data);
gboolean nautilus_file_check_if_ready (NautilusFile *file,
@@ -172,7 +172,8 @@ void nautilus_file_rename (NautilusFile
gboolean nautilus_file_is_rename_in_progress (NautilusFile *file,
char **old_name,
char **new_name);
-void nautilus_file_cancel (NautilusFileOperationCallback callback,
+void nautilus_file_cancel (NautilusFile *file,
+ NautilusFileOperationCallback callback,
gpointer callback_data);
/* Return true if this file has already been deleted.
diff --git a/libnautilus-private/nautilus-graphic.c b/libnautilus-private/nautilus-graphic.c
index d30ada610..0695722c5 100644
--- a/libnautilus-private/nautilus-graphic.c
+++ b/libnautilus-private/nautilus-graphic.c
@@ -23,8 +23,8 @@
*/
#include <config.h>
-
#include "nautilus-graphic.h"
+
#include "nautilus-gtk-macros.h"
#include "nautilus-gdk-extensions.h"
#include "nautilus-gdk-pixbuf-extensions.h"
@@ -33,7 +33,7 @@
/* FIXME bugzilla.eazel.com 1612:
* We should use NautilusBackground for the background. This will simplify
- * lots of things, be more effecient, and remove the need for a lot of the
+ * lots of things, be more efficient, and remove the need for a lot of the
* tiling code.
*/
@@ -208,8 +208,8 @@ NAUTILUS_MACRO_END
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusGraphic, nautilus_graphic, GTK_TYPE_WIDGET)
/* Class init methods */
- static void
- nautilus_graphic_initialize_class (NautilusGraphicClass *graphic_class)
+static void
+nautilus_graphic_initialize_class (NautilusGraphicClass *graphic_class)
{
GtkObjectClass *object_class = GTK_OBJECT_CLASS (graphic_class);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (graphic_class);
diff --git a/libnautilus-private/nautilus-mime-actions.c b/libnautilus-private/nautilus-mime-actions.c
index 5d9c395cd..32a259cf1 100644
--- a/libnautilus-private/nautilus-mime-actions.c
+++ b/libnautilus-private/nautilus-mime-actions.c
@@ -1459,6 +1459,10 @@ get_mime_type_from_uri (const char *text_uri)
const char *ctype;
char *type;
+ if (text_uri == NULL) {
+ return NULL;
+ }
+
type = NULL;
/* FIXME bugzilla.eazel.com 1263:
diff --git a/libnautilus-private/nautilus-stock-dialogs.c b/libnautilus-private/nautilus-stock-dialogs.c
index 24a841872..6340c5683 100644
--- a/libnautilus-private/nautilus-stock-dialogs.c
+++ b/libnautilus-private/nautilus-stock-dialogs.c
@@ -35,31 +35,59 @@
#include "nautilus-string.h"
#include "nautilus-gnome-extensions.h"
-struct NautilusTimedWait {
- char *window_title;
- char *wait_message;
+typedef struct {
NautilusCancelCallback cancel_callback;
gpointer callback_data;
- GDestroyNotify destroy_notify;
+
+ /* Parameters for creation of the window. */
+ char *window_title;
+ char *wait_message;
GtkWindow *parent_window;
-};
+
+ /* Window, once it's created. */
+} NautilusTimedWait;
+
+static GHashTable *timed_wait_hash_table;
static void find_message_label_callback (GtkWidget *widget, gpointer callback_data);
-NautilusTimedWait *
-nautilus_timed_wait_start (const char *window_title,
- const char *wait_message,
- NautilusCancelCallback cancel_callback,
+static guint
+timed_wait_hash (gconstpointer value)
+{
+ const NautilusTimedWait *wait;
+
+ wait = value;
+
+ return GPOINTER_TO_UINT (wait->cancel_callback)
+ ^ GPOINTER_TO_UINT (wait->callback_data);
+}
+
+static gboolean
+timed_wait_hash_equal (gconstpointer value1, gconstpointer value2)
+{
+ const NautilusTimedWait *wait1, *wait2;
+
+ wait1 = value1;
+ wait2 = value2;
+
+ return wait1->cancel_callback == wait2->cancel_callback
+ && wait1->callback_data == wait2->callback_data;
+}
+
+void
+nautilus_timed_wait_start (NautilusCancelCallback cancel_callback,
gpointer callback_data,
- GDestroyNotify destroy_notify,
+ const char *window_title,
+ const char *wait_message,
GtkWindow *parent_window)
{
NautilusTimedWait *timed_wait;
-
- g_return_val_if_fail (window_title != NULL, NULL);
- g_return_val_if_fail (wait_message != NULL, NULL);
- g_return_val_if_fail (cancel_callback != NULL, NULL);
- g_return_val_if_fail (parent_window == NULL || GTK_IS_WINDOW (parent_window), NULL);
+
+ g_return_if_fail (cancel_callback != NULL);
+ g_return_if_fail (callback_data != NULL);
+ g_return_if_fail (window_title != NULL);
+ g_return_if_fail (wait_message != NULL);
+ g_return_if_fail (parent_window == NULL || GTK_IS_WINDOW (parent_window));
/* Create the timed wait record. */
timed_wait = g_new (NautilusTimedWait, 1);
@@ -67,39 +95,49 @@ nautilus_timed_wait_start (const char *window_title,
timed_wait->wait_message = g_strdup (wait_message);
timed_wait->cancel_callback = cancel_callback;
timed_wait->callback_data = callback_data;
- timed_wait->destroy_notify = destroy_notify;
timed_wait->parent_window = parent_window;
if (parent_window != NULL) {
gtk_widget_ref (GTK_WIDGET (parent_window));
}
- return timed_wait;
+ if (timed_wait_hash_table == NULL) {
+ timed_wait_hash_table = g_hash_table_new
+ (timed_wait_hash, timed_wait_hash_equal);
+ }
+ g_assert (g_hash_table_lookup (timed_wait_hash_table, timed_wait) == NULL);
+ g_hash_table_insert (timed_wait_hash_table, timed_wait, timed_wait);
}
static void
nautilus_timed_wait_free (NautilusTimedWait *timed_wait)
{
- /* Let the caller destroy the callback data. */
- if (timed_wait->destroy_notify != NULL) {
- (* timed_wait->destroy_notify) (timed_wait->callback_data);
- }
-
- /* Now free the other stuff we were holding onto. */
g_free (timed_wait->window_title);
g_free (timed_wait->wait_message);
if (timed_wait->parent_window != NULL) {
gtk_widget_unref (GTK_WIDGET (timed_wait->parent_window));
}
-
+
/* And the wait object itself. */
g_free (timed_wait);
}
void
-nautilus_timed_wait_stop (NautilusTimedWait *timed_wait)
+nautilus_timed_wait_stop (NautilusCancelCallback cancel_callback,
+ gpointer callback_data)
{
+ NautilusTimedWait key;
+ NautilusTimedWait *timed_wait;
+
+ g_return_if_fail (cancel_callback != NULL);
+ g_return_if_fail (callback_data != NULL);
+
+ key.cancel_callback = cancel_callback;
+ key.callback_data = callback_data;
+ timed_wait = g_hash_table_lookup (timed_wait_hash_table, &key);
+
g_return_if_fail (timed_wait != NULL);
+ g_hash_table_remove (timed_wait_hash_table, timed_wait);
nautilus_timed_wait_free (timed_wait);
}
diff --git a/libnautilus-private/nautilus-stock-dialogs.h b/libnautilus-private/nautilus-stock-dialogs.h
index de9a46aec..6ce9fe993 100644
--- a/libnautilus-private/nautilus-stock-dialogs.h
+++ b/libnautilus-private/nautilus-stock-dialogs.h
@@ -28,39 +28,38 @@
#include <libgnomeui/gnome-dialog.h>
typedef void (* NautilusCancelCallback) (gpointer callback_data);
-typedef struct NautilusTimedWait NautilusTimedWait;
/* Dialog for cancelling something that normally is fast enough not to need a dialog. */
-NautilusTimedWait *nautilus_timed_wait_start (const char *window_title,
- const char *wait_message,
- NautilusCancelCallback cancel_callback,
- gpointer callback_data,
- GDestroyNotify destroy_notify,
- GtkWindow *parent_window);
-void nautilus_timed_wait_stop (NautilusTimedWait *timed_wait);
+void nautilus_timed_wait_start (NautilusCancelCallback cancel_callback,
+ gpointer callback_data,
+ const char *window_title,
+ const char *wait_message,
+ GtkWindow *parent_window);
+void nautilus_timed_wait_stop (NautilusCancelCallback cancel_callback,
+ gpointer callback_data);
/* Basic dialog with buttons. */
-int nautilus_simple_dialog (GtkWidget *parent,
- const char *text,
- const char *title,
- ...);
+int nautilus_simple_dialog (GtkWidget *parent,
+ const char *text,
+ const char *title,
+ ...);
/* Variations on gnome stock dialogs; these do line wrapping, we don't
* bother with non-parented versions, and we return GnomeDialog
* pointers instead of GtkWidget pointers.
*/
-GnomeDialog * nautilus_info_dialog (const char *informative_message,
- GtkWindow *parent);
-GnomeDialog * nautilus_warning_dialog (const char *warning_message,
- GtkWindow *parent);
-GnomeDialog * nautilus_error_dialog (const char *error_message,
- GtkWindow *parent);
-GnomeDialog * nautilus_error_dialog_with_details (const char *error_message,
- const char *detailed_error_message,
- GtkWindow *parent);
-GnomeDialog * nautilus_yes_no_dialog (const char *question,
- const char *yes_label,
- const char *no_label,
- GtkWindow *parent);
+GnomeDialog *nautilus_info_dialog (const char *informative_message,
+ GtkWindow *parent);
+GnomeDialog *nautilus_warning_dialog (const char *warning_message,
+ GtkWindow *parent);
+GnomeDialog *nautilus_error_dialog (const char *error_message,
+ GtkWindow *parent);
+GnomeDialog *nautilus_error_dialog_with_details (const char *error_message,
+ const char *detailed_error_message,
+ GtkWindow *parent);
+GnomeDialog *nautilus_yes_no_dialog (const char *question,
+ const char *yes_label,
+ const char *no_label,
+ GtkWindow *parent);
#endif /* NAUTILUS_STOCK_DIALOGS_H */
diff --git a/libnautilus/nautilus-view-component.idl b/libnautilus/nautilus-view-component.idl
index c90d06da6..9f2414da2 100644
--- a/libnautilus/nautilus-view-component.idl
+++ b/libnautilus/nautilus-view-component.idl
@@ -121,35 +121,31 @@ module Nautilus {
* zoom_level_changed whenever it changes the zoom level (on
* its own or due to calls from the zoomable interface).
*/
-
interface ZoomableFrame : ::Bonobo::Unknown {
oneway void report_zoom_level_changed (in double zoom_level);
};
-
- /* The specifications for a history list item. The stucture
- * containes the name to be displayed and the position of
- * the item withing the history stack.
+ /* The specifications for a history list item. The structure
+ * contains the title of the item, and the location it's for.
*/
-
struct HistoryItem {
- string name;
- string location;
- long position;
+ string title;
+ URI location;
};
-
typedef sequence<HistoryItem> HistoryList;
+ struct History {
+ HistoryList list;
+ long position; /* 0 = end of list */
+ };
- /* The interface for something that manages and modifies history
- * transactions.
+ /* An interface that a component can use to get at the history
+ * list stored in Nautilus.
*/
-
interface HistoryFrame : ::Bonobo::Unknown {
-
/* Called by a view component to get the Nautilus
* history list.
*/
- HistoryList get_history_list ();
+ History get_history_list ();
};
};
diff --git a/src/Makefile.am b/src/Makefile.am
index 050f5a8c7..0131b51b2 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -117,7 +117,7 @@ nautilus_SOURCES = \
$(NULL)
$(nautilus_shell_interface_idl_sources): nautilus_shell_interface_idl_stamp
-nautilus_shell_interface_idl_stamp: nautilus-shell-interface.idl
+nautilus_shell_interface_idl_stamp: nautilus-shell-interface.idl ../libnautilus/nautilus-view-component.idl
$(ORBIT_IDL) $(IDL_CFLAGS) -I.. nautilus-shell-interface.idl
touch nautilus_shell_interface_idl_stamp
diff --git a/src/file-manager/fm-error-reporting.c b/src/file-manager/fm-error-reporting.c
index e9bff42d0..b60b818cf 100644
--- a/src/file-manager/fm-error-reporting.c
+++ b/src/file-manager/fm-error-reporting.c
@@ -31,6 +31,8 @@
#include <libnautilus-extensions/nautilus-stock-dialogs.h>
+#include <libnautilus-extensions/nautilus-file.h>
+
void
fm_report_error_renaming_file (NautilusFile *file,
const char *new_name,
@@ -131,3 +133,75 @@ fm_report_error_setting_permissions (NautilusFile *file,
nautilus_error_dialog (message, NULL);
g_free (message);
}
+
+typedef struct {
+ NautilusFile *file;
+ char *new_name;
+} RenameCallbackData;
+
+static void cancel_rename_callback (gpointer callback_data);
+
+static void
+rename_callback (NautilusFile *file, GnomeVFSResult result, gpointer callback_data)
+{
+ RenameCallbackData *data;
+
+ g_assert (NAUTILUS_IS_FILE (file));
+ g_assert (callback_data != NULL);
+
+ data = (RenameCallbackData *) callback_data;
+
+ g_assert (file == data->file);
+ g_assert (data->new_name != NULL);
+
+ /* We are done, no need to cancel any more. */
+ nautilus_timed_wait_stop (cancel_rename_callback, data);
+
+ /* If rename failed, notify the user. */
+ fm_report_error_renaming_file (file, data->new_name, result);
+
+ g_free (data->new_name);
+ g_free (data);
+}
+
+static void
+cancel_rename_callback (gpointer callback_data)
+{
+ RenameCallbackData *data;
+
+ g_assert (callback_data != NULL);
+
+ data = (RenameCallbackData *) callback_data;
+
+ g_assert (NAUTILUS_IS_FILE (data->file));
+ g_assert (data->new_name != NULL);
+
+ nautilus_file_cancel (data->file, rename_callback, callback_data);
+}
+
+void
+fm_rename_file (NautilusFile *file,
+ const char *new_name)
+{
+ char *new_name_dup, *old_name, *wait_message;
+
+ g_return_if_fail (NAUTILUS_IS_FILE (file));
+ g_return_if_fail (new_name != NULL);
+
+ old_name = nautilus_file_get_name (file);
+ wait_message = g_strdup_printf (_("Renaming %s to %s."),
+ old_name,
+ new_name);
+ g_free (old_name);
+
+ /* Start the rename. */
+ new_name_dup = g_strdup (new_name);
+ nautilus_file_rename (file, new_name_dup,
+ rename_callback, new_name_dup);
+ nautilus_timed_wait_start (cancel_rename_callback,
+ new_name_dup,
+ _("Cancel Rename?"),
+ wait_message,
+ NULL); /* FIXME: Parent this? */
+ g_free (wait_message);
+}
diff --git a/src/file-manager/fm-error-reporting.h b/src/file-manager/fm-error-reporting.h
index f0458b5fb..189fa4b33 100644
--- a/src/file-manager/fm-error-reporting.h
+++ b/src/file-manager/fm-error-reporting.h
@@ -30,17 +30,18 @@
#include <libgnomevfs/gnome-vfs-types.h>
#include <libnautilus-extensions/nautilus-file.h>
-void fm_report_error_renaming_file (NautilusFile *file,
- const char *new_name,
- GnomeVFSResult error_code);
-
+void fm_report_error_renaming_file (NautilusFile *file,
+ const char *new_name,
+ GnomeVFSResult error_code);
void fm_report_error_setting_permissions (NautilusFile *file,
GnomeVFSResult error_code);
-
-void fm_report_error_setting_owner (NautilusFile *file,
+void fm_report_error_setting_owner (NautilusFile *file,
GnomeVFSResult error_code);
-
-void fm_report_error_setting_group (NautilusFile *file,
+void fm_report_error_setting_group (NautilusFile *file,
GnomeVFSResult error_code);
+/* FIXME: Should this file be renamed or should these be moved? */
+void fm_rename_file (NautilusFile *file,
+ const char *new_name);
+
#endif /* FM_ERROR_REPORTING_H */
diff --git a/src/file-manager/fm-icon-view.c b/src/file-manager/fm-icon-view.c
index d529b59b6..f6c76f50d 100644
--- a/src/file-manager/fm-icon-view.c
+++ b/src/file-manager/fm-icon-view.c
@@ -1391,22 +1391,6 @@ icon_position_changed_callback (NautilusIconContainer *container,
setlocale (LC_NUMERIC, locale);
}
-static void
-rename_callback (NautilusFile *file, GnomeVFSResult result, gpointer callback_data)
-{
- char *new_name;
-
- g_assert (NAUTILUS_IS_FILE (file));
- g_assert (callback_data != NULL);
-
- new_name = (char *) callback_data;
-
- /* If rename failed, notify the user. */
- fm_report_error_renaming_file (file, new_name, result);
-
- g_free (new_name);
-}
-
/* Attempt to change the filename to the new text. Notify user if operation fails. */
static void
fm_icon_view_icon_text_changed_callback (NautilusIconContainer *container,
@@ -1415,17 +1399,15 @@ fm_icon_view_icon_text_changed_callback (NautilusIconContainer *container,
FMIconView *icon_view)
{
g_assert (NAUTILUS_IS_FILE (file));
+ g_assert (new_name != NULL);
/* Don't allow a rename with an empty string. Revert to original
* without notifying the user.
*/
- if (nautilus_strlen (new_name) == 0) {
+ if (new_name[0] == '\0') {
return;
}
-
- /* Start the rename. */
- nautilus_file_rename (file, new_name,
- rename_callback, g_strdup (new_name));
+ fm_rename_file (file, new_name);
}
static NautilusScalableIcon *
diff --git a/src/nautilus-application.c b/src/nautilus-application.c
index 85a7442a5..36206af57 100644
--- a/src/nautilus-application.c
+++ b/src/nautilus-application.c
@@ -98,7 +98,6 @@ create_object (PortableServer_Servant servant,
{
BonoboObject *object;
FMDirectoryView *directory_view;
- static NautilusShell *shell;
NautilusApplication *application;
if (strcmp (iid, ICON_VIEW_IID) == 0) {
@@ -111,13 +110,8 @@ create_object (PortableServer_Servant servant,
directory_view = FM_DIRECTORY_VIEW (gtk_object_new (fm_list_view_get_type (), NULL));
object = BONOBO_OBJECT (fm_directory_view_get_nautilus_view (directory_view));
} else if (strcmp (iid, SHELL_IID) == 0) {
- if (shell == NULL) {
- application = NAUTILUS_APPLICATION (((BonoboObjectServant *) servant)->bonobo_object);
- shell = nautilus_shell_new (application);
- } else {
- bonobo_object_ref (BONOBO_OBJECT (shell));
- }
- object = BONOBO_OBJECT (shell);
+ application = NAUTILUS_APPLICATION (((BonoboObjectServant *) servant)->bonobo_object);
+ object = BONOBO_OBJECT (nautilus_shell_new (application));
} else {
return CORBA_OBJECT_NIL;
}
@@ -297,17 +291,10 @@ nautilus_application_startup (NautilusApplication *application,
*/
nautilus_application_check_user_directories (application);
+ CORBA_exception_init (&ev);
+
/* Start up the factory. */
-#if 0
for (;;) {
- shell = oaf_activate_from_id (SHELL_IID, OAF_FLAG_EXISTING_ONLY, NULL, NULL);
- if (shell != CORBA_OBJECT_NIL) {
- g_message ("did activate");
- break;
- }
- g_message ("didn't activate");
-#endif
-
/* Try to register the file manager view factory with OAF. */
result = oaf_active_server_register
(FACTORY_IID,
@@ -315,6 +302,8 @@ nautilus_application_startup (NautilusApplication *application,
switch (result) {
case OAF_REG_SUCCESS:
/* We are registered with OAF and all is right with the world. */
+ case OAF_REG_ALREADY_ACTIVE:
+ /* Another copy of . */
message = NULL;
break;
case OAF_REG_NOT_LISTED:
@@ -344,15 +333,6 @@ nautilus_application_startup (NautilusApplication *application,
"the problem, but we don't know why. "
"We need a much less confusing message here for Nautilus 1.0.");
break;
- case OAF_REG_ALREADY_ACTIVE:
- /* Another copy of Nautilus is already running. */
- /* FIXME: We want to "glom on" to this old copy. */
- message = _("Nautilus is already running. "
- "Soon, instead of presenting this dialog, "
- "the already-running copy of Nautilus will "
- "respond by opening windows.");
- detailed_message = NULL;
- break;
default:
/* This should never happen. */
g_warning ("bad error code from oaf_active_server_register");
@@ -361,28 +341,43 @@ nautilus_application_startup (NautilusApplication *application,
* version of OAF). Show dialog and terminate the
* program.
*/
+ /* FIXME: Looks like this does happen with the
+ * current OAF. I guess I read the code
+ * wrong. Need to figure out when and make a
+ * good message.
+ */
message = _("Nautilus can't be used now, due to an unexpected error.");
detailed_message = _("Nautilus can't be used now, due to an unexpected error "
"from OAF when attempting to register the file manager view server.");
break;
}
+
+ /* Get the shell object. */
+ if (message == NULL) {
+ shell = oaf_activate_from_id (SHELL_IID, 0, NULL, NULL);
+ if (!CORBA_Object_is_nil (shell, &ev)) {
+ break;
+ }
+
+ /* If we couldn't find ourselves it's a bad problem so
+ * we better stop looping.
+ */
+ if (result == OAF_REG_SUCCESS) {
+ /* FIXME: When can this happen? */
+ message = _("Nautilus can't be used now, due to an unexpected error.");
+ detailed_message = _("Nautilus can't be used now, due to an unexpected error "
+ "from OAF when attempting to locate the factory.");
+ }
+ }
+
if (message != NULL) {
dialog = nautilus_error_dialog_with_details
(message, detailed_message, NULL);
gtk_signal_connect (GTK_OBJECT (dialog), "destroy",
gtk_main_quit, NULL);
- return;
+ goto out;
}
-#if 0
}
-#endif
-
- CORBA_exception_init (&ev);
-
- /* FIXME: This is a temporary hack so we can use the CORBA
- * interface even though I can't get activation to work.
- */
- shell = CORBA_Object_duplicate (bonobo_object_corba_objref (BONOBO_OBJECT (nautilus_shell_new (application))), &ev);
/* Set up the desktop. */
if (manage_desktop) {
@@ -408,6 +403,7 @@ nautilus_application_startup (NautilusApplication *application,
Nautilus_Shell_unref (shell, &ev);
CORBA_Object_release (shell, &ev);
+ out:
CORBA_exception_free (&ev);
}
@@ -416,7 +412,7 @@ nautilus_application_destroy_window (GtkObject *obj, NautilusApplication *applic
{
application->windows = g_slist_remove (application->windows, obj);
if (application->windows == NULL) {
- nautilus_application_quit();
+ nautilus_application_quit ();
}
}
diff --git a/src/nautilus-history-frame.c b/src/nautilus-history-frame.c
index 5b453230e..84843a889 100644
--- a/src/nautilus-history-frame.c
+++ b/src/nautilus-history-frame.c
@@ -27,7 +27,6 @@
Nautilus::HistoryFrame interface of a Nautilus HistoryFrame. */
#include <config.h>
-
#include "nautilus-history-frame.h"
typedef struct {
@@ -36,8 +35,8 @@ typedef struct {
NautilusViewFrame *view;
} impl_POA_Nautilus_HistoryFrame;
-static Nautilus_HistoryList *impl_Nautilus_HistoryFrame_get_history_list (PortableServer_Servant servant,
- CORBA_Environment *ev);
+static Nautilus_History *impl_Nautilus_HistoryFrame_get_history_list (PortableServer_Servant servant,
+ CORBA_Environment *ev);
POA_Nautilus_HistoryFrame__epv impl_Nautilus_HistoryFrame_epv =
{
@@ -95,10 +94,10 @@ impl_Nautilus_HistoryFrame__create (NautilusViewFrame *view,
return bonobo_object;
}
-static Nautilus_HistoryList *
+static Nautilus_History *
impl_Nautilus_HistoryFrame_get_history_list (PortableServer_Servant servant,
- CORBA_Environment *ev)
+ CORBA_Environment *ev)
{
- return (nautilus_view_frame_get_history_list
- (((impl_POA_Nautilus_HistoryFrame *)servant)->view));
+ return nautilus_view_frame_get_history_list
+ (((impl_POA_Nautilus_HistoryFrame *)servant)->view);
}
diff --git a/src/nautilus-information-panel.c b/src/nautilus-information-panel.c
index 941177e50..3486e58e8 100644
--- a/src/nautilus-information-panel.c
+++ b/src/nautilus-information-panel.c
@@ -1278,11 +1278,7 @@ nautilus_sidebar_update_info (NautilusSidebar *sidebar,
char *background_color, *color_spec;
char *background_image, *combine_mode;
- if (sidebar->details->uri == NULL) {
- directory = NULL;
- } else {
- directory = nautilus_directory_get (sidebar->details->uri);
- }
+ directory = nautilus_directory_get (sidebar->details->uri);
nautilus_directory_unref (sidebar->details->directory);
sidebar->details->directory = directory;
@@ -1352,8 +1348,8 @@ nautilus_sidebar_update_info (NautilusSidebar *sidebar,
/* tell the title widget about it */
nautilus_sidebar_title_set_uri (sidebar->details->title,
- sidebar->details->uri,
- initial_title);
+ sidebar->details->uri,
+ initial_title);
/* set up the command buttons */
nautilus_sidebar_update_buttons (sidebar);
diff --git a/src/nautilus-main.c b/src/nautilus-main.c
index 9dc1f246f..cecd7691a 100644
--- a/src/nautilus-main.c
+++ b/src/nautilus-main.c
@@ -30,19 +30,18 @@
#include <config.h>
-#include "nautilus-self-check-functions.h"
#include "nautilus-application.h"
+#include "nautilus-self-check-functions.h"
+#include <bonobo/bonobo-main.h>
#include <dlfcn.h>
-#include <libnautilus-extensions/nautilus-debug.h>
-#include <libnautilus-extensions/nautilus-lib-self-check-functions.h>
-#include <libnautilus-extensions/nautilus-self-checks.h>
-#include <popt.h>
#include <libgnome/gnome-i18n.h>
#include <libgnomeui/gnome-init.h>
-
#include <libgnomevfs/gnome-vfs-init.h>
+#include <libnautilus-extensions/nautilus-debug.h>
+#include <libnautilus-extensions/nautilus-lib-self-check-functions.h>
+#include <libnautilus-extensions/nautilus-self-checks.h>
#include <liboaf/liboaf.h>
-#include <bonobo/bonobo-main.h>
+#include <popt.h>
#include <stdlib.h>
/* FIXME: Replace the leak checker calls with weakly exported ones in
@@ -136,6 +135,7 @@ main (int argc, char *argv[])
orb = oaf_init (argc, argv);
gnome_vfs_init ();
bonobo_init (orb, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL);
+ bonobo_activate (); /* do now since we need it before main loop */
/* Do either the self-check or the real work. */
if (perform_self_check) {
@@ -151,7 +151,9 @@ main (int argc, char *argv[])
nautilus_application_startup (application,
manage_desktop,
poptGetArgs (popt_context));
- bonobo_main ();
+ if (application->windows != NULL) {
+ bonobo_main ();
+ }
bonobo_object_unref (BONOBO_OBJECT (application));
}
diff --git a/src/nautilus-navigation-window.c b/src/nautilus-navigation-window.c
index d890c9a27..6fd975f42 100644
--- a/src/nautilus-navigation-window.c
+++ b/src/nautilus-navigation-window.c
@@ -1156,48 +1156,44 @@ nautilus_window_zoom_level_changed_callback (NautilusViewFrame *view,
}
}
-static void
+static Nautilus_History *
nautilus_window_get_history_list_callback (NautilusViewFrame *view,
- Nautilus_HistoryList **out_list,
- NautilusWindow *window)
+ NautilusWindow *window)
{
- Nautilus_HistoryList *local_list;
- Nautilus_HistoryItem *history_item;
+ Nautilus_History *history;
+ Nautilus_HistoryList *list;
NautilusBookmark *bookmark;
- int length, index;
- GSList *element;
+ int length, i;
+ GSList *p;
char *name, *location;
/* Get total number of history items */
length = g_slist_length (history_list);
- if (length <= 0) {
- *out_list = NULL;
- return;
- }
- local_list = Nautilus_HistoryList__alloc ();
- local_list->_length = length;
- local_list->_maximum = length;
- local_list->_buffer = CORBA_sequence_Nautilus_HistoryItem_allocbuf (length);
+ history = Nautilus_History__alloc ();
+ list = &history->list;
+ history->position = 0; /* FIXME */
+
+ list->_length = length;
+ list->_maximum = length;
+ list->_buffer = CORBA_sequence_Nautilus_HistoryItem_allocbuf (length);
+ CORBA_sequence_set_release (list, CORBA_TRUE);
/* Iterate through list and copy item data */
- for (index = 0, element = history_list; index < length; index++, element = element->next) {
- bookmark = element->data;
+ for (i = 0, p = history_list; i < length; i++, p = p->next) {
+ bookmark = p->data;
+
name = nautilus_bookmark_get_name (bookmark);
location = nautilus_bookmark_get_uri (bookmark);
- history_item = &local_list->_buffer[index];
- history_item->name = CORBA_string_dup (name);
- history_item->location = CORBA_string_dup (location);
-
- history_item->position = index;
+ list->_buffer[i].title = CORBA_string_dup (name);
+ list->_buffer[i].location = CORBA_string_dup (location);
g_free (name);
g_free (location);
}
- CORBA_sequence_set_release (local_list, CORBA_TRUE);
- *out_list = local_list;
+ return history;
}
void
@@ -1207,7 +1203,7 @@ nautilus_window_connect_view (NautilusWindow *window, NautilusViewFrame *view)
view_object = GTK_OBJECT (view);
- #define CONNECT(signal) gtk_signal_connect (view_object, #signal, nautilus_window_##signal##_callback, window)
+ #define CONNECT(signal) gtk_signal_connect (view_object, #signal, GTK_SIGNAL_FUNC (nautilus_window_##signal##_callback), window)
CONNECT (open_location);
CONNECT (open_location_in_new_window);
diff --git a/src/nautilus-object-window.c b/src/nautilus-object-window.c
index d890c9a27..6fd975f42 100644
--- a/src/nautilus-object-window.c
+++ b/src/nautilus-object-window.c
@@ -1156,48 +1156,44 @@ nautilus_window_zoom_level_changed_callback (NautilusViewFrame *view,
}
}
-static void
+static Nautilus_History *
nautilus_window_get_history_list_callback (NautilusViewFrame *view,
- Nautilus_HistoryList **out_list,
- NautilusWindow *window)
+ NautilusWindow *window)
{
- Nautilus_HistoryList *local_list;
- Nautilus_HistoryItem *history_item;
+ Nautilus_History *history;
+ Nautilus_HistoryList *list;
NautilusBookmark *bookmark;
- int length, index;
- GSList *element;
+ int length, i;
+ GSList *p;
char *name, *location;
/* Get total number of history items */
length = g_slist_length (history_list);
- if (length <= 0) {
- *out_list = NULL;
- return;
- }
- local_list = Nautilus_HistoryList__alloc ();
- local_list->_length = length;
- local_list->_maximum = length;
- local_list->_buffer = CORBA_sequence_Nautilus_HistoryItem_allocbuf (length);
+ history = Nautilus_History__alloc ();
+ list = &history->list;
+ history->position = 0; /* FIXME */
+
+ list->_length = length;
+ list->_maximum = length;
+ list->_buffer = CORBA_sequence_Nautilus_HistoryItem_allocbuf (length);
+ CORBA_sequence_set_release (list, CORBA_TRUE);
/* Iterate through list and copy item data */
- for (index = 0, element = history_list; index < length; index++, element = element->next) {
- bookmark = element->data;
+ for (i = 0, p = history_list; i < length; i++, p = p->next) {
+ bookmark = p->data;
+
name = nautilus_bookmark_get_name (bookmark);
location = nautilus_bookmark_get_uri (bookmark);
- history_item = &local_list->_buffer[index];
- history_item->name = CORBA_string_dup (name);
- history_item->location = CORBA_string_dup (location);
-
- history_item->position = index;
+ list->_buffer[i].title = CORBA_string_dup (name);
+ list->_buffer[i].location = CORBA_string_dup (location);
g_free (name);
g_free (location);
}
- CORBA_sequence_set_release (local_list, CORBA_TRUE);
- *out_list = local_list;
+ return history;
}
void
@@ -1207,7 +1203,7 @@ nautilus_window_connect_view (NautilusWindow *window, NautilusViewFrame *view)
view_object = GTK_OBJECT (view);
- #define CONNECT(signal) gtk_signal_connect (view_object, #signal, nautilus_window_##signal##_callback, window)
+ #define CONNECT(signal) gtk_signal_connect (view_object, #signal, GTK_SIGNAL_FUNC (nautilus_window_##signal##_callback), window)
CONNECT (open_location);
CONNECT (open_location_in_new_window);
diff --git a/src/nautilus-shell.c b/src/nautilus-shell.c
index 34308842c..599f41a30 100644
--- a/src/nautilus-shell.c
+++ b/src/nautilus-shell.c
@@ -45,8 +45,6 @@
struct NautilusShellDetails {
NautilusApplication *application;
- NautilusDesktopWindow *desktop_window;
- gboolean showed_caveat;
};
static void nautilus_shell_initialize (NautilusShell *shell);
@@ -198,18 +196,20 @@ display_caveat (GtkWindow *parent_window)
static void
display_caveat_first_time (NautilusShell *shell, NautilusWindow *window)
{
+ static gboolean showed_caveat;
+
/* Show the "not ready for prime time" dialog after the first
* window appears, so it's on top.
*/
/* FIXME bugzilla.eazel.com 1256: It's not on top of the
* windows other than the first one.
*/
- if (!shell->details->showed_caveat
+ if (!showed_caveat
&& g_getenv ("NAUTILUS_NO_CAVEAT_DIALOG") == NULL) {
gtk_signal_connect (GTK_OBJECT (window), "show",
display_caveat, window);
}
- shell->details->showed_caveat = TRUE;
+ showed_caveat = TRUE;
}
static void
@@ -260,12 +260,13 @@ corba_manage_desktop (PortableServer_Servant servant,
CORBA_Environment *ev)
{
NautilusShell *shell;
+ static NautilusDesktopWindow *desktop_window;
shell = NAUTILUS_SHELL (((BonoboObjectServant *) servant)->bonobo_object);
/* Create a desktop window. */
- if (shell->details->desktop_window == NULL) {
- shell->details->desktop_window = nautilus_desktop_window_new (shell->details->application);
+ if (desktop_window == NULL) {
+ desktop_window = nautilus_desktop_window_new (shell->details->application);
}
- gtk_widget_show (GTK_WIDGET (shell->details->desktop_window));
+ gtk_widget_show (GTK_WIDGET (desktop_window));
}
diff --git a/src/nautilus-sidebar.c b/src/nautilus-sidebar.c
index 941177e50..3486e58e8 100644
--- a/src/nautilus-sidebar.c
+++ b/src/nautilus-sidebar.c
@@ -1278,11 +1278,7 @@ nautilus_sidebar_update_info (NautilusSidebar *sidebar,
char *background_color, *color_spec;
char *background_image, *combine_mode;
- if (sidebar->details->uri == NULL) {
- directory = NULL;
- } else {
- directory = nautilus_directory_get (sidebar->details->uri);
- }
+ directory = nautilus_directory_get (sidebar->details->uri);
nautilus_directory_unref (sidebar->details->directory);
sidebar->details->directory = directory;
@@ -1352,8 +1348,8 @@ nautilus_sidebar_update_info (NautilusSidebar *sidebar,
/* tell the title widget about it */
nautilus_sidebar_title_set_uri (sidebar->details->title,
- sidebar->details->uri,
- initial_title);
+ sidebar->details->uri,
+ initial_title);
/* set up the command buttons */
nautilus_sidebar_update_buttons (sidebar);
diff --git a/src/nautilus-spatial-window.c b/src/nautilus-spatial-window.c
index d890c9a27..6fd975f42 100644
--- a/src/nautilus-spatial-window.c
+++ b/src/nautilus-spatial-window.c
@@ -1156,48 +1156,44 @@ nautilus_window_zoom_level_changed_callback (NautilusViewFrame *view,
}
}
-static void
+static Nautilus_History *
nautilus_window_get_history_list_callback (NautilusViewFrame *view,
- Nautilus_HistoryList **out_list,
- NautilusWindow *window)
+ NautilusWindow *window)
{
- Nautilus_HistoryList *local_list;
- Nautilus_HistoryItem *history_item;
+ Nautilus_History *history;
+ Nautilus_HistoryList *list;
NautilusBookmark *bookmark;
- int length, index;
- GSList *element;
+ int length, i;
+ GSList *p;
char *name, *location;
/* Get total number of history items */
length = g_slist_length (history_list);
- if (length <= 0) {
- *out_list = NULL;
- return;
- }
- local_list = Nautilus_HistoryList__alloc ();
- local_list->_length = length;
- local_list->_maximum = length;
- local_list->_buffer = CORBA_sequence_Nautilus_HistoryItem_allocbuf (length);
+ history = Nautilus_History__alloc ();
+ list = &history->list;
+ history->position = 0; /* FIXME */
+
+ list->_length = length;
+ list->_maximum = length;
+ list->_buffer = CORBA_sequence_Nautilus_HistoryItem_allocbuf (length);
+ CORBA_sequence_set_release (list, CORBA_TRUE);
/* Iterate through list and copy item data */
- for (index = 0, element = history_list; index < length; index++, element = element->next) {
- bookmark = element->data;
+ for (i = 0, p = history_list; i < length; i++, p = p->next) {
+ bookmark = p->data;
+
name = nautilus_bookmark_get_name (bookmark);
location = nautilus_bookmark_get_uri (bookmark);
- history_item = &local_list->_buffer[index];
- history_item->name = CORBA_string_dup (name);
- history_item->location = CORBA_string_dup (location);
-
- history_item->position = index;
+ list->_buffer[i].title = CORBA_string_dup (name);
+ list->_buffer[i].location = CORBA_string_dup (location);
g_free (name);
g_free (location);
}
- CORBA_sequence_set_release (local_list, CORBA_TRUE);
- *out_list = local_list;
+ return history;
}
void
@@ -1207,7 +1203,7 @@ nautilus_window_connect_view (NautilusWindow *window, NautilusViewFrame *view)
view_object = GTK_OBJECT (view);
- #define CONNECT(signal) gtk_signal_connect (view_object, #signal, nautilus_window_##signal##_callback, window)
+ #define CONNECT(signal) gtk_signal_connect (view_object, #signal, GTK_SIGNAL_FUNC (nautilus_window_##signal##_callback), window)
CONNECT (open_location);
CONNECT (open_location_in_new_window);
diff --git a/src/nautilus-view-frame.c b/src/nautilus-view-frame.c
index e5083b1d9..da3ac87ca 100644
--- a/src/nautilus-view-frame.c
+++ b/src/nautilus-view-frame.c
@@ -1,4 +1,4 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* Nautilus
@@ -42,20 +42,20 @@
#include <libnautilus/nautilus-zoomable.h>
enum {
- OPEN_LOCATION,
- OPEN_LOCATION_IN_NEW_WINDOW,
- REPORT_LOCATION_CHANGE,
- REPORT_SELECTION_CHANGE,
- REPORT_STATUS,
- REPORT_LOAD_UNDERWAY,
- REPORT_LOAD_PROGRESS,
- REPORT_LOAD_COMPLETE,
- REPORT_LOAD_FAILED,
- SET_TITLE,
- ZOOM_LEVEL_CHANGED,
- CLIENT_GONE,
- GET_HISTORY_LIST,
- LAST_SIGNAL
+ OPEN_LOCATION,
+ OPEN_LOCATION_IN_NEW_WINDOW,
+ REPORT_LOCATION_CHANGE,
+ REPORT_SELECTION_CHANGE,
+ REPORT_STATUS,
+ REPORT_LOAD_UNDERWAY,
+ REPORT_LOAD_PROGRESS,
+ REPORT_LOAD_COMPLETE,
+ REPORT_LOAD_FAILED,
+ SET_TITLE,
+ ZOOM_LEVEL_CHANGED,
+ CLIENT_GONE,
+ GET_HISTORY_LIST,
+ LAST_SIGNAL
};
static void nautilus_view_frame_initialize (NautilusViewFrame *view);
@@ -69,180 +69,186 @@ NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusViewFrame, nautilus_view_frame, NAUTI
static void
nautilus_view_frame_initialize_class (NautilusViewFrameClass *klass)
{
- GtkObjectClass *object_class;
-
- object_class = (GtkObjectClass*) klass;
- object_class->destroy = nautilus_view_frame_destroy;
-
- signals[OPEN_LOCATION] =
- gtk_signal_new ("open_location",
- GTK_RUN_LAST,
- object_class->type,
- GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
- open_location),
- gtk_marshal_NONE__STRING,
- GTK_TYPE_NONE, 1, GTK_TYPE_STRING);
- signals[OPEN_LOCATION_IN_NEW_WINDOW] =
- gtk_signal_new ("open_location_in_new_window",
- GTK_RUN_LAST,
- object_class->type,
- GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
- open_location_in_new_window),
- gtk_marshal_NONE__STRING,
- GTK_TYPE_NONE, 1, GTK_TYPE_STRING);
- signals[REPORT_LOCATION_CHANGE] =
- gtk_signal_new ("report_location_change",
- GTK_RUN_LAST,
- object_class->type,
- GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
- report_location_change),
- gtk_marshal_NONE__STRING,
- GTK_TYPE_NONE, 1, GTK_TYPE_STRING);
- signals[REPORT_SELECTION_CHANGE] =
- gtk_signal_new ("report_selection_change",
- GTK_RUN_LAST,
- object_class->type,
- GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
- report_selection_change),
- gtk_marshal_NONE__POINTER,
- GTK_TYPE_NONE, 1, GTK_TYPE_POINTER);
- signals[REPORT_STATUS] =
- gtk_signal_new ("report_status",
- GTK_RUN_LAST,
- object_class->type,
- GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
- report_status),
- gtk_marshal_NONE__STRING,
- GTK_TYPE_NONE, 1, GTK_TYPE_STRING);
- signals[REPORT_LOAD_UNDERWAY] =
- gtk_signal_new ("report_load_underway",
- GTK_RUN_LAST,
- object_class->type,
- GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
- report_load_underway),
- gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- signals[REPORT_LOAD_PROGRESS] =
- gtk_signal_new ("report_load_progress",
- GTK_RUN_LAST,
- object_class->type,
- GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
- report_load_progress),
- nautilus_gtk_marshal_NONE__DOUBLE,
- GTK_TYPE_NONE, 1, GTK_TYPE_DOUBLE);
- signals[REPORT_LOAD_COMPLETE] =
- gtk_signal_new ("report_load_complete",
- GTK_RUN_LAST,
- object_class->type,
- GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
- report_load_complete),
- gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- signals[REPORT_LOAD_FAILED] =
- gtk_signal_new ("report_load_failed",
- GTK_RUN_LAST,
- object_class->type,
- GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
- report_load_failed),
- gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- signals[SET_TITLE] =
- gtk_signal_new ("set_title",
- GTK_RUN_LAST,
- object_class->type,
- GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
- set_title),
- gtk_marshal_NONE__STRING,
- GTK_TYPE_NONE, 1, GTK_TYPE_STRING);
-
- signals[ZOOM_LEVEL_CHANGED] =
- gtk_signal_new ("zoom_level_changed",
- GTK_RUN_LAST,
- object_class->type,
- GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
- zoom_level_changed),
- nautilus_gtk_marshal_NONE__DOUBLE,
- GTK_TYPE_NONE, 1, GTK_TYPE_DOUBLE);
-
- signals[CLIENT_GONE] =
- gtk_signal_new ("client_gone",
- GTK_RUN_LAST,
- object_class->type,
- GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
- client_gone),
- gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
-
- signals[GET_HISTORY_LIST] =
- gtk_signal_new ("get_history_list",
- GTK_RUN_LAST,
+ GtkObjectClass *object_class;
+
+ object_class = (GtkObjectClass*) klass;
+ object_class->destroy = nautilus_view_frame_destroy;
+
+ signals[OPEN_LOCATION] =
+ gtk_signal_new ("open_location",
+ GTK_RUN_LAST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
+ open_location),
+ gtk_marshal_NONE__STRING,
+ GTK_TYPE_NONE, 1, GTK_TYPE_STRING);
+ signals[OPEN_LOCATION_IN_NEW_WINDOW] =
+ gtk_signal_new ("open_location_in_new_window",
+ GTK_RUN_LAST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
+ open_location_in_new_window),
+ gtk_marshal_NONE__STRING,
+ GTK_TYPE_NONE, 1, GTK_TYPE_STRING);
+ signals[REPORT_LOCATION_CHANGE] =
+ gtk_signal_new ("report_location_change",
+ GTK_RUN_LAST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
+ report_location_change),
+ gtk_marshal_NONE__STRING,
+ GTK_TYPE_NONE, 1, GTK_TYPE_STRING);
+ signals[REPORT_SELECTION_CHANGE] =
+ gtk_signal_new ("report_selection_change",
+ GTK_RUN_LAST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
+ report_selection_change),
+ gtk_marshal_NONE__POINTER,
+ GTK_TYPE_NONE, 1, GTK_TYPE_POINTER);
+ signals[REPORT_STATUS] =
+ gtk_signal_new ("report_status",
+ GTK_RUN_LAST,
object_class->type,
- GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
- get_history_list),
- gtk_marshal_NONE__POINTER,
- GTK_TYPE_NONE, 1, GTK_TYPE_POINTER);
-
- gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
+ GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
+ report_status),
+ gtk_marshal_NONE__STRING,
+ GTK_TYPE_NONE, 1, GTK_TYPE_STRING);
+ signals[REPORT_LOAD_UNDERWAY] =
+ gtk_signal_new ("report_load_underway",
+ GTK_RUN_LAST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
+ report_load_underway),
+ gtk_marshal_NONE__NONE,
+ GTK_TYPE_NONE, 0);
+ signals[REPORT_LOAD_PROGRESS] =
+ gtk_signal_new ("report_load_progress",
+ GTK_RUN_LAST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
+ report_load_progress),
+ nautilus_gtk_marshal_NONE__DOUBLE,
+ GTK_TYPE_NONE, 1, GTK_TYPE_DOUBLE);
+ signals[REPORT_LOAD_COMPLETE] =
+ gtk_signal_new ("report_load_complete",
+ GTK_RUN_LAST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
+ report_load_complete),
+ gtk_marshal_NONE__NONE,
+ GTK_TYPE_NONE, 0);
+ signals[REPORT_LOAD_FAILED] =
+ gtk_signal_new ("report_load_failed",
+ GTK_RUN_LAST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
+ report_load_failed),
+ gtk_marshal_NONE__NONE,
+ GTK_TYPE_NONE, 0);
+ signals[SET_TITLE] =
+ gtk_signal_new ("set_title",
+ GTK_RUN_LAST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
+ set_title),
+ gtk_marshal_NONE__STRING,
+ GTK_TYPE_NONE, 1, GTK_TYPE_STRING);
+
+ signals[ZOOM_LEVEL_CHANGED] =
+ gtk_signal_new ("zoom_level_changed",
+ GTK_RUN_LAST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
+ zoom_level_changed),
+ nautilus_gtk_marshal_NONE__DOUBLE,
+ GTK_TYPE_NONE, 1, GTK_TYPE_DOUBLE);
+
+ signals[CLIENT_GONE] =
+ gtk_signal_new ("client_gone",
+ GTK_RUN_LAST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
+ client_gone),
+ gtk_marshal_NONE__NONE,
+ GTK_TYPE_NONE, 0);
+
+ signals[GET_HISTORY_LIST] =
+ gtk_signal_new ("get_history_list",
+ GTK_RUN_LAST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (NautilusViewFrameClass,
+ get_history_list),
+ nautilus_gtk_marshal_POINTER__NONE,
+ GTK_TYPE_POINTER, 0);
+
+ gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
}
static void
nautilus_view_frame_initialize (NautilusViewFrame *view)
{
- GTK_WIDGET_SET_FLAGS (view, GTK_NO_WINDOW);
+ GTK_WIDGET_SET_FLAGS (view, GTK_NO_WINDOW);
}
static void
-nautilus_view_frame_destroy_client(NautilusViewFrame *view)
+nautilus_view_frame_destroy_client (NautilusViewFrame *view)
{
- CORBA_Environment ev;
- CORBA_exception_init(&ev);
-
- if(!view->component_class)
- return;
-
- g_free(view->iid); view->iid = NULL;
-
- bonobo_object_unref (BONOBO_OBJECT (view->client_object)); view->client_object = NULL;
-
- gtk_container_remove (GTK_CONTAINER(view), view->client_widget); view->client_widget = NULL;
-
- if (! CORBA_Object_is_nil (view->zoomable, &ev)) {
- Bonobo_Unknown_unref (view->zoomable, &ev);
- view->zoomable = CORBA_OBJECT_NIL;
- }
-
- if(view->component_class->destroy) {
- view->component_class->destroy(view, &ev);
- }
+ CORBA_Environment ev;
+ CORBA_exception_init(&ev);
+
+ if (view->component_class == 0) {
+ return;
+ }
+
+ g_free(view->iid);
+ view->iid = NULL;
+
+ bonobo_object_unref (BONOBO_OBJECT (view->client_object));
+ view->client_object = NULL;
- /* FIXME bugzilla.eazel.com 917: This should be bonobo_object_unref,
- * but there is a circular reference between Bonobo_Control and
- * Bonobo_ControlFrame that prevents it from working. Once that's
- * fixed, we'd really like to change it to unref instead of destroy.
- */
- bonobo_object_destroy (view->view_frame);
- view->view_frame = NULL;
+ gtk_container_remove (GTK_CONTAINER(view), view->client_widget);
+ view->client_widget = NULL;
- view->component_class = NULL;
- view->component_data = NULL;
+ if (!CORBA_Object_is_nil (view->zoomable, &ev)) {
+ Bonobo_Unknown_unref (view->zoomable, &ev);
+ CORBA_Object_release (view->zoomable, &ev);
+ view->zoomable = CORBA_OBJECT_NIL;
+ }
- CORBA_exception_free(&ev);
+ if (view->component_class->destroy != NULL) {
+ view->component_class->destroy (view, &ev);
+ }
+
+ /* FIXME bugzilla.eazel.com 917: This should be bonobo_object_unref,
+ * but there is a circular reference between Bonobo_Control and
+ * Bonobo_ControlFrame that prevents it from working. Once that's
+ * fixed, we'd really like to change it to unref instead of destroy.
+ */
+ bonobo_object_destroy (view->view_frame);
+ view->view_frame = NULL;
+
+ view->component_class = NULL;
+ view->component_data = NULL;
+
+ CORBA_exception_free(&ev);
}
static void
-nautilus_view_frame_destroy(GtkObject *view)
+nautilus_view_frame_destroy (GtkObject *object)
{
- NautilusViewFrame *nview = NAUTILUS_VIEW_FRAME(view);
-
- if(nview->timer_id)
- {
- g_source_remove(nview->timer_id);
- nview->timer_id = 0;
- }
+ NautilusViewFrame *frame;
- nautilus_view_frame_destroy_client(nview);
-
- NAUTILUS_CALL_PARENT_CLASS (GTK_OBJECT_CLASS, destroy, (view));
+ frame = NAUTILUS_VIEW_FRAME (object);
+
+ if(frame->timer_id != 0) {
+ g_source_remove (frame->timer_id);
+ frame->timer_id = 0;
+ }
+
+ nautilus_view_frame_destroy_client (frame);
+
+ NAUTILUS_CALL_PARENT_CLASS (GTK_OBJECT_CLASS, destroy, (object));
}
extern NautilusViewComponentType nautilus_view_component_type; /* ntl-view-nautilus.c */
@@ -250,30 +256,33 @@ extern NautilusViewComponentType bonobo_subdoc_component_type; /* ntl-view-bonob
extern NautilusViewComponentType bonobo_control_component_type; /* ntl-view-bonobo-control.c */
static gboolean
-nautilus_view_frame_handle_client_destroy(GtkWidget *widget, NautilusViewFrame *view)
+nautilus_view_frame_handle_client_destroy (GtkWidget *widget, NautilusViewFrame *view)
{
- gtk_object_destroy(GTK_OBJECT(view));
- return TRUE;
+ gtk_object_destroy (GTK_OBJECT(view));
+ return TRUE;
}
static void
-nautilus_view_frame_handle_client_destroy_2(GtkObject *object, CORBA_Object cobject, CORBA_Environment *ev, NautilusViewFrame *view)
+nautilus_view_frame_handle_client_destroy_2 (GtkObject *object,
+ CORBA_Object cobject,
+ CORBA_Environment *ev,
+ NautilusViewFrame *view)
{
- gtk_signal_emit (object, signals[CLIENT_GONE]);
+ gtk_signal_emit (object, signals[CLIENT_GONE]);
}
NautilusViewFrame *
nautilus_view_frame_new (BonoboUIHandler *ui_handler,
NautilusUndoManager *undo_manager)
{
- NautilusViewFrame *view_frame;
-
- view_frame = NAUTILUS_VIEW_FRAME (gtk_object_new (nautilus_view_frame_get_type (), NULL));
-
- view_frame->ui_handler = ui_handler;
- view_frame->undo_manager = undo_manager;
-
- return view_frame;
+ NautilusViewFrame *view_frame;
+
+ view_frame = NAUTILUS_VIEW_FRAME (gtk_object_new (nautilus_view_frame_get_type (), NULL));
+
+ view_frame->ui_handler = ui_handler;
+ view_frame->undo_manager = undo_manager;
+
+ return view_frame;
}
gboolean /* returns TRUE if successful */
@@ -320,16 +329,18 @@ nautilus_view_frame_load_client (NautilusViewFrame *view, const char *iid)
/* Now figure out which type of embedded object it is: */
for(i = 0; component_types[i] && !view->component_class; i++) {
- obj = Bonobo_Unknown_query_interface(bonobo_object_corba_objref(BONOBO_OBJECT(view->client_object)),
- component_types[i]->primary_repoid, &ev);
- if(ev._major != CORBA_NO_EXCEPTION)
+ obj = Bonobo_Unknown_query_interface (bonobo_object_corba_objref(BONOBO_OBJECT(view->client_object)),
+ component_types[i]->primary_repoid, &ev);
+ if (ev._major != CORBA_NO_EXCEPTION) {
obj = CORBA_OBJECT_NIL;
-
- if(CORBA_Object_is_nil(obj, &ev))
+ }
+
+ if (CORBA_Object_is_nil(obj, &ev)) {
continue;
+ }
zoomable = bonobo_object_query_interface (BONOBO_OBJECT (view->client_object),
- "IDL:Nautilus/Zoomable:1.0");
+ "IDL:Nautilus/Zoomable:1.0");
view->zoomable = zoomable;
@@ -339,8 +350,9 @@ nautilus_view_frame_load_client (NautilusViewFrame *view, const char *iid)
Bonobo_Unknown_unref(obj, &ev);
CORBA_Object_release(obj, &ev);
- if (view->component_class)
+ if (view->component_class) {
break;
+ }
}
if (!view->component_class) {
@@ -351,16 +363,16 @@ nautilus_view_frame_load_client (NautilusViewFrame *view, const char *iid)
view->iid = g_strdup(iid);
- gtk_signal_connect_while_alive(GTK_OBJECT(view->client_object), "destroy",
- GTK_SIGNAL_FUNC(nautilus_view_frame_handle_client_destroy), view,
- GTK_OBJECT(view));
- gtk_signal_connect_while_alive(GTK_OBJECT(view->client_object), "object_gone",
- GTK_SIGNAL_FUNC(nautilus_view_frame_handle_client_destroy_2), view,
- GTK_OBJECT(view));
- gtk_signal_connect_while_alive(GTK_OBJECT(view->client_object), "system_exception",
- GTK_SIGNAL_FUNC(nautilus_view_frame_handle_client_destroy_2), view,
- GTK_OBJECT(view));
- gtk_container_add(GTK_CONTAINER(view), view->client_widget);
+ gtk_signal_connect_while_alive (GTK_OBJECT (view->client_object), "destroy",
+ GTK_SIGNAL_FUNC (nautilus_view_frame_handle_client_destroy), view,
+ GTK_OBJECT (view));
+ gtk_signal_connect_while_alive (GTK_OBJECT (view->client_object), "object_gone",
+ GTK_SIGNAL_FUNC (nautilus_view_frame_handle_client_destroy_2), view,
+ GTK_OBJECT (view));
+ gtk_signal_connect_while_alive (GTK_OBJECT (view->client_object), "system_exception",
+ GTK_SIGNAL_FUNC (nautilus_view_frame_handle_client_destroy_2), view,
+ GTK_OBJECT (view));
+ gtk_container_add (GTK_CONTAINER (view), view->client_widget);
gtk_widget_show(view->client_widget);
CORBA_exception_free(&ev);
@@ -371,436 +383,427 @@ void
nautilus_view_frame_load_location (NautilusViewFrame *view,
const char *location)
{
- CORBA_Environment ev;
-
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
- g_return_if_fail (view->component_class != NULL);
-
- if (view->component_class->load_location == NULL)
- return;
-
- CORBA_exception_init(&ev);
- /* ORBit does a bad job with Nautilus_URI, so it's not const char *. */
- view->component_class->load_location(view, (Nautilus_URI) location, &ev);
- CORBA_exception_free(&ev);
+ CORBA_Environment ev;
+
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+ g_return_if_fail (view->component_class != NULL);
+
+ if (view->component_class->load_location == NULL) {
+ return;
+ }
+
+ CORBA_exception_init(&ev);
+ /* ORBit does a bad job with Nautilus_URI, so it's not const char *. */
+ view->component_class->load_location(view, (Nautilus_URI) location, &ev);
+ CORBA_exception_free(&ev);
}
void
nautilus_view_frame_stop_loading (NautilusViewFrame *view)
{
- CORBA_Environment ev;
-
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
- g_return_if_fail (view->component_class != NULL);
-
- if (view->component_class->stop_loading == NULL)
- return;
+ CORBA_Environment ev;
+
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+ g_return_if_fail (view->component_class != NULL);
+
+ if (view->component_class->stop_loading == NULL) {
+ return;
+ }
- CORBA_exception_init(&ev);
- view->component_class->stop_loading(view, &ev);
- CORBA_exception_free(&ev);
+ CORBA_exception_init(&ev);
+ view->component_class->stop_loading(view, &ev);
+ CORBA_exception_free(&ev);
}
void
nautilus_view_frame_selection_changed (NautilusViewFrame *view,
GList *selection)
{
- Nautilus_URIList *uri_list;
-
- CORBA_Environment ev;
-
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
- g_return_if_fail (view->component_class != NULL);
-
- if (view->component_class->selection_changed == NULL)
- return;
-
- uri_list = nautilus_uri_list_from_g_list (selection);
-
- CORBA_exception_init(&ev);
- view->component_class->selection_changed(view, uri_list, &ev);
- CORBA_exception_free(&ev);
-
- CORBA_free (uri_list);
+ Nautilus_URIList *uri_list;
+
+ CORBA_Environment ev;
+
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+ g_return_if_fail (view->component_class != NULL);
+
+ if (view->component_class->selection_changed == NULL) {
+ return;
+ }
+
+ uri_list = nautilus_uri_list_from_g_list (selection);
+
+ CORBA_exception_init(&ev);
+ view->component_class->selection_changed(view, uri_list, &ev);
+ CORBA_exception_free(&ev);
+
+ CORBA_free (uri_list);
}
gboolean
nautilus_view_frame_is_zoomable (NautilusViewFrame *view)
{
- CORBA_Environment ev;
- gboolean is_zoomable;
-
- g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), FALSE);
-
- CORBA_exception_init (&ev);
- is_zoomable = CORBA_Object_is_nil (view->zoomable, &ev);
- CORBA_exception_free (&ev);
-
- return is_zoomable;
+ CORBA_Environment ev;
+ gboolean is_zoomable;
+
+ g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), FALSE);
+
+ CORBA_exception_init (&ev);
+ is_zoomable = CORBA_Object_is_nil (view->zoomable, &ev);
+ CORBA_exception_free (&ev);
+
+ return is_zoomable;
}
gdouble
nautilus_view_frame_get_zoom_level (NautilusViewFrame *view)
{
- CORBA_Environment ev;
- gdouble retval;
-
- g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), 0);
-
- CORBA_exception_init (&ev);
-
- if (!CORBA_Object_is_nil (view->zoomable, &ev)) {
- retval = Nautilus_Zoomable__get_zoom_level (view->zoomable, &ev);
- } else {
- retval = 1.0;
- }
-
- CORBA_exception_free (&ev);
+ CORBA_Environment ev;
+ double level;
+
+ g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), 0);
+
+ CORBA_exception_init (&ev);
+
+ if (!CORBA_Object_is_nil (view->zoomable, &ev)) {
+ level = Nautilus_Zoomable__get_zoom_level (view->zoomable, &ev);
+ } else {
+ level = 1.0;
+ }
- return retval;
+ CORBA_exception_free (&ev);
+
+ return level;
}
void
nautilus_view_frame_set_zoom_level (NautilusViewFrame *view,
- gdouble zoom_level)
+ double zoom_level)
{
- CORBA_Environment ev;
-
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
-
- CORBA_exception_init (&ev);
-
- if (!CORBA_Object_is_nil (view->zoomable, &ev)) {
- Nautilus_Zoomable__set_zoom_level (view->zoomable, zoom_level, &ev);
- } else {
- /* do nothing */
- }
-
- CORBA_exception_free (&ev);
+ CORBA_Environment ev;
+
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+
+ CORBA_exception_init (&ev);
+
+ if (!CORBA_Object_is_nil (view->zoomable, &ev)) {
+ Nautilus_Zoomable__set_zoom_level (view->zoomable, zoom_level, &ev);
+ } else {
+ /* do nothing */
+ }
+
+ CORBA_exception_free (&ev);
}
gdouble
nautilus_view_frame_get_min_zoom_level (NautilusViewFrame *view)
{
- CORBA_Environment ev;
- gdouble retval;
-
- g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), 0);
-
- CORBA_exception_init (&ev);
-
- if (!CORBA_Object_is_nil (view->zoomable, &ev)) {
- retval = Nautilus_Zoomable__get_min_zoom_level (view->zoomable, &ev);
- } else {
- retval = 1.0;
- }
-
- CORBA_exception_free (&ev);
-
- return retval;
+ CORBA_Environment ev;
+ double level;
+
+ g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), 0);
+
+ CORBA_exception_init (&ev);
+
+ if (!CORBA_Object_is_nil (view->zoomable, &ev)) {
+ level = Nautilus_Zoomable__get_min_zoom_level (view->zoomable, &ev);
+ } else {
+ level = 1.0;
+ }
+
+ CORBA_exception_free (&ev);
+
+ return level;
}
-gdouble
+double
nautilus_view_frame_get_max_zoom_level (NautilusViewFrame *view)
{
- CORBA_Environment ev;
- gdouble retval;
-
- g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), 0);
-
- CORBA_exception_init (&ev);
-
- if (!CORBA_Object_is_nil (view->zoomable, &ev)) {
- retval = Nautilus_Zoomable__get_max_zoom_level (view->zoomable, &ev);
- } else {
- retval = 1.0;
- }
-
- CORBA_exception_free (&ev);
-
- return retval;
+ CORBA_Environment ev;
+ double level;
+
+ g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), 0);
+
+ CORBA_exception_init (&ev);
+
+ if (!CORBA_Object_is_nil (view->zoomable, &ev)) {
+ level = Nautilus_Zoomable__get_max_zoom_level (view->zoomable, &ev);
+ } else {
+ level = 1.0;
+ }
+
+ CORBA_exception_free (&ev);
+
+ return level;
}
GList *
nautilus_view_frame_get_preferred_zoom_levels (NautilusViewFrame *view)
{
- CORBA_Environment ev;
- GList *retval;
- Nautilus_ZoomLevelList *zoom_levels;
-
- g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), 0);
-
- CORBA_exception_init (&ev);
-
- if (!CORBA_Object_is_nil (view->zoomable, &ev)) {
- zoom_levels = Nautilus_Zoomable__get_preferred_zoom_levels (view->zoomable, &ev);
- retval = nautilus_g_list_from_ZoomLevelList (zoom_levels);
-
- CORBA_free (zoom_levels);
-
- } else {
- retval = NULL;
- }
-
- CORBA_exception_free (&ev);
-
- return retval;
+ CORBA_Environment ev;
+ GList *levels;
+ Nautilus_ZoomLevelList *zoom_levels;
+
+ g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), 0);
+
+ CORBA_exception_init (&ev);
+
+ if (!CORBA_Object_is_nil (view->zoomable, &ev)) {
+ zoom_levels = Nautilus_Zoomable__get_preferred_zoom_levels (view->zoomable, &ev);
+ levels = nautilus_g_list_from_ZoomLevelList (zoom_levels);
+ CORBA_free (zoom_levels);
+
+ } else {
+ levels = NULL;
+ }
+
+ CORBA_exception_free (&ev);
+
+ return levels;
}
void
nautilus_view_frame_zoom_in (NautilusViewFrame *view)
{
- CORBA_Environment ev;
-
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
-
- CORBA_exception_init (&ev);
-
- if (!CORBA_Object_is_nil (view->zoomable, &ev)) {
- Nautilus_Zoomable_zoom_in (view->zoomable, &ev);
- } else {
- /* do nothing */
- }
-
- CORBA_exception_free (&ev);
+ CORBA_Environment ev;
+
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+
+ CORBA_exception_init (&ev);
+
+ if (!CORBA_Object_is_nil (view->zoomable, &ev)) {
+ Nautilus_Zoomable_zoom_in (view->zoomable, &ev);
+ } else {
+ /* do nothing */
+ }
+
+ CORBA_exception_free (&ev);
}
void
nautilus_view_frame_zoom_out (NautilusViewFrame *view)
{
- CORBA_Environment ev;
-
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
-
- CORBA_exception_init (&ev);
-
- if (!CORBA_Object_is_nil (view->zoomable, &ev)) {
- Nautilus_Zoomable_zoom_out (view->zoomable, &ev);
- } else {
- /* do nothing */
- }
-
- CORBA_exception_free (&ev);
+ CORBA_Environment ev;
+
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+
+ CORBA_exception_init (&ev);
+
+ if (!CORBA_Object_is_nil (view->zoomable, &ev)) {
+ Nautilus_Zoomable_zoom_out (view->zoomable, &ev);
+ } else {
+ /* do nothing */
+ }
+
+ CORBA_exception_free (&ev);
}
void
nautilus_view_frame_zoom_to_fit (NautilusViewFrame *view)
{
- CORBA_Environment ev;
-
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
-
- CORBA_exception_init (&ev);
-
- if (!CORBA_Object_is_nil (view->zoomable, &ev)) {
- Nautilus_Zoomable_zoom_to_fit (view->zoomable, &ev);
- } else {
- /* do nothing */
- }
-
- CORBA_exception_free (&ev);
+ CORBA_Environment ev;
+
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+
+ CORBA_exception_init (&ev);
+
+ if (!CORBA_Object_is_nil (view->zoomable, &ev)) {
+ Nautilus_Zoomable_zoom_to_fit (view->zoomable, &ev);
+ } else {
+ /* do nothing */
+ }
+
+ CORBA_exception_free (&ev);
}
const char *
nautilus_view_frame_get_iid(NautilusViewFrame *view)
{
- g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), NULL);
- return view->iid;
+ g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), NULL);
+ return view->iid;
}
CORBA_Object
-nautilus_view_frame_get_client_objref(NautilusViewFrame *view)
+nautilus_view_frame_get_client_objref (NautilusViewFrame *view)
{
- g_return_val_if_fail (view == NULL || NAUTILUS_IS_VIEW_FRAME (view), NULL);
- return view?bonobo_object_corba_objref(BONOBO_OBJECT(view->client_object)):NULL;
+ g_return_val_if_fail (view == NULL || NAUTILUS_IS_VIEW_FRAME (view), CORBA_OBJECT_NIL);
+ return view == NULL ? CORBA_OBJECT_NIL : bonobo_object_corba_objref (BONOBO_OBJECT (view->client_object));
}
CORBA_Object
-nautilus_view_frame_get_objref(NautilusViewFrame *view)
+nautilus_view_frame_get_objref (NautilusViewFrame *view)
{
- g_return_val_if_fail (view == NULL || NAUTILUS_IS_VIEW_FRAME (view), NULL);
- return view?bonobo_object_corba_objref(view->view_frame):NULL;
+ g_return_val_if_fail (view == NULL || NAUTILUS_IS_VIEW_FRAME (view), CORBA_OBJECT_NIL);
+ return view == NULL ? CORBA_OBJECT_NIL : bonobo_object_corba_objref (view->view_frame);
}
void
nautilus_view_frame_open_location (NautilusViewFrame *view,
const char *location)
{
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
- gtk_signal_emit(GTK_OBJECT(view), signals[OPEN_LOCATION], location);
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+ gtk_signal_emit (GTK_OBJECT (view), signals[OPEN_LOCATION], location);
}
void
nautilus_view_frame_open_location_in_new_window (NautilusViewFrame *view,
const char *location)
{
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
- gtk_signal_emit(GTK_OBJECT(view), signals[OPEN_LOCATION_IN_NEW_WINDOW], location);
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+ gtk_signal_emit (GTK_OBJECT (view), signals[OPEN_LOCATION_IN_NEW_WINDOW], location);
}
void
nautilus_view_frame_report_location_change (NautilusViewFrame *view,
const char *location)
{
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
- gtk_signal_emit(GTK_OBJECT(view), signals[REPORT_LOCATION_CHANGE], location);
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+ gtk_signal_emit (GTK_OBJECT (view), signals[REPORT_LOCATION_CHANGE], location);
}
void
nautilus_view_frame_report_selection_change (NautilusViewFrame *view,
GList *selection)
{
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
- gtk_signal_emit(GTK_OBJECT(view), signals[REPORT_SELECTION_CHANGE], selection);
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+ gtk_signal_emit (GTK_OBJECT (view), signals[REPORT_SELECTION_CHANGE], selection);
}
void
nautilus_view_frame_report_status (NautilusViewFrame *view,
const char *status)
{
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
- gtk_signal_emit(GTK_OBJECT(view), signals[REPORT_STATUS], status);
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+ gtk_signal_emit (GTK_OBJECT (view), signals[REPORT_STATUS], status);
}
void
nautilus_view_frame_report_load_underway (NautilusViewFrame *view)
{
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
- gtk_signal_emit(GTK_OBJECT(view), signals[REPORT_LOAD_UNDERWAY]);
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+ gtk_signal_emit (GTK_OBJECT (view), signals[REPORT_LOAD_UNDERWAY]);
}
void
nautilus_view_frame_report_load_progress (NautilusViewFrame *view,
double fraction_done)
{
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
- gtk_signal_emit(GTK_OBJECT(view), signals[REPORT_LOAD_PROGRESS], fraction_done);
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+ gtk_signal_emit (GTK_OBJECT (view), signals[REPORT_LOAD_PROGRESS], fraction_done);
}
void
nautilus_view_frame_report_load_complete (NautilusViewFrame *view)
{
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
- gtk_signal_emit(GTK_OBJECT(view), signals[REPORT_LOAD_COMPLETE]);
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+ gtk_signal_emit (GTK_OBJECT (view), signals[REPORT_LOAD_COMPLETE]);
}
void
nautilus_view_frame_report_load_failed (NautilusViewFrame *view)
{
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
- gtk_signal_emit(GTK_OBJECT(view), signals[REPORT_LOAD_FAILED]);
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+ gtk_signal_emit (GTK_OBJECT (view), signals[REPORT_LOAD_FAILED]);
}
void
nautilus_view_frame_set_title (NautilusViewFrame *view,
const char *title)
{
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
- gtk_signal_emit (GTK_OBJECT (view), signals[SET_TITLE], title);
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+ gtk_signal_emit (GTK_OBJECT (view), signals[SET_TITLE], title);
}
void
nautilus_view_frame_zoom_level_changed (NautilusViewFrame *view,
double level)
{
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
- gtk_signal_emit (GTK_OBJECT (view), signals[ZOOM_LEVEL_CHANGED], level);
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+ gtk_signal_emit (GTK_OBJECT (view), signals[ZOOM_LEVEL_CHANGED], level);
}
static gboolean
-check_object(NautilusViewFrame *view)
+check_object (gpointer data)
{
- CORBA_Environment ev;
- gboolean retval = TRUE;
- CORBA_exception_init(&ev);
-
- g_assert(!view->checking);
-
- view->checking++;
-
- if(CORBA_Object_non_existent(bonobo_object_corba_objref(BONOBO_OBJECT(view->client_object)), &ev))
- {
- view->timer_id = 0;
- gtk_object_destroy(GTK_OBJECT(view));
- retval = FALSE;
- }
-
- CORBA_exception_free(&ev);
- view->checking--;
-
- return retval;
+ NautilusViewFrame *view;
+ CORBA_Environment ev;
+ gboolean ok;
+
+ view = NAUTILUS_VIEW_FRAME (data);
+ g_assert (!view->checking);
+
+ CORBA_exception_init(&ev);
+ view->checking++;
+ ok = TRUE;
+ if (CORBA_Object_non_existent (bonobo_object_corba_objref (BONOBO_OBJECT (view->client_object)), &ev)) {
+ view->timer_id = 0;
+ gtk_object_destroy(GTK_OBJECT(view));
+ ok = FALSE;
+ }
+ view->checking--;
+ CORBA_exception_free(&ev);
+
+ return ok;
}
void
-nautilus_view_frame_set_active_errors(NautilusViewFrame *view, gboolean enabled)
-{
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
- if(enabled)
- {
- if(!view->timer_id)
- view->timer_id = g_timeout_add(2000, (GSourceFunc)check_object, view);
- }
- else
- {
- if(view->timer_id)
- {
- g_source_remove(view->timer_id);
- view->timer_id = 0;
- }
- }
+nautilus_view_frame_set_active_errors (NautilusViewFrame *view, gboolean enabled)
+{
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+ if(enabled) {
+ if(view->timer_id == 0) {
+ /* FIXME: hard-coded 2 seconds? */
+ view->timer_id = g_timeout_add (2000, check_object, view);
+ }
+ } else {
+ if(view->timer_id != 0) {
+ g_source_remove(view->timer_id);
+ view->timer_id = 0;
+ }
+ }
}
char *
nautilus_view_frame_get_label (NautilusViewFrame *view)
{
- g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), NULL);
- return g_strdup (view->label);
+ g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), NULL);
+ return g_strdup (view->label);
}
void
nautilus_view_frame_set_label (NautilusViewFrame *view,
const char *label)
{
- g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
- g_free (view->label);
- view->label = g_strdup (label);
+ g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view));
+ g_free (view->label);
+ view->label = g_strdup (label);
}
/* Calls activate on the underlying control frame. */
void
nautilus_view_frame_activate (NautilusViewFrame *view)
{
- BonoboControlFrame *control_frame;
-
- control_frame = BONOBO_CONTROL_FRAME (bonobo_object_query_local_interface
- (view->view_frame, "IDL:Bonobo/ControlFrame:1.0"));
- bonobo_control_frame_control_activate (control_frame);
- bonobo_object_unref (BONOBO_OBJECT (control_frame));
+ BonoboControlFrame *control_frame;
+
+ control_frame = BONOBO_CONTROL_FRAME (bonobo_object_query_local_interface
+ (view->view_frame, "IDL:Bonobo/ControlFrame:1.0"));
+ bonobo_control_frame_control_activate (control_frame);
+ bonobo_object_unref (BONOBO_OBJECT (control_frame));
}
-Nautilus_HistoryList *
+Nautilus_History *
nautilus_view_frame_get_history_list (NautilusViewFrame *view)
{
- Nautilus_HistoryList *history_list = NULL;
-
+ Nautilus_History *history_list;
+
g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), NULL);
-
- /* Signal view for history list */
+
+ /* Sent out signal to get the history list. */
+ history_list = NULL;
gtk_signal_emit (GTK_OBJECT (view),
signals[GET_HISTORY_LIST],
&history_list);
-
- /* Set up empty list if we received NULL list */
- if (history_list == NULL) {
- history_list = Nautilus_HistoryList__alloc();
- history_list->_length = 0;
- history_list->_buffer = NULL;
- CORBA_sequence_set_release(history_list, CORBA_TRUE);
- }
-
return history_list;
}
-
diff --git a/src/nautilus-view-frame.h b/src/nautilus-view-frame.h
index 53035d80d..3e849bb54 100644
--- a/src/nautilus-view-frame.h
+++ b/src/nautilus-view-frame.h
@@ -107,52 +107,50 @@ typedef struct {
void (* client_gone) (NautilusViewFrame *view);
/* Get a CORBA copy of the history list */
- void (*get_history_list) (NautilusViewFrame *view,
- Nautilus_HistoryList **out_list);
+ Nautilus_History *
+ (* get_history_list) (NautilusViewFrame *view);
} NautilusViewFrameClass;
-GtkType nautilus_view_frame_get_type (void);
-NautilusViewFrame *nautilus_view_frame_new (BonoboUIHandler *ui_handler,
- NautilusUndoManager *undo_manager);
-gboolean nautilus_view_frame_load_client (NautilusViewFrame *view,
- const char *iid);
-const char * nautilus_view_frame_get_iid (NautilusViewFrame *view);
-CORBA_Object nautilus_view_frame_get_client_objref (NautilusViewFrame *view);
-BonoboObject * nautilus_view_frame_get_control_frame (NautilusViewFrame *view);
-CORBA_Object nautilus_view_frame_get_objref (NautilusViewFrame *view);
+GtkType nautilus_view_frame_get_type (void);
+NautilusViewFrame *nautilus_view_frame_new (BonoboUIHandler *ui_handler,
+ NautilusUndoManager *undo_manager);
+gboolean nautilus_view_frame_load_client (NautilusViewFrame *view,
+ const char *iid);
+const char * nautilus_view_frame_get_iid (NautilusViewFrame *view);
+CORBA_Object nautilus_view_frame_get_client_objref (NautilusViewFrame *view);
+BonoboObject * nautilus_view_frame_get_control_frame (NautilusViewFrame *view);
+CORBA_Object nautilus_view_frame_get_objref (NautilusViewFrame *view);
/* These functions correspond to methods of the Nautilus:View CORBAinterface. */
-void nautilus_view_frame_load_location (NautilusViewFrame *view,
- const char *location);
-void nautilus_view_frame_stop_loading (NautilusViewFrame *view);
-void nautilus_view_frame_selection_changed (NautilusViewFrame *view,
- GList *selection);
+void nautilus_view_frame_load_location (NautilusViewFrame *view,
+ const char *location);
+void nautilus_view_frame_stop_loading (NautilusViewFrame *view);
+void nautilus_view_frame_selection_changed (NautilusViewFrame *view,
+ GList *selection);
/* Nautilus:Zoomable */
-gboolean nautilus_view_frame_is_zoomable (NautilusViewFrame *view);
-gdouble nautilus_view_frame_get_zoom_level (NautilusViewFrame *view);
-void nautilus_view_frame_set_zoom_level (NautilusViewFrame *view,
- double zoom_level);
-gdouble nautilus_view_frame_get_min_zoom_level (NautilusViewFrame *view);
-gdouble nautilus_view_frame_get_max_zoom_level (NautilusViewFrame *view);
-gboolean nautilus_view_frame_get_is_continuous (NautilusViewFrame *view);
+gboolean nautilus_view_frame_is_zoomable (NautilusViewFrame *view);
+gdouble nautilus_view_frame_get_zoom_level (NautilusViewFrame *view);
+void nautilus_view_frame_set_zoom_level (NautilusViewFrame *view,
+ double zoom_level);
+gdouble nautilus_view_frame_get_min_zoom_level (NautilusViewFrame *view);
+gdouble nautilus_view_frame_get_max_zoom_level (NautilusViewFrame *view);
+gboolean nautilus_view_frame_get_is_continuous (NautilusViewFrame *view);
GList * nautilus_view_frame_get_preferred_zoom_levels
- (NautilusViewFrame *view);
-
-void nautilus_view_frame_zoom_in (NautilusViewFrame *view);
-void nautilus_view_frame_zoom_out (NautilusViewFrame *view);
-void nautilus_view_frame_zoom_to_fit (NautilusViewFrame *view);
+(NautilusViewFrame *view);
+void nautilus_view_frame_zoom_in (NautilusViewFrame *view);
+void nautilus_view_frame_zoom_out (NautilusViewFrame *view);
+void nautilus_view_frame_zoom_to_fit (NautilusViewFrame *view);
/* Other. */
-void nautilus_view_frame_set_active_errors (NautilusViewFrame *view,
- gboolean enabled);
-char * nautilus_view_frame_get_label (NautilusViewFrame *view);
-void nautilus_view_frame_set_label (NautilusViewFrame *view,
- const char *label);
-void nautilus_view_frame_activate (NautilusViewFrame *view);
-
-Nautilus_HistoryList *nautilus_view_frame_get_history_list (NautilusViewFrame *view);
+void nautilus_view_frame_set_active_errors (NautilusViewFrame *view,
+ gboolean enabled);
+char * nautilus_view_frame_get_label (NautilusViewFrame *view);
+void nautilus_view_frame_set_label (NautilusViewFrame *view,
+ const char *label);
+void nautilus_view_frame_activate (NautilusViewFrame *view);
+Nautilus_History * nautilus_view_frame_get_history_list (NautilusViewFrame *view);
#ifdef __cplusplus
}
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index d890c9a27..6fd975f42 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -1156,48 +1156,44 @@ nautilus_window_zoom_level_changed_callback (NautilusViewFrame *view,
}
}
-static void
+static Nautilus_History *
nautilus_window_get_history_list_callback (NautilusViewFrame *view,
- Nautilus_HistoryList **out_list,
- NautilusWindow *window)
+ NautilusWindow *window)
{
- Nautilus_HistoryList *local_list;
- Nautilus_HistoryItem *history_item;
+ Nautilus_History *history;
+ Nautilus_HistoryList *list;
NautilusBookmark *bookmark;
- int length, index;
- GSList *element;
+ int length, i;
+ GSList *p;
char *name, *location;
/* Get total number of history items */
length = g_slist_length (history_list);
- if (length <= 0) {
- *out_list = NULL;
- return;
- }
- local_list = Nautilus_HistoryList__alloc ();
- local_list->_length = length;
- local_list->_maximum = length;
- local_list->_buffer = CORBA_sequence_Nautilus_HistoryItem_allocbuf (length);
+ history = Nautilus_History__alloc ();
+ list = &history->list;
+ history->position = 0; /* FIXME */
+
+ list->_length = length;
+ list->_maximum = length;
+ list->_buffer = CORBA_sequence_Nautilus_HistoryItem_allocbuf (length);
+ CORBA_sequence_set_release (list, CORBA_TRUE);
/* Iterate through list and copy item data */
- for (index = 0, element = history_list; index < length; index++, element = element->next) {
- bookmark = element->data;
+ for (i = 0, p = history_list; i < length; i++, p = p->next) {
+ bookmark = p->data;
+
name = nautilus_bookmark_get_name (bookmark);
location = nautilus_bookmark_get_uri (bookmark);
- history_item = &local_list->_buffer[index];
- history_item->name = CORBA_string_dup (name);
- history_item->location = CORBA_string_dup (location);
-
- history_item->position = index;
+ list->_buffer[i].title = CORBA_string_dup (name);
+ list->_buffer[i].location = CORBA_string_dup (location);
g_free (name);
g_free (location);
}
- CORBA_sequence_set_release (local_list, CORBA_TRUE);
- *out_list = local_list;
+ return history;
}
void
@@ -1207,7 +1203,7 @@ nautilus_window_connect_view (NautilusWindow *window, NautilusViewFrame *view)
view_object = GTK_OBJECT (view);
- #define CONNECT(signal) gtk_signal_connect (view_object, #signal, nautilus_window_##signal##_callback, window)
+ #define CONNECT(signal) gtk_signal_connect (view_object, #signal, GTK_SIGNAL_FUNC (nautilus_window_##signal##_callback), window)
CONNECT (open_location);
CONNECT (open_location_in_new_window);