[Win] Message box now returns the right result.
This commit is contained in:
parent
e2898d4f2a
commit
21f59ec730
1 changed files with 22 additions and 3 deletions
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#include "base/message_loop.h"
|
#include "base/message_loop.h"
|
||||||
#include "base/run_loop.h"
|
#include "base/run_loop.h"
|
||||||
|
#include "base/string_util.h"
|
||||||
#include "base/utf_string_conversions.h"
|
#include "base/utf_string_conversions.h"
|
||||||
#include "browser/native_window.h"
|
#include "browser/native_window.h"
|
||||||
#include "skia/ext/skia_utils_win.h"
|
#include "skia/ext/skia_utils_win.h"
|
||||||
|
@ -33,6 +34,8 @@ class MessageDialog : public base::MessageLoop::Dispatcher,
|
||||||
const std::string& detail);
|
const std::string& detail);
|
||||||
virtual ~MessageDialog();
|
virtual ~MessageDialog();
|
||||||
|
|
||||||
|
int result() const { return result_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Overridden from MessageLoop::Dispatcher:
|
// Overridden from MessageLoop::Dispatcher:
|
||||||
virtual bool Dispatch(const base::NativeEvent& event) OVERRIDE;
|
virtual bool Dispatch(const base::NativeEvent& event) OVERRIDE;
|
||||||
|
@ -53,6 +56,7 @@ class MessageDialog : public base::MessageLoop::Dispatcher,
|
||||||
const ui::Event& event) OVERRIDE;
|
const ui::Event& event) OVERRIDE;
|
||||||
|
|
||||||
bool should_close_;
|
bool should_close_;
|
||||||
|
int result_;
|
||||||
views::Widget* widget_;
|
views::Widget* widget_;
|
||||||
views::MessageBoxView* message_box_view_;
|
views::MessageBoxView* message_box_view_;
|
||||||
std::vector<views::LabelButton*> buttons_;
|
std::vector<views::LabelButton*> buttons_;
|
||||||
|
@ -70,8 +74,10 @@ MessageDialog::MessageDialog(NativeWindow* parent_window,
|
||||||
const std::string& message,
|
const std::string& message,
|
||||||
const std::string& detail)
|
const std::string& detail)
|
||||||
: should_close_(false),
|
: should_close_(false),
|
||||||
|
result_(-1),
|
||||||
widget_(NULL),
|
widget_(NULL),
|
||||||
message_box_view_(NULL) {
|
message_box_view_(NULL) {
|
||||||
|
DCHECK(buttons.size() > 0);
|
||||||
set_owned_by_client();
|
set_owned_by_client();
|
||||||
|
|
||||||
views::MessageBoxView::InitParams params(UTF8ToUTF16(title));
|
views::MessageBoxView::InitParams params(UTF8ToUTF16(title));
|
||||||
|
@ -82,8 +88,6 @@ MessageDialog::MessageDialog(NativeWindow* parent_window,
|
||||||
for (size_t i = 0; i < buttons.size(); ++i) {
|
for (size_t i = 0; i < buttons.size(); ++i) {
|
||||||
views::LabelButton* button = new views::LabelButton(
|
views::LabelButton* button = new views::LabelButton(
|
||||||
this, UTF8ToUTF16(buttons[i]));
|
this, UTF8ToUTF16(buttons[i]));
|
||||||
if (i == 0)
|
|
||||||
button->SetIsDefault(true);
|
|
||||||
button->set_tag(i);
|
button->set_tag(i);
|
||||||
button->set_min_size(gfx::Size(60, 20));
|
button->set_min_size(gfx::Size(60, 20));
|
||||||
button->SetStyle(views::Button::STYLE_NATIVE_TEXTBUTTON);
|
button->SetStyle(views::Button::STYLE_NATIVE_TEXTBUTTON);
|
||||||
|
@ -91,6 +95,7 @@ MessageDialog::MessageDialog(NativeWindow* parent_window,
|
||||||
buttons_.push_back(button);
|
buttons_.push_back(button);
|
||||||
AddChildView(button);
|
AddChildView(button);
|
||||||
}
|
}
|
||||||
|
buttons_[0]->SetIsDefault(true);
|
||||||
|
|
||||||
views::Widget::InitParams widget_params;
|
views::Widget::InitParams widget_params;
|
||||||
widget_params.delegate = this;
|
widget_params.delegate = this;
|
||||||
|
@ -177,6 +182,8 @@ void MessageDialog::Layout() {
|
||||||
|
|
||||||
void MessageDialog::ButtonPressed(views::Button* sender,
|
void MessageDialog::ButtonPressed(views::Button* sender,
|
||||||
const ui::Event& event) {
|
const ui::Event& event) {
|
||||||
|
result_ = sender->tag();
|
||||||
|
widget_->Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
@ -194,7 +201,19 @@ int ShowMessageBox(NativeWindow* parent_window,
|
||||||
base::RunLoop run_loop(&dialog);
|
base::RunLoop run_loop(&dialog);
|
||||||
run_loop.Run();
|
run_loop.Run();
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
// When the dialog is closed without choosing anything, we think the user
|
||||||
|
// chose 'Cancel', otherwise we think the default behavior is chosen.
|
||||||
|
if (dialog.result() == -1) {
|
||||||
|
for (size_t i = 0; i < buttons.size(); ++i)
|
||||||
|
if (LowerCaseEqualsASCII(buttons[i], "cancel")) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
return dialog.result();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace atom
|
} // namespace atom
|
||||||
|
|
Loading…
Reference in a new issue