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

Unified Diff: mojo/services/window_manager/view_target.cc

Issue 698543005: Make a pure mojo::View version of the aura::Window FocusController. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Restore things lost from a deleted use_aura block in BUILD.gn files. Created 6 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 side-by-side diff with in-line comments
Download patch
Index: mojo/services/window_manager/view_target.cc
diff --git a/mojo/services/window_manager/view_target.cc b/mojo/services/window_manager/view_target.cc
new file mode 100644
index 0000000000000000000000000000000000000000..8dc28aa401454b98d347f2432917f3e5c828fc7c
--- /dev/null
+++ b/mojo/services/window_manager/view_target.cc
@@ -0,0 +1,93 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "mojo/services/window_manager/view_target.h"
+
+#include "mojo/services/public/cpp/view_manager/view.h"
+#include "mojo/services/window_manager/window_manager_app.h"
+#include "ui/events/event.h"
+#include "ui/events/event_target_iterator.h"
+#include "ui/events/event_targeter.h"
+
+namespace mojo {
+
+class ViewTargeter : public ui::EventTargeter {};
+
+ViewTarget::ViewTarget(WindowManagerApp* app, View* view_to_wrap)
+ : app_(app),
+ view_(view_to_wrap) {
+}
+
+ViewTarget::~ViewTarget() {
+ // We don't own our children or |view_|.
+}
+
+bool ViewTarget::HasParent() const {
+ return view_->parent();
+}
+
+bool ViewTarget::IsVisible() const {
+ return view_->visible();
+}
+
+void ViewTarget::AddChild(ViewTarget* view) {
+ children_.push_back(view);
+}
+
+scoped_ptr<ViewTargeter> ViewTarget::SetEventTargeter(
+ scoped_ptr<ViewTargeter> targeter) {
+ scoped_ptr<ViewTargeter> old_targeter = targeter_.Pass();
+ targeter_ = targeter.Pass();
+ return old_targeter.Pass();
+}
+
+bool ViewTarget::CanAcceptEvent(const ui::Event& event) {
+ // We need to make sure that a touch cancel event and any gesture events it
+ // creates can always reach the window. This ensures that we receive a valid
+ // touch / gesture stream.
+ if (event.IsEndingEvent())
+ return true;
+
+ if (!view_->visible())
+ return false;
+
+ // The top-most window can always process an event.
+ if (!view_->parent())
+ return true;
+
+ // For located events (i.e. mouse, touch etc.), an assumption is made that
+ // windows that don't have a default event-handler cannot process the event
+ // (see more in GetWindowForPoint()). This assumption is not made for key
+ // events.
+ return event.IsKeyEvent() || target_handler();
+}
+
+ui::EventTarget* ViewTarget::GetParentTarget() {
+ if (!view_->parent()) {
+ // We are the root node.
+ return nullptr;
+ }
+
+ return app_->GetViewTargetForViewId(view_->parent()->id());
+}
+
+scoped_ptr<ui::EventTargetIterator> ViewTarget::GetChildIterator() const {
+ return scoped_ptr<ui::EventTargetIterator>(
+ new ui::EventTargetIteratorImpl<ViewTarget>(children_));
+}
+
+ui::EventTargeter* ViewTarget::GetEventTargeter() {
+ return targeter_.get();
+}
+
+void ViewTarget::ConvertEventToTarget(ui::EventTarget* target,
+ ui::LocatedEvent* event) {
+ // TODO(erg): Actually doing enabling this line requires doing some partially
+ // specialized template cruft. Punt for now.
+ //
+ // event->ConvertLocationToTarget(this,
+ // static_cast<ViewTarget*>(target));
+}
+
+} // namespace mojo

Powered by Google App Engine
This is Rietveld 408576698