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

Unified Diff: ui/views/controls/combobox/combobox.cc

Issue 2264403006: Update ui/views menus to use async (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review Updates Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/controls/combobox/combobox.h ('k') | ui/views/controls/scrollbar/base_scroll_bar.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/controls/combobox/combobox.cc
diff --git a/ui/views/controls/combobox/combobox.cc b/ui/views/controls/combobox/combobox.cc
index b93b0bb875915527e3dc23fda12569f6f0682c4d..0a3affae4424e1cc55111190ec92b260d50f448e 100644
--- a/ui/views/controls/combobox/combobox.cc
+++ b/ui/views/controls/combobox/combobox.cc
@@ -33,6 +33,7 @@
#include "ui/views/controls/combobox/combobox_listener.h"
#include "ui/views/controls/focusable_border.h"
#include "ui/views/controls/menu/menu_config.h"
+#include "ui/views/controls/menu/menu_model_adapter.h"
#include "ui/views/controls/menu/menu_runner.h"
#include "ui/views/controls/prefix_selector.h"
#include "ui/views/controls/textfield/textfield.h"
@@ -249,15 +250,15 @@ void PaintArrowButton(
const char Combobox::kViewClassName[] = "views/Combobox";
// Adapts a ui::ComboboxModel to a ui::MenuModel.
-class Combobox::ComboboxMenuModelAdapter : public ui::MenuModel,
- public ui::ComboboxModelObserver {
+class Combobox::ComboboxMenuModel : public ui::MenuModel,
+ public ui::ComboboxModelObserver {
public:
- ComboboxMenuModelAdapter(Combobox* owner, ui::ComboboxModel* model)
+ ComboboxMenuModel(Combobox* owner, ui::ComboboxModel* model)
: owner_(owner), model_(model) {
model_->AddObserver(this);
}
- ~ComboboxMenuModelAdapter() override { model_->RemoveObserver(this); }
+ ~ComboboxMenuModel() override { model_->RemoveObserver(this); }
private:
bool UseCheckmarks() const {
@@ -356,7 +357,7 @@ class Combobox::ComboboxMenuModelAdapter : public ui::MenuModel,
Combobox* owner_; // Weak. Owns this.
ui::ComboboxModel* model_; // Weak.
- DISALLOW_COPY_AND_ASSIGN(ComboboxMenuModelAdapter);
+ DISALLOW_COPY_AND_ASSIGN(ComboboxMenuModel);
};
////////////////////////////////////////////////////////////////////////////////
@@ -368,7 +369,7 @@ Combobox::Combobox(ui::ComboboxModel* model, Style style)
listener_(NULL),
selected_index_(style == STYLE_ACTION ? 0 : model_->GetDefaultIndex()),
invalid_(false),
- menu_model_adapter_(new ComboboxMenuModelAdapter(this, model)),
+ menu_model_(new ComboboxMenuModel(this, model)),
text_button_(new TransparentButton(this)),
arrow_button_(new TransparentButton(this)),
size_to_largest_label_(style_ == STYLE_NORMAL),
@@ -846,16 +847,22 @@ void Combobox::ShowDropDownMenu(ui::MenuSourceType source_type) {
// Allow |menu_runner_| to be set by the testing API, but if this method is
// ever invoked recursively, ensure the old menu is closed.
if (!menu_runner_ || menu_runner_->IsRunning()) {
+ menu_model_adapter_.reset(new MenuModelAdapter(
+ menu_model_.get(), base::Bind(&Combobox::OnMenuClosed,
+ base::Unretained(this), original_state)));
menu_runner_.reset(
- new MenuRunner(menu_model_adapter_.get(), MenuRunner::COMBOBOX));
- }
- if (menu_runner_->RunMenuAt(GetWidget(), nullptr, bounds, anchor_position,
- source_type) == MenuRunner::MENU_DELETED) {
- return;
+ new MenuRunner(menu_model_adapter_->CreateMenu(),
+ MenuRunner::COMBOBOX | MenuRunner::ASYNC));
}
+ menu_runner_->RunMenuAt(GetWidget(), nullptr, bounds, anchor_position,
+ source_type);
+}
+
+void Combobox::OnMenuClosed(Button::ButtonState original_button_state) {
menu_runner_.reset();
+ menu_model_adapter_.reset();
if (arrow_button_)
- arrow_button_->SetState(original_state);
+ arrow_button_->SetState(original_button_state);
closed_time_ = base::Time::Now();
// Need to explicitly clear mouse handler so that events get sent
@@ -891,8 +898,7 @@ gfx::Size Combobox::GetContentSize() const {
if (size_to_largest_label_ || i == selected_index_) {
width = std::max(
- width,
- gfx::GetStringWidth(menu_model_adapter_->GetLabelAt(i), font_list));
+ width, gfx::GetStringWidth(menu_model_->GetLabelAt(i), font_list));
}
}
return gfx::Size(width, font_list.GetHeight());
« no previous file with comments | « ui/views/controls/combobox/combobox.h ('k') | ui/views/controls/scrollbar/base_scroll_bar.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698