diff options
38 files changed, 1289 insertions, 1014 deletions
@@ -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); |