diff options
| author | Devin J. Pohly <djpohly@gmail.com> | 2022-03-29 16:09:29 -0500 | 
|---|---|---|
| committer | Devin J. Pohly <djpohly@gmail.com> | 2022-03-29 16:09:29 -0500 | 
| commit | 0ddde0c85a46370759e85f3437e3475b569d5c41 (patch) | |
| tree | c7f5d3d40b1ac405b7d1b8efbb87ddd5eb4f94e3 /dwl.c | |
| parent | e08bd1292288f662eb265461a8c1a9d7501b0445 (diff) | |
move sigchld() into XWayland section
Diffstat (limited to 'dwl.c')
| -rw-r--r-- | dwl.c | 44 | 
1 files changed, 24 insertions, 20 deletions
| @@ -258,7 +258,6 @@ static void setlayout(const Arg *arg);  static void setmfact(const Arg *arg);  static void setmon(Client *c, Monitor *m, unsigned int newtags);  static void setup(void); -static void sigchld(int unused);  static void spawn(const Arg *arg);  static void startdrag(struct wl_listener *listener, void *data);  static void tag(const Arg *arg); @@ -341,6 +340,7 @@ static void activatex11(struct wl_listener *listener, void *data);  static void configurex11(struct wl_listener *listener, void *data);  static void createnotifyx11(struct wl_listener *listener, void *data);  static Atom getatom(xcb_connection_t *xc, const char *name); +static void sigchld(int unused);  static void xwaylandready(struct wl_listener *listener, void *data);  static struct wl_listener new_xwayland_surface = {.notify = createnotifyx11};  static struct wl_listener xwayland_ready = {.notify = xwaylandready}; @@ -1762,7 +1762,11 @@ setup(void)  	dpy = wl_display_create();  	/* Set up signal handlers */ +#ifdef XWAYLAND  	sigchld(0); +#else +	signal(SIGCHLD, SIG_IGN); +#endif  	signal(SIGINT, quitsignal);  	signal(SIGTERM, quitsignal); @@ -1923,25 +1927,6 @@ setup(void)  }  void -sigchld(int unused) -{ -	siginfo_t in; -	/* We should be able to remove this function in favor of a simple -	 *     signal(SIGCHLD, SIG_IGN); -	 * but the Xwayland implementation in wlroots currently prevents us from -	 * setting our own disposition for SIGCHLD. -	 */ -	if (signal(SIGCHLD, sigchld) == SIG_ERR) -		EBARF("can't install SIGCHLD handler"); -	/* WNOWAIT leaves the child in a waitable state, in case this is the -	 * XWayland process -	 */ -	while (!waitid(P_ALL, 0, &in, WEXITED|WNOHANG|WNOWAIT) && in.si_pid -			&& in.si_pid != xwayland->server->pid) -		waitpid(in.si_pid, NULL, 0); -} - -void  spawn(const Arg *arg)  {  	if (fork() == 0) { @@ -2318,6 +2303,25 @@ getatom(xcb_connection_t *xc, const char *name)  }  void +sigchld(int unused) +{ +	siginfo_t in; +	/* We should be able to remove this function in favor of a simple +	 *     signal(SIGCHLD, SIG_IGN); +	 * but the Xwayland implementation in wlroots currently prevents us from +	 * setting our own disposition for SIGCHLD. +	 */ +	if (signal(SIGCHLD, sigchld) == SIG_ERR) +		EBARF("can't install SIGCHLD handler"); +	/* WNOWAIT leaves the child in a waitable state, in case this is the +	 * XWayland process +	 */ +	while (!waitid(P_ALL, 0, &in, WEXITED|WNOHANG|WNOWAIT) && in.si_pid +			&& in.si_pid != xwayland->server->pid) +		waitpid(in.si_pid, NULL, 0); +} + +void  xwaylandready(struct wl_listener *listener, void *data)  {  	struct wlr_xcursor *xcursor; | 
