diff options
-rw-r--r-- | src/nautilus-view.c | 286 | ||||
-rw-r--r-- | src/nautilus-view.h | 5 | ||||
-rw-r--r-- | src/nautilus-window-slot.c | 296 | ||||
-rw-r--r-- | src/nautilus-window-slot.h | 3 |
4 files changed, 261 insertions, 329 deletions
diff --git a/src/nautilus-view.c b/src/nautilus-view.c index e0d42234d..521adee11 100644 --- a/src/nautilus-view.c +++ b/src/nautilus-view.c @@ -32,6 +32,7 @@ #include "nautilus-application.h" #include "nautilus-desktop-canvas-view.h" #include "nautilus-error-reporting.h" +#include "nautilus-floating-bar.h" #include "nautilus-list-view.h" #include "nautilus-mime-actions.h" #include "nautilus-previewer.h" @@ -118,6 +119,9 @@ /* Time to show the duplicated folder label */ #define DIALOG_DUPLICATED_NAME_ERROR_LABEL_TIMEOUT 500 +/* Delay to show the Loading... floating bar */ +#define FLOATING_BAR_LOADING_DELAY 500 /* ms */ + enum { ADD_FILE, BEGIN_FILE_CHANGES, @@ -227,10 +231,16 @@ struct NautilusViewDetails GActionGroup *view_action_group; + GtkWidget *scrolled_window; + /* Empty states */ - GtkWidget *overlay; GtkWidget *folder_is_empty_widget; GtkWidget *no_search_results_widget; + + /* Floating bar */ + guint floating_bar_set_status_timeout_id; + guint floating_bar_loading_timeout_id; + GtkWidget *floating_bar; }; typedef struct { @@ -275,7 +285,7 @@ static void check_empty_states (NautilusView *vi static void unschedule_pop_up_pathbar_context_menu (NautilusView *view); -G_DEFINE_TYPE (NautilusView, nautilus_view, GTK_TYPE_SCROLLED_WINDOW); +G_DEFINE_TYPE (NautilusView, nautilus_view, GTK_TYPE_OVERLAY); static void check_empty_states (NautilusView *view) @@ -292,7 +302,7 @@ check_empty_states (NautilusView *view) NAUTILUS_PREFERENCES_SHOW_HIDDEN_FILES); filtered = nautilus_file_list_filter_hidden (files, show_hidden_files); if (g_list_length (filtered) == 0) { - if (NAUTILUS_IS_SEARCH_DIRECTORY (view->details->model)) { + if (nautilus_view_is_search (view)) { gtk_widget_show (view->details->no_search_results_widget); } else { gtk_widget_show (view->details->folder_is_empty_widget); @@ -303,6 +313,180 @@ check_empty_states (NautilusView *view) } } +/* + * Floating Bar code + */ +static void +remove_loading_floating_bar (NautilusView *view) +{ + if (view->details->floating_bar_loading_timeout_id != 0) { + g_source_remove (view->details->floating_bar_loading_timeout_id); + view->details->floating_bar_loading_timeout_id = 0; + } + + gtk_widget_hide (view->details->floating_bar); + nautilus_floating_bar_cleanup_actions (NAUTILUS_FLOATING_BAR (view->details->floating_bar)); +} + +static void +real_setup_loading_floating_bar (NautilusView *view) +{ + gboolean disable_chrome; + + g_object_get (nautilus_view_get_window (view), + "disable-chrome", &disable_chrome, + NULL); + + if (disable_chrome) { + gtk_widget_hide (view->details->floating_bar); + return; + } + + nautilus_floating_bar_cleanup_actions (NAUTILUS_FLOATING_BAR (view->details->floating_bar)); + nautilus_floating_bar_set_primary_label (NAUTILUS_FLOATING_BAR (view->details->floating_bar), + nautilus_view_is_search (view) ? _("Searching…") : _("Loading…")); + nautilus_floating_bar_set_details_label (NAUTILUS_FLOATING_BAR (view->details->floating_bar), NULL); + nautilus_floating_bar_set_show_spinner (NAUTILUS_FLOATING_BAR (view->details->floating_bar), view->details->loading); + nautilus_floating_bar_add_action (NAUTILUS_FLOATING_BAR (view->details->floating_bar), + "process-stop-symbolic", + NAUTILUS_FLOATING_BAR_ACTION_ID_STOP); + + gtk_widget_set_halign (view->details->floating_bar, GTK_ALIGN_END); + gtk_widget_show (view->details->floating_bar); +} + +static gboolean +setup_loading_floating_bar_timeout_cb (gpointer user_data) +{ + NautilusView *view = user_data; + + view->details->floating_bar_loading_timeout_id = 0; + real_setup_loading_floating_bar (view); + + return FALSE; +} + +static void +setup_loading_floating_bar (NautilusView *view) +{ + /* setup loading overlay */ + if (view->details->floating_bar_set_status_timeout_id != 0) { + g_source_remove (view->details->floating_bar_set_status_timeout_id); + view->details->floating_bar_set_status_timeout_id = 0; + } + + if (view->details->floating_bar_loading_timeout_id != 0) { + g_source_remove (view->details->floating_bar_loading_timeout_id); + view->details->floating_bar_loading_timeout_id = 0; + } + + view->details->floating_bar_loading_timeout_id = + g_timeout_add (FLOATING_BAR_LOADING_DELAY, setup_loading_floating_bar_timeout_cb, view); +} + +static void +floating_bar_action_cb (NautilusFloatingBar *floating_bar, + gint action, + NautilusView *view) +{ + if (action == NAUTILUS_FLOATING_BAR_ACTION_ID_STOP) { + remove_loading_floating_bar (view); + nautilus_window_slot_stop_loading (view->details->slot); + } +} + +static void +real_floating_bar_set_short_status (NautilusView *view, + const gchar *primary_status, + const gchar *detail_status) +{ + gboolean disable_chrome; + + nautilus_floating_bar_cleanup_actions (NAUTILUS_FLOATING_BAR (view->details->floating_bar)); + nautilus_floating_bar_set_show_spinner (NAUTILUS_FLOATING_BAR (view->details->floating_bar), view->details->loading); + + g_object_get (nautilus_view_get_window (view), + "disable-chrome", &disable_chrome, + NULL); + + if ((primary_status == NULL && detail_status == NULL) || disable_chrome) { + gtk_widget_hide (view->details->floating_bar); + return; + } + + nautilus_floating_bar_set_labels (NAUTILUS_FLOATING_BAR (view->details->floating_bar), + primary_status, + detail_status); + + gtk_widget_show (view->details->floating_bar); +} + +typedef struct { + gchar *primary_status; + gchar *detail_status; + NautilusView *view; +} FloatingBarSetStatusData; + +static void +floating_bar_set_status_data_free (gpointer data) +{ + FloatingBarSetStatusData *status_data = data; + + g_free (status_data->primary_status); + g_free (status_data->detail_status); + + g_slice_free (FloatingBarSetStatusData, data); +} + +static gboolean +floating_bar_set_status_timeout_cb (gpointer data) +{ + FloatingBarSetStatusData *status_data = data; + + status_data->view->details->floating_bar_set_status_timeout_id = 0; + real_floating_bar_set_short_status (status_data->view, + status_data->primary_status, + status_data->detail_status); + + return FALSE; +} + +static void +set_floating_bar_status (NautilusView *view, + const gchar *primary_status, + const gchar *detail_status) +{ + GtkSettings *settings; + gint double_click_time; + FloatingBarSetStatusData *status_data; + + if (view->details->floating_bar_set_status_timeout_id != 0) { + g_source_remove (view->details->floating_bar_set_status_timeout_id); + view->details->floating_bar_set_status_timeout_id = 0; + } + + settings = gtk_settings_get_for_screen (gtk_widget_get_screen (GTK_WIDGET (view))); + g_object_get (settings, + "gtk-double-click-time", &double_click_time, + NULL); + + status_data = g_slice_new0 (FloatingBarSetStatusData); + status_data->primary_status = g_strdup (primary_status); + status_data->detail_status = g_strdup (detail_status); + status_data->view = view; + + /* waiting for half of the double-click-time before setting + * the status seems to be a good approximation of not setting it + * too often and not delaying the statusbar too much. + */ + view->details->floating_bar_set_status_timeout_id = + g_timeout_add_full (G_PRIORITY_DEFAULT, + (guint) (double_click_time / 2), + floating_bar_set_status_timeout_cb, + status_data, + floating_bar_set_status_data_free); +} + static char * real_get_backing_uri (NautilusView *view) { @@ -577,6 +761,15 @@ nautilus_view_restore_default_zoom_level (NautilusView *view) NAUTILUS_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->restore_default_zoom_level (view); } +gboolean +nautilus_view_is_search (NautilusView *view) +{ + if (!view->details->model) + return FALSE; + + return NAUTILUS_IS_SEARCH_DIRECTORY (view->details->model); +} + const char * nautilus_view_get_view_id (NautilusView *view) { @@ -2507,7 +2700,7 @@ nautilus_view_grab_focus (NautilusView *view) { /* focus the child of the scrolled window if it exists */ GtkWidget *child; - child = gtk_bin_get_child (GTK_BIN (view)); + child = gtk_bin_get_child (GTK_BIN (view->details->scrolled_window)); if (child) { gtk_widget_grab_focus (GTK_WIDGET (child)); } @@ -2609,6 +2802,16 @@ nautilus_view_destroy (GtkWidget *object) view->details->reveal_selection_idle_id = 0; } + if (view->details->floating_bar_set_status_timeout_id != 0) { + g_source_remove (view->details->floating_bar_set_status_timeout_id); + view->details->floating_bar_set_status_timeout_id = 0; + } + + if (view->details->floating_bar_loading_timeout_id != 0) { + g_source_remove (view->details->floating_bar_loading_timeout_id); + view->details->floating_bar_loading_timeout_id = 0; + } + if (view->details->directory_as_file) { nautilus_file_unref (view->details->directory_as_file); @@ -2821,8 +3024,7 @@ nautilus_view_display_selection_info (NautilusView *view) g_free (non_folder_count_str); g_free (non_folder_item_count_str); - nautilus_window_slot_set_status (view->details->slot, - primary_status, detail_status); + set_floating_bar_status (view, primary_status, detail_status); g_free (primary_status); g_free (detail_status); @@ -2839,12 +3041,10 @@ nautilus_view_load_location (NautilusView *nautilus_view, GFile *location) { NautilusDirectory *directory; - NautilusView *directory_view; - directory_view = NAUTILUS_VIEW (nautilus_view); nautilus_profile_start (NULL); directory = nautilus_directory_get (location); - load_directory (directory_view, directory); + load_directory (nautilus_view, directory); nautilus_directory_unref (directory); nautilus_profile_end (NULL); } @@ -2879,14 +3079,14 @@ done_loading (NautilusView *view, * as NULL. */ if (view->details->model != NULL) { nautilus_view_update_toolbar_menus (view); + remove_loading_floating_bar (view); schedule_update_context_menus (view); schedule_update_status (view); reset_update_interval (view); selection = view->details->pending_selection; - if (NAUTILUS_IS_SEARCH_DIRECTORY (view->details->model) - && all_files_seen) { + if (nautilus_view_is_search (view) && all_files_seen) { nautilus_view_select_first (view); do_reveal = TRUE; } else if (selection != NULL && all_files_seen) { @@ -3616,6 +3816,8 @@ done_loading_callback (NautilusDirectory *directory, */ unschedule_display_of_pending_files (view); schedule_timeout_display_of_pending_files (view, UPDATE_INTERVAL_MIN); + + remove_loading_floating_bar (view); } nautilus_profile_end (NULL); } @@ -3733,7 +3935,7 @@ nautilus_view_get_content_widget (NautilusView *view) { g_return_val_if_fail (NAUTILUS_IS_VIEW (view), NULL); - return view->details->overlay; + return view->details->scrolled_window; } GdkAtom @@ -6074,8 +6276,7 @@ real_update_actions_state (NautilusView *view) selection_contains_special_link = special_link_in_selection (selection); selection_contains_desktop_or_home_dir = desktop_or_home_dir_in_selection (selection); selection_contains_recent = showing_recent_directory (view); - selection_contains_search = view->details->model && - NAUTILUS_IS_SEARCH_DIRECTORY (view->details->model); + selection_contains_search = nautilus_view_is_search (view); selection_is_read_only = selection_count == 1 && (!nautilus_file_can_write (NAUTILUS_FILE (selection->data)) && !nautilus_file_has_activation_uri (NAUTILUS_FILE (selection->data))); @@ -6922,6 +7123,8 @@ load_directory (NautilusView *view, view->details->loading = TRUE; + setup_loading_floating_bar (view); + /* Update menus when directory is empty, before going to new * location, so they won't have any false lingering knowledge * of old selection. @@ -7493,7 +7696,7 @@ nautilus_view_scroll_event (GtkWidget *widget, return TRUE; } - return GTK_WIDGET_CLASS (nautilus_view_parent_class)->scroll_event (widget, event); + return FALSE; } static void @@ -7529,10 +7732,8 @@ nautilus_view_class_init (NautilusViewClass *klass) { GObjectClass *oclass; GtkWidgetClass *widget_class; - GtkScrolledWindowClass *scrolled_window_class; widget_class = GTK_WIDGET_CLASS (klass); - scrolled_window_class = GTK_SCROLLED_WINDOW_CLASS (klass); oclass = G_OBJECT_CLASS (klass); oclass->finalize = nautilus_view_finalize; @@ -7544,11 +7745,6 @@ nautilus_view_class_init (NautilusViewClass *klass) g_type_class_add_private (klass, sizeof (NautilusViewDetails)); - /* Get rid of the strange 3-pixel gap that GtkScrolledWindow - * uses by default. It does us no good. - */ - scrolled_window_class->scrollbar_spacing = 0; - signals[ADD_FILE] = g_signal_new ("add-file", G_TYPE_FROM_CLASS (klass), @@ -7671,25 +7867,49 @@ nautilus_view_init (NautilusView *view) view->details = G_TYPE_INSTANCE_GET_PRIVATE (view, NAUTILUS_TYPE_VIEW, NautilusViewDetails); - /* Overlay */ - view->details->overlay = gtk_overlay_new (); - gtk_widget_show (view->details->overlay); + /* NautilusFloatingBar listen to its parent's 'enter-notify-event' signal + * and GtkOverlay doesn't have it enabled by default, so we have to add them + * here. + */ + gtk_widget_add_events (GTK_WIDGET (view), + GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); - gtk_container_add (GTK_CONTAINER (view), view->details->overlay); + /* Scrolled Window */ + view->details->scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (view->details->scrolled_window), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_widget_show (view->details->scrolled_window); + + g_signal_connect_swapped (view->details->scrolled_window, + "scroll-event", + G_CALLBACK (nautilus_view_scroll_event), + view); + + gtk_container_add (GTK_CONTAINER (view), view->details->scrolled_window); /* Empty states */ builder = gtk_builder_new_from_resource ("/org/gnome/nautilus/nautilus-no-search-results.ui"); view->details->no_search_results_widget = GTK_WIDGET (gtk_builder_get_object (builder, "no_search_results")); - gtk_overlay_add_overlay (GTK_OVERLAY (view->details->overlay), - view->details->no_search_results_widget); + gtk_overlay_add_overlay (GTK_OVERLAY (view), view->details->no_search_results_widget); g_object_unref (builder); builder = gtk_builder_new_from_resource ("/org/gnome/nautilus/nautilus-folder-is-empty.ui"); view->details->folder_is_empty_widget = GTK_WIDGET (gtk_builder_get_object (builder, "folder_is_empty")); - gtk_overlay_add_overlay (GTK_OVERLAY (view->details->overlay), - view->details->folder_is_empty_widget); + gtk_overlay_add_overlay (GTK_OVERLAY (view), view->details->folder_is_empty_widget); g_object_unref (builder); + /* Floating bar */ + view->details->floating_bar = nautilus_floating_bar_new (NULL, NULL, FALSE); + gtk_widget_set_halign (view->details->floating_bar, GTK_ALIGN_END); + gtk_widget_set_valign (view->details->floating_bar, GTK_ALIGN_END); + gtk_overlay_add_overlay (GTK_OVERLAY (view), view->details->floating_bar); + + g_signal_connect (view->details->floating_bar, + "action", + G_CALLBACK (floating_bar_action_cb), + view); + /* Default to true; desktop-icon-view sets to false */ view->details->show_foreign_files = TRUE; @@ -7699,12 +7919,6 @@ nautilus_view_init (NautilusView *view) (GDestroyNotify)file_and_directory_free, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (view), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_hadjustment (GTK_SCROLLED_WINDOW (view), NULL); - gtk_scrolled_window_set_vadjustment (GTK_SCROLLED_WINDOW (view), NULL); - gtk_style_context_set_junction_sides (gtk_widget_get_style_context (GTK_WIDGET (view)), GTK_JUNCTION_TOP | GTK_JUNCTION_LEFT); diff --git a/src/nautilus-view.h b/src/nautilus-view.h index b822793e4..95770f72e 100644 --- a/src/nautilus-view.h +++ b/src/nautilus-view.h @@ -62,13 +62,13 @@ typedef struct NautilusViewClass NautilusViewClass; typedef struct NautilusViewDetails NautilusViewDetails; struct NautilusView { - GtkScrolledWindow parent; + GtkOverlay parent; NautilusViewDetails *details; }; struct NautilusViewClass { - GtkScrolledWindowClass parent_class; + GtkOverlayClass parent_class; /* The 'clear' signal is emitted to empty the view of its contents. * It must be replaced by each subclass. @@ -392,5 +392,6 @@ void nautilus_view_action_show_hidden_files (NautilusView *view, GActionGroup * nautilus_view_get_action_group (NautilusView *view); GtkWidget* nautilus_view_get_content_widget (NautilusView *view); +gboolean nautilus_view_is_search (NautilusView *view); #endif /* NAUTILUS_VIEW_H */ diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c index 43f98841c..7c1daf9e1 100644 --- a/src/nautilus-window-slot.c +++ b/src/nautilus-window-slot.c @@ -27,7 +27,6 @@ #include "nautilus-application.h" #include "nautilus-canvas-view.h" #include "nautilus-desktop-window.h" -#include "nautilus-floating-bar.h" #include "nautilus-list-view.h" #include "nautilus-special-location-bar.h" #include "nautilus-trash-bar.h" @@ -62,12 +61,6 @@ enum { struct NautilusWindowSlotDetails { NautilusWindow *window; - /* floating bar */ - guint set_status_timeout_id; - guint loading_timeout_id; - GtkWidget *floating_bar; - GtkWidget *view_overlay; - /* slot contains * 1) an vbox containing extra_location_widgets * 2) the view @@ -131,28 +124,18 @@ static void location_has_really_changed (NautilusWindowSlot *slot); static void nautilus_window_slot_connect_new_content_view (NautilusWindowSlot *slot); static void nautilus_window_slot_disconnect_content_view (NautilusWindowSlot *slot); static void nautilus_window_slot_emit_location_change (NautilusWindowSlot *slot, GFile *from, GFile *to); -static void setup_loading_floating_bar (NautilusWindowSlot *slot); static void nautilus_window_slot_sync_search_widgets (NautilusWindowSlot *slot) { - NautilusDirectory *directory; - gboolean toggle; - if (slot != nautilus_window_get_active_slot (slot->details->window)) { return; } - toggle = slot->details->search_visible; - - if (slot->details->content_view != NULL) { - directory = nautilus_view_get_model (slot->details->content_view); - if (NAUTILUS_IS_SEARCH_DIRECTORY (directory)) { - toggle = TRUE; - } - } - - nautilus_window_slot_set_search_visible (slot, toggle); + nautilus_window_slot_set_search_visible (slot, + slot->details->search_visible || + (slot->details->content_view && + nautilus_view_is_search (slot->details->content_view))); } static gboolean @@ -190,49 +173,6 @@ nautilus_window_slot_sync_view_mode (NautilusWindowSlot *slot) } static void -remove_loading_floating_bar (NautilusWindowSlot *slot) -{ - if (slot->details->loading_timeout_id != 0) { - g_source_remove (slot->details->loading_timeout_id); - slot->details->loading_timeout_id = 0; - } - - gtk_widget_hide (slot->details->floating_bar); - nautilus_floating_bar_cleanup_actions (NAUTILUS_FLOATING_BAR (slot->details->floating_bar)); -} - -static void -nautilus_window_slot_on_done_loading (NautilusDirectory *directory, - NautilusWindowSlot *slot) -{ - - remove_loading_floating_bar (slot); - nautilus_window_slot_set_allow_stop (slot, FALSE); -} - -static void -connect_directory_signals (NautilusWindowSlot *slot, - NautilusDirectory *directory) -{ - if (NAUTILUS_IS_SEARCH_DIRECTORY (directory)) { - g_signal_connect_object (directory, "done-loading", - G_CALLBACK (nautilus_window_slot_on_done_loading), - slot, 0); - } -} - -static void -disconnect_directory_signals (NautilusWindowSlot *slot, - NautilusDirectory *directory) -{ - if (NAUTILUS_IS_SEARCH_DIRECTORY (directory)) { - g_signal_handlers_disconnect_by_func (directory, - G_CALLBACK (nautilus_window_slot_on_done_loading), - slot); - } -} - -static void sync_search_directory (NautilusWindowSlot *slot) { NautilusDirectory *directory; @@ -526,16 +466,6 @@ real_inactive (NautilusWindowSlot *slot) } static void -floating_bar_action_cb (NautilusFloatingBar *floating_bar, - gint action, - NautilusWindowSlot *slot) -{ - if (action == NAUTILUS_FLOATING_BAR_ACTION_ID_STOP) { - nautilus_window_slot_stop_loading (slot); - } -} - -static void remove_all_extra_location_widgets (GtkWidget *widget, gpointer data) { @@ -627,22 +557,6 @@ nautilus_window_slot_constructed (GObject *object) gtk_widget_show_all (slot->details->query_editor_revealer); nautilus_window_slot_add_extra_location_widget (slot, slot->details->query_editor_revealer); - slot->details->view_overlay = gtk_overlay_new (); - gtk_widget_add_events (slot->details->view_overlay, - GDK_ENTER_NOTIFY_MASK | - GDK_LEAVE_NOTIFY_MASK); - gtk_box_pack_start (GTK_BOX (slot), slot->details->view_overlay, TRUE, TRUE, 0); - gtk_widget_show (slot->details->view_overlay); - - slot->details->floating_bar = nautilus_floating_bar_new (NULL, NULL, FALSE); - gtk_widget_set_halign (slot->details->floating_bar, GTK_ALIGN_END); - gtk_widget_set_valign (slot->details->floating_bar, GTK_ALIGN_END); - gtk_overlay_add_overlay (GTK_OVERLAY (slot->details->view_overlay), - slot->details->floating_bar); - - g_signal_connect (slot->details->floating_bar, "action", - G_CALLBACK (floating_bar_action_cb), slot); - slot->details->title = g_strdup (_("Loading…")); } @@ -889,7 +803,6 @@ begin_location_change (NautilusWindowSlot *slot, NautilusWindowGoToCallback callback, gpointer user_data) { - NautilusDirectory *previous_directory; NautilusDirectory *directory; NautilusFile *file; gboolean force_reload; @@ -905,12 +818,8 @@ begin_location_change (NautilusWindowSlot *slot, nautilus_profile_start (NULL); - previous_directory = nautilus_directory_get (previous_location); directory = nautilus_directory_get (location); - /* Disconnect search signals from the old directory if it was a search directory */ - disconnect_directory_signals (slot, previous_directory); - nautilus_directory_unref (previous_directory); /* Avoid to update status from the current view in our async calls */ nautilus_window_slot_disconnect_content_view (slot); @@ -945,7 +854,6 @@ begin_location_change (NautilusWindowSlot *slot, end_location_change (slot); nautilus_window_slot_set_allow_stop (slot, TRUE); - nautilus_window_slot_set_status (slot, NULL, NULL); g_assert (slot->details->pending_location == NULL); g_assert (slot->details->pending_selection == NULL); @@ -1466,10 +1374,6 @@ create_content_view (NautilusWindowSlot *slot, old_directory = nautilus_directory_get (old_location); new_directory = nautilus_directory_get (slot->details->pending_location); - /* Connect to the done loading signal if it is a search directory to update - * the no results widget */ - connect_directory_signals (slot, new_directory); - if (NAUTILUS_IS_SEARCH_DIRECTORY (new_directory) && !NAUTILUS_IS_SEARCH_DIRECTORY (old_directory)) { nautilus_search_directory_set_base_model (NAUTILUS_SEARCH_DIRECTORY (new_directory), old_directory); @@ -1629,7 +1533,6 @@ cancel_location_change (NautilusWindowSlot *slot) location = nautilus_window_slot_get_location (slot); directory = nautilus_directory_get (slot->details->location); - disconnect_directory_signals (slot, directory); /* Stops current loading or search if any, so we are not slow */ nautilus_view_stop_loading (slot->details->content_view); nautilus_directory_unref (directory); @@ -2237,70 +2140,7 @@ view_end_loading_cb (NautilusView *view, slot->details->needs_reload = FALSE; } - /* If it is a search directory, it will hide the toolbar when the search engine - * finishes, not every time the view end loading the new files */ - if (!NAUTILUS_IS_SEARCH_DIRECTORY (nautilus_view_get_model (slot->details->content_view))) { - remove_loading_floating_bar (slot); - nautilus_window_slot_set_allow_stop (slot, FALSE); - } -} - -static void -real_setup_loading_floating_bar (NautilusWindowSlot *slot) -{ - gboolean disable_chrome; - - g_object_get (nautilus_window_slot_get_window (slot), - "disable-chrome", &disable_chrome, - NULL); - - if (disable_chrome) { - gtk_widget_hide (slot->details->floating_bar); - return; - } - - nautilus_floating_bar_cleanup_actions (NAUTILUS_FLOATING_BAR (slot->details->floating_bar)); - nautilus_floating_bar_set_primary_label (NAUTILUS_FLOATING_BAR (slot->details->floating_bar), - NAUTILUS_IS_SEARCH_DIRECTORY (nautilus_view_get_model (slot->details->content_view)) ? - _("Searching…") : _("Loading…")); - nautilus_floating_bar_set_details_label (NAUTILUS_FLOATING_BAR (slot->details->floating_bar), NULL); - nautilus_floating_bar_set_show_spinner (NAUTILUS_FLOATING_BAR (slot->details->floating_bar), - slot->details->allow_stop); - nautilus_floating_bar_add_action (NAUTILUS_FLOATING_BAR (slot->details->floating_bar), - "process-stop-symbolic", - NAUTILUS_FLOATING_BAR_ACTION_ID_STOP); - - gtk_widget_set_halign (slot->details->floating_bar, GTK_ALIGN_END); - gtk_widget_show (slot->details->floating_bar); -} - -static gboolean -setup_loading_floating_bar_timeout_cb (gpointer user_data) -{ - NautilusWindowSlot *slot = user_data; - - slot->details->loading_timeout_id = 0; - real_setup_loading_floating_bar (slot); - - return FALSE; -} - -static void -setup_loading_floating_bar (NautilusWindowSlot *slot) -{ - /* setup loading overlay */ - if (slot->details->set_status_timeout_id != 0) { - g_source_remove (slot->details->set_status_timeout_id); - slot->details->set_status_timeout_id = 0; - } - - if (slot->details->loading_timeout_id != 0) { - g_source_remove (slot->details->loading_timeout_id); - slot->details->loading_timeout_id = 0; - } - - slot->details->loading_timeout_id = - g_timeout_add (500, setup_loading_floating_bar_timeout_cb, slot); + nautilus_window_slot_set_allow_stop (slot, FALSE); } static void @@ -2315,9 +2155,7 @@ view_begin_loading_cb (NautilusView *view, nautilus_window_slot_set_allow_stop (slot, TRUE); } - setup_loading_floating_bar (slot); - - nautilus_profile_end (NULL); + nautilus_profile_end (NULL); } static void @@ -2422,7 +2260,8 @@ nautilus_window_slot_switch_new_content_view (NautilusWindowSlot *slot) slot->details->new_content_view = NULL; widget = GTK_WIDGET (slot->details->content_view); - gtk_container_add (GTK_CONTAINER (slot->details->view_overlay), widget); + gtk_container_add (GTK_CONTAINER (slot), widget); + gtk_widget_set_vexpand (widget, TRUE); gtk_widget_show (widget); } } @@ -2476,7 +2315,6 @@ static void nautilus_window_slot_dispose (GObject *object) { NautilusWindowSlot *slot; - NautilusDirectory *directory; GtkWidget *widget; slot = NAUTILUS_WINDOW_SLOT (object); @@ -2500,16 +2338,6 @@ nautilus_window_slot_dispose (GObject *object) slot->details->new_content_view = NULL; } - if (slot->details->set_status_timeout_id != 0) { - g_source_remove (slot->details->set_status_timeout_id); - slot->details->set_status_timeout_id = 0; - } - - if (slot->details->loading_timeout_id != 0) { - g_source_remove (slot->details->loading_timeout_id); - slot->details->loading_timeout_id = 0; - } - nautilus_window_slot_set_viewed_file (slot, NULL); /* TODO? why do we unref here? the file is NULL. * It was already here before the slot move, though */ @@ -2519,10 +2347,6 @@ nautilus_window_slot_dispose (GObject *object) /* TODO? why do we ref here, instead of unreffing? * It was already here before the slot migration, though */ g_object_ref (slot->details->location); - - directory = nautilus_directory_get (slot->details->location); - disconnect_directory_signals (slot, directory); - g_object_unref (directory); } if (slot->details->view_mode_before_search) { @@ -2715,113 +2539,9 @@ nautilus_window_slot_set_allow_stop (NautilusWindowSlot *slot, void nautilus_window_slot_stop_loading (NautilusWindowSlot *slot) { - remove_loading_floating_bar (slot); cancel_location_change (slot); } -static void -real_slot_set_short_status (NautilusWindowSlot *slot, - const gchar *primary_status, - const gchar *detail_status) -{ - gboolean disable_chrome; - - nautilus_floating_bar_cleanup_actions (NAUTILUS_FLOATING_BAR (slot->details->floating_bar)); - nautilus_floating_bar_set_show_spinner (NAUTILUS_FLOATING_BAR (slot->details->floating_bar), - slot->details->allow_stop); - - g_object_get (nautilus_window_slot_get_window (slot), - "disable-chrome", &disable_chrome, - NULL); - - if ((primary_status == NULL && detail_status == NULL) || disable_chrome) { - gtk_widget_hide (slot->details->floating_bar); - return; - } - - nautilus_floating_bar_set_labels (NAUTILUS_FLOATING_BAR (slot->details->floating_bar), - primary_status, detail_status); - gtk_widget_show (slot->details->floating_bar); -} - -typedef struct { - gchar *primary_status; - gchar *detail_status; - NautilusWindowSlot *slot; -} SetStatusData; - -static void -set_status_data_free (gpointer data) -{ - SetStatusData *status_data = data; - - g_free (status_data->primary_status); - g_free (status_data->detail_status); - - g_slice_free (SetStatusData, data); -} - -static gboolean -set_status_timeout_cb (gpointer data) -{ - SetStatusData *status_data = data; - - status_data->slot->details->set_status_timeout_id = 0; - real_slot_set_short_status (status_data->slot, - status_data->primary_status, - status_data->detail_status); - - return FALSE; -} - -static void -set_floating_bar_status (NautilusWindowSlot *slot, - const gchar *primary_status, - const gchar *detail_status) -{ - GtkSettings *settings; - gint double_click_time; - SetStatusData *status_data; - - if (slot->details->set_status_timeout_id != 0) { - g_source_remove (slot->details->set_status_timeout_id); - slot->details->set_status_timeout_id = 0; - } - - settings = gtk_settings_get_for_screen (gtk_widget_get_screen (GTK_WIDGET (slot->details->content_view))); - g_object_get (settings, - "gtk-double-click-time", &double_click_time, - NULL); - - status_data = g_slice_new0 (SetStatusData); - status_data->primary_status = g_strdup (primary_status); - status_data->detail_status = g_strdup (detail_status); - status_data->slot = slot; - - /* waiting for half of the double-click-time before setting - * the status seems to be a good approximation of not setting it - * too often and not delaying the statusbar too much. - */ - slot->details->set_status_timeout_id = - g_timeout_add_full (G_PRIORITY_DEFAULT, - (guint) (double_click_time / 2), - set_status_timeout_cb, - status_data, - set_status_data_free); -} - -void -nautilus_window_slot_set_status (NautilusWindowSlot *slot, - const char *primary_status, - const char *detail_status) -{ - g_assert (NAUTILUS_IS_WINDOW_SLOT (slot)); - - if (slot->details->content_view != NULL) { - set_floating_bar_status (slot, primary_status, detail_status); - } -} - /* returns either the pending or the actual current uri */ char * nautilus_window_slot_get_current_uri (NautilusWindowSlot *slot) diff --git a/src/nautilus-window-slot.h b/src/nautilus-window-slot.h index ed7e780c7..97ff788ae 100644 --- a/src/nautilus-window-slot.h +++ b/src/nautilus-window-slot.h @@ -120,9 +120,6 @@ void nautilus_window_slot_go_home (NautilusWindowSlot *slot, void nautilus_window_slot_go_up (NautilusWindowSlot *slot, NautilusWindowOpenFlags flags); -void nautilus_window_slot_set_status (NautilusWindowSlot *slot, - const char *primary_status, - const char *detail_status); void nautilus_window_slot_sync_view_mode (NautilusWindowSlot *slot); void nautilus_window_slot_display_view_selection_failure (NautilusWindow *window, |