diff --git a/src/nautilus-location-banner.c b/src/nautilus-location-banner.c index 6838d0247c2cc4a0ef5cee784b044d15172223bc..34e1778ad3ef39ca9f39d6a7627f1040d6c3d421 100644 --- a/src/nautilus-location-banner.c +++ b/src/nautilus-location-banner.c @@ -30,6 +30,8 @@ #include "nautilus-location-banner.h" #include "nautilus-enum-types.h" #include "nautilus-scheme.h" +#include "nautilus-trash-monitor.h" +#include "nautilus-view.h" #define FILE_SHARING_SCHEMA_ID "org.gnome.desktop.file-sharing" @@ -46,6 +48,12 @@ typedef enum static void set_mode (AdwBanner *banner, NautilusLocationBannerMode mode); +static void +update_trash_banner_visibility (AdwBanner *banner) +{ + adw_banner_set_revealed (banner, !nautilus_trash_monitor_is_empty ()); +} + static void on_sharing_clicked (AdwBanner *banner) { @@ -183,10 +191,12 @@ set_mode (AdwBanner *banner, { const char *button_label = NULL; GCallback callback = NULL; + gboolean banner_is_revealed = TRUE; /* Reset signal handlers. */ g_signal_handlers_disconnect_by_data (banner, &nautilus_location_banner_load); g_signal_handlers_disconnect_by_data (gnome_privacy_preferences, banner); + g_signal_handlers_disconnect_by_data (nautilus_trash_monitor_get (), banner); switch (mode) { @@ -222,9 +232,17 @@ set_mode (AdwBanner *banner, case NAUTILUS_LOCATION_BANNER_TRASH: { adw_banner_set_title (banner, ""); + if (nautilus_trash_monitor_is_empty ()) + { + banner_is_revealed = FALSE; + } button_label = _("_Empty Trash…"); callback = G_CALLBACK (on_trash_clear_clicked); + g_signal_connect_swapped (nautilus_trash_monitor_get (), + "trash-state-changed", + G_CALLBACK (update_trash_banner_visibility), + banner); g_signal_connect_object (gnome_privacy_preferences, "changed::remove-old-trash-files", G_CALLBACK (on_remove_old_trash_files_changed), @@ -257,6 +275,7 @@ set_mode (AdwBanner *banner, adw_banner_set_button_label (banner, button_label); adw_banner_set_revealed (banner, TRUE); + adw_banner_set_revealed (banner, banner_is_revealed); if (callback != NULL) {