Hi, Mark Tiefenbruck wrote: >> A model where the WM maintains the property (when window is mapped) and >> the client has to ask to change it, allows the WM to modify the property >> without races - similar to how we handle _NET_WM_STATE. > > Part of my assumption was that the WM doesn't need to modify this > property at all. I can't think of a reason why it would, since this is > purely a request from the client for specific treatment. >
The case mentioned in the original thread in April was that the WM could offer a UI for dragging the window between monitors (as we do for maximized windows). e.g. maybe you can Alt+drag the fullscreen window. In that case, or if the WM or pager in any other way offers UI for changing fullscreen monitors, we'd need the _NET_WM_STATE-style approach. Another possibility: it might be annoying to treat 1-monitor fullscreen as a special case; the WM might want to just set FULLSCREEN_MONITORS to the single monitor the app is on, in that case, if the app did not set FULLSCREEN_MONITORS itself. If we require the WM to do that, then the app could also avoid special cases; it could be written to simply watch and respond to FULLSCREEN_MONITORS, thus adapting to any WM-originated or pager-originated changes in the property. A WM might even have a global default. For example, I could say "for any app not specifying FULLSCREEN_MONITORS, fullscreen that app to these two monitors." Seems pretty useful for the presentation/movie case. The NET_WM_STATE-style setup also allows the WM to intercept and deny FULLSCREEN_MONITORS requests. In the past, the cases where we don't have WM "redirection" of a request have often been a problem (SetInputFocus most notably). It's possible the question of "what happens when the Xinerama config changes?" matters here too, though I guess it probably doesn't - the answer to that is probably just to document that which of the app or WM is supposed to deal with it. Anyway, overall I think the _NET_WM_STATE style approach is simply cleaner and more future-safe, even if nobody has immediate plans to support WM or pager changes to this property. I guess it hinges on whether you consider the FULLSCREEN_MONITORS property to be a state ("the monitors the app is fullscreened on") or a hint about a state ("the monitors the app would like to be fullscreened on, with current state stored separately by the WM"). I think it's more robust if the property _is_ the state (as with _NET_WM_STATE), rather than the app's request, since then everyone can share knowledge of what the state is. It just makes sense to me that a persistent property is the state, and requests to change the state are a one-time client message. vs. using a persistent property to mean a request to change a state, where the state is then internal to the WM. To sum up: - allows WM or pager to have UI to modify fullscreen monitor state - allows WM to support a global default FULLSCREEN_MONITORS for movies and presentations that don't set it (note: should patch spec to suggest not setting it to use the default) - allows app to figure out whether the WM is honoring its FULLSCREEN_MONITORS hint - conceptually, distinguishes between the state and the request to change state Havoc _______________________________________________ wm-spec-list mailing list wm-spec-list@gnome.org http://mail.gnome.org/mailman/listinfo/wm-spec-list