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

Side by Side Diff: ui/views/controls/menu/menu_item_view.cc

Issue 1230163004: Selects last item in a menu when pressing 'up' initially (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Selects last item in a menu when pressing 'up' initially Created 5 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/views/controls/menu/menu_item_view.h" 5 #include "ui/views/controls/menu/menu_item_view.h"
6 6
7 #include "base/i18n/case_conversion.h" 7 #include "base/i18n/case_conversion.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "ui/accessibility/ax_view_state.h" 10 #include "ui/accessibility/ax_view_state.h"
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 int item_id, 230 int item_id,
231 const base::string16& label, 231 const base::string16& label,
232 const base::string16& sublabel, 232 const base::string16& sublabel,
233 const base::string16& minor_text, 233 const base::string16& minor_text,
234 const gfx::ImageSkia& icon, 234 const gfx::ImageSkia& icon,
235 Type type, 235 Type type,
236 ui::MenuSeparatorType separator_style) { 236 ui::MenuSeparatorType separator_style) {
237 DCHECK_NE(type, EMPTY); 237 DCHECK_NE(type, EMPTY);
238 DCHECK_LE(0, index); 238 DCHECK_LE(0, index);
239 if (!submenu_) 239 if (!submenu_)
240 CreateSubmenu(); 240 submenu_ = CreateSubmenu();
241 DCHECK_GE(submenu_->child_count(), index); 241 DCHECK_GE(submenu_->child_count(), index);
242 if (type == SEPARATOR) { 242 if (type == SEPARATOR) {
243 submenu_->AddChildViewAt(new MenuSeparator(this, separator_style), index); 243 submenu_->AddChildViewAt(new MenuSeparator(this, separator_style), index);
244 return NULL; 244 return NULL;
245 } 245 }
246 MenuItemView* item = new MenuItemView(this, item_id, type); 246 MenuItemView* item = new MenuItemView(this, item_id, type);
247 if (label.empty() && GetDelegate()) 247 if (label.empty() && GetDelegate())
248 item->SetTitle(GetDelegate()->GetLabel(item_id)); 248 item->SetTitle(GetDelegate()->GetLabel(item_id));
249 else 249 else
250 item->SetTitle(label); 250 item->SetTitle(label);
251 item->SetSubtitle(sublabel); 251 item->SetSubtitle(sublabel);
252 item->SetMinorText(minor_text); 252 item->SetMinorText(minor_text);
253 if (!icon.isNull()) 253 if (!icon.isNull())
254 item->SetIcon(icon); 254 item->SetIcon(icon);
255 if (type == SUBMENU) 255 if (type == SUBMENU && !item->HasSubmenu())
256 item->CreateSubmenu(); 256 item->submenu_ = CreateSubmenu();
257 if (GetDelegate() && !GetDelegate()->IsCommandVisible(item_id)) 257 if (GetDelegate() && !GetDelegate()->IsCommandVisible(item_id))
258 item->SetVisible(false); 258 item->SetVisible(false);
259 submenu_->AddChildViewAt(item, index); 259 submenu_->AddChildViewAt(item, index);
260 return item; 260 return item;
261 } 261 }
262 262
263 void MenuItemView::RemoveMenuItemAt(int index) { 263 void MenuItemView::RemoveMenuItemAt(int index) {
264 DCHECK(submenu_); 264 DCHECK(submenu_);
265 DCHECK_LE(0, index); 265 DCHECK_LE(0, index);
266 DCHECK_GT(submenu_->child_count(), index); 266 DCHECK_GT(submenu_->child_count(), index);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 const base::string16& minor_text, 324 const base::string16& minor_text,
325 const gfx::ImageSkia& icon, 325 const gfx::ImageSkia& icon,
326 Type type, 326 Type type,
327 ui::MenuSeparatorType separator_style) { 327 ui::MenuSeparatorType separator_style) {
328 const int index = submenu_ ? submenu_->child_count() : 0; 328 const int index = submenu_ ? submenu_->child_count() : 0;
329 return AddMenuItemAt(index, item_id, label, sublabel, minor_text, icon, type, 329 return AddMenuItemAt(index, item_id, label, sublabel, minor_text, icon, type,
330 separator_style); 330 separator_style);
331 } 331 }
332 332
333 SubmenuView* MenuItemView::CreateSubmenu() { 333 SubmenuView* MenuItemView::CreateSubmenu() {
334 if (!submenu_) 334 return new SubmenuView(this);
335 submenu_ = new SubmenuView(this);
336 return submenu_;
337 } 335 }
338 336
339 bool MenuItemView::HasSubmenu() const { 337 bool MenuItemView::HasSubmenu() const {
340 return (submenu_ != NULL); 338 return (submenu_ != NULL);
341 } 339 }
342 340
343 SubmenuView* MenuItemView::GetSubmenu() const { 341 SubmenuView* MenuItemView::GetSubmenu() const {
344 return submenu_; 342 return submenu_;
345 } 343 }
346 344
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 SetEnabled(root_delegate->IsCommandEnabled(command)); 657 SetEnabled(root_delegate->IsCommandEnabled(command));
660 } 658 }
661 659
662 void MenuItemView::PrepareForRun(bool is_first_menu, 660 void MenuItemView::PrepareForRun(bool is_first_menu,
663 bool has_mnemonics, 661 bool has_mnemonics,
664 bool show_mnemonics) { 662 bool show_mnemonics) {
665 // Currently we only support showing the root. 663 // Currently we only support showing the root.
666 DCHECK(!parent_menu_item_); 664 DCHECK(!parent_menu_item_);
667 665
668 // Force us to have a submenu. 666 // Force us to have a submenu.
669 CreateSubmenu(); 667 if (!submenu_)
668 submenu_ = CreateSubmenu();
670 actual_menu_position_ = requested_menu_position_; 669 actual_menu_position_ = requested_menu_position_;
671 canceled_ = false; 670 canceled_ = false;
672 671
673 has_mnemonics_ = has_mnemonics; 672 has_mnemonics_ = has_mnemonics;
674 show_mnemonics_ = has_mnemonics && show_mnemonics; 673 show_mnemonics_ = has_mnemonics && show_mnemonics;
675 674
676 AddEmptyMenus(); 675 AddEmptyMenus();
677 676
678 if (is_first_menu) { 677 if (is_first_menu) {
679 // Only update the menu size if there are no menus showing, otherwise 678 // Only update the menu size if there are no menus showing, otherwise
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
1073 } else { 1072 } else {
1074 const Type& type = menu_item->GetType(); 1073 const Type& type = menu_item->GetType();
1075 if (type == CHECKBOX || type == RADIO) 1074 if (type == CHECKBOX || type == RADIO)
1076 return true; 1075 return true;
1077 } 1076 }
1078 } 1077 }
1079 return false; 1078 return false;
1080 } 1079 }
1081 1080
1082 } // namespace views 1081 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698