[nautilus/gnome-3-20] window: add notifications for sidebar operations



commit 8d2c328dd7847bbfce48c9e80278fdc11fb2c8f8
Author: Carlos Soriano <csoriano gnome org>
Date:   Wed Feb 17 20:22:24 2016 +0100

    window: add notifications for sidebar operations
    
    Recently we removed gtk+ notifications from mount operations in the
    gtk+ sidebar in order to move the handling of those to Nautilus.
    
    Now that that is done, implement notifications handling for unmount
    sidebar operations. The mount operations notifications are still handled
    by gnome-shell, we will see if that continues making sense or not.

 src/nautilus-window.c |   91 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 91 insertions(+), 0 deletions(-)
---
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 5e79d39..ca565f8 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -932,6 +932,95 @@ open_location_cb (NautilusWindow     *window,
                                                  location, flags, NULL, window, NULL);
 }
 
+static void
+notify_unmount_done (GMountOperation *op,
+                     const gchar     *message)
+{
+  GApplication *application;
+  gchar *notification_id;
+
+  application = g_application_get_default ();
+  notification_id = g_strdup_printf ("nautilus-mount-operation-%p", op);
+  g_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");
+      unplug = g_notification_new (strings[0]);
+      g_notification_set_body (unplug, strings[1]);
+      g_notification_set_icon (unplug, icon);
+
+      g_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)
+{
+  GApplication *application;
+  GNotification *unmount;
+  gchar *notification_id;
+  GIcon *icon;
+  gchar **strings;
+
+  application = g_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);
+  g_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)
+{
+  g_signal_connect (mount_operation, "show-unmount-progress",
+                    G_CALLBACK (show_unmount_progress_cb), NULL);
+  g_signal_connect (mount_operation, "aborted",
+                    G_CALLBACK (show_unmount_progress_aborted_cb), NULL);
+}
+
 /* Callback used when the places sidebar needs us to present an error message */
 static void
 places_sidebar_show_error_message_cb (GtkPlacesSidebar *sidebar,
@@ -1275,6 +1364,8 @@ nautilus_window_set_up_sidebar (NautilusWindow *window)
                          G_CALLBACK (places_sidebar_drag_perform_drop_cb), window);
        g_signal_connect (window->priv->places_sidebar, "populate-popup",
                          G_CALLBACK (places_sidebar_populate_popup_cb), window);
+       g_signal_connect (window->priv->places_sidebar, "unmount",
+                         G_CALLBACK (places_sidebar_unmount_operation_cb), window);
 }
 
 void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]