Add WST_MODAL state.

* WDialog::modal: remove. Use WST_MODAL instead.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
Andrew Borodin 2016-04-16 11:12:49 +03:00
parent fd4e56bf39
commit db0d01b9d6
4 changed files with 21 additions and 15 deletions

View File

@ -319,19 +319,19 @@ dlg_execute_cmd (WDialog * h, long command)
break;
case CK_ScreenList:
if (!h->modal)
if (!widget_get_state (WIDGET (h), WST_MODAL))
dialog_switch_list ();
else
ret = MSG_NOT_HANDLED;
break;
case CK_ScreenNext:
if (!h->modal)
if (!widget_get_state (WIDGET (h), WST_MODAL))
dialog_switch_next ();
else
ret = MSG_NOT_HANDLED;
break;
case CK_ScreenPrev:
if (!h->modal)
if (!widget_get_state (WIDGET (h), WST_MODAL))
dialog_switch_prev ();
else
ret = MSG_NOT_HANDLED;
@ -559,7 +559,7 @@ frontend_dlg_run (WDialog * h)
event.x = -1;
/* close opened editors, viewers, etc */
if (!h->modal && mc_global.midnight_shutdown)
if (!widget_get_state (wh, WST_MODAL) && mc_global.midnight_shutdown)
{
send_message (h, NULL, MSG_VALIDATE, 0, NULL);
return;
@ -834,9 +834,11 @@ dlg_create (gboolean modal, int y1, int x1, int lines, int cols,
mouse_callback);
widget_want_cursor (w, FALSE);
w->options |= WOP_TOP_SELECT;
w->state |= WST_CONSTRUCT;
new_d->modal = modal;
w->state |= WST_CONSTRUCT;
if (modal)
w->state |= WST_MODAL;
new_d->color = colors;
new_d->help_ctx = help_ctx;
new_d->flags = flags;
@ -1229,8 +1231,8 @@ dlg_init (WDialog * h)
{
Widget *wh = WIDGET (h);
if (top_dlg != NULL && DIALOG (top_dlg->data)->modal)
h->modal = TRUE;
if (top_dlg != NULL && widget_get_state (WIDGET (top_dlg->data), WST_MODAL))
widget_set_state (wh, WST_MODAL, TRUE);
/* add dialog to the stack */
top_dlg = g_list_prepend (top_dlg, h);
@ -1238,7 +1240,7 @@ dlg_init (WDialog * h)
/* Initialize dialog manager and widgets */
if (widget_get_state (wh, WST_CONSTRUCT))
{
if (!h->modal)
if (!widget_get_state (wh, WST_MODAL))
dialog_switch_add (h);
send_message (h, NULL, MSG_INIT, 0, NULL);
@ -1287,7 +1289,7 @@ dlg_run_done (WDialog * h)
if (widget_get_state (WIDGET (h), WST_CLOSED))
{
send_message (h, h->current->data, MSG_END, 0, NULL);
if (!h->modal)
if (!widget_get_state (WIDGET (h), WST_MODAL))
dialog_switch_remove (h);
}
}

View File

@ -71,7 +71,6 @@ struct WDialog
Widget widget;
/* Set by the user */
gboolean modal; /* type of dialog: modal or not */
dlg_flags_t flags; /* User flags */
const char *help_ctx; /* Name of the help entry */
const int *color; /* Color set. Unused in viewer and editor */

View File

@ -76,7 +76,8 @@ typedef enum
{
WST_DEFAULT = (0 << 0),
WST_DISABLED = (1 << 0), /* Widget cannot be selected */
WST_IDLE = (1 << 1), /* @FIXME@: we want more correct name here */
WST_IDLE = (1 << 1),
WST_MODAL = (1 << 2), /* Widget (dialog) is modal */
WST_CONSTRUCT = (1 << 15), /* Dialog has been constructed but not run yet */
WST_ACTIVE = (1 << 16), /* Dialog is visible and active */

View File

@ -2890,10 +2890,13 @@ dview_edit (WDiff * dview, diff_place_t ord)
}
h = WIDGET (dview)->owner;
h_modal = h->modal;
h_modal = widget_get_state (WIDGET (h), WST_MODAL);
get_line_numbers (dview->a[ord], dview->skip_rows, &linenum, &lineofs);
h->modal = TRUE; /* not allow edit file in several editors */
/* disallow edit file in several editors */
widget_set_state (WIDGET (h), WST_MODAL, TRUE);
{
vfs_path_t *tmp_vpath;
@ -2901,7 +2904,8 @@ dview_edit (WDiff * dview, diff_place_t ord)
edit_file_at_line (tmp_vpath, use_internal_edit != 0, linenum);
vfs_path_free (tmp_vpath);
}
h->modal = h_modal;
widget_set_state (WIDGET (h), WST_MODAL, h_modal);
dview_redo (dview);
dview_update (dview);
}