mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	Fixes to "hide mouse on inactivity" (#5476)
The feature wasn't working when the "single window mode" was off. Changed the cursor setting to only affect the render_window and moved to a signal/slot model to show the mouse.
This commit is contained in:
		
							parent
							
								
									7ae0fc7338
								
							
						
					
					
						commit
						2f5eec3576
					
				
					 4 changed files with 23 additions and 15 deletions
				
			
		|  | @ -297,7 +297,7 @@ void GRenderWindow::mousePressEvent(QMouseEvent* event) { | |||
|     } else if (event->button() == Qt::RightButton) { | ||||
|         InputCommon::GetMotionEmu()->BeginTilt(pos.x(), pos.y()); | ||||
|     } | ||||
|     QWidget::mousePressEvent(event); | ||||
|     emit MouseActivity(); | ||||
| } | ||||
| 
 | ||||
| void GRenderWindow::mouseMoveEvent(QMouseEvent* event) { | ||||
|  | @ -308,7 +308,7 @@ void GRenderWindow::mouseMoveEvent(QMouseEvent* event) { | |||
|     const auto [x, y] = ScaleTouch(pos); | ||||
|     this->TouchMoved(x, y); | ||||
|     InputCommon::GetMotionEmu()->Tilt(pos.x(), pos.y()); | ||||
|     QWidget::mouseMoveEvent(event); | ||||
|     emit MouseActivity(); | ||||
| } | ||||
| 
 | ||||
| void GRenderWindow::mouseReleaseEvent(QMouseEvent* event) { | ||||
|  | @ -319,6 +319,7 @@ void GRenderWindow::mouseReleaseEvent(QMouseEvent* event) { | |||
|         this->TouchReleased(); | ||||
|     else if (event->button() == Qt::RightButton) | ||||
|         InputCommon::GetMotionEmu()->EndTilt(); | ||||
|     emit MouseActivity(); | ||||
| } | ||||
| 
 | ||||
| void GRenderWindow::TouchBeginEvent(const QTouchEvent* event) { | ||||
|  |  | |||
|  | @ -199,6 +199,9 @@ signals: | |||
|      */ | ||||
|     void FirstFrameDisplayed(); | ||||
| 
 | ||||
|     /// Emitted on mouse activity. Used to signal that the mouse should be shown if it's hidden
 | ||||
|     void MouseActivity(); | ||||
| 
 | ||||
| private: | ||||
|     std::pair<u32, u32> ScaleTouch(QPointF pos) const; | ||||
|     void TouchBeginEvent(const QTouchEvent* event); | ||||
|  |  | |||
|  | @ -203,13 +203,9 @@ GMainWindow::GMainWindow() | |||
|     // Show one-time "callout" messages to the user
 | ||||
|     ShowTelemetryCallout(); | ||||
| 
 | ||||
|     // make sure menubar has the arrow cursor instead of inheriting from this
 | ||||
|     ui->menubar->setCursor(QCursor()); | ||||
|     statusBar()->setCursor(QCursor()); | ||||
| 
 | ||||
|     mouse_hide_timer.setInterval(default_mouse_timeout); | ||||
|     connect(&mouse_hide_timer, &QTimer::timeout, this, &GMainWindow::HideMouseCursor); | ||||
|     connect(ui->menubar, &QMenuBar::hovered, this, &GMainWindow::ShowMouseCursor); | ||||
|     connect(ui->menubar, &QMenuBar::hovered, this, &GMainWindow::OnMouseActivity); | ||||
| 
 | ||||
|     if (UISettings::values.check_for_update_on_start) { | ||||
|         CheckForUpdates(); | ||||
|  | @ -1026,6 +1022,8 @@ void GMainWindow::BootGame(const QString& filename) { | |||
|     emu_thread->start(); | ||||
| 
 | ||||
|     connect(render_window, &GRenderWindow::Closed, this, &GMainWindow::OnStopGame); | ||||
|     connect(render_window, &GRenderWindow::MouseActivity, this, &GMainWindow::OnMouseActivity); | ||||
| 
 | ||||
|     // BlockingQueuedConnection is important here, it makes sure we've finished refreshing our views
 | ||||
|     // before the CPU continues
 | ||||
|     connect(emu_thread.get(), &EmuThread::DebugModeEntered, registersWidget, | ||||
|  | @ -1051,7 +1049,6 @@ void GMainWindow::BootGame(const QString& filename) { | |||
|     if (UISettings::values.hide_mouse) { | ||||
|         mouse_hide_timer.start(); | ||||
|         setMouseTracking(true); | ||||
|         ui->centralwidget->setMouseTracking(true); | ||||
|     } | ||||
| 
 | ||||
|     // show and hide the render_window to create the context
 | ||||
|  | @ -1153,7 +1150,6 @@ void GMainWindow::ShutdownGame() { | |||
|     game_list->setFilterFocus(); | ||||
| 
 | ||||
|     setMouseTracking(false); | ||||
|     ui->centralwidget->setMouseTracking(false); | ||||
| 
 | ||||
|     // Disable status bar updates
 | ||||
|     status_bar_update_timer.stop(); | ||||
|  | @ -1750,11 +1746,9 @@ void GMainWindow::OnConfigure() { | |||
|         config->Save(); | ||||
|         if (UISettings::values.hide_mouse && emulation_running) { | ||||
|             setMouseTracking(true); | ||||
|             ui->centralwidget->setMouseTracking(true); | ||||
|             mouse_hide_timer.start(); | ||||
|         } else { | ||||
|             setMouseTracking(false); | ||||
|             ui->centralwidget->setMouseTracking(false); | ||||
|         } | ||||
|     } else { | ||||
|         Settings::values.input_profiles = old_input_profiles; | ||||
|  | @ -2089,22 +2083,30 @@ void GMainWindow::HideMouseCursor() { | |||
|         ShowMouseCursor(); | ||||
|         return; | ||||
|     } | ||||
|     setCursor(QCursor(Qt::BlankCursor)); | ||||
|     render_window->setCursor(QCursor(Qt::BlankCursor)); | ||||
| } | ||||
| 
 | ||||
| void GMainWindow::ShowMouseCursor() { | ||||
|     unsetCursor(); | ||||
|     render_window->unsetCursor(); | ||||
|     if (emu_thread != nullptr && UISettings::values.hide_mouse) { | ||||
|         mouse_hide_timer.start(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void GMainWindow::mouseMoveEvent(QMouseEvent* event) { | ||||
| void GMainWindow::OnMouseActivity() { | ||||
|     ShowMouseCursor(); | ||||
| } | ||||
| 
 | ||||
| void GMainWindow::mouseMoveEvent(QMouseEvent* event) { | ||||
|     OnMouseActivity(); | ||||
| } | ||||
| 
 | ||||
| void GMainWindow::mousePressEvent(QMouseEvent* event) { | ||||
|     ShowMouseCursor(); | ||||
|     OnMouseActivity(); | ||||
| } | ||||
| 
 | ||||
| void GMainWindow::mouseReleaseEvent(QMouseEvent* event) { | ||||
|     OnMouseActivity(); | ||||
| } | ||||
| 
 | ||||
| void GMainWindow::OnCoreError(Core::System::ResultStatus result, std::string details) { | ||||
|  |  | |||
|  | @ -221,6 +221,7 @@ private slots: | |||
|     void OnCheckForUpdates(); | ||||
|     void OnOpenUpdater(); | ||||
|     void OnLanguageChanged(const QString& locale); | ||||
|     void OnMouseActivity(); | ||||
| 
 | ||||
| private: | ||||
|     bool ValidateMovie(const QString& path, u64 program_id = 0); | ||||
|  | @ -313,6 +314,7 @@ protected: | |||
|     void dragMoveEvent(QDragMoveEvent* event) override; | ||||
|     void mouseMoveEvent(QMouseEvent* event) override; | ||||
|     void mousePressEvent(QMouseEvent* event) override; | ||||
|     void mouseReleaseEvent(QMouseEvent* event) override; | ||||
| }; | ||||
| 
 | ||||
| Q_DECLARE_METATYPE(std::size_t); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue