diff options
Diffstat (limited to '.local/bin/setwp')
| -rwxr-xr-x | .local/bin/setwp | 91 |
1 files changed, 44 insertions, 47 deletions
diff --git a/.local/bin/setwp b/.local/bin/setwp index e5fce65..fa0d255 100755 --- a/.local/bin/setwp +++ b/.local/bin/setwp @@ -37,70 +37,67 @@ sub choose_wp sub set_wp { my ($wp) = @_; + my $pid; + my $old_pid; return 1 if !(-r $wp) || !(-f $wp); - system( - FEH_PATH, - '--no-fehbg', - '--image-bg', - '#1d2021', - '--bg-fill', - $wp, - '--bg-fill', - $wp, - '--bg-fill', - $wp - ); - return 0; -} -sub notify -{ - system( - 'notify-send', - '-u', - 'low', - '-t', - '2000', - 'setwp', - ' wp set' - ); - return; -} - -sub notify_error -{ - system( - 'notify-send', - '-u', - 'critical', - '-t', - '4000', - 'setwp', - ' Wallpaper does not exist or is not a valid file' - ); - return; + if (defined $ENV{WAYLAND_DISPLAY}) { + $old_pid = `pidof wbg`; + chomp $old_pid; + $pid = fork(); + if (not $pid) { + setsid(); + exec("wbg", $wp); + } else { + sleep(1); + exec("kill", $old_pid); + } + } + else { + system( + FEH_PATH, + '--no-fehbg', + '--image-bg', + '#1d2021', + '--bg-fill', + $wp, + '--bg-fill', + $wp, + '--bg-fill', + $wp + ); + } + return 0; } sub main { my $wp; my $ret; + my $arg; - if (@ARGV != 0 && -f $ARGV[0]) { - $ret = set_wp($ARGV[0]); + $arg = 0; + if (@ARGV != 0 && $ARGV[0] eq '-nw') { + $arg = 1; + } + if (@ARGV != 0 && -f $ARGV[$arg]) { + $ret = set_wp($ARGV[$arg]); } - elsif (@ARGV != 0 && -d $ARGV[0]) { - $wp = choose_wp(get_pool_files($ARGV[0])); + elsif (@ARGV != 0 && -d $ARGV[$arg]) { + $wp = choose_wp(get_pool_files($ARGV[$arg])); $ret = set_wp($wp); } else { $wp = choose_wp(get_pool_files(WP_POOL)); $ret = set_wp($wp); } - if (@ARGV == 0 || (@ARGV != 0 && $ARGV[0] ne "-nw")) { - notify() if ($ret == 0); - notify_error() if ($ret != 0); + if (@ARGV == 0 || (@ARGV != 0 && $ARGV[0] ne '-nw')) { + my $arg = fork(); + if (not $arg) { + exec('herbe', 'wp set') if ($ret == 0); + exec('herbe', 'wp is not a valid file') if ($ret != 0); + } } return; } |
