From 4330d67e0d82041a29cbf9c53f95213b0bd427ba Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 9 Sep 2014 19:33:58 +0800 Subject: [PATCH 1/4] mac: Add Tray.setTitle API, fixes #560. --- atom/browser/api/atom_api_tray.cc | 5 +++++ atom/browser/api/atom_api_tray.h | 1 + atom/browser/ui/tray_icon.cc | 3 +++ atom/browser/ui/tray_icon.h | 4 ++++ atom/browser/ui/tray_icon_cocoa.h | 1 + atom/browser/ui/tray_icon_cocoa.mm | 4 ++++ 6 files changed, 18 insertions(+) diff --git a/atom/browser/api/atom_api_tray.cc b/atom/browser/api/atom_api_tray.cc index 86e6cb299532..19ac64d61831 100644 --- a/atom/browser/api/atom_api_tray.cc +++ b/atom/browser/api/atom_api_tray.cc @@ -48,6 +48,10 @@ void Tray::SetToolTip(const std::string& tool_tip) { tray_icon_->SetToolTip(tool_tip); } +void Tray::SetTitle(const std::string& title) { + tray_icon_->SetTitle(title); +} + void Tray::SetContextMenu(Menu* menu) { tray_icon_->SetContextMenu(menu->model()); } @@ -59,6 +63,7 @@ void Tray::BuildPrototype(v8::Isolate* isolate, .SetMethod("setImage", &Tray::SetImage) .SetMethod("setPressedImage", &Tray::SetPressedImage) .SetMethod("setToolTip", &Tray::SetToolTip) + .SetMethod("setTitle", &Tray::SetTitle) .SetMethod("_setContextMenu", &Tray::SetContextMenu); } diff --git a/atom/browser/api/atom_api_tray.h b/atom/browser/api/atom_api_tray.h index 5dce0cbe9546..c50293219dfe 100644 --- a/atom/browser/api/atom_api_tray.h +++ b/atom/browser/api/atom_api_tray.h @@ -41,6 +41,7 @@ class Tray : public mate::EventEmitter, void SetImage(const gfx::ImageSkia& image); void SetPressedImage(const gfx::ImageSkia& image); void SetToolTip(const std::string& tool_tip); + void SetTitle(const std::string& title); void SetContextMenu(Menu* menu); private: diff --git a/atom/browser/ui/tray_icon.cc b/atom/browser/ui/tray_icon.cc index fdbdf7a5395c..facd3e111a5d 100644 --- a/atom/browser/ui/tray_icon.cc +++ b/atom/browser/ui/tray_icon.cc @@ -12,6 +12,9 @@ TrayIcon::TrayIcon() { TrayIcon::~TrayIcon() { } +void TrayIcon::SetTitle(const std::string& title) { +} + void TrayIcon::NotifyClicked() { FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnClicked()); } diff --git a/atom/browser/ui/tray_icon.h b/atom/browser/ui/tray_icon.h index 80de248810bb..46e609a20429 100644 --- a/atom/browser/ui/tray_icon.h +++ b/atom/browser/ui/tray_icon.h @@ -31,6 +31,10 @@ class TrayIcon { // status icon (e.g. Ubuntu Unity). virtual void SetToolTip(const std::string& tool_tip) = 0; + // Sets the title displayed aside of the status icon in the status bar. This + // only works on OS X. + virtual void SetTitle(const std::string& title); + // Set the context menu for this icon. virtual void SetContextMenu(ui::SimpleMenuModel* menu_model) = 0; diff --git a/atom/browser/ui/tray_icon_cocoa.h b/atom/browser/ui/tray_icon_cocoa.h index b6a710ce1272..5c67b8ef60a3 100644 --- a/atom/browser/ui/tray_icon_cocoa.h +++ b/atom/browser/ui/tray_icon_cocoa.h @@ -25,6 +25,7 @@ class TrayIconCocoa : public TrayIcon { virtual void SetImage(const gfx::ImageSkia& image) OVERRIDE; virtual void SetPressedImage(const gfx::ImageSkia& image) OVERRIDE; virtual void SetToolTip(const std::string& tool_tip) OVERRIDE; + virtual void SetTitle(const std::string& title) OVERRIDE; virtual void SetContextMenu(ui::SimpleMenuModel* menu_model) OVERRIDE; private: diff --git a/atom/browser/ui/tray_icon_cocoa.mm b/atom/browser/ui/tray_icon_cocoa.mm index ef456897e91f..c4867e925529 100644 --- a/atom/browser/ui/tray_icon_cocoa.mm +++ b/atom/browser/ui/tray_icon_cocoa.mm @@ -68,6 +68,10 @@ void TrayIconCocoa::SetToolTip(const std::string& tool_tip) { [item_ setToolTip:base::SysUTF8ToNSString(tool_tip)]; } +void TrayIconCocoa::SetTitle(const std::string& title) { + [item_ setTitle:base::SysUTF8ToNSString(title)]; +} + void TrayIconCocoa::SetContextMenu(ui::SimpleMenuModel* menu_model) { menu_.reset([[AtomMenuController alloc] initWithModel:menu_model]); [item_ setMenu:[menu_ menu]]; From ec1db0c7bb5c711f12cb927c1b12859fc44f53a2 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 9 Sep 2014 19:39:39 +0800 Subject: [PATCH 2/4] mac: Add Tray.setHighlightMode API, fixes #425. --- atom/browser/api/atom_api_tray.cc | 5 +++++ atom/browser/api/atom_api_tray.h | 1 + atom/browser/ui/tray_icon.cc | 3 +++ atom/browser/ui/tray_icon.h | 4 ++++ atom/browser/ui/tray_icon_cocoa.h | 1 + atom/browser/ui/tray_icon_cocoa.mm | 4 ++++ 6 files changed, 18 insertions(+) diff --git a/atom/browser/api/atom_api_tray.cc b/atom/browser/api/atom_api_tray.cc index 19ac64d61831..cd95d423d829 100644 --- a/atom/browser/api/atom_api_tray.cc +++ b/atom/browser/api/atom_api_tray.cc @@ -52,6 +52,10 @@ void Tray::SetTitle(const std::string& title) { tray_icon_->SetTitle(title); } +void Tray::SetHighlightMode(bool highlight) { + tray_icon_->SetHighlightMode(highlight); +} + void Tray::SetContextMenu(Menu* menu) { tray_icon_->SetContextMenu(menu->model()); } @@ -64,6 +68,7 @@ void Tray::BuildPrototype(v8::Isolate* isolate, .SetMethod("setPressedImage", &Tray::SetPressedImage) .SetMethod("setToolTip", &Tray::SetToolTip) .SetMethod("setTitle", &Tray::SetTitle) + .SetMethod("setHighlightMode", &Tray::SetHighlightMode) .SetMethod("_setContextMenu", &Tray::SetContextMenu); } diff --git a/atom/browser/api/atom_api_tray.h b/atom/browser/api/atom_api_tray.h index c50293219dfe..791cc5611ba7 100644 --- a/atom/browser/api/atom_api_tray.h +++ b/atom/browser/api/atom_api_tray.h @@ -42,6 +42,7 @@ class Tray : public mate::EventEmitter, void SetPressedImage(const gfx::ImageSkia& image); void SetToolTip(const std::string& tool_tip); void SetTitle(const std::string& title); + void SetHighlightMode(bool highlight); void SetContextMenu(Menu* menu); private: diff --git a/atom/browser/ui/tray_icon.cc b/atom/browser/ui/tray_icon.cc index facd3e111a5d..3f291025a413 100644 --- a/atom/browser/ui/tray_icon.cc +++ b/atom/browser/ui/tray_icon.cc @@ -15,6 +15,9 @@ TrayIcon::~TrayIcon() { void TrayIcon::SetTitle(const std::string& title) { } +void TrayIcon::SetHighlightMode(bool highlight) { +} + void TrayIcon::NotifyClicked() { FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnClicked()); } diff --git a/atom/browser/ui/tray_icon.h b/atom/browser/ui/tray_icon.h index 46e609a20429..7eaef16d7b9e 100644 --- a/atom/browser/ui/tray_icon.h +++ b/atom/browser/ui/tray_icon.h @@ -35,6 +35,10 @@ class TrayIcon { // only works on OS X. virtual void SetTitle(const std::string& title); + // Sets whether the status icon is highlighted when it is clicked. This only + // works on OS X. + virtual void SetHighlightMode(bool highlight); + // Set the context menu for this icon. virtual void SetContextMenu(ui::SimpleMenuModel* menu_model) = 0; diff --git a/atom/browser/ui/tray_icon_cocoa.h b/atom/browser/ui/tray_icon_cocoa.h index 5c67b8ef60a3..1ce50a36d452 100644 --- a/atom/browser/ui/tray_icon_cocoa.h +++ b/atom/browser/ui/tray_icon_cocoa.h @@ -26,6 +26,7 @@ class TrayIconCocoa : public TrayIcon { virtual void SetPressedImage(const gfx::ImageSkia& image) OVERRIDE; virtual void SetToolTip(const std::string& tool_tip) OVERRIDE; virtual void SetTitle(const std::string& title) OVERRIDE; + virtual void SetHighlightMode(bool highlight) OVERRIDE; virtual void SetContextMenu(ui::SimpleMenuModel* menu_model) OVERRIDE; private: diff --git a/atom/browser/ui/tray_icon_cocoa.mm b/atom/browser/ui/tray_icon_cocoa.mm index c4867e925529..4fb1372c0486 100644 --- a/atom/browser/ui/tray_icon_cocoa.mm +++ b/atom/browser/ui/tray_icon_cocoa.mm @@ -72,6 +72,10 @@ void TrayIconCocoa::SetTitle(const std::string& title) { [item_ setTitle:base::SysUTF8ToNSString(title)]; } +void TrayIconCocoa::SetHighlightMode(bool highlight) { + [item_ setHighlightMode:highlight]; +} + void TrayIconCocoa::SetContextMenu(ui::SimpleMenuModel* menu_model) { menu_.reset([[AtomMenuController alloc] initWithModel:menu_model]); [item_ setMenu:[menu_ menu]]; From 67cbecaba0347757e06c0a926842d7bb19287087 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 9 Sep 2014 19:45:21 +0800 Subject: [PATCH 3/4] mac: Add "double-clicked" event for Tray. --- atom/browser/api/atom_api_tray.cc | 4 ++++ atom/browser/api/atom_api_tray.h | 1 + atom/browser/ui/tray_icon.cc | 4 ++++ atom/browser/ui/tray_icon.h | 1 + atom/browser/ui/tray_icon_cocoa.mm | 7 ++++++- atom/browser/ui/tray_icon_observer.h | 1 + 6 files changed, 17 insertions(+), 1 deletion(-) diff --git a/atom/browser/api/atom_api_tray.cc b/atom/browser/api/atom_api_tray.cc index cd95d423d829..5dba76dacb75 100644 --- a/atom/browser/api/atom_api_tray.cc +++ b/atom/browser/api/atom_api_tray.cc @@ -36,6 +36,10 @@ void Tray::OnClicked() { Emit("clicked"); } +void Tray::OnDoubleClicked() { + Emit("double-clicked"); +} + void Tray::SetImage(const gfx::ImageSkia& image) { tray_icon_->SetImage(image); } diff --git a/atom/browser/api/atom_api_tray.h b/atom/browser/api/atom_api_tray.h index 791cc5611ba7..1630ba7cfd95 100644 --- a/atom/browser/api/atom_api_tray.h +++ b/atom/browser/api/atom_api_tray.h @@ -37,6 +37,7 @@ class Tray : public mate::EventEmitter, // TrayIcon implementations: virtual void OnClicked() OVERRIDE; + virtual void OnDoubleClicked() OVERRIDE; void SetImage(const gfx::ImageSkia& image); void SetPressedImage(const gfx::ImageSkia& image); diff --git a/atom/browser/ui/tray_icon.cc b/atom/browser/ui/tray_icon.cc index 3f291025a413..95460fb64eec 100644 --- a/atom/browser/ui/tray_icon.cc +++ b/atom/browser/ui/tray_icon.cc @@ -22,4 +22,8 @@ void TrayIcon::NotifyClicked() { FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnClicked()); } +void TrayIcon::NotifyDoubleClicked() { + FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnDoubleClicked()); +} + } // namespace atom diff --git a/atom/browser/ui/tray_icon.h b/atom/browser/ui/tray_icon.h index 7eaef16d7b9e..e2de226836df 100644 --- a/atom/browser/ui/tray_icon.h +++ b/atom/browser/ui/tray_icon.h @@ -45,6 +45,7 @@ class TrayIcon { void AddObserver(TrayIconObserver* obs) { observers_.AddObserver(obs); } void RemoveObserver(TrayIconObserver* obs) { observers_.RemoveObserver(obs); } void NotifyClicked(); + void NotifyDoubleClicked(); protected: TrayIcon(); diff --git a/atom/browser/ui/tray_icon_cocoa.mm b/atom/browser/ui/tray_icon_cocoa.mm index 4fb1372c0486..a7b322fe3fb6 100644 --- a/atom/browser/ui/tray_icon_cocoa.mm +++ b/atom/browser/ui/tray_icon_cocoa.mm @@ -13,6 +13,7 @@ } - (id)initWithIcon:(atom::TrayIconCocoa*)icon; - (void)handleClick:(id)sender; +- (void)handleDoubleClick:(id)sender; @end // @interface StatusItemController @@ -24,10 +25,13 @@ } - (void)handleClick:(id)sender { - DCHECK(trayIcon_); trayIcon_->NotifyClicked(); } +- (void)handleDoubleClick:(id)sender { + trayIcon_->NotifyDoubleClicked(); +} + @end namespace atom { @@ -40,6 +44,7 @@ TrayIconCocoa::TrayIconCocoa() { [item_ setEnabled:YES]; [item_ setTarget:controller_]; [item_ setAction:@selector(handleClick:)]; + [item_ setDoubleAction:@selector(handleDoubleClick:)]; [item_ setHighlightMode:YES]; } diff --git a/atom/browser/ui/tray_icon_observer.h b/atom/browser/ui/tray_icon_observer.h index f28bfd6cc9a8..5a4fc3a004e0 100644 --- a/atom/browser/ui/tray_icon_observer.h +++ b/atom/browser/ui/tray_icon_observer.h @@ -10,6 +10,7 @@ namespace atom { class TrayIconObserver { public: virtual void OnClicked() {} + virtual void OnDoubleClicked() {} protected: virtual ~TrayIconObserver() {} From c8a8576970749b24de26c8fbc5deac1cef6b2b1f Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 9 Sep 2014 19:50:50 +0800 Subject: [PATCH 4/4] docs: Document the new Tray APIs. --- docs/api/tray.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docs/api/tray.md b/docs/api/tray.md index c72963e26c32..7d6ebc96713a 100644 --- a/docs/api/tray.md +++ b/docs/api/tray.md @@ -48,6 +48,12 @@ Creates a new tray icon associated with the `image`. Emitted when the tray icon is clicked. +### Event: 'double-clicked' + +Emitted when the tray icon is double clicked. + +This is only implmented on OS X. + ### Tray.setImage(image) * `image` [Image](image.md) @@ -64,8 +70,28 @@ Sets the `image` associated with this tray icon when pressed. * `toolTip` String +Sets the hover text for this tray icon. + +### Tray.setTitle(title) + +* `title` String + +Sets the title displayed aside of the tray icon in the status bar. + +This is only implmented on OS X. + +### Tray.setHighlightMode(highlight) + +* `highlight` String + +Sets whether the tray icon is highlighted when it is clicked. + +This is only implmented on OS X. + ### Tray.setContextMenu(menu) * `menu` Menu +Set the context menu for this icon. + [event-emitter]: http://nodejs.org/api/events.html#events_class_events_eventemitter