Browse Source

fix: `GetCursorScreenpoint()` sometimes wrongly returns `(0,0)` (#41296)

fix: GetCursorScreenpoint() sometimes wrongly returns 0,0

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <[email protected]>
trop[bot] 1 year ago
parent
commit
b8917a03d6

+ 1 - 0
patches/chromium/.patches

@@ -129,3 +129,4 @@ feat_allow_code_cache_in_custom_schemes.patch
 build_run_reclient_cfg_generator_after_chrome.patch
 fix_suppress_clang_-wimplicit-const-int-float-conversion_in.patch
 cherry-pick-e7ffe20ebfac.patch
+fix_getcursorscreenpoint_wrongly_returns_0_0.patch

+ 25 - 0
patches/chromium/fix_getcursorscreenpoint_wrongly_returns_0_0.patch

@@ -0,0 +1,25 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Charles Kerr <[email protected]>
+Date: Thu, 8 Feb 2024 00:41:40 -0600
+Subject: fix: GetCursorScreenPoint() wrongly returns 0, 0
+
+Fixes #41143. Discussion of the issue at
+https://github.com/electron/electron/issues/41143#issuecomment-1933443163
+
+This patch should be backported to e29, upstreamed to Chromium, and then
+removed if it lands upstream.
+
+diff --git a/ui/events/x/events_x_utils.cc b/ui/events/x/events_x_utils.cc
+index aa047f2bd39643dc471b25eeb567b0dd3731e0e0..eb312fb1c115751041930539d0d5f15208461e04 100644
+--- a/ui/events/x/events_x_utils.cc
++++ b/ui/events/x/events_x_utils.cc
+@@ -586,6 +586,9 @@ gfx::Point EventLocationFromXEvent(const x11::Event& xev) {
+ gfx::Point EventSystemLocationFromXEvent(const x11::Event& xev) {
+   if (auto* crossing = xev.As<x11::CrossingEvent>())
+     return gfx::Point(crossing->root_x, crossing->root_y);
++  if (auto* crossing = xev.As<x11::Input::CrossingEvent>())
++    return gfx::Point(Fp1616ToDouble(crossing->root_x),
++                      Fp1616ToDouble(crossing->root_y));
+   if (auto* button = xev.As<x11::ButtonEvent>())
+     return gfx::Point(button->root_x, button->root_y);
+   if (auto* motion = xev.As<x11::MotionNotifyEvent>())