diff options
author | Maciej Stachowiak <mstachow@src.gnome.org> | 2001-01-24 04:08:32 +0000 |
---|---|---|
committer | Maciej Stachowiak <mstachow@src.gnome.org> | 2001-01-24 04:08:32 +0000 |
commit | 72c0d18006341f21f6880af225324d22f711165d (patch) | |
tree | 1e66b9d9bf80078f0afe1081bbd8557af2d436ff | |
parent | 03615eab5f885e21c3bb67ca295ba03333b27d87 (diff) | |
download | nautilus-72c0d18006341f21f6880af225324d22f711165d.tar.gz |
reviewed by: Darin Adler <darin@eazel.com>
Partial fix for bug 5902 (Rapidly changing between Icon and
Image/Text crashes Nautilus).
* src/nautilus-view-frame.c:
(nautilus_view_frame_load_client_async),
(nautilus_view_frame_load_client),
(nautilus_view_frame_stop_activation),
(nautilus_view_frame_load_location),
(nautilus_view_frame_stop_loading),
(nautilus_view_frame_selection_changed),
(nautilus_view_frame_title_changed),
(nautilus_view_frame_is_zoomable),
(nautilus_view_frame_get_zoom_level),
(nautilus_view_frame_set_zoom_level),
(nautilus_view_frame_get_min_zoom_level),
(nautilus_view_frame_get_max_zoom_level),
(nautilus_view_frame_get_has_min_zoom_level),
(nautilus_view_frame_get_has_max_zoom_level),
(nautilus_view_frame_get_is_continuous),
(nautilus_view_frame_get_preferred_zoom_levels),
(nautilus_view_frame_zoom_in), (nautilus_view_frame_zoom_out),
(nautilus_view_frame_zoom_to_fit),
(nautilus_view_frame_open_location_in_this_window),
(nautilus_view_frame_open_location_prefer_existing_window),
(nautilus_view_frame_open_location_force_new_window),
(nautilus_view_frame_report_selection_change),
(nautilus_view_frame_report_status),
(nautilus_view_frame_report_load_underway),
(nautilus_view_frame_report_load_progress),
(nautilus_view_frame_report_load_complete),
(nautilus_view_frame_report_load_failed),
(nautilus_view_frame_set_title), (nautilus_view_frame_get_title),
(nautilus_view_frame_get_label), (nautilus_view_frame_set_label),
(nautilus_view_frame_activate), (get_history_list),
(send_history),
(nautilus_view_frame_get_is_underway): Silently do nothing if the
view frame has failed. Based on suggestions from Darin. Also
includes return_if_fail fixes from Darin.
-rw-r--r-- | ChangeLog | 44 | ||||
-rw-r--r-- | src/nautilus-view-frame.c | 143 |
2 files changed, 179 insertions, 8 deletions
@@ -1,3 +1,46 @@ +2001-01-23 Maciej Stachowiak <mjs@eazel.com> + + reviewed by: Darin Adler <darin@eazel.com> + + Partial fix for bug 5902 (Rapidly changing between Icon and + Image/Text crashes Nautilus). + + * src/nautilus-view-frame.c: + (nautilus_view_frame_load_client_async), + (nautilus_view_frame_load_client), + (nautilus_view_frame_stop_activation), + (nautilus_view_frame_load_location), + (nautilus_view_frame_stop_loading), + (nautilus_view_frame_selection_changed), + (nautilus_view_frame_title_changed), + (nautilus_view_frame_is_zoomable), + (nautilus_view_frame_get_zoom_level), + (nautilus_view_frame_set_zoom_level), + (nautilus_view_frame_get_min_zoom_level), + (nautilus_view_frame_get_max_zoom_level), + (nautilus_view_frame_get_has_min_zoom_level), + (nautilus_view_frame_get_has_max_zoom_level), + (nautilus_view_frame_get_is_continuous), + (nautilus_view_frame_get_preferred_zoom_levels), + (nautilus_view_frame_zoom_in), (nautilus_view_frame_zoom_out), + (nautilus_view_frame_zoom_to_fit), + (nautilus_view_frame_open_location_in_this_window), + (nautilus_view_frame_open_location_prefer_existing_window), + (nautilus_view_frame_open_location_force_new_window), + (nautilus_view_frame_report_selection_change), + (nautilus_view_frame_report_status), + (nautilus_view_frame_report_load_underway), + (nautilus_view_frame_report_load_progress), + (nautilus_view_frame_report_load_complete), + (nautilus_view_frame_report_load_failed), + (nautilus_view_frame_set_title), (nautilus_view_frame_get_title), + (nautilus_view_frame_get_label), (nautilus_view_frame_set_label), + (nautilus_view_frame_activate), (get_history_list), + (send_history), + (nautilus_view_frame_get_is_underway): Silently do nothing if the + view frame has failed. Based on suggestions from Darin. Also + includes return_if_fail fixes from Darin. + 2001-01-23 Eskil Heyn Olsen <eskil@eazel.com> * components/services/install/command-line/eazel-alt-install-corba. @@ -91,6 +134,7 @@ (attach_directory_contents_value_field): Make text field in properties window react to new signal instead of "changed". +>>>>>>> 1.3496 2001-01-23 John Sullivan <sullivan@eazel.com> Fixed bug 5959 (File name in "no applications available" diff --git a/src/nautilus-view-frame.c b/src/nautilus-view-frame.c index 6db3c91e3..af5007571 100644 --- a/src/nautilus-view-frame.c +++ b/src/nautilus-view-frame.c @@ -774,6 +774,10 @@ nautilus_view_frame_load_client_async (NautilusViewFrame *view, { NautilusBonoboActivate *activate_structure; + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + view_frame_activating (view); view->details->activation_iid = g_strdup (iid); activate_structure = nautilus_bonobo_activate_from_id @@ -799,6 +803,11 @@ nautilus_view_frame_load_client (NautilusViewFrame *view, const char *iid) BonoboObjectClient *component; g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), FALSE); + + if (view->details->state == VIEW_FRAME_FAILED) { + return FALSE; + } + g_return_val_if_fail (view->details->state == VIEW_FRAME_EMPTY, FALSE); if (iid == NULL) { @@ -828,13 +837,18 @@ nautilus_view_frame_load_client (NautilusViewFrame *view, const char *iid) void nautilus_view_frame_stop_activation (NautilusViewFrame *view) { + g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + nautilus_bonobo_activate_stop (view->details->activate_structure); view_frame_stop_activation (view); nautilus_bonobo_activate_free (view->details->activate_structure); view->details->activate_structure = NULL; } - void nautilus_view_frame_load_location (NautilusViewFrame *view, const char *location) @@ -843,13 +857,16 @@ nautilus_view_frame_load_location (NautilusViewFrame *view, g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + g_free (view->details->title); view->details->title = NULL; gtk_signal_emit (GTK_OBJECT (view), signals[TITLE_CHANGED]); view_frame_wait (view); - /* ORBit does a bad job with Nautilus_URI, so it's not const char *. */ CORBA_exception_init (&ev); Nautilus_View_load_location (get_CORBA_object (view), @@ -866,6 +883,10 @@ nautilus_view_frame_stop_loading (NautilusViewFrame *view) CORBA_Environment ev; g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } CORBA_exception_init (&ev); Nautilus_View_stop_loading (get_CORBA_object (view), &ev); @@ -880,11 +901,14 @@ 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)); + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + uri_list = nautilus_uri_list_from_g_list (selection); CORBA_exception_init (&ev); @@ -905,6 +929,10 @@ nautilus_view_frame_title_changed (NautilusViewFrame *view, g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + CORBA_exception_init (&ev); Nautilus_View_title_changed (get_CORBA_object (view), title, &ev); if (ev._major != CORBA_NO_EXCEPTION) { @@ -916,6 +944,12 @@ nautilus_view_frame_title_changed (NautilusViewFrame *view, gboolean nautilus_view_frame_is_zoomable (NautilusViewFrame *view) { + g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), FALSE); + + if (view->details->state == VIEW_FRAME_FAILED) { + return FALSE; + } + return view->zoomable_frame != NULL; } @@ -924,6 +958,10 @@ nautilus_view_frame_get_zoom_level (NautilusViewFrame *view) { g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), 0.0); + if (view->details->state == VIEW_FRAME_FAILED) { + return 0.0; + } + if (view->zoomable_frame == NULL) { return 0.0; } @@ -937,6 +975,10 @@ nautilus_view_frame_set_zoom_level (NautilusViewFrame *view, { g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + if (view->zoomable_frame == NULL) { return; } @@ -949,6 +991,10 @@ nautilus_view_frame_get_min_zoom_level (NautilusViewFrame *view) { g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), 0.0); + if (view->details->state == VIEW_FRAME_FAILED) { + return 0.0; + } + if (view->zoomable_frame == NULL) { return 0.0; } @@ -961,6 +1007,10 @@ nautilus_view_frame_get_max_zoom_level (NautilusViewFrame *view) { g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), 0.0); + if (view->details->state == VIEW_FRAME_FAILED) { + return 0.0; + } + if (view->zoomable_frame == NULL) { return 0.0; } @@ -973,6 +1023,10 @@ nautilus_view_frame_get_has_min_zoom_level (NautilusViewFrame *view) { g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), FALSE); + if (view->details->state == VIEW_FRAME_FAILED) { + return FALSE; + } + if (view->zoomable_frame == NULL) { return FALSE; } @@ -985,6 +1039,10 @@ nautilus_view_frame_get_has_max_zoom_level (NautilusViewFrame *view) { g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), FALSE); + if (view->details->state == VIEW_FRAME_FAILED) { + return FALSE; + } + if (view->zoomable_frame == NULL) { return FALSE; } @@ -997,6 +1055,10 @@ nautilus_view_frame_get_is_continuous (NautilusViewFrame *view) { g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), FALSE); + if (view->details->state == VIEW_FRAME_FAILED) { + return FALSE; + } + if (view->zoomable_frame == NULL) { return FALSE; } @@ -1009,6 +1071,10 @@ nautilus_view_frame_get_preferred_zoom_levels (NautilusViewFrame *view) { g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), NULL); + if (view->details->state == VIEW_FRAME_FAILED) { + return FALSE; + } + if (view->zoomable_frame == NULL) { return NULL; } @@ -1021,6 +1087,10 @@ nautilus_view_frame_zoom_in (NautilusViewFrame *view) { g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + if (view->zoomable_frame == NULL) { return; } @@ -1033,6 +1103,10 @@ nautilus_view_frame_zoom_out (NautilusViewFrame *view) { g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + if (view->zoomable_frame == NULL) { return; } @@ -1045,6 +1119,10 @@ nautilus_view_frame_zoom_to_fit (NautilusViewFrame *view) { g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + if (view->zoomable_frame == NULL) { return; } @@ -1065,6 +1143,10 @@ nautilus_view_frame_open_location_in_this_window (NautilusViewFrame *view, { g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + view_frame_wait_is_over (view); gtk_signal_emit (GTK_OBJECT (view), signals[OPEN_LOCATION_IN_THIS_WINDOW], location); @@ -1076,6 +1158,10 @@ nautilus_view_frame_open_location_prefer_existing_window (NautilusViewFrame *vie { g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + view_frame_wait_is_over (view); gtk_signal_emit (GTK_OBJECT (view), signals[OPEN_LOCATION_PREFER_EXISTING_WINDOW], location); @@ -1088,6 +1174,10 @@ nautilus_view_frame_open_location_force_new_window (NautilusViewFrame *view, { g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + view_frame_wait_is_over (view); gtk_signal_emit (GTK_OBJECT (view), signals[OPEN_LOCATION_FORCE_NEW_WINDOW], @@ -1100,6 +1190,10 @@ nautilus_view_frame_report_selection_change (NautilusViewFrame *view, { g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + view_frame_wait_is_over (view); gtk_signal_emit (GTK_OBJECT (view), signals[CHANGE_SELECTION], selection); @@ -1111,6 +1205,10 @@ nautilus_view_frame_report_status (NautilusViewFrame *view, { g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + view_frame_wait_is_over (view); gtk_signal_emit (GTK_OBJECT (view), signals[CHANGE_STATUS], status); @@ -1121,6 +1219,10 @@ nautilus_view_frame_report_load_underway (NautilusViewFrame *view) { g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + view_frame_underway (view); } @@ -1130,6 +1232,10 @@ nautilus_view_frame_report_load_progress (NautilusViewFrame *view, { g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + view_frame_underway (view); gtk_signal_emit (GTK_OBJECT (view), signals[LOAD_PROGRESS_CHANGED]); @@ -1140,6 +1246,10 @@ nautilus_view_frame_report_load_complete (NautilusViewFrame *view) { g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + view_frame_loaded (view); } @@ -1148,6 +1258,10 @@ nautilus_view_frame_report_load_failed (NautilusViewFrame *view) { g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + view_frame_failed (view); } @@ -1160,6 +1274,10 @@ nautilus_view_frame_set_title (NautilusViewFrame *view, g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); g_return_if_fail (title != NULL); + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + /* Only do work if the title actually changed. */ changed = view->details->title == NULL || strcmp (view->details->title, title) != 0; @@ -1176,6 +1294,8 @@ nautilus_view_frame_set_title (NautilusViewFrame *view, char * nautilus_view_frame_get_title (NautilusViewFrame *view) { + g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), NULL); + return g_strdup (view->details->title); } @@ -1183,7 +1303,6 @@ char * nautilus_view_frame_get_label (NautilusViewFrame *view) { g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), NULL); - g_return_val_if_fail (view->details != NULL, NULL); return g_strdup (view->details->label); } @@ -1194,6 +1313,10 @@ nautilus_view_frame_set_label (NautilusViewFrame *view, { g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + g_free (view->details->label); view->details->label = g_strdup (label); } @@ -1204,20 +1327,23 @@ nautilus_view_frame_activate (NautilusViewFrame *view) { BonoboControlFrame *control_frame; + g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + + if (view->details->state == VIEW_FRAME_FAILED) { + return; + } + 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)); } - static Nautilus_History * get_history_list (NautilusViewFrame *view) { Nautilus_History *history_list; - g_return_val_if_fail (NAUTILUS_IS_VIEW_FRAME (view), NULL); - history_list = NULL; gtk_signal_emit (GTK_OBJECT (view), signals[GET_HISTORY_LIST], @@ -1231,6 +1357,8 @@ send_history (NautilusViewFrame *view) Nautilus_History *history; CORBA_Environment ev; + g_return_if_fail (NAUTILUS_IS_VIEW_FRAME (view)); + switch (view->details->state) { case VIEW_FRAME_EMPTY: case VIEW_FRAME_ACTIVATING: @@ -1268,7 +1396,6 @@ nautilus_view_frame_get_is_underway (NautilusViewFrame *view) case VIEW_FRAME_ACTIVATING: case VIEW_FRAME_NO_LOCATION: case VIEW_FRAME_FAILED: - g_return_val_if_fail (FALSE, FALSE); case VIEW_FRAME_WAITING: case VIEW_FRAME_LOADED: return FALSE; |