rework mouse buttons debugging

avoid symbols in anonymous namespace and round-trips to the meta-object
system

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2020-08-09 20:41:12 +03:00
parent 451ad1f204
commit fb97bea482

View file

@ -2180,33 +2180,42 @@ static const char *eventClassName(QEvent::Type t)
return "QEvent"; return "QEvent";
} }
namespace { static const char *mouseButtonToString(Qt::MouseButton button)
// Make protected QObject::staticQtMetaObject accessible for formatting enums. {
class DebugHelper : public QObject { switch (button) {
public: case Qt::NoButton:
static const char *mouseButtonToString(Qt::MouseButton button) return "Qt::NoButton";
{ case Qt::LeftButton:
static const int enumIdx = QObject::staticQtMetaObject.indexOfEnumerator("MouseButtons"); return "Qt::LeftButton";
return QObject::staticQtMetaObject.enumerator(enumIdx).valueToKey(button); case Qt::RightButton:
return "Qt::RightButton";
case Qt::MiddleButton:
return "Qt::MiddleButton";
case Qt::XButton1:
return "Qt::XButton1";
case Qt::XButton2:
return "Qt::XButton2";
default:
Q_ASSERT_X(false, "mouseButtonToString", "internal error");
} }
Q_UNREACHABLE();
}
static QByteArray mouseButtonsToString(Qt::MouseButtons buttons) static QByteArray mouseButtonsToString(Qt::MouseButtons buttons)
{ {
QByteArray result; QByteArray result;
for (int i = 0; (uint)(1 << i) <= Qt::MouseButtonMask; ++i) { for (int i = 0; (uint)(1 << i) <= Qt::MouseButtonMask; ++i) {
const Qt::MouseButton button = static_cast<Qt::MouseButton>(1 << i); const Qt::MouseButton button = static_cast<Qt::MouseButton>(1 << i);
if (buttons.testFlag(button)) { if (buttons.testFlag(button)) {
if (!result.isEmpty()) if (!result.isEmpty())
result.append('|'); result.append('|');
result.append(mouseButtonToString(button)); result.append(mouseButtonToString(button));
}
} }
if (result.isEmpty())
result.append("NoButton");
return result;
} }
}; if (result.isEmpty())
} // namespace result.append("NoButton");
return result;
}
# ifndef QT_NO_DRAGANDDROP # ifndef QT_NO_DRAGANDDROP
@ -2220,7 +2229,7 @@ static void formatDropEvent(QDebug d, const QDropEvent *e)
d << ", formats=" << e->mimeData()->formats(); d << ", formats=" << e->mimeData()->formats();
if (const Qt::KeyboardModifiers mods = e->keyboardModifiers()) if (const Qt::KeyboardModifiers mods = e->keyboardModifiers())
d << ", keyboardModifiers=" << mods; d << ", keyboardModifiers=" << mods;
d << ", " << DebugHelper::mouseButtonsToString(e->mouseButtons()).constData(); d << ", " << mouseButtonsToString(e->mouseButtons()).constData();
} }
# endif // !QT_NO_DRAGANDDROP # endif // !QT_NO_DRAGANDDROP
@ -2256,9 +2265,9 @@ QDebug operator<<(QDebug dbg, const QEvent *e) {
const Qt::MouseButtons buttons = me->buttons(); const Qt::MouseButtons buttons = me->buttons();
dbg << "QMouseEvent(" << eventTypeName(type); dbg << "QMouseEvent(" << eventTypeName(type);
if (type != QEvent::MouseMove && type != QEvent::NonClientAreaMouseMove) if (type != QEvent::MouseMove && type != QEvent::NonClientAreaMouseMove)
dbg << ", " << DebugHelper::mouseButtonToString(button); dbg << ", " << mouseButtonToString(button);
if (buttons && button != buttons) if (buttons && button != buttons)
dbg << ", buttons=" << DebugHelper::mouseButtonsToString(buttons).constData(); dbg << ", buttons=" << mouseButtonsToString(buttons).constData();
if (const int mods = int(me->modifiers())) if (const int mods = int(me->modifiers()))
dbg << ", modifiers=0x" << hex << mods << dec; dbg << ", modifiers=0x" << hex << mods << dec;
dbg << ')'; dbg << ')';