diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-02-05 07:44:04 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-02-05 08:57:36 +0000 |
commit | 4a62513b17d915afcae80b1adfb1b0cdcf86f748 (patch) | |
tree | a21f339a82d742682a1dfbf63d7fe9c43d58a3a2 /extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com | |
parent | Adding upstream version 20230204. (diff) | |
download | gnome-shell-extensions-extra-upstream/20230205.tar.xz gnome-shell-extensions-extra-upstream/20230205.zip |
Adding upstream version 20230205.upstream/20230205
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
14 files changed, 788 insertions, 0 deletions
diff --git a/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/extension.js b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/extension.js new file mode 100644 index 0000000..17c5174 --- /dev/null +++ b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/extension.js @@ -0,0 +1,117 @@ +/* This extension is a derived work of the Gnome Shell. +* +* Copyright (c) 2013 Paolo Tranquilli +* +* This extension is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This extension is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this extension; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +const CLOSE_BUTTON = 'close-button'; +const REARRANGE_DELAY = 'rearrange-delay'; + + +const St = imports.gi.St; +const Main = imports.ui.main; +const Workspace = imports.ui.workspace +const WindowPreview = imports.ui.windowPreview.WindowPreview +const Mainloop = imports.mainloop; +const ExtensionUtils = imports.misc.extensionUtils; + +const Me = ExtensionUtils.getCurrentExtension(); + +var Init = class Init { + + _connectSettings() { + this._settingsSignals = []; + this._settingsSignals.push(this._settings.connect('changed::'+CLOSE_BUTTON, this._setCloseButton.bind(this))); + this._settingsSignals.push(this._settings.connect('changed::'+REARRANGE_DELAY, this._setRearrangeDelay.bind(this))); + } + + _disconnectSettings() { + while(this._settingsSignals.length > 0) { + this._settings.disconnect(this._settingsSignals.pop()); + } + } + + _setCloseButton() { + this._closeButton = this._settings.get_enum(CLOSE_BUTTON) + 1; + } + + _setRearrangeDelay() { + this._rearrangeDelay = this._settings.get_int(REARRANGE_DELAY); + } + + enable() { + this._oldActivate = WindowPreview.prototype._activate; + this._oldDoRemoveWindow = Workspace.Workspace.prototype._doRemoveWindow; + this._oldAddWindowClone = Workspace.Workspace.prototype._addWindowClone; + this._settings = ExtensionUtils.getSettings(); + this._oldDelay = Workspace.WINDOW_REPOSITIONING_DELAY; + this._setCloseButton(); + this._setRearrangeDelay(); + // I'll go with a closure, not sure how to do it otherwise + let init = this; + + // my handling logic + const onClicked = function(action, actor) { + this._selected = true; + if (action.get_button() == init._closeButton) { + this._deleteAll(); + } else { + init._oldActivate.apply(this); + } + }; + + // override _addWindowClone to add my event handler + Workspace.Workspace.prototype._addWindowClone = function(metaWindow) { + let clone = init._oldAddWindowClone.apply(this, [metaWindow]); + clone.get_actions()[0].connect('clicked', onClicked.bind(clone)); + return clone; + } + + // override WindowClone's _activate + WindowPreview.prototype._activate = () => {}; + + // override Workspace's _doRemoveWindow in order to put into it the + // parameteriseable rearrangement delay. Rather than copy the code from + // workspace.js, we reuse it but remove the scheduled rearrangement task + // (as its 750ms delay is hard-coded...) + Workspace.WINDOW_REPOSITIONING_DELAY = Math.max(init._rearrangeDelay,1); + + this._connectSettings(); + } + + disable() { + WindowPreview.prototype._activate = this._oldActivate; + Workspace.Workspace.prototype._doRemoveWindow = this._oldDoRemoveWindow; + Workspace.WINDOW_REPOSITIONING_DELAY = this._oldDelay; + Workspace.Workspace.prototype._addWindowClone = this._oldAddWindowClone; + this._disconnectSettings(); + } +} + +function init() { + ExtensionUtils.initTranslations(); +} + +let _init; +function enable() { + _init = new Init(); + _init.enable(); +} + +function disable() { + _init?.disable(); + _init = null; +} diff --git a/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/de/LC_MESSAGES/de_DE.mo b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/de/LC_MESSAGES/de_DE.mo Binary files differnew file mode 100644 index 0000000..33687cb --- /dev/null +++ b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/de/LC_MESSAGES/de_DE.mo diff --git a/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/de/LC_MESSAGES/de_DE.po b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/de/LC_MESSAGES/de_DE.po new file mode 100644 index 0000000..aed9f54 --- /dev/null +++ b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/de/LC_MESSAGES/de_DE.po @@ -0,0 +1,75 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Onno Giesmann <nutzer3105@gmail.com>, 2019. +# +msgid "" +msgstr "" +"Project-Id-Version: gnome-shell-extensions-middleclickclose\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-12-30 07:06+0100\n" +"PO-Revision-Date: 2019-06-17 20:44+0200\n" +"Language-Team: German <--->\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Gtranslator 3.32.1\n" +"Last-Translator: Onno Giesmann <nutzer3105@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"Language: de\n" + +#: ../../../prefs.js:33 +msgid "Mouse button to close" +msgstr "Maustaste zum Schließen" + +#: ../../../prefs.js:34 +msgid "Which mouse button triggers closing in overview." +msgstr "Gibt an, welche Maustaste das Schließen in der Übersicht auslöst." + +#: ../../../prefs.js:36 +msgid "Left" +msgstr "Linke" + +#: ../../../prefs.js:37 +msgid "Middle" +msgstr "Mittlere" + +#: ../../../prefs.js:38 +msgid "Right" +msgstr "Rechte" + +#: ../../../prefs.js:39 +msgid "Button 4" +msgstr "Taste 4" + +#: ../../../prefs.js:40 +msgid "Button 5" +msgstr "Taste 5" + +#: ../../../prefs.js:41 +msgid "Button 6" +msgstr "Taste 6" + +#: ../../../prefs.js:42 +msgid "Button 7" +msgstr "Taste 7" + +#: ../../../prefs.js:43 +msgid "Button 8" +msgstr "Taste 8" + +#: ../../../prefs.js:44 +msgid "Button 9" +msgstr "Taste 9" + +#: ../../../prefs.js:50 +msgid "Rearrange delay" +msgstr "Verzögerung bis zur Neuanordnung" + +#: ../../../prefs.js:51 +msgid "" +"How much time must pass with the pointer not moving for windows in overview " +"to rearrange after one was closed." +msgstr "" +"Gibt die Zeit an, die bei stillstehender Maus vergehen muss, bevor sich die " +"Fenster in der Übersicht neu anordnen, nachdem ein Fenster geschlossen wurde." diff --git a/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/fr/LC_MESSAGES/fr.mo b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/fr/LC_MESSAGES/fr.mo Binary files differnew file mode 100644 index 0000000..eaedef4 --- /dev/null +++ b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/fr/LC_MESSAGES/fr.mo diff --git a/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/fr/LC_MESSAGES/fr.po b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/fr/LC_MESSAGES/fr.po new file mode 100644 index 0000000..b842115 --- /dev/null +++ b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/fr/LC_MESSAGES/fr.po @@ -0,0 +1,75 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: gnome-shell-extensions-middleclickclose\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-12-30 07:06+0100\n" +"PO-Revision-Date: 2015-12-30 07:08+0100\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.5\n" +"Last-Translator: DAEM Q.\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Language: fr\n" + +#: ../../../prefs.js:33 +msgid "Mouse button to close" +msgstr "Bouton de souris pour fermer la fenêtre" + +#: ../../../prefs.js:34 +msgid "Which mouse button triggers closing in overview." +msgstr "Le bouton de la souris qui déclenche la fermeture d'une fenêtre dans la Vue d'ensemble." + +#: ../../../prefs.js:36 +msgid "Left" +msgstr "Gauche" + +#: ../../../prefs.js:37 +msgid "Middle" +msgstr "Milieu" + +#: ../../../prefs.js:38 +msgid "Right" +msgstr "Droit" + +#: ../../../prefs.js:39 +msgid "Button 4" +msgstr "Bouton 4" + +#: ../../../prefs.js:40 +msgid "Button 5" +msgstr "Bouton 5" + +#: ../../../prefs.js:41 +msgid "Button 6" +msgstr "Bouton 6" + +#: ../../../prefs.js:42 +msgid "Button 7" +msgstr "Bouton 7" + +#: ../../../prefs.js:43 +msgid "Button 8" +msgstr "Bouton 8" + +#: ../../../prefs.js:44 +msgid "Button 9" +msgstr "Bouton 9" + +#: ../../../prefs.js:50 +msgid "Rearrange delay" +msgstr "Délai avant réarrangement" + +#: ../../../prefs.js:51 +msgid "" +"How much time must pass with the pointer not moving for windows in overview " +"to rearrange after one was closed." +msgstr "" +"Temps qu'il doit se passer sans que le pointeur de la souris ne bouge dans la Vue d'ensemble " +"avant réarrangement des fenêtres." diff --git a/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/it/LC_MESSAGES/it.mo b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/it/LC_MESSAGES/it.mo Binary files differnew file mode 100644 index 0000000..dbe500d --- /dev/null +++ b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/it/LC_MESSAGES/it.mo diff --git a/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/it/LC_MESSAGES/it.po b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/it/LC_MESSAGES/it.po new file mode 100644 index 0000000..bcc71c4 --- /dev/null +++ b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/it/LC_MESSAGES/it.po @@ -0,0 +1,75 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: gnome-shell-extensions-middleclickclose\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-12-30 07:06+0100\n" +"PO-Revision-Date: 2017-04-21 10:06+0200\n" +"Language-Team: Jimmy Scionti <jimmy.scionti@gmail.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.7.1\n" +"Last-Translator: Jimmy Scionti <jimmy.scionti@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Language: it\n" + +#: ../../../prefs.js:33 +msgid "Mouse button to close" +msgstr "Pulsante del mouse per chiudere la finestra" + +#: ../../../prefs.js:34 +msgid "Which mouse button triggers closing in overview." +msgstr "Seleziona quale pulsante del mouse premere per chiudere una finestra." + +#: ../../../prefs.js:36 +msgid "Left" +msgstr "Sinistro" + +#: ../../../prefs.js:37 +msgid "Middle" +msgstr "Centrale" + +#: ../../../prefs.js:38 +msgid "Right" +msgstr "Destro" + +#: ../../../prefs.js:39 +msgid "Button 4" +msgstr "Pulsante 4" + +#: ../../../prefs.js:40 +msgid "Button 5" +msgstr "Pulsante 5" + +#: ../../../prefs.js:41 +msgid "Button 6" +msgstr "Pulsante 6" + +#: ../../../prefs.js:42 +msgid "Button 7" +msgstr "Pulsante 7" + +#: ../../../prefs.js:43 +msgid "Button 8" +msgstr "Pulsante 8" + +#: ../../../prefs.js:44 +msgid "Button 9" +msgstr "Pulsante 9" + +#: ../../../prefs.js:50 +msgid "Rearrange delay" +msgstr "Ritardo del riordinamento" + +#: ../../../prefs.js:51 +msgid "" +"How much time must pass with the pointer not moving for windows in overview to rearrange " +"after one was closed." +msgstr "" +"Seleziona il tempo di attesa tra la chiusura di una finestra e il riordinamento delle altre " +"finestre nell'anteprima." diff --git a/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/nl/nl.mo b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/nl/nl.mo Binary files differnew file mode 100644 index 0000000..1b5cf7a --- /dev/null +++ b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/nl/nl.mo diff --git a/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/nl/nl.po b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/nl/nl.po new file mode 100644 index 0000000..62fc210 --- /dev/null +++ b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/nl/nl.po @@ -0,0 +1,74 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Heimen Stoffels <vistausss@outlook.com>, 2019. +msgid "" +msgstr "" +"Project-Id-Version: gnome-shell-extensions-middleclickclose\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-12-30 07:06+0100\n" +"PO-Revision-Date: 2019-09-15 20:17+0200\n" +"Language-Team: Dutch <kde-i18n-doc@kde.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.2.1\n" +"Last-Translator: Heimen Stoffels <vistausss@outlook.com>\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Language: it\n" + +#: ../../../prefs.js:33 +msgid "Mouse button to close" +msgstr "Muisknop om vensters mee te sluiten" + +#: ../../../prefs.js:34 +msgid "Which mouse button triggers closing in overview." +msgstr "Met welke muisknop je vensters kunt sluiten op het overzicht." + +#: ../../../prefs.js:36 +msgid "Left" +msgstr "Links" + +#: ../../../prefs.js:37 +msgid "Middle" +msgstr "Scrollwiel" + +#: ../../../prefs.js:38 +msgid "Right" +msgstr "Rechts" + +#: ../../../prefs.js:39 +msgid "Button 4" +msgstr "Knop 4" + +#: ../../../prefs.js:40 +msgid "Button 5" +msgstr "Knop 5" + +#: ../../../prefs.js:41 +msgid "Button 6" +msgstr "Knop 6" + +#: ../../../prefs.js:42 +msgid "Button 7" +msgstr "Knop 7" + +#: ../../../prefs.js:43 +msgid "Button 8" +msgstr "Knop 8" + +#: ../../../prefs.js:44 +msgid "Button 9" +msgstr "Knop 9" + +#: ../../../prefs.js:50 +msgid "Rearrange delay" +msgstr "Vertraging bij herschikken" + +#: ../../../prefs.js:51 +msgid "" +"How much time must pass with the pointer not moving for windows in " +"overview to rearrange after one was closed." +msgstr "" +"Hoeveel tijd er moet verstrijken na het sluiten van een venster voordat " +"vensters worden herschikt." diff --git a/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/sk/LC_MESSAGES/sk.mo b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/sk/LC_MESSAGES/sk.mo Binary files differnew file mode 100644 index 0000000..4ceacc9 --- /dev/null +++ b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/sk/LC_MESSAGES/sk.mo diff --git a/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/sk/LC_MESSAGES/sk.po b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/sk/LC_MESSAGES/sk.po new file mode 100644 index 0000000..801f9bc --- /dev/null +++ b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/locale/sk/LC_MESSAGES/sk.po @@ -0,0 +1,75 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: gnome-shell-extensions-middleclickclose\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-30 07:06+0100\n" +"PO-Revision-Date: 2015-10-30 07:08+0100\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.5\n" +"Last-Translator: Juraj Fiala <doctorjellyface@riseup.net>\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Language: sk\n" + +#: ../../../prefs.js:33 +msgid "Mouse button to close" +msgstr "Tlačidlo myši na zavretie" + +#: ../../../prefs.js:34 +msgid "Which mouse button triggers closing in overview." +msgstr "Ktoré tlačidlo myši spustí zavretie v prehľade aktivít." + +#: ../../../prefs.js:36 +msgid "Left" +msgstr "Ľavé" + +#: ../../../prefs.js:37 +msgid "Middle" +msgstr "Stredné" + +#: ../../../prefs.js:38 +msgid "Right" +msgstr "Pravé" + +#: ../../../prefs.js:39 +msgid "Button 4" +msgstr "Tlačidlo 4" + +#: ../../../prefs.js:40 +msgid "Button 5" +msgstr "Tlačidlo 5" + +#: ../../../prefs.js:41 +msgid "Button 6" +msgstr "Tlačidlo 6" + +#: ../../../prefs.js:42 +msgid "Button 7" +msgstr "Tlačidlo 7" + +#: ../../../prefs.js:43 +msgid "Button 8" +msgstr "Tlačidlo 8" + +#: ../../../prefs.js:44 +msgid "Button 9" +msgstr "Tlačidlo 9" + +#: ../../../prefs.js:50 +msgid "Rearrange delay" +msgstr "Oneskorenie preskúpenia" + +#: ../../../prefs.js:51 +msgid "" +"How much time must pass with the pointer not moving for windows in overview " +"to rearrange after one was closed." +msgstr "" +"Koľko času musí prejsť od posledného pohnutia kurzora myši aby sa okná v " +"prehľade znovu usporiadali po tom ako bolo jedno zavreté." diff --git a/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/metadata.json b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/metadata.json new file mode 100644 index 0000000..ea89661 --- /dev/null +++ b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/metadata.json @@ -0,0 +1,14 @@ +{ + "shell-version": [ + "42", + "43" + ], + "settings-schema": "org.gnome.shell.extensions.middleclickclose", + "gettext-domain": "org.gnome.shell.extensions.middleclickclose", + "uuid": "middleclickclose@paolo.tranquilli.gmail.com", + "name": "Quick Close in Overview", + "description": "Close windows with a button click (the middle one by default) when in overview mode", + "url": "https://github.com/p91paul/middleclickclose", + "original-authors": [ "Paolo Tranquilli" ], + "locale": "/usr/local/share/locale" +} diff --git a/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/prefs.js b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/prefs.js new file mode 100644 index 0000000..c90e8cd --- /dev/null +++ b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/prefs.js @@ -0,0 +1,258 @@ +/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */ +/** + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +**/ +const Gtk = imports.gi.Gtk; +const GObject = imports.gi.GObject; + +const Gettext = imports.gettext.domain('gnome-shell-extensions-middleclickclose'); +const _ = Gettext.gettext; + +const Me = imports.misc.extensionUtils.getCurrentExtension(); +const ExtensionUtils = imports.misc.extensionUtils; + +let gsettings; +let settings; +function init() { + ExtensionUtils.initTranslations(); + gsettings = ExtensionUtils.getSettings(); + settings = { + close_button: { + type: "e", + label: _("Mouse button to close"), + help: _("Which mouse button triggers closing in overview."), + list: [ + { nick: "left", name: _("Left"), id: 0 }, + { nick: "middle", name: _("Middle"), id: 1 }, + { nick: "right", name: _("Right"), id: 2 }, + { nick: "button 4", name: _("Button 4"), id: 3 }, + { nick: "button 5", name: _("Button 5"), id: 4 }, + { nick: "button 6", name: _("Button 6"), id: 5 }, + { nick: "button 7", name: _("Button 7"), id: 6 }, + { nick: "button 8", name: _("Button 8"), id: 7 }, + { nick: "button 9", name: _("Button 9"), id: 8 } + ], + default: 'middle' + }, + rearrange_delay: { + type: "i", + label: _("Rearrange delay"), + help: _("How much time must pass with the pointer not moving for windows in overview to rearrange after one was closed."), + step: 50, + default: 750 + } + }; +} + +function buildPrefsWidget() { + let frame = new Gtk.Box({orientation: Gtk.Orientation.VERTICAL, + 'margin-top': 10, + 'margin-end': 10, + 'margin-bottom': 10, + 'margin-start': 10}); + let vbox = new Gtk.Box({orientation: Gtk.Orientation.VERTICAL, + 'margin-top': 10, + 'margin-end': 20, + 'margin-bottom': 20, + 'margin-start': 20}); + for (setting in settings) { + hbox = buildHbox(settings, setting); + vbox.append(hbox); + } + + frame.append(vbox); + + return frame; +} + + +function buildHbox(settings, setting) { + let hbox; + + if (settings[setting].type == 's') + hbox = createStringSetting(settings, setting); + if (settings[setting].type == "i") + hbox = createIntSetting(settings, setting); + if (settings[setting].type == "b") + hbox = createBoolSetting(settings, setting); + if (settings[setting].type == "r") + hbox = createRangeSetting(settings, setting); + if (settings[setting].type == "e") + hbox = createEnumSetting(settings, setting); + + return hbox; +} + +function createEnumSetting(settings, setting) { + + let hbox = new Gtk.Box({orientation: Gtk.Orientation.HORIZONTAL, + 'margin-top': 5, + spacing: 10}); + + let setting_label = new Gtk.Label({label: settings[setting].label, + xalign: 0 }); + + let model = new Gtk.ListStore(); + model.set_column_types([GObject.TYPE_INT, GObject.TYPE_STRING]); + let setting_enum = new Gtk.ComboBox({model: model}); + setting_enum.get_style_context().add_class('raised'); + let renderer = new Gtk.CellRendererText(); + setting_enum.pack_start(renderer, true); + setting_enum.add_attribute(renderer, 'text', 1); + + for (let i=0; i<settings[setting].list.length; i++) { + let item = settings[setting].list[i]; + let iter = model.append(); + model.set(iter, [0, 1], [item.id, item.name]); + if (item.id == gsettings.get_enum(setting.replace('_', '-'))) { + setting_enum.set_active(item.id); + } + } + + setting_enum.connect('changed', function(entry) { + let [success, iter] = setting_enum.get_active_iter(); + if (!success) + return; + + let id = model.get_value(iter, 0) + gsettings.set_enum(setting.replace('_', '-'), id); + + }); + + if (settings[setting].help) { + setting_label.set_tooltip_text(settings[setting].help) + setting_enum.set_tooltip_text(settings[setting].help) + } + + hbox.append(setting_label); + hbox.append(setting_enum); + + return hbox; + +} + +function createStringSetting(settings, setting) { + + let hbox = new Gtk.Box({orientation: Gtk.Orientation.HORIZONTAL, + 'margin-top': 5, + spacing: 10}); + + let setting_label = new Gtk.Label({label: settings[setting].label, + xalign: 0 }); + + let setting_string = new Gtk.Entry({text: gsettings.get_string(setting.replace('_', '-'))}); + setting_string.set_width_chars(30); + setting_string.connect('notify::text', function(entry) { + gsettings.set_string(setting.replace('_', '-'), entry.text); + }); + + if (settings[setting].mode == "passwd") { + setting_string.set_visibility(false); + } + + if (settings[setting].help) { + setting_label.set_tooltip_text(settings[setting].help) + setting_string.set_tooltip_text(settings[setting].help) + } + + hbox.append(setting_label); + hbox.append(setting_string); + + return hbox; +} + +function createIntSetting(settings, setting) { + + let hbox = new Gtk.Box({orientation: Gtk.Orientation.HORIZONTAL, + 'margin-top': 5, + spacing: 10}); + + let setting_label = new Gtk.Label({label: settings[setting].label, + xalign: 0 }); + + let adjustment = new Gtk.Adjustment({ lower: settings[setting].min || 0, + upper: settings[setting].max || 65535, + step_increment: settings[setting].step || 1}); + let setting_int = new Gtk.SpinButton({adjustment: adjustment}); + setting_int.set_value(gsettings.get_int(setting.replace('_', '-'))); + setting_int.connect('value-changed', function(entry) { + gsettings.set_int(setting.replace('_', '-'), entry.value); + }); + + if (settings[setting].help) { + setting_label.set_tooltip_text(settings[setting].help) + setting_int.set_tooltip_text(settings[setting].help) + } + + hbox.append(setting_label); + hbox.append(setting_int); + + return hbox; +} + +function createBoolSetting(settings, setting) { + + let hbox = new Gtk.Box({orientation: Gtk.Orientation.HORIZONTAL, + 'margin-top': 5, + spacing: 10}); + + let setting_label = new Gtk.Label({label: settings[setting].label, + xalign: 0 }); + + let setting_switch = new Gtk.Switch({active: gsettings.get_boolean(setting.replace('_', '-'))}); + setting_switch.connect('notify::active', function(button) { + gsettings.set_boolean(setting.replace('_', '-'), button.active); + }); + + if (settings[setting].help) { + setting_label.set_tooltip_text(settings[setting].help) + setting_switch.set_tooltip_text(settings[setting].help) + } + + hbox.append(setting_label); + hbox.append(setting_switch); + + return hbox; +} + +function createRangeSetting(settings, setting) { + + let hbox = new Gtk.Box({ orientation: Gtk.Orientation.HORIZONTAL, + spacing: 10 }); + + let setting_label = new Gtk.Label({ label: settings[setting].label, + xalign: 0 }); + + let setting_range = Gtk.HScale.new_with_range(settings[setting].min, + settings[setting].max, + settings[setting].step); + setting_range.set_value(gsettings.get_int(setting)); + setting_range.set_draw_value(false); + setting_range.add_mark(settings[setting].default, + Gtk.PositionType.BOTTOM, null); + setting_range.set_size_request(200, -1); + setting_range.connect('value-changed', function(slider) { + gsettings.set_int(setting, slider.get_value()); + }); + + if (settings[setting].help) { + setting_label.set_tooltip_text(settings[setting].help) + setting_range.set_tooltip_text(settings[setting].help) + } + + hbox.append(setting_label); + hbox.append(setting_range); + + return hbox; +} diff --git a/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml new file mode 100644 index 0000000..408a743 --- /dev/null +++ b/extensions/middleclickclose/middleclickclose@paolo.tranquilli.gmail.com/schemas/org.gnome.shell.extensions.middleclickclose.gschema.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<schemalist gettext-domain="middleclickclose"> + <enum id='org.gnome.shell.extensions.middleclickclose.buttons'> + <value value='0' nick='left'/> + <value value='1' nick='middle'/> + <value value='2' nick='right'/> + <value value='3' nick='button 4'/> + <value value='4' nick='button 5'/> + <value value='5' nick='button 6'/> + <value value='6' nick='button 7'/> + <value value='7' nick='button 8'/> + <value value='8' nick='button 9'/> + </enum> + <schema path="/org/gnome/shell/extensions/middleclickclose/" id="org.gnome.shell.extensions.middleclickclose"> + <key name="close-button" enum="org.gnome.shell.extensions.middleclickclose.buttons"> + <default>'middle'</default> + <summary>Which mouse button is used to quick-close</summary> + </key> + <key type="i" name="rearrange-delay"> + <default>750</default> + <summary>Rearrangement delay after close</summary> + <description>Time in milliseconds it take for the scaled windows to rearrange themselves after any type of close action.</description> + </key> + </schema> +</schemalist> |