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

Unified Diff: ui/views/mus/native_widget_mus.cc

Issue 2323553002: mash: Use the new mus drag and drop API to get drag working in mash. (Closed)
Patch Set: comments Created 4 years, 3 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/mus/native_widget_mus.h ('k') | ui/views/mus/os_exchange_data_provider_mus.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/mus/native_widget_mus.cc
diff --git a/ui/views/mus/native_widget_mus.cc b/ui/views/mus/native_widget_mus.cc
index 959b656065b347cef0eaa371f17eed9ab0c75cd7..fa6641d38383c44d7ef62c29b95fb2e251788c6d 100644
--- a/ui/views/mus/native_widget_mus.cc
+++ b/ui/views/mus/native_widget_mus.cc
@@ -4,6 +4,9 @@
#include "ui/views/mus/native_widget_mus.h"
+#include <utility>
+#include <vector>
+
#include "base/callback.h"
#include "base/macros.h"
#include "base/message_loop/message_loop.h"
@@ -32,10 +35,14 @@
#include "ui/gfx/path.h"
#include "ui/native_theme/native_theme_aura.h"
#include "ui/platform_window/platform_window_delegate.h"
+#include "ui/views/drag_utils.h"
+#include "ui/views/mus/drag_drop_client_mus.h"
+#include "ui/views/mus/drop_target_mus.h"
#include "ui/views/mus/window_manager_connection.h"
#include "ui/views/mus/window_manager_constants_converters.h"
#include "ui/views/mus/window_manager_frame_values.h"
#include "ui/views/mus/window_tree_host_mus.h"
+#include "ui/views/widget/drop_helper.h"
#include "ui/views/widget/native_widget_aura.h"
#include "ui/views/widget/widget_delegate.h"
#include "ui/views/window/custom_frame_view.h"
@@ -96,9 +103,9 @@ class FocusControllerMus : public wm::FocusController {
class ContentWindowLayoutManager : public aura::LayoutManager {
public:
- ContentWindowLayoutManager(aura::Window* outer, aura::Window* inner)
+ ContentWindowLayoutManager(aura::Window* outer, aura::Window* inner)
: outer_(outer), inner_(inner) {}
- ~ContentWindowLayoutManager() override {}
+ ~ContentWindowLayoutManager() override {}
private:
// aura::LayoutManager:
@@ -523,14 +530,15 @@ NativeWidgetMus::NativeWidgetMus(internal::NativeWidgetDelegate* delegate,
show_state_before_fullscreen_(ui::mojom::ShowState::DEFAULT),
ownership_(Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET),
content_(new aura::Window(this)),
+ last_drop_operation_(ui::DragDropTypes::DRAG_NONE),
close_widget_factory_(this) {
window_->set_input_event_handler(this);
- mus_window_observer_.reset(new MusWindowObserver(this));
+ mus_window_observer_ = base::MakeUnique<MusWindowObserver>(this);
// TODO(fsamuel): Figure out lifetime of |window_|.
aura::SetMusWindow(content_, window_);
window->SetLocalProperty(kNativeWidgetMusKey, this);
- window_tree_host_.reset(new WindowTreeHostMus(this, window_));
+ window_tree_host_ = base::MakeUnique<WindowTreeHostMus>(this, window_);
}
NativeWidgetMus::~NativeWidgetMus() {
@@ -695,29 +703,38 @@ void NativeWidgetMus::InitNativeWidget(const Widget::InitParams& params) {
WindowManagerConnection::Get()->connector());
}
- focus_client_.reset(
- new FocusControllerMus(new FocusRulesImpl(hosted_window)));
+ focus_client_ =
+ base::MakeUnique<FocusControllerMus>(new FocusRulesImpl(hosted_window));
aura::client::SetFocusClient(hosted_window, focus_client_.get());
aura::client::SetActivationClient(hosted_window, focus_client_.get());
- screen_position_client_.reset(new ScreenPositionClientMus(window_));
+ screen_position_client_ = base::MakeUnique<ScreenPositionClientMus>(window_);
aura::client::SetScreenPositionClient(hosted_window,
screen_position_client_.get());
+ drag_drop_client_ = base::MakeUnique<DragDropClientMus>(window_);
+ aura::client::SetDragDropClient(hosted_window, drag_drop_client_.get());
+ drop_target_ = base::MakeUnique<DropTargetMus>(content_);
+ window_->SetCanAcceptDrops(drop_target_.get());
+ drop_helper_ = base::MakeUnique<DropHelper>(GetWidget()->GetRootView());
+ aura::client::SetDragDropDelegate(content_, this);
+
// TODO(erg): Remove this check when ash/mus/move_event_handler.cc's
// direct usage of ui::Window::SetPredefinedCursor() is switched to a
// private method on WindowManagerClient.
if (!is_parallel_widget_in_window_manager()) {
- cursor_manager_.reset(new wm::CursorManager(
- base::MakeUnique<NativeCursorManagerMus>(window_)));
+ cursor_manager_ = base::MakeUnique<wm::CursorManager>(
+ base::MakeUnique<NativeCursorManagerMus>(window_));
aura::client::SetCursorClient(hosted_window, cursor_manager_.get());
}
- window_tree_client_.reset(new NativeWidgetMusWindowTreeClient(hosted_window));
+ window_tree_client_ =
+ base::MakeUnique<NativeWidgetMusWindowTreeClient>(hosted_window);
hosted_window->AddPreTargetHandler(focus_client_.get());
hosted_window->SetLayoutManager(
new ContentWindowLayoutManager(hosted_window, content_));
- capture_client_.reset(new MusCaptureClient(hosted_window, content_, window_));
+ capture_client_ =
+ base::MakeUnique<MusCaptureClient>(hosted_window, content_, window_);
content_->SetType(ui::wm::WINDOW_TYPE_NORMAL);
content_->Init(params.layer_type);
@@ -1150,13 +1167,13 @@ void NativeWidgetMus::FlashFrame(bool flash_frame) {
// NOTIMPLEMENTED();
}
-void NativeWidgetMus::RunShellDrag(
- View* view,
- const ui::OSExchangeData& data,
- const gfx::Point& location,
- int operation,
- ui::DragDropTypes::DragEventSource source) {
- // NOTIMPLEMENTED();
+void NativeWidgetMus::RunShellDrag(View* view,
+ const ui::OSExchangeData& data,
+ const gfx::Point& location,
+ int drag_operations,
+ ui::DragDropTypes::DragEventSource source) {
+ if (window_)
+ views::RunShellDrag(content_, data, location, drag_operations, source);
}
void NativeWidgetMus::SchedulePaintInRect(const gfx::Rect& rect) {
@@ -1410,6 +1427,36 @@ void NativeWidgetMus::OnHostCloseRequested(const aura::WindowTreeHost* host) {
GetWidget()->Close();
}
+////////////////////////////////////////////////////////////////////////////////
+// NativeWidgetMus, aura::WindowDragDropDelegate implementation:
+
+void NativeWidgetMus::OnDragEntered(const ui::DropTargetEvent& event) {
+ DCHECK(drop_helper_);
+ last_drop_operation_ = drop_helper_->OnDragOver(
+ event.data(), event.location(), event.source_operations());
+}
+
+int NativeWidgetMus::OnDragUpdated(const ui::DropTargetEvent& event) {
+ DCHECK(drop_helper_);
+ last_drop_operation_ = drop_helper_->OnDragOver(
+ event.data(), event.location(), event.source_operations());
+ return last_drop_operation_;
+}
+
+void NativeWidgetMus::OnDragExited() {
+ DCHECK(drop_helper_);
+ drop_helper_->OnDragExit();
+}
+
+int NativeWidgetMus::OnPerformDrop(const ui::DropTargetEvent& event) {
+ DCHECK(drop_helper_);
+ return drop_helper_->OnDrop(event.data(), event.location(),
+ last_drop_operation_);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NativeWidgetMus, ui::InputEventHandler implementation:
+
void NativeWidgetMus::OnWindowInputEvent(
ui::Window* view,
const ui::Event& event_in,
« no previous file with comments | « ui/views/mus/native_widget_mus.h ('k') | ui/views/mus/os_exchange_data_provider_mus.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698