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:
parent
a4f446704e
commit
124044613d
@ -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
|
||||
|
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user