diff options
| author | 2010-05-28 01:28:02 +0000 | |
|---|---|---|
| committer | 2010-05-28 01:28:02 +0000 | |
| commit | e201c411562b358d81ddbeca5dcc8895baf120a0 (patch) | |
| tree | d8827b0a9c709d97292b306e8b2efa9396bcedfb /src | |
| parent | updated spanish translation, thanks to egns (diff) | |
| download | KVIrc-e201c411562b358d81ddbeca5dcc8895baf120a0.tar.gz KVIrc-e201c411562b358d81ddbeca5dcc8895baf120a0.tar.bz2 KVIrc-e201c411562b358d81ddbeca5dcc8895baf120a0.zip | |
Fixes for several memory leaks reported by valgrind
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@4384 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src')
| -rw-r--r-- | src/kvilib/ext/kvi_animatedpixmapcache.cpp | 89 | ||||
| -rw-r--r-- | src/kvilib/ext/kvi_animatedpixmapcache.h | 81 | ||||
| -rw-r--r-- | src/kvilib/irc/kvi_ircuserdb.cpp | 10 | ||||
| -rw-r--r-- | src/kvilib/tal/kvi_tal_groupbox.cpp | 4 | ||||
| -rw-r--r-- | src/kvirc/kernel/kvi_app.cpp | 22 | ||||
| -rw-r--r-- | src/kvirc/kernel/kvi_app_setup.cpp | 35 | ||||
| -rw-r--r-- | src/kvirc/kernel/kvi_ircconnection.cpp | 10 | ||||
| -rw-r--r-- | src/kvirc/kernel/kvi_irclink.cpp | 3 | ||||
| -rw-r--r-- | src/kvirc/kernel/kvi_ircsocket.cpp | 4 | ||||
| -rw-r--r-- | src/kvirc/kernel/kvi_main.cpp | 46 | ||||
| -rw-r--r-- | src/kvirc/kvs/kvi_kvs_eventtriggers.h | 4 | ||||
| -rw-r--r-- | src/kvirc/ui/kvi_selectors.cpp | 3 | ||||
| -rw-r--r-- | src/kvirc/ui/kvi_userlistview.cpp | 23 | ||||
| -rw-r--r-- | src/modules/help/libkvihelp.cpp | 27 |
14 files changed, 197 insertions, 164 deletions
diff --git a/src/kvilib/ext/kvi_animatedpixmapcache.cpp b/src/kvilib/ext/kvi_animatedpixmapcache.cpp index 2b9a17fe1..38beeb2f1 100644 --- a/src/kvilib/ext/kvi_animatedpixmapcache.cpp +++ b/src/kvilib/ext/kvi_animatedpixmapcache.cpp @@ -30,33 +30,52 @@ #define FRAME_DELAY 100 -static KviAnimatedPixmapCache* g_pAnimatedCache = 0; -static QPixmap* g_pDummyPixmap = 0; +KviAnimatedPixmapCache * KviAnimatedPixmapCache::m_pInstance = NULL; +static QPixmap * g_pDummyPixmap = NULL; KviAnimatedPixmapCache::KviAnimatedPixmapCache() { - g_pAnimatedCache = this; + m_pInstance = this; m_animationTimer.setInterval(FRAME_DELAY); connect(&m_animationTimer,SIGNAL(timeout()),this,SLOT(timeoutEvent())); } -KviAnimatedPixmapCache::~KviAnimatedPixmapCache() { - if(g_pDummyPixmap) { +KviAnimatedPixmapCache::~KviAnimatedPixmapCache() +{ + if(g_pDummyPixmap) + { delete g_pDummyPixmap; + g_pDummyPixmap = NULL; } - g_pAnimatedCache = 0; + m_pInstance = NULL; +} + +void KviAnimatedPixmapCache::init() +{ + if(m_pInstance) + return; + m_pInstance = new KviAnimatedPixmapCache(); } -KviAnimatedPixmapCache::Data* KviAnimatedPixmapCache::internalLoad(QString szFile) { +void KviAnimatedPixmapCache::done() +{ + if(!m_pInstance) + return; + delete m_pInstance; + m_pInstance = NULL; +} + +KviAnimatedPixmapCache::Data* KviAnimatedPixmapCache::internalLoad(const QString &szFile) +{ m_cacheMutex.lock(); Data* newData = 0; QMultiHash<QString, Data*>::iterator i = m_hCache.find(szFile); - while (i != m_hCache.end() && i.key() == szFile && !newData) { - if (!i.value()->resized) { + while (i != m_hCache.end() && i.key() == szFile && !newData) + { + if (!i.value()->resized) newData = i.value(); - } ++i; } @@ -85,7 +104,9 @@ KviAnimatedPixmapCache::Data* KviAnimatedPixmapCache::internalLoad(QString szFil return newData; } -KviAnimatedPixmapCache::Data* KviAnimatedPixmapCache::internalResize(Data* data, QSize size) { + +KviAnimatedPixmapCache::Data* KviAnimatedPixmapCache::internalResize(Data* data,const QSize &size) +{ m_cacheMutex.lock(); bool hasToBeResized = false; @@ -126,7 +147,8 @@ KviAnimatedPixmapCache::Data* KviAnimatedPixmapCache::internalResize(Data* data, return newData; } -void KviAnimatedPixmapCache::internalFree(Data* data) { +void KviAnimatedPixmapCache::internalFree(Data* data) +{ m_cacheMutex.lock(); data->refs--; if(data->refs==0) @@ -141,29 +163,6 @@ void KviAnimatedPixmapCache::internalFree(Data* data) { m_cacheMutex.unlock(); } -KviAnimatedPixmapCache::Data* KviAnimatedPixmapCache::load(QString szFileName) { - if (!g_pAnimatedCache) { - new KviAnimatedPixmapCache(); - } - return g_pAnimatedCache->internalLoad(szFileName); -} - - -KviAnimatedPixmapCache::Data* KviAnimatedPixmapCache::resize(KviAnimatedPixmapCache::Data* data, QSize size) { - if (!g_pAnimatedCache) { - new KviAnimatedPixmapCache(); - } - return g_pAnimatedCache->internalResize(data, size); -} - - -void KviAnimatedPixmapCache::free(KviAnimatedPixmapCache::Data* data) { - if (!g_pAnimatedCache) { - new KviAnimatedPixmapCache(); - } - g_pAnimatedCache->internalFree(data); -} - void KviAnimatedPixmapCache::internalScheduleFrameChange(uint delay,KviAnimatedPixmapInterface* receiver) { //debug("Adding %i - %i",(uint)KviTimeUtils::getCurrentTimeMills()+delay,receiver); @@ -230,25 +229,16 @@ void KviAnimatedPixmapCache::timeoutEvent() m_animationTimer.stop(); } -void KviAnimatedPixmapCache::scheduleFrameChange(uint when,KviAnimatedPixmapInterface* receiver) -{ - if (g_pAnimatedCache) - { - g_pAnimatedCache->internalScheduleFrameChange(when,receiver); - } -} - QPixmap* KviAnimatedPixmapCache::dummyPixmap() { if(!g_pDummyPixmap) - { g_pDummyPixmap = new QPixmap(); - } return g_pDummyPixmap; } void KviAnimatedPixmapCache::internalNotifyDelete( - KviAnimatedPixmapInterface* receiver) + KviAnimatedPixmapInterface* receiver + ) { m_timerMutex.lock(); @@ -268,10 +258,3 @@ void KviAnimatedPixmapCache::internalNotifyDelete( m_timerMutex.unlock(); } -void KviAnimatedPixmapCache::notifyDelete(KviAnimatedPixmapInterface* receiver) -{ - if (g_pAnimatedCache) - { - g_pAnimatedCache->internalNotifyDelete(receiver); - } -} diff --git a/src/kvilib/ext/kvi_animatedpixmapcache.h b/src/kvilib/ext/kvi_animatedpixmapcache.h index 159f8b025..e12276c81 100644 --- a/src/kvilib/ext/kvi_animatedpixmapcache.h +++ b/src/kvilib/ext/kvi_animatedpixmapcache.h @@ -31,13 +31,15 @@ #include <QTimer> #include "kvi_settings.h" -class KviAnimatedPixmapInterface { +class KviAnimatedPixmapInterface +{ public: virtual void nextFrame(bool) = 0; virtual ~KviAnimatedPixmapInterface() {}; }; -class KVILIB_API KviAnimatedPixmapCache : public QObject { +class KVILIB_API KviAnimatedPixmapCache : public QObject +{ Q_OBJECT public: /* @@ -47,7 +49,7 @@ public: * It provides copyconstructor, wich makes possible to simple * assign two containers with this classes. * - * All data will be dublicated in such case. + * All data will be duplicated in such case. */ class FrameInfo { public: @@ -95,38 +97,69 @@ public: } } }; + +protected: + // + // This class is a singleton. + // It can't be created directly + // + KviAnimatedPixmapCache(); + virtual ~KviAnimatedPixmapCache(); + protected: - mutable QMutex m_cacheMutex; - mutable QMutex m_timerMutex; + mutable QMutex m_cacheMutex; + mutable QMutex m_timerMutex; - QMultiHash<QString,Data*> m_hCache; + QMultiHash<QString,Data*> m_hCache; QMultiMap<long long,KviAnimatedPixmapInterface*> m_timerData; - QTimer m_animationTimer; + QTimer m_animationTimer; - /* - * This class is a singletone. - * It doesn't allow to be created directly; - */ - KviAnimatedPixmapCache(); + static KviAnimatedPixmapCache * m_pInstance; - Data* internalLoad (QString szFile); - Data* internalResize(Data* data,QSize size); +protected: + + Data* internalLoad(const QString &szFile); + Data* internalResize(Data* data,const QSize &size); + void internalFree(Data* data); + + void internalScheduleFrameChange(uint delay,KviAnimatedPixmapInterface* receiver); + void internalNotifyDelete(KviAnimatedPixmapInterface* receiver); - void internalFree(Data* data); - inline void internalScheduleFrameChange(uint delay,KviAnimatedPixmapInterface* receiver); - void internalNotifyDelete(KviAnimatedPixmapInterface* receiver); protected slots: - virtual void timeoutEvent(); + virtual void timeoutEvent(); + public: - virtual ~KviAnimatedPixmapCache(); - static void scheduleFrameChange(uint delay,KviAnimatedPixmapInterface* receiver); - static Data* load(QString szFileName); - static Data* resize(Data* data,QSize size); - static void free(Data* data); + static void init(); + static void done(); + + static void scheduleFrameChange(uint delay,KviAnimatedPixmapInterface* receiver) + { + m_pInstance->internalScheduleFrameChange(delay,receiver); + } + + static Data* load(const QString &szFileName) + { + return m_pInstance->internalLoad(szFileName); + } + + static Data* resize(Data* data,const QSize &size) + { + return m_pInstance->internalResize(data,size); + } + + static void free(Data* data) + { + m_pInstance->internalFree(data); + } + static QPixmap* dummyPixmap(); - static void notifyDelete(KviAnimatedPixmapInterface* receiver); + + static void notifyDelete(KviAnimatedPixmapInterface* receiver) + { + m_pInstance->internalNotifyDelete(receiver); + } }; #endif /* KVI_ANIMATEDPIXMAPCACHE_H_ */ diff --git a/src/kvilib/irc/kvi_ircuserdb.cpp b/src/kvilib/irc/kvi_ircuserdb.cpp index ca41c27e2..ee294b340 100644 --- a/src/kvilib/irc/kvi_ircuserdb.cpp +++ b/src/kvilib/irc/kvi_ircuserdb.cpp @@ -45,9 +45,10 @@ KviIrcUserEntry::KviIrcUserEntry(const QString &user,const QString &host) m_bIrcOp = false; m_eGender = Unknown; m_bBot = false; - m_bNotFoundRegUserLoockup=false; - m_bUseCustomColor=false; - m_iSmartNickColor=-1; + m_bNotFoundRegUserLoockup = false; + m_bUseCustomColor = false; + m_bAvatarRequested = false; + m_iSmartNickColor = -1; } void KviIrcUserEntry::setRealName(const QString &rn) @@ -245,7 +246,8 @@ KviIrcUserEntry * KviIrcUserDataBase::insertUser(const QString &nick,const QStri void KviIrcUserDataBase::removeUser(const QString &nick,KviIrcUserEntry * e) { e->m_nRefs--; - if(e->m_nRefs == 0)m_pDict->remove(nick); + if(e->m_nRefs == 0) + m_pDict->remove(nick); } void KviIrcUserDataBase::setupConnectionWithReguserDb() diff --git a/src/kvilib/tal/kvi_tal_groupbox.cpp b/src/kvilib/tal/kvi_tal_groupbox.cpp index 3b0fdcbbc..2f6caa28c 100644 --- a/src/kvilib/tal/kvi_tal_groupbox.cpp +++ b/src/kvilib/tal/kvi_tal_groupbox.cpp @@ -74,12 +74,12 @@ KviTalGroupBox::~KviTalGroupBox() void KviTalGroupBox::childEvent(QChildEvent * e) { - if(m_pLayout != layout()) - return; if(!e->child()->isWidgetType()) return; if(e->child()->parent() != this) return; + if(m_pLayout != layout()) + return; switch(e->type()) { diff --git a/src/kvirc/kernel/kvi_app.cpp b/src/kvirc/kernel/kvi_app.cpp index 34a4c42c5..b779cd7a7 100644 --- a/src/kvirc/kernel/kvi_app.cpp +++ b/src/kvirc/kernel/kvi_app.cpp @@ -72,6 +72,7 @@ #include "kvi_stringconversion.h" #include "kvi_useridentity.h" #include "kvi_ircview.h" +#include "kvi_animatedpixmapcache.h" #ifndef COMPILE_NO_IPC #include "kvi_ipc.h" @@ -93,6 +94,7 @@ #include <QTextCodec> #include <QMetaObject> #include <QTextDocument> + /* HACK These 2 hacks are defined because X11 defines Unsorted and None which conflicts with QDir and KviApp::KvircSubdir @@ -326,6 +328,10 @@ void KviApp::setup() KVI_SPLASH_SET_PROGRESS(12); + KviAnimatedPixmapCache::init(); + + KVI_SPLASH_SET_PROGRESS(13); + // Load the remaining configuration // Note that loadOptions() assumes that the current progress is 12 and // will bump it up to 45 in small steps @@ -556,17 +562,21 @@ KviApp::~KviApp() destroyIpcSentinel(); #endif - if(g_pSplashScreen)delete g_pSplashScreen; - if(g_pCtcpPageDialog)delete g_pCtcpPageDialog; + if(g_pSplashScreen) + delete g_pSplashScreen; + if(g_pCtcpPageDialog) + delete g_pCtcpPageDialog; // if we still have a frame: kill it - if(g_pFrame)delete g_pFrame; + if(g_pFrame) + delete g_pFrame; g_pActiveWindow = 0; // .. but it should be already 0 anyway // execute pending deletes (this may still contain some UI elements) //delete g_pGarbageCollector; - if(!m_bSetupDone)return; // killed with IPC (nothing except the m_pFrameList was created yet) + if(!m_bSetupDone) + return; // killed with IPC (nothing except the m_pFrameList was created yet) KviFileTransferManager::cleanup(); @@ -635,7 +645,9 @@ KviApp::~KviApp() #ifdef COMPILE_PSEUDO_TRANSPARENCY destroyPseudoTransparency(); #endif - if(m_pPendingAvatarChanges)delete m_pPendingAvatarChanges; + if(m_pPendingAvatarChanges) + delete m_pPendingAvatarChanges; + KviAnimatedPixmapCache::done(); // Kill the thread manager.... all the slave threads should have been already terminated ... #ifdef COMPILE_SSL_SUPPORT KviSSL::globalDestroy(); diff --git a/src/kvirc/kernel/kvi_app_setup.cpp b/src/kvirc/kernel/kvi_app_setup.cpp index 973bd6247..bdf3b62f5 100644 --- a/src/kvirc/kernel/kvi_app_setup.cpp +++ b/src/kvirc/kernel/kvi_app_setup.cpp @@ -718,27 +718,18 @@ bool KviApp::findLocalKvircDirectory() if(m_szConfigFile.isEmpty()) { // don't do that if user supplied a config file :) - KConfig * pCfg = new KConfig("kvirc"); - KConfigGroup * pCfgMainGroup = new KConfigGroup(pCfg, "Main"); - if(pCfg) - { - if(pCfg->accessMode() == KConfig::ReadWrite) - { - m_szLocalKvircDir = pCfgMainGroup->readEntry("LocalKvircDirectory"); + KConfig oKCfg("kvirc"); + KConfigGroup oKCfgMainGroup(&oKCfg, "Main"); - unsigned int uSourcesDate = pCfgMainGroup->readEntry("SourcesDate").toInt(); - if(uSourcesDate < KVI_SOURCES_DATE_NUMERIC_FORCE_SETUP) - { - delete pCfgMainGroup; - pCfgMainGroup = 0; - return false; // we force a setup anyway - } + m_szLocalKvircDir = oKCfgMainGroup.readEntry("LocalKvircDirectory"); - // If we have it , ok...done - if(checkLocalKvircDirectory()) - return true; - } - } + unsigned int uSourcesDate = oKCfgMainGroup.readEntry("SourcesDate").toInt(); + if(uSourcesDate < KVI_SOURCES_DATE_NUMERIC_FORCE_SETUP) + return false; // we force a setup anyway + + // If we have it , ok...done + if(checkLocalKvircDirectory()) + return true; } #endif //COMPILE_KDE_SUPPORT @@ -767,8 +758,8 @@ bool KviApp::findLocalKvircDirectory() szF += KVI_PATH_SEPARATOR; szF += KVI_HOME_CONFIG_FILE_NAME; } + //If the file exists , read the first non empty line. - //FIXME: LOCALE BROKEN!!! KviConfig cfgx(szF,KviConfig::Read); cfgx.setGroup("Main"); @@ -779,9 +770,7 @@ bool KviApp::findLocalKvircDirectory() return false; // we force a setup anyway // If we have it , ok...done - if(checkLocalKvircDirectory()) - return true; - return false; + return checkLocalKvircDirectory(); } void KviApp::loadDirectories() diff --git a/src/kvirc/kernel/kvi_ircconnection.cpp b/src/kvirc/kernel/kvi_ircconnection.cpp index 1a485103f..f1e8591b3 100644 --- a/src/kvirc/kernel/kvi_ircconnection.cpp +++ b/src/kvirc/kernel/kvi_ircconnection.cpp @@ -742,10 +742,7 @@ bool KviIrcConnection::sendFmtData(const char * pcFmt, ...) } // Trigger OnOutboundTraffic event - KviKvsVariantList * pParams = new KviKvsVariantList(); - pParams->append(szMsg); - - KVS_TRIGGER_EVENT(KviEvent_OnOutboundTraffic,m_pConsole->activeWindow(),pParams); + KVS_TRIGGER_EVENT_1(KviEvent_OnOutboundTraffic,m_pConsole->activeWindow(),szMsg); return m_pLink->sendPacket(pData); } @@ -780,10 +777,7 @@ bool KviIrcConnection::sendData(const char * pcBuffer, int iBuflen) } // Trigger OnOutboundTraffic event - KviKvsVariantList * pParams = new KviKvsVariantList(); - pParams->append(szMsg); - - KVS_TRIGGER_EVENT(KviEvent_OnOutboundTraffic,m_pConsole->activeWindow(),pParams); + KVS_TRIGGER_EVENT_1(KviEvent_OnOutboundTraffic,m_pConsole->activeWindow(),szMsg); return m_pLink->sendPacket(pData); } diff --git a/src/kvirc/kernel/kvi_irclink.cpp b/src/kvirc/kernel/kvi_irclink.cpp index 7a859ce03..464589748 100644 --- a/src/kvirc/kernel/kvi_irclink.cpp +++ b/src/kvirc/kernel/kvi_irclink.cpp @@ -110,7 +110,8 @@ void KviIrcLink::destroySocket() if(m_pSocket) { - //we use deleteLater() here, since m_pSocket can receive events from a QSocketNotifier + // We use deleteLater() here, since we could actually be inside an event + // related to the QSocketNotifier that the socket is attached to... m_pSocket->deleteLater(); m_pSocket = 0; } diff --git a/src/kvirc/kernel/kvi_ircsocket.cpp b/src/kvirc/kernel/kvi_ircsocket.cpp index 08adbc477..14e77e84a 100644 --- a/src/kvirc/kernel/kvi_ircsocket.cpp +++ b/src/kvirc/kernel/kvi_ircsocket.cpp @@ -166,7 +166,9 @@ void KviIrcSocket::reset() m_bInProcessData = false; - if(m_pFlushTimer->isActive())m_pFlushTimer->stop(); + if(m_pFlushTimer->isActive()) + m_pFlushTimer->stop(); + queue_removeAllMessages(); setState(Idle); diff --git a/src/kvirc/kernel/kvi_main.cpp b/src/kvirc/kernel/kvi_main.cpp index a7b558f1b..a26f3b2d6 100644 --- a/src/kvirc/kernel/kvi_main.cpp +++ b/src/kvirc/kernel/kvi_main.cpp @@ -33,9 +33,9 @@ #include "kvi_msgbox.h" #include "kvi_buildinfo.h" #ifdef COMPILE_DBUS_SUPPORT -#ifndef COMPILE_KDE_SUPPORT // 'cause kde adds an interface itself - #include "kvi_dbusadaptor.h" -#endif + #ifndef COMPILE_KDE_SUPPORT // 'cause kde adds an interface itself + #include "kvi_dbusadaptor.h" + #endif #endif #ifndef COMPILE_NO_IPC extern bool kvi_sendIpcMessage(const char * message); // kvi_ipc.cpp @@ -346,26 +346,36 @@ int main(int argc, char ** argv) return ((iRetCode == KVI_ARGS_RETCODE_ERROR) ? (-1) : 0); } - KviApp * pTheApp; - #ifdef COMPILE_KDE_SUPPORT - KAboutData * pAbout = new KAboutData("kvirc", "kvirc", ki18n("KVIrc"), KVI_VERSION); - #if KDE_IS_VERSION(4,3,0) - pAbout->setBugAddress("https://svn.kvirc.de/kvirc/"); - #endif + + KAboutData oAboutData( + "kvirc", // internal program name + "kvirc", // message catalogue name + ki18n("KVIrc"), // user-visible program name + KVI_VERSION, // program version + ki18n("Visual IRC Client"), // description + KAboutData::License_GPL, // license + ki18n("(c) 1998-2010 The KVIrc Development Team"), + ki18n("???"), // *some other text* ???? + "http://www.kvirc.net", // homepage + "https://svn.kvirc.de/kvirc/" // bug address (FIXME: this would be an E-MAIL address...) + ); + //fake argc/argv initialization: kde will use argv[0] as out appName in some dialogs // (eg: kdebase/workspace/kwin/killer/killer.cpp) - KCmdLineArgs::init(1, &argv[0], pAbout); + KCmdLineArgs::init(1, &argv[0], &oAboutData); + #endif - pTheApp = new KviApp(argc,argv); + KviApp * pTheApp = new KviApp(argc,argv); #ifdef COMPILE_DBUS_SUPPORT -#ifndef COMPILE_KDE_SUPPORT - new KviDbusAdaptor(pTheApp); - QDBusConnection::sessionBus().registerObject("/MainApplication", pTheApp); -#endif + #ifndef COMPILE_KDE_SUPPORT + new KviDbusAdaptor(pTheApp); // FIXME: shouldn't this be deleted by someone ? + QDBusConnection::sessionBus().registerObject("/MainApplication", pTheApp); + #endif #endif + KviStr szRemoteCommand = a.szExecCommand; if(a.szExecRemoteCommand.hasData()) { @@ -418,7 +428,9 @@ int main(int argc, char ** argv) } delete pTheApp; return 0; - } else if(a.bExecuteCommandAndClose) + } + + if(a.bExecuteCommandAndClose) { delete pTheApp; return 0; @@ -437,6 +449,6 @@ int main(int argc, char ** argv) // :) delete pTheApp; - pTheApp = 0; + return iRetVal; } diff --git a/src/kvirc/kvs/kvi_kvs_eventtriggers.h b/src/kvirc/kvs/kvi_kvs_eventtriggers.h index 3a2a8b89d..f26c09d1a 100644 --- a/src/kvirc/kvs/kvi_kvs_eventtriggers.h +++ b/src/kvirc/kvs/kvi_kvs_eventtriggers.h @@ -44,7 +44,7 @@ // // -// THESE TWO ARE SLOW, but allow reusing the params +// These two allow reusing the parameter lists (but may require more code) #define KVS_TRIGGER_EVENT(__idx,__wnd,__parms) \ if(KviKvsEventManager::instance()->hasAppHandlers(__idx)) \ KviKvsEventManager::instance()->trigger(__idx,__wnd,__parms); @@ -54,7 +54,7 @@ KviKvsEventManager::instance()->trigger(__idx,__wnd,__parms) : false) -// FAST CALLING MACROS +// These require less code (but param lists can't be reused) #define KVS_TRIGGER_EVENT_0(__idx,__wnd) \ if(KviKvsEventManager::instance()->hasAppHandlers(__idx)) \ { \ diff --git a/src/kvirc/ui/kvi_selectors.cpp b/src/kvirc/ui/kvi_selectors.cpp index 0d2fee0d8..107f479d2 100644 --- a/src/kvirc/ui/kvi_selectors.cpp +++ b/src/kvirc/ui/kvi_selectors.cpp @@ -636,7 +636,8 @@ void KviFontSelector::changeClicked() { bool bOk; QFont tmp = QFontDialog::getFont(&bOk,m_pButton->font()); - if(bOk)setButtonFont(&tmp); + if(bOk) + setButtonFont(&tmp); } void KviFontSelector::commit() diff --git a/src/kvirc/ui/kvi_userlistview.cpp b/src/kvirc/ui/kvi_userlistview.cpp index 2219da199..7f88232ec 100644 --- a/src/kvirc/ui/kvi_userlistview.cpp +++ b/src/kvirc/ui/kvi_userlistview.cpp @@ -1196,16 +1196,7 @@ bool KviUserListView::partInternal(const QString & szNick, bool bRemove) } else pEntry = pEntry->m_pNext; } - if(bRemove) - m_pIrcUserDataBase->removeUser(szNick,pUserEntry->m_pGlobalData); - - if(!m_pIrcUserDataBase->find(szNick)) - { - //completelly removed. avatar is deleted - pUserEntry->resetAvatarConnection(); - } - - // now just remove it + // decrease counts first if(pUserEntry->m_pGlobalData->isIrcOp()) m_iIrcOpCount--; if(pUserEntry->m_iFlags & KVI_USERFLAG_CHANOWNER) @@ -1220,6 +1211,18 @@ bool KviUserListView::partInternal(const QString & szNick, bool bRemove) m_iVoiceCount--; if(pUserEntry->m_iFlags & KVI_USERFLAG_USEROP) m_iUserOpCount--; + + if(bRemove) + { + m_pIrcUserDataBase->removeUser(szNick,pUserEntry->m_pGlobalData); + + if(!m_pIrcUserDataBase->find(szNick)) + { + //completelly removed. avatar is deleted + pUserEntry->resetAvatarConnection(); + } + } + if(pUserEntry->m_bSelected) { m_iSelectedCount--; diff --git a/src/modules/help/libkvihelp.cpp b/src/modules/help/libkvihelp.cpp index 41fcb89d7..b12edb41d 100644 --- a/src/modules/help/libkvihelp.cpp +++ b/src/modules/help/libkvihelp.cpp @@ -105,17 +105,18 @@ static bool help_kvs_cmd_open(KviKvsModuleCommandCall * c) */ // try absolute path - QFileInfo * f= new QFileInfo(szParam); - if(!f->exists()) + QFileInfo f(szParam); + + if(!f.exists()) { // try relative path (to local help) g_pApp->getLocalKvircDirectory(szHelpDir,KviApp::Help); dirHelp = QDir(szHelpDir); szDoc = dirHelp.absoluteFilePath(szParam); qDebug("No abs path, trying local relative path: %s",szDoc.toUtf8().data()); - f->setFile(szDoc); + f.setFile(szDoc); - if(!f->exists()) + if(!f.exists()) { //try relative path (to global help) g_pApp->getGlobalKvircDirectory(szHelpDir,KviApp::Help); @@ -123,12 +124,12 @@ static bool help_kvs_cmd_open(KviKvsModuleCommandCall * c) szDoc = dirHelp.absoluteFilePath(szParam); qDebug("No local relative, trying global relative path: %s",szDoc.toUtf8().data()); - f->setFile(szDoc); + f.setFile(szDoc); } } // Search in help - if(!f->exists()) + if(!f.exists()) { qDebug("No path, trying search.."); if(g_pDocIndex) @@ -151,7 +152,7 @@ static bool help_kvs_cmd_open(KviKvsModuleCommandCall * c) if (i!=-1) { szDoc=QUrl(g_pDocIndex->documentList()[ i ]).toLocalFile(); - f->setFile(szDoc); + f.setFile(szDoc); } else { QString szTmpDocName(".*/doc_"); szTmpDocName.append(QRegExp::escape(szParam)); @@ -160,19 +161,19 @@ static bool help_kvs_cmd_open(KviKvsModuleCommandCall * c) if (i!=-1) { szDoc=QUrl(g_pDocIndex->documentList()[ i ]).toLocalFile(); - f->setFile(szDoc); + f.setFile(szDoc); } } } } // Everything failed => error - if(!f->exists()) + if(!f.exists()) { szDoc = dirHelp.absoluteFilePath("nohelpavailable.html"); qDebug("Document not found, defaulting to error page: %s",szDoc.toUtf8().data()); - f->setFile(szDoc); + f.setFile(szDoc); } if(!c->switches()->find('n',"new")) @@ -181,19 +182,19 @@ static bool help_kvs_cmd_open(KviKvsModuleCommandCall * c) if(w) { - w->textBrowser()->setSource(QUrl::fromLocalFile(f->absoluteFilePath())); + w->textBrowser()->setSource(QUrl::fromLocalFile(f.absoluteFilePath())); return true; } } if(c->switches()->find('m',"mdi")) { KviHelpWindow *w = new KviHelpWindow(c->window()->frame(),"Help browser"); - w->textBrowser()->setSource(QUrl::fromLocalFile(f->absoluteFilePath())); + w->textBrowser()->setSource(QUrl::fromLocalFile(f.absoluteFilePath())); c->window()->frame()->addWindow(w); } else { KviHelpWidget *w = new KviHelpWidget(c->window()->frame()->splitter(), c->window()->frame(),true); - w->textBrowser()->setSource(QUrl::fromLocalFile(f->absoluteFilePath())); + w->textBrowser()->setSource(QUrl::fromLocalFile(f.absoluteFilePath())); w->show(); } |
