Hans, Thanks for such a quick reply! I agree with your comments. Thanks for pointing to inhibitors interface - I wasn't aware of it, need to study it and see what KDE (and Unity) have in place. On Mon, Sep 16, 2013 at 11:34 AM, Hans de Goede <hdegoede@xxxxxxxxxx> wrote: > Hi, > > > On 09/15/2013 09:33 PM, Fedor Lyakhov wrote: >> >> Hello Hans, >> >> Finally I've found time to continue with this topic. Have sought for >> better solution and only come to improved previous one. >> >> *Requirements* >> >> >> Let's start with clarifying requirements. >> req-1. As a user I want to have my desktop effect settings untouched if >> connected under normal conditions. >> req-2. As a user I want to have a few desktop effect settings disabled if >> connected under bad conditions. >> The list of settings shall be configurable (as of now - wallpaper, >> animations, font smoothing) - if this isn't true in oVirt, I'd need work on >> it as well, because disabling all of them may reduce user experience to >> unacceptable level, resulting in feature becoming useless for many users. >> Bad conditions can be identified by the user himself (via UI), or >> automatically - to be implemented later. >> >> Both these stories taken together implicitly require: >> req-3. After connecting under bad conditions and having effects disabled >> and then connecting under good conditions, as a user I want my desktop >> effect settings restored to their normal (previous) values. >> >> Non-functional requirements: >> req-4. Robustness. Crash-proof solution: upon vdagent crash, qemu crash or >> forced guest shutdown, correct state of effect settings must be restored for >> next session. >> req-5. Simplicity. KISS, "Choose simplest possible implementation". >> >> DEs to support: >> req-6. Main: Gnome3, KDE4, Unity; Stretch goal: XFce, LXDE >> >> digression { >> Or do we need to talk about Window Managers here? Or display servers? >> req-7. Solution shall be display server agnostic (X.Org, Wayland, XMir, >> Mir...). >> req-8. Solution shall be window manager/shell agnostic (Mutter/Gnome >> Shell, KWin/Plasma, Compiz/Unity, Cinnamon probably - if we even bother of >> Ubutu, why don't respect Mint... etc). >> >> Seems my lack of expertise in display system stacks in Linux is blocking >> me here; probably solution cannot be fully WM/shell agnostic. I'm going to >> try using DE abstraction level over WM specifics... if this makes sense. >> >> All this profusion of DE/WM/Display servers nowadays results in a fact >> that without some standard implemented by them, it won't be possible to >> support all of them (and EWMH isn't even near the level of required >> interop...). >> } >> >> I know you'd like to weaken functional requirements if higher simplicity >> is possible. Could you please try specifying these weakened requirements - I >> cannot think up them myself. > > > My main reasons for weakening the functional requirements are not > simplicity, > but keeping things in out own hand. IOW do this without making changes > outside > of spice components. > > However now that this has had some time to settle, I think that it is best > to not > weaken the requirements, but instead do this right (which will likely turn > out > simpler then trying to use existing API-s in ways they were not really > intended). > > >> Given the fact there are so many different display systems in Linux, it >> isn't practically possible to support all of them. On the other hand, >> supporting only few and not providing any means for developers of other >> systems to add similar support themselves doesn't make sense to me. So I >> suggest following architecture: >> <vdagent> --DBus-- <DE-specific display effects daemon> -- <DE API for >> effects> >> Basically vdagent (session, not system one) is to use DBus interface for >> toggling effects. The feature will be available only if the interface is >> implemented in the system. > > > Agreed. > > >> And this implementation should be DE-specific and maybe even part of DE. >> But as we (Spice) are concerned with major DEs, sample implementation will >> be provided for Gnome3, KDE4 and Unity. > > > More likely patches will provided for, as this will likely be part of > existing code in the DE. > Could be you already meant to say as much, just making sure, that this > sample implementation > will not necessarily be a standalone thing. > > >> Eventually I'm going to open tickets for these systems to include the new >> DBus interface implementation in their systems (like gnome-desktop-daemon). >> This should generate a good feedback upon interface itself (i.e. need to >> create an >> interface acceptable for all these DEs). >> >> Interface (subject to renames): >> >> bool SetMinimumDesktopBackground() // if already minimum, do nothing; save >> current desktop background settings; set solid background, saved color (if >> none, use default) >> bool RestoreDesktopBackground() // if nothing is saved, do nothing; if >> solid desktop background, save the color; restore desktop background >> settings >> >> bool SetMinimumFontSmooth() // if already minimum, do nothing; save >> current font smoothing settings; set antialiasing and hinting to the minimum >> yet acceptable level >> bool RestoreFontSmooth() // if nothing is saved, do nothing; restore font >> smoothing settings >> >> bool SetMinimumAnimations() // if already minimum, do nothing; save >> current animation settings; disable all decorative window animation effects, >> but keep meaningful animations like spinnings enabled (if possible) >> bool RestoreAnimations() // if nothing is saved, do nothing; restore >> animation settings > > > I think it would be best to make this part of the existing inhibitors > interface, so you would > get inhibitors for animation fontsmooth and desktopbackground. > > At least from the gnome pov doing things this way makes a lot of sense, > problem is that the > current gnome inhibitors interface is somewhat gnome specific AFAIK. It > would be interesting > to try and turn it into an fdo standard, esp. since spice already uses it > for other things > (inhibit automounting when usb auto-redirect is active). > > Note that the inhibitors interface is very much like what you already > suggested, but it > adds additional crash protection, automatically doing RestoreFoo() on agent > crash. > > >> To satisfy functional requirements, vdagent is going to use the interface >> in following way: >> 1. If received VDAgentDisplayConfig with flag to disable an effect, call >> appropriate SetMinimumXXX() >> 2. If received VDAgentDisplayConfig without flag for an effect, call >> appropriate RestoreXXX() >> One of these is always executed upon user's re-connect (unless failures in >> other system parts prevent delivery of VDAgentDisplayConfig message). >> This is the same logic VDAgent for Windows is following currently. >> >> This approach makes the implementation in vdagent very simple and >> stateless. All effects managing logic is moved to DE-specific module. >> Robustness of vdagent is achieved as it is stateless and crashes can affect >> only current session. After vdagent restart (e.g. user re-login), correct >> state will be restored. > > > Yes, I like. > > Regards, > > Hans -- Best regards, Fedor _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel