Home | History | Annotate | Download | only in win
      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 
     10 namespace gfx {
     11 
     12 // static
     13 SingletonHwnd* SingletonHwnd::GetInstance() {
     14   return Singleton<SingletonHwnd>::get();
     15 }
     16 
     17 void SingletonHwnd::AddObserver(Observer* observer) {
     18   observer_list_.AddObserver(observer);
     19 }
     20 
     21 void SingletonHwnd::RemoveObserver(Observer* observer) {
     22   if (!hwnd())
     23     return;
     24   observer_list_.RemoveObserver(observer);
     25 }
     26 
     27 BOOL 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 
     39 SingletonHwnd::SingletonHwnd() {
     40   if (!base::MessageLoop::current() ||
     41       base::MessageLoop::current()->type() != base::MessageLoop::TYPE_UI) {
     42     // Creating this window in (e.g.) a renderer inhibits shutdown on
     43     // Windows. See http://crbug.com/230122 and http://crbug.com/236039.
     44     DLOG(ERROR) << "Cannot create windows on non-UI thread!";
     45     return;
     46   }
     47   WindowImpl::Init(NULL, Rect());
     48 }
     49 
     50 SingletonHwnd::~SingletonHwnd() {
     51 }
     52 
     53 }  // namespace gfx
     54