diff options
author | Xiaoguang Wang <xwang@suse.com> | 2018-04-26 10:47:20 +0800 |
---|---|---|
committer | sunwxg <sun.wxg@gmail.com> | 2018-04-26 10:47:20 +0800 |
commit | 567bd8688408d569037b0a934845f5c4b8635ae1 (patch) | |
tree | f8258e97167638f0f122beb0d74fa936c9f2b3aa /src/nautilus-ui-utilities.c | |
parent | e4adef55a50dd711a466455b91ee7d154ad44111 (diff) | |
download | nautilus-567bd8688408d569037b0a934845f5c4b8635ae1.tar.gz |
file-view: Add unmount notification
Unmounting disk from file view context menu shows notification same as
unmounting from sidebar.
https://gitlab.gnome.org/GNOME/nautilus/issues/379
Diffstat (limited to 'src/nautilus-ui-utilities.c')
-rw-r--r-- | src/nautilus-ui-utilities.c | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/src/nautilus-ui-utilities.c b/src/nautilus-ui-utilities.c index ac2c423da..cc8d71ed3 100644 --- a/src/nautilus-ui-utilities.c +++ b/src/nautilus-ui-utilities.c @@ -23,6 +23,7 @@ #include "nautilus-ui-utilities.h" #include "nautilus-icon-info.h" +#include "nautilus-application.h" #include <eel/eel-graphic-effects.h> #include <gio/gio.h> @@ -420,3 +421,86 @@ show_dialog (const gchar *primary_text, return GTK_DIALOG (dialog); } + +static void +notify_unmount_done (GMountOperation *op, + const gchar *message) +{ + NautilusApplication *application; + gchar *notification_id; + + application = nautilus_application_get_default (); + notification_id = g_strdup_printf ("nautilus-mount-operation-%p", op); + nautilus_application_withdraw_notification (application, notification_id); + + if (message != NULL) + { + GNotification *unplug; + GIcon *icon; + gchar **strings; + + strings = g_strsplit (message, "\n", 0); + icon = g_themed_icon_new ("media-removable-symbolic"); + unplug = g_notification_new (strings[0]); + g_notification_set_body (unplug, strings[1]); + g_notification_set_icon (unplug, icon); + + nautilus_application_send_notification (application, notification_id, unplug); + g_object_unref (unplug); + g_object_unref (icon); + g_strfreev (strings); + } + + g_free (notification_id); +} + +static void +notify_unmount_show (GMountOperation *op, + const gchar *message) +{ + NautilusApplication *application; + GNotification *unmount; + gchar *notification_id; + GIcon *icon; + gchar **strings; + + application = nautilus_application_get_default (); + strings = g_strsplit (message, "\n", 0); + icon = g_themed_icon_new ("media-removable"); + + unmount = g_notification_new (strings[0]); + g_notification_set_body (unmount, strings[1]); + g_notification_set_icon (unmount, icon); + g_notification_set_priority (unmount, G_NOTIFICATION_PRIORITY_URGENT); + + notification_id = g_strdup_printf ("nautilus-mount-operation-%p", op); + nautilus_application_send_notification (application, notification_id, unmount); + g_object_unref (unmount); + g_object_unref (icon); + g_strfreev (strings); + g_free (notification_id); +} + +void +show_unmount_progress_cb (GMountOperation *op, + const gchar *message, + gint64 time_left, + gint64 bytes_left, + gpointer user_data) +{ + if (bytes_left == 0) + { + notify_unmount_done (op, message); + } + else + { + notify_unmount_show (op, message); + } +} + +void +show_unmount_progress_aborted_cb (GMountOperation *op, + gpointer user_data) +{ + notify_unmount_done (op, NULL); +} |