x11_desktop_window_move_client.cc revision 7d4cd473f85ac64c3747c96c277f9e506a0d2246
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "ui/views/widget/desktop_aura/x11_desktop_window_move_client.h" 6 7#include <X11/Xlib.h> 8// Get rid of a macro from Xlib.h that conflicts with Aura's RootWindow class. 9#undef RootWindow 10 11#include "base/debug/stack_trace.h" 12#include "base/message_loop/message_loop.h" 13#include "base/message_loop/message_pump_aurax11.h" 14#include "base/run_loop.h" 15#include "ui/aura/env.h" 16#include "ui/aura/root_window.h" 17#include "ui/base/events/event.h" 18#include "ui/base/x/x11_util.h" 19#include "ui/gfx/screen.h" 20 21namespace views { 22 23X11DesktopWindowMoveClient::X11DesktopWindowMoveClient() 24 : move_loop_(this), 25 root_window_(NULL) { 26} 27 28X11DesktopWindowMoveClient::~X11DesktopWindowMoveClient() {} 29 30void X11DesktopWindowMoveClient::OnMouseMovement(XMotionEvent* event) { 31 gfx::Point cursor_point(event->x_root, event->y_root); 32 gfx::Point system_loc = cursor_point - window_offset_; 33 root_window_->SetHostBounds(gfx::Rect( 34 system_loc, root_window_->GetHostSize())); 35} 36 37void X11DesktopWindowMoveClient::OnMoveLoopEnded() { 38 root_window_ = NULL; 39} 40 41//////////////////////////////////////////////////////////////////////////////// 42// DesktopRootWindowHostLinux, aura::client::WindowMoveClient implementation: 43 44aura::client::WindowMoveResult X11DesktopWindowMoveClient::RunMoveLoop( 45 aura::Window* source, 46 const gfx::Vector2d& drag_offset, 47 aura::client::WindowMoveSource move_source) { 48 window_offset_ = drag_offset; 49 root_window_ = source->GetRootWindow(); 50 51 bool success = move_loop_.RunMoveLoop(source); 52 return success ? aura::client::MOVE_SUCCESSFUL : aura::client::MOVE_CANCELED; 53} 54 55void X11DesktopWindowMoveClient::EndMoveLoop() { 56 move_loop_.EndMoveLoop(); 57} 58 59} // namespace views 60