Index: ui/views/win/hwnd_message_handler.cc |
diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc |
index 9bfb90fd94e60742427cbbf42d575c9357bb3b56..c3a194961f381686455ff064bb48b01319cb46bf 100644 |
--- a/ui/views/win/hwnd_message_handler.cc |
+++ b/ui/views/win/hwnd_message_handler.cc |
@@ -558,7 +558,7 @@ void HWNDMessageHandler::CenterWindow(const gfx::Size& size) { |
} |
void HWNDMessageHandler::SetRegion(HRGN region) { |
- custom_window_region_.Set(region); |
+ custom_window_region_.reset(region); |
ResetWindowRegion(true, true); |
} |
@@ -750,7 +750,7 @@ void HWNDMessageHandler::FlashFrame(bool flash) { |
fwi.cbSize = sizeof(fwi); |
fwi.hwnd = hwnd(); |
if (flash) { |
- fwi.dwFlags = custom_window_region_ ? FLASHW_TRAY : FLASHW_ALL; |
+ fwi.dwFlags = custom_window_region_.is_valid() ? FLASHW_TRAY : FLASHW_ALL; |
fwi.uCount = 4; |
fwi.dwTimeout = 0; |
} else { |
@@ -818,7 +818,7 @@ void HWNDMessageHandler::FrameTypeChanged() { |
delegate_->HandleFrameChanged(); |
InvalidateRect(hwnd(), NULL, FALSE); |
} else { |
- if (!custom_window_region_ && !delegate_->IsUsingCustomFrame()) |
+ if (!custom_window_region_.is_valid() && !delegate_->IsUsingCustomFrame()) |
dwm_transition_desired_ = true; |
if (!dwm_transition_desired_ || !fullscreen_handler_->fullscreen()) |
PerformDwmTransition(); |
@@ -828,23 +828,17 @@ void HWNDMessageHandler::FrameTypeChanged() { |
void HWNDMessageHandler::SetWindowIcons(const gfx::ImageSkia& window_icon, |
const gfx::ImageSkia& app_icon) { |
if (!window_icon.isNull()) { |
- HICON windows_icon = IconUtil::CreateHICONFromSkBitmap( |
- *window_icon.bitmap()); |
- // We need to make sure to destroy the previous icon, otherwise we'll leak |
- // these GDI objects until we crash! |
- HICON old_icon = reinterpret_cast<HICON>( |
- SendMessage(hwnd(), WM_SETICON, ICON_SMALL, |
- reinterpret_cast<LPARAM>(windows_icon))); |
- if (old_icon) |
- DestroyIcon(old_icon); |
+ base::win::ScopedHICON previous_icon = window_icon_.Pass(); |
+ window_icon_ = |
+ IconUtil::CreateHICONFromSkBitmap(*window_icon.bitmap()).Pass(); |
+ SendMessage(hwnd(), WM_SETICON, ICON_SMALL, |
+ reinterpret_cast<LPARAM>(window_icon_.get())); |
} |
if (!app_icon.isNull()) { |
- HICON windows_icon = IconUtil::CreateHICONFromSkBitmap(*app_icon.bitmap()); |
- HICON old_icon = reinterpret_cast<HICON>( |
- SendMessage(hwnd(), WM_SETICON, ICON_BIG, |
- reinterpret_cast<LPARAM>(windows_icon))); |
- if (old_icon) |
- DestroyIcon(old_icon); |
+ base::win::ScopedHICON previous_icon = app_icon_.Pass(); |
+ app_icon_ = IconUtil::CreateHICONFromSkBitmap(*app_icon.bitmap()).Pass(); |
+ SendMessage(hwnd(), WM_SETICON, ICON_BIG, |
+ reinterpret_cast<LPARAM>(app_icon_.get())); |
} |
} |
@@ -1121,7 +1115,8 @@ void HWNDMessageHandler::ResetWindowRegion(bool force, bool redraw) { |
// automatically makes clicks on transparent pixels fall through, that isn't |
// the case with WS_EX_COMPOSITED. So, we route WS_EX_COMPOSITED through to |
// the delegate to allow for a custom hit mask. |
- if ((window_ex_style() & WS_EX_COMPOSITED) == 0 && !custom_window_region_ && |
+ if ((window_ex_style() & WS_EX_COMPOSITED) == 0 && |
+ !custom_window_region_.is_valid() && |
(!delegate_->IsUsingCustomFrame() || !delegate_->IsWidgetWindow())) { |
if (force) |
SetWindowRgn(hwnd(), NULL, redraw); |
@@ -1131,14 +1126,14 @@ void HWNDMessageHandler::ResetWindowRegion(bool force, bool redraw) { |
// Changing the window region is going to force a paint. Only change the |
// window region if the region really differs. |
base::win::ScopedRegion current_rgn(CreateRectRgn(0, 0, 0, 0)); |
- GetWindowRgn(hwnd(), current_rgn); |
+ GetWindowRgn(hwnd(), current_rgn.get()); |
RECT window_rect; |
GetWindowRect(hwnd(), &window_rect); |
base::win::ScopedRegion new_region; |
- if (custom_window_region_) { |
- new_region.Set(::CreateRectRgn(0, 0, 0, 0)); |
- ::CombineRgn(new_region, custom_window_region_.Get(), NULL, RGN_COPY); |
+ if (custom_window_region_.is_valid()) { |
+ new_region.reset(CreateRectRgn(0, 0, 0, 0)); |
+ CombineRgn(new_region.get(), custom_window_region_.get(), NULL, RGN_COPY); |
} else if (IsMaximized()) { |
HMONITOR monitor = MonitorFromWindow(hwnd(), MONITOR_DEFAULTTONEAREST); |
MONITORINFO mi; |
@@ -1146,20 +1141,20 @@ void HWNDMessageHandler::ResetWindowRegion(bool force, bool redraw) { |
GetMonitorInfo(monitor, &mi); |
RECT work_rect = mi.rcWork; |
OffsetRect(&work_rect, -window_rect.left, -window_rect.top); |
- new_region.Set(CreateRectRgnIndirect(&work_rect)); |
+ new_region.reset(CreateRectRgnIndirect(&work_rect)); |
} else { |
gfx::Path window_mask; |
delegate_->GetWindowMask(gfx::Size(window_rect.right - window_rect.left, |
window_rect.bottom - window_rect.top), |
&window_mask); |
if (!window_mask.isEmpty()) |
- new_region.Set(gfx::CreateHRGNFromSkPath(window_mask)); |
+ new_region.reset(gfx::CreateHRGNFromSkPath(window_mask)); |
} |
const bool has_current_region = current_rgn != 0; |
const bool has_new_region = new_region != 0; |
if (has_current_region != has_new_region || |
- (has_current_region && !EqualRgn(current_rgn, new_region))) { |
+ (has_current_region && !EqualRgn(current_rgn.get(), new_region.get()))) { |
// SetWindowRgn takes ownership of the HRGN. |
SetWindowRgn(hwnd(), new_region.release(), redraw); |
} |
@@ -1173,8 +1168,9 @@ void HWNDMessageHandler::UpdateDwmNcRenderingPolicy() { |
return; |
DWMNCRENDERINGPOLICY policy = |
- custom_window_region_ || delegate_->IsUsingCustomFrame() ? |
- DWMNCRP_DISABLED : DWMNCRP_ENABLED; |
+ custom_window_region_.is_valid() || delegate_->IsUsingCustomFrame() |
+ ? DWMNCRP_DISABLED |
+ : DWMNCRP_ENABLED; |
DwmSetWindowAttribute(hwnd(), DWMWA_NCRENDERING_POLICY, |
&policy, sizeof(DWMNCRENDERINGPOLICY)); |