Pass window_event_result from a dialog handler all the way to the event system

In particular, window_event_result::deleted so the event system doesn't have to rely on the somewhat problematic window_exists. If a gadget is manipulated, it still returns at least window_event_result::handled so all the other gadgets in all the other windows don't have to be checked (that weren't already checked).
This commit is contained in:
Chris Taylor 2016-10-27 19:42:48 +08:00
parent bd3078b672
commit 7b83123010
9 changed files with 28 additions and 23 deletions

View file

@ -192,8 +192,9 @@ window_event_result ui_button_do(UI_DIALOG *dlg, UI_GADGET_BUTTON * button,const
}
else if (button->pressed)
{
ui_gadget_send_event(dlg, EVENT_UI_GADGET_PRESSED, button);
return window_event_result::handled;
rval = ui_gadget_send_event(dlg, EVENT_UI_GADGET_PRESSED, button);
if (rval == window_event_result::ignored)
rval = window_event_result::handled;
}
return rval;

View file

@ -138,9 +138,13 @@ window_event_result ui_checkbox_do( UI_DIALOG *dlg, UI_GADGET_CHECKBOX * checkbo
if (checkbox->pressed == 1)
{
window_event_result rval;
checkbox->flag ^= 1;
ui_gadget_send_event(dlg, EVENT_UI_GADGET_PRESSED, checkbox);
return window_event_result::handled;
rval = ui_gadget_send_event(dlg, EVENT_UI_GADGET_PRESSED, checkbox);
if (rval == window_event_result::ignored)
rval = window_event_result::handled;
return rval;
}
if (event.type == EVENT_WINDOW_DRAW)

View file

@ -101,18 +101,12 @@ static window_event_result ui_dialog_handler(window *wind,const d_event &event,
if ((rval = (*dlg->d_callback)(dlg, event, dlg->d_userdata)) != window_event_result::ignored)
return rval; // event handled
if (!window_exists(wind))
return window_event_result::handled;
switch (event.type)
{
case EVENT_MOUSE_BUTTON_DOWN:
case EVENT_MOUSE_BUTTON_UP:
case EVENT_MOUSE_MOVED:
/*return*/ ui_dialog_do_gadgets(dlg, event);
if (!window_exists(wind))
return window_event_result::handled;
return mouse_in_window(dlg->wind);
return ui_dialog_do_gadgets(dlg, event);
case EVENT_KEY_COMMAND:
case EVENT_KEY_RELEASE:
return ui_dialog_do_gadgets(dlg, event);

View file

@ -165,8 +165,9 @@ window_event_result ui_icon_do( UI_DIALOG *dlg, UI_GADGET_ICON * icon,const d_ev
{
icon->status = 1;
icon->flag = static_cast<int8_t>(icon->user_function());
ui_gadget_send_event(dlg, EVENT_UI_GADGET_PRESSED, icon);
rval = window_event_result::handled;
rval = ui_gadget_send_event(dlg, EVENT_UI_GADGET_PRESSED, icon);
if (rval == window_event_result::ignored)
rval = window_event_result::handled;
}
if (event.type == EVENT_WINDOW_DRAW)

View file

@ -143,8 +143,9 @@ window_event_result ui_inputbox_do( UI_DIALOG *dlg, UI_GADGET_INPUTBOX * inputbo
if (inputbox->pressed)
{
ui_gadget_send_event(dlg, EVENT_UI_GADGET_PRESSED, inputbox);
rval = window_event_result::handled;
rval = ui_gadget_send_event(dlg, EVENT_UI_GADGET_PRESSED, inputbox);
if (rval == window_event_result::ignored)
rval = window_event_result::handled;
}
if (event.type == EVENT_WINDOW_DRAW)

View file

@ -363,8 +363,9 @@ window_event_result ui_listbox_do( UI_DIALOG *dlg, UI_GADGET_LISTBOX * listbox,c
if (listbox->moved || (listbox->selected_item > 0))
{
ui_gadget_send_event(dlg, (listbox->selected_item > 0) ? EVENT_UI_LISTBOX_SELECTED : EVENT_UI_LISTBOX_MOVED, listbox);
return window_event_result::handled;
rval = ui_gadget_send_event(dlg, (listbox->selected_item > 0) ? EVENT_UI_LISTBOX_SELECTED : EVENT_UI_LISTBOX_MOVED, listbox);
if (rval == window_event_result::ignored)
rval = window_event_result::handled;
}
return rval;

View file

@ -159,8 +159,9 @@ window_event_result ui_radio_do( UI_DIALOG *dlg, UI_GADGET_RADIO * radio,const d
tmp = tmp->next;
}
radio->flag = 1;
ui_gadget_send_event(dlg, EVENT_UI_GADGET_PRESSED, radio);
rval = window_event_result::handled;
rval = ui_gadget_send_event(dlg, EVENT_UI_GADGET_PRESSED, radio);
if (rval == window_event_result::ignored)
rval = window_event_result::handled;
}
if (event.type == EVENT_WINDOW_DRAW)

View file

@ -282,8 +282,9 @@ window_event_result ui_scrollbar_do( UI_DIALOG *dlg, UI_GADGET_SCROLLBAR * scrol
scrollbar->moved = 1;
if (scrollbar->moved)
{
ui_gadget_send_event(dlg, EVENT_UI_GADGET_PRESSED, scrollbar);
rval = window_event_result::handled;
rval = ui_gadget_send_event(dlg, EVENT_UI_GADGET_PRESSED, scrollbar);
if (rval == window_event_result::ignored)
rval = window_event_result::handled;
}
if (oldpos != scrollbar->fake_position)

View file

@ -149,8 +149,9 @@ window_event_result ui_userbox_do( UI_DIALOG *dlg, UI_GADGET_USERBOX * userbox,c
if (userbox->b1_clicked || userbox->b1_dragging)
{
ui_gadget_send_event(dlg, userbox->b1_clicked ? EVENT_UI_GADGET_PRESSED : EVENT_UI_USERBOX_DRAGGED, userbox);
rval = window_event_result::handled;
rval = ui_gadget_send_event(dlg, userbox->b1_clicked ? EVENT_UI_GADGET_PRESSED : EVENT_UI_USERBOX_DRAGGED, userbox);
if (rval == window_event_result::ignored)
rval = window_event_result::handled;
}
return rval;