|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
/* Desktop Icons GNOME Shell extension
|
|
rpm-build |
d023e0 |
*
|
|
rpm-build |
d023e0 |
* Copyright (C) 2017 Carlos Soriano <csoriano@redhat.com>
|
|
rpm-build |
d023e0 |
*
|
|
rpm-build |
d023e0 |
* This program is free software: you can redistribute it and/or modify
|
|
rpm-build |
d023e0 |
* it under the terms of the GNU General Public License as published by
|
|
rpm-build |
d023e0 |
* the Free Software Foundation, either version 3 of the License, or
|
|
rpm-build |
d023e0 |
* (at your option) any later version.
|
|
rpm-build |
d023e0 |
*
|
|
rpm-build |
d023e0 |
* This program is distributed in the hope that it will be useful,
|
|
rpm-build |
d023e0 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
rpm-build |
d023e0 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
rpm-build |
d023e0 |
* GNU General Public License for more details.
|
|
rpm-build |
d023e0 |
*
|
|
rpm-build |
d023e0 |
* You should have received a copy of the GNU General Public License
|
|
rpm-build |
d023e0 |
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
rpm-build |
d023e0 |
*/
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
const Gtk = imports.gi.Gtk;
|
|
rpm-build |
d023e0 |
const GObject = imports.gi.GObject;
|
|
rpm-build |
d023e0 |
const Gio = imports.gi.Gio;
|
|
rpm-build |
d023e0 |
const GioSSS = Gio.SettingsSchemaSource;
|
|
rpm-build |
d023e0 |
const ExtensionUtils = imports.misc.extensionUtils;
|
|
rpm-build |
d023e0 |
const Gettext = imports.gettext;
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
const Config = imports.misc.config;
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
var _ = Gettext.domain('desktop-icons').gettext;
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
const SCHEMA_NAUTILUS = 'org.gnome.nautilus.preferences';
|
|
rpm-build |
d023e0 |
const SCHEMA_GTK = 'org.gtk.Settings.FileChooser';
|
|
rpm-build |
d023e0 |
const SCHEMA = 'org.gnome.shell.extensions.desktop-icons';
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
const ICON_SIZE = { 'small': 48, 'standard': 64, 'large': 96 };
|
|
rpm-build |
d023e0 |
const ICON_WIDTH = { 'small': 120, 'standard': 128, 'large': 128 };
|
|
rpm-build |
d023e0 |
const ICON_HEIGHT = { 'small': 98, 'standard': 114, 'large': 146 };
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
var FileType = {
|
|
rpm-build |
d023e0 |
NONE: null,
|
|
rpm-build |
d023e0 |
USER_DIRECTORY_HOME: 'show-home',
|
|
rpm-build |
d023e0 |
USER_DIRECTORY_TRASH: 'show-trash',
|
|
rpm-build |
d023e0 |
}
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
var nautilusSettings;
|
|
rpm-build |
d023e0 |
var gtkSettings;
|
|
rpm-build |
d023e0 |
var settings;
|
|
rpm-build |
d023e0 |
// This is already in Nautilus settings, so it should not be made tweakable here
|
|
rpm-build |
d023e0 |
var CLICK_POLICY_SINGLE = false;
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
function initTranslations() {
|
|
rpm-build |
d023e0 |
let extension = ExtensionUtils.getCurrentExtension();
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
let localedir = extension.dir.get_child('locale');
|
|
rpm-build |
d023e0 |
if (localedir.query_exists(null))
|
|
rpm-build |
d023e0 |
Gettext.bindtextdomain('desktop-icons', localedir.get_path());
|
|
rpm-build |
d023e0 |
else
|
|
rpm-build |
d023e0 |
Gettext.bindtextdomain('desktop-icons', Config.LOCALEDIR);
|
|
rpm-build |
d023e0 |
}
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
function init() {
|
|
rpm-build |
d023e0 |
let schemaSource = GioSSS.get_default();
|
|
rpm-build |
d023e0 |
let schemaGtk = schemaSource.lookup(SCHEMA_GTK, true);
|
|
rpm-build |
d023e0 |
gtkSettings = new Gio.Settings({ settings_schema: schemaGtk });
|
|
rpm-build |
d023e0 |
let schemaObj = schemaSource.lookup(SCHEMA_NAUTILUS, true);
|
|
rpm-build |
d023e0 |
if (!schemaObj) {
|
|
rpm-build |
d023e0 |
nautilusSettings = null;
|
|
rpm-build |
d023e0 |
} else {
|
|
rpm-build |
d023e0 |
nautilusSettings = new Gio.Settings({ settings_schema: schemaObj });;
|
|
rpm-build |
d023e0 |
nautilusSettings.connect('changed', _onNautilusSettingsChanged);
|
|
rpm-build |
d023e0 |
_onNautilusSettingsChanged();
|
|
rpm-build |
d023e0 |
}
|
|
rpm-build |
d023e0 |
settings = get_schema(SCHEMA);
|
|
rpm-build |
d023e0 |
}
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
function get_schema(schema) {
|
|
rpm-build |
d023e0 |
let extension = ExtensionUtils.getCurrentExtension();
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
// check if this extension was built with "make zip-file", and thus
|
|
rpm-build |
d023e0 |
// has the schema files in a subfolder
|
|
rpm-build |
d023e0 |
// otherwise assume that extension has been installed in the
|
|
rpm-build |
d023e0 |
// same prefix as gnome-shell (and therefore schemas are available
|
|
rpm-build |
d023e0 |
// in the standard folders)
|
|
rpm-build |
d023e0 |
let schemaDir = extension.dir.get_child('schemas');
|
|
rpm-build |
d023e0 |
let schemaSource;
|
|
rpm-build |
d023e0 |
if (schemaDir.query_exists(null))
|
|
rpm-build |
d023e0 |
schemaSource = GioSSS.new_from_directory(schemaDir.get_path(), GioSSS.get_default(), false);
|
|
rpm-build |
d023e0 |
else
|
|
rpm-build |
d023e0 |
schemaSource = GioSSS.get_default();
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
let schemaObj = schemaSource.lookup(schema, true);
|
|
rpm-build |
d023e0 |
if (!schemaObj)
|
|
rpm-build |
d023e0 |
throw new Error('Schema ' + schema + ' could not be found for extension ' + extension.metadata.uuid + '. Please check your installation.');
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
return new Gio.Settings({ settings_schema: schemaObj });
|
|
rpm-build |
d023e0 |
}
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
function buildPrefsWidget() {
|
|
rpm-build |
d023e0 |
initTranslations();
|
|
rpm-build |
d023e0 |
let frame = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL, border_width: 10, spacing: 10 });
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
frame.add(buildSelector('icon-size', _("Size for the desktop icons"), { 'small': _("Small"), 'standard': _("Standard"), 'large': _("Large") }));
|
|
rpm-build |
d023e0 |
frame.add(buildSwitcher('show-home', _("Show the personal folder in the desktop")));
|
|
rpm-build |
d023e0 |
frame.add(buildSwitcher('show-trash', _("Show the trash icon in the desktop")));
|
|
rpm-build |
d023e0 |
frame.show_all();
|
|
rpm-build |
d023e0 |
return frame;
|
|
rpm-build |
d023e0 |
}
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
function buildSwitcher(key, labelText) {
|
|
rpm-build |
d023e0 |
let hbox = new Gtk.Box({ orientation: Gtk.Orientation.HORIZONTAL, spacing: 10 });
|
|
rpm-build |
d023e0 |
let label = new Gtk.Label({ label: labelText, xalign: 0 });
|
|
rpm-build |
d023e0 |
let switcher = new Gtk.Switch({ active: settings.get_boolean(key) });
|
|
rpm-build |
d023e0 |
settings.bind(key, switcher, 'active', 3);
|
|
rpm-build |
d023e0 |
hbox.pack_start(label, true, true, 0);
|
|
rpm-build |
d023e0 |
hbox.add(switcher);
|
|
rpm-build |
d023e0 |
return hbox;
|
|
rpm-build |
d023e0 |
}
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
function buildSelector(key, labelText, elements) {
|
|
rpm-build |
d023e0 |
let listStore = new Gtk.ListStore();
|
|
rpm-build |
d023e0 |
listStore.set_column_types ([GObject.TYPE_STRING, GObject.TYPE_STRING]);
|
|
rpm-build |
d023e0 |
let schemaKey = settings.settings_schema.get_key(key);
|
|
rpm-build |
d023e0 |
let values = schemaKey.get_range().get_child_value(1).get_child_value(0).get_strv();
|
|
rpm-build |
d023e0 |
for (let val of values) {
|
|
rpm-build |
d023e0 |
let iter = listStore.append();
|
|
rpm-build |
d023e0 |
let visibleText = val;
|
|
rpm-build |
d023e0 |
if (visibleText in elements)
|
|
rpm-build |
d023e0 |
visibleText = elements[visibleText];
|
|
rpm-build |
d023e0 |
listStore.set (iter, [0, 1], [visibleText, val]);
|
|
rpm-build |
d023e0 |
}
|
|
rpm-build |
d023e0 |
let hbox = new Gtk.Box({ orientation: Gtk.Orientation.HORIZONTAL, spacing: 10 });
|
|
rpm-build |
d023e0 |
let label = new Gtk.Label({ label: labelText, xalign: 0 });
|
|
rpm-build |
d023e0 |
let combo = new Gtk.ComboBox({model: listStore});
|
|
rpm-build |
d023e0 |
let rendererText = new Gtk.CellRendererText();
|
|
rpm-build |
d023e0 |
combo.pack_start (rendererText, false);
|
|
rpm-build |
d023e0 |
combo.add_attribute (rendererText, 'text', 0);
|
|
rpm-build |
d023e0 |
combo.set_id_column(1);
|
|
rpm-build |
d023e0 |
settings.bind(key, combo, 'active-id', 3);
|
|
rpm-build |
d023e0 |
hbox.pack_start(label, true, true, 0);
|
|
rpm-build |
d023e0 |
hbox.add(combo);
|
|
rpm-build |
d023e0 |
return hbox;
|
|
rpm-build |
d023e0 |
}
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
function _onNautilusSettingsChanged() {
|
|
rpm-build |
d023e0 |
CLICK_POLICY_SINGLE = nautilusSettings.get_string('click-policy') == 'single';
|
|
rpm-build |
d023e0 |
}
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
function get_icon_size() {
|
|
rpm-build |
d023e0 |
// this one doesn't need scaling because Gnome Shell automagically scales the icons
|
|
rpm-build |
d023e0 |
return ICON_SIZE[settings.get_string('icon-size')];
|
|
rpm-build |
d023e0 |
}
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
function get_desired_width(scale_factor) {
|
|
rpm-build |
d023e0 |
return ICON_WIDTH[settings.get_string('icon-size')] * scale_factor;
|
|
rpm-build |
d023e0 |
}
|
|
rpm-build |
d023e0 |
|
|
rpm-build |
d023e0 |
function get_desired_height(scale_factor) {
|
|
rpm-build |
d023e0 |
return ICON_HEIGHT[settings.get_string('icon-size')] * scale_factor;
|
|
rpm-build |
d023e0 |
}
|