| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #import "chrome/browser/ui/app_list/app_list_service_mac.h" | 5 #import "chrome/browser/ui/app_list/app_list_service_mac.h" |
| 6 | 6 |
| 7 #include <ApplicationServices/ApplicationServices.h> | 7 #include <ApplicationServices/ApplicationServices.h> |
| 8 #import <Cocoa/Cocoa.h> | 8 #import <Cocoa/Cocoa.h> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 561 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 572 [animation_ setDelegate:self]; | 572 [animation_ setDelegate:self]; |
| 573 | 573 |
| 574 if (closing) { | 574 if (closing) { |
| 575 [animation_ setAnimationCurve:NSAnimationEaseIn]; | 575 [animation_ setAnimationCurve:NSAnimationEaseIn]; |
| 576 window_.reset([window retain]); | 576 window_.reset([window retain]); |
| 577 } else { | 577 } else { |
| 578 [window setAlphaValue:0.0f]; | 578 [window setAlphaValue:0.0f]; |
| 579 [animation_ setAnimationCurve:NSAnimationEaseOut]; | 579 [animation_ setAnimationCurve:NSAnimationEaseOut]; |
| 580 window_.reset(); | 580 window_.reset(); |
| 581 } | 581 } |
| 582 // Threaded animations are buggy on Snow Leopard. See http://crbug.com/335550. | 582 // This once used a threaded animation, but AppKit would too often ignore |
| 583 // Note that in the non-threaded case, the animation won't start unless the | 583 // -[NSView canDrawConcurrently:] and just redraw whole view hierarchies on |
| 584 // UI runloop has spun up, so on <= Lion the animation will only animate if | 584 // the animation thread anyway, creating a minefield of race conditions. |
| 585 // Chrome is already running. | 585 // Non-threaded means the animation isn't as smooth and doesn't begin unless |
| 586 if (base::mac::IsOSMountainLionOrLater()) | 586 // the UI runloop has spun up (after profile loading). |
| 587 [animation_ setAnimationBlockingMode:NSAnimationNonblockingThreaded]; | 587 [animation_ setAnimationBlockingMode:NSAnimationNonblocking]; |
| 588 else | |
| 589 [animation_ setAnimationBlockingMode:NSAnimationNonblocking]; | |
| 590 | 588 |
| 591 [animation_ startAnimation]; | 589 [animation_ startAnimation]; |
| 592 } | 590 } |
| 593 | 591 |
| 594 - (void)cleanupOnUIThread { | 592 - (void)cleanupOnUIThread { |
| 595 bool closing = [self isClosing]; | 593 bool closing = [self isClosing]; |
| 596 [window_ close]; | 594 [window_ close]; |
| 597 window_.reset(); | 595 window_.reset(); |
| 598 animation_.reset(); | 596 animation_.reset(); |
| 599 | 597 |
| 600 if (closing) | 598 if (closing) |
| 601 apps::AppShimHandler::MaybeTerminate(); | 599 apps::AppShimHandler::MaybeTerminate(); |
| 602 } | 600 } |
| 603 | 601 |
| 604 - (void)animationDidEnd:(NSAnimation*)animation { | 602 - (void)animationDidEnd:(NSAnimation*)animation { |
| 605 content::BrowserThread::PostTask( | 603 content::BrowserThread::PostTask( |
| 606 content::BrowserThread::UI, | 604 content::BrowserThread::UI, |
| 607 FROM_HERE, | 605 FROM_HERE, |
| 608 base::Bind(&AppListServiceMac::WindowAnimationDidEnd, | 606 base::Bind(&AppListServiceMac::WindowAnimationDidEnd, |
| 609 base::Unretained(AppListServiceMac::GetInstance()))); | 607 base::Unretained(AppListServiceMac::GetInstance()))); |
| 610 } | 608 } |
| 611 | 609 |
| 612 @end | 610 @end |
| OLD | NEW |