Re: Proposing _NET_WM_STATE_FULLSCREEN_EXCLUSIVE

"Ryan C. Gordon" <[email protected]> Mon, 19 Nov 2012 15:56:15 -0500
Newsgroups gmane.comp.gnome.wm-spec
Organization icculus.org
Message-ID <[email protected]>
Just pinging about this; anyone have any problems with this draft 
(besides the one concern about specifying a monitor for the window)? 
Everyone happy? Everyone already overwhelmed by the upcoming holidays?  :)

--ryan.


On 11/13/12 3:54 PM, Ryan C. Gordon wrote:
>
>> Just following up, since this is (I think) the only outstanding concern
>> before I submit a new draft.
>
> We'll talk about this issue more, but for now, I present the second
> draft. I've left this specific concern as a TODO note, so we'll
> accommodate it in a third (and hopefully final!) draft after this one,
> but I'd like to start getting feedback on all the changes in the meantime.
>
> The updated text is pasted into this email. If you want the
> change-by-change revision history, take a look over here...
>
>       http://hg.icculus.org/icculus/wm-fullscreen-spec/shortlog
>
> ...we'll move this into freedesktop's wm-spec revision control when
> everyone is generally happy with the language. Here are the significant
> changes since the original draft:
>
> - Changed name to _NET_WM_STATE_FULLSCREEN_RESOLUTION
>
> - Added text to allow this to work with both real physical resolution
> changes and/or a compositor rescaling a backbuffer.
>
> - Added _NET_RESOLUTIONS root window property, to let WM control
> available resolutions and take all need for XRandR out of the app.
>
> - Added an optional _NET_FULLSCREEN_TEMPORARY root window property, so
> apps that are listening for XRandR events outside of the Window Manager
> can decide if this event is a permanent change or not.
>
> - A lot of MUST language became SHOULD or MAY.
>
> - Added a note that the Window Manager SHOULD maintain aspect ratio.
>
> - Places that discussed the window's "current dimensions" now talk about
> the window's size hints.
>
> - Iconification is no longer a hard requirement; WMs can do what makes
> sense for their environment.
>
> - Explicitly note that this hint is used when the window is mapped.
>
> - Corrected various typos and trivial details.
>
> Below is the updated text. I've tried to address all voiced concerns,
> but if I've missed something, please let me know!
>
> Thanks,
> --ryan.
>
>
> This is an addition to the spec for _NET_WM_STATE:
>       http://standards.freedesktop.org/wm-spec/1.5/ar01s05.html#id2760470
>
> Rationale:
>
> There are some problems with the current _NET_WM_STATE_FULLSCREEN hint
> that we would like to address.
>
> First, it is not explicit in its instructions to Window Managers; for
> example, we found some Window Managers required the window to be marked
> resizable (Metacity) and others did not (XFCE); it's not clear which is
> correct. It doesn't address virtual desktop size verses physical
> resolution. This proposal tries to be very clear about exactly what
> steps are required.
>
> Second, the window manager needs to be responsible for changing
> resolutions. If an app tries to use XVidMode, the virtual desktop will
> not be resized and _NET_WM_STATE_FULLSCREEN will size the window
> incorrectly. If an app instead tries to use XRandR, the rest of the
> desktop may change irreversibly; icons may move around, other app
> windows may shrink down. Worse still, if an app changes the resolution
> with XVidMode or XRandR and then crashes before cleaning itself up, the
> desktop will remain in the wrong state until the user takes heroic
> measures to fix it. Moving this operation into the Window Manager and
> associating it with a specific window lets the system know that this is
> a temporary state change, instead of two discrete actions that may be
> unrelated, so that it can protect desktop state appropriately. This also
> has the side benefit of centralizing a complex negotiation with X11
> extensions and multiple processes into one place--the Window
> Manager--instead of every application.
>
> Certainly _NET_WM_STATE_FULLSCREEN still has a place; it still makes
> good sense that the example given, a presentation program, use that
> hint. For applications like video games, which need more control over
> window geometry and specific monitor resolutions, a new hint is
> extremely useful.
>
> There are other benefits to moving resolution switches to the window
> manager: the desktop environment may want to offer the user a
> configuration mechanism that limits desired resolutions outside of what
> the X server advertises, and more importantly, they may want to make use
> of compositing to transparently emulate a resolution change--that is,
> scale a smaller backbuffer that matches the requested resolution up to
> the hardware's native resolution. The end result is more centralized
> user preference and desktop environment policy.
>
>
> Specification:
>
> A Window Manager supporting this specification MUST add
> _NET_WM_STATE_FULLSCREEN_RESOLUTION to the list of atoms reported by the
> _NET_SUPPORTED property.
>
>
> (Added to the list of Root Window Properties...)
>
> _NET_RESOLUTIONS
>
> _NET_RESOLUTIONS x, y, width, height, CARDINAL[4]/32
>
> This array contains a list of all available resolutions that can be used
> with _NET_WM_STATE_FULLSCREEN_RESOLUTION. It MAY match the physical
> resolutions offered by the hardware, but it also MAY be an arbitrary
> list decided upon by the Window Manager. This property MAY change at any
> time, for example as hardware is connected, detached, or reconfigured.
> The four values in each element of the array comprise the monitor's
> current (x,y) position on the screen, and the dimensions of the given
> resolution.
>
>
>
> _NET_FULLSCREEN_TEMPORARY
>
> _NET_FULLSCREEN_TEMPORARY WINDOW[]/32
>
> This array contains a list of all window ids that have temporarily
> changed a monitor's resolution with the
> _NET_WM_STATE_FULLSCREEN_RESOLUTION hint. This array MAY be updated to
> include or remove the window before any resolution change goes into
> effect. The intention is that applications that are listening for XRandR
> events can view this list and decide if they should ignore this
> resolution change.
>
>
>
> (Added to the list of _NET_WM_ALLOWED_ACTIONS atoms...)
> _NET_WM_ACTION_FULLSCREEN_RESOLUTION, ATOM
>
> _NET_WM_ACTION_FULLSCREEN_RESOLUTION indicates that the window may be
> brought to fullscreen_resolution state, that is, it may use the
> _NET_WM_STATE_FULLSCREEN_RESOLUTION hint.
>
>
>
> (Added to the list of _NET_WM_STATE hints...)
>
> In relation to _NET_WM_STATE_FULLSCREEN_RESOLUTION, the Window Manager
> MAY simulate a physical resolution change by instead scaling the
> window's rendering, such as with a compositor, so long as the window is
> rendering into its expected dimensions and the given monitor is
> dedicated to that window.
>
> _NET_WM_STATE_FULLSCREEN_RESOLUTION indicates that, when mapped, the
> Window Manager MUST change the resolution of the window's monitor to one
> that most closely matches the window's size hints. If no available
> resolution matches exactly, the Window Manager MUST select the closest
> available resolution larger than the window's maximum size hint, and
> SHOULD attempt to maintain the appropriate aspect ratio. The Window
> Manager MUST center the window within the new resolution, remove any
> window decorations, maintain its geometry based on its size hints, and
> grant it input focus. If the chosen resolution does not exactly match
> within the window's size hints, the Window Manager MUST obscure the rest
> of the monitor so that the window is the only thing visible. If there is
> no resolution that can completely contain the window's undecorated size
> hints, the Window Manager MUST refuse to allow this hint.
>
> When a window successfully sets or removes this hint, the Window Manager
> MAY update the _NET_FULLSCREEN_TEMPORARY property on the root window
> before changing the resolution, to aid applications that are listening
> for resolution change events and would want to know that this resolution
> change is temporary.
>
> If another window needs the monitor that is currently in use by the
> fullscreen window, the Window Manager MAY revert the resolution change
> and allow other windows access to the given monitor (for example, the
> Window Manager MAY iconify the window). In such a case, the Window
> Manager MUST restore the original resolution change when the monitor
> becomes available again. The Window Manager SHOULD NOT alter desktop
> state (icon positions, geometry of other windows, etc) during resolution
> changes, so that the state will be unchanged when the window ceases to
> be marked as fullscreen.
>
> The _NET_WM_STATE_FULLSCREEN_RESOLUTION and _NET_WM_STATE_FULLSCREEN
> hints SHOULD NOT be used together by a window; in such a case, the
> Window Manager SHOULD reject the _NET_WM_STATE_FULLSCREEN hint.
>
> If more than one window on the same monitor requests the
> _NET_WM_STATE_FULLSCREEN_RESOLUTION hint, the Window Manager SHOULD
> choose an appropriate method to manage their access to the monitor (for
> example, each window could be iconified until it has regained input focus).
>
> For example, a video game would use this hint.
>
>
> Issues:
> - multiple fullscreen windows on different monitors.
>
>
>
> _______________________________________________
> wm-spec-list mailing list
> [email protected]
> https://mail.gnome.org/mailman/listinfo/wm-spec-list
>