Add responsive and unresponsive events for window.

This commit is contained in:
Cheng Zhao 2013-06-06 19:45:48 +08:00
parent 556e84f53a
commit ae88f303fa
7 changed files with 32 additions and 0 deletions

View file

@ -71,6 +71,14 @@ void Window::OnWindowBlur() {
Emit("blur");
}
void Window::OnRendererUnresponsive() {
Emit("unresponsive");
}
void Window::OnRendererResponsive() {
Emit("responsive");
}
// static
v8::Handle<v8::Value> Window::New(const v8::Arguments &args) {
v8::HandleScope scope;

View file

@ -38,6 +38,8 @@ class Window : public EventEmitter,
virtual void WillCloseWindow(bool* prevent_default) OVERRIDE;
virtual void OnWindowClosed() OVERRIDE;
virtual void OnWindowBlur() OVERRIDE;
virtual void OnRendererUnresponsive() OVERRIDE;
virtual void OnRendererResponsive() OVERRIDE;
private:
static v8::Handle<v8::Value> New(const v8::Arguments &args);

View file

@ -7,9 +7,11 @@
This is the default mode of Atom Shell, please follow the instructions in
wiki to get started.
<script type="text/javascript" charset="utf-8">
var ipc = require('ipc');
window.addEventListener('contextmenu', function (e) {
while(1) {}
e.preventDefault();
ipc.send('menu');
}, false);

View file

@ -30,6 +30,10 @@ delegate.browserMainParts.preMainMessageLoopRun = function() {
mainWindow = null;
});
mainWindow.on('unresponsive', function() {
console.log('unresponsive');
});
var template = [
{
label: 'Atom Shell',

View file

@ -248,6 +248,14 @@ bool NativeWindow::IsPopupOrPanel(const content::WebContents* source) const {
return true;
}
void NativeWindow::RendererUnresponsive(content::WebContents* source) {
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnRendererUnresponsive());
}
void NativeWindow::RendererResponsive(content::WebContents* source) {
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnRendererResponsive());
}
bool NativeWindow::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(NativeWindow, message)

View file

@ -146,6 +146,8 @@ class NativeWindow : public content::WebContentsDelegate,
virtual void CloseContents(content::WebContents* source) OVERRIDE;
virtual bool IsPopupOrPanel(
const content::WebContents* source) const OVERRIDE;
virtual void RendererUnresponsive(content::WebContents* source) OVERRIDE;
virtual void RendererResponsive(content::WebContents* source) OVERRIDE;
// Implementations of content::WebContentsObserver.
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;

View file

@ -25,6 +25,12 @@ class NativeWindowObserver {
// Called when window loses focus.
virtual void OnWindowBlur() {}
// Called when renderer is hung.
virtual void OnRendererUnresponsive() {}
// Called when renderer recovers.
virtual void OnRendererResponsive() {}
};
} // namespace atom