diff --git a/Source/Core/DolphinWX/Frame.cpp b/Source/Core/DolphinWX/Frame.cpp index 29a7b526c3..ec46436632 100644 --- a/Source/Core/DolphinWX/Frame.cpp +++ b/Source/Core/DolphinWX/Frame.cpp @@ -448,6 +448,10 @@ CFrame::CFrame(wxFrame* parent, wxWindowID id, const wxString& title, wxRect geo Bind(wxEVT_TIMER, &CFrame::PollHotkeys, this, m_poll_hotkey_timer.GetId()); m_poll_hotkey_timer.Start(1000 / 60, wxTIMER_CONTINUOUS); + m_cursor_timer.SetOwner(this); + Bind(wxEVT_TIMER, &CFrame::HandleCursorTimer, this, m_cursor_timer.GetId()); + m_cursor_timer.StartOnce(MOUSE_HIDE_DELAY); + // Shut down cleanly on SIGINT, SIGTERM (Unix) and on various signals on Windows m_handle_signal_timer.SetOwner(this); Bind(wxEVT_TIMER, &CFrame::HandleSignal, this, m_handle_signal_timer.GetId()); @@ -1122,6 +1126,13 @@ void CFrame::OnKeyDown(wxKeyEvent& event) void CFrame::OnMouse(wxMouseEvent& event) { + if (!SConfig::GetInstance().bHideCursor && main_frame->RendererHasFocus() && + Core::GetState() == Core::State::Running) + { + m_render_parent->SetCursor(wxNullCursor); + m_cursor_timer.StartOnce(MOUSE_HIDE_DELAY); + } + // next handlers are all for FreeLook, so we don't need to check them if disabled if (!g_Config.bFreeLook) { @@ -1699,6 +1710,13 @@ void CFrame::HandleFrameSkipHotkeys() } } +void CFrame::HandleCursorTimer(wxTimerEvent& event) +{ + if (!SConfig::GetInstance().bHideCursor && main_frame->RendererHasFocus() && + Core::GetState() == Core::State::Running) + m_render_parent->SetCursor(wxCURSOR_BLANK); +} + void CFrame::HandleSignal(wxTimerEvent& event) { if (!s_shutdown_signal_received.TestAndClear()) diff --git a/Source/Core/DolphinWX/Frame.h b/Source/Core/DolphinWX/Frame.h index 094df16173..ed2af79726 100644 --- a/Source/Core/DolphinWX/Frame.h +++ b/Source/Core/DolphinWX/Frame.h @@ -144,6 +144,7 @@ private: ADD_PANE_CENTER }; + static constexpr int MOUSE_HIDE_DELAY = 3000; GameListCtrl* m_game_list_ctrl = nullptr; CConfigMain* m_main_config_dialog = nullptr; wxPanel* m_panel = nullptr; @@ -167,6 +168,7 @@ private: int m_save_slot = 1; wxTimer m_poll_hotkey_timer; + wxTimer m_cursor_timer; wxTimer m_handle_signal_timer; wxMenuBar* m_menubar_shadow = nullptr; @@ -360,6 +362,7 @@ private: void PollHotkeys(wxTimerEvent&); void ParseHotkeys(); + void HandleCursorTimer(wxTimerEvent&); void HandleSignal(wxTimerEvent&); bool InitControllers(); diff --git a/Source/Core/DolphinWX/VideoConfigDiag.cpp b/Source/Core/DolphinWX/VideoConfigDiag.cpp index 687bdf7b33..02318ec515 100644 --- a/Source/Core/DolphinWX/VideoConfigDiag.cpp +++ b/Source/Core/DolphinWX/VideoConfigDiag.cpp @@ -502,7 +502,7 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string& title) szr_other->Add(CreateCheckBoxRefBool(page_general, _("Keep Window on Top"), wxGetTranslation(keep_window_on_top_desc), SConfig::GetInstance().bKeepWindowOnTop)); - szr_other->Add(CreateCheckBoxRefBool(page_general, _("Hide Mouse Cursor"), + szr_other->Add(CreateCheckBoxRefBool(page_general, _("Always Hide Mouse Cursor"), wxGetTranslation(hide_mouse_cursor_desc), SConfig::GetInstance().bHideCursor)); szr_other->Add(render_to_main_checkbox =