void edit_update_screen (WEdit * e) { edit_scroll_screen_over_cursor (e); edit_update_curs_col (e); edit_status (e); /* pop all events for this window for internal handling */ if (!is_idle ()) e->force |= REDRAW_PAGE; else { if (e->force & REDRAW_COMPLETELY) e->force |= REDRAW_PAGE; edit_render_keypress (e); } }
void edit_update_screen (WEdit * e) { WDialog *h = WIDGET (e)->owner; edit_scroll_screen_over_cursor (e); edit_update_curs_col (e); edit_status (e, widget_get_state (WIDGET (e), WST_FOCUSED)); /* pop all events for this window for internal handling */ if (!is_idle ()) e->force |= REDRAW_PAGE; else { if ((e->force & REDRAW_COMPLETELY) != 0) e->force |= REDRAW_PAGE; edit_render_keypress (e); } widget_redraw (WIDGET (find_buttonbar (h))); }
void edit_update_screen (WEdit * e) { edit_scroll_screen_over_cursor (e); edit_update_curs_col (e); edit_status (e, (e->force & REDRAW_COMPLETELY) != 0 && (void *) e == ((Widget *) e)->owner->current->data); /* pop all events for this window for internal handling */ if (!is_idle ()) e->force |= REDRAW_PAGE; else { if ((e->force & REDRAW_COMPLETELY) != 0) e->force |= REDRAW_PAGE; edit_render_keypress (e); } buttonbar_redraw (find_buttonbar (((Widget *) e)->owner)); }
gboolean edit_handle_move_resize (WEdit * edit, long command) { Widget *w = WIDGET (edit); gboolean ret = FALSE; if (edit->fullscreen) { edit->drag_state = MCEDIT_DRAG_NONE; w->mouse.forced_capture = FALSE; return ret; } switch (edit->drag_state) { case MCEDIT_DRAG_NONE: /* possible start move/resize */ switch (command) { case CK_WindowMove: edit->drag_state = MCEDIT_DRAG_MOVE; edit_save_size (edit); edit_status (edit, TRUE); /* redraw frame and status */ /** * If a user initiates a move by the menu, not by the mouse, we * make a subsequent mouse drag pull the frame from its middle. * (We can instead choose '0' to pull it from the corner.) */ edit->drag_state_start = w->cols / 2; ret = TRUE; break; case CK_WindowResize: edit->drag_state = MCEDIT_DRAG_RESIZE; edit_save_size (edit); edit_status (edit, TRUE); /* redraw frame and status */ ret = TRUE; break; default: break; } break; case MCEDIT_DRAG_MOVE: switch (command) { case CK_WindowResize: edit->drag_state = MCEDIT_DRAG_RESIZE; ret = TRUE; break; case CK_Up: case CK_Down: case CK_Left: case CK_Right: edit_window_move (edit, command); ret = TRUE; break; case CK_Enter: case CK_WindowMove: edit->drag_state = MCEDIT_DRAG_NONE; edit_status (edit, TRUE); /* redraw frame and status */ MC_FALLTHROUGH; default: ret = TRUE; break; } break; case MCEDIT_DRAG_RESIZE: switch (command) { case CK_WindowMove: edit->drag_state = MCEDIT_DRAG_MOVE; ret = TRUE; break; case CK_Up: case CK_Down: case CK_Left: case CK_Right: edit_window_resize (edit, command); ret = TRUE; break; case CK_Enter: case CK_WindowResize: edit->drag_state = MCEDIT_DRAG_NONE; edit_status (edit, TRUE); /* redraw frame and status */ MC_FALLTHROUGH; default: ret = TRUE; break; } break; default: break; } /** * - We let the user stop a resize/move operation by clicking with the * mouse anywhere. ("clicking" = pressing and releasing a button.) * - We let the user perform a resize/move operation by a mouse drag * initiated anywhere. * * "Anywhere" means: inside or outside the window. We make this happen * with the 'forced_capture' flag. */ w->mouse.forced_capture = (edit->drag_state != MCEDIT_DRAG_NONE); return ret; }
gboolean edit_handle_move_resize (WEdit * edit, long command) { gboolean ret = FALSE; if (edit->fullscreen) { edit->drag_state = MCEDIT_DRAG_NORMAL; return ret; } switch (edit->drag_state) { case MCEDIT_DRAG_NORMAL: /* possible start move/resize */ switch (command) { case CK_WindowMove: edit->drag_state = MCEDIT_DRAG_MOVE; edit_save_size (edit); ret = TRUE; break; case CK_WindowResize: edit->drag_state = MCEDIT_DRAG_RESIZE; edit_save_size (edit); ret = TRUE; break; default: break; } break; case MCEDIT_DRAG_MOVE: switch (command) { case CK_WindowResize: edit->drag_state = MCEDIT_DRAG_RESIZE; ret = TRUE; break; case CK_Up: case CK_Down: case CK_Left: case CK_Right: edit_window_move (edit, command); ret = TRUE; break; case CK_Enter: case CK_WindowMove: edit->drag_state = MCEDIT_DRAG_NORMAL; /* redraw frame and status */ edit_status (edit, TRUE); default: ret = TRUE; break; } break; case MCEDIT_DRAG_RESIZE: switch (command) { case CK_WindowMove: edit->drag_state = MCEDIT_DRAG_MOVE; ret = TRUE; break; case CK_Up: case CK_Down: case CK_Left: case CK_Right: edit_window_resize (edit, command); ret = TRUE; break; case CK_Enter: case CK_WindowResize: edit->drag_state = MCEDIT_DRAG_NORMAL; /* redraw frame and status */ edit_status (edit, TRUE); default: ret = TRUE; break; } break; default: break; } return ret; }
static cb_ret_t edit_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data) { WEdit *e = (WEdit *) w; switch (msg) { case MSG_FOCUS: edit_set_buttonbar (e, find_buttonbar (w->owner)); /* fall through */ case MSG_DRAW: e->force |= REDRAW_COMPLETELY; edit_update_screen (e); return MSG_HANDLED; case MSG_UNFOCUS: /* redraw frame and status */ edit_status (e, FALSE); return MSG_HANDLED; case MSG_KEY: { int cmd, ch; cb_ret_t ret = MSG_NOT_HANDLED; /* The user may override the access-keys for the menu bar. */ if (macro_index == -1 && edit_execute_macro (e, parm)) { edit_update_screen (e); ret = MSG_HANDLED; } else if (edit_translate_key (e, parm, &cmd, &ch)) { edit_execute_key_command (e, cmd, ch); edit_update_screen (e); ret = MSG_HANDLED; } return ret; } case MSG_ACTION: /* command from menubar or buttonbar */ edit_execute_key_command (e, parm, -1); edit_update_screen (e); return MSG_HANDLED; case MSG_CURSOR: { int y, x; y = (e->fullscreen ? 0 : 1) + EDIT_TEXT_VERTICAL_OFFSET + e->curs_row; x = (e->fullscreen ? 0 : 1) + EDIT_TEXT_HORIZONTAL_OFFSET + option_line_state_width + e->curs_col + e->start_col + e->over_col; widget_move (w, y, x); return MSG_HANDLED; } case MSG_IDLE: edit_update_screen (e); return MSG_HANDLED; case MSG_DESTROY: edit_clean (e); return MSG_HANDLED; default: return widget_default_callback (w, sender, msg, parm, data); } }