// The dialog handler borrows heavily from the newmenu_handler static int ui_dialog_handler(window *wind, d_event *event, UI_DIALOG *dlg) { int rval = 0; if (event->type == EVENT_WINDOW_CLOSED || event->type == EVENT_WINDOW_ACTIVATED || event->type == EVENT_WINDOW_DEACTIVATED) return 0; if (dlg->callback) if ((*dlg->callback)(dlg, event, dlg->userdata)) return 1; // event handled if (!window_exists(wind)) return 1; 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 1; rval = mouse_in_window(dlg->wind); break; case EVENT_KEY_COMMAND: case EVENT_KEY_RELEASE: rval = ui_dialog_do_gadgets(dlg, event); break; case EVENT_IDLE: timer_delay2(50); rval = ui_dialog_do_gadgets(dlg, event); break; case EVENT_WINDOW_DRAW: { d_event event2 = { EVENT_UI_DIALOG_DRAW }; ui_dialog_draw(dlg); rval = ui_dialog_do_gadgets(dlg, event); window_send_event(wind, &event2); break; } case EVENT_WINDOW_CLOSE: ui_gadget_delete_all(dlg); selected_gadget = NULL; d_free( dlg ); break; default: break; } return rval; }
// The dialog handler borrows heavily from the newmenu_handler static window_event_result ui_dialog_handler(window *wind,const d_event &event, UI_DIALOG *dlg) { window_event_result rval{window_event_result::ignored}; if (event.type == EVENT_WINDOW_ACTIVATED || event.type == EVENT_WINDOW_DEACTIVATED) return window_event_result::ignored; if (dlg->d_callback) if ((rval = (*dlg->d_callback)(dlg, event, dlg->d_userdata)) != window_event_result::ignored) return rval; // event handled switch (event.type) { case EVENT_IDLE: timer_delay2(50); /*-fallthrough*/ case EVENT_MOUSE_BUTTON_DOWN: case EVENT_MOUSE_BUTTON_UP: case EVENT_MOUSE_MOVED: case EVENT_KEY_COMMAND: case EVENT_KEY_RELEASE: return ui_dialog_do_gadgets(dlg, event); case EVENT_WINDOW_DRAW: { ui_dialog_draw(dlg); rval = ui_dialog_do_gadgets(dlg, event); if (rval != window_event_result::close) { d_event event2 = { EVENT_UI_DIALOG_DRAW }; window_send_event(*wind, event2); } return rval; } case EVENT_WINDOW_CLOSE: if (rval != window_event_result::deleted) // check if handler already deleted dialog (e.g. if UI_DIALOG was subclassed) delete dlg; return window_event_result::ignored; // free the window in any case (until UI_DIALOG is subclass of window) default: return window_event_result::ignored; } }