| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/views/status_icons/status_icon_win.h" | 5 #include "chrome/browser/ui/views/status_icons/status_icon_win.h" |
| 6 | 6 |
| 7 #include "base/strings/string_number_conversions.h" | 7 #include "base/strings/string_number_conversions.h" |
| 8 #include "base/win/windows_version.h" | 8 #include "base/win/windows_version.h" |
| 9 #include "chrome/browser/ui/views/status_icons/status_tray_win.h" | |
| 10 #include "third_party/skia/include/core/SkBitmap.h" | 9 #include "third_party/skia/include/core/SkBitmap.h" |
| 11 #include "ui/gfx/icon_util.h" | 10 #include "ui/gfx/icon_util.h" |
| 12 #include "ui/gfx/point.h" | 11 #include "ui/gfx/point.h" |
| 13 #include "ui/views/controls/menu/menu_item_view.h" | 12 #include "ui/views/controls/menu/menu_item_view.h" |
| 14 #include "ui/views/controls/menu/menu_runner.h" | 13 #include "ui/views/controls/menu/menu_runner.h" |
| 15 | 14 |
| 16 //////////////////////////////////////////////////////////////////////////////// | 15 //////////////////////////////////////////////////////////////////////////////// |
| 17 // StatusIconWin, public: | 16 // StatusIconWin, public: |
| 18 | 17 |
| 19 StatusIconWin::StatusIconWin(StatusTrayWin* tray, | 18 StatusIconWin::StatusIconWin(UINT id, HWND window, UINT message) |
| 20 UINT id, | 19 : icon_id_(id), |
| 21 HWND window, | |
| 22 UINT message) | |
| 23 : tray_(tray), | |
| 24 icon_id_(id), | |
| 25 window_(window), | 20 window_(window), |
| 26 message_id_(message), | 21 message_id_(message), |
| 27 menu_model_(NULL) { | 22 menu_model_(NULL) { |
| 28 NOTIFYICONDATA icon_data; | 23 NOTIFYICONDATA icon_data; |
| 29 InitIconData(&icon_data); | 24 InitIconData(&icon_data); |
| 30 icon_data.uFlags = NIF_MESSAGE; | 25 icon_data.uFlags = NIF_MESSAGE; |
| 31 icon_data.uCallbackMessage = message_id_; | 26 icon_data.uCallbackMessage = message_id_; |
| 32 BOOL result = Shell_NotifyIcon(NIM_ADD, &icon_data); | 27 BOOL result = Shell_NotifyIcon(NIM_ADD, &icon_data); |
| 33 // This can happen if the explorer process isn't running when we try to | 28 // This can happen if the explorer process isn't running when we try to |
| 34 // create the icon for some reason (for example, at startup). | 29 // create the icon for some reason (for example, at startup). |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 icon_data.uFlags |= NIF_ICON; | 135 icon_data.uFlags |= NIF_ICON; |
| 141 icon_data.dwInfoFlags = NIIF_USER; | 136 icon_data.dwInfoFlags = NIIF_USER; |
| 142 } | 137 } |
| 143 } | 138 } |
| 144 | 139 |
| 145 BOOL result = Shell_NotifyIcon(NIM_MODIFY, &icon_data); | 140 BOOL result = Shell_NotifyIcon(NIM_MODIFY, &icon_data); |
| 146 if (!result) | 141 if (!result) |
| 147 LOG(WARNING) << "Unable to create status tray balloon."; | 142 LOG(WARNING) << "Unable to create status tray balloon."; |
| 148 } | 143 } |
| 149 | 144 |
| 150 void StatusIconWin::ForceVisible() { | |
| 151 tray_->UpdateIconVisibilityInBackground(this); | |
| 152 } | |
| 153 | |
| 154 //////////////////////////////////////////////////////////////////////////////// | 145 //////////////////////////////////////////////////////////////////////////////// |
| 155 // StatusIconWin, private: | 146 // StatusIconWin, private: |
| 156 | 147 |
| 157 void StatusIconWin::UpdatePlatformContextMenu(StatusIconMenuModel* menu) { | 148 void StatusIconWin::UpdatePlatformContextMenu(StatusIconMenuModel* menu) { |
| 158 // |menu_model_| is about to be destroyed. Destroy the menu (which closes it) | 149 // |menu_model_| is about to be destroyed. Destroy the menu (which closes it) |
| 159 // so that it doesn't attempt to continue using |menu_model_|. | 150 // so that it doesn't attempt to continue using |menu_model_|. |
| 160 menu_runner_.reset(); | 151 menu_runner_.reset(); |
| 161 DCHECK(menu); | 152 DCHECK(menu); |
| 162 menu_model_ = menu; | 153 menu_model_ = menu; |
| 163 } | 154 } |
| 164 | 155 |
| 165 void StatusIconWin::InitIconData(NOTIFYICONDATA* icon_data) { | 156 void StatusIconWin::InitIconData(NOTIFYICONDATA* icon_data) { |
| 166 if (base::win::GetVersion() >= base::win::VERSION_VISTA) { | 157 if (base::win::GetVersion() >= base::win::VERSION_VISTA) { |
| 167 memset(icon_data, 0, sizeof(NOTIFYICONDATA)); | 158 memset(icon_data, 0, sizeof(NOTIFYICONDATA)); |
| 168 icon_data->cbSize = sizeof(NOTIFYICONDATA); | 159 icon_data->cbSize = sizeof(NOTIFYICONDATA); |
| 169 } else { | 160 } else { |
| 170 memset(icon_data, 0, NOTIFYICONDATA_V3_SIZE); | 161 memset(icon_data, 0, NOTIFYICONDATA_V3_SIZE); |
| 171 icon_data->cbSize = NOTIFYICONDATA_V3_SIZE; | 162 icon_data->cbSize = NOTIFYICONDATA_V3_SIZE; |
| 172 } | 163 } |
| 173 | 164 |
| 174 icon_data->hWnd = window_; | 165 icon_data->hWnd = window_; |
| 175 icon_data->uID = icon_id_; | 166 icon_data->uID = icon_id_; |
| 176 } | 167 } |
| OLD | NEW |