[Spice-devel] [spice-gtk PATCH] Keep internal monitor config up-to-date

Jonathon Jongsma jjongsma at redhat.com
Fri Apr 10 10:55:35 PDT 2015


On Fri, 2015-04-10 at 11:39 -0500, Jonathon Jongsma wrote:
> On Fri, 2015-04-10 at 15:34 +0200, Marc-André Lureau wrote:
> > 
> > On Thu, Apr 9, 2015 at 11:40 PM, Jonathon Jongsma
> > <jjongsma at redhat.com> wrote:
> >         When the server sends a new monitors config message to the
> >         client, it
> >         comes through the display channel. However, when the client
> >         wants to
> >         change the monitor config on the server, it does so via the
> >         main channel
> >         (i.e. the agent). The main channel keeps a set of structs that
> >         represent
> >         the current state each display. An application can update a
> >         single 
> >         
> >         display by calling spice_main_update_display(). The main
> >         channel will
> >         update that particular struct and then schedule a new
> >         MonitorsConfig
> >         message based on the values of all of these structs. This
> >         generally
> >         works fine, but it relies on the application to remember to
> >         update each
> >         display properly. It would be less error-prone if spice-gtk
> >         tracked
> >         incoming display updates from the server rather than having
> >         spice-gtk
> >         pass them up to the application and have the application pass
> >         them back
> >         down.
> >         
> > 
> > 
> > That's simply because we shouldn't mix (unless it is somehow safe
> > enough) what is the monitor config requested (main channel config),
> > and what is the actual monitor config (display channels)
> > 
> > 
> >         
> >         Note that when spice-gtk updates its internal state, it does
> >         not trigger
> >         a new monitor configuration to be sent down to the server. If
> >         the
> >         application wants to send down a new configuration, it still
> >         has to call
> >         spice_main_update_display() as before. This change simply
> >         means that the
> >         application won't need to call this function in response to
> >         informational updates from the server.
> > 
> > 
> > It would change the user requested config if a display channel monitor
> > config would reset it (on main channel) and the user would set/resize
> > another monitor and send the last config for example.
> > 
> > 
> > 
> > nack
> 
> 
> If you want it this way that's fine. But I think that it would be
> perfectly reasonable (and in fact would probably result in more expected
> behavior) to say that once we get a display configuration update from
> the server, all previous requests are "reset". If the app wishes to
> request a different size for a particular display, it must expicitly
> request it after the last display update, rather than using a
> configuration request that was set some time in the past and never
> updated. I cannot think of a situation where this behavior would be
> desired:
> 
> - client requests display 1 and 2 to be both 800x600
> - server sends display update with display 1 and 2 at 800x600
> - For whatever reason (perhaps resolution was change within the guest
> control panel), the server sends a new display update with both displays
> at 1280x720
> - client windows are resized to 1280x720
> - user maximizes display 1 (e.g. 1600x900) which causes app to tell
> spice-gtk to request new size for display 1
> - spice-gtk sends down new monitor configuration request: display 1 =
> 1600x900, display 2 = 800x600
> 
> I think most people would expect display 2 to remain at 1280x720 rather
> than shrinking unexpectedly to 800x600.  
> 
> (And, yes, you could achieve this by making sure that the app calls into
> spice-gtk to tell spice-gtk that your display size changed every time
> that spice-gtk tells the app that the the display size changed, but this
> is both more verbose and more prone to error when the app doesn't do
> this properly.)
> 
> Jonathon


To be clear, the above is mostly an explanation for why I sent the patch
(and why I still don't think it would be harmful). I don't feel
particularly strongly about it, so if you're opposed, I'm perfectly
happy to drop it. But I thought it was worth a proposal.

Jonathon



More information about the Spice-devel mailing list