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/desktop_native_widget_aura.h" | 5 #include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "ui/aura/client/stacking_client.h" | 8 #include "ui/aura/client/stacking_client.h" |
9 #include "ui/aura/focus_manager.h" | 9 #include "ui/aura/focus_manager.h" |
10 #include "ui/aura/root_window.h" | 10 #include "ui/aura/root_window.h" |
11 #include "ui/aura/root_window_host.h" | 11 #include "ui/aura/root_window_host.h" |
12 #include "ui/aura/window.h" | 12 #include "ui/aura/window.h" |
13 #include "ui/aura/window_property.h" | 13 #include "ui/aura/window_property.h" |
14 #include "ui/base/hit_test.h" | 14 #include "ui/base/hit_test.h" |
15 #include "ui/compositor/layer.h" | 15 #include "ui/compositor/layer.h" |
16 #include "ui/gfx/canvas.h" | 16 #include "ui/gfx/canvas.h" |
17 #include "ui/native_theme/native_theme.h" | 17 #include "ui/native_theme/native_theme.h" |
18 #include "ui/views/corewm/compound_event_filter.h" | 18 #include "ui/views/corewm/compound_event_filter.h" |
19 #include "ui/views/corewm/input_method_event_filter.h" | 19 #include "ui/views/corewm/input_method_event_filter.h" |
| 20 #include "ui/views/drag_utils.h" |
20 #include "ui/views/ime/input_method.h" | 21 #include "ui/views/ime/input_method.h" |
21 #include "ui/views/ime/input_method_bridge.h" | 22 #include "ui/views/ime/input_method_bridge.h" |
22 #include "ui/views/widget/desktop_aura/desktop_root_window_host.h" | 23 #include "ui/views/widget/desktop_aura/desktop_root_window_host.h" |
| 24 #include "ui/views/widget/drop_helper.h" |
23 #include "ui/views/widget/native_widget_aura_window_observer.h" | 25 #include "ui/views/widget/native_widget_aura_window_observer.h" |
| 26 #include "ui/views/widget/root_view.h" |
24 #include "ui/views/widget/widget.h" | 27 #include "ui/views/widget/widget.h" |
25 #include "ui/views/widget/widget_aura_utils.h" | 28 #include "ui/views/widget/widget_aura_utils.h" |
26 | 29 |
27 DECLARE_EXPORTED_WINDOW_PROPERTY_TYPE(VIEWS_EXPORT, | 30 DECLARE_EXPORTED_WINDOW_PROPERTY_TYPE(VIEWS_EXPORT, |
28 views::DesktopNativeWidgetAura*); | 31 views::DesktopNativeWidgetAura*); |
29 | 32 |
30 namespace views { | 33 namespace views { |
31 | 34 |
32 DEFINE_WINDOW_PROPERTY_KEY(DesktopNativeWidgetAura*, | 35 DEFINE_WINDOW_PROPERTY_KEY(DesktopNativeWidgetAura*, |
33 kDesktopNativeWidgetAuraKey, NULL); | 36 kDesktopNativeWidgetAuraKey, NULL); |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
126 window_->Show(); | 129 window_->Show(); |
127 | 130 |
128 desktop_root_window_host_ = params.desktop_root_window_host ? | 131 desktop_root_window_host_ = params.desktop_root_window_host ? |
129 params.desktop_root_window_host : | 132 params.desktop_root_window_host : |
130 DesktopRootWindowHost::Create(native_widget_delegate_, | 133 DesktopRootWindowHost::Create(native_widget_delegate_, |
131 this, params.bounds); | 134 this, params.bounds); |
132 root_window_.reset( | 135 root_window_.reset( |
133 desktop_root_window_host_->Init(window_, params)); | 136 desktop_root_window_host_->Init(window_, params)); |
134 stacking_client_.reset( | 137 stacking_client_.reset( |
135 new DesktopNativeWidgetAuraStackingClient(root_window_.get())); | 138 new DesktopNativeWidgetAuraStackingClient(root_window_.get())); |
| 139 drop_helper_.reset(new DropHelper( |
| 140 static_cast<internal::RootView*>(GetWidget()->GetRootView()))); |
| 141 aura::client::SetDragDropDelegate(window_, this); |
136 | 142 |
137 aura::client::SetActivationDelegate(window_, this); | 143 aura::client::SetActivationDelegate(window_, this); |
138 } | 144 } |
139 | 145 |
140 NonClientFrameView* DesktopNativeWidgetAura::CreateNonClientFrameView() { | 146 NonClientFrameView* DesktopNativeWidgetAura::CreateNonClientFrameView() { |
141 return desktop_root_window_host_->CreateNonClientFrameView(); | 147 return desktop_root_window_host_->CreateNonClientFrameView(); |
142 } | 148 } |
143 | 149 |
144 bool DesktopNativeWidgetAura::ShouldUseNativeFrame() const { | 150 bool DesktopNativeWidgetAura::ShouldUseNativeFrame() const { |
145 return desktop_root_window_host_->ShouldUseNativeFrame(); | 151 return desktop_root_window_host_->ShouldUseNativeFrame(); |
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
387 } | 393 } |
388 | 394 |
389 void DesktopNativeWidgetAura::FlashFrame(bool flash_frame) { | 395 void DesktopNativeWidgetAura::FlashFrame(bool flash_frame) { |
390 desktop_root_window_host_->FlashFrame(flash_frame); | 396 desktop_root_window_host_->FlashFrame(flash_frame); |
391 } | 397 } |
392 | 398 |
393 bool DesktopNativeWidgetAura::IsAccessibleWidget() const { | 399 bool DesktopNativeWidgetAura::IsAccessibleWidget() const { |
394 return false; | 400 return false; |
395 } | 401 } |
396 | 402 |
397 void DesktopNativeWidgetAura::RunShellDrag(View* view, | 403 void DesktopNativeWidgetAura::RunShellDrag( |
| 404 View* view, |
398 const ui::OSExchangeData& data, | 405 const ui::OSExchangeData& data, |
399 const gfx::Point& location, | 406 const gfx::Point& location, |
400 int operation, | 407 int operation, |
401 ui::DragDropTypes::DragEventSource source) { | 408 ui::DragDropTypes::DragEventSource source) { |
| 409 views::RunShellDrag(window_, data, location, operation, source); |
402 } | 410 } |
403 | 411 |
404 void DesktopNativeWidgetAura::SchedulePaintInRect(const gfx::Rect& rect) { | 412 void DesktopNativeWidgetAura::SchedulePaintInRect(const gfx::Rect& rect) { |
405 if (window_) | 413 if (window_) |
406 window_->SchedulePaintInRect(rect); | 414 window_->SchedulePaintInRect(rect); |
407 } | 415 } |
408 | 416 |
409 void DesktopNativeWidgetAura::SetCursor(gfx::NativeCursor cursor) { | 417 void DesktopNativeWidgetAura::SetCursor(gfx::NativeCursor cursor) { |
410 desktop_root_window_host_->AsRootWindowHost()->SetCursor(cursor); | 418 desktop_root_window_host_->AsRootWindowHost()->SetCursor(cursor); |
411 } | 419 } |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
515 } | 523 } |
516 | 524 |
517 void DesktopNativeWidgetAura::OnWindowDestroying() { | 525 void DesktopNativeWidgetAura::OnWindowDestroying() { |
518 native_widget_delegate_->OnNativeWidgetDestroying(); | 526 native_widget_delegate_->OnNativeWidgetDestroying(); |
519 } | 527 } |
520 | 528 |
521 void DesktopNativeWidgetAura::OnWindowDestroyed() { | 529 void DesktopNativeWidgetAura::OnWindowDestroyed() { |
522 window_ = NULL; | 530 window_ = NULL; |
523 native_widget_delegate_->OnNativeWidgetDestroyed(); | 531 native_widget_delegate_->OnNativeWidgetDestroyed(); |
524 if (ownership_ == Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET) | 532 if (ownership_ == Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET) |
525 delete this; | 533 delete this; |
526 } | 534 } |
527 | 535 |
528 void DesktopNativeWidgetAura::OnWindowTargetVisibilityChanged(bool visible) { | 536 void DesktopNativeWidgetAura::OnWindowTargetVisibilityChanged(bool visible) { |
529 } | 537 } |
530 | 538 |
531 bool DesktopNativeWidgetAura::HasHitTestMask() const { | 539 bool DesktopNativeWidgetAura::HasHitTestMask() const { |
532 return native_widget_delegate_->HasHitTestMask(); | 540 return native_widget_delegate_->HasHitTestMask(); |
533 } | 541 } |
534 | 542 |
535 void DesktopNativeWidgetAura::GetHitTestMask(gfx::Path* mask) const { | 543 void DesktopNativeWidgetAura::GetHitTestMask(gfx::Path* mask) const { |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
626 // DesktopNativeWidgetAura, views::internal::InputMethodDelegate: | 634 // DesktopNativeWidgetAura, views::internal::InputMethodDelegate: |
627 | 635 |
628 void DesktopNativeWidgetAura::DispatchKeyEventPostIME(const ui::KeyEvent& key) { | 636 void DesktopNativeWidgetAura::DispatchKeyEventPostIME(const ui::KeyEvent& key) { |
629 FocusManager* focus_manager = | 637 FocusManager* focus_manager = |
630 native_widget_delegate_->AsWidget()->GetFocusManager(); | 638 native_widget_delegate_->AsWidget()->GetFocusManager(); |
631 if (native_widget_delegate_->OnKeyEvent(key) || !focus_manager) | 639 if (native_widget_delegate_->OnKeyEvent(key) || !focus_manager) |
632 return; | 640 return; |
633 focus_manager->OnKeyEvent(key); | 641 focus_manager->OnKeyEvent(key); |
634 } | 642 } |
635 | 643 |
| 644 //////////////////////////////////////////////////////////////////////////////// |
| 645 // DesktopNativeWidgetAura, aura::WindowDragDropDelegate implementation: |
| 646 |
| 647 void DesktopNativeWidgetAura::OnDragEntered(const ui::DropTargetEvent& event) { |
| 648 DCHECK(drop_helper_.get() != NULL); |
| 649 last_drop_operation_ = drop_helper_->OnDragOver(event.data(), |
| 650 event.location(), event.source_operations()); |
| 651 } |
| 652 |
| 653 int DesktopNativeWidgetAura::OnDragUpdated(const ui::DropTargetEvent& event) { |
| 654 DCHECK(drop_helper_.get() != NULL); |
| 655 last_drop_operation_ = drop_helper_->OnDragOver(event.data(), |
| 656 event.location(), event.source_operations()); |
| 657 return last_drop_operation_; |
| 658 } |
| 659 |
| 660 void DesktopNativeWidgetAura::OnDragExited() { |
| 661 DCHECK(drop_helper_.get() != NULL); |
| 662 drop_helper_->OnDragExit(); |
| 663 } |
| 664 |
| 665 int DesktopNativeWidgetAura::OnPerformDrop(const ui::DropTargetEvent& event) { |
| 666 DCHECK(drop_helper_.get() != NULL); |
| 667 return drop_helper_->OnDrop(event.data(), event.location(), |
| 668 last_drop_operation_); |
| 669 } |
| 670 |
636 } // namespace views | 671 } // namespace views |
OLD | NEW |