aboutsummaryrefslogtreecommitdiff
path: root/patches/autostart.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/autostart.patch')
-rw-r--r--patches/autostart.patch154
1 files changed, 0 insertions, 154 deletions
diff --git a/patches/autostart.patch b/patches/autostart.patch
deleted file mode 100644
index 0350380..0000000
--- a/patches/autostart.patch
+++ /dev/null
@@ -1,154 +0,0 @@
-From d2829ed5c970c7e7692e39c451526b3860dabb2f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Leonardo=20Hern=C3=A1ndez=20Hern=C3=A1ndez?=
- <leohdz172@proton.me>
-Date: Sat, 8 Jul 2023 17:11:36 -0600
-Subject: [PATCH] port autostart patch from dwm
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-https://dwm.suckless.org/patches/cool_autostart/
-Signed-off-by: Leonardo Hernández Hernández <leohdz172@proton.me>
----
- config.def.h | 7 +++++++
- dwl.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++-----
- 2 files changed, 61 insertions(+), 5 deletions(-)
-
-diff --git a/config.def.h b/config.def.h
-index 22d2171..1d0f935 100644
---- a/config.def.h
-+++ b/config.def.h
-@@ -20,6 +20,13 @@ static const float fullscreen_bg[] = {0.1f, 0.1f, 0.1f, 1.0f}; /* You ca
- /* logging */
- static int log_level = WLR_ERROR;
-
-+/* Autostart */
-+static const char *const autostart[] = {
-+ "wbg", "/path/to/your/image", NULL,
-+ NULL /* terminate */
-+};
-+
-+
- /* NOTE: ALWAYS keep a rule declared even if you don't use rules (e.g leave at least one example) */
- static const Rule rules[] = {
- /* app_id title tags mask isfloating monitor */
-diff --git a/dwl.c b/dwl.c
-index 00e9cc1e..5de32831 100644
---- a/dwl.c
-+++ b/dwl.c
-@@ -249,6 +249,7 @@ static void arrange(Monitor *m);
- static void arrangelayer(Monitor *m, struct wl_list *list,
- struct wlr_box *usable_area, int exclusive);
- static void arrangelayers(Monitor *m);
-+static void autostartexec(void);
- static void axisnotify(struct wl_listener *listener, void *data);
- static void buttonpress(struct wl_listener *listener, void *data);
- static void chvt(const Arg *arg);
-@@ -429,6 +430,9 @@ static xcb_atom_t netatom[NetLast];
- /* attempt to encapsulate suck into one file */
- #include "client.h"
-
-+static pid_t *autostart_pids;
-+static size_t autostart_len;
-+
- /* function implementations */
- void
- applybounds(Client *c, struct wlr_box *bbox)
-@@ -577,6 +581,27 @@ arrangelayers(Monitor *m)
- }
- }
-
-+void
-+autostartexec(void) {
-+ const char *const *p;
-+ size_t i = 0;
-+
-+ /* count entries */
-+ for (p = autostart; *p; autostart_len++, p++)
-+ while (*++p);
-+
-+ autostart_pids = calloc(autostart_len, sizeof(pid_t));
-+ for (p = autostart; *p; i++, p++) {
-+ if ((autostart_pids[i] = fork()) == 0) {
-+ setsid();
-+ execvp(*p, (char *const *)p);
-+ die("dwl: execvp %s:", *p);
-+ }
-+ /* skip arguments */
-+ while (*++p);
-+ }
-+}
-+
- void
- axisnotify(struct wl_listener *listener, void *data)
- {
-@@ -672,11 +697,21 @@ checkidleinhibitor(struct wlr_surface *exclude)
- void
- cleanup(void)
- {
-+ size_t i;
- #ifdef XWAYLAND
- wlr_xwayland_destroy(xwayland);
- xwayland = NULL;
- #endif
- wl_display_destroy_clients(dpy);
-+
-+ /* kill child processes */
-+ for (i = 0; i < autostart_len; i++) {
-+ if (0 < autostart_pids[i]) {
-+ kill(autostart_pids[i], SIGTERM);
-+ waitpid(autostart_pids[i], NULL, 0);
-+ }
-+ }
-+
- if (child_pid > 0) {
- kill(-child_pid, SIGTERM);
- waitpid(child_pid, NULL, 0);
-@@ -1438,18 +1473,31 @@ void
- handlesig(int signo)
- {
- if (signo == SIGCHLD) {
--#ifdef XWAYLAND
- siginfo_t in;
- /* wlroots expects to reap the XWayland process itself, so we
- * use WNOWAIT to keep the child waitable until we know it's not
- * XWayland.
- */
- while (!waitid(P_ALL, 0, &in, WEXITED|WNOHANG|WNOWAIT) && in.si_pid
-- && (!xwayland || in.si_pid != xwayland->server->pid))
-- waitpid(in.si_pid, NULL, 0);
--#else
-- while (waitpid(-1, NULL, WNOHANG) > 0);
-+#ifdef XWAYLAND
-+ && (!xwayland || in.si_pid != xwayland->server->pid)
- #endif
-+ ) {
-+ pid_t *p, *lim;
-+ waitpid(in.si_pid, NULL, 0);
-+ if (in.si_pid == child_pid)
-+ child_pid = -1;
-+ if (!(p = autostart_pids))
-+ continue;
-+ lim = &p[autostart_len];
-+
-+ for (; p < lim; p++) {
-+ if (*p == in.si_pid) {
-+ *p = -1;
-+ break;
-+ }
-+ }
-+ }
- } else if (signo == SIGINT || signo == SIGTERM) {
- quit(NULL);
- }
-@@ -2169,6 +2217,7 @@ run(char *startup_cmd)
- die("startup: backend_start");
-
- /* Now that the socket exists and the backend is started, run the startup command */
-+ autostartexec();
- if (startup_cmd) {
- int piperw[2];
- if (pipe(piperw) < 0)
---
-2.45.2
-