From a9e390b1b1463e25cb638c9de239f2fd31181616 Mon Sep 17 00:00:00 2001 From: Steveice10 <1269164+Steveice10@users.noreply.github.com> Date: Thu, 20 Jul 2023 15:48:50 -0700 Subject: [PATCH] frontend: Fix clicking primary screen window touching screen. (#6707) --- src/core/frontend/emu_window.cpp | 20 +++++++++++--------- src/core/frontend/emu_window.h | 11 +++++++++++ 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/core/frontend/emu_window.cpp b/src/core/frontend/emu_window.cpp index 2d5dfde54..cdefdb541 100644 --- a/src/core/frontend/emu_window.cpp +++ b/src/core/frontend/emu_window.cpp @@ -55,15 +55,17 @@ EmuWindow::EmuWindow(bool is_secondary_) : is_secondary{is_secondary_} { } EmuWindow::~EmuWindow() = default; -/** - * Check if the given x/y coordinates are within the touchpad specified by the framebuffer layout - * @param layout FramebufferLayout object describing the framebuffer size and screen positions - * @param framebuffer_x Framebuffer x-coordinate to check - * @param framebuffer_y Framebuffer y-coordinate to check - * @return True if the coordinates are within the touchpad, otherwise false - */ -static bool IsWithinTouchscreen(const Layout::FramebufferLayout& layout, unsigned framebuffer_x, - unsigned framebuffer_y) { + +bool EmuWindow::IsWithinTouchscreen(const Layout::FramebufferLayout& layout, unsigned framebuffer_x, + unsigned framebuffer_y) { +#ifndef ANDROID + // If separate windows and the touch is in the primary (top) screen, ignore it. + if (Settings::values.layout_option.GetValue() == Settings::LayoutOption::SeparateWindows && + !is_secondary && !Settings::values.swap_screen.GetValue()) { + return false; + } +#endif + if (Settings::values.render_3d.GetValue() == Settings::StereoRenderOption::SideBySide) { return (framebuffer_y >= layout.bottom_screen.top && framebuffer_y < layout.bottom_screen.bottom && diff --git a/src/core/frontend/emu_window.h b/src/core/frontend/emu_window.h index 26c14ef50..61b09583b 100644 --- a/src/core/frontend/emu_window.h +++ b/src/core/frontend/emu_window.h @@ -288,6 +288,17 @@ private: void CreateTouchState(); + /** + * Check if the given x/y coordinates are within the touchpad specified by the framebuffer + * layout + * @param layout FramebufferLayout object describing the framebuffer size and screen positions + * @param framebuffer_x Framebuffer x-coordinate to check + * @param framebuffer_y Framebuffer y-coordinate to check + * @return True if the coordinates are within the touchpad, otherwise false + */ + bool IsWithinTouchscreen(const Layout::FramebufferLayout& layout, unsigned framebuffer_x, + unsigned framebuffer_y); + Layout::FramebufferLayout framebuffer_layout; ///< Current framebuffer layout WindowConfig config{}; ///< Internal configuration (changes pending for being applied in