diff --git a/convenience.js b/convenience.js deleted file mode 100644 index bbc8608..0000000 --- a/convenience.js +++ /dev/null @@ -1,93 +0,0 @@ -/* -*- 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 Gio = imports.gi.Gio; - -const Config = imports.misc.config; -const ExtensionUtils = imports.misc.extensionUtils; - -/** - * 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 }); -} - diff --git a/extension.js b/extension.js index dd6126e..99ff506 100644 --- a/extension.js +++ b/extension.js @@ -1,20 +1,17 @@ -const Main = imports.ui.main; -const Lang = imports.lang; -const Meta = imports.gi.Meta; -const Shell = imports.gi.Shell; -const Clutter = imports.gi.Clutter; -const ExtensionUtils = imports.misc.extensionUtils; +import * as Main from 'resource:///org/gnome/shell/ui/main.js'; +import Meta from 'gi://Meta'; +import Shell from 'gi://Shell'; +import Clutter from 'gi://Clutter'; +import GObject from 'gi://GObject'; -const Self = ExtensionUtils.getCurrentExtension(); -const Convenience = Self.imports.convenience; +import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js'; -const SHORTCUT = 'invert-window-shortcut'; -const InvertWindowEffect = new Lang.Class({ - Name: 'InvertWindowEffect', - Extends: Clutter.ShaderEffect, +const SHORTCUT = 'invert-window-shortcut'; - vfunc_get_static_shader_source: function() { +export const InvertWindowEffect = GObject.registerClass( +class InvertWindowEffect extends Clutter.ShaderEffect { + vfunc_get_static_shader_source() { return ' \ uniform sampler2D tex; \ void main() { \ @@ -27,20 +24,17 @@ const InvertWindowEffect = new Lang.Class({ cogl_color_out = color * cogl_color_in; \ } \ '; - }, + } - vfunc_paint_target: function(paint_context) { + vfunc_paint_target(...args) { this.set_uniform_value("tex", 0); - this.parent(paint_context); + super.vfunc_paint_target(...args); } }); -function InvertWindow() { - this.settings = Convenience.getSettings(); -} -InvertWindow.prototype = { - toggle_effect: function() { +export default class InvertWindow extends Extension { + toggle_effect() { global.get_window_actors().forEach(function(actor) { let meta_window = actor.get_meta_window(); if(meta_window.has_focus()) { @@ -55,15 +49,17 @@ InvertWindow.prototype = { } } }, this); - }, + } + + enable() { + this._settings = this.getSettings(); - enable: function() { Main.wm.addKeybinding( SHORTCUT, - this.settings, + this._settings, Meta.KeyBindingFlags.NONE, Shell.ActionMode.NORMAL, - Lang.bind(this, this.toggle_effect) + () => { this.toggle_effect(); } ); global.get_window_actors().forEach(function(actor) { @@ -73,29 +69,17 @@ InvertWindow.prototype = { actor.add_effect_with_name('invert-color', effect); } }, this); - }, + } - disable: function() { + disable() { Main.wm.removeKeybinding(SHORTCUT); global.get_window_actors().forEach(function(actor) { actor.remove_effect_by_name('invert-color'); }, this); + + this._settings = null; } }; -let invert_window; - -function init() { -} - -function enable() { - invert_window = new InvertWindow(); - invert_window.enable(); -} - -function disable() { - invert_window.disable(); - invert_window = null; -} diff --git a/metadata.json b/metadata.json index 56a4a95..80b6c7d 100644 --- a/metadata.json +++ b/metadata.json @@ -4,7 +4,8 @@ "description": "Inverts the color of individual windows\nDefault shortcut is Super+I", "url": "https://github.com/maiself/gnome-shell-extension-invert-color", "shell-version": [ - "3.36" + "45", + "46" ], "settings-schema": "org.gnome.shell.extensions.invert-window", "version": 5