• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CHROME_BROWSER_UI_COCOA_CONFIRM_QUIT_PANEL_CONTROLLER_H_
6 #define CHROME_BROWSER_UI_COCOA_CONFIRM_QUIT_PANEL_CONTROLLER_H_
7 
8 #import <Cocoa/Cocoa.h>
9 
10 #import "base/mac/cocoa_protocols.h"
11 #include "ui/base/models/accelerator_cocoa.h"
12 
13 @class ConfirmQuitFrameView;
14 
15 namespace confirm_quit {
16 
17 enum ConfirmQuitMetric {
18   // The user quit without having the feature enabled.
19   kNoConfirm = 0,
20   // The user held Cmd+Q for the entire duration.
21   kHoldDuration,
22   // The user hit Cmd+Q twice for the accelerated path.
23   kDoubleTap,
24   // The user tapped Cmd+Q once and then held it.
25   kTapHold,
26 
27   kSampleCount
28 };
29 
30 // Records the histogram value for the above metric.
31 void RecordHistogram(ConfirmQuitMetric sample);
32 
33 }  // namespace confirm_quit
34 
35 // The ConfirmQuitPanelController manages the black HUD window that tells users
36 // to "Hold Cmd+Q to Quit".
37 @interface ConfirmQuitPanelController : NSWindowController<NSWindowDelegate> {
38  @private
39   // The content view of the window that this controller manages.
40   ConfirmQuitFrameView* contentView_;  // Weak, owned by the window.
41 }
42 
43 // Returns a singleton instance of the Controller. This will create one if it
44 // does not currently exist.
45 + (ConfirmQuitPanelController*)sharedController;
46 
47 // Checks whether the |event| should trigger the feature.
48 + (BOOL)eventTriggersFeature:(NSEvent*)event;
49 
50 // Runs a modal loop that brings up the panel and handles the logic for if and
51 // when to terminate. Returns NSApplicationTerminateReply for use in
52 // -[NSApplicationDelegate applicationShouldTerminate:].
53 - (NSApplicationTerminateReply)runModalLoopForApplication:(NSApplication*)app;
54 
55 // Shows the window.
56 - (void)showWindow:(id)sender;
57 
58 // If the user did not confirm quit, send this message to give the user
59 // instructions on how to quit.
60 - (void)dismissPanel;
61 
62 // Returns the Accelerator for the Quit menu item.
63 + (ui::AcceleratorCocoa)quitAccelerator;
64 
65 // Returns a string representation fit for display of |+quitAccelerator|.
66 + (NSString*)keyCommandString;
67 
68 @end
69 
70 @interface ConfirmQuitPanelController (UnitTesting)
71 + (NSString*)keyCombinationForAccelerator:(const ui::AcceleratorCocoa&)item;
72 @end
73 
74 #endif  // CHROME_BROWSER_UI_COCOA_CONFIRM_QUIT_PANEL_CONTROLLER_H_
75