[nautilus/wip/csoriano/view-slot-hateness: 5/8] window-slot: use cancel_change instead of end_change



commit 9480eebdc05e54f954b274abcb6ee2c454d2c3d8
Author: Carlos Soriano <csoriano gnome org>
Date:   Wed Jan 13 19:45:40 2016 +0100

    window-slot: use cancel_change instead of end_change
    
    Nautilus slot ends any location change before starting a new
    one or when is done loading.
    
    The done loading signal is emitted when the view finalize to load
    a directory.
    
    However, when loading a new location, if the previous one was not
    finalized to load, nautilus was crashing, due to the is-loading signal
    in the view first emitting it for finalizing the previous location
    change.
    
    Then the callback of window slot was freeing the new_content_view,
    because this callback can be done when canceling a location change.
    However, at that time, the new_content_view is actually the one which
    is going to be used as a content view when we are just changing
    locations, for example, while searching.
    
    It's kind of strange that the callback of the view ending a load
    frees the new_content_view, since this is already managed by setup_view.
    And since we already have a cancel_location_change, we can use that
    on the majority of situations when we actually want to cancel a change,
    and let the end_location callback for the specific case of ending a load
    of the view.
    
    So now only the cancel_location_change frees the new_content_view, and
    we avoid a crash freeing the current view while loading it when changing
    locations.
    
    This is the last patch of the series of patches to fix the crashing
    nautilus while searching.

 src/nautilus-window-slot.c |   18 +++++++-----------
 1 files changed, 7 insertions(+), 11 deletions(-)
---
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
index 762e746..6519ebe 100644
--- a/src/nautilus-window-slot.c
+++ b/src/nautilus-window-slot.c
@@ -919,11 +919,7 @@ begin_location_change (NautilusWindowSlot         *slot,
         nautilus_window_slot_disconnect_content_view (slot);
         /* We are going to change the location, so make sure we stop any loading
          * or searching of the previous view, so we avoid to be slow */
-        if (slot->details->content_view && NAUTILUS_IS_FILES_VIEW (slot->details->content_view)) {
-                nautilus_files_view_stop_loading (NAUTILUS_FILES_VIEW (slot->details->content_view));
-        }
-
-       end_location_change (slot);
+        nautilus_window_slot_stop_loading (slot);
 
        nautilus_window_slot_set_allow_stop (slot, TRUE);
 
@@ -1560,11 +1556,6 @@ free_location_change (NautilusWindowSlot *slot)
                         got_file_info_for_view_selection_callback, slot);
                 slot->details->determine_view_file = NULL;
         }
-
-        if (slot->details->new_content_view != NULL) {
-               g_object_unref (slot->details->new_content_view);
-               slot->details->new_content_view = NULL;
-        }
 }
 
 static void
@@ -1603,6 +1594,11 @@ cancel_location_change (NautilusWindowSlot *slot)
         }
 
         end_location_change (slot);
+
+        if (slot->details->new_content_view) {
+                g_object_unref (slot->details->new_content_view);
+                slot->details->new_content_view = NULL;
+        }
 }
 
 void
@@ -1627,7 +1623,7 @@ nautilus_window_slot_set_content_view (NautilusWindowSlot *slot,
         selection = nautilus_view_get_selection (slot->details->content_view);
         view = nautilus_files_view_new (id, slot);
 
-        end_location_change (slot);
+        nautilus_window_slot_stop_loading (slot);
 
         nautilus_window_slot_set_allow_stop (slot, TRUE);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]