summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Soriano <csoriano@gnome.org>2015-07-23 18:03:09 +0200
committerCarlos Soriano <csoriano@gnome.org>2015-07-23 18:51:34 +0200
commit6597ff7397e754269e9f34499a6c0ac8ffbd7068 (patch)
tree1bfc87aefebc0c33a9daf1749cf0d1edf64e4f94
parent394fde4835c5e04d14e0a61bf1470a0112486057 (diff)
downloadnautilus-6597ff7397e754269e9f34499a6c0ac8ffbd7068.tar.gz
window-slot: factor out connect/disconnect functions
-rw-r--r--src/nautilus-window-slot.c66
1 files changed, 43 insertions, 23 deletions
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
index 9a905a3f7..3570c3800 100644
--- a/src/nautilus-window-slot.c
+++ b/src/nautilus-window-slot.c
@@ -136,6 +136,7 @@ static GParamSpec *properties[NUM_PROPERTIES] = { NULL, };
static void nautilus_window_slot_force_reload (NautilusWindowSlot *slot);
static void location_has_really_changed (NautilusWindowSlot *slot);
static void nautilus_window_slot_connect_new_content_view (NautilusWindowSlot *slot);
+static void nautilus_window_slot_disconnect_content_view (NautilusWindowSlot *slot);
static void nautilus_window_slot_emit_location_change (NautilusWindowSlot *slot, GFile *from, GFile *to);
static void
@@ -212,6 +213,28 @@ nautilus_window_slot_on_done_loading (NautilusDirectory *directory,
}
static void
+connect_directory_signals (NautilusWindowSlot *slot,
+ NautilusDirectory *directory)
+{
+ if (NAUTILUS_IS_SEARCH_DIRECTORY (directory)) {
+ g_signal_connect_object (directory, "done-loading",
+ G_CALLBACK (nautilus_window_slot_on_done_loading),
+ slot, 0);
+ }
+}
+
+static void
+disconnect_directory_signals (NautilusWindowSlot *slot,
+ NautilusDirectory *directory)
+{
+ if (NAUTILUS_IS_SEARCH_DIRECTORY (directory)) {
+ g_signal_handlers_disconnect_by_func (directory,
+ G_CALLBACK (nautilus_window_slot_on_done_loading),
+ slot);
+ }
+}
+
+static void
sync_search_directory (NautilusWindowSlot *slot)
{
NautilusDirectory *directory;
@@ -906,21 +929,13 @@ begin_location_change (NautilusWindowSlot *slot,
previous_directory = nautilus_directory_get (previous_location);
directory = nautilus_directory_get (location);
+ gtk_widget_hide (slot->details->no_search_results_widget);
/* Disconnect search signals from the old directory if it was a search directory */
- if (NAUTILUS_IS_SEARCH_DIRECTORY (previous_directory)) {
- gtk_widget_hide (slot->details->no_search_results_widget);
- g_signal_handlers_disconnect_by_func (previous_directory,
- G_CALLBACK (nautilus_window_slot_on_done_loading),
- slot);
- }
+ disconnect_directory_signals (slot, previous_directory);
nautilus_directory_unref (previous_directory);
- /* Connect to the done loading signal if it is a search directory to update
- * the no results widget */
- if (NAUTILUS_IS_SEARCH_DIRECTORY (directory)) {
- g_signal_connect_object (directory, "done-loading",
- G_CALLBACK (nautilus_window_slot_on_done_loading), slot, 0);
- }
+ /* Avoid to update status from the current view in our async calls */
+ nautilus_window_slot_disconnect_content_view (slot);
/* If there is no new selection and the new location is
* a (grand)parent of the old location then we automatically
@@ -1449,6 +1464,7 @@ create_content_view (NautilusWindowSlot *slot,
view_id = NAUTILUS_DESKTOP_ICON_VIEW_IID;
}
+ nautilus_window_slot_disconnect_content_view (slot);
if (nautilus_window_slot_content_view_matches_iid (slot, view_id)) {
/* reuse existing content view */
view = slot->details->content_view;
@@ -1459,14 +1475,18 @@ create_content_view (NautilusWindowSlot *slot,
view = nautilus_view_new (view_id, slot);
slot->details->new_content_view = view;
- nautilus_window_slot_connect_new_content_view (slot);
}
+ nautilus_window_slot_connect_new_content_view (slot);
/* Forward search selection and state before loading the new model */
old_location = nautilus_window_slot_get_location (slot);
old_directory = nautilus_directory_get (old_location);
new_directory = nautilus_directory_get (slot->details->pending_location);
+ /* Connect to the done loading signal if it is a search directory to update
+ * the no results widget */
+ connect_directory_signals (slot, new_directory);
+
if (NAUTILUS_IS_SEARCH_DIRECTORY (new_directory) &&
!NAUTILUS_IS_SEARCH_DIRECTORY (old_directory)) {
nautilus_search_directory_set_base_model (NAUTILUS_SEARCH_DIRECTORY (new_directory), old_directory);
@@ -2382,16 +2402,20 @@ nautilus_window_slot_setup_extra_location_widgets (NautilusWindowSlot *slot)
static void
nautilus_window_slot_connect_new_content_view (NautilusWindowSlot *slot)
{
+ if (slot->details->new_content_view != NULL) {
+ g_signal_connect (slot->details->new_content_view, "begin-loading", G_CALLBACK (view_begin_loading_cb), slot);
+ g_signal_connect (slot->details->new_content_view, "end-loading", G_CALLBACK (view_end_loading_cb), slot);
+ }
+}
+
+static void
+nautilus_window_slot_disconnect_content_view (NautilusWindowSlot *slot)
+{
if (slot->details->content_view != NULL) {
/* disconnect old view */
g_signal_handlers_disconnect_by_func (slot->details->content_view, G_CALLBACK (view_end_loading_cb), slot);
g_signal_handlers_disconnect_by_func (slot->details->content_view, G_CALLBACK (view_begin_loading_cb), slot);
}
-
- if (slot->details->new_content_view != NULL) {
- g_signal_connect (slot->details->new_content_view, "begin-loading", G_CALLBACK (view_begin_loading_cb), slot);
- g_signal_connect (slot->details->new_content_view, "end-loading", G_CALLBACK (view_end_loading_cb), slot);
- }
}
static void
@@ -2515,11 +2539,7 @@ nautilus_window_slot_dispose (GObject *object)
g_object_ref (slot->details->location);
directory = nautilus_directory_get (slot->details->location);
- if (NAUTILUS_IS_SEARCH_DIRECTORY (directory)) {
- g_signal_handlers_disconnect_by_func (directory,
- G_CALLBACK (nautilus_window_slot_on_done_loading),
- slot);
- }
+ disconnect_directory_signals (slot, directory);
g_object_unref (directory);
}