Chromium Code Reviews| Index: chrome/browser/ui/views/frame/browser_frame_win.cc |
| =================================================================== |
| --- chrome/browser/ui/views/frame/browser_frame_win.cc (revision 137335) |
| +++ chrome/browser/ui/views/frame/browser_frame_win.cc (working copy) |
| @@ -32,6 +32,7 @@ |
| #include "grit/generated_resources.h" |
| #include "grit/theme_resources.h" |
| #include "ui/base/models/simple_menu_model.h" |
| +#include "ui/base/resource/resource_bundle.h" |
| #include "ui/base/theme_provider.h" |
| #include "ui/gfx/font.h" |
| #include "ui/views/controls/menu/native_menu_win.h" |
| @@ -58,11 +59,28 @@ |
| #if !defined(USE_AURA) |
| extern "C" { |
| +// Windows metro exported functions from metro_driver. |
| typedef void (*SetFrameWindow)(HWND window); |
| typedef void (*CloseFrameWindow)(HWND window); |
| +typedef void (*FlipFrameWindows)(); |
| } |
| #endif // USE_AURA |
| +views::Button* MakeWindowSwitcherButton(views::ButtonListener* listener) { |
| + views::ImageButton* switcher_button = new views::ImageButton(listener); |
| + switcher_button->SetImage( |
| + views::ImageButton::BS_NORMAL, |
| + ui::ResourceBundle::GetSharedInstance().GetBitmapNamed( |
| + IDR_PAGEINFO_WARNING_MINOR)); |
| + // TODO(cpu): Replace IDR_PAGEINFO_WARNING_MINOR with actual image. |
| + switcher_button->SetImageAlignment(views::ImageButton::ALIGN_CENTER, |
| + views::ImageButton::ALIGN_MIDDLE); |
| + gfx::Size ps = switcher_button->GetPreferredSize(); |
| + switcher_button->SetBounds(0,0, ps.width(), ps.height()); |
| + switcher_button->SetVisible(true); |
|
sky
2012/05/16 21:34:52
SetVisible(true) and SetBounds shouldn't be necess
|
| + return switcher_button; |
| +} |
| + |
| /////////////////////////////////////////////////////////////////////////////// |
| // BrowserFrameWin, public: |
| @@ -73,6 +91,8 @@ |
| browser_frame_(browser_frame), |
| system_menu_delegate_(new SystemMenuModelDelegate(browser_view, |
| browser_view->browser())) { |
| + if (base::win::GetMetroModule()) |
| + browser_view->SetWindowSwitcherButton(MakeWindowSwitcherButton(this)); |
| } |
| BrowserFrameWin::~BrowserFrameWin() { |
| @@ -263,6 +283,19 @@ |
| UpdateDWMFrame(); |
| } |
| +void BrowserFrameWin::ButtonPressed(views::Button* sender, |
| + const views::Event& event) { |
| + HMODULE metro = base::win::GetMetroModule(); |
| + if (!metro) |
| + return; |
| + // Tell the metro_driver to flip our window. This causes the current |
| + // browser window to be hidden and the next window to be shown. |
| + static FlipFrameWindows flip_window_fn = reinterpret_cast<FlipFrameWindows>( |
| + ::GetProcAddress(metro, "FlipFrameWindows")); |
| + if (flip_window_fn) |
| + flip_window_fn(); |
| +} |
| + |
| LRESULT BrowserFrameWin::OnWndProc(UINT message, |
| WPARAM w_param, |
| LPARAM l_param) { |