summaryrefslogtreecommitdiffstats
path: root/disk-utils/cfdisk.c
diff options
context:
space:
mode:
authorKarel Zak2015-02-03 10:37:33 +0100
committerKarel Zak2015-02-03 10:37:33 +0100
commitb5ef65a931ebc9111eaaa03df1db5cb9afaaa8cf (patch)
tree673e48dee4c0359d13a3ddcec9238727d2b7ac1e /disk-utils/cfdisk.c
parentcfdisk: disable some KEY_* in ui_get_wqstring() (diff)
downloadkernel-qcow2-util-linux-b5ef65a931ebc9111eaaa03df1db5cb9afaaa8cf.tar.gz
kernel-qcow2-util-linux-b5ef65a931ebc9111eaaa03df1db5cb9afaaa8cf.tar.xz
kernel-qcow2-util-linux-b5ef65a931ebc9111eaaa03df1db5cb9afaaa8cf.zip
cfdisk: force main menu to default to Quit/New menu items
Reported-by: Benno Schulenberg <bensberg@justemail.net> Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'disk-utils/cfdisk.c')
-rw-r--r--disk-utils/cfdisk.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/disk-utils/cfdisk.c b/disk-utils/cfdisk.c
index 042579138..ebd1e8ff5 100644
--- a/disk-utils/cfdisk.c
+++ b/disk-utils/cfdisk.c
@@ -155,6 +155,7 @@ struct cfdisk_menu {
size_t nitems; /* number of the active menu items */
size_t page_sz;/* when menu longer than screen */
size_t idx; /* the current menu item */
+ int prefkey;/* preferred menu item */
struct cfdisk_menu *prev;
/* @ignore keys generator */
@@ -729,7 +730,7 @@ static void menu_update_ignore(struct cfdisk *cf)
char ignore[128] = { 0 };
int i = 0;
struct cfdisk_menu *m;
- struct cfdisk_menuitem *d, *org;
+ struct cfdisk_menuitem *d, *org = NULL;
size_t idx;
assert(cf);
@@ -737,19 +738,20 @@ static void menu_update_ignore(struct cfdisk *cf)
assert(cf->menu->ignore_cb);
m = cf->menu;
- org = menu_get_menuitem(cf, m->idx);
-
DBG(MENU, ul_debug("update menu ignored keys"));
i = m->ignore_cb(cf, ignore, sizeof(ignore));
ignore[i] = '\0';
/* return if no change */
- if ( (!m->ignore && !*ignore)
+ if ((!m->ignore && !*ignore)
|| (m->ignore && *ignore && strcmp(m->ignore, ignore) == 0)) {
return;
}
+ if (!m->prefkey)
+ org = menu_get_menuitem(cf, m->idx);
+
free(m->ignore);
m->ignore = xstrdup(ignore);
m->nitems = 0;
@@ -760,9 +762,13 @@ static void menu_update_ignore(struct cfdisk *cf)
m->nitems++;
}
+ DBG(MENU, ul_debug("update menu preferred keys"));
+
/* refresh menu index to be at the same menuitem or go to the first */
if (org && menu_get_menuitem_by_key(cf, org->key, &idx))
m->idx = idx;
+ else if (m->prefkey && menu_get_menuitem_by_key(cf, m->prefkey, &idx))
+ m->idx = idx;
else
m->idx = 0;
@@ -792,6 +798,7 @@ static struct cfdisk_menu *menu_push(
}
cf->menu = m;
+
menu_refresh_size(cf);
return m;
}
@@ -1858,7 +1865,9 @@ static int main_menu_ignore_keys(struct cfdisk *cf, char *ignore,
ignore[i++] = 'd'; /* delete */
ignore[i++] = 't'; /* set type */
ignore[i++] = 'b'; /* set bootable */
+ cf->menu->prefkey = 'n';
} else {
+ cf->menu->prefkey = 'q';
ignore[i++] = 'n';
if (!fdisk_is_label(cf->cxt, DOS) &&
!fdisk_is_label(cf->cxt, SGI))
@@ -2072,7 +2081,6 @@ static void ui_resize_refresh(struct cfdisk *cf)
static int ui_run(struct cfdisk *cf)
{
int rc = 0;
- size_t qitem = 0;
ui_lines = LINES;
ui_cols = COLS;
@@ -2095,9 +2103,6 @@ static int ui_run(struct cfdisk *cf)
menu_push(cf, main_menuitems);
cf->menu->ignore_cb = main_menu_ignore_keys;
- if (menu_get_menuitem_by_key(cf, 'q', &qitem))
- cf->menu->idx = qitem;
-
rc = ui_refresh(cf);
if (rc)
return rc;