summaryrefslogtreecommitdiff
path: root/source3/utils/regedit_valuelist.c
diff options
context:
space:
mode:
authorC. Davis <cd.rattan@gmail.com>2012-08-10 20:05:20 -0700
committerMichael Adam <obnox@samba.org>2013-04-29 13:06:20 +0200
commit58f9e368c8366bba103ae9214638cc4c99fe4caf (patch)
tree71cd6b23a7a47cbb2c26400dc9664734a6d57215 /source3/utils/regedit_valuelist.c
parent560003fcd98eb109dd8391c7975aae4ef277604b (diff)
downloadsamba-58f9e368c8366bba103ae9214638cc4c99fe4caf.tar.gz
samba-58f9e368c8366bba103ae9214638cc4c99fe4caf.tar.bz2
samba-58f9e368c8366bba103ae9214638cc4c99fe4caf.zip
regedit: Handle term resizes.
Reviewed-by: Andreas Schneider <asn@samba.org> Reviewed-by: Michael Adam <obnox@samba.org>
Diffstat (limited to 'source3/utils/regedit_valuelist.c')
-rw-r--r--source3/utils/regedit_valuelist.c37
1 files changed, 32 insertions, 5 deletions
diff --git a/source3/utils/regedit_valuelist.c b/source3/utils/regedit_valuelist.c
index 644375283d..6a02858918 100644
--- a/source3/utils/regedit_valuelist.c
+++ b/source3/utils/regedit_valuelist.c
@@ -49,13 +49,19 @@ static int value_list_free(struct value_list *vl)
if (vl->empty && vl->empty[0]) {
free_item(vl->empty[0]);
}
+ if (vl->panel) {
+ del_panel(vl->panel);
+ }
+ if (vl->window) {
+ delwin(vl->window);
+ }
value_list_free_items(vl->items);
return 0;
}
-struct value_list *value_list_new(TALLOC_CTX *ctx, WINDOW *orig, int nlines,
- int ncols, int begin_y, int begin_x)
+struct value_list *value_list_new(TALLOC_CTX *ctx, int nlines, int ncols,
+ int begin_y, int begin_x)
{
static const char *empty = "(no values)";
static const char *empty_desc = "";
@@ -77,8 +83,14 @@ struct value_list *value_list_new(TALLOC_CTX *ctx, WINDOW *orig, int nlines,
goto fail;
}
- vl->window = orig;
- vl->sub_window = derwin(orig, nlines, ncols, begin_y, begin_x);
+ vl->window = newwin(nlines, ncols, begin_y, begin_x);
+ if (vl->window == NULL) {
+ goto fail;
+ }
+ vl->panel = new_panel(vl->window);
+ if (vl->panel == NULL) {
+ goto fail;
+ }
vl->menu = new_menu(vl->empty);
if (vl->menu == NULL) {
@@ -87,7 +99,7 @@ struct value_list *value_list_new(TALLOC_CTX *ctx, WINDOW *orig, int nlines,
set_menu_format(vl->menu, nlines, 1);
set_menu_win(vl->menu, vl->window);
- set_menu_sub(vl->menu, vl->sub_window);
+
menu_opts_on(vl->menu, O_SHOWDESC);
set_menu_mark(vl->menu, "* ");
@@ -99,6 +111,21 @@ fail:
return NULL;
}
+void value_list_resize(struct value_list *vl, int nlines, int ncols,
+ int begin_y, int begin_x)
+{
+ WINDOW *nwin;
+
+ unpost_menu(vl->menu);
+ nwin = newwin(nlines, ncols, begin_y, begin_x);
+ replace_panel(vl->panel, nwin);
+ delwin(vl->window);
+ vl->window = nwin;
+ set_menu_format(vl->menu, nlines, 1);
+ set_menu_win(vl->menu, vl->window);
+ post_menu(vl->menu);
+}
+
static uint32_t get_num_values(TALLOC_CTX *ctx, const struct registry_key *key)
{
const char *classname;