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

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: Cache state of isAlwaysOnTop in widget. Fixed clobber in x11 window init. 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 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 401
401 void NativeAppWindowViews::SetBounds(const gfx::Rect& bounds) { 402 void NativeAppWindowViews::SetBounds(const gfx::Rect& bounds) {
402 GetWidget()->SetBounds(bounds); 403 GetWidget()->SetBounds(bounds);
403 } 404 }
404 405
405 void NativeAppWindowViews::FlashFrame(bool flash) { 406 void NativeAppWindowViews::FlashFrame(bool flash) {
406 window_->FlashFrame(flash); 407 window_->FlashFrame(flash);
407 } 408 }
408 409
409 bool NativeAppWindowViews::IsAlwaysOnTop() const { 410 bool NativeAppWindowViews::IsAlwaysOnTop() const {
410 if (!shell_window_->window_type_is_panel()) 411 if (shell_window_->window_type_is_panel()) {
411 return false;
412 #if defined(USE_ASH) 412 #if defined(USE_ASH)
413 return ash::wm::GetWindowState(window_->GetNativeWindow())-> 413 return ash::wm::GetWindowState(window_->GetNativeWindow())->
414 panel_attached(); 414 panel_attached();
415 #else 415 #else
416 return true; 416 return true;
417 #endif 417 #endif
418 } else {
419 return window_->IsAlwaysOnTop();
420 }
418 } 421 }
419 422
420 gfx::Insets NativeAppWindowViews::GetFrameInsets() const { 423 gfx::Insets NativeAppWindowViews::GetFrameInsets() const {
421 if (frameless()) 424 if (frameless())
422 return gfx::Insets(); 425 return gfx::Insets();
423 426
424 // The pretend client_bounds passed in need to be large enough to ensure that 427 // The pretend client_bounds passed in need to be large enough to ensure that
425 // GetWindowBoundsForClientBounds() doesn't decide that it needs more than 428 // GetWindowBoundsForClientBounds() doesn't decide that it needs more than
426 // the specified amount of space to fit the window controls in, and return a 429 // the specified amount of space to fit the window controls in, and return a
427 // number larger than the real frame insets. Most window controls are smaller 430 // number larger than the real frame insets. Most window controls are smaller
428 // than 1000x1000px, so this should be big enough. 431 // than 1000x1000px, so this should be big enough.
429 gfx::Rect client_bounds = gfx::Rect(1000, 1000); 432 gfx::Rect client_bounds = gfx::Rect(1000, 1000);
430 gfx::Rect window_bounds = 433 gfx::Rect window_bounds =
431 window_->non_client_view()->GetWindowBoundsForClientBounds( 434 window_->non_client_view()->GetWindowBoundsForClientBounds(
432 client_bounds); 435 client_bounds);
433 return window_bounds.InsetsFrom(client_bounds); 436 return window_bounds.InsetsFrom(client_bounds);
434 } 437 }
435 438
436 void NativeAppWindowViews::HideWithApp() {} 439 void NativeAppWindowViews::HideWithApp() {}
437 void NativeAppWindowViews::ShowWithApp() {} 440 void NativeAppWindowViews::ShowWithApp() {}
438 441
442 void NativeAppWindowViews::SetAlwaysOnTop(bool always_on_top) {
443 window_->SetAlwaysOnTop(always_on_top);
444 shell_window_->OnNativeWindowChanged();
445 }
446
439 gfx::NativeView NativeAppWindowViews::GetHostView() const { 447 gfx::NativeView NativeAppWindowViews::GetHostView() const {
440 return window_->GetNativeView(); 448 return window_->GetNativeView();
441 } 449 }
442 450
443 gfx::Point NativeAppWindowViews::GetDialogPosition(const gfx::Size& size) { 451 gfx::Point NativeAppWindowViews::GetDialogPosition(const gfx::Size& size) {
444 gfx::Size shell_window_size = window_->GetWindowBoundsInScreen().size(); 452 gfx::Size shell_window_size = window_->GetWindowBoundsInScreen().size();
445 return gfx::Point(shell_window_size.width() / 2 - size.width() / 2, 453 return gfx::Point(shell_window_size.width() / 2 - size.width() / 2,
446 shell_window_size.height() / 2 - size.height() / 2); 454 shell_window_size.height() / 2 - size.height() / 2);
447 } 455 }
448 456
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
784 const content::NativeWebKeyboardEvent& event) { 792 const content::NativeWebKeyboardEvent& event) {
785 unhandled_keyboard_event_handler_.HandleKeyboardEvent(event, 793 unhandled_keyboard_event_handler_.HandleKeyboardEvent(event,
786 GetFocusManager()); 794 GetFocusManager());
787 } 795 }
788 796
789 void NativeAppWindowViews::RenderViewHostChanged( 797 void NativeAppWindowViews::RenderViewHostChanged(
790 content::RenderViewHost* old_host, 798 content::RenderViewHost* old_host,
791 content::RenderViewHost* new_host) { 799 content::RenderViewHost* new_host) {
792 OnViewWasResized(); 800 OnViewWasResized();
793 } 801 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698