Skip to content

Commit 8776cb1

Browse files
committed
Finder behaviour for windows
1 parent 4c94503 commit 8776cb1

3 files changed

Lines changed: 119 additions & 120 deletions

File tree

atom-lib/finder-window.js

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,55 @@
11
const electron = require('electron')
22
const BrowserWindow = electron.BrowserWindow
3+
const Menu = electron.Menu
4+
const MenuItem = electron.MenuItem
5+
const app = electron.app
6+
const ipcMain = electron.ipcMain
7+
const Tray = electron.Tray
38
const path = require('path')
9+
const nodeIpc = require('node-ipc')
10+
11+
var isFinderLoaded = false
12+
13+
nodeIpc.config.id = 'finder'
14+
nodeIpc.config.retry = 1500
15+
nodeIpc.config.silent = true
16+
17+
nodeIpc.connectTo(
18+
'main',
19+
path.join(app.getPath('userData'), 'boost.service'),
20+
function () {
21+
nodeIpc.of.main.on(
22+
'connect',
23+
function () {
24+
nodeIpc.log('<< ## connected to world ##'.rainbow, nodeIpc.config.delay)
25+
}
26+
)
27+
nodeIpc.of.main.on(
28+
'disconnect',
29+
function(){
30+
nodeIpc.log('<< disconnected from main'.notice)
31+
}
32+
)
33+
nodeIpc.of.main.on(
34+
'message',
35+
function (payload) {
36+
switch (payload.type) {
37+
case 'open-finder':
38+
if (isFinderLoaded) openFinder()
39+
break
40+
}
41+
}
42+
)
43+
}
44+
)
45+
46+
function emit (type, data) {
47+
var payload = {
48+
type: type,
49+
data: data
50+
}
51+
nodeIpc.of.main.emit('message', payload)
52+
}
453

554
var config = {
655
width: 640,
@@ -25,9 +74,64 @@ var finderWindow = new BrowserWindow(config)
2574
var url = path.resolve(__dirname, '../browser/finder/index.html')
2675

2776
finderWindow.loadURL('file://' + url)
77+
finderWindow.setSkipTaskbar(true)
2878

2979
if (process.platform === 'darwin') {
3080
finderWindow.setVisibleOnAllWorkspaces(true)
3181
}
3282

83+
finderWindow.on('blur', function () {
84+
hideFinder()
85+
})
86+
87+
finderWindow.webContents.on('did-finish-load', function () {
88+
var appIcon = new Tray(path.join(__dirname, '../resources/tray-icon.png'))
89+
appIcon.setToolTip('Boost')
90+
91+
var trayMenu = new Menu()
92+
trayMenu.append(new MenuItem({
93+
label: 'Open Main window',
94+
click: function () {
95+
emit('show-main-window')
96+
}
97+
}))
98+
trayMenu.append(new MenuItem({
99+
label: 'Open Finder window',
100+
click: function () {
101+
openFinder()
102+
}
103+
}))
104+
trayMenu.append(new MenuItem({
105+
label: 'Quit',
106+
click: function () {
107+
emit('quit-app')
108+
} }))
109+
110+
appIcon.setContextMenu(trayMenu)
111+
appIcon.on('click', function (e) {
112+
e.preventDefault()
113+
appIcon.popUpContextMenu(trayMenu)
114+
})
115+
116+
ipcMain.on('copy-finder', function () {
117+
emit('copy-finder')
118+
})
119+
120+
ipcMain.on('hide-finder', function () {
121+
hideFinder()
122+
})
123+
124+
isFinderLoaded = true
125+
})
126+
127+
function openFinder () {
128+
finderWindow.show()
129+
}
130+
function hideFinder () {
131+
if (process.platform === 'win32') {
132+
finderWindow.minimize()
133+
return
134+
}
135+
finderWindow.hide()
136+
}
33137
module.exports = finderWindow

finder.js

Lines changed: 1 addition & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -1,140 +1,27 @@
11
const electron = require('electron')
22
const app = electron.app
3-
const Tray = electron.Tray
43
const Menu = electron.Menu
5-
const MenuItem = electron.MenuItem
64
const ipcMain = electron.ipcMain
75
const path = require('path')
86

9-
const nodeIpc = require('node-ipc')
10-
117
var finderWindow = null
12-
var isFinderLoaded = false
13-
14-
function hideFinder () {
15-
if (!isFinderLoaded) return false
16-
17-
if (process.platform === 'darwin') {
18-
Menu.sendActionToFirstResponder('hide:')
19-
}
20-
if (process.platform === 'win32') {
21-
finderWindow.minimize()
22-
}
23-
finderWindow.hide()
24-
}
25-
26-
function showFinder () {
27-
if (!isFinderLoaded) return false
28-
29-
if (!finderWindow.isVisible()) {
30-
finderWindow.show()
31-
}
32-
if (process.platform === 'win32') {
33-
finderWindow.minimize()
34-
finderWindow.restore()
35-
}
36-
}
37-
38-
nodeIpc.config.id = 'finder'
39-
nodeIpc.config.retry = 1500
40-
nodeIpc.config.silent = true
41-
42-
nodeIpc.connectTo(
43-
'main',
44-
path.join(app.getPath('userData'), 'boost.service'),
45-
function () {
46-
nodeIpc.of.main.on(
47-
'connect',
48-
function () {
49-
nodeIpc.log('<< ## connected to world ##'.rainbow, nodeIpc.config.delay)
50-
}
51-
)
52-
nodeIpc.of.main.on(
53-
'disconnect',
54-
function(){
55-
nodeIpc.log('<< disconnected from main'.notice)
56-
}
57-
)
58-
nodeIpc.of.main.on(
59-
'message',
60-
function (payload) {
61-
switch (payload.type) {
62-
case 'open-finder':
63-
showFinder()
64-
break
65-
}
66-
}
67-
)
68-
}
69-
)
70-
71-
function emit (type, data) {
72-
var payload = {
73-
type: type,
74-
data: data
75-
}
76-
nodeIpc.of.main.emit('message', payload)
77-
}
788

799
var appQuit = false
8010
app.on('ready', function () {
8111
if (process.platform === 'darwin') {
8212
app.dock.hide()
8313
}
8414

85-
var appIcon = new Tray(__dirname + '/resources/tray-icon.png')
86-
appIcon.setToolTip('Boost')
87-
8815
var template = require('./atom-lib/menu-template')
8916
var menu = Menu.buildFromTemplate(template)
9017
Menu.setApplicationMenu(menu)
9118

9219
finderWindow = require('./atom-lib/finder-window')
93-
finderWindow.webContents.on('did-finish-load', function () {
94-
var trayMenu = new Menu()
95-
trayMenu.append(new MenuItem({
96-
label: 'Open Main window',
97-
click: function () {
98-
emit('show-main-window')
99-
}
100-
}))
101-
trayMenu.append(new MenuItem({
102-
label: 'Open Finder window',
103-
click: function () {
104-
showFinder()
105-
}
106-
}))
107-
trayMenu.append(new MenuItem({
108-
label: 'Quit',
109-
click: function () {
110-
emit('quit-app')
111-
}
112-
}))
113-
appIcon.setContextMenu(trayMenu)
114-
appIcon.on('click', function (e) {
115-
e.preventDefault()
116-
appIcon.popUpContextMenu(trayMenu)
117-
})
118-
119-
ipcMain.on('copy-finder', function () {
120-
emit('copy-finder')
121-
})
122-
123-
ipcMain.on('hide-finder', function () {
124-
hideFinder()
125-
})
126-
127-
isFinderLoaded = true
128-
})
129-
130-
finderWindow.on('blur', function () {
131-
hideFinder()
132-
})
13320

13421
finderWindow.on('close', function (e) {
13522
if (appQuit) return true
13623
e.preventDefault()
137-
hideFinder()
24+
finderWindow.hide()
13825
})
13926
})
14027

main.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ autoUpdater
6565

6666
const nodeIpc = require('node-ipc')
6767
var isNodeIpcReady = false
68-
nodeIpc.config.id = 'node'
69-
nodeIpc.config.retry= 1500
68+
nodeIpc.config.id = 'node'
69+
nodeIpc.config.retry = 1500
7070
nodeIpc.config.silent = true
7171

7272
nodeIpc.serve(
@@ -75,15 +75,14 @@ nodeIpc.serve(
7575
isNodeIpcReady = true
7676
nodeIpc.server.on(
7777
'message',
78-
function (data, socket){
78+
function (data, socket) {
7979
console.log('>>', data)
8080
format(data)
8181
}
8282
)
8383
}
8484
)
8585

86-
8786
function format (payload) {
8887
switch (payload.type) {
8988
case 'show-main-window':
@@ -145,13 +144,22 @@ app.on('ready', function () {
145144
}
146145

147146
mainWindow.webContents.on('did-finish-load', function () {
148-
if (finderProcess == null) {
149-
var finderArgv = [path.resolve(__dirname, 'finder.js'), '--finder']
147+
if (finderProcess == null && process.platform === 'darwin') {
148+
var finderArgv = [path.join(__dirname, 'finder.js'), '--finder']
150149
if (_.find(process.argv, a => a === '--hot')) finderArgv.push('--hot')
151150
finderProcess = ChildProcess
152151
.execFile(process.execPath, finderArgv)
153152

154153
nodeIpc.server.start()
154+
} else {
155+
finderWindow = require('./atom-lib/finder-window')
156+
157+
finderWindow.on('close', function (e) {
158+
if (appQuit) return true
159+
e.preventDefault()
160+
finderWindow.hide()
161+
})
162+
nodeIpc.server.start()
155163
}
156164

157165
if (update != null) {

0 commit comments

Comments
 (0)