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

Side by Side Diff: ash/wm/shelf_layout_manager.cc

Issue 10701051: Polish launcher tooltip visibility (2nd try). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 5 months 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
« no previous file with comments | « ash/wm/shelf_layout_manager.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "ash/wm/shelf_layout_manager.h" 5 #include "ash/wm/shelf_layout_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "ash/launcher/launcher.h" 9 #include "ash/launcher/launcher.h"
10 #include "ash/screen_ash.h" 10 #include "ash/screen_ash.h"
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 alignment_(SHELF_ALIGNMENT_BOTTOM), 129 alignment_(SHELF_ALIGNMENT_BOTTOM),
130 launcher_(NULL), 130 launcher_(NULL),
131 status_(status), 131 status_(status),
132 workspace_manager_(NULL), 132 workspace_manager_(NULL),
133 window_overlaps_shelf_(false) { 133 window_overlaps_shelf_(false) {
134 Shell::GetInstance()->AddShellObserver(this); 134 Shell::GetInstance()->AddShellObserver(this);
135 aura::client::GetActivationClient(root_window_)->AddObserver(this); 135 aura::client::GetActivationClient(root_window_)->AddObserver(this);
136 } 136 }
137 137
138 ShelfLayoutManager::~ShelfLayoutManager() { 138 ShelfLayoutManager::~ShelfLayoutManager() {
139 FOR_EACH_OBSERVER(Observer, observers_, WillDeleteShelf());
139 Shell::GetInstance()->RemoveShellObserver(this); 140 Shell::GetInstance()->RemoveShellObserver(this);
140 aura::client::GetActivationClient(root_window_)->RemoveObserver(this); 141 aura::client::GetActivationClient(root_window_)->RemoveObserver(this);
141 } 142 }
142 143
143 void ShelfLayoutManager::SetAutoHideBehavior(ShelfAutoHideBehavior behavior) { 144 void ShelfLayoutManager::SetAutoHideBehavior(ShelfAutoHideBehavior behavior) {
144 if (auto_hide_behavior_ == behavior) 145 if (auto_hide_behavior_ == behavior)
145 return; 146 return;
146 auto_hide_behavior_ = behavior; 147 auto_hide_behavior_ = behavior;
147 UpdateVisibilityState(); 148 UpdateVisibilityState();
149 FOR_EACH_OBSERVER(Observer, observers_,
150 OnAutoHideStateChanged(state_.auto_hide_state));
148 } 151 }
149 152
150 bool ShelfLayoutManager::IsVisible() const { 153 bool ShelfLayoutManager::IsVisible() const {
151 return status_->IsVisible() && (state_.visibility_state == VISIBLE || 154 return status_->IsVisible() && (state_.visibility_state == VISIBLE ||
152 (state_.visibility_state == AUTO_HIDE && 155 (state_.visibility_state == AUTO_HIDE &&
153 state_.auto_hide_state == AUTO_HIDE_SHOWN)); 156 state_.auto_hide_state == AUTO_HIDE_SHOWN));
154 } 157 }
155 158
156 gfx::Rect ShelfLayoutManager::GetMaximizedWindowBounds( 159 gfx::Rect ShelfLayoutManager::GetMaximizedWindowBounds(
157 aura::Window* window) { 160 aura::Window* window) {
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 } 275 }
273 } 276 }
274 277
275 void ShelfLayoutManager::UpdateAutoHideState() { 278 void ShelfLayoutManager::UpdateAutoHideState() {
276 AutoHideState auto_hide_state = 279 AutoHideState auto_hide_state =
277 CalculateAutoHideState(state_.visibility_state); 280 CalculateAutoHideState(state_.visibility_state);
278 if (auto_hide_state != state_.auto_hide_state) { 281 if (auto_hide_state != state_.auto_hide_state) {
279 if (auto_hide_state == AUTO_HIDE_HIDDEN) { 282 if (auto_hide_state == AUTO_HIDE_HIDDEN) {
280 // Hides happen immediately. 283 // Hides happen immediately.
281 SetState(state_.visibility_state); 284 SetState(state_.visibility_state);
285 FOR_EACH_OBSERVER(Observer, observers_,
286 OnAutoHideStateChanged(auto_hide_state));
282 } else { 287 } else {
283 auto_hide_timer_.Stop(); 288 auto_hide_timer_.Stop();
284 auto_hide_timer_.Start( 289 auto_hide_timer_.Start(
285 FROM_HERE, 290 FROM_HERE,
286 base::TimeDelta::FromMilliseconds(kAutoHideDelayMS), 291 base::TimeDelta::FromMilliseconds(kAutoHideDelayMS),
287 this, &ShelfLayoutManager::UpdateAutoHideStateNow); 292 this, &ShelfLayoutManager::UpdateAutoHideStateNow);
293 FOR_EACH_OBSERVER(Observer, observers_, OnAutoHideStateChanged(
294 CalculateAutoHideState(state_.visibility_state)));
288 } 295 }
289 } else { 296 } else {
290 auto_hide_timer_.Stop(); 297 auto_hide_timer_.Stop();
291 } 298 }
292 } 299 }
293 300
294 void ShelfLayoutManager::SetWindowOverlapsShelf(bool value) { 301 void ShelfLayoutManager::SetWindowOverlapsShelf(bool value) {
295 window_overlaps_shelf_ = value; 302 window_overlaps_shelf_ = value;
296 UpdateShelfBackground(internal::BackgroundAnimator::CHANGE_ANIMATE); 303 UpdateShelfBackground(internal::BackgroundAnimator::CHANGE_ANIMATE);
297 } 304 }
298 305
306 void ShelfLayoutManager::AddObserver(Observer* observer) {
307 observers_.AddObserver(observer);
308 }
309
310 void ShelfLayoutManager::RemoveObserver(Observer* observer) {
311 observers_.RemoveObserver(observer);
312 }
313
299 //////////////////////////////////////////////////////////////////////////////// 314 ////////////////////////////////////////////////////////////////////////////////
300 // ShelfLayoutManager, aura::LayoutManager implementation: 315 // ShelfLayoutManager, aura::LayoutManager implementation:
301 316
302 void ShelfLayoutManager::OnWindowResized() { 317 void ShelfLayoutManager::OnWindowResized() {
303 LayoutShelf(); 318 LayoutShelf();
304 } 319 }
305 320
306 void ShelfLayoutManager::OnWindowAddedToLayout(aura::Window* child) { 321 void ShelfLayoutManager::OnWindowAddedToLayout(aura::Window* child) {
307 } 322 }
308 323
(...skipping 29 matching lines...) Expand all
338 void ShelfLayoutManager::SetState(VisibilityState visibility_state) { 353 void ShelfLayoutManager::SetState(VisibilityState visibility_state) {
339 ShellDelegate* delegate = Shell::GetInstance()->delegate(); 354 ShellDelegate* delegate = Shell::GetInstance()->delegate();
340 State state; 355 State state;
341 state.visibility_state = visibility_state; 356 state.visibility_state = visibility_state;
342 state.auto_hide_state = CalculateAutoHideState(visibility_state); 357 state.auto_hide_state = CalculateAutoHideState(visibility_state);
343 state.is_screen_locked = delegate && delegate->IsScreenLocked(); 358 state.is_screen_locked = delegate && delegate->IsScreenLocked();
344 359
345 if (state_.Equals(state)) 360 if (state_.Equals(state))
346 return; // Nothing changed. 361 return; // Nothing changed.
347 362
363 FOR_EACH_OBSERVER(Observer, observers_,
364 WillChangeVisibilityState(visibility_state));
365
348 if (state.visibility_state == AUTO_HIDE) { 366 if (state.visibility_state == AUTO_HIDE) {
349 // When state is AUTO_HIDE we need to track when the mouse is over the 367 // When state is AUTO_HIDE we need to track when the mouse is over the
350 // launcher to unhide the shelf. AutoHideEventFilter does that for us. 368 // launcher to unhide the shelf. AutoHideEventFilter does that for us.
351 if (!event_filter_.get()) 369 if (!event_filter_.get())
352 event_filter_.reset(new AutoHideEventFilter(this)); 370 event_filter_.reset(new AutoHideEventFilter(this));
353 } else { 371 } else {
354 event_filter_.reset(NULL); 372 event_filter_.reset(NULL);
355 } 373 }
356 374
357 auto_hide_timer_.Stop(); 375 auto_hide_timer_.Stop();
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 int ShelfLayoutManager::GetWorkAreaSize(const State& state, int size) const { 592 int ShelfLayoutManager::GetWorkAreaSize(const State& state, int size) const {
575 if (state.visibility_state == VISIBLE) 593 if (state.visibility_state == VISIBLE)
576 return size; 594 return size;
577 if (state.visibility_state == AUTO_HIDE) 595 if (state.visibility_state == AUTO_HIDE)
578 return kAutoHideSize; 596 return kAutoHideSize;
579 return 0; 597 return 0;
580 } 598 }
581 599
582 } // namespace internal 600 } // namespace internal
583 } // namespace ash 601 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/shelf_layout_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698