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 | |
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
-rw-r--r-- | src/nautilus-file-operations.c | 6 | ||||
-rw-r--r-- | src/nautilus-ui-utilities.c | 84 | ||||
-rw-r--r-- | src/nautilus-ui-utilities.h | 10 | ||||
-rw-r--r-- | src/nautilus-window.c | 83 |
4 files changed, 99 insertions, 84 deletions
diff --git a/src/nautilus-file-operations.c b/src/nautilus-file-operations.c index 55bc3abae..7e229f60e 100644 --- a/src/nautilus-file-operations.c +++ b/src/nautilus-file-operations.c @@ -2638,6 +2638,12 @@ do_unmount (UnmountData *data) { mount_op = gtk_mount_operation_new (data->parent_window); } + + g_signal_connect (mount_op, "show-unmount-progress", + G_CALLBACK (show_unmount_progress_cb), NULL); + g_signal_connect (mount_op, "aborted", + G_CALLBACK (show_unmount_progress_aborted_cb), NULL); + if (data->eject) { g_mount_eject_with_operation (data->mount, 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); +} diff --git a/src/nautilus-ui-utilities.h b/src/nautilus-ui-utilities.h index 06b58f33a..2aa78f432 100644 --- a/src/nautilus-ui-utilities.h +++ b/src/nautilus-ui-utilities.h @@ -49,4 +49,12 @@ gchar * get_text_for_date_range (GPtrArray *date_ran GtkDialog * show_dialog (const gchar *primary_text, const gchar *secondary_text, GtkWindow *parent, - GtkMessageType type);
\ No newline at end of file + GtkMessageType type); + +void show_unmount_progress_cb (GMountOperation *op, + const gchar *message, + gint64 time_left, + gint64 bytes_left, + gpointer user_data); +void show_unmount_progress_aborted_cb (GMountOperation *op, + gpointer user_data); diff --git a/src/nautilus-window.c b/src/nautilus-window.c index 4dba58a37..598064d02 100644 --- a/src/nautilus-window.c +++ b/src/nautilus-window.c @@ -1009,89 +1009,6 @@ open_location_cb (NautilusWindow *window, } 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); -} - -static 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); - } -} - -static void -show_unmount_progress_aborted_cb (GMountOperation *op, - gpointer user_data) -{ - notify_unmount_done (op, NULL); -} - -static void places_sidebar_unmount_operation_cb (NautilusWindow *window, GMountOperation *mount_operation) { |