diff options
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | src/nautilus-navigation-window-slot.c | 79 | ||||
-rw-r--r-- | src/nautilus-window-slot.c | 74 | ||||
-rw-r--r-- | src/nautilus-window-slot.h | 5 |
4 files changed, 172 insertions, 0 deletions
@@ -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); |