Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Side by Side Diff: ui/views/widget/desktop_aura/desktop_native_cursor_manager.cc

Issue 100173003: Cursor state should be global among all root windows for desktop Aura (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: make DesktopNativeCursorManager a WindowObserver Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/views/widget/desktop_aura/desktop_native_cursor_manager.h" 5 #include "ui/views/widget/desktop_aura/desktop_native_cursor_manager.h"
6 6
7 #include "ui/aura/client/cursor_client.h"
7 #include "ui/aura/root_window.h" 8 #include "ui/aura/root_window.h"
9 #include "ui/aura/window.h"
8 #include "ui/base/cursor/cursor_loader.h" 10 #include "ui/base/cursor/cursor_loader.h"
9 #include "ui/views/widget/desktop_aura/desktop_cursor_loader_updater.h" 11 #include "ui/views/widget/desktop_aura/desktop_cursor_loader_updater.h"
10 12
11 namespace views { 13 namespace views {
12 14
15 DesktopNativeCursorManager::RootWindows*
16 DesktopNativeCursorManager::root_windows_ = new std::set<aura::RootWindow*>;
17
13 DesktopNativeCursorManager::DesktopNativeCursorManager( 18 DesktopNativeCursorManager::DesktopNativeCursorManager(
14 aura::RootWindow* window, 19 aura::RootWindow* window,
15 scoped_ptr<DesktopCursorLoaderUpdater> cursor_loader_updater) 20 scoped_ptr<DesktopCursorLoaderUpdater> cursor_loader_updater)
16 : root_window_(window), 21 : root_window_(window),
17 cursor_loader_updater_(cursor_loader_updater.Pass()), 22 cursor_loader_updater_(cursor_loader_updater.Pass()),
18 cursor_loader_(ui::CursorLoader::Create()) { 23 cursor_loader_(ui::CursorLoader::Create()) {
19 if (cursor_loader_updater_.get()) 24 if (cursor_loader_updater_.get())
20 cursor_loader_updater_->OnCreate(root_window_, cursor_loader_.get()); 25 cursor_loader_updater_->OnCreate(root_window_, cursor_loader_.get());
26 window->window()->AddObserver(this);
27 root_windows_->insert(window);
21 } 28 }
22 29
23 DesktopNativeCursorManager::~DesktopNativeCursorManager() { 30 DesktopNativeCursorManager::~DesktopNativeCursorManager() {
31 Shutdown();
24 } 32 }
25 33
26 gfx::NativeCursor DesktopNativeCursorManager::GetInitializedCursor(int type) { 34 gfx::NativeCursor DesktopNativeCursorManager::GetInitializedCursor(int type) {
27 gfx::NativeCursor cursor(type); 35 gfx::NativeCursor cursor(type);
28 cursor_loader_->SetPlatformCursor(&cursor); 36 cursor_loader_->SetPlatformCursor(&cursor);
29 return cursor; 37 return cursor;
30 } 38 }
31 39
40 void DesktopNativeCursorManager::OnWindowDestroyed(aura::Window* window) {
41 DCHECK_EQ(window, root_window_->window());
42 Shutdown();
43 }
44
45 void DesktopNativeCursorManager::Shutdown() {
46 if (!root_window_)
47 return;
48
49 root_window_->window()->RemoveObserver(this);
50 root_windows_->erase(root_window_);
51 aura::client::SetCursorClient(root_window_->window(), NULL);
52 root_window_ = NULL;
53 }
54
32 void DesktopNativeCursorManager::SetDisplay( 55 void DesktopNativeCursorManager::SetDisplay(
33 const gfx::Display& display, 56 const gfx::Display& display,
34 views::corewm::NativeCursorManagerDelegate* delegate) { 57 views::corewm::NativeCursorManagerDelegate* delegate) {
35 cursor_loader_->UnloadAll(); 58 cursor_loader_->UnloadAll();
36 cursor_loader_->set_display(display); 59 cursor_loader_->set_display(display);
37 60
38 if (cursor_loader_updater_.get()) 61 if (cursor_loader_updater_.get())
39 cursor_loader_updater_->OnDisplayUpdated(display, cursor_loader_.get()); 62 cursor_loader_updater_->OnDisplayUpdated(display, cursor_loader_.get());
40 63
41 SetCursor(delegate->GetCurrentCursor(), delegate); 64 SetCursor(delegate->GetCurrentCursor(), delegate);
42 } 65 }
43 66
44 void DesktopNativeCursorManager::SetCursor( 67 void DesktopNativeCursorManager::SetCursor(
45 gfx::NativeCursor cursor, 68 gfx::NativeCursor cursor,
46 views::corewm::NativeCursorManagerDelegate* delegate) { 69 views::corewm::NativeCursorManagerDelegate* delegate) {
47 gfx::NativeCursor new_cursor = cursor; 70 gfx::NativeCursor new_cursor = cursor;
48 cursor_loader_->SetPlatformCursor(&new_cursor); 71 cursor_loader_->SetPlatformCursor(&new_cursor);
49 delegate->CommitCursor(new_cursor); 72 delegate->CommitCursor(new_cursor);
50 73
51 if (delegate->GetCurrentVisibility()) 74 if (delegate->GetCurrentVisibility()) {
52 root_window_->SetCursor(new_cursor); 75 RootWindows root_windows(*root_windows_);
76 for (RootWindows::const_iterator i = root_windows.begin();
77 i != root_windows.end();
78 ++i) {
79 (*i)->SetCursor(new_cursor);
80 }
81 }
53 } 82 }
54 83
55 void DesktopNativeCursorManager::SetVisibility( 84 void DesktopNativeCursorManager::SetVisibility(
56 bool visible, 85 bool visible,
57 views::corewm::NativeCursorManagerDelegate* delegate) { 86 views::corewm::NativeCursorManagerDelegate* delegate) {
58 delegate->CommitVisibility(visible); 87 delegate->CommitVisibility(visible);
59 88
60 if (visible) { 89 if (visible) {
61 SetCursor(delegate->GetCurrentCursor(), delegate); 90 SetCursor(delegate->GetCurrentCursor(), delegate);
62 } else { 91 } else {
63 gfx::NativeCursor invisible_cursor(ui::kCursorNone); 92 gfx::NativeCursor invisible_cursor(ui::kCursorNone);
64 cursor_loader_->SetPlatformCursor(&invisible_cursor); 93 cursor_loader_->SetPlatformCursor(&invisible_cursor);
65 root_window_->SetCursor(invisible_cursor); 94 RootWindows root_windows(*root_windows_);
95 for (RootWindows::const_iterator i = root_windows.begin();
96 i != root_windows.end();
97 ++i) {
98 (*i)->SetCursor(invisible_cursor);
99 }
66 } 100 }
67 101
68 root_window_->OnCursorVisibilityChanged(visible); 102 RootWindows root_windows(*root_windows_);
103 for (RootWindows::const_iterator i = root_windows.begin();
104 i != root_windows.end();
105 ++i) {
106 (*i)->OnCursorVisibilityChanged(visible);
107 }
69 } 108 }
70 109
71 void DesktopNativeCursorManager::SetCursorSet( 110 void DesktopNativeCursorManager::SetCursorSet(
72 ui::CursorSetType cursor_set, 111 ui::CursorSetType cursor_set,
73 views::corewm::NativeCursorManagerDelegate* delegate) { 112 views::corewm::NativeCursorManagerDelegate* delegate) {
74 NOTIMPLEMENTED(); 113 NOTIMPLEMENTED();
75 } 114 }
76 115
77 void DesktopNativeCursorManager::SetScale( 116 void DesktopNativeCursorManager::SetScale(
78 float scale, 117 float scale,
79 views::corewm::NativeCursorManagerDelegate* delegate) { 118 views::corewm::NativeCursorManagerDelegate* delegate) {
80 NOTIMPLEMENTED(); 119 NOTIMPLEMENTED();
81 } 120 }
82 121
83 void DesktopNativeCursorManager::SetMouseEventsEnabled( 122 void DesktopNativeCursorManager::SetMouseEventsEnabled(
84 bool enabled, 123 bool enabled,
85 views::corewm::NativeCursorManagerDelegate* delegate) { 124 views::corewm::NativeCursorManagerDelegate* delegate) {
86 delegate->CommitMouseEventsEnabled(enabled); 125 delegate->CommitMouseEventsEnabled(enabled);
87 126
88 // TODO(erg): In the ash version, we set the last mouse location on Env. I'm 127 // TODO(erg): In the ash version, we set the last mouse location on Env. I'm
89 // not sure this concept makes sense on the desktop. 128 // not sure this concept makes sense on the desktop.
90 129
91 SetVisibility(delegate->GetCurrentVisibility(), delegate); 130 SetVisibility(delegate->GetCurrentVisibility(), delegate);
92 131
93 root_window_->OnMouseEventsEnableStateChanged(enabled); 132 RootWindows root_windows(*root_windows_);
133 for (RootWindows::const_iterator i = root_windows.begin();
134 i != root_windows.end();
135 ++i) {
136 (*i)->OnMouseEventsEnableStateChanged(enabled);
137 }
94 } 138 }
95 139
96 } // namespace views 140 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698