Re: Interaction between applications and compositing managers



Olivier Chapuis <olivier chapuis free fr> writes:

> Yes maybe. But IMHO  override-redirect window should not be used for
> notification or I do not understand the type of notification
> you talk about. Any way this is not important for a preliminary
> discussion.

The notifications I am talking are the bubbles that might emerge from
the panel to inform you that the battery is dying, or that the printer
is out of paper etc., etc.,

I have attached a draft extension to the wm-spec, in the form of a
patch agains CVS HEAD.

Overview:

- New _NET_WM_UNMANAGED_WINDOW_TYPE property

- New _NET_WM_CM_Sn manager selection for compositing managers

- A recommendation that clients also set WM_TRANSIENT_FOR on override
  redirect windows.

Comments appreciated.


Soren


? specdiff
? wm-spec.tex
Index: wm-spec.xml
===================================================================
RCS file: /cvs/icccm-extensions/wm-spec/wm-spec.xml,v
retrieving revision 1.24
diff -u -p -u -r1.24 wm-spec.xml
--- wm-spec.xml	4 Jan 2006 21:25:33 -0000	1.24
+++ wm-spec.xml	6 Apr 2006 19:18:04 -0000
@@ -29,16 +29,16 @@ versions.
 	<sect2>
 		<title>What is this spec?</title>
 		<para>
-This spec defines interactions between window managers, applications,
-and the utilities that form part of a desktop environment.  It builds
-on the Inter-Client Communication Conventions Manual <citation><link
-	    linkend="ICCCM">ICCCM</link></citation>, which defines  
-window manager interactions at a lower level. The ICCCM does not provide ways
-to implement many features that modern desktop users expect. The GNOME and KDE
-desktop projects originally developed their own extensions to the ICCCM to
-support these features; this spec replaces those custom extensions
-with a standardized set of ICCCM additions that any desktop
-environment can adopt.
+This spec defines interactions between window managers, compositing
+managers, applications, and the utilities that form part of a desktop
+environment.  It builds on the Inter-Client Communication Conventions
+Manual <citation><link linkend="ICCCM">ICCCM</link></citation>, which
+defines window manager interactions at a lower level. The ICCCM does
+not provide ways to implement many features that modern desktop users
+expect. The GNOME and KDE desktop projects originally developed their
+own extensions to the ICCCM to support these features; this spec
+replaces those custom extensions with a standardized set of ICCCM
+additions that any desktop environment can adopt.
 		</para>
 	</sect2>
 	<sect2>
@@ -222,6 +222,20 @@ manipulated within their parent window j
 windows on the root window.</para>
 </sect2>
 <sect2>
+      <title>Override-redirect windows</title>
+      <para>
+Override-redirect windows are ignored by traditional window managers,
+but not by compositing managers. Compositing managers are responsible
+for painting all windows to the screen, including override-redirect
+windows.
+</para>
+      <para>
+To enable compositing managers to decorate override-redirect window
+properly, for example by making them translucent or by changing the
+shape of the windows, this spec allows clients to set properties on
+override-redirect windows indicating the function of the windows.
+</sect2>
+<sect2>
 <title>Layered stacking order</title>
 <para>
 Some window managers keep the toplevel windows not in a single linear stack,
@@ -240,9 +254,11 @@ layer.
 <itemizedlist>
 <listitem><para>Allow clients to influence their initial state with respect 
 to maximization, shading, stickiness, desktop, stacking order.</para></listitem>
-<listitem><para>Improve the window managers ability to vary window 
+<listitem><para>Improve the window manager's ability to vary window 
 decorations and maintain the stacking order by allowing clients to hint the 
 window manager about the type of their windows.</para></listitem>
+<listitem><para>Improve the compositing manager's ability to apply
+decorations and effects to override-redirect windows</para></listitem>
 <listitem><para>Enable pagers and taskbars to be implemented as separate 
 clients and allow them to work with any compliant window manager.</para></listitem>
 </itemizedlist>
@@ -990,13 +1006,13 @@ displayed as an application is starting 
 	</para>
 	<para>
 _NET_WM_WINDOW_TYPE_DIALOG indicates that this is a dialog window.  If
-_NET_WM_WINDOW_TYPE is not set, then windows with WM_TRANSIENT_FOR set MUST
-be taken as this type.  
+_NET_WM_WINDOW_TYPE is not set, then managed windows with
+WM_TRANSIENT_FOR set MUST be taken as this type.
 	</para>
 	<para>
-_NET_WM_WINDOW_TYPE_NORMAL indicates that this is a normal, top-level window.
-Windows with neither _NET_WM_WINDOW_TYPE nor WM_TRANSIENT_FOR set MUST
-be taken as this type.
+_NET_WM_WINDOW_TYPE_NORMAL indicates that this is a normal, top-level
+window.  Managed windows with neither _NET_WM_WINDOW_TYPE nor
+WM_TRANSIENT_FOR set MUST be taken as this type.
 	</para>
 	</sect2>
 	<sect2>
@@ -1532,6 +1548,128 @@ window.
 		</para>
 	</sect2>
 </sect1>
