diff --git a/compton.1 b/compton.1 index 9f2636d..abdfbbd 100644 --- a/compton.1 +++ b/compton.1 @@ -56,6 +56,13 @@ drag-and-drop windows. When \-f is specified, also enables the fade effect when windows change their opacity, as with transset(1). .TP +.BI \-b +Attempts to fork to background after registered composition +manager. Still sits in foreground if fork failed. Maybe useful +if you computer is too fast, in which case some programs +requiring a composite manager may have started before composite +manager is ready. +.TP .BI \-i\ opacity Specifies inactive window transparency. (0.1 - 1.0) .TP diff --git a/compton.c b/compton.c index 2d40ab8..64ef3c9 100644 --- a/compton.c +++ b/compton.c @@ -2423,6 +2423,7 @@ main(int argc, char **argv) { int o; Bool no_dock_shadow = False; Bool no_dnd_shadow = False; + Bool fork_after_register = False; for (i = 0; i < NUM_WINTYPES; ++i) { win_type_fade[i] = False; @@ -2430,7 +2431,7 @@ main(int argc, char **argv) { win_type_opacity[i] = 1.0; } - while ((o = getopt(argc, argv, "D:I:O:d:r:o:m:l:t:i:e:scnfFCaSzG")) != -1) { + while ((o = getopt(argc, argv, "D:I:O:d:r:o:m:l:t:i:e:scnfFCaSzGb")) != -1) { switch (o) { case 'd': display = optarg; @@ -2507,6 +2508,9 @@ main(int argc, char **argv) { case 'G': no_dnd_shadow = True; break; + case 'b': + fork_after_register = True; + break; default: usage(argv[0]); break; @@ -2564,6 +2568,13 @@ main(int argc, char **argv) { } register_cm(scr); + if (fork_after_register) { + int pid = fork(); + if (pid < 0) + fprintf(stderr, "Fork failed\n"); + else if (pid > 0) + exit(0); + } get_atoms(); pa.subwindow_mode = IncludeInferiors;