Chromium Code Reviews| Index: ash/magnifier/partial_magnification_controller.cc |
| diff --git a/ash/magnifier/partial_magnification_controller.cc b/ash/magnifier/partial_magnification_controller.cc |
| index 3dcdd38448fdee2f915ab2b7949c43dbda4e68ff..5b51928eb434836f45a8fe10a500f85ce0b54272 100644 |
| --- a/ash/magnifier/partial_magnification_controller.cc |
| +++ b/ash/magnifier/partial_magnification_controller.cc |
| @@ -14,6 +14,10 @@ |
| #include "ui/views/widget/widget.h" |
| #include "ui/wm/core/coordinate_conversion.h" |
| +#if defined(OS_CHROMEOS) |
| +#include "ash/common/system/chromeos/palette/palette_utils.h" |
| +#endif |
| + |
| namespace ash { |
| namespace { |
| @@ -54,6 +58,16 @@ aura::Window* GetCurrentRootWindow() { |
| return nullptr; |
| } |
| +// Returns true if the event should be processed normally, ie, the stylus is |
| +// over the palette icon or widget. |
| +bool ShouldSkipEventFiltering(const gfx::Point& point) { |
| +#if defined(OS_CHROMEOS) |
|
jdufault
2016/09/02 20:22:32
I'm leaning towards making this entire file cros o
James Cook
2016/09/06 16:16:32
That's fine with me.
|
| + return PaletteContainsPointInScreen(point); |
| +#else |
| + return false; |
| +#endif |
| +} |
| + |
| } // namespace |
| // The content mask provides a clipping layer for the magnification window so we |
| @@ -178,8 +192,16 @@ void PartialMagnificationController::OnLocatedEvent( |
| if (pointer_details.pointer_type != ui::EventPointerType::POINTER_TYPE_PEN) |
| return; |
| - if (event->type() == ui::ET_MOUSE_PRESSED) |
| + // Compute the event location in screen space. |
| + aura::Window* target = static_cast<aura::Window*>(event->target()); |
| + aura::Window* event_root = target->GetRootWindow(); |
| + gfx::Point screen_point = event->root_location(); |
| + wm::ConvertPointToScreen(event_root, &screen_point); |
| + |
| + if (event->type() == ui::ET_MOUSE_PRESSED && |
| + !ShouldSkipEventFiltering(screen_point)) { |
| SetActive(true); |
| + } |
| if (event->type() == ui::ET_MOUSE_RELEASED) |
| SetActive(false); |
| @@ -198,17 +220,14 @@ void PartialMagnificationController::OnLocatedEvent( |
| return; |
| } |
| - gfx::Point point = event->root_location(); |
| - |
| // Remap point from where it was captured to the display it is actually on. |
| - aura::Window* target = static_cast<aura::Window*>(event->target()); |
| - aura::Window* event_root = target->GetRootWindow(); |
| + gfx::Point point = event->root_location(); |
| aura::Window::ConvertPointToTarget( |
| event_root, host_widget_->GetNativeView()->GetRootWindow(), &point); |
| - |
| host_widget_->SetBounds(GetBounds(point)); |
| - event->StopPropagation(); |
| + if (!ShouldSkipEventFiltering(screen_point)) |
| + event->StopPropagation(); |
| } |
| void PartialMagnificationController::CreateMagnifierWindow( |