[Win] Add key bindings for message box.
This commit is contained in:
parent
2f2cbce9b9
commit
47686b3233
1 changed files with 27 additions and 0 deletions
|
@ -21,6 +21,10 @@ namespace atom {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
// The group used by the buttons. This name is chosen voluntarily big not to
|
||||||
|
// conflict with other groups that could be in the dialog content.
|
||||||
|
const int kButtonGroup = 1127;
|
||||||
|
|
||||||
class MessageDialog : public base::MessageLoop::Dispatcher,
|
class MessageDialog : public base::MessageLoop::Dispatcher,
|
||||||
public views::WidgetDelegate,
|
public views::WidgetDelegate,
|
||||||
public views::View,
|
public views::View,
|
||||||
|
@ -46,11 +50,13 @@ class MessageDialog : public base::MessageLoop::Dispatcher,
|
||||||
virtual views::Widget* GetWidget() OVERRIDE;
|
virtual views::Widget* GetWidget() OVERRIDE;
|
||||||
virtual const views::Widget* GetWidget() const OVERRIDE;
|
virtual const views::Widget* GetWidget() const OVERRIDE;
|
||||||
virtual views::View* GetContentsView() OVERRIDE;
|
virtual views::View* GetContentsView() OVERRIDE;
|
||||||
|
virtual views::View* GetInitiallyFocusedView() OVERRIDE;
|
||||||
virtual ui::ModalType GetModalType() const OVERRIDE;
|
virtual ui::ModalType GetModalType() const OVERRIDE;
|
||||||
|
|
||||||
// Overridden from views::View:
|
// Overridden from views::View:
|
||||||
virtual gfx::Size GetPreferredSize() OVERRIDE;
|
virtual gfx::Size GetPreferredSize() OVERRIDE;
|
||||||
virtual void Layout() OVERRIDE;
|
virtual void Layout() OVERRIDE;
|
||||||
|
virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE;
|
||||||
|
|
||||||
// Overridden from views::ButtonListener:
|
// Overridden from views::ButtonListener:
|
||||||
virtual void ButtonPressed(views::Button* sender,
|
virtual void ButtonPressed(views::Button* sender,
|
||||||
|
@ -94,20 +100,28 @@ MessageDialog::MessageDialog(NativeWindow* parent_window,
|
||||||
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);
|
||||||
|
button->SetGroup(kButtonGroup);
|
||||||
|
|
||||||
buttons_.push_back(button);
|
buttons_.push_back(button);
|
||||||
AddChildView(button);
|
AddChildView(button);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// First button is always default button.
|
||||||
buttons_[0]->SetIsDefault(true);
|
buttons_[0]->SetIsDefault(true);
|
||||||
|
buttons_[0]->AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE));
|
||||||
|
|
||||||
views::Widget::InitParams widget_params;
|
views::Widget::InitParams widget_params;
|
||||||
widget_params.delegate = this;
|
widget_params.delegate = this;
|
||||||
|
widget_params.top_level = true;
|
||||||
if (parent_window)
|
if (parent_window)
|
||||||
widget_params.parent = parent_window->GetNativeWindow();
|
widget_params.parent = parent_window->GetNativeWindow();
|
||||||
widget_ = new views::Widget;
|
widget_ = new views::Widget;
|
||||||
widget_->set_frame_type(views::Widget::FRAME_TYPE_FORCE_NATIVE);
|
widget_->set_frame_type(views::Widget::FRAME_TYPE_FORCE_NATIVE);
|
||||||
widget_->Init(widget_params);
|
widget_->Init(widget_params);
|
||||||
|
|
||||||
|
// Bind to ESC.
|
||||||
|
AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE));
|
||||||
|
|
||||||
set_background(views::Background::CreateSolidBackground(
|
set_background(views::Background::CreateSolidBackground(
|
||||||
skia::COLORREFToSkColor(GetSysColor(COLOR_WINDOW))));
|
skia::COLORREFToSkColor(GetSysColor(COLOR_WINDOW))));
|
||||||
widget_->Show();
|
widget_->Show();
|
||||||
|
@ -145,6 +159,13 @@ views::View* MessageDialog::GetContentsView() {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
views::View* MessageDialog::GetInitiallyFocusedView() {
|
||||||
|
if (buttons_.size() > 0)
|
||||||
|
return buttons_[0];
|
||||||
|
else
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
ui::ModalType MessageDialog::GetModalType() const {
|
ui::ModalType MessageDialog::GetModalType() const {
|
||||||
return ui::MODAL_TYPE_WINDOW;
|
return ui::MODAL_TYPE_WINDOW;
|
||||||
}
|
}
|
||||||
|
@ -187,6 +208,12 @@ void MessageDialog::Layout() {
|
||||||
bounds.height() - height);
|
bounds.height() - height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool MessageDialog::AcceleratorPressed(const ui::Accelerator& accelerator) {
|
||||||
|
DCHECK_EQ(accelerator.key_code(), ui::VKEY_ESCAPE);
|
||||||
|
widget_->Close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void MessageDialog::ButtonPressed(views::Button* sender,
|
void MessageDialog::ButtonPressed(views::Button* sender,
|
||||||
const ui::Event& event) {
|
const ui::Event& event) {
|
||||||
result_ = sender->tag();
|
result_ = sender->tag();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue