summaryrefslogtreecommitdiffstats
path: root/ui/views
diff options
context:
space:
mode:
authorjackhou <jackhou@chromium.org>2015-05-12 17:11:49 -0700
committerCommit bot <commit-bot@chromium.org>2015-05-13 00:12:08 +0000
commit37346b4ed633003ea14783395a491688ba8f8731 (patch)
treee2360c30f7bf5379ce180ee72ae03018d2af5adf /ui/views
parenteb352102b84eacd70b14fb51566760a4077f8050 (diff)
downloadchromium_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.mm13
-rw-r--r--ui/views/widget/widget_unittest.cc10
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