summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Jon McCann <jmccann@redhat.com>2012-07-09 13:22:27 -0400
committerWilliam Jon McCann <jmccann@redhat.com>2012-07-14 07:19:02 -0400
commit5521f24f74d18bad5cbec893f4cf42503fe8d02b (patch)
treea35f0ea5178b5e56c8b495dcd8b0ea672820a8ff
parentce64cbc6bfffd275ef98aee730d85879ce4a4a3e (diff)
downloadnautilus-5521f24f74d18bad5cbec893f4cf42503fe8d02b.tar.gz
Combine the search bar and query editor
Save vertical space by integrating the search bar with the query editor. This makes it less visually disruptive when a search becomes active. https://bugzilla.gnome.org/show_bug.cgi?id=679900
-rw-r--r--src/Makefile.am2
-rw-r--r--src/nautilus-query-editor.c417
-rw-r--r--src/nautilus-query-editor.h9
-rw-r--r--src/nautilus-search-bar.c228
-rw-r--r--src/nautilus-search-bar.h65
-rw-r--r--src/nautilus-toolbar.c40
-rw-r--r--src/nautilus-toolbar.h3
-rw-r--r--src/nautilus-window-manage-views.c3
-rw-r--r--src/nautilus-window-menus.c1
-rw-r--r--src/nautilus-window-slot.c207
-rw-r--r--src/nautilus-window-slot.h3
-rw-r--r--src/nautilus-window.c139
-rw-r--r--src/nautilus-window.h2
13 files changed, 274 insertions, 845 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 664b7d2ef..7226dff75 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -142,8 +142,6 @@ nautilus_SOURCES = \
nautilus-properties-window.h \
nautilus-query-editor.c \
nautilus-query-editor.h \
- nautilus-search-bar.c \
- nautilus-search-bar.h \
nautilus-self-check-functions.c \
nautilus-self-check-functions.h \
nautilus-toolbar.c \
diff --git a/src/nautilus-query-editor.c b/src/nautilus-query-editor.c
index 243586f31..0fb4bd9bf 100644
--- a/src/nautilus-query-editor.c
+++ b/src/nautilus-query-editor.c
@@ -23,7 +23,7 @@
#include <config.h>
#include "nautilus-query-editor.h"
-#include "nautilus-window-slot.h"
+#include "nautilus-file-utilities.h"
#include <string.h>
#include <glib/gi18n.h>
@@ -34,7 +34,6 @@
#include <gtk/gtk.h>
typedef enum {
- NAUTILUS_QUERY_EDITOR_ROW_LOCATION,
NAUTILUS_QUERY_EDITOR_ROW_TYPE,
NAUTILUS_QUERY_EDITOR_ROW_LAST
@@ -67,14 +66,14 @@ struct NautilusQueryEditorDetails {
gboolean change_frozen;
guint typing_timeout_id;
gboolean is_visible;
- GtkWidget *invisible_vbox;
- GtkWidget *visible_vbox;
+ GtkWidget *vbox;
+
+ GtkWidget *search_current_button;
+ GtkWidget *search_all_button;
+ char *current_uri;
GList *rows;
char *last_set_query_text;
-
- NautilusSearchBar *bar;
- NautilusWindowSlot *slot;
};
enum {
@@ -93,12 +92,6 @@ static void nautilus_query_editor_changed (NautilusQueryEditor *editor);
static NautilusQueryEditorRow * nautilus_query_editor_add_row (NautilusQueryEditor *editor,
NautilusQueryEditorRowType type);
-static GtkWidget *location_row_create_widgets (NautilusQueryEditorRow *row);
-static void location_row_add_to_query (NautilusQueryEditorRow *row,
- NautilusQuery *query);
-static void location_row_free_data (NautilusQueryEditorRow *row);
-static void location_add_rows_from_query (NautilusQueryEditor *editor,
- NautilusQuery *query);
static GtkWidget *type_row_create_widgets (NautilusQueryEditorRow *row);
static void type_row_add_to_query (NautilusQueryEditorRow *row,
NautilusQuery *query);
@@ -109,12 +102,6 @@ static void type_add_rows_from_query (NautilusQueryEditor *editor,
static NautilusQueryEditorRowOps row_type[] = {
- { N_("Location"),
- location_row_create_widgets,
- location_row_add_to_query,
- location_row_free_data,
- location_add_rows_from_query
- },
{ N_("File Type"),
type_row_create_widgets,
type_row_add_to_query,
@@ -132,26 +119,11 @@ nautilus_query_editor_dispose (GObject *object)
editor = NAUTILUS_QUERY_EDITOR (object);
- if (editor->details->typing_timeout_id) {
+ if (editor->details->typing_timeout_id > 0) {
g_source_remove (editor->details->typing_timeout_id);
editor->details->typing_timeout_id = 0;
}
- if (editor->details->bar != NULL) {
- g_signal_handlers_disconnect_by_func (editor->details->entry,
- entry_activate_cb,
- editor);
- g_signal_handlers_disconnect_by_func (editor->details->entry,
- entry_changed_cb,
- editor);
-
- nautilus_search_bar_return_entry (editor->details->bar);
-
- g_object_remove_weak_pointer (G_OBJECT (editor->details->bar),
- (gpointer *) &editor->details->bar);
- editor->details->bar = NULL;
- }
-
G_OBJECT_CLASS (nautilus_query_editor_parent_class)->dispose (object);
}
@@ -213,10 +185,19 @@ nautilus_query_editor_class_init (NautilusQueryEditorClass *class)
g_type_class_add_private (class, sizeof (NautilusQueryEditorDetails));
}
+GFile *
+nautilus_query_editor_get_location (NautilusQueryEditor *editor)
+{
+ GFile *file = NULL;
+ if (editor->details->current_uri != NULL)
+ file = g_file_new_for_uri (editor->details->current_uri);
+ return file;
+}
+
static void
entry_activate_cb (GtkWidget *entry, NautilusQueryEditor *editor)
{
- if (editor->details->typing_timeout_id) {
+ if (editor->details->typing_timeout_id > 0) {
g_source_remove (editor->details->typing_timeout_id);
editor->details->typing_timeout_id = 0;
}
@@ -230,11 +211,10 @@ typing_timeout_cb (gpointer user_data)
NautilusQueryEditor *editor;
editor = NAUTILUS_QUERY_EDITOR (user_data);
+ editor->details->typing_timeout_id = 0;
nautilus_query_editor_changed (editor);
- editor->details->typing_timeout_id = 0;
-
return FALSE;
}
@@ -247,7 +227,7 @@ entry_changed_cb (GtkWidget *entry, NautilusQueryEditor *editor)
return;
}
- if (editor->details->typing_timeout_id) {
+ if (editor->details->typing_timeout_id > 0) {
g_source_remove (editor->details->typing_timeout_id);
}
@@ -257,88 +237,6 @@ entry_changed_cb (GtkWidget *entry, NautilusQueryEditor *editor)
editor);
}
-static void
-edit_clicked (GtkButton *button, NautilusQueryEditor *editor)
-{
- nautilus_query_editor_set_visible (editor, TRUE);
- nautilus_query_editor_grab_focus (editor);
-}
-
-/* Location */
-
-static GtkWidget *
-location_row_create_widgets (NautilusQueryEditorRow *row)
-{
- GtkWidget *chooser;
-
- chooser = gtk_file_chooser_button_new (_("Select folder to search in"),
- GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
- gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (chooser), TRUE);
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser),
- g_get_home_dir ());
- gtk_widget_show (chooser);
-
- g_signal_connect_swapped (chooser, "current-folder-changed",
- G_CALLBACK (nautilus_query_editor_changed),
- row->editor);
-
- gtk_box_pack_start (GTK_BOX (row->hbox), chooser, FALSE, FALSE, 0);
-
- return chooser;
-}
-
-static void
-location_row_add_to_query (NautilusQueryEditorRow *row,
- NautilusQuery *query)
-{
- char *folder, *uri;
-
- folder = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (row->type_widget));
- if (folder == NULL) {
- /* I don't know why, but i got NULL here on initial search in browser mode
- even with the location set to the homedir in create_widgets... */
- folder = g_strdup (g_get_home_dir ());
- }
-
- uri = g_filename_to_uri (folder, NULL, NULL);
- g_free (folder);
-
- nautilus_query_set_location (query, uri);
- g_free (uri);
-}
-
-static void
-location_row_free_data (NautilusQueryEditorRow *row)
-{
-}
-
-static void
-location_add_rows_from_query (NautilusQueryEditor *editor,
- NautilusQuery *query)
-{
- NautilusQueryEditorRow *row;
- char *uri, *folder;
-
- uri = nautilus_query_get_location (query);
-
- if (uri == NULL) {
- return;
- }
- folder = g_filename_from_uri (uri, NULL, NULL);
- g_free (uri);
- if (folder == NULL) {
- return;
- }
-
- row = nautilus_query_editor_add_row (editor,
- NAUTILUS_QUERY_EDITOR_ROW_LOCATION);
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (row->type_widget),
- folder);
-
- g_free (folder);
-}
-
-
/* Type */
static gboolean
@@ -847,7 +745,7 @@ remove_row_cb (GtkButton *clicked_button, NautilusQueryEditorRow *row)
NautilusQueryEditor *editor;
editor = row->editor;
- gtk_container_remove (GTK_CONTAINER (editor->details->visible_vbox),
+ gtk_container_remove (GTK_CONTAINER (editor->details->vbox),
row->hbox);
editor->details->rows = g_list_remove (editor->details->rows, row);
@@ -905,7 +803,7 @@ nautilus_query_editor_add_row (NautilusQueryEditor *editor,
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
row->hbox = hbox;
gtk_widget_show (hbox);
- gtk_box_pack_start (GTK_BOX (editor->details->visible_vbox), hbox, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (editor->details->vbox), hbox, FALSE, FALSE, 0);
combo = gtk_combo_box_text_new ();
row->combo = combo;
@@ -925,8 +823,8 @@ nautilus_query_editor_add_row (NautilusQueryEditor *editor,
create_type_widgets (row);
button = gtk_button_new ();
- image = gtk_image_new_from_stock (GTK_STOCK_REMOVE,
- GTK_ICON_SIZE_SMALL_TOOLBAR);
+ image = gtk_image_new_from_icon_name ("list-remove-symbolic",
+ GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_container_add (GTK_CONTAINER (button), image);
gtk_widget_show (image);
gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
@@ -943,12 +841,6 @@ nautilus_query_editor_add_row (NautilusQueryEditor *editor,
}
static void
-go_search_cb (GtkButton *clicked_button, NautilusQueryEditor *editor)
-{
- nautilus_query_editor_changed_force (editor, TRUE);
-}
-
-static void
add_new_row_cb (GtkButton *clicked_button, NautilusQueryEditor *editor)
{
nautilus_query_editor_add_row (editor, get_next_free_type (editor));
@@ -958,57 +850,41 @@ add_new_row_cb (GtkButton *clicked_button, NautilusQueryEditor *editor)
static void
nautilus_query_editor_init (NautilusQueryEditor *editor)
{
- GtkWidget *hbox, *label, *button;
- char *label_markup;
-
editor->details = G_TYPE_INSTANCE_GET_PRIVATE (editor, NAUTILUS_TYPE_QUERY_EDITOR,
NautilusQueryEditorDetails);
- editor->details->is_visible = TRUE;
+ editor->details->is_visible = FALSE;
gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (editor)),
- GTK_STYLE_CLASS_QUESTION);
+ GTK_STYLE_CLASS_TOOLBAR);
+ gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (editor)),
+ GTK_STYLE_CLASS_PRIMARY_TOOLBAR);
+
gtk_orientable_set_orientation (GTK_ORIENTABLE (editor), GTK_ORIENTATION_VERTICAL);
- editor->details->invisible_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_container_set_border_width (GTK_CONTAINER (editor->details->invisible_vbox), 6);
- gtk_box_pack_start (GTK_BOX (editor), editor->details->invisible_vbox,
- FALSE, FALSE, 0);
- editor->details->visible_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_container_set_border_width (GTK_CONTAINER (editor->details->visible_vbox), 6);
- gtk_box_pack_start (GTK_BOX (editor), editor->details->visible_vbox,
+ editor->details->vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
+ gtk_widget_set_no_show_all (editor->details->vbox, TRUE);
+ gtk_container_set_border_width (GTK_CONTAINER (editor->details->vbox), 6);
+ gtk_box_pack_start (GTK_BOX (editor), editor->details->vbox,
FALSE, FALSE, 0);
- /* Only show visible vbox */
- gtk_widget_show (editor->details->visible_vbox);
-
- /* Create invisible part: */
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
- gtk_box_pack_start (GTK_BOX (editor->details->invisible_vbox),
- hbox, FALSE, FALSE, 0);
- gtk_widget_show (hbox);
-
- label = gtk_label_new ("");
- label_markup = g_strconcat ("<b>", _("Search Folder"), "</b>", NULL);
- gtk_label_set_markup (GTK_LABEL (label), label_markup);
- g_free (label_markup);
-
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
- gtk_widget_show (label);
-
- button = gtk_button_new_with_label (_("Edit"));
- gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
- gtk_widget_show (button);
-
- g_signal_connect (button, "clicked",
- G_CALLBACK (edit_clicked), editor);
-
- gtk_widget_set_tooltip_text (button,
- _("Edit the saved search"));
}
void
nautilus_query_editor_set_default_query (NautilusQueryEditor *editor)
{
- nautilus_query_editor_add_row (editor, NAUTILUS_QUERY_EDITOR_ROW_LOCATION);
+ nautilus_query_editor_changed (editor);
+}
+
+static void
+on_all_button_toggled (GtkToggleButton *button,
+ NautilusQueryEditor *editor)
+{
+ nautilus_query_editor_changed (editor);
+}
+
+static void
+on_current_button_toggled (GtkToggleButton *button,
+ NautilusQueryEditor *editor)
+{
nautilus_query_editor_changed (editor);
}
@@ -1018,8 +894,8 @@ finish_first_line (NautilusQueryEditor *editor, GtkWidget *hbox, gboolean use_go
GtkWidget *button, *image;
button = gtk_button_new ();
- image = gtk_image_new_from_stock (GTK_STOCK_ADD,
- GTK_ICON_SIZE_SMALL_TOOLBAR);
+ image = gtk_image_new_from_icon_name ("list-add-symbolic",
+ GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_container_add (GTK_CONTAINER (button), image);
gtk_widget_show (image);
gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
@@ -1033,43 +909,32 @@ finish_first_line (NautilusQueryEditor *editor, GtkWidget *hbox, gboolean use_go
gtk_widget_set_tooltip_text (button,
_("Add a new criterion to this search"));
- if (use_go) {
- button = gtk_button_new_with_label (_("Go"));
- } else {
- button = gtk_button_new_with_label (_("Reload"));
- }
- gtk_widget_show (button);
-
- gtk_widget_set_tooltip_text (button,
- _("Perform or update the search"));
-
- g_signal_connect (button, "clicked",
- G_CALLBACK (go_search_cb), editor);
-
- gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
+ editor->details->search_current_button = gtk_radio_button_new_with_label (NULL, _("Current"));
+ gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (editor->details->search_current_button), FALSE);
+ gtk_widget_show (editor->details->search_current_button);
+ editor->details->search_all_button = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (editor->details->search_current_button),
+ _("All Files"));
+ gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (editor->details->search_all_button), FALSE);
+ gtk_widget_show (editor->details->search_all_button);
+ g_signal_connect (editor->details->search_all_button, "toggled",
+ G_CALLBACK (on_all_button_toggled), editor);
+ g_signal_connect (editor->details->search_current_button, "toggled",
+ G_CALLBACK (on_current_button_toggled), editor);
+ gtk_box_pack_start (GTK_BOX (hbox), editor->details->search_current_button, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), editor->details->search_all_button, FALSE, FALSE, 0);
}
static void
-setup_internal_entry (NautilusQueryEditor *editor)
+setup_widgets (NautilusQueryEditor *editor)
{
- GtkWidget *hbox, *label;
- char *label_markup;
-
+ GtkWidget *hbox;
+
/* Create visible part: */
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
gtk_widget_show (hbox);
- gtk_box_pack_start (GTK_BOX (editor->details->visible_vbox), hbox, FALSE, FALSE, 0);
-
- label = gtk_label_new ("");
- label_markup = g_strconcat ("<b>", _("_Search for:"), "</b>", NULL);
- gtk_label_set_markup_with_mnemonic (GTK_LABEL (label), label_markup);
- g_free (label_markup);
- gtk_widget_show (label);
-
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (editor->details->vbox), hbox, FALSE, FALSE, 0);
- editor->details->entry = gtk_entry_new ();
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), editor->details->entry);
+ editor->details->entry = gtk_search_entry_new ();
gtk_box_pack_start (GTK_BOX (hbox), editor->details->entry, TRUE, TRUE, 0);
g_signal_connect (editor->details->entry, "activate",
@@ -1081,46 +946,15 @@ setup_internal_entry (NautilusQueryEditor *editor)
finish_first_line (editor, hbox, TRUE);
}
-static void
-setup_external_entry (NautilusQueryEditor *editor, GtkWidget *entry)
-{
- GtkWidget *hbox, *label;
- gchar *label_markup;
-
- /* Create visible part: */
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
- gtk_widget_show (hbox);
- gtk_box_pack_start (GTK_BOX (editor->details->visible_vbox), hbox, FALSE, FALSE, 0);
-
- label_markup = g_strconcat ("<b>", _("Search results"), "</b>", NULL);
- label = gtk_label_new (NULL);
- gtk_label_set_markup (GTK_LABEL (label), label_markup);
- gtk_widget_show (label);
-
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
-
- editor->details->entry = entry;
- g_signal_connect (editor->details->entry, "activate",
- G_CALLBACK (entry_activate_cb), editor);
- g_signal_connect (editor->details->entry, "changed",
- G_CALLBACK (entry_changed_cb), editor);
-
- finish_first_line (editor, hbox, FALSE);
-
- g_free (label_markup);
-}
-
void
nautilus_query_editor_set_visible (NautilusQueryEditor *editor,
gboolean visible)
{
editor->details->is_visible = visible;
if (visible) {
- gtk_widget_show (editor->details->visible_vbox);
- gtk_widget_hide (editor->details->invisible_vbox);
+ gtk_widget_show (editor->details->vbox);
} else {
- gtk_widget_hide (editor->details->visible_vbox);
- gtk_widget_show (editor->details->invisible_vbox);
+ gtk_widget_hide (editor->details->vbox);
}
}
@@ -1154,7 +988,7 @@ nautilus_query_editor_changed_force (NautilusQueryEditor *editor, gboolean force
static void
nautilus_query_editor_changed (NautilusQueryEditor *editor)
{
- nautilus_query_editor_changed_force (editor, FALSE);
+ nautilus_query_editor_changed_force (editor, TRUE);
}
void
@@ -1165,6 +999,22 @@ nautilus_query_editor_grab_focus (NautilusQueryEditor *editor)
}
}
+static void
+add_location_to_query (NautilusQueryEditor *editor,
+ NautilusQuery *query)
+{
+ char *uri;
+
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->details->search_all_button))) {
+ uri = nautilus_get_home_directory_uri ();
+ } else {
+ uri = g_strdup (editor->details->current_uri);
+ }
+
+ nautilus_query_set_location (query, uri);
+ g_free (uri);
+}
+
NautilusQuery *
nautilus_query_editor_get_query (NautilusQueryEditor *editor)
{
@@ -1187,6 +1037,8 @@ nautilus_query_editor_get_query (NautilusQueryEditor *editor)
query = nautilus_query_new ();
nautilus_query_set_text (query, query_text);
+ add_location_to_query (editor, query);
+
for (l = editor->details->rows; l != NULL; l = l->next) {
row = l->data;
@@ -1209,84 +1061,47 @@ nautilus_query_editor_clear_query (NautilusQueryEditor *editor)
}
GtkWidget *
-nautilus_query_editor_new (gboolean start_hidden)
+nautilus_query_editor_new (void)
{
GtkWidget *editor;
editor = g_object_new (NAUTILUS_TYPE_QUERY_EDITOR, NULL);
- nautilus_query_editor_set_visible (NAUTILUS_QUERY_EDITOR (editor),
- !start_hidden);
-
- setup_internal_entry (NAUTILUS_QUERY_EDITOR (editor));
-
+ setup_widgets (NAUTILUS_QUERY_EDITOR (editor));
+
return editor;
}
static void
-detach_from_external_entry (NautilusQueryEditor *editor)
+update_location (NautilusQueryEditor *editor,
+ NautilusQuery *query)
{
- if (editor->details->bar != NULL) {
- nautilus_search_bar_return_entry (editor->details->bar);
- g_signal_handlers_block_by_func (editor->details->entry,
- entry_activate_cb,
- editor);
- g_signal_handlers_block_by_func (editor->details->entry,
- entry_changed_cb,
- editor);
- }
-}
+ char *uri;
+ NautilusFile *file;
-static void
-attach_to_external_entry (NautilusQueryEditor *editor)
-{
- if (editor->details->bar != NULL) {
- nautilus_search_bar_borrow_entry (editor->details->bar);
- g_signal_handlers_unblock_by_func (editor->details->entry,
- entry_activate_cb,
- editor);
- g_signal_handlers_unblock_by_func (editor->details->entry,
- entry_changed_cb,
- editor);
-
- editor->details->change_frozen = TRUE;
- gtk_entry_set_text (GTK_ENTRY (editor->details->entry),
- editor->details->last_set_query_text);
- editor->details->change_frozen = FALSE;
+ uri = nautilus_query_get_location (query);
+ if (uri == NULL) {
+ return;
}
-}
-
-GtkWidget*
-nautilus_query_editor_new_with_bar (gboolean start_hidden,
- gboolean start_attached,
- NautilusSearchBar *bar,
- NautilusWindowSlot *slot)
-{
- GtkWidget *entry;
- NautilusQueryEditor *editor;
-
- editor = NAUTILUS_QUERY_EDITOR (g_object_new (NAUTILUS_TYPE_QUERY_EDITOR, NULL));
- nautilus_query_editor_set_visible (editor, !start_hidden);
-
- editor->details->bar = bar;
- g_object_add_weak_pointer (G_OBJECT (editor->details->bar),
- (gpointer *) &editor->details->bar);
-
- editor->details->slot = slot;
+ g_free (editor->details->current_uri);
+ editor->details->current_uri = uri;
+ file = nautilus_file_get_by_uri (uri);
+
+ if (file != NULL) {
+ char *name;
+ if (nautilus_file_is_home (file)) {
+ name = g_strdup (_("Home"));
+ } else {
+ char *filename;
+ filename = nautilus_file_get_display_name (file);
+ name = g_strdup_printf ("\342\200\234%s\342\200\235", filename);
+ g_free (filename);
+ }
+ gtk_button_set_label (GTK_BUTTON (editor->details->search_current_button),
+ name);
+ g_free (name);
- entry = nautilus_search_bar_borrow_entry (bar);
- setup_external_entry (editor, entry);
- if (!start_attached) {
- detach_from_external_entry (editor);
+ nautilus_file_unref (file);
}
-
- g_signal_connect_object (slot, "active",
- G_CALLBACK (attach_to_external_entry),
- editor, G_CONNECT_SWAPPED);
- g_signal_connect_object (slot, "inactive",
- G_CALLBACK (detach_from_external_entry),
- editor, G_CONNECT_SWAPPED);
-
- return GTK_WIDGET (editor);
}
void
@@ -1309,6 +1124,8 @@ nautilus_query_editor_set_query (NautilusQueryEditor *editor, NautilusQuery *que
editor->details->change_frozen = TRUE;
gtk_entry_set_text (GTK_ENTRY (editor->details->entry), text);
+ update_location (editor, query);
+
for (type = 0; type < NAUTILUS_QUERY_EDITOR_ROW_LAST; type++) {
row_type[type].add_rows_from_query (editor, query);
}
diff --git a/src/nautilus-query-editor.h b/src/nautilus-query-editor.h
index dc5627854..7cdbaa68a 100644
--- a/src/nautilus-query-editor.h
+++ b/src/nautilus-query-editor.h
@@ -28,8 +28,6 @@
#include <libnautilus-private/nautilus-query.h>
-#include "nautilus-search-bar.h"
-
#define NAUTILUS_TYPE_QUERY_EDITOR nautilus_query_editor_get_type()
#define NAUTILUS_QUERY_EDITOR(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_QUERY_EDITOR, NautilusQueryEditor))
@@ -61,11 +59,7 @@ typedef struct {
#include "nautilus-window-slot.h"
GType nautilus_query_editor_get_type (void);
-GtkWidget* nautilus_query_editor_new (gboolean start_hidden);
-GtkWidget* nautilus_query_editor_new_with_bar (gboolean start_hidden,
- gboolean start_attached,
- NautilusSearchBar *bar,
- NautilusWindowSlot *slot);
+GtkWidget* nautilus_query_editor_new (void);
void nautilus_query_editor_set_default_query (NautilusQueryEditor *editor);
void nautilus_query_editor_grab_focus (NautilusQueryEditor *editor);
@@ -74,6 +68,7 @@ void nautilus_query_editor_clear_query (NautilusQueryEditor *editor);
NautilusQuery *nautilus_query_editor_get_query (NautilusQueryEditor *editor);
void nautilus_query_editor_set_query (NautilusQueryEditor *editor,
NautilusQuery *query);
+GFile * nautilus_query_editor_get_location (NautilusQueryEditor *editor);
void nautilus_query_editor_set_visible (NautilusQueryEditor *editor,
gboolean visible);
diff --git a/src/nautilus-search-bar.c b/src/nautilus-search-bar.c
deleted file mode 100644
index 0154a0d93..000000000
--- a/src/nautilus-search-bar.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/*
- * Copyright (C) 2005 Novell, Inc.
- *
- * Nautilus is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * Nautilus is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; see the file COPYING. If not,
- * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Anders Carlsson <andersca@imendio.com>
- *
- */
-
-#include <config.h>
-#include "nautilus-search-bar.h"
-
-#include <libnautilus-private/nautilus-icon-info.h>
-
-#include <glib/gi18n.h>
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtk.h>
-
-struct NautilusSearchBarDetails {
- GtkWidget *entry;
- gboolean entry_borrowed;
-};
-
-enum {
- ACTIVATE,
- CANCEL,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-G_DEFINE_TYPE (NautilusSearchBar, nautilus_search_bar, GTK_TYPE_BOX);
-
-static gboolean
-nautilus_search_bar_draw (GtkWidget *widget,
- cairo_t *cr)
-{
- GtkStyleContext *context;
-
- context = gtk_widget_get_style_context (widget);
-
- gtk_render_background (context, cr, 0, 0,
- gtk_widget_get_allocated_width (widget),
- gtk_widget_get_allocated_height (widget));
-
- gtk_render_frame (context, cr, 0, 0,
- gtk_widget_get_allocated_width (widget),
- gtk_widget_get_allocated_height (widget));
-
- GTK_WIDGET_CLASS (nautilus_search_bar_parent_class)->draw (widget, cr);
-
- return FALSE;
-}
-
-static void
-nautilus_search_bar_class_init (NautilusSearchBarClass *class)
-{
- GtkBindingSet *binding_set;
- GtkWidgetClass *wclass;
-
- wclass = GTK_WIDGET_CLASS (class);
- wclass->draw = nautilus_search_bar_draw;
-
- signals[ACTIVATE] =
- g_signal_new ("activate",
- G_TYPE_FROM_CLASS (class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (NautilusSearchBarClass, activate),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- signals[CANCEL] =
- g_signal_new ("cancel",
- G_TYPE_FROM_CLASS (class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (NautilusSearchBarClass, cancel),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- binding_set = gtk_binding_set_by_class (class);
- gtk_binding_entry_add_signal (binding_set, GDK_KEY_Escape, 0, "cancel", 0);
-
- g_type_class_add_private (class, sizeof (NautilusSearchBarDetails));
-}
-
-static gboolean
-entry_has_text (NautilusSearchBar *bar)
-{
- const char *text;
-
- text = gtk_entry_get_text (GTK_ENTRY (bar->details->entry));
-
- return text != NULL && text[0] != '\0';
-}
-
-static void
-entry_activate_cb (GtkWidget *entry, NautilusSearchBar *bar)
-{
- if (entry_has_text (bar) && !bar->details->entry_borrowed) {
- g_signal_emit (bar, signals[ACTIVATE], 0);
- }
-}
-
-static void
-nautilus_search_bar_init (NautilusSearchBar *bar)
-{
- GtkWidget *label;
- GtkWidget *align;
- PangoAttrList *attrs;
-
- bar->details =
- G_TYPE_INSTANCE_GET_PRIVATE (bar, NAUTILUS_TYPE_SEARCH_BAR,
- NautilusSearchBarDetails);
-
- gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (bar)),
- GTK_STYLE_CLASS_QUESTION);
- gtk_widget_set_redraw_on_allocate (GTK_WIDGET (bar), TRUE);
-
- attrs = pango_attr_list_new ();
- pango_attr_list_insert (attrs, pango_attr_weight_new (PANGO_WEIGHT_BOLD));
- label = gtk_label_new (_("Search:"));
- gtk_label_set_attributes (GTK_LABEL (label), attrs);
- pango_attr_list_unref (attrs);
-
- gtk_box_pack_start (GTK_BOX (bar), label, FALSE, FALSE, 0);
- gtk_widget_show (label);
-
- g_object_set (label,
- "margin-left", 6,
- NULL);
-
- align = gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
- gtk_alignment_set_padding (GTK_ALIGNMENT (align),
- 6, 6, 0, 6);
- gtk_box_pack_start (GTK_BOX (bar), align, TRUE, TRUE, 0);
- gtk_widget_show (align);
-
- bar->details->entry = gtk_search_entry_new ();
- gtk_container_add (GTK_CONTAINER (align), bar->details->entry);
-
- g_signal_connect (bar->details->entry, "activate",
- G_CALLBACK (entry_activate_cb), bar);
-
- gtk_widget_show (bar->details->entry);
-}
-
-GtkWidget *
-nautilus_search_bar_borrow_entry (NautilusSearchBar *bar)
-{
- GtkBindingSet *binding_set;
-
- bar->details->entry_borrowed = TRUE;
-
- binding_set = gtk_binding_set_by_class (G_OBJECT_GET_CLASS (bar));
- gtk_binding_entry_remove (binding_set, GDK_KEY_Escape, 0);
- return bar->details->entry;
-}
-
-void
-nautilus_search_bar_return_entry (NautilusSearchBar *bar)
-{
- GtkBindingSet *binding_set;
-
- bar->details->entry_borrowed = FALSE;
-
- binding_set = gtk_binding_set_by_class (G_OBJECT_GET_CLASS (bar));
- gtk_binding_entry_add_signal (binding_set, GDK_KEY_Escape, 0, "cancel", 0);
-}
-
-GtkWidget *
-nautilus_search_bar_new (void)
-{
- GtkWidget *bar;
-
- bar = g_object_new (NAUTILUS_TYPE_SEARCH_BAR,
- "orientation", GTK_ORIENTATION_HORIZONTAL,
- "spacing", 6,
- NULL);
-
- return bar;
-}
-
-NautilusQuery *
-nautilus_search_bar_get_query (NautilusSearchBar *bar)
-{
- const char *query_text;
- NautilusQuery *query;
-
- query_text = gtk_entry_get_text (GTK_ENTRY (bar->details->entry));
-
- /* Empty string is a NULL query */
- if (query_text && query_text[0] == '\0') {
- return NULL;
- }
-
- query = nautilus_query_new ();
- nautilus_query_set_text (query, query_text);
-
- return query;
-}
-
-void
-nautilus_search_bar_grab_focus (NautilusSearchBar *bar)
-{
- gtk_widget_grab_focus (bar->details->entry);
-}
-
-void
-nautilus_search_bar_clear (NautilusSearchBar *bar)
-{
- gtk_entry_set_text (GTK_ENTRY (bar->details->entry), "");
-}
diff --git a/src/nautilus-search-bar.h b/src/nautilus-search-bar.h
deleted file mode 100644
index bb8674feb..000000000
--- a/src/nautilus-search-bar.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/*
- * Copyright (C) 2005 Novell, Inc.
- *
- * Nautilus is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * Nautilus is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; see the file COPYING. If not,
- * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Author: Anders Carlsson <andersca@imendio.com>
- *
- */
-
-#ifndef NAUTILUS_SEARCH_BAR_H
-#define NAUTILUS_SEARCH_BAR_H
-
-#include <gtk/gtk.h>
-#include <libnautilus-private/nautilus-query.h>
-
-#define NAUTILUS_TYPE_SEARCH_BAR nautilus_search_bar_get_type()
-#define NAUTILUS_SEARCH_BAR(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_SEARCH_BAR, NautilusSearchBar))
-#define NAUTILUS_SEARCH_BAR_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), NAUTILUS_TYPE_SEARCH_BAR, NautilusSearchBarClass))
-#define NAUTILUS_IS_SEARCH_BAR(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NAUTILUS_TYPE_SEARCH_BAR))
-#define NAUTILUS_IS_SEARCH_BAR_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), NAUTILUS_TYPE_SEARCH_BAR))
-#define NAUTILUS_SEARCH_BAR_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), NAUTILUS_TYPE_SEARCH_BAR, NautilusSearchBarClass))
-
-typedef struct NautilusSearchBarDetails NautilusSearchBarDetails;
-
-typedef struct NautilusSearchBar {
- GtkBox parent;
- NautilusSearchBarDetails *details;
-} NautilusSearchBar;
-
-typedef struct {
- GtkBoxClass parent_class;
-
- void (* activate) (NautilusSearchBar *bar);
- void (* cancel) (NautilusSearchBar *bar);
-} NautilusSearchBarClass;
-
-GType nautilus_search_bar_get_type (void);
-GtkWidget* nautilus_search_bar_new (void);
-
-GtkWidget * nautilus_search_bar_borrow_entry (NautilusSearchBar *bar);
-void nautilus_search_bar_return_entry (NautilusSearchBar *bar);
-void nautilus_search_bar_grab_focus (NautilusSearchBar *bar);
-NautilusQuery *nautilus_search_bar_get_query (NautilusSearchBar *bar);
-void nautilus_search_bar_clear (NautilusSearchBar *bar);
-
-#endif /* NAUTILUS_SEARCH_BAR_H */
diff --git a/src/nautilus-toolbar.c b/src/nautilus-toolbar.c
index f17488870..db04293d5 100644
--- a/src/nautilus-toolbar.c
+++ b/src/nautilus-toolbar.c
@@ -45,20 +45,17 @@ struct _NautilusToolbarPriv {
GtkWidget *path_bar;
GtkWidget *location_bar;
- GtkWidget *search_bar;
GtkToolItem *back_forward;
gboolean show_main_bar;
gboolean show_location_entry;
- gboolean show_search_bar;
};
enum {
PROP_ACTION_GROUP = 1,
PROP_UI_MANAGER,
PROP_SHOW_LOCATION_ENTRY,
- PROP_SHOW_SEARCH_BAR,
PROP_SHOW_MAIN_BAR,
NUM_PROPERTIES
};
@@ -82,9 +79,6 @@ toolbar_update_appearance (NautilusToolbar *self)
show_location_entry);
gtk_widget_set_visible (self->priv->path_bar,
!show_location_entry);
-
- gtk_widget_set_visible (self->priv->search_bar,
- self->priv->show_search_bar);
}
static gint
@@ -221,10 +215,6 @@ nautilus_toolbar_constructed (GObject *obj)
gtk_widget_show_all (GTK_WIDGET (tool_item));
gtk_widget_set_margin_left (GTK_WIDGET (tool_item), 6);
- /* search bar */
- self->priv->search_bar = nautilus_search_bar_new ();
- gtk_box_pack_start (GTK_BOX (self), self->priv->search_bar, TRUE, TRUE, 0);
-
g_signal_connect_swapped (nautilus_preferences,
"changed::" NAUTILUS_PREFERENCES_ALWAYS_USE_LOCATION_ENTRY,
G_CALLBACK (toolbar_update_appearance), self);
@@ -252,9 +242,6 @@ nautilus_toolbar_get_property (GObject *object,
case PROP_SHOW_LOCATION_ENTRY:
g_value_set_boolean (value, self->priv->show_location_entry);
break;
- case PROP_SHOW_SEARCH_BAR:
- g_value_set_boolean (value, self->priv->show_search_bar);
- break;
case PROP_SHOW_MAIN_BAR:
g_value_set_boolean (value, self->priv->show_main_bar);
break;
@@ -282,9 +269,6 @@ nautilus_toolbar_set_property (GObject *object,
case PROP_SHOW_LOCATION_ENTRY:
nautilus_toolbar_set_show_location_entry (self, g_value_get_boolean (value));
break;
- case PROP_SHOW_SEARCH_BAR:
- nautilus_toolbar_set_show_search_bar (self, g_value_get_boolean (value));
- break;
case PROP_SHOW_MAIN_BAR:
nautilus_toolbar_set_show_main_bar (self, g_value_get_boolean (value));
break;
@@ -337,12 +321,6 @@ nautilus_toolbar_class_init (NautilusToolbarClass *klass)
"Whether to show the location entry instead of the pathbar",
FALSE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- properties[PROP_SHOW_SEARCH_BAR] =
- g_param_spec_boolean ("show-search-bar",
- "Whether to show the search bar",
- "Whether to show the search bar beside the toolbar",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
properties[PROP_SHOW_MAIN_BAR] =
g_param_spec_boolean ("show-main-bar",
"Whether to show the main bar",
@@ -377,12 +355,6 @@ nautilus_toolbar_get_location_bar (NautilusToolbar *self)
return self->priv->location_bar;
}
-GtkWidget *
-nautilus_toolbar_get_search_bar (NautilusToolbar *self)
-{
- return self->priv->search_bar;
-}
-
void
nautilus_toolbar_set_show_main_bar (NautilusToolbar *self,
gboolean show_main_bar)
@@ -406,15 +378,3 @@ nautilus_toolbar_set_show_location_entry (NautilusToolbar *self,
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SHOW_LOCATION_ENTRY]);
}
}
-
-void
-nautilus_toolbar_set_show_search_bar (NautilusToolbar *self,
- gboolean show_search_bar)
-{
- if (show_search_bar != self->priv->show_search_bar) {
- self->priv->show_search_bar = show_search_bar;
- toolbar_update_appearance (self);
-
- g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SHOW_SEARCH_BAR]);
- }
-}
diff --git a/src/nautilus-toolbar.h b/src/nautilus-toolbar.h
index 742f05bcc..344760ab3 100644
--- a/src/nautilus-toolbar.h
+++ b/src/nautilus-toolbar.h
@@ -67,13 +67,10 @@ GtkWidget *nautilus_toolbar_new (GtkUIManager *ui_manager,
GtkWidget *nautilus_toolbar_get_path_bar (NautilusToolbar *self);
GtkWidget *nautilus_toolbar_get_location_bar (NautilusToolbar *self);
-GtkWidget *nautilus_toolbar_get_search_bar (NautilusToolbar *self);
void nautilus_toolbar_set_show_main_bar (NautilusToolbar *self,
gboolean show_main_bar);
void nautilus_toolbar_set_show_location_entry (NautilusToolbar *self,
gboolean show_location_entry);
-void nautilus_toolbar_set_show_search_bar (NautilusToolbar *self,
- gboolean show_search_bar);
#endif /* __NAUTILUS_TOOLBAR_H__ */
diff --git a/src/nautilus-window-manage-views.c b/src/nautilus-window-manage-views.c
index c41a2059d..f8fa1148d 100644
--- a/src/nautilus-window-manage-views.c
+++ b/src/nautilus-window-manage-views.c
@@ -32,7 +32,6 @@
#include "nautilus-application.h"
#include "nautilus-floating-bar.h"
#include "nautilus-location-bar.h"
-#include "nautilus-search-bar.h"
#include "nautilus-pathbar.h"
#include "nautilus-window-private.h"
#include "nautilus-window-slot.h"
@@ -1398,8 +1397,6 @@ update_for_new_location (NautilusWindowSlot *slot)
directory = nautilus_directory_get (slot->location);
- nautilus_window_slot_update_query_editor (slot);
-
if (nautilus_directory_is_in_trash (directory)) {
nautilus_window_slot_show_trash_bar (slot);
}
diff --git a/src/nautilus-window-menus.c b/src/nautilus-window-menus.c
index 9a263b971..b178ebfd9 100644
--- a/src/nautilus-window-menus.c
+++ b/src/nautilus-window-menus.c
@@ -39,7 +39,6 @@
#include "nautilus-window-bookmarks.h"
#include "nautilus-window-private.h"
#include "nautilus-desktop-window.h"
-#include "nautilus-search-bar.h"
#include <gtk/gtk.h>
#include <gio/gio.h>
#include <glib/gi18n.h>
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
index 011318dbf..407c49b80 100644
--- a/src/nautilus-window-slot.c
+++ b/src/nautilus-window-slot.c
@@ -26,6 +26,7 @@
#include "nautilus-window-slot.h"
+#include "nautilus-actions.h"
#include "nautilus-desktop-window.h"
#include "nautilus-toolbar.h"
#include "nautilus-floating-bar.h"
@@ -52,83 +53,162 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 };
static void
-query_editor_changed_callback (NautilusSearchBar *bar,
- NautilusQuery *query,
- gboolean reload,
- NautilusWindowSlot *slot)
+sync_search_directory (NautilusWindowSlot *slot)
{
NautilusDirectory *directory;
+ NautilusQuery *query;
g_assert (NAUTILUS_IS_FILE (slot->viewed_file));
directory = nautilus_directory_get_for_file (slot->viewed_file);
g_assert (NAUTILUS_IS_SEARCH_DIRECTORY (directory));
+ query = nautilus_query_editor_get_query (slot->query_editor);
nautilus_search_directory_set_query (NAUTILUS_SEARCH_DIRECTORY (directory),
query);
- if (reload) {
- nautilus_window_slot_reload (slot);
+ g_object_unref (query);
+ nautilus_window_slot_reload (slot);
+
+ nautilus_directory_unref (directory);
+}
+
+static void
+sync_search_location_cb (NautilusWindow *window,
+ GError *error,
+ gpointer user_data)
+{
+ NautilusWindowSlot *slot = user_data;
+
+ sync_search_directory (slot);
+}
+
+static void
+create_new_search (NautilusWindowSlot *slot)
+{
+ char *uri;
+ NautilusDirectory *directory;
+ GFile *location;
+
+ uri = nautilus_search_directory_generate_new_uri ();
+ location = g_file_new_for_uri (uri);
+
+ directory = nautilus_directory_get (location);
+ g_assert (NAUTILUS_IS_SEARCH_DIRECTORY (directory));
+
+ nautilus_window_slot_open_location_full (slot, location, 0, NULL, sync_search_location_cb, slot);
+
+ nautilus_directory_unref (directory);
+ g_object_unref (location);
+ g_free (uri);
+}
+
+static void
+query_editor_cancel_callback (NautilusQueryEditor *editor,
+ NautilusWindowSlot *slot)
+{
+ GtkAction *search;
+
+ search = gtk_action_group_get_action (slot->window->details->toolbar_action_group,
+ NAUTILUS_ACTION_SEARCH);
+
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (search), FALSE);
+}
+
+static void
+query_editor_changed_callback (NautilusQueryEditor *editor,
+ NautilusQuery *query,
+ gboolean reload,
+ NautilusWindowSlot *slot)
+{
+ NautilusDirectory *directory;
+
+ g_assert (NAUTILUS_IS_FILE (slot->viewed_file));
+
+ directory = nautilus_directory_get_for_file (slot->viewed_file);
+ if (!NAUTILUS_IS_SEARCH_DIRECTORY (directory)) {
+ /* this is the first change from the query editor. we
+ ask for a location change to the search directory,
+ indicate the directory needs to be sync'd with the
+ current query. */
+ create_new_search (slot);
+ } else {
+ sync_search_directory (slot);
}
nautilus_directory_unref (directory);
}
static void
-real_update_query_editor (NautilusWindowSlot *slot)
+update_query_editor (NautilusWindowSlot *slot)
{
NautilusDirectory *directory;
NautilusSearchDirectory *search_directory;
NautilusQuery *query;
- GtkWidget *query_editor;
- gboolean slot_is_active;
- NautilusWindow *window;
-
- window = slot->window;
- query_editor = NULL;
- slot_is_active = (slot == nautilus_window_get_active_slot (window));
directory = nautilus_directory_get (slot->location);
+
+ query = NULL;
+
if (NAUTILUS_IS_SEARCH_DIRECTORY (directory)) {
search_directory = NAUTILUS_SEARCH_DIRECTORY (directory);
+ query = nautilus_search_directory_get_query (search_directory);
+ }
- if (nautilus_search_directory_is_saved_search (search_directory)) {
- query_editor = nautilus_query_editor_new (TRUE);
- nautilus_window_sync_search_widgets (window);
- } else {
- GtkWidget *search_bar;
+ if (query == NULL) {
+ char *uri;
+ uri = g_file_get_uri (slot->location);
+ query = nautilus_query_new ();
+ nautilus_query_set_location (query, uri);
+ g_free (uri);
+ }
+ nautilus_query_editor_set_query (slot->query_editor,
+ query);
+ g_object_unref (query);
- search_bar = nautilus_toolbar_get_search_bar (NAUTILUS_TOOLBAR (window->details->toolbar));
- query_editor = nautilus_query_editor_new_with_bar (FALSE,
- slot_is_active,
- NAUTILUS_SEARCH_BAR (search_bar),
- slot);
- }
+ nautilus_directory_unref (directory);
+}
+
+static void
+ensure_query_editor (NautilusWindowSlot *slot)
+{
+ GtkWidget *query_editor;
+
+ if (slot->query_editor != NULL) {
+ return;
}
+ query_editor = nautilus_query_editor_new ();
slot->query_editor = NAUTILUS_QUERY_EDITOR (query_editor);
- if (query_editor != NULL) {
- g_signal_connect_object (query_editor, "changed",
- G_CALLBACK (query_editor_changed_callback), slot, 0);
-
- query = nautilus_search_directory_get_query (search_directory);
- if (query != NULL) {
- nautilus_query_editor_set_query (NAUTILUS_QUERY_EDITOR (query_editor),
- query);
- g_object_unref (query);
- } else {
- nautilus_query_editor_set_default_query (NAUTILUS_QUERY_EDITOR (query_editor));
- }
+ nautilus_window_slot_add_extra_location_widget (slot, query_editor);
+ gtk_widget_show (query_editor);
+ nautilus_query_editor_grab_focus (slot->query_editor);
- nautilus_window_slot_add_extra_location_widget (slot, query_editor);
- gtk_widget_show (query_editor);
- nautilus_query_editor_grab_focus (NAUTILUS_QUERY_EDITOR (query_editor));
+ update_query_editor (slot);
- g_object_add_weak_pointer (G_OBJECT (slot->query_editor),
- (gpointer *) &slot->query_editor);
- }
+ g_signal_connect_object (slot->query_editor, "changed",
+ G_CALLBACK (query_editor_changed_callback), slot, 0);
+ g_signal_connect_object (slot->query_editor, "cancel",
+ G_CALLBACK (query_editor_cancel_callback), slot, 0);
- nautilus_directory_unref (directory);
+ g_object_add_weak_pointer (G_OBJECT (slot->query_editor),
+ (gpointer *) &slot->query_editor);
+}
+
+void
+nautilus_window_slot_set_query_editor_visible (NautilusWindowSlot *slot,
+ gboolean visible)
+{
+ if (visible) {
+ ensure_query_editor (slot);
+ nautilus_query_editor_set_visible (slot->query_editor, TRUE);
+ nautilus_query_editor_grab_focus (slot->query_editor);
+ } else {
+ if (slot->query_editor != NULL) {
+ gtk_widget_destroy (GTK_WIDGET (slot->query_editor));
+ g_assert (slot->query_editor == NULL);
+ }
+ }
}
static void
@@ -578,41 +658,28 @@ nautilus_window_slot_set_status (NautilusWindowSlot *slot,
}
}
-/* nautilus_window_slot_update_query_editor:
- *
- * Update the query editor.
- * Called when the location has changed.
- *
- * @slot: The NautilusWindowSlot in question.
- */
-void
-nautilus_window_slot_update_query_editor (NautilusWindowSlot *slot)
-{
- if (slot->query_editor != NULL) {
- gtk_widget_destroy (GTK_WIDGET (slot->query_editor));
- g_assert (slot->query_editor == NULL);
- }
-
- real_update_query_editor (slot);
-}
-
static void
-remove_all (GtkWidget *widget,
- gpointer data)
+remove_all_extra_location_widgets (GtkWidget *widget,
+ gpointer data)
{
- GtkContainer *container;
- container = GTK_CONTAINER (data);
+ NautilusWindowSlot *slot = data;
+ NautilusDirectory *directory;
- gtk_container_remove (container, widget);
+ directory = nautilus_directory_get (slot->location);
+ if (!NAUTILUS_IS_SEARCH_DIRECTORY (directory)
+ || (widget != GTK_WIDGET (slot->query_editor))) {
+ gtk_container_remove (GTK_CONTAINER (slot->extra_location_widgets), widget);
+ }
+
+ nautilus_directory_unref (directory);
}
void
nautilus_window_slot_remove_extra_location_widgets (NautilusWindowSlot *slot)
{
gtk_container_foreach (GTK_CONTAINER (slot->extra_location_widgets),
- remove_all,
- slot->extra_location_widgets);
- gtk_widget_hide (slot->extra_location_widgets);
+ remove_all_extra_location_widgets,
+ slot);
}
void
diff --git a/src/nautilus-window-slot.h b/src/nautilus-window-slot.h
index a1ef1c825..42586f1ba 100644
--- a/src/nautilus-window-slot.h
+++ b/src/nautilus-window-slot.h
@@ -120,7 +120,8 @@ NautilusWindowSlot * nautilus_window_slot_new (NautilusWindow *window);
void nautilus_window_slot_update_title (NautilusWindowSlot *slot);
void nautilus_window_slot_update_icon (NautilusWindowSlot *slot);
-void nautilus_window_slot_update_query_editor (NautilusWindowSlot *slot);
+void nautilus_window_slot_set_query_editor_visible (NautilusWindowSlot *slot,
+ gboolean visible);
GFile * nautilus_window_slot_get_location (NautilusWindowSlot *slot);
char * nautilus_window_slot_get_location_uri (NautilusWindowSlot *slot);
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 7b6181d8b..7ee9a82cc 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -38,7 +38,6 @@
#include "nautilus-notebook.h"
#include "nautilus-places-sidebar.h"
#include "nautilus-pathbar.h"
-#include "nautilus-search-bar.h"
#include "nautilus-toolbar.h"
#include "nautilus-view-factory.h"
#include "nautilus-window-manage-views.h"
@@ -198,46 +197,6 @@ bookmark_list_get_uri_index (GList *list, GFile *location)
}
static void
-search_bar_activate_callback (NautilusSearchBar *bar,
- NautilusWindow *window)
-{
- char *uri, *current_uri;
- NautilusDirectory *directory;
- NautilusSearchDirectory *search_directory;
- NautilusQuery *query;
- GFile *location;
- GtkWidget *search_bar;
-
- uri = nautilus_search_directory_generate_new_uri ();
- location = g_file_new_for_uri (uri);
-
- directory = nautilus_directory_get (location);
- g_assert (NAUTILUS_IS_SEARCH_DIRECTORY (directory));
-
- search_directory = NAUTILUS_SEARCH_DIRECTORY (directory);
-
- search_bar = nautilus_toolbar_get_search_bar (NAUTILUS_TOOLBAR (window->details->toolbar));
-
- query = nautilus_search_bar_get_query (NAUTILUS_SEARCH_BAR (search_bar));
-
- if (query != NULL) {
- current_uri = nautilus_window_slot_get_location_uri (window->details->active_slot);
-
- nautilus_query_set_location (query, current_uri);
- nautilus_search_directory_set_query (search_directory, query);
-
- g_free (current_uri);
- g_object_unref (query);
- }
-
- nautilus_window_slot_open_location (window->details->active_slot, location, 0);
-
- nautilus_directory_unref (directory);
- g_object_unref (location);
- g_free (uri);
-}
-
-static void
nautilus_window_hide_temporary_bars (NautilusWindow *window)
{
NautilusWindowSlot *slot;
@@ -255,7 +214,6 @@ nautilus_window_hide_temporary_bars (NautilusWindow *window)
*/
if (NAUTILUS_IS_SEARCH_DIRECTORY (directory)) {
nautilus_toolbar_set_show_main_bar (NAUTILUS_TOOLBAR (window->details->toolbar), FALSE);
- nautilus_toolbar_set_show_search_bar (NAUTILUS_TOOLBAR (window->details->toolbar), TRUE);
} else {
gtk_widget_hide (window->details->toolbar);
}
@@ -265,18 +223,6 @@ nautilus_window_hide_temporary_bars (NautilusWindow *window)
}
static void
-search_bar_cancel_callback (GtkWidget *widget,
- NautilusWindow *window)
-{
- GtkAction *search;
-
- search = gtk_action_group_get_action (window->details->toolbar_action_group,
- NAUTILUS_ACTION_SEARCH);
-
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (search), FALSE);
-}
-
-static void
unset_focus_widget (NautilusWindow *window)
{
if (window->details->last_focus_widget != NULL) {
@@ -293,9 +239,7 @@ widget_is_in_temporary_bars (GtkWidget *widget,
gboolean res = FALSE;
if ((gtk_widget_get_ancestor (widget, NAUTILUS_TYPE_LOCATION_BAR) != NULL &&
- window->details->temporary_navigation_bar) ||
- (gtk_widget_get_ancestor (widget, NAUTILUS_TYPE_SEARCH_BAR) != NULL &&
- window->details->temporary_search_bar))
+ window->details->temporary_navigation_bar))
res = TRUE;
return res;
@@ -350,36 +294,11 @@ navigation_bar_cancel_callback (GtkWidget *widget,
}
static void
-nautilus_window_ensure_search_bar (NautilusWindow *window)
-{
- GtkWidget *search_bar;
-
- remember_focus_widget (window);
- nautilus_toolbar_set_show_search_bar (NAUTILUS_TOOLBAR (window->details->toolbar), TRUE);
- search_bar = nautilus_toolbar_get_search_bar (NAUTILUS_TOOLBAR (window->details->toolbar));
- nautilus_search_bar_grab_focus (NAUTILUS_SEARCH_BAR (search_bar));
-}
-
-static void
-nautilus_window_hide_search_bar (NautilusWindow *window)
-{
- nautilus_toolbar_set_show_search_bar (NAUTILUS_TOOLBAR (window->details->toolbar), FALSE);
- restore_focus_widget (window);
-
- if (window->details->temporary_search_bar) {
- window->details->temporary_search_bar = FALSE;
-
- gtk_widget_hide (window->details->toolbar);
- }
-}
-
-static void
navigation_bar_location_changed_callback (GtkWidget *widget,
GFile *location,
NautilusWindow *window)
{
nautilus_toolbar_set_show_location_entry (NAUTILUS_TOOLBAR (window->details->toolbar), FALSE);
- nautilus_window_hide_search_bar (window);
nautilus_window_hide_temporary_bars (window);
restore_focus_widget (window);
@@ -414,31 +333,21 @@ action_show_hide_search_callback (GtkAction *action,
gpointer user_data)
{
NautilusWindow *window = user_data;
+ NautilusWindowSlot *slot;
+
+ slot = window->details->active_slot;
if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) {
- nautilus_window_ensure_search_bar (window);
+ remember_focus_widget (window);
+ nautilus_window_slot_set_query_editor_visible (slot, TRUE);
} else {
- NautilusWindowSlot *slot;
GFile *location = NULL;
- slot = window->details->active_slot;
- nautilus_window_hide_search_bar (window);
+ restore_focus_widget (window);
/* Use the location bar as the return location */
if (slot->query_editor != NULL) {
- NautilusQuery *query;
- char *uri;
-
- query = nautilus_query_editor_get_query (slot->query_editor);
- if (query != NULL) {
- uri = nautilus_query_get_location (query);
- if (uri != NULL) {
- location = g_file_new_for_uri (uri);
- g_free (uri);
- }
- g_object_unref (query);
- }
-
+ 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 ());
@@ -447,6 +356,8 @@ action_show_hide_search_callback (GtkAction *action,
nautilus_window_go_to (window, location);
g_object_unref (location);
}
+
+ nautilus_window_slot_set_query_editor_visible (slot, FALSE);
}
}
@@ -829,17 +740,14 @@ nautilus_window_slot_close (NautilusWindow *window,
}
static void
-toggle_toolbar_search_button (NautilusWindow *window)
+toggle_toolbar_search_button (NautilusWindow *window,
+ gboolean active)
{
GtkAction *action;
action = gtk_action_group_get_action (window->details->toolbar_action_group, NAUTILUS_ACTION_SEARCH);
- g_signal_handlers_block_by_func (action,
- action_show_hide_search_callback, window);
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE);
- g_signal_handlers_unblock_by_func (action,
- action_show_hide_search_callback, window);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), active);
}
void
@@ -856,17 +764,9 @@ nautilus_window_sync_search_widgets (NautilusWindow *window)
}
if (search_directory != NULL) {
- if (!nautilus_search_directory_is_saved_search (search_directory)) {
- nautilus_toolbar_set_show_search_bar (NAUTILUS_TOOLBAR (window->details->toolbar), TRUE);
- window->details->temporary_search_bar = FALSE;
- } else {
- toggle_toolbar_search_button (window);
- }
+ toggle_toolbar_search_button (window, TRUE);
} else {
- GtkWidget *search_bar;
-
- search_bar = nautilus_toolbar_get_search_bar (NAUTILUS_TOOLBAR (window->details->toolbar));
- search_bar_cancel_callback (search_bar, window);
+ toggle_toolbar_search_button (window, FALSE);
}
nautilus_directory_unref (directory);
@@ -1137,7 +1037,6 @@ create_toolbar (NautilusWindow *window)
GtkWidget *toolbar;
GtkWidget *path_bar;
GtkWidget *location_bar;
- GtkWidget *search_bar;
header_size_group = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
gtk_size_group_set_ignore_hidden (header_size_group, FALSE);
@@ -1179,14 +1078,6 @@ create_toolbar (NautilusWindow *window)
g_signal_connect_object (location_bar, "cancel",
G_CALLBACK (navigation_bar_cancel_callback), window, 0);
- /* connect to the search bar signals */
- search_bar = nautilus_toolbar_get_search_bar (NAUTILUS_TOOLBAR (toolbar));
-
- g_signal_connect_object (search_bar, "activate",
- G_CALLBACK (search_bar_activate_callback), window, 0);
- g_signal_connect_object (search_bar, "cancel",
- G_CALLBACK (search_bar_cancel_callback), window, 0);
-
g_object_unref (header_size_group);
return toolbar;
diff --git a/src/nautilus-window.h b/src/nautilus-window.h
index 2578cc820..50e9e6c42 100644
--- a/src/nautilus-window.h
+++ b/src/nautilus-window.h
@@ -139,8 +139,8 @@ void nautilus_window_slot_close (NautilusWindow *wind
GtkWidget * nautilus_window_ensure_location_bar (NautilusWindow *window);
void nautilus_window_sync_location_widgets (NautilusWindow *window);
-void nautilus_window_sync_search_widgets (NautilusWindow *window);
void nautilus_window_grab_focus (NautilusWindow *window);
+void nautilus_window_sync_search_widgets (NautilusWindow *window);
void nautilus_window_hide_sidebar (NautilusWindow *window);
void nautilus_window_show_sidebar (NautilusWindow *window);