]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
0021373: [CEA] missing some contextual menu
authorvsr <vsr@opencascade.com>
Tue, 25 Oct 2011 05:25:25 +0000 (05:25 +0000)
committervsr <vsr@opencascade.com>
Tue, 25 Oct 2011 05:25:25 +0000 (05:25 +0000)
0021307: EDF PARAVIS: Mismatch in buttons and windows when switching from a component to PARAVIS and back (replace previous fix)

src/CAM/CAM_Application.cxx
src/CAM/CAM_Application.h

index 8ff23554752f50443e5e063725e692ad91f6999e..7993d9f9472032c8cdc5ff35280c2098b040e97b 100755 (executable)
 
 #include <cstdio>
 
+class BusyLocker
+{
+public:
+  BusyLocker( bool& busy ) : myPrev( busy ), myBusy( busy ) { myBusy = true; }
+  ~BusyLocker() { myBusy = myPrev; }
+private:
+  bool  myPrev;
+  bool& myBusy;
+};
+
 /*!
   \brief Create new instance of CAM_Application.
   \return new instance of CAM_Application class
@@ -82,7 +92,8 @@ extern "C" CAM_EXPORT SUIT_Application* createApplication()
 CAM_Application::CAM_Application( const bool autoLoad )
 : STD_Application(),
   myModule( 0 ),
-  myAutoLoad( autoLoad )
+  myAutoLoad( autoLoad ),
+  myBlocked( false )
 {
   readModuleList();
 }
@@ -368,9 +379,13 @@ CAM_Module* CAM_Application::loadModule( const QString& modName, const bool show
 */
 bool CAM_Application::activateModule( const QString& modName )
 {
-  if ( !modName.isEmpty() && !activeStudy() )
+  if ( !modName.isEmpty() && !activeStudy() || myBlocked )
     return false;
 
+  // VSR 25/10/2011: prevent nested activation/deactivation
+  // See issues 0021307, 0021373
+  BusyLocker lock( myBlocked );
+
   bool res = false;
   if ( !modName.isEmpty() )
   {
@@ -408,15 +423,10 @@ bool CAM_Application::activateModule( CAM_Module* mod )
 
   if ( myModule )
   {
-    // VSR: 26/06/2011 bug 0021307: temporarily disable desktop's signals to prevent false module activation
-    bool signalsBlocked = desktop() && desktop()->signalsBlocked();
-    if ( desktop() ) desktop()->blockSignals( true );
     if ( !myModule->deactivateModule( activeStudy() ) )
     {
       // ....      
     }    
-    // VSR: 26/06/2011 bug 0021307: enable desktop's signals back
-    if ( desktop() ) desktop()->blockSignals( signalsBlocked );
   }     
   myModule = mod;
 
index 6471b9730966aea1a01355413a92efe644b6f4fd..d56ef88dbf70a20a73a73039e3eb3211144b4a6e 100755 (executable)
@@ -100,6 +100,7 @@ private:
   ModuleList          myModules;       //!< loaded modules list
   ModuleInfoList      myInfoList;      //!< modules info list
   bool                myAutoLoad;      //!< auto loading flag
+  bool                myBlocked;       //!< "blocked" flag, internal usage
 };
 
 #ifdef WIN32