[nautilus/wip/delete_notification: 2/3] delete_notification
- From: Carlos Soriano SĂĄnchez <csoriano src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus/wip/delete_notification: 2/3] delete_notification
- Date: Tue, 27 Jan 2015 16:54:21 +0000 (UTC)
commit 99bc3dac6733a4c2325bae8dea5b8e8472aab760
Author: Carlos Soriano <csoriano gnome org>
Date: Tue Jan 27 17:48:05 2015 +0100
delete_notification
libnautilus-private/nautilus-file-operations.c | 37 ++++-
src/Makefile.am | 4 +
src/nautilus-notification-delete.c | 226 ++++++++++++++++++++++++
src/nautilus-notification-delete.h | 60 +++++++
src/nautilus-notification-manager.c | 105 +++++++++++
src/nautilus-notification-manager.h | 59 ++++++
src/nautilus-view.c | 21 ++-
src/nautilus-window-slot.c | 23 +++
src/nautilus-window-slot.h | 3 +
9 files changed, 535 insertions(+), 3 deletions(-)
---
diff --git a/libnautilus-private/nautilus-file-operations.c b/libnautilus-private/nautilus-file-operations.c
index 0315a46..3cf7c05 100644
--- a/libnautilus-private/nautilus-file-operations.c
+++ b/libnautilus-private/nautilus-file-operations.c
@@ -971,7 +971,6 @@ finalize_common (CommonJob *common)
}
if (common->undo_info != NULL) {
- nautilus_file_undo_manager_set_action (common->undo_info);
g_object_unref (common->undo_info);
}
@@ -1903,6 +1902,10 @@ delete_job_done (gpointer user_data)
g_list_free_full (job->files, g_object_unref);
+ if (job->common.undo_info != NULL) {
+ nautilus_file_undo_manager_set_action (job->common.undo_info);
+ }
+
if (job->done_callback) {
debuting_uris = g_hash_table_new_full (g_file_hash, (GEqualFunc)g_file_equal, g_object_unref,
NULL);
job->done_callback (debuting_uris, job->user_cancel, job->done_callback_data);
@@ -4565,6 +4568,11 @@ copy_job_done (gpointer user_data)
CopyMoveJob *job;
job = user_data;
+
+ if (job->common.undo_info != NULL) {
+ nautilus_file_undo_manager_set_action (job->common.undo_info);
+ }
+
if (job->done_callback) {
job->done_callback (job->debuting_files,
!job_aborted ((CommonJob *) job),
@@ -5131,6 +5139,11 @@ move_job_done (gpointer user_data)
CopyMoveJob *job;
job = user_data;
+
+ if (job->common.undo_info != NULL) {
+ nautilus_file_undo_manager_set_action (job->common.undo_info);
+ }
+
if (job->done_callback) {
job->done_callback (job->debuting_files,
!job_aborted ((CommonJob *) job),
@@ -5474,6 +5487,11 @@ link_job_done (gpointer user_data)
CopyMoveJob *job;
job = user_data;
+
+ if (job->common.undo_info != NULL) {
+ nautilus_file_undo_manager_set_action (job->common.undo_info);
+ }
+
if (job->done_callback) {
job->done_callback (job->debuting_files,
!job_aborted ((CommonJob *) job),
@@ -5649,6 +5667,10 @@ set_permissions_job_done (gpointer user_data)
g_object_unref (job->file);
+ if (job->common.undo_info != NULL) {
+ nautilus_file_undo_manager_set_action (job->common.undo_info);
+ }
+
if (job->done_callback) {
job->done_callback (!job_aborted ((CommonJob *) job),
job->done_callback_data);
@@ -5946,6 +5968,11 @@ create_job_done (gpointer user_data)
CreateJob *job;
job = user_data;
+
+ if (job->common.undo_info != NULL) {
+ nautilus_file_undo_manager_set_action (job->common.undo_info);
+ }
+
if (job->done_callback) {
job->done_callback (job->created_file,
!job_aborted ((CommonJob *) job),
@@ -6423,6 +6450,10 @@ empty_trash_job_done (gpointer user_data)
g_list_free_full (job->trash_dirs, g_object_unref);
+ if (job->common.undo_info != NULL) {
+ nautilus_file_undo_manager_set_action (job->common.undo_info);
+ }
+
if (job->done_callback) {
job->done_callback (!job_aborted ((CommonJob *) job),
job->done_callback_data);
@@ -6500,6 +6531,10 @@ mark_trusted_job_done (gpointer user_data)
g_object_unref (job->file);
+ if (job->common.undo_info != NULL) {
+ nautilus_file_undo_manager_set_action (job->common.undo_info);
+ }
+
if (job->done_callback) {
job->done_callback (!job_aborted ((CommonJob *) job),
job->done_callback_data);
diff --git a/src/Makefile.am b/src/Makefile.am
index d797d23..82a7511 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -178,6 +178,10 @@ nautilus_SOURCES = \
nautilus-list-view.h \
nautilus-location-entry.c \
nautilus-location-entry.h \
+ nautilus-notification-delete.c \
+ nautilus-notification-delete.h \
+ nautilus-notification-manager.c \
+ nautilus-notification-manager.h \
nautilus-main.c \
nautilus-mime-actions.c \
nautilus-mime-actions.h \
diff --git a/src/nautilus-notification-delete.c b/src/nautilus-notification-delete.c
new file mode 100644
index 0000000..70b93d3
--- /dev/null
+++ b/src/nautilus-notification-delete.c
@@ -0,0 +1,226 @@
+/* nautilus-notification-delete.c
+ *
+ * Copyright (C) 2015 Carlos Soriano <csoriano gnome org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glib/gi18n.h>
+
+#include "nautilus-notification-delete.h"
+#include "nautilus-notification-manager.h"
+#include "nautilus-file-undo-manager.h"
+
+struct _NautilusNotificationDeletePrivate
+{
+ guint n_items;
+ guint timeout_id;
+ gchar *file_name;
+ NautilusWindow *window;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE (NautilusNotificationDelete, nautilus_notification_delete, GTK_TYPE_GRID)
+
+enum {
+ PROP_0,
+ PROP_N_ITEMS,
+ PROP_FILE_NAME,
+ PROP_WINDOW,
+ LAST_PROP
+};
+
+enum
+{
+ NOTIFICATION_TIMEOUT = 10
+};
+
+static void
+nautilus_notification_delete_remove_timeout (NautilusNotificationDelete *self)
+{
+ if (self->priv->timeout_id != 0)
+ {
+ g_source_remove (self->priv->timeout_id);
+ self->priv->timeout_id = 0;
+ }
+}
+
+static void
+nautilus_notification_delete_destroy (NautilusNotificationDelete *self)
+{
+ nautilus_notification_delete_remove_timeout (self);
+ gtk_widget_destroy (GTK_WIDGET (self));
+}
+
+static gboolean
+nautilus_notification_delete_on_timeout (gpointer user_data)
+{
+ NautilusNotificationDelete *self = NAUTILUS_NOTIFICATION_DELETE (user_data);
+
+ self->priv->timeout_id = 0;
+ gtk_widget_destroy (GTK_WIDGET (self));
+
+ return G_SOURCE_REMOVE;
+}
+
+static void
+nautilus_notification_delete_undo_clicked (NautilusNotificationDelete *self)
+{
+ nautilus_notification_delete_remove_timeout (self);
+ /* Notification manager will destroy all notifications after the undo
+ * state changes. So no need to destroy the notification it now */
+ nautilus_file_undo_manager_undo (GTK_WINDOW (self->priv->window));
+}
+
+static void
+nautilus_notification_delete_constructed (GObject *object)
+{
+ NautilusNotificationDelete *self = NAUTILUS_NOTIFICATION_DELETE (object);
+ GtkWidget *close;
+ gchar *label;
+ GtkWidget *label_widget;
+ GtkWidget *undo;
+
+ G_OBJECT_CLASS (nautilus_notification_delete_parent_class)->constructed (object);
+
+ if (self->priv->n_items == 1) {
+ if (self->priv->file_name != NULL)
+ label = g_strdup_printf (_("%s deleted"), self->priv->file_name);
+ else
+ label = g_strdup (_("File deleted"));
+ } else {
+ label = g_strdup_printf (_("%d files deleted"),
+ self->priv->n_items);
+ }
+ label_widget = gtk_label_new (label);
+ gtk_widget_set_halign (label_widget, GTK_ALIGN_START);
+ gtk_container_add (GTK_CONTAINER (self), label_widget);
+ gtk_widget_set_margin_end (label_widget, 30);
+
+ undo = gtk_button_new_with_label (_("Undo"));
+ gtk_widget_set_valign (undo, GTK_ALIGN_CENTER);
+ gtk_container_add (GTK_CONTAINER (self), undo);
+ gtk_widget_set_margin_end (undo, 6);
+ g_signal_connect_swapped (undo, "clicked", G_CALLBACK (nautilus_notification_delete_undo_clicked), self);
+
+ close = gtk_button_new_from_icon_name ("window-close-symbolic", GTK_ICON_SIZE_BUTTON);
+ gtk_widget_set_valign (close, GTK_ALIGN_CENTER);
+ gtk_button_set_focus_on_click (GTK_BUTTON (close), FALSE);
+ gtk_button_set_relief (GTK_BUTTON (close), GTK_RELIEF_NONE);
+ gtk_container_add (GTK_CONTAINER (self), close);
+ g_signal_connect_swapped (close, "clicked", G_CALLBACK (nautilus_notification_delete_destroy), self);
+
+ self->priv->timeout_id = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT,
+ NOTIFICATION_TIMEOUT,
+ nautilus_notification_delete_on_timeout,
+ g_object_ref (self),
+ g_object_unref);
+
+ g_free (label);
+}
+
+NautilusNotificationDelete *
+nautilus_notification_delete_new (NautilusWindow *window,
+ guint n_items,
+ gchar *file_name)
+{
+ g_assert (NAUTILUS_IS_WINDOW (window));
+
+ return g_object_new (NAUTILUS_TYPE_NOTIFICATION_DELETE,
+ "window", window,
+ "n-items", n_items,
+ "file-name", file_name,
+ "column-spacing", 0,
+ "margin-start", 12,
+ "margin-end", 4,
+ NULL);
+}
+
+static void
+nautilus_notification_delete_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ NautilusNotificationDelete *self = NAUTILUS_NOTIFICATION_DELETE (object);
+
+ switch (prop_id)
+ {
+ case PROP_N_ITEMS:
+ self->priv->n_items = g_value_get_int (value);
+ break;
+
+ case PROP_FILE_NAME:
+ if (self->priv->file_name != NULL)
+ g_free (self->priv->file_name);
+ self->priv->file_name = g_strdup (g_value_get_string (value));
+ break;
+
+ case PROP_WINDOW:
+ self->priv->window = NAUTILUS_WINDOW (g_value_get_pointer (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+nautilus_notification_delete_finalize (GObject *object)
+{
+ NautilusNotificationDelete *self = NAUTILUS_NOTIFICATION_DELETE (object);
+
+ if (self->priv->file_name != NULL)
+ g_free (self->priv->file_name);
+
+ G_OBJECT_CLASS (nautilus_notification_delete_parent_class)->finalize (object);
+}
+
+static void
+nautilus_notification_delete_class_init (NautilusNotificationDeleteClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->set_property = nautilus_notification_delete_set_property;
+ object_class->constructed = nautilus_notification_delete_constructed;
+ object_class->finalize= nautilus_notification_delete_finalize;
+
+ g_object_class_install_property (object_class,
+ PROP_N_ITEMS,
+ g_param_spec_int ("n-items",
+ "Number of deleted items",
+ "Number of items that are being deleted",
+ 1,
+ G_MAXINT,
+ 1,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
+ g_object_class_install_property (object_class,
+ PROP_FILE_NAME,
+ g_param_spec_string ("file-name",
+ "Name of deleted file",
+ "Nane of the deleted file if it was only one file",
+ "",
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
+ g_object_class_install_property (object_class,
+ PROP_WINDOW,
+ g_param_spec_pointer ("window",
+ "Window associated",
+ "The window that contains the notification",
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
+}
+
+static void
+nautilus_notification_delete_init (NautilusNotificationDelete *self)
+{
+ self->priv = nautilus_notification_delete_get_instance_private (self);
+}
diff --git a/src/nautilus-notification-delete.h b/src/nautilus-notification-delete.h
new file mode 100644
index 0000000..3a48119
--- /dev/null
+++ b/src/nautilus-notification-delete.h
@@ -0,0 +1,60 @@
+/* nautilus-notification-delete.h
+ *
+ * Copyright (C) 2015 Carlos Soriano <csoriano gnome org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NAUTILUS_NOTIFICATION_DELETE_H
+#define NAUTILUS_NOTIFICATION_DELETE_H
+
+#include <gtk/gtk.h>
+#include "nautilus-window.h"
+
+G_BEGIN_DECLS
+
+#define NAUTILUS_TYPE_NOTIFICATION_DELETE (nautilus_notification_delete_get_type())
+#define NAUTILUS_NOTIFICATION_DELETE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),
NAUTILUS_TYPE_NOTIFICATION_DELETE, NautilusNotificationDelete))
+#define NAUTILUS_NOTIFICATION_DELETE_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),
NAUTILUS_TYPE_NOTIFICATION_DELETE, NautilusNotificationDelete const))
+#define NAUTILUS_NOTIFICATION_DELETE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),
NAUTILUS_TYPE_NOTIFICATION_DELETE, NautilusNotificationDeleteClass))
+#define NAUTILUS_IS_NOTIFICATION_DELETE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj),
NAUTILUS_TYPE_NOTIFICATION_DELETE))
+#define NAUTILUS_IS_NOTIFICATION_DELETE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),
NAUTILUS_TYPE_NOTIFICATION_DELETE))
+#define NAUTILUS_NOTIFICATION_DELETE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),
NAUTILUS_TYPE_NOTIFICATION_DELETE, NautilusNotificationDeleteClass))
+
+typedef struct _NautilusNotificationDelete NautilusNotificationDelete;
+typedef struct _NautilusNotificationDeleteClass NautilusNotificationDeleteClass;
+typedef struct _NautilusNotificationDeletePrivate NautilusNotificationDeletePrivate;
+
+struct _NautilusNotificationDelete
+{
+ GtkGrid parent;
+
+ /*< private >*/
+ NautilusNotificationDeletePrivate *priv;
+};
+
+struct _NautilusNotificationDeleteClass
+{
+ GtkGridClass parent;
+};
+
+GType nautilus_notification_delete_get_type (void);
+NautilusNotificationDelete *nautilus_notification_delete_new (NautilusWindow *window,
+ guint n_items,
+ gchar *file_name);
+
+G_END_DECLS
+
+#endif /* NAUTILUS_NOTIFICATION_DELETE_H */
+
diff --git a/src/nautilus-notification-manager.c b/src/nautilus-notification-manager.c
new file mode 100644
index 0000000..654ead7
--- /dev/null
+++ b/src/nautilus-notification-manager.c
@@ -0,0 +1,105 @@
+/* nautilus-notification-manager.c
+ *
+ * Copyright (C) 2015 Carlos Soriano <csoriano gnome org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "nautilus-notification-manager.h"
+#include "nautilus-file-undo-manager.h"
+
+struct _NautilusNotificationManagerPrivate
+{
+ GtkWidget *grid;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE (NautilusNotificationManager, nautilus_notification_manager, GD_TYPE_NOTIFICATION)
+
+NautilusNotificationManager *
+nautilus_notification_manager_new (void)
+{
+ return g_object_new (NAUTILUS_TYPE_NOTIFICATION_MANAGER,
+ "show-close-button", FALSE,
+ "timeout", -1,
+ NULL);
+}
+
+void
+nautilus_notification_manager_add_notification (NautilusNotificationManager *self,
+ GtkWidget *notification)
+{
+ gtk_container_add (GTK_CONTAINER (self->priv->grid), notification);
+ gtk_widget_show_all (GTK_WIDGET (self));
+}
+
+static void
+nautilus_notification_manager_remove (NautilusNotificationManager *self)
+{
+ gtk_widget_hide (GTK_WIDGET (self));
+ gtk_container_foreach (GTK_CONTAINER (self->priv->grid),
+ (GtkCallback) gtk_widget_destroy,
+ NULL);
+}
+
+static void
+nautilus_notification_manager_undo_manager_changed (NautilusFileUndoManager *undo_manager,
+ NautilusNotificationManager *self)
+{
+ nautilus_notification_manager_remove (self);
+}
+
+static void
+nautilus_notification_manager_dispose (GObject *object)
+{
+ NautilusNotificationManager *self = NAUTILUS_NOTIFICATION_MANAGER (object);
+
+ g_signal_handlers_disconnect_by_func (nautilus_file_undo_manager_get (),
+ G_CALLBACK (nautilus_notification_manager_undo_manager_changed),
+ self);
+
+ G_OBJECT_CLASS (nautilus_notification_manager_parent_class)->dispose (object);
+}
+
+static void
+nautilus_notification_manager_class_init (NautilusNotificationManagerClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+ object_class->dispose = nautilus_notification_manager_dispose;
+}
+
+static void
+nautilus_notification_manager_init (NautilusNotificationManager *self)
+{
+ self->priv = nautilus_notification_manager_get_instance_private (self);
+
+ gtk_widget_set_halign (GTK_WIDGET (self), GTK_ALIGN_CENTER);
+ gtk_widget_set_valign (GTK_WIDGET (self), GTK_ALIGN_START);
+
+ self->priv->grid = gtk_grid_new ();
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (self->priv->grid),
+ GTK_ORIENTATION_VERTICAL);
+ gtk_grid_set_row_spacing (GTK_GRID (self->priv->grid), 6);
+ gtk_container_add (GTK_CONTAINER (self), self->priv->grid);
+
+ g_signal_connect_swapped (self->priv->grid, "remove",
+ G_CALLBACK (nautilus_notification_manager_remove), self);
+ /* For now we only support one undo operation at once. So if undo state changes,
+ * remove all notifications and the new one will be added to the appropiate
+ * notification manager
+ */
+ g_signal_connect_object (nautilus_file_undo_manager_get (), "undo-changed",
+ G_CALLBACK (nautilus_notification_manager_undo_manager_changed), self, 0);
+}
+
diff --git a/src/nautilus-notification-manager.h b/src/nautilus-notification-manager.h
new file mode 100644
index 0000000..dddb099
--- /dev/null
+++ b/src/nautilus-notification-manager.h
@@ -0,0 +1,59 @@
+/* nautilus-notification-manager.h
+ *
+ * Copyright (C) 2015 Carlos Soriano <csoriano gnome org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NAUTILUS_NOTIFICATION_MANAGER_H
+#define NAUTILUS_NOTIFICATION_MANAGER_H
+
+#include <libgd/gd.h>
+
+G_BEGIN_DECLS
+
+#define NAUTILUS_TYPE_NOTIFICATION_MANAGER (nautilus_notification_manager_get_type())
+#define NAUTILUS_NOTIFICATION_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),
NAUTILUS_TYPE_NOTIFICATION_MANAGER, NautilusNotificationManager))
+#define NAUTILUS_NOTIFICATION_MANAGER_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),
NAUTILUS_TYPE_NOTIFICATION_MANAGER, NautilusNotificationManager const))
+#define NAUTILUS_NOTIFICATION_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),
NAUTILUS_TYPE_NOTIFICATION_MANAGER, NautilusNotificationManagerClass))
+#define NAUTILUS_IS_NOTIFICATION_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj),
NAUTILUS_TYPE_NOTIFICATION_MANAGER))
+#define NAUTILUS_IS_NOTIFICATION_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),
NAUTILUS_TYPE_NOTIFICATION_MANAGER))
+#define NAUTILUS_NOTIFICATION_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),
NAUTILUS_TYPE_NOTIFICATION_MANAGER, NautilusNotificationManagerClass))
+
+typedef struct _NautilusNotificationManager NautilusNotificationManager;
+typedef struct _NautilusNotificationManagerClass NautilusNotificationManagerClass;
+typedef struct _NautilusNotificationManagerPrivate NautilusNotificationManagerPrivate;
+
+struct _NautilusNotificationManager
+{
+ GdNotification parent;
+
+ /*< private >*/
+ NautilusNotificationManagerPrivate *priv;
+};
+
+struct _NautilusNotificationManagerClass
+{
+ GdNotificationClass parent;
+};
+
+GType nautilus_notification_manager_get_type (void);
+NautilusNotificationManager *nautilus_notification_manager_new (void);
+void nautilus_notification_manager_add_notification (NautilusNotificationManager
*self,
+ GtkWidget
*notification);
+
+G_END_DECLS
+
+#endif /* NAUTILUS_NOTIFICATION_MANAGER_H */
+
diff --git a/src/nautilus-view.c b/src/nautilus-view.c
index 02a9c38..01f4392 100644
--- a/src/nautilus-view.c
+++ b/src/nautilus-view.c
@@ -232,6 +232,9 @@ struct NautilusViewDetails
GMenu *pathbar_menu;
GActionGroup *view_action_group;
+
+ guint notification_n_items;
+ gchar *notification_file_name;
};
typedef struct {
@@ -243,7 +246,7 @@ typedef struct {
static gboolean display_selection_info_idle_callback (gpointer data);
static void trash_or_delete_files (GtkWindow *parent_window,
- const GList *files,
+ GList *files,
NautilusView *view);
static void load_directory (NautilusView *view,
NautilusDirectory *directory);
@@ -3577,17 +3580,31 @@ trash_or_delete_done_cb (GHashTable *debuting_uris,
{
if (user_cancel) {
view->details->selection_was_removed = FALSE;
+ } else {
+ nautilus_window_slot_add_notification_delete (view->details->slot,
+ view->details->notification_n_items,
+ view->details->notification_file_name);
}
+
+ if (view->details->notification_file_name != NULL)
+ g_free (view->details->notification_file_name);
}
static void
trash_or_delete_files (GtkWindow *parent_window,
- const GList *files,
+ GList *files,
NautilusView *view)
{
GList *locations;
const GList *node;
+ view->details->notification_n_items = g_list_length (files);
+ if (view->details->notification_n_items == 1) {
+ view->details->notification_file_name = nautilus_file_get_display_name (files->data);
+ } else {
+ view->details->notification_file_name = NULL;
+ }
+
locations = NULL;
for (node = files; node != NULL; node = node->next) {
locations = g_list_prepend (locations,
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
index 93ea872..d671101 100644
--- a/src/nautilus-window-slot.c
+++ b/src/nautilus-window-slot.c
@@ -33,6 +33,8 @@
#include "nautilus-trash-bar.h"
#include "nautilus-window-private.h"
#include "nautilus-x-content-bar.h"
+#include "nautilus-notification-manager.h"
+#include "nautilus-notification-delete.h"
#include <glib/gi18n.h>
#include <eel/eel-stock-dialogs.h>
@@ -68,6 +70,9 @@ struct NautilusWindowSlotDetails {
GtkWidget *floating_bar;
GtkWidget *view_overlay;
+ /* Notifications */
+ NautilusNotificationManager *notification_manager;
+
/* slot contains
* 1) an vbox containing extra_location_widgets
* 2) the view
@@ -592,6 +597,9 @@ 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);
+ slot->details->notification_manager = nautilus_notification_manager_new ();
+ gtk_overlay_add_overlay (GTK_OVERLAY (slot->details->view_overlay),
+ GTK_WIDGET (slot->details->notification_manager));
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);
@@ -2401,6 +2409,21 @@ location_has_really_changed (NautilusWindowSlot *slot)
}
}
+void
+nautilus_window_slot_add_notification_delete (NautilusWindowSlot *slot,
+ guint n_items,
+ gchar *file_name)
+{
+ NautilusNotificationDelete *notification;
+
+ notification = nautilus_notification_delete_new (nautilus_window_slot_get_window (slot),
+ n_items,
+ file_name);
+ nautilus_notification_manager_add_notification (slot->details->notification_manager,
+ GTK_WIDGET (notification));
+ //g_object_unref (notification);
+}
+
static void
nautilus_window_slot_dispose (GObject *object)
{
diff --git a/src/nautilus-window-slot.h b/src/nautilus-window-slot.h
index ed4c873..ee60a13 100644
--- a/src/nautilus-window-slot.h
+++ b/src/nautilus-window-slot.h
@@ -124,5 +124,8 @@ void nautilus_window_slot_set_status (NautilusWindowSlot *slot,
const char *primary_status,
const char *detail_status);
void nautilus_window_slot_sync_view_mode (NautilusWindowSlot *slot);
+void nautilus_window_slot_add_notification_delete (NautilusWindowSlot *slot,
+ guint n_items,
+ gchar *file_name);
#endif /* NAUTILUS_WINDOW_SLOT_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]