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

Side by Side Diff: chrome/browser/ui/views/immersive_mode_controller.cc

Issue 11969006: cros: Trigger immersive mode with F4 maximize key (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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
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 "chrome/browser/ui/views/immersive_mode_controller.h" 5 #include "chrome/browser/ui/views/immersive_mode_controller.h"
6 6
7 #include "chrome/browser/ui/views/frame/browser_frame.h" 7 #include "chrome/browser/ui/views/frame/browser_frame.h"
8 #include "chrome/browser/ui/views/frame/browser_view.h" 8 #include "chrome/browser/ui/views/frame/browser_view.h"
9 #include "chrome/browser/ui/views/frame/contents_container.h" 9 #include "chrome/browser/ui/views/frame/contents_container.h"
10 #include "chrome/browser/ui/views/tabs/tab_strip.h" 10 #include "chrome/browser/ui/views/tabs/tab_strip.h"
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 237
238 virtual ~WindowObserver() { 238 virtual ~WindowObserver() {
239 controller_->native_window_->RemoveObserver(this); 239 controller_->native_window_->RemoveObserver(this);
240 } 240 }
241 241
242 // aura::WindowObserver overrides: 242 // aura::WindowObserver overrides:
243 virtual void OnWindowPropertyChanged(aura::Window* window, 243 virtual void OnWindowPropertyChanged(aura::Window* window,
244 const void* key, 244 const void* key,
245 intptr_t old) OVERRIDE { 245 intptr_t old) OVERRIDE {
246 using aura::client::kShowStateKey; 246 using aura::client::kShowStateKey;
247 if (key != kShowStateKey) 247 if (key == kShowStateKey) {
248 return; 248 // Disable immersive mode when leaving the maximized state.
249 // Disable immersive mode when leaving the maximized state. 249 if (window->GetProperty(kShowStateKey) != ui::SHOW_STATE_MAXIMIZED)
250 if (window->GetProperty(kShowStateKey) != ui::SHOW_STATE_MAXIMIZED) 250 controller_->SetEnabled(false);
251 controller_->SetEnabled(false); 251 return;
252 }
253 #if defined(USE_ASH)
254 using ash::internal::kImmersiveModeKey;
255 if (key == kImmersiveModeKey) {
256 // Another component has toggled immersive mode.
257 controller_->SetEnabled(window->GetProperty(kImmersiveModeKey));
258 return;
259 }
260 #endif
252 } 261 }
253 262
254 private: 263 private:
255 ImmersiveModeController* controller_; // Not owned. 264 ImmersiveModeController* controller_; // Not owned.
256 265
257 DISALLOW_COPY_AND_ASSIGN(WindowObserver); 266 DISALLOW_COPY_AND_ASSIGN(WindowObserver);
258 }; 267 };
259 #endif // defined(USE_AURA) 268 #endif // defined(USE_AURA)
260 269
261 //////////////////////////////////////////////////////////////////////////////// 270 ////////////////////////////////////////////////////////////////////////////////
(...skipping 11 matching lines...) Expand all
273 EndReveal(ANIMATE_NO, LAYOUT_NO); 282 EndReveal(ANIMATE_NO, LAYOUT_NO);
274 // Clean up our window observers. 283 // Clean up our window observers.
275 EnableWindowObservers(false); 284 EnableWindowObservers(false);
276 } 285 }
277 286
278 void ImmersiveModeController::Init() { 287 void ImmersiveModeController::Init() {
279 // Browser view is detached from its widget during destruction. Cache the 288 // Browser view is detached from its widget during destruction. Cache the
280 // window pointer so |this| can stop observing during destruction. 289 // window pointer so |this| can stop observing during destruction.
281 native_window_ = browser_view_->GetNativeWindow(); 290 native_window_ = browser_view_->GetNativeWindow();
282 DCHECK(native_window_); 291 DCHECK(native_window_);
292 EnableWindowObservers(true);
283 293
284 #if defined(USE_ASH) 294 #if defined(USE_ASH)
285 // Optionally allow the tab indicators to be hidden. 295 // Optionally allow the tab indicators to be hidden.
286 hide_tab_indicators_ = CommandLine::ForCurrentProcess()-> 296 hide_tab_indicators_ = CommandLine::ForCurrentProcess()->
287 HasSwitch(ash::switches::kAshImmersiveHideTabIndicators); 297 HasSwitch(ash::switches::kAshImmersiveHideTabIndicators);
288 #endif 298 #endif
289 } 299 }
290 300
291 void ImmersiveModeController::SetEnabled(bool enabled) { 301 void ImmersiveModeController::SetEnabled(bool enabled) {
292 if (enabled_ == enabled) 302 if (enabled_ == enabled)
293 return; 303 return;
294 enabled_ = enabled; 304 enabled_ = enabled;
295 305
296 if (!enabled_) { 306 if (!enabled_) {
297 // Layout occurs below because EndReveal() only performs layout if the view 307 // Layout occurs below because EndReveal() only performs layout if the view
298 // is already revealed. 308 // is already revealed.
299 EndReveal(ANIMATE_NO, LAYOUT_NO); 309 EndReveal(ANIMATE_NO, LAYOUT_NO);
300 // Stop cursor-at-top tracking. 310 // Stop cursor-at-top tracking.
301 top_timer_.Stop(); 311 top_timer_.Stop();
302 } 312 }
303 313
304 #if defined(USE_ASH) 314 #if defined(USE_ASH)
315 // This causes a no-op call to SetEnabled() since enabled_ is already set.
305 native_window_->SetProperty(ash::internal::kImmersiveModeKey, enabled_); 316 native_window_->SetProperty(ash::internal::kImmersiveModeKey, enabled_);
306 // Ash on Windows may not have a shell. 317 // Ash on Windows may not have a shell.
307 if (ash::Shell::HasInstance()) { 318 if (ash::Shell::HasInstance()) {
308 // Shelf auto-hides in immersive mode. 319 // Shelf auto-hides in immersive mode.
309 ash::Shell::GetInstance()->UpdateShelfVisibility(); 320 ash::Shell::GetInstance()->UpdateShelfVisibility();
310 } 321 }
311 #endif 322 #endif
312 323
313 // Ensure window caption buttons are shown/hidden appropriately. 324 // Ensure window caption buttons are shown/hidden appropriately.
314 browser_view_->frame()->non_client_view()->frame_view()-> 325 browser_view_->frame()->non_client_view()->frame_view()->
315 ResetWindowControls(); 326 ResetWindowControls();
316 327
317 // Always ensure tab strip is in correct state. 328 // Always ensure tab strip is in correct state.
318 browser_view_->tabstrip()->SetImmersiveStyle(enabled_); 329 browser_view_->tabstrip()->SetImmersiveStyle(enabled_);
319 browser_view_->Layout(); 330 browser_view_->Layout();
320
321 EnableWindowObservers(enabled_);
322 } 331 }
323 332
324 views::View* ImmersiveModeController::reveal_view() { 333 views::View* ImmersiveModeController::reveal_view() {
325 return reveal_view_.get(); 334 return reveal_view_.get();
326 } 335 }
327 336
328 void ImmersiveModeController::MaybeStackViewAtTop() { 337 void ImmersiveModeController::MaybeStackViewAtTop() {
329 #if defined(USE_AURA) 338 #if defined(USE_AURA)
330 if (enabled_ && revealed_ && reveal_view_.get()) { 339 if (enabled_ && revealed_ && reveal_view_.get()) {
331 ui::Layer* reveal_layer = reveal_view_->layer(); 340 ui::Layer* reveal_layer = reveal_view_->layer();
332 reveal_layer->parent()->StackAtTop(reveal_layer); 341 reveal_layer->parent()->StackAtTop(reveal_layer);
333 } 342 }
334 #endif 343 #endif
335 } 344 }
336 345
337 void ImmersiveModeController::MaybeStartReveal() { 346 void ImmersiveModeController::MaybeStartReveal() {
338 if (enabled_ && !revealed_) 347 if (enabled_ && !revealed_)
339 StartReveal(); 348 StartReveal();
340 } 349 }
341 350
342 void ImmersiveModeController::CancelReveal() { 351 void ImmersiveModeController::CancelReveal() {
343 EndReveal(ANIMATE_NO, LAYOUT_YES); 352 EndReveal(ANIMATE_NO, LAYOUT_YES);
344 } 353 }
345 354
346 //////////////////////////////////////////////////////////////////////////////// 355 ////////////////////////////////////////////////////////////////////////////////
347 356
348 // ui::EventHandler overrides: 357 // ui::EventHandler overrides:
349 void ImmersiveModeController::OnMouseEvent(ui::MouseEvent* event) { 358 void ImmersiveModeController::OnMouseEvent(ui::MouseEvent* event) {
350 if (event->type() != ui::ET_MOUSE_MOVED) 359 if (!enabled_ || event->type() != ui::ET_MOUSE_MOVED)
351 return; 360 return;
352 if (event->location().y() == 0) { 361 if (event->location().y() == 0) {
353 // Start a reveal if the mouse touches the top of the screen and then stops 362 // Start a reveal if the mouse touches the top of the screen and then stops
354 // moving for a little while. This mirrors the Ash launcher behavior. 363 // moving for a little while. This mirrors the Ash launcher behavior.
355 top_timer_.Stop(); 364 top_timer_.Stop();
356 top_timer_.Start(FROM_HERE, 365 top_timer_.Start(FROM_HERE,
357 base::TimeDelta::FromMilliseconds(kTopEdgeRevealDelayMs), 366 base::TimeDelta::FromMilliseconds(kTopEdgeRevealDelayMs),
358 this, &ImmersiveModeController::StartReveal); 367 this, &ImmersiveModeController::StartReveal);
359 } else { 368 } else {
360 // Cursor left the top edge. 369 // Cursor left the top edge.
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 base::TimeDelta::FromMilliseconds(kRevealAnimationDurationMs)); 510 base::TimeDelta::FromMilliseconds(kRevealAnimationDurationMs));
502 settings.AddObserver(this); // Resets |reveal_view_| on completion. 511 settings.AddObserver(this); // Resets |reveal_view_| on completion.
503 gfx::Transform transform; 512 gfx::Transform transform;
504 transform.Translate(0, -layer->bounds().height()); 513 transform.Translate(0, -layer->bounds().height());
505 layer->SetTransform(transform); 514 layer->SetTransform(transform);
506 } 515 }
507 516
508 void ImmersiveModeController::OnHideAnimationCompleted() { 517 void ImmersiveModeController::OnHideAnimationCompleted() {
509 reveal_view_.reset(); // Also removes from parent. 518 reveal_view_.reset(); // Also removes from parent.
510 } 519 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698