QWSI: Remove handleFrameStrutMouseEvent in favor of handleMouseEvent+type
The handleMouseEvent function already takes a QEvent::Type, where clients pass in the corresponding mouse press/release/move type. The same applies to the handleFrameStrutMouseEvent. To avoid the chance that clients call these functions with a conflicting event type (handleFrameStrutMouseEvent with MouseButtonPress instead of NonClientAreaMouseButtonPress e.g.), we remove handleFrameStrutMouseEvent altogether and just let clients use the handleMouseEvent function directly with the correct event type. Change-Id: I4a0241c39aedac0d2d8d5163ba05cde72605959c Reviewed-by: Lars Knoll <lars@knoll.priv.no>
This commit is contained in:
parent
f9594cefef
commit
f037977152
@ -389,61 +389,34 @@ QT_DEFINE_QPA_EVENT_HANDLER(bool, handleMouseEvent, QWindow *window, ulong times
|
||||
Qt::MouseButton button, QEvent::Type type, Qt::KeyboardModifiers mods,
|
||||
Qt::MouseEventSource source)
|
||||
{
|
||||
Q_ASSERT_X(type != QEvent::MouseButtonDblClick && type != QEvent::NonClientAreaMouseButtonDblClick,
|
||||
"QWindowSystemInterface::handleMouseEvent",
|
||||
|
||||
bool isNonClientArea = {};
|
||||
|
||||
switch (type) {
|
||||
case QEvent::MouseButtonDblClick:
|
||||
case QEvent::NonClientAreaMouseButtonDblClick:
|
||||
Q_ASSERT_X(false, "QWindowSystemInterface::handleMouseEvent",
|
||||
"QTBUG-71263: Native double clicks are not implemented.");
|
||||
return false;
|
||||
case QEvent::MouseMove:
|
||||
case QEvent::MouseButtonPress:
|
||||
case QEvent::MouseButtonRelease:
|
||||
isNonClientArea = false;
|
||||
break;
|
||||
case QEvent::NonClientAreaMouseMove:
|
||||
case QEvent::NonClientAreaMouseButtonPress:
|
||||
case QEvent::NonClientAreaMouseButtonRelease:
|
||||
isNonClientArea = true;
|
||||
break;
|
||||
default:
|
||||
Q_UNREACHABLE();
|
||||
}
|
||||
|
||||
auto localPos = QHighDpi::fromNativeLocalPosition(local, window);
|
||||
auto globalPos = QHighDpi::fromNativeGlobalPosition(global, window);
|
||||
|
||||
return handleWindowSystemEvent<QWindowSystemInterfacePrivate::MouseEvent, Delivery>(window,
|
||||
timestamp, localPos, globalPos, state, mods, button, type, source, false, device);
|
||||
}
|
||||
|
||||
bool QWindowSystemInterface::handleFrameStrutMouseEvent(QWindow *window,
|
||||
const QPointF &local, const QPointF &global,
|
||||
Qt::MouseButtons state,
|
||||
Qt::MouseButton button, QEvent::Type type,
|
||||
Qt::KeyboardModifiers mods,
|
||||
Qt::MouseEventSource source)
|
||||
{
|
||||
const unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
|
||||
return handleFrameStrutMouseEvent(window, time, local, global, state, button, type, mods, source);
|
||||
}
|
||||
|
||||
bool QWindowSystemInterface::handleFrameStrutMouseEvent(QWindow *window, const QPointingDevice *device,
|
||||
const QPointF &local, const QPointF &global,
|
||||
Qt::MouseButtons state,
|
||||
Qt::MouseButton button, QEvent::Type type,
|
||||
Qt::KeyboardModifiers mods,
|
||||
Qt::MouseEventSource source)
|
||||
{
|
||||
const unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
|
||||
return handleFrameStrutMouseEvent(window, time, device, local, global, state, button, type, mods, source);
|
||||
}
|
||||
|
||||
bool QWindowSystemInterface::handleFrameStrutMouseEvent(QWindow *window, ulong timestamp,
|
||||
const QPointF &local, const QPointF &global,
|
||||
Qt::MouseButtons state,
|
||||
Qt::MouseButton button, QEvent::Type type,
|
||||
Qt::KeyboardModifiers mods,
|
||||
Qt::MouseEventSource source)
|
||||
{
|
||||
return handleFrameStrutMouseEvent(window, timestamp, QPointingDevice::primaryPointingDevice(),
|
||||
local, global, state, button, type, mods, source);
|
||||
}
|
||||
|
||||
bool QWindowSystemInterface::handleFrameStrutMouseEvent(QWindow *window, ulong timestamp, const QPointingDevice *device,
|
||||
const QPointF &local, const QPointF &global,
|
||||
Qt::MouseButtons state,
|
||||
Qt::MouseButton button, QEvent::Type type,
|
||||
Qt::KeyboardModifiers mods,
|
||||
Qt::MouseEventSource source)
|
||||
{
|
||||
auto localPos = QHighDpi::fromNativeLocalPosition(local, window);
|
||||
auto globalPos = QHighDpi::fromNativeGlobalPosition(global, window);
|
||||
|
||||
return handleWindowSystemEvent<QWindowSystemInterfacePrivate::MouseEvent>(window,
|
||||
timestamp, localPos, globalPos, state, mods, button, type, source, true, device);
|
||||
timestamp, localPos, globalPos, state, mods, button, type, source, isNonClientArea, device);
|
||||
}
|
||||
|
||||
bool QWindowSystemInterface::handleShortcutEvent(QWindow *window, ulong timestamp, int keyCode, Qt::KeyboardModifiers modifiers, quint32 nativeScanCode,
|
||||
|
@ -64,31 +64,6 @@ public:
|
||||
Qt::KeyboardModifiers mods = Qt::NoModifier,
|
||||
Qt::MouseEventSource source = Qt::MouseEventNotSynthesized);
|
||||
|
||||
static bool handleFrameStrutMouseEvent(QWindow *window, const QPointF &local,
|
||||
const QPointF &global, Qt::MouseButtons state,
|
||||
Qt::MouseButton button, QEvent::Type type,
|
||||
Qt::KeyboardModifiers mods = Qt::NoModifier,
|
||||
Qt::MouseEventSource source =
|
||||
Qt::MouseEventNotSynthesized);
|
||||
static bool handleFrameStrutMouseEvent(QWindow *window, const QPointingDevice *device,
|
||||
const QPointF &local, const QPointF &global,
|
||||
Qt::MouseButtons state,
|
||||
Qt::MouseButton button, QEvent::Type type,
|
||||
Qt::KeyboardModifiers mods = Qt::NoModifier,
|
||||
Qt::MouseEventSource source =
|
||||
Qt::MouseEventNotSynthesized);
|
||||
static bool handleFrameStrutMouseEvent(QWindow *window, ulong timestamp, const QPointF &local,
|
||||
const QPointF &global, Qt::MouseButtons state,
|
||||
Qt::MouseButton button, QEvent::Type type,
|
||||
Qt::KeyboardModifiers mods = Qt::NoModifier,
|
||||
Qt::MouseEventSource source =
|
||||
Qt::MouseEventNotSynthesized);
|
||||
static bool handleFrameStrutMouseEvent(QWindow *window, ulong timestamp, const QPointingDevice *device,
|
||||
const QPointF &local, const QPointF &global, Qt::MouseButtons state,
|
||||
Qt::MouseButton button, QEvent::Type type,
|
||||
Qt::KeyboardModifiers mods = Qt::NoModifier,
|
||||
Qt::MouseEventSource source = Qt::MouseEventNotSynthesized);
|
||||
|
||||
static bool handleShortcutEvent(QWindow *window, ulong timestamp, int k, Qt::KeyboardModifiers mods, quint32 nativeScanCode,
|
||||
quint32 nativeVirtualKey, quint32 nativeModifiers, const QString & text = QString(), bool autorep = false, ushort count = 1);
|
||||
|
||||
|
@ -222,7 +222,7 @@ static const QPointingDevice *pointingDeviceFor(qint64 deviceID)
|
||||
}();
|
||||
|
||||
qCInfo(lcQpaMouse) << eventType << "at" << qtWindowPoint << "with" << m_frameStrutButtons << "in" << self.window;
|
||||
QWindowSystemInterface::handleFrameStrutMouseEvent(m_platformWindow->window(),
|
||||
QWindowSystemInterface::handleMouseEvent(m_platformWindow->window(),
|
||||
timestamp, qtWindowPoint, qtScreenPoint, m_frameStrutButtons, button, eventType);
|
||||
}
|
||||
@end
|
||||
|
@ -1466,13 +1466,8 @@ void QWindowsContext::handleExitSizeMove(QWindow *window)
|
||||
? QEvent::MouseButtonRelease : QEvent::NonClientAreaMouseButtonRelease;
|
||||
for (Qt::MouseButton button : {Qt::LeftButton, Qt::RightButton, Qt::MiddleButton}) {
|
||||
if (appButtons.testFlag(button) && !currentButtons.testFlag(button)) {
|
||||
if (type == QEvent::NonClientAreaMouseButtonRelease) {
|
||||
QWindowSystemInterface::handleFrameStrutMouseEvent(window, localPos, globalPos,
|
||||
currentButtons, button, type, keyboardModifiers);
|
||||
} else {
|
||||
QWindowSystemInterface::handleMouseEvent(window, localPos, globalPos,
|
||||
currentButtons, button, type, keyboardModifiers);
|
||||
}
|
||||
QWindowSystemInterface::handleMouseEvent(window, localPos, globalPos,
|
||||
currentButtons, button, type, keyboardModifiers);
|
||||
}
|
||||
}
|
||||
if (d->m_systemInfo & QWindowsContext::SI_SupportsPointer)
|
||||
|
@ -286,19 +286,16 @@ bool QWindowsMouseHandler::translateMouseEvent(QWindow *window, HWND hwnd,
|
||||
if (m_lastEventType == QEvent::NonClientAreaMouseButtonPress
|
||||
&& (mouseEvent.type == QEvent::NonClientAreaMouseMove || mouseEvent.type == QEvent::MouseMove)
|
||||
&& (m_lastEventButton & buttons) == 0) {
|
||||
if (mouseEvent.type == QEvent::NonClientAreaMouseMove) {
|
||||
QWindowSystemInterface::handleFrameStrutMouseEvent(window, device, clientPosition, globalPosition, buttons, m_lastEventButton,
|
||||
QEvent::NonClientAreaMouseButtonRelease, keyModifiers, source);
|
||||
} else {
|
||||
QWindowSystemInterface::handleMouseEvent(window, device, clientPosition, globalPosition, buttons, m_lastEventButton,
|
||||
QEvent::MouseButtonRelease, keyModifiers, source);
|
||||
}
|
||||
auto releaseType = mouseEvent.type == QEvent::NonClientAreaMouseMove ?
|
||||
QEvent::NonClientAreaMouseButtonRelease : QEvent::MouseButtonRelease;
|
||||
QWindowSystemInterface::handleMouseEvent(window, device, clientPosition, globalPosition, buttons, m_lastEventButton,
|
||||
releaseType, keyModifiers, source);
|
||||
}
|
||||
m_lastEventType = mouseEvent.type;
|
||||
m_lastEventButton = mouseEvent.button;
|
||||
|
||||
if (mouseEvent.type >= QEvent::NonClientAreaMouseMove && mouseEvent.type <= QEvent::NonClientAreaMouseButtonDblClick) {
|
||||
QWindowSystemInterface::handleFrameStrutMouseEvent(window, device, clientPosition,
|
||||
QWindowSystemInterface::handleMouseEvent(window, device, clientPosition,
|
||||
globalPosition, buttons,
|
||||
mouseEvent.button, mouseEvent.type,
|
||||
keyModifiers, source);
|
||||
|
@ -820,19 +820,16 @@ bool QWindowsPointerHandler::translateMouseEvent(QWindow *window,
|
||||
if (m_lastEventType == QEvent::NonClientAreaMouseButtonPress
|
||||
&& (mouseEvent.type == QEvent::NonClientAreaMouseMove || mouseEvent.type == QEvent::MouseMove)
|
||||
&& (m_lastEventButton & mouseButtons) == 0) {
|
||||
if (mouseEvent.type == QEvent::NonClientAreaMouseMove) {
|
||||
QWindowSystemInterface::handleFrameStrutMouseEvent(window, device, localPos, globalPos, mouseButtons, m_lastEventButton,
|
||||
QEvent::NonClientAreaMouseButtonRelease, keyModifiers, source);
|
||||
} else {
|
||||
QWindowSystemInterface::handleMouseEvent(window, device, localPos, globalPos, mouseButtons, m_lastEventButton,
|
||||
QEvent::MouseButtonRelease, keyModifiers, source);
|
||||
}
|
||||
auto releaseType = mouseEvent.type == QEvent::NonClientAreaMouseMove ?
|
||||
QEvent::NonClientAreaMouseButtonRelease : QEvent::MouseButtonRelease;
|
||||
QWindowSystemInterface::handleMouseEvent(window, device, localPos, globalPos, mouseButtons, m_lastEventButton,
|
||||
releaseType, keyModifiers, source);
|
||||
}
|
||||
m_lastEventType = mouseEvent.type;
|
||||
m_lastEventButton = mouseEvent.button;
|
||||
|
||||
if (mouseEvent.type >= QEvent::NonClientAreaMouseMove && mouseEvent.type <= QEvent::NonClientAreaMouseButtonDblClick) {
|
||||
QWindowSystemInterface::handleFrameStrutMouseEvent(window, device, localPos, globalPos, mouseButtons,
|
||||
QWindowSystemInterface::handleMouseEvent(window, device, localPos, globalPos, mouseButtons,
|
||||
mouseEvent.button, mouseEvent.type, keyModifiers, source);
|
||||
return false; // Allow further event processing
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user