/* * Callback for the parameter dialog. * Validate regex, prevent closing the dialog if it's invalid. */ static cb_ret_t find_parm_callback (struct Dlg_head *h, dlg_msg_t msg, int parm) { int flags; switch (msg) { case DLG_VALIDATE: if ((h->ret_value != B_ENTER) || !in_with->buffer[0]) return MSG_HANDLED; flags = REG_EXTENDED | REG_NOSUB; if (!(case_sense->state & C_BOOL)) flags |= REG_ICASE; if (regcomp (r, in_with->buffer, flags)) { message (1, MSG_ERROR, _(" Malformed regular expression ")); dlg_select_widget (h, in_with); h->running = 1; /* Don't stop the dialog */ } return MSG_HANDLED; default: return default_dlg_callback (h, msg, parm); } }
static cb_ret_t chmod_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void *data) { char buffer[BUF_TINY]; int id; id = dlg_get_current_widget_id (h) - (chmod_but_num - (single_set ? 4 : 0)) - 1; switch (msg) { case DLG_ACTION: /* close dialog due to SIGINT (ctrl-g) */ if (sender == NULL && parm == CK_Cancel) return MSG_NOT_HANDLED; /* handle checkboxes */ if (id >= 0) { gboolean sender_is_checkbox = FALSE; unsigned int i; /* whether action was sent by checkbox? */ for (i = 0; i < check_perm_num; i++) if (sender == (Widget *) check_perm[i].check) { sender_is_checkbox = TRUE; break; } if (sender_is_checkbox) { c_stat ^= check_perm[id].mode; g_snprintf (buffer, sizeof (buffer), "%o", (unsigned int) c_stat); label_set_text (statl, buffer); chmod_toggle_select (h, id); mode_change = TRUE; return MSG_HANDLED; } } return MSG_NOT_HANDLED; case DLG_KEY: if ((parm == 'T' || parm == 't' || parm == KEY_IC) && id > 0) { chmod_toggle_select (h, id); if (parm == KEY_IC) dlg_one_down (h); return MSG_HANDLED; } return MSG_NOT_HANDLED; case DLG_DRAW: chmod_refresh (h); return MSG_HANDLED; default: return default_dlg_callback (h, sender, msg, parm, data); } }
static cb_ret_t configure_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void *data) { switch (msg) { case DLG_ACTION: /* message from "Single press" checkbutton */ if (sender != NULL && sender->id == 17) { const gboolean not_single = !(((WCheck *) sender)->state & C_BOOL); Widget *w; /* label */ w = dlg_find_by_id (h, sender->id - 1); widget_disable (*w, not_single); send_message (w, WIDGET_DRAW, 0); /* input */ w = dlg_find_by_id (h, sender->id - 2); widget_disable (*w, not_single); send_message (w, WIDGET_DRAW, 0); return MSG_HANDLED; } return MSG_NOT_HANDLED; default: return default_dlg_callback (h, sender, msg, parm, data); } }
static cb_ret_t confvfs_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void *data) { switch (msg) { case DLG_ACTION: if (sender->id == 6) { /* message from "Always use ftp proxy" checkbutton */ const gboolean not_use = !(((WCheck *) sender)->state & C_BOOL); Widget *w; /* input */ w = dlg_find_by_id (h, sender->id - 1); widget_disable (*w, not_use); send_message (w, WIDGET_DRAW, 0); return MSG_HANDLED; } return MSG_NOT_HANDLED; default: return default_dlg_callback (h, sender, msg, parm, data); } }
static cb_ret_t chmod_callback (Dlg_head *h, dlg_msg_t msg, int parm) { char buffer[BUF_TINY]; int id = h->current->dlg_id - BUTTONS + single_set * 2; switch (msg) { case DLG_ACTION: if (id >= 0) { c_stat ^= check_perm[id].mode; g_snprintf (buffer, sizeof (buffer), "%o", c_stat); label_set_text (statl, buffer); chmod_toggle_select (h, id); mode_change = 1; } return MSG_HANDLED; case DLG_KEY: if ((parm == 'T' || parm == 't' || parm == KEY_IC) && id > 0) { chmod_toggle_select (h, id); if (parm == KEY_IC) dlg_one_down (h); return MSG_HANDLED; } return MSG_NOT_HANDLED; case DLG_DRAW: chmod_refresh (h); return MSG_HANDLED; default: return default_dlg_callback (h, msg, parm); } }
static cb_ret_t chown_callback (Dlg_head *h, dlg_msg_t msg, int parm) { switch (msg) { case DLG_DRAW: chown_refresh (h); return MSG_HANDLED; default: return default_dlg_callback (h, msg, parm); } }
static cb_ret_t view_dialog_callback (Dlg_head *h, dlg_msg_t msg, int parm) { switch (msg) { case DLG_RESIZE: view_adjust_size(h); return MSG_HANDLED; default: return default_dlg_callback(h, msg, parm); } }
static cb_ret_t editcmd_dialog_raw_key_query_cb (struct Dlg_head *h, dlg_msg_t msg, int parm) { switch (msg) { case DLG_KEY: dlg_stop (h); h->ret_value = parm; return MSG_HANDLED; default: return default_dlg_callback (h, msg, parm); } }
static cb_ret_t history_dlg_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void *data) { switch (msg) { case DLG_RESIZE: return history_dlg_reposition (h); default: return default_dlg_callback (h, sender, msg, parm, data); } }
static cb_ret_t chown_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void *data) { switch (msg) { case DLG_DRAW: chown_refresh (h); return MSG_HANDLED; default: return default_dlg_callback (h, sender, msg, parm, data); } }
static cb_ret_t edit_dialog_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void *data) { WEdit *edit; WMenuBar *menubar; WButtonBar *buttonbar; edit = (WEdit *) find_widget_type (h, edit_callback); menubar = find_menubar (h); buttonbar = find_buttonbar (h); switch (msg) { case DLG_INIT: edit_set_buttonbar (edit, buttonbar); return MSG_HANDLED; case DLG_DRAW: /* don't use common_dialog_repaint() -- we don't need a frame */ tty_setcolor (EDITOR_NORMAL_COLOR); dlg_erase (h); return MSG_HANDLED; case DLG_RESIZE: /* 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); widget_set_size (&edit->widget, h->y + 1, h->x, h->lines - 2, h->cols); return MSG_HANDLED; case DLG_ACTION: if (sender == (Widget *) menubar) return send_message ((Widget *) edit, WIDGET_COMMAND, parm); if (sender == (Widget *) buttonbar) return send_message ((Widget *) edit, WIDGET_COMMAND, parm); return MSG_HANDLED; case DLG_VALIDATE: h->state = DLG_ACTIVE; /* don't stop the dialog before final decision */ if (edit_ok_to_exit (edit)) h->state = DLG_CLOSED; return MSG_HANDLED; default: return default_dlg_callback (h, sender, msg, parm, data); } }
static cb_ret_t learn_callback (Dlg_head *h, dlg_msg_t msg, int parm) { switch (msg) { case DLG_DRAW: common_dialog_repaint (h); return MSG_HANDLED; case DLG_KEY: return learn_check_key (parm); default: return default_dlg_callback (h, msg, parm); } }
static cb_ret_t chl_callback (Dlg_head *h, dlg_msg_t msg, int parm) { switch (msg) { case DLG_KEY: switch (parm) { case KEY_LEFT: case KEY_RIGHT: h->ret_value = parm; dlg_stop (h); } default: return default_dlg_callback (h, msg, parm); } }
static cb_ret_t default_query_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void *data) { switch (msg) { case DLG_RESIZE: if ((h->flags & DLG_CENTER) == 0) { Dlg_head *prev_dlg = NULL; int ypos, xpos; /* get dialog under h */ if (top_dlg != NULL) { if (top_dlg->data != (void *) h) prev_dlg = (Dlg_head *) top_dlg->data; else { GList *p; /* Top dialog is current if it is visible. Get previous dialog in stack */ p = g_list_next (top_dlg); if (p != NULL) prev_dlg = (Dlg_head *) p->data; } } /* if previous dialog is not fullscreen'd -- overlap it */ if (prev_dlg == NULL || prev_dlg->fullscreen) ypos = LINES / 3 - (h->lines - 3) / 2; else ypos = prev_dlg->y + 2; xpos = COLS / 2 - h->cols / 2; /* set position */ dlg_set_position (h, ypos, xpos, ypos + h->lines, xpos + h->cols); return MSG_HANDLED; } /* fallthrough */ default: return default_dlg_callback (h, sender, msg, parm, data); } }
static cb_ret_t tree_callback (struct Dlg_head *h, dlg_msg_t msg, int parm) { switch (msg) { case DLG_POST_KEY: /* The enter key will be processed by the tree widget */ if (parm == '\n') { h->ret_value = B_ENTER; dlg_stop (h); } return MSG_HANDLED; default: return default_dlg_callback (h, msg, parm); } }
static cb_ret_t display_callback (struct Dlg_head *h, dlg_msg_t msg, int parm) { switch (msg) { case DLG_UNFOCUS: if (dlg_widget_active (my_radio)) { assign_text (status, displays_status[my_radio->sel]); input_set_point (status, 0); } return MSG_HANDLED; case DLG_KEY: if (parm == '\n') { if (dlg_widget_active (my_radio)) { assign_text (status, displays_status[my_radio->sel]); dlg_stop (h); return MSG_HANDLED; } if (dlg_widget_active (user)) { h->ret_value = B_USER + 6; dlg_stop (h); return MSG_HANDLED; } if (dlg_widget_active (status)) { h->ret_value = B_USER + 7; dlg_stop (h); return MSG_HANDLED; } } if (tolower (parm) == user_hotkey && dlg_widget_active (user) && dlg_widget_active (status)) { my_radio->sel = 3; dlg_select_widget (h, my_radio); /* force redraw */ dlg_select_widget (h, user); return MSG_HANDLED; } return MSG_NOT_HANDLED; default: return default_dlg_callback (h, msg, parm); } }
static cb_ret_t panelize_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void *data) { switch (msg) { case DLG_INIT: case DLG_POST_KEY: tty_setcolor (MENU_ENTRY_COLOR); update_command (); return MSG_HANDLED; case DLG_DRAW: common_dialog_repaint (h); tty_setcolor (COLOR_NORMAL); draw_box (h, UY, UX, h->lines - 10, h->cols - 10, TRUE); return MSG_HANDLED; default: return default_dlg_callback (h, sender, msg, parm, data); } }
static cb_ret_t panelize_callback (Dlg_head *h, dlg_msg_t msg, int parm) { switch (msg) { case DLG_DRAW: common_dialog_repaint (h); attrset (COLOR_NORMAL); draw_box (h, UY, UX, h->lines - 10, h->cols - 10); return MSG_HANDLED; case DLG_POST_KEY: /* fall */ case DLG_INIT: attrset (MENU_ENTRY_COLOR); update_command (); return MSG_HANDLED; default: return default_dlg_callback (h, msg, parm); } }
static cb_ret_t tree_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void *data) { switch (msg) { case DLG_POST_KEY: /* The enter key will be processed by the tree widget */ if (parm == '\n') { h->ret_value = B_ENTER; dlg_stop (h); } return MSG_HANDLED; case DLG_ACTION: /* command from buttonbar */ return send_message ((Widget *) find_tree (h), WIDGET_COMMAND, parm); default: return default_dlg_callback (h, sender, msg, parm, data); } }
static cb_ret_t layout_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void *data) { switch (msg) { case DLG_DRAW: /*When repainting the whole dialog (e.g. with C-l) we have to update everything */ common_dialog_repaint (h); old_first_panel_size = -1; old_horizontal_split = -1; old_output_lines = -1; update_split (h); if (old_output_lines != _output_lines) { old_output_lines = _output_lines; tty_setcolor (mc_global.tty.console_flag ? COLOR_NORMAL : DISABLED_COLOR); dlg_move (h, 9, 5); tty_print_string (output_lines_label); dlg_move (h, 9, 5 + 3 + output_lines_label_len); tty_printf ("%02d", _output_lines); } return MSG_HANDLED; case DLG_POST_KEY: _menubar_visible = check_options[5].widget->state & C_BOOL; _command_prompt = check_options[4].widget->state & C_BOOL; _keybar_visible = check_options[3].widget->state & C_BOOL; _message_visible = check_options[2].widget->state & C_BOOL; _xterm_title = check_options[1].widget->state & C_BOOL; _free_space = check_options[0].widget->state & C_BOOL; if (mc_global.tty.console_flag) { int minimum; if (_output_lines < 0) _output_lines = 0; height = LINES - _keybar_visible - _command_prompt - _menubar_visible - _output_lines - _message_visible; minimum = MINHEIGHT * (1 + _horizontal_split); if (height < minimum) { _output_lines -= minimum - height; height = minimum; } } else height = LINES - _keybar_visible - _command_prompt - _menubar_visible - _output_lines - _message_visible; if (old_output_lines != _output_lines) { old_output_lines = _output_lines; tty_setcolor (mc_global.tty.console_flag ? COLOR_NORMAL : DISABLED_COLOR); dlg_move (h, 9, 5 + 3 + output_lines_label_len); tty_printf ("%02d", _output_lines); } return MSG_HANDLED; case DLG_ACTION: if (sender == (Widget *) radio_widget) { if (_horizontal_split != radio_widget->sel) { _horizontal_split = radio_widget->sel; if (_equal_split) { if (_horizontal_split) _first_panel_size = height / 2; else _first_panel_size = COLS / 2; } } update_split (h); return MSG_HANDLED; } if (sender == (Widget *) check_options[6].widget) { _equal_split = check_options[6].widget->state & C_BOOL; widget_disable (bleft_widget->widget, _equal_split); send_message ((Widget *) bleft_widget, WIDGET_DRAW, 0); widget_disable (bright_widget->widget, _equal_split); send_message ((Widget *) bright_widget, WIDGET_DRAW, 0); update_split (h); return MSG_HANDLED; } return MSG_NOT_HANDLED; default: return default_dlg_callback (h, sender, msg, parm, data); } }
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); } }
static cb_ret_t display_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void *data) { switch (msg) { case DLG_KEY: if (parm == '\n') { if (dlg_widget_active (display_radio)) { input_assign_text (display_mini_status, displays_status[display_radio->sel]); dlg_stop (h); return MSG_HANDLED; } if (dlg_widget_active (display_user_format)) { h->ret_value = B_USER + 6; dlg_stop (h); return MSG_HANDLED; } if (dlg_widget_active (display_mini_status)) { h->ret_value = B_USER + 7; dlg_stop (h); return MSG_HANDLED; } } if ((g_ascii_tolower (parm) == display_user_hotkey) && dlg_widget_active (display_user_format) && dlg_widget_active (display_mini_status)) { display_radio->pos = display_radio->sel = 3; dlg_select_widget (display_radio); /* force redraw */ h->callback (h, (Widget *) display_radio, DLG_ACTION, 0, NULL); return MSG_HANDLED; } return MSG_NOT_HANDLED; case DLG_ACTION: if (sender == (Widget *) display_radio) { if (!(display_check_status->state & C_BOOL)) input_assign_text (display_mini_status, displays_status[display_radio->sel]); input_update (display_mini_status, FALSE); input_update (display_user_format, FALSE); widget_disable (display_user_format->widget, display_radio->sel != 3); return MSG_HANDLED; } if (sender == (Widget *) display_check_status) { if (display_check_status->state & C_BOOL) { widget_disable (display_mini_status->widget, FALSE); input_assign_text (display_mini_status, displays_status[3]); } else { widget_disable (display_mini_status->widget, TRUE); input_assign_text (display_mini_status, displays_status[display_radio->sel]); } input_update (display_mini_status, FALSE); return MSG_HANDLED; } return MSG_NOT_HANDLED; default: return default_dlg_callback (h, sender, msg, parm, data); } }
static cb_ret_t layout_callback (struct Dlg_head *h, dlg_msg_t msg, int parm) { switch (msg) { case DLG_DRAW: /*When repainting the whole dialog (e.g. with C-l) we have to update everything*/ common_dialog_repaint (h); old_first_panel_size = -1; old_horizontal_split = -1; old_output_lines = -1; attrset (COLOR_HOT_NORMAL); update_split (); dlg_move (h, 6, 13); addch ('='); if (console_flag){ if (old_output_lines != _output_lines){ old_output_lines = _output_lines; attrset (COLOR_NORMAL); dlg_move (h, 9, 16 + first_width); addstr (output_lines_label); dlg_move (h, 9, 10 + first_width); printw ("%02d", _output_lines); } } return MSG_HANDLED; case DLG_POST_KEY: _filetype_mode = check_options [8].widget->state & C_BOOL; _permission_mode = check_options [7].widget->state & C_BOOL; _equal_split = check_options [6].widget->state & C_BOOL; /* _menubar_visible = check_options [5].widget->state & C_BOOL; */ /* _command_prompt = check_options [4].widget->state & C_BOOL; */ /* _keybar_visible = check_options [2].widget->state & C_BOOL; */ _message_visible = check_options [1].widget->state & C_BOOL; /* _xterm_title = check_options [0].widget->state & C_BOOL; */ if (console_flag){ int minimum; if (_output_lines < 0) _output_lines = 0; height = LINES - _keybar_visible - _command_prompt - _menubar_visible - _output_lines - _message_visible; minimum = MINHEIGHT * (1 + _horizontal_split); if (height < minimum){ _output_lines -= minimum - height; height = minimum; } } else { height = LINES - _keybar_visible - _command_prompt - _menubar_visible - _output_lines - _message_visible; } if (_horizontal_split != radio_widget->sel){ _horizontal_split = radio_widget->sel; if (_horizontal_split) _first_panel_size = height / 2; else _first_panel_size = COLS / 2; } update_split (); if (console_flag){ if (old_output_lines != _output_lines){ old_output_lines = _output_lines; attrset (COLOR_NORMAL); dlg_move (h, 9, 10 + first_width); printw ("%02d", _output_lines); } } return MSG_HANDLED; default: return default_dlg_callback (h, msg, parm); } }
static cb_ret_t query_callback (Dlg_head *h, dlg_msg_t msg, int parm) { switch (msg) { case DLG_KEY: switch (parm) { case KEY_LEFT: case KEY_RIGHT: h->ret_value = 0; dlg_stop (h); return 1; case KEY_BACKSPACE: if (end == min_end) { h->ret_value = 0; dlg_stop (h); return 1; } else { WLEntry *e, *e1; e1 = e = ((WListbox *) (h->current))->list; do { if (!strncmp (input->buffer + start, e1->text, end - start - 1)) { listbox_select_entry ((WListbox *) (h->current), e1); handle_char (input, parm); end--; send_message (h->current, WIDGET_DRAW, 0); break; } e1 = e1->next; } while (e != e1); } return 1; default: if (parm > 0xff || !is_printable (parm)) { if (is_in_input_map (input, parm) == 2) { if (end == min_end) return 1; h->ret_value = B_USER; /* This means we want to refill the list box and start again */ dlg_stop (h); return 1; } else return 0; } else { WLEntry *e, *e1; int need_redraw = 0; int low = 4096; char *last_text = NULL; e1 = e = ((WListbox *) (h->current))->list; do { if (!strncmp (input->buffer + start, e1->text, end - start)) { if (e1->text[end - start] == parm) { if (need_redraw) { register int c1, c2, si; for (si = end - start + 1; (c1 = last_text[si]) && (c2 = e1->text[si]); si++) if (c1 != c2) break; if (low > si) low = si; last_text = e1->text; need_redraw = 2; } else { need_redraw = 1; listbox_select_entry ((WListbox *) (h-> current), e1); last_text = e1->text; } } } e1 = e1->next; } while (e != e1); if (need_redraw == 2) { insert_text (input, last_text, low); send_message (h->current, WIDGET_DRAW, 0); } else if (need_redraw == 1) { h->ret_value = B_ENTER; dlg_stop (h); } } return MSG_HANDLED; } break; default: return default_dlg_callback (h, msg, parm); } }
static cb_ret_t query_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void *data) { static char buff[MB_LEN_MAX] = ""; static int bl = 0; switch (msg) { case DLG_KEY: switch (parm) { case KEY_LEFT: case KEY_RIGHT: bl = 0; h->ret_value = 0; dlg_stop (h); return MSG_HANDLED; case KEY_BACKSPACE: bl = 0; /* exit from completion list if input line is empty */ if (end == 0) { h->ret_value = 0; dlg_stop (h); } /* Refill the list box and start again */ else if (end == min_end) { end = str_get_prev_char (&input->buffer[end]) - input->buffer; input_handle_char (input, parm); h->ret_value = B_USER; dlg_stop (h); return MSG_HANDLED; } else { int new_end; int i; GList *e; new_end = str_get_prev_char (&input->buffer[end]) - input->buffer; for (i = 0, e = ((WListbox *) h->current->data)->list; e != NULL; i++, e = g_list_next (e)) { WLEntry *le = (WLEntry *) e->data; if (strncmp (input->buffer + start, le->text, new_end - start) == 0) { listbox_select_entry ((WListbox *) h->current->data, i); end = new_end; input_handle_char (input, parm); send_message ((Widget *) h->current->data, WIDGET_DRAW, 0); break; } } } return MSG_HANDLED; default: if (parm < 32 || parm > 255) { bl = 0; if (input_key_is_in_map (input, parm) != 2) return MSG_NOT_HANDLED; if (end == min_end) return MSG_HANDLED; /* This means we want to refill the list box and start again */ h->ret_value = B_USER; dlg_stop (h); return MSG_HANDLED; } else { GList *e; int i; int need_redraw = 0; int low = 4096; char *last_text = NULL; buff[bl++] = (char) parm; buff[bl] = '\0'; switch (str_is_valid_char (buff, bl)) { case -1: bl = 0; /* fallthrough */ case -2: return MSG_HANDLED; } for (i = 0, e = ((WListbox *) h->current->data)->list; e != NULL; i++, e = g_list_next (e)) { WLEntry *le = (WLEntry *) e->data; if (strncmp (input->buffer + start, le->text, end - start) == 0 && strncmp (&le->text[end - start], buff, bl) == 0) { if (need_redraw == 0) { need_redraw = 1; listbox_select_entry ((WListbox *) h->current->data, i); last_text = le->text; } else { char *si, *sl; int si_num = 0; int sl_num = 0; /* count symbols between start and end */ for (si = le->text + start; si < le->text + end; str_next_char (&si), si_num++) ; for (sl = last_text + start; sl < last_text + end; str_next_char (&sl), sl_num++) ; /* pointers to next symbols */ si = &le->text[str_offset_to_pos (le->text, ++si_num)]; sl = &last_text[str_offset_to_pos (last_text, ++sl_num)]; while (si[0] != '\0' && sl[0] != '\0') { char *nexti, *nextl; nexti = str_get_next_char (si); nextl = str_get_next_char (sl); if (nexti - si != nextl - sl || strncmp (si, sl, nexti - si) != 0) break; si = nexti; sl = nextl; si_num++; } last_text = le->text; si = &last_text[str_offset_to_pos (last_text, si_num)]; if (low > si - last_text) low = si - last_text; need_redraw = 2; } } } if (need_redraw == 2) { insert_text (input, last_text, low); send_message ((Widget *) h->current->data, WIDGET_DRAW, 0); } else if (need_redraw == 1) { h->ret_value = B_ENTER; dlg_stop (h); } bl = 0; } return MSG_HANDLED; } break; default: return default_dlg_callback (h, sender, msg, parm, data); } }
static int gnome_view_callback (struct Dlg_head *h, int id, int msg) { return default_dlg_callback (h, id, msg); }
static cb_ret_t advanced_chown_callback (Dlg_head *h, dlg_msg_t msg, int parm) { int i = 0, f_pos = BUTTONS - h->current->dlg_id - single_set - 1; switch (msg) { case DLG_DRAW: chown_refresh (); chown_info_update (); return MSG_HANDLED; case DLG_POST_KEY: if (f_pos < 3) b_setpos (f_pos); return MSG_HANDLED; case DLG_FOCUS: if (f_pos < 3) { if ((flag_pos / 3) != f_pos) flag_pos = f_pos * 3; b_setpos (f_pos); } else if (f_pos < 5) flag_pos = f_pos + 6; return MSG_HANDLED; case DLG_KEY: switch (parm) { case XCTRL ('b'): case KEY_LEFT: if (f_pos < 5) return (dec_flag_pos (f_pos)); break; case XCTRL ('f'): case KEY_RIGHT: if (f_pos < 5) return (inc_flag_pos (f_pos)); break; case ' ': if (f_pos < 3) return MSG_HANDLED; break; case '\n': case KEY_ENTER: if (f_pos <= 2 || f_pos >= 5) break; do_enter_key (h, f_pos); return MSG_HANDLED; case ALT ('x'): i++; case ALT ('w'): i++; case ALT ('r'): parm = i + 3; for (i = 0; i < 3; i++) ch_flags[i * 3 + parm - 3] = (x_toggle & (1 << parm)) ? '-' : '+'; x_toggle ^= (1 << parm); update_mode (h); dlg_broadcast_msg (h, WIDGET_DRAW, 0); send_message (h->current, WIDGET_FOCUS, 0); break; case XCTRL ('x'): i++; case XCTRL ('w'): i++; case XCTRL ('r'): parm = i; for (i = 0; i < 3; i++) ch_flags[i * 3 + parm] = (x_toggle & (1 << parm)) ? '-' : '+'; x_toggle ^= (1 << parm); update_mode (h); dlg_broadcast_msg (h, WIDGET_DRAW, 0); send_message (h->current, WIDGET_FOCUS, 0); break; case 'x': i++; case 'w': i++; case 'r': if (f_pos > 2) break; flag_pos = f_pos * 3 + i; /* (strchr(ch_perm,parm)-ch_perm); */ if (((WButton *) h->current)->text.start[(flag_pos % 3)] == '-') ch_flags[flag_pos] = '+'; else ch_flags[flag_pos] = '-'; update_mode (h); break; case '4': i++; case '2': i++; case '1': if (f_pos > 2) break; flag_pos = i + f_pos * 3; ch_flags[flag_pos] = '='; update_mode (h); break; case '-': if (f_pos > 2) break; case '*': if (parm == '*') parm = '='; case '=': case '+': if (f_pos > 4) break; ch_flags[flag_pos] = parm; update_mode (h); advanced_chown_callback (h, DLG_KEY, KEY_RIGHT); if (flag_pos > 8 || !(flag_pos % 3)) dlg_one_down (h); break; } return MSG_NOT_HANDLED; default: return default_dlg_callback (h, msg, parm); } }