* view.c: The search string is managed by the WView, not as

static variable in some functions.
This commit is contained in:
Roland Illig 2005-08-21 12:33:21 +00:00
parent 7abfd54b97
commit c0f14a906d
2 changed files with 44 additions and 46 deletions

View File

@ -8,6 +8,8 @@
destructor and added paragraph comments. destructor and added paragraph comments.
* view.c (free_change_list): Renamed to * view.c (free_change_list): Renamed to
view_hexedit_free_change_list. view_hexedit_free_change_list.
* view.c: The search string is managed by the WView, not as
static variable in some functions.
2005-08-19 Roland Illig <roland.illig@gmx.de> 2005-08-19 Roland Illig <roland.illig@gmx.de>

View File

@ -185,7 +185,7 @@ struct WView {
offset_type search_length; /* Length of found string or 0 if none was found */ offset_type search_length; /* Length of found string or 0 if none was found */
char *search_exp; /* The search expression */ char *search_exp; /* The search expression */
int direction; /* 1= forward; -1 backward */ int direction; /* 1= forward; -1 backward */
void (*last_search)(WView *, char *); void (*last_search)(WView *);
/* Pointer to the last search command */ /* Pointer to the last search command */
gboolean want_to_quit; /* Prepare for cleanup ... */ gboolean want_to_quit; /* Prepare for cleanup ... */
@ -2558,23 +2558,21 @@ regexp_view_search (WView *view, char *pattern, char *string,
} }
static void static void
do_regexp_search (WView *view, char *regexp) do_regexp_search (WView *view)
{ {
view->search_exp = regexp; search (view, view->search_exp, regexp_view_search);
search (view, regexp, regexp_view_search);
/* Had a refresh here */ /* Had a refresh here */
view->dirty++; view->dirty++;
view_update (view); view_update (view);
} }
static void static void
do_normal_search (WView *view, char *text) do_normal_search (WView *view)
{ {
view->search_exp = text;
if (view->hex_mode) if (view->hex_mode)
hex_search (view, text); hex_search (view, view->search_exp);
else else
search (view, text, icase_search_p); search (view, view->search_exp, icase_search_p);
/* Had a refresh here */ /* Had a refresh here */
view->dirty++; view->dirty++;
view_update (view); view_update (view);
@ -2704,25 +2702,25 @@ view_hexedit_save_changes_cmd (WView *view)
static void static void
regexp_search (WView *view, int direction) regexp_search (WView *view, int direction)
{ {
char *regexp = str_unconst (""); const char *defval;
static char *old = 0; char *regexp;
defval = (view->search_exp != NULL) ? view->search_exp : "";
regexp = input_dialog (_("Search"), _(" Enter regexp:"), defval);
if (regexp == NULL || regexp[0] == '\0')
goto cleanup;
g_free (view->search_exp);
view->search_exp = regexp;
regexp = NULL;
if (old)
regexp = old;
regexp = input_dialog (_("Search"), _(" Enter regexp:"), regexp);
if ((!regexp)) {
return;
}
if ((!*regexp)) {
g_free (regexp);
return;
}
g_free (old);
old = regexp;
view->direction = direction; view->direction = direction;
do_regexp_search (view, regexp); do_regexp_search (view);
view->last_search = do_regexp_search; view->last_search = do_regexp_search;
cleanup:
g_free (regexp);
} }
/* {{{ User-definable commands }}} */ /* {{{ User-definable commands }}} */
@ -2737,8 +2735,7 @@ view_regexp_search_cmd (WView *view)
static void static void
view_normal_search_cmd (WView *view) view_normal_search_cmd (WView *view)
{ {
static char *old; char *defval, *exp;
char *exp = old ? old : str_unconst ("");
enum { enum {
SEARCH_DLG_HEIGHT = 8, SEARCH_DLG_HEIGHT = 8,
@ -2768,36 +2765,35 @@ view_normal_search_cmd (WView *view)
SEARCH_DLG_WIDTH, SEARCH_DLG_HEIGHT, -1, 0, N_("Search"), SEARCH_DLG_WIDTH, SEARCH_DLG_HEIGHT, -1, 0, N_("Search"),
"[Input Line Keys]", quick_widgets, 0 "[Input Line Keys]", quick_widgets, 0
}; };
convert_to_display (old);
defval = g_strdup ((view->search_exp != NULL) ? view->search_exp : "");
convert_to_display (defval);
quick_widgets[2].result = &treplace_backwards; quick_widgets[2].result = &treplace_backwards;
quick_widgets[3].str_result = &exp; quick_widgets[3].str_result = &exp;
quick_widgets[3].text = exp; quick_widgets[3].text = defval;
if (quick_dialog (&Quick_input) == B_CANCEL)
goto cleanup;
if (quick_dialog (&Quick_input) == B_CANCEL) {
convert_from_input (old);
return;
}
replace_backwards = treplace_backwards; replace_backwards = treplace_backwards;
convert_from_input (old); if (exp == NULL || exp[0] == '\0')
goto cleanup;
if ((!exp)) {
return;
}
if ((!*exp)) {
g_free (exp);
return;
}
g_free (old);
old = exp;
convert_from_input (exp); convert_from_input (exp);
g_free (view->search_exp);
view->search_exp = exp;
exp = NULL;
view->direction = replace_backwards ? -1 : 1; view->direction = replace_backwards ? -1 : 1;
do_normal_search (view, exp); do_normal_search (view);
view->last_search = do_normal_search; view->last_search = do_normal_search;
cleanup:
g_free (exp);
g_free (defval);
} }
static void static void
@ -2948,7 +2944,7 @@ static void
view_continue_search_cmd (WView *view) view_continue_search_cmd (WView *view)
{ {
if (view->last_search) { if (view->last_search) {
(*view->last_search) (view, view->search_exp); view->last_search (view);
} else { } else {
/* if not... then ask for an expression */ /* if not... then ask for an expression */
view_normal_search_cmd (view); view_normal_search_cmd (view);