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 3// found in the LICENSE file. 4 5#include "ui/gfx/win/singleton_hwnd.h" 6 7#include "base/memory/singleton.h" 8#include "base/message_loop/message_loop.h" 9 10namespace gfx { 11 12// static 13SingletonHwnd* SingletonHwnd::GetInstance() { 14 return Singleton<SingletonHwnd>::get(); 15} 16 17void SingletonHwnd::AddObserver(Observer* observer) { 18 observer_list_.AddObserver(observer); 19} 20 21void SingletonHwnd::RemoveObserver(Observer* observer) { 22 if (!hwnd()) 23 return; 24 observer_list_.RemoveObserver(observer); 25} 26 27BOOL SingletonHwnd::ProcessWindowMessage(HWND window, 28 UINT message, 29 WPARAM wparam, 30 LPARAM lparam, 31 LRESULT& result, 32 DWORD msg_map_id) { 33 FOR_EACH_OBSERVER(Observer, 34 observer_list_, 35 OnWndProc(window, message, wparam, lparam)); 36 return false; 37} 38 39SingletonHwnd::SingletonHwnd() { 40 if (!base::MessageLoopForUI::IsCurrent()) { 41 // Creating this window in (e.g.) a renderer inhibits shutdown on 42 // Windows. See http://crbug.com/230122 and http://crbug.com/236039. 43 DLOG(ERROR) << "Cannot create windows on non-UI thread!"; 44 return; 45 } 46 WindowImpl::Init(NULL, Rect()); 47} 48 49SingletonHwnd::~SingletonHwnd() { 50} 51 52} // namespace gfx 53