diff options
author | Carlos Soriano <csoriano@gnome.org> | 2016-08-29 18:24:05 +0200 |
---|---|---|
committer | Carlos Soriano <csoriano@gnome.org> | 2016-08-29 18:25:29 +0200 |
commit | bc88db402e424f34fd7a8fa583217c984df7f4b4 (patch) | |
tree | 040dc9433d4ad9cc38482fc7f83f560d58fdf803 /src/nautilus-batch-rename-dialog.c | |
parent | e19470ae3c0bd16fde484d0640f0c48a4f6ba4d0 (diff) | |
download | nautilus-wip/csoriano/uncrustify.tar.gz |
general: run uncrustifywip/csoriano/uncrustify
And make the style of Nautilus the same for all files.
Hopefully we can fix all the style issues we can find in the next days,
so expect a little of movement on this.
Diffstat (limited to 'src/nautilus-batch-rename-dialog.c')
-rw-r--r-- | src/nautilus-batch-rename-dialog.c | 5212 |
1 files changed, 2797 insertions, 2415 deletions
diff --git a/src/nautilus-batch-rename-dialog.c b/src/nautilus-batch-rename-dialog.c index 31432a068..20ea4111d 100644 --- a/src/nautilus-batch-rename-dialog.c +++ b/src/nautilus-batch-rename-dialog.c @@ -30,433 +30,450 @@ struct _NautilusBatchRenameDialog { - GtkDialog parent; - - GtkWidget *grid; - NautilusWindow *window; - - GtkWidget *cancel_button; - GtkWidget *original_name_listbox; - GtkWidget *arrow_listbox; - GtkWidget *result_listbox; - GtkWidget *name_entry; - GtkWidget *rename_button; - GtkWidget *find_entry; - GtkWidget *mode_stack; - GtkWidget *replace_entry; - GtkWidget *format_mode_button; - GtkWidget *replace_mode_button; - GtkWidget *add_button; - GtkWidget *add_popover; - GtkWidget *numbering_order_label; - GtkWidget *numbering_label; - GtkWidget *scrolled_window; - GtkWidget *numbering_order_popover; - GtkWidget *numbering_order_button; - GtkWidget *conflict_box; - GtkWidget *conflict_label; - GtkWidget *conflict_down; - GtkWidget *conflict_up; - - GList *original_name_listbox_rows; - GList *arrow_listbox_rows; - GList *result_listbox_rows; - GList *listbox_labels_new; - GList *listbox_labels_old; - GList *listbox_icons; - GtkSizeGroup *size_group; - - GList *selection; - GList *new_names; - NautilusBatchRenameDialogMode mode; - NautilusDirectory *directory; - - GActionGroup *action_group; - - GMenu *numbering_order_menu; - GMenu *add_tag_menu; - - GHashTable *create_date; - GList *selection_metadata; - - /* check if all files in selection have the same parent */ - gboolean same_parent; - /* the index of the currently selected conflict */ - gint selected_conflict; - /* total conflicts number */ - gint conflicts_number; - - gint checked_parents; - GList *duplicates; - GList *distinct_parents; - GTask *conflicts_task; - GCancellable *conflict_cancellable; - gboolean checking_conflicts; - - /* this hash table has information about the status - * of all tags: availability, if it's currently used - * and position */ - GHashTable *tag_info_table; - - GtkWidget *preselected_row1; - GtkWidget *preselected_row2; - - gint row_height; - gboolean rename_clicked; - - /* the numbers of characters from the name entry */ - gint name_entry_characters; - gboolean tags_deleted; - gint cursor_position; - gboolean use_manual_cursor_position; + GtkDialog parent; + + GtkWidget *grid; + NautilusWindow *window; + + GtkWidget *cancel_button; + GtkWidget *original_name_listbox; + GtkWidget *arrow_listbox; + GtkWidget *result_listbox; + GtkWidget *name_entry; + GtkWidget *rename_button; + GtkWidget *find_entry; + GtkWidget *mode_stack; + GtkWidget *replace_entry; + GtkWidget *format_mode_button; + GtkWidget *replace_mode_button; + GtkWidget *add_button; + GtkWidget *add_popover; + GtkWidget *numbering_order_label; + GtkWidget *numbering_label; + GtkWidget *scrolled_window; + GtkWidget *numbering_order_popover; + GtkWidget *numbering_order_button; + GtkWidget *conflict_box; + GtkWidget *conflict_label; + GtkWidget *conflict_down; + GtkWidget *conflict_up; + + GList *original_name_listbox_rows; + GList *arrow_listbox_rows; + GList *result_listbox_rows; + GList *listbox_labels_new; + GList *listbox_labels_old; + GList *listbox_icons; + GtkSizeGroup *size_group; + + GList *selection; + GList *new_names; + NautilusBatchRenameDialogMode mode; + NautilusDirectory *directory; + + GActionGroup *action_group; + + GMenu *numbering_order_menu; + GMenu *add_tag_menu; + + GHashTable *create_date; + GList *selection_metadata; + + /* check if all files in selection have the same parent */ + gboolean same_parent; + /* the index of the currently selected conflict */ + gint selected_conflict; + /* total conflicts number */ + gint conflicts_number; + + gint checked_parents; + GList *duplicates; + GList *distinct_parents; + GTask *conflicts_task; + GCancellable *conflict_cancellable; + gboolean checking_conflicts; + + /* this hash table has information about the status + * of all tags: availability, if it's currently used + * and position */ + GHashTable *tag_info_table; + + GtkWidget *preselected_row1; + GtkWidget *preselected_row2; + + gint row_height; + gboolean rename_clicked; + + /* the numbers of characters from the name entry */ + gint name_entry_characters; + gboolean tags_deleted; + gint cursor_position; + gboolean use_manual_cursor_position; }; typedef struct { - gboolean available; - gboolean set; - gint position; - gint original_position; - gint new_position; - /* if the tag was just added, then we shouldn't update it's position */ - gboolean just_added; + gboolean available; + gboolean set; + gint position; + gint original_position; + gint new_position; + /* if the tag was just added, then we shouldn't update it's position */ + gboolean just_added; } TagData; -static void update_display_text (NautilusBatchRenameDialog *dialog); +static void update_display_text (NautilusBatchRenameDialog *dialog); G_DEFINE_TYPE (NautilusBatchRenameDialog, nautilus_batch_rename_dialog, GTK_TYPE_DIALOG); static void -add_numbering_order (GSimpleAction *action, - GVariant *value, - gpointer user_data) +add_numbering_order (GSimpleAction *action, + GVariant *value, + gpointer user_data) { - NautilusBatchRenameDialog *dialog; - const gchar *target_name; + NautilusBatchRenameDialog *dialog; + const gchar *target_name; + + dialog = NAUTILUS_BATCH_RENAME_DIALOG (user_data); + + target_name = g_variant_get_string (value, NULL); + + if (g_strcmp0 (target_name, "name-ascending") == 0) + { + gtk_label_set_label (GTK_LABEL (dialog->numbering_order_label), + _("Original name (Ascending)")); + dialog->selection = nautilus_batch_rename_dialog_sort (dialog->selection, + ORIGINAL_ASCENDING, + NULL); + } + + if (g_strcmp0 (target_name, "name-descending") == 0) + { + gtk_label_set_label (GTK_LABEL (dialog->numbering_order_label), + _("Original name (Descending)")); + dialog->selection = nautilus_batch_rename_dialog_sort (dialog->selection, + ORIGINAL_DESCENDING, + NULL); + } + + if (g_strcmp0 (target_name, "first-modified") == 0) + { + gtk_label_set_label (GTK_LABEL (dialog->numbering_order_label), + _("First Modified")); + dialog->selection = nautilus_batch_rename_dialog_sort (dialog->selection, + FIRST_MODIFIED, + NULL); + } + + if (g_strcmp0 (target_name, "last-modified") == 0) + { + gtk_label_set_label (GTK_LABEL (dialog->numbering_order_label), + _("Last Modified")); + dialog->selection = nautilus_batch_rename_dialog_sort (dialog->selection, + LAST_MODIFIED, + NULL); + } + + if (g_strcmp0 (target_name, "first-created") == 0) + { + gtk_label_set_label (GTK_LABEL (dialog->numbering_order_label), + _("First Created")); + dialog->selection = nautilus_batch_rename_dialog_sort (dialog->selection, + FIRST_CREATED, + dialog->create_date); + } + + if (g_strcmp0 (target_name, "last-created") == 0) + { + gtk_label_set_label (GTK_LABEL (dialog->numbering_order_label), + _("Last Created")); + dialog->selection = nautilus_batch_rename_dialog_sort (dialog->selection, + LAST_CREATED, + dialog->create_date); + } + + g_simple_action_set_state (action, value); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->numbering_order_button), FALSE); + + update_display_text (dialog); +} - dialog = NAUTILUS_BATCH_RENAME_DIALOG (user_data); +static void +add_original_file_name_tag (GSimpleAction *action, + GVariant *value, + gpointer user_data) +{ + NautilusBatchRenameDialog *dialog; + gint cursor_position; + TagData *tag_data; - target_name = g_variant_get_string (value, NULL); + dialog = NAUTILUS_BATCH_RENAME_DIALOG (user_data); - if (g_strcmp0 (target_name, "name-ascending") == 0) { - gtk_label_set_label (GTK_LABEL (dialog->numbering_order_label), - _("Original name (Ascending)")); - dialog->selection = nautilus_batch_rename_dialog_sort (dialog->selection, - ORIGINAL_ASCENDING, - NULL); - } + g_object_get (dialog->name_entry, "cursor-position", &cursor_position, NULL); - if (g_strcmp0 (target_name, "name-descending") == 0) { - gtk_label_set_label (GTK_LABEL (dialog->numbering_order_label), - _("Original name (Descending)")); - dialog->selection = nautilus_batch_rename_dialog_sort (dialog->selection, - ORIGINAL_DESCENDING, - NULL); - } + tag_data = g_hash_table_lookup (dialog->tag_info_table, ORIGINAL_FILE_NAME); + tag_data->set = TRUE; + tag_data->just_added = TRUE; + tag_data->position = cursor_position; - if (g_strcmp0 (target_name, "first-modified") == 0) { - gtk_label_set_label (GTK_LABEL (dialog->numbering_order_label), - _("First Modified")); - dialog->selection = nautilus_batch_rename_dialog_sort (dialog->selection, - FIRST_MODIFIED, - NULL); - } + gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), + ORIGINAL_FILE_NAME, + g_utf8_strlen (ORIGINAL_FILE_NAME, -1), + &cursor_position); - if (g_strcmp0 (target_name, "last-modified") == 0) { - gtk_label_set_label (GTK_LABEL (dialog->numbering_order_label), - _("Last Modified")); - dialog->selection = nautilus_batch_rename_dialog_sort (dialog->selection, - LAST_MODIFIED, - NULL); - } + gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); - if (g_strcmp0 (target_name, "first-created") == 0) { - gtk_label_set_label (GTK_LABEL (dialog->numbering_order_label), - _("First Created")); - dialog->selection = nautilus_batch_rename_dialog_sort (dialog->selection, - FIRST_CREATED, - dialog->create_date); - } + gtk_entry_grab_focus_without_selecting (GTK_ENTRY (dialog->name_entry)); - if (g_strcmp0 (target_name, "last-created") == 0) { - gtk_label_set_label (GTK_LABEL (dialog->numbering_order_label), - _("Last Created")); - dialog->selection = nautilus_batch_rename_dialog_sort (dialog->selection, - LAST_CREATED, - dialog->create_date); - } - - g_simple_action_set_state (action, value); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), FALSE); +} - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->numbering_order_button), FALSE); +static void +disable_action (NautilusBatchRenameDialog *dialog, + gchar *action_name) +{ + GAction *action; - update_display_text (dialog); + action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), + action_name); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), FALSE); } static void -add_original_file_name_tag (GSimpleAction *action, - GVariant *value, - gpointer user_data) +add_metadata_tag (GSimpleAction *action, + GVariant *value, + gpointer user_data) { - NautilusBatchRenameDialog *dialog; - gint cursor_position; - TagData *tag_data; + NautilusBatchRenameDialog *dialog; + const gchar *action_name; + gint cursor_position; + TagData *tag_data; - dialog = NAUTILUS_BATCH_RENAME_DIALOG (user_data); + dialog = NAUTILUS_BATCH_RENAME_DIALOG (user_data); - g_object_get (dialog->name_entry, "cursor-position", &cursor_position, NULL); + action_name = g_action_get_name (G_ACTION (action)); + g_object_get (dialog->name_entry, "cursor-position", &cursor_position, NULL); - tag_data = g_hash_table_lookup (dialog->tag_info_table, ORIGINAL_FILE_NAME); + if (g_strrstr (action_name, "creation-date")) + { + tag_data = g_hash_table_lookup (dialog->tag_info_table, CREATION_DATE); + tag_data->available = TRUE; tag_data->set = TRUE; tag_data->just_added = TRUE; tag_data->position = cursor_position; gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), - ORIGINAL_FILE_NAME, - g_utf8_strlen (ORIGINAL_FILE_NAME, -1), + CREATION_DATE, + g_utf8_strlen (CREATION_DATE, -1), &cursor_position); + gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); + disable_action (dialog, "add-creation-date-tag"); + } + if (g_strrstr (action_name, "equipment")) + { + tag_data = g_hash_table_lookup (dialog->tag_info_table, CAMERA_MODEL); + tag_data->available = TRUE; + tag_data->set = TRUE; + tag_data->just_added = TRUE; + tag_data->position = cursor_position; + + gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), + CAMERA_MODEL, + g_utf8_strlen (CAMERA_MODEL, -1), + &cursor_position); gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); + disable_action (dialog, "add-equipment-tag"); + } - gtk_entry_grab_focus_without_selecting (GTK_ENTRY (dialog->name_entry)); + if (g_strrstr (action_name, "season")) + { + tag_data = g_hash_table_lookup (dialog->tag_info_table, SEASON_NUMBER); + tag_data->available = TRUE; + tag_data->set = TRUE; + tag_data->just_added = TRUE; + tag_data->position = cursor_position; - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), FALSE); -} + gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), + SEASON_NUMBER, + g_utf8_strlen (SEASON_NUMBER, -1), + &cursor_position); + gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); + disable_action (dialog, "add-season-tag"); + } -static void -disable_action (NautilusBatchRenameDialog *dialog, - gchar *action_name) -{ - GAction *action; + if (g_strrstr (action_name, "episode")) + { + tag_data = g_hash_table_lookup (dialog->tag_info_table, EPISODE_NUMBER); + tag_data->available = TRUE; + tag_data->set = TRUE; + tag_data->just_added = TRUE; + tag_data->position = cursor_position; - action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), - action_name); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), FALSE); -} + gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), + EPISODE_NUMBER, + g_utf8_strlen (EPISODE_NUMBER, -1), + &cursor_position); + gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); + disable_action (dialog, "add-episode-tag"); + } -static void -add_metadata_tag (GSimpleAction *action, - GVariant *value, - gpointer user_data) -{ - NautilusBatchRenameDialog *dialog; - const gchar *action_name; - gint cursor_position; - TagData *tag_data; - - dialog = NAUTILUS_BATCH_RENAME_DIALOG (user_data); - - action_name = g_action_get_name (G_ACTION (action)); - g_object_get (dialog->name_entry, "cursor-position", &cursor_position, NULL); - - if (g_strrstr (action_name, "creation-date")) { - tag_data = g_hash_table_lookup (dialog->tag_info_table, CREATION_DATE); - tag_data->available = TRUE; - tag_data->set = TRUE; - tag_data->just_added = TRUE; - tag_data->position = cursor_position; - - gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), - CREATION_DATE, - g_utf8_strlen (CREATION_DATE, -1), - &cursor_position); - gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); - disable_action (dialog, "add-creation-date-tag"); - } - - if (g_strrstr (action_name, "equipment")) { - tag_data = g_hash_table_lookup (dialog->tag_info_table, CAMERA_MODEL); - tag_data->available = TRUE; - tag_data->set = TRUE; - tag_data->just_added = TRUE; - tag_data->position = cursor_position; - - gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), - CAMERA_MODEL, - g_utf8_strlen (CAMERA_MODEL, -1), - &cursor_position); - gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); - disable_action (dialog, "add-equipment-tag"); - } - - if (g_strrstr (action_name, "season")) { - tag_data = g_hash_table_lookup (dialog->tag_info_table, SEASON_NUMBER); - tag_data->available = TRUE; - tag_data->set = TRUE; - tag_data->just_added = TRUE; - tag_data->position = cursor_position; - - gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), - SEASON_NUMBER, - g_utf8_strlen (SEASON_NUMBER, -1), - &cursor_position); - gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); - disable_action (dialog, "add-season-tag"); - } - - if (g_strrstr (action_name, "episode")) { - tag_data = g_hash_table_lookup (dialog->tag_info_table, EPISODE_NUMBER); - tag_data->available = TRUE; - tag_data->set = TRUE; - tag_data->just_added = TRUE; - tag_data->position = cursor_position; - - gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), - EPISODE_NUMBER, - g_utf8_strlen (EPISODE_NUMBER, -1), - &cursor_position); - gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); - disable_action (dialog, "add-episode-tag"); - } - - if (g_strrstr (action_name, "track")) { - tag_data = g_hash_table_lookup (dialog->tag_info_table, TRACK_NUMBER); - tag_data->available = TRUE; - tag_data->set = TRUE; - tag_data->just_added = TRUE; - tag_data->position = cursor_position; - - gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), - TRACK_NUMBER, - g_utf8_strlen (TRACK_NUMBER, -1), - &cursor_position); - gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); - disable_action (dialog, "add-track-number-tag"); - } - - if (g_strrstr (action_name, "artist")) { - tag_data = g_hash_table_lookup (dialog->tag_info_table, ARTIST_NAME); - tag_data->available = TRUE; - tag_data->set = TRUE; - tag_data->just_added = TRUE; - tag_data->position = cursor_position; - - gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), - ARTIST_NAME, - g_utf8_strlen (ARTIST_NAME, -1), - &cursor_position); - gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); - disable_action (dialog, "add-artist-name-tag"); - } - - if (g_strrstr (action_name, "title")) { - tag_data = g_hash_table_lookup (dialog->tag_info_table, TITLE); - tag_data->available = TRUE; - tag_data->set = TRUE; - tag_data->just_added = TRUE; - tag_data->position = cursor_position; - - gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), - TITLE, - g_utf8_strlen (TITLE, -1), - &cursor_position); - gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); - disable_action (dialog, "add-title-tag"); - } - - if (g_strrstr (action_name, "album")) { - tag_data = g_hash_table_lookup (dialog->tag_info_table, ALBUM_NAME); - tag_data->available = TRUE; - tag_data->set = TRUE; - tag_data->just_added = TRUE; - tag_data->position = cursor_position; - - gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), - ALBUM_NAME, - g_utf8_strlen (ALBUM_NAME, -1), - &cursor_position); - gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); - disable_action (dialog, "add-album-name-tag"); - } + if (g_strrstr (action_name, "track")) + { + tag_data = g_hash_table_lookup (dialog->tag_info_table, TRACK_NUMBER); + tag_data->available = TRUE; + tag_data->set = TRUE; + tag_data->just_added = TRUE; + tag_data->position = cursor_position; - gtk_entry_grab_focus_without_selecting (GTK_ENTRY (dialog->name_entry)); + gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), + TRACK_NUMBER, + g_utf8_strlen (TRACK_NUMBER, -1), + &cursor_position); + gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); + disable_action (dialog, "add-track-number-tag"); + } + + if (g_strrstr (action_name, "artist")) + { + tag_data = g_hash_table_lookup (dialog->tag_info_table, ARTIST_NAME); + tag_data->available = TRUE; + tag_data->set = TRUE; + tag_data->just_added = TRUE; + tag_data->position = cursor_position; + + gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), + ARTIST_NAME, + g_utf8_strlen (ARTIST_NAME, -1), + &cursor_position); + gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); + disable_action (dialog, "add-artist-name-tag"); + } + + if (g_strrstr (action_name, "title")) + { + tag_data = g_hash_table_lookup (dialog->tag_info_table, TITLE); + tag_data->available = TRUE; + tag_data->set = TRUE; + tag_data->just_added = TRUE; + tag_data->position = cursor_position; + + gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), + TITLE, + g_utf8_strlen (TITLE, -1), + &cursor_position); + gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); + disable_action (dialog, "add-title-tag"); + } + + if (g_strrstr (action_name, "album")) + { + tag_data = g_hash_table_lookup (dialog->tag_info_table, ALBUM_NAME); + tag_data->available = TRUE; + tag_data->set = TRUE; + tag_data->just_added = TRUE; + tag_data->position = cursor_position; + + gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), + ALBUM_NAME, + g_utf8_strlen (ALBUM_NAME, -1), + &cursor_position); + gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); + disable_action (dialog, "add-album-name-tag"); + } + + gtk_entry_grab_focus_without_selecting (GTK_ENTRY (dialog->name_entry)); } static void -add_numbering_tag (GSimpleAction *action, - GVariant *value, - gpointer user_data) +add_numbering_tag (GSimpleAction *action, + GVariant *value, + gpointer user_data) { - NautilusBatchRenameDialog *dialog; - const gchar *action_name; - gint cursor_position; - GAction *add_numbering_action; - TagData *tag_data; - - dialog = NAUTILUS_BATCH_RENAME_DIALOG (user_data); - - action_name = g_action_get_name (G_ACTION (action)); - g_object_get (dialog->name_entry, "cursor-position", &cursor_position, NULL); - - if (g_strrstr (action_name, "zero")) { - tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING); - tag_data->set = TRUE; - tag_data->just_added = TRUE; - tag_data->position = cursor_position; - - gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), - NUMBERING, - g_utf8_strlen (NUMBERING, -1), - &cursor_position); - gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); - } - - if (g_strrstr (action_name, "one")) { - tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING0); - tag_data->set = TRUE; - tag_data->just_added = TRUE; - tag_data->position = cursor_position; - - gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), - NUMBERING0, - g_utf8_strlen (NUMBERING0, -1), - &cursor_position); - gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); - } - - if (g_strrstr (action_name, "two")) { - tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING00); - tag_data->set = TRUE; - tag_data->just_added = TRUE; - tag_data->position = cursor_position; - - gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), - NUMBERING00, - g_utf8_strlen (NUMBERING00, -1), - &cursor_position); - gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); - } - - add_numbering_action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), - "add-numbering-tag-zero"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (add_numbering_action), FALSE); - add_numbering_action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), - "add-numbering-tag-one"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (add_numbering_action), FALSE); - - add_numbering_action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), - "add-numbering-tag-two"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (add_numbering_action), FALSE); + NautilusBatchRenameDialog *dialog; + const gchar *action_name; + gint cursor_position; + GAction *add_numbering_action; + TagData *tag_data; - gtk_entry_grab_focus_without_selecting (GTK_ENTRY (dialog->name_entry)); -} + dialog = NAUTILUS_BATCH_RENAME_DIALOG (user_data); + + action_name = g_action_get_name (G_ACTION (action)); + g_object_get (dialog->name_entry, "cursor-position", &cursor_position, NULL); + + if (g_strrstr (action_name, "zero")) + { + tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING); + tag_data->set = TRUE; + tag_data->just_added = TRUE; + tag_data->position = cursor_position; + + gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), + NUMBERING, + g_utf8_strlen (NUMBERING, -1), + &cursor_position); + gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); + } + + if (g_strrstr (action_name, "one")) + { + tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING0); + tag_data->set = TRUE; + tag_data->just_added = TRUE; + tag_data->position = cursor_position; + + gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), + NUMBERING0, + g_utf8_strlen (NUMBERING0, -1), + &cursor_position); + gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); + } + + if (g_strrstr (action_name, "two")) + { + tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING00); + tag_data->set = TRUE; + tag_data->just_added = TRUE; + tag_data->position = cursor_position; + + gtk_editable_insert_text (GTK_EDITABLE (dialog->name_entry), + NUMBERING00, + g_utf8_strlen (NUMBERING00, -1), + &cursor_position); + gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), cursor_position); + } + + add_numbering_action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), + "add-numbering-tag-zero"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (add_numbering_action), FALSE); + add_numbering_action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), + "add-numbering-tag-one"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (add_numbering_action), FALSE); + + add_numbering_action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), + "add-numbering-tag-two"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (add_numbering_action), FALSE); -const GActionEntry dialog_entries[] = { - { "numbering-order-changed", NULL, "s", "'name-ascending'", add_numbering_order }, - { "add-original-file-name-tag", add_original_file_name_tag }, - { "add-numbering-tag-zero", add_numbering_tag }, - { "add-numbering-tag-one", add_numbering_tag }, - { "add-numbering-tag-two", add_numbering_tag }, - { "add-creation-date-tag", add_metadata_tag }, - { "add-equipment-tag", add_metadata_tag }, - { "add-season-tag", add_metadata_tag }, - { "add-episode-tag", add_metadata_tag }, - { "add-video-album-tag", add_metadata_tag }, - { "add-track-number-tag", add_metadata_tag }, - { "add-artist-name-tag", add_metadata_tag }, - { "add-title-tag", add_metadata_tag }, - { "add-album-name-tag", add_metadata_tag }, + gtk_entry_grab_focus_without_selecting (GTK_ENTRY (dialog->name_entry)); +} +const GActionEntry dialog_entries[] = +{ + { "numbering-order-changed", NULL, "s", "'name-ascending'", add_numbering_order }, + { "add-original-file-name-tag", add_original_file_name_tag }, + { "add-numbering-tag-zero", add_numbering_tag }, + { "add-numbering-tag-one", add_numbering_tag }, + { "add-numbering-tag-two", add_numbering_tag }, + { "add-creation-date-tag", add_metadata_tag }, + { "add-equipment-tag", add_metadata_tag }, + { "add-season-tag", add_metadata_tag }, + { "add-episode-tag", add_metadata_tag }, + { "add-video-album-tag", add_metadata_tag }, + { "add-track-number-tag", add_metadata_tag }, + { "add-artist-name-tag", add_metadata_tag }, + { "add-title-tag", add_metadata_tag }, + { "add-album-name-tag", add_metadata_tag }, }; static void @@ -464,366 +481,410 @@ row_selected (GtkListBox *box, GtkListBoxRow *listbox_row, gpointer user_data) { - NautilusBatchRenameDialog *dialog; - GtkListBoxRow *row; - gint index; + NautilusBatchRenameDialog *dialog; + GtkListBoxRow *row; + gint index; - if (!GTK_IS_LIST_BOX_ROW (listbox_row)) - return; + if (!GTK_IS_LIST_BOX_ROW (listbox_row)) + { + return; + } - dialog = NAUTILUS_BATCH_RENAME_DIALOG (user_data); - index = gtk_list_box_row_get_index (listbox_row); + dialog = NAUTILUS_BATCH_RENAME_DIALOG (user_data); + index = gtk_list_box_row_get_index (listbox_row); - if (GTK_WIDGET (box) == dialog->original_name_listbox) { - row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (dialog->arrow_listbox), index); - gtk_list_box_select_row (GTK_LIST_BOX (dialog->arrow_listbox), - row); - row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (dialog->result_listbox), index); - gtk_list_box_select_row (GTK_LIST_BOX (dialog->result_listbox), - row); - } + if (GTK_WIDGET (box) == dialog->original_name_listbox) + { + row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (dialog->arrow_listbox), index); + gtk_list_box_select_row (GTK_LIST_BOX (dialog->arrow_listbox), + row); + row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (dialog->result_listbox), index); + gtk_list_box_select_row (GTK_LIST_BOX (dialog->result_listbox), + row); + } - if (GTK_WIDGET (box) == dialog->arrow_listbox) { - row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (dialog->original_name_listbox), index); - gtk_list_box_select_row (GTK_LIST_BOX (dialog->original_name_listbox), - row); - row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (dialog->result_listbox), index); - gtk_list_box_select_row (GTK_LIST_BOX (dialog->result_listbox), - row); - } + if (GTK_WIDGET (box) == dialog->arrow_listbox) + { + row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (dialog->original_name_listbox), index); + gtk_list_box_select_row (GTK_LIST_BOX (dialog->original_name_listbox), + row); + row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (dialog->result_listbox), index); + gtk_list_box_select_row (GTK_LIST_BOX (dialog->result_listbox), + row); + } - if (GTK_WIDGET (box) == dialog->result_listbox) { - row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (dialog->arrow_listbox), index); - gtk_list_box_select_row (GTK_LIST_BOX (dialog->arrow_listbox), - row); - row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (dialog->original_name_listbox), index); - gtk_list_box_select_row (GTK_LIST_BOX (dialog->original_name_listbox), - row); - } + if (GTK_WIDGET (box) == dialog->result_listbox) + { + row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (dialog->arrow_listbox), index); + gtk_list_box_select_row (GTK_LIST_BOX (dialog->arrow_listbox), + row); + row = gtk_list_box_get_row_at_index (GTK_LIST_BOX (dialog->original_name_listbox), index); + gtk_list_box_select_row (GTK_LIST_BOX (dialog->original_name_listbox), + row); + } } static gint compare_tag_position (gconstpointer a, gconstpointer b) { - int *number1 = (int*) a; - int *number2 = (int*) b; + int *number1 = (int *) a; + int *number2 = (int *) b; - return *number1 - *number2; + return *number1 - *number2; } /* This function splits the entry text into a list of regular text and tags. * For instance, "[1, 2, 3]Paris[Creation date]" would result in: * "[1, 2, 3]", "Paris", "[Creation date]" */ -static GList* +static GList * split_entry_text (NautilusBatchRenameDialog *dialog, gchar *entry_text) { - GString *normal_text; - GString *tag; - GArray *tag_positions; - gint tags; - gint i; - gchar *substring; - gint tag_end_position; - GList *result = NULL; - TagData *tag_data; - - tags = 0; - tag_end_position = 0; - tag_positions = g_array_new (FALSE, FALSE, sizeof (gint)); + GString *normal_text; + GString *tag; + GArray *tag_positions; + gint tags; + gint i; + gchar *substring; + gint tag_end_position; + GList *result = NULL; + TagData *tag_data; + + tags = 0; + tag_end_position = 0; + tag_positions = g_array_new (FALSE, FALSE, sizeof (gint)); + + tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING); + if (tag_data->set) + { + g_array_append_val (tag_positions, tag_data->position); + tags++; + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING0); + if (tag_data->set) + { + g_array_append_val (tag_positions, tag_data->position); + tags++; + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING00); + if (tag_data->set) + { + g_array_append_val (tag_positions, tag_data->position); + tags++; + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, ORIGINAL_FILE_NAME); + if (tag_data->set) + { + g_array_append_val (tag_positions, tag_data->position); + tags++; + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, CREATION_DATE); + if (tag_data->set) + { + g_array_append_val (tag_positions, tag_data->position); + tags++; + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, CAMERA_MODEL); + if (tag_data->set) + { + g_array_append_val (tag_positions, tag_data->position); + tags++; + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, SEASON_NUMBER); + if (tag_data->set) + { + g_array_append_val (tag_positions, tag_data->position); + tags++; + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, EPISODE_NUMBER); + if (tag_data->set) + { + g_array_append_val (tag_positions, tag_data->position); + tags++; + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, TRACK_NUMBER); + if (tag_data->set) + { + g_array_append_val (tag_positions, tag_data->position); + tags++; + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, ARTIST_NAME); + if (tag_data->set) + { + g_array_append_val (tag_positions, tag_data->position); + tags++; + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, TITLE); + if (tag_data->set) + { + g_array_append_val (tag_positions, tag_data->position); + tags++; + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, ALBUM_NAME); + if (tag_data->set) + { + g_array_append_val (tag_positions, tag_data->position); + tags++; + } + + g_array_sort (tag_positions, compare_tag_position); + + for (i = 0; i < tags; i++) + { + tag = g_string_new (""); + + substring = g_utf8_substring (entry_text, tag_end_position, + g_array_index (tag_positions, gint, i)); + normal_text = g_string_new (substring); + g_free (substring); + + if (g_strcmp0 (normal_text->str, "")) + { + result = g_list_prepend (result, normal_text); + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, ORIGINAL_FILE_NAME); + if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) + { + tag_end_position = g_array_index (tag_positions, gint, i) + + g_utf8_strlen (ORIGINAL_FILE_NAME, -1); + tag = g_string_append (tag, ORIGINAL_FILE_NAME); + } tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING); - if (tag_data->set) { - g_array_append_val (tag_positions, tag_data->position); - tags++; + if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) + { + tag_end_position = g_array_index (tag_positions, gint, i) + + g_utf8_strlen (NUMBERING, -1); + tag = g_string_append (tag, NUMBERING); } tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING0); - if (tag_data->set) { - g_array_append_val (tag_positions, tag_data->position); - tags++; + if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) + { + tag_end_position = g_array_index (tag_positions, gint, i) + + g_utf8_strlen (NUMBERING0, -1); + tag = g_string_append (tag, NUMBERING0); } tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING00); - if (tag_data->set) { - g_array_append_val (tag_positions, tag_data->position); - tags++; - } - - tag_data = g_hash_table_lookup (dialog->tag_info_table, ORIGINAL_FILE_NAME); - if (tag_data->set) { - g_array_append_val (tag_positions, tag_data->position); - tags++; + if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) + { + tag_end_position = g_array_index (tag_positions, gint, i) + + g_utf8_strlen (NUMBERING00, -1); + tag = g_string_append (tag, NUMBERING00); } - tag_data = g_hash_table_lookup (dialog->tag_info_table, CREATION_DATE); - if (tag_data->set) { - g_array_append_val (tag_positions, tag_data->position); - tags++; + if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) + { + tag_end_position = g_array_index (tag_positions, gint, i) + + g_utf8_strlen (CREATION_DATE, -1); + tag = g_string_append (tag, CREATION_DATE); } - tag_data = g_hash_table_lookup (dialog->tag_info_table, CAMERA_MODEL); - if (tag_data->set) { - g_array_append_val (tag_positions, tag_data->position); - tags++; + if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) + { + tag_end_position = g_array_index (tag_positions, gint, i) + + g_utf8_strlen (CAMERA_MODEL, -1); + tag = g_string_append (tag, CAMERA_MODEL); } - tag_data = g_hash_table_lookup (dialog->tag_info_table, SEASON_NUMBER); - if (tag_data->set) { - g_array_append_val (tag_positions, tag_data->position); - tags++; + if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) + { + tag_end_position = g_array_index (tag_positions, gint, i) + + g_utf8_strlen (SEASON_NUMBER, -1); + tag = g_string_append (tag, SEASON_NUMBER); } - tag_data = g_hash_table_lookup (dialog->tag_info_table, EPISODE_NUMBER); - if (tag_data->set) { - g_array_append_val (tag_positions, tag_data->position); - tags++; + if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) + { + tag_end_position = g_array_index (tag_positions, gint, i) + + g_utf8_strlen (EPISODE_NUMBER, -1); + tag = g_string_append (tag, EPISODE_NUMBER); } - tag_data = g_hash_table_lookup (dialog->tag_info_table, TRACK_NUMBER); - if (tag_data->set) { - g_array_append_val (tag_positions, tag_data->position); - tags++; + if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) + { + tag_end_position = g_array_index (tag_positions, gint, i) + + g_utf8_strlen (TRACK_NUMBER, -1); + tag = g_string_append (tag, TRACK_NUMBER); } - tag_data = g_hash_table_lookup (dialog->tag_info_table, ARTIST_NAME); - if (tag_data->set) { - g_array_append_val (tag_positions, tag_data->position); - tags++; + if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) + { + tag_end_position = g_array_index (tag_positions, gint, i) + + g_utf8_strlen (ARTIST_NAME, -1); + tag = g_string_append (tag, ARTIST_NAME); } - tag_data = g_hash_table_lookup (dialog->tag_info_table, TITLE); - if (tag_data->set) { - g_array_append_val (tag_positions, tag_data->position); - tags++; + if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) + { + tag_end_position = g_array_index (tag_positions, gint, i) + + g_utf8_strlen (TITLE, -1); + tag = g_string_append (tag, TITLE); } - tag_data = g_hash_table_lookup (dialog->tag_info_table, ALBUM_NAME); - if (tag_data->set) { - g_array_append_val (tag_positions, tag_data->position); - tags++; + if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) + { + tag_end_position = g_array_index (tag_positions, gint, i) + + g_utf8_strlen (ALBUM_NAME, -1); + tag = g_string_append (tag, ALBUM_NAME); } - g_array_sort (tag_positions, compare_tag_position); - - for (i = 0; i < tags; i++) { - tag = g_string_new (""); - - substring = g_utf8_substring (entry_text, tag_end_position, - g_array_index (tag_positions, gint, i)); - normal_text = g_string_new (substring); - g_free (substring); + result = g_list_prepend (result, tag); + } + normal_text = g_string_new (g_utf8_offset_to_pointer (entry_text, tag_end_position)); - if (g_strcmp0 (normal_text->str, "")) - result = g_list_prepend (result, normal_text); + if (g_strcmp0 (normal_text->str, "") != 0) + { + result = g_list_prepend (result, normal_text); + } - tag_data = g_hash_table_lookup (dialog->tag_info_table, ORIGINAL_FILE_NAME); - if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) { - tag_end_position = g_array_index (tag_positions, gint, i) + - g_utf8_strlen (ORIGINAL_FILE_NAME, -1); - tag = g_string_append (tag, ORIGINAL_FILE_NAME); - } - - tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING); - if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) { - tag_end_position = g_array_index (tag_positions, gint, i) + - g_utf8_strlen (NUMBERING, -1); - tag = g_string_append (tag, NUMBERING); - } - - tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING0); - if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) { - tag_end_position = g_array_index (tag_positions, gint, i) + - g_utf8_strlen (NUMBERING0, -1); - tag = g_string_append (tag, NUMBERING0); - } - - tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING00); - if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) { - tag_end_position = g_array_index (tag_positions, gint, i) + - g_utf8_strlen (NUMBERING00, -1); - tag = g_string_append (tag, NUMBERING00); - } - tag_data = g_hash_table_lookup (dialog->tag_info_table, CREATION_DATE); - if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) { - tag_end_position = g_array_index (tag_positions, gint, i) + - g_utf8_strlen (CREATION_DATE, -1); - tag = g_string_append (tag, CREATION_DATE); - } - tag_data = g_hash_table_lookup (dialog->tag_info_table, CAMERA_MODEL); - if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) { - tag_end_position = g_array_index (tag_positions, gint, i) + - g_utf8_strlen (CAMERA_MODEL, -1); - tag = g_string_append (tag, CAMERA_MODEL); - } - tag_data = g_hash_table_lookup (dialog->tag_info_table, SEASON_NUMBER); - if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) { - tag_end_position = g_array_index (tag_positions, gint, i) + - g_utf8_strlen (SEASON_NUMBER, -1); - tag = g_string_append (tag, SEASON_NUMBER); - } - tag_data = g_hash_table_lookup (dialog->tag_info_table, EPISODE_NUMBER); - if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) { - tag_end_position = g_array_index (tag_positions, gint, i) + - g_utf8_strlen (EPISODE_NUMBER, -1); - tag = g_string_append (tag, EPISODE_NUMBER); - } - tag_data = g_hash_table_lookup (dialog->tag_info_table, TRACK_NUMBER); - if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) { - tag_end_position = g_array_index (tag_positions, gint, i) + - g_utf8_strlen (TRACK_NUMBER, -1); - tag = g_string_append (tag, TRACK_NUMBER); - } - tag_data = g_hash_table_lookup (dialog->tag_info_table, ARTIST_NAME); - if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) { - tag_end_position = g_array_index (tag_positions, gint, i) + - g_utf8_strlen (ARTIST_NAME, -1); - tag = g_string_append (tag, ARTIST_NAME); - } - tag_data = g_hash_table_lookup (dialog->tag_info_table, TITLE); - if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) { - tag_end_position = g_array_index (tag_positions, gint, i) + - g_utf8_strlen (TITLE, -1); - tag = g_string_append (tag, TITLE); - } - tag_data = g_hash_table_lookup (dialog->tag_info_table, ALBUM_NAME); - if (tag_data->set && g_array_index (tag_positions, gint, i) == tag_data->position) { - tag_end_position = g_array_index (tag_positions, gint, i) + - g_utf8_strlen (ALBUM_NAME, -1); - tag = g_string_append (tag, ALBUM_NAME); - } - - result = g_list_prepend (result, tag); - } - normal_text = g_string_new (g_utf8_offset_to_pointer (entry_text, tag_end_position)); + result = g_list_reverse (result); - if (g_strcmp0 (normal_text->str, "") != 0) - result = g_list_prepend (result, normal_text); - - result = g_list_reverse (result); - - g_array_free (tag_positions, TRUE); - return result; + g_array_free (tag_positions, TRUE); + return result; } -static GList* +static GList * batch_rename_dialog_get_new_names (NautilusBatchRenameDialog *dialog) { - GList *result = NULL; - GList *selection; - GList *text_chunks; - g_autofree gchar *entry_text; - g_autofree gchar *replace_text; - - selection = dialog->selection; - text_chunks = NULL; - - if (dialog->mode == NAUTILUS_BATCH_RENAME_DIALOG_REPLACE) - entry_text = g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->find_entry))); - else - entry_text = g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->name_entry))); - - replace_text = g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->replace_entry))); - - if (dialog->mode == NAUTILUS_BATCH_RENAME_DIALOG_REPLACE) { - result = batch_rename_dialog_get_new_names_list (dialog->mode, - selection, - NULL, - NULL, - entry_text, - replace_text); - } else { - text_chunks = split_entry_text (dialog, entry_text); - - result = batch_rename_dialog_get_new_names_list (dialog->mode, - selection, - text_chunks, - dialog->selection_metadata, - entry_text, - replace_text); - g_list_free_full (text_chunks, string_free); - } - - result = g_list_reverse (result); - - return result; + GList *result = NULL; + GList *selection; + GList *text_chunks; + g_autofree gchar *entry_text; + g_autofree gchar *replace_text; + + selection = dialog->selection; + text_chunks = NULL; + + if (dialog->mode == NAUTILUS_BATCH_RENAME_DIALOG_REPLACE) + { + entry_text = g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->find_entry))); + } + else + { + entry_text = g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->name_entry))); + } + + replace_text = g_strdup (gtk_entry_get_text (GTK_ENTRY (dialog->replace_entry))); + + if (dialog->mode == NAUTILUS_BATCH_RENAME_DIALOG_REPLACE) + { + result = batch_rename_dialog_get_new_names_list (dialog->mode, + selection, + NULL, + NULL, + entry_text, + replace_text); + } + else + { + text_chunks = split_entry_text (dialog, entry_text); + + result = batch_rename_dialog_get_new_names_list (dialog->mode, + selection, + text_chunks, + dialog->selection_metadata, + entry_text, + replace_text); + g_list_free_full (text_chunks, string_free); + } + + result = g_list_reverse (result); + + return result; } static void begin_batch_rename (NautilusBatchRenameDialog *dialog, GList *new_names) { - GList *new_names_list; - GList *files; - GList *files2; - GList *new_names_list2; - gchar *file_name; - gchar *old_file_name; - GString *new_file_name; - GString *new_name; - NautilusFile *file; - - /* in the following case: - * file1 -> file2 - * file2 -> file3 - * file2 must be renamed first, so because of that, the list has to be reordered */ - for (new_names_list = new_names, files = dialog->selection; - new_names_list != NULL && files != NULL; - new_names_list = new_names_list->next, files = files->next) { - old_file_name = nautilus_file_get_name (NAUTILUS_FILE (files->data)); - new_file_name = new_names_list->data; - - for (files2 = dialog->selection, new_names_list2 = new_names; - files2 != NULL && new_names_list2 != NULL; - files2 = files2->next, new_names_list2 = new_names_list2->next) { - file_name = nautilus_file_get_name (NAUTILUS_FILE (files2->data)); - if (files2 != files && g_strcmp0 (file_name, new_file_name->str) == 0) { - file = NAUTILUS_FILE (files2->data); - new_name = new_names_list2->data; - - dialog->selection = g_list_remove_link (dialog->selection, files2); - new_names = g_list_remove_link (new_names, new_names_list2); - - dialog->selection = g_list_prepend (dialog->selection, file); - new_names = g_list_prepend (new_names, new_name); - - g_free (file_name); - - break; - } - - g_free (file_name); - } + GList *new_names_list; + GList *files; + GList *files2; + GList *new_names_list2; + gchar *file_name; + gchar *old_file_name; + GString *new_file_name; + GString *new_name; + NautilusFile *file; + + /* in the following case: + * file1 -> file2 + * file2 -> file3 + * file2 must be renamed first, so because of that, the list has to be reordered */ + for (new_names_list = new_names, files = dialog->selection; + new_names_list != NULL && files != NULL; + new_names_list = new_names_list->next, files = files->next) + { + old_file_name = nautilus_file_get_name (NAUTILUS_FILE (files->data)); + new_file_name = new_names_list->data; + + for (files2 = dialog->selection, new_names_list2 = new_names; + files2 != NULL && new_names_list2 != NULL; + files2 = files2->next, new_names_list2 = new_names_list2->next) + { + file_name = nautilus_file_get_name (NAUTILUS_FILE (files2->data)); + if (files2 != files && g_strcmp0 (file_name, new_file_name->str) == 0) + { + file = NAUTILUS_FILE (files2->data); + new_name = new_names_list2->data; + + dialog->selection = g_list_remove_link (dialog->selection, files2); + new_names = g_list_remove_link (new_names, new_names_list2); + + dialog->selection = g_list_prepend (dialog->selection, file); + new_names = g_list_prepend (new_names, new_name); + + g_free (file_name); - g_free (old_file_name); + break; + } + + g_free (file_name); } - /* do the actual rename here */ - nautilus_file_batch_rename (dialog->selection, new_names, NULL, NULL); + g_free (old_file_name); + } + + /* do the actual rename here */ + nautilus_file_batch_rename (dialog->selection, new_names, NULL, NULL); - gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (dialog->window)), NULL); + gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (dialog->window)), NULL); } static void -listbox_header_func (GtkListBoxRow *row, - GtkListBoxRow *before, - NautilusBatchRenameDialog *dialog) +listbox_header_func (GtkListBoxRow *row, + GtkListBoxRow *before, + NautilusBatchRenameDialog *dialog) { - gboolean show_separator; + gboolean show_separator; - show_separator = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (row), - "show-separator")); + show_separator = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (row), + "show-separator")); - if (show_separator) - { - GtkWidget *separator; + if (show_separator) + { + GtkWidget *separator; - separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL); - gtk_widget_show (separator); + separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL); + gtk_widget_show (separator); - gtk_list_box_row_set_header (row, separator); - } + gtk_list_box_row_set_header (row, separator); + } } /* This is manually done instead of using GtkSizeGroup because of the computational @@ -831,173 +892,188 @@ listbox_header_func (GtkListBoxRow *row, static void update_rows_height (NautilusBatchRenameDialog *dialog) { - GList *l; - gint current_row_natural_height; - gint maximum_height; + GList *l; + gint current_row_natural_height; + gint maximum_height; - maximum_height = -1; + maximum_height = -1; - /* check if maximum height has changed */ - for (l = dialog->listbox_labels_new; l != NULL; l = l->next) { - gtk_widget_get_preferred_height (GTK_WIDGET (l->data), - NULL, - ¤t_row_natural_height); + /* check if maximum height has changed */ + for (l = dialog->listbox_labels_new; l != NULL; l = l->next) + { + gtk_widget_get_preferred_height (GTK_WIDGET (l->data), + NULL, + ¤t_row_natural_height); - if (current_row_natural_height > maximum_height) { - maximum_height = current_row_natural_height; - } + if (current_row_natural_height > maximum_height) + { + maximum_height = current_row_natural_height; } + } - for (l = dialog->listbox_labels_old; l != NULL; l = l->next) { - gtk_widget_get_preferred_height (GTK_WIDGET (l->data), - NULL, - ¤t_row_natural_height); + for (l = dialog->listbox_labels_old; l != NULL; l = l->next) + { + gtk_widget_get_preferred_height (GTK_WIDGET (l->data), + NULL, + ¤t_row_natural_height); - if (current_row_natural_height > maximum_height) { - maximum_height = current_row_natural_height; - } + if (current_row_natural_height > maximum_height) + { + maximum_height = current_row_natural_height; } + } - for (l = dialog->listbox_icons; l != NULL; l = l->next) { - gtk_widget_get_preferred_height (GTK_WIDGET (l->data), - NULL, - ¤t_row_natural_height); + for (l = dialog->listbox_icons; l != NULL; l = l->next) + { + gtk_widget_get_preferred_height (GTK_WIDGET (l->data), + NULL, + ¤t_row_natural_height); - if (current_row_natural_height > maximum_height) { - maximum_height = current_row_natural_height; - } + if (current_row_natural_height > maximum_height) + { + maximum_height = current_row_natural_height; } + } - if (maximum_height != dialog->row_height) { - dialog->row_height = maximum_height; + if (maximum_height != dialog->row_height) + { + dialog->row_height = maximum_height; - for (l = dialog->listbox_icons; l != NULL; l = l->next) { - g_object_set (G_OBJECT (l->data), "height-request", dialog->row_height, NULL); - } + for (l = dialog->listbox_icons; l != NULL; l = l->next) + { + g_object_set (G_OBJECT (l->data), "height-request", dialog->row_height, NULL); + } - for (l = dialog->listbox_labels_new; l != NULL; l = l->next) { - g_object_set (G_OBJECT (l->data), "height-request", dialog->row_height, NULL); - } + for (l = dialog->listbox_labels_new; l != NULL; l = l->next) + { + g_object_set (G_OBJECT (l->data), "height-request", dialog->row_height, NULL); + } - for (l = dialog->listbox_labels_old; l != NULL; l = l->next) { - g_object_set (G_OBJECT (l->data), "height-request", dialog->row_height, NULL); - } + for (l = dialog->listbox_labels_old; l != NULL; l = l->next) + { + g_object_set (G_OBJECT (l->data), "height-request", dialog->row_height, NULL); } + } } -static GtkWidget* +static GtkWidget * create_original_name_row_for_label (NautilusBatchRenameDialog *dialog, const gchar *old_text, gboolean show_separator) { - GtkWidget *row; - GtkWidget *label_old; + GtkWidget *row; + GtkWidget *label_old; - row = gtk_list_box_row_new (); + row = gtk_list_box_row_new (); - g_object_set_data (G_OBJECT (row), "show-separator", GINT_TO_POINTER (show_separator)); + g_object_set_data (G_OBJECT (row), "show-separator", GINT_TO_POINTER (show_separator)); - label_old = gtk_label_new (old_text); - gtk_label_set_xalign (GTK_LABEL (label_old), 0.0); - gtk_widget_set_hexpand (label_old, TRUE); - gtk_widget_set_margin_start (label_old, 6); + label_old = gtk_label_new (old_text); + gtk_label_set_xalign (GTK_LABEL (label_old), 0.0); + gtk_widget_set_hexpand (label_old, TRUE); + gtk_widget_set_margin_start (label_old, 6); - gtk_label_set_ellipsize (GTK_LABEL (label_old), PANGO_ELLIPSIZE_END); + gtk_label_set_ellipsize (GTK_LABEL (label_old), PANGO_ELLIPSIZE_END); - dialog->listbox_labels_old = g_list_prepend (dialog->listbox_labels_old, label_old); + dialog->listbox_labels_old = g_list_prepend (dialog->listbox_labels_old, label_old); - gtk_container_add (GTK_CONTAINER (row), label_old); - gtk_widget_show_all (row); + gtk_container_add (GTK_CONTAINER (row), label_old); + gtk_widget_show_all (row); - return row; + return row; } -static GtkWidget* +static GtkWidget * create_result_row_for_label (NautilusBatchRenameDialog *dialog, const gchar *new_text, gboolean show_separator) { - GtkWidget *row; - GtkWidget *label_new; + GtkWidget *row; + GtkWidget *label_new; - row = gtk_list_box_row_new (); + row = gtk_list_box_row_new (); - g_object_set_data (G_OBJECT (row), "show-separator", GINT_TO_POINTER (show_separator)); + g_object_set_data (G_OBJECT (row), "show-separator", GINT_TO_POINTER (show_separator)); - label_new = gtk_label_new (new_text); - gtk_label_set_xalign (GTK_LABEL (label_new), 0.0); - gtk_widget_set_hexpand (label_new, TRUE); - gtk_widget_set_margin_start (label_new, 6); + label_new = gtk_label_new (new_text); + gtk_label_set_xalign (GTK_LABEL (label_new), 0.0); + gtk_widget_set_hexpand (label_new, TRUE); + gtk_widget_set_margin_start (label_new, 6); - gtk_label_set_ellipsize (GTK_LABEL (label_new), PANGO_ELLIPSIZE_END); + gtk_label_set_ellipsize (GTK_LABEL (label_new), PANGO_ELLIPSIZE_END); - dialog->listbox_labels_new = g_list_prepend (dialog->listbox_labels_new, label_new); + dialog->listbox_labels_new = g_list_prepend (dialog->listbox_labels_new, label_new); - gtk_container_add (GTK_CONTAINER (row), label_new); - gtk_widget_show_all (row); + gtk_container_add (GTK_CONTAINER (row), label_new); + gtk_widget_show_all (row); - return row; + return row; } -static GtkWidget* +static GtkWidget * create_arrow_row_for_label (NautilusBatchRenameDialog *dialog, gboolean show_separator) { - GtkWidget *row; - GtkWidget *icon; + GtkWidget *row; + GtkWidget *icon; - row = gtk_list_box_row_new (); + row = gtk_list_box_row_new (); - g_object_set_data (G_OBJECT (row), "show-separator", GINT_TO_POINTER (show_separator)); + g_object_set_data (G_OBJECT (row), "show-separator", GINT_TO_POINTER (show_separator)); - icon = gtk_label_new ("→"); - gtk_label_set_xalign (GTK_LABEL (icon), 1.0); - gtk_widget_set_hexpand (icon, FALSE); - gtk_widget_set_margin_start (icon, 6); + icon = gtk_label_new ("→"); + gtk_label_set_xalign (GTK_LABEL (icon), 1.0); + gtk_widget_set_hexpand (icon, FALSE); + gtk_widget_set_margin_start (icon, 6); - dialog->listbox_icons = g_list_prepend (dialog->listbox_icons, icon); + dialog->listbox_icons = g_list_prepend (dialog->listbox_icons, icon); - gtk_container_add (GTK_CONTAINER (row), icon); - gtk_widget_show_all (row); + gtk_container_add (GTK_CONTAINER (row), icon); + gtk_widget_show_all (row); - return row; + return row; } static void prepare_batch_rename (NautilusBatchRenameDialog *dialog) { - GdkCursor *cursor; - GdkDisplay *display; - - /* wait for checking conflicts to finish, to be sure that - * the rename can actually take place */ - if (dialog->checking_conflicts) { - dialog->rename_clicked = TRUE; - return; - } - - if (!gtk_widget_is_sensitive (dialog->rename_button)) - return; - - display = gtk_widget_get_display (GTK_WIDGET (dialog->window)); - cursor = gdk_cursor_new_from_name (display, "progress"); - gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (dialog->window)), - cursor); - g_object_unref (cursor); - - display = gtk_widget_get_display (GTK_WIDGET (dialog)); - cursor = gdk_cursor_new_from_name (display, "progress"); - gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (dialog)), - cursor); - g_object_unref (cursor); - - gtk_widget_hide (GTK_WIDGET (dialog)); - begin_batch_rename (dialog, dialog->new_names); - - if (dialog->conflict_cancellable) - g_cancellable_cancel (dialog->conflict_cancellable); - - gtk_widget_destroy (GTK_WIDGET (dialog)); + GdkCursor *cursor; + GdkDisplay *display; + + /* wait for checking conflicts to finish, to be sure that + * the rename can actually take place */ + if (dialog->checking_conflicts) + { + dialog->rename_clicked = TRUE; + return; + } + + if (!gtk_widget_is_sensitive (dialog->rename_button)) + { + return; + } + + display = gtk_widget_get_display (GTK_WIDGET (dialog->window)); + cursor = gdk_cursor_new_from_name (display, "progress"); + gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (dialog->window)), + cursor); + g_object_unref (cursor); + + display = gtk_widget_get_display (GTK_WIDGET (dialog)); + cursor = gdk_cursor_new_from_name (display, "progress"); + gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (dialog)), + cursor); + g_object_unref (cursor); + + gtk_widget_hide (GTK_WIDGET (dialog)); + begin_batch_rename (dialog, dialog->new_names); + + if (dialog->conflict_cancellable) + { + g_cancellable_cancel (dialog->conflict_cancellable); + } + + gtk_widget_destroy (GTK_WIDGET (dialog)); } static void @@ -1005,281 +1081,320 @@ batch_rename_dialog_on_response (NautilusBatchRenameDialog *dialog, gint response_id, gpointer user_data) { - if (response_id == GTK_RESPONSE_OK) { - prepare_batch_rename (dialog); - } else { - if (dialog->conflict_cancellable) - g_cancellable_cancel (dialog->conflict_cancellable); - - gtk_widget_destroy (GTK_WIDGET (dialog)); + if (response_id == GTK_RESPONSE_OK) + { + prepare_batch_rename (dialog); + } + else + { + if (dialog->conflict_cancellable) + { + g_cancellable_cancel (dialog->conflict_cancellable); } + + gtk_widget_destroy (GTK_WIDGET (dialog)); + } } static void fill_display_listbox (NautilusBatchRenameDialog *dialog) { - GtkWidget *row; - GList *l1; - GList *l2; - NautilusFile *file; - GString *new_name; - gchar *name; - - dialog->original_name_listbox_rows = NULL; - dialog->arrow_listbox_rows = NULL; - dialog->result_listbox_rows = NULL; - - gtk_size_group_add_widget (dialog->size_group, dialog->result_listbox); - gtk_size_group_add_widget (dialog->size_group, dialog->original_name_listbox); - - for (l1 = dialog->new_names, l2 = dialog->selection; l1 != NULL && l2 != NULL; l1 = l1->next, l2 = l2->next) { - file = NAUTILUS_FILE (l2->data); - new_name = l1->data; - - name = nautilus_file_get_name (file); - row = create_original_name_row_for_label (dialog, name, TRUE); - gtk_container_add (GTK_CONTAINER (dialog->original_name_listbox), row); - dialog->original_name_listbox_rows = g_list_prepend (dialog->original_name_listbox_rows, - row); - - row = create_arrow_row_for_label (dialog, TRUE); - gtk_container_add (GTK_CONTAINER (dialog->arrow_listbox), row); - dialog->arrow_listbox_rows = g_list_prepend (dialog->arrow_listbox_rows, + GtkWidget *row; + GList *l1; + GList *l2; + NautilusFile *file; + GString *new_name; + gchar *name; + + dialog->original_name_listbox_rows = NULL; + dialog->arrow_listbox_rows = NULL; + dialog->result_listbox_rows = NULL; + + gtk_size_group_add_widget (dialog->size_group, dialog->result_listbox); + gtk_size_group_add_widget (dialog->size_group, dialog->original_name_listbox); + + for (l1 = dialog->new_names, l2 = dialog->selection; l1 != NULL && l2 != NULL; l1 = l1->next, l2 = l2->next) + { + file = NAUTILUS_FILE (l2->data); + new_name = l1->data; + + name = nautilus_file_get_name (file); + row = create_original_name_row_for_label (dialog, name, TRUE); + gtk_container_add (GTK_CONTAINER (dialog->original_name_listbox), row); + dialog->original_name_listbox_rows = g_list_prepend (dialog->original_name_listbox_rows, row); - row = create_result_row_for_label (dialog, new_name->str, TRUE); - gtk_container_add (GTK_CONTAINER (dialog->result_listbox), row); - dialog->result_listbox_rows = g_list_prepend (dialog->result_listbox_rows, - row); - - g_free (name); - } - - dialog->original_name_listbox_rows = g_list_reverse (dialog->original_name_listbox_rows); - dialog->arrow_listbox_rows = g_list_reverse (dialog->arrow_listbox_rows); - dialog->result_listbox_rows = g_list_reverse (dialog->result_listbox_rows); - dialog->listbox_labels_old = g_list_reverse (dialog->listbox_labels_old); - dialog->listbox_labels_new = g_list_reverse (dialog->listbox_labels_new); - dialog->listbox_icons = g_list_reverse (dialog->listbox_icons); + row = create_arrow_row_for_label (dialog, TRUE); + gtk_container_add (GTK_CONTAINER (dialog->arrow_listbox), row); + dialog->arrow_listbox_rows = g_list_prepend (dialog->arrow_listbox_rows, + row); + + row = create_result_row_for_label (dialog, new_name->str, TRUE); + gtk_container_add (GTK_CONTAINER (dialog->result_listbox), row); + dialog->result_listbox_rows = g_list_prepend (dialog->result_listbox_rows, + row); + + g_free (name); + } + + dialog->original_name_listbox_rows = g_list_reverse (dialog->original_name_listbox_rows); + dialog->arrow_listbox_rows = g_list_reverse (dialog->arrow_listbox_rows); + dialog->result_listbox_rows = g_list_reverse (dialog->result_listbox_rows); + dialog->listbox_labels_old = g_list_reverse (dialog->listbox_labels_old); + dialog->listbox_labels_new = g_list_reverse (dialog->listbox_labels_new); + dialog->listbox_icons = g_list_reverse (dialog->listbox_icons); } static void select_nth_conflict (NautilusBatchRenameDialog *dialog) { - GList *l; - GString *conflict_file_name; - GString *display_text; - GString *new_name; - gint nth_conflict_index; - gint nth_conflict; - gint name_occurences; - GtkAdjustment *adjustment; - GtkAllocation allocation; - ConflictData *conflict_data; - - nth_conflict = dialog->selected_conflict; - l = g_list_nth (dialog->duplicates, nth_conflict); - conflict_data = l->data; - - /* the conflict that has to be selected */ - conflict_file_name = g_string_new (conflict_data->name); - display_text = g_string_new (""); - - nth_conflict_index = conflict_data->index; - - l = g_list_nth (dialog->original_name_listbox_rows, nth_conflict_index); - gtk_list_box_select_row (GTK_LIST_BOX (dialog->original_name_listbox), - l->data); - - l = g_list_nth (dialog->arrow_listbox_rows, nth_conflict_index); - gtk_list_box_select_row (GTK_LIST_BOX (dialog->arrow_listbox), - l->data); - - l = g_list_nth (dialog->result_listbox_rows, nth_conflict_index); - gtk_list_box_select_row (GTK_LIST_BOX (dialog->result_listbox), - l->data); - - /* scroll to the selected row */ - adjustment = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (dialog->scrolled_window)); - gtk_widget_get_allocation (GTK_WIDGET (l->data), &allocation); - gtk_adjustment_set_value (adjustment, (allocation.height + 1) * nth_conflict_index); - - name_occurences = 0; - for (l = dialog->new_names; l != NULL; l = l->next) { - new_name = l->data; - if (g_string_equal (new_name, conflict_file_name)) - name_occurences++; - } - if (name_occurences > 1) - g_string_append_printf (display_text, - _("\"%s\" would not be a unique new name"), - conflict_file_name->str); - else - g_string_append_printf (display_text, - _("\"%s\" would conflict with an existing file."), - conflict_file_name->str); - - gtk_label_set_label (GTK_LABEL (dialog->conflict_label), - display_text->str); - - g_string_free (conflict_file_name, TRUE); + GList *l; + GString *conflict_file_name; + GString *display_text; + GString *new_name; + gint nth_conflict_index; + gint nth_conflict; + gint name_occurences; + GtkAdjustment *adjustment; + GtkAllocation allocation; + ConflictData *conflict_data; + + nth_conflict = dialog->selected_conflict; + l = g_list_nth (dialog->duplicates, nth_conflict); + conflict_data = l->data; + + /* the conflict that has to be selected */ + conflict_file_name = g_string_new (conflict_data->name); + display_text = g_string_new (""); + + nth_conflict_index = conflict_data->index; + + l = g_list_nth (dialog->original_name_listbox_rows, nth_conflict_index); + gtk_list_box_select_row (GTK_LIST_BOX (dialog->original_name_listbox), + l->data); + + l = g_list_nth (dialog->arrow_listbox_rows, nth_conflict_index); + gtk_list_box_select_row (GTK_LIST_BOX (dialog->arrow_listbox), + l->data); + + l = g_list_nth (dialog->result_listbox_rows, nth_conflict_index); + gtk_list_box_select_row (GTK_LIST_BOX (dialog->result_listbox), + l->data); + + /* scroll to the selected row */ + adjustment = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (dialog->scrolled_window)); + gtk_widget_get_allocation (GTK_WIDGET (l->data), &allocation); + gtk_adjustment_set_value (adjustment, (allocation.height + 1) * nth_conflict_index); + + name_occurences = 0; + for (l = dialog->new_names; l != NULL; l = l->next) + { + new_name = l->data; + if (g_string_equal (new_name, conflict_file_name)) + { + name_occurences++; + } + } + if (name_occurences > 1) + { + g_string_append_printf (display_text, + _("\"%s\" would not be a unique new name"), + conflict_file_name->str); + } + else + { + g_string_append_printf (display_text, + _("\"%s\" would conflict with an existing file."), + conflict_file_name->str); + } + + gtk_label_set_label (GTK_LABEL (dialog->conflict_label), + display_text->str); + + g_string_free (conflict_file_name, TRUE); } static void select_next_conflict_down (NautilusBatchRenameDialog *dialog) { - dialog->selected_conflict++; + dialog->selected_conflict++; - if (dialog->selected_conflict == 1) - gtk_widget_set_sensitive (dialog->conflict_up, TRUE); + if (dialog->selected_conflict == 1) + { + gtk_widget_set_sensitive (dialog->conflict_up, TRUE); + } - if (dialog->selected_conflict == dialog->conflicts_number - 1) - gtk_widget_set_sensitive (dialog->conflict_down, FALSE); + if (dialog->selected_conflict == dialog->conflicts_number - 1) + { + gtk_widget_set_sensitive (dialog->conflict_down, FALSE); + } - select_nth_conflict (dialog); + select_nth_conflict (dialog); } static void select_next_conflict_up (NautilusBatchRenameDialog *dialog) { - dialog->selected_conflict--; + dialog->selected_conflict--; - if (dialog->selected_conflict == 0) - gtk_widget_set_sensitive (dialog->conflict_up, FALSE); + if (dialog->selected_conflict == 0) + { + gtk_widget_set_sensitive (dialog->conflict_up, FALSE); + } - if (dialog->selected_conflict == dialog->conflicts_number - 2) - gtk_widget_set_sensitive (dialog->conflict_down, TRUE); + if (dialog->selected_conflict == dialog->conflicts_number - 2) + { + gtk_widget_set_sensitive (dialog->conflict_down, TRUE); + } - select_nth_conflict (dialog); + select_nth_conflict (dialog); } static void update_conflict_row_background (NautilusBatchRenameDialog *dialog) { - GList *l1; - GList *l2; - GList *l3; - GList *duplicates; - gint index; - GtkStyleContext *context; - ConflictData *conflict_data; - - index = 0; - - duplicates = dialog->duplicates; - - for (l1 = dialog->original_name_listbox_rows, - l2 = dialog->arrow_listbox_rows, - l3 = dialog->result_listbox_rows; - l1 != NULL && l2 != NULL && l3 != NULL; - l1 = l1->next, l2 = l2->next, l3 = l3->next) { - context = gtk_widget_get_style_context (GTK_WIDGET (l1->data)); - - if (gtk_style_context_has_class (context, "conflict-row")) { - gtk_style_context_remove_class (context, "conflict-row"); - - context = gtk_widget_get_style_context (GTK_WIDGET (l2->data)); - gtk_style_context_remove_class (context, "conflict-row"); + GList *l1; + GList *l2; + GList *l3; + GList *duplicates; + gint index; + GtkStyleContext *context; + ConflictData *conflict_data; + + index = 0; + + duplicates = dialog->duplicates; + + for (l1 = dialog->original_name_listbox_rows, + l2 = dialog->arrow_listbox_rows, + l3 = dialog->result_listbox_rows; + l1 != NULL && l2 != NULL && l3 != NULL; + l1 = l1->next, l2 = l2->next, l3 = l3->next) + { + context = gtk_widget_get_style_context (GTK_WIDGET (l1->data)); + + if (gtk_style_context_has_class (context, "conflict-row")) + { + gtk_style_context_remove_class (context, "conflict-row"); - context = gtk_widget_get_style_context (GTK_WIDGET (l3->data)); - gtk_style_context_remove_class (context, "conflict-row"); + context = gtk_widget_get_style_context (GTK_WIDGET (l2->data)); + gtk_style_context_remove_class (context, "conflict-row"); - } + context = gtk_widget_get_style_context (GTK_WIDGET (l3->data)); + gtk_style_context_remove_class (context, "conflict-row"); + } - if (duplicates != NULL) { - conflict_data = duplicates->data; - if (conflict_data->index == index) { - context = gtk_widget_get_style_context (GTK_WIDGET (l1->data)); - gtk_style_context_add_class (context, "conflict-row"); + if (duplicates != NULL) + { + conflict_data = duplicates->data; + if (conflict_data->index == index) + { + context = gtk_widget_get_style_context (GTK_WIDGET (l1->data)); + gtk_style_context_add_class (context, "conflict-row"); - context = gtk_widget_get_style_context (GTK_WIDGET (l2->data)); - gtk_style_context_add_class (context, "conflict-row"); + context = gtk_widget_get_style_context (GTK_WIDGET (l2->data)); + gtk_style_context_add_class (context, "conflict-row"); - context = gtk_widget_get_style_context (GTK_WIDGET (l3->data)); - gtk_style_context_add_class (context, "conflict-row"); + context = gtk_widget_get_style_context (GTK_WIDGET (l3->data)); + gtk_style_context_add_class (context, "conflict-row"); - duplicates = duplicates->next; - } - } - index++; + duplicates = duplicates->next; + } } + index++; + } } static void update_listbox (NautilusBatchRenameDialog *dialog) { - GList *l1; - GList *l2; - NautilusFile *file; - gchar *old_name; - GtkLabel *label; - GString *new_name; + GList *l1; + GList *l2; + NautilusFile *file; + gchar *old_name; + GtkLabel *label; + GString *new_name; - for (l1 = dialog->new_names, l2 = dialog->listbox_labels_new; l1 != NULL && l2 != NULL; l1 = l1->next, l2 = l2->next) { - label = GTK_LABEL (l2->data); - new_name = l1->data; + for (l1 = dialog->new_names, l2 = dialog->listbox_labels_new; l1 != NULL && l2 != NULL; l1 = l1->next, l2 = l2->next) + { + label = GTK_LABEL (l2->data); + new_name = l1->data; - gtk_label_set_label (label, new_name->str); - } + gtk_label_set_label (label, new_name->str); + } - for (l1 = dialog->selection, l2 = dialog->listbox_labels_old; l1 != NULL && l2 != NULL; l1 = l1->next, l2 = l2->next) { - label = GTK_LABEL (l2->data); - file = NAUTILUS_FILE (l1->data); + for (l1 = dialog->selection, l2 = dialog->listbox_labels_old; l1 != NULL && l2 != NULL; l1 = l1->next, l2 = l2->next) + { + label = GTK_LABEL (l2->data); + file = NAUTILUS_FILE (l1->data); - old_name = nautilus_file_get_name (file); + old_name = nautilus_file_get_name (file); - if (dialog->mode == NAUTILUS_BATCH_RENAME_DIALOG_FORMAT) { - gtk_label_set_label (label, old_name); - } else { - new_name = batch_rename_replace_label_text (old_name, - gtk_entry_get_text (GTK_ENTRY (dialog->find_entry))); - gtk_label_set_markup (GTK_LABEL (label), new_name->str); - - g_string_free (new_name, TRUE); - } + if (dialog->mode == NAUTILUS_BATCH_RENAME_DIALOG_FORMAT) + { + gtk_label_set_label (label, old_name); + } + else + { + new_name = batch_rename_replace_label_text (old_name, + gtk_entry_get_text (GTK_ENTRY (dialog->find_entry))); + gtk_label_set_markup (GTK_LABEL (label), new_name->str); - g_free (old_name); + g_string_free (new_name, TRUE); } - update_rows_height (dialog); + g_free (old_name); + } - /* check if there are name conflicts and display them if they exist */ - if (dialog->duplicates != NULL) { - update_conflict_row_background (dialog); + update_rows_height (dialog); - gtk_widget_set_sensitive (dialog->rename_button, FALSE); + /* check if there are name conflicts and display them if they exist */ + if (dialog->duplicates != NULL) + { + update_conflict_row_background (dialog); - gtk_widget_show (dialog->conflict_box); + gtk_widget_set_sensitive (dialog->rename_button, FALSE); - dialog->selected_conflict = 0; - dialog->conflicts_number = g_list_length (dialog->duplicates); + gtk_widget_show (dialog->conflict_box); - select_nth_conflict (dialog); + dialog->selected_conflict = 0; + dialog->conflicts_number = g_list_length (dialog->duplicates); - gtk_widget_set_sensitive (dialog->conflict_up, FALSE); + select_nth_conflict (dialog); - if (g_list_length (dialog->duplicates) == 1) - gtk_widget_set_sensitive (dialog->conflict_down, FALSE); - else - gtk_widget_set_sensitive (dialog->conflict_down, TRUE); - } else { - gtk_widget_hide (dialog->conflict_box); + gtk_widget_set_sensitive (dialog->conflict_up, FALSE); - /* re-enable the rename button if there are no more name conflicts */ - if (dialog->duplicates == NULL && !gtk_widget_is_sensitive (dialog->rename_button)) { - update_conflict_row_background (dialog); - gtk_widget_set_sensitive (dialog->rename_button, TRUE); - } + if (g_list_length (dialog->duplicates) == 1) + { + gtk_widget_set_sensitive (dialog->conflict_down, FALSE); } - - /* if the rename button was clicked and there's no conflict, then start renaming */ - if (dialog->rename_clicked && dialog->duplicates == NULL) { - prepare_batch_rename (dialog); + else + { + gtk_widget_set_sensitive (dialog->conflict_down, TRUE); } + } + else + { + gtk_widget_hide (dialog->conflict_box); - if (dialog->rename_clicked && dialog->duplicates != NULL) { - dialog->rename_clicked = FALSE; + /* re-enable the rename button if there are no more name conflicts */ + if (dialog->duplicates == NULL && !gtk_widget_is_sensitive (dialog->rename_button)) + { + update_conflict_row_background (dialog); + gtk_widget_set_sensitive (dialog->rename_button, TRUE); } + } + + /* if the rename button was clicked and there's no conflict, then start renaming */ + if (dialog->rename_clicked && dialog->duplicates == NULL) + { + prepare_batch_rename (dialog); + } + + if (dialog->rename_clicked && dialog->duplicates != NULL) + { + dialog->rename_clicked = FALSE; + } } @@ -1288,152 +1403,168 @@ check_conflict_for_files (NautilusBatchRenameDialog *dialog, NautilusDirectory *directory, GList *files) { - gchar *current_directory; - gchar *parent_uri; - gchar *name; - NautilusFile *file; - GString *new_name; - GString *file_name; - GList *l1, *l2; - GHashTable *directory_files_table; - GHashTable *new_names_table; - GHashTable *names_conflicts_table; - gboolean exists; - gboolean have_conflict; - gboolean tag_present; - gboolean same_parent_directory; - ConflictData *conflict_data; - - current_directory = nautilus_directory_get_uri (directory); - - directory_files_table = g_hash_table_new_full (g_str_hash, - g_str_equal, - (GDestroyNotify) g_free, - NULL); - new_names_table = g_hash_table_new_full (g_str_hash, - g_str_equal, - (GDestroyNotify) g_free, - (GDestroyNotify) g_free); - names_conflicts_table = g_hash_table_new_full (g_str_hash, - g_str_equal, - (GDestroyNotify) g_free, - (GDestroyNotify) g_free); - - /* names_conflicts_table is used for knowing which names from the list are not unique, - * so that they can easily be reached when needed */ - for (l1 = dialog->new_names, l2 = dialog->selection; - l1 != NULL && l2 != NULL; - l1 = l1->next, l2 = l2->next) { - new_name = l1->data; - file = NAUTILUS_FILE (l2->data); - parent_uri = nautilus_file_get_parent_uri (file); - - tag_present = g_hash_table_lookup (new_names_table, new_name->str) != NULL; - same_parent_directory = g_strcmp0 (parent_uri, current_directory) == 0; - - if (same_parent_directory) { - if (!tag_present) { - g_hash_table_insert (new_names_table, - g_strdup (new_name->str), - nautilus_file_get_parent_uri (file)); - } else { - g_hash_table_insert (names_conflicts_table, - g_strdup (new_name->str), - nautilus_file_get_parent_uri (file)); - } - } + gchar *current_directory; + gchar *parent_uri; + gchar *name; + NautilusFile *file; + GString *new_name; + GString *file_name; + GList *l1, *l2; + GHashTable *directory_files_table; + GHashTable *new_names_table; + GHashTable *names_conflicts_table; + gboolean exists; + gboolean have_conflict; + gboolean tag_present; + gboolean same_parent_directory; + ConflictData *conflict_data; + + current_directory = nautilus_directory_get_uri (directory); + + directory_files_table = g_hash_table_new_full (g_str_hash, + g_str_equal, + (GDestroyNotify) g_free, + NULL); + new_names_table = g_hash_table_new_full (g_str_hash, + g_str_equal, + (GDestroyNotify) g_free, + (GDestroyNotify) g_free); + names_conflicts_table = g_hash_table_new_full (g_str_hash, + g_str_equal, + (GDestroyNotify) g_free, + (GDestroyNotify) g_free); + + /* names_conflicts_table is used for knowing which names from the list are not unique, + * so that they can easily be reached when needed */ + for (l1 = dialog->new_names, l2 = dialog->selection; + l1 != NULL && l2 != NULL; + l1 = l1->next, l2 = l2->next) + { + new_name = l1->data; + file = NAUTILUS_FILE (l2->data); + parent_uri = nautilus_file_get_parent_uri (file); + + tag_present = g_hash_table_lookup (new_names_table, new_name->str) != NULL; + same_parent_directory = g_strcmp0 (parent_uri, current_directory) == 0; + + if (same_parent_directory) + { + if (!tag_present) + { + g_hash_table_insert (new_names_table, + g_strdup (new_name->str), + nautilus_file_get_parent_uri (file)); + } + else + { + g_hash_table_insert (names_conflicts_table, + g_strdup (new_name->str), + nautilus_file_get_parent_uri (file)); + } + } + + g_free (parent_uri); + } + + for (l1 = files; l1 != NULL; l1 = l1->next) + { + file = NAUTILUS_FILE (l1->data); + g_hash_table_insert (directory_files_table, + nautilus_file_get_name (file), + GINT_TO_POINTER (TRUE)); + } + + for (l1 = dialog->selection, l2 = dialog->new_names; l1 != NULL && l2 != NULL; l1 = l1->next, l2 = l2->next) + { + file = NAUTILUS_FILE (l1->data); + + name = nautilus_file_get_name (file); + file_name = g_string_new (name); + g_free (name); + + parent_uri = nautilus_file_get_parent_uri (file); + + new_name = l2->data; + + have_conflict = FALSE; + + /* check for duplicate only if the parent of the current file is + * the current directory and the name of the file has changed */ + if (g_strcmp0 (parent_uri, current_directory) == 0 && + !g_string_equal (new_name, file_name)) + { + exists = GPOINTER_TO_INT (g_hash_table_lookup (directory_files_table, new_name->str)); - g_free (parent_uri); - } + if (exists == TRUE && + !file_name_conflicts_with_results (dialog->selection, dialog->new_names, new_name, parent_uri)) + { + conflict_data = g_new (ConflictData, 1); + conflict_data->name = g_strdup (new_name->str); + conflict_data->index = g_list_index (dialog->selection, l1->data); + dialog->duplicates = g_list_prepend (dialog->duplicates, + conflict_data); - for (l1 = files; l1 != NULL; l1 = l1->next) { - file = NAUTILUS_FILE (l1->data); - g_hash_table_insert (directory_files_table, - nautilus_file_get_name (file), - GINT_TO_POINTER (TRUE)); + have_conflict = TRUE; + } } + if (!have_conflict) + { + tag_present = g_hash_table_lookup (names_conflicts_table, new_name->str) != NULL; + same_parent_directory = g_strcmp0 (nautilus_file_get_parent_uri (file), current_directory) == 0; - for (l1 = dialog->selection, l2 = dialog->new_names; l1 != NULL && l2 != NULL; l1 = l1->next, l2 = l2->next) { - file = NAUTILUS_FILE (l1->data); - - name = nautilus_file_get_name (file); - file_name = g_string_new (name); - g_free (name); - - parent_uri = nautilus_file_get_parent_uri (file); - - new_name = l2->data; - - have_conflict = FALSE; - - /* check for duplicate only if the parent of the current file is - * the current directory and the name of the file has changed */ - if (g_strcmp0 (parent_uri, current_directory) == 0 && - !g_string_equal (new_name, file_name)) { - exists = GPOINTER_TO_INT (g_hash_table_lookup (directory_files_table, new_name->str)); - - if (exists == TRUE && - !file_name_conflicts_with_results (dialog->selection, dialog->new_names, new_name, parent_uri)) { - conflict_data = g_new (ConflictData, 1); - conflict_data->name = g_strdup (new_name->str); - conflict_data->index = g_list_index (dialog->selection, l1->data); - dialog->duplicates = g_list_prepend (dialog->duplicates, - conflict_data); - - have_conflict = TRUE; - } - } - if (!have_conflict) { - tag_present = g_hash_table_lookup (names_conflicts_table, new_name->str) != NULL; - same_parent_directory = g_strcmp0 (nautilus_file_get_parent_uri (file), current_directory) == 0; - - if (tag_present && same_parent_directory) { - conflict_data = g_new (ConflictData, 1); - conflict_data->name = g_strdup (new_name->str); - conflict_data->index = g_list_index (dialog->selection, l1->data); - dialog->duplicates = g_list_prepend (dialog->duplicates, - conflict_data); - - have_conflict = TRUE; - } - } + if (tag_present && same_parent_directory) + { + conflict_data = g_new (ConflictData, 1); + conflict_data->name = g_strdup (new_name->str); + conflict_data->index = g_list_index (dialog->selection, l1->data); + dialog->duplicates = g_list_prepend (dialog->duplicates, + conflict_data); - g_string_free (file_name, TRUE); - g_free (parent_uri); + have_conflict = TRUE; + } } - /* check if this is the last call of the callback. Update - * the listbox with the conflicts if it is. */ - if (dialog->checked_parents == g_list_length (dialog->distinct_parents) - 1) { - dialog->duplicates = g_list_reverse (dialog->duplicates); + g_string_free (file_name, TRUE); + g_free (parent_uri); + } - dialog->checking_conflicts = FALSE; + /* check if this is the last call of the callback. Update + * the listbox with the conflicts if it is. */ + if (dialog->checked_parents == g_list_length (dialog->distinct_parents) - 1) + { + dialog->duplicates = g_list_reverse (dialog->duplicates); - update_listbox (dialog); - } + dialog->checking_conflicts = FALSE; - dialog->checked_parents++; + update_listbox (dialog); + } - g_free (current_directory); - g_hash_table_destroy (directory_files_table); - g_hash_table_destroy (new_names_table); - g_hash_table_destroy (names_conflicts_table); + dialog->checked_parents++; + + g_free (current_directory); + g_hash_table_destroy (directory_files_table); + g_hash_table_destroy (new_names_table); + g_hash_table_destroy (names_conflicts_table); } static void -file_names_list_has_duplicates_callback (GObject *object, - GAsyncResult *res, - gpointer user_data) +file_names_list_has_duplicates_callback (GObject *object, + GAsyncResult *res, + gpointer user_data) { - NautilusBatchRenameDialog *dialog; + NautilusBatchRenameDialog *dialog; - dialog = NAUTILUS_BATCH_RENAME_DIALOG (object); + dialog = NAUTILUS_BATCH_RENAME_DIALOG (object); - if (g_cancellable_is_cancelled (dialog->conflict_cancellable)) - return; + if (g_cancellable_is_cancelled (dialog->conflict_cancellable)) + { + return; + } - if (dialog->same_parent) - update_listbox (dialog); + if (dialog->same_parent) + { + update_listbox (dialog); + } } static void @@ -1441,9 +1572,9 @@ on_call_when_ready (NautilusDirectory *directory, GList *files, gpointer callback_data) { - check_conflict_for_files (NAUTILUS_BATCH_RENAME_DIALOG (callback_data), - directory, - files); + check_conflict_for_files (NAUTILUS_BATCH_RENAME_DIALOG (callback_data), + directory, + files); } static void @@ -1452,151 +1583,165 @@ file_names_list_has_duplicates_async_thread (GTask *task, gpointer task_data, GCancellable *cancellable) { - NautilusBatchRenameDialog *dialog; - GList *new_names; - GList *directory_files; - GList *l1; - GList *l2; - NautilusFile *file; - GString *file_name; - GString *new_name; - NautilusDirectory *parent; - gboolean have_conflict; - gboolean hash_table_insertion; - gchar *name; - GHashTable *directory_names_table; - GHashTable *new_names_table; - GHashTable *names_conflicts_table; - gint exists; - ConflictData *conflict_data; - - dialog = NAUTILUS_BATCH_RENAME_DIALOG (object); - - dialog->duplicates = NULL; - - if (g_cancellable_is_cancelled (cancellable)) + NautilusBatchRenameDialog *dialog; + GList *new_names; + GList *directory_files; + GList *l1; + GList *l2; + NautilusFile *file; + GString *file_name; + GString *new_name; + NautilusDirectory *parent; + gboolean have_conflict; + gboolean hash_table_insertion; + gchar *name; + GHashTable *directory_names_table; + GHashTable *new_names_table; + GHashTable *names_conflicts_table; + gint exists; + ConflictData *conflict_data; + + dialog = NAUTILUS_BATCH_RENAME_DIALOG (object); + + dialog->duplicates = NULL; + + if (g_cancellable_is_cancelled (cancellable)) + { + return; + } + + g_return_if_fail (g_list_length (dialog->new_names) == g_list_length (dialog->selection)); + + /* If the batch rename is launched in a search, then for each file we have to check for + * conflicts with each file in the file's parent directory */ + if (dialog->distinct_parents != NULL) + { + for (l1 = dialog->distinct_parents; l1 != NULL; l1 = l1->next) + { + if (g_cancellable_is_cancelled (cancellable)) + { return; + } - g_return_if_fail (g_list_length (dialog->new_names) == g_list_length (dialog->selection)); + parent = nautilus_directory_get_by_uri (l1->data); - /* If the batch rename is launched in a search, then for each file we have to check for - * conflicts with each file in the file's parent directory */ - if (dialog->distinct_parents != NULL) { - for (l1 = dialog->distinct_parents; l1 != NULL; l1 = l1->next) { - if (g_cancellable_is_cancelled (cancellable)) - return; - - parent = nautilus_directory_get_by_uri (l1->data); - - nautilus_directory_call_when_ready (parent, - NAUTILUS_FILE_ATTRIBUTE_INFO, - TRUE, - on_call_when_ready, - dialog); - } - - g_task_return_pointer (task, object, NULL); - return; + nautilus_directory_call_when_ready (parent, + NAUTILUS_FILE_ATTRIBUTE_INFO, + TRUE, + on_call_when_ready, + dialog); } - new_names = batch_rename_dialog_get_new_names (dialog); - - directory_names_table = g_hash_table_new_full (g_str_hash, - g_str_equal, - (GDestroyNotify) g_free, - NULL); - new_names_table = g_hash_table_new_full (g_str_hash, - g_str_equal, - (GDestroyNotify) g_free, - NULL); - names_conflicts_table = g_hash_table_new_full (g_str_hash, - g_str_equal, - (GDestroyNotify) g_free, - NULL); - - directory_files = nautilus_directory_get_file_list (dialog->directory); - - for (l1 = new_names; l1 != NULL; l1 = l1->next) { - new_name = l1->data; - hash_table_insertion = g_hash_table_insert (new_names_table, - g_strdup (new_name->str), - GINT_TO_POINTER (TRUE)); - - if (!hash_table_insertion) { - g_hash_table_insert (names_conflicts_table, - g_strdup (new_name->str), - GINT_TO_POINTER (TRUE)); - } + g_task_return_pointer (task, object, NULL); + return; + } + + new_names = batch_rename_dialog_get_new_names (dialog); + + directory_names_table = g_hash_table_new_full (g_str_hash, + g_str_equal, + (GDestroyNotify) g_free, + NULL); + new_names_table = g_hash_table_new_full (g_str_hash, + g_str_equal, + (GDestroyNotify) g_free, + NULL); + names_conflicts_table = g_hash_table_new_full (g_str_hash, + g_str_equal, + (GDestroyNotify) g_free, + NULL); + + directory_files = nautilus_directory_get_file_list (dialog->directory); + + for (l1 = new_names; l1 != NULL; l1 = l1->next) + { + new_name = l1->data; + hash_table_insertion = g_hash_table_insert (new_names_table, + g_strdup (new_name->str), + GINT_TO_POINTER (TRUE)); + + if (!hash_table_insertion) + { + g_hash_table_insert (names_conflicts_table, + g_strdup (new_name->str), + GINT_TO_POINTER (TRUE)); + } + } + + for (l1 = directory_files; l1 != NULL; l1 = l1->next) + { + file = NAUTILUS_FILE (l1->data); + g_hash_table_insert (directory_names_table, + nautilus_file_get_name (file), + GINT_TO_POINTER (TRUE)); + } + + for (l1 = new_names, l2 = dialog->selection; l1 != NULL && l2 != NULL; l1 = l1->next, l2 = l2->next) + { + if (g_cancellable_is_cancelled (cancellable)) + { + g_list_free_full (dialog->duplicates, conflict_data_free); + break; } - for (l1 = directory_files; l1 != NULL; l1 = l1->next) { - file = NAUTILUS_FILE (l1->data); - g_hash_table_insert (directory_names_table, - nautilus_file_get_name (file), - GINT_TO_POINTER (TRUE)); - } + file = NAUTILUS_FILE (l2->data); + new_name = l1->data; - for (l1 = new_names, l2 = dialog->selection; l1 != NULL && l2 != NULL; l1 = l1->next, l2 = l2->next) { - if (g_cancellable_is_cancelled (cancellable)) { - g_list_free_full (dialog->duplicates, conflict_data_free); - break; - } + have_conflict = FALSE; - file = NAUTILUS_FILE (l2->data); - new_name = l1->data; - - have_conflict = FALSE; - - name = nautilus_file_get_name (file); - file_name = g_string_new (name); - - g_free (name); - - /* check for duplicate only if the name has changed */ - if (!g_string_equal (new_name, file_name)) { - /* check with already existing files */ - exists = GPOINTER_TO_INT (g_hash_table_lookup (directory_names_table, new_name->str)); - - if (exists == TRUE && - !file_name_conflicts_with_results (dialog->selection, new_names, new_name, NULL)) { - conflict_data = g_new (ConflictData, 1); - conflict_data->name = g_strdup (new_name->str); - conflict_data->index = g_list_index (dialog->selection, l2->data); - dialog->duplicates = g_list_prepend (dialog->duplicates, - conflict_data); - have_conflict = TRUE; - } - - /* check with files that will result from the batch rename, unless - * this file already has a conflict */ - if (!have_conflict) { - exists = GPOINTER_TO_INT (g_hash_table_lookup (names_conflicts_table, new_name->str)); - - if (exists == TRUE) { - conflict_data = g_new (ConflictData, 1); - conflict_data->name = g_strdup (new_name->str); - conflict_data->index = g_list_index (dialog->selection, l2->data); - dialog->duplicates = g_list_prepend (dialog->duplicates, - conflict_data); - } - } - } + name = nautilus_file_get_name (file); + file_name = g_string_new (name); + + g_free (name); - g_string_free (file_name, TRUE); + /* check for duplicate only if the name has changed */ + if (!g_string_equal (new_name, file_name)) + { + /* check with already existing files */ + exists = GPOINTER_TO_INT (g_hash_table_lookup (directory_names_table, new_name->str)); + + if (exists == TRUE && + !file_name_conflicts_with_results (dialog->selection, new_names, new_name, NULL)) + { + conflict_data = g_new (ConflictData, 1); + conflict_data->name = g_strdup (new_name->str); + conflict_data->index = g_list_index (dialog->selection, l2->data); + dialog->duplicates = g_list_prepend (dialog->duplicates, + conflict_data); + have_conflict = TRUE; + } + + /* check with files that will result from the batch rename, unless + * this file already has a conflict */ + if (!have_conflict) + { + exists = GPOINTER_TO_INT (g_hash_table_lookup (names_conflicts_table, new_name->str)); + + if (exists == TRUE) + { + conflict_data = g_new (ConflictData, 1); + conflict_data->name = g_strdup (new_name->str); + conflict_data->index = g_list_index (dialog->selection, l2->data); + dialog->duplicates = g_list_prepend (dialog->duplicates, + conflict_data); + } + } } - g_hash_table_destroy (directory_names_table); - g_hash_table_destroy (new_names_table); - g_hash_table_destroy (names_conflicts_table); - nautilus_file_list_free (directory_files); - g_list_free_full (new_names, string_free); + g_string_free (file_name, TRUE); + } - dialog->duplicates = g_list_reverse (dialog->duplicates); + g_hash_table_destroy (directory_names_table); + g_hash_table_destroy (new_names_table); + g_hash_table_destroy (names_conflicts_table); + nautilus_file_list_free (directory_files); + g_list_free_full (new_names, string_free); - dialog->checking_conflicts = FALSE; + dialog->duplicates = g_list_reverse (dialog->duplicates); - g_task_return_pointer (task, object, NULL); + dialog->checking_conflicts = FALSE; + g_task_return_pointer (task, object, NULL); } static void @@ -1604,318 +1749,403 @@ file_names_list_has_duplicates_async (NautilusBatchRenameDialog *dialog, GAsyncReadyCallback callback, gpointer user_data) { - if (dialog->checking_conflicts == TRUE) - g_cancellable_cancel (dialog->conflict_cancellable); + if (dialog->checking_conflicts == TRUE) + { + g_cancellable_cancel (dialog->conflict_cancellable); + } - dialog->conflict_cancellable = g_cancellable_new (); + dialog->conflict_cancellable = g_cancellable_new (); - dialog->checking_conflicts = TRUE; - dialog->conflicts_task = g_task_new (dialog, dialog->conflict_cancellable, callback, user_data); + dialog->checking_conflicts = TRUE; + dialog->conflicts_task = g_task_new (dialog, dialog->conflict_cancellable, callback, user_data); - g_task_run_in_thread (dialog->conflicts_task, file_names_list_has_duplicates_async_thread); + g_task_run_in_thread (dialog->conflicts_task, file_names_list_has_duplicates_async_thread); - g_object_unref (dialog->conflicts_task); + g_object_unref (dialog->conflicts_task); } static void update_tags (NautilusBatchRenameDialog *dialog) { - TagData *tag_data; - const gchar *entry_text; - gint character_difference; - gint cursor_position; - - entry_text = gtk_entry_get_text (GTK_ENTRY (dialog->name_entry)); - - if (dialog->use_manual_cursor_position) { - gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), - dialog->cursor_position); - } - - if (dialog->tags_deleted) { - dialog->tags_deleted = FALSE; - gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), - g_utf8_strlen (entry_text, -1)); - } - - g_object_get (dialog->name_entry, "cursor-position", &cursor_position, NULL); - - character_difference = g_utf8_strlen (entry_text, -1) - dialog->name_entry_characters; - dialog->name_entry_characters = g_utf8_strlen (entry_text, -1); - - tag_data = g_hash_table_lookup (dialog->tag_info_table, ORIGINAL_FILE_NAME); - if (tag_data->just_added) { - tag_data->just_added = FALSE; - } else { - if (tag_data->set && cursor_position <= tag_data->position) { - tag_data->position += character_difference; - } - } - - tag_data = g_hash_table_lookup (dialog->tag_info_table, CREATION_DATE); - if (tag_data->just_added) { - tag_data->just_added = FALSE; - } else { - if (tag_data->set && cursor_position <= tag_data->position) { - tag_data->position += character_difference; - } - } - - tag_data = g_hash_table_lookup (dialog->tag_info_table, CAMERA_MODEL); - if (tag_data->just_added) { - tag_data->just_added = FALSE; - } else { - if (tag_data->set && cursor_position <= tag_data->position) { - tag_data->position += character_difference; - } - } - - tag_data = g_hash_table_lookup (dialog->tag_info_table, SEASON_NUMBER); - if (tag_data->just_added) { - tag_data->just_added = FALSE; - } else { - if (tag_data->set && cursor_position <= tag_data->position) { - tag_data->position += character_difference; - } - } - - tag_data = g_hash_table_lookup (dialog->tag_info_table, EPISODE_NUMBER); - if (tag_data->just_added) { - tag_data->just_added = FALSE; - } else { - if (tag_data->set && cursor_position <= tag_data->position) { - tag_data->position += character_difference; - } - } - - tag_data = g_hash_table_lookup (dialog->tag_info_table, TRACK_NUMBER); - if (tag_data->just_added) { - tag_data->just_added = FALSE; - } else { - if (tag_data->set && cursor_position <= tag_data->position) { - tag_data->position += character_difference; - } - } - - tag_data = g_hash_table_lookup (dialog->tag_info_table, ARTIST_NAME); - if (tag_data->just_added) { - tag_data->just_added = FALSE; - } else { - if (tag_data->set && cursor_position <= tag_data->position) { - tag_data->position += character_difference; - } - } - - tag_data = g_hash_table_lookup (dialog->tag_info_table, TITLE); - if (tag_data->just_added) { - tag_data->just_added = FALSE; - } else { - if (tag_data->set && cursor_position <= tag_data->position) { - tag_data->position += character_difference; - } - } - - tag_data = g_hash_table_lookup (dialog->tag_info_table, ALBUM_NAME); - if (tag_data->just_added) { - tag_data->just_added = FALSE; - } else { - if (tag_data->set && cursor_position <= tag_data->position) { - tag_data->position += character_difference; - } - } - - tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING); - if (tag_data->just_added) { - tag_data->just_added = FALSE; - } else { - if (tag_data->set && cursor_position <= tag_data->position) { - tag_data->position += character_difference; - } - } - - tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING0); - if (tag_data->just_added) { - tag_data->just_added = FALSE; - } else { - if (tag_data->set && cursor_position <= tag_data->position) { - tag_data->position += character_difference; - } - } - - tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING00); - if (tag_data->just_added) { - tag_data->just_added = FALSE; - } else { - if (tag_data->set && cursor_position <= tag_data->position) { - tag_data->position += character_difference; - } + TagData *tag_data; + const gchar *entry_text; + gint character_difference; + gint cursor_position; + + entry_text = gtk_entry_get_text (GTK_ENTRY (dialog->name_entry)); + + if (dialog->use_manual_cursor_position) + { + gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), + dialog->cursor_position); + } + + if (dialog->tags_deleted) + { + dialog->tags_deleted = FALSE; + gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), + g_utf8_strlen (entry_text, -1)); + } + + g_object_get (dialog->name_entry, "cursor-position", &cursor_position, NULL); + + character_difference = g_utf8_strlen (entry_text, -1) - dialog->name_entry_characters; + dialog->name_entry_characters = g_utf8_strlen (entry_text, -1); + + tag_data = g_hash_table_lookup (dialog->tag_info_table, ORIGINAL_FILE_NAME); + if (tag_data->just_added) + { + tag_data->just_added = FALSE; + } + else + { + if (tag_data->set && cursor_position <= tag_data->position) + { + tag_data->position += character_difference; + } + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, CREATION_DATE); + if (tag_data->just_added) + { + tag_data->just_added = FALSE; + } + else + { + if (tag_data->set && cursor_position <= tag_data->position) + { + tag_data->position += character_difference; + } + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, CAMERA_MODEL); + if (tag_data->just_added) + { + tag_data->just_added = FALSE; + } + else + { + if (tag_data->set && cursor_position <= tag_data->position) + { + tag_data->position += character_difference; + } + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, SEASON_NUMBER); + if (tag_data->just_added) + { + tag_data->just_added = FALSE; + } + else + { + if (tag_data->set && cursor_position <= tag_data->position) + { + tag_data->position += character_difference; + } + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, EPISODE_NUMBER); + if (tag_data->just_added) + { + tag_data->just_added = FALSE; + } + else + { + if (tag_data->set && cursor_position <= tag_data->position) + { + tag_data->position += character_difference; + } + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, TRACK_NUMBER); + if (tag_data->just_added) + { + tag_data->just_added = FALSE; + } + else + { + if (tag_data->set && cursor_position <= tag_data->position) + { + tag_data->position += character_difference; + } + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, ARTIST_NAME); + if (tag_data->just_added) + { + tag_data->just_added = FALSE; + } + else + { + if (tag_data->set && cursor_position <= tag_data->position) + { + tag_data->position += character_difference; + } + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, TITLE); + if (tag_data->just_added) + { + tag_data->just_added = FALSE; + } + else + { + if (tag_data->set && cursor_position <= tag_data->position) + { + tag_data->position += character_difference; + } + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, ALBUM_NAME); + if (tag_data->just_added) + { + tag_data->just_added = FALSE; + } + else + { + if (tag_data->set && cursor_position <= tag_data->position) + { + tag_data->position += character_difference; + } + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING); + if (tag_data->just_added) + { + tag_data->just_added = FALSE; + } + else + { + if (tag_data->set && cursor_position <= tag_data->position) + { + tag_data->position += character_difference; + } + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING0); + if (tag_data->just_added) + { + tag_data->just_added = FALSE; + } + else + { + if (tag_data->set && cursor_position <= tag_data->position) + { + tag_data->position += character_difference; + } + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING00); + if (tag_data->just_added) + { + tag_data->just_added = FALSE; + } + else + { + if (tag_data->set && cursor_position <= tag_data->position) + { + tag_data->position += character_difference; } + } } static gboolean have_unallowed_character (NautilusBatchRenameDialog *dialog) { - const gchar *entry_text; - gboolean have_unallowed_character_slash; - gboolean have_unallowed_character_dot; - gboolean have_unallowed_character_dotdot; + const gchar *entry_text; + gboolean have_unallowed_character_slash; + gboolean have_unallowed_character_dot; + gboolean have_unallowed_character_dotdot; - have_unallowed_character_slash = FALSE; - have_unallowed_character_dot = FALSE; - have_unallowed_character_dotdot = FALSE; + have_unallowed_character_slash = FALSE; + have_unallowed_character_dot = FALSE; + have_unallowed_character_dotdot = FALSE; - if (dialog->mode == NAUTILUS_BATCH_RENAME_DIALOG_FORMAT) { - entry_text = gtk_entry_get_text (GTK_ENTRY (dialog->name_entry)); - - } else { - entry_text = gtk_entry_get_text (GTK_ENTRY (dialog->replace_entry)); - } - - if (strstr (entry_text, "/") != NULL) { - have_unallowed_character_slash = TRUE; - } - - if (g_strcmp0 (entry_text, ".") == 0) { - have_unallowed_character_dot = TRUE; - } - - if (g_strcmp0 (entry_text, "..") == 0) { - have_unallowed_character_dotdot = TRUE; - } - - if (have_unallowed_character_slash) { - gtk_label_set_label (GTK_LABEL (dialog->conflict_label), - "\"/\" is an unallowed character"); - } + if (dialog->mode == NAUTILUS_BATCH_RENAME_DIALOG_FORMAT) + { + entry_text = gtk_entry_get_text (GTK_ENTRY (dialog->name_entry)); + } + else + { + entry_text = gtk_entry_get_text (GTK_ENTRY (dialog->replace_entry)); + } + + if (strstr (entry_text, "/") != NULL) + { + have_unallowed_character_slash = TRUE; + } + + if (g_strcmp0 (entry_text, ".") == 0) + { + have_unallowed_character_dot = TRUE; + } + + if (g_strcmp0 (entry_text, "..") == 0) + { + have_unallowed_character_dotdot = TRUE; + } + + if (have_unallowed_character_slash) + { + gtk_label_set_label (GTK_LABEL (dialog->conflict_label), + "\"/\" is an unallowed character"); + } - if (have_unallowed_character_dot) { - gtk_label_set_label (GTK_LABEL (dialog->conflict_label), - "\".\" is an unallowed file name"); - } + if (have_unallowed_character_dot) + { + gtk_label_set_label (GTK_LABEL (dialog->conflict_label), + "\".\" is an unallowed file name"); + } - if (have_unallowed_character_dotdot) { - gtk_label_set_label (GTK_LABEL (dialog->conflict_label), - "\"..\" is an unallowed file name"); - } + if (have_unallowed_character_dotdot) + { + gtk_label_set_label (GTK_LABEL (dialog->conflict_label), + "\"..\" is an unallowed file name"); + } - if (have_unallowed_character_slash || have_unallowed_character_dot || have_unallowed_character_dotdot) { - gtk_widget_set_sensitive (dialog->rename_button, FALSE); - gtk_widget_set_sensitive (dialog->conflict_down, FALSE); - gtk_widget_set_sensitive (dialog->conflict_up, FALSE); + if (have_unallowed_character_slash || have_unallowed_character_dot || have_unallowed_character_dotdot) + { + gtk_widget_set_sensitive (dialog->rename_button, FALSE); + gtk_widget_set_sensitive (dialog->conflict_down, FALSE); + gtk_widget_set_sensitive (dialog->conflict_up, FALSE); - gtk_widget_show (dialog->conflict_box); + gtk_widget_show (dialog->conflict_box); - return TRUE; - } else { - gtk_widget_hide (dialog->conflict_box); + return TRUE; + } + else + { + gtk_widget_hide (dialog->conflict_box); - return FALSE; - } + return FALSE; + } } static void update_display_text (NautilusBatchRenameDialog *dialog) { - TagData *tag_data; - TagData *tag_data0; - TagData *tag_data00; - - tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING); - tag_data0 = g_hash_table_lookup (dialog->tag_info_table, NUMBERING0); - tag_data00 = g_hash_table_lookup (dialog->tag_info_table, NUMBERING00); - - if (dialog->conflict_cancellable != NULL) - g_cancellable_cancel (dialog->conflict_cancellable); - - if(dialog->selection == NULL) - return; - - if (dialog->duplicates != NULL) { - g_list_free_full (dialog->duplicates, conflict_data_free); - dialog->duplicates = NULL; - } - - if (have_unallowed_character (dialog)) - return; - - update_tags (dialog); - - if (dialog->new_names != NULL) - g_list_free_full (dialog->new_names, string_free); + TagData *tag_data; + TagData *tag_data0; + TagData *tag_data00; + + tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING); + tag_data0 = g_hash_table_lookup (dialog->tag_info_table, NUMBERING0); + tag_data00 = g_hash_table_lookup (dialog->tag_info_table, NUMBERING00); + + if (dialog->conflict_cancellable != NULL) + { + g_cancellable_cancel (dialog->conflict_cancellable); + } + + if(dialog->selection == NULL) + { + return; + } + + if (dialog->duplicates != NULL) + { + g_list_free_full (dialog->duplicates, conflict_data_free); + dialog->duplicates = NULL; + } - if (!tag_data->set && !tag_data0->set && !tag_data00->set) { - gtk_label_set_label (GTK_LABEL (dialog->numbering_label), ""); - gtk_widget_hide (dialog->numbering_order_button); - } else { - gtk_label_set_label (GTK_LABEL (dialog->numbering_label), _("Automatic Numbering Order")); - gtk_widget_show (dialog->numbering_order_button); - } + if (have_unallowed_character (dialog)) + { + return; + } - dialog->new_names = batch_rename_dialog_get_new_names (dialog); - dialog->checked_parents = 0; + update_tags (dialog); - file_names_list_has_duplicates_async (dialog, - file_names_list_has_duplicates_callback, - NULL); + if (dialog->new_names != NULL) + { + g_list_free_full (dialog->new_names, string_free); + } + + if (!tag_data->set && !tag_data0->set && !tag_data00->set) + { + gtk_label_set_label (GTK_LABEL (dialog->numbering_label), ""); + gtk_widget_hide (dialog->numbering_order_button); + } + else + { + gtk_label_set_label (GTK_LABEL (dialog->numbering_label), _("Automatic Numbering Order")); + gtk_widget_show (dialog->numbering_order_button); + } + + dialog->new_names = batch_rename_dialog_get_new_names (dialog); + dialog->checked_parents = 0; + + file_names_list_has_duplicates_async (dialog, + file_names_list_has_duplicates_callback, + NULL); } static void file_names_widget_entry_on_changed (NautilusBatchRenameDialog *dialog) { - update_display_text (dialog); + update_display_text (dialog); } static void batch_rename_dialog_mode_changed (NautilusBatchRenameDialog *dialog) { - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->format_mode_button))) { - gtk_stack_set_visible_child_name (GTK_STACK (dialog->mode_stack), "format"); - - dialog->mode = NAUTILUS_BATCH_RENAME_DIALOG_FORMAT; + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->format_mode_button))) + { + gtk_stack_set_visible_child_name (GTK_STACK (dialog->mode_stack), "format"); - gtk_entry_grab_focus_without_selecting (GTK_ENTRY (dialog->name_entry)); + dialog->mode = NAUTILUS_BATCH_RENAME_DIALOG_FORMAT; - } else { - gtk_stack_set_visible_child_name (GTK_STACK (dialog->mode_stack), "replace"); + gtk_entry_grab_focus_without_selecting (GTK_ENTRY (dialog->name_entry)); + } + else + { + gtk_stack_set_visible_child_name (GTK_STACK (dialog->mode_stack), "replace"); - dialog->mode = NAUTILUS_BATCH_RENAME_DIALOG_REPLACE; + dialog->mode = NAUTILUS_BATCH_RENAME_DIALOG_REPLACE; - gtk_entry_grab_focus_without_selecting (GTK_ENTRY (dialog->find_entry)); - } + gtk_entry_grab_focus_without_selecting (GTK_ENTRY (dialog->find_entry)); + } - update_display_text (dialog); + update_display_text (dialog); } static void add_button_clicked (NautilusBatchRenameDialog *dialog) { - if (gtk_widget_is_visible (dialog->add_popover)) - gtk_widget_set_visible (dialog->add_popover, FALSE); - else - gtk_widget_set_visible (dialog->add_popover, TRUE); + if (gtk_widget_is_visible (dialog->add_popover)) + { + gtk_widget_set_visible (dialog->add_popover, FALSE); + } + else + { + gtk_widget_set_visible (dialog->add_popover, TRUE); + } } static void add_popover_closed (NautilusBatchRenameDialog *dialog) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->add_button), FALSE); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->add_button), FALSE); } static void numbering_order_button_clicked (NautilusBatchRenameDialog *dialog) { - if (gtk_widget_is_visible (dialog->numbering_order_popover)) - gtk_widget_set_visible (dialog->numbering_order_popover, FALSE); - else - gtk_widget_set_visible (dialog->numbering_order_popover, TRUE); + if (gtk_widget_is_visible (dialog->numbering_order_popover)) + { + gtk_widget_set_visible (dialog->numbering_order_popover, FALSE); + } + else + { + gtk_widget_set_visible (dialog->numbering_order_popover, TRUE); + } } static void numbering_order_popover_closed (NautilusBatchRenameDialog *dialog) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->numbering_order_button), FALSE); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->numbering_order_button), FALSE); } void @@ -1923,142 +2153,176 @@ nautilus_batch_rename_dialog_query_finished (NautilusBatchRenameDialog *dialog, GHashTable *hash_table, GList *selection_metadata) { - GMenuItem *first_created; - GMenuItem *last_created; - FileMetadata *metadata; - TagData *tag_data; - - /* for files with no metadata */ - if (hash_table != NULL && g_hash_table_size (hash_table) == 0) { - g_hash_table_destroy (hash_table); - - hash_table = NULL; - } - - if (hash_table == NULL) - dialog->create_date = NULL; - else - dialog->create_date = hash_table; - - if (dialog->create_date != NULL) { - first_created = g_menu_item_new ("First Created", - "dialog.numbering-order-changed('first-created')"); - - g_menu_append_item (dialog->numbering_order_menu, first_created); - - last_created = g_menu_item_new ("Last Created", - "dialog.numbering-order-changed('last-created')"); - - g_menu_append_item (dialog->numbering_order_menu, last_created); - - } - - dialog->selection_metadata = selection_metadata; - metadata = selection_metadata->data; - - tag_data = g_hash_table_lookup (dialog->tag_info_table, CREATION_DATE); - if (metadata->creation_date == NULL || g_strcmp0 (metadata->creation_date->str, "") == 0) { - disable_action (dialog, "add-creation-date-tag"); - tag_data->available = FALSE; - } else { - tag_data->set = FALSE; - } + GMenuItem *first_created; + GMenuItem *last_created; + FileMetadata *metadata; + TagData *tag_data; + + /* for files with no metadata */ + if (hash_table != NULL && g_hash_table_size (hash_table) == 0) + { + g_hash_table_destroy (hash_table); + + hash_table = NULL; + } + + if (hash_table == NULL) + { + dialog->create_date = NULL; + } + else + { + dialog->create_date = hash_table; + } + + if (dialog->create_date != NULL) + { + first_created = g_menu_item_new ("First Created", + "dialog.numbering-order-changed('first-created')"); + + g_menu_append_item (dialog->numbering_order_menu, first_created); + + last_created = g_menu_item_new ("Last Created", + "dialog.numbering-order-changed('last-created')"); + + g_menu_append_item (dialog->numbering_order_menu, last_created); + } + + dialog->selection_metadata = selection_metadata; + metadata = selection_metadata->data; + + tag_data = g_hash_table_lookup (dialog->tag_info_table, CREATION_DATE); + if (metadata->creation_date == NULL || g_strcmp0 (metadata->creation_date->str, "") == 0) + { + disable_action (dialog, "add-creation-date-tag"); + tag_data->available = FALSE; + } + else + { + tag_data->set = FALSE; + } - tag_data = g_hash_table_lookup (dialog->tag_info_table, CAMERA_MODEL); - if (metadata->equipment == NULL || g_strcmp0 (metadata->equipment->str, "") == 0) { - disable_action (dialog, "add-equipment-tag"); - tag_data->available = FALSE; - } else { - tag_data->set = FALSE; - } + tag_data = g_hash_table_lookup (dialog->tag_info_table, CAMERA_MODEL); + if (metadata->equipment == NULL || g_strcmp0 (metadata->equipment->str, "") == 0) + { + disable_action (dialog, "add-equipment-tag"); + tag_data->available = FALSE; + } + else + { + tag_data->set = FALSE; + } - tag_data = g_hash_table_lookup (dialog->tag_info_table, SEASON_NUMBER); - if (metadata->season == NULL || g_strcmp0 (metadata->season->str, "") == 0) { - disable_action (dialog, "add-season-tag"); - tag_data->available = FALSE; - } else { - tag_data->set = FALSE; - } + tag_data = g_hash_table_lookup (dialog->tag_info_table, SEASON_NUMBER); + if (metadata->season == NULL || g_strcmp0 (metadata->season->str, "") == 0) + { + disable_action (dialog, "add-season-tag"); + tag_data->available = FALSE; + } + else + { + tag_data->set = FALSE; + } - tag_data = g_hash_table_lookup (dialog->tag_info_table, EPISODE_NUMBER); - if (metadata->episode_number == NULL || g_strcmp0 (metadata->episode_number->str, "") == 0) { - disable_action (dialog, "add-episode-tag"); - tag_data->available = FALSE; - } else { - tag_data->set = FALSE; - } + tag_data = g_hash_table_lookup (dialog->tag_info_table, EPISODE_NUMBER); + if (metadata->episode_number == NULL || g_strcmp0 (metadata->episode_number->str, "") == 0) + { + disable_action (dialog, "add-episode-tag"); + tag_data->available = FALSE; + } + else + { + tag_data->set = FALSE; + } - tag_data = g_hash_table_lookup (dialog->tag_info_table, TRACK_NUMBER); - if (metadata->track_number == NULL || g_strcmp0 (metadata->track_number->str, "") == 0) { - disable_action (dialog, "add-track-number-tag"); - tag_data->available = FALSE; - } else { - tag_data->set = FALSE; - } + tag_data = g_hash_table_lookup (dialog->tag_info_table, TRACK_NUMBER); + if (metadata->track_number == NULL || g_strcmp0 (metadata->track_number->str, "") == 0) + { + disable_action (dialog, "add-track-number-tag"); + tag_data->available = FALSE; + } + else + { + tag_data->set = FALSE; + } - tag_data = g_hash_table_lookup (dialog->tag_info_table, ARTIST_NAME); - if (metadata->artist_name == NULL || g_strcmp0 (metadata->artist_name->str, "") == 0) { - disable_action (dialog, "add-artist-name-tag"); - tag_data->available = FALSE; - } else { - tag_data->set = FALSE; - } + tag_data = g_hash_table_lookup (dialog->tag_info_table, ARTIST_NAME); + if (metadata->artist_name == NULL || g_strcmp0 (metadata->artist_name->str, "") == 0) + { + disable_action (dialog, "add-artist-name-tag"); + tag_data->available = FALSE; + } + else + { + tag_data->set = FALSE; + } - tag_data = g_hash_table_lookup (dialog->tag_info_table, TITLE); - if (metadata->title == NULL || g_strcmp0 (metadata->title->str, "") == 0) { - disable_action (dialog, "add-title-tag"); - tag_data->available = FALSE; - } else { - tag_data->set = FALSE; - } + tag_data = g_hash_table_lookup (dialog->tag_info_table, TITLE); + if (metadata->title == NULL || g_strcmp0 (metadata->title->str, "") == 0) + { + disable_action (dialog, "add-title-tag"); + tag_data->available = FALSE; + } + else + { + tag_data->set = FALSE; + } - tag_data = g_hash_table_lookup (dialog->tag_info_table, ALBUM_NAME); - if (metadata->album_name == NULL || g_strcmp0 (metadata->album_name->str, "") == 0) { - disable_action (dialog, "add-album-name-tag"); - tag_data->available = FALSE; - } else { - tag_data->set = FALSE; - } + tag_data = g_hash_table_lookup (dialog->tag_info_table, ALBUM_NAME); + if (metadata->album_name == NULL || g_strcmp0 (metadata->album_name->str, "") == 0) + { + disable_action (dialog, "add-album-name-tag"); + tag_data->available = FALSE; + } + else + { + tag_data->set = FALSE; + } } static void update_row_shadowing (GtkWidget *row, gboolean shown) { - GtkStyleContext *context; - GtkStateFlags flags; - - if (!GTK_IS_LIST_BOX_ROW (row)) - return; - - context = gtk_widget_get_style_context (row); - flags = gtk_style_context_get_state (context); - - if (shown) - flags |= GTK_STATE_PRELIGHT; - else - flags &= ~GTK_STATE_PRELIGHT; - - gtk_style_context_set_state (context, flags); - + GtkStyleContext *context; + GtkStateFlags flags; + + if (!GTK_IS_LIST_BOX_ROW (row)) + { + return; + } + + context = gtk_widget_get_style_context (row); + flags = gtk_style_context_get_state (context); + + if (shown) + { + flags |= GTK_STATE_PRELIGHT; + } + else + { + flags &= ~GTK_STATE_PRELIGHT; + } + + gtk_style_context_set_state (context, flags); } static gboolean on_leave_event (GtkWidget *widget, - GdkEventMotion *event, - gpointer user_data) + GdkEventMotion *event, + gpointer user_data) { - NautilusBatchRenameDialog *dialog; + NautilusBatchRenameDialog *dialog; - dialog = NAUTILUS_BATCH_RENAME_DIALOG (user_data); + dialog = NAUTILUS_BATCH_RENAME_DIALOG (user_data); - update_row_shadowing (dialog->preselected_row1, FALSE); - update_row_shadowing (dialog->preselected_row2, FALSE); + update_row_shadowing (dialog->preselected_row1, FALSE); + update_row_shadowing (dialog->preselected_row2, FALSE); - dialog->preselected_row1 = NULL; - dialog->preselected_row2 = NULL; + dialog->preselected_row1 = NULL; + dialog->preselected_row2 = NULL; - return FALSE; + return FALSE; } static gboolean @@ -2066,76 +2330,79 @@ on_motion (GtkWidget *widget, GdkEventMotion *event, gpointer user_data) { - GtkListBoxRow *row; - NautilusBatchRenameDialog *dialog; - - dialog = NAUTILUS_BATCH_RENAME_DIALOG (user_data); - - if (dialog->preselected_row1 && dialog->preselected_row2) { - update_row_shadowing (dialog->preselected_row1, FALSE); - update_row_shadowing (dialog->preselected_row2, FALSE); - } - - if (widget == dialog->result_listbox) { - row = gtk_list_box_get_row_at_y (GTK_LIST_BOX (dialog->original_name_listbox), event->y); - update_row_shadowing (GTK_WIDGET (row), TRUE); - dialog->preselected_row1 = GTK_WIDGET (row); - - row = gtk_list_box_get_row_at_y (GTK_LIST_BOX (dialog->arrow_listbox), event->y); - update_row_shadowing (GTK_WIDGET (row), TRUE); - dialog->preselected_row2 = GTK_WIDGET (row); + GtkListBoxRow *row; + NautilusBatchRenameDialog *dialog; - } - - if (widget == dialog->arrow_listbox) { - row = gtk_list_box_get_row_at_y (GTK_LIST_BOX (dialog->original_name_listbox), event->y); - update_row_shadowing (GTK_WIDGET (row), TRUE); - dialog->preselected_row1 = GTK_WIDGET (row); - - row = gtk_list_box_get_row_at_y (GTK_LIST_BOX (dialog->result_listbox), event->y); - update_row_shadowing (GTK_WIDGET (row), TRUE); - dialog->preselected_row2 = GTK_WIDGET (row); - } - - if (widget == dialog->original_name_listbox) { - row = gtk_list_box_get_row_at_y (GTK_LIST_BOX (dialog->result_listbox), event->y); - update_row_shadowing (GTK_WIDGET (row), TRUE); - dialog->preselected_row1 = GTK_WIDGET (row); + dialog = NAUTILUS_BATCH_RENAME_DIALOG (user_data); - row = gtk_list_box_get_row_at_y (GTK_LIST_BOX (dialog->arrow_listbox), event->y); - update_row_shadowing (GTK_WIDGET (row), TRUE); - dialog->preselected_row2 = GTK_WIDGET (row); - } - - return FALSE; + if (dialog->preselected_row1 && dialog->preselected_row2) + { + update_row_shadowing (dialog->preselected_row1, FALSE); + update_row_shadowing (dialog->preselected_row2, FALSE); + } + + if (widget == dialog->result_listbox) + { + row = gtk_list_box_get_row_at_y (GTK_LIST_BOX (dialog->original_name_listbox), event->y); + update_row_shadowing (GTK_WIDGET (row), TRUE); + dialog->preselected_row1 = GTK_WIDGET (row); + + row = gtk_list_box_get_row_at_y (GTK_LIST_BOX (dialog->arrow_listbox), event->y); + update_row_shadowing (GTK_WIDGET (row), TRUE); + dialog->preselected_row2 = GTK_WIDGET (row); + } + + if (widget == dialog->arrow_listbox) + { + row = gtk_list_box_get_row_at_y (GTK_LIST_BOX (dialog->original_name_listbox), event->y); + update_row_shadowing (GTK_WIDGET (row), TRUE); + dialog->preselected_row1 = GTK_WIDGET (row); + + row = gtk_list_box_get_row_at_y (GTK_LIST_BOX (dialog->result_listbox), event->y); + update_row_shadowing (GTK_WIDGET (row), TRUE); + dialog->preselected_row2 = GTK_WIDGET (row); + } + + if (widget == dialog->original_name_listbox) + { + row = gtk_list_box_get_row_at_y (GTK_LIST_BOX (dialog->result_listbox), event->y); + update_row_shadowing (GTK_WIDGET (row), TRUE); + dialog->preselected_row1 = GTK_WIDGET (row); + + row = gtk_list_box_get_row_at_y (GTK_LIST_BOX (dialog->arrow_listbox), event->y); + update_row_shadowing (GTK_WIDGET (row), TRUE); + dialog->preselected_row2 = GTK_WIDGET (row); + } + + return FALSE; } static void nautilus_batch_rename_dialog_initialize_actions (NautilusBatchRenameDialog *dialog) { - GAction *action; + GAction *action; - dialog->action_group = G_ACTION_GROUP (g_simple_action_group_new ()); + dialog->action_group = G_ACTION_GROUP (g_simple_action_group_new ()); - g_action_map_add_action_entries (G_ACTION_MAP (dialog->action_group), - dialog_entries, - G_N_ELEMENTS (dialog_entries), - dialog); - gtk_widget_insert_action_group (GTK_WIDGET (dialog), - "dialog", - G_ACTION_GROUP (dialog->action_group)); + g_action_map_add_action_entries (G_ACTION_MAP (dialog->action_group), + dialog_entries, + G_N_ELEMENTS (dialog_entries), + dialog); + gtk_widget_insert_action_group (GTK_WIDGET (dialog), + "dialog", + G_ACTION_GROUP (dialog->action_group)); - action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), - "add-original-file-name-tag"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), FALSE); + action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), + "add-original-file-name-tag"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), FALSE); - check_metadata_for_selection (dialog, dialog->selection); + check_metadata_for_selection (dialog, dialog->selection); } static void file_names_widget_on_activate (NautilusBatchRenameDialog *dialog) { - prepare_batch_rename (dialog); + prepare_batch_rename (dialog); } static gboolean @@ -2145,83 +2412,92 @@ remove_tag (NautilusBatchRenameDialog *dialog, gint keyval, gboolean is_modifier) { - TagData *tag_data; - gint cursor_position; - GString *new_entry_text; - GString *entry_text; - gboolean delete_tag; - GAction *action; - - delete_tag = FALSE; + TagData *tag_data; + gint cursor_position; + GString *new_entry_text; + GString *entry_text; + gboolean delete_tag; + GAction *action; - g_object_get (dialog->name_entry, "cursor-position", &cursor_position, NULL); + delete_tag = FALSE; - tag_data = g_hash_table_lookup (dialog->tag_info_table, tag_name); + g_object_get (dialog->name_entry, "cursor-position", &cursor_position, NULL); - entry_text = g_string_new (gtk_entry_get_text (GTK_ENTRY (dialog->name_entry))); + tag_data = g_hash_table_lookup (dialog->tag_info_table, tag_name); - if (!tag_data->set) - return FALSE; + entry_text = g_string_new (gtk_entry_get_text (GTK_ENTRY (dialog->name_entry))); - if (keyval == GDK_KEY_BackSpace) { - if (cursor_position > tag_data->position && - cursor_position <= tag_data->position + g_utf8_strlen (tag_name, -1)) { - delete_tag = TRUE; - } - } + if (!tag_data->set) + { + return FALSE; + } - if (keyval == GDK_KEY_Delete) { - if (cursor_position >= tag_data->position && - cursor_position < tag_data->position + g_utf8_strlen (tag_name, -1)) { - delete_tag = TRUE; - } + if (keyval == GDK_KEY_BackSpace) + { + if (cursor_position > tag_data->position && + cursor_position <= tag_data->position + g_utf8_strlen (tag_name, -1)) + { + delete_tag = TRUE; } + } - if (!is_modifier && - keyval != GDK_KEY_Left && - keyval != GDK_KEY_Right && - keyval != GDK_KEY_Delete && - keyval != GDK_KEY_Return && - keyval != GDK_KEY_Escape && - keyval != GDK_KEY_Tab && - keyval != GDK_KEY_End && - keyval != GDK_KEY_Home) { - if (cursor_position > tag_data->position && - cursor_position < tag_data->position + g_utf8_strlen (tag_name, -1)) { - delete_tag = TRUE; - } + if (keyval == GDK_KEY_Delete) + { + if (cursor_position >= tag_data->position && + cursor_position < tag_data->position + g_utf8_strlen (tag_name, -1)) + { + delete_tag = TRUE; + } + } + + if (!is_modifier && + keyval != GDK_KEY_Left && + keyval != GDK_KEY_Right && + keyval != GDK_KEY_Delete && + keyval != GDK_KEY_Return && + keyval != GDK_KEY_Escape && + keyval != GDK_KEY_Tab && + keyval != GDK_KEY_End && + keyval != GDK_KEY_Home) + { + if (cursor_position > tag_data->position && + cursor_position < tag_data->position + g_utf8_strlen (tag_name, -1)) + { + delete_tag = TRUE; } + } - if (delete_tag) { - action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), - action_name); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + if (delete_tag) + { + action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), + action_name); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); - new_entry_text = g_string_new (""); - new_entry_text = g_string_append_len (new_entry_text, - entry_text->str, - tag_data->position); - new_entry_text = g_string_append (new_entry_text, - g_utf8_offset_to_pointer (entry_text->str, - tag_data->position + g_utf8_strlen (tag_name, -1))); + new_entry_text = g_string_new (""); + new_entry_text = g_string_append_len (new_entry_text, + entry_text->str, + tag_data->position); + new_entry_text = g_string_append (new_entry_text, + g_utf8_offset_to_pointer (entry_text->str, + tag_data->position + g_utf8_strlen (tag_name, -1))); - tag_data->set = FALSE; - dialog->cursor_position = tag_data->position; - dialog->use_manual_cursor_position = TRUE; - gtk_entry_set_text (GTK_ENTRY (dialog->name_entry), new_entry_text->str); - gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), tag_data->position); - dialog->use_manual_cursor_position = FALSE; + tag_data->set = FALSE; + dialog->cursor_position = tag_data->position; + dialog->use_manual_cursor_position = TRUE; + gtk_entry_set_text (GTK_ENTRY (dialog->name_entry), new_entry_text->str); + gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), tag_data->position); + dialog->use_manual_cursor_position = FALSE; - g_string_free (new_entry_text, TRUE); - g_string_free (entry_text, TRUE); + g_string_free (new_entry_text, TRUE); + g_string_free (entry_text, TRUE); - return TRUE; - } + return TRUE; + } - return FALSE; + return FALSE; } -static GString* +static GString * remove_tag_selection (NautilusBatchRenameDialog *dialog, GString *old_entry_text, gchar *action_name, @@ -2229,34 +2505,37 @@ remove_tag_selection (NautilusBatchRenameDialog *dialog, gint start, gint end) { - TagData *tag_data; - GAction *action; - GString *new_entry_text; - - new_entry_text = NULL; + TagData *tag_data; + GAction *action; + GString *new_entry_text; - tag_data = g_hash_table_lookup (dialog->tag_info_table, tag_name); + new_entry_text = NULL; - if (tag_data->set && tag_data->original_position < end && - tag_data->original_position + g_utf8_strlen (tag_name, -1) > start) { - new_entry_text = g_string_new (""); - new_entry_text = g_string_append_len (new_entry_text, - old_entry_text->str, - tag_data->new_position); - new_entry_text = g_string_append (new_entry_text, - g_utf8_offset_to_pointer (old_entry_text->str, - tag_data->new_position + g_utf8_strlen (tag_name, -1))); + tag_data = g_hash_table_lookup (dialog->tag_info_table, tag_name); - tag_data->set = FALSE; + if (tag_data->set && tag_data->original_position < end && + tag_data->original_position + g_utf8_strlen (tag_name, -1) > start) + { + new_entry_text = g_string_new (""); + new_entry_text = g_string_append_len (new_entry_text, + old_entry_text->str, + tag_data->new_position); + new_entry_text = g_string_append (new_entry_text, + g_utf8_offset_to_pointer (old_entry_text->str, + tag_data->new_position + g_utf8_strlen (tag_name, -1))); - action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), - action_name); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); - } + tag_data->set = FALSE; - if (new_entry_text == NULL) - return g_string_new (old_entry_text->str); - return new_entry_text; + action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), + action_name); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + } + + if (new_entry_text == NULL) + { + return g_string_new (old_entry_text->str); + } + return new_entry_text; } static void @@ -2264,756 +2543,859 @@ update_tag_position (NautilusBatchRenameDialog *dialog, gchar *tag_name, GString *new_entry_text) { - TagData *tag_data; + TagData *tag_data; - tag_data = g_hash_table_lookup (dialog->tag_info_table, tag_name); + tag_data = g_hash_table_lookup (dialog->tag_info_table, tag_name); - if (tag_data->set) { - tag_data->original_position = tag_data->position; - tag_data->new_position = g_utf8_pointer_to_offset(new_entry_text->str, - g_strrstr (new_entry_text->str, tag_name)); - } + if (tag_data->set) + { + tag_data->original_position = tag_data->position; + tag_data->new_position = g_utf8_pointer_to_offset (new_entry_text->str, + g_strrstr (new_entry_text->str, tag_name)); + } } static gboolean -on_key_press_event (GtkWidget *widget, - GdkEventKey *event, - gpointer user_data) +on_key_press_event (GtkWidget *widget, + GdkEventKey *event, + gpointer user_data) { - NautilusBatchRenameDialog *dialog; - gint keyval; - GdkEvent *gdk_event; - GString *old_entry_text; - GString *new_entry_text; - gboolean entry_has_selection; - gint start; - gint end; - gboolean tag_removed = FALSE; - TagData *tag_data; - gint minimum_tag_position; - GAction *action; - - gdk_event = (GdkEvent *) event; - - dialog = NAUTILUS_BATCH_RENAME_DIALOG (user_data); - - keyval = event->keyval; - - entry_has_selection = (gtk_editable_get_selection_bounds (GTK_EDITABLE (dialog->name_entry), - &start, - &end)); - - if (event->state & GDK_CONTROL_MASK) - return GDK_EVENT_PROPAGATE; - - if (entry_has_selection && - ((keyval == GDK_KEY_Delete || keyval == GDK_KEY_BackSpace) || - (!gdk_event->key.is_modifier && - keyval != GDK_KEY_Left && - keyval != GDK_KEY_Right && - keyval != GDK_KEY_Return && - keyval != GDK_KEY_Escape && - keyval != GDK_KEY_Tab && - keyval != GDK_KEY_End && - keyval != GDK_KEY_Home))) { - old_entry_text = g_string_new (gtk_entry_get_text (GTK_ENTRY (dialog->name_entry))); - - minimum_tag_position = G_MAXINT; - - tag_data = g_hash_table_lookup (dialog->tag_info_table, ORIGINAL_FILE_NAME); - if (tag_data->set) { - update_tag_position (dialog, ORIGINAL_FILE_NAME, old_entry_text); - new_entry_text = remove_tag_selection (dialog, - old_entry_text, - "add-original-file-name-tag", - ORIGINAL_FILE_NAME, - start, - end); - - if (!g_string_equal (new_entry_text, old_entry_text)) { - if (tag_data->position < minimum_tag_position) - minimum_tag_position = tag_data->position; - - tag_removed = TRUE; - } - g_string_free (old_entry_text, TRUE); - old_entry_text = new_entry_text; - } + NautilusBatchRenameDialog *dialog; + gint keyval; + GdkEvent *gdk_event; + GString *old_entry_text; + GString *new_entry_text; + gboolean entry_has_selection; + gint start; + gint end; + gboolean tag_removed = FALSE; + TagData *tag_data; + gint minimum_tag_position; + GAction *action; + + gdk_event = (GdkEvent *) event; + + dialog = NAUTILUS_BATCH_RENAME_DIALOG (user_data); + + keyval = event->keyval; + + entry_has_selection = (gtk_editable_get_selection_bounds (GTK_EDITABLE (dialog->name_entry), + &start, + &end)); + + if (event->state & GDK_CONTROL_MASK) + { + return GDK_EVENT_PROPAGATE; + } + + if (entry_has_selection && + ((keyval == GDK_KEY_Delete || keyval == GDK_KEY_BackSpace) || + (!gdk_event->key.is_modifier && + keyval != GDK_KEY_Left && + keyval != GDK_KEY_Right && + keyval != GDK_KEY_Return && + keyval != GDK_KEY_Escape && + keyval != GDK_KEY_Tab && + keyval != GDK_KEY_End && + keyval != GDK_KEY_Home))) + { + old_entry_text = g_string_new (gtk_entry_get_text (GTK_ENTRY (dialog->name_entry))); + + minimum_tag_position = G_MAXINT; - tag_data = g_hash_table_lookup (dialog->tag_info_table, CREATION_DATE); - if (tag_data->set) { - update_tag_position (dialog, CREATION_DATE, old_entry_text); - new_entry_text = remove_tag_selection (dialog, - old_entry_text, - "add-creation-date-tag", - CREATION_DATE, - start, - end); - - if (!g_string_equal (new_entry_text, old_entry_text)) { - if (tag_data->position < minimum_tag_position) - minimum_tag_position = tag_data->position; - - tag_removed = TRUE; - } - - g_string_free (old_entry_text, TRUE); - old_entry_text = new_entry_text; + tag_data = g_hash_table_lookup (dialog->tag_info_table, ORIGINAL_FILE_NAME); + if (tag_data->set) + { + update_tag_position (dialog, ORIGINAL_FILE_NAME, old_entry_text); + new_entry_text = remove_tag_selection (dialog, + old_entry_text, + "add-original-file-name-tag", + ORIGINAL_FILE_NAME, + start, + end); + + if (!g_string_equal (new_entry_text, old_entry_text)) + { + if (tag_data->position < minimum_tag_position) + { + minimum_tag_position = tag_data->position; } - tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING); - if (tag_data->set) { - update_tag_position (dialog, NUMBERING, old_entry_text); - new_entry_text = remove_tag_selection (dialog, - old_entry_text, - "add-numbering-tag-zero", - NUMBERING, - start, - end); - - action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), - "add-numbering-tag-one"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); - - action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), - "add-numbering-tag-two"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); - - if (!g_string_equal (new_entry_text, old_entry_text)) { - if (tag_data->position < minimum_tag_position) - minimum_tag_position = tag_data->position; - - tag_removed = TRUE; - } - g_string_free (old_entry_text, TRUE); - old_entry_text = new_entry_text; - } + tag_removed = TRUE; + } + g_string_free (old_entry_text, TRUE); + old_entry_text = new_entry_text; + } - tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING0); - if (tag_data->set) { - update_tag_position (dialog, NUMBERING0, old_entry_text); - new_entry_text = remove_tag_selection (dialog, - old_entry_text, - "add-numbering-tag-one", - NUMBERING0, - start, - end); - - action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), - "add-numbering-tag-zero"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); - - action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), - "add-numbering-tag-two"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); - - if (!g_string_equal (new_entry_text, old_entry_text)) { - if (tag_data->position < minimum_tag_position) - minimum_tag_position = tag_data->position; - - tag_removed = TRUE; - } - g_string_free (old_entry_text, TRUE); - old_entry_text = new_entry_text; + tag_data = g_hash_table_lookup (dialog->tag_info_table, CREATION_DATE); + if (tag_data->set) + { + update_tag_position (dialog, CREATION_DATE, old_entry_text); + new_entry_text = remove_tag_selection (dialog, + old_entry_text, + "add-creation-date-tag", + CREATION_DATE, + start, + end); + + if (!g_string_equal (new_entry_text, old_entry_text)) + { + if (tag_data->position < minimum_tag_position) + { + minimum_tag_position = tag_data->position; } - tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING00); - if (tag_data->set) { - update_tag_position (dialog, NUMBERING00, old_entry_text); - new_entry_text = remove_tag_selection (dialog, - old_entry_text, - "add-numbering-tag-two", - NUMBERING0, - start, - end); - - action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), - "add-numbering-tag-one"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); - - action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), - "add-numbering-tag-zero"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); - - if (!g_string_equal (new_entry_text, old_entry_text)) { - if (tag_data->position < minimum_tag_position) - minimum_tag_position = tag_data->position; - - tag_removed = TRUE; - } - g_string_free (old_entry_text, TRUE); - old_entry_text = new_entry_text; - } + tag_removed = TRUE; + } - tag_data = g_hash_table_lookup (dialog->tag_info_table, CAMERA_MODEL); - if (tag_data->set) { - update_tag_position (dialog, CAMERA_MODEL, old_entry_text); - new_entry_text = remove_tag_selection (dialog, - old_entry_text, - "add-equipment-tag", - CAMERA_MODEL, - start, - end); - - if (!g_string_equal (new_entry_text, old_entry_text)) { - if (tag_data->position < minimum_tag_position) - minimum_tag_position = tag_data->position; - - tag_removed = TRUE; - } - g_string_free (old_entry_text, TRUE); - old_entry_text = new_entry_text; - } + g_string_free (old_entry_text, TRUE); + old_entry_text = new_entry_text; + } - tag_data = g_hash_table_lookup (dialog->tag_info_table, TRACK_NUMBER); - if (tag_data->set) { - update_tag_position (dialog, TRACK_NUMBER, old_entry_text); - new_entry_text = remove_tag_selection (dialog, - old_entry_text, - "add-track-number-tag", - TRACK_NUMBER, - start, - end); - - if (!g_string_equal (new_entry_text, old_entry_text)) { - if (tag_data->position < minimum_tag_position) - minimum_tag_position = tag_data->position; - - tag_removed = TRUE; - } - g_string_free (old_entry_text, TRUE); - old_entry_text = new_entry_text; + tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING); + if (tag_data->set) + { + update_tag_position (dialog, NUMBERING, old_entry_text); + new_entry_text = remove_tag_selection (dialog, + old_entry_text, + "add-numbering-tag-zero", + NUMBERING, + start, + end); + + action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), + "add-numbering-tag-one"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + + action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), + "add-numbering-tag-two"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + + if (!g_string_equal (new_entry_text, old_entry_text)) + { + if (tag_data->position < minimum_tag_position) + { + minimum_tag_position = tag_data->position; } - tag_data = g_hash_table_lookup (dialog->tag_info_table, SEASON_NUMBER); - if (tag_data->set) { - update_tag_position (dialog, SEASON_NUMBER, old_entry_text); - new_entry_text = remove_tag_selection (dialog, - old_entry_text, - "add-season-tag", - SEASON_NUMBER, - start, - end); - - if (!g_string_equal (new_entry_text, old_entry_text)) { - if (tag_data->position < minimum_tag_position) - minimum_tag_position = tag_data->position; - - tag_removed = TRUE; - } - g_string_free (old_entry_text, TRUE); - old_entry_text = new_entry_text; - } + tag_removed = TRUE; + } + g_string_free (old_entry_text, TRUE); + old_entry_text = new_entry_text; + } - tag_data = g_hash_table_lookup (dialog->tag_info_table, EPISODE_NUMBER); - if (tag_data->set) { - update_tag_position (dialog, EPISODE_NUMBER, old_entry_text); - new_entry_text = remove_tag_selection (dialog, - old_entry_text, - "add-episode-tag", - EPISODE_NUMBER, - start, - end); - - if (!g_string_equal (new_entry_text, old_entry_text)) { - if (tag_data->position < minimum_tag_position) - minimum_tag_position = tag_data->position; - - tag_removed = TRUE; - } - g_string_free (old_entry_text, TRUE); - old_entry_text = new_entry_text; + tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING0); + if (tag_data->set) + { + update_tag_position (dialog, NUMBERING0, old_entry_text); + new_entry_text = remove_tag_selection (dialog, + old_entry_text, + "add-numbering-tag-one", + NUMBERING0, + start, + end); + + action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), + "add-numbering-tag-zero"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + + action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), + "add-numbering-tag-two"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + + if (!g_string_equal (new_entry_text, old_entry_text)) + { + if (tag_data->position < minimum_tag_position) + { + minimum_tag_position = tag_data->position; } - tag_data = g_hash_table_lookup (dialog->tag_info_table, ARTIST_NAME); - if (tag_data->set) { - update_tag_position (dialog, ARTIST_NAME, old_entry_text); - new_entry_text = remove_tag_selection (dialog, - old_entry_text, - "add-artist-name-tag", - ARTIST_NAME, - start, - end); - - if (!g_string_equal (new_entry_text, old_entry_text)) { - if (tag_data->position < minimum_tag_position) - minimum_tag_position = tag_data->position; - - tag_removed = TRUE; - } - g_string_free (old_entry_text, TRUE); - old_entry_text = new_entry_text; - } + tag_removed = TRUE; + } + g_string_free (old_entry_text, TRUE); + old_entry_text = new_entry_text; + } - tag_data = g_hash_table_lookup (dialog->tag_info_table, TITLE); - if (tag_data->set) { - update_tag_position (dialog, TITLE, old_entry_text); - new_entry_text = remove_tag_selection (dialog, - old_entry_text, - "add-title-tag", - TITLE, - start, - end); - - if (!g_string_equal (new_entry_text, old_entry_text)) { - if (tag_data->position < minimum_tag_position) - minimum_tag_position = tag_data->position; - - tag_removed = TRUE; - } - g_string_free (old_entry_text, TRUE); - old_entry_text = new_entry_text; + tag_data = g_hash_table_lookup (dialog->tag_info_table, NUMBERING00); + if (tag_data->set) + { + update_tag_position (dialog, NUMBERING00, old_entry_text); + new_entry_text = remove_tag_selection (dialog, + old_entry_text, + "add-numbering-tag-two", + NUMBERING0, + start, + end); + + action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), + "add-numbering-tag-one"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + + action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), + "add-numbering-tag-zero"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + + if (!g_string_equal (new_entry_text, old_entry_text)) + { + if (tag_data->position < minimum_tag_position) + { + minimum_tag_position = tag_data->position; } - tag_data = g_hash_table_lookup (dialog->tag_info_table, ALBUM_NAME); - if (tag_data->set) { - update_tag_position (dialog, ALBUM_NAME, old_entry_text); - new_entry_text = remove_tag_selection (dialog, - old_entry_text, - "add-album-name-tag", - ALBUM_NAME, - start, - end); - - if (!g_string_equal (new_entry_text, old_entry_text)) { - if (tag_data->position < minimum_tag_position) - minimum_tag_position = tag_data->position; - - tag_removed = TRUE; - } - g_string_free (old_entry_text, TRUE); - old_entry_text = new_entry_text; + tag_removed = TRUE; + } + g_string_free (old_entry_text, TRUE); + old_entry_text = new_entry_text; + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, CAMERA_MODEL); + if (tag_data->set) + { + update_tag_position (dialog, CAMERA_MODEL, old_entry_text); + new_entry_text = remove_tag_selection (dialog, + old_entry_text, + "add-equipment-tag", + CAMERA_MODEL, + start, + end); + + if (!g_string_equal (new_entry_text, old_entry_text)) + { + if (tag_data->position < minimum_tag_position) + { + minimum_tag_position = tag_data->position; } - if (minimum_tag_position != G_MAXINT) { - dialog->use_manual_cursor_position = TRUE; - dialog->cursor_position = minimum_tag_position; + tag_removed = TRUE; + } + g_string_free (old_entry_text, TRUE); + old_entry_text = new_entry_text; + } - gtk_entry_set_text (GTK_ENTRY (dialog->name_entry), new_entry_text->str); - gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), minimum_tag_position); + tag_data = g_hash_table_lookup (dialog->tag_info_table, TRACK_NUMBER); + if (tag_data->set) + { + update_tag_position (dialog, TRACK_NUMBER, old_entry_text); + new_entry_text = remove_tag_selection (dialog, + old_entry_text, + "add-track-number-tag", + TRACK_NUMBER, + start, + end); + + if (!g_string_equal (new_entry_text, old_entry_text)) + { + if (tag_data->position < minimum_tag_position) + { + minimum_tag_position = tag_data->position; + } - dialog->use_manual_cursor_position = FALSE; + tag_removed = TRUE; + } + g_string_free (old_entry_text, TRUE); + old_entry_text = new_entry_text; + } - g_string_free (new_entry_text, TRUE); + tag_data = g_hash_table_lookup (dialog->tag_info_table, SEASON_NUMBER); + if (tag_data->set) + { + update_tag_position (dialog, SEASON_NUMBER, old_entry_text); + new_entry_text = remove_tag_selection (dialog, + old_entry_text, + "add-season-tag", + SEASON_NUMBER, + start, + end); + + if (!g_string_equal (new_entry_text, old_entry_text)) + { + if (tag_data->position < minimum_tag_position) + { + minimum_tag_position = tag_data->position; } - if ((keyval == GDK_KEY_Delete || keyval == GDK_KEY_BackSpace) && - tag_removed) - return GDK_EVENT_STOP; - } else { - if (remove_tag (dialog, - ORIGINAL_FILE_NAME, - "add-original-file-name-tag", - keyval, - gdk_event->key.is_modifier)) - tag_removed = TRUE; - - if (!tag_removed && remove_tag (dialog, - CREATION_DATE, - "add-creation-date-tag", - keyval, - gdk_event->key.is_modifier)) - tag_removed = TRUE; - - if (!tag_removed && remove_tag (dialog, - NUMBERING, - "add-numbering-tag-zero", - keyval, - gdk_event->key.is_modifier)) { - tag_removed = TRUE; - action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), - "add-numbering-tag-one"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); - - action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), - "add-numbering-tag-two"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + tag_removed = TRUE; + } + g_string_free (old_entry_text, TRUE); + old_entry_text = new_entry_text; + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, EPISODE_NUMBER); + if (tag_data->set) + { + update_tag_position (dialog, EPISODE_NUMBER, old_entry_text); + new_entry_text = remove_tag_selection (dialog, + old_entry_text, + "add-episode-tag", + EPISODE_NUMBER, + start, + end); + + if (!g_string_equal (new_entry_text, old_entry_text)) + { + if (tag_data->position < minimum_tag_position) + { + minimum_tag_position = tag_data->position; } - if (!tag_removed && remove_tag (dialog, - NUMBERING0, - "add-numbering-tag-one", - keyval, - gdk_event->key.is_modifier)) { - tag_removed = TRUE; - action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), - "add-numbering-tag-zero"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); - - action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), - "add-numbering-tag-two"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + tag_removed = TRUE; + } + g_string_free (old_entry_text, TRUE); + old_entry_text = new_entry_text; + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, ARTIST_NAME); + if (tag_data->set) + { + update_tag_position (dialog, ARTIST_NAME, old_entry_text); + new_entry_text = remove_tag_selection (dialog, + old_entry_text, + "add-artist-name-tag", + ARTIST_NAME, + start, + end); + + if (!g_string_equal (new_entry_text, old_entry_text)) + { + if (tag_data->position < minimum_tag_position) + { + minimum_tag_position = tag_data->position; } - if (!tag_removed && remove_tag (dialog, - NUMBERING00, - "add-numbering-tag-two", - keyval, - gdk_event->key.is_modifier)) { - tag_removed = TRUE; - action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), - "add-numbering-tag-one"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); - - action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), - "add-numbering-tag-zero"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + tag_removed = TRUE; + } + g_string_free (old_entry_text, TRUE); + old_entry_text = new_entry_text; + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, TITLE); + if (tag_data->set) + { + update_tag_position (dialog, TITLE, old_entry_text); + new_entry_text = remove_tag_selection (dialog, + old_entry_text, + "add-title-tag", + TITLE, + start, + end); + + if (!g_string_equal (new_entry_text, old_entry_text)) + { + if (tag_data->position < minimum_tag_position) + { + minimum_tag_position = tag_data->position; } - if (!tag_removed && remove_tag (dialog, - CAMERA_MODEL, - "add-equipment-tag", - keyval, - gdk_event->key.is_modifier)) - tag_removed = TRUE; - - if (!tag_removed && remove_tag (dialog, - SEASON_NUMBER, - "add-season-tag", - keyval, - gdk_event->key.is_modifier)) - tag_removed = TRUE; - - if (!tag_removed && remove_tag (dialog, - EPISODE_NUMBER, - "add-episode-tag", - keyval, - gdk_event->key.is_modifier)) - tag_removed = TRUE; - - if (!tag_removed && remove_tag (dialog, - TRACK_NUMBER, - "add-track-number-tag", - keyval, - gdk_event->key.is_modifier)) - tag_removed = TRUE; - - if (!tag_removed && remove_tag (dialog, - ARTIST_NAME, - "add-artist-name-tag", - keyval, - gdk_event->key.is_modifier)) - tag_removed = TRUE; - - if (!tag_removed && remove_tag (dialog, - TITLE, - "add-title-tag", - keyval, - gdk_event->key.is_modifier)) - tag_removed = TRUE; - - if (!tag_removed && remove_tag (dialog, - ALBUM_NAME, - "add-album-name-tag", - keyval, - gdk_event->key.is_modifier)) - tag_removed = TRUE; - - if (tag_removed && (keyval == GDK_KEY_Delete || keyval == GDK_KEY_BackSpace)) { - return GDK_EVENT_STOP; + tag_removed = TRUE; + } + g_string_free (old_entry_text, TRUE); + old_entry_text = new_entry_text; + } + + tag_data = g_hash_table_lookup (dialog->tag_info_table, ALBUM_NAME); + if (tag_data->set) + { + update_tag_position (dialog, ALBUM_NAME, old_entry_text); + new_entry_text = remove_tag_selection (dialog, + old_entry_text, + "add-album-name-tag", + ALBUM_NAME, + start, + end); + + if (!g_string_equal (new_entry_text, old_entry_text)) + { + if (tag_data->position < minimum_tag_position) + { + minimum_tag_position = tag_data->position; } + + tag_removed = TRUE; + } + g_string_free (old_entry_text, TRUE); + old_entry_text = new_entry_text; } - return GDK_EVENT_PROPAGATE; -} + if (minimum_tag_position != G_MAXINT) + { + dialog->use_manual_cursor_position = TRUE; + dialog->cursor_position = minimum_tag_position; -static void -nautilus_batch_rename_dialog_finalize (GObject *object) -{ - NautilusBatchRenameDialog *dialog; - GList *l; - - dialog = NAUTILUS_BATCH_RENAME_DIALOG (object); - - if (dialog->checking_conflicts) { - g_cancellable_cancel (dialog->conflict_cancellable); - g_object_unref (dialog->conflict_cancellable); - } - - g_list_free (dialog->original_name_listbox_rows); - g_list_free (dialog->arrow_listbox_rows); - g_list_free (dialog->result_listbox_rows); - g_list_free (dialog->listbox_labels_new); - g_list_free (dialog->listbox_labels_old); - g_list_free (dialog->listbox_icons); - - for (l = dialog->selection_metadata; l != NULL; l = l->next) { - FileMetadata *metadata; - - metadata = l->data; - - if (metadata->file_name != NULL) - g_string_free (metadata->file_name, TRUE); - if (metadata->creation_date != NULL) - g_string_free (metadata->creation_date, TRUE); - if (metadata->equipment != NULL) - g_string_free (metadata->equipment, TRUE); - if (metadata->season != NULL) - g_string_free (metadata->season, TRUE); - if (metadata->episode_number != NULL) - g_string_free (metadata->episode_number, TRUE); - if (metadata->track_number != NULL) - g_string_free (metadata->track_number, TRUE); - if (metadata->artist_name != NULL) - g_string_free (metadata->artist_name, TRUE); - if (metadata->album_name != NULL) - g_string_free (metadata->album_name, TRUE); - } - - if (dialog->create_date != NULL) - g_hash_table_destroy (dialog->create_date); - - g_list_free_full (dialog->distinct_parents, g_free); - g_list_free_full (dialog->new_names, string_free); - g_list_free_full (dialog->duplicates, conflict_data_free); + gtk_entry_set_text (GTK_ENTRY (dialog->name_entry), new_entry_text->str); + gtk_editable_set_position (GTK_EDITABLE (dialog->name_entry), minimum_tag_position); - G_OBJECT_CLASS (nautilus_batch_rename_dialog_parent_class)->finalize (object); -} + dialog->use_manual_cursor_position = FALSE; -static void -nautilus_batch_rename_dialog_class_init (NautilusBatchRenameDialogClass *klass) -{ - GtkWidgetClass *widget_class; - GObjectClass *oclass; - - widget_class = GTK_WIDGET_CLASS (klass); - oclass = G_OBJECT_CLASS (klass); - - oclass->finalize = nautilus_batch_rename_dialog_finalize; - - gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/nautilus/ui/nautilus-batch-rename-dialog.ui"); - - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, grid); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, cancel_button); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, original_name_listbox); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, arrow_listbox); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, result_listbox); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, name_entry); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, rename_button); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, find_entry); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, replace_entry); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, mode_stack); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, replace_mode_button); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, format_mode_button); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, add_button); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, add_popover); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, numbering_order_label); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, scrolled_window); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, numbering_order_popover); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, numbering_order_button); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, numbering_order_menu); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, conflict_box); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, conflict_label); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, conflict_up); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, conflict_down); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, add_tag_menu); - gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, numbering_label); - - gtk_widget_class_bind_template_callback (widget_class, file_names_widget_entry_on_changed); - gtk_widget_class_bind_template_callback (widget_class, file_names_widget_on_activate); - gtk_widget_class_bind_template_callback (widget_class, batch_rename_dialog_mode_changed); - gtk_widget_class_bind_template_callback (widget_class, add_button_clicked); - gtk_widget_class_bind_template_callback (widget_class, add_popover_closed); - gtk_widget_class_bind_template_callback (widget_class, numbering_order_button_clicked); - gtk_widget_class_bind_template_callback (widget_class, numbering_order_popover_closed); - gtk_widget_class_bind_template_callback (widget_class, select_next_conflict_up); - gtk_widget_class_bind_template_callback (widget_class, select_next_conflict_down); - gtk_widget_class_bind_template_callback (widget_class, batch_rename_dialog_on_response); - gtk_widget_class_bind_template_callback (widget_class, on_key_press_event); -} + g_string_free (new_entry_text, TRUE); + } -GtkWidget* -nautilus_batch_rename_dialog_new (GList *selection, - NautilusDirectory *directory, - NautilusWindow *window) -{ - NautilusBatchRenameDialog *dialog; - GString *dialog_title; + if ((keyval == GDK_KEY_Delete || keyval == GDK_KEY_BackSpace) && + tag_removed) + { + return GDK_EVENT_STOP; + } + } + else + { + if (remove_tag (dialog, + ORIGINAL_FILE_NAME, + "add-original-file-name-tag", + keyval, + gdk_event->key.is_modifier)) + { + tag_removed = TRUE; + } + + if (!tag_removed && remove_tag (dialog, + CREATION_DATE, + "add-creation-date-tag", + keyval, + gdk_event->key.is_modifier)) + { + tag_removed = TRUE; + } - dialog = g_object_new (NAUTILUS_TYPE_BATCH_RENAME_DIALOG, "use-header-bar", TRUE, NULL); + if (!tag_removed && remove_tag (dialog, + NUMBERING, + "add-numbering-tag-zero", + keyval, + gdk_event->key.is_modifier)) + { + tag_removed = TRUE; + action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), + "add-numbering-tag-one"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); - dialog->selection = selection; - dialog->directory = directory; - dialog->window = window; + action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), + "add-numbering-tag-two"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + } - gtk_window_set_transient_for (GTK_WINDOW (dialog), - GTK_WINDOW (window)); + if (!tag_removed && remove_tag (dialog, + NUMBERING0, + "add-numbering-tag-one", + keyval, + gdk_event->key.is_modifier)) + { + tag_removed = TRUE; + action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), + "add-numbering-tag-zero"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); - dialog_title = g_string_new (""); - g_string_append_printf (dialog_title, "Rename %d Files", g_list_length (selection)); - gtk_window_set_title (GTK_WINDOW (dialog), dialog_title->str); + action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), + "add-numbering-tag-two"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + } - nautilus_batch_rename_dialog_initialize_actions (dialog); + if (!tag_removed && remove_tag (dialog, + NUMBERING00, + "add-numbering-tag-two", + keyval, + gdk_event->key.is_modifier)) + { + tag_removed = TRUE; + action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), + "add-numbering-tag-one"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); - dialog->same_parent = !NAUTILUS_IS_SEARCH_DIRECTORY (directory); + action = g_action_map_lookup_action (G_ACTION_MAP (dialog->action_group), + "add-numbering-tag-zero"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), TRUE); + } - if (!dialog->same_parent) - dialog->distinct_parents = batch_rename_files_get_distinct_parents (dialog->selection); - else - dialog->distinct_parents = NULL; + if (!tag_removed && remove_tag (dialog, + CAMERA_MODEL, + "add-equipment-tag", + keyval, + gdk_event->key.is_modifier)) + { + tag_removed = TRUE; + } - update_display_text (dialog); + if (!tag_removed && remove_tag (dialog, + SEASON_NUMBER, + "add-season-tag", + keyval, + gdk_event->key.is_modifier)) + { + tag_removed = TRUE; + } - fill_display_listbox (dialog); + if (!tag_removed && remove_tag (dialog, + EPISODE_NUMBER, + "add-episode-tag", + keyval, + gdk_event->key.is_modifier)) + { + tag_removed = TRUE; + } + + if (!tag_removed && remove_tag (dialog, + TRACK_NUMBER, + "add-track-number-tag", + keyval, + gdk_event->key.is_modifier)) + { + tag_removed = TRUE; + } + + if (!tag_removed && remove_tag (dialog, + ARTIST_NAME, + "add-artist-name-tag", + keyval, + gdk_event->key.is_modifier)) + { + tag_removed = TRUE; + } + + if (!tag_removed && remove_tag (dialog, + TITLE, + "add-title-tag", + keyval, + gdk_event->key.is_modifier)) + { + tag_removed = TRUE; + } - gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (window)), NULL); + if (!tag_removed && remove_tag (dialog, + ALBUM_NAME, + "add-album-name-tag", + keyval, + gdk_event->key.is_modifier)) + { + tag_removed = TRUE; + } - g_string_free (dialog_title, TRUE); + if (tag_removed && (keyval == GDK_KEY_Delete || keyval == GDK_KEY_BackSpace)) + { + return GDK_EVENT_STOP; + } + } - return GTK_WIDGET (dialog); + return GDK_EVENT_PROPAGATE; } static void -nautilus_batch_rename_dialog_init (NautilusBatchRenameDialog *self) +nautilus_batch_rename_dialog_finalize (GObject *object) { - TagData *tag_data; - - gtk_widget_init_template (GTK_WIDGET (self)); - - gtk_list_box_set_header_func (GTK_LIST_BOX (self->original_name_listbox), - (GtkListBoxUpdateHeaderFunc) listbox_header_func, - self, - NULL); - gtk_list_box_set_header_func (GTK_LIST_BOX (self->arrow_listbox), - (GtkListBoxUpdateHeaderFunc) listbox_header_func, - self, - NULL); - gtk_list_box_set_header_func (GTK_LIST_BOX (self->result_listbox), - (GtkListBoxUpdateHeaderFunc) listbox_header_func, - self, - NULL); + NautilusBatchRenameDialog *dialog; + GList *l; + + dialog = NAUTILUS_BATCH_RENAME_DIALOG (object); + + if (dialog->checking_conflicts) + { + g_cancellable_cancel (dialog->conflict_cancellable); + g_object_unref (dialog->conflict_cancellable); + } + + g_list_free (dialog->original_name_listbox_rows); + g_list_free (dialog->arrow_listbox_rows); + g_list_free (dialog->result_listbox_rows); + g_list_free (dialog->listbox_labels_new); + g_list_free (dialog->listbox_labels_old); + g_list_free (dialog->listbox_icons); + + for (l = dialog->selection_metadata; l != NULL; l = l->next) + { + FileMetadata *metadata; + metadata = l->data; - self->mode = NAUTILUS_BATCH_RENAME_DIALOG_FORMAT; + if (metadata->file_name != NULL) + { + g_string_free (metadata->file_name, TRUE); + } + if (metadata->creation_date != NULL) + { + g_string_free (metadata->creation_date, TRUE); + } + if (metadata->equipment != NULL) + { + g_string_free (metadata->equipment, TRUE); + } + if (metadata->season != NULL) + { + g_string_free (metadata->season, TRUE); + } + if (metadata->episode_number != NULL) + { + g_string_free (metadata->episode_number, TRUE); + } + if (metadata->track_number != NULL) + { + g_string_free (metadata->track_number, TRUE); + } + if (metadata->artist_name != NULL) + { + g_string_free (metadata->artist_name, TRUE); + } + if (metadata->album_name != NULL) + { + g_string_free (metadata->album_name, TRUE); + } + } - gtk_popover_bind_model (GTK_POPOVER (self->numbering_order_popover), - G_MENU_MODEL (self->numbering_order_menu), - NULL); - gtk_popover_bind_model (GTK_POPOVER (self->add_popover), - G_MENU_MODEL (self->add_tag_menu), - NULL); + if (dialog->create_date != NULL) + { + g_hash_table_destroy (dialog->create_date); + } - gtk_label_set_ellipsize (GTK_LABEL (self->conflict_label), PANGO_ELLIPSIZE_END); - gtk_label_set_max_width_chars (GTK_LABEL (self->conflict_label), 1); + g_list_free_full (dialog->distinct_parents, g_free); + g_list_free_full (dialog->new_names, string_free); + g_list_free_full (dialog->duplicates, conflict_data_free); - self->duplicates = NULL; - self->new_names = NULL; + G_OBJECT_CLASS (nautilus_batch_rename_dialog_parent_class)->finalize (object); +} - self->checking_conflicts = FALSE; +static void +nautilus_batch_rename_dialog_class_init (NautilusBatchRenameDialogClass *klass) +{ + GtkWidgetClass *widget_class; + GObjectClass *oclass; + + widget_class = GTK_WIDGET_CLASS (klass); + oclass = G_OBJECT_CLASS (klass); + + oclass->finalize = nautilus_batch_rename_dialog_finalize; + + gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/nautilus/ui/nautilus-batch-rename-dialog.ui"); + + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, grid); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, cancel_button); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, original_name_listbox); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, arrow_listbox); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, result_listbox); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, name_entry); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, rename_button); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, find_entry); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, replace_entry); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, mode_stack); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, replace_mode_button); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, format_mode_button); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, add_button); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, add_popover); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, numbering_order_label); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, scrolled_window); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, numbering_order_popover); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, numbering_order_button); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, numbering_order_menu); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, conflict_box); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, conflict_label); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, conflict_up); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, conflict_down); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, add_tag_menu); + gtk_widget_class_bind_template_child (widget_class, NautilusBatchRenameDialog, numbering_label); + + gtk_widget_class_bind_template_callback (widget_class, file_names_widget_entry_on_changed); + gtk_widget_class_bind_template_callback (widget_class, file_names_widget_on_activate); + gtk_widget_class_bind_template_callback (widget_class, batch_rename_dialog_mode_changed); + gtk_widget_class_bind_template_callback (widget_class, add_button_clicked); + gtk_widget_class_bind_template_callback (widget_class, add_popover_closed); + gtk_widget_class_bind_template_callback (widget_class, numbering_order_button_clicked); + gtk_widget_class_bind_template_callback (widget_class, numbering_order_popover_closed); + gtk_widget_class_bind_template_callback (widget_class, select_next_conflict_up); + gtk_widget_class_bind_template_callback (widget_class, select_next_conflict_down); + gtk_widget_class_bind_template_callback (widget_class, batch_rename_dialog_on_response); + gtk_widget_class_bind_template_callback (widget_class, on_key_press_event); +} - self->rename_clicked = FALSE; +GtkWidget * +nautilus_batch_rename_dialog_new (GList *selection, + NautilusDirectory *directory, + NautilusWindow *window) +{ + NautilusBatchRenameDialog *dialog; + GString *dialog_title; + dialog = g_object_new (NAUTILUS_TYPE_BATCH_RENAME_DIALOG, "use-header-bar", TRUE, NULL); - self->tag_info_table = g_hash_table_new_full (g_str_hash, - g_str_equal, - (GDestroyNotify) g_free, - (GDestroyNotify) g_free); - tag_data = g_new (TagData, 1); - tag_data->available = TRUE; - tag_data->set = TRUE; - tag_data->position = 0; - g_hash_table_insert (self->tag_info_table, g_strdup (ORIGINAL_FILE_NAME), tag_data); + dialog->selection = selection; + dialog->directory = directory; + dialog->window = window; - tag_data = g_new (TagData, 1); - tag_data->available = TRUE; - tag_data->set = FALSE; - tag_data->position = 0; - g_hash_table_insert (self->tag_info_table, g_strdup (NUMBERING), tag_data); + gtk_window_set_transient_for (GTK_WINDOW (dialog), + GTK_WINDOW (window)); - tag_data = g_new (TagData, 1); - tag_data->available = TRUE; - tag_data->set = FALSE; - tag_data->position = 0; - g_hash_table_insert (self->tag_info_table, g_strdup (NUMBERING0), tag_data); + dialog_title = g_string_new (""); + g_string_append_printf (dialog_title, "Rename %d Files", g_list_length (selection)); + gtk_window_set_title (GTK_WINDOW (dialog), dialog_title->str); - tag_data = g_new (TagData, 1); - tag_data->available = TRUE; - tag_data->set = FALSE; - tag_data->position = 0; - g_hash_table_insert (self->tag_info_table, g_strdup (NUMBERING00), tag_data); + nautilus_batch_rename_dialog_initialize_actions (dialog); - tag_data = g_new (TagData, 1); - tag_data->available = FALSE; - tag_data->set = FALSE; - tag_data->position = 0; - g_hash_table_insert (self->tag_info_table, g_strdup (CREATION_DATE), tag_data); + dialog->same_parent = !NAUTILUS_IS_SEARCH_DIRECTORY (directory); - tag_data = g_new (TagData, 1); - tag_data->available = FALSE; - tag_data->set = FALSE; - tag_data->position = 0; - g_hash_table_insert (self->tag_info_table, g_strdup (CAMERA_MODEL), tag_data); + if (!dialog->same_parent) + { + dialog->distinct_parents = batch_rename_files_get_distinct_parents (dialog->selection); + } + else + { + dialog->distinct_parents = NULL; + } - tag_data = g_new (TagData, 1); - tag_data->available = FALSE; - tag_data->set = FALSE; - tag_data->position = 0; - g_hash_table_insert (self->tag_info_table, g_strdup (SEASON_NUMBER), tag_data); + update_display_text (dialog); - tag_data = g_new (TagData, 1); - tag_data->available = FALSE; - tag_data->set = FALSE; - tag_data->position = 0; - g_hash_table_insert (self->tag_info_table, g_strdup (EPISODE_NUMBER), tag_data); + fill_display_listbox (dialog); - tag_data = g_new (TagData, 1); - tag_data->available = FALSE; - tag_data->set = FALSE; - tag_data->position = 0; - g_hash_table_insert (self->tag_info_table, g_strdup (TRACK_NUMBER), tag_data); + gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (window)), NULL); - tag_data = g_new (TagData, 1); - tag_data->available = FALSE; - tag_data->set = FALSE; - tag_data->position = 0; - g_hash_table_insert (self->tag_info_table, g_strdup (ARTIST_NAME), tag_data); + g_string_free (dialog_title, TRUE); - tag_data = g_new (TagData, 1); - tag_data->available = FALSE; - tag_data->set = FALSE; - tag_data->position = 0; - g_hash_table_insert (self->tag_info_table, g_strdup (TITLE), tag_data); + return GTK_WIDGET (dialog); +} - tag_data = g_new (TagData, 1); - tag_data->available = FALSE; - tag_data->set = FALSE; - tag_data->position = 0; - g_hash_table_insert (self->tag_info_table, g_strdup (ALBUM_NAME), tag_data); - - gtk_entry_set_text (GTK_ENTRY (self->name_entry),ORIGINAL_FILE_NAME); - self->name_entry_characters = g_utf8_strlen (ORIGINAL_FILE_NAME, -1); - - self->row_height = -1; - - g_signal_connect (self->original_name_listbox, "row-selected", G_CALLBACK (row_selected), self); - g_signal_connect (self->arrow_listbox, "row-selected", G_CALLBACK (row_selected), self); - g_signal_connect (self->result_listbox, "row-selected", G_CALLBACK (row_selected), self); - - self->size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); - - g_signal_connect (self->original_name_listbox, - "motion-notify-event", - G_CALLBACK (on_motion), - self); - g_signal_connect (self->result_listbox, - "motion-notify-event", - G_CALLBACK (on_motion), - self); - g_signal_connect (self->arrow_listbox, - "motion-notify-event", - G_CALLBACK (on_motion), - self); - - g_signal_connect (self->original_name_listbox, - "leave-notify-event", - G_CALLBACK (on_leave_event), - self); - g_signal_connect (self->result_listbox, - "leave-notify-event", - G_CALLBACK (on_leave_event), - self); - g_signal_connect (self->arrow_listbox, - "leave-notify-event", - G_CALLBACK (on_leave_event), - self); +static void +nautilus_batch_rename_dialog_init (NautilusBatchRenameDialog *self) +{ + TagData *tag_data; + + gtk_widget_init_template (GTK_WIDGET (self)); + + gtk_list_box_set_header_func (GTK_LIST_BOX (self->original_name_listbox), + (GtkListBoxUpdateHeaderFunc) listbox_header_func, + self, + NULL); + gtk_list_box_set_header_func (GTK_LIST_BOX (self->arrow_listbox), + (GtkListBoxUpdateHeaderFunc) listbox_header_func, + self, + NULL); + gtk_list_box_set_header_func (GTK_LIST_BOX (self->result_listbox), + (GtkListBoxUpdateHeaderFunc) listbox_header_func, + self, + NULL); + + + self->mode = NAUTILUS_BATCH_RENAME_DIALOG_FORMAT; + + gtk_popover_bind_model (GTK_POPOVER (self->numbering_order_popover), + G_MENU_MODEL (self->numbering_order_menu), + NULL); + gtk_popover_bind_model (GTK_POPOVER (self->add_popover), + G_MENU_MODEL (self->add_tag_menu), + NULL); + + gtk_label_set_ellipsize (GTK_LABEL (self->conflict_label), PANGO_ELLIPSIZE_END); + gtk_label_set_max_width_chars (GTK_LABEL (self->conflict_label), 1); + + self->duplicates = NULL; + self->new_names = NULL; + + self->checking_conflicts = FALSE; + + self->rename_clicked = FALSE; + + + self->tag_info_table = g_hash_table_new_full (g_str_hash, + g_str_equal, + (GDestroyNotify) g_free, + (GDestroyNotify) g_free); + tag_data = g_new (TagData, 1); + tag_data->available = TRUE; + tag_data->set = TRUE; + tag_data->position = 0; + g_hash_table_insert (self->tag_info_table, g_strdup (ORIGINAL_FILE_NAME), tag_data); + + tag_data = g_new (TagData, 1); + tag_data->available = TRUE; + tag_data->set = FALSE; + tag_data->position = 0; + g_hash_table_insert (self->tag_info_table, g_strdup (NUMBERING), tag_data); + + tag_data = g_new (TagData, 1); + tag_data->available = TRUE; + tag_data->set = FALSE; + tag_data->position = 0; + g_hash_table_insert (self->tag_info_table, g_strdup (NUMBERING0), tag_data); + + tag_data = g_new (TagData, 1); + tag_data->available = TRUE; + tag_data->set = FALSE; + tag_data->position = 0; + g_hash_table_insert (self->tag_info_table, g_strdup (NUMBERING00), tag_data); + + tag_data = g_new (TagData, 1); + tag_data->available = FALSE; + tag_data->set = FALSE; + tag_data->position = 0; + g_hash_table_insert (self->tag_info_table, g_strdup (CREATION_DATE), tag_data); + + tag_data = g_new (TagData, 1); + tag_data->available = FALSE; + tag_data->set = FALSE; + tag_data->position = 0; + g_hash_table_insert (self->tag_info_table, g_strdup (CAMERA_MODEL), tag_data); + + tag_data = g_new (TagData, 1); + tag_data->available = FALSE; + tag_data->set = FALSE; + tag_data->position = 0; + g_hash_table_insert (self->tag_info_table, g_strdup (SEASON_NUMBER), tag_data); + + tag_data = g_new (TagData, 1); + tag_data->available = FALSE; + tag_data->set = FALSE; + tag_data->position = 0; + g_hash_table_insert (self->tag_info_table, g_strdup (EPISODE_NUMBER), tag_data); + + tag_data = g_new (TagData, 1); + tag_data->available = FALSE; + tag_data->set = FALSE; + tag_data->position = 0; + g_hash_table_insert (self->tag_info_table, g_strdup (TRACK_NUMBER), tag_data); + + tag_data = g_new (TagData, 1); + tag_data->available = FALSE; + tag_data->set = FALSE; + tag_data->position = 0; + g_hash_table_insert (self->tag_info_table, g_strdup (ARTIST_NAME), tag_data); + + tag_data = g_new (TagData, 1); + tag_data->available = FALSE; + tag_data->set = FALSE; + tag_data->position = 0; + g_hash_table_insert (self->tag_info_table, g_strdup (TITLE), tag_data); + + tag_data = g_new (TagData, 1); + tag_data->available = FALSE; + tag_data->set = FALSE; + tag_data->position = 0; + g_hash_table_insert (self->tag_info_table, g_strdup (ALBUM_NAME), tag_data); + + gtk_entry_set_text (GTK_ENTRY (self->name_entry), ORIGINAL_FILE_NAME); + self->name_entry_characters = g_utf8_strlen (ORIGINAL_FILE_NAME, -1); + + self->row_height = -1; + + g_signal_connect (self->original_name_listbox, "row-selected", G_CALLBACK (row_selected), self); + g_signal_connect (self->arrow_listbox, "row-selected", G_CALLBACK (row_selected), self); + g_signal_connect (self->result_listbox, "row-selected", G_CALLBACK (row_selected), self); + + self->size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); + + g_signal_connect (self->original_name_listbox, + "motion-notify-event", + G_CALLBACK (on_motion), + self); + g_signal_connect (self->result_listbox, + "motion-notify-event", + G_CALLBACK (on_motion), + self); + g_signal_connect (self->arrow_listbox, + "motion-notify-event", + G_CALLBACK (on_motion), + self); + + g_signal_connect (self->original_name_listbox, + "leave-notify-event", + G_CALLBACK (on_leave_event), + self); + g_signal_connect (self->result_listbox, + "leave-notify-event", + G_CALLBACK (on_leave_event), + self); + g_signal_connect (self->arrow_listbox, + "leave-notify-event", + G_CALLBACK (on_leave_event), + self); } |