diff --git a/CHANGELOG.txt b/CHANGELOG.txt index abe54c35c..cb42ae1ba 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,5 +1,9 @@ D1X-Rebirth Changelog +20120103 +-------- +ui/keypress.c: Give the dialog in (presently unused) GetKeyCode a callback + 20120102 -------- ui/dialog.c, ui/file.c: Give ui_get_filename a callback for its dialog. Happy new year! diff --git a/ui/keypress.c b/ui/keypress.c index 1cdaa71d8..7b88b0d76 100644 --- a/ui/keypress.c +++ b/ui/keypress.c @@ -26,6 +26,7 @@ static char rcsid[] = "$Id: keypress.c,v 1.1.1.1 2006/03/17 19:52:24 zicodxx Exp #include "event.h" #include "ui.h" #include "key.h" +#include "window.h" char * KeyDesc[256] = { \ "","{Esc}","{1}","{2}","{3}","{4}","{5}","{6}","{7}","{8}","{9}","{0}","{-}", \ @@ -100,17 +101,41 @@ int DecodeKeyText( char * text ) } +static int key_dialog_handler(UI_DIALOG *dlg, d_event *event, UI_GADGET_BUTTON **DoneButton) +{ + int keypress = 0; + int rval = 0; + + if (event->type == EVENT_KEY_COMMAND) + keypress = event_key_get(event); + if (keypress > 0) + { + char temp_text[100]; + + GetKeyDescription( temp_text, keypress ); + ui_dprintf_at( dlg, 10, 100, "%s ", temp_text ); + rval = 1; + } + + if ((*DoneButton)->pressed) + { + ui_close_dialog(dlg); + rval = 1; + } + + return rval; +} int GetKeyCode(char * text) { UI_DIALOG * dlg; UI_GADGET_BUTTON * DoneButton; - char temp_text[100]; + window *wind; text = text; - dlg = ui_create_dialog( 200, 200, 400, 200, DF_DIALOG | DF_MODAL, NULL, NULL ); + dlg = ui_create_dialog( 200, 200, 400, 200, DF_DIALOG | DF_MODAL, (int (*)(UI_DIALOG *, d_event *, void *))key_dialog_handler, &DoneButton ); DoneButton = ui_add_gadget_button( dlg, 170, 165, 60, 25, "Ok", NULL ); @@ -119,23 +144,11 @@ int GetKeyCode(char * text) //key_flush(); dlg->keyboard_focus_gadget = (UI_GADGET *)DoneButton; + wind = ui_dialog_get_window(dlg); - while(1) - { + while (window_exists(wind)) event_process(); - if (last_keypress > 0) - { - GetKeyDescription( temp_text, last_keypress ); - ui_dprintf_at( dlg, 10, 100, "%s ", temp_text ); - } - - if (DoneButton->pressed) - break; - } - - ui_close_dialog(dlg); - return 0; }