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

Unified Diff: mash/quick_launch/quick_launch_application.cc

Issue 1850543002: Add inline completion to quicklaunch (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@58tv
Patch Set: . Created 4 years, 9 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 | « mash/quick_launch/quick_launch_application.h ('k') | mojo/services/catalog/catalog.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mash/quick_launch/quick_launch_application.cc
diff --git a/mash/quick_launch/quick_launch_application.cc b/mash/quick_launch/quick_launch_application.cc
index b46873785438a21454a5f0e552a0d61ed3b65d70..1fa54e2e5297ccd4df1ca9b1b35cbb4c1870d4e5 100644
--- a/mash/quick_launch/quick_launch_application.cc
+++ b/mash/quick_launch/quick_launch_application.cc
@@ -6,6 +6,7 @@
#include "base/macros.h"
#include "base/message_loop/message_loop.h"
+#include "base/strings/string16.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "mojo/public/c/system/main.h"
@@ -31,11 +32,15 @@ namespace quick_launch {
class QuickLaunchUI : public views::WidgetDelegateView,
public views::TextfieldController {
public:
- QuickLaunchUI(mojo::Connector* connector)
- : connector_(connector), prompt_(new views::Textfield) {
+ QuickLaunchUI(mojo::Connector* connector, catalog::mojom::CatalogPtr catalog)
+ : connector_(connector),
+ prompt_(new views::Textfield),
+ catalog_(std::move(catalog)) {
set_background(views::Background::CreateStandardPanelBackground());
prompt_->set_controller(this);
AddChildView(prompt_);
+
+ UpdateEntries();
}
~QuickLaunchUI() override {}
@@ -62,13 +67,45 @@ class QuickLaunchUI : public views::WidgetDelegateView,
// 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(connector_->Connect(url));
- prompt_->SetText(base::string16());
+ suggestion_rejected_ = false;
+ switch (key_event.key_code()) {
+ case ui::VKEY_RETURN: {
+ std::string url = Canonicalize(prompt_->text());
+ connections_.push_back(connector_->Connect(url));
+ prompt_->SetText(base::string16());
+ UpdateEntries();
+ } break;
+ case ui::VKEY_BACK:
+ case ui::VKEY_DELETE:
+ // The user didn't like our suggestion, don't make another until they
+ // type another character.
+ suggestion_rejected_ = true;
+ break;
+ default:
+ break;
}
return false;
}
+ void ContentsChanged(views::Textfield* sender,
+ const base::string16& new_contents) override {
+ // Don't keep making a suggestion if the user didn't like what we offered.
+ if (suggestion_rejected_)
+ return;
+
+ // TODO(beng): it'd be nice if we persisted some history/scoring here.
+ for (const auto& name : app_names_) {
+ if (base::StartsWith(name, new_contents,
+ base::CompareCase::INSENSITIVE_ASCII)) {
+ base::string16 suffix = name;
+ base::ReplaceSubstringsAfterOffset(&suffix, 0, new_contents,
+ base::string16());
+ gfx::Range range(new_contents.size(), name.size());
+ prompt_->SetText(name);
+ prompt_->SelectRange(range);
+ break;
+ }
+ }
+ }
std::string Canonicalize(const base::string16& input) const {
base::string16 working;
@@ -79,9 +116,24 @@ class QuickLaunchUI : public views::WidgetDelegateView,
return base::UTF16ToUTF8(working);
}
+ void UpdateEntries() {
+ catalog_->GetEntries(nullptr,
+ base::Bind(&QuickLaunchUI::OnGotCatalogEntries,
+ base::Unretained(this)));
+ }
+
+ void OnGotCatalogEntries(
+ mojo::Map<mojo::String, catalog::mojom::CatalogEntryPtr> entries) {
+ for (const auto& entry : entries)
+ app_names_.insert(base::UTF8ToUTF16(entry.first.get()));
+ }
+
mojo::Connector* connector_;
views::Textfield* prompt_;
std::vector<scoped_ptr<mojo::Connection>> connections_;
+ catalog::mojom::CatalogPtr catalog_;
+ std::set<base::string16> app_names_;
+ bool suggestion_rejected_ = false;
DISALLOW_COPY_AND_ASSIGN(QuickLaunchUI);
};
@@ -97,14 +149,14 @@ void QuickLaunchApplication::Initialize(mojo::Connector* connector,
aura_init_.reset(new views::AuraInit(connector, "views_mus_resources.pak"));
views::WindowManagerConnection::Create(connector);
+ catalog::mojom::CatalogPtr catalog;
+ connector->ConnectToInterface("mojo:catalog", &catalog);
+
views::Widget* window = views::Widget::CreateWindowWithContextAndBounds(
- new QuickLaunchUI(connector), nullptr, gfx::Rect(10, 640, 0, 0));
+ new QuickLaunchUI(connector, std::move(catalog)), nullptr,
+ gfx::Rect(10, 640, 0, 0));
window->Show();
}
-bool QuickLaunchApplication::AcceptConnection(mojo::Connection* connection) {
- return true;
-}
-
} // namespace quick_launch
} // namespace mash
« no previous file with comments | « mash/quick_launch/quick_launch_application.h ('k') | mojo/services/catalog/catalog.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698