diff --git a/src/api/window/window.cc b/src/api/window/window.cc index 5d54d02e20..448a298536 100644 --- a/src/api/window/window.cc +++ b/src/api/window/window.cc @@ -255,6 +255,10 @@ void Window::Call(const std::string& method, bool show; if (arguments.GetBoolean(0, &show)) shell_->window()->SetShowInTaskbar(show); + } else if (method == "SetVisibleOnAllWorkspaces") { + bool all_workspaces; + if (arguments.GetBoolean(0, &all_workspaces)) + shell_->window()->SetVisibleOnAllWorkspaces(all_workspaces); } else if (method == "MoveTo") { int x, y; if (arguments.GetInteger(0, &x) && diff --git a/src/api/window_bindings.js b/src/api/window_bindings.js index 570e8094c6..ff640131f1 100644 --- a/src/api/window_bindings.js +++ b/src/api/window_bindings.js @@ -407,6 +407,10 @@ Window.prototype.setShowInTaskbar = function(flag) { CallObjectMethod(this, 'SetShowInTaskbar', [ flag ]); } +Window.prototype.setVisibleOnAllWorkspaces = function(flag) { + CallObjectMethod(this, 'SetVisibleOnAllWorkspaces', [ Boolean(flag) ]); +} + Window.prototype.requestAttention = function(flash) { if (typeof flash == 'boolean') { // boolean true is redirected as -1 value diff --git a/src/browser/native_window.cc b/src/browser/native_window.cc index 548e2c763b..1dc2be2068 100644 --- a/src/browser/native_window.cc +++ b/src/browser/native_window.cc @@ -122,6 +122,10 @@ void NativeWindow::InitFromManifest(base::DictionaryValue* manifest) { !showInTaskbar) { SetShowInTaskbar(false); } + bool all_workspaces; + if (manifest->GetBoolean(switches::kmVisibleOnAllWorkspaces, &all_workspaces) && all_workspaces) { + SetVisibleOnAllWorkspaces(true); + } bool fullscreen; if (manifest->GetBoolean(switches::kmFullscreen, &fullscreen) && fullscreen) { SetFullscreen(true); diff --git a/src/browser/native_window.h b/src/browser/native_window.h index b01a830a23..2ae69b9dd1 100644 --- a/src/browser/native_window.h +++ b/src/browser/native_window.h @@ -95,6 +95,7 @@ class NativeWindow { virtual void SetResizable(bool resizable) = 0; virtual void SetAlwaysOnTop(bool top) = 0; virtual void SetShowInTaskbar(bool show = true) = 0; + virtual void SetVisibleOnAllWorkspaces(bool all_workspaces) = 0; virtual void SetPosition(const std::string& position) = 0; virtual void SetPosition(const gfx::Point& position) = 0; virtual gfx::Point GetPosition() = 0; diff --git a/src/browser/native_window_aura.cc b/src/browser/native_window_aura.cc index be5e55942e..3e4bad404f 100644 --- a/src/browser/native_window_aura.cc +++ b/src/browser/native_window_aura.cc @@ -471,6 +471,10 @@ void NativeWindowAura::SetAlwaysOnTop(bool top) { window_->SetAlwaysOnTop(top); } +void NativeWindowAura::void NativeWindowAura::SetVisibleOnAllWorkspaces(bool all_workspaces) { + // @TODO @mrfabbri NOT IMPLEMENTED +} + void NativeWindowAura::OnWidgetBoundsChanged(views::Widget* widget, const gfx::Rect& new_bounds) { int w = new_bounds.width(); int h = new_bounds.height(); diff --git a/src/browser/native_window_aura.h b/src/browser/native_window_aura.h index b3d7585ca2..e14338addc 100644 --- a/src/browser/native_window_aura.h +++ b/src/browser/native_window_aura.h @@ -85,6 +85,7 @@ class NativeWindowAura : public NativeWindow, virtual void SetResizable(bool resizable) OVERRIDE; virtual void SetAlwaysOnTop(bool top) OVERRIDE; virtual void SetShowInTaskbar(bool show = true) OVERRIDE; + virtual void SetVisibleOnAllWorkspaces(bool all_workspaces) OVERRIDE; virtual void SetPosition(const std::string& position) OVERRIDE; virtual void SetPosition(const gfx::Point& position) OVERRIDE; virtual gfx::Point GetPosition() OVERRIDE; diff --git a/src/browser/native_window_gtk.cc b/src/browser/native_window_gtk.cc index 08e93fa86a..7ed7376ac1 100644 --- a/src/browser/native_window_gtk.cc +++ b/src/browser/native_window_gtk.cc @@ -277,6 +277,10 @@ void NativeWindowGtk::SetAlwaysOnTop(bool top) { gtk_window_set_keep_above(window_, top ? TRUE : FALSE); } +void NativeWindowGtk::SetVisibleOnAllWorkspaces(bool all_workspaces) { + // @TODO @mrfabbri NOT IMPLEMENTED +} + void NativeWindowGtk::SetShowInTaskbar(bool show) { gtk_window_set_skip_taskbar_hint(window_, show ? FALSE : TRUE); } diff --git a/src/browser/native_window_gtk.h b/src/browser/native_window_gtk.h index f9265432e0..1d90ced40f 100644 --- a/src/browser/native_window_gtk.h +++ b/src/browser/native_window_gtk.h @@ -55,6 +55,7 @@ class NativeWindowGtk : public NativeWindow { virtual void SetResizable(bool resizable) OVERRIDE; virtual void SetAlwaysOnTop(bool top) OVERRIDE; virtual void SetShowInTaskbar(bool show = true) OVERRIDE; + virtual void SetVisibleOnAllWorkspaces(bool all_workspaces) OVERRIDE; virtual void SetPosition(const std::string& position) OVERRIDE; virtual void SetPosition(const gfx::Point& position) OVERRIDE; virtual gfx::Point GetPosition() OVERRIDE; diff --git a/src/browser/native_window_mac.h b/src/browser/native_window_mac.h index 28f05080e3..d297f0646d 100644 --- a/src/browser/native_window_mac.h +++ b/src/browser/native_window_mac.h @@ -59,6 +59,7 @@ class NativeWindowCocoa : public NativeWindow { virtual void SetResizable(bool resizable) OVERRIDE; virtual void SetAlwaysOnTop(bool top) OVERRIDE; virtual void SetShowInTaskbar(bool show = true) OVERRIDE; + virtual void SetVisibleOnAllWorkspaces(bool all_workspaces) OVERRIDE; virtual void SetPosition(const std::string& position) OVERRIDE; virtual void SetPosition(const gfx::Point& position) OVERRIDE; virtual gfx::Point GetPosition() OVERRIDE; diff --git a/src/browser/native_window_mac.mm b/src/browser/native_window_mac.mm index b821fdb02b..a5fb580261 100644 --- a/src/browser/native_window_mac.mm +++ b/src/browser/native_window_mac.mm @@ -633,6 +633,10 @@ - (void)drawRect:(NSRect)dirtyRect { [window() setLevel:(top ? NSFloatingWindowLevel : NSNormalWindowLevel)]; } +void NativeWindowCocoa::SetVisibleOnAllWorkspaces(bool all_workspaces) { + // @TODO @mrfabbri NOT IMPLEMENTED +} + void NativeWindowCocoa::SetShowInTaskbar(bool show) { ProcessSerialNumber psn = { 0, kCurrentProcess }; if (!show) { diff --git a/src/common/shell_switches.cc b/src/common/shell_switches.cc index be6bb8c1ed..1f6c84d36e 100644 --- a/src/common/shell_switches.cc +++ b/src/common/shell_switches.cc @@ -83,6 +83,9 @@ const char kmKiosk[] = "kiosk"; // Make windows stays on the top of all other windows. const char kmAlwaysOnTop[] = "always-on-top"; +// Make window visible on all workspaces. +const char kmVisibleOnAllWorkspaces[] = "visible-on-all-workspaces"; + // Whether we should support WebGL. const char kmWebgl[] = "webgl"; diff --git a/src/common/shell_switches.h b/src/common/shell_switches.h index 2eaf0d2814..686f2fe4f0 100644 --- a/src/common/shell_switches.h +++ b/src/common/shell_switches.h @@ -53,6 +53,7 @@ extern const char kmFullscreen[]; extern const char kmShowInTaskbar[]; extern const char kmKiosk[]; extern const char kmAlwaysOnTop[]; +extern const char kmVisibleOnAllWorkspaces[]; extern const char kmInitialFocus[]; extern const char kmWebgl[];