x: do not instantiate a new nested list on each cursor move
This commit is contained in:
		
				
					committed by
					
						 Hiltjo Posthuma
						Hiltjo Posthuma
					
				
			
			
				
	
			
			
			
						parent
						
							99de333951
						
					
				
				
					commit
					2cb539142b
				
			
							
								
								
									
										16
									
								
								x.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								x.c
									
									
									
									
									
								
							| @@ -97,6 +97,8 @@ typedef struct { | |||||||
| 	struct { | 	struct { | ||||||
| 		XIM xim; | 		XIM xim; | ||||||
| 		XIC xic; | 		XIC xic; | ||||||
|  | 		XPoint spot; | ||||||
|  | 		XVaNestedList spotlist; | ||||||
| 	} ime; | 	} ime; | ||||||
| 	Draw draw; | 	Draw draw; | ||||||
| 	Visual *vis; | 	Visual *vis; | ||||||
| @@ -1042,6 +1044,9 @@ ximopen(Display *dpy) | |||||||
| 	                   XNClientWindow, xw.win, XNFocusWindow, xw.win, NULL); | 	                   XNClientWindow, xw.win, XNFocusWindow, xw.win, NULL); | ||||||
| 	if (xw.xic == NULL) | 	if (xw.xic == NULL) | ||||||
| 		die("XCreateIC failed. Could not obtain input method.\n"); | 		die("XCreateIC failed. Could not obtain input method.\n"); | ||||||
|  |  | ||||||
|  | 	xw.ime.spotlist = XVaCreateNestedList(0, XNSpotLocation, &xw.ime.spot, | ||||||
|  | 	                                      NULL); | ||||||
| } | } | ||||||
|  |  | ||||||
| void | void | ||||||
| @@ -1058,6 +1063,7 @@ ximdestroy(XIM xim, XPointer client, XPointer call) | |||||||
| 	xw.ime.xim = NULL; | 	xw.ime.xim = NULL; | ||||||
| 	XRegisterIMInstantiateCallback(xw.dpy, NULL, NULL, NULL, | 	XRegisterIMInstantiateCallback(xw.dpy, NULL, NULL, NULL, | ||||||
| 					ximinstantiate, NULL); | 					ximinstantiate, NULL); | ||||||
|  | 	XFree(xw.ime.spotlist); | ||||||
| } | } | ||||||
|  |  | ||||||
| void | void | ||||||
| @@ -1603,11 +1609,13 @@ xfinishdraw(void) | |||||||
| void | void | ||||||
| xximspot(int x, int y) | xximspot(int x, int y) | ||||||
| { | { | ||||||
| 	XPoint spot = { borderpx + x * win.cw, borderpx + (y + 1) * win.ch }; | 	if (xw.ime.xic == NULL) | ||||||
| 	XVaNestedList attr = XVaCreateNestedList(0, XNSpotLocation, &spot, NULL); | 		return; | ||||||
|  |  | ||||||
| 	XSetICValues(xw.xic, XNPreeditAttributes, attr, NULL); | 	xw.ime.spot.x = borderpx + x * win.cw; | ||||||
| 	XFree(attr); | 	xw.ime.spot.y = borderpx + (y + 1) * win.ch; | ||||||
|  |  | ||||||
|  | 	XSetICValues(xw.ime.xic, XNPreeditAttributes, xw.ime.spotlist, NULL); | ||||||
| } | } | ||||||
|  |  | ||||||
| void | void | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user