Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/views/widget/desktop_aura/x11_whole_screen_move_loop.h" | 5 #include "ui/views/widget/desktop_aura/x11_whole_screen_move_loop.h" |
| 6 | 6 |
| 7 #include <X11/Xlib.h> | 7 #include <X11/Xlib.h> |
| 8 // Get rid of a macro from Xlib.h that conflicts with Aura's RootWindow class. | 8 // Get rid of a macro from Xlib.h that conflicts with Aura's RootWindow class. |
| 9 #undef RootWindow | 9 #undef RootWindow |
| 10 | 10 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 86 } | 86 } |
| 87 | 87 |
| 88 return true; | 88 return true; |
| 89 } | 89 } |
| 90 | 90 |
| 91 //////////////////////////////////////////////////////////////////////////////// | 91 //////////////////////////////////////////////////////////////////////////////// |
| 92 // DesktopWindowTreeHostLinux, aura::client::WindowMoveClient implementation: | 92 // DesktopWindowTreeHostLinux, aura::client::WindowMoveClient implementation: |
| 93 | 93 |
| 94 bool X11WholeScreenMoveLoop::RunMoveLoop(aura::Window* source, | 94 bool X11WholeScreenMoveLoop::RunMoveLoop(aura::Window* source, |
| 95 gfx::NativeCursor cursor) { | 95 gfx::NativeCursor cursor) { |
| 96 // Start a capture on the host, so that it continues to receive events during | 96 { |
| 97 // the drag. | 97 // A capture is started on the host, so that it continues to receive events |
| 98 ScopedCapturer capturer(source->GetDispatcher()->host()); | 98 // during the drag. |
| 99 ScopedCapturer capturer(source->GetDispatcher()->host()); | |
| 99 | 100 |
| 100 DCHECK(!in_move_loop_); // Can only handle one nested loop at a time. | 101 DCHECK(!in_move_loop_); // Can only handle one nested loop at a time. |
| 101 in_move_loop_ = true; | 102 in_move_loop_ = true; |
| 102 | 103 |
| 103 XDisplay* display = gfx::GetXDisplay(); | 104 XDisplay* display = gfx::GetXDisplay(); |
| 104 | 105 |
| 105 grab_input_window_ = CreateDragInputWindow(display); | 106 grab_input_window_ = CreateDragInputWindow(display); |
| 106 if (!drag_image_.isNull()) | 107 if (!drag_image_.isNull()) |
| 107 CreateDragImageWindow(); | 108 CreateDragImageWindow(); |
| 108 base::MessagePumpX11::Current()->AddDispatcherForWindow( | 109 base::MessagePumpX11::Current()->AddDispatcherForWindow( |
| 109 this, grab_input_window_); | 110 this, grab_input_window_); |
| 110 | 111 // Releasing ScopedCapturer ensures that any other instance of |
| 112 // X11ScopedCapture will not prematurely release grab that will be acquired | |
| 113 // below. | |
|
sadrul
2014/02/06 19:14:46
I do not understand what this means. Mind explaini
varkha
2014/02/06 19:22:55
There are three points where we set capture, all t
sadrul
2014/02/07 00:08:37
In the context of a drag, who calls this first Set
| |
| 114 } | |
| 111 if (!GrabPointerWithCursor(cursor)) | 115 if (!GrabPointerWithCursor(cursor)) |
| 112 return false; | 116 return false; |
| 113 | 117 |
| 114 // We are handling a mouse drag outside of the aura::RootWindow system. We | 118 // We are handling a mouse drag outside of the aura::RootWindow system. We |
| 115 // must manually make aura think that the mouse button is pressed so that we | 119 // must manually make aura think that the mouse button is pressed so that we |
| 116 // don't draw extraneous tooltips. | 120 // don't draw extraneous tooltips. |
| 117 aura::Env* env = aura::Env::GetInstance(); | 121 aura::Env* env = aura::Env::GetInstance(); |
| 118 if (!env->IsMouseButtonDown()) { | 122 if (!env->IsMouseButtonDown()) { |
| 119 env->set_mouse_button_flags(ui::EF_LEFT_MOUSE_BUTTON); | 123 env->set_mouse_button_flags(ui::EF_LEFT_MOUSE_BUTTON); |
| 120 should_reset_mouse_flags_ = true; | 124 should_reset_mouse_flags_ = true; |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 236 image->SetBounds(0, 0, drag_image_.width(), drag_image_.height()); | 240 image->SetBounds(0, 0, drag_image_.width(), drag_image_.height()); |
| 237 widget->SetContentsView(image); | 241 widget->SetContentsView(image); |
| 238 | 242 |
| 239 widget->Show(); | 243 widget->Show(); |
| 240 widget->GetNativeWindow()->layer()->SetFillsBoundsOpaquely(false); | 244 widget->GetNativeWindow()->layer()->SetFillsBoundsOpaquely(false); |
| 241 | 245 |
| 242 drag_widget_.reset(widget); | 246 drag_widget_.reset(widget); |
| 243 } | 247 } |
| 244 | 248 |
| 245 } // namespace views | 249 } // namespace views |
| OLD | NEW |