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