Salome HOME
Fix for bug 10438: Crash during Explode on Blocks operation (Global selection on...
[modules/gui.git] / src / Session / InquireServersQThread.cxx
index 0f165b4517c0df1d21096f1bd449d4af4bab1454..3a4b9ddd69f331f5716cda140a139e49d8d5946e 100755 (executable)
@@ -7,7 +7,6 @@
 //  Module : SALOME
 //  $Header$
 
-using namespace std;
 #include "InquireServersQThread.h"
 
 #include <qapplication.h>
@@ -39,6 +38,8 @@ using namespace std;
 #include "utilities.h"
 #include "OpUtil.hxx"
 
+using namespace std;
+
 #include CORBA_CLIENT_HEADER(SALOME_Session)
 #include CORBA_CLIENT_HEADER(SALOME_Registry)
 #include CORBA_CLIENT_HEADER(SALOMEDS)
@@ -138,7 +139,8 @@ InquireServersGUI::InquireServersGUI()
 
 void InquireServersGUI::setPixmap( QPixmap pix )
 {
-  if ( !pix.isNull() ) {
+  if ( !pix.isNull() ) 
+  {
     mySplash->setPixmap( pix );
     int w = mySplash->sizeHint().width() + MARGIN_SIZE*2;
     myPrgBar->setFixedWidth( w );
@@ -148,7 +150,6 @@ void InquireServersGUI::setPixmap( QPixmap pix )
 
 InquireServersGUI::~InquireServersGUI()
 {
-  // Thread deletes itself in the end of run() function
   delete myThread;
 }
 
@@ -164,22 +165,9 @@ void InquireServersGUI::getArgs( int& _argc, char *** _argv)
 //=================================================================================
 void InquireServersGUI::ClickOnCancel()
 {
-  //it's necessary to stop asking servers
-  myThread->stop();
-  //  myGUI = false;
-  //Also we should send QCloseEvent in order to close this widget (and remove from screen) 
-  //QThread::postEvent ( this, new QCloseEvent() );
-  qApp->exit(1);
-}
-
-void InquireServersGUI::closeEvent ( QCloseEvent * pe)
-{
-  //default implementation calls e->accept(), which hides this widget. 
-  //See the QCloseEvent documentation for more details.
-  pe->accept();
-  QApplication::flushX ();
-  QApplication::syncX ();
-  qApp->exit();
+  myThread->stop(); //it's necessary to stop asking servers
+  hide();
+  qApp->exit( 1 );
 }
 
 void InquireServersGUI::customEvent( QCustomEvent* pe )
@@ -275,52 +263,52 @@ void InquireServersQThread::run()
   while ( IsChecking && receiver )
   {
     for (int i=1; i<=8; i++)
+    {
+      if ( myMessages[i-1].isEmpty() ) 
       {
-       if ( myMessages[i-1].isEmpty() ) {
-         if ( i==8 ) {
-           IsChecking = false;
-           //myExitStatus should be 0 because all servers exist and work
-           myExitStatus = 0;
-           //we should send QCloseEvent in order to close this widget (and remove from screen) 
-           qApp->processEvents();
-           sleep( 1 ); // sleep( 1 second ) in order to see 100%.  in other case it closes on 85%..
-           QThread::postEvent ( receiver , new QCloseEvent() );
-           break;
-         } else
-           continue;
-       }
-       QString *message = new QString(myMessages[i-1]);
-       QThread::postEvent( receiver, new InquireEvent( ( QEvent::Type )InquireEvent::ProgressEventLabel, message ) );
-       QThread::usleep(200000);
-       QString *errMsg;
-       bool result = AskServer(i,&errMsg);
-       if (result)
-         {
-           QThread::postEvent( receiver, new InquireEvent( ( QEvent::Type )InquireEvent::ProgressEvent, new int( i ) ) );
-           if ( i==8 )
-             {
-               IsChecking = false;
-               //myExitStatus should be 0 because all servers exist and work
-               myExitStatus = 0;
-               //we should send QCloseEvent in order to close this widget (and remove from screen)
-               qApp->processEvents();
-               sleep( 1 );  // sleep( 1 second ) in order to see 100%.  in other case it closes on 85%..
-               QThread::postEvent ( receiver , new QCloseEvent() );
-               break;
-             }
-         }
+       if ( i==8 ) 
+       {
+         IsChecking = false;
+         myExitStatus = 0;  //myExitStatus should be 0 because all servers exist and work
+         sleep( 1 ); // sleep( 1 second ) in order to see 100%.  in other case it closes on 85%..
+         break;
+       } 
        else
-         {
-           QThread::postEvent( receiver, new InquireEvent( ( QEvent::Type )InquireEvent::ProgressEventError, errMsg ) );
-           //myExitStatus should be 1 because we didn't receive response from server
-           myExitStatus = 1;
-           return;
-         }
+         continue;
       }
+      QString *message = new QString(myMessages[i-1]);
+      QThread::postEvent( receiver, new InquireEvent( ( QEvent::Type )InquireEvent::ProgressEventLabel, message ) );
+      QThread::usleep(200000);
+      QString *errMsg;
+      bool result = AskServer(i,&errMsg);
+      if (result)
+      {
+       QThread::postEvent( receiver, new InquireEvent( ( QEvent::Type )InquireEvent::ProgressEvent, new int( i ) ) );
+       if ( i==8 )
+       {
+         IsChecking = false;
+         myExitStatus = 0; //myExitStatus should be 0 because all servers exist and work
+         sleep( 1 );  // sleep( 1 second ) in order to see 100%.  in other case it closes on 85%..
+         break;
+       }
+      }
+      else
+      {
+       QThread::postEvent( receiver, new InquireEvent( ( QEvent::Type )InquireEvent::ProgressEventError, errMsg ) );
+       stop();
+       break;
+      }
+    }
   }
 
-  // this outputs WARNING: QThread object is deleted while still running -- it's OK in our case!
-  //delete this;
+  receiver->hide();
+  qApp->exit( myExitStatus );
+}
+
+void InquireServersQThread::stop()
+{
+  IsChecking = false;
+  myExitStatus = 1;
 }
 
 InquireServersQThread::~InquireServersQThread()
@@ -337,11 +325,18 @@ bool InquireServersQThread::AskServer(int iteration, QString ** errMessage)
   //will be set true if we get response from server
   bool IsPassed = false;
   QString errDescription;
+#ifdef WNT
+  int i;
+#endif
   switch (iteration)
     {
     case 1:
       //First checking - existence of Naming Service
+#ifndef WNT
       for (int i = myRepeat; i ; i--)
+#else
+         for (i = myRepeat; i ; i--)
+#endif
        {
          try
            {
@@ -582,3 +577,4 @@ bool InquireServersQThread::pingServer(int iteration, QString& errMessage)
     }
   return result;
 }
+