From 5fd7d65dcaf74d896afed15fa0ca7e7c55e308fe Mon Sep 17 00:00:00 2001 From: Andrew Borodin Date: Sun, 20 Sep 2009 21:20:17 +0400 Subject: [PATCH] Ticket #1631: 'Find File': use history for input fields at first run. Signed-off-by: Andrew Borodin --- src/find.c | 35 +++++++++++------------------------ 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/src/find.c b/src/find.c index bd4714db2..d073b77f1 100644 --- a/src/find.c +++ b/src/find.c @@ -150,9 +150,7 @@ static struct { { N_("&Edit - F4"), 13, 38 } }; -static char *in_contents = NULL; -static char *in_start_dir = NULL; -static char *in_start_name = NULL; +static char *in_start_dir = INPUT_LAST_TEXT; static mc_search_t *search_file_handle = NULL; static gboolean skip_hidden_flag = FALSE; @@ -318,12 +316,8 @@ find_parameters (char **start_dir, char **pattern, char **content) b2 = str_term_width1 (buts[2]) + 4; find_par_start: - if (!in_start_dir) + if (in_start_dir == NULL) in_start_dir = g_strdup ("."); - if (!in_start_name) - in_start_name = g_strdup (easy_patterns ? "*" : "."); - if (!in_contents) - in_contents = g_strdup (""); find_dlg = create_dlg (0, 0, FIND_Y, FIND_X, dialog_colors, @@ -371,12 +365,12 @@ find_parameters (char **start_dir, char **pattern, char **content) file_case_sens_cbox = check_new (7, 3, file_case_sens_flag, file_case_label); add_widget (find_dlg, file_case_sens_cbox); - in_with = input_new (6, FIND_X / 2 + 1, INPUT_COLOR, FIND_X / 2 - 4, in_contents, + in_with = input_new (6, FIND_X / 2 + 1, INPUT_COLOR, FIND_X / 2 - 4, INPUT_LAST_TEXT, MC_HISTORY_SHARED_SEARCH, INPUT_COMPLETE_DEFAULT); add_widget (find_dlg, in_with); add_widget (find_dlg, label_new (5, FIND_X / 2 + 1, _("Content:"))); - in_name = input_new (6, 3, INPUT_COLOR, FIND_X / 2 - 4, in_start_name, "name", + in_name = input_new (6, 3, INPUT_COLOR, FIND_X / 2 - 4, INPUT_LAST_TEXT, "name", INPUT_COMPLETE_DEFAULT); add_widget (find_dlg, in_name); add_widget (find_dlg, label_new (5, 3, _("File name:"))); @@ -397,7 +391,6 @@ find_parameters (char **start_dir, char **pattern, char **content) break; case B_TREE: - temp_dir = g_strdup (in_start->buffer); #ifdef HAVE_CHARSET file_all_charsets_flag = file_all_charsets_cbox->state & C_BOOL; content_all_charsets_flag = content_all_charsets_cbox->state & C_BOOL; @@ -411,13 +404,15 @@ find_parameters (char **start_dir, char **pattern, char **content) find_recurs_flag = recursively_cbox->state & C_BOOL; skip_hidden_flag = skip_hidden_cbox->state & C_BOOL; destroy_dlg (find_dlg); - g_free (in_start_dir); + if (in_start_dir != INPUT_LAST_TEXT) + g_free (in_start_dir); + temp_dir = g_strdup (in_start->buffer); if ((temp_dir[0] == '.') && (temp_dir[1] == '\0')) { g_free (temp_dir); temp_dir = g_strdup (current_panel->cwd); } in_start_dir = tree_box (temp_dir); - if (in_start_dir) + if (in_start_dir != NULL) g_free (temp_dir); else in_start_dir = temp_dir; @@ -426,13 +421,6 @@ find_parameters (char **start_dir, char **pattern, char **content) break; default: - g_free (in_contents); - if (in_with->buffer[0]) { - *content = g_strdup (in_with->buffer); - in_contents = g_strdup (*content); - } else { - *content = in_contents = NULL; - } #ifdef HAVE_CHARSET file_all_charsets_flag = file_all_charsets_cbox->state & C_BOOL; content_all_charsets_flag = content_all_charsets_cbox->state & C_BOOL; @@ -446,13 +434,12 @@ find_parameters (char **start_dir, char **pattern, char **content) file_case_sens_flag = file_case_sens_cbox->state & C_BOOL; skip_hidden_flag = skip_hidden_cbox->state & C_BOOL; return_value = 1; + *content = (in_with->buffer[0] != '\0') ? g_strdup (in_with->buffer) : NULL; *start_dir = g_strdup (in_start->buffer); *pattern = g_strdup (in_name->buffer); - - g_free (in_start_dir); + if (in_start_dir != INPUT_LAST_TEXT) + g_free (in_start_dir); in_start_dir = g_strdup (*start_dir); - g_free (in_start_name); - in_start_name = g_strdup (*pattern); } destroy_dlg (find_dlg);