diff --git a/src/core/frontend/emu_window.cpp b/src/core/frontend/emu_window.cpp index 2d5dfde54f..cdefdb5414 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 26c14ef50c..61b09583b5 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