/* Copyright (c) 2017, Lukas Holecek This file is part of CopyQ. CopyQ is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. CopyQ is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with CopyQ. If not, see . */ #include "messagehandlerforqt.h" #include "common/log.h" #include #include #include namespace { class ExceptionQtFatal : public std::exception { public: explicit ExceptionQtFatal(const QByteArray &message) : m_message(message) { } const char* what() const noexcept override { return m_message.constData(); } private: QByteArray m_message; }; void messageHandler(QtMsgType type, const QString &message) { switch (type) { case QtDebugMsg: log("QtDebug: " + message, LogDebug); break; #if QT_VERSION >= 0x050500 case QtInfoMsg: log("QtInfo: " + message, LogDebug); break; #endif case QtWarningMsg: log("QtWarning: " + message, LogDebug); break; case QtCriticalMsg: log("QtCritical: " + message, LogError); break; case QtFatalMsg: log("QtFatal: " + message, LogError); throw ExceptionQtFatal( message.toUtf8() ); } } #if QT_VERSION < 0x050000 void messageHandlerForQt4(QtMsgType type, const char *msg) { const QString message = msg; messageHandler(type, message); } #else void messageHandlerForQt5(QtMsgType type, const QMessageLogContext &context, const QString &msg) { const QString message = QString("%1 (%2:%3, %4)") .arg(msg, context.file, QString::number(context.line), context.function); messageHandler(type, message); } #endif } // namespace void installMessageHandlerForQt() { #if QT_VERSION < 0x050000 qInstallMsgHandler(messageHandlerForQt4); #else qInstallMessageHandler(messageHandlerForQt5); #endif }