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

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

Issue 485453003: Split AppListController::SetVisible into Show and Dismiss. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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/app_list_controller.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/app_list_controller.h" 5 #include "ash/wm/app_list_controller.h"
6 6
7 #include "ash/ash_switches.h" 7 #include "ash/ash_switches.h"
8 #include "ash/root_window_controller.h" 8 #include "ash/root_window_controller.h"
9 #include "ash/screen_util.h" 9 #include "ash/screen_util.h"
10 #include "ash/shelf/shelf.h" 10 #include "ash/shelf/shelf.h"
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 // lives in the controller and app list view would access it on destruction. 166 // lives in the controller and app list view would access it on destruction.
167 if (view_) { 167 if (view_) {
168 view_->GetAppsPaginationModel()->RemoveObserver(this); 168 view_->GetAppsPaginationModel()->RemoveObserver(this);
169 if (view_->GetWidget()) 169 if (view_->GetWidget())
170 view_->GetWidget()->CloseNow(); 170 view_->GetWidget()->CloseNow();
171 } 171 }
172 172
173 Shell::GetInstance()->RemoveShellObserver(this); 173 Shell::GetInstance()->RemoveShellObserver(this);
174 } 174 }
175 175
176 void AppListController::SetVisible(bool visible, aura::Window* window) { 176 void AppListController::Show(aura::Window* window) {
177 if (visible == is_visible_) 177 if (is_visible_)
178 return; 178 return;
179 179
180 is_visible_ = visible; 180 is_visible_ = true;
181 181
182 // App list needs to know the new shelf layout in order to calculate its 182 // App list needs to know the new shelf layout in order to calculate its
183 // UI layout when AppListView visibility changes. 183 // UI layout when AppListView visibility changes.
184 Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager()-> 184 Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager()->
185 UpdateAutoHideState(); 185 UpdateAutoHideState();
186 186
187 if (view_) { 187 if (!view_) {
188 // Our widget is currently active. When the animation completes we'll hide
189 // the widget, changing activation. If a menu is shown before the animation
190 // completes then the activation change triggers the menu to close. By
191 // deactivating now we ensure there is no activation change when the
192 // animation completes and any menus stay open.
193 if (!visible)
194 view_->GetWidget()->Deactivate();
195 ScheduleAnimation();
196 } else if (is_visible_) {
197 // AppListModel and AppListViewDelegate are owned by AppListView. They 188 // AppListModel and AppListViewDelegate are owned by AppListView. They
198 // will be released with AppListView on close. 189 // will be released with AppListView on close.
199 app_list::AppListView* view = new app_list::AppListView( 190 app_list::AppListView* view = new app_list::AppListView(
200 Shell::GetInstance()->delegate()->CreateAppListViewDelegate()); 191 Shell::GetInstance()->delegate()->CreateAppListViewDelegate());
201 aura::Window* root_window = window->GetRootWindow(); 192 aura::Window* root_window = window->GetRootWindow();
202 aura::Window* container = GetRootWindowController(root_window)-> 193 aura::Window* container = GetRootWindowController(root_window)->
203 GetContainer(kShellWindowId_AppListContainer); 194 GetContainer(kShellWindowId_AppListContainer);
204 views::View* applist_button = 195 views::View* applist_button =
205 Shelf::ForWindow(container)->GetAppListButtonView(); 196 Shelf::ForWindow(container)->GetAppListButtonView();
206 is_centered_ = view->ShouldCenterWindow(); 197 is_centered_ = view->ShouldCenterWindow();
(...skipping 25 matching lines...) Expand all
232 Shelf::ForWindow(container)->GetAppListButtonView()->GetWidget()), 223 Shelf::ForWindow(container)->GetAppListButtonView()->GetWidget()),
233 GetBubbleArrow(container), 224 GetBubbleArrow(container),
234 true /* border_accepts_events */); 225 true /* border_accepts_events */);
235 view->SetArrowPaintType(views::BubbleBorder::PAINT_NONE); 226 view->SetArrowPaintType(views::BubbleBorder::PAINT_NONE);
236 } 227 }
237 SetView(view); 228 SetView(view);
238 // By setting us as DnD recipient, the app list knows that we can 229 // By setting us as DnD recipient, the app list knows that we can
239 // handle items. 230 // handle items.
240 SetDragAndDropHostOfCurrentAppList( 231 SetDragAndDropHostOfCurrentAppList(
241 Shelf::ForWindow(window)->GetDragAndDropHostForAppList()); 232 Shelf::ForWindow(window)->GetDragAndDropHostForAppList());
233 } else {
234 ScheduleAnimation();
Matt Giuca 2014/08/19 08:26:29 Is there a reason to invert the if statement? Why
calamity 2014/08/20 00:44:53 Done.
242 } 235 }
236
243 // Update applist button status when app list visibility is changed. 237 // Update applist button status when app list visibility is changed.
244 Shelf::ForWindow(window)->GetAppListButtonView()->SchedulePaint(); 238 Shelf::ForWindow(window)->GetAppListButtonView()->SchedulePaint();
245 } 239 }
246 240
241 void AppListController::Dismiss() {
242 if (!is_visible_)
243 return;
244
245 is_visible_ = false;
246
247 // App list needs to know the new shelf layout in order to calculate its
248 // UI layout when AppListView visibility changes.
249 Shell::GetPrimaryRootWindowController()
250 ->GetShelfLayoutManager()
251 ->UpdateAutoHideState();
252
253 if (!view_)
Matt Giuca 2014/08/19 08:26:29 This slightly changes the logic in that you won't
calamity 2014/08/20 00:44:53 I don't think this will be a problem. !view_ shoul
Matt Giuca 2014/08/20 06:13:12 Note: We discussed this and decided to replace thi
254 return;
255
256 // Our widget is currently active. When the animation completes we'll hide
257 // the widget, changing activation. If a menu is shown before the animation
258 // completes then the activation change triggers the menu to close. By
259 // deactivating now we ensure there is no activation change when the
260 // animation completes and any menus stay open.
261 view_->GetWidget()->Deactivate();
262 ScheduleAnimation();
263
264 // Update applist button status when app list visibility is changed.
265 Shelf::ForWindow(view_->GetWidget()->GetNativeView())
266 ->GetAppListButtonView()
267 ->SchedulePaint();
268 }
269
247 bool AppListController::IsVisible() const { 270 bool AppListController::IsVisible() const {
248 return view_ && view_->GetWidget()->IsVisible(); 271 return view_ && view_->GetWidget()->IsVisible();
249 } 272 }
250 273
251 aura::Window* AppListController::GetWindow() { 274 aura::Window* AppListController::GetWindow() {
252 return is_visible_ && view_ ? view_->GetWidget()->GetNativeWindow() : NULL; 275 return is_visible_ && view_ ? view_->GetWidget()->GetNativeWindow() : NULL;
253 } 276 }
254 277
255 //////////////////////////////////////////////////////////////////////////////// 278 ////////////////////////////////////////////////////////////////////////////////
256 // AppListController, private: 279 // AppListController, private:
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 return; 370 return;
348 aura::Window* keyboard_container = root_controller->GetContainer( 371 aura::Window* keyboard_container = root_controller->GetContainer(
349 kShellWindowId_VirtualKeyboardContainer); 372 kShellWindowId_VirtualKeyboardContainer);
350 if (keyboard_container->Contains(target)) 373 if (keyboard_container->Contains(target))
351 return; 374 return;
352 } 375 }
353 } 376 }
354 377
355 aura::Window* window = view_->GetWidget()->GetNativeView()->parent(); 378 aura::Window* window = view_->GetWidget()->GetNativeView()->parent();
356 if (!window->Contains(target)) 379 if (!window->Contains(target))
357 SetVisible(false, window); 380 Dismiss();
358 } 381 }
359 382
360 void AppListController::UpdateBounds() { 383 void AppListController::UpdateBounds() {
361 if (!view_ || !is_visible_) 384 if (!view_ || !is_visible_)
362 return; 385 return;
363 386
364 view_->UpdateBounds(); 387 view_->UpdateBounds();
365 388
366 if (is_centered_) 389 if (is_centered_)
367 view_->SetAnchorPoint(GetCenterOfDisplayForView( 390 view_->SetAnchorPoint(GetCenterOfDisplayForView(
(...skipping 17 matching lines...) Expand all
385 // AppListController, aura::FocusObserver implementation: 408 // AppListController, aura::FocusObserver implementation:
386 409
387 void AppListController::OnWindowFocused(aura::Window* gained_focus, 410 void AppListController::OnWindowFocused(aura::Window* gained_focus,
388 aura::Window* lost_focus) { 411 aura::Window* lost_focus) {
389 if (view_ && is_visible_) { 412 if (view_ && is_visible_) {
390 aura::Window* applist_window = view_->GetWidget()->GetNativeView(); 413 aura::Window* applist_window = view_->GetWidget()->GetNativeView();
391 aura::Window* applist_container = applist_window->parent(); 414 aura::Window* applist_container = applist_window->parent();
392 415
393 if (applist_container->Contains(lost_focus) && 416 if (applist_container->Contains(lost_focus) &&
394 (!gained_focus || !applist_container->Contains(gained_focus))) { 417 (!gained_focus || !applist_container->Contains(gained_focus))) {
395 SetVisible(false, applist_window); 418 Dismiss();
396 } 419 }
397 } 420 }
398 } 421 }
399 422
400 //////////////////////////////////////////////////////////////////////////////// 423 ////////////////////////////////////////////////////////////////////////////////
401 // AppListController, aura::WindowObserver implementation: 424 // AppListController, aura::WindowObserver implementation:
402 void AppListController::OnWindowBoundsChanged(aura::Window* root, 425 void AppListController::OnWindowBoundsChanged(aura::Window* root,
403 const gfx::Rect& old_bounds, 426 const gfx::Rect& old_bounds,
404 const gfx::Rect& new_bounds) { 427 const gfx::Rect& new_bounds) {
405 UpdateBounds(); 428 UpdateBounds();
406 } 429 }
407 430
408 //////////////////////////////////////////////////////////////////////////////// 431 ////////////////////////////////////////////////////////////////////////////////
409 // AppListController, ui::ImplicitAnimationObserver implementation: 432 // AppListController, ui::ImplicitAnimationObserver implementation:
410 433
411 void AppListController::OnImplicitAnimationsCompleted() { 434 void AppListController::OnImplicitAnimationsCompleted() {
412 if (is_visible_ ) 435 if (is_visible_ )
413 view_->GetWidget()->Activate(); 436 view_->GetWidget()->Activate();
414 else 437 else
415 view_->GetWidget()->Close(); 438 view_->GetWidget()->Close();
416 } 439 }
417 440
418 //////////////////////////////////////////////////////////////////////////////// 441 ////////////////////////////////////////////////////////////////////////////////
419 // AppListController, views::WidgetObserver implementation: 442 // AppListController, views::WidgetObserver implementation:
420 443
421 void AppListController::OnWidgetDestroying(views::Widget* widget) { 444 void AppListController::OnWidgetDestroying(views::Widget* widget) {
422 DCHECK(view_->GetWidget() == widget); 445 DCHECK(view_->GetWidget() == widget);
423 if (is_visible_) 446 if (is_visible_)
424 SetVisible(false, widget->GetNativeView()); 447 Dismiss();
425 ResetView(); 448 ResetView();
426 } 449 }
427 450
428 //////////////////////////////////////////////////////////////////////////////// 451 ////////////////////////////////////////////////////////////////////////////////
429 // AppListController, keyboard::KeyboardControllerObserver implementation: 452 // AppListController, keyboard::KeyboardControllerObserver implementation:
430 453
431 void AppListController::OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) { 454 void AppListController::OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) {
432 UpdateBounds(); 455 UpdateBounds();
433 } 456 }
434 457
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 } else if (should_snap_back_) { 516 } else if (should_snap_back_) {
494 should_snap_back_ = false; 517 should_snap_back_ = false;
495 ui::ScopedLayerAnimationSettings animation(widget_animator); 518 ui::ScopedLayerAnimationSettings animation(widget_animator);
496 animation.SetTransitionDuration(base::TimeDelta::FromMilliseconds( 519 animation.SetTransitionDuration(base::TimeDelta::FromMilliseconds(
497 app_list::kOverscrollPageTransitionDurationMs)); 520 app_list::kOverscrollPageTransitionDurationMs));
498 widget->SetBounds(view_bounds_); 521 widget->SetBounds(view_bounds_);
499 } 522 }
500 } 523 }
501 524
502 } // namespace ash 525 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/app_list_controller.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698