| Index: chrome/browser/ui/views/toolbar/wrench_toolbar_button.cc
|
| diff --git a/chrome/browser/ui/views/toolbar/wrench_toolbar_button.cc b/chrome/browser/ui/views/toolbar/wrench_toolbar_button.cc
|
| index ce9bcfccc6741249408bdcef06e7f2f8ac16b9f3..bb3cccb0504a05f7729f9be3c0909c618d242762 100644
|
| --- a/chrome/browser/ui/views/toolbar/wrench_toolbar_button.cc
|
| +++ b/chrome/browser/ui/views/toolbar/wrench_toolbar_button.cc
|
| @@ -4,14 +4,28 @@
|
|
|
| #include "chrome/browser/ui/views/toolbar/wrench_toolbar_button.h"
|
|
|
| +#include "base/message_loop/message_loop.h"
|
| +#include "base/time/time.h"
|
| +#include "chrome/browser/ui/browser.h"
|
| +#include "chrome/browser/ui/views/extensions/browser_action_drag_data.h"
|
| +#include "chrome/browser/ui/views/toolbar/toolbar_view.h"
|
| +#include "extensions/common/feature_switch.h"
|
| #include "grit/theme_resources.h"
|
| #include "ui/base/resource/resource_bundle.h"
|
| #include "ui/base/theme_provider.h"
|
| +#include "ui/views/metrics.h"
|
| #include "ui/views/painter.h"
|
|
|
| -WrenchToolbarButton::WrenchToolbarButton(views::MenuButtonListener* listener)
|
| - : views::MenuButton(NULL, base::string16(), listener, false) {
|
| - wrench_icon_painter_.reset(new WrenchIconPainter(this));
|
| +// static
|
| +bool WrenchToolbarButton::g_open_wrench_immediately_for_testing = false;
|
| +
|
| +WrenchToolbarButton::WrenchToolbarButton(ToolbarView* toolbar_view)
|
| + : views::MenuButton(NULL, base::string16(), toolbar_view, false),
|
| + wrench_icon_painter_(new WrenchIconPainter(this)),
|
| + toolbar_view_(toolbar_view),
|
| + allow_extension_dragging_(
|
| + extensions::FeatureSwitch::extension_action_redesign()->IsEnabled()),
|
| + weak_factory_(this) {
|
| }
|
|
|
| WrenchToolbarButton::~WrenchToolbarButton() {
|
| @@ -39,3 +53,54 @@ void WrenchToolbarButton::OnPaint(gfx::Canvas* canvas) {
|
| void WrenchToolbarButton::ScheduleWrenchIconPaint() {
|
| SchedulePaint();
|
| }
|
| +
|
| +bool WrenchToolbarButton::GetDropFormats(
|
| + int* formats, std::set<ui::OSExchangeData::CustomFormat>* custom_formats) {
|
| + return allow_extension_dragging_ ?
|
| + BrowserActionDragData::GetDropFormats(custom_formats) :
|
| + views::View::GetDropFormats(formats, custom_formats);
|
| +}
|
| +bool WrenchToolbarButton::AreDropTypesRequired() {
|
| + return allow_extension_dragging_ ?
|
| + BrowserActionDragData::AreDropTypesRequired() :
|
| + views::View::AreDropTypesRequired();
|
| +}
|
| +bool WrenchToolbarButton::CanDrop(const ui::OSExchangeData& data) {
|
| + return allow_extension_dragging_ ?
|
| + BrowserActionDragData::CanDrop(data,
|
| + toolbar_view_->browser()->profile()) :
|
| + views::View::CanDrop(data);
|
| +}
|
| +
|
| +void WrenchToolbarButton::OnDragEntered(const ui::DropTargetEvent& event) {
|
| + DCHECK(allow_extension_dragging_);
|
| + DCHECK(!weak_factory_.HasWeakPtrs());
|
| + if (!g_open_wrench_immediately_for_testing) {
|
| + base::MessageLoop::current()->PostDelayedTask(
|
| + FROM_HERE,
|
| + base::Bind(&WrenchToolbarButton::ShowOverflowMenu,
|
| + weak_factory_.GetWeakPtr()),
|
| + base::TimeDelta::FromMilliseconds(views::GetMenuShowDelay()));
|
| + } else {
|
| + ShowOverflowMenu();
|
| + }
|
| +}
|
| +
|
| +int WrenchToolbarButton::OnDragUpdated(const ui::DropTargetEvent& event) {
|
| + DCHECK(allow_extension_dragging_);
|
| + return ui::DragDropTypes::DRAG_MOVE;
|
| +}
|
| +
|
| +void WrenchToolbarButton::OnDragExited() {
|
| + DCHECK(allow_extension_dragging_);
|
| + weak_factory_.InvalidateWeakPtrs();
|
| +}
|
| +
|
| +int WrenchToolbarButton::OnPerformDrop(const ui::DropTargetEvent& event) {
|
| + DCHECK(allow_extension_dragging_);
|
| + return ui::DragDropTypes::DRAG_MOVE;
|
| +}
|
| +
|
| +void WrenchToolbarButton::ShowOverflowMenu() {
|
| + toolbar_view_->ShowAppMenu(true); // For drop.
|
| +}
|
|
|