summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorcalamity@chromium.org <calamity@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-13 15:18:29 +0000
committercalamity@chromium.org <calamity@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-13 15:18:29 +0000
commit0ec1b1f2771855b133038ebdc3de33c3d0589fcc (patch)
treefdc3283201280d4094b3857527774f8f76dccfb9 /ui
parent7efaed21a3ab12733ab17ceac292c89ca848191f (diff)
downloadchromium_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.cc4
-rw-r--r--ui/app_list/search_result.h8
-rw-r--r--ui/app_list/views/search_result_view.cc17
-rw-r--r--ui/app_list/views/search_result_view.h9
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);
};