----- Original Message -----
> From: "Hans de Goede" <[email protected]>
> To: "Marc-André Lureau" <[email protected]>
> Cc: "Virt Tools" <[email protected]>
> Sent: Friday, September 20, 2013 9:47:09 AM
> Subject: Re: [virt-tools-list] virt-viewer: Having per window full-screen 
> state causes monitor arrangement issues
> 
> Hi,
> 
> On 09/20/2013 04:22 PM, Marc-André Lureau wrote:
> 
> <snip>
> 
> >> For now I would stick with what I've suggested, so keep the current
> >> ltr auto-align, while adding code to make sure we update coordinates
> >> whenever necessary + use physical monitor coordinates in the all
> >> monitors full-screen case.
> >
> > I think it's equally bad (if not worse) that monitors are "swaped" whether
> > they are all in fullscreen or not (in your example) (you will get your
> > startmenu/taskbar jumping from window/monitor)
> 
> They won't get swapped, the current auto-ltr align code already puts
> windows in the ltr order they are in on the client machine.


This is only partially true.  The auto-ltr alignment code puts windows in the 
ltr order that they *were in on the client machine at the point when each 
window was last resized*.  If you then move this window to a different point on 
the screen, that new position is not used to determine how to arrange the 
monitors *until it is resized*.  And actually, even this is a bit of a lie.  In 
reality, it uses the last *adjusted* position at the time of resizing to 
calculate alignment.

Consider the following situation:

Display A is a 400x400 window at (100, 100)
Display B is a 400x400 window at (800, 200)

The auto-alignment algorithm will place these two displays as follows:
 - A -> 400x400 @ (0, 0)
 - B -> 400x400 @ (400, 0)

So far, so good: the displays are aligned in the expected order with no gap 
between them.  Now, let's say that we swap the arrangement of these windows so 
that display B is to the left of A.  Specifically:

Display B is a 400x400 window at (100, 100)
Display A is a 400X400 window at (800, 200)

Nothing changes when we move the windows on the client, which is as it should 
be (we wouldn't want the displays to get re-arranged simply by dragging a 
window around). 

But now let's say that we resize Display B to be 600x600.  Since Window A was 
not resized, its position will not be updated at all.  So when the auto-align 
algorithm runs, it will try to lay out these windows left-to-right but it will 
use the position (100, 100) for window B and the position (0, 0) for window A 
(which is the adjusted position at the time of the last resize of window A).  
It will calculate that window A (0, 0) is closer to the origin than window B 
(100, 100) is, which results in the following auto-aligned layout:
 - A -> 400x400 @ (0, 0)
 - B -> 600x600 @ (400, 0)

Clearly not quite what we want, since Window B is actually to the left of 
Window A on the client. But the alignment in the guest is such that Display A 
is to the left of Display B.

So regardless of whether display swapping happens during 
fullscreen/un-fullscreen or not, we need to find a much smarter method of 
alignment for multiple displays.



> 
> So if you have disp1 and disp2 in the guest, and you've disp2 on
> the left monitor of your client machine and disp1 right, then the
> auto-align code will already put disp2 first in the ltr ordering (*).
> 
> So if you then fullscreen both no swapping will happen.
> 
> Regards,
> 
> Hans
> 
> *) Or at least that is how it used to be, it seems that this is broken
> now too.
> 
> _______________________________________________
> virt-tools-list mailing list
> [email protected]
> https://www.redhat.com/mailman/listinfo/virt-tools-list

_______________________________________________
virt-tools-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/virt-tools-list

Reply via email to