summaryrefslogtreecommitdiff
path: root/src/nautilus-view.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nautilus-view.c')
-rw-r--r--src/nautilus-view.c66
1 files changed, 66 insertions, 0 deletions
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;