summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErnestas Kulik <ernestask@gnome.org>2017-08-08 13:35:11 +0300
committerErnestas Kulik <ernestask@gnome.org>2017-08-08 20:04:25 +0300
commitbf6b1e2c2f0cd3d882f99029af79a3439bdacec1 (patch)
tree2082ffd2115ffee6a7b372c5430569e8f8492abc
parent6092163f55ccf72484d0d6d5f302421c234ce17c (diff)
downloadnautilus-bf6b1e2c2f0cd3d882f99029af79a3439bdacec1.tar.gz
rename-file-popover-controller: consume ctrl-z
Pressing ctrl-z while renaming a file results in undoing the last completed operation, which breaks expectations. This commit makes the key combination revert the text in the name entry to the display name of the target file. https://bugzilla.gnome.org/show_bug.cgi?id=686023
-rw-r--r--src/nautilus-rename-file-popover-controller.c65
1 files changed, 43 insertions, 22 deletions
diff --git a/src/nautilus-rename-file-popover-controller.c b/src/nautilus-rename-file-popover-controller.c
index 3a11c229a..09d5d7980 100644
--- a/src/nautilus-rename-file-popover-controller.c
+++ b/src/nautilus-rename-file-popover-controller.c
@@ -126,34 +126,16 @@ nautilus_rename_file_popover_controller_ignore_existing_file (NautilusFileNameWi
return nautilus_file_compare_display_name (self->target_file, display_name) == 0;
}
-/* Albeit a misnomer, this only handles presses of the F2 key.
- * This is to restore functionality, lost in the introduction of the popover,
- * where pressing F2 while renaming would select all text.
- * The bug reporter also requested switching between selecting the name
- * and the name with extension.
- *
- * See https://bugzilla.gnome.org/show_bug.cgi?id=774361
- */
static gboolean
-name_entry_on_key_pressed (GtkWidget *widget,
- GdkEvent *event,
- gpointer user_data)
+name_entry_on_f2_pressed (GtkWidget *widget,
+ NautilusRenameFilePopoverController *self)
{
- GdkEventKey *key_event;
- NautilusRenameFilePopoverController *self;
guint text_length;
gint start_pos;
gint end_pos;
gboolean all_selected;
- key_event = (GdkEventKey *)event;
- if (key_event->keyval != GDK_KEY_F2)
- {
- return GDK_EVENT_PROPAGATE;
- }
-
- self = NAUTILUS_RENAME_FILE_POPOVER_CONTROLLER (user_data);
- text_length = (guint)gtk_entry_get_text_length (GTK_ENTRY (widget));
+ text_length = (guint) gtk_entry_get_text_length (GTK_ENTRY (widget));
if (text_length == 0)
{
return GDK_EVENT_PROPAGATE;
@@ -162,7 +144,7 @@ name_entry_on_key_pressed (GtkWidget *widget,
gtk_editable_get_selection_bounds (GTK_EDITABLE (widget),
&start_pos, &end_pos);
- all_selected = (start_pos == 0) && ((guint)end_pos == text_length);
+ all_selected = (start_pos == 0) && ((guint) end_pos == text_length);
if (!all_selected || !nautilus_file_is_regular_file (self->target_file))
{
gtk_editable_select_region (GTK_EDITABLE (widget), 0, -1);
@@ -182,6 +164,45 @@ name_entry_on_key_pressed (GtkWidget *widget,
return GDK_EVENT_PROPAGATE;
}
+static gboolean
+name_entry_on_undo (GtkWidget *widget,
+ NautilusRenameFilePopoverController *self)
+{
+ g_autofree gchar *display_name = NULL;
+
+ display_name = nautilus_file_get_display_name (self->target_file);
+
+ gtk_entry_set_text (GTK_ENTRY (widget), display_name);
+
+ gtk_editable_select_region (GTK_EDITABLE (widget), 0, -1);
+
+ return GDK_EVENT_STOP;
+}
+
+static gboolean
+name_entry_on_key_pressed (GtkWidget *widget,
+ GdkEvent *event,
+ gpointer user_data)
+{
+ GdkEventKey *key_event;
+ NautilusRenameFilePopoverController *self;
+
+ key_event = (GdkEventKey *) event;
+ self = NAUTILUS_RENAME_FILE_POPOVER_CONTROLLER (user_data);
+
+ if (key_event->keyval == GDK_KEY_F2)
+ {
+ return name_entry_on_f2_pressed (widget, self);
+ }
+ else if (key_event->keyval == GDK_KEY_z &&
+ key_event->state == GDK_CONTROL_MASK)
+ {
+ return name_entry_on_undo (widget, self);
+ }
+
+ return GDK_EVENT_PROPAGATE;
+}
+
static void
target_file_on_changed (NautilusFile *file,
gpointer user_data)