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::MouseButton button, QEvent::Type type, Qt::KeyboardModifiers mods,
|
||||||
Qt::MouseEventSource source)
|
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.");
|
"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 localPos = QHighDpi::fromNativeLocalPosition(local, window);
|
||||||
auto globalPos = QHighDpi::fromNativeGlobalPosition(global, window);
|
auto globalPos = QHighDpi::fromNativeGlobalPosition(global, window);
|
||||||
|
|
||||||
return handleWindowSystemEvent<QWindowSystemInterfacePrivate::MouseEvent, Delivery>(window,
|
return handleWindowSystemEvent<QWindowSystemInterfacePrivate::MouseEvent, Delivery>(window,
|
||||||
timestamp, localPos, globalPos, state, mods, button, type, source, false, device);
|
timestamp, localPos, globalPos, state, mods, button, type, source, isNonClientArea, 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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QWindowSystemInterface::handleShortcutEvent(QWindow *window, ulong timestamp, int keyCode, Qt::KeyboardModifiers modifiers, quint32 nativeScanCode,
|
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::KeyboardModifiers mods = Qt::NoModifier,
|
||||||
Qt::MouseEventSource source = Qt::MouseEventNotSynthesized);
|
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,
|
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);
|
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;
|
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);
|
timestamp, qtWindowPoint, qtScreenPoint, m_frameStrutButtons, button, eventType);
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
|
@ -1466,15 +1466,10 @@ void QWindowsContext::handleExitSizeMove(QWindow *window)
|
|||||||
? QEvent::MouseButtonRelease : QEvent::NonClientAreaMouseButtonRelease;
|
? QEvent::MouseButtonRelease : QEvent::NonClientAreaMouseButtonRelease;
|
||||||
for (Qt::MouseButton button : {Qt::LeftButton, Qt::RightButton, Qt::MiddleButton}) {
|
for (Qt::MouseButton button : {Qt::LeftButton, Qt::RightButton, Qt::MiddleButton}) {
|
||||||
if (appButtons.testFlag(button) && !currentButtons.testFlag(button)) {
|
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,
|
QWindowSystemInterface::handleMouseEvent(window, localPos, globalPos,
|
||||||
currentButtons, button, type, keyboardModifiers);
|
currentButtons, button, type, keyboardModifiers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (d->m_systemInfo & QWindowsContext::SI_SupportsPointer)
|
if (d->m_systemInfo & QWindowsContext::SI_SupportsPointer)
|
||||||
d->m_pointerHandler.clearEvents();
|
d->m_pointerHandler.clearEvents();
|
||||||
else
|
else
|
||||||
|
@ -286,19 +286,16 @@ bool QWindowsMouseHandler::translateMouseEvent(QWindow *window, HWND hwnd,
|
|||||||
if (m_lastEventType == QEvent::NonClientAreaMouseButtonPress
|
if (m_lastEventType == QEvent::NonClientAreaMouseButtonPress
|
||||||
&& (mouseEvent.type == QEvent::NonClientAreaMouseMove || mouseEvent.type == QEvent::MouseMove)
|
&& (mouseEvent.type == QEvent::NonClientAreaMouseMove || mouseEvent.type == QEvent::MouseMove)
|
||||||
&& (m_lastEventButton & buttons) == 0) {
|
&& (m_lastEventButton & buttons) == 0) {
|
||||||
if (mouseEvent.type == QEvent::NonClientAreaMouseMove) {
|
auto releaseType = mouseEvent.type == QEvent::NonClientAreaMouseMove ?
|
||||||
QWindowSystemInterface::handleFrameStrutMouseEvent(window, device, clientPosition, globalPosition, buttons, m_lastEventButton,
|
QEvent::NonClientAreaMouseButtonRelease : QEvent::MouseButtonRelease;
|
||||||
QEvent::NonClientAreaMouseButtonRelease, keyModifiers, source);
|
|
||||||
} else {
|
|
||||||
QWindowSystemInterface::handleMouseEvent(window, device, clientPosition, globalPosition, buttons, m_lastEventButton,
|
QWindowSystemInterface::handleMouseEvent(window, device, clientPosition, globalPosition, buttons, m_lastEventButton,
|
||||||
QEvent::MouseButtonRelease, keyModifiers, source);
|
releaseType, keyModifiers, source);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
m_lastEventType = mouseEvent.type;
|
m_lastEventType = mouseEvent.type;
|
||||||
m_lastEventButton = mouseEvent.button;
|
m_lastEventButton = mouseEvent.button;
|
||||||
|
|
||||||
if (mouseEvent.type >= QEvent::NonClientAreaMouseMove && mouseEvent.type <= QEvent::NonClientAreaMouseButtonDblClick) {
|
if (mouseEvent.type >= QEvent::NonClientAreaMouseMove && mouseEvent.type <= QEvent::NonClientAreaMouseButtonDblClick) {
|
||||||
QWindowSystemInterface::handleFrameStrutMouseEvent(window, device, clientPosition,
|
QWindowSystemInterface::handleMouseEvent(window, device, clientPosition,
|
||||||
globalPosition, buttons,
|
globalPosition, buttons,
|
||||||
mouseEvent.button, mouseEvent.type,
|
mouseEvent.button, mouseEvent.type,
|
||||||
keyModifiers, source);
|
keyModifiers, source);
|
||||||
|
@ -820,19 +820,16 @@ bool QWindowsPointerHandler::translateMouseEvent(QWindow *window,
|
|||||||
if (m_lastEventType == QEvent::NonClientAreaMouseButtonPress
|
if (m_lastEventType == QEvent::NonClientAreaMouseButtonPress
|
||||||
&& (mouseEvent.type == QEvent::NonClientAreaMouseMove || mouseEvent.type == QEvent::MouseMove)
|
&& (mouseEvent.type == QEvent::NonClientAreaMouseMove || mouseEvent.type == QEvent::MouseMove)
|
||||||
&& (m_lastEventButton & mouseButtons) == 0) {
|
&& (m_lastEventButton & mouseButtons) == 0) {
|
||||||
if (mouseEvent.type == QEvent::NonClientAreaMouseMove) {
|
auto releaseType = mouseEvent.type == QEvent::NonClientAreaMouseMove ?
|
||||||
QWindowSystemInterface::handleFrameStrutMouseEvent(window, device, localPos, globalPos, mouseButtons, m_lastEventButton,
|
QEvent::NonClientAreaMouseButtonRelease : QEvent::MouseButtonRelease;
|
||||||
QEvent::NonClientAreaMouseButtonRelease, keyModifiers, source);
|
|
||||||
} else {
|
|
||||||
QWindowSystemInterface::handleMouseEvent(window, device, localPos, globalPos, mouseButtons, m_lastEventButton,
|
QWindowSystemInterface::handleMouseEvent(window, device, localPos, globalPos, mouseButtons, m_lastEventButton,
|
||||||
QEvent::MouseButtonRelease, keyModifiers, source);
|
releaseType, keyModifiers, source);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
m_lastEventType = mouseEvent.type;
|
m_lastEventType = mouseEvent.type;
|
||||||
m_lastEventButton = mouseEvent.button;
|
m_lastEventButton = mouseEvent.button;
|
||||||
|
|
||||||
if (mouseEvent.type >= QEvent::NonClientAreaMouseMove && mouseEvent.type <= QEvent::NonClientAreaMouseButtonDblClick) {
|
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);
|
mouseEvent.button, mouseEvent.type, keyModifiers, source);
|
||||||
return false; // Allow further event processing
|
return false; // Allow further event processing
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user