diff --git a/CHANGELOG.txt b/CHANGELOG.txt index c0d229f76..e974cd5b9 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -5,6 +5,7 @@ D1X-Rebirth Changelog main/render.c: Initialise dyn_light using memset, fixing a warning arch/include/event.h, arch/include/window.h, arch/sdl/event.c, arch/sdl/window.c, include/ui.h, ui/dialog.c, ui/file.c, ui/keypress.c, ui/menu.c, ui/message.c, ui/popup.c: Add support for 'modeless' windows - windows that will allow events to be passed on to the underlying window. Intended for the editor main/net_udp.c: Fix comparison is always false warning +editor/centers.c, editor/ehostage.c, editor/eswitch.c, editor/info.c, editor/med.c, editor/medrobot.c, editor/medwall.c, ui/dialog.c, ui/file.c, ui/keypress.c, ui/menu.c, ui/message.c, ui/popup.c: Move calls to ui_dialog_do_gadgets to the dialog event handler, making sure ui_event_handler gets called beforehand 20110927 -------- diff --git a/editor/centers.c b/editor/centers.c index 3032d9223..8abf5ed17 100644 --- a/editor/centers.c +++ b/editor/centers.c @@ -122,7 +122,6 @@ void do_centers_window() // Call the ui code.. //------------------------------------------------------------ ui_button_any_drawn = 0; - ui_dialog_do_gadgets(MainWindow); //------------------------------------------------------------ // If we change centers, we need to reset the ui code for all diff --git a/editor/ehostage.c b/editor/ehostage.c index 06236dfaf..45d7d97c0 100644 --- a/editor/ehostage.c +++ b/editor/ehostage.c @@ -401,7 +401,6 @@ void do_hostage_window() // Call the ui code.. //------------------------------------------------------------ ui_button_any_drawn = 0; - ui_dialog_do_gadgets(MainWindow); //------------------------------------------------------------ // If we change objects, we need to reset the ui code for all diff --git a/editor/eswitch.c b/editor/eswitch.c index 74e704887..3ec078225 100644 --- a/editor/eswitch.c +++ b/editor/eswitch.c @@ -388,7 +388,6 @@ void do_trigger_window() // Call the ui code.. //------------------------------------------------------------ ui_button_any_drawn = 0; - ui_dialog_do_gadgets(MainWindow); //------------------------------------------------------------ // If we change walls, we need to reset the ui code for all diff --git a/editor/info.c b/editor/info.c index 0bc043a0d..b481441b4 100644 --- a/editor/info.c +++ b/editor/info.c @@ -317,6 +317,10 @@ int info_display_all(window *wind, d_event *event, void *userdata) int padnum,show_all = 0; grs_canvas *save_canvas = grd_curcanv; + // HACK: Make sure all the state-based input variables are set, until we fully migrate to event-based input + if (wind == window_get_front()) + ui_event_handler(event); + switch (event->type) { case EVENT_WINDOW_DRAW: diff --git a/editor/med.c b/editor/med.c index f0e5f6426..6a096d49f 100644 --- a/editor/med.c +++ b/editor/med.c @@ -1049,7 +1049,7 @@ void editor(void) gamestate_restore_check(); - set_default_handler(ui_event_handler); + //set_default_handler(ui_event_handler); // now we call this function first, not last, in event_process; through the dialog system while (Function_mode == FMODE_EDITOR) { @@ -1068,7 +1068,6 @@ void editor(void) gr_set_curfont(editor_font); event_process(); last_keypress &= ~KEY_DEBUGGED; // mask off delete key bit which has no function in editor. - ui_dialog_do_gadgets(EditorWindow); do_robot_window(); do_object_window(); do_wall_window(); diff --git a/editor/medrobot.c b/editor/medrobot.c index 186b99aa7..f1843c03b 100644 --- a/editor/medrobot.c +++ b/editor/medrobot.c @@ -564,7 +564,6 @@ void do_robot_window() // Call the ui code.. //------------------------------------------------------------ ui_button_any_drawn = 0; - ui_dialog_do_gadgets(MainWindow); //------------------------------------------------------------ // If we change objects, we need to reset the ui code for all @@ -795,7 +794,6 @@ void do_object_window() // Call the ui code.. //------------------------------------------------------------ ui_button_any_drawn = 0; - ui_dialog_do_gadgets(MattWindow); if ( QuitButton->pressed || (last_keypress==KEY_ESC)) { diff --git a/editor/medwall.c b/editor/medwall.c index e6cce7e19..92ca945f8 100644 --- a/editor/medwall.c +++ b/editor/medwall.c @@ -408,7 +408,6 @@ void do_wall_window() // Call the ui code.. //------------------------------------------------------------ ui_button_any_drawn = 0; - ui_dialog_do_gadgets(MainWindow); //------------------------------------------------------------ // If we change walls, we need to reset the ui code for all diff --git a/ui/dialog.c b/ui/dialog.c index 4ac0a8add..1d0117f0b 100644 --- a/ui/dialog.c +++ b/ui/dialog.c @@ -198,17 +198,7 @@ void remove_window( UI_DIALOG * dlg ) D_NEXT = D_PREV = NULL; } -int ui_dialog_mouse(window *wind, d_event *event, UI_DIALOG *dlg) -{ - return 0; -} - -int ui_dialog_key(window *wind, d_event *event, UI_DIALOG *dlg) -{ - return 0; -} - -int ui_dialog_draw(window *wind, UI_DIALOG *dlg) +int ui_dialog_draw(UI_DIALOG *dlg) { return 0; } @@ -219,6 +209,10 @@ int ui_dialog_handler(window *wind, d_event *event, UI_DIALOG *dlg) { if (event->type == EVENT_WINDOW_CLOSED) return 0; + + // HACK: Make sure all the state-based input variables are set, until we fully migrate to event-based input + if (wind == window_get_front()) + ui_event_handler(event); if (dlg->callback) if ((*dlg->callback)(dlg, event, dlg->userdata)) @@ -234,17 +228,21 @@ int ui_dialog_handler(window *wind, d_event *event, UI_DIALOG *dlg) case EVENT_MOUSE_BUTTON_DOWN: case EVENT_MOUSE_BUTTON_UP: - return ui_dialog_mouse(wind, event, dlg); + /*return*/ ui_dialog_do_gadgets(dlg); + break; case EVENT_KEY_COMMAND: - return ui_dialog_key(wind, event, dlg); + /*return*/ ui_dialog_do_gadgets(dlg); + break; case EVENT_IDLE: timer_delay2(50); - return ui_dialog_mouse(wind, event, dlg); + /*return*/ ui_dialog_do_gadgets(dlg); + break; case EVENT_WINDOW_DRAW: - return ui_dialog_draw(wind, dlg); + return ui_dialog_draw(dlg); + break; case EVENT_WINDOW_CLOSE: //ui_close_dialog(dlg); // need to hide this function and make it not call window_close first @@ -665,13 +663,10 @@ void ui_mega_process() } #endif // 0 -// Base level event handler -// Mainly for setting global variables for state-based event polling, +// For setting global variables for state-based event polling, // which will eventually be replaced with direct event handling -// so we could then stick with standard_handler in inferno.c int ui_event_handler(d_event *event) { - timer_update(); last_keypress = 0; switch (event->type) @@ -690,30 +685,6 @@ int ui_event_handler(d_event *event) case EVENT_KEY_COMMAND: last_keypress = event_key_get(event); last_event = timer_query(); - - switch (last_keypress) - { -#ifdef macintosh - case KEY_COMMAND + KEY_SHIFTED + KEY_3: -#endif - case KEY_PRINT_SCREEN: - { - gr_set_current_canvas(NULL); - save_screen_shot(0); - return 1; - } - - case KEY_ALTED+KEY_ENTER: - case KEY_ALTED+KEY_PADENTER: - gr_toggle_fullscreen(); - return 1; - -#ifndef NDEBUG - case KEY_BACKSP: - Int3(); - return 1; -#endif - } break; case EVENT_IDLE: diff --git a/ui/file.c b/ui/file.c index ebdafdca2..a3ed6c44c 100644 --- a/ui/file.c +++ b/ui/file.c @@ -195,7 +195,6 @@ int ui_get_filename( char * filename, char * Filespec, char * message ) while( 1 ) { event_process(); - ui_dialog_do_gadgets(dlg); if ( Button2->pressed ) { diff --git a/ui/keypress.c b/ui/keypress.c index adbfe58b2..1cdaa71d8 100644 --- a/ui/keypress.c +++ b/ui/keypress.c @@ -123,7 +123,6 @@ int GetKeyCode(char * text) while(1) { event_process(); - ui_dialog_do_gadgets(dlg); if (last_keypress > 0) { diff --git a/ui/menu.c b/ui/menu.c index af8b45027..a9b978e79 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -100,7 +100,6 @@ int MenuX( int x, int y, int NumButtons, char * text[] ) while(choice==0) { event_process(); - ui_dialog_do_gadgets(dlg); for (i=0; i