aesophor / wmderland

🌳 X11 tiling window manager using space partitioning trees
https://www.reddit.com/r/unixporn/comments/fb8ve1/wmderland_104_time_to_move_on/
MIT License
409 stars 15 forks source link

Multiheaded setup treated as one big screen #37

Open Diegovsky opened 4 years ago

Diegovsky commented 4 years ago

First off, this window manager is great. Very responsive, lightweight and easy to configure (props to the dev making the config file look a lot like i3).

But here is the issue I'm currently having: my current setup uses two monitors (a 1920x1080 and 1360x768) and when any tiled window is opened, it is streched between both of my monitors, behaving like one big screen.

How to reproduce: Use any xrandr multiheaded display setup.

aesophor commented 4 years ago

Thanks you so much for trying it out!

Currently this window manager still doesn't support multi-monitors yet, but I'll implement this in the next release. This could really take some time though, as I've read the documentation of i3wm and herbstluftwm and it turns out implementing this isn't an easy task.

https://i3wm.org/docs/userguide.html#multi_monitor https://herbstluftwm.org/tutorial.html#monitors https://github.com/herbstluftwm/herbstluftwm/blob/master/src/monitor.cpp

Diegovsky commented 4 years ago

Thanks for the response! That's fine, I'm a patient guy. Really looking forward to that, my hopes are really high for this wm.

Cheers, Diego.

Sweets commented 4 years ago

Thanks you so much for trying it out!

Currently this window manager still doesn't support multi-monitors yet, but I'll implement this in the next release. This could really take some time though, as I've read the documentation of i3wm and herbstluftwm and it turns out implementing this isn't an easy task.

Not necessarily true. An easy way to handle monitor outputs is to do so notionally, in that they don't exist as objects within the window manager, but rather, are selected by their output name (e.g. LVDS-0, VGA-1, etc), and to calculate for pixels on that given monitor, you offset your calculations by the X and Y position in the monitor (see: geometry strings, e.g. 1366x768+0+0, the +0+0 is your X and Y offsets), but still do the positioning relative to the total size of the root window itself.

If you'd like some references for multihead, here's querying displays and storing their information from my own wm.

https://github.com/Sweets/custard/blob/master/src/xcb/xrandr.c https://github.com/Sweets/custard/blob/master/src/wm/monitor.c

aesophor commented 4 years ago

@Sweets Thanks very much! I'll take a look at your code!

Sweets commented 4 years ago

No problem. Just keep in mind that the root window is the closest whole rectangle of the summation of each individual display's rectangle. So if you've got two displays, the left being 1366x768 and the right being 1920x1080 (with no displacement between the two), then the root window's size is 3286x1080. Then to put windows onto the second display on the right (the 1080p display) then your (0,0) for the second display is actually (1366,0) in the root.

Hopefully I explained everything in a way that made sense. If not, have an image.

image

aesophor commented 4 years ago

@Sweets Everything is explained very clearly and makes sense to me! Thank you again