summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorTilka <tilkax@gmail.com>2018-04-22 11:26:18 +0100
committerGitHub <noreply@github.com>2018-04-22 11:26:18 +0100
commit50e80d66db3bd479a0d6ce7768e3919b3bfcd032 (patch)
tree8dd8e2fa561d332188ffeea89ff240f3a23fc141 /Source/Core
parentc131b7c3b4b045b201d36f08f3a7622b5b843eea (diff)
parentcaa18edc794845b1cbf957754ac9dfc4211beb6d (diff)
Merge pull request #6678 from spycrab/qt_pause_focusloss
Qt: RenderWidget fixes
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/DolphinQt2/Config/Graphics/GeneralWidget.cpp4
-rw-r--r--Source/Core/DolphinQt2/RenderWidget.cpp17
-rw-r--r--Source/Core/DolphinQt2/RenderWidget.h1
-rw-r--r--Source/Core/DolphinQt2/Settings.cpp14
-rw-r--r--Source/Core/DolphinQt2/Settings.h3
-rw-r--r--Source/Core/DolphinQt2/Settings/InterfacePane.cpp4
6 files changed, 39 insertions, 4 deletions
diff --git a/Source/Core/DolphinQt2/Config/Graphics/GeneralWidget.cpp b/Source/Core/DolphinQt2/Config/Graphics/GeneralWidget.cpp
index a99ddfc9b1..339049bd20 100644
--- a/Source/Core/DolphinQt2/Config/Graphics/GeneralWidget.cpp
+++ b/Source/Core/DolphinQt2/Config/Graphics/GeneralWidget.cpp
@@ -165,7 +165,7 @@ void GeneralWidget::LoadSettings()
// Render to Main Window
m_render_main_window->setChecked(SConfig::GetInstance().bRenderToMain);
// Keep Window on Top
- m_keep_window_top->setChecked(SConfig::GetInstance().bKeepWindowOnTop);
+ m_keep_window_top->setChecked(Settings::Instance().IsKeepWindowOnTopEnabled());
// Autoadjust Window size
m_autoadjust_window_size->setChecked(SConfig::GetInstance().bRenderWindowAutoSize);
}
@@ -222,7 +222,7 @@ void GeneralWidget::SaveSettings()
// Render to Main Window
SConfig::GetInstance().bRenderToMain = m_render_main_window->isChecked();
// Keep Window on Top
- SConfig::GetInstance().bKeepWindowOnTop = m_keep_window_top->isChecked();
+ Settings::Instance().SetKeepWindowOnTop(m_keep_window_top->isChecked());
// Autoadjust windowsize
SConfig::GetInstance().bRenderWindowAutoSize = m_autoadjust_window_size->isChecked();
}
diff --git a/Source/Core/DolphinQt2/RenderWidget.cpp b/Source/Core/DolphinQt2/RenderWidget.cpp
index 255bff6cd7..b1c1529baa 100644
--- a/Source/Core/DolphinQt2/RenderWidget.cpp
+++ b/Source/Core/DolphinQt2/RenderWidget.cpp
@@ -53,6 +53,9 @@ RenderWidget::RenderWidget(QWidget* parent) : QWidget(parent)
connect(&Settings::Instance(), &Settings::HideCursorChanged, this,
&RenderWidget::OnHideCursorChanged);
OnHideCursorChanged();
+ connect(&Settings::Instance(), &Settings::KeepWindowOnTopChanged, this,
+ &RenderWidget::OnKeepOnTopChanged);
+ OnKeepOnTopChanged(Settings::Instance().IsKeepWindowOnTopEnabled());
m_mouse_timer->start(MOUSE_HIDE_DELAY);
SetFillBackground(true);
@@ -70,6 +73,14 @@ void RenderWidget::OnHideCursorChanged()
setCursor(Settings::Instance().GetHideCursor() ? Qt::BlankCursor : Qt::ArrowCursor);
}
+void RenderWidget::OnKeepOnTopChanged(bool top)
+{
+ setWindowFlags(top ? windowFlags() | Qt::WindowStaysOnTopHint :
+ windowFlags() & ~Qt::WindowStaysOnTopHint);
+
+ show();
+}
+
void RenderWidget::HandleCursorTimer()
{
if (isActiveWindow())
@@ -90,6 +101,8 @@ bool RenderWidget::event(QEvent* event)
{
switch (event->type())
{
+ case QEvent::Paint:
+ return !autoFillBackground();
case QEvent::KeyPress:
{
QKeyEvent* ke = static_cast<QKeyEvent*>(event);
@@ -116,9 +129,13 @@ bool RenderWidget::event(QEvent* event)
break;
case QEvent::WindowActivate:
Host::GetInstance()->SetRenderFocus(true);
+ if (SConfig::GetInstance().m_PauseOnFocusLost && Core::GetState() == Core::State::Paused)
+ Core::SetState(Core::State::Running);
break;
case QEvent::WindowDeactivate:
Host::GetInstance()->SetRenderFocus(false);
+ if (SConfig::GetInstance().m_PauseOnFocusLost && Core::GetState() == Core::State::Running)
+ Core::SetState(Core::State::Paused);
break;
case QEvent::Resize:
{
diff --git a/Source/Core/DolphinQt2/RenderWidget.h b/Source/Core/DolphinQt2/RenderWidget.h
index be276d10fc..0c89363fa0 100644
--- a/Source/Core/DolphinQt2/RenderWidget.h
+++ b/Source/Core/DolphinQt2/RenderWidget.h
@@ -29,6 +29,7 @@ signals:
private:
void HandleCursorTimer();
void OnHideCursorChanged();
+ void OnKeepOnTopChanged(bool top);
void SetFillBackground(bool fill);
static constexpr int MOUSE_HIDE_DELAY = 3000;
diff --git a/Source/Core/DolphinQt2/Settings.cpp b/Source/Core/DolphinQt2/Settings.cpp
index b697b8c431..be4ca80011 100644
--- a/Source/Core/DolphinQt2/Settings.cpp
+++ b/Source/Core/DolphinQt2/Settings.cpp
@@ -130,6 +130,20 @@ bool Settings::GetHideCursor() const
return SConfig::GetInstance().bHideCursor;
}
+void Settings::SetKeepWindowOnTop(bool top)
+{
+ if (IsKeepWindowOnTopEnabled() == top)
+ return;
+
+ SConfig::GetInstance().bKeepWindowOnTop = top;
+ emit KeepWindowOnTopChanged(top);
+}
+
+bool Settings::IsKeepWindowOnTopEnabled() const
+{
+ return SConfig::GetInstance().bKeepWindowOnTop;
+}
+
int Settings::GetVolume() const
{
return SConfig::GetInstance().m_Volume;
diff --git a/Source/Core/DolphinQt2/Settings.h b/Source/Core/DolphinQt2/Settings.h
index 7e40803e17..eea558546c 100644
--- a/Source/Core/DolphinQt2/Settings.h
+++ b/Source/Core/DolphinQt2/Settings.h
@@ -74,6 +74,8 @@ public:
// Graphics
void SetHideCursor(bool hide_cursor);
bool GetHideCursor() const;
+ void SetKeepWindowOnTop(bool top);
+ bool IsKeepWindowOnTopEnabled() const;
// Audio
int GetVolume() const;
@@ -126,6 +128,7 @@ signals:
void DefaultGameChanged(const QString&);
void PathReloadRequested(const QString&);
void HideCursorChanged();
+ void KeepWindowOnTopChanged(bool top);
void VolumeChanged(int volume);
void NANDRefresh();
void RegistersVisibilityChanged(bool visible);
diff --git a/Source/Core/DolphinQt2/Settings/InterfacePane.cpp b/Source/Core/DolphinQt2/Settings/InterfacePane.cpp
index 7e7fba1ceb..d2b0e5084a 100644
--- a/Source/Core/DolphinQt2/Settings/InterfacePane.cpp
+++ b/Source/Core/DolphinQt2/Settings/InterfacePane.cpp
@@ -178,7 +178,7 @@ void InterfacePane::LoadConfig()
{
const SConfig& startup_params = SConfig::GetInstance();
m_checkbox_auto_window->setChecked(startup_params.bRenderWindowAutoSize);
- m_checkbox_top_window->setChecked(startup_params.bKeepWindowOnTop);
+ m_checkbox_top_window->setChecked(Settings::Instance().IsKeepWindowOnTopEnabled());
m_checkbox_render_to_window->setChecked(startup_params.bRenderToMain);
m_checkbox_use_builtin_title_database->setChecked(startup_params.m_use_builtin_title_database);
m_checkbox_show_debugging_ui->setChecked(Settings::Instance().IsDebugModeEnabled());
@@ -200,7 +200,7 @@ void InterfacePane::OnSaveConfig()
{
SConfig& settings = SConfig::GetInstance();
settings.bRenderWindowAutoSize = m_checkbox_auto_window->isChecked();
- settings.bKeepWindowOnTop = m_checkbox_top_window->isChecked();
+ Settings::Instance().SetKeepWindowOnTop(m_checkbox_top_window->isChecked());
settings.bRenderToMain = m_checkbox_render_to_window->isChecked();
settings.m_use_builtin_title_database = m_checkbox_use_builtin_title_database->isChecked();
Settings::Instance().SetDebugModeEnabled(m_checkbox_show_debugging_ui->isChecked());