Re: ICCCM compliance question ...



Andrew P. Lentvorski writes:
 > Felix Bellaby wrote:
 > >
 > >Allowing am app to set more than one sm client id would 
 > >violate the protocol. Therefore, I can see no reason whatsoever 
 > >for allowing the creation of more than one WM_CLIENT_LEADER 
 > >window per app.
[...]
 > What about dual-head applications?  twm/mwm and it's ilk fire up
 > two separate window managers for :0.0 and :0.1.  Wouldn't this
 > mean that 1 application which spawned off two windows on different
 > displays would need two WM_CLIENT_LEADER - one for each display as the
 > display characteristics could be very different.

twm & mwm both run as single processes with single X display
connections (:0.0 and :0.1 are both screens on display :0)
(smiley unintentional). However, they do support different 
configurations on each of the screens on the display. They
acheive this by having separate "sections" for each screen 
in their config and session save files.

On the other hand, you could have a single process that connected 
to displays on two different hosts simultaneously or to two
distinct displays on one host (fred:0 and jim:0 or :0 and :1).

This process could not use gdk in its current form because gdk
assumes a unique display. If and when we made gdk into a multiple
display toolkit then we would to have multiple gdk_leader_windows
as well (displays can not reference each other's windows).
The windows displayed on each display would reference the 
gdk_leader_window for that display using their WM_CLIENT_WINDOW.

Even in this expanded gdk, the SAME client id would have to appear 
on every gdk_leader_window since each process exists in a single
session (unless we support parallel universes....)

I have now commited these changes. If you wish to test them out
with a X11R6 ICCCM SM compliant WM then you can try out twm from 
the X11R6 distribution. However, this version of twm frequently
seg faults while reading its saved session so you will need to
apply the attached patch to before it will work.

Felix

--------
--- session.c~	Sun Jan 17 23:20:18 1999
+++ session.c	Sun Jan 17 23:19:47 1999
@@ -650,9 +650,7 @@
 		if (strcmp (theWindow->class.res_name,
 		        ptr->class.res_name) == 0 &&
 		    strcmp (theWindow->class.res_class,
-			ptr->class.res_class) == 0 &&
-	    	   && (ptr->wm_name == NULL ||
-		       strcmp (theWindow->name, ptr->wm_name) == 0))
+			ptr->class.res_class) == 0)
 		{
 		    if (clientId)
 		    {
--------



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