diff --git a/src/duckstation-qt/generalsettingswidget.cpp b/src/duckstation-qt/generalsettingswidget.cpp index 203227a41..adba02f9b 100644 --- a/src/duckstation-qt/generalsettingswidget.cpp +++ b/src/duckstation-qt/generalsettingswidget.cpp @@ -21,6 +21,8 @@ GeneralSettingsWidget::GeneralSettingsWidget(QtHostInterface* host_interface, QW false); SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.startFullscreen, "Main", "StartFullscreen", false); + SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.hideCursorInFullscreen, "Main", + "HideCursorInFullscreen", true); SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.renderToMain, "Main", "RenderToMainWindow", true); SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.saveStateOnExit, "Main", "SaveStateOnExit", true); SettingWidgetBinder::BindWidgetToBoolSetting(m_host_interface, m_ui.confirmPowerOff, "Main", "ConfirmPowerOff", true); @@ -59,6 +61,8 @@ GeneralSettingsWidget::GeneralSettingsWidget(QtHostInterface* host_interface, QW "resume directly from where you left off next time.")); dialog->registerWidgetHelp(m_ui.startFullscreen, tr("Start Fullscreen"), tr("Unchecked"), tr("Automatically switches to fullscreen mode when a game is started.")); + dialog->registerWidgetHelp(m_ui.hideCursorInFullscreen, tr("Hide Cursor In Fullscreen"), tr("Checked"), + tr("Hides the mouse pointer/cursor when the emulator is in fullscreen mode.")); dialog->registerWidgetHelp( m_ui.renderToMain, tr("Render To Main Window"), tr("Checked"), tr("Renders the display of the simulated console to the main window of the application, over " @@ -92,7 +96,7 @@ GeneralSettingsWidget::GeneralSettingsWidget(QtHostInterface* host_interface, QW "to use XInput over SDL2 for compatibility.")); // Since this one is compile-time selected, we don't put it in the .ui file. - int current_col = 1; + int current_col = 0; int current_row = m_ui.formLayout_4->rowCount() - current_col; #ifdef WITH_DISCORD_PRESENCE { diff --git a/src/duckstation-qt/generalsettingswidget.ui b/src/duckstation-qt/generalsettingswidget.ui index 1ecb084ba..a65442ff8 100644 --- a/src/duckstation-qt/generalsettingswidget.ui +++ b/src/duckstation-qt/generalsettingswidget.ui @@ -39,7 +39,7 @@ - + Render To Main Window @@ -74,27 +74,34 @@ - + Apply Per-Game Settings - + Automatically Load Cheats - + Load Devices From Save States + + + + Hide Cursor In Fullscreen + + + diff --git a/src/duckstation-qt/mainwindow.cpp b/src/duckstation-qt/mainwindow.cpp index ec9216bde..e8cf59136 100644 --- a/src/duckstation-qt/mainwindow.cpp +++ b/src/duckstation-qt/mainwindow.cpp @@ -81,6 +81,11 @@ bool MainWindow::confirmMessage(const QString& message) return (result == QMessageBox::Yes); } +bool MainWindow::shouldHideCursorInFullscreen() const +{ + return g_host_interface->GetBoolSettingValue("Main", "HideCursorInFullscreen", true); +} + QtDisplayWidget* MainWindow::createDisplay(QThread* worker_thread, const QString& adapter_name, bool use_debug_device, bool fullscreen, bool render_to_main) { @@ -108,7 +113,8 @@ QtDisplayWidget* MainWindow::createDisplay(QThread* worker_thread, const QString else m_display_widget->showNormal(); - m_display_widget->setCursor(Qt::BlankCursor); + if (shouldHideCursorInFullscreen()) + m_display_widget->setCursor(Qt::BlankCursor); } else if (!render_to_main) { @@ -170,7 +176,9 @@ QtDisplayWidget* MainWindow::updateDisplay(QThread* worker_thread, bool fullscre m_display_widget->showFullScreen(); else m_display_widget->showNormal(); - m_display_widget->setCursor(Qt::BlankCursor); + + if (shouldHideCursorInFullscreen()) + m_display_widget->setCursor(Qt::BlankCursor); } else if (!render_to_main) { diff --git a/src/duckstation-qt/mainwindow.h b/src/duckstation-qt/mainwindow.h index 4ce0393e0..7d55c64b5 100644 --- a/src/duckstation-qt/mainwindow.h +++ b/src/duckstation-qt/mainwindow.h @@ -111,6 +111,7 @@ private: void restoreDisplayWindowGeometryFromConfig(); void destroyDisplayWidget(); void setDisplayFullscreen(const std::string& fullscreen_mode); + bool shouldHideCursorInFullscreen() const; SettingsDialog* getSettingsDialog(); void doSettings(SettingsDialog::Category category = SettingsDialog::Category::Count); void updateDebugMenuCPUExecutionMode();