Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Qt: allow emulation input when background input is disabled #5782

Merged
merged 3 commits into from Jul 14, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
15 changes: 3 additions & 12 deletions Source/Core/DolphinQt2/Host.cpp
Expand Up @@ -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;
}

Expand Down
13 changes: 5 additions & 8 deletions Source/Core/DolphinQt2/Host.h
Expand Up @@ -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,
Expand Down Expand Up @@ -35,11 +34,9 @@ public slots:
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;
};
9 changes: 5 additions & 4 deletions Source/Core/DolphinQt2/RenderWidget.cpp
Expand Up @@ -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());
Expand Down Expand Up @@ -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());
Expand Down
3 changes: 1 addition & 2 deletions Source/Core/DolphinQt2/RenderWidget.h
Expand Up @@ -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:
Expand Down