diff --git a/data/com.github.rafostar.Clapper.gschema.xml b/data/com.github.rafostar.Clapper.gschema.xml
index 18a823ff..391a1b03 100644
--- a/data/com.github.rafostar.Clapper.gschema.xml
+++ b/data/com.github.rafostar.Clapper.gschema.xml
@@ -40,6 +40,10 @@
'[]'
Data storing unfinished videos resume info
+
+ false
+ Auto stick floating window to all workspaces
+
diff --git a/src/dbus.js b/src/dbus.js
index 1840d228..55a5cbf9 100644
--- a/src/dbus.js
+++ b/src/dbus.js
@@ -19,16 +19,16 @@ let shellProxy = new ShellProxyWrapper(
Gio.DBus.session, 'org.gnome.Shell', '/org/gnome/Shell'
);
-function callMakeAbove(isAbove)
+function shellWindowEval(fn, isEnabled)
{
- const un = (isAbove) ? '' : 'un';
+ const un = (isEnabled) ? '' : 'un';
- debug('changing window keep above');
+ debug(`changing ${fn}`);
shellProxy.EvalRemote(
- `global.display.focus_window.${un}make_above()`,
+ `global.display.focus_window.${un}${fn}()`,
(out) => {
const debugMsg = (out[0])
- ? `window keep above: ${isAbove}`
+ ? `window ${fn}: ${isEnabled}`
: new Error(out[1]);
debug(debugMsg);
diff --git a/src/prefs.js b/src/prefs.js
index c780dba7..a28ce983 100644
--- a/src/prefs.js
+++ b/src/prefs.js
@@ -73,6 +73,9 @@ class ClapperBehaviourPage extends PrefsBase.Grid
this.addTitle('Resume');
this.addCheckButton('Ask to resume last unfinished video', 'resume-enabled');
+
+ this.addTitle('Floating Mode');
+ this.addCheckButton('Show on all workspaces', 'floating-stick');
}
});
diff --git a/src/revealers.js b/src/revealers.js
index 49774c81..e939b412 100644
--- a/src/revealers.js
+++ b/src/revealers.js
@@ -2,10 +2,12 @@ const { GLib, GObject, Gtk, Pango } = imports.gi;
const { HeaderBar } = imports.src.headerbar;
const Debug = imports.src.debug;
const DBus = imports.src.dbus;
+const Misc = imports.src.misc;
const REVEAL_TIME = 800;
const { debug } = Debug;
+const { settings } = Misc;
var CustomRevealer = GObject.registerClass(
class ClapperCustomRevealer extends Gtk.Revealer
@@ -266,7 +268,11 @@ class ClapperControlsRevealer extends Gtk.Revealer
widget.height_request = widget.get_height();
this.reveal_child ^= true;
- DBus.callMakeAbove(!this.reveal_child);
+ const isFloating = !this.reveal_child;
+ DBus.shellWindowEval('make_above', isFloating);
+
+ const isStick = (isFloating && settings.get_boolean('floating-stick'));
+ DBus.shellWindowEval('stick', isStick);
}
_onControlsRevealed()