Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Unified Diff: ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc

Issue 922293002: linux/x11: Fix event dispatch in menus in High DPI. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc
index 80008cf758a96e9faacbf9a81201934f23ea43b9..3874e6705ac6083def2012a9dfbaa61fa28ffe65 100644
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc
@@ -1432,7 +1432,7 @@ void DesktopWindowTreeHostX11::DispatchMouseEvent(ui::MouseEvent* event) {
} else {
// Another DesktopWindowTreeHostX11 has installed itself as
// capture. Translate the event's location and dispatch to the other.
- event->ConvertLocationToTarget(window(), g_current_capture->window());
+ ConvertEventToDifferentHost(event, g_current_capture);
g_current_capture->SendEventToProcessor(event);
}
}
@@ -1440,13 +1440,29 @@ void DesktopWindowTreeHostX11::DispatchMouseEvent(ui::MouseEvent* event) {
void DesktopWindowTreeHostX11::DispatchTouchEvent(ui::TouchEvent* event) {
if (g_current_capture && g_current_capture != this &&
event->type() == ui::ET_TOUCH_PRESSED) {
- event->ConvertLocationToTarget(window(), g_current_capture->window());
+ ConvertEventToDifferentHost(event, g_current_capture);
g_current_capture->SendEventToProcessor(event);
} else {
SendEventToProcessor(event);
}
}
+void DesktopWindowTreeHostX11::ConvertEventToDifferentHost(
+ ui::LocatedEvent* located_event,
+ DesktopWindowTreeHostX11* host) {
+ DCHECK_NE(this, host);
+ const gfx::Display display_src =
+ gfx::Screen::GetNativeScreen()->GetDisplayNearestWindow(window());
+ const gfx::Display display_dest =
+ gfx::Screen::GetNativeScreen()->GetDisplayNearestWindow(host->window());
+ DCHECK_EQ(display_src.device_scale_factor(),
+ display_dest.device_scale_factor());
+ gfx::Vector2d offset = GetLocationOnNativeScreen() -
+ host->GetLocationOnNativeScreen();
+ gfx::Point location_in_pixel_in_host = located_event->location() + offset;
+ located_event->set_location(location_in_pixel_in_host);
+}
+
void DesktopWindowTreeHostX11::ResetWindowRegion() {
// If a custom window shape was supplied then apply it.
if (custom_window_shape_) {

Powered by Google App Engine
This is Rietveld 408576698