+
+<sect1>
+    <title>Compositing Managers</title>
+    <para>
+A compositing manager is an X client using the Composite extension to
+redirect all windows to offscreen pixmaps, and the Damage extension to
+track when painting occur on those offscreen pixmaps. It is then the
+responsibility of the compositing manager to paint the pixmaps on the
+screen, possibly adding effects like translucency or deformations.
+</para>
+    
+    <para>
+This section specifies interactions between compositing managers
+and applications.
+</para>
+    <sect2>
+      <title>_NET_WM_CM_S<literal>n</literal> Manager Selection</title>
+      <para>
+For each screen they manage, compositing manager MUST acquire
+ownership of a selection named _NET_WM_CM_S<literal>n</literal>, where
+<literal>n</literal> is the screen number. Compositing managers MUST
+comply with the conventions for "Manager Selections" described in
+section 2.8 of the <citation><link linkend="ICCCM">ICCCM</link></citation>.
+</para>
+    </sect2>
+    <sect2>
+      <title>WM_TRANSIENT_FOR for override-redirect windows</title> 
+      <para>
+The WM_TRANSIENT_FOR property is defined by the <citation><link
+linkend="ICCCM">ICCCM</link></citation>.for managed windows. This
+specification extends the use of the property to override-redirect
+windows. If an override-redirect is a pop-up on behalf of another
+window, then the Client SHOULD set WM_TRANSIENT_FOR on the
+override-redirect to this other window.
+      </para>
+      <para>
+As an example, a Client should set WM_TRANSIENT_FOR on dropdown menus
+to the toplevel application window containing the menubar.
+      </para>
+    </sect2>
+    <sect2>
+      <title>_NET_WM_UNMANAGED_WINDOW_TYPE window property</title>
+	<programlisting><![CDATA[
+_NET_WM_UNMANAGED_WINDOW_TYPE, ATOM[]/32
+]]></programlisting>
+      <para>
+The _NET_WM_UNMANAGED_WINDOW_TYPE hint is similar to
+_NET_WM_WINDOW_TYPE, but intended to be used on override-redirect
+windows.  It SHOULD be set by the Client before mapping the window to
+a list of atoms indicating the functional type. This property SHOULD
+be used by the compositing manager to determine the visual decorations
+applied to the window. The Client SHOULD specify window types in order
+of preference (the first thing being most preferable) but MUST set at
+least one of basic window type atoms from the list below. This is to
+allow for extension of the list of types whilst providing default
+behavior for compositing managers that do not recognize the
+extensions.
+      </para>
+      <para>
+Rationale: Compositing managers are responsible for compositing both
+normal and override-redirect windows onto the screen. For normal
+windows the _NET_WM_WINDOW_TYPE hint describes the type of the window,
+but that hint doesn't apply to override-redirect windows. This hint is
+intended to communicate the function of override-redirect windows so
+that the compositing manager can apply consistent decorations to
+windows of the same type. Possible examples of behavior include
+drawing animations when tooltips are displayed, or making menus
+translucent.
+      </para>
+      <programlisting><![CDATA[
+_NET_WM_UNMANAGED_WINDOW_TYPE_HINT_DROPDOWN_MENU
+_NET_WM_UNMANAGED_WINDOW_TYPE_HINT_POPUP_MENU
+_NET_WM_UNMANAGED_WINDOW_TYPE_HINT_TOOLTIP
+_NET_WM_UNMANAGED_WINDOW_TYPE_HINT_NOTIFICATION
+_NET_WM_UNMANAGED_WINDOW_TYPE_HINT_COMBO
+_NET_WM_UNMANAGED_WINDOW_TYPE_HINT_DND
+_NET_WM_UNMANAGED_WINDOW_TYPE_HINT_NORMAL
+]]></programlisting>
+      <para>
+_NET_WM_UNMANAGED_WINDOW_TYPE_HINT_DROPDOWN_MENU indicates that the
+window in question is a dropdown menu, ie., the kind of menu that
+typically appears when the user clicks on amenubar, as opposed to a
+popup menu which typically appears when the user right clicks on an
+object.
+      </para>
+      <para>
+_NET_WM_UNMANAGED_WINDOW_TYPE_HINT_POPUP_MENU indicates that the
+window in question is a popup menu, ie., the kind of menu that
+typically appears when the user right clicks on an object, as opposed
+to a dropdown menu which typically appears when the user clicks on a
+menubar.
+      </para>
+      <para>
+_NET_WM_UNMANAGED_WINDOW_TYPE_HINT_TOOLTIP indicates that the window
+in question is a tooltip, ie., a short piece of explanatory text that
+typically appear after the mouse cursor hovers over an object for a
+while.
+      </para>
+      <para>
+_NET_WM_UNMANAGED_WINDOW_TYPE_HINT_NOTIFICATION indicates a
+notification. An example of a notification would be a bubble appearing
+with informative text such as "Your laptop is running out of power"
+etc.
+      </para>
+      <para>
+_NET_WM_UNMANAGED_WINDOW_TYPE_COMBO should be used on the windows that
+are popped up by combo boxes. An example is a window that appears
+below a text field with a list of suggested completions.
+      </para>
+      <para>
+_NET_WM_UNMANAGED_WINDOW_TYPE_DND indicates that the window is being
+dragged. Clients should set this hint when the window in question
+contains a representation of an object being dragged from one place to
+another. An example would be a window containing an icon that is being
+dragged from one file manager window to another.
+      </para>
+      <para>
+_NET_WM_UNMANAGED_WINDOW_TYPE_HINT_NORMAL should be used when none of
+the other hints apply.
+      </para>
+    </sect2>
+</sect1>
 <sect1>
 	<title>Implementation notes</title>
 	<sect2>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]