Ticket #540: onemodal.diff

File onemodal.diff, 3.6 kB (added by emostar, 3 years ago)

Patch for this bug

  • plugins/qt-gui/src/ewidgets.cpp

    RCS file: /cvsroot/licq/qt-gui/src/ewidgets.cpp,v
    retrieving revision 1.76
    diff -u -d -p -r1.76 ewidgets.cpp
     
    2929 
    3030using namespace std; 
    3131 
     32#define QT_THREAD_SUPPORT 
     33#include <qthread.h> 
     34 
    3235bool QueryUser(QWidget *q, QString szQuery, QString szBtn1, QString szBtn2) 
    3336{ 
    3437#ifdef USE_KDE 
     
    4952} 
    5053 
    5154 
    52 void InformUser(QWidget *q, QString sz) 
     55static void informUser(QWidget *q, QString &sz) 
    5356{ 
    54   //(void) new CLicqMessageBox(szInfo, QMessageBox::Information, q); 
    5557#ifdef USE_KDE 
    5658  KMessageBox::information(q, sz, QMessageBox::tr("Licq Information"), QString::null, false); 
    5759#else 
    58   QMessageBox::information(q, QMessageBox::tr("Licq Information"), sz, QMessageBox::Ok | QMessageBox::Default); 
     60 QMessageBox::information(q, QMessageBox::tr("Licq Information"), sz, QMessageBox::Ok | QMessageBox::Default); 
    5961#endif 
     62 
    6063} 
    6164 
    62 void WarnUser(QWidget *q, QString sz) 
     65static void warnUser(QWidget *q, QString &sz) 
    6366{ 
    64   //(void) new CLicqMessageBox(szInfo, QMessageBox::Warning, q); 
     67 
    6568#ifdef USE_KDE 
    6669  KMessageBox::sorry(q, sz, QMessageBox::tr("Licq Warning"), false); 
    6770#else 
     
    6972#endif 
    7073} 
    7174 
    72 void CriticalUser(QWidget *q, QString sz) 
     75static void criticalUser(QWidget *q, QString &sz) 
    7376{ 
    74   //(void) new CLicqMessageBox(szInfo, QMessageBox::Critical, q); 
     77 
    7578#ifdef USE_KDE 
    76   KMessageBox::error(q, sz, QMessageBox::tr("Licq Error"), false); 
     79KMessageBox::error(q, sz, QMessageBox::tr("Licq Error"), false); 
    7780#else 
    7881  QMessageBox::warning(q, QMessageBox::tr("Licq Error"), sz, QMessageBox::Ok | QMessageBox::Default, 0); 
    7982#endif 
     83} 
     84 
     85class OrphanMsgManager 
     86{ 
     87public: 
     88    enum type 
     89    {   OM_INFORM, 
     90        OM_WARN, 
     91        OM_CRITICAL 
     92    }; 
     93    OrphanMsgManager( void ) 
     94    { 
     95        bUsed = false; 
     96    } 
     97    void AddMessage( enum type t, QString &sz ) 
     98    {    
     99        struct msg m; 
     100 
     101        m.sz = sz; 
     102        m.nType = t; 
     103         
     104        mutex.lock(); 
     105        OrphanMsgList.push_back( m ); 
     106        mutex.unlock(); 
     107    } 
     108    void ShowNext( void ) 
     109    { 
     110        struct msg m; 
     111 
     112        mutexShow.lock(); 
     113        if( bUsed ) 
     114        {   mutexShow.unlock();  
     115            return; 
     116        } 
     117        else 
     118            bUsed = true; 
     119        mutexShow.unlock(); 
     120 
     121 
     122        mutex.lock(); 
     123        while( !OrphanMsgList.empty() ) 
     124        { 
     125            m = OrphanMsgList.front(); 
     126            OrphanMsgList.pop_front(); 
     127            mutex.unlock(); 
     128 
     129            switch( m.nType ) 
     130            {    
     131                case OM_INFORM: 
     132                    informUser(0,m.sz); 
     133                    break; 
     134                case OM_WARN: 
     135                    warnUser(0,m.sz); 
     136                    break; 
     137                case OM_CRITICAL: 
     138                    criticalUser(0,m.sz); 
     139                    break; 
     140                default: 
     141                    assert(0); 
     142            } 
     143            mutex.lock(); 
     144        } 
     145        mutex.unlock(); 
     146        bUsed = false; 
     147    } 
     148private: 
     149    struct msg 
     150    {   QString sz; 
     151        enum type nType; 
     152    }; 
     153    std::list<struct msg>  OrphanMsgList; 
     154    QMutex  mutex; 
     155    QMutex  mutexShow; 
     156    bool bUsed; 
     157}; 
     158 
     159static class OrphanMsgManager OrphanMsgMng; 
     160 
     161void InformUser(QWidget *q, QString sz) 
     162{ 
     163    if( q == 0 ) 
     164    {   OrphanMsgMng.AddMessage(OrphanMsgManager::OM_INFORM,sz); 
     165        OrphanMsgMng.ShowNext(); 
     166    } 
     167    else 
     168        informUser(q,sz); 
     169} 
     170 
     171void WarnUser(QWidget *q, QString sz) 
     172{ 
     173    if( q == 0 ) 
     174    {    
     175        OrphanMsgMng.AddMessage(OrphanMsgManager::OM_WARN,sz); 
     176        OrphanMsgMng.ShowNext(); 
     177    } 
     178    else 
     179        warnUser(q,sz); 
     180} 
     181 
     182void CriticalUser(QWidget *q, QString sz) 
     183{    
     184    if( q == 0 ) 
     185    {   OrphanMsgMng.AddMessage(OrphanMsgManager::OM_CRITICAL,sz); 
     186        OrphanMsgMng.ShowNext(); 
     187    } 
     188    else 
     189        warnUser(q,sz); 
    80190} 
    81191 
    82192//-----CELabel------------------------------------------------------------------