From 7b83123010c4586224030a3ab13ec0d8d78fe017 Mon Sep 17 00:00:00 2001 From: Chris Taylor Date: Thu, 27 Oct 2016 19:42:48 +0800 Subject: [PATCH] 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). --- common/ui/button.cpp | 5 +++-- common/ui/checkbox.cpp | 8 ++++++-- common/ui/dialog.cpp | 8 +------- common/ui/icon.cpp | 5 +++-- common/ui/inputbox.cpp | 5 +++-- common/ui/listbox.cpp | 5 +++-- common/ui/radio.cpp | 5 +++-- common/ui/scroll.cpp | 5 +++-- common/ui/userbox.cpp | 5 +++-- 9 files changed, 28 insertions(+), 23 deletions(-) diff --git a/common/ui/button.cpp b/common/ui/button.cpp index 8bfa79d9f..c1c95b46c 100644 --- a/common/ui/button.cpp +++ b/common/ui/button.cpp @@ -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; diff --git a/common/ui/checkbox.cpp b/common/ui/checkbox.cpp index 477c0a6d8..d63d31ff7 100644 --- a/common/ui/checkbox.cpp +++ b/common/ui/checkbox.cpp @@ -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) diff --git a/common/ui/dialog.cpp b/common/ui/dialog.cpp index 2ffcb650f..70bfd6c27 100644 --- a/common/ui/dialog.cpp +++ b/common/ui/dialog.cpp @@ -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); diff --git a/common/ui/icon.cpp b/common/ui/icon.cpp index 4b9ac3139..ba085dd0a 100644 --- a/common/ui/icon.cpp +++ b/common/ui/icon.cpp @@ -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(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) diff --git a/common/ui/inputbox.cpp b/common/ui/inputbox.cpp index de9af0a7f..6d0af4a79 100644 --- a/common/ui/inputbox.cpp +++ b/common/ui/inputbox.cpp @@ -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) diff --git a/common/ui/listbox.cpp b/common/ui/listbox.cpp index 7d2af7a87..557b866ce 100644 --- a/common/ui/listbox.cpp +++ b/common/ui/listbox.cpp @@ -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; diff --git a/common/ui/radio.cpp b/common/ui/radio.cpp index 27dd83694..81fb9fd5a 100644 --- a/common/ui/radio.cpp +++ b/common/ui/radio.cpp @@ -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) diff --git a/common/ui/scroll.cpp b/common/ui/scroll.cpp index 05822c709..7c611398b 100644 --- a/common/ui/scroll.cpp +++ b/common/ui/scroll.cpp @@ -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) diff --git a/common/ui/userbox.cpp b/common/ui/userbox.cpp index d0455e1d9..150a40c73 100644 --- a/common/ui/userbox.cpp +++ b/common/ui/userbox.cpp @@ -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;