From 77c191df4293f80237d55fe98702716fd680d962 Mon Sep 17 00:00:00 2001 From: ibancel Date: Thu, 29 Jul 2021 20:33:33 +0200 Subject: [PATCH] Qt: add fullscreen mouse lock setting --- rpcs3/rpcs3qt/gs_frame.cpp | 3 ++- rpcs3/rpcs3qt/gs_frame.h | 1 + rpcs3/rpcs3qt/gui_settings.h | 1 + rpcs3/rpcs3qt/settings_dialog.cpp | 7 +++++++ rpcs3/rpcs3qt/settings_dialog.ui | 7 +++++++ rpcs3/rpcs3qt/tooltips.h | 1 + 6 files changed, 19 insertions(+), 1 deletion(-) diff --git a/rpcs3/rpcs3qt/gs_frame.cpp b/rpcs3/rpcs3qt/gs_frame.cpp index c3f6ac6d61..0d4243ccf7 100644 --- a/rpcs3/rpcs3qt/gs_frame.cpp +++ b/rpcs3/rpcs3qt/gs_frame.cpp @@ -59,6 +59,7 @@ gs_frame::gs_frame(QScreen* screen, const QRect& geometry, const QIcon& appIcon, m_disable_mouse = m_gui_settings->GetValue(gui::gs_disableMouse).toBool(); m_disable_kb_hotkeys = m_gui_settings->GetValue(gui::gs_disableKbHotkeys).toBool(); m_show_mouse_in_fullscreen = m_gui_settings->GetValue(gui::gs_showMouseFs).toBool(); + m_lock_mouse_in_fullscreen = m_gui_settings->GetValue(gui::gs_lockMouseFs).toBool(); m_hide_mouse_after_idletime = m_gui_settings->GetValue(gui::gs_hideMouseIdle).toBool(); m_hide_mouse_idletime = m_gui_settings->GetValue(gui::gs_hideMouseIdleTime).toUInt(); @@ -703,7 +704,7 @@ void gs_frame::handle_cursor(QWindow::Visibility visibility, bool from_event, bo if (from_event) { // In fullscreen we default to hiding and locking. In windowed mode we do not want the lock by default. - m_mouse_hide_and_lock = visibility == QWindow::Visibility::FullScreen; + m_mouse_hide_and_lock = (visibility == QWindow::Visibility::FullScreen) && m_lock_mouse_in_fullscreen; } // Update the mouse hide timer diff --git a/rpcs3/rpcs3qt/gs_frame.h b/rpcs3/rpcs3qt/gs_frame.h index fbdf755b87..700ce7b4b5 100644 --- a/rpcs3/rpcs3qt/gs_frame.h +++ b/rpcs3/rpcs3qt/gs_frame.h @@ -46,6 +46,7 @@ private: bool m_disable_kb_hotkeys = false; bool m_mouse_hide_and_lock = false; bool m_show_mouse_in_fullscreen = false; + bool m_lock_mouse_in_fullscreen = true; bool m_hide_mouse_after_idletime = false; u32 m_hide_mouse_idletime = 2000; // ms bool m_flip_showed_frame = false; diff --git a/rpcs3/rpcs3qt/gui_settings.h b/rpcs3/rpcs3qt/gui_settings.h index 160eca22bd..9d3d95652a 100644 --- a/rpcs3/rpcs3qt/gui_settings.h +++ b/rpcs3/rpcs3qt/gui_settings.h @@ -207,6 +207,7 @@ namespace gui const gui_save gs_disableMouse = gui_save(gs_frame, "disableMouse", false); const gui_save gs_disableKbHotkeys = gui_save(gs_frame, "disableKbHotkeys", false); const gui_save gs_showMouseFs = gui_save(gs_frame, "showMouseInFullscreen", false); + const gui_save gs_lockMouseFs = gui_save(gs_frame, "lockMouseInFullscreen", true); const gui_save gs_resize = gui_save(gs_frame, "resize", false); const gui_save gs_width = gui_save(gs_frame, "width", 1280); const gui_save gs_height = gui_save(gs_frame, "height", 720); diff --git a/rpcs3/rpcs3qt/settings_dialog.cpp b/rpcs3/rpcs3qt/settings_dialog.cpp index 70226ed5ce..70b6c983cf 100644 --- a/rpcs3/rpcs3qt/settings_dialog.cpp +++ b/rpcs3/rpcs3qt/settings_dialog.cpp @@ -1313,6 +1313,7 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std SubscribeTooltip(ui->gs_disableMouse, tooltips.settings.disable_mouse); SubscribeTooltip(ui->gs_disableKbHotkeys, tooltips.settings.disable_kb_hotkeys); SubscribeTooltip(ui->gs_showMouseInFullscreen, tooltips.settings.show_mouse_in_fullscreen); + SubscribeTooltip(ui->gs_lockMouseInFullscreen, tooltips.settings.lock_mouse_in_fullscreen); SubscribeTooltip(ui->gs_hideMouseOnIdle_widget, tooltips.settings.hide_mouse_on_idle); ui->gs_disableMouse->setChecked(m_gui_settings->GetValue(gui::gs_disableMouse).toBool()); @@ -1333,6 +1334,12 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std m_gui_settings->SetValue(gui::gs_showMouseFs, val); }); + ui->gs_lockMouseInFullscreen->setChecked(m_gui_settings->GetValue(gui::gs_lockMouseFs).toBool()); + connect(ui->gs_lockMouseInFullscreen, &QCheckBox::clicked, [this](bool val) + { + m_gui_settings->SetValue(gui::gs_lockMouseFs, val); + }); + ui->gs_hideMouseOnIdle->setChecked(m_gui_settings->GetValue(gui::gs_hideMouseIdle).toBool()); connect(ui->gs_hideMouseOnIdle, &QCheckBox::clicked, [this](bool checked) { diff --git a/rpcs3/rpcs3qt/settings_dialog.ui b/rpcs3/rpcs3qt/settings_dialog.ui index be06d3876d..e79f37ab43 100644 --- a/rpcs3/rpcs3qt/settings_dialog.ui +++ b/rpcs3/rpcs3qt/settings_dialog.ui @@ -2436,6 +2436,13 @@ + + + + Lock mouse cursor in Fullscreen + + + diff --git a/rpcs3/rpcs3qt/tooltips.h b/rpcs3/rpcs3qt/tooltips.h index de3b129f6e..3411370466 100644 --- a/rpcs3/rpcs3qt/tooltips.h +++ b/rpcs3/rpcs3qt/tooltips.h @@ -117,6 +117,7 @@ public: const QString disable_kb_hotkeys = tr("Disables keyboard hotkeys such as Ctrl-S, Ctrl-E, Ctrl-R, Ctrl-P while the game screen is active.\nThis does not include Ctrl-L (hide and lock mouse) and Alt-Enter (toggle fullscreen).\nCheck this if you want to play with mouse and keyboard."); const QString max_llvm_threads = tr("Limits the maximum number of threads used for the initial PPU and SPU module compilation.\nLower this in order to increase performance of other open applications.\nThe default uses all available threads."); const QString show_mouse_in_fullscreen = tr("Shows the mouse cursor when the fullscreen mode is active.\nCurrently this may not work every time."); + const QString lock_mouse_in_fullscreen = tr("Locks the mouse cursor at center when the fullscreen mode is active."); const QString hide_mouse_on_idle = tr("Hides the mouse cursor if no mouse movement is detected for the configured time."); const QString show_shader_compilation_hint = tr("Shows 'Compiling shaders' hint using the native overlay."); const QString use_native_interface = tr("Enables use of native HUD within the game window that can interact with game controllers.\nWhen disabled, regular Qt dialogs are used instead.\nCurrently, the on-screen keyboard only supports the English key layout.");