Chromium Code Reviews| Index: chrome/browser/ui/panels/panel_browser_view.cc |
| diff --git a/chrome/browser/ui/panels/panel_browser_view.cc b/chrome/browser/ui/panels/panel_browser_view.cc |
| index 96f060e9e1e4a8b4f5a80493a3995376585fe937..911e0ee24a7f94aae612800a56355b872befac4b 100644 |
| --- a/chrome/browser/ui/panels/panel_browser_view.cc |
| +++ b/chrome/browser/ui/panels/panel_browser_view.cc |
| @@ -13,16 +13,23 @@ |
| #include "chrome/browser/ui/panels/panel_browser_frame_view.h" |
| #include "chrome/browser/ui/panels/panel_manager.h" |
| #include "chrome/browser/ui/panels/panel_strip.h" |
| +#include "chrome/browser/ui/panels/taskbar_window_thumbnailer_win.h" |
| #include "chrome/browser/ui/views/frame/browser_frame.h" |
| #include "chrome/common/chrome_notification_types.h" |
| #include "content/public/browser/notification_service.h" |
| #include "grit/chromium_strings.h" |
| #include "ui/base/l10n/l10n_util.h" |
| +#include "ui/gfx/canvas.h" |
| #include "ui/views/controls/button/image_button.h" |
| #include "ui/views/controls/label.h" |
| #include "ui/views/widget/widget.h" |
| +#if defined(OS_WIN) |
| +#include "base/win/windows_version.h" |
| +#endif |
| + |
| using content::NativeWebKeyboardEvent; |
| + |
| using content::WebContents; |
| NativePanel* Panel::CreateNativePanel(Browser* browser, Panel* panel, |
| @@ -42,6 +49,7 @@ PanelBrowserView::PanelBrowserView(Browser* browser, Panel* panel, |
| mouse_pressed_(false), |
| mouse_dragging_state_(NO_DRAGGING), |
| is_drawing_attention_(false), |
| + force_to_paint_as_inactive_(false), |
| old_focused_view_(NULL) { |
| } |
| @@ -519,7 +527,6 @@ void PanelBrowserView::UpdatePanelMinimizeRestoreButtonVisibility() { |
| GetFrameView()->UpdateTitleBarMinimizeRestoreButtonVisibility(); |
| } |
| - |
| #if defined(OS_WIN) && !defined(USE_AURA) |
| void PanelBrowserView::UpdateWindowAttribute(int attribute_index, |
| int attribute_value, |
| @@ -536,6 +543,46 @@ void PanelBrowserView::UpdateWindowAttribute(int attribute_index, |
| } |
| #endif |
| +void PanelBrowserView::PanelExpansionStateChanging( |
| + Panel::ExpansionState old_state, Panel::ExpansionState new_state) { |
| +#if defined(OS_WIN) && !defined(USE_ASH) |
| + // Live preview is only available since Windows 7. |
| + if (base::win::GetVersion() < base::win::VERSION_WIN7) |
| + return; |
| + |
| + bool is_minimized = old_state != Panel::EXPANDED; |
| + bool will_be_minimized = new_state != Panel::EXPANDED; |
| + if (is_minimized == will_be_minimized) |
| + return; |
| + |
| + HWND native_window = GetNativeHandle(); |
| + |
| + if (!thumbnail_subclass_.get()) { |
| + thumbnail_subclass_.reset(new ui::HWNDSubclass(native_window)); |
| + thumbnailer_ = new TaskbarWindowThumbnailerWin(native_window); |
|
Ben Goodger (Google)
2012/05/22 23:41:55
keeping the thumbnailer as a member is dangerous,
jianli
2012/05/22 23:50:30
Yes, I agree. However, I need to stop custom thumb
Ben Goodger (Google)
2012/05/23 00:02:19
Hrm. Seems like since this class owns the subclass
|
| + thumbnail_subclass_->SetFilter(thumbnailer_); |
|
Dmitry Titov
2012/05/23 00:21:10
Could you please add a short comment here explaini
|
| + } |
| + |
| + // Cache the image at this point. |
| + if (will_be_minimized) { |
| + // If the panel is still active (we will deactivate the minimizd panel at |
| + // later time), we need to paint it immediately as inactive so that we can |
| + // take a snapshot of inactive panel. |
| + if (focused_) { |
| + force_to_paint_as_inactive_ = true; |
| + ::RedrawWindow(native_window, NULL, NULL, |
| + RDW_NOCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW); |
| + } |
| + |
| + thumbnailer_->Start(); |
| + } else { |
| + force_to_paint_as_inactive_ = false; |
| + thumbnailer_->Stop(); |
| + } |
| + |
| +#endif |
| +} |
| + |
| // NativePanelTesting implementation. |
| class NativePanelTestingWin : public NativePanelTesting { |
| public: |