OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/views/status_icons/status_tray_win.h" | 5 #include "chrome/browser/views/status_icons/status_tray_win.h" |
6 | 6 |
7 #include "base/win_util.h" | 7 #include "base/win_util.h" |
8 #include "chrome/browser/views/status_icons/status_icon_win.h" | 8 #include "chrome/browser/views/status_icons/status_icon_win.h" |
9 #include "chrome/common/chrome_constants.h" | 9 #include "chrome/common/chrome_constants.h" |
10 | 10 |
(...skipping 23 matching lines...) Expand all Loading... |
34 LPARAM lparam) { | 34 LPARAM lparam) { |
35 StatusTrayWin* msg_wnd = reinterpret_cast<StatusTrayWin*>( | 35 StatusTrayWin* msg_wnd = reinterpret_cast<StatusTrayWin*>( |
36 GetWindowLongPtr(hwnd, GWLP_USERDATA)); | 36 GetWindowLongPtr(hwnd, GWLP_USERDATA)); |
37 return msg_wnd->WndProc(hwnd, message, wparam, lparam); | 37 return msg_wnd->WndProc(hwnd, message, wparam, lparam); |
38 } | 38 } |
39 | 39 |
40 LRESULT CALLBACK StatusTrayWin::WndProc(HWND hwnd, | 40 LRESULT CALLBACK StatusTrayWin::WndProc(HWND hwnd, |
41 UINT message, | 41 UINT message, |
42 WPARAM wparam, | 42 WPARAM wparam, |
43 LPARAM lparam) { | 43 LPARAM lparam) { |
44 // TODO(atwilson): Add support for right clicks and context menu messages | |
45 // (tracked in http://crbug.com/37375). | |
46 switch (message) { | 44 switch (message) { |
47 case kStatusIconMessage: | 45 case kStatusIconMessage: |
48 switch (lparam) { | 46 switch (lparam) { |
49 case WM_LBUTTONDOWN: | 47 case WM_LBUTTONDOWN: |
| 48 case WM_RBUTTONDOWN: |
| 49 case WM_CONTEXTMENU: |
50 // Walk our icons, find which one was clicked on, and invoke its | 50 // Walk our icons, find which one was clicked on, and invoke its |
51 // DispatchClickEvent() method. | 51 // HandleClickEvent() method. |
52 for (StatusIconList::const_iterator iter = status_icons().begin(); | 52 for (StatusIconList::const_iterator iter = status_icons().begin(); |
53 iter != status_icons().end(); | 53 iter != status_icons().end(); |
54 ++iter) { | 54 ++iter) { |
55 StatusIconWin* win_icon = static_cast<StatusIconWin*>(*iter); | 55 StatusIconWin* win_icon = static_cast<StatusIconWin*>(*iter); |
56 if (win_icon->icon_id() == wparam) | 56 if (win_icon->icon_id() == wparam) { |
57 win_icon->DispatchClickEvent(); | 57 POINT p; |
| 58 GetCursorPos(&p); |
| 59 win_icon->HandleClickEvent(p.x, p.y, lparam == WM_LBUTTONDOWN); |
| 60 } |
58 } | 61 } |
59 return TRUE; | 62 return TRUE; |
60 } | 63 } |
61 break; | 64 break; |
62 } | 65 } |
63 return ::DefWindowProc(hwnd, message, wparam, lparam); | 66 return ::DefWindowProc(hwnd, message, wparam, lparam); |
64 } | 67 } |
65 | 68 |
66 StatusTrayWin::~StatusTrayWin() { | 69 StatusTrayWin::~StatusTrayWin() { |
67 if (window_) | 70 if (window_) |
68 DestroyWindow(window_); | 71 DestroyWindow(window_); |
69 UnregisterClass(chrome::kStatusTrayWindowClass, GetModuleHandle(NULL)); | 72 UnregisterClass(chrome::kStatusTrayWindowClass, GetModuleHandle(NULL)); |
70 } | 73 } |
71 | 74 |
72 StatusIcon* StatusTrayWin::CreatePlatformStatusIcon() { | 75 StatusIcon* StatusTrayWin::CreatePlatformStatusIcon() { |
73 return new StatusIconWin(next_icon_id_++, window_, kStatusIconMessage); | 76 return new StatusIconWin(next_icon_id_++, window_, kStatusIconMessage); |
74 } | 77 } |
75 | 78 |
76 StatusTray* StatusTray::Create() { | 79 StatusTray* StatusTray::Create() { |
77 return new StatusTrayWin(); | 80 return new StatusTrayWin(); |
78 } | 81 } |
OLD | NEW |