Qt: Update SensorView to work with focus stealing

This commit is contained in:
Jeffrey Pfau 2015-08-16 18:06:15 -07:00
parent 05a956cacd
commit ba1fb17dde
2 changed files with 13 additions and 0 deletions

View File

@ -61,6 +61,7 @@ SensorView::SensorView(GameController* controller, InputController* input, QWidg
connect(m_ui.gyroSensitivity, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged), [this](double value) { connect(m_ui.gyroSensitivity, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged), [this](double value) {
m_input->setGyroSensitivity(value * 1e8f); m_input->setGyroSensitivity(value * 1e8f);
}); });
m_input->stealFocus(this);
} }
void SensorView::jiggerer(QAbstractButton* button, void (InputController::*setter)(int)) { void SensorView::jiggerer(QAbstractButton* button, void (InputController::*setter)(int)) {
@ -68,15 +69,26 @@ void SensorView::jiggerer(QAbstractButton* button, void (InputController::*sette
if (!checked) { if (!checked) {
m_jiggered = nullptr; m_jiggered = nullptr;
} else { } else {
button->setFocus();
m_jiggered = [this, button, setter](int axis) { m_jiggered = [this, button, setter](int axis) {
(m_input->*setter)(axis); (m_input->*setter)(axis);
button->setChecked(false); button->setChecked(false);
button->clearFocus();
}; };
} }
}); });
button->installEventFilter(this); button->installEventFilter(this);
} }
bool SensorView::event(QEvent* event) {
if (event->type() == QEvent::WindowActivate) {
m_input->stealFocus(this);
} else if (event->type() == QEvent::WindowDeactivate) {
m_input->releaseFocus(this);
}
return QWidget::event(event);
}
bool SensorView::eventFilter(QObject*, QEvent* event) { bool SensorView::eventFilter(QObject*, QEvent* event) {
if (event->type() == GamepadAxisEvent::Type()) { if (event->type() == GamepadAxisEvent::Type()) {
GamepadAxisEvent* gae = static_cast<GamepadAxisEvent*>(event); GamepadAxisEvent* gae = static_cast<GamepadAxisEvent*>(event);

View File

@ -30,6 +30,7 @@ public:
protected: protected:
bool eventFilter(QObject*, QEvent* event) override; bool eventFilter(QObject*, QEvent* event) override;
bool event(QEvent* event);
private slots: private slots:
void updateSensors(); void updateSensors();