aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xwinwrap.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/xwinwrap.c b/xwinwrap.c
index 487f58e..3a44c5e 100644
--- a/xwinwrap.c
+++ b/xwinwrap.c
@@ -150,6 +150,7 @@ static void usage (void)
-o - Opacity value between 0 to 1 (ex: -o 0.20)\n \
-sh - Shape of window (choose between rectangle, circle or triangle. Default is rectangle)\n \
-ov - Set override_redirect flag (For seamless desktop background integration in non-fullscreenmode)\n \
+ -d - Daemonize\n \
-debug - Enable debug messages\n");
}
@@ -283,6 +284,7 @@ int main(int argc, char **argv)
bool above = false;
bool skip_taskbar = false;
bool skip_pager = false;
+ bool daemonize = false;
win_shape shape = SHAPE_RECT;
Pixmap mask;
@@ -366,6 +368,10 @@ int main(int argc, char **argv)
{
debug = true;
}
+ else if (strcmp (argv[i], "-d") == 0)
+ {
+ daemonize = true;
+ }
else if (strcmp (argv[i], "--") == 0)
{
break;
@@ -377,6 +383,35 @@ int main(int argc, char **argv)
}
}
+ if (daemonize)
+ {
+ pid_t process_id = 0;
+ pid_t sid = 0;
+ process_id = fork();
+ if (process_id < 0)
+ {
+ fprintf(stderr, "fork failed!\n");
+ exit(1);
+ }
+
+ if (process_id > 0)
+ {
+ fprintf(stderr, "pid of child process %d \n", process_id);
+ exit(0);
+ }
+ umask(0);
+ sid = setsid();
+ if (sid < 0)
+ {
+ exit(1);
+ }
+
+ chdir("/");
+ close(STDIN_FILENO);
+ close(STDOUT_FILENO);
+ close(STDERR_FILENO);
+ }
+
for (i = i + 1; i < argc; i++)
{
if (strcmp (argv[i], "WID") == 0)