diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-02-20 02:24:32 -0600 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-02-20 02:24:32 -0600 |
commit | d160a6fc0101dd094195f8d0782e8aefcf94d376 (patch) | |
tree | bf7ebde63e93fb2f54b2bcaf5b0427b7f8de845f /twin/workspace.cpp | |
parent | a515552a21960aeffbe12e24c6d64da32c646829 (diff) | |
download | tdebase-d160a6fc0101dd094195f8d0782e8aefcf94d376.tar.gz tdebase-d160a6fc0101dd094195f8d0782e8aefcf94d376.zip |
Update twin with initial framework for application suspend/resume
This needs some additional work before it can be enabled
Diffstat (limited to 'twin/workspace.cpp')
-rw-r--r-- | twin/workspace.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/twin/workspace.cpp b/twin/workspace.cpp index 5b9f58305..e6e18e1aa 100644 --- a/twin/workspace.cpp +++ b/twin/workspace.cpp @@ -1909,6 +1909,60 @@ void Workspace::killWindowId( Window window_to_kill ) XKillClient( qt_xdisplay(), window_to_kill ); } +void Workspace::suspendWindowId( Window window_to_suspend ) + { + if( window_to_suspend == None ) + return; + Window window = window_to_suspend; + Client* client = NULL; + for(;;) + { + client = findClient( FrameIdMatchPredicate( window )); + if( client != NULL ) // found the client + break; + Window parent, root; + Window* children; + unsigned int children_count; + XQueryTree( qt_xdisplay(), window, &root, &parent, &children, &children_count ); + if( children != NULL ) + XFree( children ); + if( window == root ) // we didn't find the client, probably an override-redirect window + break; + window = parent; // go up + } + if( client != NULL ) + client->suspendWindow(); + else + return; + } + +void Workspace::resumeWindowId( Window window_to_resume ) + { + if( window_to_resume == None ) + return; + Window window = window_to_resume; + Client* client = NULL; + for(;;) + { + client = findClient( FrameIdMatchPredicate( window )); + if( client != NULL ) // found the client + break; + Window parent, root; + Window* children; + unsigned int children_count; + XQueryTree( qt_xdisplay(), window, &root, &parent, &children, &children_count ); + if( children != NULL ) + XFree( children ); + if( window == root ) // we didn't find the client, probably an override-redirect window + break; + window = parent; // go up + } + if( client != NULL ) + client->resumeWindow(); + else + return; + } + void Workspace::sendPingToWindow( Window window, Time timestamp ) { |