[nautilus] Search requires that a reload be forced despite a load in effect
- From: William Jon McCann <mccann src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus] Search requires that a reload be forced despite a load in effect
- Date: Wed, 5 Sep 2012 23:14:36 +0000 (UTC)
commit eccc2046979be5a8073376f4611e0aa7ca89bc4a
Author: William Jon McCann <jmccann redhat com>
Date: Wed Sep 5 16:45:40 2012 -0400
Search requires that a reload be forced despite a load in effect
Add api to preempt the current load and force a reload.
src/nautilus-view.c | 2 +-
src/nautilus-window-manage-views.c | 29 +++++++++++++++++++++--------
src/nautilus-window-menus.c | 2 +-
src/nautilus-window-slot.c | 17 ++++++++++++++++-
src/nautilus-window-slot.h | 5 ++++-
5 files changed, 43 insertions(+), 12 deletions(-)
---
diff --git a/src/nautilus-view.c b/src/nautilus-view.c
index 801dce8..13b289f 100644
--- a/src/nautilus-view.c
+++ b/src/nautilus-view.c
@@ -3094,9 +3094,9 @@ done_loading (NautilusView *view,
nautilus_view_display_selection_info (view);
}
+ view->details->loading = FALSE;
g_signal_emit (view, signals[END_LOADING], 0, all_files_seen);
- view->details->loading = FALSE;
nautilus_profile_end (NULL);
}
diff --git a/src/nautilus-window-manage-views.c b/src/nautilus-window-manage-views.c
index 623e626..9be4df0 100644
--- a/src/nautilus-window-manage-views.c
+++ b/src/nautilus-window-manage-views.c
@@ -1811,7 +1811,7 @@ nautilus_window_back_or_forward (NautilusWindow *window,
/* reload the contents of the window */
void
-nautilus_window_slot_reload (NautilusWindowSlot *slot)
+nautilus_window_slot_force_reload (NautilusWindowSlot *slot)
{
GFile *location;
char *current_pos;
@@ -1823,13 +1823,6 @@ nautilus_window_slot_reload (NautilusWindowSlot *slot)
return;
}
- if (slot->pending_location != NULL
- || slot->content_view == NULL
- || nautilus_view_get_loading (slot->content_view)) {
- /* there is a reload in flight */
- return;
- }
-
/* peek_slot_field (window, location) can be free'd during the processing
* of begin_location_change, so make a copy
*/
@@ -1848,3 +1841,23 @@ nautilus_window_slot_reload (NautilusWindowSlot *slot)
g_object_unref (location);
g_list_free_full (selection, g_object_unref);
}
+
+void
+nautilus_window_slot_queue_reload (NautilusWindowSlot *slot)
+{
+ g_assert (NAUTILUS_IS_WINDOW_SLOT (slot));
+
+ if (slot->location == NULL) {
+ return;
+ }
+
+ if (slot->pending_location != NULL
+ || slot->content_view == NULL
+ || nautilus_view_get_loading (slot->content_view)) {
+ /* there is a reload in flight */
+ slot->needs_reload = TRUE;
+ return;
+ }
+
+ nautilus_window_slot_force_reload (slot);
+}
diff --git a/src/nautilus-window-menus.c b/src/nautilus-window-menus.c
index d6cb25d..a4b70ca 100644
--- a/src/nautilus-window-menus.c
+++ b/src/nautilus-window-menus.c
@@ -129,7 +129,7 @@ action_reload_callback (GtkAction *action,
NautilusWindowSlot *slot;
slot = nautilus_window_get_active_slot (NAUTILUS_WINDOW (user_data));
- nautilus_window_slot_reload (slot);
+ nautilus_window_slot_queue_reload (slot);
}
static void
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
index 9187338..9370f14 100644
--- a/src/nautilus-window-slot.c
+++ b/src/nautilus-window-slot.c
@@ -98,7 +98,7 @@ sync_search_directory (NautilusWindowSlot *slot)
} else {
nautilus_search_directory_set_query (NAUTILUS_SEARCH_DIRECTORY (directory),
query);
- nautilus_window_slot_reload (slot);
+ nautilus_window_slot_force_reload (slot);
}
g_free (text);
@@ -380,6 +380,17 @@ nautilus_window_slot_init (NautilusWindowSlot *slot)
}
static void
+view_end_loading_cb (NautilusView *view,
+ gboolean all_files_seen,
+ NautilusWindowSlot *slot)
+{
+ if (slot->needs_reload) {
+ nautilus_window_slot_queue_reload (slot);
+ slot->needs_reload = FALSE;
+ }
+}
+
+static void
nautilus_window_slot_dispose (GObject *object)
{
NautilusWindowSlot *slot;
@@ -588,6 +599,8 @@ nautilus_window_slot_set_content_view_widget (NautilusWindowSlot *slot,
if (slot->content_view != NULL) {
/* disconnect old view */
+ g_signal_handlers_disconnect_by_func (slot->content_view, G_CALLBACK (view_end_loading_cb), slot);
+
nautilus_window_disconnect_content_view (window, slot->content_view);
widget = GTK_WIDGET (slot->content_view);
@@ -604,6 +617,8 @@ nautilus_window_slot_set_content_view_widget (NautilusWindowSlot *slot,
slot->content_view = new_view;
g_object_ref (slot->content_view);
+ g_signal_connect (new_view, "end_loading", G_CALLBACK (view_end_loading_cb), slot);
+
/* connect new view */
nautilus_window_connect_content_view (window, new_view);
}
diff --git a/src/nautilus-window-slot.h b/src/nautilus-window-slot.h
index 89a8559..f4a7e90 100644
--- a/src/nautilus-window-slot.h
+++ b/src/nautilus-window-slot.h
@@ -109,6 +109,8 @@ struct NautilusWindowSlot {
gpointer open_callback_user_data;
gboolean load_with_search;
+ gboolean needs_reload;
+
GCancellable *find_mount_cancellable;
gboolean visible;
@@ -136,7 +138,8 @@ gboolean nautilus_window_slot_handle_event (NautilusWindowSlot *slot,
GFile * nautilus_window_slot_get_location (NautilusWindowSlot *slot);
char * nautilus_window_slot_get_location_uri (NautilusWindowSlot *slot);
-void nautilus_window_slot_reload (NautilusWindowSlot *slot);
+void nautilus_window_slot_queue_reload (NautilusWindowSlot *slot);
+void nautilus_window_slot_force_reload (NautilusWindowSlot *slot);
/* convenience wrapper without selection and callback/user_data */
#define nautilus_window_slot_open_location(slot, location, flags)\
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]