1d728186db
There's not really a good reason to restrict the screen recorder to normal mode and overview, so allow it for all keybinding modes. https://bugzilla.gnome.org/show_bug.cgi?id=696200
62 lines
2.2 KiB
JavaScript
62 lines
2.2 KiB
JavaScript
|
|
const Lang = imports.lang;
|
|
const Main = imports.ui.main;
|
|
|
|
const Gio = imports.gi.Gio;
|
|
const Meta = imports.gi.Meta;
|
|
const Shell = imports.gi.Shell;
|
|
|
|
const Recorder = new Lang.Class({
|
|
Name: 'Recorder',
|
|
|
|
_init: function() {
|
|
this._recorderSettings = new Gio.Settings({ schema: 'org.gnome.shell.recorder' });
|
|
this._desktopLockdownSettings = new Gio.Settings({ schema: 'org.gnome.desktop.lockdown' });
|
|
this._bindingSettings = new Gio.Settings({ schema: 'org.gnome.shell.keybindings' });
|
|
this._recorder = null;
|
|
},
|
|
|
|
enable: function() {
|
|
Main.wm.addKeybinding('toggle-recording',
|
|
this._bindingSettings,
|
|
Meta.KeyBindingFlags.NONE,
|
|
Shell.KeyBindingMode.ALL,
|
|
Lang.bind(this, this._toggleRecorder));
|
|
},
|
|
|
|
disable: function() {
|
|
Main.wm.removeKeybinding('toggle-recording');
|
|
},
|
|
|
|
_ensureRecorder: function() {
|
|
if (this._recorder == null)
|
|
this._recorder = new Shell.Recorder({ stage: global.stage });
|
|
return this._recorder;
|
|
},
|
|
|
|
_toggleRecorder: function() {
|
|
let recorder = this._ensureRecorder();
|
|
if (recorder.is_recording()) {
|
|
recorder.close();
|
|
Meta.enable_unredirect_for_screen(global.screen);
|
|
} else if (!this._desktopLockdownSettings.get_boolean('disable-save-to-disk')) {
|
|
// read the parameters from GSettings always in case they have changed
|
|
recorder.set_framerate(this._recorderSettings.get_int('framerate'));
|
|
/* Translators: this is a filename used for screencast recording */
|
|
// xgettext:no-c-format
|
|
recorder.set_file_template(_("Screencast from %d %t") + '.' + this._recorderSettings.get_string('file-extension'));
|
|
let pipeline = this._recorderSettings.get_string('pipeline');
|
|
|
|
if (!pipeline.match(/^\s*$/))
|
|
recorder.set_pipeline(pipeline);
|
|
else
|
|
recorder.set_pipeline(null);
|
|
|
|
Meta.disable_unredirect_for_screen(global.screen);
|
|
recorder.record();
|
|
}
|
|
}
|
|
});
|
|
|
|
const Component = Recorder;
|