OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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/cocoa/browser_window_controller_private.h" | 5 #import "chrome/browser/ui/cocoa/browser_window_controller_private.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #import "base/memory/scoped_nsobject.h" | 10 #import "base/memory/scoped_nsobject.h" |
(...skipping 17 matching lines...) Expand all Loading... |
28 #import "chrome/browser/ui/cocoa/tabs/side_tab_strip_controller.h" | 28 #import "chrome/browser/ui/cocoa/tabs/side_tab_strip_controller.h" |
29 #import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h" | 29 #import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h" |
30 #import "chrome/browser/ui/cocoa/tabs/tab_strip_view.h" | 30 #import "chrome/browser/ui/cocoa/tabs/tab_strip_view.h" |
31 #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h" | 31 #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h" |
32 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 32 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
33 #include "chrome/browser/ui/webui/ntp/new_tab_ui.h" | 33 #include "chrome/browser/ui/webui/ntp/new_tab_ui.h" |
34 #include "chrome/common/pref_names.h" | 34 #include "chrome/common/pref_names.h" |
35 #include "content/browser/renderer_host/render_widget_host_view.h" | 35 #include "content/browser/renderer_host/render_widget_host_view.h" |
36 #include "content/browser/tab_contents/tab_contents.h" | 36 #include "content/browser/tab_contents/tab_contents.h" |
37 #include "content/browser/tab_contents/tab_contents_view.h" | 37 #include "content/browser/tab_contents/tab_contents_view.h" |
| 38 #include "ui/base/ui_base_types.h" |
38 | 39 |
39 // Forward-declare symbols that are part of the 10.6 SDK. | 40 // Forward-declare symbols that are part of the 10.6 SDK. |
40 #if !defined(MAC_OS_X_VERSION_10_6) || \ | 41 #if !defined(MAC_OS_X_VERSION_10_6) || \ |
41 MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6 | 42 MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6 |
42 | 43 |
43 enum { | 44 enum { |
44 NSApplicationPresentationDefault = 0, | 45 NSApplicationPresentationDefault = 0, |
45 NSApplicationPresentationAutoHideDock = (1 << 0), | 46 NSApplicationPresentationAutoHideDock = (1 << 0), |
46 NSApplicationPresentationHideDock = (1 << 1), | 47 NSApplicationPresentationHideDock = (1 << 1), |
47 NSApplicationPresentationAutoHideMenuBar = (1 << 2), | 48 NSApplicationPresentationAutoHideMenuBar = (1 << 2), |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 [button setBordered:NO]; | 105 [button setBordered:NO]; |
105 [[button cell] setHighlightsBy:NSContentsCellMask]; | 106 [[button cell] setHighlightsBy:NSContentsCellMask]; |
106 [[button cell] setShowsStateBy:NSContentsCellMask]; | 107 [[button cell] setShowsStateBy:NSContentsCellMask]; |
107 [button setImage:[NSImage imageNamed:NSImageNameIChatTheaterTemplate]]; | 108 [button setImage:[NSImage imageNamed:NSImageNameIChatTheaterTemplate]]; |
108 [button setTarget:self]; | 109 [button setTarget:self]; |
109 [button setAction:@selector(togglePresentationModeForLionOrLater:)]; | 110 [button setAction:@selector(togglePresentationModeForLionOrLater:)]; |
110 [[[[self window] contentView] superview] addSubview:button]; | 111 [[[[self window] contentView] superview] addSubview:button]; |
111 } | 112 } |
112 | 113 |
113 - (void)saveWindowPositionIfNeeded { | 114 - (void)saveWindowPositionIfNeeded { |
114 if (browser_ != BrowserList::GetLastActive()) | 115 if (!browser_->ShouldSaveWindowPlacement()) |
115 return; | 116 return; |
116 | 117 |
117 if (!browser_->profile()->GetPrefs() || | |
118 !browser_->ShouldSaveWindowPlacement()) { | |
119 return; | |
120 } | |
121 | |
122 [self saveWindowPositionToPrefs:browser_->profile()->GetPrefs()]; | |
123 } | |
124 | |
125 - (void)saveWindowPositionToPrefs:(PrefService*)prefs { | |
126 // If we're in fullscreen mode, save the position of the regular window | 118 // If we're in fullscreen mode, save the position of the regular window |
127 // instead. | 119 // instead. |
128 NSWindow* window = [self isFullscreen] ? savedRegularWindow_ : [self window]; | 120 NSWindow* window = [self isFullscreen] ? savedRegularWindow_ : [self window]; |
129 | 121 |
130 // Window positions are stored relative to the origin of the primary monitor. | 122 // Window positions are stored relative to the origin of the primary monitor. |
131 NSRect monitorFrame = [[[NSScreen screens] objectAtIndex:0] frame]; | 123 NSRect monitorFrame = [[[NSScreen screens] objectAtIndex:0] frame]; |
132 NSScreen* windowScreen = [window screen]; | 124 NSScreen* windowScreen = [window screen]; |
133 | 125 |
134 // |windowScreen| can be nil (for example, if the monitor arrangement was | 126 // |windowScreen| can be nil (for example, if the monitor arrangement was |
135 // changed while in fullscreen mode). If we see a nil screen, return without | 127 // changed while in fullscreen mode). If we see a nil screen, return without |
136 // saving. | 128 // saving. |
137 // TODO(rohitrao): We should just not save anything for fullscreen windows. | 129 // TODO(rohitrao): We should just not save anything for fullscreen windows. |
138 // http://crbug.com/36479. | 130 // http://crbug.com/36479. |
139 if (!windowScreen) | 131 if (!windowScreen) |
140 return; | 132 return; |
141 | 133 |
142 // Start with the window's frame, which is in virtual coordinates. | 134 // Start with the window's frame, which is in virtual coordinates. |
143 // Do some y twiddling to flip the coordinate system. | 135 // Do some y twiddling to flip the coordinate system. |
144 gfx::Rect bounds(NSRectToCGRect([window frame])); | 136 gfx::Rect bounds(NSRectToCGRect([window frame])); |
145 bounds.set_y(monitorFrame.size.height - bounds.y() - bounds.height()); | 137 bounds.set_y(monitorFrame.size.height - bounds.y() - bounds.height()); |
146 | 138 |
147 // We also need to save the current work area, in flipped coordinates. | 139 // Browser::SaveWindowPlacement saves information for session restore. |
| 140 ui::WindowShowState show_state = [window isMiniaturized] ? |
| 141 ui::SHOW_STATE_MINIMIZED : ui::SHOW_STATE_NORMAL; |
| 142 browser_->SaveWindowPlacement(bounds, show_state); |
| 143 |
| 144 // Only save main window information to preferences. |
| 145 PrefService* prefs = browser_->profile()->GetPrefs(); |
| 146 if (!prefs || browser_ != BrowserList::GetLastActive()) |
| 147 return; |
| 148 |
| 149 // Save the current work area, in flipped coordinates. |
148 gfx::Rect workArea(NSRectToCGRect([windowScreen visibleFrame])); | 150 gfx::Rect workArea(NSRectToCGRect([windowScreen visibleFrame])); |
149 workArea.set_y(monitorFrame.size.height - workArea.y() - workArea.height()); | 151 workArea.set_y(monitorFrame.size.height - workArea.y() - workArea.height()); |
150 | 152 |
151 // Browser::SaveWindowPlacement is used for session restore. | |
152 if (browser_->ShouldSaveWindowPlacement()) | |
153 browser_->SaveWindowPlacement(bounds, /*maximized=*/ false); | |
154 | |
155 DictionaryPrefUpdate update(prefs, browser_->GetWindowPlacementKey().c_str()); | 153 DictionaryPrefUpdate update(prefs, browser_->GetWindowPlacementKey().c_str()); |
156 DictionaryValue* windowPreferences = update.Get(); | 154 DictionaryValue* windowPreferences = update.Get(); |
157 windowPreferences->SetInteger("left", bounds.x()); | 155 windowPreferences->SetInteger("left", bounds.x()); |
158 windowPreferences->SetInteger("top", bounds.y()); | 156 windowPreferences->SetInteger("top", bounds.y()); |
159 windowPreferences->SetInteger("right", bounds.right()); | 157 windowPreferences->SetInteger("right", bounds.right()); |
160 windowPreferences->SetInteger("bottom", bounds.bottom()); | 158 windowPreferences->SetInteger("bottom", bounds.bottom()); |
161 windowPreferences->SetBoolean("maximized", false); | 159 windowPreferences->SetBoolean("maximized", false); |
162 windowPreferences->SetBoolean("always_on_top", false); | 160 windowPreferences->SetBoolean("always_on_top", false); |
163 windowPreferences->SetInteger("work_area_left", workArea.x()); | 161 windowPreferences->SetInteger("work_area_left", workArea.x()); |
164 windowPreferences->SetInteger("work_area_top", workArea.y()); | 162 windowPreferences->SetInteger("work_area_top", workArea.y()); |
(...skipping 708 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
873 - (void)disableBarVisibilityUpdates { | 871 - (void)disableBarVisibilityUpdates { |
874 // Early escape if there's nothing to do. | 872 // Early escape if there's nothing to do. |
875 if (!barVisibilityUpdatesEnabled_) | 873 if (!barVisibilityUpdatesEnabled_) |
876 return; | 874 return; |
877 | 875 |
878 barVisibilityUpdatesEnabled_ = NO; | 876 barVisibilityUpdatesEnabled_ = NO; |
879 [presentationModeController_ cancelAnimationAndTimers]; | 877 [presentationModeController_ cancelAnimationAndTimers]; |
880 } | 878 } |
881 | 879 |
882 @end // @implementation BrowserWindowController(Private) | 880 @end // @implementation BrowserWindowController(Private) |
OLD | NEW |