aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Szymon Tomasz Stefanek2010-05-28 01:28:02 +0000
committerGravatar Szymon Tomasz Stefanek2010-05-28 01:28:02 +0000
commite201c411562b358d81ddbeca5dcc8895baf120a0 (patch)
treed8827b0a9c709d97292b306e8b2efa9396bcedfb
parentupdated spanish translation, thanks to egns (diff)
downloadKVIrc-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
-rw-r--r--src/kvilib/ext/kvi_animatedpixmapcache.cpp89
-rw-r--r--src/kvilib/ext/kvi_animatedpixmapcache.h81
-rw-r--r--src/kvilib/irc/kvi_ircuserdb.cpp10
-rw-r--r--src/kvilib/tal/kvi_tal_groupbox.cpp4
-rw-r--r--src/kvirc/kernel/kvi_app.cpp22
-rw-r--r--src/kvirc/kernel/kvi_app_setup.cpp35
-rw-r--r--src/kvirc/kernel/kvi_ircconnection.cpp10
-rw-r--r--src/kvirc/kernel/kvi_irclink.cpp3
-rw-r--r--src/kvirc/kernel/kvi_ircsocket.cpp4
-rw-r--r--src/kvirc/kernel/kvi_main.cpp46
-rw-r--r--src/kvirc/kvs/kvi_kvs_eventtriggers.h4
-rw-r--r--src/kvirc/ui/kvi_selectors.cpp3
-rw-r--r--src/kvirc/ui/kvi_userlistview.cpp23
-rw-r--r--src/modules/help/libkvihelp.cpp27
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();
}