File manager: refactoring of MSG_RESIZE handling.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
Andrew Borodin 2016-10-10 12:56:56 +03:00
parent 6e4ea30fc3
commit 97bc63d7ac
2 changed files with 53 additions and 42 deletions

View File

@ -204,12 +204,14 @@ check_split (panels_layout_t * layout)
} }
else else
{ {
int md_cols = CONST_WIDGET (midnight_dlg)->cols;
if (layout->vertical_equal) if (layout->vertical_equal)
layout->left_panel_size = COLS / 2; layout->left_panel_size = md_cols / 2;
else if (layout->left_panel_size < MINWIDTH) else if (layout->left_panel_size < MINWIDTH)
layout->left_panel_size = MINWIDTH; layout->left_panel_size = MINWIDTH;
else if (layout->left_panel_size > COLS - MINWIDTH) else if (layout->left_panel_size > md_cols - MINWIDTH)
layout->left_panel_size = COLS - MINWIDTH; layout->left_panel_size = md_cols - MINWIDTH;
} }
} }
@ -240,7 +242,7 @@ update_split (const WDialog * h)
if (panels_layout.horizontal_split) if (panels_layout.horizontal_split)
tty_printf ("%03d", height - panels_layout.top_panel_size); tty_printf ("%03d", height - panels_layout.top_panel_size);
else else
tty_printf ("%03d", COLS - panels_layout.left_panel_size); tty_printf ("%03d", CONST_WIDGET (midnight_dlg)->cols - panels_layout.left_panel_size);
widget_move (h, 6, 12); widget_move (h, 6, 12);
tty_print_char ('='); tty_print_char ('=');
@ -331,6 +333,7 @@ layout_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *
case MSG_POST_KEY: case MSG_POST_KEY:
{ {
const Widget *mw = CONST_WIDGET (midnight_dlg);
int _menubar_visible, _command_prompt, _keybar_visible, _message_visible; int _menubar_visible, _command_prompt, _keybar_visible, _message_visible;
_menubar_visible = check_options[1].widget->state; _menubar_visible = check_options[1].widget->state;
@ -345,8 +348,8 @@ layout_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *
if (_output_lines < 0) if (_output_lines < 0)
_output_lines = 0; _output_lines = 0;
height = height =
LINES - _keybar_visible - _command_prompt - _menubar_visible - _output_lines - mw->lines - _keybar_visible - _command_prompt - _menubar_visible -
_message_visible; _output_lines - _message_visible;
minimum = MINHEIGHT * (1 + panels_layout.horizontal_split); minimum = MINHEIGHT * (1 + panels_layout.horizontal_split);
if (height < minimum) if (height < minimum)
{ {
@ -356,8 +359,8 @@ layout_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *
} }
else else
height = height =
LINES - _keybar_visible - _command_prompt - _menubar_visible - _output_lines - mw->lines - _keybar_visible - _command_prompt - _menubar_visible -
_message_visible; _output_lines - _message_visible;
if (old_output_lines != _output_lines) if (old_output_lines != _output_lines)
{ {
@ -388,7 +391,7 @@ layout_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *
{ {
eq = panels_layout.vertical_equal; eq = panels_layout.vertical_equal;
if (eq) if (eq)
panels_layout.left_panel_size = COLS / 2; panels_layout.left_panel_size = CONST_WIDGET (midnight_dlg)->cols / 2;
} }
widget_disable (WIDGET (bleft_widget), eq); widget_disable (WIDGET (bleft_widget), eq);
@ -672,7 +675,8 @@ layout_box (void)
void void
panel_update_cols (Widget * widget, panel_display_t frame_size) panel_update_cols (Widget * widget, panel_display_t frame_size)
{ {
int cols, origin; const Widget *mw = CONST_WIDGET (midnight_dlg);
int cols, x;
/* don't touch panel if it is not in dialog yet */ /* don't touch panel if it is not in dialog yet */
/* if panel is not in dialog it is not in widgets list /* if panel is not in dialog it is not in widgets list
@ -682,28 +686,28 @@ panel_update_cols (Widget * widget, panel_display_t frame_size)
if (panels_layout.horizontal_split) if (panels_layout.horizontal_split)
{ {
widget->cols = COLS; widget->cols = mw->cols;
return; return;
} }
if (frame_size == frame_full) if (frame_size == frame_full)
{ {
cols = COLS; cols = mw->cols;
origin = 0; x = mw->x;
} }
else if (widget == get_panel_widget (0)) else if (widget == get_panel_widget (0))
{ {
cols = panels_layout.left_panel_size; cols = panels_layout.left_panel_size;
origin = 0; x = mw->x;
} }
else else
{ {
cols = COLS - panels_layout.left_panel_size; cols = mw->cols - panels_layout.left_panel_size;
origin = panels_layout.left_panel_size; x = mw->x + panels_layout.left_panel_size;
} }
widget->cols = cols; widget->cols = cols;
widget->x = origin; widget->x = x;
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
@ -737,11 +741,12 @@ setup_panels (void)
* +--------+------------------------------------------------------+ * +--------+------------------------------------------------------+
*/ */
const Widget *mw = CONST_WIDGET (midnight_dlg);
int start_y; int start_y;
/* iniitial height of panels */ /* iniitial height of panels */
height = height =
LINES - menubar_visible - mc_global.message_visible - (command_prompt ? 1 : 0) - mw->lines - menubar_visible - mc_global.message_visible - (command_prompt ? 1 : 0) -
mc_global.keybar_visible; mc_global.keybar_visible;
if (mc_global.tty.console_flag != '\0') if (mc_global.tty.console_flag != '\0')
@ -760,11 +765,11 @@ setup_panels (void)
} }
} }
widget_set_size (WIDGET (the_menubar), 0, 0, 1, COLS); widget_set_size (WIDGET (the_menubar), mw->y, mw->x, 1, mw->cols);
menubar_set_visible (the_menubar, menubar_visible); menubar_set_visible (the_menubar, menubar_visible);
check_split (&panels_layout); check_split (&panels_layout);
start_y = menubar_visible; start_y = mw->y + menubar_visible;
/* update columns first... */ /* update columns first... */
panel_do_cols (0); panel_do_cols (0);
@ -773,30 +778,34 @@ setup_panels (void)
/* ...then rows and origin */ /* ...then rows and origin */
if (panels_layout.horizontal_split) if (panels_layout.horizontal_split)
{ {
widget_set_size (panels[0].widget, start_y, 0, panels_layout.top_panel_size, widget_set_size (panels[0].widget, start_y, panels[0].widget->x,
panels[0].widget->cols); panels_layout.top_panel_size, panels[0].widget->cols);
widget_set_size (panels[1].widget, start_y + panels_layout.top_panel_size, 0, widget_set_size (panels[1].widget, start_y + panels_layout.top_panel_size,
height - panels_layout.top_panel_size, panels[1].widget->cols); panels[1].widget->x, height - panels_layout.top_panel_size,
panels[1].widget->cols);
} }
else else
{ {
widget_set_size (panels[0].widget, start_y, 0, height, panels[0].widget->cols); widget_set_size (panels[0].widget, start_y, panels[0].widget->x, height,
panels[0].widget->cols);
widget_set_size (panels[1].widget, start_y, panels[1].widget->x, height, widget_set_size (panels[1].widget, start_y, panels[1].widget->x, height,
panels[1].widget->cols); panels[1].widget->cols);
} }
if (mc_global.message_visible) if (mc_global.message_visible)
widget_set_size (WIDGET (the_hint), height + start_y, 0, 1, COLS); widget_set_size (WIDGET (the_hint), height + start_y, mw->x, 1, mw->cols);
else else
/* make invisible */
widget_set_size (WIDGET (the_hint), 0, 0, 0, 0); widget_set_size (WIDGET (the_hint), 0, 0, 0, 0);
/* Output window */ /* Output window */
if (mc_global.tty.console_flag != '\0' && output_lines) if (mc_global.tty.console_flag != '\0' && output_lines)
{ {
output_start_y = LINES - (command_prompt ? 1 : 0) - mc_global.keybar_visible - output_lines; output_start_y =
mw->lines - (command_prompt ? 1 : 0) - mc_global.keybar_visible - output_lines;
show_console_contents (output_start_y, show_console_contents (output_start_y,
LINES - output_lines - mc_global.keybar_visible - 1, mw->lines - output_lines - mc_global.keybar_visible - 1,
LINES - mc_global.keybar_visible - 1); mw->lines - mc_global.keybar_visible - 1);
} }
if (command_prompt) if (command_prompt)
@ -808,11 +817,12 @@ setup_panels (void)
} }
else else
{ {
/* make invisible */
widget_set_size (WIDGET (cmdline), 0, 0, 0, 0); widget_set_size (WIDGET (cmdline), 0, 0, 0, 0);
widget_set_size (WIDGET (the_prompt), LINES, COLS, 0, 0); widget_set_size (WIDGET (the_prompt), mw->lines, mw->cols, 0, 0);
} }
widget_set_size (WIDGET (the_bar), LINES - 1, 0, mc_global.keybar_visible, COLS); widget_set_size (WIDGET (the_bar), mw->lines - 1, mw->x, mc_global.keybar_visible, mw->cols);
buttonbar_set_visible (the_bar, mc_global.keybar_visible); buttonbar_set_visible (the_bar, mc_global.keybar_visible);
update_xterm_title_path (); update_xterm_title_path ();
@ -876,6 +886,7 @@ panels_split_less (void)
void void
setup_cmdline (void) setup_cmdline (void)
{ {
const Widget *mw = CONST_WIDGET (midnight_dlg);
int prompt_width; int prompt_width;
int y; int y;
char *tmp_prompt = (char *) mc_prompt; char *tmp_prompt = (char *) mc_prompt;
@ -891,11 +902,11 @@ setup_cmdline (void)
prompt_width = str_term_width1 (tmp_prompt); prompt_width = str_term_width1 (tmp_prompt);
/* Check for prompts too big */ /* Check for prompts too big */
if (COLS > 8 && prompt_width > COLS - 8) if (mw->cols > 8 && prompt_width > mw->cols - 8)
{ {
int prompt_len; int prompt_len;
prompt_width = COLS - 8; prompt_width = mw->cols - 8;
prompt_len = str_offset_to_pos (tmp_prompt, prompt_width); prompt_len = str_offset_to_pos (tmp_prompt, prompt_width);
tmp_prompt[prompt_len] = '\0'; tmp_prompt[prompt_len] = '\0';
} }
@ -909,11 +920,11 @@ setup_cmdline (void)
} }
#endif #endif
y = LINES - 1 - mc_global.keybar_visible; y = mw->lines - 1 - mc_global.keybar_visible;
widget_set_size (WIDGET (the_prompt), y, 0, 1, prompt_width); widget_set_size (WIDGET (the_prompt), y, mw->x, 1, prompt_width);
label_set_text (the_prompt, mc_prompt); label_set_text (the_prompt, mc_prompt);
widget_set_size (WIDGET (cmdline), y, prompt_width, 1, COLS - prompt_width); widget_set_size (WIDGET (cmdline), y, mw->x + prompt_width, 1, mw->cols - prompt_width);
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
@ -942,7 +953,7 @@ set_hintbar (const char *str)
void void
rotate_dash (gboolean show) rotate_dash (gboolean show)
{ {
Widget *w = WIDGET (midnight_dlg); const Widget *w = CONST_WIDGET (midnight_dlg);
if (!nice_rotating_dash || (ok_to_refresh <= 0)) if (!nice_rotating_dash || (ok_to_refresh <= 0))
return; return;
@ -1034,14 +1045,16 @@ create_panel (int num, panel_view_mode_t type)
if (old_type == view_listing && panel->frame_size == frame_full && type != view_listing) if (old_type == view_listing && panel->frame_size == frame_full && type != view_listing)
{ {
int md_cols = CONST_WIDGET (midnight_dlg)->cols;
if (panels_layout.horizontal_split) if (panels_layout.horizontal_split)
{ {
cols = COLS; cols = md_cols;
x = 0; x = 0;
} }
else else
{ {
cols = COLS - panels_layout.left_panel_size; cols = md_cols - panels_layout.left_panel_size;
if (num == 1) if (num == 1)
x = panels_layout.left_panel_size; x = panels_layout.left_panel_size;
} }

View File

@ -1508,9 +1508,7 @@ midnight_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void
return MSG_HANDLED; return MSG_HANDLED;
case MSG_RESIZE: case MSG_RESIZE:
/* dlg_set_size() is surplus for this case */ widget_adjust_position (w->pos_flags, &w->y, &w->x, &w->lines, &w->cols);
w->lines = LINES;
w->cols = COLS;
setup_panels (); setup_panels ();
menubar_arrange (the_menubar); menubar_arrange (the_menubar);
return MSG_HANDLED; return MSG_HANDLED;