2016-11-14 17:24:48 -07:00
|
|
|
## Class: Tray
|
2014-06-01 21:47:22 -06:00
|
|
|
|
2016-04-21 16:39:12 -06:00
|
|
|
> Add icons and context menus to the system's notification area.
|
2014-06-01 21:47:22 -06:00
|
|
|
|
2016-11-23 12:20:56 -07:00
|
|
|
Process: [Main](../glossary.md#main-process)
|
2016-11-03 11:26:00 -06:00
|
|
|
|
2016-11-14 17:24:48 -07:00
|
|
|
`Tray` is an [EventEmitter][event-emitter].
|
|
|
|
|
2014-06-01 21:47:22 -06:00
|
|
|
```javascript
|
2016-06-21 01:13:50 -06:00
|
|
|
const {app, Menu, Tray} = require('electron')
|
2014-06-01 21:47:22 -06:00
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
let tray = null
|
2016-05-04 11:59:02 -06:00
|
|
|
app.on('ready', () => {
|
2016-06-21 01:20:33 -06:00
|
|
|
tray = new Tray('/path/to/my/icon')
|
2016-05-04 11:59:02 -06:00
|
|
|
const contextMenu = Menu.buildFromTemplate([
|
2016-05-10 11:15:09 -06:00
|
|
|
{label: 'Item1', type: 'radio'},
|
|
|
|
{label: 'Item2', type: 'radio'},
|
|
|
|
{label: 'Item3', type: 'radio', checked: true},
|
|
|
|
{label: 'Item4', type: 'radio'}
|
2016-07-25 19:39:25 -06:00
|
|
|
])
|
2016-06-21 01:20:33 -06:00
|
|
|
tray.setToolTip('This is my application.')
|
|
|
|
tray.setContextMenu(contextMenu)
|
2016-06-21 01:13:50 -06:00
|
|
|
})
|
2014-06-01 21:47:22 -06:00
|
|
|
```
|
|
|
|
|
|
|
|
__Platform limitations:__
|
|
|
|
|
2015-08-28 23:46:39 -06:00
|
|
|
* On Linux the app indicator will be used if it is supported, otherwise
|
2014-06-02 09:18:14 -06:00
|
|
|
`GtkStatusIcon` will be used instead.
|
2015-07-20 21:27:24 -06:00
|
|
|
* On Linux distributions that only have app indicator support, you have to
|
2015-08-28 23:46:39 -06:00
|
|
|
install `libappindicator1` to make the tray icon work.
|
|
|
|
* App indicator will only be shown when it has a context menu.
|
2015-11-13 01:41:33 -07:00
|
|
|
* When app indicator is used on Linux, the `click` event is ignored.
|
2016-02-16 08:10:05 -07:00
|
|
|
* On Linux in order for changes made to individual `MenuItem`s to take effect,
|
|
|
|
you have to call `setContextMenu` again. For example:
|
2016-02-16 07:24:05 -07:00
|
|
|
|
|
|
|
```javascript
|
2016-11-15 13:53:54 -07:00
|
|
|
const {app, Menu, Tray} = require('electron')
|
|
|
|
|
|
|
|
let appIcon = null
|
|
|
|
app.on('ready', () => {
|
|
|
|
appIcon = new Tray('/path/to/my/icon')
|
|
|
|
const contextMenu = Menu.buildFromTemplate([
|
|
|
|
{label: 'Item1', type: 'radio'},
|
|
|
|
{label: 'Item2', type: 'radio'}
|
|
|
|
])
|
|
|
|
|
|
|
|
// Make a change to the context menu
|
|
|
|
contextMenu.items[1].checked = false
|
|
|
|
|
|
|
|
// Call this again for Linux because we modified the context menu
|
|
|
|
appIcon.setContextMenu(contextMenu)
|
|
|
|
})
|
2016-02-16 07:24:05 -07:00
|
|
|
```
|
2016-06-07 16:40:07 -06:00
|
|
|
* On Windows it is recommended to use `ICO` icons to get best visual effects.
|
2014-06-02 09:18:14 -06:00
|
|
|
|
2015-08-28 23:46:39 -06:00
|
|
|
If you want to keep exact same behaviors on all platforms, you should not
|
2015-11-13 01:41:33 -07:00
|
|
|
rely on the `click` event and always attach a context menu to the tray icon.
|
2014-06-01 21:47:22 -06:00
|
|
|
|
|
|
|
|
2015-08-28 23:46:39 -06:00
|
|
|
### `new Tray(image)`
|
2014-06-01 21:47:22 -06:00
|
|
|
|
2016-11-06 23:43:55 -07:00
|
|
|
* `image` ([NativeImage](native-image.md) | String)
|
2014-06-01 21:47:22 -06:00
|
|
|
|
|
|
|
Creates a new tray icon associated with the `image`.
|
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
### Instance Events
|
2015-08-28 23:46:39 -06:00
|
|
|
|
|
|
|
The `Tray` module emits the following events:
|
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### Event: 'click'
|
2014-06-01 21:47:22 -06:00
|
|
|
|
2015-07-29 00:27:32 -06:00
|
|
|
* `event` Event
|
|
|
|
* `altKey` Boolean
|
|
|
|
* `shiftKey` Boolean
|
|
|
|
* `ctrlKey` Boolean
|
2015-07-29 00:44:08 -06:00
|
|
|
* `metaKey` Boolean
|
2016-10-07 20:09:31 -06:00
|
|
|
* `bounds` [Rectangle](structures/rectangle.md) - The bounds of tray icon
|
2015-05-01 03:54:22 -06:00
|
|
|
|
2014-06-01 21:47:22 -06:00
|
|
|
Emitted when the tray icon is clicked.
|
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### Event: 'right-click' _macOS_ _Windows_
|
2015-07-15 06:13:59 -06:00
|
|
|
|
2015-07-29 00:27:32 -06:00
|
|
|
* `event` Event
|
|
|
|
* `altKey` Boolean
|
|
|
|
* `shiftKey` Boolean
|
|
|
|
* `ctrlKey` Boolean
|
2015-07-29 00:44:08 -06:00
|
|
|
* `metaKey` Boolean
|
2016-10-07 20:09:31 -06:00
|
|
|
* `bounds` [Rectangle](structures/rectangle.md) - The bounds of tray icon
|
2015-07-15 06:13:59 -06:00
|
|
|
|
|
|
|
Emitted when the tray icon is right clicked.
|
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### Event: 'double-click' _macOS_ _Windows_
|
2014-09-09 05:50:50 -06:00
|
|
|
|
2015-07-29 00:27:32 -06:00
|
|
|
* `event` Event
|
|
|
|
* `altKey` Boolean
|
|
|
|
* `shiftKey` Boolean
|
|
|
|
* `ctrlKey` Boolean
|
2015-07-29 00:44:08 -06:00
|
|
|
* `metaKey` Boolean
|
2016-10-07 20:09:31 -06:00
|
|
|
* `bounds` [Rectangle](structures/rectangle.md) - The bounds of tray icon
|
2015-07-28 21:28:20 -06:00
|
|
|
|
|
|
|
Emitted when the tray icon is double clicked.
|
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### Event: 'balloon-show' _Windows_
|
2014-11-28 04:47:21 -07:00
|
|
|
|
|
|
|
Emitted when the tray balloon shows.
|
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### Event: 'balloon-click' _Windows_
|
2014-11-28 04:23:13 -07:00
|
|
|
|
|
|
|
Emitted when the tray balloon is clicked.
|
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### Event: 'balloon-closed' _Windows_
|
2014-11-28 04:47:21 -07:00
|
|
|
|
|
|
|
Emitted when the tray balloon is closed because of timeout or user manually
|
|
|
|
closes it.
|
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### Event: 'drop' _macOS_
|
2015-11-10 09:14:55 -07:00
|
|
|
|
|
|
|
Emitted when any dragged items are dropped on the tray icon.
|
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### Event: 'drop-files' _macOS_
|
2015-07-18 22:12:28 -06:00
|
|
|
|
2016-06-20 17:51:31 -06:00
|
|
|
* `event` Event
|
2016-09-27 23:28:44 -06:00
|
|
|
* `files` String[] - The paths of the dropped files.
|
2015-07-18 22:12:28 -06:00
|
|
|
|
|
|
|
Emitted when dragged files are dropped in the tray icon.
|
|
|
|
|
2016-07-14 11:21:39 -06:00
|
|
|
#### Event: 'drop-text' _macOS_
|
|
|
|
|
|
|
|
* `event` Event
|
|
|
|
* `text` String - the dropped text string
|
|
|
|
|
|
|
|
Emitted when dragged text is dropped in the tray icon.
|
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### Event: 'drag-enter' _macOS_
|
2015-11-05 17:49:34 -07:00
|
|
|
|
|
|
|
Emitted when a drag operation enters the tray icon.
|
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### Event: 'drag-leave' _macOS_
|
2015-11-05 17:49:34 -07:00
|
|
|
|
|
|
|
Emitted when a drag operation exits the tray icon.
|
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### Event: 'drag-end' _macOS_
|
2015-11-10 09:14:55 -07:00
|
|
|
|
|
|
|
Emitted when a drag operation ends on the tray or ends at another location.
|
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
### Instance Methods
|
2015-08-28 23:46:39 -06:00
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
The `Tray` class has the following methods:
|
2015-07-18 22:12:28 -06:00
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### `tray.destroy()`
|
2014-11-28 03:06:51 -07:00
|
|
|
|
|
|
|
Destroys the tray icon immediately.
|
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### `tray.setImage(image)`
|
2014-06-01 21:47:22 -06:00
|
|
|
|
2016-11-25 05:17:31 -07:00
|
|
|
* `image` ([NativeImage](native-image.md) | String)
|
2014-06-01 21:47:22 -06:00
|
|
|
|
|
|
|
Sets the `image` associated with this tray icon.
|
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### `tray.setPressedImage(image)` _macOS_
|
2014-06-01 21:47:22 -06:00
|
|
|
|
2015-02-11 22:52:28 -07:00
|
|
|
* `image` [NativeImage](native-image.md)
|
2014-06-01 21:47:22 -06:00
|
|
|
|
2016-06-18 07:26:26 -06:00
|
|
|
Sets the `image` associated with this tray icon when pressed on macOS.
|
2014-06-01 21:47:22 -06:00
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### `tray.setToolTip(toolTip)`
|
2014-06-01 21:47:22 -06:00
|
|
|
|
|
|
|
* `toolTip` String
|
|
|
|
|
2014-09-09 05:50:50 -06:00
|
|
|
Sets the hover text for this tray icon.
|
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### `tray.setTitle(title)` _macOS_
|
2014-09-09 05:50:50 -06:00
|
|
|
|
|
|
|
* `title` String
|
|
|
|
|
|
|
|
Sets the title displayed aside of the tray icon in the status bar.
|
|
|
|
|
2016-07-26 14:59:19 -06:00
|
|
|
#### `tray.setHighlightMode(mode)` _macOS_
|
2014-09-09 05:50:50 -06:00
|
|
|
|
2016-08-25 18:26:57 -06:00
|
|
|
* `mode` String - Highlight mode with one of the following values:
|
2016-08-25 15:43:06 -06:00
|
|
|
* `selection` - Highlight the tray icon when it is clicked and also when
|
2016-07-26 14:59:19 -06:00
|
|
|
its context menu is open. This is the default.
|
2016-08-25 15:43:06 -06:00
|
|
|
* `always` - Always highlight the tray icon.
|
|
|
|
* `never` - Never highlight the tray icon.
|
2014-09-09 05:50:50 -06:00
|
|
|
|
2016-07-26 14:59:19 -06:00
|
|
|
Sets when the tray's icon background becomes highlighted (in blue).
|
2014-09-09 05:50:50 -06:00
|
|
|
|
2016-07-27 14:35:13 -06:00
|
|
|
**Note:** You can use `highlightMode` with a [`BrowserWindow`](browser-window.md)
|
|
|
|
by toggling between `'never'` and `'always'` modes when the window visibility
|
|
|
|
changes.
|
|
|
|
|
2016-08-16 15:50:21 -06:00
|
|
|
```javascript
|
2016-07-27 16:23:26 -06:00
|
|
|
const {BrowserWindow, Tray} = require('electron')
|
|
|
|
|
|
|
|
const win = new BrowserWindow({width: 800, height: 600})
|
|
|
|
const tray = new Tray('/path/to/my/icon')
|
2016-07-27 16:56:00 -06:00
|
|
|
|
|
|
|
tray.on('click', () => {
|
|
|
|
win.isVisible() ? win.hide() : win.show()
|
|
|
|
})
|
2016-07-27 14:35:13 -06:00
|
|
|
win.on('show', () => {
|
|
|
|
tray.setHighlightMode('always')
|
|
|
|
})
|
|
|
|
win.on('hide', () => {
|
|
|
|
tray.setHighlightMode('never')
|
|
|
|
})
|
|
|
|
```
|
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### `tray.displayBalloon(options)` _Windows_
|
2014-11-28 04:23:13 -07:00
|
|
|
|
|
|
|
* `options` Object
|
2016-11-25 05:17:31 -07:00
|
|
|
* `icon` ([NativeImage](native-image.md) | String) - (optional)
|
|
|
|
* `title` String - (optional)
|
|
|
|
* `content` String - (optional)
|
2014-11-28 04:23:13 -07:00
|
|
|
|
2015-05-03 21:23:09 -06:00
|
|
|
Displays a tray balloon.
|
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### `tray.popUpContextMenu([menu, position])` _macOS_ _Windows_
|
2015-05-03 21:23:09 -06:00
|
|
|
|
2015-12-02 03:43:11 -07:00
|
|
|
* `menu` Menu (optional)
|
|
|
|
* `position` Object (optional) - The pop up position.
|
2015-07-15 21:53:13 -06:00
|
|
|
* `x` Integer
|
|
|
|
* `y` Integer
|
|
|
|
|
2016-06-17 09:45:12 -06:00
|
|
|
Pops up the context menu of the tray icon. When `menu` is passed, the `menu` will
|
|
|
|
be shown instead of the tray icon's context menu.
|
2015-12-02 03:43:11 -07:00
|
|
|
|
2015-07-15 21:53:13 -06:00
|
|
|
The `position` is only available on Windows, and it is (0, 0) by default.
|
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### `tray.setContextMenu(menu)`
|
2014-06-01 21:47:22 -06:00
|
|
|
|
|
|
|
* `menu` Menu
|
|
|
|
|
2015-05-03 21:23:09 -06:00
|
|
|
Sets the context menu for this icon.
|
2014-09-09 05:50:50 -06:00
|
|
|
|
2016-06-21 01:20:33 -06:00
|
|
|
#### `tray.getBounds()` _macOS_ _Windows_
|
2016-06-21 01:13:50 -06:00
|
|
|
|
2016-10-07 20:09:31 -06:00
|
|
|
Returns [`Rectangle`](structures/rectangle.md)
|
2016-06-21 01:13:50 -06:00
|
|
|
|
2016-09-24 17:59:30 -06:00
|
|
|
The `bounds` of this tray icon as `Object`.
|
2016-06-21 01:13:50 -06:00
|
|
|
|
2016-10-06 03:30:34 -06:00
|
|
|
#### `tray.isDestroyed()`
|
|
|
|
|
|
|
|
Returns `Boolean` - Whether the tray icon is destroyed.
|
|
|
|
|
2016-10-13 15:09:14 -06:00
|
|
|
[event-emitter]: https://nodejs.org/api/events.html#events_class_eventemitter
|