summaryrefslogtreecommitdiffstats
path: root/twin
diff options
context:
space:
mode:
Diffstat (limited to 'twin')
-rw-r--r--twin/KWinInterface.h1
-rw-r--r--twin/workspace.cpp31
-rw-r--r--twin/workspace.h7
3 files changed, 36 insertions, 3 deletions
diff --git a/twin/KWinInterface.h b/twin/KWinInterface.h
index 445e42fe9..dbc132888 100644
--- a/twin/KWinInterface.h
+++ b/twin/KWinInterface.h
@@ -15,6 +15,7 @@ class KWinInterface : virtual public DCOPObject
virtual ASYNC killWindowId(unsigned long winId) = 0;
virtual ASYNC suspendWindowId(unsigned long winId) = 0;
virtual ASYNC resumeWindowId(unsigned long winId) = 0;
+ virtual bool isResumeableWindowID(unsigned long winId) = 0;
virtual void refresh() = 0;
virtual void doNotManage(TQString)= 0;
virtual void showWindowMenuAt(unsigned long winId, int x, int y)= 0;
diff --git a/twin/workspace.cpp b/twin/workspace.cpp
index 643395e88..cc109918c 100644
--- a/twin/workspace.cpp
+++ b/twin/workspace.cpp
@@ -1974,6 +1974,37 @@ void Workspace::resumeWindowId( Window window_to_resume )
}
+bool Workspace::isResumeableWindowID( Window window_to_check )
+ {
+ if( window_to_check == None )
+ return false;
+ Window window = window_to_check;
+ Client* client = NULL;
+ for(;;)
+ {
+ client = findClient( FrameIdMatchPredicate( window ));
+ if( client != NULL ) // found the client
+ break;
+ Window parent = NULL;
+ Window root = NULL;
+ Window* children = NULL;
+ unsigned int children_count;
+ XQueryTree( tqt_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( window == NULL )
+ break;
+ }
+ if( client != NULL )
+ return client->isResumeable();
+ else
+ return false;
+ }
+
+
void Workspace::sendPingToWindow( Window window, Time timestamp )
{
rootInfo->sendPing( window, timestamp );
diff --git a/twin/workspace.h b/twin/workspace.h
index f1f7dc97e..0f019cbbf 100644
--- a/twin/workspace.h
+++ b/twin/workspace.h
@@ -96,9 +96,10 @@ class Workspace : public TQObject, public KWinInterface, public KDecorationDefin
/**
* @internal
*/
- void killWindowId( Window window);
- void suspendWindowId( Window window);
- void resumeWindowId( Window window);
+ void killWindowId( Window window );
+ void suspendWindowId( Window window );
+ void resumeWindowId( Window window );
+ bool isResumeableWindowID( Window window );
void killWindow() { slotKillWindow(); }
void suspendWindow() { slotSuspendWindow(); }