|
@@ -311,6 +311,50 @@ static void set_config_filename(const char *config_filename)
|
|
|
filename[sizeof(filename)-1] = '\0';
|
|
|
}
|
|
|
|
|
|
+struct subtitle_part {
|
|
|
+ struct list_head entries;
|
|
|
+ const char *text;
|
|
|
+};
|
|
|
+static LIST_HEAD(trail);
|
|
|
+
|
|
|
+static struct subtitle_list *subtitles;
|
|
|
+static void set_subtitle(void)
|
|
|
+{
|
|
|
+ struct subtitle_part *sp;
|
|
|
+ struct subtitle_list *pos, *tmp;
|
|
|
+
|
|
|
+ for (pos = subtitles; pos != NULL; pos = tmp) {
|
|
|
+ tmp = pos->next;
|
|
|
+ free(pos);
|
|
|
+ }
|
|
|
+
|
|
|
+ subtitles = NULL;
|
|
|
+ list_for_each_entry(sp, &trail, entries) {
|
|
|
+ if (sp->text) {
|
|
|
+ if (pos) {
|
|
|
+ pos->next = xcalloc(sizeof(*pos), 1);
|
|
|
+ pos = pos->next;
|
|
|
+ } else {
|
|
|
+ subtitles = pos = xcalloc(sizeof(*pos), 1);
|
|
|
+ }
|
|
|
+ pos->text = sp->text;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ set_dialog_subtitles(subtitles);
|
|
|
+}
|
|
|
+
|
|
|
+static void reset_subtitle(void)
|
|
|
+{
|
|
|
+ struct subtitle_list *pos, *tmp;
|
|
|
+
|
|
|
+ for (pos = subtitles; pos != NULL; pos = tmp) {
|
|
|
+ tmp = pos->next;
|
|
|
+ free(pos);
|
|
|
+ }
|
|
|
+ subtitles = NULL;
|
|
|
+ set_dialog_subtitles(subtitles);
|
|
|
+}
|
|
|
|
|
|
struct search_data {
|
|
|
struct list_head *head;
|
|
@@ -353,6 +397,8 @@ static void search_conf(void)
|
|
|
char *dialog_input;
|
|
|
int dres, vscroll = 0, hscroll = 0;
|
|
|
bool again;
|
|
|
+ struct gstr sttext;
|
|
|
+ struct subtitle_part stpart;
|
|
|
|
|
|
title = str_new();
|
|
|
str_printf( &title, _("Enter %s (sub)string to search for "
|
|
@@ -379,6 +425,11 @@ again:
|
|
|
if (strncasecmp(dialog_input_result, CONFIG_, strlen(CONFIG_)) == 0)
|
|
|
dialog_input += strlen(CONFIG_);
|
|
|
|
|
|
+ sttext = str_new();
|
|
|
+ str_printf(&sttext, "Search (%s)", dialog_input_result);
|
|
|
+ stpart.text = str_get(&sttext);
|
|
|
+ list_add_tail(&stpart.entries, &trail);
|
|
|
+
|
|
|
sym_arr = sym_re_search(dialog_input);
|
|
|
do {
|
|
|
LIST_HEAD(head);
|
|
@@ -389,8 +440,10 @@ again:
|
|
|
.targets = targets,
|
|
|
.keys = keys,
|
|
|
};
|
|
|
+ struct jump_key *pos, *tmp;
|
|
|
|
|
|
res = get_relations_str(sym_arr, &head);
|
|
|
+ set_subtitle();
|
|
|
dres = show_textbox_ext(_("Search Results"), (char *)
|
|
|
str_get(&res), 0, 0, keys, &vscroll,
|
|
|
&hscroll, &update_text, (void *)
|
|
@@ -402,9 +455,13 @@ again:
|
|
|
again = true;
|
|
|
}
|
|
|
str_free(&res);
|
|
|
+ list_for_each_entry_safe(pos, tmp, &head, entries)
|
|
|
+ free(pos);
|
|
|
} while (again);
|
|
|
free(sym_arr);
|
|
|
str_free(&title);
|
|
|
+ list_del(trail.prev);
|
|
|
+ str_free(&sttext);
|
|
|
}
|
|
|
|
|
|
static void build_conf(struct menu *menu)
|
|
@@ -589,16 +646,24 @@ static void conf(struct menu *menu, struct menu *active_menu)
|
|
|
{
|
|
|
struct menu *submenu;
|
|
|
const char *prompt = menu_get_prompt(menu);
|
|
|
+ struct subtitle_part stpart;
|
|
|
struct symbol *sym;
|
|
|
int res;
|
|
|
int s_scroll = 0;
|
|
|
|
|
|
+ if (menu != &rootmenu)
|
|
|
+ stpart.text = menu_get_prompt(menu);
|
|
|
+ else
|
|
|
+ stpart.text = NULL;
|
|
|
+ list_add_tail(&stpart.entries, &trail);
|
|
|
+
|
|
|
while (1) {
|
|
|
item_reset();
|
|
|
current_menu = menu;
|
|
|
build_conf(menu);
|
|
|
if (!child_count)
|
|
|
break;
|
|
|
+ set_subtitle();
|
|
|
dialog_clear();
|
|
|
res = dialog_menu(prompt ? _(prompt) : _("Main Menu"),
|
|
|
_(menu_instructions),
|
|
@@ -640,13 +705,17 @@ static void conf(struct menu *menu, struct menu *active_menu)
|
|
|
case 2:
|
|
|
if (sym)
|
|
|
show_help(submenu);
|
|
|
- else
|
|
|
+ else {
|
|
|
+ reset_subtitle();
|
|
|
show_helptext(_("README"), _(mconf_readme));
|
|
|
+ }
|
|
|
break;
|
|
|
case 3:
|
|
|
+ reset_subtitle();
|
|
|
conf_save();
|
|
|
break;
|
|
|
case 4:
|
|
|
+ reset_subtitle();
|
|
|
conf_load();
|
|
|
break;
|
|
|
case 5:
|
|
@@ -679,6 +748,8 @@ static void conf(struct menu *menu, struct menu *active_menu)
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ list_del(trail.prev);
|
|
|
}
|
|
|
|
|
|
static int show_textbox_ext(const char *title, char *text, int r, int c, int
|
|
@@ -881,6 +952,7 @@ static int handle_exit(void)
|
|
|
int res;
|
|
|
|
|
|
save_and_exit = 1;
|
|
|
+ reset_subtitle();
|
|
|
dialog_clear();
|
|
|
if (conf_get_changed())
|
|
|
res = dialog_yesno(NULL,
|