summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nautilus-canvas-view.c6
-rw-r--r--src/nautilus-list-view.c4
-rw-r--r--src/nautilus-view.c66
-rw-r--r--src/nautilus-view.h1
-rw-r--r--src/nautilus-window-slot.c65
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);
}
}