// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ui/wm/public/dispatcher_client.h" #include "base/callback.h" #include "ui/aura/window.h" #include "ui/aura/window_property.h" DECLARE_WINDOW_PROPERTY_TYPE(aura::client::DispatcherClient*); namespace aura { namespace client { DispatcherRunLoop::DispatcherRunLoop(DispatcherClient* client, base::MessagePumpDispatcher* dispatcher) { client->PrepareNestedLoopClosures(dispatcher, &run_closure_, &quit_closure_); } DispatcherRunLoop::~DispatcherRunLoop() { } void DispatcherRunLoop::Run() { base::MessageLoopForUI* loop = base::MessageLoopForUI::current(); base::MessageLoopForUI::ScopedNestableTaskAllower allow_nested(loop); run_closure_.Run(); } base::Closure DispatcherRunLoop::QuitClosure() { return quit_closure_; } void DispatcherRunLoop::Quit() { quit_closure_.Run(); } DEFINE_LOCAL_WINDOW_PROPERTY_KEY(DispatcherClient*, kDispatcherClientKey, NULL); void SetDispatcherClient(Window* root_window, DispatcherClient* client) { DCHECK_EQ(root_window->GetRootWindow(), root_window); root_window->SetProperty(kDispatcherClientKey, client); } DispatcherClient* GetDispatcherClient(Window* root_window) { if (root_window) DCHECK_EQ(root_window->GetRootWindow(), root_window); return root_window ? root_window->GetProperty(kDispatcherClientKey) : NULL; } } // namespace client } // namespace aura