Add NativeWindowObserver::OnCloseButtonClicked
This commit is contained in:
parent
a25b49a127
commit
66fab65a1a
7 changed files with 35 additions and 13 deletions
|
@ -243,6 +243,14 @@ void BrowserWindow::WillDestroyNativeObject() {
|
|||
}
|
||||
}
|
||||
|
||||
void BrowserWindow::OnCloseButtonClicked(bool* prevent_default) {
|
||||
// When user tries to close the window by clicking the close button, we do
|
||||
// not close the window immediately, instead we try to close the web page
|
||||
// first, and when the web page is closed the window will also be closed.
|
||||
*prevent_default = true;
|
||||
window_->RequestToClosePage();
|
||||
}
|
||||
|
||||
void BrowserWindow::OnWindowClosed() {
|
||||
api_web_contents_->DestroyWebContents(true /* async */);
|
||||
|
||||
|
|
|
@ -71,6 +71,7 @@ class BrowserWindow : public mate::TrackableObject<BrowserWindow>,
|
|||
// NativeWindowObserver:
|
||||
void WillCloseWindow(bool* prevent_default) override;
|
||||
void WillDestroyNativeObject() override;
|
||||
void OnCloseButtonClicked(bool* prevent_default) override;
|
||||
void OnWindowClosed() override;
|
||||
void OnWindowEndSession() override;
|
||||
void OnWindowBlur() override;
|
||||
|
|
|
@ -427,14 +427,6 @@ void NativeWindow::CloseFilePreview() {
|
|||
}
|
||||
|
||||
void NativeWindow::RequestToClosePage() {
|
||||
bool prevent_default = false;
|
||||
for (NativeWindowObserver& observer : observers_)
|
||||
observer.WillCloseWindow(&prevent_default);
|
||||
if (prevent_default) {
|
||||
WindowList::WindowCloseCancelled(this);
|
||||
return;
|
||||
}
|
||||
|
||||
// Assume the window is not responding if it doesn't cancel the close and is
|
||||
// not closed in 5s, in this way we can quickly show the unresponsive
|
||||
// dialog when the window is busy executing some script withouth waiting for
|
||||
|
@ -480,6 +472,25 @@ void NativeWindow::RendererResponsive(content::WebContents* source) {
|
|||
observer.OnWindowResponsive();
|
||||
}
|
||||
|
||||
void NativeWindow::NotifyWindowCloseButtonClicked() {
|
||||
// First ask the observers whether we want to close.
|
||||
bool prevent_default = false;
|
||||
for (NativeWindowObserver& observer : observers_)
|
||||
observer.WillCloseWindow(&prevent_default);
|
||||
if (prevent_default) {
|
||||
WindowList::WindowCloseCancelled(this);
|
||||
return;
|
||||
}
|
||||
|
||||
// Then ask the observers how should we close the window.
|
||||
for (NativeWindowObserver& observer : observers_)
|
||||
observer.OnCloseButtonClicked(&prevent_default);
|
||||
if (prevent_default)
|
||||
return;
|
||||
|
||||
CloseImmediately();
|
||||
}
|
||||
|
||||
void NativeWindow::NotifyWindowClosed() {
|
||||
if (is_closed_)
|
||||
return;
|
||||
|
|
|
@ -249,6 +249,7 @@ class NativeWindow : public base::SupportsUserData,
|
|||
|
||||
// Public API used by platform-dependent delegates and observers to send UI
|
||||
// related notifications.
|
||||
void NotifyWindowCloseButtonClicked();
|
||||
void NotifyWindowClosed();
|
||||
void NotifyWindowEndSession();
|
||||
void NotifyWindowBlur();
|
||||
|
|
|
@ -415,10 +415,7 @@ bool ScopedDisableResize::disable_resize_ = false;
|
|||
}
|
||||
|
||||
- (BOOL)windowShouldClose:(id)window {
|
||||
// When user tries to close the window by clicking the close button, we do
|
||||
// not close the window immediately, instead we try to close the web page
|
||||
// first, and when the web page is closed the window will also be closed.
|
||||
shell_->RequestToClosePage();
|
||||
shell_->NotifyWindowCloseButtonClicked();
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
|
|
@ -37,6 +37,9 @@ class NativeWindowObserver {
|
|||
// Called before the native window object is going to be destroyed.
|
||||
virtual void WillDestroyNativeObject() {}
|
||||
|
||||
// Called when closed button is clicked.
|
||||
virtual void OnCloseButtonClicked(bool* prevent_default) {}
|
||||
|
||||
// Called when the window is closed.
|
||||
virtual void OnWindowClosed() {}
|
||||
|
||||
|
|
|
@ -124,7 +124,8 @@ class NativeWindowClientView : public views::ClientView {
|
|||
virtual ~NativeWindowClientView() {}
|
||||
|
||||
bool CanClose() override {
|
||||
static_cast<NativeWindowViews*>(contents_view())->RequestToClosePage();
|
||||
static_cast<NativeWindowViews*>(contents_view())->
|
||||
NotifyWindowCloseButtonClicked();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue