blob: e751917feb288b3713c10ed83a3c4f394495c9ce [file] [log] [blame]
// Copyright 2014 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 "services/window_manager/window_manager_impl.h"
#include "services/window_manager/window_manager_app.h"
namespace mojo {
WindowManagerImpl::WindowManagerImpl(WindowManagerApp* window_manager,
bool from_vm)
: window_manager_(window_manager), from_vm_(from_vm), binding_(this) {
window_manager_->AddConnection(this);
binding_.set_error_handler(this);
}
WindowManagerImpl::~WindowManagerImpl() {
window_manager_->RemoveConnection(this);
}
void WindowManagerImpl::Bind(ScopedMessagePipeHandle window_manager_pipe) {
binding_.Bind(window_manager_pipe.Pass());
}
void WindowManagerImpl::NotifyViewFocused(Id new_focused_id,
Id old_focused_id) {
if (from_vm_)
client()->OnFocusChanged(old_focused_id, new_focused_id);
}
void WindowManagerImpl::NotifyWindowActivated(Id new_active_id,
Id old_active_id) {
if (from_vm_)
client()->OnActiveWindowChanged(old_active_id, new_active_id);
}
void WindowManagerImpl::Embed(
const String& url,
InterfaceRequest<ServiceProvider> service_provider) {
window_manager_->Embed(url, service_provider.Pass());
}
void WindowManagerImpl::SetCapture(Id view,
const Callback<void(bool)>& callback) {
if (!from_vm_)
return; // See comments for |from_vm_| on this.
bool success = window_manager_->IsReady();
if (success)
window_manager_->SetCapture(view);
callback.Run(success);
}
void WindowManagerImpl::FocusWindow(Id view,
const Callback<void(bool)>& callback) {
if (!from_vm_)
return; // See comments for |from_vm_| on this.
bool success = window_manager_->IsReady();
if (success)
window_manager_->FocusWindow(view);
callback.Run(success);
}
void WindowManagerImpl::ActivateWindow(Id view,
const Callback<void(bool)>& callback) {
if (!from_vm_)
return; // See comments for |from_vm_| on this.
bool success = window_manager_->IsReady();
if (success)
window_manager_->ActivateWindow(view);
callback.Run(success);
}
void WindowManagerImpl::OnConnectionError() {
delete this;
}
} // namespace mojo