mirror of
				git://git.suckless.org/dmenu
				synced 2025-10-31 10:47:34 +00:00 
			
		
		
		
	merge xim -> default
This commit is contained in:
		
						commit
						cf641ae496
					
				
							
								
								
									
										22
									
								
								dmenu.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								dmenu.c
									
									
									
									
									
								
							| @ -58,6 +58,7 @@ static Item *items = NULL; | ||||
| static Item *matches, *matchend; | ||||
| static Item *prev, *curr, *next, *sel; | ||||
| static Window win; | ||||
| static XIC xic; | ||||
| 
 | ||||
| static int (*fstrncmp)(const char *, const char *, size_t) = strncmp; | ||||
| static char *(*fstrstr)(const char *, const char *) = strstr; | ||||
| @ -229,9 +230,13 @@ insert(const char *str, ssize_t n) { | ||||
| void | ||||
| keypress(XKeyEvent *ev) { | ||||
| 	char buf[32]; | ||||
| 	KeySym ksym; | ||||
| 	int len; | ||||
| 	KeySym ksym = NoSymbol; | ||||
| 	Status status; | ||||
| 
 | ||||
| 	XLookupString(ev, buf, sizeof buf, &ksym, NULL); | ||||
| 	len = XmbLookupString(xic, ev, buf, sizeof buf, &ksym, &status); | ||||
| 	if(status == XBufferOverflow) | ||||
| 		return; | ||||
| 	if(ev->state & ControlMask) { | ||||
| 		KeySym lower, upper; | ||||
| 
 | ||||
| @ -273,7 +278,7 @@ keypress(XKeyEvent *ev) { | ||||
| 	switch(ksym) { | ||||
| 	default: | ||||
| 		if(!iscntrl(*buf)) | ||||
| 			insert(buf, strlen(buf)); | ||||
| 			insert(buf, len); | ||||
| 		break; | ||||
| 	case XK_Delete: | ||||
| 		if(text[cursor] == '\0') | ||||
| @ -461,7 +466,9 @@ void | ||||
| run(void) { | ||||
| 	XEvent ev; | ||||
| 
 | ||||
| 	while(!XNextEvent(dc->dpy, &ev)) | ||||
| 	while(!XNextEvent(dc->dpy, &ev)) { | ||||
| 		if(XFilterEvent(&ev, win)) | ||||
| 			continue; | ||||
| 		switch(ev.type) { | ||||
| 		case Expose: | ||||
| 			if(ev.xexpose.count == 0) | ||||
| @ -480,12 +487,14 @@ run(void) { | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void | ||||
| setup(void) { | ||||
| 	int x, y, screen = DefaultScreen(dc->dpy); | ||||
| 	Window root = RootWindow(dc->dpy, screen); | ||||
| 	XSetWindowAttributes swa; | ||||
| 	XIM xim; | ||||
| #ifdef XINERAMA | ||||
| 	int n; | ||||
| 	XineramaScreenInfo *info; | ||||
| @ -542,6 +551,11 @@ setup(void) { | ||||
| 	                    DefaultVisual(dc->dpy, screen), | ||||
| 	                    CWOverrideRedirect | CWBackPixmap | CWEventMask, &swa); | ||||
| 
 | ||||
| 	/* input methods */ | ||||
| 	xim = XOpenIM(dc->dpy, NULL, NULL, NULL); | ||||
| 	xic = XCreateIC(xim, XNInputStyle, XIMPreeditNothing | XIMStatusNothing, | ||||
| 	                XNClientWindow, win, XNFocusWindow, win, NULL); | ||||
| 
 | ||||
| 	XMapRaised(dc->dpy, win); | ||||
| 	resizedc(dc, mw, mh); | ||||
| 	drawmenu(); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user