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

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

Issue 26427002: Add always-on-top property to app windows (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge Created 7 years, 2 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 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 #include "chrome/browser/ui/views/apps/native_app_window_views.h" 5 #include "chrome/browser/ui/views/apps/native_app_window_views.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/path_service.h" 9 #include "base/path_service.h"
10 #include "base/threading/sequenced_worker_pool.h" 10 #include "base/threading/sequenced_worker_pool.h"
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 std::string app_name = 162 std::string app_name =
163 web_app::GenerateApplicationNameFromExtensionId(extension()->id()); 163 web_app::GenerateApplicationNameFromExtensionId(extension()->id());
164 164
165 views::Widget::InitParams init_params(views::Widget::InitParams::TYPE_WINDOW); 165 views::Widget::InitParams init_params(views::Widget::InitParams::TYPE_WINDOW);
166 init_params.delegate = this; 166 init_params.delegate = this;
167 init_params.remove_standard_frame = ShouldUseChromeStyleFrame(); 167 init_params.remove_standard_frame = ShouldUseChromeStyleFrame();
168 init_params.use_system_default_icon = true; 168 init_params.use_system_default_icon = true;
169 // TODO(erg): Conceptually, these are toplevel windows, but we theoretically 169 // TODO(erg): Conceptually, these are toplevel windows, but we theoretically
170 // could plumb context through to here in some cases. 170 // could plumb context through to here in some cases.
171 init_params.top_level = true; 171 init_params.top_level = true;
172 init_params.keep_on_top = create_params.always_on_top;
172 gfx::Rect window_bounds = create_params.bounds; 173 gfx::Rect window_bounds = create_params.bounds;
173 bool position_specified = 174 bool position_specified =
174 window_bounds.x() != INT_MIN && window_bounds.y() != INT_MIN; 175 window_bounds.x() != INT_MIN && window_bounds.y() != INT_MIN;
175 if (position_specified && !window_bounds.IsEmpty()) 176 if (position_specified && !window_bounds.IsEmpty())
176 init_params.bounds = window_bounds; 177 init_params.bounds = window_bounds;
177 178
178 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) 179 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
179 // Set up a custom WM_CLASS for app windows. This allows task switchers in 180 // Set up a custom WM_CLASS for app windows. This allows task switchers in
180 // X11 environments to distinguish them from main browser windows. 181 // X11 environments to distinguish them from main browser windows.
181 init_params.wm_class_name = web_app::GetWMClassFromAppName(app_name); 182 init_params.wm_class_name = web_app::GetWMClassFromAppName(app_name);
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 404
404 void NativeAppWindowViews::SetBounds(const gfx::Rect& bounds) { 405 void NativeAppWindowViews::SetBounds(const gfx::Rect& bounds) {
405 GetWidget()->SetBounds(bounds); 406 GetWidget()->SetBounds(bounds);
406 } 407 }
407 408
408 void NativeAppWindowViews::FlashFrame(bool flash) { 409 void NativeAppWindowViews::FlashFrame(bool flash) {
409 window_->FlashFrame(flash); 410 window_->FlashFrame(flash);
410 } 411 }
411 412
412 bool NativeAppWindowViews::IsAlwaysOnTop() const { 413 bool NativeAppWindowViews::IsAlwaysOnTop() const {
413 if (!shell_window_->window_type_is_panel()) 414 if (shell_window_->window_type_is_panel()) {
414 return false;
415 #if defined(USE_ASH) 415 #if defined(USE_ASH)
416 return ash::wm::GetWindowState(window_->GetNativeWindow())-> 416 return ash::wm::GetWindowState(window_->GetNativeWindow())->
417 panel_attached(); 417 panel_attached();
418 #else 418 #else
419 return true; 419 return true;
420 #endif 420 #endif
421 } else {
422 return window_->IsAlwaysOnTop();
423 }
421 } 424 }
422 425
423 gfx::Insets NativeAppWindowViews::GetFrameInsets() const { 426 gfx::Insets NativeAppWindowViews::GetFrameInsets() const {
424 if (frameless()) 427 if (frameless())
425 return gfx::Insets(); 428 return gfx::Insets();
426 429
427 // The pretend client_bounds passed in need to be large enough to ensure that 430 // The pretend client_bounds passed in need to be large enough to ensure that
428 // GetWindowBoundsForClientBounds() doesn't decide that it needs more than 431 // GetWindowBoundsForClientBounds() doesn't decide that it needs more than
429 // the specified amount of space to fit the window controls in, and return a 432 // the specified amount of space to fit the window controls in, and return a
430 // number larger than the real frame insets. Most window controls are smaller 433 // number larger than the real frame insets. Most window controls are smaller
431 // than 1000x1000px, so this should be big enough. 434 // than 1000x1000px, so this should be big enough.
432 gfx::Rect client_bounds = gfx::Rect(1000, 1000); 435 gfx::Rect client_bounds = gfx::Rect(1000, 1000);
433 gfx::Rect window_bounds = 436 gfx::Rect window_bounds =
434 window_->non_client_view()->GetWindowBoundsForClientBounds( 437 window_->non_client_view()->GetWindowBoundsForClientBounds(
435 client_bounds); 438 client_bounds);
436 return window_bounds.InsetsFrom(client_bounds); 439 return window_bounds.InsetsFrom(client_bounds);
437 } 440 }
438 441
439 bool NativeAppWindowViews::IsVisible() const { 442 bool NativeAppWindowViews::IsVisible() const {
440 return window_->IsVisible(); 443 return window_->IsVisible();
441 } 444 }
442 445
443 void NativeAppWindowViews::HideWithApp() {} 446 void NativeAppWindowViews::HideWithApp() {}
444 void NativeAppWindowViews::ShowWithApp() {} 447 void NativeAppWindowViews::ShowWithApp() {}
445 448
449 void NativeAppWindowViews::SetAlwaysOnTop(bool always_on_top) {
450 window_->SetAlwaysOnTop(always_on_top);
451 shell_window_->OnNativeWindowChanged();
452 }
453
446 gfx::NativeView NativeAppWindowViews::GetHostView() const { 454 gfx::NativeView NativeAppWindowViews::GetHostView() const {
447 return window_->GetNativeView(); 455 return window_->GetNativeView();
448 } 456 }
449 457
450 gfx::Point NativeAppWindowViews::GetDialogPosition(const gfx::Size& size) { 458 gfx::Point NativeAppWindowViews::GetDialogPosition(const gfx::Size& size) {
451 gfx::Size shell_window_size = window_->GetWindowBoundsInScreen().size(); 459 gfx::Size shell_window_size = window_->GetWindowBoundsInScreen().size();
452 return gfx::Point(shell_window_size.width() / 2 - size.width() / 2, 460 return gfx::Point(shell_window_size.width() / 2 - size.width() / 2,
453 shell_window_size.height() / 2 - size.height() / 2); 461 shell_window_size.height() / 2 - size.height() / 2);
454 } 462 }
455 463
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
791 const content::NativeWebKeyboardEvent& event) { 799 const content::NativeWebKeyboardEvent& event) {
792 unhandled_keyboard_event_handler_.HandleKeyboardEvent(event, 800 unhandled_keyboard_event_handler_.HandleKeyboardEvent(event,
793 GetFocusManager()); 801 GetFocusManager());
794 } 802 }
795 803
796 void NativeAppWindowViews::RenderViewHostChanged( 804 void NativeAppWindowViews::RenderViewHostChanged(
797 content::RenderViewHost* old_host, 805 content::RenderViewHost* old_host,
798 content::RenderViewHost* new_host) { 806 content::RenderViewHost* new_host) {
799 OnViewWasResized(); 807 OnViewWasResized();
800 } 808 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/apps/native_app_window_views.h ('k') | chrome/browser/ui/views/frame/browser_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698