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