Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions browser/main/Main.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ class Main extends React.Component {
}

this.toggleFullScreen = () => this.handleFullScreenButton()
this.probeTrayClose = () => this.handleTrayCloseProbe()
}

getChildContext () {
Expand Down Expand Up @@ -172,11 +173,13 @@ class Main extends React.Component {
delete CodeMirror.keyMap.emacs['Ctrl-V']

eventEmitter.on('editor:fullscreen', this.toggleFullScreen)
eventEmitter.on('tray:probe-close', this.probeTrayClose)
eventEmitter.on('menubar:togglemenubar', this.toggleMenuBarVisible.bind(this))
}

componentWillUnmount () {
eventEmitter.off('editor:fullscreen', this.toggleFullScreen)
eventEmitter.off('tray:probe-close', this.probeTrayClose)
eventEmitter.off('menubar:togglemenubar', this.toggleMenuBarVisible.bind(this))
}

Expand Down Expand Up @@ -283,6 +286,14 @@ class Main extends React.Component {
})
}

handleTrayCloseProbe (e) {
const { config } = this.props
if (!config.ui.closeToTray) {
// console.log('handleTrayClose')
eventEmitter.emitIpc('tray:quit')
}
}

hideLeftLists (noteDetail, noteList, mainBody) {
this.setState({ noteDetailWidth: noteDetail.style.left })
this.setState({ mainBodyWidth: mainBody.style.left })
Expand Down
2 changes: 2 additions & 0 deletions browser/main/NoteList/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,8 @@ class NoteList extends React.Component {
const prevKey = prevProps.location.search && queryString.parse(prevProps.location.search).key
const noteKey = visibleNoteKeys.includes(prevKey) ? prevKey : note && note.key

ee.emitIpc('tray:update', _.sortBy(this.notes, note => new Date(note.updatedAt).getTime()).reverse().slice(0, 10))

if (note && location.search === '') {
if (!location.pathname.match(/\/searched/)) this.contextNotes = this.getContextNotes()

Expand Down
1 change: 1 addition & 0 deletions browser/main/lib/ConfigManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ export const DEFAULT_CONFIG = {
ui: {
language: 'en',
theme: 'default',
closeToTray: true,
showCopyNotification: true,
disableDirectWrite: false,
defaultNote: 'ALWAYS_ASK', // 'ALWAYS_ASK', 'SNIPPET_NOTE', 'MARKDOWN_NOTE'
Expand Down
7 changes: 6 additions & 1 deletion browser/main/lib/eventEmitter.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,14 @@ function emit (name, ...args) {
remote.getCurrentWindow().webContents.send(name, ...args)
}

function emitIpc (name, ...args) {
ipcRenderer.send(name, ...args)
}

export default {
emit,
on,
off,
once
once,
emitIpc
}
11 changes: 11 additions & 0 deletions browser/main/modals/PreferencesModal/UiTab.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ class UiTab extends React.Component {
const newConfig = {
ui: {
theme: this.refs.uiTheme.value,
closeToTray: this.refs.closeToTray.checked,
language: this.refs.uiLanguage.value,
defaultNote: this.refs.defaultNote.value,
tagNewNoteWithFilteringTags: this.refs.tagNewNoteWithFilteringTags.checked,
Expand Down Expand Up @@ -293,6 +294,16 @@ class UiTab extends React.Component {
</div>
: null
}
<div styleName='group-checkBoxSection'>
<label>
<input onChange={(e) => this.handleUIChange(e)}
checked={this.state.config.ui.closeToTray}
ref='closeToTray'
type='checkbox'
/>&nbsp;
Close main window to tray
</label>
</div>

<div styleName='group-header2'>Tags</div>

Expand Down
76 changes: 70 additions & 6 deletions lib/main-window.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow
const { app, BrowserWindow, Menu, MenuItem, Tray, ipcMain } = electron
const path = require('path')
const Config = require('electron-config')
const config = new Config()
const _ = require('lodash')
const manifest = require('../package.json')
const product = `${manifest.productName} ${manifest.version}`

var menu
// set up some chrome extensions
if (process.env.NODE_ENV === 'development') {
const {
Expand Down Expand Up @@ -73,7 +75,7 @@ mainWindow.webContents.sendInputEvent({
keyCode: '\u0008'
})

if (process.platform === 'darwin') {
if (process.platform === 'darwin' || process.env.DESKTOP_SESSION === 'cinnamon') {
mainWindow.on('close', function (e) {
e.preventDefault()
if (mainWindow.isFullScreen()) {
Expand All @@ -86,11 +88,17 @@ if (process.platform === 'darwin') {
}
})

app.on('before-quit', function (e) {
mainWindow.removeAllListeners()
})
mainWindow.webContents.send('tray:probe-close')
}

app.on('before-quit', function (e) {
mainWindow.removeAllListeners()
})

app.on('window-all-closed', function () {
app.quit()
})

mainWindow.on('resize', _.throttle(storeWindowSize, 500))
mainWindow.on('move', _.throttle(storeWindowSize, 500))

Expand All @@ -108,4 +116,60 @@ app.on('activate', function () {
mainWindow.show()
})

ipcMain.on('tray:update', handleTrayUpdate)

ipcMain.on('tray:quit', function (e, notes) {
ipcMain.removeListener('tray:update', handleTrayUpdate)
menu = null
app.quit()
})

function handleTrayUpdate (e, notes) {
updateTray(notes)
}

function updateTray (notes) {
const menu = new Menu()

menu.append(new MenuItem({
label: `Open ${product}`,
click: function () {
mainWindow.show()
}
}))

if (notes && notes.length) {
menu.append(new MenuItem({type: 'separator'}))
notes.forEach(note => {
menu.append(new MenuItem({
label: note.title,
click: function () {
mainWindow.webContents.send('list:jump', note.key)
mainWindow.show()
}
}))
})
menu.append(new MenuItem({type: 'separator'}))
}

menu.append(new MenuItem({
label: 'Quit',
click: function () {
app.quit()
}
}))

tray.setContextMenu(menu)

return menu
}

const tray = new Tray(path.join(__dirname, '../resources/tray-icon-dark@2x.png'))
menu = updateTray()
tray.setToolTip(product)
tray.on('click', function (e) {
e.preventDefault()
tray.popUpContextMenu(menu)
})

module.exports = mainWindow
1 change: 1 addition & 0 deletions tests/lib/boostnoterc/.boostnoterc.all
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"sortBy": "UPDATED_AT",
"sortTagsBy": "ALPHABETICAL",
"ui": {
"closeToTray": false,
"defaultNote": "ALWAYS_ASK",
"disableDirectWrite": false,
"theme": "default"
Expand Down