/* Return MSG_HANDLED if we want a redraw */ static cb_ret_t listbox_key (WListbox * l, int key) { unsigned long command; if (l->list == NULL) return MSG_NOT_HANDLED; /* focus on listbox item N by '0'..'9' keys */ if (key >= '0' && key <= '9') { int oldpos = l->pos; listbox_select_entry (l, key - '0'); /* need scroll to item? */ if (abs (oldpos - l->pos) > WIDGET (l)->lines) l->top = l->pos; return MSG_HANDLED; } command = keybind_lookup_keymap_command (listbox_map, key); if (command == CK_IgnoreKey) return MSG_NOT_HANDLED; return listbox_execute_cmd (l, command); }
static cb_ret_t dlg_handle_key (Dlg_head * h, int d_key) { unsigned long command; command = keybind_lookup_keymap_command (dialog_map, d_key); if ((command == CK_IgnoreKey) || (dlg_execute_cmd (h, command) == MSG_NOT_HANDLED)) return MSG_NOT_HANDLED; else return MSG_HANDLED; }
static cb_ret_t dlg_handle_key (WDialog * h, int d_key) { long command; command = keybind_lookup_keymap_command (dialog_map, d_key); if (command != CK_IgnoreKey) return dlg_execute_cmd (h, command); return MSG_NOT_HANDLED; }
static cb_ret_t help_handle_key (WDialog * h, int c) { unsigned long command; command = keybind_lookup_keymap_command (help_map, c); if ((command == CK_IgnoreKey) || (help_execute_cmd (command) == MSG_NOT_HANDLED)) return MSG_NOT_HANDLED; send_message (h, NULL, MSG_DRAW, 0, NULL); return MSG_HANDLED; }
static cb_ret_t dlg_handle_key (WDialog * h, int d_key) { unsigned long command; command = keybind_lookup_keymap_command (dialog_map, d_key); if (command == CK_IgnoreKey) return MSG_NOT_HANDLED; if (send_message (h, NULL, MSG_ACTION, command, NULL) == MSG_HANDLED || dlg_execute_cmd (h, command) == MSG_HANDLED) return MSG_HANDLED; return MSG_NOT_HANDLED; }
static cb_ret_t dlg_handle_key (Dlg_head * h, int d_key) { unsigned long command; command = keybind_lookup_keymap_command (dialog_map, d_key); if (command == CK_IgnoreKey) return MSG_NOT_HANDLED; if (h->callback (h, NULL, DLG_ACTION, command, NULL) == MSG_HANDLED || dlg_execute_cmd (h, command) == MSG_HANDLED) return MSG_HANDLED; return MSG_NOT_HANDLED; }
void buttonbar_set_label (WButtonBar * bb, int idx, const char *text, const struct global_keymap_t *keymap, const Widget * receiver) { if ((bb != NULL) && (idx >= 1) && (idx <= BUTTONBAR_LABELS_NUM)) { unsigned long command = CK_IgnoreKey; if (keymap != NULL) command = keybind_lookup_keymap_command (keymap, KEY_F (idx)); if ((text == NULL) || (text[0] == '\0')) set_label_text (bb, idx, ""); else set_label_text (bb, idx, text); bb->labels[idx - 1].command = command; bb->labels[idx - 1].receiver = WIDGET (receiver); } }
/* Return MSG_HANDLED if we want a redraw */ static cb_ret_t listbox_key (WListbox * l, int key) { long command; if (l->list == NULL) return MSG_NOT_HANDLED; /* focus on listbox item N by '0'..'9' keys */ if (key >= '0' && key <= '9') { listbox_select_entry (l, key - '0'); return MSG_HANDLED; } command = keybind_lookup_keymap_command (listbox_map, key); if (command == CK_IgnoreKey) return MSG_NOT_HANDLED; return listbox_execute_cmd (l, command); }
static cb_ret_t edit_dialog_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data) { WMenuBar *menubar; WButtonBar *buttonbar; WDialog *h = DIALOG (w); switch (msg) { case MSG_INIT: edit_dlg_init (); return MSG_HANDLED; case MSG_DRAW: /* don't use dlg_default_repaint() -- we don't need a frame */ tty_setcolor (EDITOR_BACKGROUND); dlg_erase (h); return MSG_HANDLED; case MSG_RESIZE: menubar = find_menubar (h); buttonbar = find_buttonbar (h); /* dlg_set_size() is surplus for this case */ w->lines = LINES; w->cols = COLS; widget_set_size (WIDGET (buttonbar), w->lines - 1, w->x, 1, w->cols); widget_set_size (WIDGET (menubar), w->y, w->x, 1, w->cols); menubar_arrange (menubar); g_list_foreach (h->widgets, (GFunc) edit_dialog_resize_cb, NULL); return MSG_HANDLED; case MSG_ACTION: { /* Handle shortcuts, menu, and buttonbar. */ cb_ret_t result; result = edit_dialog_command_execute (h, parm); /* We forward any commands coming from the menu, and which haven't been handled by the dialog, to the focused WEdit window. */ if (result == MSG_NOT_HANDLED && sender == WIDGET (find_menubar (h))) result = send_message (h->current->data, NULL, MSG_ACTION, parm, NULL); return result; } case MSG_KEY: { Widget *we = WIDGET (h->current->data); cb_ret_t ret = MSG_NOT_HANDLED; if (edit_widget_is_editor (we)) { WEdit *e = (WEdit *) we; long command; if (!e->extmod) command = keybind_lookup_keymap_command (editor_map, parm); else command = keybind_lookup_keymap_command (editor_x_map, parm); if (command == CK_IgnoreKey) e->extmod = FALSE; else { ret = edit_dialog_command_execute (h, command); /* if command was not handled, keep the extended mode for the further key processing */ if (ret == MSG_HANDLED) e->extmod = FALSE; } } /* * Due to the "end of bracket" escape the editor sees input with is_idle() == false * (expects more characters) and hence doesn't yet refresh the screen, but then * no further characters arrive (there's only an "end of bracket" which is swallowed * by tty_get_event()), so you end up with a screen that's not refreshed after pasting. * So let's trigger an IDLE signal. */ if (!is_idle ()) widget_idle (w, TRUE); return ret; } /* hardcoded menu hotkeys (see edit_drop_hotkey_menu) */ case MSG_UNHANDLED_KEY: return edit_drop_hotkey_menu (h, parm) ? MSG_HANDLED : MSG_NOT_HANDLED; case MSG_VALIDATE: edit_quit (h); return MSG_HANDLED; case MSG_END: edit_dlg_deinit (); return MSG_HANDLED; case MSG_IDLE: widget_idle (w, FALSE); return send_message (h->current->data, NULL, MSG_IDLE, 0, NULL); default: return dlg_default_callback (w, sender, msg, parm, data); } }
static gboolean edit_translate_key (WEdit * edit, long x_key, int *cmd, int *ch) { long command = CK_InsertChar; int char_for_insertion = -1; /* an ordinary insertable character */ if (!edit->extmod && x_key < 256) { #ifndef HAVE_CHARSET if (is_printable (x_key)) { char_for_insertion = x_key; goto fin; } #else int c; if (edit->charpoint >= 4) { edit->charpoint = 0; edit->charbuf[edit->charpoint] = '\0'; } if (edit->charpoint < 4) { edit->charbuf[edit->charpoint++] = x_key; edit->charbuf[edit->charpoint] = '\0'; } /* input from 8-bit locale */ if (!mc_global.utf8_display) { /* source in 8-bit codeset */ c = convert_from_input_c (x_key); if (is_printable (c)) { if (!edit->utf8) char_for_insertion = c; else char_for_insertion = convert_from_8bit_to_utf_c2 ((char) x_key); goto fin; } } else { /* UTF-8 locale */ int res; res = str_is_valid_char (edit->charbuf, edit->charpoint); if (res < 0 && res != -2) { edit->charpoint = 0; /* broken multibyte char, skip */ goto fin; } if (edit->utf8) { /* source in UTF-8 codeset */ if (res < 0) { char_for_insertion = x_key; goto fin; } edit->charbuf[edit->charpoint] = '\0'; edit->charpoint = 0; if (g_unichar_isprint (g_utf8_get_char (edit->charbuf))) { char_for_insertion = x_key; goto fin; } } else { /* 8-bit source */ if (res < 0) { /* not finised multibyte input (in meddle multibyte utf-8 char) */ goto fin; } if (g_unichar_isprint (g_utf8_get_char (edit->charbuf))) { c = convert_from_utf_to_current (edit->charbuf); edit->charbuf[0] = '\0'; edit->charpoint = 0; char_for_insertion = c; goto fin; } /* unprinteble utf input, skip it */ edit->charbuf[0] = '\0'; edit->charpoint = 0; } } #endif /* HAVE_CHARSET */ } /* Commands specific to the key emulation */ if (edit->extmod) { edit->extmod = FALSE; command = keybind_lookup_keymap_command (editor_x_map, x_key); } else command = keybind_lookup_keymap_command (editor_map, x_key); if (command == CK_IgnoreKey) command = CK_InsertChar; fin: *cmd = (int) command; /* FIXME */ *ch = char_for_insertion; return !(command == CK_InsertChar && char_for_insertion == -1); }
static cb_ret_t edit_dialog_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void *data) { WMenuBar *menubar; WButtonBar *buttonbar; switch (msg) { case DLG_INIT: edit_dlg_init (); return MSG_HANDLED; case DLG_DRAW: /* don't use common_dialog_repaint() -- we don't need a frame */ tty_setcolor (EDITOR_BACKGROUND); dlg_erase (h); return MSG_HANDLED; case DLG_RESIZE: menubar = find_menubar (h); buttonbar = find_buttonbar (h); /* dlg_set_size() is surplus for this case */ h->lines = LINES; h->cols = COLS; widget_set_size (&buttonbar->widget, h->lines - 1, h->x, 1, h->cols); widget_set_size (&menubar->widget, h->y, h->x, 1, h->cols); menubar_arrange (menubar); g_list_foreach (h->widgets, (GFunc) edit_dialog_resize_cb, NULL); return MSG_HANDLED; case DLG_ACTION: /* shortcut */ if (sender == NULL) return edit_dialog_command_execute (h, parm); /* message from menu */ menubar = find_menubar (h); if (sender == (Widget *) menubar) { if (edit_dialog_command_execute (h, parm) == MSG_HANDLED) return MSG_HANDLED; /* try send command to the current window */ return send_message ((Widget *) h->current->data, WIDGET_COMMAND, parm); } /* message from buttonbar */ buttonbar = find_buttonbar (h); if (sender == (Widget *) buttonbar) { if (data != NULL) return send_message ((Widget *) data, WIDGET_COMMAND, parm); return edit_dialog_command_execute (h, parm); } return MSG_NOT_HANDLED; case DLG_KEY: { Widget *w = h->current->data; cb_ret_t ret = MSG_NOT_HANDLED; if (edit_widget_is_editor (w)) { WEdit *e = (WEdit *) w; unsigned long command; if (!e->extmod) command = keybind_lookup_keymap_command (editor_map, parm); else { e->extmod = FALSE; command = keybind_lookup_keymap_command (editor_x_map, parm); } if (command != CK_IgnoreKey) ret = edit_dialog_command_execute (h, command); } return ret; } /* hardcoded menu hotkeys (see edit_drop_hotkey_menu) */ case DLG_UNHANDLED_KEY: return edit_drop_hotkey_menu (h, parm) ? MSG_HANDLED : MSG_NOT_HANDLED; case DLG_VALIDATE: edit_quit (h); return MSG_HANDLED; case DLG_END: edit_dlg_deinit (); return MSG_HANDLED; default: return default_dlg_callback (h, sender, msg, parm, data); } }