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

Side by Side Diff: chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.cc

Issue 399173004: Adjust BrowserActionsContainer drag and drop to work for overflow (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.h" 5 #include "chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.h"
6 6
7 #include "chrome/browser/ui/views/frame/browser_view.h" 7 #include "chrome/browser/ui/views/frame/browser_view.h"
8 #include "chrome/browser/ui/views/toolbar/browser_actions_container.h" 8 #include "chrome/browser/ui/views/toolbar/browser_actions_container.h"
9 #include "chrome/browser/ui/views/toolbar/toolbar_view.h" 9 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
10 #include "chrome/browser/ui/views/toolbar/wrench_menu.h" 10 #include "chrome/browser/ui/views/toolbar/wrench_menu.h"
11 #include "ui/views/controls/menu/menu_item_view.h" 11 #include "ui/views/controls/menu/menu_item_view.h"
12 12
13 namespace {
14
15 // Bottom padding to make sure we have enough room for the icons.
16 // TODO(devlin): Figure out why the bottom few pixels of the last row in the
17 // overflow menu are cut off (so we can remove this).
18 const int kVerticalPadding = 8;
Devlin 2014/07/17 22:26:30 I think this looks fine without this, since the ba
19
20 } // namespace
21
22 ExtensionToolbarMenuView::ExtensionToolbarMenuView(Browser* browser, 13 ExtensionToolbarMenuView::ExtensionToolbarMenuView(Browser* browser,
23 WrenchMenu* wrench_menu) 14 WrenchMenu* wrench_menu)
24 : browser_(browser), 15 : browser_(browser),
25 wrench_menu_(wrench_menu), 16 wrench_menu_(wrench_menu),
26 container_(NULL), 17 container_(NULL),
27 browser_actions_container_observer_(this), 18 browser_actions_container_observer_(this),
28 weak_factory_(this) { 19 weak_factory_(this) {
29 BrowserActionsContainer* main = 20 BrowserActionsContainer* main =
30 BrowserView::GetBrowserViewForBrowser(browser) 21 BrowserView::GetBrowserViewForBrowser(browser)
31 ->toolbar()->browser_actions(); 22 ->toolbar()->browser_actions();
32 container_ = new BrowserActionsContainer( 23 container_ = new BrowserActionsContainer(
33 browser_, 24 browser_,
34 NULL, // No owner view, means no extra keybindings are registered. 25 NULL, // No owner view, means no extra keybindings are registered.
35 main); 26 main);
36 container_->Init(); 27 container_->Init();
37 AddChildView(container_); 28 AddChildView(container_);
38 29
39 // If we were opened for a drop command, we have to wait for the drop to 30 // If we were opened for a drop command, we have to wait for the drop to
40 // finish so we can close the wrench menu. 31 // finish so we can close the wrench menu.
41 if (wrench_menu_->for_drop()) { 32 if (wrench_menu_->for_drop()) {
42 browser_actions_container_observer_.Add(container_); 33 browser_actions_container_observer_.Add(container_);
43 browser_actions_container_observer_.Add(main); 34 browser_actions_container_observer_.Add(main);
44 } 35 }
45 } 36 }
46 37
47 ExtensionToolbarMenuView::~ExtensionToolbarMenuView() { 38 ExtensionToolbarMenuView::~ExtensionToolbarMenuView() {
48 } 39 }
49 40
50 gfx::Size ExtensionToolbarMenuView::GetPreferredSize() const { 41 gfx::Size ExtensionToolbarMenuView::GetPreferredSize() const {
51 gfx::Size sz = container_->GetPreferredSize(); 42 return container_->GetPreferredSize();
52 if (sz.height() == 0)
53 return sz;
54
55 sz.Enlarge(0, kVerticalPadding);
56 return sz;
57 } 43 }
58 44
59 void ExtensionToolbarMenuView::Layout() { 45 void ExtensionToolbarMenuView::Layout() {
60 // All buttons are given the same width. 46 // All buttons are given the same width.
61 gfx::Size sz = container_->GetPreferredSize(); 47 gfx::Size sz = container_->GetPreferredSize();
62 int height = sz.height() + kVerticalPadding / 2; 48 SetBounds(views::MenuItemView::label_start(), 0, sz.width(), sz.height());
63 SetBounds(views::MenuItemView::label_start(), 0, sz.width(), height); 49 container_->SetBounds(0, 0, sz.width(), sz.height());
64 container_->SetBounds(0, 0, sz.width(), height);
65 } 50 }
66 51
67 void ExtensionToolbarMenuView::OnBrowserActionDragDone() { 52 void ExtensionToolbarMenuView::OnBrowserActionDragDone() {
68 DCHECK(wrench_menu_->for_drop()); 53 DCHECK(wrench_menu_->for_drop());
69 // We have to post this in a message loop because it results in the menu being 54 // We have to post this in a message loop because it results in the menu being
70 // closed, which deletes this view. Since this is in an observer method, that 55 // closed, which deletes this view. Since this is in an observer method, that
71 // could break the BrowserActionsContainer's observer list if done here. 56 // could break the BrowserActionsContainer's observer list if done here.
72 base::MessageLoop::current()->PostTask( 57 base::MessageLoop::current()->PostTask(
73 FROM_HERE, 58 FROM_HERE,
74 base::Bind(&ExtensionToolbarMenuView::CloseWrenchMenu, 59 base::Bind(&ExtensionToolbarMenuView::CloseWrenchMenu,
75 weak_factory_.GetWeakPtr())); 60 weak_factory_.GetWeakPtr()));
76 } 61 }
77 62
78 void ExtensionToolbarMenuView::CloseWrenchMenu() { 63 void ExtensionToolbarMenuView::CloseWrenchMenu() {
79 wrench_menu_->CloseMenu(); 64 wrench_menu_->CloseMenu();
80 } 65 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698