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

Side by Side Diff: ui/base/cocoa/appkit_utils.mm

Issue 1588073005: Follow El Capitan Dock settings for double-click in window title bar. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Change constants to enums. Created 4 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
« no previous file with comments | « no previous file | 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 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 "ui/base/cocoa/appkit_utils.h" 5 #import "ui/base/cocoa/appkit_utils.h"
6 6
7 #include "base/mac/mac_util.h" 7 #include "base/mac/mac_util.h"
8 #include "ui/base/resource/resource_bundle.h" 8 #include "ui/base/resource/resource_bundle.h"
9 9
10 namespace { 10 namespace {
11 11
12 // Gets an NSImage given an image id. 12 // Gets an NSImage given an image id.
13 NSImage* GetImage(int image_id) { 13 NSImage* GetImage(int image_id) {
14 return ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(image_id) 14 return ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(image_id)
15 .ToNSImage(); 15 .ToNSImage();
16 } 16 }
17 17
18 // Whether windows should miniaturize on a double-click on the title bar. 18 // Double-click in window title bar actions.
19 bool ShouldWindowsMiniaturizeOnDoubleClick() { 19 enum class DoubleClickAction {
20 // We use an undocumented method in Cocoa; if it doesn't exist, default to 20 NONE,
21 // |true|. If it ever goes away, we can do (using an undocumented pref key): 21 MINIMIZE,
22 // NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 22 MAXIMIZE,
23 // return ![defaults objectForKey:@"AppleMiniaturizeOnDoubleClick"] || 23 };
24 // [defaults boolForKey:@"AppleMiniaturizeOnDoubleClick"]; 24
25 // The action to take when the user double-clicks in the window title bar.
26 DoubleClickAction WindowTitleBarDoubleClickAction() {
27 // El Capitan introduced a Dock preference to configure the window title bar
28 // double-click action (Minimize, Maximize, or nothing).
29 if (base::mac::IsOSElCapitanOrLater()) {
30 NSString* doubleClickAction = [[NSUserDefaults standardUserDefaults]
31 objectForKey:@"AppleActionOnDoubleClick"];
32
33 if ([doubleClickAction isEqualToString:@"Minimize"]) {
34 return DoubleClickAction::MINIMIZE;
35 } else if ([doubleClickAction isEqualToString:@"Maximize"]) {
36 return DoubleClickAction::MAXIMIZE;
37 }
38
39 return DoubleClickAction::NONE;
40 }
41
42 // Determine minimize using an undocumented method in Cocoa. If we're
43 // running on an earlier version of the OS that doesn't implement it,
44 // just default to the minimize action.
25 BOOL methodImplemented = 45 BOOL methodImplemented =
26 [NSWindow respondsToSelector:@selector(_shouldMiniaturizeOnDoubleClick)]; 46 [NSWindow respondsToSelector:@selector(_shouldMiniaturizeOnDoubleClick)];
27 DCHECK(methodImplemented); 47 if (!methodImplemented ||
28 return !methodImplemented || 48 [NSWindow performSelector:@selector(_shouldMiniaturizeOnDoubleClick)]) {
29 [NSWindow performSelector:@selector(_shouldMiniaturizeOnDoubleClick)]; 49 return DoubleClickAction::MINIMIZE;
50 }
51
52 // At this point _shouldMiniaturizeOnDoubleClick has returned |NO|. On
53 // Yosemite, that means a double-click should Maximize the window, and on
54 // all prior OSes a double-click should do nothing.
55 return base::mac::IsOSYosemite() ? DoubleClickAction::MAXIMIZE
56 : DoubleClickAction::NONE;
30 } 57 }
31 58
32 } // namespace 59 } // namespace
33 60
34 namespace ui { 61 namespace ui {
35 62
36 void DrawNinePartImage(NSRect frame, 63 void DrawNinePartImage(NSRect frame,
37 const NinePartImageIds& image_ids, 64 const NinePartImageIds& image_ids,
38 NSCompositingOperation operation, 65 NSCompositingOperation operation,
39 CGFloat alpha, 66 CGFloat alpha,
40 BOOL flipped) { 67 BOOL flipped) {
41 NSDrawNinePartImage(frame, 68 NSDrawNinePartImage(frame,
42 GetImage(image_ids.top_left), 69 GetImage(image_ids.top_left),
43 GetImage(image_ids.top), 70 GetImage(image_ids.top),
44 GetImage(image_ids.top_right), 71 GetImage(image_ids.top_right),
45 GetImage(image_ids.left), 72 GetImage(image_ids.left),
46 GetImage(image_ids.center), 73 GetImage(image_ids.center),
47 GetImage(image_ids.right), 74 GetImage(image_ids.right),
48 GetImage(image_ids.bottom_left), 75 GetImage(image_ids.bottom_left),
49 GetImage(image_ids.bottom), 76 GetImage(image_ids.bottom),
50 GetImage(image_ids.bottom_right), 77 GetImage(image_ids.bottom_right),
51 operation, 78 operation,
52 alpha, 79 alpha,
53 flipped); 80 flipped);
54 } 81 }
55 82
56 void WindowTitlebarReceivedDoubleClick(NSWindow* window, id sender) { 83 void WindowTitlebarReceivedDoubleClick(NSWindow* window, id sender) {
57 if (ShouldWindowsMiniaturizeOnDoubleClick()) { 84 switch (WindowTitleBarDoubleClickAction()) {
58 [window performMiniaturize:sender]; 85 case DoubleClickAction::MINIMIZE:
59 } else if (base::mac::IsOSYosemiteOrLater()) { 86 [window performMiniaturize:sender];
60 [window performZoom:sender]; 87 break;
88
89 case DoubleClickAction::MAXIMIZE:
90 [window performZoom:sender];
91 break;
92
93 case DoubleClickAction::NONE:
94 break;
61 } 95 }
62 } 96 }
63 97
64 } // namespace ui 98 } // namespace ui
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698