Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1d1e2cae authored by Benjamin Poirier's avatar Benjamin Poirier Committed by Michal Marek
Browse files

menuconfig: Extend dialog_textbox so that it can return to a scrolled position



We can now display other UI elements (menus) "on top" of a textbox and then
seemingly come back to it in the same state it was left.

Signed-off-by: default avatarBenjamin Poirier <bpoirier@suse.de>
Signed-off-by: default avatarMichal Marek <mmarek@suse.cz>
parent 537ddae7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -211,7 +211,7 @@ int dialog_yesno(const char *title, const char *prompt, int height, int width);
int dialog_msgbox(const char *title, const char *prompt, int height,
		  int width, int pause);
int dialog_textbox(const char *title, const char *file, int height, int width,
		   int *keys);
		   int *keys, int *_vscroll, int *_hscroll);
int dialog_menu(const char *title, const char *prompt,
		const void *selected, int *s_scroll);
int dialog_checklist(const char *title, const char *prompt, int height,
+23 −1
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ static void refresh_text_box(WINDOW *dialog, WINDOW *box, int boxh, int boxw,
 * keys is a null-terminated array
 */
int dialog_textbox(const char *title, const char *tbuf, int initial_height,
		   int initial_width, int *keys)
		   int initial_width, int *keys, int *_vscroll, int *_hscroll)
{
	int i, x, y, cur_x, cur_y, key = 0;
	int height, width, boxh, boxw;
@@ -65,6 +65,15 @@ int dialog_textbox(const char *title, const char *tbuf, int initial_height,
	buf = tbuf;
	page = buf;	/* page is pointer to start of page to be displayed */

	if (_vscroll && *_vscroll) {
		begin_reached = 0;

		for (i = 0; i < *_vscroll; i++)
			get_line();
	}
	if (_hscroll)
		hscroll = *_hscroll;

do_resize:
	getmaxyx(stdscr, height, width);
	if (height < 8 || width < 8)
@@ -275,6 +284,19 @@ int dialog_textbox(const char *title, const char *tbuf, int initial_height,
	}
	delwin(box);
	delwin(dialog);
	if (_vscroll) {
		const char *s;

		s = buf;
		*_vscroll = 0;
		back_lines(page_length);
		while (s < page && (s = strchr(s, '\n'))) {
			(*_vscroll)++;
			s++;
		}
	}
	if (_hscroll)
		*_hscroll = hscroll;
	return key;
}

+4 −4
Original line number Diff line number Diff line
@@ -280,7 +280,7 @@ static void conf_string(struct menu *menu);
static void conf_load(void);
static void conf_save(void);
static int show_textbox_ext(const char *title, const char *text, int r, int c,
			    int *keys);
			    int *keys, int *vscroll, int *hscroll);
static void show_textbox(const char *title, const char *text, int r, int c);
static void show_helptext(const char *title, const char *text);
static void show_help(struct menu *menu);
@@ -621,15 +621,15 @@ static void conf(struct menu *menu)
}

static int show_textbox_ext(const char *title, const char *text, int r, int c,
			    int *keys)
			    int *keys, int *vscroll, int *hscroll)
{
	dialog_clear();
	return dialog_textbox(title, text, r, c, keys);
	return dialog_textbox(title, text, r, c, keys, vscroll, hscroll);
}

static void show_textbox(const char *title, const char *text, int r, int c)
{
	show_textbox_ext(title, text, r, c, (int []) {0});
	show_textbox_ext(title, text, r, c, (int []) {0}, NULL, NULL);
}

static void show_helptext(const char *title, const char *text)