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() {
|
void BrowserWindow::OnWindowClosed() {
|
||||||
api_web_contents_->DestroyWebContents(true /* async */);
|
api_web_contents_->DestroyWebContents(true /* async */);
|
||||||
|
|
||||||
|
|
|
@ -71,6 +71,7 @@ class BrowserWindow : public mate::TrackableObject<BrowserWindow>,
|
||||||
// NativeWindowObserver:
|
// NativeWindowObserver:
|
||||||
void WillCloseWindow(bool* prevent_default) override;
|
void WillCloseWindow(bool* prevent_default) override;
|
||||||
void WillDestroyNativeObject() override;
|
void WillDestroyNativeObject() override;
|
||||||
|
void OnCloseButtonClicked(bool* prevent_default) override;
|
||||||
void OnWindowClosed() override;
|
void OnWindowClosed() override;
|
||||||
void OnWindowEndSession() override;
|
void OnWindowEndSession() override;
|
||||||
void OnWindowBlur() override;
|
void OnWindowBlur() override;
|
||||||
|
|
|
@ -427,14 +427,6 @@ void NativeWindow::CloseFilePreview() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void NativeWindow::RequestToClosePage() {
|
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
|
// 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
|
// 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
|
// dialog when the window is busy executing some script withouth waiting for
|
||||||
|
@ -480,6 +472,25 @@ void NativeWindow::RendererResponsive(content::WebContents* source) {
|
||||||
observer.OnWindowResponsive();
|
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() {
|
void NativeWindow::NotifyWindowClosed() {
|
||||||
if (is_closed_)
|
if (is_closed_)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -249,6 +249,7 @@ class NativeWindow : public base::SupportsUserData,
|
||||||
|
|
||||||
// Public API used by platform-dependent delegates and observers to send UI
|
// Public API used by platform-dependent delegates and observers to send UI
|
||||||
// related notifications.
|
// related notifications.
|
||||||
|
void NotifyWindowCloseButtonClicked();
|
||||||
void NotifyWindowClosed();
|
void NotifyWindowClosed();
|
||||||
void NotifyWindowEndSession();
|
void NotifyWindowEndSession();
|
||||||
void NotifyWindowBlur();
|
void NotifyWindowBlur();
|
||||||
|
|
|
@ -415,10 +415,7 @@ bool ScopedDisableResize::disable_resize_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)windowShouldClose:(id)window {
|
- (BOOL)windowShouldClose:(id)window {
|
||||||
// When user tries to close the window by clicking the close button, we do
|
shell_->NotifyWindowCloseButtonClicked();
|
||||||
// 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();
|
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,9 @@ class NativeWindowObserver {
|
||||||
// Called before the native window object is going to be destroyed.
|
// Called before the native window object is going to be destroyed.
|
||||||
virtual void WillDestroyNativeObject() {}
|
virtual void WillDestroyNativeObject() {}
|
||||||
|
|
||||||
|
// Called when closed button is clicked.
|
||||||
|
virtual void OnCloseButtonClicked(bool* prevent_default) {}
|
||||||
|
|
||||||
// Called when the window is closed.
|
// Called when the window is closed.
|
||||||
virtual void OnWindowClosed() {}
|
virtual void OnWindowClosed() {}
|
||||||
|
|
||||||
|
|
|
@ -124,7 +124,8 @@ class NativeWindowClientView : public views::ClientView {
|
||||||
virtual ~NativeWindowClientView() {}
|
virtual ~NativeWindowClientView() {}
|
||||||
|
|
||||||
bool CanClose() override {
|
bool CanClose() override {
|
||||||
static_cast<NativeWindowViews*>(contents_view())->RequestToClosePage();
|
static_cast<NativeWindowViews*>(contents_view())->
|
||||||
|
NotifyWindowCloseButtonClicked();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue