| 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 a6f120943f57de515556c227b84f04f8f253b208..b3692b62e11573c3c59f9df62a65dddd5e01ff19 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
|
| @@ -31,12 +31,16 @@
|
| #include "ui/events/x/device_list_cache_x.h"
|
| #include "ui/events/x/touch_factory_x11.h"
|
| #include "ui/gfx/display.h"
|
| +#include "ui/gfx/dpi.h"
|
| +#include "ui/gfx/geometry/size_conversions.h"
|
| #include "ui/gfx/image/image_skia.h"
|
| #include "ui/gfx/image/image_skia_rep.h"
|
| #include "ui/gfx/insets.h"
|
| #include "ui/gfx/path.h"
|
| #include "ui/gfx/path_x11.h"
|
| +#include "ui/gfx/point.h"
|
| #include "ui/gfx/screen.h"
|
| +#include "ui/gfx/size.h"
|
| #include "ui/native_theme/native_theme.h"
|
| #include "ui/views/corewm/tooltip_aura.h"
|
| #include "ui/views/ime/input_method.h"
|
| @@ -385,7 +389,7 @@ bool DesktopWindowTreeHostX11::IsVisible() const {
|
| }
|
|
|
| void DesktopWindowTreeHostX11::SetSize(const gfx::Size& requested_size) {
|
| - gfx::Size size = AdjustSize(requested_size);
|
| + gfx::Size size = AdjustSize(gfx::DIPToScreenSize(requested_size));
|
| bool size_changed = bounds_.size() != size;
|
| XResizeWindow(xdisplay_, xwindow_, size.width(), size.height());
|
| bounds_.set_size(size);
|
| @@ -399,9 +403,11 @@ void DesktopWindowTreeHostX11::StackAtTop() {
|
| XRaiseWindow(xdisplay_, xwindow_);
|
| }
|
|
|
| -void DesktopWindowTreeHostX11::CenterWindow(const gfx::Size& size) {
|
| +void DesktopWindowTreeHostX11::CenterWindow(const gfx::Size& size_dip) {
|
| gfx::Rect parent_bounds = GetWorkAreaBoundsInScreen();
|
|
|
| + gfx::Size size = gfx::DIPToScreenSize(size_dip);
|
| +
|
| // If |window_|'s transient parent bounds are big enough to contain |size|,
|
| // use them instead.
|
| if (wm::GetTransientParent(content_window_)) {
|
| @@ -444,7 +450,7 @@ void DesktopWindowTreeHostX11::GetWindowPlacement(
|
| }
|
|
|
| gfx::Rect DesktopWindowTreeHostX11::GetWindowBoundsInScreen() const {
|
| - return bounds_;
|
| + return gfx::ScreenToDIPRect(bounds_);
|
| }
|
|
|
| gfx::Rect DesktopWindowTreeHostX11::GetClientAreaBoundsInScreen() const {
|
| @@ -456,7 +462,7 @@ gfx::Rect DesktopWindowTreeHostX11::GetClientAreaBoundsInScreen() const {
|
| // Attempts to calculate the rect by asking the NonClientFrameView what it
|
| // thought its GetBoundsForClientView() were broke combobox drop down
|
| // placement.
|
| - return bounds_;
|
| + return gfx::ScreenToDIPRect(bounds_);
|
| }
|
|
|
| gfx::Rect DesktopWindowTreeHostX11::GetRestoredBounds() const {
|
| @@ -465,7 +471,7 @@ gfx::Rect DesktopWindowTreeHostX11::GetRestoredBounds() const {
|
| // or restoring bounds, we can record the current bounds before we request
|
| // maximization, and clear it when we detect a state change.
|
| if (!restored_bounds_.IsEmpty())
|
| - return restored_bounds_;
|
| + return gfx::ScreenToDIPRect(restored_bounds_);
|
|
|
| return GetWindowBoundsInScreen();
|
| }
|
| @@ -488,7 +494,7 @@ gfx::Rect DesktopWindowTreeHostX11::GetWorkAreaBoundsInScreen() const {
|
| return gfx::Rect(0, 0, 10, 10);
|
| }
|
|
|
| - return gfx::Rect(x, y, width, height);
|
| + return gfx::ScreenToDIPRect(gfx::Rect(x, y, width, height));
|
| }
|
|
|
| void DesktopWindowTreeHostX11::SetShape(gfx::NativeRegion native_region) {
|
| @@ -1086,12 +1092,14 @@ void DesktopWindowTreeHostX11::InitX11Window(
|
| }
|
| }
|
|
|
| - bounds_ = gfx::Rect(params.bounds.origin(),
|
| - AdjustSize(params.bounds.size()));
|
| + gfx::Point origin_screen = gfx::DIPToScreenPoint(params.bounds.origin());
|
| + gfx::Size size_screen = gfx::DIPToScreenSize(params.bounds.size());
|
| + bounds_ = gfx::Rect(origin_screen,
|
| + AdjustSize(size_screen));
|
| xwindow_ = XCreateWindow(
|
| xdisplay_, x_root_window_,
|
| - bounds_.x(), bounds_.y(),
|
| - bounds_.width(), bounds_.height(),
|
| + origin_screen.x(), origin_screen.y(),
|
| + size_screen.width(), size_screen.height(),
|
| 0, // border width
|
| depth,
|
| InputOutput,
|
| @@ -1409,6 +1417,7 @@ void DesktopWindowTreeHostX11::SetUseNativeFrame(bool use_native_frame) {
|
| }
|
|
|
| void DesktopWindowTreeHostX11::DispatchMouseEvent(ui::MouseEvent* event) {
|
| + event->set_location(gfx::ScreenToDIPPoint(event->location()));
|
| // In Windows, the native events sent to chrome are separated into client
|
| // and non-client versions of events, which we record on our LocatedEvent
|
| // structures. On X11, we emulate the concept of non-client. Before we pass
|
| @@ -1427,8 +1436,8 @@ void DesktopWindowTreeHostX11::DispatchMouseEvent(ui::MouseEvent* event) {
|
| // WindowTreeHost that hosts ash.
|
| if (content_window_ && content_window_->delegate()) {
|
| int flags = event->flags();
|
| - int hit_test_code =
|
| - content_window_->delegate()->GetNonClientComponent(event->location());
|
| + int hit_test_code = content_window_->delegate()->GetNonClientComponent(
|
| + gfx::ScreenToDIPPoint(event->location()));
|
| if (hit_test_code != HTCLIENT && hit_test_code != HTNOWHERE)
|
| flags |= ui::EF_IS_NON_CLIENT;
|
| event->set_flags(flags);
|
| @@ -1440,11 +1449,13 @@ void DesktopWindowTreeHostX11::DispatchMouseEvent(ui::MouseEvent* event) {
|
| FlashFrame(false);
|
|
|
| if (!g_current_capture || g_current_capture == this) {
|
| + event->set_location(gfx::DIPToScreenPoint(event->location()));
|
| SendEventToProcessor(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());
|
| + event->set_location(gfx::DIPToScreenPoint(event->location()));
|
| g_current_capture->SendEventToProcessor(event);
|
| }
|
| }
|
|
|