Krita Source Code Documentation
Loading...
Searching...
No Matches
KisInputManager::Private Class Reference

#include <kis_input_manager_p.h>

Classes

class  CanvasSwitcher
 
struct  EventEater
 
class  ProximityNotifier
 
class  TabletLatencyTracker
 

Public Types

typedef QList< PriorityPairPriorityList
 
typedef QPair< int, QPointer< QObject > > PriorityPair
 

Public Member Functions

void addKeyShortcut (KisAbstractInputAction *action, int index, const QList< Qt::Key > &keys)
 
bool addNativeGestureShortcut (KisAbstractInputAction *action, int index, KisShortcutConfiguration::GestureAction gesture)
 
void addStrokeShortcut (KisAbstractInputAction *action, int index, const QList< Qt::Key > &modifiers, Qt::MouseButtons buttons)
 
void addTouchShortcut (KisAbstractInputAction *action, int index, KisShortcutConfiguration::GestureAction gesture)
 
void addWheelShortcut (KisAbstractInputAction *action, int index, const QList< Qt::Key > &modifiers, KisShortcutConfiguration::MouseWheelMovement wheelAction)
 
void allowMouseEvents ()
 
void blockMouseEvents ()
 
template<class Event , bool useBlocking>
void debugEvent (QEvent *event)
 
void eatOneMousePress ()
 
void fixShortcutMatcherModifiersState ()
 
void fixShortcutMatcherModifiersState (QVector< Qt::Key > newKeys, Qt::KeyboardModifiers modifiers)
 
bool handleCompressedTabletEvent (QEvent *event)
 
bool ignoringQtCursorEvents ()
 
 Private (KisInputManager *qq)
 
bool processUnhandledEvent (QEvent *event)
 
void resetCompressor ()
 
void setMaskSyntheticEvents (bool value)
 
void setupActions ()
 
void startBlockingTouch ()
 
void stopBlockingTouch ()
 

Public Attributes

int accumulatedScrollDelta = 0
 
QPointer< KisCanvas2canvas
 
CanvasSwitcher canvasSwitcher
 
QScopedPointer< QEvent > compressedMoveEvent
 
bool containsPointer = false
 
KisToolInvocationActiondefaultInputAction = 0
 
EventEater eventEater
 
QObject * eventsReceiver = 0
 
bool forwardAllEventsToTool = false
 
KisShortcutMatcher matcher
 
KisSignalCompressor moveEventCompressor
 
QScopedPointer< QEvent > originatingTouchBeginEvent
 
bool popupWasActive = false
 
KisPopupWidgetInterfacepopupWidget
 
QPointF previousPos
 
PriorityList priorityEventFilter
 
int priorityEventFilterSeqNo
 
KisInputManagerq
 
bool shouldSynchronizeOnNextKeyPress = false
 
KisSharedPtr< TabletLatencyTrackertabletLatencyTracker
 
bool testingAcceptCompressedTabletEvents = false
 
bool testingCompressBrushEvents = false
 
QPointer< KisToolProxytoolProxy
 
bool touchHasBlockedPressEvents = false
 
bool touchStrokeStarted = false
 
bool useUnbalancedKeyPressEventWorkaround = false
 

Detailed Description

Definition at line 29 of file kis_input_manager_p.h.

Member Typedef Documentation

◆ PriorityList

◆ PriorityPair

typedef QPair<int, QPointer<QObject> > KisInputManager::Private::PriorityPair

Definition at line 64 of file kis_input_manager_p.h.

Constructor & Destructor Documentation

◆ Private()

KisInputManager::Private::Private ( KisInputManager * qq)

On Windows and Linux we have a proper fix for this bug patched into our local version of Qt. We don't have a fix for macOS

In Linux distributions Qt is not patched, so we should use workaround for them

Definition at line 197 of file kis_input_manager_p.cpp.

198 : q(qq)
199 , moveEventCompressor(10 /* ms */,
203 , popupWidget(nullptr)
204 , canvasSwitcher(this, qq)
205{
206 KisConfig cfg(true);
207
208 moveEventCompressor.setDelay(cfg.tabletEventsDelay());
209 testingAcceptCompressedTabletEvents = cfg.testingAcceptCompressedTabletEvents();
210 testingCompressBrushEvents = cfg.testingCompressBrushEvents();
211
212 if (cfg.trackTabletEventLatency()) {
213 tabletLatencyTracker = new TabletLatencyTracker();
214 }
215
217 [this] () {
218 return this->canvas ? this->canvas->inputActionGroupsMaskInterface()->inputActionGroupsMask() : AllActionGroup;
219 });
220
226#ifdef Q_OS_MACOS
228#endif
229
234#if defined Q_OS_LINUX && !KRITA_QT_HAS_UNBALANCED_KEY_PRESS_RELEASE_PATCH
236#endif
237
238 if (qEnvironmentVariableIsSet("KRITA_FIX_UNBALANCED_KEY_EVENTS")) {
239 useUnbalancedKeyPressEventWorkaround = qEnvironmentVariableIntValue("KRITA_FIX_UNBALANCED_KEY_EVENTS");
240 }
241}
@ AllActionGroup
KisSignalCompressor moveEventCompressor
QPointer< KisCanvas2 > canvas
KisSharedPtr< TabletLatencyTracker > tabletLatencyTracker
KisPopupWidgetInterface * popupWidget
void setInputActionGroupsMaskCallback(std::function< KisInputActionGroupsMask()> func)
void setDelay(std::function< bool()> idleCallback, int idleDelay, int timeout)

References AllActionGroup, canvas, matcher, moveEventCompressor, KisSignalCompressor::setDelay(), KisShortcutMatcher::setInputActionGroupsMaskCallback(), KisConfig::tabletEventsDelay(), tabletLatencyTracker, testingAcceptCompressedTabletEvents, KisConfig::testingAcceptCompressedTabletEvents(), testingCompressBrushEvents, KisConfig::testingCompressBrushEvents(), KisConfig::trackTabletEventLatency(), and useUnbalancedKeyPressEventWorkaround.

Member Function Documentation

◆ addKeyShortcut()

void KisInputManager::Private::addKeyShortcut ( KisAbstractInputAction * action,
int index,
const QList< Qt::Key > & keys )

Definition at line 502 of file kis_input_manager_p.cpp.

504{
505 if (keys.size() == 0) return;
506
507 KisSingleActionShortcut *keyShortcut =
508 new KisSingleActionShortcut(action, index);
509
510 //Note: Ordering is important here, Shift + V is different from V + Shift,
511 //which is the reason we use the last key here since most users will enter
512 //shortcuts as "Shift + V". Ideally this should not happen, but this is
513 //the way the shortcut matcher is currently implemented.
514 QList<Qt::Key> allKeys = keys;
515 Qt::Key key = allKeys.takeLast();
516 QSet<Qt::Key> modifiers = QSet<Qt::Key>(allKeys.begin(), allKeys.end());
517 keyShortcut->setKey(modifiers, key);
518 matcher.addShortcut(keyShortcut);
519}
void addShortcut(KisSingleActionShortcut *shortcut)
void setKey(const QSet< Qt::Key > &modifiers, Qt::Key key)

References KisShortcutMatcher::addShortcut(), matcher, and KisSingleActionShortcut::setKey().

◆ addNativeGestureShortcut()

bool KisInputManager::Private::addNativeGestureShortcut ( KisAbstractInputAction * action,
int index,
KisShortcutConfiguration::GestureAction gesture )

Definition at line 592 of file kis_input_manager_p.cpp.

593{
594 // Qt5 only implements QNativeGestureEvent for macOS
595 Qt::NativeGestureType type;
596 switch (gesture) {
597#ifdef Q_OS_MACOS
598 case KisShortcutConfiguration::PinchGesture:
599 type = Qt::ZoomNativeGesture;
600 break;
601 case KisShortcutConfiguration::PanGesture:
602 type = Qt::PanNativeGesture;
603 break;
604 case KisShortcutConfiguration::RotateGesture:
605 type = Qt::RotateNativeGesture;
606 break;
607 case KisShortcutConfiguration::SmartZoomGesture:
608 type = Qt::SmartZoomNativeGesture;
609 break;
610#endif
611 default:
612 return false;
613 }
614
615 KisNativeGestureShortcut *shortcut = new KisNativeGestureShortcut(action, index, type);
616 matcher.addShortcut(shortcut);
617 return true;
618}

References KisShortcutMatcher::addShortcut(), and matcher.

◆ addStrokeShortcut()

void KisInputManager::Private::addStrokeShortcut ( KisAbstractInputAction * action,
int index,
const QList< Qt::Key > & modifiers,
Qt::MouseButtons buttons )

Definition at line 473 of file kis_input_manager_p.cpp.

476{
477 KisStrokeShortcut *strokeShortcut =
478 new KisStrokeShortcut(action, index);
479
480 QSet<Qt::MouseButton> buttonSet;
481 if(buttons & Qt::LeftButton) {
482 buttonSet << Qt::LeftButton;
483 }
484 if(buttons & Qt::RightButton) {
485 buttonSet << Qt::RightButton;
486 }
487 if(buttons & Qt::MiddleButton) {
488 buttonSet << Qt::MiddleButton;
489 }
490
491BOOST_PP_REPEAT_FROM_TO(1, 25, EXTRA_BUTTON, _)
492
493 if (!buttonSet.empty()) {
494 strokeShortcut->setButtons(QSet<Qt::Key>(modifiers.cbegin(), modifiers.cend()), buttonSet);
495 matcher.addShortcut(strokeShortcut);
496 }
497 else {
498 delete strokeShortcut;
499 }
500}
void setButtons(const QSet< Qt::Key > &modifiers, const QSet< Qt::MouseButton > &buttons)
#define EXTRA_BUTTON(z, n, _)
QString buttons(const T &ev)
#define _(s)
Definition xcftools.h:32

References _, KisShortcutMatcher::addShortcut(), buttons(), EXTRA_BUTTON, matcher, and KisStrokeShortcut::setButtons().

◆ addTouchShortcut()

void KisInputManager::Private::addTouchShortcut ( KisAbstractInputAction * action,
int index,
KisShortcutConfiguration::GestureAction gesture )

Definition at line 552 of file kis_input_manager_p.cpp.

553{
554 KisTouchShortcut *shortcut = new KisTouchShortcut(action, index, gesture);
555 dbgKrita << "TouchAction:" << action->name();
556 switch(gesture) {
557#ifndef Q_OS_MACOS
560 // Touch painting takes precedence over one-finger touch shortcuts, so
561 // disable this type of shortcut when touch painting is active.
562 shortcut->setDisableOnTouchPainting(true);
563 shortcut->setMinimumTouchPoints(1);
564 shortcut->setMaximumTouchPoints(1);
565 break;
568 shortcut->setMinimumTouchPoints(2);
569 shortcut->setMaximumTouchPoints(2);
570 break;
573 shortcut->setMinimumTouchPoints(3);
574 shortcut->setMaximumTouchPoints(3);
575 break;
578 shortcut->setMinimumTouchPoints(4);
579 shortcut->setMaximumTouchPoints(4);
580 break;
583 shortcut->setMinimumTouchPoints(5);
584 shortcut->setMaximumTouchPoints(5);
585#endif
586 default:
587 break;
588 }
589 matcher.addShortcut(shortcut);
590}
The KisTouchShortcut class only handles touch gestures it does not handle tool invocation i....
void setMaximumTouchPoints(int max)
void setDisableOnTouchPainting(bool disableOnTouchPainting)
void setMinimumTouchPoints(int min)
#define dbgKrita
Definition kis_debug.h:45

References KisShortcutMatcher::addShortcut(), dbgKrita, KisShortcutConfiguration::FiveFingerDrag, KisShortcutConfiguration::FiveFingerTap, KisShortcutConfiguration::FourFingerDrag, KisShortcutConfiguration::FourFingerTap, matcher, KisAbstractInputAction::name, KisShortcutConfiguration::OneFingerDrag, KisShortcutConfiguration::OneFingerTap, KisTouchShortcut::setDisableOnTouchPainting(), KisTouchShortcut::setMaximumTouchPoints(), KisTouchShortcut::setMinimumTouchPoints(), KisShortcutConfiguration::ThreeFingerDrag, KisShortcutConfiguration::ThreeFingerTap, KisShortcutConfiguration::TwoFingerDrag, and KisShortcutConfiguration::TwoFingerTap.

◆ addWheelShortcut()

void KisInputManager::Private::addWheelShortcut ( KisAbstractInputAction * action,
int index,
const QList< Qt::Key > & modifiers,
KisShortcutConfiguration::MouseWheelMovement wheelAction )

Definition at line 521 of file kis_input_manager_p.cpp.

524{
525 QScopedPointer<KisSingleActionShortcut> keyShortcut(
526 new KisSingleActionShortcut(action, index));
527
529 switch(wheelAction) {
532 break;
535 break;
538 break;
541 break;
544 break;
545 default:
546 return;
547 }
548 keyShortcut->setWheel(QSet<Qt::Key>(modifiers.begin(), modifiers.end()), a);
549 matcher.addShortcut(keyShortcut.take());
550}
@ WheelTrackpad
A pan movement on a trackpad.
@ WheelDown
Downwards movement, toward the user.
@ WheelUp
Upwards movement, away from the user.
@ WheelDown
Mouse wheel moves down.
@ WheelTrackpad
A pan movement on a trackpad.
@ WheelRight
Mouse wheel moves right.
@ WheelLeft
Mouse wheel moves left.

References KisShortcutMatcher::addShortcut(), matcher, KisShortcutConfiguration::WheelDown, KisSingleActionShortcut::WheelDown, KisShortcutConfiguration::WheelLeft, KisSingleActionShortcut::WheelLeft, KisShortcutConfiguration::WheelRight, KisSingleActionShortcut::WheelRight, KisShortcutConfiguration::WheelTrackpad, KisSingleActionShortcut::WheelTrackpad, KisShortcutConfiguration::WheelUp, and KisSingleActionShortcut::WheelUp.

◆ allowMouseEvents()

void KisInputManager::Private::allowMouseEvents ( )

On Windows tablet events may arrive asynchronously to the mouse events (in WinTab mode). The problem is that Qt generates Enter/Leave and FocusIn/Out events via mouse events only. It means that TabletPress may come much before Enter and FocusIn event and start the stroke. In such a case we shouldn't unblock mouse events.

See https://bugs.kde.org/show_bug.cgi?id=417040

PS: Ideally, we should fix Qt to generate Enter/Leave and FocusIn/Out events based on tablet events as well, but it is a lot of work.

Definition at line 668 of file kis_input_manager_p.cpp.

References KisInputManager::Private::EventEater::deactivate(), eventEater, KisShortcutMatcher::hasRunningShortcut(), KisInputManager::Private::EventEater::hungry, and matcher.

◆ blockMouseEvents()

void KisInputManager::Private::blockMouseEvents ( )

◆ debugEvent()

template<class Event , bool useBlocking>
void KisInputManager::Private::debugEvent ( QEvent * event)
inline

Definition at line 89 of file kis_input_manager_p.h.

90 {
92
93 QString msg1 = useBlocking && ignoringQtCursorEvents() ? "[BLOCKED] " : "[ ]";
94 Event *specificEvent = static_cast<Event*>(event);
95 dbgTablet << KisTabletDebugger::instance()->eventToString(*specificEvent, msg1);
96 }
static bool debugEnabled()
Linethickness.
QString eventToString(const QMouseEvent &ev, const QString &prefix)
static KisTabletDebugger * instance()
#define dbgTablet
Definition kis_debug.h:59

References dbgTablet, debugEnabled(), KisTabletDebugger::eventToString(), ignoringQtCursorEvents(), and KisTabletDebugger::instance().

◆ eatOneMousePress()

void KisInputManager::Private::eatOneMousePress ( )

◆ fixShortcutMatcherModifiersState() [1/2]

void KisInputManager::Private::fixShortcutMatcherModifiersState ( )

Definition at line 729 of file kis_input_manager_p.cpp.

730{
732
733 QVector<Qt::Key> newKeys;
734 Qt::KeyboardModifiers modifiers = mapper.queryStandardModifiers();
735 Q_FOREACH (Qt::Key key, mapper.queryExtendedModifiers()) {
736 QKeyEvent kevent(QEvent::ShortcutOverride, key, modifiers);
738 }
739
740 fixShortcutMatcherModifiersState(newKeys, modifiers);
741}
static Qt::Key workaroundShiftAltMetaHell(const QKeyEvent *keyEvent)

References fixShortcutMatcherModifiersState(), KisExtendedModifiersMapper::queryExtendedModifiers(), KisExtendedModifiersMapper::queryStandardModifiers(), and KisExtendedModifiersMapper::workaroundShiftAltMetaHell().

◆ fixShortcutMatcherModifiersState() [2/2]

void KisInputManager::Private::fixShortcutMatcherModifiersState ( QVector< Qt::Key > newKeys,
Qt::KeyboardModifiers modifiers )

Definition at line 743 of file kis_input_manager_p.cpp.

744{
746
747 matcher.handlePolledKeys(newKeys);
748
749 for (auto it = danglingKeys.begin(); it != danglingKeys.end();) {
750 if (newKeys.contains(*it)) {
751 newKeys.removeOne(*it);
752 it = danglingKeys.erase(it);
753 } else {
754 ++it;
755 }
756 }
757
758 Q_FOREACH (Qt::Key key, danglingKeys) {
759 QKeyEvent kevent(QEvent::KeyRelease, key, modifiers);
760 processUnhandledEvent(&kevent);
761 }
762
763 Q_FOREACH (Qt::Key key, newKeys) {
764 // just replay the whole sequence
765 {
766 QKeyEvent kevent(QEvent::ShortcutOverride, key, modifiers);
767 processUnhandledEvent(&kevent);
768 }
769 {
770 QKeyEvent kevent(QEvent::KeyPress, key, modifiers);
771 processUnhandledEvent(&kevent);
772 }
773 }
774}
bool processUnhandledEvent(QEvent *event)
QVector< Qt::Key > debugPressedKeys() const
void handlePolledKeys(const QVector< Qt::Key > &keys)

References KisShortcutMatcher::debugPressedKeys(), KisShortcutMatcher::handlePolledKeys(), matcher, and processUnhandledEvent().

◆ handleCompressedTabletEvent()

bool KisInputManager::Private::handleCompressedTabletEvent ( QEvent * event)

Definition at line 714 of file kis_input_manager_p.cpp.

715{
716 bool retval = false;
717
718 if (event->type() == QTouchEvent::TouchUpdate && touchHasBlockedPressEvents) {
719 matcher.touchUpdateEvent((QTouchEvent *)event);
720 } else if (!matcher.pointerMoved(event) && toolProxy && event->type() != QTouchEvent::TouchUpdate) {
721 toolProxy->forwardHoverEvent(event);
722 }
723 retval = true;
724 event->setAccepted(true);
725
726 return retval;
727}
QPointer< KisToolProxy > toolProxy
bool touchUpdateEvent(QTouchEvent *event)
bool pointerMoved(QEvent *event)

References matcher, KisShortcutMatcher::pointerMoved(), toolProxy, touchHasBlockedPressEvents, and KisShortcutMatcher::touchUpdateEvent().

◆ ignoringQtCursorEvents()

bool KisInputManager::Private::ignoringQtCursorEvents ( )

Definition at line 187 of file kis_input_manager_p.cpp.

188{
189 return eventEater.hungry;
190}

References eventEater, and KisInputManager::Private::EventEater::hungry.

◆ processUnhandledEvent()

bool KisInputManager::Private::processUnhandledEvent ( QEvent * event)

Definition at line 638 of file kis_input_manager_p.cpp.

639{
640 bool retval = false;
641
643 event->type() == QEvent::KeyPress ||
644 event->type() == QEvent::KeyRelease) {
645
647 retval = true;
648 }
649
650 return retval && !forwardAllEventsToTool;
651}
KisToolInvocationAction * defaultInputAction

References defaultInputAction, forwardAllEventsToTool, and KisToolInvocationAction::processUnhandledEvent().

◆ resetCompressor()

void KisInputManager::Private::resetCompressor ( )

◆ setMaskSyntheticEvents()

void KisInputManager::Private::setMaskSyntheticEvents ( bool value)

◆ setupActions()

void KisInputManager::Private::setupActions ( )

Definition at line 620 of file kis_input_manager_p.cpp.

621{
623 Q_FOREACH (KisAbstractInputAction *action, actions) {
624 KisToolInvocationAction *toolAction =
625 dynamic_cast<KisToolInvocationAction*>(action);
626
627 if(toolAction) {
628 defaultInputAction = toolAction;
629 }
630 }
631
632 connect(KisInputProfileManager::instance(), SIGNAL(currentProfileChanged()), q, SLOT(profileChanged()));
633 if(KisInputProfileManager::instance()->currentProfile()) {
634 q->profileChanged();
635 }
636}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
Abstract base class for input actions.
QList< KisAbstractInputAction * > actions
static KisInputProfileManager * instance()
Tool Invocation action of KisAbstractInputAction.

References KisInputProfileManager::actions, connect(), defaultInputAction, KisInputProfileManager::instance(), KisInputManager::profileChanged(), and q.

◆ startBlockingTouch()

void KisInputManager::Private::startBlockingTouch ( )

◆ stopBlockingTouch()

void KisInputManager::Private::stopBlockingTouch ( )

Member Data Documentation

◆ accumulatedScrollDelta

int KisInputManager::Private::accumulatedScrollDelta = 0

Definition at line 156 of file kis_input_manager_p.h.

◆ canvas

QPointer<KisCanvas2> KisInputManager::Private::canvas

Definition at line 46 of file kis_input_manager_p.h.

◆ canvasSwitcher

CanvasSwitcher KisInputManager::Private::canvasSwitcher

Definition at line 125 of file kis_input_manager_p.h.

◆ compressedMoveEvent

QScopedPointer<QEvent> KisInputManager::Private::compressedMoveEvent

Definition at line 60 of file kis_input_manager_p.h.

◆ containsPointer

bool KisInputManager::Private::containsPointer = false

Definition at line 154 of file kis_input_manager_p.h.

◆ defaultInputAction

KisToolInvocationAction* KisInputManager::Private::defaultInputAction = 0

Definition at line 56 of file kis_input_manager_p.h.

◆ eventEater

EventEater KisInputManager::Private::eventEater

Definition at line 152 of file kis_input_manager_p.h.

◆ eventsReceiver

QObject* KisInputManager::Private::eventsReceiver = 0

Definition at line 58 of file kis_input_manager_p.h.

◆ forwardAllEventsToTool

bool KisInputManager::Private::forwardAllEventsToTool = false

Definition at line 49 of file kis_input_manager_p.h.

◆ matcher

KisShortcutMatcher KisInputManager::Private::matcher

Definition at line 54 of file kis_input_manager_p.h.

◆ moveEventCompressor

KisSignalCompressor KisInputManager::Private::moveEventCompressor

Definition at line 59 of file kis_input_manager_p.h.

◆ originatingTouchBeginEvent

QScopedPointer<QEvent> KisInputManager::Private::originatingTouchBeginEvent

Definition at line 73 of file kis_input_manager_p.h.

◆ popupWasActive

bool KisInputManager::Private::popupWasActive = false

Definition at line 70 of file kis_input_manager_p.h.

◆ popupWidget

KisPopupWidgetInterface* KisInputManager::Private::popupWidget

Definition at line 78 of file kis_input_manager_p.h.

◆ previousPos

QPointF KisInputManager::Private::previousPos

Definition at line 72 of file kis_input_manager_p.h.

◆ priorityEventFilter

PriorityList KisInputManager::Private::priorityEventFilter

Definition at line 66 of file kis_input_manager_p.h.

◆ priorityEventFilterSeqNo

int KisInputManager::Private::priorityEventFilterSeqNo

Definition at line 67 of file kis_input_manager_p.h.

◆ q

KisInputManager* KisInputManager::Private::q

Definition at line 44 of file kis_input_manager_p.h.

◆ shouldSynchronizeOnNextKeyPress

bool KisInputManager::Private::shouldSynchronizeOnNextKeyPress = false

Definition at line 76 of file kis_input_manager_p.h.

◆ tabletLatencyTracker

KisSharedPtr<TabletLatencyTracker> KisInputManager::Private::tabletLatencyTracker

Definition at line 164 of file kis_input_manager_p.h.

◆ testingAcceptCompressedTabletEvents

bool KisInputManager::Private::testingAcceptCompressedTabletEvents = false

Definition at line 61 of file kis_input_manager_p.h.

◆ testingCompressBrushEvents

bool KisInputManager::Private::testingCompressBrushEvents = false

Definition at line 62 of file kis_input_manager_p.h.

◆ toolProxy

QPointer<KisToolProxy> KisInputManager::Private::toolProxy

Definition at line 47 of file kis_input_manager_p.h.

◆ touchHasBlockedPressEvents

bool KisInputManager::Private::touchHasBlockedPressEvents = false

Definition at line 52 of file kis_input_manager_p.h.

◆ touchStrokeStarted

bool KisInputManager::Private::touchStrokeStarted = false

Definition at line 69 of file kis_input_manager_p.h.

◆ useUnbalancedKeyPressEventWorkaround

bool KisInputManager::Private::useUnbalancedKeyPressEventWorkaround = false

Definition at line 75 of file kis_input_manager_p.h.


The documentation for this class was generated from the following files: