12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/wm/core/cursor_manager.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h"
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/aura/client/cursor_client_observer.h"
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/wm/core/native_cursor_manager.h"
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/wm/core/native_cursor_manager_delegate.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace wm {
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace internal {
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Represents the cursor state which is composed of cursor type, visibility, and
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// mouse events enable state. When mouse events are disabled, the cursor is
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// always invisible.
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CursorState {
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CursorState()
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      : cursor_(ui::kCursorNone),
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        visible_(true),
24424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)        cursor_set_(ui::CURSOR_SET_NORMAL),
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mouse_events_enabled_(true),
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        visible_on_mouse_events_enabled_(true) {
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::NativeCursor cursor() const { return cursor_; }
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_cursor(gfx::NativeCursor cursor) { cursor_ = cursor; }
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool visible() const { return visible_; }
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetVisible(bool visible) {
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (mouse_events_enabled_)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      visible_ = visible;
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Ignores the call when mouse events disabled.
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
39424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ui::CursorSetType cursor_set() const { return cursor_set_; }
40424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  void set_cursor_set(ui::CursorSetType cursor_set) {
41424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    cursor_set_ = cursor_set;
42424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
43424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool mouse_events_enabled() const { return mouse_events_enabled_; }
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetMouseEventsEnabled(bool enabled) {
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (mouse_events_enabled_ == enabled)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return;
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    mouse_events_enabled_ = enabled;
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Restores the visibility when mouse events are enabled.
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (enabled) {
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      visible_ = visible_on_mouse_events_enabled_;
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    } else {
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      visible_on_mouse_events_enabled_ = visible_;
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      visible_ = false;
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::NativeCursor cursor_;
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool visible_;
62424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ui::CursorSetType cursor_set_;
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool mouse_events_enabled_;
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The visibility to set when mouse events are enabled.
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool visible_on_mouse_events_enabled_;
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(CursorState);
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace internal
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)CursorManager::CursorManager(scoped_ptr<NativeCursorManager> delegate)
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : delegate_(delegate.Pass()),
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      cursor_lock_count_(0),
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      current_state_(new internal::CursorState),
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      state_on_unlock_(new internal::CursorState) {
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)CursorManager::~CursorManager() {
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CursorManager::SetCursor(gfx::NativeCursor cursor) {
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  state_on_unlock_->set_cursor(cursor);
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (cursor_lock_count_ == 0 &&
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      GetCursor() != state_on_unlock_->cursor()) {
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    delegate_->SetCursor(state_on_unlock_->cursor(), this);
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)gfx::NativeCursor CursorManager::GetCursor() const {
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return current_state_->cursor();
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CursorManager::ShowCursor() {
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  state_on_unlock_->SetVisible(true);
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (cursor_lock_count_ == 0 &&
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IsCursorVisible() != state_on_unlock_->visible()) {
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    delegate_->SetVisibility(state_on_unlock_->visible(), this);
100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    FOR_EACH_OBSERVER(aura::client::CursorClientObserver, observers_,
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                      OnCursorVisibilityChanged(true));
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CursorManager::HideCursor() {
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  state_on_unlock_->SetVisible(false);
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (cursor_lock_count_ == 0 &&
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IsCursorVisible() != state_on_unlock_->visible()) {
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    delegate_->SetVisibility(state_on_unlock_->visible(), this);
110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    FOR_EACH_OBSERVER(aura::client::CursorClientObserver, observers_,
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                      OnCursorVisibilityChanged(false));
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool CursorManager::IsCursorVisible() const {
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return current_state_->visible();
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
119424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void CursorManager::SetCursorSet(ui::CursorSetType cursor_set) {
120424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  state_on_unlock_->set_cursor_set(cursor_set);
1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (GetCursorSet() != state_on_unlock_->cursor_set())
122424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    delegate_->SetCursorSet(state_on_unlock_->cursor_set(), this);
123424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
124424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ui::CursorSetType CursorManager::GetCursorSet() const {
126424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return current_state_->cursor_set();
127424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
128424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CursorManager::EnableMouseEvents() {
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  state_on_unlock_->SetMouseEventsEnabled(true);
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (cursor_lock_count_ == 0 &&
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IsMouseEventsEnabled() != state_on_unlock_->mouse_events_enabled()) {
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    delegate_->SetMouseEventsEnabled(state_on_unlock_->mouse_events_enabled(),
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     this);
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CursorManager::DisableMouseEvents() {
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  state_on_unlock_->SetMouseEventsEnabled(false);
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (cursor_lock_count_ == 0 &&
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      IsMouseEventsEnabled() != state_on_unlock_->mouse_events_enabled()) {
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    delegate_->SetMouseEventsEnabled(state_on_unlock_->mouse_events_enabled(),
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     this);
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool CursorManager::IsMouseEventsEnabled() const {
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return current_state_->mouse_events_enabled();
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CursorManager::SetDisplay(const gfx::Display& display) {
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  delegate_->SetDisplay(display, this);
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CursorManager::LockCursor() {
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cursor_lock_count_++;
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CursorManager::UnlockCursor() {
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cursor_lock_count_--;
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK_GE(cursor_lock_count_, 0);
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (cursor_lock_count_ > 0)
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (GetCursor() != state_on_unlock_->cursor()) {
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    delegate_->SetCursor(state_on_unlock_->cursor(), this);
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (IsMouseEventsEnabled() != state_on_unlock_->mouse_events_enabled()) {
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    delegate_->SetMouseEventsEnabled(state_on_unlock_->mouse_events_enabled(),
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     this);
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (IsCursorVisible() != state_on_unlock_->visible()) {
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    delegate_->SetVisibility(state_on_unlock_->visible(),
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                             this);
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)bool CursorManager::IsCursorLocked() const {
1793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return cursor_lock_count_ > 0;
1803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void CursorManager::AddObserver(
183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    aura::client::CursorClientObserver* observer) {
184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  observers_.AddObserver(observer);
185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void CursorManager::RemoveObserver(
188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    aura::client::CursorClientObserver* observer) {
189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  observers_.RemoveObserver(observer);
190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
192c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochbool CursorManager::ShouldHideCursorOnKeyEvent(
193c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    const ui::KeyEvent& event) const {
194c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  return false;
195c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
196c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CursorManager::CommitCursor(gfx::NativeCursor cursor) {
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  current_state_->set_cursor(cursor);
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CursorManager::CommitVisibility(bool visible) {
2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // TODO(tdanderson): Find a better place for this so we don't
2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // notify the observers more than is necessary.
204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FOR_EACH_OBSERVER(aura::client::CursorClientObserver, observers_,
205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    OnCursorVisibilityChanged(visible));
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  current_state_->SetVisible(visible);
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
209424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void CursorManager::CommitCursorSet(ui::CursorSetType cursor_set) {
210424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  current_state_->set_cursor_set(cursor_set);
211424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
212424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CursorManager::CommitMouseEventsEnabled(bool enabled) {
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  current_state_->SetMouseEventsEnabled(enabled);
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
217a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}  // namespace wm
218