91 using namespace Qt::StringLiterals;
100 QTabletEvent *ev =
static_cast<QTabletEvent*
>(event);
101 const bool newTabletIsHovering = ev->buttons() == Qt::NoButton;
102 const bool newTabletIsPressed = !newTabletIsHovering;
114#ifdef KRITA_ENABLE_MISSING_PROXIMITY_ENTER_WORKAROUND
116 warnInputEater <<
"WARNING: received a tablet event while the tablet is not in proximity! Activating a workaround...";
117 missingTabletProximityEventsWorkaround = MissingTabletProximityEnterWorkaround();
119 warnInputEater <<
"WARNING: received a delayed tablet proximity event, disabling the workaround...";
120 missingTabletProximityEventsWorkaround = std::nullopt;
121 }
else if (missingTabletProximityEventsWorkaround) {
122 missingTabletProximityEventsWorkaround->notifyTabletEventArrived();
127#ifdef KRITA_ENABLE_MISSING_PROXIMITY_ENTER_WORKAROUND
129 missingTabletProximityEventsWorkaround->notifyMouseEventArrived();
130 if (missingTabletProximityEventsWorkaround->shouldForgetAboutTabletInProximity()) {
135 missingTabletProximityEventsWorkaround = std::nullopt;
140 if (event->type() == QEvent::FocusOut ||
141 event->type() == QEvent::Leave ||
164#ifdef KRITA_ENABLE_MISSING_PROXIMITY_ENTER_WORKAROUND
165 missingTabletProximityEventsWorkaround = std::nullopt;
175 bool assumeTouchStarted =
event->type() == QEvent::TouchBegin;
177 if (!assumeTouchStarted && event->type() == QEvent::TouchUpdate) {
178 QTouchEvent *touchEvent =
static_cast<QTouchEvent*
>(event);
180#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
181 using DeviceType = QInputDevice::DeviceType;
183 using DeviceType = QTouchDevice::DeviceType;
186 if (touchEvent->device()->type() == DeviceType::TouchPad) {
204 dbgInputEater <<
"Received a TouchUpdate for a touchpad device on a non-MacOS system!";
207 assumeTouchStarted =
true;
211 if (assumeTouchStarted) {
218 if (event->type() == QEvent::TouchEnd ||
219 event->type() == QEvent::TouchCancel) {
229 && (
static_cast<QMouseEvent*
>(event)->button() == Qt::LeftButton)) {
236 if (event->type() == QEvent::TabletPress ||
237 event->type() == QEvent::TabletRelease) {
239 QTabletEvent *te =
static_cast<QTabletEvent*
>(event);
240 if (te->button() != Qt::LeftButton) {
244 }
else if (event->type() == QEvent::MouseButtonPress ||
245 event->type() == QEvent::MouseButtonRelease ||
246 event->type() == QEvent::MouseButtonDblClick) {
248 QMouseEvent *me =
static_cast<QMouseEvent*
>(event);
249 if (me->button() != Qt::LeftButton) {
255 const bool shouldEatMouseEvents =
268 (shouldEatMouseEvents
272 || (
static_cast<QMouseEvent*
>(event)->
source() != Qt::MouseEventNotSynthesized)
280 reasons.setFlag(
BlockedBySynthetic,
static_cast<QMouseEvent*
>(event)->source() != Qt::MouseEventNotSynthesized);
285 debugEvent<QMouseEvent>(event, reasons);
291 if (event->type() == QEvent::TouchBegin &&
299 debugEvent<QTouchEvent>(event, reasons);
323 debugEvent<QNativeGestureEvent>(event,
NotBlocked);