x: move IME variables into XWindow ime embedded struct
							parent
							
								
									895e5b50a8
								
							
						
					
					
						commit
						99de333951
					
				
							
								
								
									
										26
									
								
								x.c
								
								
								
								
							
							
						
						
									
										26
									
								
								x.c
								
								
								
								
							|  | @ -94,8 +94,10 @@ typedef struct { | ||||||
| 	Drawable buf; | 	Drawable buf; | ||||||
| 	GlyphFontSpec *specbuf; /* font spec buffer used for rendering */ | 	GlyphFontSpec *specbuf; /* font spec buffer used for rendering */ | ||||||
| 	Atom xembed, wmdeletewin, netwmname, netwmpid; | 	Atom xembed, wmdeletewin, netwmname, netwmpid; | ||||||
| 	XIM xim; | 	struct { | ||||||
| 	XIC xic; | 		XIM xim; | ||||||
|  | 		XIC xic; | ||||||
|  | 	} ime; | ||||||
| 	Draw draw; | 	Draw draw; | ||||||
| 	Visual *vis; | 	Visual *vis; | ||||||
| 	XSetWindowAttributes attrs; | 	XSetWindowAttributes attrs; | ||||||
|  | @ -1026,18 +1028,18 @@ ximopen(Display *dpy) | ||||||
| { | { | ||||||
| 	XIMCallback destroy = { .client_data = NULL, .callback = ximdestroy }; | 	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"); | 		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="); | 			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"); | 				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"); | 		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); | 	                   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"); | ||||||
| } | } | ||||||
|  | @ -1053,7 +1055,7 @@ ximinstantiate(Display *dpy, XPointer client, XPointer call) | ||||||
| void | void | ||||||
| ximdestroy(XIM xim, XPointer client, XPointer call) | ximdestroy(XIM xim, XPointer client, XPointer call) | ||||||
| { | { | ||||||
| 	xw.xim = NULL; | 	xw.ime.xim = NULL; | ||||||
| 	XRegisterIMInstantiateCallback(xw.dpy, NULL, NULL, NULL, | 	XRegisterIMInstantiateCallback(xw.dpy, NULL, NULL, NULL, | ||||||
| 					ximinstantiate, NULL); | 					ximinstantiate, NULL); | ||||||
| } | } | ||||||
|  | @ -1682,13 +1684,13 @@ focus(XEvent *ev) | ||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
| 	if (ev->type == FocusIn) { | 	if (ev->type == FocusIn) { | ||||||
| 		XSetICFocus(xw.xic); | 		XSetICFocus(xw.ime.xic); | ||||||
| 		win.mode |= MODE_FOCUSED; | 		win.mode |= MODE_FOCUSED; | ||||||
| 		xseturgency(0); | 		xseturgency(0); | ||||||
| 		if (IS_SET(MODE_FOCUS)) | 		if (IS_SET(MODE_FOCUS)) | ||||||
| 			ttywrite("\033[I", 3, 0); | 			ttywrite("\033[I", 3, 0); | ||||||
| 	} else { | 	} else { | ||||||
| 		XUnsetICFocus(xw.xic); | 		XUnsetICFocus(xw.ime.xic); | ||||||
| 		win.mode &= ~MODE_FOCUSED; | 		win.mode &= ~MODE_FOCUSED; | ||||||
| 		if (IS_SET(MODE_FOCUS)) | 		if (IS_SET(MODE_FOCUS)) | ||||||
| 			ttywrite("\033[O", 3, 0); | 			ttywrite("\033[O", 3, 0); | ||||||
|  | @ -1752,7 +1754,7 @@ kpress(XEvent *ev) | ||||||
| 	if (IS_SET(MODE_KBDLOCK)) | 	if (IS_SET(MODE_KBDLOCK)) | ||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
| 	len = XmbLookupString(xw.xic, e, buf, sizeof buf, &ksym, &status); | 	len = XmbLookupString(xw.ime.xic, e, buf, sizeof buf, &ksym, &status); | ||||||
| 	/* 1. shortcuts */ | 	/* 1. shortcuts */ | ||||||
| 	for (bp = shortcuts; bp < shortcuts + LEN(shortcuts); bp++) { | 	for (bp = shortcuts; bp < shortcuts + LEN(shortcuts); bp++) { | ||||||
| 		if (ksym == bp->keysym && match(bp->mod, e->state)) { | 		if (ksym == bp->keysym && match(bp->mod, e->state)) { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue