[nautilus/gnome-3-6] slot: ensure we're back from an active search when changing location
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus/gnome-3-6] slot: ensure we're back from an active search when changing location
- Date: Fri, 26 Oct 2012 22:03:59 +0000 (UTC)
commit 569e11cbc6bd635effa487f7b07fee9f5ba9661b
Author: Cosimo Cecchi <cosimoc gnome org>
Date: Fri Oct 26 18:02:57 2012 -0400
slot: ensure we're back from an active search when changing location
We used to keep track of the search active state using the state of the
search toggle button; unfortunately, the button is per-window,
so its active state will also be synchronized when switching tabs.
This will cause a non-search slot that becomes active following a tab
switch from a search slot to think its search just became inactive, and
will then change its location to the default ($HOME).
Fix the bug by keeping an additional state per-slot for whether there's
an active search.
https://bugzilla.gnome.org/show_bug.cgi?id=686893
src/nautilus-window-private.h | 2 +
src/nautilus-window-slot.c | 10 +--------
src/nautilus-window-slot.h | 1 +
src/nautilus-window.c | 42 ++++++++++++++++++++++++++--------------
4 files changed, 31 insertions(+), 24 deletions(-)
---
diff --git a/src/nautilus-window-private.h b/src/nautilus-window-private.h
index e908a79..94d6220 100644
--- a/src/nautilus-window-private.h
+++ b/src/nautilus-window-private.h
@@ -116,6 +116,8 @@ void nautilus_window_sync_zoom_widgets (NautilusWindow *window);
void nautilus_window_sync_up_button (NautilusWindow *window);
void nautilus_window_sync_view_as_menus (NautilusWindow *window);
+void nautilus_window_set_search_action_active (NautilusWindow *window,
+ gboolean active);
void nautilus_window_set_search_visible (NautilusWindow *window,
gboolean visible);
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
index 620ca70..43215d2 100644
--- a/src/nautilus-window-slot.c
+++ b/src/nautilus-window-slot.c
@@ -141,15 +141,7 @@ static void
query_editor_cancel_callback (NautilusQueryEditor *editor,
NautilusWindowSlot *slot)
{
- GtkAction *search;
- NautilusWindow *window;
- GtkActionGroup *action_group;
-
- window = slot->details->window;
- action_group = nautilus_window_get_main_action_group (window);
- search = gtk_action_group_get_action (action_group, NAUTILUS_ACTION_SEARCH);
-
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (search), FALSE);
+ nautilus_window_set_search_action_active (slot->details->window, FALSE);
}
static void
diff --git a/src/nautilus-window-slot.h b/src/nautilus-window-slot.h
index 2c91c70..e0f7872 100644
--- a/src/nautilus-window-slot.h
+++ b/src/nautilus-window-slot.h
@@ -91,6 +91,7 @@ struct NautilusWindowSlot {
gulong qe_changed_id;
gulong qe_cancel_id;
gulong qe_activated_id;
+ gboolean search_active;
/* New location. */
NautilusLocationChangeType location_change_type;
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 2f676b2..0adb78b 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -280,22 +280,7 @@ nautilus_window_set_search_visible (NautilusWindow *window,
remember_focus_widget (window);
nautilus_window_slot_set_query_editor_visible (slot, TRUE);
} else {
- GFile *location = NULL;
-
restore_focus_widget (window);
-
- /* Use the location bar as the return location */
- if (slot->query_editor != NULL) {
- location = nautilus_query_editor_get_location (slot->query_editor);
- /* Last try: use the home directory as the return location */
- if (location == NULL) {
- location = g_file_new_for_path (g_get_home_dir ());
- }
-
- nautilus_window_go_to (window, location);
- g_object_unref (location);
- }
-
nautilus_window_slot_set_query_editor_visible (slot, FALSE);
}
}
@@ -676,11 +661,38 @@ toggle_toolbar_search_button (NautilusWindow *window,
gboolean active)
{
GtkAction *action;
+ NautilusWindowSlot *slot;
+ gboolean old_active;
+ GFile *location;
+ slot = nautilus_window_get_active_slot (window);
action = gtk_action_group_get_action (nautilus_window_get_main_action_group (window),
NAUTILUS_ACTION_SEARCH);
+ old_active = slot->search_active;
gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), active);
+ slot->search_active = active;
+
+ if (!active && old_active) {
+ /* Use the location bar as the return location */
+ if (slot->query_editor != NULL) {
+ location = nautilus_query_editor_get_location (slot->query_editor);
+ /* Last try: use the home directory as the return location */
+ if (location == NULL) {
+ location = g_file_new_for_path (g_get_home_dir ());
+ }
+
+ nautilus_window_go_to (window, location);
+ g_object_unref (location);
+ }
+ }
+}
+
+void
+nautilus_window_set_search_action_active (NautilusWindow *window,
+ gboolean active)
+{
+ toggle_toolbar_search_button (window, active);
}
void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]