fix a bug where view continues to pan when window lost focus while panning
This commit is contained in:
@@ -18,6 +18,7 @@
|
|||||||
#include <QCursor>
|
#include <QCursor>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
#include <QFocusEvent>
|
||||||
#include <QFont>
|
#include <QFont>
|
||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
#include <QLinearGradient>
|
#include <QLinearGradient>
|
||||||
@@ -2361,10 +2362,22 @@ void GameWorldView::keyReleaseEvent(QKeyEvent* event)
|
|||||||
}
|
}
|
||||||
if (m_inputMapper.handleKeyRelease(event)) { return; }
|
if (m_inputMapper.handleKeyRelease(event)) { return; }
|
||||||
// Releasing Shift discards the copied building settings (REQ-BLD-COPY-CONFIG).
|
// Releasing Shift discards the copied building settings (REQ-BLD-COPY-CONFIG).
|
||||||
|
// Stays here rather than moving to the input mapper: Shift is the modifier of a
|
||||||
|
// mouse gesture, not a keyboard action of its own.
|
||||||
if (event->key() == Qt::Key_Shift) { m_copiedConfig.reset(); }
|
if (event->key() == Qt::Key_Shift) { m_copiedConfig.reset(); }
|
||||||
QOpenGLWidget::keyReleaseEvent(event);
|
QOpenGLWidget::keyReleaseEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GameWorldView::focusOutEvent(QFocusEvent* event)
|
||||||
|
{
|
||||||
|
// Without this, holding A while a modal opens (the escape menu, a schematic
|
||||||
|
// choice, game over) leaves the pan key held: the key-up goes to the dialog,
|
||||||
|
// never here, and the view pans on its own once the dialog closes. Panning runs
|
||||||
|
// on wall-clock time, so pausing does not mask it either.
|
||||||
|
m_inputMapper.releaseAll();
|
||||||
|
QOpenGLWidget::focusOutEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
void GameWorldView::mousePressEvent(QMouseEvent* event)
|
void GameWorldView::mousePressEvent(QMouseEvent* event)
|
||||||
{
|
{
|
||||||
const WorldCoordinates coordinates = getCoordinates();
|
const WorldCoordinates coordinates = getCoordinates();
|
||||||
|
|||||||
@@ -107,6 +107,10 @@ protected:
|
|||||||
void paintGL() override;
|
void paintGL() override;
|
||||||
void keyPressEvent(QKeyEvent* event) override;
|
void keyPressEvent(QKeyEvent* event) override;
|
||||||
void keyReleaseEvent(QKeyEvent* event) override;
|
void keyReleaseEvent(QKeyEvent* event) override;
|
||||||
|
// Key-up never arrives for a key that was still held when focus moved away —
|
||||||
|
// to a modal dialog, another widget, or another window. Any held action would
|
||||||
|
// otherwise stay held forever, so focus loss drops all of them.
|
||||||
|
void focusOutEvent(QFocusEvent* event) override;
|
||||||
void mousePressEvent(QMouseEvent* event) override;
|
void mousePressEvent(QMouseEvent* event) override;
|
||||||
void mouseMoveEvent(QMouseEvent* event) override;
|
void mouseMoveEvent(QMouseEvent* event) override;
|
||||||
void mouseReleaseEvent(QMouseEvent* event) override;
|
void mouseReleaseEvent(QMouseEvent* event) override;
|
||||||
|
|||||||
Reference in New Issue
Block a user