Commit eb1ae218 authored by Boris Yusupov's avatar Boris Yusupov Committed by Commit Bot

Implement ViewsNSWindowDelegate::windowShouldClose

This to fix application menu Close Window for mac views like
-- save info to restore closed window
-- check onbeforeunload event

Bug: 751018
Change-Id: I7a99def820f066fc1f47c3c2bae3a2abb49106ff
Reviewed-on: https://chromium-review.googlesource.com/591848
Commit-Queue: Boris Yusupov <boriay@yandex-team.ru>
Reviewed-by: default avatarTrent Apted <tapted@chromium.org>
Cr-Commit-Position: refs/heads/master@{#491457}
parent a3fd83c8
......@@ -92,6 +92,12 @@
parent_->OnWindowKeyStatusChangedTo(false);
}
- (BOOL)windowShouldClose:(id)sender {
views::NonClientView* nonClientView =
[self nativeWidgetMac]->GetWidget()->non_client_view();
return !nonClientView || nonClientView->CanClose();
}
- (void)windowWillClose:(NSNotification*)notification {
// Retain |self|. |parent_| should be cleared. OnWindowWillClose() may delete
// |parent_|, but it may also dealloc |self| before returning. However, the
......
......@@ -915,11 +915,17 @@ class ModalDialogDelegate : public DialogDelegateView {
explicit ModalDialogDelegate(ui::ModalType modal_type)
: modal_type_(modal_type) {}
void set_can_close(bool value) { can_close_ = value; }
// WidgetDelegate:
ui::ModalType GetModalType() const override { return modal_type_; }
// DialogDelegate:
bool Close() override { return can_close_; }
private:
const ui::ModalType modal_type_;
bool can_close_ = true;
DISALLOW_COPY_AND_ASSIGN(ModalDialogDelegate);
};
......@@ -1877,6 +1883,19 @@ TEST_F(NativeWidgetMacViewsOrderTest, UnassociatedViewsIsAbove) {
]]));
}
// Test -[NSWindowDelegate windowShouldClose:].
TEST_F(NativeWidgetMacTest, CanClose) {
ModalDialogDelegate* delegate = new ModalDialogDelegate(ui::MODAL_TYPE_NONE);
Widget* widget =
views::DialogDelegate::CreateDialogWidget(delegate, nullptr, nullptr);
NSWindow* window = widget->GetNativeWindow();
delegate->set_can_close(false);
EXPECT_FALSE([[window delegate] windowShouldClose:window]);
delegate->set_can_close(true);
EXPECT_TRUE([[window delegate] windowShouldClose:window]);
widget->CloseNow();
}
} // namespace test
} // namespace views
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment