| Index: ui/views/widget/desktop_aura/x11_window_event_filter.cc
|
| diff --git a/ui/views/widget/desktop_aura/x11_window_event_filter.cc b/ui/views/widget/desktop_aura/x11_window_event_filter.cc
|
| index 5e01cd65addbfd75ff5475a2d1c27261fe24839f..be85b35b6e1024751272eaa50f818e610b945cb1 100644
|
| --- a/ui/views/widget/desktop_aura/x11_window_event_filter.cc
|
| +++ b/ui/views/widget/desktop_aura/x11_window_event_filter.cc
|
| @@ -46,131 +46,28 @@ namespace views {
|
|
|
| X11WindowEventFilter::X11WindowEventFilter(
|
| DesktopWindowTreeHost* window_tree_host)
|
| - : xdisplay_(gfx::GetXDisplay()),
|
| + : WindowEventFilter(window_tree_host),
|
| + xdisplay_(gfx::GetXDisplay()),
|
| xwindow_(window_tree_host->AsWindowTreeHost()->GetAcceleratedWidget()),
|
| - x_root_window_(DefaultRootWindow(xdisplay_)),
|
| - window_tree_host_(window_tree_host),
|
| - click_component_(HTNOWHERE) {
|
| -}
|
| + x_root_window_(DefaultRootWindow(xdisplay_)) {}
|
|
|
| X11WindowEventFilter::~X11WindowEventFilter() {
|
| }
|
|
|
| -void X11WindowEventFilter::OnMouseEvent(ui::MouseEvent* event) {
|
| - if (event->type() != ui::ET_MOUSE_PRESSED)
|
| - return;
|
| -
|
| - aura::Window* target = static_cast<aura::Window*>(event->target());
|
| - if (!target->delegate())
|
| - return;
|
| -
|
| - int previous_click_component = HTNOWHERE;
|
| - int component =
|
| - target->delegate()->GetNonClientComponent(event->location());
|
| - if (event->IsLeftMouseButton()) {
|
| - previous_click_component = click_component_;
|
| - click_component_ = component;
|
| - }
|
| -
|
| - if (component == HTCAPTION) {
|
| - OnClickedCaption(event, previous_click_component);
|
| - } else if (component == HTMAXBUTTON) {
|
| - OnClickedMaximizeButton(event);
|
| - } else {
|
| - // Get the |x_root_window_| location out of the native event.
|
| - if (event->IsLeftMouseButton() && event->native_event()) {
|
| - const gfx::Point x_root_location =
|
| - ui::EventSystemLocationFromNative(event->native_event());
|
| - if ((target->GetProperty(aura::client::kResizeBehaviorKey) &
|
| - ui::mojom::kResizeBehaviorCanResize) &&
|
| - DispatchHostWindowDragMovement(component, x_root_location)) {
|
| - event->StopPropagation();
|
| - }
|
| - }
|
| - }
|
| -}
|
| -
|
| -void X11WindowEventFilter::OnClickedCaption(ui::MouseEvent* event,
|
| - int previous_click_component) {
|
| - aura::Window* target = static_cast<aura::Window*>(event->target());
|
| -
|
| - if (event->IsMiddleMouseButton()) {
|
| - LinuxUI::NonClientMiddleClickAction action =
|
| - LinuxUI::MIDDLE_CLICK_ACTION_LOWER;
|
| - LinuxUI* linux_ui = LinuxUI::instance();
|
| - if (linux_ui)
|
| - action = linux_ui->GetNonClientMiddleClickAction();
|
| -
|
| - switch (action) {
|
| - case LinuxUI::MIDDLE_CLICK_ACTION_NONE:
|
| - break;
|
| - case LinuxUI::MIDDLE_CLICK_ACTION_LOWER:
|
| - XLowerWindow(xdisplay_, xwindow_);
|
| - break;
|
| - case LinuxUI::MIDDLE_CLICK_ACTION_MINIMIZE:
|
| - window_tree_host_->Minimize();
|
| - break;
|
| - case LinuxUI::MIDDLE_CLICK_ACTION_TOGGLE_MAXIMIZE:
|
| - if (target->GetProperty(aura::client::kResizeBehaviorKey) &
|
| - ui::mojom::kResizeBehaviorCanMaximize)
|
| - ToggleMaximizedState();
|
| - break;
|
| - }
|
| -
|
| - event->SetHandled();
|
| - return;
|
| - }
|
| -
|
| - if (event->IsLeftMouseButton() && event->flags() & ui::EF_IS_DOUBLE_CLICK) {
|
| - click_component_ = HTNOWHERE;
|
| - if ((target->GetProperty(aura::client::kResizeBehaviorKey) &
|
| - ui::mojom::kResizeBehaviorCanMaximize) &&
|
| - previous_click_component == HTCAPTION) {
|
| - // Our event is a double click in the caption area in a window that can be
|
| - // maximized. We are responsible for dispatching this as a minimize/
|
| - // maximize on X11 (Windows converts this to min/max events for us).
|
| - ToggleMaximizedState();
|
| - event->SetHandled();
|
| - return;
|
| - }
|
| - }
|
| -
|
| - // Get the |x_root_window_| location out of the native event.
|
| +void X11WindowEventFilter::MaybeDispatchHostWindowDragMovement(
|
| + int hittest,
|
| + ui::MouseEvent* event) {
|
| if (event->IsLeftMouseButton() && event->native_event()) {
|
| + // Get the |x_root_window_| location out of the native event.
|
| const gfx::Point x_root_location =
|
| ui::EventSystemLocationFromNative(event->native_event());
|
| - if (DispatchHostWindowDragMovement(HTCAPTION, x_root_location))
|
| + if (DispatchHostWindowDragMovement(hittest, x_root_location))
|
| event->StopPropagation();
|
| }
|
| }
|
|
|
| -void X11WindowEventFilter::OnClickedMaximizeButton(ui::MouseEvent* event) {
|
| - aura::Window* target = static_cast<aura::Window*>(event->target());
|
| - views::Widget* widget = views::Widget::GetWidgetForNativeView(target);
|
| - if (!widget)
|
| - return;
|
| -
|
| - gfx::Rect display_work_area =
|
| - display::Screen::GetScreen()->GetDisplayNearestWindow(target).work_area();
|
| - gfx::Rect bounds = widget->GetWindowBoundsInScreen();
|
| - if (event->IsMiddleMouseButton()) {
|
| - bounds.set_y(display_work_area.y());
|
| - bounds.set_height(display_work_area.height());
|
| - widget->SetBounds(bounds);
|
| - event->StopPropagation();
|
| - } else if (event->IsRightMouseButton()) {
|
| - bounds.set_x(display_work_area.x());
|
| - bounds.set_width(display_work_area.width());
|
| - widget->SetBounds(bounds);
|
| - event->StopPropagation();
|
| - }
|
| -}
|
| -
|
| -void X11WindowEventFilter::ToggleMaximizedState() {
|
| - if (window_tree_host_->IsMaximized())
|
| - window_tree_host_->Restore();
|
| - else
|
| - window_tree_host_->Maximize();
|
| +void X11WindowEventFilter::LowerWindow() {
|
| + XLowerWindow(xdisplay_, xwindow_);
|
| }
|
|
|
| bool X11WindowEventFilter::DispatchHostWindowDragMovement(
|
|
|