cfdisk: consolidate menu move code
Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
parent
8a7261140f
commit
ac27ea5c28
|
@ -80,7 +80,8 @@ static void ui_warnx(const char *fmt, ...);
|
||||||
static void ui_warn(const char *fmt, ...);
|
static void ui_warn(const char *fmt, ...);
|
||||||
static void ui_info(const char *fmt, ...);
|
static void ui_info(const char *fmt, ...);
|
||||||
static void ui_draw_menu(struct cfdisk *cf);
|
static void ui_draw_menu(struct cfdisk *cf);
|
||||||
static void ui_menu_goto(struct cfdisk *cf, int where);
|
static int ui_menu_move(struct cfdisk *cf, int key);
|
||||||
|
|
||||||
static int ui_get_size(struct cfdisk *cf, const char *prompt, uintmax_t *res,
|
static int ui_get_size(struct cfdisk *cf, const char *prompt, uintmax_t *res,
|
||||||
uintmax_t low, uintmax_t up);
|
uintmax_t low, uintmax_t up);
|
||||||
|
|
||||||
|
@ -380,17 +381,12 @@ static int ask_menu(struct fdisk_ask *ask, struct cfdisk *cf)
|
||||||
|
|
||||||
/* wait for keys */
|
/* wait for keys */
|
||||||
do {
|
do {
|
||||||
switch (getch()) {
|
int key = getch();
|
||||||
case KEY_LEFT:
|
|
||||||
#ifdef KEY_BTAB
|
if (ui_menu_move(cf, key) == 0)
|
||||||
case KEY_BTAB:
|
continue;
|
||||||
#endif
|
|
||||||
ui_menu_goto(cf, cf->menu_idx - 1);
|
switch (key) {
|
||||||
break;
|
|
||||||
case KEY_RIGHT:
|
|
||||||
case '\t':
|
|
||||||
ui_menu_goto(cf, cf->menu_idx + 1);
|
|
||||||
break;
|
|
||||||
case KEY_ENTER:
|
case KEY_ENTER:
|
||||||
case '\n':
|
case '\n':
|
||||||
case '\r':
|
case '\r':
|
||||||
|
@ -438,7 +434,6 @@ static int ask_callback(struct fdisk_context *cxt, struct fdisk_ask *ask,
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int ui_end(struct cfdisk *cf)
|
static int ui_end(struct cfdisk *cf)
|
||||||
{
|
{
|
||||||
if (cf && !ui_enabled)
|
if (cf && !ui_enabled)
|
||||||
|
@ -984,6 +979,49 @@ static void ui_menu_goto(struct cfdisk *cf, int where)
|
||||||
ui_draw_menuitem(cf, d, where);
|
ui_draw_menuitem(cf, d, where);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ui_menu_move(struct cfdisk *cf, int key)
|
||||||
|
{
|
||||||
|
assert(cf);
|
||||||
|
assert(cf->menu);
|
||||||
|
|
||||||
|
if (cf->menu->vertical)
|
||||||
|
{
|
||||||
|
switch (key) {
|
||||||
|
case KEY_DOWN:
|
||||||
|
case '\016': /* ^N */
|
||||||
|
case 'j': /* Vi-like alternative */
|
||||||
|
ui_menu_goto(cf, cf->menu_idx + 1);
|
||||||
|
return 0;
|
||||||
|
case KEY_UP:
|
||||||
|
case '\020': /* ^P */
|
||||||
|
case 'k': /* Vi-like alternative */
|
||||||
|
ui_menu_goto(cf, cf->menu_idx - 1);
|
||||||
|
return 0;
|
||||||
|
case KEY_HOME:
|
||||||
|
ui_menu_goto(cf, 0);
|
||||||
|
return 0;
|
||||||
|
case KEY_END:
|
||||||
|
ui_menu_goto(cf, cf->menu->nitems);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch (key) {
|
||||||
|
case KEY_RIGHT:
|
||||||
|
case '\t':
|
||||||
|
ui_menu_goto(cf, cf->menu_idx + 1);
|
||||||
|
return 0;
|
||||||
|
case KEY_LEFT:
|
||||||
|
#ifdef KEY_BTAB
|
||||||
|
case KEY_BTAB:
|
||||||
|
#endif
|
||||||
|
ui_menu_goto(cf, cf->menu_idx - 1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1; /* key irrelevant for menu move */
|
||||||
|
}
|
||||||
|
|
||||||
/* returns: error: < 0, success: 0, quit: 1 */
|
/* returns: error: < 0, success: 0, quit: 1 */
|
||||||
static int ui_menu_action(struct cfdisk *cf, int key)
|
static int ui_menu_action(struct cfdisk *cf, int key)
|
||||||
{
|
{
|
||||||
|
@ -1292,7 +1330,6 @@ static int ui_get_size(struct cfdisk *cf, const char *prompt, uintmax_t *res,
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int ui_run(struct cfdisk *cf)
|
static int ui_run(struct cfdisk *cf)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
@ -1308,6 +1345,9 @@ static int ui_run(struct cfdisk *cf)
|
||||||
do {
|
do {
|
||||||
int rc = 0, key = getch();
|
int rc = 0, key = getch();
|
||||||
|
|
||||||
|
if (ui_menu_move(cf, key) == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
case '\016': /* ^N */
|
case '\016': /* ^N */
|
||||||
|
@ -1327,16 +1367,6 @@ static int ui_run(struct cfdisk *cf)
|
||||||
break;
|
break;
|
||||||
ui_menu_action(cf, 0);
|
ui_menu_action(cf, 0);
|
||||||
break;
|
break;
|
||||||
case KEY_LEFT:
|
|
||||||
#ifdef KEY_BTAB
|
|
||||||
case KEY_BTAB:
|
|
||||||
#endif
|
|
||||||
ui_menu_goto(cf, cf->menu_idx - 1);
|
|
||||||
break;
|
|
||||||
case KEY_RIGHT:
|
|
||||||
case '\t':
|
|
||||||
ui_menu_goto(cf, cf->menu_idx + 1);
|
|
||||||
break;
|
|
||||||
case KEY_ENTER:
|
case KEY_ENTER:
|
||||||
case '\n':
|
case '\n':
|
||||||
case '\r':
|
case '\r':
|
||||||
|
|
Loading…
Reference in New Issue