Merge pull request #5782 from ligfx/fixqtinput

Qt: allow emulation input when background input is disabled
This commit is contained in:
Leo Lam 2017-07-14 13:05:09 +08:00 committed by GitHub
commit 4c2a4c38c3
4 changed files with 14 additions and 26 deletions

View file

@ -4,55 +4,46 @@
#include <QAbstractEventDispatcher>
#include <QApplication>
#include <QMutexLocker>
#include "Common/Common.h"
#include "Core/Host.h"
#include "DolphinQt2/Host.h"
#include "DolphinQt2/MainWindow.h"
Host* Host::m_instance = nullptr;
Host::Host() = default;
Host* Host::GetInstance()
{
if (m_instance == nullptr)
m_instance = new Host();
return m_instance;
static Host* s_instance = new Host();
return s_instance;
}
void* Host::GetRenderHandle()
{
QMutexLocker locker(&m_lock);
return m_render_handle;
}
void Host::SetRenderHandle(void* handle)
{
QMutexLocker locker(&m_lock);
m_render_handle = handle;
}
bool Host::GetRenderFocus()
{
QMutexLocker locker(&m_lock);
return m_render_focus;
}
void Host::SetRenderFocus(bool focus)
{
QMutexLocker locker(&m_lock);
m_render_focus = focus;
}
bool Host::GetRenderFullscreen()
{
QMutexLocker locker(&m_lock);
return m_render_fullscreen;
}
void Host::SetRenderFullscreen(bool fullscreen)
{
QMutexLocker locker(&m_lock);
m_render_fullscreen = fullscreen;
}

View file

@ -4,9 +4,8 @@
#pragma once
#include <QMutex>
#include <QObject>
#include <QSize>
#include <atomic>
// Singleton that talks to the Core via the interface defined in Core/Host.h.
// Because Host_* calls might come from different threads than the MainWindow,
@ -35,11 +34,9 @@ signals:
void RequestRenderSize(int w, int h);
private:
Host() {}
static Host* m_instance;
QMutex m_lock;
Host();
void* m_render_handle;
bool m_render_focus;
bool m_render_fullscreen;
std::atomic<void*> m_render_handle;
std::atomic<bool> m_render_focus;
std::atomic<bool> m_render_fullscreen;
};

View file

@ -14,7 +14,6 @@ RenderWidget::RenderWidget(QWidget* parent) : QWidget(parent)
setAttribute(Qt::WA_NoSystemBackground, true);
connect(Host::GetInstance(), &Host::RequestTitle, this, &RenderWidget::setWindowTitle);
connect(this, &RenderWidget::FocusChanged, Host::GetInstance(), &Host::SetRenderFocus);
connect(this, &RenderWidget::StateChanged, Host::GetInstance(), &Host::SetRenderFullscreen);
connect(this, &RenderWidget::HandleChanged, Host::GetInstance(), &Host::SetRenderHandle);
emit HandleChanged((void*)winId());
@ -43,9 +42,11 @@ bool RenderWidget::event(QEvent* event)
case QEvent::WinIdChange:
emit HandleChanged((void*)winId());
break;
case QEvent::FocusIn:
case QEvent::FocusOut:
emit FocusChanged(hasFocus());
case QEvent::WindowActivate:
Host::GetInstance()->SetRenderFocus(true);
break;
case QEvent::WindowDeactivate:
Host::GetInstance()->SetRenderFocus(false);
break;
case QEvent::WindowStateChange:
emit StateChanged(isFullScreen());

View file

@ -14,13 +14,12 @@ class RenderWidget final : public QWidget
public:
explicit RenderWidget(QWidget* parent = nullptr);
bool event(QEvent* event);
bool event(QEvent* event) override;
signals:
void EscapePressed();
void Closed();
void HandleChanged(void* handle);
void FocusChanged(bool focus);
void StateChanged(bool fullscreen);
private: