Skip to content

Commit d3df21e

Browse files
authored
Merge pull request #38 from igorkulman/multiple-screens-support
Multiple screens support
2 parents 1afd96c + e9344cc commit d3df21e

4 files changed

Lines changed: 36 additions & 10 deletions

File tree

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,10 @@ If you do not provide the wallpaper path
117117

118118
the currently set wallpaper will be used.
119119

120+
#### Multiple displays
121+
122+
If you use multiple displays and want the wallpaper generated for all of them, add the `--all-displays` flag at the end of the command, so for example `./ChangeMenuBarColor Gradient "#FF0000" "#00FF00" --all-displays`.
123+
120124
## Known issues
121125

122126
Dynamic wallpapers are not supported at the moment. If you use a dynamic wallpaper the utility will not be able to use it and will fail.

Sources/ChangeMenuBarColor/Commands/Abstract/Command.swift

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,33 @@ import SwiftHEXColors
1313

1414
class Command {
1515
func createWallpaper(screen: NSScreen) -> NSImage? {
16-
return nil
16+
fatalError("Override for each type")
17+
}
18+
19+
var useAllDisplays: Bool {
20+
fatalError("Override for each type")
1721
}
1822

1923
func run() {
20-
Log.info("Starting up")
24+
Log.info("Starting up\n")
2125

22-
guard let screen = NSScreen.main else {
23-
Log.error("Could not find the main screen")
24-
return
25-
}
26+
let screens: [NSScreen] = useAllDisplays ? NSScreen.screens : [NSScreen.main].compactMap({ $0 })
2627

27-
guard let adjustedWallpaper = createWallpaper(screen: screen), let data = adjustedWallpaper.jpgData else {
28-
Log.error("Could not generate new wallpaper fr the main screen")
28+
guard !screens.isEmpty else {
29+
Log.error("Could not detect any screens")
2930
return
3031
}
3132

32-
setWallpaper(screen: screen, wallpaper: data)
33+
for (index, screen) in screens.enumerated() {
34+
guard let adjustedWallpaper = createWallpaper(screen: screen), let data = adjustedWallpaper.jpgData else {
35+
Log.error("Could not generate new wallpaper screen \(index)")
36+
continue
37+
}
38+
39+
setWallpaper(screen: screen, wallpaper: data)
40+
}
3341

34-
Log.info("All done!")
42+
Log.info("\nAll done!")
3543
}
3644

3745
func loadWallpaperImage(wallpaper: String?, screen: NSScreen) -> NSImage? {

Sources/ChangeMenuBarColor/Commands/Gradient.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ final class Gradient: Command, ParsableCommand {
2424
@Argument(help: "Wallpaper to use. If not provided the current macOS wallpaper will be used")
2525
private var wallpaper: String?
2626

27+
@Flag(help: "Flag to set wallpaper for all displays not just the main display")
28+
private var allDisplays: Bool = false
29+
30+
override var useAllDisplays: Bool {
31+
return allDisplays
32+
}
33+
2734
override func createWallpaper(screen: NSScreen) -> NSImage? {
2835
guard let wallpaper = loadWallpaperImage(wallpaper: wallpaper, screen: screen) else {
2936
return nil

Sources/ChangeMenuBarColor/Commands/SolidColor.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ final class SolidColor: Command, ParsableCommand {
2222
@Argument(help: "Wallpaper to use. If not provided the current macOS wallpaper will be used")
2323
private var wallpaper: String?
2424

25+
@Flag(help: "Flag to set wallpaper for all displays not just the main display")
26+
private var allDisplays: Bool = false
27+
28+
override var useAllDisplays: Bool {
29+
return allDisplays
30+
}
31+
2532
override func createWallpaper(screen: NSScreen) -> NSImage? {
2633
guard let wallpaper = loadWallpaperImage(wallpaper: wallpaper, screen: screen) else {
2734
return nil

0 commit comments

Comments
 (0)