| Index: mojo/examples/browser/browser.cc
|
| diff --git a/mojo/examples/browser/browser.cc b/mojo/examples/browser/browser.cc
|
| deleted file mode 100644
|
| index 9f88e512cea7bf4d668443abb84fb4a6b1f438da..0000000000000000000000000000000000000000
|
| --- a/mojo/examples/browser/browser.cc
|
| +++ /dev/null
|
| @@ -1,274 +0,0 @@
|
| -// 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 "base/macros.h"
|
| -#include "base/strings/string_util.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "mojo/application/application_runner_chromium.h"
|
| -#include "mojo/common/common_type_converters.h"
|
| -#include "mojo/converters/geometry/geometry_type_converters.h"
|
| -#include "mojo/examples/window_manager/window_manager.mojom.h"
|
| -#include "mojo/public/c/system/main.h"
|
| -#include "mojo/public/cpp/application/application_connection.h"
|
| -#include "mojo/public/cpp/application/application_delegate.h"
|
| -#include "mojo/public/cpp/application/application_impl.h"
|
| -#include "mojo/public/cpp/application/connect.h"
|
| -#include "mojo/services/public/cpp/view_manager/view.h"
|
| -#include "mojo/services/public/cpp/view_manager/view_manager.h"
|
| -#include "mojo/services/public/cpp/view_manager/view_manager_client_factory.h"
|
| -#include "mojo/services/public/cpp/view_manager/view_manager_delegate.h"
|
| -#include "mojo/services/public/interfaces/navigation/navigation.mojom.h"
|
| -#include "mojo/views/native_widget_view_manager.h"
|
| -#include "mojo/views/views_init.h"
|
| -#include "ui/aura/client/focus_client.h"
|
| -#include "ui/aura/window.h"
|
| -#include "ui/events/event.h"
|
| -#include "ui/views/background.h"
|
| -#include "ui/views/controls/textfield/textfield.h"
|
| -#include "ui/views/controls/textfield/textfield_controller.h"
|
| -#include "ui/views/focus/focus_manager.h"
|
| -#include "ui/views/layout/layout_manager.h"
|
| -#include "ui/views/widget/widget.h"
|
| -#include "ui/views/widget/widget_delegate.h"
|
| -#include "ui/views/widget/widget_observer.h"
|
| -#include "url/gurl.h"
|
| -
|
| -namespace mojo {
|
| -namespace examples {
|
| -
|
| -class BrowserLayoutManager : public views::LayoutManager {
|
| - public:
|
| - BrowserLayoutManager() {}
|
| - virtual ~BrowserLayoutManager() {}
|
| -
|
| - private:
|
| - // Overridden from views::LayoutManager:
|
| - virtual void Layout(views::View* host) override {
|
| - // Browser view has one child, a text input field.
|
| - DCHECK_EQ(1, host->child_count());
|
| - views::View* text_field = host->child_at(0);
|
| - gfx::Size ps = text_field->GetPreferredSize();
|
| - text_field->SetBoundsRect(gfx::Rect(host->width(), ps.height()));
|
| - }
|
| - virtual gfx::Size GetPreferredSize(const views::View* host) const override {
|
| - return gfx::Size();
|
| - }
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(BrowserLayoutManager);
|
| -};
|
| -
|
| -// KeyboardManager handles notifying the windowmanager when views are focused.
|
| -// To use create one and KeyboardManager will take care of all other details.
|
| -//
|
| -// TODO(sky): it would be nice if this were put in NativeWidgetViewManager, but
|
| -// that requires NativeWidgetViewManager to take an IWindowManager. That may be
|
| -// desirable anyway...
|
| -class KeyboardManager
|
| - : public views::FocusChangeListener,
|
| - public ui::EventHandler,
|
| - public views::WidgetObserver {
|
| - public:
|
| - KeyboardManager(views::Widget* widget,
|
| - IWindowManager* window_manager,
|
| - View* view)
|
| - : widget_(widget),
|
| - window_manager_(window_manager),
|
| - view_(view),
|
| - last_view_id_(0),
|
| - focused_view_(NULL) {
|
| - widget_->GetFocusManager()->AddFocusChangeListener(this);
|
| - widget_->AddObserver(this);
|
| - widget_->GetNativeView()->AddPostTargetHandler(this);
|
| - }
|
| -
|
| - private:
|
| - virtual ~KeyboardManager() {
|
| - widget_->GetFocusManager()->RemoveFocusChangeListener(this);
|
| - widget_->GetNativeView()->RemovePostTargetHandler(this);
|
| - widget_->RemoveObserver(this);
|
| -
|
| - HideKeyboard();
|
| - }
|
| -
|
| - void ShowKeyboard(views::View* view) {
|
| - if (focused_view_ == view)
|
| - return;
|
| -
|
| - const gfx::Rect bounds_in_widget =
|
| - view->ConvertRectToWidget(gfx::Rect(view->bounds().size()));
|
| - last_view_id_ = view_->id();
|
| - window_manager_->ShowKeyboard(last_view_id_,
|
| - Rect::From(bounds_in_widget));
|
| - // TODO(sky): listen for view to be removed.
|
| - focused_view_ = view;
|
| - }
|
| -
|
| - void HideKeyboard() {
|
| - if (!focused_view_)
|
| - return;
|
| -
|
| - window_manager_->HideKeyboard(last_view_id_);
|
| - last_view_id_ = 0;
|
| - focused_view_ = NULL;
|
| - }
|
| -
|
| - // views::FocusChangeListener:
|
| - virtual void OnWillChangeFocus(views::View* focused_before,
|
| - views::View* focused_now) override {
|
| - }
|
| - virtual void OnDidChangeFocus(views::View* focused_before,
|
| - views::View* focused_now) override {
|
| - if (focused_view_ && focused_now != focused_view_)
|
| - HideKeyboard();
|
| - }
|
| -
|
| - // ui::EventHandler:
|
| - virtual void OnMouseEvent(ui::MouseEvent* event) override {
|
| - views::View* focused_now = widget_->GetFocusManager()->GetFocusedView();
|
| - if (focused_now &&
|
| - focused_now->GetClassName() == views::Textfield::kViewClassName &&
|
| - (event->flags() & ui::EF_FROM_TOUCH) != 0) {
|
| - ShowKeyboard(focused_now);
|
| - }
|
| - }
|
| -
|
| - // views::WidgetObserver:
|
| - virtual void OnWidgetDestroying(views::Widget* widget) override {
|
| - delete this;
|
| - }
|
| -
|
| - views::Widget* widget_;
|
| - IWindowManager* window_manager_;
|
| - View* view_;
|
| - Id last_view_id_;
|
| - views::View* focused_view_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(KeyboardManager);
|
| -};
|
| -
|
| -// This is the basics of creating a views widget with a textfield.
|
| -// TODO: cleanup!
|
| -class Browser : public ApplicationDelegate,
|
| - public ViewManagerDelegate,
|
| - public views::TextfieldController,
|
| - public ViewObserver {
|
| - public:
|
| - Browser()
|
| - : shell_(nullptr), view_manager_(NULL), root_(NULL), widget_(NULL) {}
|
| -
|
| - virtual ~Browser() {
|
| - if (root_)
|
| - root_->RemoveObserver(this);
|
| - }
|
| -
|
| - private:
|
| - // Overridden from ApplicationDelegate:
|
| - virtual void Initialize(ApplicationImpl* app) override {
|
| - shell_ = app->shell();
|
| - view_manager_client_factory_.reset(
|
| - new ViewManagerClientFactory(shell_, this));
|
| - views_init_.reset(new ViewsInit);
|
| - app->ConnectToService("mojo:window_manager", &window_manager_);
|
| - }
|
| -
|
| - virtual bool ConfigureIncomingConnection(
|
| - ApplicationConnection* connection) override {
|
| - connection->AddService(view_manager_client_factory_.get());
|
| - return true;
|
| - }
|
| -
|
| - void CreateWidget(View* view) {
|
| - views::Textfield* textfield = new views::Textfield;
|
| - textfield->set_controller(this);
|
| -
|
| - views::WidgetDelegateView* widget_delegate = new views::WidgetDelegateView;
|
| - widget_delegate->GetContentsView()->set_background(
|
| - views::Background::CreateSolidBackground(SK_ColorBLUE));
|
| - widget_delegate->GetContentsView()->AddChildView(textfield);
|
| - widget_delegate->GetContentsView()->SetLayoutManager(
|
| - new BrowserLayoutManager);
|
| -
|
| - widget_ = new views::Widget;
|
| - views::Widget::InitParams params(
|
| - views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
|
| - params.native_widget = new NativeWidgetViewManager(widget_, shell_, view);
|
| - params.delegate = widget_delegate;
|
| - params.bounds = gfx::Rect(view->bounds().width, view->bounds().height);
|
| - widget_->Init(params);
|
| - // KeyboardManager handles deleting itself when the widget is destroyed.
|
| - new KeyboardManager(widget_, window_manager_.get(), view);
|
| - widget_->Show();
|
| - textfield->RequestFocus();
|
| - }
|
| -
|
| - // ViewManagerDelegate:
|
| - virtual void OnEmbed(ViewManager* view_manager,
|
| - View* root,
|
| - ServiceProviderImpl* exported_services,
|
| - scoped_ptr<ServiceProvider> imported_services) override {
|
| - // TODO: deal with OnEmbed() being invoked multiple times.
|
| - ConnectToService(imported_services.get(), &navigator_host_);
|
| - view_manager_ = view_manager;
|
| - root_ = root;
|
| - root_->AddObserver(this);
|
| - root_->SetFocus();
|
| - CreateWidget(root_);
|
| - }
|
| - virtual void OnViewManagerDisconnected(
|
| - ViewManager* view_manager) override {
|
| - DCHECK_EQ(view_manager_, view_manager);
|
| - view_manager_ = NULL;
|
| - base::MessageLoop::current()->Quit();
|
| - }
|
| -
|
| - // views::TextfieldController:
|
| - virtual bool HandleKeyEvent(views::Textfield* sender,
|
| - const ui::KeyEvent& key_event) override {
|
| - if (key_event.key_code() == ui::VKEY_RETURN) {
|
| - GURL url(sender->text());
|
| - printf("User entered this URL: %s\n", url.spec().c_str());
|
| - URLRequestPtr request(URLRequest::New());
|
| - request->url = String::From(url);
|
| - navigator_host_->RequestNavigate(TARGET_NEW_NODE, request.Pass());
|
| - }
|
| - return false;
|
| - }
|
| -
|
| - // ViewObserver:
|
| - virtual void OnViewFocusChanged(View* gained_focus,
|
| - View* lost_focus) override {
|
| - aura::client::FocusClient* focus_client =
|
| - aura::client::GetFocusClient(widget_->GetNativeView());
|
| - if (lost_focus == root_)
|
| - focus_client->FocusWindow(NULL);
|
| - else if (gained_focus == root_)
|
| - focus_client->FocusWindow(widget_->GetNativeView());
|
| - }
|
| - virtual void OnViewDestroyed(View* view) override {
|
| - DCHECK_EQ(root_, view);
|
| - view->RemoveObserver(this);
|
| - root_ = NULL;
|
| - }
|
| -
|
| - Shell* shell_;
|
| -
|
| - scoped_ptr<ViewsInit> views_init_;
|
| -
|
| - ViewManager* view_manager_;
|
| - scoped_ptr<ViewManagerClientFactory> view_manager_client_factory_;
|
| - View* root_;
|
| - views::Widget* widget_;
|
| - NavigatorHostPtr navigator_host_;
|
| - IWindowManagerPtr window_manager_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(Browser);
|
| -};
|
| -
|
| -} // namespace examples
|
| -} // namespace mojo
|
| -
|
| -MojoResult MojoMain(MojoHandle shell_handle) {
|
| - mojo::ApplicationRunnerChromium runner(new mojo::examples::Browser);
|
| - return runner.Run(shell_handle);
|
| -}
|
|
|