Index: ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc |
diff --git a/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc b/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc |
index d09dc09385c0ac2c83ed0550695eb1fb03ea0db6..3c9aa171e835653e22e5af26e481df4ef76a54ee 100644 |
--- a/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc |
+++ b/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc |
@@ -124,6 +124,7 @@ DesktopRootWindowHostX11::DesktopRootWindowHostX11( |
window_mapped_(false), |
focus_when_shown_(false), |
is_fullscreen_(false), |
+ always_on_top_(false), |
current_cursor_(ui::kCursorNull), |
native_widget_delegate_(native_widget_delegate), |
desktop_native_widget_aura_(desktop_native_widget_aura) { |
@@ -432,11 +433,16 @@ bool DesktopRootWindowHostX11::HasCapture() const { |
} |
void DesktopRootWindowHostX11::SetAlwaysOnTop(bool always_on_top) { |
+ always_on_top_ = always_on_top; |
SetWMSpecState(always_on_top, |
atom_cache_.GetAtom("_NET_WM_STATE_ABOVE"), |
None); |
} |
+bool DesktopRootWindowHostX11::IsAlwaysOnTop() const { |
+ return always_on_top_; |
+} |
+ |
void DesktopRootWindowHostX11::SetWindowTitle(const string16& title) { |
XStoreName(xdisplay_, xwindow_, UTF16ToUTF8(title).c_str()); |
} |
@@ -914,6 +920,20 @@ void DesktopRootWindowHostX11::InitX11Window( |
reinterpret_cast<unsigned char*>(&atom), 1); |
} |
+ // If the window should stay on top of other windows, add the |
+ // _NET_WM_STATE_ABOVE property. |
+ always_on_top_ = params.keep_on_top; |
+ if (always_on_top_) { |
+ Atom atom = atom_cache_.GetAtom("_NET_WM_STATE_ABOVE"); |
+ XChangeProperty (xdisplay_, |
Elliot Glaysher
2013/10/08 18:05:00
This will clobber the XChangeProperty immediately
tmdiep
2013/10/09 02:15:04
Thanks for that. Fixed.
|
+ xwindow_, |
+ atom_cache_.GetAtom("_NET_WM_STATE"), |
+ XA_ATOM, |
+ 32, |
+ PropModeAppend, |
+ reinterpret_cast<unsigned char*>(&atom), 1); |
+ } |
+ |
if (!params.wm_class_name.empty() || !params.wm_class_class.empty()) { |
ui::SetWindowClassHint( |
xdisplay_, xwindow_, params.wm_class_name, params.wm_class_class); |
@@ -1356,6 +1376,7 @@ bool DesktopRootWindowHostX11::Dispatch(const base::NativeEvent& event) { |
} |
is_fullscreen_ = HasWMSpecProperty("_NET_WM_STATE_FULLSCREEN"); |
+ always_on_top_ = HasWMSpecProperty("_NET_WM_STATE_ABOVE"); |
// Now that we have different window properties, we may need to |
// relayout the window. (The windows code doesn't need this because |