diff options
author | jackhou <jackhou@chromium.org> | 2015-05-12 17:11:49 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-05-13 00:12:08 +0000 |
commit | 37346b4ed633003ea14783395a491688ba8f8731 (patch) | |
tree | e2360c30f7bf5379ce180ee72ae03018d2af5adf /ui/views | |
parent | eb352102b84eacd70b14fb51566760a4077f8050 (diff) | |
download | chromium_src-37346b4ed633003ea14783395a491688ba8f8731.zip chromium_src-37346b4ed633003ea14783395a491688ba8f8731.tar.gz chromium_src-37346b4ed633003ea14783395a491688ba8f8731.tar.bz2 |
[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}
Diffstat (limited to 'ui/views')
-rw-r--r-- | ui/views/widget/native_widget_mac.mm | 13 | ||||
-rw-r--r-- | ui/views/widget/widget_unittest.cc | 10 |
2 files changed, 19 insertions, 4 deletions
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 |