diff options
author | Ernestas Kulik <ernestask@gnome.org> | 2017-08-08 13:35:11 +0300 |
---|---|---|
committer | Ernestas Kulik <ernestask@gnome.org> | 2017-08-08 20:04:25 +0300 |
commit | bf6b1e2c2f0cd3d882f99029af79a3439bdacec1 (patch) | |
tree | 2082ffd2115ffee6a7b372c5430569e8f8492abc | |
parent | 6092163f55ccf72484d0d6d5f302421c234ce17c (diff) | |
download | nautilus-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.c | 65 |
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) |