diff --git a/convenience.js b/convenience.js new file mode 100644 index 0000000..d453c91 --- /dev/null +++ b/convenience.js @@ -0,0 +1,91 @@ +/* -*- mode: js; js-basic-offset: 4; indent-tabs-mode: nil -*- */ +/* + Copyright (c) 2011-2012, Giovanni Campagna + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the GNOME nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +const Gettext = imports.gettext; +const Config = imports.misc.config; +const ExtensionUtils = imports.misc.extensionUtils; +const Gio = imports.gi.Gio; + +/** + * initTranslations: + * @domain: (optional): the gettext domain to use + * + * Initialize Gettext to load translations from extensionsdir/locale. + * If @domain is not provided, it will be taken from metadata['gettext-domain'] + */ +function initTranslations(domain) { + let extension = ExtensionUtils.getCurrentExtension(); + + domain = domain || extension.metadata['gettext-domain']; + + // check if this extension was built with "make zip-file", and thus + // has the locale files in a subfolder + // otherwise assume that extension has been installed in the + // same prefix as gnome-shell + let localeDir = extension.dir.get_child('locale'); + if (localeDir.query_exists(null)) + Gettext.bindtextdomain(domain, localeDir.get_path()); + else + Gettext.bindtextdomain(domain, Config.LOCALEDIR); +} + +/** + * getSettings: + * @schema: (optional): the GSettings schema id + * + * Builds and return a GSettings schema for @schema, using schema files + * in extensionsdir/schemas. If @schema is not provided, it is taken from + * metadata['settings-schema']. + */ +function getSettings(schema) { + let extension = ExtensionUtils.getCurrentExtension(); + + schema = schema || extension.metadata['settings-schema']; + + const GioSSS = Gio.SettingsSchemaSource; + + // check if this extension was built with "make zip-file", and thus + // has the schema files in a subfolder + // otherwise assume that extension has been installed in the + // same prefix as gnome-shell (and therefore schemas are available + // in the standard folders) + let schemaDir = extension.dir.get_child('schemas'); + let schemaSource; + if (schemaDir.query_exists(null)) + schemaSource = GioSSS.new_from_directory(schemaDir.get_path(), + GioSSS.get_default(), + false); + else + schemaSource = GioSSS.get_default(); + + let schemaObj = schemaSource.lookup(schema, true); + if (!schemaObj) + throw new Error('Schema ' + schema + ' could not be found for extension ' + + extension.metadata.uuid + '. Please check your installation.'); + + return new Gio.Settings({ settings_schema: schemaObj }); +} \ No newline at end of file diff --git a/extension.js b/extension.js index 1dc725f..748b608 100644 --- a/extension.js +++ b/extension.js @@ -81,7 +81,11 @@ MoveWindow.prototype = { return 0; } - return Main.panel.actor.y + Main.panel.actor.height; + if (Main.panel.get_y) { + return Main.panel.get_y() + Main.panel.get_height(); + } else { + return Main.panel.actor.y + Main.panel.actor.height; + } }, _recalculateSizes: function(s) { diff --git a/metadata.json b/metadata.json index 73772f9..566badd 100644 --- a/metadata.json +++ b/metadata.json @@ -1,5 +1,5 @@ { - "shell-version": ["3.24", "3.26", "3.28", "3.30", "3.32", "3.34"], + "shell-version": ["3.24", "3.26", "3.28", "3.30", "3.32", "3.34", "3.36"], "version": 99, "uuid": "putWindow@clemens.lab21.org", "name": "Put Windows", diff --git a/prefs.js b/prefs.js index 3f3bfd6..190b8f9 100644 --- a/prefs.js +++ b/prefs.js @@ -1,7 +1,5 @@ const Gtk = imports.gi.Gtk; -const GLib = imports.gi.GLib; const GObject = imports.gi.GObject; -const Gio = imports.gi.Gio; const Gdk = imports.gi.Gdk; const Wnck = imports.gi.Wnck; @@ -1023,7 +1021,12 @@ const PutWindowLocationWidget = new GObject.Class({ }); function init() { - ExtensionUtils.initTranslations(); + if (ExtensionUtils.initTranslations) { + ExtensionUtils.initTranslations(); + } else { + // gnome <= 3.28 dont support ExtensionUtils.initTranslations + Me.imports.convenience.initTranslations(); + } } function buildPrefsWidget() {