Index: mash/quick_launch/quick_launch.cc |
diff --git a/mash/quick_launch/quick_launch.cc b/mash/quick_launch/quick_launch.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8d2b0e8459e7354292ab7c22c708828fe6b499ea |
--- /dev/null |
+++ b/mash/quick_launch/quick_launch.cc |
@@ -0,0 +1,118 @@ |
+// Copyright 2016 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/public/cpp/application_delegate.h" |
+#include "mojo/application/public/cpp/application_impl.h" |
+#include "mojo/application/public/cpp/application_runner.h" |
+#include "mojo/public/c/system/main.h" |
+#include "mojo/services/tracing/public/cpp/tracing_impl.h" |
+#include "ui/views/background.h" |
+#include "ui/views/controls/textfield/textfield.h" |
+#include "ui/views/controls/textfield/textfield_controller.h" |
+#include "ui/views/mus/aura_init.h" |
+#include "ui/views/mus/window_manager_connection.h" |
+#include "ui/views/widget/widget_delegate.h" |
+#include "url/gurl.h" |
+ |
+namespace views { |
+class AuraInit; |
+} |
+ |
+namespace mash { |
+namespace quick_launch { |
+ |
+class QuickLaunchUI : public views::WidgetDelegateView, |
+ public views::TextfieldController { |
+ public: |
+ QuickLaunchUI(mojo::ApplicationImpl* app) |
+ : app_(app), |
+ prompt_(new views::Textfield) { |
+ set_background(views::Background::CreateStandardPanelBackground()); |
+ prompt_->set_controller(this); |
+ AddChildView(prompt_); |
+ } |
+ ~QuickLaunchUI() override {} |
+ |
+ private: |
+ // Overridden from views::WidgetDelegate: |
+ views::View* GetContentsView() override { return this; } |
+ base::string16 GetWindowTitle() const override { |
+ // TODO(beng): use resources. |
+ return base::ASCIIToUTF16("QuickLaunch"); |
+ } |
+ |
+ // Overridden from views::View: |
+ void Layout() override { |
+ gfx::Rect bounds = GetLocalBounds(); |
+ bounds.Inset(5, 5); |
+ prompt_->SetBoundsRect(bounds); |
+ } |
+ gfx::Size GetPreferredSize() const override { |
+ gfx::Size ps = prompt_->GetPreferredSize(); |
+ ps.Enlarge(500, 10); |
+ return ps; |
+ } |
+ |
+ // Overridden from views::TextFieldController: |
+ bool HandleKeyEvent(views::Textfield* sender, |
+ const ui::KeyEvent& key_event) override { |
+ if (key_event.key_code() == ui::VKEY_RETURN) { |
+ std::string url = Canonicalize(prompt_->text()); |
+ connections_.push_back(app_->ConnectToApplication(url)); |
+ prompt_->SetText(base::string16()); |
+ } |
+ return false; |
+ } |
+ |
+ std::string Canonicalize(const base::string16& input) const { |
+ base::string16 working; |
+ base::TrimWhitespace(input, base::TRIM_ALL, &working); |
+ GURL url(working); |
+ if (url.scheme() != "mojo" && url.scheme() != "exe") |
+ working = base::ASCIIToUTF16("mojo:") + working; |
+ return base::UTF16ToUTF8(working); |
+ } |
+ |
+ mojo::ApplicationImpl* app_; |
+ views::Textfield* prompt_; |
+ std::vector<scoped_ptr<mojo::ApplicationConnection>> connections_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(QuickLaunchUI); |
+}; |
+ |
+class QuickLaunchApplicationDelegate : public mojo::ApplicationDelegate { |
+ public: |
+ QuickLaunchApplicationDelegate() {} |
+ ~QuickLaunchApplicationDelegate() override {} |
+ |
+ private: |
+ // mojo::ApplicationDelegate: |
+ void Initialize(mojo::ApplicationImpl* app) override { |
+ tracing_.Initialize(app); |
+ |
+ aura_init_.reset(new views::AuraInit(app, "views_mus_resources.pak")); |
+ views::WindowManagerConnection::Create(app); |
+ |
+ views::Widget* window = views::Widget::CreateWindowWithBounds( |
+ new QuickLaunchUI(app), gfx::Rect(10, 640, 0, 0)); |
+ window->Show(); |
+ } |
+ |
+ mojo::TracingImpl tracing_; |
+ scoped_ptr<views::AuraInit> aura_init_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(QuickLaunchApplicationDelegate); |
+}; |
+ |
+} // namespace quick_launch |
+} // namespace mash |
+ |
+MojoResult MojoMain(MojoHandle shell_handle) { |
+ mojo::ApplicationRunner runner( |
+ new mash::quick_launch::QuickLaunchApplicationDelegate); |
+ return runner.Run(shell_handle); |
+} |