feat: promisify app.dock.show() (#16904)

* feat: promisify app.dock.show

* add a spec
This commit is contained in:
Shelley Vohr 2019-02-12 21:06:33 -08:00 коммит произвёл GitHub
Родитель cd9bf72ee8
Коммит ca83d36426
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
4 изменённых файлов: 30 добавлений и 15 удалений

Просмотреть файл

@ -171,7 +171,7 @@ class Browser : public WindowListObserver {
// Hide/Show dock.
void DockHide();
void DockShow();
v8::Local<v8::Promise> DockShow(v8::Isolate* isolate);
bool DockIsVisible();
// Set docks' menu.

Просмотреть файл

@ -11,6 +11,7 @@
#include "atom/browser/window_list.h"
#include "atom/common/application_info.h"
#include "atom/common/platform_util.h"
#include "atom/common/promise_util.h"
#include "base/mac/bundle_locations.h"
#include "base/mac/foundation_util.h"
#include "base/mac/mac_util.h"
@ -338,7 +339,8 @@ bool Browser::DockIsVisible() {
NSApplicationActivationPolicyRegular);
}
void Browser::DockShow() {
v8::Local<v8::Promise> Browser::DockShow(v8::Isolate* isolate) {
scoped_refptr<util::Promise> promise = new util::Promise(isolate);
BOOL active = [[NSRunningApplication currentApplication] isActive];
ProcessSerialNumber psn = {0, kCurrentProcess};
if (active) {
@ -357,11 +359,14 @@ void Browser::DockShow() {
dispatch_after(one_ms, dispatch_get_main_queue(), ^{
[[NSRunningApplication currentApplication]
activateWithOptions:NSApplicationActivateIgnoringOtherApps];
promise->Resolve();
});
});
} else {
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
promise->Resolve();
}
return promise->GetHandle();
}
void Browser::DockSetMenu(AtomMenuModel* model) {

Просмотреть файл

@ -1295,13 +1295,11 @@ Hides the dock icon.
### `app.dock.show()` _macOS_
Shows the dock icon.
Returns `Promise<void>` - Resolves when the dock icon is shown.
### `app.dock.isVisible()` _macOS_
Returns `Boolean` - Whether the dock icon is visible.
The `app.dock.show()` call is asynchronous so this method might not
return true immediately after that call.
### `app.dock.setMenu(menu)` _macOS_

Просмотреть файл

@ -1110,17 +1110,29 @@ describe('app module', () => {
})
})
describe('dock.setMenu', () => {
before(function () {
if (process.platform !== 'darwin') {
this.skip()
}
describe('dock APIs', () => {
describe('dock.setMenu()', () => {
it('keeps references to the menu', function () {
if (process.platform !== 'darwin') this.skip()
app.dock.setMenu(new Menu())
const v8Util = process.atomBinding('v8_util')
v8Util.requestGarbageCollectionForTesting()
})
})
it('keeps references to the menu', () => {
app.dock.setMenu(new Menu())
const v8Util = process.atomBinding('v8_util')
v8Util.requestGarbageCollectionForTesting()
describe('dock.show()', () => {
before(function () {
if (process.platform !== 'darwin') this.skip()
})
it('returns a Promise', () => {
expect(app.dock.show()).to.be.a('promise')
})
it('eventually fulfills', () => {
expect(app.dock.show()).to.be.eventually.fulfilled()
})
})
})
@ -1131,7 +1143,7 @@ describe('app module', () => {
it('becomes fulfilled if the app is already ready', () => {
expect(app.isReady()).to.be.true()
return expect(app.whenReady()).to.be.eventually.fulfilled
expect(app.whenReady()).to.be.eventually.fulfilled()
})
})