Browse Source

Change "saved ok" msg to dismiss on any key press

Also will no longer eat the key event.
master
cancel 5 years ago
parent
commit
c13bb9937b
  1. 25
      term_util.c
  2. 13
      term_util.h
  3. 12
      tui_main.c

25
term_util.c

@ -35,6 +35,7 @@ void term_util_init_colors() {
struct Qmsg {
Qblock qblock;
Qmsg_dismiss_mode dismiss_mode;
};
struct Qmenu_item_extra {
@ -212,9 +213,16 @@ void qmsg_set_title(Qmsg *qm, char const *title) {
qblock_set_title(&qm->qblock, title);
}
void qmsg_set_dismiss_mode(Qmsg *qm, Qmsg_dismiss_mode mode) {
if (qm->dismiss_mode == mode)
return;
qm->dismiss_mode = mode;
}
Qmsg *qmsg_push(int height, int width) {
Qmsg *qm = malloc(sizeof(Qmsg));
qblock_init(&qm->qblock, Qblock_type_qmsg);
qm->dismiss_mode = Qmsg_dismiss_mode_explicitly;
qnav_stack_push(&qm->qblock, height, width);
return qm;
}
@ -270,13 +278,26 @@ Qmsg *qmsg_printf_push(char const *title, char const *fmt, ...) {
return msg;
}
bool qmsg_drive(Qmsg *qm, int key) {
(void)qm;
bool qmsg_drive(Qmsg *qm, int key, Qmsg_action *out_action) {
memset(out_action, 0, sizeof(Qmsg_action));
Qmsg_dismiss_mode dm = qm->dismiss_mode;
switch (dm) {
case Qmsg_dismiss_mode_explicitly:
break;
case Qmsg_dismiss_mode_easily:
out_action->dismiss = true;
return true;
case Qmsg_dismiss_mode_passthrough:
out_action->dismiss = true;
out_action->passthrough = true;
return true;
}
switch (key) {
case ' ':
case 27:
case '\r':
case KEY_ENTER:
out_action->dismiss = true;
return true;
}
return false;

13
term_util.h

@ -106,6 +106,16 @@ typedef union {
Qform_action_any any;
} Qform_action;
typedef enum {
Qmsg_dismiss_mode_explicitly, // Space, return, escape dismiss. Default.
Qmsg_dismiss_mode_easily, // Any key dismisses.
Qmsg_dismiss_mode_passthrough, // Easily, and pass through key event.
} Qmsg_dismiss_mode;
typedef struct {
bool dismiss : 1, passthrough : 1;
} Qmsg_action;
void qnav_init(void);
void qnav_deinit(void);
Qblock *qnav_top_block(void);
@ -119,7 +129,8 @@ Qmsg *qmsg_printf_push(char const *title, char const *fmt, ...)
ORCA_TERM_UTIL_PRINTF(2, 3);
WINDOW *qmsg_window(Qmsg *qm);
void qmsg_set_title(Qmsg *qm, char const *title);
bool qmsg_drive(Qmsg *qm, int key);
void qmsg_set_dismiss_mode(Qmsg *qm, Qmsg_dismiss_mode mode);
bool qmsg_drive(Qmsg *qm, int key, Qmsg_action *out_action);
Qmsg *qmsg_of(Qblock *qb);
Qmenu *qmenu_create(int id);

12
tui_main.c

@ -2176,7 +2176,8 @@ bool try_save_with_msg(Field *field, oso const *str) {
return false;
bool ok = hacky_try_save(field, osoc(str));
if (ok) {
qmsg_printf_push(NULL, "Saved to:\n%s", osoc(str));
Qmsg *qm = qmsg_printf_push(NULL, "Saved to:\n%s", osoc(str));
qmsg_set_dismiss_mode(qm, Qmsg_dismiss_mode_passthrough);
} else {
qmsg_printf_push("Error Saving File", "Unable to save file to:\n%s",
osoc(str));
@ -3163,8 +3164,13 @@ int main(int argc, char **argv) {
switch (qb->tag) {
case Qblock_type_qmsg: {
Qmsg *qm = qmsg_of(qb);
if (qmsg_drive(qm, key))
qnav_stack_pop();
Qmsg_action act;
if (qmsg_drive(qm, key, &act)) {
if (act.dismiss)
qnav_stack_pop();
if (act.passthrough)
ungetch(key);
}
} break;
case Qblock_type_qmenu: {
Qmenu *qm = qmenu_of(qb);

Loading…
Cancel
Save