Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(91)

Side by Side Diff: views/widget/native_widget_aura.cc

Issue 8450018: First shot at implementing drag&drop for Aura (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed windows build errors Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « views/widget/native_widget_aura.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "views/widget/native_widget_aura.h" 5 #include "views/widget/native_widget_aura.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/string_util.h"
8 #include "ui/aura/client/aura_constants.h" 9 #include "ui/aura/client/aura_constants.h"
10 #include "ui/aura/client/drag_drop_client.h"
9 #include "ui/aura/desktop.h" 11 #include "ui/aura/desktop.h"
10 #include "ui/aura/desktop_observer.h" 12 #include "ui/aura/desktop_observer.h"
11 #include "ui/aura/event.h" 13 #include "ui/aura/event.h"
12 #include "ui/aura/window.h" 14 #include "ui/aura/window.h"
13 #include "ui/aura/window_types.h" 15 #include "ui/aura/window_types.h"
16 #include "ui/base/dragdrop/os_exchange_data.h"
14 #include "ui/base/ui_base_types.h" 17 #include "ui/base/ui_base_types.h"
15 #include "ui/gfx/canvas.h" 18 #include "ui/gfx/canvas.h"
16 #include "ui/gfx/compositor/layer.h" 19 #include "ui/gfx/compositor/layer.h"
17 #include "ui/gfx/font.h" 20 #include "ui/gfx/font.h"
18 #include "ui/gfx/screen.h" 21 #include "ui/gfx/screen.h"
22 #include "views/widget/drop_helper.h"
19 #include "views/widget/native_widget_delegate.h" 23 #include "views/widget/native_widget_delegate.h"
20 #include "views/widget/tooltip_manager_views.h" 24 #include "views/widget/tooltip_manager_views.h"
21 25
22 #if defined(OS_WIN) 26 #if defined(OS_WIN)
23 #include "base/win/scoped_gdi_object.h" 27 #include "base/win/scoped_gdi_object.h"
24 #include "base/win/win_util.h" 28 #include "base/win/win_util.h"
25 #include "ui/base/l10n/l10n_util_win.h" 29 #include "ui/base/l10n/l10n_util_win.h"
26 #endif 30 #endif
27 31
28 #if defined(HAVE_IBUS) 32 #if defined(HAVE_IBUS)
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 gfx::NativeView parent = params.GetParent(); 147 gfx::NativeView parent = params.GetParent();
144 if (parent) 148 if (parent)
145 parent->AddTransientChild(window_); 149 parent->AddTransientChild(window_);
146 // SetAlwaysOnTop before SetParent so that always-on-top container is used. 150 // SetAlwaysOnTop before SetParent so that always-on-top container is used.
147 SetAlwaysOnTop(params.keep_on_top); 151 SetAlwaysOnTop(params.keep_on_top);
148 window_->SetParent(NULL); 152 window_->SetParent(NULL);
149 } 153 }
150 // TODO(beng): do this some other way. 154 // TODO(beng): do this some other way.
151 delegate_->OnNativeWidgetSizeChanged(params.bounds.size()); 155 delegate_->OnNativeWidgetSizeChanged(params.bounds.size());
152 can_activate_ = params.can_activate; 156 can_activate_ = params.can_activate;
157 DCHECK(GetWidget()->GetRootView());
153 if (params.type != Widget::InitParams::TYPE_TOOLTIP && !params.child) { 158 if (params.type != Widget::InitParams::TYPE_TOOLTIP && !params.child) {
154 DCHECK(GetWidget()->GetRootView());
155 views::TooltipManagerViews* manager = new views::TooltipManagerViews( 159 views::TooltipManagerViews* manager = new views::TooltipManagerViews(
156 GetWidget()->GetRootView()); 160 GetWidget()->GetRootView());
157 tooltip_manager_.reset(manager); 161 tooltip_manager_.reset(manager);
158 } 162 }
163 drop_helper_.reset(new DropHelper(GetWidget()->GetRootView()));
164 if (params.type != Widget::InitParams::TYPE_TOOLTIP &&
165 params.type != Widget::InitParams::TYPE_POPUP) {
166 window_->SetProperty(aura::kDragDropDelegateKey,
167 static_cast<aura::WindowDragDropDelegate*>(this));
168 }
159 } 169 }
160 170
161 NonClientFrameView* NativeWidgetAura::CreateNonClientFrameView() { 171 NonClientFrameView* NativeWidgetAura::CreateNonClientFrameView() {
162 return NULL; 172 return NULL;
163 } 173 }
164 174
165 void NativeWidgetAura::UpdateFrameAfterFrameChange() { 175 void NativeWidgetAura::UpdateFrameAfterFrameChange() {
166 // We don't support changing the frame type. 176 // We don't support changing the frame type.
167 NOTREACHED(); 177 NOTREACHED();
168 } 178 }
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 475
466 bool NativeWidgetAura::IsAccessibleWidget() const { 476 bool NativeWidgetAura::IsAccessibleWidget() const {
467 // http://crbug.com/102570 477 // http://crbug.com/102570
468 //NOTIMPLEMENTED(); 478 //NOTIMPLEMENTED();
469 return false; 479 return false;
470 } 480 }
471 481
472 void NativeWidgetAura::RunShellDrag(View* view, 482 void NativeWidgetAura::RunShellDrag(View* view,
473 const ui::OSExchangeData& data, 483 const ui::OSExchangeData& data,
474 int operation) { 484 int operation) {
475 // http://crbug.com/97845 485 aura::DragDropClient* client = static_cast<aura::DragDropClient*>(
476 NOTIMPLEMENTED(); 486 aura::Desktop::GetInstance()->GetProperty(
487 aura::kDesktopDragDropClientKey));
488 if (client)
489 client->StartDragAndDrop(data, operation);
477 } 490 }
478 491
479 void NativeWidgetAura::SchedulePaintInRect(const gfx::Rect& rect) { 492 void NativeWidgetAura::SchedulePaintInRect(const gfx::Rect& rect) {
480 if (window_) 493 if (window_)
481 window_->SchedulePaintInRect(rect); 494 window_->SchedulePaintInRect(rect);
482 } 495 }
483 496
484 void NativeWidgetAura::SetCursor(gfx::NativeCursor cursor) { 497 void NativeWidgetAura::SetCursor(gfx::NativeCursor cursor) {
485 cursor_ = cursor; 498 cursor_ = cursor;
486 aura::Desktop::GetInstance()->SetCursor(cursor); 499 aura::Desktop::GetInstance()->SetCursor(cursor);
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 631
619 void NativeWidgetAura::OnCaptureLost() { 632 void NativeWidgetAura::OnCaptureLost() {
620 delegate_->OnMouseCaptureLost(); 633 delegate_->OnMouseCaptureLost();
621 } 634 }
622 635
623 void NativeWidgetAura::OnPaint(gfx::Canvas* canvas) { 636 void NativeWidgetAura::OnPaint(gfx::Canvas* canvas) {
624 delegate_->OnNativeWidgetPaint(canvas); 637 delegate_->OnNativeWidgetPaint(canvas);
625 } 638 }
626 639
627 void NativeWidgetAura::OnWindowDestroying() { 640 void NativeWidgetAura::OnWindowDestroying() {
641 window_->SetProperty(aura::kDragDropDelegateKey, NULL);
628 delegate_->OnNativeWidgetDestroying(); 642 delegate_->OnNativeWidgetDestroying();
629 643
630 // If the aura::Window is destroyed, we can no longer show tooltips. 644 // If the aura::Window is destroyed, we can no longer show tooltips.
631 tooltip_manager_.reset(); 645 tooltip_manager_.reset();
632 } 646 }
633 647
634 void NativeWidgetAura::OnWindowDestroyed() { 648 void NativeWidgetAura::OnWindowDestroyed() {
635 window_ = NULL; 649 window_ = NULL;
636 tooltip_manager_.reset(); 650 tooltip_manager_.reset();
637 delegate_->OnNativeWidgetDestroyed(); 651 delegate_->OnNativeWidgetDestroyed();
638 if (ownership_ == Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET) 652 if (ownership_ == Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET)
639 delete this; 653 delete this;
640 } 654 }
641 655
642 void NativeWidgetAura::OnWindowVisibilityChanged(bool visible) { 656 void NativeWidgetAura::OnWindowVisibilityChanged(bool visible) {
643 delegate_->OnNativeWidgetVisibilityChanged(visible); 657 delegate_->OnNativeWidgetVisibilityChanged(visible);
644 } 658 }
645 659
660 bool NativeWidgetAura::CanDrop(const aura::DropTargetEvent& event) {
661 DCHECK(drop_helper_.get() != NULL);
662 View* view = drop_helper_->target_view();
663 if (view)
664 return view->CanDrop(event.data());
665 return false;
666 }
667
668 void NativeWidgetAura::OnDragEntered(const aura::DropTargetEvent& event) {
669 DCHECK(drop_helper_.get() != NULL);
670 drop_helper_->OnDragOver(event.data(), event.location(),
671 event.source_operations());
672 }
673
674 int NativeWidgetAura::OnDragUpdated(const aura::DropTargetEvent& event) {
675 DCHECK(drop_helper_.get() != NULL);
676 return drop_helper_->OnDragOver(event.data(), event.location(),
677 event.source_operations());
678 }
679
680 void NativeWidgetAura::OnDragExited() {
681 DCHECK(drop_helper_.get() != NULL);
682 drop_helper_->OnDragExit();
683 }
684
685 int NativeWidgetAura::OnPerformDrop(const aura::DropTargetEvent& event) {
686 DCHECK(drop_helper_.get() != NULL);
687 return drop_helper_->OnDrop(event.data(), event.location(),
688 event.source_operations());
689 }
690
646 //////////////////////////////////////////////////////////////////////////////// 691 ////////////////////////////////////////////////////////////////////////////////
647 // Widget, public: 692 // Widget, public:
648 693
649 // static 694 // static
650 void Widget::NotifyLocaleChanged() { 695 void Widget::NotifyLocaleChanged() {
651 // http://crbug.com/102574 696 // http://crbug.com/102574
652 NOTIMPLEMENTED(); 697 NOTIMPLEMENTED();
653 } 698 }
654 699
655 // static 700 // static
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
729 NOTIMPLEMENTED(); 774 NOTIMPLEMENTED();
730 } 775 }
731 776
732 // static 777 // static
733 bool NativeWidgetPrivate::IsMouseButtonDown() { 778 bool NativeWidgetPrivate::IsMouseButtonDown() {
734 return aura::Desktop::GetInstance()->IsMouseButtonDown(); 779 return aura::Desktop::GetInstance()->IsMouseButtonDown();
735 } 780 }
736 781
737 } // namespace internal 782 } // namespace internal
738 } // namespace views 783 } // namespace views
OLDNEW
« no previous file with comments | « views/widget/native_widget_aura.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698