From 37346b4ed633003ea14783395a491688ba8f8731 Mon Sep 17 00:00:00 2001 From: jackhou Date: Tue, 12 May 2015 17:11:49 -0700 Subject: [MacViews] Implement AlwaysOnTop and VisibleOnAllWorkspaces. This works the same way as NativeAppWindowCocoa. Common code is factored out to ui/gfx/mac/nswindow_frame_controls. BUG=459877 Review URL: https://codereview.chromium.org/1105613002 Cr-Commit-Position: refs/heads/master@{#329536} --- ui/views/widget/native_widget_mac.mm | 13 +++++++++---- ui/views/widget/widget_unittest.cc | 10 ++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) (limited to 'ui/views') diff --git a/ui/views/widget/native_widget_mac.mm b/ui/views/widget/native_widget_mac.mm index bd6061f..557d498 100644 --- a/ui/views/widget/native_widget_mac.mm +++ b/ui/views/widget/native_widget_mac.mm @@ -12,6 +12,7 @@ #import "ui/base/cocoa/window_size_constants.h" #include "ui/gfx/font_list.h" #import "ui/gfx/mac/coordinate_conversion.h" +#import "ui/gfx/mac/nswindow_frame_controls.h" #include "ui/native_theme/native_theme.h" #import "ui/views/cocoa/bridged_content_view.h" #import "ui/views/cocoa/bridged_native_widget.h" @@ -83,6 +84,11 @@ void NativeWidgetMac::InitNativeWidget(const Widget::InitParams& params) { [window setReleasedWhenClosed:NO]; // Owned by scoped_nsobject. bridge_->Init(window, params); + // Only set always-on-top here if it is true since setting it may affect how + // the window is treated by Expose. + if (params.keep_on_top) + SetAlwaysOnTop(true); + delegate_->OnNativeWidgetCreated(true); bridge_->SetFocusManager(GetWidget()->GetFocusManager()); @@ -377,16 +383,15 @@ bool NativeWidgetMac::IsActive() const { } void NativeWidgetMac::SetAlwaysOnTop(bool always_on_top) { - NOTIMPLEMENTED(); + gfx::SetNSWindowAlwaysOnTop(GetNativeWindow(), always_on_top); } bool NativeWidgetMac::IsAlwaysOnTop() const { - NOTIMPLEMENTED(); - return false; + return gfx::IsNSWindowAlwaysOnTop(GetNativeWindow()); } void NativeWidgetMac::SetVisibleOnAllWorkspaces(bool always_visible) { - NOTIMPLEMENTED(); + gfx::SetNSWindowVisibleOnAllWorkspaces(GetNativeWindow(), always_visible); } void NativeWidgetMac::Maximize() { diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc index b564366..2881098 100644 --- a/ui/views/widget/widget_unittest.cc +++ b/ui/views/widget/widget_unittest.cc @@ -3433,5 +3433,15 @@ TEST_F(WidgetTest, CharMessagesAsKeyboardMessagesDoesNotCrash) { } #endif +// Test that SetAlwaysOnTop and IsAlwaysOnTop are consistent. +TEST_F(WidgetTest, AlwaysOnTop) { + Widget* widget = CreateTopLevelNativeWidget(); + EXPECT_FALSE(widget->IsAlwaysOnTop()); + widget->SetAlwaysOnTop(true); + EXPECT_TRUE(widget->IsAlwaysOnTop()); + widget->SetAlwaysOnTop(false); + EXPECT_FALSE(widget->IsAlwaysOnTop()); +} + } // namespace test } // namespace views -- cgit v1.1