From e650ec75052132bb811fdf164538d6182e8e8630 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 4 Mar 2023 23:10:26 +0600 Subject: [PATCH 1/3] Fix crashes when exiting emulator in multimonitor modes --- src/qt/qt_main.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 29f8af5aa..a41a3e889 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -138,7 +138,11 @@ main_thread_fn() } is_quit = 1; - QTimer::singleShot(0, QApplication::instance(), []() { QApplication::instance()->quit(); }); + if (gfxcard[1]) { + ui_deinit_monitor(1); + std::this_thread::sleep_for(std::chrono::milliseconds(500)); + } + QTimer::singleShot(0, QApplication::instance(), []() { QApplication::processEvents(); QApplication::instance()->quit(); }); } static std::thread *main_thread; From 7de41b383c2f0d4925b433fb7250aa8d7aebae80 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sat, 4 Mar 2023 23:10:43 +0600 Subject: [PATCH 2/3] Absolute mouse input now works on secondary monitors --- src/qt/qt_mainwindow.cpp | 2 ++ src/qt/qt_rendererstack.cpp | 19 ++++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 65af4d8d3..f360a83e9 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -733,7 +733,9 @@ MainWindow::initRendererMonitorSlot(int monitor_index) secondaryRenderer->showMaximized(); } secondaryRenderer->switchRenderer((RendererStack::Renderer) vid_api); + secondaryRenderer->setMouseTracking(true); } + connect(this, &MainWindow::pollMouse, secondaryRenderer.get(), &RendererStack::mousePoll, Qt::DirectConnection); } } diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 9ebd891c3..0fec7a574 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -127,7 +127,7 @@ qt_mouse_capture(int on) { if (!on) { mouse_capture = 0; - QApplication::setOverrideCursor(Qt::ArrowCursor); + if (QApplication::overrideCursor()) QApplication::restoreOverrideCursor(); #ifdef __APPLE__ CGAssociateMouseAndMouseCursorPosition(true); #endif @@ -144,6 +144,17 @@ qt_mouse_capture(int on) void RendererStack::mousePoll() { + if (m_monitor_index >= 1) { + if (mouse_mode >= 1) { + mouse_x_abs = mousedata.x_abs; + mouse_y_abs = mousedata.y_abs; + if (!mouse_tablet_in_proximity) { + mouse_tablet_in_proximity = mousedata.mouse_tablet_in_proximity; + } + } + return; + } + #ifdef Q_OS_WINDOWS if (mouse_mode == 0) { mouse_x_abs = mousedata.x_abs; @@ -151,6 +162,7 @@ RendererStack::mousePoll() return; } #endif + #ifndef __APPLE__ mouse_x = mousedata.deltax; mouse_y = mousedata.deltay; @@ -270,8 +282,9 @@ void RendererStack::leaveEvent(QEvent *event) { mousedata.mouse_tablet_in_proximity = 0; - if (mouse_mode == 1) - QApplication::setOverrideCursor(Qt::ArrowCursor); + + if (mouse_mode == 1 && QApplication::overrideCursor()) + QApplication::restoreOverrideCursor(); if (QApplication::platformName().contains("wayland")) { event->accept(); return; From 1e58f4dc934e804205eabc6d27a14650b1fc6bd3 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 5 Mar 2023 16:59:08 +0600 Subject: [PATCH 3/3] Fix switch input on secondary monitors --- src/qt/qt_rendererstack.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 0fec7a574..3f7c36199 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -151,6 +151,9 @@ RendererStack::mousePoll() if (!mouse_tablet_in_proximity) { mouse_tablet_in_proximity = mousedata.mouse_tablet_in_proximity; } + if (mousedata.mouse_tablet_in_proximity) { + mouse_buttons = mousedata.mousebuttons; + } } return; }