Browse code

emu: when both key down and key up are generated on the same frame, skip the up until the next one

Sigrid Solveig Haflínudóttir authored on 19/12/2021 19:40:20
Showing 1 changed files
... ...
@@ -526,6 +526,7 @@ run(Uxn *u)
526 526
 	while(!devsystem->dat[0xf]) {
527 527
 		SDL_Event event;
528 528
 		double elapsed, begin = 0;
529
+		int ksym;
529 530
 		if(!BENCH)
530 531
 			begin = SDL_GetPerformanceCounter();
531 532
 		while(SDL_PollEvent(&event) != 0) {
... ...
@@ -544,6 +545,10 @@ run(Uxn *u)
544 545
 				doctrl(u, &event, event.type == SDL_KEYDOWN);
545 546
 				uxn_eval(u, devctrl->vector);
546 547
 				devctrl->dat[3] = 0;
548
+
549
+				ksym = event.key.keysym.sym;
550
+				if(SDL_PeepEvents(&event, 1, SDL_PEEKEVENT, SDL_KEYUP, SDL_KEYUP) == 1 && ksym == event.key.keysym.sym)
551
+					goto breakout;
547 552
 				break;
548 553
 			case SDL_MOUSEWHEEL:
549 554
 			case SDL_MOUSEBUTTONUP:
... ...
@@ -563,6 +568,7 @@ run(Uxn *u)
563 568
 					uxn_eval(u, peek16((devaudio0 + (event.type - audio0_event))->dat, 0));
564 569
 			}
565 570
 		}
571
+breakout:
566 572
 		uxn_eval(u, devscreen->vector);
567 573
 		if(ppu.reqdraw || devsystem->dat[0xe])
568 574
 			redraw(u);