]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
no message
authorstv <stv@opencascade.com>
Thu, 9 Feb 2006 09:01:51 +0000 (09:01 +0000)
committerstv <stv@opencascade.com>
Thu, 9 Feb 2006 09:01:51 +0000 (09:01 +0000)
src/Qtx/QtxDockAction.cxx
src/Qtx/QtxDockAction.h

index 89e72344ced54c067277082d5528365045bc9b97..b6e166b42fb3790eccfd77f839891fe7eb9363bd 100755 (executable)
@@ -28,6 +28,7 @@
 #include <qdockarea.h>
 #include <qdockwindow.h>
 #include <qmainwindow.h>
+#include <qobjectlist.h>
 #include <qapplication.h>
 
 /*!
@@ -707,7 +708,36 @@ void QtxDockAction::dockWindows( QPtrList<QDockWindow>& lst, QMainWindow* main )
   if ( !mw )
     return;
 
-  lst = mw->dockWindows();
+  QObjectList* objs = mw->queryList( "QDockWindow" );
+  if ( objs )
+  {
+    for ( QObjectListIt it( *objs ); it.current(); ++it )
+    {
+      QDockWindow* dockWin = ::qt_cast<QDockWindow*>( it.current() );
+      if ( dockWin && dockMainWindow( mw, dockWin ) )
+        lst.append( dockWin );
+    }
+  }
+  delete objs;
+}
+
+bool QtxDockAction::dockMainWindow( QMainWindow* mw, QObject* win ) const
+{
+  if ( !mw || !win )
+    return false;
+
+  while ( win )
+  {
+         if ( win->parent() && win->parent() == mw )
+           return true;
+
+         if ( ::qt_cast<QMainWindow*>( win->parent() ) )
+           return false;
+
+         win = win->parent();
+  }
+
+  return false;
 }
 
 /*!
@@ -772,6 +802,14 @@ void QtxDockAction::loadPlaceInfo( QDockWindow* dw ) const
   if ( !myInfo.contains( dw ) )
     return;
 
+  QMainWindow* mw = mainWindow();
+  if ( !mw )
+    return;
+
+  QObject* p = dw->parent();
+  if ( !( !p || p == mw || ( p->parent() && p->parent() == mw ) ) )
+    return;
+
   QString winName = myInfo[dw].name;
   if ( winName.isEmpty() || !myGeom.contains( winName ) )
     return;
@@ -807,6 +845,10 @@ void QtxDockAction::loadPlaceInfo() const
   QMap<QString, QDockWindow*> nameMap;
   for ( QPtrListIterator<QDockWindow> itr( lst ); itr.current(); ++itr )
   {
+    QObject* p = itr.current()->parent();
+    if ( !( !p || p == mw || ( p->parent() && p->parent() == mw ) ) )
+      continue;
+
     QString name;
     if ( myInfo.contains( itr.current() ) )
       name = myInfo[itr.current()].name;
index 4583bebda674394272a27413623e8e8138448b65..5e3ae2de82cb6f921d27f4b6c5848b6389bc05c7 100755 (executable)
@@ -121,6 +121,8 @@ private:
 
   void         updateMenus();
 
+  bool         dockMainWindow( QMainWindow*, QObject* ) const;
+
 private:
   enum { AutoAdd = QEvent::User, LoadArea };