| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/chrome_views_delegate.h" | 5 #include "chrome/browser/ui/views/chrome_views_delegate.h" |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
| 9 #include "base/prefs/scoped_user_pref_update.h" | 9 #include "base/prefs/scoped_user_pref_update.h" |
| 10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 bool maximized = false; | 195 bool maximized = false; |
| 196 if (dictionary) | 196 if (dictionary) |
| 197 dictionary->GetBoolean("maximized", &maximized); | 197 dictionary->GetBoolean("maximized", &maximized); |
| 198 *show_state = maximized ? ui::SHOW_STATE_MAXIMIZED : ui::SHOW_STATE_NORMAL; | 198 *show_state = maximized ? ui::SHOW_STATE_MAXIMIZED : ui::SHOW_STATE_NORMAL; |
| 199 | 199 |
| 200 #if defined(USE_ASH) | 200 #if defined(USE_ASH) |
| 201 // On Ash environment, a window won't span across displays. Adjust | 201 // On Ash environment, a window won't span across displays. Adjust |
| 202 // the bounds to fit the work area. | 202 // the bounds to fit the work area. |
| 203 gfx::NativeView window = widget->GetNativeView(); | 203 gfx::NativeView window = widget->GetNativeView(); |
| 204 if (chrome::GetHostDesktopTypeForNativeView(window) == | 204 if (chrome::GetHostDesktopTypeForNativeView(window) == |
| 205 chrome::HOST_DESKTOP_TYPE_ASH) { | 205 ui::HOST_DESKTOP_TYPE_ASH) { |
| 206 gfx::Display display = gfx::Screen::GetScreenFor(window)-> | 206 gfx::Display display = gfx::Screen::GetScreenFor(window)-> |
| 207 GetDisplayMatching(*bounds); | 207 GetDisplayMatching(*bounds); |
| 208 bounds->AdjustToFit(display.work_area()); | 208 bounds->AdjustToFit(display.work_area()); |
| 209 ash::wm::GetWindowState(window)->set_minimum_visibility(true); | 209 ash::wm::GetWindowState(window)->set_minimum_visibility(true); |
| 210 } | 210 } |
| 211 #endif | 211 #endif |
| 212 return true; | 212 return true; |
| 213 } | 213 } |
| 214 | 214 |
| 215 void ChromeViewsDelegate::NotifyAccessibilityEvent( | 215 void ChromeViewsDelegate::NotifyAccessibilityEvent( |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 #if defined(OS_WIN) | 277 #if defined(OS_WIN) |
| 278 // On desktop Linux Chrome must run in an environment that supports a variety | 278 // On desktop Linux Chrome must run in an environment that supports a variety |
| 279 // of window managers, some of which do not play nicely with parts of our UI | 279 // of window managers, some of which do not play nicely with parts of our UI |
| 280 // that have specific expectations about window sizing and placement. For this | 280 // that have specific expectations about window sizing and placement. For this |
| 281 // reason windows opened as top level (!params.child) are always constrained | 281 // reason windows opened as top level (!params.child) are always constrained |
| 282 // by the browser frame, so we can position them correctly. This has some | 282 // by the browser frame, so we can position them correctly. This has some |
| 283 // negative side effects, like dialogs being clipped by the browser frame, but | 283 // negative side effects, like dialogs being clipped by the browser frame, but |
| 284 // the side effects are not as bad as the poor window manager interactions. On | 284 // the side effects are not as bad as the poor window manager interactions. On |
| 285 // Windows however these WM interactions are not an issue, so we open windows | 285 // Windows however these WM interactions are not an issue, so we open windows |
| 286 // requested as top_level as actual top level windows on the desktop. | 286 // requested as top_level as actual top level windows on the desktop. |
| 287 use_non_toplevel_window = use_non_toplevel_window && | 287 use_non_toplevel_window = |
| 288 use_non_toplevel_window && |
| 288 (params->child || | 289 (params->child || |
| 289 chrome::GetHostDesktopTypeForNativeView(params->parent) != | 290 chrome::GetHostDesktopTypeForNativeView(params->parent) != |
| 290 chrome::HOST_DESKTOP_TYPE_NATIVE); | 291 ui::HOST_DESKTOP_TYPE_NATIVE); |
| 291 | 292 |
| 292 if (!ui::win::IsAeroGlassEnabled()) { | 293 if (!ui::win::IsAeroGlassEnabled()) { |
| 293 // If we don't have composition (either because Glass is not enabled or | 294 // If we don't have composition (either because Glass is not enabled or |
| 294 // because it was disabled at the command line), anything that requires | 295 // because it was disabled at the command line), anything that requires |
| 295 // transparency will be broken with a toplevel window, so force the use of | 296 // transparency will be broken with a toplevel window, so force the use of |
| 296 // a non toplevel window. | 297 // a non toplevel window. |
| 297 if (params->opacity == views::Widget::InitParams::TRANSLUCENT_WINDOW && | 298 if (params->opacity == views::Widget::InitParams::TRANSLUCENT_WINDOW && |
| 298 params->type != views::Widget::InitParams::TYPE_MENU) | 299 params->type != views::Widget::InitParams::TYPE_MENU) |
| 299 use_non_toplevel_window = true; | 300 use_non_toplevel_window = true; |
| 300 } else { | 301 } else { |
| 301 // If we're on Vista+ with composition enabled, then we can use toplevel | 302 // If we're on Vista+ with composition enabled, then we can use toplevel |
| 302 // windows for most things (they get blended via WS_EX_COMPOSITED, which | 303 // windows for most things (they get blended via WS_EX_COMPOSITED, which |
| 303 // allows for animation effects, but also exceeding the bounds of the parent | 304 // allows for animation effects, but also exceeding the bounds of the parent |
| 304 // window). | 305 // window). |
| 305 if (chrome::GetActiveDesktop() != chrome::HOST_DESKTOP_TYPE_ASH && | 306 if (chrome::GetActiveDesktop() != ui::HOST_DESKTOP_TYPE_ASH && |
| 306 params->parent && | 307 params->parent && |
| 307 params->type != views::Widget::InitParams::TYPE_CONTROL && | 308 params->type != views::Widget::InitParams::TYPE_CONTROL && |
| 308 params->type != views::Widget::InitParams::TYPE_WINDOW) { | 309 params->type != views::Widget::InitParams::TYPE_WINDOW) { |
| 309 // When we set this to false, we get a DesktopNativeWidgetAura from the | 310 // When we set this to false, we get a DesktopNativeWidgetAura from the |
| 310 // default case (not handled in this function). | 311 // default case (not handled in this function). |
| 311 use_non_toplevel_window = false; | 312 use_non_toplevel_window = false; |
| 312 } | 313 } |
| 313 } | 314 } |
| 314 #endif // OS_WIN | 315 #endif // OS_WIN |
| 315 #endif // USE_AURA | 316 #endif // USE_AURA |
| (...skipping 12 matching lines...) Expand all Loading... |
| 328 if (!params->parent && !params->context) | 329 if (!params->parent && !params->context) |
| 329 params->context = ash::Shell::GetPrimaryRootWindow(); | 330 params->context = ash::Shell::GetPrimaryRootWindow(); |
| 330 #elif defined(USE_AURA) | 331 #elif defined(USE_AURA) |
| 331 // While the majority of the time, context wasn't plumbed through due to the | 332 // While the majority of the time, context wasn't plumbed through due to the |
| 332 // existence of a global WindowTreeClient, if this window is toplevel, it's | 333 // existence of a global WindowTreeClient, if this window is toplevel, it's |
| 333 // possible that there is no contextual state that we can use. | 334 // possible that there is no contextual state that we can use. |
| 334 if (params->parent == NULL && params->context == NULL && !params->child) { | 335 if (params->parent == NULL && params->context == NULL && !params->child) { |
| 335 // We need to make a decision about where to place this window based on the | 336 // We need to make a decision about where to place this window based on the |
| 336 // desktop type. | 337 // desktop type. |
| 337 switch (chrome::GetActiveDesktop()) { | 338 switch (chrome::GetActiveDesktop()) { |
| 338 case chrome::HOST_DESKTOP_TYPE_NATIVE: | 339 case ui::HOST_DESKTOP_TYPE_NATIVE: |
| 339 // If we're native, we should give this window its own toplevel desktop | 340 // If we're native, we should give this window its own toplevel desktop |
| 340 // widget. | 341 // widget. |
| 341 params->native_widget = new views::DesktopNativeWidgetAura(delegate); | 342 params->native_widget = new views::DesktopNativeWidgetAura(delegate); |
| 342 break; | 343 break; |
| 343 #if defined(USE_ASH) | 344 #if defined(USE_ASH) |
| 344 case chrome::HOST_DESKTOP_TYPE_ASH: | 345 case ui::HOST_DESKTOP_TYPE_ASH: |
| 345 // If we're in ash, give this window the context of the main monitor. | 346 // If we're in ash, give this window the context of the main monitor. |
| 346 params->context = ash::Shell::GetPrimaryRootWindow(); | 347 params->context = ash::Shell::GetPrimaryRootWindow(); |
| 347 break; | 348 break; |
| 348 #endif | 349 #endif |
| 349 default: | 350 default: |
| 350 NOTREACHED(); | 351 NOTREACHED(); |
| 351 } | 352 } |
| 352 } else if (use_non_toplevel_window) { | 353 } else if (use_non_toplevel_window) { |
| 353 views::NativeWidgetAura* native_widget = | 354 views::NativeWidgetAura* native_widget = |
| 354 new views::NativeWidgetAura(delegate); | 355 new views::NativeWidgetAura(delegate); |
| 355 if (params->parent) { | 356 if (params->parent) { |
| 356 Profile* parent_profile = reinterpret_cast<Profile*>( | 357 Profile* parent_profile = reinterpret_cast<Profile*>( |
| 357 params->parent->GetNativeWindowProperty(Profile::kProfileKey)); | 358 params->parent->GetNativeWindowProperty(Profile::kProfileKey)); |
| 358 native_widget->SetNativeWindowProperty(Profile::kProfileKey, | 359 native_widget->SetNativeWindowProperty(Profile::kProfileKey, |
| 359 parent_profile); | 360 parent_profile); |
| 360 } | 361 } |
| 361 params->native_widget = native_widget; | 362 params->native_widget = native_widget; |
| 362 } else { | 363 } else { |
| 363 // TODO(erg): Once we've threaded context to everywhere that needs it, we | 364 // TODO(erg): Once we've threaded context to everywhere that needs it, we |
| 364 // should remove this check here. | 365 // should remove this check here. |
| 365 gfx::NativeView to_check = | 366 gfx::NativeView to_check = |
| 366 params->context ? params->context : params->parent; | 367 params->context ? params->context : params->parent; |
| 367 if (chrome::GetHostDesktopTypeForNativeView(to_check) == | 368 if (chrome::GetHostDesktopTypeForNativeView(to_check) == |
| 368 chrome::HOST_DESKTOP_TYPE_NATIVE) { | 369 ui::HOST_DESKTOP_TYPE_NATIVE) { |
| 369 params->native_widget = new views::DesktopNativeWidgetAura(delegate); | 370 params->native_widget = new views::DesktopNativeWidgetAura(delegate); |
| 370 } | 371 } |
| 371 } | 372 } |
| 372 #endif | 373 #endif |
| 373 } | 374 } |
| 374 | 375 |
| 375 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) | 376 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| 376 bool ChromeViewsDelegate::WindowManagerProvidesTitleBar(bool maximized) { | 377 bool ChromeViewsDelegate::WindowManagerProvidesTitleBar(bool maximized) { |
| 377 // On Ubuntu Unity, the system always provides a title bar for maximized | 378 // On Ubuntu Unity, the system always provides a title bar for maximized |
| 378 // windows. | 379 // windows. |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 434 return content::BrowserThread::GetBlockingPool(); | 435 return content::BrowserThread::GetBlockingPool(); |
| 435 } | 436 } |
| 436 | 437 |
| 437 #if !defined(USE_AURA) && !defined(USE_CHROMEOS) | 438 #if !defined(USE_AURA) && !defined(USE_CHROMEOS) |
| 438 views::Widget::InitParams::WindowOpacity | 439 views::Widget::InitParams::WindowOpacity |
| 439 ChromeViewsDelegate::GetOpacityForInitParams( | 440 ChromeViewsDelegate::GetOpacityForInitParams( |
| 440 const views::Widget::InitParams& params) { | 441 const views::Widget::InitParams& params) { |
| 441 return views::Widget::InitParams::OPAQUE_WINDOW; | 442 return views::Widget::InitParams::OPAQUE_WINDOW; |
| 442 } | 443 } |
| 443 #endif | 444 #endif |
| OLD | NEW |