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/frame/browser_desktop_root_window_host_win.h" | 5 #include "chrome/browser/ui/views/frame/browser_desktop_root_window_host_win.h" |
6 | 6 |
7 #include <dwmapi.h> | 7 #include <dwmapi.h> |
8 | 8 |
9 #include "chrome/browser/ui/views/frame/browser_frame.h" | 9 #include "chrome/browser/ui/views/frame/browser_frame.h" |
10 #include "chrome/browser/ui/views/frame/browser_view.h" | 10 #include "chrome/browser/ui/views/frame/browser_view.h" |
11 #include "chrome/browser/ui/views/tabs/tab_strip.h" | 11 #include "chrome/browser/ui/views/tabs/tab_strip.h" |
12 #include "ui/base/theme_provider.h" | 12 #include "ui/base/theme_provider.h" |
| 13 #include "ui/views/controls/menu/native_menu_win.h" |
13 | 14 |
14 #pragma comment(lib, "dwmapi.lib") | 15 #pragma comment(lib, "dwmapi.lib") |
15 | 16 |
16 namespace { | 17 namespace { |
17 | 18 |
18 const int kClientEdgeThickness = 3; | 19 const int kClientEdgeThickness = 3; |
19 // We need to offset the DWMFrame into the toolbar so that the blackness | 20 // We need to offset the DWMFrame into the toolbar so that the blackness |
20 // doesn't show up on our rounded corners. | 21 // doesn't show up on our rounded corners. |
21 const int kDWMFrameTopOffset = 3; | 22 const int kDWMFrameTopOffset = 3; |
22 | 23 |
(...skipping 11 matching lines...) Expand all Loading... |
34 : DesktopRootWindowHostWin(native_widget_delegate, | 35 : DesktopRootWindowHostWin(native_widget_delegate, |
35 desktop_native_widget_aura, | 36 desktop_native_widget_aura, |
36 initial_bounds), | 37 initial_bounds), |
37 browser_view_(browser_view), | 38 browser_view_(browser_view), |
38 browser_frame_(browser_frame) { | 39 browser_frame_(browser_frame) { |
39 } | 40 } |
40 | 41 |
41 BrowserDesktopRootWindowHostWin::~BrowserDesktopRootWindowHostWin() { | 42 BrowserDesktopRootWindowHostWin::~BrowserDesktopRootWindowHostWin() { |
42 } | 43 } |
43 | 44 |
| 45 views::NativeMenuWin* BrowserDesktopRootWindowHostWin::GetSystemMenu() { |
| 46 if (!system_menu_.get()) { |
| 47 system_menu_.reset( |
| 48 new views::NativeMenuWin(browser_frame_->GetSystemMenuModel(), |
| 49 GetHWND())); |
| 50 system_menu_->Rebuild(); |
| 51 } |
| 52 return system_menu_.get(); |
| 53 } |
| 54 |
44 //////////////////////////////////////////////////////////////////////////////// | 55 //////////////////////////////////////////////////////////////////////////////// |
45 // BrowserDesktopRootWindowHostWin, BrowserDesktopRootWindowHost implementation: | 56 // BrowserDesktopRootWindowHostWin, BrowserDesktopRootWindowHost implementation: |
46 | 57 |
47 views::DesktopRootWindowHost* | 58 views::DesktopRootWindowHost* |
48 BrowserDesktopRootWindowHostWin::AsDesktopRootWindowHost() { | 59 BrowserDesktopRootWindowHostWin::AsDesktopRootWindowHost() { |
49 return this; | 60 return this; |
50 } | 61 } |
51 | 62 |
52 int BrowserDesktopRootWindowHostWin::GetMinimizeButtonOffset() const { | 63 int BrowserDesktopRootWindowHostWin::GetMinimizeButtonOffset() const { |
53 return minimize_button_metrics_.GetMinimizeButtonOffsetX(); | 64 return minimize_button_metrics_.GetMinimizeButtonOffsetX(); |
54 } | 65 } |
55 | 66 |
| 67 bool BrowserDesktopRootWindowHostWin::UsesNativeSystemMenu() const { |
| 68 return true; |
| 69 } |
| 70 |
56 //////////////////////////////////////////////////////////////////////////////// | 71 //////////////////////////////////////////////////////////////////////////////// |
57 // BrowserDesktopRootWindowHostWin, views::DesktopRootWindowHostWin overrides: | 72 // BrowserDesktopRootWindowHostWin, views::DesktopRootWindowHostWin overrides: |
58 | 73 |
59 int BrowserDesktopRootWindowHostWin::GetInitialShowState() const { | 74 int BrowserDesktopRootWindowHostWin::GetInitialShowState() const { |
60 STARTUPINFO si = {0}; | 75 STARTUPINFO si = {0}; |
61 si.cb = sizeof(si); | 76 si.cb = sizeof(si); |
62 si.dwFlags = STARTF_USESHOWWINDOW; | 77 si.dwFlags = STARTF_USESHOWWINDOW; |
63 GetStartupInfo(&si); | 78 GetStartupInfo(&si); |
64 return si.wShowWindow; | 79 return si.wShowWindow; |
65 } | 80 } |
(...skipping 23 matching lines...) Expand all Loading... |
89 // the window region. | 104 // the window region. |
90 UpdateDWMFrame(); | 105 UpdateDWMFrame(); |
91 DesktopRootWindowHostWin::HandleFrameChanged(); | 106 DesktopRootWindowHostWin::HandleFrameChanged(); |
92 } | 107 } |
93 | 108 |
94 bool BrowserDesktopRootWindowHostWin::PreHandleMSG(UINT message, | 109 bool BrowserDesktopRootWindowHostWin::PreHandleMSG(UINT message, |
95 WPARAM w_param, | 110 WPARAM w_param, |
96 LPARAM l_param, | 111 LPARAM l_param, |
97 LRESULT* result) { | 112 LRESULT* result) { |
98 switch (message) { | 113 switch (message) { |
99 case WM_ACTIVATE: | 114 case WM_ACTIVATE: |
100 if (LOWORD(w_param) != WA_INACTIVE) | 115 if (LOWORD(w_param) != WA_INACTIVE) |
101 minimize_button_metrics_.OnHWNDActivated(); | 116 minimize_button_metrics_.OnHWNDActivated(); |
102 return false; | 117 return false; |
103 case WM_ENDSESSION: | 118 case WM_ENDSESSION: |
104 browser::SessionEnding(); | 119 browser::SessionEnding(); |
105 return true; | 120 return true; |
| 121 case WM_INITMENUPOPUP: |
| 122 GetSystemMenu()->UpdateStates(); |
| 123 return true; |
106 } | 124 } |
107 return DesktopRootWindowHostWin::PreHandleMSG( | 125 return DesktopRootWindowHostWin::PreHandleMSG( |
108 message, w_param, l_param, result); | 126 message, w_param, l_param, result); |
109 } | 127 } |
110 | 128 |
111 void BrowserDesktopRootWindowHostWin::PostHandleMSG(UINT message, | 129 void BrowserDesktopRootWindowHostWin::PostHandleMSG(UINT message, |
112 WPARAM w_param, | 130 WPARAM w_param, |
113 LPARAM l_param) { | 131 LPARAM l_param) { |
114 switch (message) { | 132 switch (message) { |
115 case WM_CREATE: | 133 case WM_CREATE: |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 views::DesktopNativeWidgetAura* desktop_native_widget_aura, | 226 views::DesktopNativeWidgetAura* desktop_native_widget_aura, |
209 const gfx::Rect& initial_bounds, | 227 const gfx::Rect& initial_bounds, |
210 BrowserView* browser_view, | 228 BrowserView* browser_view, |
211 BrowserFrame* browser_frame) { | 229 BrowserFrame* browser_frame) { |
212 return new BrowserDesktopRootWindowHostWin(native_widget_delegate, | 230 return new BrowserDesktopRootWindowHostWin(native_widget_delegate, |
213 desktop_native_widget_aura, | 231 desktop_native_widget_aura, |
214 initial_bounds, | 232 initial_bounds, |
215 browser_view, | 233 browser_view, |
216 browser_frame); | 234 browser_frame); |
217 } | 235 } |
OLD | NEW |