Hi all,
Episode II:
* bottomzoom = hbzoom, horizoom = hzoom, leftzoom = vlzoom, rightzoom =
vrzoom, topzoom = htzoom, zoom (vertical zoom) → OK
* fullscreenzoom, fullzoom → changed too. In fact, I do not see any
reason to zoom a window with parts not visible...
* fill "right|left|top|bottom" as well as pack "right|left|top|bottom" → OK
* mouse-3 window placement → OK
* identity window (f.identity) → correctly clipped
Remaining things:
* monitor*zoom functions
* inter-monitor edge detection for fill, pack (add
"monitor{right,left,top,bottom}" params?) & movepack functions
* finish the inventory of Scr->root* uses (43% done) to know if they
need to be switched to layout mechanism or not.
Regards,
Max.
Le 31.12.2017 à 20:29, Max a écrit :
Hi all,
As promised a long time ago :), I made a POC of xrandr use:
https://github.com/maxatome/ctwm-mirror/tree/xrandr
As a remainder, the goal is to allow ctwm to work correctly in
"xinerama" mode with multiple monitors using different sizes.
Implementation details & status:
- use of a RLayout concept: RLayout is composed of a list of areas
(RAreaList), each area (RArea) representing a monitor. A Rlayout
includes a 2 caches of vertical & horizontal list of areas, these
areas allow to know the vertical & horizontal limits of the screen;
- constrained move of window is fully handled (EWMH interaction not
tested), when using DontMoveOff with or without
MoveOffResistance/Border{Left,Right,Top,Bottom};
- menus are correctly constrained too.
I would be happy if someone can test on its side.
Things that will be added in order of importance (from my point of view):
1. the following functions should take into account the new layout
mechanism:
+ bottomzoom = hbzoom
+ horizoom = hzoom
+ leftzoom = vlzoom
+ rightzoom = vrzoom
+ topzoom = htzoom
+ zoom (vertical zoom)
2. new "zoom" functions to operate on the current monitor only,
instead of the WHOLE screen (perhaps should they be named differently?
I just prefixed their names with "monitor"). Read them as "monitorxxx"
function works as "xxx" function, but operates on the current monitor
("current monitor" = monitor which holds the largest area of a window):
+ monitorfullscreenzoom
+ monitorfullzoom
+ monitorhorizoom = monitorhzoom
+ monitorleftzoom = monitorvlzoom
+ monitorrightzoom = monitorvrzoom
+ monitortopzoom = monitorhtzoom
+ monitorzoom
3. fill "right|left|top|bottom" should take into account the new
layout mechanism + the limit between 2 monitors;
4. movepack should take into account the limit between 2 monitors (new
layout already OK).
Then I propose to get rid of the variable "VirtualScreens" and all
related code. It will OVER-simplify the code without loosing any
feature, as I think it does work as is...
Best regards,
Max.
On 24.06.2017 17:11, Rhialto wrote:
On Tue 13 Jun 2017 at 04:25:23 -0500, Matthew D. Fuller wrote:
My gut says that _doing_ the right thing probably isn't that hard; the
tricky thing will be doing it in all the right places. I don't know
much about the whole vscreen/xinerama/etc implementation, but from
what I've seen I think it's probably pretty hard on the "quick&dirty"
side of things.
A lot of things probably only appear to work by accident due to the
rather simple model when the rule is "everything's a giant rectangle".
Change that model, and I'll bet we'll find all _sorts_ of bizarre
schrodinbugs coming out of the woodwork... should be great fun :)
Well we'll just HAVE to try it out! :-)
-Olaf.