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

Side by Side Diff: chrome/browser/ui/views/apps/chrome_native_app_window_views_aura.cc

Issue 1056793006: [Docking] Persists docked state on Chrome OS (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: [Docking] Makes docked state persistent on Chrome OS (comments) Created 5 years, 7 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #include "chrome/browser/ui/views/apps/chrome_native_app_window_views_aura.h" 5 #include "chrome/browser/ui/views/apps/chrome_native_app_window_views_aura.h"
6 6
7 #include "apps/ui/views/app_window_frame_view.h" 7 #include "apps/ui/views/app_window_frame_view.h"
8 #include "ash/ash_constants.h" 8 #include "ash/ash_constants.h"
9 #include "ash/frame/custom_frame_view_ash.h" 9 #include "ash/frame/custom_frame_view_ash.h"
10 #include "ash/screen_util.h" 10 #include "ash/screen_util.h"
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 }; 111 };
112 112
113 } // namespace 113 } // namespace
114 114
115 ChromeNativeAppWindowViewsAura::ChromeNativeAppWindowViewsAura() { 115 ChromeNativeAppWindowViewsAura::ChromeNativeAppWindowViewsAura() {
116 } 116 }
117 117
118 ChromeNativeAppWindowViewsAura::~ChromeNativeAppWindowViewsAura() { 118 ChromeNativeAppWindowViewsAura::~ChromeNativeAppWindowViewsAura() {
119 } 119 }
120 120
121 void ChromeNativeAppWindowViewsAura::InitializeWindow(
122 AppWindow* app_window,
123 const AppWindow::CreateParams& create_params) {
124 ChromeNativeAppWindowViews::InitializeWindow(app_window, create_params);
125 // Restore docked state on ash desktop and ignore it elsewhere.
126 if (create_params.state == ui::SHOW_STATE_DOCKED &&
127 chrome::GetHostDesktopTypeForNativeWindow(widget()->GetNativeWindow()) ==
128 chrome::HOST_DESKTOP_TYPE_ASH) {
129 widget()->GetNativeWindow()->SetProperty(aura::client::kShowStateKey,
130 create_params.state);
131 }
132 }
133
121 void ChromeNativeAppWindowViewsAura::OnBeforeWidgetInit( 134 void ChromeNativeAppWindowViewsAura::OnBeforeWidgetInit(
122 const AppWindow::CreateParams& create_params, 135 const AppWindow::CreateParams& create_params,
123 views::Widget::InitParams* init_params, 136 views::Widget::InitParams* init_params,
124 views::Widget* widget) { 137 views::Widget* widget) {
125 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) 138 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
126 std::string app_name = web_app::GenerateApplicationNameFromExtensionId( 139 std::string app_name = web_app::GenerateApplicationNameFromExtensionId(
127 app_window()->extension_id()); 140 app_window()->extension_id());
128 // Set up a custom WM_CLASS for app windows. This allows task switchers in 141 // Set up a custom WM_CLASS for app windows. This allows task switchers in
129 // X11 environments to distinguish them from main browser windows. 142 // X11 environments to distinguish them from main browser windows.
130 init_params->wm_class_name = web_app::GetWMClassFromAppName(app_name); 143 init_params->wm_class_name = web_app::GetWMClassFromAppName(app_name);
131 init_params->wm_class_class = shell_integration_linux::GetProgramClassName(); 144 init_params->wm_class_class = shell_integration_linux::GetProgramClassName();
132 const char kX11WindowRoleApp[] = "app"; 145 const char kX11WindowRoleApp[] = "app";
133 init_params->wm_role_name = std::string(kX11WindowRoleApp); 146 init_params->wm_role_name = std::string(kX11WindowRoleApp);
134 #endif 147 #endif
135 148
136 ChromeNativeAppWindowViews::OnBeforeWidgetInit(create_params, init_params, 149 ChromeNativeAppWindowViews::OnBeforeWidgetInit(create_params, init_params,
137 widget); 150 widget);
138 151
139 #if defined(OS_CHROMEOS) 152 #if defined(OS_CHROMEOS)
140 if (create_params.is_ime_window) { 153 if (create_params.is_ime_window) {
141 // Puts ime windows into ime window container. 154 // Puts ime windows into ime window container.
142 init_params->parent = 155 init_params->parent =
143 ash::Shell::GetContainer(ash::Shell::GetPrimaryRootWindow(), 156 ash::Shell::GetContainer(ash::Shell::GetPrimaryRootWindow(),
144 ash::kShellWindowId_ImeWindowParentContainer); 157 ash::kShellWindowId_ImeWindowParentContainer);
145 } 158 }
146 #endif 159 #endif
147 } 160 }
148 161
149 void ChromeNativeAppWindowViewsAura::OnBeforePanelWidgetInit( 162 void ChromeNativeAppWindowViewsAura::OnBeforePanelWidgetInit(
163 bool use_default_bounds,
150 views::Widget::InitParams* init_params, 164 views::Widget::InitParams* init_params,
151 views::Widget* widget) { 165 views::Widget* widget) {
152 ChromeNativeAppWindowViews::OnBeforePanelWidgetInit(init_params, widget); 166 ChromeNativeAppWindowViews::OnBeforePanelWidgetInit(use_default_bounds,
167 init_params,
168 widget);
153 169
154 if (ash::Shell::HasInstance()) { 170 if (ash::Shell::HasInstance() && use_default_bounds) {
155 // Open a new panel on the target root. 171 // Open a new panel on the target root.
156 init_params->bounds = ash::ScreenUtil::ConvertRectToScreen( 172 init_params->bounds = ash::ScreenUtil::ConvertRectToScreen(
157 ash::Shell::GetTargetRootWindow(), gfx::Rect(GetPreferredSize())); 173 ash::Shell::GetTargetRootWindow(), gfx::Rect(GetPreferredSize()));
158 } 174 }
159 } 175 }
160 176
161 apps::AppWindowFrameView* 177 apps::AppWindowFrameView*
162 ChromeNativeAppWindowViewsAura::CreateNonStandardAppFrame() { 178 ChromeNativeAppWindowViewsAura::CreateNonStandardAppFrame() {
163 apps::AppWindowFrameView* frame = 179 apps::AppWindowFrameView* frame =
164 ChromeNativeAppWindowViews::CreateNonStandardAppFrame(); 180 ChromeNativeAppWindowViews::CreateNonStandardAppFrame();
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 if (IsFullscreen()) { 232 if (IsFullscreen()) {
217 if (immersive_fullscreen_controller_.get() && 233 if (immersive_fullscreen_controller_.get() &&
218 immersive_fullscreen_controller_->IsEnabled()) { 234 immersive_fullscreen_controller_->IsEnabled()) {
219 // Restore windows which were previously in immersive fullscreen to 235 // Restore windows which were previously in immersive fullscreen to
220 // maximized. Restoring the window to a different fullscreen type 236 // maximized. Restoring the window to a different fullscreen type
221 // makes for a bad experience. 237 // makes for a bad experience.
222 return ui::SHOW_STATE_MAXIMIZED; 238 return ui::SHOW_STATE_MAXIMIZED;
223 } 239 }
224 return ui::SHOW_STATE_FULLSCREEN; 240 return ui::SHOW_STATE_FULLSCREEN;
225 } 241 }
242 if (widget()->GetNativeWindow()->GetProperty(aura::client::kShowStateKey) ==
243 ui::SHOW_STATE_DOCKED) {
244 return ui::SHOW_STATE_DOCKED;
245 }
226 } 246 }
227 // Whitelist states to return so that invalid and transient states 247 // Whitelist states to return so that invalid and transient states
228 // are not saved and used to restore windows when they are recreated. 248 // are not saved and used to restore windows when they are recreated.
229 switch (restore_state) { 249 switch (restore_state) {
230 case ui::SHOW_STATE_NORMAL: 250 case ui::SHOW_STATE_NORMAL:
231 case ui::SHOW_STATE_MAXIMIZED: 251 case ui::SHOW_STATE_MAXIMIZED:
232 case ui::SHOW_STATE_FULLSCREEN: 252 case ui::SHOW_STATE_FULLSCREEN:
233 return restore_state; 253 return restore_state;
234 254
235 case ui::SHOW_STATE_DEFAULT: 255 case ui::SHOW_STATE_DEFAULT:
236 case ui::SHOW_STATE_MINIMIZED: 256 case ui::SHOW_STATE_MINIMIZED:
237 case ui::SHOW_STATE_INACTIVE: 257 case ui::SHOW_STATE_INACTIVE:
258 case ui::SHOW_STATE_DOCKED:
238 case ui::SHOW_STATE_END: 259 case ui::SHOW_STATE_END:
239 return ui::SHOW_STATE_NORMAL; 260 return ui::SHOW_STATE_NORMAL;
240 } 261 }
241 262
242 return ui::SHOW_STATE_NORMAL; 263 return ui::SHOW_STATE_NORMAL;
243 } 264 }
244 265
245 bool ChromeNativeAppWindowViewsAura::IsAlwaysOnTop() const { 266 bool ChromeNativeAppWindowViewsAura::IsAlwaysOnTop() const {
246 return app_window()->window_type_is_panel() 267 return app_window()->window_type_is_panel()
247 ? ash::wm::GetWindowState(widget()->GetNativeWindow()) 268 ? ash::wm::GetWindowState(widget()->GetNativeWindow())
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 ChromeNativeAppWindowViews::UpdateShape(region.Pass()); 367 ChromeNativeAppWindowViews::UpdateShape(region.Pass());
347 368
348 aura::Window* native_window = widget()->GetNativeWindow(); 369 aura::Window* native_window = widget()->GetNativeWindow();
349 if (shape() && !had_shape) { 370 if (shape() && !had_shape) {
350 native_window->SetEventTargeter(scoped_ptr<ui::EventTargeter>( 371 native_window->SetEventTargeter(scoped_ptr<ui::EventTargeter>(
351 new ShapedAppWindowTargeter(native_window, this))); 372 new ShapedAppWindowTargeter(native_window, this)));
352 } else if (!shape() && had_shape) { 373 } else if (!shape() && had_shape) {
353 native_window->SetEventTargeter(scoped_ptr<ui::EventTargeter>()); 374 native_window->SetEventTargeter(scoped_ptr<ui::EventTargeter>());
354 } 375 }
355 } 376 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/apps/chrome_native_app_window_views_aura.h ('k') | chrome/common/extensions/api/windows.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698