From a8b4e5faec8f98b03a4b267ace5df80513d9a858 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 28 Nov 2014 18:18:12 +0800 Subject: [PATCH 01/10] OVERRIDE => override in notify_icon.h --- atom/browser/ui/win/notify_icon.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/atom/browser/ui/win/notify_icon.h b/atom/browser/ui/win/notify_icon.h index d52ce8305..5f55c57b5 100644 --- a/atom/browser/ui/win/notify_icon.h +++ b/atom/browser/ui/win/notify_icon.h @@ -43,10 +43,10 @@ class NotifyIcon : public TrayIcon { UINT message_id() const { return message_id_; } // Overridden from 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 SetContextMenu(ui::SimpleMenuModel* menu_model) OVERRIDE; + void SetImage(const gfx::ImageSkia& image) override; + void SetPressedImage(const gfx::ImageSkia& image) override; + void SetToolTip(const std::string& tool_tip) override; + void SetContextMenu(ui::SimpleMenuModel* menu_model) override; private: void InitIconData(NOTIFYICONDATA* icon_data); From 9f0b5a14a4401dae5a531590b5812d1af3de2be1 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 28 Nov 2014 18:21:31 +0800 Subject: [PATCH 02/10] Remove tray_icon_win.h --- atom/browser/ui/tray_icon_win.h | 30 ------------------------------ 1 file changed, 30 deletions(-) delete mode 100644 atom/browser/ui/tray_icon_win.h diff --git a/atom/browser/ui/tray_icon_win.h b/atom/browser/ui/tray_icon_win.h deleted file mode 100644 index 61bd6b6de..000000000 --- a/atom/browser/ui/tray_icon_win.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) 2014 GitHub, Inc. -// Use of this source code is governed by the MIT license that can be -// found in the LICENSE file. - -#ifndef ATOM_BROWSER_UI_TRAY_ICON_WIN_H_ -#define ATOM_BROWSER_UI_TRAY_ICON_WIN_H_ - -#include - -#include "atom/browser/ui/tray_icon.h" - -namespace atom { - -class TrayIconWin : public TrayIcon { - public: - TrayIconWin(); - virtual ~TrayIconWin(); - - 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 SetContextMenu(ui::SimpleMenuModel* menu_model) OVERRIDE; - - private: - DISALLOW_COPY_AND_ASSIGN(TrayIconWin); -}; - -} // namespace atom - -#endif // ATOM_BROWSER_UI_TRAY_ICON_WIN_H_ From 2650e34867ab61e73d50ef4593ee1174a4037055 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 28 Nov 2014 18:30:43 +0800 Subject: [PATCH 03/10] win: Add NotifyIcon::DisplayBalloon --- atom/browser/ui/tray_icon.cc | 5 +++++ atom/browser/ui/tray_icon.h | 6 ++++++ atom/browser/ui/win/notify_icon.cc | 29 +++++++++++++++++++++++++++++ atom/browser/ui/win/notify_icon.h | 6 ++++++ 4 files changed, 46 insertions(+) diff --git a/atom/browser/ui/tray_icon.cc b/atom/browser/ui/tray_icon.cc index de9a16143..538f259db 100644 --- a/atom/browser/ui/tray_icon.cc +++ b/atom/browser/ui/tray_icon.cc @@ -18,6 +18,11 @@ void TrayIcon::SetTitle(const std::string& title) { void TrayIcon::SetHighlightMode(bool highlight) { } +void TrayIcon::DisplayBalloon(const gfx::ImageSkia& icon, + const base::string16& title, + const base::string16& contents) { +} + 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 8fe3160ee..0aa28ad07 100644 --- a/atom/browser/ui/tray_icon.h +++ b/atom/browser/ui/tray_icon.h @@ -39,6 +39,12 @@ class TrayIcon { // works on OS X. virtual void SetHighlightMode(bool highlight); + // Displays a notification balloon with the specified contents. + // Depending on the platform it might not appear by the icon tray. + virtual void DisplayBalloon(const gfx::ImageSkia& icon, + const base::string16& title, + const base::string16& contents); + // Set the context menu for this icon. virtual void SetContextMenu(ui::SimpleMenuModel* menu_model) = 0; diff --git a/atom/browser/ui/win/notify_icon.cc b/atom/browser/ui/win/notify_icon.cc index 7be52db42..dc2277368 100644 --- a/atom/browser/ui/win/notify_icon.cc +++ b/atom/browser/ui/win/notify_icon.cc @@ -118,6 +118,35 @@ void NotifyIcon::SetToolTip(const std::string& tool_tip) { LOG(WARNING) << "Unable to set tooltip for status tray icon"; } +void NotifyIcon::DisplayBalloon(const gfx::ImageSkia& icon, + const base::string16& title, + const base::string16& contents) { + NOTIFYICONDATA icon_data; + InitIconData(&icon_data); + icon_data.uFlags = NIF_INFO; + icon_data.dwInfoFlags = NIIF_INFO; + wcscpy_s(icon_data.szInfoTitle, title.c_str()); + wcscpy_s(icon_data.szInfo, contents.c_str()); + icon_data.uTimeout = 0; + + base::win::Version win_version = base::win::GetVersion(); + if (!icon.isNull() && win_version != base::win::VERSION_PRE_XP) { + balloon_icon_.Set(IconUtil::CreateHICONFromSkBitmap(*icon.bitmap())); + if (win_version >= base::win::VERSION_VISTA) { + icon_data.hBalloonIcon = balloon_icon_.Get(); + icon_data.dwInfoFlags = NIIF_USER | NIIF_LARGE_ICON; + } else { + icon_data.hIcon = balloon_icon_.Get(); + icon_data.uFlags |= NIF_ICON; + icon_data.dwInfoFlags = NIIF_USER; + } + } + + BOOL result = Shell_NotifyIcon(NIM_MODIFY, &icon_data); + if (!result) + LOG(WARNING) << "Unable to create status tray balloon."; +} + void NotifyIcon::SetContextMenu(ui::SimpleMenuModel* menu_model) { menu_model_ = menu_model; } diff --git a/atom/browser/ui/win/notify_icon.h b/atom/browser/ui/win/notify_icon.h index 5f55c57b5..2ac309d5d 100644 --- a/atom/browser/ui/win/notify_icon.h +++ b/atom/browser/ui/win/notify_icon.h @@ -46,6 +46,9 @@ class NotifyIcon : public TrayIcon { void SetImage(const gfx::ImageSkia& image) override; void SetPressedImage(const gfx::ImageSkia& image) override; void SetToolTip(const std::string& tool_tip) override; + void DisplayBalloon(const gfx::ImageSkia& icon, + const base::string16& title, + const base::string16& contents) override; void SetContextMenu(ui::SimpleMenuModel* menu_model) override; private: @@ -66,6 +69,9 @@ class NotifyIcon : public TrayIcon { // The currently-displayed icon for the window. base::win::ScopedHICON icon_; + // The currently-displayed icon for the notification balloon. + base::win::ScopedHICON balloon_icon_; + // The context menu. ui::SimpleMenuModel* menu_model_; From 8097cb2b9e544b06df84e8434934f6bed030c3bc Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 28 Nov 2014 18:39:30 +0800 Subject: [PATCH 04/10] Add Tray.displayBallon API --- atom/browser/api/atom_api_tray.cc | 19 +++++++++++++++++++ atom/browser/api/atom_api_tray.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/atom/browser/api/atom_api_tray.cc b/atom/browser/api/atom_api_tray.cc index 35d89de74..2e2bc0ac1 100644 --- a/atom/browser/api/atom_api_tray.cc +++ b/atom/browser/api/atom_api_tray.cc @@ -9,6 +9,7 @@ #include "atom/browser/api/atom_api_menu.h" #include "atom/browser/ui/tray_icon.h" #include "atom/common/native_mate_converters/image_converter.h" +#include "atom/common/native_mate_converters/string16_converter.h" #include "native_mate/constructor.h" #include "native_mate/dictionary.h" @@ -74,6 +75,23 @@ void Tray::SetHighlightMode(mate::Arguments* args, bool highlight) { tray_icon_->SetHighlightMode(highlight); } +void Tray::DisplayBalloon(mate::Arguments* args, + const mate::Dictionary& options) { + if (!CheckTrayLife(args)) + return; + + gfx::ImageSkia icon; + options.Get("icon", &icon); + base::string16 title, content; + if (!options.Get("title", &title) || + !options.Get("content", &content)) { + args->ThrowError("'title' and 'content' must be defined"); + return; + } + + tray_icon_->DisplayBalloon(icon, title, content); +} + void Tray::SetContextMenu(mate::Arguments* args, Menu* menu) { if (!CheckTrayLife(args)) return; @@ -99,6 +117,7 @@ void Tray::BuildPrototype(v8::Isolate* isolate, .SetMethod("setToolTip", &Tray::SetToolTip) .SetMethod("setTitle", &Tray::SetTitle) .SetMethod("setHighlightMode", &Tray::SetHighlightMode) + .SetMethod("displayBalloon", &Tray::DisplayBalloon) .SetMethod("_setContextMenu", &Tray::SetContextMenu); } diff --git a/atom/browser/api/atom_api_tray.h b/atom/browser/api/atom_api_tray.h index 13b0e0da3..7257f2acd 100644 --- a/atom/browser/api/atom_api_tray.h +++ b/atom/browser/api/atom_api_tray.h @@ -17,6 +17,7 @@ class ImageSkia; namespace mate { class Arguments; +class Dictionary; } namespace atom { @@ -49,6 +50,7 @@ class Tray : public mate::EventEmitter, void SetToolTip(mate::Arguments* args, const std::string& tool_tip); void SetTitle(mate::Arguments* args, const std::string& title); void SetHighlightMode(mate::Arguments* args, bool highlight); + void DisplayBalloon(mate::Arguments* args, const mate::Dictionary& options); void SetContextMenu(mate::Arguments* args, Menu* menu); private: From 210c97f9576a7f71189ad3ee8ad7711f45ed0f3f Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 28 Nov 2014 18:50:31 +0800 Subject: [PATCH 05/10] win: Add "balloon-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_observer.h | 1 + atom/browser/ui/win/notify_icon.cc | 4 ++++ atom/browser/ui/win/notify_icon.h | 3 +++ atom/browser/ui/win/notify_icon_host.cc | 4 ++++ 8 files changed, 22 insertions(+) diff --git a/atom/browser/api/atom_api_tray.cc b/atom/browser/api/atom_api_tray.cc index 2e2bc0ac1..81f837869 100644 --- a/atom/browser/api/atom_api_tray.cc +++ b/atom/browser/api/atom_api_tray.cc @@ -41,6 +41,10 @@ void Tray::OnDoubleClicked() { Emit("double-clicked"); } +void Tray::OnBalloonClicked() { + Emit("balloon-clicked"); +} + void Tray::Destroy() { tray_icon_.reset(); } diff --git a/atom/browser/api/atom_api_tray.h b/atom/browser/api/atom_api_tray.h index 7257f2acd..74b5b1ed7 100644 --- a/atom/browser/api/atom_api_tray.h +++ b/atom/browser/api/atom_api_tray.h @@ -43,6 +43,7 @@ class Tray : public mate::EventEmitter, // TrayIconObserver: void OnClicked() override; void OnDoubleClicked() override; + void OnBalloonClicked() override; void Destroy(); void SetImage(mate::Arguments* args, const gfx::ImageSkia& image); diff --git a/atom/browser/ui/tray_icon.cc b/atom/browser/ui/tray_icon.cc index 538f259db..32cb710ad 100644 --- a/atom/browser/ui/tray_icon.cc +++ b/atom/browser/ui/tray_icon.cc @@ -31,4 +31,8 @@ void TrayIcon::NotifyDoubleClicked() { FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnDoubleClicked()); } +void TrayIcon::NotifyBalloonClicked() { + FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnBalloonClicked()); +} + } // namespace atom diff --git a/atom/browser/ui/tray_icon.h b/atom/browser/ui/tray_icon.h index 0aa28ad07..cb0fdb9f3 100644 --- a/atom/browser/ui/tray_icon.h +++ b/atom/browser/ui/tray_icon.h @@ -52,6 +52,7 @@ class TrayIcon { void RemoveObserver(TrayIconObserver* obs) { observers_.RemoveObserver(obs); } void NotifyClicked(); void NotifyDoubleClicked(); + void NotifyBalloonClicked(); protected: TrayIcon(); diff --git a/atom/browser/ui/tray_icon_observer.h b/atom/browser/ui/tray_icon_observer.h index 51ef92e11..76a1a4663 100644 --- a/atom/browser/ui/tray_icon_observer.h +++ b/atom/browser/ui/tray_icon_observer.h @@ -11,6 +11,7 @@ class TrayIconObserver { public: virtual void OnClicked() {} virtual void OnDoubleClicked() {} + virtual void OnBalloonClicked() {} protected: virtual ~TrayIconObserver() {} diff --git a/atom/browser/ui/win/notify_icon.cc b/atom/browser/ui/win/notify_icon.cc index dc2277368..2d6fec064 100644 --- a/atom/browser/ui/win/notify_icon.cc +++ b/atom/browser/ui/win/notify_icon.cc @@ -71,6 +71,10 @@ void NotifyIcon::HandleClickEvent(const gfx::Point& cursor_pos, ui::MENU_SOURCE_MOUSE)); } +void NotifyIcon::HandleBalloonClickEvent() { + NotifyBalloonClicked(); +} + void NotifyIcon::ResetIcon() { NOTIFYICONDATA icon_data; InitIconData(&icon_data); diff --git a/atom/browser/ui/win/notify_icon.h b/atom/browser/ui/win/notify_icon.h index 2ac309d5d..37b0ee793 100644 --- a/atom/browser/ui/win/notify_icon.h +++ b/atom/browser/ui/win/notify_icon.h @@ -35,6 +35,9 @@ class NotifyIcon : public TrayIcon { // otherwise displays the context menu if there is one. void HandleClickEvent(const gfx::Point& cursor_pos, bool left_button_click); + // Handles a click on the balloon from the user. + void HandleBalloonClickEvent(); + // Re-creates the status tray icon now after the taskbar has been created. void ResetIcon(); diff --git a/atom/browser/ui/win/notify_icon_host.cc b/atom/browser/ui/win/notify_icon_host.cc index c9ef82a76..83ee6e485 100644 --- a/atom/browser/ui/win/notify_icon_host.cc +++ b/atom/browser/ui/win/notify_icon_host.cc @@ -132,6 +132,10 @@ LRESULT CALLBACK NotifyIconHost::WndProc(HWND hwnd, return TRUE; switch (lparam) { + case TB_INDETERMINATE: + win_icon->HandleBalloonClickEvent(); + return TRUE; + case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: case WM_CONTEXTMENU: From a3327ac53e3ade0f4f2857da52fe32d5bb70bb69 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 28 Nov 2014 18:59:51 +0800 Subject: [PATCH 06/10] win: Remove XP code in Tray --- atom/browser/ui/win/notify_icon.cc | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/atom/browser/ui/win/notify_icon.cc b/atom/browser/ui/win/notify_icon.cc index 2d6fec064..b541caf3c 100644 --- a/atom/browser/ui/win/notify_icon.cc +++ b/atom/browser/ui/win/notify_icon.cc @@ -136,14 +136,8 @@ void NotifyIcon::DisplayBalloon(const gfx::ImageSkia& icon, base::win::Version win_version = base::win::GetVersion(); if (!icon.isNull() && win_version != base::win::VERSION_PRE_XP) { balloon_icon_.Set(IconUtil::CreateHICONFromSkBitmap(*icon.bitmap())); - if (win_version >= base::win::VERSION_VISTA) { - icon_data.hBalloonIcon = balloon_icon_.Get(); - icon_data.dwInfoFlags = NIIF_USER | NIIF_LARGE_ICON; - } else { - icon_data.hIcon = balloon_icon_.Get(); - icon_data.uFlags |= NIF_ICON; - icon_data.dwInfoFlags = NIIF_USER; - } + icon_data.hBalloonIcon = balloon_icon_.Get(); + icon_data.dwInfoFlags = NIIF_USER | NIIF_LARGE_ICON; } BOOL result = Shell_NotifyIcon(NIM_MODIFY, &icon_data); @@ -156,14 +150,8 @@ void NotifyIcon::SetContextMenu(ui::SimpleMenuModel* menu_model) { } void NotifyIcon::InitIconData(NOTIFYICONDATA* icon_data) { - if (base::win::GetVersion() >= base::win::VERSION_VISTA) { - memset(icon_data, 0, sizeof(NOTIFYICONDATA)); - icon_data->cbSize = sizeof(NOTIFYICONDATA); - } else { - memset(icon_data, 0, NOTIFYICONDATA_V3_SIZE); - icon_data->cbSize = NOTIFYICONDATA_V3_SIZE; - } - + memset(icon_data, 0, sizeof(NOTIFYICONDATA)); + icon_data->cbSize = sizeof(NOTIFYICONDATA); icon_data->hWnd = window_; icon_data->uID = icon_id_; } From ee3fa67c489325038f033be94a3a5e941f4a70b4 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 28 Nov 2014 19:23:13 +0800 Subject: [PATCH 07/10] docs: Tray balloon --- docs/api/tray.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/api/tray.md b/docs/api/tray.md index 5175a1682..b760add30 100644 --- a/docs/api/tray.md +++ b/docs/api/tray.md @@ -52,7 +52,13 @@ Emitted when the tray icon is clicked. Emitted when the tray icon is double clicked. -This is only implmented on OS X. +This is only implemented on OS X. + +### Event: 'balloon-clicked' + +Emitted when the tray balloon is clicked. + +This is only implemented on Windows. ### Tray.destroy() @@ -92,6 +98,13 @@ Sets whether the tray icon is highlighted when it is clicked. This is only implmented on OS X. +### Tray.displayBalloon(options) + +* `options` Object + * `icon` [Image](image.md) + * `title` String + * `content` String + ### Tray.setContextMenu(menu) * `menu` Menu From 9f99209733b3874aa0d1becb83750fd00049a047 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 28 Nov 2014 19:42:57 +0800 Subject: [PATCH 08/10] win: Add "balloon-show" and "balloon-closed" events --- atom/browser/api/atom_api_tray.cc | 8 ++++++++ atom/browser/api/atom_api_tray.h | 2 ++ atom/browser/ui/tray_icon.cc | 8 ++++++++ atom/browser/ui/tray_icon.h | 2 ++ atom/browser/ui/tray_icon_observer.h | 2 ++ atom/browser/ui/win/notify_icon.cc | 4 ---- atom/browser/ui/win/notify_icon.h | 3 --- atom/browser/ui/win/notify_icon_host.cc | 10 +++++++++- 8 files changed, 31 insertions(+), 8 deletions(-) diff --git a/atom/browser/api/atom_api_tray.cc b/atom/browser/api/atom_api_tray.cc index 81f837869..dfb0d6e1d 100644 --- a/atom/browser/api/atom_api_tray.cc +++ b/atom/browser/api/atom_api_tray.cc @@ -41,10 +41,18 @@ void Tray::OnDoubleClicked() { Emit("double-clicked"); } +void Tray::OnBalloonShow() { + Emit("balloon-show"); +} + void Tray::OnBalloonClicked() { Emit("balloon-clicked"); } +void Tray::OnBalloonClosed() { + Emit("balloon-closed"); +} + void Tray::Destroy() { tray_icon_.reset(); } diff --git a/atom/browser/api/atom_api_tray.h b/atom/browser/api/atom_api_tray.h index 74b5b1ed7..87bc84a50 100644 --- a/atom/browser/api/atom_api_tray.h +++ b/atom/browser/api/atom_api_tray.h @@ -43,7 +43,9 @@ class Tray : public mate::EventEmitter, // TrayIconObserver: void OnClicked() override; void OnDoubleClicked() override; + void OnBalloonShow() override; void OnBalloonClicked() override; + void OnBalloonClosed() override; void Destroy(); void SetImage(mate::Arguments* args, const gfx::ImageSkia& image); diff --git a/atom/browser/ui/tray_icon.cc b/atom/browser/ui/tray_icon.cc index 32cb710ad..a59c0c7b8 100644 --- a/atom/browser/ui/tray_icon.cc +++ b/atom/browser/ui/tray_icon.cc @@ -31,8 +31,16 @@ void TrayIcon::NotifyDoubleClicked() { FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnDoubleClicked()); } +void TrayIcon::NotifyBalloonShow() { + FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnBalloonShow()); +} + void TrayIcon::NotifyBalloonClicked() { FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnBalloonClicked()); } +void TrayIcon::NotifyBalloonClosed() { + FOR_EACH_OBSERVER(TrayIconObserver, observers_, OnBalloonClosed()); +} + } // namespace atom diff --git a/atom/browser/ui/tray_icon.h b/atom/browser/ui/tray_icon.h index cb0fdb9f3..83ee98e75 100644 --- a/atom/browser/ui/tray_icon.h +++ b/atom/browser/ui/tray_icon.h @@ -52,7 +52,9 @@ class TrayIcon { void RemoveObserver(TrayIconObserver* obs) { observers_.RemoveObserver(obs); } void NotifyClicked(); void NotifyDoubleClicked(); + void NotifyBalloonShow(); void NotifyBalloonClicked(); + void NotifyBalloonClosed(); protected: TrayIcon(); diff --git a/atom/browser/ui/tray_icon_observer.h b/atom/browser/ui/tray_icon_observer.h index 76a1a4663..293e5371c 100644 --- a/atom/browser/ui/tray_icon_observer.h +++ b/atom/browser/ui/tray_icon_observer.h @@ -11,7 +11,9 @@ class TrayIconObserver { public: virtual void OnClicked() {} virtual void OnDoubleClicked() {} + virtual void OnBalloonShow() {} virtual void OnBalloonClicked() {} + virtual void OnBalloonClosed() {} protected: virtual ~TrayIconObserver() {} diff --git a/atom/browser/ui/win/notify_icon.cc b/atom/browser/ui/win/notify_icon.cc index b541caf3c..978429895 100644 --- a/atom/browser/ui/win/notify_icon.cc +++ b/atom/browser/ui/win/notify_icon.cc @@ -71,10 +71,6 @@ void NotifyIcon::HandleClickEvent(const gfx::Point& cursor_pos, ui::MENU_SOURCE_MOUSE)); } -void NotifyIcon::HandleBalloonClickEvent() { - NotifyBalloonClicked(); -} - void NotifyIcon::ResetIcon() { NOTIFYICONDATA icon_data; InitIconData(&icon_data); diff --git a/atom/browser/ui/win/notify_icon.h b/atom/browser/ui/win/notify_icon.h index 37b0ee793..2ac309d5d 100644 --- a/atom/browser/ui/win/notify_icon.h +++ b/atom/browser/ui/win/notify_icon.h @@ -35,9 +35,6 @@ class NotifyIcon : public TrayIcon { // otherwise displays the context menu if there is one. void HandleClickEvent(const gfx::Point& cursor_pos, bool left_button_click); - // Handles a click on the balloon from the user. - void HandleBalloonClickEvent(); - // Re-creates the status tray icon now after the taskbar has been created. void ResetIcon(); diff --git a/atom/browser/ui/win/notify_icon_host.cc b/atom/browser/ui/win/notify_icon_host.cc index 83ee6e485..14dcf6d6c 100644 --- a/atom/browser/ui/win/notify_icon_host.cc +++ b/atom/browser/ui/win/notify_icon_host.cc @@ -132,8 +132,16 @@ LRESULT CALLBACK NotifyIconHost::WndProc(HWND hwnd, return TRUE; switch (lparam) { + case TB_CHECKBUTTON: + win_icon->NotifyBalloonShow(); + return TRUE; + case TB_INDETERMINATE: - win_icon->HandleBalloonClickEvent(); + win_icon->NotifyBalloonClicked(); + return TRUE; + + case TB_HIDEBUTTON: + win_icon->NotifyBalloonClosed(); return TRUE; case WM_LBUTTONDOWN: From ef8b20af65a51efee86332d3ce7909118d2df6d6 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 28 Nov 2014 19:47:21 +0800 Subject: [PATCH 09/10] docs: "balloon-show" and "balloon-closed" events --- docs/api/tray.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/docs/api/tray.md b/docs/api/tray.md index b760add30..668776897 100644 --- a/docs/api/tray.md +++ b/docs/api/tray.md @@ -52,13 +52,26 @@ Emitted when the tray icon is clicked. Emitted when the tray icon is double clicked. -This is only implemented on OS X. +__Note:__ This is only implemented on OS X. + +### Event: 'balloon-show' + +Emitted when the tray balloon shows. + +__Note:__ This is only implemented on Windows. ### Event: 'balloon-clicked' Emitted when the tray balloon is clicked. -This is only implemented on Windows. +__Note:__ This is only implemented on Windows. + +### Event: 'balloon-closed' + +Emitted when the tray balloon is closed because of timeout or user manually +closes it. + +__Note:__ This is only implemented on Windows. ### Tray.destroy() From f78f94d4f1b77a686e45d36b646e502c2e66fc37 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 28 Nov 2014 19:50:10 +0800 Subject: [PATCH 10/10] Fix building on Mac --- atom/browser/api/atom_api_menu_mac.mm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/atom/browser/api/atom_api_menu_mac.mm b/atom/browser/api/atom_api_menu_mac.mm index e63b07324..b61d1c69a 100644 --- a/atom/browser/api/atom_api_menu_mac.mm +++ b/atom/browser/api/atom_api_menu_mac.mm @@ -58,10 +58,10 @@ void MenuMac::PopupAt(Window* window, int x, int y) { if (!web_contents) return; - NSView* view = web_contents->GetContentNativeView(); - NSMenu* menu = [menu_controller menu]; base::scoped_nsobject menu_controller( [[AtomMenuController alloc] initWithModel:model_.get()]); + NSMenu* menu = [menu_controller menu]; + NSView* view = web_contents->GetContentNativeView(); // Show the menu. [menu popUpMenuPositioningItem:[menu itemAtIndex:0]