diff --git a/src/lephisto.c b/src/lephisto.c index 222485a..ec603fe 100644 --- a/src/lephisto.c +++ b/src/lephisto.c @@ -192,7 +192,7 @@ int main(int argc, char** argv) { glClear(GL_COLOR_BUFFER_BIT); fps_control(); // Who doesn't love FPS control? - toolkit_update(); // Simulate key repetition. + if(toolkit) toolkit_update(); // Simulate key repetition. if(!menu_isOpen(MENU_MAIN)) { if(!paused && !toolkit) update_space(); // Update the game. diff --git a/src/toolkit.c b/src/toolkit.c index 73ea46b..8ed1b45 100644 --- a/src/toolkit.c +++ b/src/toolkit.c @@ -300,12 +300,12 @@ void window_addInput(const unsigned int wid, wgt->name = strdup(name); // Specific. - wgt->dat.inp.max = max; + wgt->dat.inp.max = max+1; wgt->dat.inp.oneline = oneline; wgt->dat.inp.pos = 0; wgt->dat.inp.view = 0; - wgt->dat.inp.input = malloc(sizeof(char)*max); - memset(wgt->dat.inp.input, 0, max*sizeof(char)); + wgt->dat.inp.input = malloc(sizeof(char)*wgt->dat.inp.max); + memset(wgt->dat.inp.input, 0, wgt->dat.inp.max*sizeof(char)); // Position/Size. wgt->w = (double)w; @@ -942,7 +942,7 @@ static int toolkit_inputInput(Uint8 type, Widget* inp, SDLKey key) { // Backspace -> delete text. if((type == SDL_KEYDOWN) && (key == '\b') && (inp->dat.inp.pos > 0)) inp->dat.inp.input[--inp->dat.inp.pos] = '\0'; - else if((type == SDL_KEYDOWN) && (inp->dat.inp.pos < inp->dat.inp.max)) { + else if((type == SDL_KEYDOWN) && (inp->dat.inp.pos < inp->dat.inp.max-1)) { if((key == SDLK_RETURN) && !inp->dat.inp.oneline) inp->dat.inp.input[inp->dat.inp.pos++] = '\n'; @@ -956,8 +956,9 @@ static int toolkit_inputInput(Uint8 type, Widget* inp, SDLKey key) { // Didn't get a useful key. else return 0; + + return 1; } - return 1; } return 0; } @@ -1100,8 +1101,10 @@ static int toolkit_keyEvent(SDL_Event* event) { Widget* wgt; SDLKey key; + if(nwindows <= 0) return 0; + wdw = &windows[nwindows-1]; - wgt = (wdw->focus >= 0) ? &wdw->widgets[wdw->focus] : NULL; + wgt = (wdw->focus != -1) ? &wdw->widgets[wdw->focus] : NULL; key = event->key.keysym.sym; // Hack to simulate key repetition. @@ -1150,9 +1153,6 @@ void toolkit_update(void) { Window* wdw; Widget* wgt; - wdw = &windows[nwindows-1]; - wgt = (wdw->focus >= 0) ? &wdw->widgets[wdw->focus] : NULL; - t = SDL_GetTicks(); if(input_key == 0) return; @@ -1162,9 +1162,13 @@ void toolkit_update(void) { input_keyCounter++; - if(wgt && (wgt->type == WIDGET_INPUT) && - (input_key == SDLK_BACKSPACE || isalnum(input_key))) - toolkit_inputInput(SDL_KEYDOWN, wgt, input_key); + if(nwindows > 0) { + wdw = &windows[nwindows-1]; + wgt = (wdw->focus >= 0) ? &wdw->widgets[wdw->focus] : NULL; + if(wgt && (wgt->type == WIDGET_INPUT) && + (input_key == SDLK_BACKSPACE || isalnum(input_key))) + toolkit_inputInput(SDL_KEYDOWN, wgt, input_key); + } switch(input_key) { case SDLK_UP: