fix: allow Tray with title only (without icon) on Mac (#13851)

This commit is contained in:
Milan Burda 2018-08-30 11:16:56 +02:00 committed by Samuel Attard
parent 1b7418fb7b
commit 5a0770f1d3
2 changed files with 40 additions and 20 deletions

View file

@ -47,8 +47,7 @@ const CGFloat kVerticalTitleMargin = 2;
[super dealloc]; [super dealloc];
} }
- (id)initWithImage:(NSImage*)image icon:(atom::TrayIconCocoa*)icon { - (id)initWithIcon:(atom::TrayIconCocoa*)icon {
image_.reset([image copy]);
trayIcon_ = icon; trayIcon_ = icon;
menuController_ = nil; menuController_ = nil;
highlight_mode_ = atom::TrayIcon::HighlightMode::SELECTION; highlight_mode_ = atom::TrayIcon::HighlightMode::SELECTION;
@ -164,6 +163,8 @@ const CGFloat kVerticalTitleMargin = 2;
// The width of the icon. // The width of the icon.
- (CGFloat)iconWidth { - (CGFloat)iconWidth {
if (!image_ && title_)
return kHorizontalMargin;
CGFloat thickness = [[NSStatusBar systemStatusBar] thickness]; CGFloat thickness = [[NSStatusBar systemStatusBar] thickness];
CGFloat imageHeight = [image_ size].height; CGFloat imageHeight = [image_ size].height;
CGFloat imageWidth = [image_ size].width; CGFloat imageWidth = [image_ size].width;
@ -432,7 +433,9 @@ const CGFloat kVerticalTitleMargin = 2;
namespace atom { namespace atom {
TrayIconCocoa::TrayIconCocoa() {} TrayIconCocoa::TrayIconCocoa() {
status_item_view_.reset([[StatusItemView alloc] initWithIcon:this]);
}
TrayIconCocoa::~TrayIconCocoa() { TrayIconCocoa::~TrayIconCocoa() {
[status_item_view_ removeItem]; [status_item_view_ removeItem];
@ -441,12 +444,7 @@ TrayIconCocoa::~TrayIconCocoa() {
} }
void TrayIconCocoa::SetImage(const gfx::Image& image) { void TrayIconCocoa::SetImage(const gfx::Image& image) {
if (status_item_view_) { [status_item_view_ setImage:image.IsEmpty() ? nil : image.AsNSImage()];
[status_item_view_ setImage:image.AsNSImage()];
} else {
status_item_view_.reset(
[[StatusItemView alloc] initWithImage:image.AsNSImage() icon:this]);
}
} }
void TrayIconCocoa::SetPressedImage(const gfx::Image& image) { void TrayIconCocoa::SetPressedImage(const gfx::Image& image) {

View file

@ -2,18 +2,18 @@ const {remote} = require('electron')
const {Menu, Tray, nativeImage} = remote const {Menu, Tray, nativeImage} = remote
describe('tray module', () => { describe('tray module', () => {
let tray
beforeEach(() => {
tray = new Tray(nativeImage.createEmpty())
})
afterEach(() => {
tray.destroy()
tray = null
})
describe('tray.setContextMenu', () => { describe('tray.setContextMenu', () => {
let tray
beforeEach(() => {
tray = new Tray(nativeImage.createEmpty())
})
afterEach(() => {
tray.destroy()
tray = null
})
it('accepts menu instance', () => { it('accepts menu instance', () => {
tray.setContextMenu(new Menu()) tray.setContextMenu(new Menu())
}) })
@ -22,4 +22,26 @@ describe('tray module', () => {
tray.setContextMenu(null) tray.setContextMenu(null)
}) })
}) })
describe('tray.setImage', () => {
it('accepts empty image', () => {
tray.setImage(nativeImage.createEmpty())
})
})
describe('tray.setPressedImage', () => {
it('accepts empty image', () => {
tray.setPressedImage(nativeImage.createEmpty())
})
})
describe('tray.setTitle', () => {
it('accepts non-empty string', () => {
tray.setTitle('Hello World!')
})
it('accepts empty string', () => {
tray.setTitle('')
})
})
}) })