summaryrefslogtreecommitdiff
path: root/src/nautilus-files-view.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nautilus-files-view.c')
-rw-r--r--src/nautilus-files-view.c63
1 files changed, 42 insertions, 21 deletions
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index fe276e277..a1cd2c9cd 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -269,6 +269,9 @@ typedef struct
GCancellable *starred_cancellable;
NautilusTagManager *tag_manager;
+
+ gint name_accepted_handler_id;
+ gint cancelled_handler_id;
} NautilusFilesViewPrivate;
typedef struct
@@ -1885,6 +1888,29 @@ nautilus_files_view_compute_rename_popover_pointing_to (NautilusFilesView *view)
}
static void
+disconnect_rename_controller_signals (NautilusFilesView *self)
+{
+ NautilusFilesViewPrivate *priv;
+
+ g_assert (NAUTILUS_IS_FILES_VIEW (self));
+
+ priv = nautilus_files_view_get_instance_private (self);
+
+ if (priv->name_accepted_handler_id != 0)
+ {
+ g_signal_handler_disconnect (priv->rename_file_controller, priv->name_accepted_handler_id);
+ priv->name_accepted_handler_id = 0;
+ }
+
+ if (priv->cancelled_handler_id != 0)
+ {
+ g_signal_handler_disconnect (priv->rename_file_controller,
+ priv->cancelled_handler_id);
+ priv->cancelled_handler_id = 0;
+ }
+}
+
+static void
rename_file_popover_controller_on_name_accepted (NautilusFileNameWidgetController *controller,
gpointer user_data)
{
@@ -1908,7 +1934,7 @@ rename_file_popover_controller_on_name_accepted (NautilusFileNameWidgetControlle
nautilus_rename_file (target_file, name, NULL, NULL);
- g_clear_object (&priv->rename_file_controller);
+ disconnect_rename_controller_signals (view);
}
static void
@@ -1916,12 +1942,10 @@ rename_file_popover_controller_on_cancelled (NautilusFileNameWidgetController *c
gpointer user_data)
{
NautilusFilesView *view;
- NautilusFilesViewPrivate *priv;
view = NAUTILUS_FILES_VIEW (user_data);
- priv = nautilus_files_view_get_instance_private (view);
- g_clear_object (&priv->rename_file_controller);
+ disconnect_rename_controller_signals (view);
}
static void
@@ -1933,11 +1957,6 @@ nautilus_files_view_rename_file_popover_new (NautilusFilesView *view,
priv = nautilus_files_view_get_instance_private (view);
- if (priv->rename_file_controller != NULL)
- {
- return;
- }
-
/* Make sure the whole item is visible. The selection is a single item, the
* one to rename with the popover, so we can use reveal_selection() for this.
*/
@@ -1945,19 +1964,19 @@ nautilus_files_view_rename_file_popover_new (NautilusFilesView *view,
pointing_to = nautilus_files_view_compute_rename_popover_pointing_to (view);
- priv->rename_file_controller =
- nautilus_rename_file_popover_controller_new (target_file,
- pointing_to,
- GTK_WIDGET (view));
+ nautilus_rename_file_popover_controller_show_for_file (priv->rename_file_controller,
+ target_file,
+ pointing_to,
+ GTK_WIDGET (view));
- g_signal_connect (priv->rename_file_controller,
- "name-accepted",
- (GCallback) rename_file_popover_controller_on_name_accepted,
- view);
- g_signal_connect (priv->rename_file_controller,
- "cancelled",
- (GCallback) rename_file_popover_controller_on_cancelled,
- view);
+ priv->name_accepted_handler_id = g_signal_connect (priv->rename_file_controller,
+ "name-accepted",
+ G_CALLBACK (rename_file_popover_controller_on_name_accepted),
+ view);
+ priv->cancelled_handler_id = g_signal_connect (priv->rename_file_controller,
+ "cancelled",
+ G_CALLBACK (rename_file_popover_controller_on_cancelled),
+ view);
}
static void
@@ -9649,6 +9668,8 @@ nautilus_files_view_init (NautilusFilesView *view)
priv->starred_cancellable = g_cancellable_new ();
priv->tag_manager = nautilus_tag_manager_get ();
+ priv->rename_file_controller = nautilus_rename_file_popover_controller_new ();
+
nautilus_profile_end (NULL);
}