diff options
-rw-r--r-- | src/nautilus-canvas-view.c | 6 | ||||
-rw-r--r-- | src/nautilus-list-view.c | 4 | ||||
-rw-r--r-- | src/nautilus-view.c | 66 | ||||
-rw-r--r-- | src/nautilus-view.h | 1 | ||||
-rw-r--r-- | src/nautilus-window-slot.c | 65 |
5 files changed, 73 insertions, 69 deletions
diff --git a/src/nautilus-canvas-view.c b/src/nautilus-canvas-view.c index fac0bdada..53e37d9d5 100644 --- a/src/nautilus-canvas-view.c +++ b/src/nautilus-canvas-view.c @@ -1640,7 +1640,9 @@ static NautilusCanvasContainer * create_canvas_container (NautilusCanvasView *canvas_view) { NautilusCanvasContainer *canvas_container; + GtkWidget *content_widget; + content_widget = nautilus_view_get_content_widget (NAUTILUS_VIEW (canvas_view)); canvas_container = nautilus_canvas_view_container_new (canvas_view); canvas_view->details->canvas_container = GTK_WIDGET (canvas_container); g_object_add_weak_pointer (G_OBJECT (canvas_container), @@ -1695,7 +1697,7 @@ create_canvas_container (NautilusCanvasView *canvas_view) g_signal_connect_object (canvas_container, "store-layout-timestamp", G_CALLBACK (store_layout_timestamp), canvas_view, 0); - gtk_container_add (GTK_CONTAINER (canvas_view), + gtk_container_add (GTK_CONTAINER (content_widget), GTK_WIDGET (canvas_container)); nautilus_canvas_view_update_click_mode (canvas_view); @@ -1933,8 +1935,6 @@ nautilus_canvas_view_init (NautilusCanvasView *canvas_view) NautilusCanvasContainer *canvas_container; GActionGroup *view_action_group; - g_return_if_fail (gtk_bin_get_child (GTK_BIN (canvas_view)) == NULL); - canvas_view->details = g_new0 (NautilusCanvasViewDetails, 1); canvas_view->details->sort = &sort_criteria[0]; diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c index ac4bf80f7..20a4882c4 100644 --- a/src/nautilus-list-view.c +++ b/src/nautilus-list-view.c @@ -1793,7 +1793,9 @@ create_and_set_up_tree_view (NautilusListView *view) GList *nautilus_columns; GList *l; gchar **default_column_order, **default_visible_columns; + GtkWidget *content_widget; + content_widget = nautilus_view_get_content_widget (NAUTILUS_VIEW (view)); view->details->tree_view = GTK_TREE_VIEW (gtk_tree_view_new ()); view->details->columns = g_hash_table_new_full (g_str_hash, g_str_equal, @@ -2025,7 +2027,7 @@ create_and_set_up_tree_view (NautilusListView *view) default_visible_columns); gtk_widget_show (GTK_WIDGET (view->details->tree_view)); - gtk_container_add (GTK_CONTAINER (view), GTK_WIDGET (view->details->tree_view)); + gtk_container_add (GTK_CONTAINER (content_widget), GTK_WIDGET (view->details->tree_view)); atk_obj = gtk_widget_get_accessible (GTK_WIDGET (view->details->tree_view)); atk_object_set_name (atk_obj, _("List View")); diff --git a/src/nautilus-view.c b/src/nautilus-view.c index 3d8f1ca7e..e0d42234d 100644 --- a/src/nautilus-view.c +++ b/src/nautilus-view.c @@ -226,6 +226,11 @@ struct NautilusViewDetails GMenu *pathbar_menu; GActionGroup *view_action_group; + + /* Empty states */ + GtkWidget *overlay; + GtkWidget *folder_is_empty_widget; + GtkWidget *no_search_results_widget; }; typedef struct { @@ -266,10 +271,38 @@ static void nautilus_view_select_file (NautilusView static void update_templates_directory (NautilusView *view); +static void check_empty_states (NautilusView *view); + static void unschedule_pop_up_pathbar_context_menu (NautilusView *view); G_DEFINE_TYPE (NautilusView, nautilus_view, GTK_TYPE_SCROLLED_WINDOW); +static void +check_empty_states (NautilusView *view) +{ + GList *files; + GList *filtered; + gboolean show_hidden_files; + + gtk_widget_hide (view->details->no_search_results_widget); + gtk_widget_hide (view->details->folder_is_empty_widget); + if (!view->details->loading && view->details->model) { + files = nautilus_directory_get_file_list (view->details->model); + show_hidden_files = g_settings_get_boolean (gtk_filechooser_preferences, + 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)) { + gtk_widget_show (view->details->no_search_results_widget); + } else { + gtk_widget_show (view->details->folder_is_empty_widget); + } + } + nautilus_file_list_unref (filtered); + nautilus_file_list_unref (files); + } +} + static char * real_get_backing_uri (NautilusView *view) { @@ -2888,6 +2921,8 @@ done_loading (NautilusView *view, view->details->loading = FALSE; g_signal_emit (view, signals[END_LOADING], 0, all_files_seen); + check_empty_states (view); + nautilus_profile_end (NULL); } @@ -3273,6 +3308,7 @@ process_old_files (NautilusView *view) } g_signal_emit (view, signals[END_FILE_CHANGES], 0); + check_empty_states (view); if (files_changed != NULL) { selection = nautilus_view_get_selection (view); @@ -3692,6 +3728,14 @@ nautilus_view_get_model (NautilusView *view) return view->details->model; } +GtkWidget* +nautilus_view_get_content_widget (NautilusView *view) +{ + g_return_val_if_fail (NAUTILUS_IS_VIEW (view), NULL); + + return view->details->overlay; +} + GdkAtom nautilus_view_get_copied_files_atom (NautilusView *view) { @@ -6951,6 +6995,8 @@ finish_loading (NautilusView *view) g_signal_emit (view, signals[BEGIN_LOADING], 0); nautilus_profile_end ("BEGIN_LOADING"); + check_empty_states (view); + /* Assume we have now all information to show window */ nautilus_window_view_visible (nautilus_view_get_window (view), NAUTILUS_VIEW (view)); @@ -7608,6 +7654,7 @@ nautilus_view_class_init (NautilusViewClass *klass) static void nautilus_view_init (NautilusView *view) { + GtkBuilder *builder; AtkObject *atk_object; NautilusDirectory *scripts_directory; NautilusDirectory *templates_directory; @@ -7624,6 +7671,25 @@ 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); + + gtk_container_add (GTK_CONTAINER (view), view->details->overlay); + + /* 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); + 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); + g_object_unref (builder); + /* Default to true; desktop-icon-view sets to false */ view->details->show_foreign_files = TRUE; diff --git a/src/nautilus-view.h b/src/nautilus-view.h index 78218cfbe..b822793e4 100644 --- a/src/nautilus-view.h +++ b/src/nautilus-view.h @@ -391,5 +391,6 @@ void nautilus_view_action_show_hidden_files (NautilusView *view, gboolean show_hidden); GActionGroup * nautilus_view_get_action_group (NautilusView *view); +GtkWidget* nautilus_view_get_content_widget (NautilusView *view); #endif /* NAUTILUS_VIEW_H */ diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c index cbf801e6a..43f98841c 100644 --- a/src/nautilus-window-slot.c +++ b/src/nautilus-window-slot.c @@ -68,9 +68,6 @@ struct NautilusWindowSlotDetails { GtkWidget *floating_bar; GtkWidget *view_overlay; - /* no search results widget */ - GtkWidget *no_search_results_widget; - /* slot contains * 1) an vbox containing extra_location_widgets * 2) the view @@ -124,9 +121,6 @@ struct NautilusWindowSlotDetails { NautilusWindowGoToCallback open_callback; gpointer open_callback_user_data; gchar *view_mode_before_search; - - /*Folder is empty */ - GtkWidget *folder_is_empty_widget; }; static guint signals[LAST_SIGNAL] = { 0 }; @@ -208,45 +202,12 @@ remove_loading_floating_bar (NautilusWindowSlot *slot) } static void -check_empty_states (NautilusWindowSlot *slot) -{ - GList *files; - GList *filtered; - NautilusDirectory *directory; - gboolean show_hidden_files; - - gtk_widget_hide (slot->details->no_search_results_widget); - gtk_widget_hide (slot->details->folder_is_empty_widget); - directory = nautilus_view_get_model (slot->details->content_view); - if (!slot->details->allow_stop && directory != NULL) { - files = nautilus_directory_get_file_list (directory); - show_hidden_files = g_settings_get_boolean (gtk_filechooser_preferences, - 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 (directory)) { - gtk_widget_show (slot->details->no_search_results_widget); - } else { - gtk_widget_show (slot->details->folder_is_empty_widget); - } - } - nautilus_file_list_unref (filtered); - nautilus_file_list_unref (files); - } -} - -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); - /* For this pourpose, we could check directly to see if the view is empty, - * instead of avoiding races disconnecting the model when appropiate. - * But I think we are doing better disconnecting when we know the data - * of the directory is not valid */ - check_empty_states (slot); } static void @@ -646,7 +607,6 @@ static void nautilus_window_slot_constructed (GObject *object) { NautilusWindowSlot *slot = NAUTILUS_WINDOW_SLOT (object); - GtkBuilder *builder; GtkWidget *extras_vbox; G_OBJECT_CLASS (nautilus_window_slot_parent_class)->constructed (object); @@ -674,16 +634,6 @@ nautilus_window_slot_constructed (GObject *object) gtk_box_pack_start (GTK_BOX (slot), slot->details->view_overlay, TRUE, TRUE, 0); gtk_widget_show (slot->details->view_overlay); - builder = gtk_builder_new_from_resource ("/org/gnome/nautilus/nautilus-no-search-results.ui"); - slot->details->no_search_results_widget = GTK_WIDGET (gtk_builder_get_object (builder, "no_search_results")); - gtk_overlay_add_overlay (GTK_OVERLAY (slot->details->view_overlay), - slot->details->no_search_results_widget); - builder = gtk_builder_new_from_resource ("/org/gnome/nautilus/nautilus-folder-is-empty.ui"); - slot->details->folder_is_empty_widget = GTK_WIDGET (gtk_builder_get_object (builder, "folder_is_empty")); - gtk_overlay_add_overlay (GTK_OVERLAY (slot->details->view_overlay), - slot->details->folder_is_empty_widget); - g_object_unref (builder); - 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); @@ -2293,8 +2243,6 @@ view_end_loading_cb (NautilusView *view, remove_loading_floating_bar (slot); nautilus_window_slot_set_allow_stop (slot, FALSE); } - - check_empty_states (slot); } static void @@ -2368,7 +2316,6 @@ view_begin_loading_cb (NautilusView *view, } setup_loading_floating_bar (slot); - check_empty_states (slot); nautilus_profile_end (NULL); } @@ -2435,22 +2382,11 @@ nautilus_window_slot_setup_extra_location_widgets (NautilusWindowSlot *slot) } static void -view_end_file_changes_cb (NautilusView *view, - NautilusWindowSlot *slot) -{ - /* When creating or deleting a file the done-loading signal is not emitted, - * given that the view doesn't actually reload, so connect to the - * end-file-changes for update the empty states */ - check_empty_states (slot); -} - -static void nautilus_window_slot_connect_new_content_view (NautilusWindowSlot *slot) { if (slot->details->new_content_view != NULL) { g_signal_connect (slot->details->new_content_view, "begin-loading", G_CALLBACK (view_begin_loading_cb), slot); g_signal_connect (slot->details->new_content_view, "end-loading", G_CALLBACK (view_end_loading_cb), slot); - g_signal_connect (slot->details->new_content_view, "end-file-changes", G_CALLBACK (view_end_file_changes_cb), slot); } } @@ -2461,7 +2397,6 @@ nautilus_window_slot_disconnect_content_view (NautilusWindowSlot *slot) /* disconnect old view */ g_signal_handlers_disconnect_by_func (slot->details->content_view, G_CALLBACK (view_end_loading_cb), slot); g_signal_handlers_disconnect_by_func (slot->details->content_view, G_CALLBACK (view_begin_loading_cb), slot); - g_signal_handlers_disconnect_by_func (slot->details->content_view, G_CALLBACK (view_end_file_changes_cb), slot); } } |