Call xsetenv() in main process instead of child
This makes xsetenv internal to x.c, and allows iso14755's external command to use $WINDOWID instead of having to snprintf it again. (The same benefit will apply to the externalpipe patch.) The xwinid function is no longer needed. Signed-off-by: Devin J. Pohly <djpohly@gmail.com>master
							parent
							
								
									1f24bde82b
								
							
						
					
					
						commit
						3e44ee5569
					
				
							
								
								
									
										8
									
								
								st.c
								
								
								
								
							
							
						
						
									
										8
									
								
								st.c
								
								
								
								
							|  | @ -60,7 +60,7 @@ char *argv0; | |||
| #define ISDELIM(u)		(utf8strchr(worddelimiters, u) != NULL) | ||||
| 
 | ||||
| /* constants */ | ||||
| #define ISO14755CMD		"dmenu -w %lu -p codepoint: </dev/null" | ||||
| #define ISO14755CMD		"dmenu -w \"$WINDOWID\" -p codepoint: </dev/null" | ||||
| 
 | ||||
| enum cursor_movement { | ||||
| 	CURSOR_SAVE, | ||||
|  | @ -706,7 +706,6 @@ execsh(void) | |||
| 	setenv("SHELL", sh, 1); | ||||
| 	setenv("HOME", pw->pw_dir, 1); | ||||
| 	setenv("TERM", termname, 1); | ||||
| 	xsetenv(); | ||||
| 
 | ||||
| 	signal(SIGCHLD, SIG_DFL); | ||||
| 	signal(SIGHUP, SIG_DFL); | ||||
|  | @ -1993,14 +1992,11 @@ tprinter(char *s, size_t len) | |||
| void | ||||
| iso14755(const Arg *arg) | ||||
| { | ||||
| 	unsigned long id = xwinid(); | ||||
| 	char cmd[sizeof(ISO14755CMD) + NUMMAXLEN(id)]; | ||||
| 	FILE *p; | ||||
| 	char *us, *e, codepoint[9], uc[UTF_SIZ]; | ||||
| 	unsigned long utf32; | ||||
| 
 | ||||
| 	snprintf(cmd, sizeof(cmd), ISO14755CMD, id); | ||||
| 	if (!(p = popen(cmd, "r"))) | ||||
| 	if (!(p = popen(ISO14755CMD, "r"))) | ||||
| 		return; | ||||
| 
 | ||||
| 	us = fgets(codepoint, sizeof(codepoint), p); | ||||
|  |  | |||
							
								
								
									
										2
									
								
								win.h
								
								
								
								
							
							
						
						
									
										2
									
								
								win.h
								
								
								
								
							|  | @ -19,12 +19,10 @@ void xinit(void); | |||
| void xloadcols(void); | ||||
| int xsetcolorname(int, const char *); | ||||
| void xloadfonts(char *, double); | ||||
| void xsetenv(void); | ||||
| void xsettitle(char *); | ||||
| void xsetpointermotion(int); | ||||
| void xseturgency(int); | ||||
| void xunloadfonts(void); | ||||
| void xresize(int, int); | ||||
| void xselpaste(void); | ||||
| unsigned long xwinid(void); | ||||
| void xsetsel(char *, Time); | ||||
|  |  | |||
							
								
								
									
										8
									
								
								x.c
								
								
								
								
							
							
						
						
									
										8
									
								
								x.c
								
								
								
								
							|  | @ -89,6 +89,7 @@ static void xdrawcursor(void); | |||
| static int xgeommasktogravity(int); | ||||
| static int xloadfont(Font *, FcPattern *); | ||||
| static void xunloadfont(Font *); | ||||
| static void xsetenv(void); | ||||
| 
 | ||||
| static void expose(XEvent *); | ||||
| static void visibility(XEvent *); | ||||
|  | @ -1487,12 +1488,6 @@ xbell(int vol) | |||
| 	XkbBell(xw.dpy, xw.win, vol, (Atom)NULL); | ||||
| } | ||||
| 
 | ||||
| unsigned long | ||||
| xwinid(void) | ||||
| { | ||||
| 	return xw.win; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| focus(XEvent *ev) | ||||
| { | ||||
|  | @ -1765,6 +1760,7 @@ run: | |||
| 	XSetLocaleModifiers(""); | ||||
| 	tnew(MAX(cols, 1), MAX(rows, 1)); | ||||
| 	xinit(); | ||||
| 	xsetenv(); | ||||
| 	selinit(); | ||||
| 	run(); | ||||
| 
 | ||||
|  |  | |||
		Reference in New Issue