_NET_CLIENT_LIST is now ok, except for small stupid detail.

svn path=/trunk/kdebase/kwin/; revision=196944
This commit is contained in:
Luboš Luňák 2003-01-02 13:00:52 +00:00
parent 75163cb4df
commit 68eb8a80fb
2 changed files with 13 additions and 6 deletions

View file

@ -42,14 +42,16 @@ _NET_SUPPORTED root window property COMPLETE
| sence that all implemented properties are listed here. |
+----------------------------------------------------------------+
CHECKME : check it's complete
_NET_CLIENT_LIST root window property COMPLETE
_NET_CLIENT_LIST root window property PARTIAL
+----------------------------------------------------------------+
| With xprop it seems only one WinID is stored, whereas an array |
| of all managed windows should be stored instead! |
| This is caused by xprop printing only first element of WINDOW |
| type properties, xprop has to be patched to see them all. |
| The spec requires this list contains the windows in their |
| initial mapping order, which is not true for NET::Desktop |
| windows. |
+----------------------------------------------------------------+
CHECKME : check that the list includes all windows
_NET_CLIENT_LIST_STACKING root window property COMPLETE
+----------------------------------------------------------------+
| With xprop it seems only one WinID is stored, whereas an array |

View file

@ -797,9 +797,11 @@ QRect Workspace::geometry() const
void Workspace::removeClient( Client* c) {
Q_ASSERT( clients.contains( c ) || desktops.contains( c ));
clients.remove( c );
stacking_order.remove( c );
focus_chain.remove( c );
desktops.remove( c );
propagateClients();
}
@ -818,8 +820,7 @@ bool Workspace::destroyClient( Client* c)
storeFakeSessionInfo( c );
if (clients.contains(c))
removeClient(c);
removeClient(c);
c->invalidateWindow();
clientHidden( c );
@ -2492,16 +2493,20 @@ void Workspace::propagateClients( bool onlyStacking )
int i;
if ( !onlyStacking ) {
cl = new Window[ clients.count()];
cl = new Window[ desktops.count() + clients.count()];
i = 0;
for ( ClientList::ConstIterator it = desktops.begin(); it != desktops.end(); ++it )
cl[i++] = (*it)->window();
for ( ClientList::ConstIterator it = clients.begin(); it != clients.end(); ++it )
cl[i++] = (*it)->window();
rootInfo->setClientList( cl, i );
delete [] cl;
}
cl = new Window[ stacking_order.count()];
cl = new Window[ desktops.count() + stacking_order.count()];
i = 0;
for ( ClientList::ConstIterator it = desktops.begin(); it != desktops.end(); ++it )
cl[i++] = (*it)->window();
for ( ClientList::ConstIterator it = stacking_order.begin(); it != stacking_order.end(); ++it)
cl[i++] = (*it)->window();
rootInfo->setClientListStacking( cl, i );