summaryrefslogtreecommitdiffstats
path: root/views/controls/button/menu_button.cc
diff options
context:
space:
mode:
Diffstat (limited to 'views/controls/button/menu_button.cc')
-rw-r--r--views/controls/button/menu_button.cc15
1 files changed, 14 insertions, 1 deletions
diff --git a/views/controls/button/menu_button.cc b/views/controls/button/menu_button.cc
index 4a1e28a..b45c2ac 100644
--- a/views/controls/button/menu_button.cc
+++ b/views/controls/button/menu_button.cc
@@ -49,11 +49,14 @@ MenuButton::MenuButton(ButtonListener* listener,
menu_delegate_(menu_delegate),
show_menu_marker_(show_menu_marker),
menu_marker_(ResourceBundle::GetSharedInstance().GetBitmapNamed(
- IDR_MENU_DROPARROW)) {
+ IDR_MENU_DROPARROW)),
+ destroyed_flag_(NULL) {
set_alignment(TextButton::ALIGN_LEFT);
}
MenuButton::~MenuButton() {
+ if (destroyed_flag_)
+ *destroyed_flag_ = true;
}
////////////////////////////////////////////////////////////////////////////////
@@ -145,7 +148,17 @@ bool MenuButton::Activate() {
GetRootView()->SetMouseHandler(NULL);
menu_visible_ = true;
+
+ bool destroyed = false;
+ destroyed_flag_ = &destroyed;
+
menu_delegate_->RunMenu(this, menu_position);
+
+ if (destroyed) {
+ // The menu was deleted while showing. Don't attempt any processing.
+ return false;
+ }
+
menu_visible_ = false;
menu_closed_time_ = Time::Now();