diff options
author | calamity@chromium.org <calamity@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-13 15:18:29 +0000 |
---|---|---|
committer | calamity@chromium.org <calamity@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-13 15:18:29 +0000 |
commit | 0ec1b1f2771855b133038ebdc3de33c3d0589fcc (patch) | |
tree | fdc3283201280d4094b3857527774f8f76dccfb9 /ui | |
parent | 7efaed21a3ab12733ab17ceac292c89ca848191f (diff) | |
download | chromium_src-0ec1b1f2771855b133038ebdc3de33c3d0589fcc.zip chromium_src-0ec1b1f2771855b133038ebdc3de33c3d0589fcc.tar.gz chromium_src-0ec1b1f2771855b133038ebdc3de33c3d0589fcc.tar.bz2 |
Context menu for app launcher search results
BUG=180404
Review URL: https://chromiumcodereview.appspot.com/15018021
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@199733 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r-- | ui/app_list/search_result.cc | 4 | ||||
-rw-r--r-- | ui/app_list/search_result.h | 8 | ||||
-rw-r--r-- | ui/app_list/views/search_result_view.cc | 17 | ||||
-rw-r--r-- | ui/app_list/views/search_result_view.h | 9 |
4 files changed, 38 insertions, 0 deletions
diff --git a/ui/app_list/search_result.cc b/ui/app_list/search_result.cc index 597ea60..2d62af5 100644 --- a/ui/app_list/search_result.cc +++ b/ui/app_list/search_result.cc @@ -49,4 +49,8 @@ void SearchResult::RemoveObserver(SearchResultObserver* observer) { observers_.RemoveObserver(observer); } +ui::MenuModel* SearchResult::GetContextMenuModel() { + return NULL; +} + } // namespace app_list diff --git a/ui/app_list/search_result.h b/ui/app_list/search_result.h index c7b2760..d41cc80 100644 --- a/ui/app_list/search_result.h +++ b/ui/app_list/search_result.h @@ -15,6 +15,10 @@ #include "ui/base/range/range.h" #include "ui/gfx/image/image_skia.h" +namespace ui { +class MenuModel; +} + namespace app_list { class SearchResultObserver; @@ -88,6 +92,10 @@ class APP_LIST_EXPORT SearchResult { void AddObserver(SearchResultObserver* observer); void RemoveObserver(SearchResultObserver* observer); + // Returns the context menu model for this item. + // Note the returned menu model is owned by this item. + virtual ui::MenuModel* GetContextMenuModel(); + private: gfx::ImageSkia icon_; diff --git a/ui/app_list/views/search_result_view.cc b/ui/app_list/views/search_result_view.cc index c491f1a..38b9d02 100644 --- a/ui/app_list/views/search_result_view.cc +++ b/ui/app_list/views/search_result_view.cc @@ -13,6 +13,8 @@ #include "ui/gfx/render_text.h" #include "ui/views/controls/button/image_button.h" #include "ui/views/controls/image_view.h" +#include "ui/views/controls/menu/menu_item_view.h" +#include "ui/views/controls/menu/menu_runner.h" namespace { @@ -95,6 +97,7 @@ SearchResultView::SearchResultView(SearchResultListView* list_view, delegate_(delegate), icon_(new IconView) { AddChildView(icon_); + set_context_menu_controller(this); } SearchResultView::~SearchResultView() { @@ -292,4 +295,18 @@ void SearchResultView::OnActionIconsChanged() { } } +void SearchResultView::ShowContextMenuForView(views::View* source, + const gfx::Point& point) { + ui::MenuModel* menu_model = result_->GetContextMenuModel(); + if (!menu_model) + return; + + context_menu_runner_.reset(new views::MenuRunner(menu_model)); + if (context_menu_runner_->RunMenuAt( + GetWidget(), NULL, gfx::Rect(point, gfx::Size()), + views::MenuItemView::TOPLEFT, views::MenuRunner::HAS_MNEMONICS) == + views::MenuRunner::MENU_DELETED) + return; +} + } // namespace app_list diff --git a/ui/app_list/views/search_result_view.h b/ui/app_list/views/search_result_view.h index 232a08c..55cb35c 100644 --- a/ui/app_list/views/search_result_view.h +++ b/ui/app_list/views/search_result_view.h @@ -11,6 +11,7 @@ #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" #include "ui/app_list/search_result_observer.h" +#include "ui/views/context_menu_controller.h" #include "ui/views/controls/button/custom_button.h" namespace gfx { @@ -20,6 +21,7 @@ class RenderText; namespace views { class ImageButton; class ImageView; +class MenuRunner; } namespace app_list { @@ -31,6 +33,7 @@ class SearchResultViewDelegate; // SearchResultView displays a SearchResult. class SearchResultView : public views::CustomButton, public views::ButtonListener, + public views::ContextMenuController, public SearchResultObserver { public: // Internal class name. @@ -61,6 +64,10 @@ class SearchResultView : public views::CustomButton, virtual void ButtonPressed(views::Button* sender, const ui::Event& event) OVERRIDE; + // views::ContextMenuController overrides: + virtual void ShowContextMenuForView(views::View* source, + const gfx::Point& point) OVERRIDE; + // SearchResultObserver overrides: virtual void OnIconChanged() OVERRIDE; virtual void OnActionIconsChanged() OVERRIDE; @@ -80,6 +87,8 @@ class SearchResultView : public views::CustomButton, // Owned by the views hierarchy. std::vector<views::ImageButton*> action_buttons_; + scoped_ptr<views::MenuRunner> context_menu_runner_; + DISALLOW_COPY_AND_ASSIGN(SearchResultView); }; |