QGlobal: Define a default message handler

Currently, qInstallMsgHandler() does not return the
handle to the default message handler. This patch defines
a default message handler. This is returned by
qInstallMsgHandler() when called for the first time. A call
to qInstallMsgHandler(0) will restore the default message
handler as was the case previously.

Change-Id: I42f06654d45fb0e633f3c6d912fc8f05c23249aa
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Aurindam Jana 2011-11-08 10:45:18 +01:00 committed by Qt by Nokia
parent a4f446704e
commit 124044613d
2 changed files with 38 additions and 16 deletions

View File

@ -2026,25 +2026,11 @@ extern bool usingWinMain;
extern Q_CORE_EXPORT void qWinMsgHandler(QtMsgType t, const char* str);
#endif
QtMsgHandler qInstallMsgHandler(QtMsgHandler h)
{
QtMsgHandler old = handler;
handler = h;
#if defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB)
if (!handler && usingWinMain)
handler = qWinMsgHandler;
#endif
return old;
}
/*!
\internal
*/
void qt_message_output(QtMsgType msgType, const char *buf)
static void qDefaultMsgHandler(QtMsgType, const char *buf)
{
if (handler) {
(*handler)(msgType, buf);
} else {
#if defined(Q_CC_MWERKS) && defined(Q_OS_MACX)
mac_default_handler(buf);
#elif defined(Q_OS_WINCE)
@ -2067,7 +2053,31 @@ void qt_message_output(QtMsgType msgType, const char *buf)
fprintf(stderr, "%s\n", buf);
fflush(stderr);
#endif
}
}
QtMsgHandler qInstallMsgHandler(QtMsgHandler h)
{
//if handler is 0, set it to the
//default message handler
if (!handler)
handler = qDefaultMsgHandler;
QtMsgHandler old = handler;
handler = h;
#if defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB)
if (!handler && usingWinMain)
handler = qWinMsgHandler;
#endif
return old;
}
/*!
\internal
*/
void qt_message_output(QtMsgType msgType, const char *buf)
{
if (!handler)
handler = qDefaultMsgHandler;
(*handler)(msgType, buf);
if (msgType == QtFatalMsg
|| (msgType == QtWarningMsg

View File

@ -54,6 +54,7 @@ private slots:
void debugWithQBool() const;
void veryLongWarningMessage() const;
void qDebugQStringRef() const;
void defaultMessagehandler() const;
};
void tst_QDebug::assignment() const
@ -154,5 +155,16 @@ void tst_QDebug::qDebugQStringRef() const
}
}
void tst_QDebug::defaultMessagehandler() const
{
QtMsgHandler defaultMessageHandler1 = qInstallMsgHandler(0);
QtMsgHandler defaultMessageHandler2 = qInstallMsgHandler(myMessageHandler);
bool same = (*defaultMessageHandler1 == *defaultMessageHandler2);
QVERIFY(same);
QtMsgHandler messageHandler = qInstallMsgHandler(0);
same = (*messageHandler == *myMessageHandler);
QVERIFY(same);
}
QTEST_MAIN(tst_QDebug);
#include "tst_qdebug.moc"