Fixing the problem of repeating keys.
This commit is contained in:
		
							parent
							
								
									fc23b8e713
								
							
						
					
					
						commit
						d356e43d9c
					
				
					 1 changed files with 17 additions and 17 deletions
				
			
		
							
								
								
									
										34
									
								
								svkbd.c
									
										
									
									
									
								
							
							
						
						
									
										34
									
								
								svkbd.c
									
										
									
									
									
								
							|  | @ -63,7 +63,6 @@ static void buttonrelease(XEvent *e); | ||||||
| static void cleanup(void); | static void cleanup(void); | ||||||
| static void configurenotify(XEvent *e); | static void configurenotify(XEvent *e); | ||||||
| static void countrows(); | static void countrows(); | ||||||
| static void unmapnotify(XEvent *e); |  | ||||||
| static void die(const char *errstr, ...); | static void die(const char *errstr, ...); | ||||||
| static void drawkeyboard(void); | static void drawkeyboard(void); | ||||||
| static void drawkey(Key *k); | static void drawkey(Key *k); | ||||||
|  | @ -85,7 +84,6 @@ static void (*handler[LASTEvent]) (XEvent *) = { | ||||||
| 	[ButtonPress] = buttonpress, | 	[ButtonPress] = buttonpress, | ||||||
| 	[ButtonRelease] = buttonrelease, | 	[ButtonRelease] = buttonrelease, | ||||||
| 	[ConfigureNotify] = configurenotify, | 	[ConfigureNotify] = configurenotify, | ||||||
| 	[UnmapNotify] = unmapnotify, |  | ||||||
| 	[Expose] = expose, | 	[Expose] = expose, | ||||||
| 	[LeaveNotify] = leavenotify, | 	[LeaveNotify] = leavenotify, | ||||||
| 	[MotionNotify] = motionnotify | 	[MotionNotify] = motionnotify | ||||||
|  | @ -128,7 +126,8 @@ motionnotify(XEvent *e) | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if(!IsModifierKey(keys[i].keysym) && keys[i].pressed == True) { | 		if(!IsModifierKey(keys[i].keysym) && keys[i].pressed == True) { | ||||||
| 			keys[i].pressed = False; | 			unpress(&keys[i], 0); | ||||||
|  | 
 | ||||||
| 			drawkey(&keys[i]); | 			drawkey(&keys[i]); | ||||||
| 		} | 		} | ||||||
| 		if(keys[i].highlighted == True) { | 		if(keys[i].highlighted == True) { | ||||||
|  | @ -172,8 +171,13 @@ buttonrelease(XEvent *e) { | ||||||
| 			break; | 			break; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if((k = findkey(ev->x, ev->y))) | 
 | ||||||
| 		unpress(k, mod); | 	if(ev->x < 0 || ev->y < 0) { | ||||||
|  | 		unpress(NULL, mod); | ||||||
|  | 	} else { | ||||||
|  | 		if((k = findkey(ev->x, ev->y))) | ||||||
|  | 			unpress(k, mod); | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void | void | ||||||
|  | @ -274,11 +278,6 @@ drawkey(Key *k) { | ||||||
| 			k->x, k->y); | 			k->x, k->y); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void |  | ||||||
| unmapnotify(XEvent *e) { |  | ||||||
| 	running = False; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void | void | ||||||
| expose(XEvent *e) { | expose(XEvent *e) { | ||||||
| 	XExposeEvent *ev = &e->xexpose; | 	XExposeEvent *ev = &e->xexpose; | ||||||
|  | @ -399,14 +398,15 @@ unpress(Key *k, KeySym mod) { | ||||||
| 			break; | 			break; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if(i !=  LENGTH(keys)) { | 	if(i != LENGTH(keys)) { | ||||||
|  | 		if(pressedmod) { | ||||||
|  | 			XTestFakeKeyEvent(dpy, | ||||||
|  | 				XKeysymToKeycode(dpy, pressedmod), | ||||||
|  | 				False, 0); | ||||||
|  | 		} | ||||||
|  | 		pressedmod = 0; | ||||||
|  | 
 | ||||||
| 		for(i = 0; i < LENGTH(keys); i++) { | 		for(i = 0; i < LENGTH(keys); i++) { | ||||||
| 			if(pressedmod) { |  | ||||||
| 				XTestFakeKeyEvent(dpy, |  | ||||||
| 					XKeysymToKeycode(dpy, pressedmod), |  | ||||||
| 					False, 0); |  | ||||||
| 			} |  | ||||||
| 			pressedmod = 0; |  | ||||||
| 			if(keys[i].pressed) { | 			if(keys[i].pressed) { | ||||||
| 				XTestFakeKeyEvent(dpy, | 				XTestFakeKeyEvent(dpy, | ||||||
| 					XKeysymToKeycode(dpy, | 					XKeysymToKeycode(dpy, | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue