[calligra/krita-testing-kazakov] krita/ui/input: Fix hiding the brush outline when the cursor is outside the canvas
Dmitry Kazakov
dimula73 at gmail.com
Fri Jun 6 08:17:08 UTC 2014
Git commit 6eedc10af62fb369ddaee6c893e8fbfb8a15e6a5 by Dmitry Kazakov.
Committed on 06/06/2014 at 08:13.
Pushed by dkazakov into branch 'krita-testing-kazakov'.
Fix hiding the brush outline when the cursor is outside the canvas
Please check this patch on Gnome and Windows!
BUG:335649
CCMAIL:kimageshop at kde.org
M +4 -0 krita/ui/input/kis_input_manager.cpp
M +29 -3 krita/ui/input/kis_shortcut_matcher.cpp
M +12 -0 krita/ui/input/kis_shortcut_matcher.h
http://commits.kde.org/calligra/6eedc10af62fb369ddaee6c893e8fbfb8a15e6a5
diff --git a/krita/ui/input/kis_input_manager.cpp b/krita/ui/input/kis_input_manager.cpp
index 94611be..34581f8 100644
--- a/krita/ui/input/kis_input_manager.cpp
+++ b/krita/ui/input/kis_input_manager.cpp
@@ -598,6 +598,8 @@ bool KisInputManager::eventFilter(QObject* object, QEvent* event)
//Ensure we have focus so we get key events.
d->canvas->canvasWidget()->setFocus();
stop_ignore_cursor_events();
+
+ d->matcher.enterEvent();
break;
case QEvent::Leave:
d->debugEvent<QEvent, false>(event);
@@ -607,6 +609,8 @@ bool KisInputManager::eventFilter(QObject* object, QEvent* event)
* events processing right now.
*/
stop_ignore_cursor_events();
+
+ d->matcher.leaveEvent();
break;
case QEvent::FocusIn:
d->debugEvent<QEvent, false>(event);
diff --git a/krita/ui/input/kis_shortcut_matcher.cpp b/krita/ui/input/kis_shortcut_matcher.cpp
index e4796ac..178a903 100644
--- a/krita/ui/input/kis_shortcut_matcher.cpp
+++ b/krita/ui/input/kis_shortcut_matcher.cpp
@@ -43,6 +43,7 @@ public:
, readyShortcut(0)
, touchShortcut(0)
, suppressAllActions(false)
+ , cursorEntered(false)
, usingTouch(false)
{}
@@ -60,7 +61,12 @@ public:
KisTouchShortcut *touchShortcut;
bool suppressAllActions;
+ bool cursorEntered;
bool usingTouch;
+
+ inline bool actionsSuppressed() const {
+ return suppressAllActions || !cursorEntered;
+ }
};
KisShortcutMatcher::KisShortcutMatcher()
@@ -216,6 +222,26 @@ bool KisShortcutMatcher::mouseMoved(QMouseEvent *event)
return true;
}
+void KisShortcutMatcher::enterEvent()
+{
+ m_d->cursorEntered = true;
+
+ if (!m_d->runningShortcut) {
+ prepareReadyShortcuts();
+ tryActivateReadyShortcut();
+ }
+}
+
+void KisShortcutMatcher::leaveEvent()
+{
+ m_d->cursorEntered = false;
+
+ if (!m_d->runningShortcut) {
+ prepareReadyShortcuts();
+ tryActivateReadyShortcut();
+ }
+}
+
bool KisShortcutMatcher::touchBeginEvent( QTouchEvent* event )
{
Q_UNUSED(event)
@@ -313,7 +339,7 @@ bool KisShortcutMatcher::tryRunKeyShortcut(Qt::Key key, QKeyEvent *event)
template<typename T, typename U>
bool KisShortcutMatcher::tryRunSingleActionShortcutImpl(T param, U *event, const QList<Qt::Key> &keysState)
{
- if (m_d->suppressAllActions) return false;
+ if (m_d->actionsSuppressed()) return false;
KisSingleActionShortcut *goodCandidate = 0;
@@ -336,7 +362,7 @@ bool KisShortcutMatcher::tryRunSingleActionShortcutImpl(T param, U *event, const
void KisShortcutMatcher::prepareReadyShortcuts()
{
m_d->readyShortcuts.clear();
- if (m_d->suppressAllActions) return;
+ if (m_d->actionsSuppressed()) return;
foreach(KisStrokeShortcut *s, m_d->strokeShortcuts) {
if (s->matchReady(m_d->keys, m_d->buttons)) {
@@ -424,7 +450,7 @@ bool KisShortcutMatcher::tryRunTouchShortcut( QTouchEvent* event )
{
KisTouchShortcut *goodCandidate = 0;
- if (m_d->suppressAllActions)
+ if (m_d->actionsSuppressed())
return false;
foreach(KisTouchShortcut* shortcut, m_d->touchShortcuts) {
diff --git a/krita/ui/input/kis_shortcut_matcher.h b/krita/ui/input/kis_shortcut_matcher.h
index 5cc54e3..b3cd01d 100644
--- a/krita/ui/input/kis_shortcut_matcher.h
+++ b/krita/ui/input/kis_shortcut_matcher.h
@@ -166,6 +166,18 @@ public:
*/
bool mouseMoved(QMouseEvent *event);
+ /**
+ * Handle cursor's Enter event.
+ * We never eat it because it might be used by someone else
+ */
+ void enterEvent();
+
+ /**
+ * Handle cursor's Leave event.
+ * We never eat it because it might be used by someone else
+ */
+ void leaveEvent();
+
bool touchBeginEvent(QTouchEvent *event);
bool touchUpdateEvent(QTouchEvent *event);
bool touchEndEvent(QTouchEvent *event);
More information about the kimageshop
mailing list