зеркало из https://github.com/electron/electron.git
Finalized browser-window show & hide events, added tests & fixed os x implementation
This commit is contained in:
Родитель
c1267b2320
Коммит
fcc1f4d7ed
|
@ -428,6 +428,14 @@ void NativeWindow::NotifyWindowFocus() {
|
|||
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnWindowFocus());
|
||||
}
|
||||
|
||||
void NativeWindow::NotifyWindowShow() {
|
||||
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnWindowShow());
|
||||
}
|
||||
|
||||
void NativeWindow::NotifyWindowHide() {
|
||||
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnWindowHide());
|
||||
}
|
||||
|
||||
void NativeWindow::NotifyWindowMaximize() {
|
||||
FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnWindowMaximize());
|
||||
}
|
||||
|
|
|
@ -79,6 +79,21 @@ bool ScopedDisableResize::disable_resize_ = false;
|
|||
return self;
|
||||
}
|
||||
|
||||
- (void)windowDidChangeOcclusionState:(NSNotification *)notification {
|
||||
// notification.object is the window that changed its state.
|
||||
// It's safe to use self.window instead if you don't assign one delegate to many windows
|
||||
NSWindow *window = notification.object;
|
||||
|
||||
// check occlusion binary flag
|
||||
if (window.occlusionState & NSWindowOcclusionStateVisible) {
|
||||
// The app is visible
|
||||
shell_->NotifyWindowShow();
|
||||
} else {
|
||||
// The app is not visible
|
||||
shell_->NotifyWindowHide();
|
||||
}
|
||||
}
|
||||
|
||||
- (void)windowDidBecomeMain:(NSNotification*)notification {
|
||||
content::WebContents* web_contents = shell_->web_contents();
|
||||
if (!web_contents)
|
||||
|
|
|
@ -32,7 +32,7 @@ BrowserWindow.prototype._init = function() {
|
|||
|
||||
// window.resizeTo(...)
|
||||
// window.moveTo(...)
|
||||
this.webContents.on('move', (event, title) => {
|
||||
this.webContents.on('move', (event, size) => {
|
||||
return this.setBounds(size);
|
||||
});
|
||||
|
||||
|
@ -80,16 +80,16 @@ BrowserWindow.prototype._init = function() {
|
|||
|
||||
// Evented visibilityState changes
|
||||
this.on('show', () => {
|
||||
return this.webContents.send('ATOM_RENDERER_WINDOW_VISIBILITY_CHANGE', true, this.isMinimized());
|
||||
return this.webContents.send('ATOM_RENDERER_WINDOW_VISIBILITY_CHANGE', this.isVisible(), this.isMinimized());
|
||||
});
|
||||
this.on('hide', () => {
|
||||
return this.webContents.send('ATOM_RENDERER_WINDOW_VISIBILITY_CHANGE', false, this.isMinimized());
|
||||
return this.webContents.send('ATOM_RENDERER_WINDOW_VISIBILITY_CHANGE', this.isVisible(), this.isMinimized());
|
||||
});
|
||||
this.on('minimize', () => {
|
||||
return this.webContents.send('ATOM_RENDERER_WINDOW_VISIBILITY_CHANGE', this.isVisible(), true);
|
||||
return this.webContents.send('ATOM_RENDERER_WINDOW_VISIBILITY_CHANGE', this.isVisible(), this.isMinimized());
|
||||
});
|
||||
this.on('restore', () => {
|
||||
return this.webContents.send('ATOM_RENDERER_WINDOW_VISIBILITY_CHANGE', this.isVisible(), false);
|
||||
return this.webContents.send('ATOM_RENDERER_WINDOW_VISIBILITY_CHANGE', this.isVisible(), this.isMinimized());
|
||||
});
|
||||
|
||||
// Notify the creation of the window.
|
||||
|
|
|
@ -120,14 +120,55 @@ describe('browser-window module', function() {
|
|||
});
|
||||
|
||||
describe('BrowserWindow.show()', function() {
|
||||
it('should focus on window', function() {
|
||||
if (isCI) {
|
||||
return;
|
||||
}
|
||||
if (isCI) {
|
||||
return;
|
||||
}
|
||||
|
||||
it('should focus on window', function() {
|
||||
w.show();
|
||||
assert(w.isFocused());
|
||||
});
|
||||
|
||||
it('should make the window visible', function() {
|
||||
w.show();
|
||||
assert(w.isVisible());
|
||||
});
|
||||
|
||||
it('emits when window is shown', function(done) {
|
||||
this.timeout(10000);
|
||||
w.once('show', function() {
|
||||
assert.equal(w.isVisible(), true);
|
||||
done();
|
||||
});
|
||||
w.show();
|
||||
});
|
||||
});
|
||||
|
||||
describe('BrowserWindow.hide()', function() {
|
||||
if (isCI) {
|
||||
return;
|
||||
}
|
||||
|
||||
it('should defocus on window', function() {
|
||||
w.hide();
|
||||
assert(!w.isFocused());
|
||||
});
|
||||
|
||||
it('should make the window not visible', function() {
|
||||
w.show();
|
||||
w.hide();
|
||||
assert(!w.isVisible());
|
||||
});
|
||||
|
||||
it('emits when window is hidden', function(done) {
|
||||
this.timeout(10000);
|
||||
w.show();
|
||||
w.once('hide', function() {
|
||||
assert.equal(w.isVisible(), false);
|
||||
done();
|
||||
});
|
||||
w.hide();
|
||||
});
|
||||
});
|
||||
|
||||
describe('BrowserWindow.showInactive()', function() {
|
||||
|
|
Загрузка…
Ссылка в новой задаче