internal: allow desc: for monitors

This commit is contained in:
vaxerski 2023-04-26 21:44:51 +01:00
parent 3bfaac09f5
commit 66b3ba8d9f
4 changed files with 30 additions and 2 deletions

View file

@ -39,7 +39,7 @@ wallpaper = monitor2,/path/to/next_image.png
# .. more monitors # .. more monitors
``` ```
Preload will tell Hyprland to load a particular image (supported formats: png, jpg, jpeg). Wallpaper will apply the wallpaper to the selected output (`monitor` is the monitor's name, easily can be retrieved with `hyprctl monitors`. You can leave it empty for a wildcard (aka fallback)) Preload will tell Hyprland to load a particular image (supported formats: png, jpg, jpeg). Wallpaper will apply the wallpaper to the selected output (`monitor` is the monitor's name, easily can be retrieved with `hyprctl monitors`. You can leave it empty for a wildcard (aka fallback). You can also use `desc:` followed by the monitor's description without the (PORT) at the end)
You may add `contain:` before the file path in `wallpaper=` to set the mode to contain instead of cover: You may add `contain:` before the file path in `wallpaper=` to set the mode to contain instead of cover:

View file

@ -184,7 +184,17 @@ void CHyprpaper::removeOldHyprpaperImages() {
} }
SMonitor* CHyprpaper::getMonitorFromName(const std::string& monname) { SMonitor* CHyprpaper::getMonitorFromName(const std::string& monname) {
bool useDesc = false;
std::string desc = "";
if (monname.find("desc:") == 0) {
useDesc = true;
desc = monname.substr(5);
}
for (auto& m : m_vMonitors) { for (auto& m : m_vMonitors) {
if (useDesc && m->description.find(desc) == 0)
return m.get();
if (m->name == monname) if (m->name == monname)
return m.get(); return m.get();
} }
@ -270,6 +280,21 @@ void CHyprpaper::ensureMonitorHasActiveWallpaper(SMonitor* pMonitor) {
return; // has return; // has
// get the target // get the target
for (auto& [mon, path1] : m_mMonitorActiveWallpapers) {
if (mon.find("desc:") != 0)
continue;
if (pMonitor->description.find(mon.substr(5)) == 0) {
for (auto& [path2, target] : m_mWallpaperTargets) {
if (path1 == path2) {
it->second = ⌖
break;
}
}
break;
}
}
for (auto& [mon, path1] : m_mMonitorActiveWallpapers) { for (auto& [mon, path1] : m_mMonitorActiveWallpapers) {
if (mon == pMonitor->name) { if (mon == pMonitor->name) {
for (auto& [path2, target] : m_mWallpaperTargets) { for (auto& [path2, target] : m_mWallpaperTargets) {

View file

@ -32,7 +32,9 @@ void Events::name(void *data, wl_output *wl_output, const char *name) {
} }
void Events::description(void *data, wl_output *wl_output, const char *description) { void Events::description(void *data, wl_output *wl_output, const char *description) {
// i do not care const auto PMONITOR = (SMonitor*)data;
PMONITOR->description = description;
} }
void Events::handleCapabilities(void *data, wl_seat *wl_seat, uint32_t capabilities) { void Events::handleCapabilities(void *data, wl_seat *wl_seat, uint32_t capabilities) {

View file

@ -6,6 +6,7 @@
struct SMonitor { struct SMonitor {
std::string name = ""; std::string name = "";
std::string description = "";
wl_output* output = nullptr; wl_output* output = nullptr;
uint32_t wayland_name = 0; uint32_t wayland_name = 0;
Vector2D size; Vector2D size;