Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(270)

Side by Side Diff: ui/views/win/hwnd_message_handler.cc

Issue 1406403007: Eliminate HICON leaks caused by creating icons from bitmap image. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add move semantics to ScopedGDIObject. Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "ui/views/win/hwnd_message_handler.h" 5 #include "ui/views/win/hwnd_message_handler.h"
6 6
7 #include <dwmapi.h> 7 #include <dwmapi.h>
8 #include <oleacc.h> 8 #include <oleacc.h>
9 #include <shellapi.h> 9 #include <shellapi.h>
10 10
(...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after
801 if (!custom_window_region_ && !delegate_->IsUsingCustomFrame()) 801 if (!custom_window_region_ && !delegate_->IsUsingCustomFrame())
802 dwm_transition_desired_ = true; 802 dwm_transition_desired_ = true;
803 if (!dwm_transition_desired_ || !fullscreen_handler_->fullscreen()) 803 if (!dwm_transition_desired_ || !fullscreen_handler_->fullscreen())
804 PerformDwmTransition(); 804 PerformDwmTransition();
805 } 805 }
806 } 806 }
807 807
808 void HWNDMessageHandler::SetWindowIcons(const gfx::ImageSkia& window_icon, 808 void HWNDMessageHandler::SetWindowIcons(const gfx::ImageSkia& window_icon,
809 const gfx::ImageSkia& app_icon) { 809 const gfx::ImageSkia& app_icon) {
810 if (!window_icon.isNull()) { 810 if (!window_icon.isNull()) {
811 HICON windows_icon = IconUtil::CreateHICONFromSkBitmap( 811 window_icon_.Set(IconUtil::CreateHICONFromSkBitmap(*window_icon.bitmap()));
sky 2015/11/03 17:23:16 Seems risky to destroy the old icon (as Set destro
812 *window_icon.bitmap()); 812 SendMessage(hwnd(), WM_SETICON, ICON_SMALL,
813 // We need to make sure to destroy the previous icon, otherwise we'll leak 813 reinterpret_cast<LPARAM>(window_icon_.Get()));
814 // these GDI objects until we crash!
815 HICON old_icon = reinterpret_cast<HICON>(
816 SendMessage(hwnd(), WM_SETICON, ICON_SMALL,
817 reinterpret_cast<LPARAM>(windows_icon)));
818 if (old_icon)
819 DestroyIcon(old_icon);
820 } 814 }
821 if (!app_icon.isNull()) { 815 if (!app_icon.isNull()) {
822 HICON windows_icon = IconUtil::CreateHICONFromSkBitmap(*app_icon.bitmap()); 816 app_icon_.Set(IconUtil::CreateHICONFromSkBitmap(*app_icon.bitmap()));
823 HICON old_icon = reinterpret_cast<HICON>( 817 SendMessage(hwnd(), WM_SETICON, ICON_BIG,
824 SendMessage(hwnd(), WM_SETICON, ICON_BIG, 818 reinterpret_cast<LPARAM>(app_icon_.Get()));
825 reinterpret_cast<LPARAM>(windows_icon)));
826 if (old_icon)
827 DestroyIcon(old_icon);
828 } 819 }
829 } 820 }
830 821
831 void HWNDMessageHandler::SetFullscreen(bool fullscreen) { 822 void HWNDMessageHandler::SetFullscreen(bool fullscreen) {
832 fullscreen_handler()->SetFullscreen(fullscreen); 823 fullscreen_handler()->SetFullscreen(fullscreen);
833 // If we are out of fullscreen and there was a pending DWM transition for the 824 // If we are out of fullscreen and there was a pending DWM transition for the
834 // window, then go ahead and do it now. 825 // window, then go ahead and do it now.
835 if (!fullscreen && dwm_transition_desired_) 826 if (!fullscreen && dwm_transition_desired_)
836 PerformDwmTransition(); 827 PerformDwmTransition();
837 } 828 }
(...skipping 1622 matching lines...) Expand 10 before | Expand all | Expand 10 after
2460 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 2451 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT,
2461 0, 2452 0,
2462 0, 2453 0,
2463 event_time, 2454 event_time,
2464 1); 2455 1);
2465 2456
2466 touch_events->push_back(event); 2457 touch_events->push_back(event);
2467 } 2458 }
2468 2459
2469 } // namespace views 2460 } // namespace views
OLDNEW
« base/win/scoped_gdi_object.h ('K') | « ui/views/win/hwnd_message_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698