summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Neumair <cneumair@gnome.org>2008-06-28 18:21:57 +0000
committerChristian Neumair <cneumair@src.gnome.org>2008-06-28 18:21:57 +0000
commitb0a0a6de28a5ad4505e6b1f1c440555abd024066 (patch)
tree7edb9d164b19db04a8e8baa06c3bd9a46776e03e
parent4bda4fa525da05cbf6b317f383b18edfd24b40f5 (diff)
downloadnautilus-b0a0a6de28a5ad4505e6b1f1c440555abd024066.tar.gz
Add nautilus_window_slot_update_query_editor() for instantiating the query
2008-06-28 Christian Neumair <cneumair@gnome.org> * src/nautilus-navigation-window-slot.c (query_editor_changed_callback), (nautilus_navigation_window_slot_update_query_editor), (nautilus_navigation_window_slot_class_init): * src/nautilus-window-slot.c (query_editor_changed_callback), (real_update_query_editor), (nautilus_window_slot_class_init), (nautilus_window_slot_update_query_editor): * src/nautilus-window-slot.h: Add nautilus_window_slot_update_query_editor() for instantiating the query editors, depending on the view's directory type. svn path=/branches/multiview/; revision=14292
-rw-r--r--ChangeLog14
-rw-r--r--src/nautilus-navigation-window-slot.c79
-rw-r--r--src/nautilus-window-slot.c74
-rw-r--r--src/nautilus-window-slot.h5
4 files changed, 172 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index c3dc48d33..6da03e4c0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,19 @@
2008-06-28 Christian Neumair <cneumair@gnome.org>
+ * src/nautilus-navigation-window-slot.c
+ (query_editor_changed_callback),
+ (nautilus_navigation_window_slot_update_query_editor),
+ (nautilus_navigation_window_slot_class_init):
+ * src/nautilus-window-slot.c (query_editor_changed_callback),
+ (real_update_query_editor), (nautilus_window_slot_class_init),
+ (nautilus_window_slot_update_query_editor):
+ * src/nautilus-window-slot.h:
+ Add nautilus_window_slot_update_query_editor() for
+ instantiating the query editors, depending on the view's directory
+ type.
+
+2008-06-28 Christian Neumair <cneumair@gnome.org>
+
* src/file-manager/fm-directory-view.c
(clipboard_changed_callback):
Do not react to changes if inactive.
diff --git a/src/nautilus-navigation-window-slot.c b/src/nautilus-navigation-window-slot.c
index 6010c1d94..d918da53c 100644
--- a/src/nautilus-navigation-window-slot.c
+++ b/src/nautilus-navigation-window-slot.c
@@ -25,7 +25,9 @@
#include "nautilus-window-slot.h"
#include "nautilus-navigation-window-slot.h"
#include "nautilus-window-private.h"
+#include "nautilus-search-bar.h"
#include <libnautilus-private/nautilus-window-slot-info.h>
+#include <libnautilus-private/nautilus-file.h>
#include <eel/eel-gtk-macros.h>
static void nautilus_navigation_window_slot_init (NautilusNavigationWindowSlot *slot);
@@ -53,6 +55,82 @@ nautilus_navigation_window_slot_clear_back_list (NautilusNavigationWindowSlot *s
}
static void
+query_editor_changed_callback (NautilusSearchBar *bar,
+ 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);
+ g_assert (NAUTILUS_IS_SEARCH_DIRECTORY (directory));
+
+ nautilus_search_directory_set_query (NAUTILUS_SEARCH_DIRECTORY (directory),
+ query);
+ if (reload) {
+ nautilus_window_slot_reload (slot);
+ }
+
+ nautilus_directory_unref (directory);
+}
+
+
+static void
+nautilus_navigation_window_slot_update_query_editor (NautilusWindowSlot *slot)
+{
+ NautilusDirectory *directory;
+ NautilusSearchDirectory *search_directory;
+ NautilusQuery *query;
+ NautilusNavigationWindow *navigation_window;
+ GtkWidget *query_editor;
+
+ g_assert (slot->window != NULL);
+ navigation_window = NAUTILUS_NAVIGATION_WINDOW (slot->window);
+
+ query_editor = NULL;
+
+ directory = nautilus_directory_get (slot->location);
+ if (NAUTILUS_IS_SEARCH_DIRECTORY (directory)) {
+ search_directory = NAUTILUS_SEARCH_DIRECTORY (directory);
+
+ if (nautilus_search_directory_is_saved_search (search_directory)) {
+ query_editor = nautilus_query_editor_new (TRUE,
+ nautilus_search_directory_is_indexed (search_directory));
+ } else {
+ query_editor = nautilus_query_editor_new_with_bar (FALSE,
+ nautilus_search_directory_is_indexed (search_directory),
+ slot->window->details->active_slot == slot,
+ NAUTILUS_SEARCH_BAR (navigation_window->search_bar),
+ slot);
+ }
+ }
+
+ 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 (NAUTILUS_QUERY_EDITOR (query_editor));
+ }
+
+ nautilus_directory_unref (directory);
+}
+
+static void
nautilus_navigation_window_slot_active (NautilusWindowSlot *slot)
{
NautilusNavigationWindow *window;
@@ -97,6 +175,7 @@ static void
nautilus_navigation_window_slot_class_init (NautilusNavigationWindowSlotClass *class)
{
NAUTILUS_WINDOW_SLOT_CLASS (class)->active = nautilus_navigation_window_slot_active;
+ NAUTILUS_WINDOW_SLOT_CLASS (class)->update_query_editor = nautilus_navigation_window_slot_update_query_editor;
G_OBJECT_CLASS (class)->dispose = nautilus_navigation_window_slot_dispose;
}
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
index e01b3a913..81aa66507 100644
--- a/src/nautilus-window-slot.c
+++ b/src/nautilus-window-slot.c
@@ -47,6 +47,63 @@ G_DEFINE_TYPE_WITH_CODE (NautilusWindowSlot,
#define parent_class nautilus_window_slot_parent_class
static void
+query_editor_changed_callback (NautilusSearchBar *bar,
+ NautilusQuery *query,
+ gboolean reload,
+ NautilusWindowSlot *slot)
+{
+ NautilusDirectory *directory;
+
+ directory = nautilus_directory_get_for_file (slot->viewed_file);
+ g_assert (NAUTILUS_IS_SEARCH_DIRECTORY (directory));
+
+ nautilus_search_directory_set_query (NAUTILUS_SEARCH_DIRECTORY (directory),
+ query);
+ if (reload) {
+ nautilus_window_slot_reload (slot);
+ }
+
+ nautilus_directory_unref (directory);
+}
+
+static void
+real_update_query_editor (NautilusWindowSlot *slot)
+{
+ GtkWidget *query_editor;
+ NautilusQuery *query;
+ NautilusDirectory *directory;
+ NautilusSearchDirectory *search_directory;
+
+ directory = nautilus_directory_get (slot->location);
+
+ if (NAUTILUS_IS_SEARCH_DIRECTORY (directory)) {
+ search_directory = NAUTILUS_SEARCH_DIRECTORY (directory);
+
+ query_editor = nautilus_query_editor_new (nautilus_search_directory_is_saved_search (search_directory),
+ nautilus_search_directory_is_indexed (search_directory));
+
+ slot->query_editor = NAUTILUS_QUERY_EDITOR (query_editor);
+
+ nautilus_window_slot_add_extra_location_widget (slot, query_editor);
+ gtk_widget_show (query_editor);
+ 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_directory_unref (directory);
+}
+
+
+static void
real_active (NautilusWindowSlot *slot)
{
NautilusWindow *window;
@@ -138,6 +195,7 @@ nautilus_window_slot_class_init (NautilusWindowSlotClass *class)
{
class->active = real_active;
class->inactive = real_inactive;
+ class->update_query_editor = real_update_query_editor;
G_OBJECT_CLASS (class)->dispose = nautilus_window_slot_dispose;
}
@@ -301,6 +359,22 @@ nautilus_window_slot_update_icon (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)
+{
+ /* at this point, the old query editor must have been destroyed. */
+ g_assert (slot->query_editor == NULL);
+
+ EEL_CALL_METHOD (NAUTILUS_WINDOW_SLOT_CLASS, slot,
+ update_query_editor, (slot));
+}
static void
remove_all (GtkWidget *widget,
diff --git a/src/nautilus-window-slot.h b/src/nautilus-window-slot.h
index 356f4fd5d..0d74f5352 100644
--- a/src/nautilus-window-slot.h
+++ b/src/nautilus-window-slot.h
@@ -26,6 +26,7 @@
#define NAUTILUS_WINDOW_SLOT_H
#include "nautilus-window.h"
+#include "nautilus-query-editor.h"
#define NAUTILUS_TYPE_WINDOW_SLOT (nautilus_window_slot_get_type())
#define NAUTILUS_WINDOW_SLOT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NAUTILUS_TYPE_WINDOW_SLOT, NautilusWindowSlotClass))
@@ -49,6 +50,8 @@ struct NautilusWindowSlotClass {
/* wrapped NautilusWindowInfo signals, for overloading */
void (* active) (NautilusWindowSlot *slot);
void (* inactive) (NautilusWindowSlot *slot);
+
+ void (* update_query_editor) (NautilusWindowSlot *slot);
};
/* Each NautilusWindowSlot corresponds to
@@ -90,6 +93,7 @@ struct NautilusWindowSlot {
gboolean allow_stop;
gboolean search_mode;
+ NautilusQueryEditor *query_editor;
/* New location. */
NautilusLocationChangeType location_change_type;
@@ -110,6 +114,7 @@ GType nautilus_window_slot_get_type (void);
char * nautilus_window_slot_get_title (NautilusWindowSlot *slot);
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);
GFile * nautilus_window_slot_get_location (NautilusWindowSlot *slot);
char * nautilus_window_slot_get_location_uri (NautilusWindowSlot *slot);