x: move IME variables into XWindow ime embedded struct
This commit is contained in:
		
				
					committed by
					
						 Hiltjo Posthuma
						Hiltjo Posthuma
					
				
			
			
				
	
			
			
			
						parent
						
							895e5b50a8
						
					
				
				
					commit
					99de333951
				
			
							
								
								
									
										20
									
								
								x.c
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								x.c
									
									
									
									
									
								
							| @@ -94,8 +94,10 @@ typedef struct { | ||||
| 	Drawable buf; | ||||
| 	GlyphFontSpec *specbuf; /* font spec buffer used for rendering */ | ||||
| 	Atom xembed, wmdeletewin, netwmname, netwmpid; | ||||
| 	struct { | ||||
| 		XIM xim; | ||||
| 		XIC xic; | ||||
| 	} ime; | ||||
| 	Draw draw; | ||||
| 	Visual *vis; | ||||
| 	XSetWindowAttributes attrs; | ||||
| @@ -1026,17 +1028,17 @@ ximopen(Display *dpy) | ||||
| { | ||||
| 	XIMCallback destroy = { .client_data = NULL, .callback = ximdestroy }; | ||||
|  | ||||
| 	if ((xw.xim = XOpenIM(xw.dpy, NULL, NULL, NULL)) == NULL) { | ||||
| 	if ((xw.ime.xim = XOpenIM(xw.dpy, NULL, NULL, NULL)) == NULL) { | ||||
| 		XSetLocaleModifiers("@im=local"); | ||||
| 		if ((xw.xim = XOpenIM(xw.dpy, NULL, NULL, NULL)) == NULL) { | ||||
| 		if ((xw.ime.xim = XOpenIM(xw.dpy, NULL, NULL, NULL)) == NULL) { | ||||
| 			XSetLocaleModifiers("@im="); | ||||
| 			if ((xw.xim = XOpenIM(xw.dpy, NULL, NULL, NULL)) == NULL) | ||||
| 			if ((xw.ime.xim = XOpenIM(xw.dpy, NULL, NULL, NULL)) == NULL) | ||||
| 				die("XOpenIM failed. Could not open input device.\n"); | ||||
| 		} | ||||
| 	} | ||||
| 	if (XSetIMValues(xw.xim, XNDestroyCallback, &destroy, NULL) != NULL) | ||||
| 	if (XSetIMValues(xw.ime.xim, XNDestroyCallback, &destroy, NULL) != NULL) | ||||
| 		die("XSetIMValues failed. Could not set input method value.\n"); | ||||
| 	xw.xic = XCreateIC(xw.xim, XNInputStyle, XIMPreeditNothing | XIMStatusNothing, | ||||
| 	xw.xic = XCreateIC(xw.ime.xim, XNInputStyle, XIMPreeditNothing | XIMStatusNothing, | ||||
| 	                   XNClientWindow, xw.win, XNFocusWindow, xw.win, NULL); | ||||
| 	if (xw.xic == NULL) | ||||
| 		die("XCreateIC failed. Could not obtain input method.\n"); | ||||
| @@ -1053,7 +1055,7 @@ ximinstantiate(Display *dpy, XPointer client, XPointer call) | ||||
| void | ||||
| ximdestroy(XIM xim, XPointer client, XPointer call) | ||||
| { | ||||
| 	xw.xim = NULL; | ||||
| 	xw.ime.xim = NULL; | ||||
| 	XRegisterIMInstantiateCallback(xw.dpy, NULL, NULL, NULL, | ||||
| 					ximinstantiate, NULL); | ||||
| } | ||||
| @@ -1682,13 +1684,13 @@ focus(XEvent *ev) | ||||
| 		return; | ||||
|  | ||||
| 	if (ev->type == FocusIn) { | ||||
| 		XSetICFocus(xw.xic); | ||||
| 		XSetICFocus(xw.ime.xic); | ||||
| 		win.mode |= MODE_FOCUSED; | ||||
| 		xseturgency(0); | ||||
| 		if (IS_SET(MODE_FOCUS)) | ||||
| 			ttywrite("\033[I", 3, 0); | ||||
| 	} else { | ||||
| 		XUnsetICFocus(xw.xic); | ||||
| 		XUnsetICFocus(xw.ime.xic); | ||||
| 		win.mode &= ~MODE_FOCUSED; | ||||
| 		if (IS_SET(MODE_FOCUS)) | ||||
| 			ttywrite("\033[O", 3, 0); | ||||
| @@ -1752,7 +1754,7 @@ kpress(XEvent *ev) | ||||
| 	if (IS_SET(MODE_KBDLOCK)) | ||||
| 		return; | ||||
|  | ||||
| 	len = XmbLookupString(xw.xic, e, buf, sizeof buf, &ksym, &status); | ||||
| 	len = XmbLookupString(xw.ime.xic, e, buf, sizeof buf, &ksym, &status); | ||||
| 	/* 1. shortcuts */ | ||||
| 	for (bp = shortcuts; bp < shortcuts + LEN(shortcuts); bp++) { | ||||
| 		if (ksym == bp->keysym && match(bp->mod, e->state)) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user