2012-09-02 21:23:50 -04:00
|
|
|
|
|
|
|
const Lang = imports.lang;
|
|
|
|
|
|
|
|
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() {
|
|
|
|
global.display.add_keybinding('toggle-recording',
|
|
|
|
this._bindingSettings,
|
|
|
|
Meta.KeyBindingFlags.NONE, Lang.bind(this, this._toggleRecorder));
|
|
|
|
},
|
|
|
|
|
|
|
|
disable: function() {
|
|
|
|
global.display.remove_keybinding('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);
|
2012-09-13 08:27:37 -04:00
|
|
|
} else if (!this._desktopLockdownSettings.get_boolean('disable-save-to-disk')) {
|
2012-09-02 21:23:50 -04:00
|
|
|
// read the parameters from GSettings always in case they have changed
|
2012-09-13 08:27:37 -04:00
|
|
|
recorder.set_framerate(this._recorderSettings.get_int('framerate'));
|
2012-09-02 21:23:50 -04:00
|
|
|
/* Translators: this is a filename used for screencast recording */
|
|
|
|
// xgettext:no-c-format
|
2012-10-25 17:14:20 -04:00
|
|
|
recorder.set_file_template(_("Screencast from %d %t") + '.' + this._recorderSettings.get_string('file-extension'));
|
2012-09-13 08:27:37 -04:00
|
|
|
let pipeline = this._recorderSettings.get_string('pipeline');
|
2012-09-02 21:23:50 -04:00
|
|
|
|
|
|
|
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;
|