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

Unified Diff: chrome/browser/app_controller_mac.mm

Issue 6625025: [Mac] Confirm-to-Quit: Wait for a KeyUp event if the user held Cmd+Q on the second tap. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 9 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/ui/cocoa/confirm_quit_panel_controller.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/app_controller_mac.mm
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm
index fca66bb897500dd88a933d592d7dae6e28271602..bde0867539e61cab5632574f5851f19c46d14e7f 100644
--- a/chrome/browser/app_controller_mac.mm
+++ b/chrome/browser/app_controller_mac.mm
@@ -285,99 +285,12 @@ void RecordLastRunAppBundlePath() {
// invocation, use the special sauce to prevent accidental quitting.
// http://dev.chromium.org/developers/design-documents/confirm-to-quit-experiment
- // How long the user must hold down Cmd+Q to confirm the quit.
- const NSTimeInterval kTimeToConfirmQuit = 1.5;
- // Leeway between the |targetDate| and the current time that will confirm a
- // quit.
- const NSTimeInterval kTimeDeltaFuzzFactor = 1.0;
- // Duration of the window fade out animation.
- const NSTimeInterval kWindowFadeAnimationDuration = 0.2;
-
// This logic is only for keyboard-initiated quits.
- NSEvent* currentEvent = [app currentEvent];
- if ([currentEvent type] != NSKeyDown)
- return NSTerminateNow;
- ui::AcceleratorCocoa currentEventAccelerator([currentEvent characters],
- [currentEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask);
- if ([ConfirmQuitPanelController quitAccelerator] != currentEventAccelerator)
- return NSTerminateNow;
-
- // If this is the second of two such attempts to quit within a certain time
- // interval, then just quit.
- // Time of last quit attempt, if any.
- static NSDate* lastQuitAttempt; // Initially nil, as it's static.
- NSDate* timeNow = [NSDate date];
- if (lastQuitAttempt &&
- [timeNow timeIntervalSinceDate:lastQuitAttempt] < kTimeDeltaFuzzFactor) {
- return NSTerminateNow;
- } else {
- [lastQuitAttempt release]; // Harmless if already nil.
- lastQuitAttempt = [timeNow retain]; // Record this attempt for next time.
- }
-
- // Show the info panel that explains what the user must to do confirm quit.
- [[ConfirmQuitPanelController sharedController] showWindow:self];
-
- // Spin a nested run loop until the |targetDate| is reached or a KeyUp event
- // is sent.
- NSDate* targetDate =
- [NSDate dateWithTimeIntervalSinceNow:kTimeToConfirmQuit];
- BOOL willQuit = NO;
- NSEvent* nextEvent = nil;
- do {
- // Dequeue events until a key up is received.
- nextEvent = [app nextEventMatchingMask:NSKeyUpMask
- untilDate:nil
- inMode:NSEventTrackingRunLoopMode
- dequeue:YES];
-
- // Wait for the time expiry to happen. Once past the hold threshold,
- // commit to quitting and hide all the open windows.
- if (!willQuit) {
- NSDate* now = [NSDate date];
- NSTimeInterval difference = [targetDate timeIntervalSinceDate:now];
- if (difference < kTimeDeltaFuzzFactor) {
- willQuit = YES;
-
- // At this point, the quit has been confirmed and windows should all
- // fade out to convince the user to release the key combo to finalize
- // the quit.
- [NSAnimationContext beginGrouping];
- [[NSAnimationContext currentContext] setDuration:
- kWindowFadeAnimationDuration];
- for (NSWindow* aWindow in [app windows]) {
- // Windows that are set to animate and have a delegate do not
- // expect to be animated by other things and could result in an
- // invalid state. If a window is set up like so, just force the
- // alpha value to 0. Otherwise, animate all pretty and stuff.
- if (![[aWindow animationForKey:@"alphaValue"] delegate]) {
- [[aWindow animator] setAlphaValue:0.0];
- } else {
- [aWindow setAlphaValue:0.0];
- }
- }
- [NSAnimationContext endGrouping];
- }
- }
- } while (!nextEvent);
-
- // The user has released the key combo. Discard any events (i.e. the
- // repeated KeyDown Cmd+Q).
- [app discardEventsMatchingMask:NSAnyEventMask beforeEvent:nextEvent];
-
- if (willQuit) {
- // The user held down the combination long enough that quitting should
- // happen.
+ if (![ConfirmQuitPanelController eventTriggersFeature:[app currentEvent]])
return NSTerminateNow;
- } else {
- // Slowly fade the confirm window out in case the user doesn't
- // understand what they have to do to quit.
- [[ConfirmQuitPanelController sharedController] dismissPanel];
- return NSTerminateCancel;
- }
- // Default case: terminate.
- return NSTerminateNow;
+ return [[ConfirmQuitPanelController sharedController]
+ runModalLoopForApplication:app];
}
// Called when the app is shutting down. Clean-up as appropriate.
« no previous file with comments | « no previous file | chrome/browser/ui/cocoa/confirm_quit_panel_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698