Fixed notification badge sizing on 200% scaled displays
This commit is contained in:
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
.~
|
||||
*~
|
||||
gschemas.compiled
|
||||
zorin-taskbar@zorinos.com*.zip
|
||||
*.mo
|
||||
po/zorin-taskbar.pot
|
||||
Settings.ui.h
|
||||
96
Makefile
Normal file
96
Makefile
Normal file
@@ -0,0 +1,96 @@
|
||||
# Basic Makefile
|
||||
|
||||
UUID = zorin-taskbar@zorinos.com
|
||||
BASE_MODULES = extension.js stylesheet.css metadata.json COPYING README.md
|
||||
EXTRA_MODULES = appIcons.js convenience.js panel.js panelManager.js proximity.js intellihide.js progress.js panelPositions.js panelStyle.js overview.js taskbar.js transparency.js windowPreview.js prefs.js utils.js Settings.ui
|
||||
EXTRA_IMAGES = show-desktop-symbolic.svg
|
||||
|
||||
TOLOCALIZE = prefs.js appIcons.js
|
||||
MSGSRC = $(wildcard po/*.po)
|
||||
ifeq ($(strip $(DESTDIR)),)
|
||||
INSTALLBASE = $(HOME)/.local/share/gnome-shell/extensions
|
||||
else
|
||||
INSTALLBASE = $(DESTDIR)/usr/share/gnome-shell/extensions
|
||||
endif
|
||||
INSTALLNAME = zorin-taskbar@zorinos.com
|
||||
|
||||
# The command line passed variable VERSION is used to set the version string
|
||||
# in the metadata and in the generated zip-file.
|
||||
ifdef VERSION
|
||||
else
|
||||
VERSION = 40
|
||||
endif
|
||||
|
||||
ifdef TARGET
|
||||
FILESUFFIX = _v$(VERSION)_$(TARGET)
|
||||
else
|
||||
FILESUFFIX = _v$(VERSION)
|
||||
endif
|
||||
|
||||
all: extension
|
||||
|
||||
clean:
|
||||
rm -f ./schemas/gschemas.compiled
|
||||
|
||||
extension: ./schemas/gschemas.compiled $(MSGSRC:.po=.mo)
|
||||
|
||||
./schemas/gschemas.compiled: ./schemas/org.gnome.shell.extensions.zorin-taskbar.gschema.xml
|
||||
glib-compile-schemas ./schemas/
|
||||
|
||||
potfile: ./po/zorin-taskbar.pot
|
||||
|
||||
mergepo: potfile
|
||||
for l in $(MSGSRC); do \
|
||||
msgmerge -U $$l ./po/zorin-taskbar.pot; \
|
||||
done;
|
||||
|
||||
./po/zorin-taskbar.pot: $(TOLOCALIZE) Settings.ui
|
||||
mkdir -p po
|
||||
xgettext -k_ -kN_ -o po/zorin-taskbar.pot --package-name "Zorin Taskbar" $(TOLOCALIZE)
|
||||
intltool-extract --type=gettext/glade Settings.ui
|
||||
xgettext -k_ -kN_ --join-existing -o po/zorin-taskbar.pot Settings.ui.h
|
||||
|
||||
./po/%.mo: ./po/%.po
|
||||
msgfmt -c $< -o $@
|
||||
|
||||
install: install-local
|
||||
|
||||
install-local: _build
|
||||
rm -rf $(INSTALLBASE)/$(INSTALLNAME)
|
||||
mkdir -p $(INSTALLBASE)/$(INSTALLNAME)
|
||||
cp -r ./_build/* $(INSTALLBASE)/$(INSTALLNAME)/
|
||||
-rm -fR _build
|
||||
echo done
|
||||
|
||||
zip-file: _build
|
||||
cd _build ; \
|
||||
zip -qr "$(UUID)$(FILESUFFIX).zip" .
|
||||
mv _build/$(UUID)$(FILESUFFIX).zip ./
|
||||
-rm -fR _build
|
||||
|
||||
_build: all
|
||||
-rm -fR ./_build
|
||||
mkdir -p _build
|
||||
cp $(BASE_MODULES) $(EXTRA_MODULES) _build
|
||||
|
||||
ifeq ($(TARGET),ego)
|
||||
find _build -name '*.js' -exec sed -i '/\/\/!start-update/,/\/\/!end-update/d' {} +
|
||||
endif
|
||||
|
||||
mkdir -p _build/img
|
||||
cd img ; cp $(EXTRA_IMAGES) ../_build/img/
|
||||
mkdir -p _build/schemas
|
||||
cp schemas/*.xml _build/schemas/
|
||||
cp schemas/gschemas.compiled _build/schemas/
|
||||
mkdir -p _build/locale
|
||||
for l in $(MSGSRC:.po=.mo) ; do \
|
||||
lf=_build/locale/`basename $$l .mo`; \
|
||||
mkdir -p $$lf; \
|
||||
mkdir -p $$lf/LC_MESSAGES; \
|
||||
cp $$l $$lf/LC_MESSAGES/zorin-taskbar.mo; \
|
||||
done;
|
||||
ifneq ($(and $(COMMIT),$(VERSION)),)
|
||||
sed -i 's/"version": [[:digit:]][[:digit:]]*/"version": $(VERSION),\n"commit": "$(COMMIT)"/' _build/metadata.json;
|
||||
else ifneq ($(VERSION),)
|
||||
sed -i 's/"version": [[:digit:]][[:digit:]]*/"version": $(VERSION)/' _build/metadata.json;
|
||||
endif
|
||||
@@ -1,4 +1,4 @@
|
||||
# Zorin Taskbar
|
||||
The official taskbar for Zorin OS.
|
||||
|
||||
Based on the [Dash to Dock](https://github.com/micheleg/dash-to-dock) Gnome Shell extension by micheleg.
|
||||
Based on the [Dash to Panel](https://github.com/home-sweet-gnome/dash-to-panel) Gnome Shell extension and the [Dash to Dock](https://github.com/micheleg/dash-to-dock) extension by micheleg.
|
||||
|
||||
3159
Settings.ui
Normal file
3159
Settings.ui
Normal file
File diff suppressed because it is too large
Load Diff
1736
appIcons.js
Normal file
1736
appIcons.js
Normal file
File diff suppressed because it is too large
Load Diff
136
convenience.js
136
convenience.js
@@ -1,10 +1,9 @@
|
||||
/*
|
||||
* Taskbar: A taskbar extension for the Gnome panel.
|
||||
* Copyright (C) 2016 Zorin OS
|
||||
* This file is part of the Zorin Taskbar extension for Zorin OS.
|
||||
*
|
||||
* 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 3 of the License, or
|
||||
* 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,
|
||||
@@ -17,87 +16,74 @@
|
||||
*
|
||||
*
|
||||
* Credits:
|
||||
* This file is based on code from the Dash to Dock extension by micheleg.
|
||||
* This file is based on code from the Dash to Dock extension by micheleg
|
||||
* and code from the Dash to Panel extension
|
||||
* Some code was also adapted from the upstream Gnome Shell source code.
|
||||
*/
|
||||
|
||||
const Config = imports.misc.config;
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const Gettext = imports.gettext;
|
||||
const Gio = imports.gi.Gio;
|
||||
|
||||
const Lang = imports.lang;
|
||||
/**
|
||||
* 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'];
|
||||
|
||||
// simplify global signals and function injections handling
|
||||
// abstract class
|
||||
const BasicHandler = new Lang.Class({
|
||||
Name: 'Taskbar.BasicHandler',
|
||||
// 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);
|
||||
}
|
||||
|
||||
_init: function(){
|
||||
this._storage = new Object();
|
||||
},
|
||||
/**
|
||||
* 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();
|
||||
|
||||
add: function(/*unlimited 3-long array arguments*/){
|
||||
schema = schema || extension.metadata['settings-schema'];
|
||||
|
||||
// convert arguments object to array, concatenate with generic
|
||||
let args = Array.concat('generic', Array.slice(arguments));
|
||||
// call addWithLabel with ags as if they were passed arguments
|
||||
this.addWithLabel.apply(this, args);
|
||||
},
|
||||
const GioSSS = Gio.SettingsSchemaSource;
|
||||
|
||||
destroy: function() {
|
||||
for( let label in this._storage )
|
||||
this.removeWithLabel(label);
|
||||
},
|
||||
// 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();
|
||||
|
||||
addWithLabel: function( label /* plus unlimited 3-long array arguments*/) {
|
||||
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.');
|
||||
|
||||
if(this._storage[label] == undefined)
|
||||
this._storage[label] = new Array();
|
||||
|
||||
// skip first element of the arguments
|
||||
for( let i = 1; i < arguments.length; i++ ) {
|
||||
this._storage[label].push( this._create(arguments[i]) );
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
removeWithLabel: function(label){
|
||||
|
||||
if(this._storage[label]) {
|
||||
for( let i = 0; i < this._storage[label].length; i++ ) {
|
||||
this._remove(this._storage[label][i]);
|
||||
}
|
||||
|
||||
delete this._storage[label];
|
||||
}
|
||||
},
|
||||
|
||||
/* Virtual methods to be implemented by subclass */
|
||||
// create single element to be stored in the storage structure
|
||||
_create: function(item){
|
||||
throw new Error('no implementation of _create in ' + this);
|
||||
},
|
||||
|
||||
// correctly delete single element
|
||||
_remove: function(item){
|
||||
throw new Error('no implementation of _remove in ' + this);
|
||||
}
|
||||
});
|
||||
|
||||
// Manage global signals
|
||||
const GlobalSignalsHandler = new Lang.Class({
|
||||
Name: 'Taskbar.GlobalSignalsHandler',
|
||||
Extends: BasicHandler,
|
||||
|
||||
_create: function(item) {
|
||||
|
||||
let object = item[0];
|
||||
let event = item[1];
|
||||
let callback = item[2]
|
||||
let id = object.connect(event, callback);
|
||||
|
||||
return [object, id];
|
||||
},
|
||||
|
||||
_remove: function(item){
|
||||
item[0].disconnect(item[1]);
|
||||
}
|
||||
});
|
||||
return new Gio.Settings({
|
||||
settings_schema: schemaObj
|
||||
});
|
||||
}
|
||||
|
||||
328
debian/changelog
vendored
Normal file
328
debian/changelog
vendored
Normal file
@@ -0,0 +1,328 @@
|
||||
gnome-shell-extension-zorin-taskbar (40.17) focal; urgency=medium
|
||||
|
||||
* Fixed notification badge sizing on 200% scaled displays
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Wed, 21 Jul 2021 13:00:25 +0100
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (40.16) focal; urgency=medium
|
||||
|
||||
* Fixed bug that caused the panel to disappear after locking the
|
||||
screen while fullscreen content is playing
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Wed, 02 Jun 2021 20:24:27 +0100
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (40.15) focal; urgency=medium
|
||||
|
||||
* Updated translations
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Sun, 23 May 2021 20:32:41 +0100
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (40.14) focal; urgency=medium
|
||||
|
||||
* Fixed new translations
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Sun, 23 May 2021 20:26:18 +0100
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (40.13) focal; urgency=medium
|
||||
|
||||
* Added new translations and made the main panel always appear on the
|
||||
primary display
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Sun, 23 May 2021 20:03:46 +0100
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (40.12) focal; urgency=medium
|
||||
|
||||
* Updated Russian and Japanese translations
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Wed, 05 May 2021 20:10:48 +0100
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (40.11) focal; urgency=medium
|
||||
|
||||
* No longer animates disposed icons
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Tue, 06 Apr 2021 13:13:47 +0100
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (40.10) focal; urgency=medium
|
||||
|
||||
* Added Zorin Appearance link to taskbar right-click menu
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Tue, 23 Mar 2021 19:36:07 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (40.9) focal; urgency=medium
|
||||
|
||||
* Removed Terminal from right-click menu
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Mon, 22 Mar 2021 15:38:20 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (40.8) focal; urgency=medium
|
||||
|
||||
* Removed dot style settings and moved Intellihide to Style tab in
|
||||
prefs
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Sun, 21 Mar 2021 15:08:03 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (40.7) focal; urgency=medium
|
||||
|
||||
* Removed style override for app-well-app items
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Sun, 21 Feb 2021 20:00:12 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (40.6) focal; urgency=medium
|
||||
|
||||
* Improved styling of progress bars
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Sun, 21 Feb 2021 15:54:07 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (40.5) focal; urgency=medium
|
||||
|
||||
* Re-based on upstream as at commit
|
||||
e4a71fa014b565171c93d15f436be9c3599b11fb
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Sun, 21 Feb 2021 15:22:52 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (40.4) focal; urgency=medium
|
||||
|
||||
* Updated notification badge overlay and limited minimum panel size to
|
||||
24px
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Sun, 21 Feb 2021 15:02:09 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (40.3) focal; urgency=medium
|
||||
|
||||
* Increased border radius of floating panel and preview container
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Sun, 21 Feb 2021 00:50:25 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (40.2) focal; urgency=medium
|
||||
|
||||
* Imporved visibility of window previews by styling them with the dash-
|
||||
label class
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Thu, 31 Dec 2020 18:34:46 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (40.1) focal; urgency=medium
|
||||
|
||||
* Added floating rounded theme when using Intellihide
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Wed, 30 Dec 2020 00:44:32 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (40) focal; urgency=medium
|
||||
|
||||
* Re-based on upstream version 40 as at commit
|
||||
48a69e529614d1da456802b818e7d7f0d4d1d642
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Mon, 28 Dec 2020 22:08:11 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (2.0.11) bionic; urgency=medium
|
||||
|
||||
* Set variables to 0 on destroy in taskbar.js
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Tue, 19 Feb 2019 18:35:40 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (2.0.10) bionic; urgency=medium
|
||||
|
||||
* Fixed bugs with windowPreview peek mode
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Fri, 15 Feb 2019 00:13:19 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (2.0.9) bionic; urgency=medium
|
||||
|
||||
* Fixed touch support in Gnome Shell 3.30 and made touching an app
|
||||
icon show its window preview if more than one window is opened
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Thu, 14 Feb 2019 13:27:40 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (2.0.8) bionic; urgency=medium
|
||||
|
||||
* Added definition check when getting taskbar icons
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Tue, 05 Feb 2019 18:17:32 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (2.0.7) bionic; urgency=medium
|
||||
|
||||
* Fixed _dragInfo definition check
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Tue, 05 Feb 2019 14:45:45 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (2.0.6) bionic; urgency=medium
|
||||
|
||||
* Fixed name of Taskbar Actor
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Sat, 12 Jan 2019 18:35:19 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (2.0.5) bionic; urgency=medium
|
||||
|
||||
* Re-based on Dash to Panel as at commit
|
||||
b6094fdaec89349cc6f3e0da887d19fdf3db1c60
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Sat, 12 Jan 2019 16:02:44 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (2.0.4) bionic; urgency=medium
|
||||
|
||||
* Re-based on Dash to Panel as at commit
|
||||
6e53889082eef4eed9cdc1c496e90a6f8450d1fd
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Fri, 11 Jan 2019 16:41:36 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (2.0.3) bionic; urgency=medium
|
||||
|
||||
* Re-based on Dash to Panel as at commit
|
||||
8e715c7b07d30bfe0858a1eb93638c653b8bd268
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Tue, 08 Jan 2019 18:46:52 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (2.0.2) bionic; urgency=medium
|
||||
|
||||
* Re-based on Dash to Panel as at commit
|
||||
dcd8a017e2a9ae66518ade2ae7a74d9836dd3633
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Thu, 03 Jan 2019 14:27:47 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (2.0.1) bionic; urgency=medium
|
||||
|
||||
* Updated URL in metadata.json
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Mon, 31 Dec 2018 14:27:13 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (2.0) bionic; urgency=medium
|
||||
|
||||
* Re-based on Dash to Panel commit
|
||||
e2eeb0290152bdf9ea3a9643ce6d36d8ba12813d
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Sun, 30 Dec 2018 18:44:22 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.4.4) xenial; urgency=medium
|
||||
|
||||
* Re-based on Dash to Panel version 13
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Wed, 07 Mar 2018 15:16:36 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.4.3) xenial; urgency=medium
|
||||
|
||||
* Fixed window preview issue with Remmina
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Tue, 06 Mar 2018 22:37:07 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.4.2) xenial; urgency=medium
|
||||
|
||||
* Various bug fixes
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Tue, 06 Mar 2018 20:44:12 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.4.1) xenial; urgency=medium
|
||||
|
||||
* Added more required imports
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Tue, 06 Mar 2018 11:22:48 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.4) xenial; urgency=medium
|
||||
|
||||
* Re-based on Dash to Panel version 12
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Tue, 06 Mar 2018 01:25:06 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.3) xenial; urgency=medium
|
||||
|
||||
* Added opacify peek on window preview hover
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Fri, 28 Jul 2017 00:40:19 +0100
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.2.1) xenial; urgency=medium
|
||||
|
||||
* Removed window preview opening animation
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Fri, 14 Apr 2017 20:05:44 +0100
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.2) xenial; urgency=medium
|
||||
|
||||
* Re-based on Dash to Panel commit
|
||||
1415cbdf5cadff94f4d9483b4b77676a3a2ea8d1
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Tue, 11 Apr 2017 22:16:41 +0100
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.1.5) xenial; urgency=medium
|
||||
|
||||
* Enabled opening animations for window previews
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Thu, 12 Jan 2017 11:54:50 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.1.4) xenial; urgency=medium
|
||||
|
||||
* App running indicators now appear on top when the panel is on top
|
||||
and bug fixes
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Wed, 11 Jan 2017 12:46:23 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.1.3) xenial; urgency=medium
|
||||
|
||||
* Fixed another high CPU usage issue – credit to jderose9
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Tue, 10 Jan 2017 22:01:51 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.1.2) xenial; urgency=medium
|
||||
|
||||
* Reduced CPU usage – credit to jderose9 – and improved the
|
||||
responsiveness of DPI changes
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Tue, 10 Jan 2017 12:40:58 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.1.1) xenial; urgency=medium
|
||||
|
||||
* Removed window preview menu enter timeout to fix keygrab focus
|
||||
lockup bug and make the taskbar experience faster
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Sun, 08 Jan 2017 20:02:26 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.1) xenial; urgency=medium
|
||||
|
||||
* Added full support for HiDPI displays
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Mon, 02 Jan 2017 00:28:46 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.0.6) xenial; urgency=medium
|
||||
|
||||
* Fixed a number of memory leaks in the Window Preview code
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Tue, 27 Dec 2016 15:53:08 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.0.5) xenial; urgency=medium
|
||||
|
||||
* Updated copyright notices
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Fri, 04 Nov 2016 14:34:48 +0000
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.0.4) xenial; urgency=medium
|
||||
|
||||
* Disconnected signals
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Sun, 23 Oct 2016 13:43:35 +0100
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.0.3) xenial; urgency=medium
|
||||
|
||||
* Fixed Work ID issue
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Thu, 20 Oct 2016 22:59:07 +0100
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.0.2) xenial; urgency=medium
|
||||
|
||||
* Ready for public use in Zorin OS 12
|
||||
|
||||
-- Artyom Zorin <azorin@zoringroup.com> Sun, 18 Sep 2016 20:24:18 +0100
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.0.1) xenial; urgency=medium
|
||||
|
||||
* Updated copyright notice
|
||||
|
||||
-- Zorin OS <os@zoringroup.com> Mon, 12 Sep 2016 19:23:04 +0100
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (1.0) xenial; urgency=medium
|
||||
|
||||
* Initial stable release
|
||||
|
||||
-- Zorin OS <os@zoringroup.com> Sat, 03 Sep 2016 23:19:10 +0100
|
||||
|
||||
gnome-shell-extension-zorin-taskbar (0.9) xenial; urgency=low
|
||||
|
||||
* Pre-release
|
||||
|
||||
-- Zorin OS <os@zoringroup.com> Fri, 02 Sep 2016 10:47:51 -0400
|
||||
13
debian/control
vendored
Normal file
13
debian/control
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
Source: gnome-shell-extension-zorin-taskbar
|
||||
Section: gnome
|
||||
Priority: optional
|
||||
Maintainer: Artyom Zorin <azorin@zoringroup.com>
|
||||
Build-Depends: debhelper-compat (= 12), libglib2.0-bin, zip
|
||||
Standards-Version: 4.5.0
|
||||
Rules-Requires-Root: no
|
||||
|
||||
Package: gnome-shell-extension-zorin-taskbar
|
||||
Architecture: all
|
||||
Depends: ${misc:Depends}, gnome-shell (>= 3.18)
|
||||
Description: Zorin Taskbar extension
|
||||
A taskbar extension for the Zorin Desktop environment.
|
||||
73
debian/copyright
vendored
Normal file
73
debian/copyright
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: gnome-shell-extension-zorin-taskbar
|
||||
|
||||
Files: *
|
||||
Copyright: 2016-2020, Jason DeRose (https://github.com/jderose9)
|
||||
2016-2020, Zorin OS Technologies Ltd.
|
||||
License: GPL-2+
|
||||
|
||||
Files: po/cs.po
|
||||
Copyright: 2017-2018 Milan Zink <zeten30@gmail.com>
|
||||
License: GPL-2+
|
||||
|
||||
Files: po/es.po
|
||||
Copyright: 2017 Fran Glais <franglais125@gmail.com>
|
||||
License: GPL-2+
|
||||
|
||||
Files: po/gl.po
|
||||
Copyright: 2020 Fran Dieguez <frandieguez@gnome.org>
|
||||
License: GPL-2+
|
||||
|
||||
Files: po/pt_BR.po
|
||||
Copyright: 2017 Fábio Nogueira <fnogueira@gnome.org>
|
||||
License: GPL-2+
|
||||
|
||||
Files: po/ru.po
|
||||
Copyright: 2017 Alex Gluck <alexgluck@bk.ru>
|
||||
License: GPL-2+
|
||||
|
||||
Files: po/hu.po
|
||||
Copyright: 2017 Balázs Úr <urbalazs@gmail.com>
|
||||
License: GPL-2+
|
||||
|
||||
Files: po/it.po
|
||||
Copyright: 2018 Enrico Bella <enricobe@hotmail.com>
|
||||
License: GPL-2+
|
||||
|
||||
Files: po/ja.po
|
||||
Copyright: 2017-2018 Shinichirou Yamada <yamada_strong_yamada_nice_64bit@yahoo.co.jp>
|
||||
2018 sicklylife.jp <translation@sicklylife.jp>
|
||||
License: GPL-2+
|
||||
|
||||
Files: po/kk.po
|
||||
Copyright: 2017 Baurzhan Muftakhidinov <baurthefirst@gmail.com>
|
||||
License: GPL-2+
|
||||
|
||||
Files: po/zh_CN.po
|
||||
po/zh_TW.po
|
||||
Copyright: 2017 Boyuan Yang <073plan@gmail.com>
|
||||
License: GPL-2+
|
||||
|
||||
Files: po/tr.po
|
||||
Copyright: 2018 Serdar Sağlam <teknomobil@yandex.com>
|
||||
License: GPL-2+
|
||||
|
||||
Files: debian/*
|
||||
Copyright: 2017-2020 Jonathan Carter <jcc@debian.org>
|
||||
License: GPL-2+
|
||||
|
||||
License: GPL-2+
|
||||
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.
|
||||
.
|
||||
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/>.
|
||||
.
|
||||
On Debian systems, the complete text of the GNU General
|
||||
Public License can be found in `/usr/share/common-licenses/GPL-2'.
|
||||
1
debian/install
vendored
Normal file
1
debian/install
vendored
Normal file
@@ -0,0 +1 @@
|
||||
schemas/org.gnome.shell.extensions.zorin-taskbar.gschema.xml usr/share/glib-2.0/schemas
|
||||
9
debian/rules
vendored
Executable file
9
debian/rules
vendored
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/make -f
|
||||
|
||||
%:
|
||||
dh $@
|
||||
|
||||
override_dh_install:
|
||||
dh_install
|
||||
rm -f debian/gnome-shell-extension-zorin-taskbar/usr/share/gnome-shell/extensions/zorin-taskbar@zorinos.com/COPYING
|
||||
rm -f debian/gnome-shell-extension-zorin-taskbar/usr/share/gnome-shell/extensions/zorin-taskbar@zorinos.com/README.md
|
||||
1
debian/source/format
vendored
Normal file
1
debian/source/format
vendored
Normal file
@@ -0,0 +1 @@
|
||||
3.0 (native)
|
||||
229
extension.js
229
extension.js
@@ -1,10 +1,9 @@
|
||||
/*
|
||||
* Taskbar: A taskbar extension for the Gnome panel.
|
||||
* Copyright (C) 2016 Zorin OS
|
||||
* This file is part of the Zorin Taskbar extension for Zorin OS.
|
||||
*
|
||||
* 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 3 of the License, or
|
||||
* 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,
|
||||
@@ -15,151 +14,127 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*
|
||||
* Credits:
|
||||
* This file is based on code from the Dash to Dock extension by micheleg.
|
||||
* Some code was also adapted from the upstream Gnome Shell source code.
|
||||
*/
|
||||
|
||||
|
||||
const Me = imports.misc.extensionUtils.getCurrentExtension();
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Convenience = Me.imports.convenience;
|
||||
const Taskbar = Me.imports.taskbar;
|
||||
const Lang = imports.lang;
|
||||
const Main = imports.ui.main;
|
||||
const Meta = imports.gi.Meta;
|
||||
const Gio = imports.gi.Gio;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Lang = imports.lang;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const WindowManager = imports.ui.windowManager;
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Signals = imports.signals;
|
||||
|
||||
let appMenu;
|
||||
let container;
|
||||
let panel;
|
||||
let panelConnectId;
|
||||
let signalsHandler;
|
||||
let taskbar;
|
||||
const Me = ExtensionUtils.getCurrentExtension();
|
||||
const Convenience = Me.imports.convenience;
|
||||
const PanelManager = Me.imports.panelManager;
|
||||
const Utils = Me.imports.utils;
|
||||
|
||||
const ZORIN_DASH_UUID = 'zorin-dash@zorinos.com';
|
||||
|
||||
let panelManager;
|
||||
let oldDash;
|
||||
let extensionChangedHandler;
|
||||
let disabledZorinDash;
|
||||
let extensionSystem = (Main.extensionManager || imports.ui.extensionSystem);
|
||||
|
||||
function init() {
|
||||
Convenience.initTranslations(Utils.TRANSLATION_DOMAIN);
|
||||
|
||||
//create an object that persists until gnome-shell is restarted, even if the extension is disabled
|
||||
Me.persistentStorage = {};
|
||||
}
|
||||
|
||||
function enable() {
|
||||
panel = Main.panel;
|
||||
container = panel._leftBox;
|
||||
appMenu = panel.statusArea['appMenu'];
|
||||
// The Zorin Dash extension might get enabled after this extension
|
||||
extensionChangedHandler = extensionSystem.connect('extension-state-changed', (data, extension) => {
|
||||
if (extension.uuid === ZORIN_DASH_UUID && extension.state === 1) {
|
||||
_enable();
|
||||
}
|
||||
});
|
||||
|
||||
panelConnectId = panel.actor.connect('allocate', allocate);
|
||||
container.remove_child(appMenu.container);
|
||||
taskbar = new Taskbar.taskbar();
|
||||
Main.overview.dashIconSize = taskbar.iconSize;
|
||||
//create a global object that can emit signals and conveniently expose functionalities to other extensions
|
||||
global.zorinTaskbar = {};
|
||||
Signals.addSignalMethods(global.zorinTaskbar);
|
||||
|
||||
_enable();
|
||||
}
|
||||
|
||||
container.insert_child_at_index( taskbar.actor, 2 );
|
||||
function _enable() {
|
||||
let zorinDash = Main.extensionManager ?
|
||||
Main.extensionManager.lookup(ZORIN_DASH_UUID) : //gnome-shell >= 3.33.4
|
||||
ExtensionUtils.extensions[ZORIN_DASH_UUID];
|
||||
|
||||
// Since Gnome 3.8 dragging an app without having opened the overview before cause the attemp to
|
||||
//animate a null target since some variables are not initialized when the viewSelector is created
|
||||
if(Main.overview.viewSelector._activePage == null)
|
||||
Main.overview.viewSelector._activePage = Main.overview.viewSelector._workspacesPage;
|
||||
if (zorinDash && zorinDash.stateObj && zorinDash.stateObj.dockManager) {
|
||||
// Disable Zorin Dash
|
||||
let extensionOrder = (extensionSystem.extensionOrder || extensionSystem._extensionOrder);
|
||||
|
||||
// sync hover after a popupmenu is closed
|
||||
taskbar.connect('menu-closed', Lang.bind(this, function(){container.sync_hover();}));
|
||||
Utils.getStageTheme().get_theme().unload_stylesheet(zorinDash.stylesheet);
|
||||
zorinDash.stateObj.disable();
|
||||
disabledZorinDash = true;
|
||||
zorinDash.state = 2; //ExtensionState.DISABLED
|
||||
extensionOrder.splice(extensionOrder.indexOf(ZORIN_DASH_UUID), 1);
|
||||
|
||||
signalsHandler = new Convenience.GlobalSignalsHandler();
|
||||
signalsHandler.add(
|
||||
// Keep dragged icon consistent in size with this dash
|
||||
[
|
||||
taskbar,
|
||||
'icon-size-changed',
|
||||
Lang.bind(this, function() {
|
||||
Main.overview.dashIconSize = taskbar.iconSize;
|
||||
})
|
||||
],
|
||||
// This duplicate the similar signal which is in owerview.js.
|
||||
// Being connected and thus executed later this effectively
|
||||
// overwrite any attempt to use the size of the default dash
|
||||
// which given the customization is usually much smaller.
|
||||
// I can't easily disconnect the original signal
|
||||
[
|
||||
Main.overview._controls.dash,
|
||||
'icon-size-changed',
|
||||
Lang.bind(this, function() {
|
||||
Main.overview.dashIconSize = taskbar.iconSize;
|
||||
})
|
||||
]
|
||||
//reset to prevent conflicts with the zorin-dash
|
||||
if (panelManager) {
|
||||
disable(true);
|
||||
}
|
||||
}
|
||||
|
||||
if (panelManager) return; //already initialized
|
||||
|
||||
Me.settings = Convenience.getSettings('org.gnome.shell.extensions.zorin-taskbar');
|
||||
Me.desktopSettings = Convenience.getSettings('org.gnome.desktop.interface');
|
||||
|
||||
panelManager = new PanelManager.dtpPanelManager();
|
||||
|
||||
panelManager.enable();
|
||||
|
||||
Utils.removeKeybinding('open-application-menu');
|
||||
Utils.addKeybinding(
|
||||
'open-application-menu',
|
||||
new Gio.Settings({ schema_id: WindowManager.SHELL_KEYBINDINGS_SCHEMA }),
|
||||
Lang.bind(this, function() {
|
||||
panelManager.primaryPanel.taskbar.popupFocusedAppSecondaryMenu();
|
||||
}),
|
||||
Shell.ActionMode.NORMAL | Shell.ActionMode.POPUP
|
||||
);
|
||||
}
|
||||
|
||||
function disable() {
|
||||
signalsHandler.destroy();
|
||||
container.remove_child(taskbar.actor);
|
||||
container.add_child(appMenu.container);
|
||||
taskbar.destroy();
|
||||
panel.actor.disconnect(panelConnectId);
|
||||
|
||||
// reset stored icon size to the default dash
|
||||
Main.overview.dashIconSize = Main.overview._controls.dash.iconSize;
|
||||
|
||||
appMenu = null;
|
||||
container = null;
|
||||
panel = null;
|
||||
panelConnectId = null;
|
||||
signalsHandler = null;
|
||||
taskbar = null;
|
||||
// Pretend I'm the dash: meant to make appgrd swarm animation come from the
|
||||
// right position of the appShowButton.
|
||||
oldDash = Main.overview._dash;
|
||||
Main.overview._dash = panelManager.primaryPanel.taskbar;
|
||||
}
|
||||
|
||||
function allocate(actor, box, flags) {
|
||||
let allocWidth = box.x2 - box.x1;
|
||||
let allocHeight = box.y2 - box.y1;
|
||||
function disable(reset) {
|
||||
panelManager.disable();
|
||||
Main.overview._dash = oldDash;
|
||||
Me.settings.run_dispose();
|
||||
Me.desktopSettings.run_dispose();
|
||||
|
||||
let [leftMinWidth, leftNaturalWidth] = panel._leftBox.get_preferred_width(-1);
|
||||
let [centerMinWidth, centerNaturalWidth] = panel._centerBox.get_preferred_width(-1);
|
||||
let [rightMinWidth, rightNaturalWidth] = panel._rightBox.get_preferred_width(-1);
|
||||
delete Me.settings;
|
||||
oldDash = null;
|
||||
panelManager = null;
|
||||
|
||||
Utils.removeKeybinding('open-application-menu');
|
||||
Utils.addKeybinding(
|
||||
'open-application-menu',
|
||||
new Gio.Settings({ schema_id: WindowManager.SHELL_KEYBINDINGS_SCHEMA }),
|
||||
Lang.bind(Main.wm, Main.wm._toggleAppMenu),
|
||||
Shell.ActionMode.NORMAL | Shell.ActionMode.POPUP
|
||||
);
|
||||
|
||||
let sideWidth = allocWidth - rightNaturalWidth - centerNaturalWidth;
|
||||
if (!reset) {
|
||||
extensionSystem.disconnect(extensionChangedHandler);
|
||||
delete global.zorinTaskbar;
|
||||
|
||||
let childBox = new Clutter.ActorBox();
|
||||
|
||||
childBox.y1 = 0;
|
||||
childBox.y2 = allocHeight;
|
||||
if (panel.actor.get_text_direction() == Clutter.TextDirection.RTL) {
|
||||
childBox.x1 = allocWidth - Math.min(Math.floor(sideWidth), leftNaturalWidth);
|
||||
childBox.x2 = allocWidth;
|
||||
} else {
|
||||
childBox.x1 = 0;
|
||||
childBox.x2 = sideWidth;
|
||||
// Re-enable Zorin Dash if it was disabled by Zorin Taskbar
|
||||
if (disabledZorinDash && Main.sessionMode.allowExtensions) {
|
||||
(extensionSystem._callExtensionEnable || extensionSystem.enableExtension).call(extensionSystem, ZORIN_DASH_UUID);
|
||||
}
|
||||
}
|
||||
panel._leftBox.allocate(childBox, flags);
|
||||
|
||||
childBox.y1 = 0;
|
||||
childBox.y2 = allocHeight;
|
||||
if (panel.actor.get_text_direction() == Clutter.TextDirection.RTL) {
|
||||
childBox.x1 = rightNaturalWidth;
|
||||
childBox.x2 = childBox.x1 + centerNaturalWidth;
|
||||
} else {
|
||||
childBox.x1 = allocWidth - centerNaturalWidth - rightNaturalWidth;
|
||||
childBox.x2 = childBox.x1 + centerNaturalWidth;
|
||||
}
|
||||
panel._centerBox.allocate(childBox, flags);
|
||||
|
||||
childBox.y1 = 0;
|
||||
childBox.y2 = allocHeight;
|
||||
if (panel.actor.get_text_direction() == Clutter.TextDirection.RTL) {
|
||||
childBox.x1 = 0;
|
||||
childBox.x2 = rightNaturalWidth;
|
||||
} else {
|
||||
childBox.x1 = allocWidth - rightNaturalWidth;
|
||||
childBox.x2 = allocWidth;
|
||||
}
|
||||
panel._rightBox.allocate(childBox, flags);
|
||||
|
||||
let [cornerMinWidth, cornerWidth] = panel._leftCorner.actor.get_preferred_width(-1);
|
||||
let [cornerMinHeight, cornerHeight] = panel._leftCorner.actor.get_preferred_width(-1);
|
||||
childBox.x1 = 0;
|
||||
childBox.x2 = cornerWidth;
|
||||
childBox.y1 = allocHeight;
|
||||
childBox.y2 = allocHeight + cornerHeight;
|
||||
panel._leftCorner.actor.allocate(childBox, flags);
|
||||
|
||||
let [cornerMinWidth, cornerWidth] = panel._rightCorner.actor.get_preferred_width(-1);
|
||||
let [cornerMinHeight, cornerHeight] = panel._rightCorner.actor.get_preferred_width(-1);
|
||||
childBox.x1 = allocWidth - cornerWidth;
|
||||
childBox.x2 = allocWidth;
|
||||
childBox.y1 = allocHeight;
|
||||
childBox.y2 = allocHeight + cornerHeight;
|
||||
panel._rightCorner.actor.allocate(childBox, flags);
|
||||
}
|
||||
|
||||
198
img/show-desktop-symbolic.svg
Normal file
198
img/show-desktop-symbolic.svg
Normal file
@@ -0,0 +1,198 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="show-desktop-symbolic.svg"
|
||||
inkscape:export-filename="/home/sam/source-symbolic.png"
|
||||
inkscape:export-xdpi="270"
|
||||
inkscape:export-ydpi="270"
|
||||
height="16"
|
||||
id="svg7384"
|
||||
style="enable-background:new"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
width="16">
|
||||
<sodipodi:namedview
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:bbox-paths="false"
|
||||
bordercolor="#666666"
|
||||
borderlayer="false"
|
||||
borderopacity="1"
|
||||
inkscape:current-layer="layer9"
|
||||
inkscape:cx="4.383315"
|
||||
inkscape:cy="8.4624117"
|
||||
gridtolerance="10"
|
||||
inkscape:guide-bbox="true"
|
||||
guidetolerance="10"
|
||||
id="namedview88"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:object-paths="true"
|
||||
objecttolerance="10"
|
||||
pagecolor="#f7f7f7"
|
||||
inkscape:pageopacity="1"
|
||||
inkscape:pageshadow="2"
|
||||
showborder="true"
|
||||
showgrid="false"
|
||||
showguides="false"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:snap-bbox-edge-midpoints="false"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:snap-center="false"
|
||||
inkscape:snap-global="true"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-others="true"
|
||||
inkscape:snap-page="false"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-to-guides="true"
|
||||
inkscape:window-height="1000"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:zoom="45.254834">
|
||||
<inkscape:grid
|
||||
color="#000000"
|
||||
dotted="false"
|
||||
empcolor="#0800ff"
|
||||
empopacity="0.4627451"
|
||||
empspacing="4"
|
||||
enabled="true"
|
||||
id="grid4866"
|
||||
opacity="0.16470588"
|
||||
originx="-404"
|
||||
originy="-552"
|
||||
snapvisiblegridlinesonly="true"
|
||||
spacingx="0.25px"
|
||||
spacingy="0.25px"
|
||||
type="xygrid"
|
||||
visible="true" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata90">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Paper Symbolic Icon Theme</dc:title>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" />
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/3.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<title
|
||||
id="title8473">Paper Symbolic Icon Theme</title>
|
||||
<defs
|
||||
id="defs7386">
|
||||
<linearGradient
|
||||
id="linearGradient6882"
|
||||
osb:paint="solid">
|
||||
<stop
|
||||
id="stop6884"
|
||||
offset="0"
|
||||
style="stop-color:#555555;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient5606"
|
||||
osb:paint="solid">
|
||||
<stop
|
||||
id="stop5608"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter7554"
|
||||
style="color-interpolation-filters:sRGB">
|
||||
<feBlend
|
||||
inkscape:collect="always"
|
||||
id="feBlend7556"
|
||||
in2="BackgroundImage"
|
||||
mode="darken" />
|
||||
</filter>
|
||||
</defs>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer9"
|
||||
inkscape:label="status"
|
||||
style="display:inline"
|
||||
transform="translate(-645.0002,335)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 648.0002,-333 c -1.5,0 -3,1.5 -3,3 l 0,6 c 0,1.5 1.5,3 3,3 l 10,0 c 1.5,0 3,-1.5 3,-3 l 0,-6 c 0,-1.5 -1.5,-3 -3,-3 z m 0,2 10,0 c 0.5,0 1,0.5 1,1 l 0,6 c 0,0.5 -0.5,1 -1,1 l -10,0 c -0.5,0 -1,-0.5 -1,-1 l 0,-6 c 0,-0.5 0.5,-1 1,-1 z"
|
||||
id="path5875"
|
||||
sodipodi:nodetypes="ssssssssssssssssss"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#555555;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:new" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer10"
|
||||
inkscape:label="devices"
|
||||
style="display:inline;filter:url(#filter7554)"
|
||||
transform="translate(-645.0002,335)" />
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:label="places"
|
||||
style="display:inline"
|
||||
transform="translate(-404,-282)" />
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer14"
|
||||
inkscape:label="mimetypes"
|
||||
style="display:inline"
|
||||
transform="translate(-645.0002,335)" />
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer15"
|
||||
inkscape:label="emblems"
|
||||
style="display:inline"
|
||||
transform="translate(-645.0002,335)" />
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="g71291"
|
||||
inkscape:label="emotes"
|
||||
style="display:inline"
|
||||
transform="translate(-645.0002,335)" />
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="categories"
|
||||
style="display:inline"
|
||||
transform="translate(-404,-132)" />
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer12"
|
||||
inkscape:label="actions"
|
||||
style="display:inline"
|
||||
transform="translate(-645.0002,335)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.2 KiB |
441
intellihide.js
Normal file
441
intellihide.js
Normal file
@@ -0,0 +1,441 @@
|
||||
/*
|
||||
* This file is part of the Zorin Taskbar extension for Zorin OS.
|
||||
*
|
||||
* 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/>.
|
||||
*
|
||||
* Credits:
|
||||
* This file is based on code from the Dash to Panel extension
|
||||
*/
|
||||
|
||||
const Lang = imports.lang;
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Meta = imports.gi.Meta;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
|
||||
var GrabHelper = imports.ui.grabHelper;
|
||||
const Layout = imports.ui.layout;
|
||||
const Main = imports.ui.main;
|
||||
const OverviewControls = imports.ui.overviewControls;
|
||||
const PointerWatcher = imports.ui.pointerWatcher;
|
||||
|
||||
const Me = imports.misc.extensionUtils.getCurrentExtension();
|
||||
const Panel = Me.imports.panel;
|
||||
const Proximity = Me.imports.proximity;
|
||||
const Utils = Me.imports.utils;
|
||||
|
||||
var INTELLIHIDE_PRESSURE_THRESHOLD = 100;
|
||||
var INTELLIHIDE_PRESSURE_TIME = 1000;
|
||||
var INTELLIHIDE_ANIMATION_TIME = 200;
|
||||
var INTELLIHIDE_CLOSE_DELAY = 400;
|
||||
var INTELLIHIDE_ENABLE_START_DELAY = 2000;
|
||||
|
||||
//timeout intervals
|
||||
const CHECK_POINTER_MS = 200;
|
||||
const CHECK_GRAB_MS = 400;
|
||||
const POST_ANIMATE_MS = 50;
|
||||
const MIN_UPDATE_MS = 250;
|
||||
|
||||
//timeout names
|
||||
const T1 = 'checkGrabTimeout';
|
||||
const T2 = 'limitUpdateTimeout';
|
||||
const T3 = 'postAnimateTimeout';
|
||||
const T4 = 'panelBoxClipTimeout';
|
||||
|
||||
var SIDE_CONTROLS_ANIMATION_TIME = OverviewControls.SIDE_CONTROLS_ANIMATION_TIME / (OverviewControls.SIDE_CONTROLS_ANIMATION_TIME > 1 ? 1000 : 1);
|
||||
|
||||
var Hold = {
|
||||
NONE: 0,
|
||||
TEMPORARY: 1,
|
||||
PERMANENT: 2
|
||||
};
|
||||
|
||||
var Intellihide = Utils.defineClass({
|
||||
Name: 'ZorinTaskbar.Intellihide',
|
||||
|
||||
_init: function(dtpPanel) {
|
||||
this._dtpPanel = dtpPanel;
|
||||
this._panelBox = dtpPanel.panelBox;
|
||||
this._panelManager = dtpPanel.panelManager;
|
||||
this._proximityManager = this._panelManager.proximityManager;
|
||||
this._holdStatus = Hold.NONE;
|
||||
|
||||
this._signalsHandler = new Utils.GlobalSignalsHandler();
|
||||
this._timeoutsHandler = new Utils.TimeoutsHandler();
|
||||
|
||||
this._intellihideChangedId = Me.settings.connect('changed::intellihide', () => this._changeEnabledStatus());
|
||||
this._intellihideOnlySecondaryChangedId = Me.settings.connect('changed::intellihide-only-secondary', () => this._changeEnabledStatus());
|
||||
|
||||
this.enabled = false;
|
||||
this._changeEnabledStatus();
|
||||
},
|
||||
|
||||
enable: function() {
|
||||
this.enabled = true;
|
||||
this._monitor = this._dtpPanel.monitor;
|
||||
this._animationDestination = -1;
|
||||
this._pendingUpdate = false;
|
||||
this._hoveredOut = false;
|
||||
this._windowOverlap = false;
|
||||
this._translationProp = 'translation_' + (this._dtpPanel.checkIfVertical() ? 'x' : 'y');
|
||||
|
||||
this._panelBox.translation_y = 0;
|
||||
this._panelBox.translation_x = 0;
|
||||
|
||||
this._setTrackPanel(true);
|
||||
this._bindGeneralSignals();
|
||||
|
||||
if (Me.settings.get_boolean('intellihide-hide-from-windows')) {
|
||||
this._proximityWatchId = this._proximityManager.createWatch(
|
||||
this._panelBox.get_parent(),
|
||||
Proximity.Mode[Me.settings.get_string('intellihide-behaviour')],
|
||||
0, 0,
|
||||
overlap => {
|
||||
this._windowOverlap = overlap;
|
||||
this._queueUpdatePanelPosition();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
this._setRevealMechanism();
|
||||
this._queueUpdatePanelPosition();
|
||||
this._toggleFloatingRoundedTheme();
|
||||
},
|
||||
|
||||
disable: function(reset) {
|
||||
if (this._proximityWatchId) {
|
||||
this._proximityManager.removeWatch(this._proximityWatchId);
|
||||
}
|
||||
|
||||
this._setTrackPanel(false);
|
||||
|
||||
this._signalsHandler.destroy();
|
||||
this._timeoutsHandler.destroy();
|
||||
|
||||
this._removeRevealMechanism();
|
||||
|
||||
this._revealPanel(!reset);
|
||||
|
||||
this.enabled = false;
|
||||
|
||||
if (this._panelBox.has_style_class_name('floating')) {
|
||||
this._panelBox.remove_style_class_name('floating');
|
||||
|
||||
this._resetPanelGeometry();
|
||||
}
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
Me.settings.disconnect(this._intellihideChangedId);
|
||||
Me.settings.disconnect(this._intellihideOnlySecondaryChangedId);
|
||||
|
||||
if (this.enabled) {
|
||||
this.disable();
|
||||
}
|
||||
},
|
||||
|
||||
toggle: function() {
|
||||
this[this._holdStatus & Hold.PERMANENT ? 'release' : 'revealAndHold'](Hold.PERMANENT);
|
||||
},
|
||||
|
||||
revealAndHold: function(holdStatus) {
|
||||
if (this.enabled && !this._holdStatus) {
|
||||
this._revealPanel();
|
||||
}
|
||||
|
||||
this._holdStatus |= holdStatus;
|
||||
},
|
||||
|
||||
release: function(holdStatus) {
|
||||
this._holdStatus -= holdStatus;
|
||||
|
||||
if (this.enabled && !this._holdStatus) {
|
||||
this._queueUpdatePanelPosition();
|
||||
}
|
||||
},
|
||||
|
||||
reset: function() {
|
||||
this.disable(true);
|
||||
this.enable();
|
||||
},
|
||||
|
||||
_toggleFloatingRoundedTheme: function() {
|
||||
if (Me.settings.get_boolean('intellihide-floating-rounded-theme')) {
|
||||
if (!this._panelBox.has_style_class_name('floating'))
|
||||
this._panelBox.add_style_class_name('floating');
|
||||
} else {
|
||||
if (this._panelBox.has_style_class_name('floating'))
|
||||
this._panelBox.remove_style_class_name('floating');
|
||||
}
|
||||
|
||||
this._resetPanelGeometry();
|
||||
},
|
||||
|
||||
_resetPanelGeometry: function() {
|
||||
this._dtpPanel.geom = this._dtpPanel.getGeometry();
|
||||
this._dtpPanel._setPanelGhostSize();
|
||||
this._dtpPanel._setPanelPosition();
|
||||
this._dtpPanel.dynamicTransparency.updateExternalStyle();
|
||||
},
|
||||
|
||||
_changeEnabledStatus: function() {
|
||||
let intellihide = Me.settings.get_boolean('intellihide');
|
||||
let onlySecondary = Me.settings.get_boolean('intellihide-only-secondary');
|
||||
let enabled = intellihide && !(this._dtpPanel.isPrimary && onlySecondary);
|
||||
|
||||
if (this.enabled !== enabled) {
|
||||
this[enabled ? 'enable' : 'disable']();
|
||||
}
|
||||
},
|
||||
|
||||
_bindGeneralSignals: function() {
|
||||
this._signalsHandler.add(
|
||||
[
|
||||
this._dtpPanel.taskbar,
|
||||
'menu-closed',
|
||||
() => this._panelBox.sync_hover()
|
||||
],
|
||||
[
|
||||
Me.settings,
|
||||
[
|
||||
'changed::intellihide-use-pressure',
|
||||
'changed::intellihide-hide-from-windows',
|
||||
'changed::intellihide-behaviour'
|
||||
],
|
||||
() => this.reset()
|
||||
],
|
||||
[
|
||||
Me.settings,
|
||||
[
|
||||
'changed::intellihide-floating-rounded-theme'
|
||||
],
|
||||
() => this._toggleFloatingRoundedTheme()
|
||||
],
|
||||
[
|
||||
this._panelBox,
|
||||
'notify::hover',
|
||||
() => this._onHoverChanged()
|
||||
],
|
||||
[
|
||||
this._dtpPanel.taskbar.previewMenu,
|
||||
'open-state-changed',
|
||||
() => this._queueUpdatePanelPosition()
|
||||
],
|
||||
[
|
||||
Main.overview,
|
||||
[
|
||||
'showing',
|
||||
'hiding'
|
||||
],
|
||||
() => this._queueUpdatePanelPosition()
|
||||
]
|
||||
);
|
||||
},
|
||||
|
||||
_onHoverChanged: function() {
|
||||
this._hoveredOut = !this._panelBox.hover;
|
||||
this._queueUpdatePanelPosition();
|
||||
},
|
||||
|
||||
_setTrackPanel: function(enable) {
|
||||
let trackedIndex = Main.layoutManager._findActor(this._panelBox);
|
||||
let actorData = Main.layoutManager._trackedActors[trackedIndex]
|
||||
|
||||
actorData.affectsStruts = !enable;
|
||||
actorData.trackFullscreen = !enable;
|
||||
|
||||
this._panelBox.track_hover = enable;
|
||||
this._panelBox.reactive = enable;
|
||||
this._panelBox.visible = enable ? enable : this._panelBox.visible;
|
||||
|
||||
Main.layoutManager._queueUpdateRegions();
|
||||
},
|
||||
|
||||
_setRevealMechanism: function() {
|
||||
if (global.display.supports_extended_barriers() && Me.settings.get_boolean('intellihide-use-pressure')) {
|
||||
this._edgeBarrier = this._createBarrier();
|
||||
this._pressureBarrier = new Layout.PressureBarrier(
|
||||
INTELLIHIDE_PRESSURE_THRESHOLD,
|
||||
INTELLIHIDE_PRESSURE_TIME,
|
||||
Shell.ActionMode.NORMAL
|
||||
);
|
||||
this._pressureBarrier.addBarrier(this._edgeBarrier);
|
||||
this._signalsHandler.add([this._pressureBarrier, 'trigger', () => this._queueUpdatePanelPosition(true)]);
|
||||
} else {
|
||||
this._pointerWatch = PointerWatcher.getPointerWatcher()
|
||||
.addWatch(CHECK_POINTER_MS, (x, y) => this._checkMousePointer(x, y));
|
||||
}
|
||||
},
|
||||
|
||||
_removeRevealMechanism: function() {
|
||||
if (this._pointerWatch) {
|
||||
PointerWatcher.getPointerWatcher()._removeWatch(this._pointerWatch);
|
||||
}
|
||||
|
||||
if (this._pressureBarrier) {
|
||||
this._pressureBarrier.destroy();
|
||||
this._edgeBarrier.destroy();
|
||||
}
|
||||
},
|
||||
|
||||
_createBarrier: function() {
|
||||
let position = this._dtpPanel.geom.position;
|
||||
let opts = { display: global.display };
|
||||
|
||||
if (this._dtpPanel.checkIfVertical()) {
|
||||
opts.y1 = this._monitor.y;
|
||||
opts.y2 = this._monitor.y + this._monitor.height;
|
||||
opts.x1 = opts.x2 = this._monitor.x;
|
||||
} else {
|
||||
opts.x1 = this._monitor.x;
|
||||
opts.x2 = this._monitor.x + this._monitor.width;
|
||||
opts.y1 = opts.y2 = this._monitor.y;
|
||||
}
|
||||
|
||||
if (position == St.Side.TOP) {
|
||||
opts.directions = Meta.BarrierDirection.POSITIVE_Y;
|
||||
} else if (position == St.Side.BOTTOM) {
|
||||
opts.y1 = opts.y2 = opts.y1 + this._monitor.height;
|
||||
opts.directions = Meta.BarrierDirection.NEGATIVE_Y;
|
||||
} else if (position == St.Side.LEFT) {
|
||||
opts.directions = Meta.BarrierDirection.POSITIVE_X;
|
||||
} else {
|
||||
opts.x1 = opts.x2 = opts.x1 + this._monitor.width;
|
||||
opts.directions = Meta.BarrierDirection.NEGATIVE_X;
|
||||
}
|
||||
|
||||
return new Meta.Barrier(opts);
|
||||
},
|
||||
|
||||
_checkMousePointer: function(x, y) {
|
||||
let position = this._dtpPanel.geom.position;
|
||||
|
||||
if (!this._panelBox.hover && !Main.overview.visible &&
|
||||
((position == St.Side.TOP && y <= this._monitor.y + 1) ||
|
||||
(position == St.Side.BOTTOM && y >= this._monitor.y + this._monitor.height - 1) ||
|
||||
(position == St.Side.LEFT && x <= this._monitor.x + 1) ||
|
||||
(position == St.Side.RIGHT && x >= this._monitor.x + this._monitor.width - 1)) &&
|
||||
((x >= this._monitor.x && x < this._monitor.x + this._monitor.width) &&
|
||||
(y >= this._monitor.y && y < this._monitor.y + this._monitor.height))) {
|
||||
this._queueUpdatePanelPosition(true);
|
||||
}
|
||||
},
|
||||
|
||||
_queueUpdatePanelPosition: function(fromRevealMechanism) {
|
||||
if (!fromRevealMechanism && this._timeoutsHandler.getId(T2) && !Main.overview.visible) {
|
||||
//unless this is a mouse interaction or entering/leaving the overview, limit the number
|
||||
//of updates, but remember to update again when the limit timeout is reached
|
||||
this._pendingUpdate = true;
|
||||
} else if (!this._holdStatus) {
|
||||
this._checkIfShouldBeVisible(fromRevealMechanism) ? this._revealPanel() : this._hidePanel();
|
||||
this._timeoutsHandler.add([T2, MIN_UPDATE_MS, () => this._endLimitUpdate()]);
|
||||
}
|
||||
},
|
||||
|
||||
_endLimitUpdate: function() {
|
||||
if (this._pendingUpdate) {
|
||||
this._pendingUpdate = false;
|
||||
this._queueUpdatePanelPosition();
|
||||
}
|
||||
},
|
||||
|
||||
_checkIfShouldBeVisible: function(fromRevealMechanism) {
|
||||
if (Main.overview.visibleTarget || this._dtpPanel.taskbar.previewMenu.opened ||
|
||||
this._panelBox.get_hover() || this._checkIfGrab()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (fromRevealMechanism) {
|
||||
let mouseBtnIsPressed = global.get_pointer()[2] & Clutter.ModifierType.BUTTON1_MASK;
|
||||
|
||||
//the user is trying to reveal the panel
|
||||
if (this._monitor.inFullscreen && !mouseBtnIsPressed) {
|
||||
return Me.settings.get_boolean('intellihide-show-in-fullscreen');
|
||||
}
|
||||
|
||||
return !mouseBtnIsPressed;
|
||||
}
|
||||
|
||||
if (!Me.settings.get_boolean('intellihide-hide-from-windows')) {
|
||||
return this._panelBox.hover;
|
||||
}
|
||||
|
||||
return !this._windowOverlap;
|
||||
},
|
||||
|
||||
_checkIfGrab: function() {
|
||||
if (GrabHelper._grabHelperStack.some(gh => gh._owner == this._dtpPanel.panel.actor)) {
|
||||
//there currently is a grab on a child of the panel, check again soon to catch its release
|
||||
this._timeoutsHandler.add([T1, CHECK_GRAB_MS, () => this._queueUpdatePanelPosition()]);
|
||||
|
||||
return true;
|
||||
}
|
||||
},
|
||||
|
||||
_revealPanel: function(immediate) {
|
||||
if (!this._panelBox.visible) {
|
||||
this._panelBox.visible = true;
|
||||
this._dtpPanel.taskbar._shownInitially = false;
|
||||
}
|
||||
|
||||
this._animatePanel(0, immediate);
|
||||
},
|
||||
|
||||
_hidePanel: function(immediate) {
|
||||
let position = this._dtpPanel.geom.position;
|
||||
let size = this._panelBox[position == St.Side.LEFT || position == St.Side.RIGHT ? 'width' : 'height'];
|
||||
let coefficient = position == St.Side.TOP || position == St.Side.LEFT ? -1 : 1;
|
||||
|
||||
this._animatePanel(size * coefficient, immediate);
|
||||
},
|
||||
|
||||
_animatePanel: function(destination, immediate) {
|
||||
let animating = Utils.isAnimating(this._panelBox, this._translationProp);
|
||||
|
||||
if (!((animating && destination === this._animationDestination) ||
|
||||
(!animating && destination === this._panelBox[this._translationProp]))) {
|
||||
//the panel isn't already at, or animating to the asked destination
|
||||
if (animating) {
|
||||
Utils.stopAnimations(this._panelBox);
|
||||
}
|
||||
|
||||
this._animationDestination = destination;
|
||||
|
||||
if (immediate) {
|
||||
this._panelBox[this._translationProp] = destination;
|
||||
this._panelBox.visible = !destination;
|
||||
} else {
|
||||
let tweenOpts = {
|
||||
//when entering/leaving the overview, use its animation time instead of the one from the settings
|
||||
time: Main.overview.visible ?
|
||||
SIDE_CONTROLS_ANIMATION_TIME :
|
||||
INTELLIHIDE_ANIMATION_TIME * 0.001,
|
||||
//only delay the animation when hiding the panel after the user hovered out
|
||||
delay: destination != 0 && this._hoveredOut ? INTELLIHIDE_CLOSE_DELAY * 0.001 : 0,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: () => {
|
||||
this._panelBox.visible = !destination;
|
||||
Main.layoutManager._queueUpdateRegions();
|
||||
this._timeoutsHandler.add([T3, POST_ANIMATE_MS, () => this._queueUpdatePanelPosition()]);
|
||||
}
|
||||
};
|
||||
|
||||
tweenOpts[this._translationProp] = destination;
|
||||
Utils.animate(this._panelBox, tweenOpts);
|
||||
}
|
||||
}
|
||||
|
||||
this._hoveredOut = false;
|
||||
},
|
||||
});
|
||||
7
metadata.json
Executable file → Normal file
7
metadata.json
Executable file → Normal file
@@ -2,7 +2,8 @@
|
||||
"extension-id": "zorin-taskbar",
|
||||
"uuid": "zorin-taskbar@zorinos.com",
|
||||
"name": "Zorin Taskbar",
|
||||
"description": "The official taskbar for Zorin OS.",
|
||||
"shell-version": [ "3.18" ],
|
||||
"url": "https://github.com/ZorinOS/zorin-taskbar"
|
||||
"description": "A taskbar extension for the Zorin Desktop environment.",
|
||||
"shell-version": [ "3.18", "3.20", "3.22", "3.24", "3.26", "3.28", "3.30", "3.32", "3.34", "3.36", "3.38" ],
|
||||
"gettext-domain": "zorin-taskbar",
|
||||
"version": 9999
|
||||
}
|
||||
|
||||
396
overview.js
Normal file
396
overview.js
Normal file
@@ -0,0 +1,396 @@
|
||||
/*
|
||||
* This file is part of the Zorin Taskbar extension for Zorin OS.
|
||||
*
|
||||
* 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/>.
|
||||
*
|
||||
* Credits:
|
||||
* This file is based on code from the Dash to Dock extension by micheleg
|
||||
* and code from the Dash to Panel extension
|
||||
* Some code was also adapted from the upstream Gnome Shell source code.
|
||||
*/
|
||||
|
||||
const Me = imports.misc.extensionUtils.getCurrentExtension();
|
||||
const Intellihide = Me.imports.intellihide;
|
||||
const Utils = Me.imports.utils;
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Lang = imports.lang;
|
||||
const Main = imports.ui.main;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Gdk = imports.gi.Gdk;
|
||||
const Gio = imports.gi.Gio;
|
||||
const Mainloop = imports.mainloop;
|
||||
const IconGrid = imports.ui.iconGrid;
|
||||
const ViewSelector = imports.ui.viewSelector;
|
||||
|
||||
const Meta = imports.gi.Meta;
|
||||
|
||||
const GS_HOTKEYS_KEY = 'switch-to-application-';
|
||||
const OVERLAY_TIMEOUT = 750;
|
||||
const SHORTCUT_TIMEOUT = 2000;
|
||||
|
||||
//timeout names
|
||||
const T1 = 'swipeEndTimeout';
|
||||
|
||||
var dtpOverview = Utils.defineClass({
|
||||
Name: 'ZorinTaskbar.Overview',
|
||||
|
||||
_init: function() {
|
||||
this._numHotkeys = 10;
|
||||
this._timeoutsHandler = new Utils.TimeoutsHandler();
|
||||
},
|
||||
|
||||
enable : function(panel) {
|
||||
this._panel = panel;
|
||||
this.taskbar = panel.taskbar;
|
||||
|
||||
this._injectionsHandler = new Utils.InjectionsHandler();
|
||||
this._signalsHandler = new Utils.GlobalSignalsHandler();
|
||||
|
||||
this._optionalWorkspaceIsolation();
|
||||
this._optionalHotKeys();
|
||||
this._optionalNumberOverlay();
|
||||
this._toggleDash();
|
||||
},
|
||||
|
||||
disable: function () {
|
||||
this._signalsHandler.destroy();
|
||||
this._injectionsHandler.destroy();
|
||||
|
||||
this._toggleDash(true);
|
||||
|
||||
// Remove key bindings
|
||||
this._disableHotKeys();
|
||||
this._disableExtraShortcut();
|
||||
},
|
||||
|
||||
_toggleDash: function(visible) {
|
||||
// To hide the dash, set its width to 1, so it's almost not taken into account by code
|
||||
// calculaing the reserved space in the overview. The reason to keep it at 1 is
|
||||
// to allow its visibility change to trigger an allocaion of the appGrid which
|
||||
// in turn is triggergin the appsIcon spring animation, required when no other
|
||||
// actors has this effect, i.e in horizontal mode and without the workspaceThumnails
|
||||
// 1 static workspace only)
|
||||
|
||||
if (visible === undefined) {
|
||||
visible = false;
|
||||
}
|
||||
|
||||
let visibilityFunc = visible ? 'show' : 'hide';
|
||||
let width = visible ? -1 : 1;
|
||||
let overviewControls = Main.overview._overview._controls || Main.overview._controls;
|
||||
|
||||
overviewControls.dash.actor[visibilityFunc]();
|
||||
overviewControls.dash.actor.set_width(width);
|
||||
|
||||
// This force the recalculation of the icon size
|
||||
overviewControls.dash._maxHeight = -1;
|
||||
},
|
||||
|
||||
/**
|
||||
* Isolate overview to open new windows for inactive apps
|
||||
*/
|
||||
_optionalWorkspaceIsolation: function() {
|
||||
let label = 'optionalWorkspaceIsolation';
|
||||
|
||||
this._signalsHandler.add([
|
||||
Me.settings,
|
||||
'changed::isolate-workspaces',
|
||||
Lang.bind(this, function() {
|
||||
this._panel.panelManager.allPanels.forEach(p => p.taskbar.resetAppIcons());
|
||||
|
||||
if (Me.settings.get_boolean('isolate-workspaces'))
|
||||
Lang.bind(this, enable)();
|
||||
else
|
||||
Lang.bind(this, disable)();
|
||||
})
|
||||
]);
|
||||
|
||||
if (Me.settings.get_boolean('isolate-workspaces'))
|
||||
Lang.bind(this, enable)();
|
||||
|
||||
function enable() {
|
||||
this._injectionsHandler.removeWithLabel(label);
|
||||
|
||||
this._injectionsHandler.addWithLabel(label, [
|
||||
Shell.App.prototype,
|
||||
'activate',
|
||||
IsolatedOverview
|
||||
]);
|
||||
|
||||
this._signalsHandler.removeWithLabel(label);
|
||||
|
||||
this._signalsHandler.addWithLabel(label, [
|
||||
global.window_manager,
|
||||
'switch-workspace',
|
||||
() => this._panel.panelManager.allPanels.forEach(p => p.taskbar.handleIsolatedWorkspaceSwitch())
|
||||
]);
|
||||
}
|
||||
|
||||
function disable() {
|
||||
this._signalsHandler.removeWithLabel(label);
|
||||
this._injectionsHandler.removeWithLabel(label);
|
||||
}
|
||||
|
||||
function IsolatedOverview() {
|
||||
// These lines take care of Nautilus for icons on Desktop
|
||||
let activeWorkspace = Utils.DisplayWrapper.getWorkspaceManager().get_active_workspace();
|
||||
let windows = this.get_windows().filter(w => w.get_workspace().index() == activeWorkspace.index());
|
||||
|
||||
if (windows.length > 0 &&
|
||||
(!(windows.length == 1 && windows[0].skip_taskbar) ||
|
||||
this.is_on_workspace(activeWorkspace)))
|
||||
return Main.activateWindow(windows[0]);
|
||||
|
||||
return this.open_new_window(-1);
|
||||
}
|
||||
},
|
||||
|
||||
// Hotkeys
|
||||
_activateApp: function(appIndex) {
|
||||
let seenApps = {};
|
||||
let apps = [];
|
||||
|
||||
this.taskbar._getAppIcons().forEach(function(appIcon) {
|
||||
if (!seenApps[appIcon.app]) {
|
||||
apps.push(appIcon);
|
||||
}
|
||||
|
||||
seenApps[appIcon.app] = (seenApps[appIcon.app] || 0) + 1;
|
||||
});
|
||||
|
||||
this._showOverlay();
|
||||
|
||||
if (appIndex < apps.length) {
|
||||
let appIcon = apps[appIndex];
|
||||
let seenAppCount = seenApps[appIcon.app];
|
||||
let windowCount = appIcon.window || appIcon._hotkeysCycle ? seenAppCount : appIcon._nWindows;
|
||||
|
||||
if (Me.settings.get_boolean('shortcut-previews') && windowCount > 1 &&
|
||||
!(Clutter.get_current_event().get_state() & ~(Clutter.ModifierType.MOD1_MASK | Clutter.ModifierType.MOD4_MASK))) { //ignore the alt (MOD1_MASK) and super key (MOD4_MASK)
|
||||
if (this._hotkeyPreviewCycleInfo && this._hotkeyPreviewCycleInfo.appIcon != appIcon) {
|
||||
this._endHotkeyPreviewCycle();
|
||||
}
|
||||
|
||||
if (!this._hotkeyPreviewCycleInfo) {
|
||||
this._hotkeyPreviewCycleInfo = {
|
||||
appIcon: appIcon,
|
||||
currentWindow: appIcon.window,
|
||||
keyFocusOutId: appIcon.actor.connect('key-focus-out', () => appIcon.actor.grab_key_focus()),
|
||||
capturedEventId: global.stage.connect('captured-event', (actor, e) => {
|
||||
if (e.type() == Clutter.EventType.KEY_RELEASE && e.get_key_symbol() == (Clutter.KEY_Super_L || Clutter.Super_L)) {
|
||||
this._endHotkeyPreviewCycle(true);
|
||||
}
|
||||
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
})
|
||||
};
|
||||
|
||||
appIcon._hotkeysCycle = appIcon.window;
|
||||
appIcon.window = null;
|
||||
appIcon._previewMenu.open(appIcon);
|
||||
appIcon.actor.grab_key_focus();
|
||||
}
|
||||
|
||||
appIcon._previewMenu.focusNext();
|
||||
} else {
|
||||
// Activate with button = 1, i.e. same as left click
|
||||
let button = 1;
|
||||
this._endHotkeyPreviewCycle();
|
||||
appIcon.activate(button, true);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_endHotkeyPreviewCycle: function(focusWindow) {
|
||||
if (this._hotkeyPreviewCycleInfo) {
|
||||
global.stage.disconnect(this._hotkeyPreviewCycleInfo.capturedEventId);
|
||||
this._hotkeyPreviewCycleInfo.appIcon.actor.disconnect(this._hotkeyPreviewCycleInfo.keyFocusOutId);
|
||||
|
||||
if (focusWindow) {
|
||||
this._hotkeyPreviewCycleInfo.appIcon._previewMenu.activateFocused();
|
||||
}
|
||||
|
||||
this._hotkeyPreviewCycleInfo.appIcon.window = this._hotkeyPreviewCycleInfo.currentWindow;
|
||||
delete this._hotkeyPreviewCycleInfo.appIcon._hotkeysCycle;
|
||||
this._hotkeyPreviewCycleInfo = 0;
|
||||
}
|
||||
},
|
||||
|
||||
_optionalHotKeys: function() {
|
||||
this._hotKeysEnabled = false;
|
||||
if (Me.settings.get_boolean('hot-keys'))
|
||||
this._enableHotKeys();
|
||||
|
||||
this._signalsHandler.add([
|
||||
Me.settings,
|
||||
'changed::hot-keys',
|
||||
Lang.bind(this, function() {
|
||||
if (Me.settings.get_boolean('hot-keys'))
|
||||
Lang.bind(this, this._enableHotKeys)();
|
||||
else
|
||||
Lang.bind(this, this._disableHotKeys)();
|
||||
})
|
||||
]);
|
||||
},
|
||||
|
||||
_resetHotkeys: function() {
|
||||
this._disableHotKeys();
|
||||
this._enableHotKeys();
|
||||
},
|
||||
|
||||
_enableHotKeys: function() {
|
||||
if (this._hotKeysEnabled)
|
||||
return;
|
||||
|
||||
//3.32 introduced app hotkeys, disable them to prevent conflicts
|
||||
if (Main.wm._switchToApplication) {
|
||||
for (let i = 1; i < 10; ++i) {
|
||||
Utils.removeKeybinding(GS_HOTKEYS_KEY + i);
|
||||
}
|
||||
}
|
||||
|
||||
// Setup keyboard bindings for taskbar elements
|
||||
let shortcutNumKeys = Me.settings.get_string('shortcut-num-keys');
|
||||
let bothNumKeys = shortcutNumKeys == 'BOTH';
|
||||
let keys = [];
|
||||
|
||||
if (bothNumKeys || shortcutNumKeys == 'NUM_ROW') {
|
||||
keys.push('app-hotkey-', 'app-shift-hotkey-', 'app-ctrl-hotkey-'); // Regular numbers
|
||||
}
|
||||
|
||||
if (bothNumKeys || shortcutNumKeys == 'NUM_KEYPAD') {
|
||||
keys.push('app-hotkey-kp-', 'app-shift-hotkey-kp-', 'app-ctrl-hotkey-kp-'); // Key-pad numbers
|
||||
}
|
||||
|
||||
keys.forEach( function(key) {
|
||||
for (let i = 0; i < this._numHotkeys; i++) {
|
||||
let appNum = i;
|
||||
|
||||
Utils.addKeybinding(key + (i + 1), Me.settings, () => this._activateApp(appNum));
|
||||
}
|
||||
}, this);
|
||||
|
||||
this._hotKeysEnabled = true;
|
||||
|
||||
if (Me.settings.get_string('hotkeys-overlay-combo') === 'ALWAYS')
|
||||
this.taskbar.toggleNumberOverlay(true);
|
||||
},
|
||||
|
||||
_disableHotKeys: function() {
|
||||
if (!this._hotKeysEnabled)
|
||||
return;
|
||||
|
||||
let keys = ['app-hotkey-', 'app-shift-hotkey-', 'app-ctrl-hotkey-', // Regular numbers
|
||||
'app-hotkey-kp-', 'app-shift-hotkey-kp-', 'app-ctrl-hotkey-kp-']; // Key-pad numbers
|
||||
keys.forEach( function(key) {
|
||||
for (let i = 0; i < this._numHotkeys; i++) {
|
||||
Utils.removeKeybinding(key + (i + 1));
|
||||
}
|
||||
}, this);
|
||||
|
||||
if (Main.wm._switchToApplication) {
|
||||
let gsSettings = new Gio.Settings({ schema_id: imports.ui.windowManager.SHELL_KEYBINDINGS_SCHEMA });
|
||||
|
||||
for (let i = 1; i < 10; ++i) {
|
||||
Utils.addKeybinding(GS_HOTKEYS_KEY + i, gsSettings, Main.wm._switchToApplication.bind(Main.wm));
|
||||
}
|
||||
}
|
||||
|
||||
this._hotKeysEnabled = false;
|
||||
|
||||
this.taskbar.toggleNumberOverlay(false);
|
||||
},
|
||||
|
||||
_optionalNumberOverlay: function() {
|
||||
// Enable extra shortcut
|
||||
if (Me.settings.get_boolean('hot-keys'))
|
||||
this._enableExtraShortcut();
|
||||
|
||||
this._signalsHandler.add([
|
||||
Me.settings,
|
||||
'changed::hot-keys',
|
||||
Lang.bind(this, this._checkHotkeysOptions)
|
||||
], [
|
||||
Me.settings,
|
||||
'changed::hotkeys-overlay-combo',
|
||||
Lang.bind(this, function() {
|
||||
if (Me.settings.get_boolean('hot-keys') && Me.settings.get_string('hotkeys-overlay-combo') === 'ALWAYS')
|
||||
this.taskbar.toggleNumberOverlay(true);
|
||||
else
|
||||
this.taskbar.toggleNumberOverlay(false);
|
||||
})
|
||||
], [
|
||||
Me.settings,
|
||||
'changed::shortcut-num-keys',
|
||||
() => this._resetHotkeys()
|
||||
]);
|
||||
},
|
||||
|
||||
_checkHotkeysOptions: function() {
|
||||
if (Me.settings.get_boolean('hot-keys'))
|
||||
this._enableExtraShortcut();
|
||||
else
|
||||
this._disableExtraShortcut();
|
||||
},
|
||||
|
||||
_enableExtraShortcut: function() {
|
||||
Utils.addKeybinding('shortcut', Me.settings, () => this._showOverlay(true));
|
||||
},
|
||||
|
||||
_disableExtraShortcut: function() {
|
||||
Utils.removeKeybinding('shortcut');
|
||||
},
|
||||
|
||||
_showOverlay: function(overlayFromShortcut) {
|
||||
//wait for intellihide timeout initialization
|
||||
if (!this._panel.intellihide) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Restart the counting if the shortcut is pressed again
|
||||
if (this._numberOverlayTimeoutId) {
|
||||
Mainloop.source_remove(this._numberOverlayTimeoutId);
|
||||
this._numberOverlayTimeoutId = 0;
|
||||
}
|
||||
|
||||
let hotkey_option = Me.settings.get_string('hotkeys-overlay-combo');
|
||||
|
||||
if (hotkey_option === 'NEVER')
|
||||
return;
|
||||
|
||||
if (hotkey_option === 'TEMPORARILY' || overlayFromShortcut)
|
||||
this.taskbar.toggleNumberOverlay(true);
|
||||
|
||||
this._panel.intellihide.revealAndHold(Intellihide.Hold.TEMPORARY);
|
||||
|
||||
let timeout = OVERLAY_TIMEOUT;
|
||||
|
||||
if (overlayFromShortcut) {
|
||||
timeout = SHORTCUT_TIMEOUT;
|
||||
}
|
||||
|
||||
// Hide the overlay/dock after the timeout
|
||||
this._numberOverlayTimeoutId = Mainloop.timeout_add(timeout, Lang.bind(this, function() {
|
||||
this._numberOverlayTimeoutId = 0;
|
||||
|
||||
if (hotkey_option != 'ALWAYS') {
|
||||
this.taskbar.toggleNumberOverlay(false);
|
||||
}
|
||||
|
||||
this._panel.intellihide.release(Intellihide.Hold.TEMPORARY);
|
||||
}));
|
||||
}
|
||||
});
|
||||
927
panelManager.js
Executable file
927
panelManager.js
Executable file
@@ -0,0 +1,927 @@
|
||||
/*
|
||||
* This file is part of the Zorin Taskbar extension for Zorin OS.
|
||||
*
|
||||
* 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/>.
|
||||
*
|
||||
* Credits:
|
||||
* This file is based on code from the Dash to Dock extension by micheleg
|
||||
* and code from the Dash to Panel extension
|
||||
*
|
||||
* Code to re-anchor the panel was taken from Thoma5 BottomPanel:
|
||||
* https://github.com/Thoma5/gnome-shell-extension-bottompanel
|
||||
*
|
||||
* Pattern for moving clock based on Frippery Move Clock by R M Yorston
|
||||
* http://frippery.org/extensions/
|
||||
*
|
||||
* Some code was also adapted from the upstream Gnome Shell source code.
|
||||
*/
|
||||
|
||||
const Me = imports.misc.extensionUtils.getCurrentExtension();
|
||||
const Overview = Me.imports.overview;
|
||||
const Panel = Me.imports.panel;
|
||||
const Pos = Me.imports.panelPositions;
|
||||
const Proximity = Me.imports.proximity;
|
||||
const Taskbar = Me.imports.taskbar;
|
||||
const Utils = Me.imports.utils;
|
||||
|
||||
const Config = imports.misc.config;
|
||||
const Lang = imports.lang;
|
||||
const Gi = imports._gi;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Meta = imports.gi.Meta;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const AppDisplay = imports.ui.appDisplay;
|
||||
const BoxPointer = imports.ui.boxpointer;
|
||||
const Dash = imports.ui.dash;
|
||||
const IconGrid = imports.ui.iconGrid;
|
||||
const LookingGlass = imports.ui.lookingGlass;
|
||||
const Main = imports.ui.main;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const Layout = imports.ui.layout;
|
||||
const WM = imports.ui.windowManager;
|
||||
const WorkspacesView = imports.ui.workspacesView;
|
||||
|
||||
var dtpPanelManager = Utils.defineClass({
|
||||
Name: 'ZorinTaskbar.PanelManager',
|
||||
|
||||
_init: function() {
|
||||
this.overview = new Overview.dtpOverview();
|
||||
this.panelsElementPositions = {};
|
||||
|
||||
this._saveMonitors();
|
||||
|
||||
Utils.getAppDisplayViews().forEach(v => {
|
||||
Utils.wrapActor(v.view);
|
||||
Utils.wrapActor(v.view._grid);
|
||||
});
|
||||
},
|
||||
|
||||
enable: function(reset) {
|
||||
this.panelPositions = Pos.getSettingsPositions(Me.settings, 'panel-positions');
|
||||
this.dtpPrimaryMonitor = Main.layoutManager.primaryMonitor; // The real primary monitor should always have the main panel
|
||||
this.proximityManager = new Proximity.ProximityManager();
|
||||
|
||||
Utils.wrapActor(Main.panel);
|
||||
Utils.wrapActor(Main.overview.dash || 0);
|
||||
|
||||
this.primaryPanel = this._createPanel(this.dtpPrimaryMonitor, false);
|
||||
this.allPanels = [ this.primaryPanel ];
|
||||
|
||||
this.overview.enable(this.primaryPanel);
|
||||
|
||||
if (Me.settings.get_boolean('multi-monitors')) {
|
||||
Main.layoutManager.monitors.filter(m => m != this.dtpPrimaryMonitor).forEach(m => {
|
||||
this.allPanels.push(this._createPanel(m, true));
|
||||
});
|
||||
}
|
||||
|
||||
global.zorinTaskbar.panels = this.allPanels;
|
||||
global.zorinTaskbar.emit('panels-created');
|
||||
|
||||
this.allPanels.forEach(p => {
|
||||
let panelPosition = p.getPosition();
|
||||
let leftOrRight = (panelPosition == St.Side.LEFT || panelPosition == St.Side.RIGHT);
|
||||
|
||||
p.panelBox.set_size(
|
||||
leftOrRight ? -1 : p.geom.w + p.geom.lrPadding,
|
||||
leftOrRight ? p.geom.h + p.geom.tbPadding : -1
|
||||
);
|
||||
|
||||
this._findPanelMenuButtons(p.panelBox).forEach(pmb => this._adjustPanelMenuButton(pmb, p.monitor, panelPosition));
|
||||
|
||||
p.taskbar.iconAnimator.start();
|
||||
});
|
||||
|
||||
//in 3.32, BoxPointer now inherits St.Widget
|
||||
if (BoxPointer.BoxPointer.prototype.vfunc_get_preferred_height) {
|
||||
let panelManager = this;
|
||||
|
||||
Utils.hookVfunc(BoxPointer.BoxPointer.prototype, 'get_preferred_height', function(forWidth) {
|
||||
let alloc = { min_size: 0, natural_size: 0 };
|
||||
|
||||
[alloc.min_size, alloc.natural_size] = this.vfunc_get_preferred_height(forWidth);
|
||||
|
||||
return panelManager._getBoxPointerPreferredHeight(this, alloc);
|
||||
});
|
||||
}
|
||||
|
||||
this._updatePanelElementPositions();
|
||||
this.setFocusedMonitor(this.dtpPrimaryMonitor);
|
||||
|
||||
if (this.primaryPanel.checkIfVertical()) {
|
||||
Main.wm._getPositionForDirection = newGetPositionForDirection;
|
||||
}
|
||||
|
||||
if (reset) return;
|
||||
|
||||
this._oldViewSelectorAnimateIn = Main.overview.viewSelector._animateIn;
|
||||
Main.overview.viewSelector._animateIn = Lang.bind(this.primaryPanel, newViewSelectorAnimateIn);
|
||||
this._oldViewSelectorAnimateOut = Main.overview.viewSelector._animateOut;
|
||||
Main.overview.viewSelector._animateOut = Lang.bind(this.primaryPanel, newViewSelectorAnimateOut);
|
||||
|
||||
if (Config.PACKAGE_VERSION > '3.35.1') {
|
||||
this._oldDoSpringAnimation = AppDisplay.BaseAppView.prototype._doSpringAnimation;
|
||||
AppDisplay.BaseAppView.prototype._doSpringAnimation = newDoSpringAnimation;
|
||||
}
|
||||
|
||||
this._oldUpdatePanelBarrier = Main.layoutManager._updatePanelBarrier;
|
||||
Main.layoutManager._updatePanelBarrier = (panel) => {
|
||||
let panelUpdates = panel ? [panel] : this.allPanels;
|
||||
|
||||
panelUpdates.forEach(p => newUpdatePanelBarrier.call(Main.layoutManager, p));
|
||||
};
|
||||
Main.layoutManager._updatePanelBarrier();
|
||||
|
||||
this._oldUpdateHotCorners = Main.layoutManager._updateHotCorners;
|
||||
Main.layoutManager._updateHotCorners = Lang.bind(Main.layoutManager, newUpdateHotCorners);
|
||||
Main.layoutManager._updateHotCorners();
|
||||
|
||||
if (Main.layoutManager._interfaceSettings) {
|
||||
this._enableHotCornersId = Main.layoutManager._interfaceSettings.connect('changed::enable-hot-corners', () => Main.layoutManager._updateHotCorners());
|
||||
}
|
||||
|
||||
this._oldOverviewRelayout = Main.overview._relayout;
|
||||
Main.overview._relayout = Lang.bind(Main.overview, this._newOverviewRelayout);
|
||||
|
||||
this._oldUpdateWorkspacesViews = Main.overview.viewSelector._workspacesDisplay._updateWorkspacesViews;
|
||||
Main.overview.viewSelector._workspacesDisplay._updateWorkspacesViews = Lang.bind(Main.overview.viewSelector._workspacesDisplay, this._newUpdateWorkspacesViews);
|
||||
|
||||
this._oldGetShowAppsButton = Main.overview.getShowAppsButton;
|
||||
Main.overview.getShowAppsButton = this._newGetShowAppsButton.bind(this);
|
||||
|
||||
this._needsDashItemContainerAllocate = !Dash.DashItemContainer.prototype.hasOwnProperty('vfunc_allocate');
|
||||
|
||||
if (this._needsDashItemContainerAllocate) {
|
||||
Utils.hookVfunc(Dash.DashItemContainer.prototype, 'allocate', this._newDashItemContainerAllocate);
|
||||
}
|
||||
|
||||
// Since Gnome 3.8 dragging an app without having opened the overview before cause the attemp to
|
||||
//animate a null target since some variables are not initialized when the viewSelector is created
|
||||
if(Main.overview.viewSelector._activePage == null)
|
||||
Main.overview.viewSelector._activePage = Main.overview.viewSelector._workspacesPage;
|
||||
|
||||
LookingGlass.LookingGlass.prototype._oldResize = LookingGlass.LookingGlass.prototype._resize;
|
||||
LookingGlass.LookingGlass.prototype._resize = _newLookingGlassResize;
|
||||
|
||||
LookingGlass.LookingGlass.prototype._oldOpen = LookingGlass.LookingGlass.prototype.open;
|
||||
LookingGlass.LookingGlass.prototype.open = _newLookingGlassOpen;
|
||||
|
||||
this._signalsHandler = new Utils.GlobalSignalsHandler();
|
||||
|
||||
if (Config.PACKAGE_VERSION > '3.35.9') {
|
||||
let currentAppsView;
|
||||
|
||||
this._oldAnimateIconPosition = IconGrid.animateIconPosition;
|
||||
IconGrid.animateIconPosition = newAnimateIconPosition.bind(this);
|
||||
|
||||
this._signalsHandler.add(
|
||||
[
|
||||
Utils.DisplayWrapper.getScreen(),
|
||||
'window-entered-monitor',
|
||||
() => this._needsIconAllocate = 1
|
||||
]
|
||||
);
|
||||
|
||||
Utils.getAppDisplayViews().forEach(v => {
|
||||
if (!v.control || v.control.has_style_pseudo_class('checked')) {
|
||||
currentAppsView = v;
|
||||
}
|
||||
|
||||
if (v.control) {
|
||||
this._signalsHandler.add(
|
||||
[
|
||||
v.control,
|
||||
'clicked',
|
||||
() => {
|
||||
this._needsIconAllocate = currentAppsView != v;
|
||||
currentAppsView = v;
|
||||
}
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
this._signalsHandler.add(
|
||||
[
|
||||
v.view,
|
||||
'notify::visible',
|
||||
() => this._needsIconAllocate = !(currentAppsView != v && !v.view.visible)
|
||||
],
|
||||
[
|
||||
v.view._grid,
|
||||
'animation-done',
|
||||
() => this._needsIconAllocate = 0
|
||||
]
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
//listen settings
|
||||
this._signalsHandler.add(
|
||||
[
|
||||
Me.settings,
|
||||
[
|
||||
'changed::multi-monitors',
|
||||
'changed::isolate-monitors',
|
||||
'changed::panel-positions'
|
||||
],
|
||||
() => this._reset()
|
||||
],
|
||||
[
|
||||
Me.settings,
|
||||
'changed::panel-element-positions',
|
||||
() => this._updatePanelElementPositions()
|
||||
],
|
||||
[
|
||||
Me.settings,
|
||||
'changed::intellihide-key-toggle-text',
|
||||
() => this._setKeyBindings(true)
|
||||
],
|
||||
[
|
||||
Utils.DisplayWrapper.getMonitorManager(),
|
||||
'monitors-changed',
|
||||
() => {
|
||||
if (Main.layoutManager.primaryMonitor) {
|
||||
this._saveMonitors();
|
||||
this._reset();
|
||||
}
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
Panel.panelBoxes.forEach(c => this._signalsHandler.add(
|
||||
[Main.panel[c], 'actor-added', (parent, child) => this._adjustPanelMenuButton(this._getPanelMenuButton(child), this.primaryPanel.monitor, this.primaryPanel.getPosition())]
|
||||
));
|
||||
|
||||
this._setKeyBindings(true);
|
||||
},
|
||||
|
||||
disable: function(reset) {
|
||||
this.overview.disable();
|
||||
this.proximityManager.destroy();
|
||||
|
||||
this.allPanels.forEach(p => {
|
||||
p.taskbar.iconAnimator.pause();
|
||||
|
||||
this._findPanelMenuButtons(p.panelBox).forEach(pmb => {
|
||||
if (pmb.menu._boxPointer._dtpGetPreferredHeightId) {
|
||||
pmb.menu._boxPointer._container.disconnect(pmb.menu._boxPointer._dtpGetPreferredHeightId);
|
||||
}
|
||||
|
||||
pmb.menu._boxPointer.sourceActor = pmb.menu._boxPointer._dtpSourceActor;
|
||||
delete pmb.menu._boxPointer._dtpSourceActor;
|
||||
pmb.menu._boxPointer._userArrowSide = St.Side.TOP;
|
||||
})
|
||||
|
||||
this._removePanelBarriers(p);
|
||||
|
||||
p.disable();
|
||||
|
||||
let clipContainer = p.panelBox.get_parent();
|
||||
|
||||
Main.layoutManager._untrackActor(p.panelBox);
|
||||
Main.layoutManager.removeChrome(clipContainer);
|
||||
|
||||
if (p.isStandalone) {
|
||||
p.panelBox.destroy();
|
||||
} else {
|
||||
p.panelBox.remove_child(p);
|
||||
p.remove_child(p.panel.actor);
|
||||
p.panelBox.add(p.panel.actor);
|
||||
|
||||
p.panelBox.set_position(clipContainer.x, clipContainer.y);
|
||||
|
||||
clipContainer.remove_child(p.panelBox);
|
||||
Main.layoutManager.addChrome(p.panelBox, { affectsStruts: true, trackFullscreen: true });
|
||||
}
|
||||
});
|
||||
|
||||
if (BoxPointer.BoxPointer.prototype.vfunc_get_preferred_height) {
|
||||
Utils.hookVfunc(BoxPointer.BoxPointer.prototype, 'get_preferred_height', BoxPointer.BoxPointer.prototype.vfunc_get_preferred_height);
|
||||
}
|
||||
|
||||
delete Main.wm._getPositionForDirection;
|
||||
|
||||
if (Main.layoutManager.primaryMonitor) {
|
||||
Main.layoutManager.panelBox.set_position(Main.layoutManager.primaryMonitor.x, Main.layoutManager.primaryMonitor.y);
|
||||
Main.layoutManager.panelBox.set_size(Main.layoutManager.primaryMonitor.width, -1);
|
||||
}
|
||||
|
||||
if (reset) return;
|
||||
|
||||
this._setKeyBindings(false);
|
||||
|
||||
this._signalsHandler.destroy();
|
||||
|
||||
Main.layoutManager._updateHotCorners = this._oldUpdateHotCorners;
|
||||
Main.layoutManager._updateHotCorners();
|
||||
|
||||
if (this._enableHotCornersId) {
|
||||
Main.layoutManager._interfaceSettings.disconnect(this._enableHotCornersId);
|
||||
}
|
||||
|
||||
Main.layoutManager._updatePanelBarrier = this._oldUpdatePanelBarrier;
|
||||
Main.layoutManager._updatePanelBarrier();
|
||||
|
||||
Main.overview.viewSelector._animateIn = this._oldViewSelectorAnimateIn;
|
||||
Main.overview.viewSelector._animateOut = this._oldViewSelectorAnimateOut;
|
||||
|
||||
Main.overview._relayout = this._oldOverviewRelayout;
|
||||
Main.overview._relayout();
|
||||
|
||||
Main.overview.viewSelector._workspacesDisplay._updateWorkspacesViews = this._oldUpdateWorkspacesViews;
|
||||
|
||||
Utils.getPanelGhost().set_size(-1, -1);
|
||||
|
||||
if (this._needsDashItemContainerAllocate) {
|
||||
Utils.hookVfunc(Dash.DashItemContainer.prototype, 'allocate', function(box, flags) { this.vfunc_allocate(box, flags); });
|
||||
}
|
||||
|
||||
if (this._oldDoSpringAnimation) {
|
||||
AppDisplay.BaseAppView.prototype._doSpringAnimation = this._oldDoSpringAnimation;
|
||||
}
|
||||
|
||||
if (this._oldAnimateIconPosition) {
|
||||
IconGrid.animateIconPosition = this._oldAnimateIconPosition;
|
||||
}
|
||||
|
||||
LookingGlass.LookingGlass.prototype._resize = LookingGlass.LookingGlass.prototype._oldResize;
|
||||
delete LookingGlass.LookingGlass.prototype._oldResize;
|
||||
|
||||
LookingGlass.LookingGlass.prototype.open = LookingGlass.LookingGlass.prototype._oldOpen;
|
||||
delete LookingGlass.LookingGlass.prototype._oldOpen
|
||||
},
|
||||
|
||||
setFocusedMonitor: function(monitor, ignoreRelayout) {
|
||||
this._needsIconAllocate = 1;
|
||||
|
||||
if (!this.checkIfFocusedMonitor(monitor)) {
|
||||
Main.overview.viewSelector._workspacesDisplay._primaryIndex = monitor.index;
|
||||
|
||||
Main.overview._overview.clear_constraints();
|
||||
Main.overview._overview.add_constraint(new Layout.MonitorConstraint({ index: monitor.index }));
|
||||
|
||||
if (ignoreRelayout) return;
|
||||
|
||||
this._newOverviewRelayout.call(Main.overview);
|
||||
}
|
||||
},
|
||||
|
||||
_saveMonitors: function() {
|
||||
//Mutter meta_monitor_manager_get_primary_monitor (global.display.get_primary_monitor()) doesn't return the same
|
||||
//monitor as GDK gdk_screen_get_primary_monitor (imports.gi.Gdk.Screen.get_default().get_primary_monitor()).
|
||||
//Since the Mutter function is what's used in gnome-shell and we can't access it from the settings dialog, store
|
||||
//the monitors information in a setting so we can use the same monitor indexes as the ones in gnome-shell
|
||||
let primaryIndex = Main.layoutManager.primaryIndex;
|
||||
let monitors = [primaryIndex];
|
||||
|
||||
Main.layoutManager.monitors.filter(m => m.index != primaryIndex).forEach(m => monitors.push(m.index));
|
||||
Me.settings.set_value('available-monitors', new GLib.Variant('ai', monitors));
|
||||
},
|
||||
|
||||
checkIfFocusedMonitor: function(monitor) {
|
||||
return Main.overview.viewSelector._workspacesDisplay._primaryIndex == monitor.index;
|
||||
},
|
||||
|
||||
_createPanel: function(monitor, isStandalone) {
|
||||
let panelBox;
|
||||
let panel;
|
||||
let clipContainer = new Clutter.Actor();
|
||||
|
||||
if (isStandalone) {
|
||||
panelBox = new St.BoxLayout({ name: 'panelBox' });
|
||||
} else {
|
||||
panelBox = Main.layoutManager.panelBox;
|
||||
Main.layoutManager._untrackActor(panelBox);
|
||||
panelBox.remove_child(Main.panel.actor);
|
||||
Main.layoutManager.removeChrome(panelBox);
|
||||
}
|
||||
|
||||
Main.layoutManager.addChrome(clipContainer, { affectsInputRegion: false });
|
||||
clipContainer.add_child(panelBox);
|
||||
Main.layoutManager.trackChrome(panelBox, { trackFullscreen: true, affectsStruts: true, affectsInputRegion: true });
|
||||
|
||||
panel = new Panel.dtpPanel(this, monitor, panelBox, isStandalone);
|
||||
panelBox.add(panel);
|
||||
panel.enable();
|
||||
|
||||
panelBox.visible = true;
|
||||
if (monitor.inFullscreen) {
|
||||
panelBox.hide();
|
||||
}
|
||||
panelBox.set_position(0, 0);
|
||||
|
||||
return panel;
|
||||
},
|
||||
|
||||
_reset: function() {
|
||||
this.disable(true);
|
||||
this.allPanels = [];
|
||||
this.enable(true);
|
||||
},
|
||||
|
||||
_updatePanelElementPositions: function() {
|
||||
this.panelsElementPositions = Pos.getSettingsPositions(Me.settings, 'panel-element-positions');
|
||||
this.allPanels.forEach(p => p.updateElementPositions());
|
||||
},
|
||||
|
||||
_adjustPanelMenuButton: function(button, monitor, arrowSide) {
|
||||
if (button) {
|
||||
Utils.wrapActor(button);
|
||||
button.menu._boxPointer._dtpSourceActor = button.menu._boxPointer.sourceActor;
|
||||
button.menu._boxPointer.sourceActor = button.actor;
|
||||
button.menu._boxPointer._userArrowSide = arrowSide;
|
||||
button.menu._boxPointer._dtpInPanel = 1;
|
||||
|
||||
if (!button.menu._boxPointer.vfunc_get_preferred_height) {
|
||||
button.menu._boxPointer._dtpGetPreferredHeightId = button.menu._boxPointer._container.connect('get-preferred-height', (actor, forWidth, alloc) => {
|
||||
this._getBoxPointerPreferredHeight(button.menu._boxPointer, alloc, monitor);
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_getBoxPointerPreferredHeight: function(boxPointer, alloc, monitor) {
|
||||
if (boxPointer._dtpInPanel && boxPointer.sourceActor && Me.settings.get_boolean('intellihide')) {
|
||||
monitor = monitor || Main.layoutManager.findMonitorForActor(boxPointer.sourceActor);
|
||||
let panel = Utils.find(global.zorinTaskbar.panels, p => p.monitor == monitor);
|
||||
let excess = alloc.natural_size + panel.dtpSize + 10 - monitor.height; // 10 is arbitrary
|
||||
|
||||
if (excess > 0) {
|
||||
alloc.natural_size -= excess;
|
||||
}
|
||||
}
|
||||
|
||||
return [alloc.min_size, alloc.natural_size];
|
||||
},
|
||||
|
||||
_findPanelMenuButtons: function(container) {
|
||||
let panelMenuButtons = [];
|
||||
let panelMenuButton;
|
||||
|
||||
let find = parent => parent.get_children().forEach(c => {
|
||||
if ((panelMenuButton = this._getPanelMenuButton(c))) {
|
||||
panelMenuButtons.push(panelMenuButton);
|
||||
}
|
||||
|
||||
find(c);
|
||||
});
|
||||
|
||||
find(container);
|
||||
|
||||
return panelMenuButtons;
|
||||
},
|
||||
|
||||
_removePanelBarriers: function(panel) {
|
||||
if (panel.isStandalone && panel._rightPanelBarrier) {
|
||||
panel._rightPanelBarrier.destroy();
|
||||
}
|
||||
|
||||
if (panel._leftPanelBarrier) {
|
||||
panel._leftPanelBarrier.destroy();
|
||||
delete panel._leftPanelBarrier;
|
||||
}
|
||||
},
|
||||
|
||||
_getPanelMenuButton: function(obj) {
|
||||
return obj._delegate && obj._delegate instanceof PanelMenu.Button ? obj._delegate : 0;
|
||||
},
|
||||
|
||||
_setKeyBindings: function(enable) {
|
||||
let keys = {
|
||||
'intellihide-key-toggle': () => this.allPanels.forEach(p => p.intellihide.toggle())
|
||||
};
|
||||
|
||||
Object.keys(keys).forEach(k => {
|
||||
Utils.removeKeybinding(k);
|
||||
|
||||
if (enable) {
|
||||
Utils.addKeybinding(k, Me.settings, keys[k], Shell.ActionMode.NORMAL);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
_newOverviewRelayout: function() {
|
||||
// To avoid updating the position and size of the workspaces
|
||||
// we just hide the overview. The positions will be updated
|
||||
// when it is next shown.
|
||||
this.hide();
|
||||
|
||||
let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.overview.viewSelector._workspacesDisplay._primaryIndex);
|
||||
|
||||
this._coverPane.set_position(0, workArea.y);
|
||||
this._coverPane.set_size(workArea.width, workArea.height);
|
||||
|
||||
this._updateBackgrounds();
|
||||
},
|
||||
|
||||
_newUpdateWorkspacesViews: function() {
|
||||
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||
this._workspacesViews[i].destroy();
|
||||
|
||||
this._workspacesViews = [];
|
||||
|
||||
let monitors = Main.layoutManager.monitors;
|
||||
|
||||
for (let i = 0; i < monitors.length; i++) {
|
||||
let workspaces;
|
||||
let view;
|
||||
if (this._workspacesOnlyOnPrimary && i != Main.layoutManager.primaryIndex) {
|
||||
view = new WorkspacesView.ExtraWorkspaceView(i);
|
||||
view.getActiveWorkspace = view.getActiveWorkspace || function() { return this._workspace; };
|
||||
workspaces = [view._workspace];
|
||||
} else {
|
||||
view = new WorkspacesView.WorkspacesView(i, this._scrollAdjustment || 0);
|
||||
workspaces = view._workspaces;
|
||||
}
|
||||
|
||||
Utils.wrapActor(view);
|
||||
view.actor.connect('scroll-event', this._onScrollEvent.bind(this));
|
||||
if (i == Main.layoutManager.primaryIndex && view.scrollAdjustment) {
|
||||
this._scrollAdjustment = view.scrollAdjustment;
|
||||
this._scrollAdjustment.connect('notify::value',
|
||||
this._scrollValueChanged.bind(this));
|
||||
}
|
||||
|
||||
workspaces.forEach(w => w.setFullGeometry = geom => w._fullGeometry = geom);
|
||||
this._workspacesViews.push(view);
|
||||
}
|
||||
|
||||
this._workspacesViews.forEach(wv => Main.layoutManager.overviewGroup.add_actor(wv.actor));
|
||||
|
||||
if (this._syncWorkspacesFullGeometry) {
|
||||
//gnome-shell 3.36.4
|
||||
if (this._fullGeometry)
|
||||
this._syncWorkspacesFullGeometry();
|
||||
if (this._actualGeometry)
|
||||
this._syncWorkspacesActualGeometry();
|
||||
} else if (this._updateWorkspacesFullGeometry) {
|
||||
this._updateWorkspacesFullGeometry();
|
||||
this._updateWorkspacesActualGeometry();
|
||||
}
|
||||
},
|
||||
|
||||
_newGetShowAppsButton: function() {
|
||||
let focusedMonitorIndex = Utils.findIndex(this.allPanels, p => this.checkIfFocusedMonitor(p.monitor));
|
||||
|
||||
return this.allPanels[focusedMonitorIndex].taskbar.showAppsButton;
|
||||
},
|
||||
|
||||
_newDashItemContainerAllocate: function(box, flags) {
|
||||
if (this.child == null)
|
||||
return;
|
||||
|
||||
Utils.setAllocation(this, box, flags);
|
||||
|
||||
let availWidth = box.x2 - box.x1;
|
||||
let availHeight = box.y2 - box.y1;
|
||||
let [minChildWidth, minChildHeight, natChildWidth, natChildHeight] = this.child.get_preferred_size();
|
||||
let [childScaleX, childScaleY] = this.child.get_scale();
|
||||
|
||||
let childWidth = Math.min(natChildWidth * childScaleX, availWidth);
|
||||
let childHeight = Math.min(natChildHeight * childScaleY, availHeight);
|
||||
let childBox = new Clutter.ActorBox();
|
||||
|
||||
childBox.x1 = (availWidth - childWidth) / 2;
|
||||
childBox.y1 = (availHeight - childHeight) / 2;
|
||||
childBox.x2 = childBox.x1 + childWidth;
|
||||
childBox.y2 = childBox.y1 + childHeight;
|
||||
|
||||
Utils.allocate(this.child, childBox, flags);
|
||||
},
|
||||
});
|
||||
|
||||
// This class drives long-running icon animations, to keep them running in sync
|
||||
// with each other.
|
||||
var IconAnimator = Utils.defineClass({
|
||||
Name: 'ZorinTaskbar.IconAnimator',
|
||||
|
||||
_init: function(actor) {
|
||||
this._count = 0;
|
||||
this._started = false;
|
||||
this._animations = {
|
||||
dance: [],
|
||||
};
|
||||
this._timeline = new Clutter.Timeline({
|
||||
duration: 3000,
|
||||
repeat_count: -1,
|
||||
});
|
||||
|
||||
/* Just use the construction property when no need to support 3.36 */
|
||||
if (this._timeline.set_actor)
|
||||
this._timeline.set_actor(actor);
|
||||
|
||||
this._timeline.connect('new-frame', () => {
|
||||
const progress = this._timeline.get_progress();
|
||||
const danceRotation = progress < 1/6 ? 15*Math.sin(progress*24*Math.PI) : 0;
|
||||
const dancers = this._animations.dance;
|
||||
for (let i = 0, iMax = dancers.length; i < iMax; i++) {
|
||||
dancers[i].target.rotation_angle_z = danceRotation;
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
this._timeline.stop();
|
||||
this._timeline = null;
|
||||
for (const name in this._animations) {
|
||||
const pairs = this._animations[name];
|
||||
for (let i = 0, iMax = pairs.length; i < iMax; i++) {
|
||||
const pair = pairs[i];
|
||||
pair.target.disconnect(pair.targetDestroyId);
|
||||
}
|
||||
}
|
||||
this._animations = null;
|
||||
},
|
||||
|
||||
pause: function() {
|
||||
if (this._started && this._count > 0) {
|
||||
this._timeline.stop();
|
||||
}
|
||||
this._started = false;
|
||||
},
|
||||
|
||||
start: function() {
|
||||
if (!this._started && this._count > 0) {
|
||||
this._timeline.start();
|
||||
}
|
||||
this._started = true;
|
||||
},
|
||||
|
||||
addAnimation: function(target, name) {
|
||||
const targetDestroyId = target.connect('destroy', () => this.removeAnimation(target, name));
|
||||
this._animations[name].push({ target, targetDestroyId });
|
||||
if (this._started && this._count === 0) {
|
||||
this._timeline.start();
|
||||
}
|
||||
this._count++;
|
||||
},
|
||||
|
||||
removeAnimation: function(target, name) {
|
||||
const pairs = this._animations[name];
|
||||
for (let i = 0, iMax = pairs.length; i < iMax; i++) {
|
||||
const pair = pairs[i];
|
||||
if (pair.target === target) {
|
||||
target.disconnect(pair.targetDestroyId);
|
||||
pairs.splice(i, 1);
|
||||
this._count--;
|
||||
if (this._started && this._count === 0) {
|
||||
this._timeline.stop();
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function newViewSelectorAnimateIn(oldPage) {
|
||||
if (oldPage)
|
||||
oldPage.hide();
|
||||
|
||||
let vs = Main.overview.viewSelector;
|
||||
|
||||
vs.emit('page-empty');
|
||||
|
||||
vs._activePage.show();
|
||||
|
||||
if (vs._activePage == vs._appsPage && oldPage == vs._workspacesPage) {
|
||||
// Restore opacity, in case we animated via _fadePageOut
|
||||
vs._activePage.opacity = 255;
|
||||
let animate = Me.settings.get_boolean('animate-show-apps');
|
||||
if(animate)
|
||||
vs.appDisplay.animate(IconGrid.AnimationDirection.IN);
|
||||
} else {
|
||||
vs._fadePageIn();
|
||||
}
|
||||
}
|
||||
|
||||
function newViewSelectorAnimateOut(page) {
|
||||
let oldPage = page;
|
||||
let vs = Main.overview.viewSelector;
|
||||
|
||||
if (page == vs._appsPage &&
|
||||
vs._activePage == vs._workspacesPage &&
|
||||
!Main.overview.animationInProgress) {
|
||||
let animate = Me.settings.get_boolean('animate-show-apps');
|
||||
if(animate)
|
||||
vs.appDisplay.animate(IconGrid.AnimationDirection.OUT, Lang.bind(this,
|
||||
function() {
|
||||
vs._animateIn(oldPage)
|
||||
}));
|
||||
else
|
||||
vs._animateIn(oldPage)
|
||||
} else {
|
||||
vs._fadePageOut(page);
|
||||
}
|
||||
}
|
||||
|
||||
function newGetPositionForDirection(direction, fromWs, toWs) {
|
||||
let [xDest, yDest] = WM.WindowManager.prototype._getPositionForDirection(direction, fromWs, toWs);
|
||||
|
||||
if (direction == Meta.MotionDirection.UP ||
|
||||
direction == Meta.MotionDirection.UP_LEFT ||
|
||||
direction == Meta.MotionDirection.UP_RIGHT) {
|
||||
yDest -= Main.panel.height;
|
||||
} else if (direction != Meta.MotionDirection.LEFT &&
|
||||
direction != Meta.MotionDirection.RIGHT) {
|
||||
yDest += Main.panel.height;
|
||||
}
|
||||
|
||||
return [xDest, yDest];
|
||||
}
|
||||
|
||||
function newDoSpringAnimation(animationDirection) {
|
||||
this._grid.opacity = 255;
|
||||
this._grid.animateSpring(animationDirection, Main.overview.getShowAppsButton());
|
||||
}
|
||||
|
||||
function newAnimateIconPosition(icon, box, flags, nChangedIcons) {
|
||||
if (this._needsIconAllocate) {
|
||||
Utils.allocate(icon, box, flags);
|
||||
return;
|
||||
}
|
||||
|
||||
return this._oldAnimateIconPosition(icon, box, flags, nChangedIcons);;
|
||||
}
|
||||
|
||||
function newUpdateHotCorners() {
|
||||
// destroy old hot corners
|
||||
this.hotCorners.forEach(function(corner) {
|
||||
if (corner)
|
||||
corner.destroy();
|
||||
});
|
||||
this.hotCorners = [];
|
||||
|
||||
//global.settings is ubuntu specific setting to disable the hot corner (Tweak tool > Top Bar > Activities Overview Hot Corner)
|
||||
//this._interfaceSettings is for the setting to disable the hot corner introduced in gnome-shell 3.34
|
||||
if ((global.settings.list_keys().indexOf('enable-hot-corners') >= 0 && !global.settings.get_boolean('enable-hot-corners')) ||
|
||||
(this._interfaceSettings && !this._interfaceSettings.get_boolean('enable-hot-corners'))) {
|
||||
this.emit('hot-corners-changed');
|
||||
return;
|
||||
}
|
||||
|
||||
// build new hot corners
|
||||
for (let i = 0; i < this.monitors.length; i++) {
|
||||
let panel = Utils.find(global.zorinTaskbar.panels, p => p.monitor.index == i);
|
||||
let panelPosition = panel ? panel.getPosition() : St.Side.BOTTOM;
|
||||
let panelTopLeft = panelPosition == St.Side.TOP || panelPosition == St.Side.LEFT;
|
||||
let monitor = this.monitors[i];
|
||||
let cornerX = this._rtl ? monitor.x + monitor.width : monitor.x;
|
||||
let cornerY = monitor.y;
|
||||
|
||||
let haveTopLeftCorner = true;
|
||||
|
||||
// If the panel is on the bottom, unless this is explicitly forced, don't add a topleft
|
||||
// hot corner unless it is actually a top left panel. Otherwise, it stops the mouse
|
||||
// as you are dragging across. In the future, maybe we will automatically move the
|
||||
// hotcorner to the bottom when the panel is positioned at the bottom
|
||||
if (i != this.primaryIndex || !panelTopLeft) {
|
||||
// Check if we have a top left (right for RTL) corner.
|
||||
// I.e. if there is no monitor directly above or to the left(right)
|
||||
let besideX = this._rtl ? monitor.x + 1 : cornerX - 1;
|
||||
let besideY = cornerY;
|
||||
let aboveX = cornerX;
|
||||
let aboveY = cornerY - 1;
|
||||
|
||||
for (let j = 0; j < this.monitors.length; j++) {
|
||||
if (i == j)
|
||||
continue;
|
||||
let otherMonitor = this.monitors[j];
|
||||
if (besideX >= otherMonitor.x &&
|
||||
besideX < otherMonitor.x + otherMonitor.width &&
|
||||
besideY >= otherMonitor.y &&
|
||||
besideY < otherMonitor.y + otherMonitor.height) {
|
||||
haveTopLeftCorner = false;
|
||||
break;
|
||||
}
|
||||
if (aboveX >= otherMonitor.x &&
|
||||
aboveX < otherMonitor.x + otherMonitor.width &&
|
||||
aboveY >= otherMonitor.y &&
|
||||
aboveY < otherMonitor.y + otherMonitor.height) {
|
||||
haveTopLeftCorner = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (haveTopLeftCorner) {
|
||||
let corner = new Layout.HotCorner(this, monitor, cornerX, cornerY);
|
||||
|
||||
corner.setBarrierSize = size => corner.__proto__.setBarrierSize.call(corner, Math.min(size, 32));
|
||||
corner.setBarrierSize(panel ? panel.dtpSize : 32);
|
||||
this.hotCorners.push(corner);
|
||||
} else {
|
||||
this.hotCorners.push(null);
|
||||
}
|
||||
}
|
||||
|
||||
this.emit('hot-corners-changed');
|
||||
}
|
||||
|
||||
function newUpdatePanelBarrier(panel) {
|
||||
let barriers = {
|
||||
_rightPanelBarrier: [(panel.isStandalone ? panel : this)],
|
||||
_leftPanelBarrier: [panel]
|
||||
};
|
||||
|
||||
Object.keys(barriers).forEach(k => {
|
||||
let obj = barriers[k][0];
|
||||
|
||||
if (obj[k]) {
|
||||
obj[k].destroy();
|
||||
obj[k] = null;
|
||||
}
|
||||
});
|
||||
|
||||
if (!this.primaryMonitor || !panel.panelBox.height) {
|
||||
return;
|
||||
}
|
||||
|
||||
let barrierSize = Math.min(10, panel.panelBox.height);
|
||||
let fixed1 = panel.monitor.y;
|
||||
let fixed2 = panel.monitor.y + barrierSize;
|
||||
|
||||
if (panel.checkIfVertical()) {
|
||||
barriers._rightPanelBarrier.push(panel.monitor.y + panel.monitor.height, Meta.BarrierDirection.POSITIVE_Y);
|
||||
barriers._leftPanelBarrier.push(panel.monitor.y, Meta.BarrierDirection.NEGATIVE_Y);
|
||||
} else {
|
||||
barriers._rightPanelBarrier.push(panel.monitor.x + panel.monitor.width, Meta.BarrierDirection.NEGATIVE_X);
|
||||
barriers._leftPanelBarrier.push(panel.monitor.x, Meta.BarrierDirection.POSITIVE_X);
|
||||
}
|
||||
|
||||
switch (panel.getPosition()) {
|
||||
//values are initialized as St.Side.TOP
|
||||
case St.Side.BOTTOM:
|
||||
fixed1 = panel.monitor.y + panel.monitor.height - barrierSize;
|
||||
fixed2 = panel.monitor.y + panel.monitor.height;
|
||||
break;
|
||||
case St.Side.LEFT:
|
||||
fixed1 = panel.monitor.x;
|
||||
fixed2 = panel.monitor.x + barrierSize;
|
||||
break;
|
||||
case St.Side.RIGHT:
|
||||
fixed1 = panel.monitor.x + panel.monitor.width;
|
||||
fixed2 = panel.monitor.x + panel.monitor.width - barrierSize;
|
||||
break;
|
||||
}
|
||||
|
||||
//remove left barrier if it overlaps one of the hotcorners
|
||||
for (let k in this.hotCorners) {
|
||||
let hc = this.hotCorners[k];
|
||||
|
||||
if (hc && hc._monitor == panel.monitor &&
|
||||
((fixed1 == hc._x || fixed2 == hc._x) || fixed1 == hc._y || fixed2 == hc._y)) {
|
||||
delete barriers._leftPanelBarrier;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Object.keys(barriers).forEach(k => {
|
||||
let barrierOptions = {
|
||||
display: global.display,
|
||||
directions: barriers[k][2]
|
||||
};
|
||||
|
||||
barrierOptions[panel.varCoord.c1] = barrierOptions[panel.varCoord.c2] = barriers[k][1];
|
||||
barrierOptions[panel.fixedCoord.c1] = fixed1;
|
||||
barrierOptions[panel.fixedCoord.c2] = fixed2;
|
||||
|
||||
barriers[k][0][k] = new Meta.Barrier(barrierOptions);
|
||||
});
|
||||
}
|
||||
|
||||
function _newLookingGlassResize() {
|
||||
let primaryMonitorPanel = Utils.find(global.zorinTaskbar.panels, p => p.monitor == Main.layoutManager.primaryMonitor);
|
||||
let topOffset = primaryMonitorPanel.getPosition() == St.Side.TOP ? primaryMonitorPanel.dtpSize + 8 : 32;
|
||||
|
||||
this._oldResize();
|
||||
Utils.wrapActor(this);
|
||||
Utils.wrapActor(this._objInspector);
|
||||
|
||||
this._hiddenY = Main.layoutManager.primaryMonitor.y + topOffset - this.actor.height;
|
||||
this._targetY = this._hiddenY + this.actor.height;
|
||||
this.actor.y = this._hiddenY;
|
||||
|
||||
this._objInspector.actor.set_position(this.actor.x + Math.floor(this.actor.width * 0.1), this._targetY + Math.floor(this.actor.height * 0.1));
|
||||
}
|
||||
|
||||
function _newLookingGlassOpen() {
|
||||
if (this._open)
|
||||
return;
|
||||
|
||||
this._resize();
|
||||
this._oldOpen();
|
||||
}
|
||||
73
panelPositions.js
Normal file
73
panelPositions.js
Normal file
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* This file is part of the Zorin Taskbar extension for Zorin OS.
|
||||
*
|
||||
* 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/>.
|
||||
*
|
||||
* Credits:
|
||||
* This file is based on code from the Dash to Panel extension
|
||||
*/
|
||||
|
||||
var SHOW_APPS_BTN = 'showAppsButton';
|
||||
var ACTIVITIES_BTN = 'activitiesButton';
|
||||
var TASKBAR = 'taskbar';
|
||||
var DATE_MENU = 'dateMenu';
|
||||
var SYSTEM_MENU = 'systemMenu';
|
||||
var LEFT_BOX = 'leftBox';
|
||||
var CENTER_BOX = 'centerBox';
|
||||
var RIGHT_BOX = 'rightBox';
|
||||
var DESKTOP_BTN = 'desktopButton';
|
||||
|
||||
var STACKED_TL = 'stackedTL';
|
||||
var STACKED_BR = 'stackedBR';
|
||||
var CENTERED = 'centered';
|
||||
var CENTERED_MONITOR = 'centerMonitor';
|
||||
|
||||
var TOP = 'TOP';
|
||||
var BOTTOM = 'BOTTOM';
|
||||
var LEFT = 'LEFT';
|
||||
var RIGHT = 'RIGHT';
|
||||
|
||||
var defaults = [
|
||||
{ element: LEFT_BOX, visible: true, position: STACKED_TL },
|
||||
{ element: SHOW_APPS_BTN, visible: false, position: STACKED_TL },
|
||||
{ element: ACTIVITIES_BTN, visible: true, position: STACKED_TL },
|
||||
{ element: TASKBAR, visible: true, position: STACKED_TL },
|
||||
{ element: CENTER_BOX, visible: true, position: STACKED_BR },
|
||||
{ element: RIGHT_BOX, visible: true, position: STACKED_BR },
|
||||
{ element: SYSTEM_MENU, visible: true, position: STACKED_BR },
|
||||
{ element: DATE_MENU, visible: true, position: STACKED_BR },
|
||||
{ element: DESKTOP_BTN, visible: false, position: STACKED_BR },
|
||||
];
|
||||
|
||||
var optionDialogFunctions = {};
|
||||
|
||||
optionDialogFunctions[SHOW_APPS_BTN] = '_showShowAppsButtonOptions';
|
||||
optionDialogFunctions[DATE_MENU] = '_showDateMenuOptions';
|
||||
optionDialogFunctions[DESKTOP_BTN] = '_showDesktopButtonOptions';
|
||||
|
||||
function getSettingsPositions(settings, setting) {
|
||||
var positions = null;
|
||||
|
||||
try {
|
||||
positions = JSON.parse(settings.get_string(setting));
|
||||
} catch(e) {
|
||||
log('Error parsing positions: ' + e.message);
|
||||
}
|
||||
|
||||
return positions;
|
||||
}
|
||||
|
||||
function checkIfCentered(position) {
|
||||
return position == CENTERED || position == CENTERED_MONITOR;
|
||||
}
|
||||
176
panelStyle.js
Normal file
176
panelStyle.js
Normal file
@@ -0,0 +1,176 @@
|
||||
/*
|
||||
* This file is part of the Zorin Taskbar extension for Zorin OS.
|
||||
*
|
||||
* 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/>.
|
||||
*
|
||||
* Credits:
|
||||
* This file is based on code from the Dash to Panel extension
|
||||
* Ideas for recursing child actors and assigning inline styles
|
||||
* are based on code from the StatusAreaHorizontalSpacing extension
|
||||
* https://bitbucket.org/mathematicalcoffee/status-area-horizontal-spacing-gnome-shell-extension
|
||||
* mathematical.coffee@gmail.com
|
||||
*/
|
||||
|
||||
const Me = imports.misc.extensionUtils.getCurrentExtension();
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const Lang = imports.lang;
|
||||
const Main = imports.ui.main;
|
||||
const Mainloop = imports.mainloop;
|
||||
const St = imports.gi.St;
|
||||
const Shell = imports.gi.Shell;
|
||||
|
||||
const Panel = Me.imports.panel;
|
||||
const Taskbar = Me.imports.taskbar;
|
||||
const Utils = Me.imports.utils;
|
||||
|
||||
var dtpPanelStyle = Utils.defineClass({
|
||||
Name: 'ZorinTaskbar.PanelStyle',
|
||||
|
||||
_init: function() {
|
||||
|
||||
},
|
||||
|
||||
enable : function(panel) {
|
||||
this.panel = panel;
|
||||
|
||||
this._applyStyles();
|
||||
},
|
||||
|
||||
disable: function () {
|
||||
this._removeStyles();
|
||||
},
|
||||
|
||||
_applyStyles: function() {
|
||||
this._rightBoxOperations = [];
|
||||
|
||||
// center box has been moved next to the right box and will be treated the same
|
||||
this._centerBoxOperations = this._rightBoxOperations;
|
||||
|
||||
this._leftBoxOperations = [];
|
||||
|
||||
this._applyStylesRecursively();
|
||||
|
||||
/* connect signal */
|
||||
this._rightBoxActorAddedID = this.panel._rightBox.connect('actor-added',
|
||||
Lang.bind(this, function (container, actor) {
|
||||
if(this._rightBoxOperations.length && !this._ignoreAddedChild)
|
||||
this._recursiveApply(actor, this._rightBoxOperations);
|
||||
|
||||
this._ignoreAddedChild = 0;
|
||||
})
|
||||
);
|
||||
this._centerBoxActorAddedID = this.panel._centerBox.connect('actor-added',
|
||||
Lang.bind(this, function (container, actor) {
|
||||
if(this._centerBoxOperations.length && !this._ignoreAddedChild)
|
||||
this._recursiveApply(actor, this._centerBoxOperations);
|
||||
|
||||
this._ignoreAddedChild = 0;
|
||||
})
|
||||
);
|
||||
this._leftBoxActorAddedID = this.panel._leftBox.connect('actor-added',
|
||||
Lang.bind(this, function (container, actor) {
|
||||
if(this._leftBoxOperations.length)
|
||||
this._recursiveApply(actor, this._leftBoxOperations);
|
||||
})
|
||||
);
|
||||
},
|
||||
|
||||
_removeStyles: function() {
|
||||
/* disconnect signal */
|
||||
if (this._rightBoxActorAddedID)
|
||||
this.panel._rightBox.disconnect(this._rightBoxActorAddedID);
|
||||
if (this._centerBoxActorAddedID)
|
||||
this.panel._centerBox.disconnect(this._centerBoxActorAddedID);
|
||||
if (this._leftBoxActorAddedID)
|
||||
this.panel._leftBox.disconnect(this._leftBoxActorAddedID);
|
||||
|
||||
this._restoreOriginalStyle(this.panel._rightBox);
|
||||
this._restoreOriginalStyle(this.panel._centerBox);
|
||||
this._restoreOriginalStyle(this.panel._leftBox);
|
||||
|
||||
this._applyStylesRecursively(true);
|
||||
},
|
||||
|
||||
_applyStylesRecursively: function(restore) {
|
||||
/*recurse actors */
|
||||
if(this._rightBoxOperations.length) {
|
||||
// add the system menu as we move it from the rightbox to the panel to position it independently
|
||||
let children = this.panel._rightBox.get_children().concat([this.panel.statusArea.aggregateMenu.container]);
|
||||
for(let i in children)
|
||||
this._recursiveApply(children[i], this._rightBoxOperations, restore);
|
||||
}
|
||||
|
||||
if(this._centerBoxOperations.length) {
|
||||
// add the date menu as we move it from the centerbox to the panel to position it independently
|
||||
let children = this.panel._centerBox.get_children().concat([this.panel.statusArea.dateMenu.container]);
|
||||
for(let i in children)
|
||||
this._recursiveApply(children[i], this._centerBoxOperations, restore);
|
||||
}
|
||||
|
||||
if(this._leftBoxOperations.length) {
|
||||
let children = this.panel._leftBox.get_children();
|
||||
for(let i in children)
|
||||
this._recursiveApply(children[i], this._leftBoxOperations, restore);
|
||||
}
|
||||
},
|
||||
|
||||
_recursiveApply: function(actor, operations, restore) {
|
||||
for(let i in operations) {
|
||||
let o = operations[i];
|
||||
if(o.compareFn(actor))
|
||||
if(restore)
|
||||
o.restoreFn ? o.restoreFn(actor) : this._restoreOriginalStyle(actor);
|
||||
else
|
||||
o.applyFn(actor, i);
|
||||
}
|
||||
|
||||
if(actor.get_children) {
|
||||
let children = actor.get_children();
|
||||
for(let i in children) {
|
||||
this._recursiveApply(children[i], operations, restore);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_restoreOriginalStyle: function(actor) {
|
||||
if (actor._dtp_original_inline_style !== undefined) {
|
||||
actor.set_style(actor._dtp_original_inline_style);
|
||||
delete actor._dtp_original_inline_style;
|
||||
delete actor._dtp_style_overrides;
|
||||
}
|
||||
|
||||
if (actor.has_style_class_name('panel-button')) {
|
||||
this._refreshPanelButton(actor);
|
||||
}
|
||||
},
|
||||
|
||||
_refreshPanelButton: function(actor) {
|
||||
if (actor.visible && imports.misc.config.PACKAGE_VERSION >= '3.34.0') {
|
||||
//force gnome 3.34+ to refresh (having problem with the -natural-hpadding)
|
||||
let parent = actor.get_parent();
|
||||
let children = parent.get_children();
|
||||
let actorIndex = 0;
|
||||
|
||||
if (children.length > 1) {
|
||||
actorIndex = children.indexOf(actor);
|
||||
}
|
||||
|
||||
this._ignoreAddedChild = [this.panel._centerBox, this.panel._rightBox].indexOf(parent) >= 0;
|
||||
|
||||
parent.remove_child(actor);
|
||||
parent.insert_child_at_index(actor, actorIndex);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
14
po/af.po
Normal file
14
po/af.po
Normal file
@@ -0,0 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: af\n"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Lêers"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Instellings"
|
||||
17
po/an.po
Normal file
17
po/an.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: an\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Monitor d'o sistema"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Fichers"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Configuración"
|
||||
17
po/ar.po
Normal file
17
po/ar.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: ar\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "مرقاب النّظام"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "الملفات"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "الإعدادات"
|
||||
17
po/as.po
Normal file
17
po/as.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: as\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "চিস্টেম মনিটৰ"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "ফাইলসমূহ"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "সংহতিসমূহ"
|
||||
14
po/ast.po
Normal file
14
po/ast.po
Normal file
@@ -0,0 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: ast\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Monitor del Sistema"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Ficheros"
|
||||
11
po/az.po
Normal file
11
po/az.po
Normal file
@@ -0,0 +1,11 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: az\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Sistem İzləyicisi"
|
||||
17
po/be.po
Normal file
17
po/be.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: be\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Сістэмны назіральнік"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Файлы"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Настройкі"
|
||||
11
po/be@latin.po
Normal file
11
po/be@latin.po
Normal file
@@ -0,0 +1,11 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: be@latin\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Systemny naziralnik"
|
||||
17
po/bg.po
Normal file
17
po/bg.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: bg\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Наблюдение на системата"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Файлове"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Настройки"
|
||||
14
po/bn.po
Normal file
14
po/bn.po
Normal file
@@ -0,0 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: bn\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "সিস্টেম পর্যবেক্ষক"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "ফাইল"
|
||||
17
po/bn_IN.po
Normal file
17
po/bn_IN.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: bn_IN\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "System Monitor"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "ফাইল"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "সেটিং"
|
||||
11
po/bo.po
Normal file
11
po/bo.po
Normal file
@@ -0,0 +1,11 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: bo\n"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "ཡིག་ཆ"
|
||||
11
po/br.po
Normal file
11
po/br.po
Normal file
@@ -0,0 +1,11 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: br\n"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Arventennoù"
|
||||
17
po/bs.po
Normal file
17
po/bs.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: bs\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Nadzor sistema"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Datoteke"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Postavke"
|
||||
17
po/ca.po
Normal file
17
po/ca.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: ca\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Monitor del sistema"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Fitxers"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Paràmetres"
|
||||
17
po/ca@valencia.po
Normal file
17
po/ca@valencia.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: ca-valencia\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Monitor del sistema"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Fitxers"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Paràmetres"
|
||||
14
po/ckb.po
Normal file
14
po/ckb.po
Normal file
@@ -0,0 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: ckb\n"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "پەڕگەکان"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "ڕێكخستنەكان"
|
||||
14
po/crh.po
Normal file
14
po/crh.po
Normal file
@@ -0,0 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: crh\n"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Dosyeler"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Ayarlar"
|
||||
11
po/cy.po
Normal file
11
po/cy.po
Normal file
@@ -0,0 +1,11 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: cy\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Arsylwr System"
|
||||
17
po/da.po
Normal file
17
po/da.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: da\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Systemovervågning"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Filer"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Indstillinger"
|
||||
11
po/dz.po
Normal file
11
po/dz.po
Normal file
@@ -0,0 +1,11 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: dz\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "རིམ་ལུགས་ལྟ་རྟོག་པ།"
|
||||
17
po/el.po
Normal file
17
po/el.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: el\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Παρακολούθηση συστήματος"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Αρχεία"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Ρυθμίσεις"
|
||||
17
po/eo.po
Normal file
17
po/eo.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: eo\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Sistemmonitoro"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Dosieroj"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Agordoj"
|
||||
17
po/et.po
Normal file
17
po/et.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: et\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Süsteemijälgija"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Failid"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Sätted"
|
||||
17
po/eu.po
Normal file
17
po/eu.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: eu\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Sistemaren monitorea"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Fitxategiak"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Ezarpenak"
|
||||
17
po/fa.po
Normal file
17
po/fa.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: fa\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "پایشگر سامانه"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "پروندهها"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "تنظیمات"
|
||||
17
po/fi.po
Normal file
17
po/fi.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: fi\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Järjestelmän valvonta"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Tiedostot"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Asetukset"
|
||||
17
po/fur.po
Normal file
17
po/fur.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: fur\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Monitor di sisteme"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "File"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Impostazions"
|
||||
17
po/ga.po
Normal file
17
po/ga.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: ga\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Monatóir an Chórais"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Comhaid"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Socruithe"
|
||||
17
po/gd.po
Normal file
17
po/gd.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: gd\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Monatair an t-siostaim"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Faidhlichean"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Roghainnean"
|
||||
17
po/gu.po
Normal file
17
po/gu.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: gu\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "સિસ્ટમ મૉનિટર"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "ફાઇલો"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "સુયોજનો"
|
||||
17
po/he.po
Normal file
17
po/he.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: he\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "צג המערכת"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "קבצים"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "הגדרות"
|
||||
17
po/hi.po
Normal file
17
po/hi.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: hi\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "तंत्र मॉनीटर"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "फ़ाइल"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "सेटिंग्स"
|
||||
17
po/hr.po
Normal file
17
po/hr.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: hr\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Nadgledatelj sustava"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Datoteke"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Postavke"
|
||||
17
po/id.po
Normal file
17
po/id.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: id\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Monitor Sistem"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Berkas"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Pengaturan"
|
||||
17
po/is.po
Normal file
17
po/is.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: is\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Kerfisvakt"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Skrár"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Stillingar"
|
||||
11
po/ka.po
Normal file
11
po/ka.po
Normal file
@@ -0,0 +1,11 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: ka\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "სისტემის მონიტორი"
|
||||
11
po/kab.po
Normal file
11
po/kab.po
Normal file
@@ -0,0 +1,11 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: kab\n"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Iɣewwaṛen"
|
||||
609
po/kk.po
Normal file
609
po/kk.po
Normal file
@@ -0,0 +1,609 @@
|
||||
# Kazakh translation for dash-to-panel
|
||||
# Copyright (c) 2017 dash-to-panel authors.
|
||||
# This file is distributed under the same license as the dash-to-panel package.
|
||||
# Baurzhan Muftakhidinov <baurthefirst@gmail.com>, 2017-2018.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: dash-to-panel master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-02-02 21:29+0500\n"
|
||||
"PO-Revision-Date: 2018-02-03 15:22+0500\n"
|
||||
"Last-Translator: Baurzhan Muftakhidinov <baurthefirst@gmail.com>\n"
|
||||
"Language-Team: Kazakh <kk_KZ@googlegroups.com>\n"
|
||||
"Language: kk\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Poedit 2.0.3\n"
|
||||
|
||||
#: prefs.js:295
|
||||
msgid "Running Indicator Options"
|
||||
msgstr "Орындалып тұрған индикатор баптаулары"
|
||||
|
||||
#: prefs.js:302 prefs.js:447 prefs.js:499 prefs.js:608 prefs.js:684
|
||||
#: prefs.js:753 prefs.js:829 prefs.js:871
|
||||
msgid "Reset to defaults"
|
||||
msgstr "Бастапқы мәндерге тастау"
|
||||
|
||||
#: prefs.js:440
|
||||
msgid "Show Desktop options"
|
||||
msgstr "Жұмыс үстел баптауларын көрсету"
|
||||
|
||||
#: prefs.js:492
|
||||
msgid "Window preview options"
|
||||
msgstr "Терезе кіші көрінісі баптаулары"
|
||||
|
||||
#: prefs.js:601
|
||||
msgid "Ungrouped application options"
|
||||
msgstr "Топталмаған қолданба баптаулары"
|
||||
|
||||
#: prefs.js:677
|
||||
msgid "Customize middle-click behavior"
|
||||
msgstr "Орта шерту әрекетін баптау"
|
||||
|
||||
#: prefs.js:746
|
||||
msgid "Advanced hotkeys options"
|
||||
msgstr "Кеңейтілген жарлық баптаулары"
|
||||
|
||||
#: prefs.js:822
|
||||
msgid "Secondary Menu Options"
|
||||
msgstr "Қосымша мәзір баптаулары"
|
||||
|
||||
#: prefs.js:864 Settings.ui.h:113
|
||||
msgid "Advanced Options"
|
||||
msgstr "Кеңейтілген баптаулар"
|
||||
|
||||
#: appIcons.js:1179
|
||||
msgid "Show Details"
|
||||
msgstr "Ақпаратын көрсету"
|
||||
|
||||
#: appIcons.js:1198
|
||||
msgid "New Window"
|
||||
msgstr "Жаңа терезе"
|
||||
|
||||
#: appIcons.js:1198 appIcons.js:1260 appIcons.js:1262 Settings.ui.h:8
|
||||
msgid "Quit"
|
||||
msgstr "Шығу"
|
||||
|
||||
#: appIcons.js:1262
|
||||
msgid "Windows"
|
||||
msgstr "Терезелер"
|
||||
|
||||
#: appIcons.js:1421
|
||||
msgid "Taskbar Settings"
|
||||
msgstr "Панелінің баптаулары"
|
||||
|
||||
#: appIcons.js:1428
|
||||
msgid "Restore Windows"
|
||||
msgstr "Терезелерді қалпына келтіру"
|
||||
|
||||
#: appIcons.js:1428
|
||||
msgid "Show Desktop"
|
||||
msgstr "Жұмыс үстелді көрсету"
|
||||
|
||||
#: Settings.ui.h:1
|
||||
msgid ""
|
||||
"When set to minimize, double clicking minimizes all the windows of the "
|
||||
"application."
|
||||
msgstr ""
|
||||
"Қайыруға орнатылған кезде, қос шерту нәтижесінде қолданбаның барлық "
|
||||
"терезелерін қайырады."
|
||||
|
||||
#: Settings.ui.h:2
|
||||
msgid "Shift+Click action"
|
||||
msgstr "Shift+Click әрекеті"
|
||||
|
||||
#: Settings.ui.h:3
|
||||
msgid "Raise window"
|
||||
msgstr "Терезені көтеру"
|
||||
|
||||
#: Settings.ui.h:4
|
||||
msgid "Minimize window"
|
||||
msgstr "Терезені минималды қылу"
|
||||
|
||||
#: Settings.ui.h:5
|
||||
msgid "Launch new instance"
|
||||
msgstr "Жаңа экземплярды жөнелту"
|
||||
|
||||
#: Settings.ui.h:6
|
||||
msgid "Cycle through windows"
|
||||
msgstr "Терезелер арасында циклмен ауысу"
|
||||
|
||||
#: Settings.ui.h:7
|
||||
msgid "Cycle windows + minimize"
|
||||
msgstr "Терезелер арасында циклмен ауысу + қайыру"
|
||||
|
||||
#: Settings.ui.h:9
|
||||
msgid "Behavior for Middle-Click."
|
||||
msgstr "Орта батырманың мінез-құлығы."
|
||||
|
||||
#: Settings.ui.h:10
|
||||
msgid "Middle-Click action"
|
||||
msgstr "Орта батырма әрекеті"
|
||||
|
||||
#: Settings.ui.h:11
|
||||
msgid "Behavior for Shift+Middle-Click."
|
||||
msgstr "Shift+Орта батырманың мінез-құлығы."
|
||||
|
||||
#: Settings.ui.h:12
|
||||
msgid "Shift+Middle-Click action"
|
||||
msgstr "Shift+Орта батырма әрекеті"
|
||||
|
||||
#: Settings.ui.h:13
|
||||
msgid "Integrate <i>AppMenu</i> items"
|
||||
msgstr "<i>Қолданбалар мәзірі</i> нәрселерін интеграциялау"
|
||||
|
||||
#: Settings.ui.h:14
|
||||
msgid "<i>Show Details</i> menu item"
|
||||
msgstr "<i>Ақпаратын көрсету</i> мәзір элементі"
|
||||
|
||||
#: Settings.ui.h:15
|
||||
msgid "Highlight focused application"
|
||||
msgstr "Фокустағы қолданбаларды түспен ерекшелеу"
|
||||
|
||||
#: Settings.ui.h:16
|
||||
msgid "Highlight color"
|
||||
msgstr "Ерекшелеу түсі"
|
||||
|
||||
#: Settings.ui.h:17
|
||||
msgid "Highlight opacity"
|
||||
msgstr "Ерекшелеудің мөлдірсіздігі"
|
||||
|
||||
#: Settings.ui.h:18
|
||||
msgid "5"
|
||||
msgstr "5"
|
||||
|
||||
#: Settings.ui.h:19
|
||||
msgid "Indicator height (px)"
|
||||
msgstr "Индикатор биіктігі (пикс)"
|
||||
|
||||
#: Settings.ui.h:20
|
||||
msgid "0"
|
||||
msgstr "0"
|
||||
|
||||
#: Settings.ui.h:21
|
||||
msgid "Indicator color - Override Theme"
|
||||
msgstr "Индикатор түсі - теманы үстінен басу"
|
||||
|
||||
#: Settings.ui.h:22
|
||||
msgid "1 window open (or ungrouped)"
|
||||
msgstr "1 терезе ашық (немесе топталмаған)"
|
||||
|
||||
#: Settings.ui.h:23
|
||||
msgid "Apply to all"
|
||||
msgstr "Барлығы үшін іске асыру"
|
||||
|
||||
#: Settings.ui.h:24
|
||||
msgid "2 windows open"
|
||||
msgstr "2 терезе ашық"
|
||||
|
||||
#: Settings.ui.h:25
|
||||
msgid "3 windows open"
|
||||
msgstr "3 терезе ашық"
|
||||
|
||||
#: Settings.ui.h:26
|
||||
msgid "4+ windows open"
|
||||
msgstr "4+ терезе ашық"
|
||||
|
||||
#: Settings.ui.h:27
|
||||
msgid "Use different for unfocused"
|
||||
msgstr "Фокустағы емес үшін басқаны қолдану"
|
||||
|
||||
#: Settings.ui.h:28
|
||||
msgid "Font size (px) of the application titles (default is 14)"
|
||||
msgstr "Қолданба атауының қарібі (пикс, бастапқы мәні 14)"
|
||||
|
||||
#: Settings.ui.h:29
|
||||
msgid "Font color of the application titles"
|
||||
msgstr "Қолданба атауының қаріп түсі"
|
||||
|
||||
#: Settings.ui.h:30
|
||||
msgid "Maximum width (px) of the application titles (default is 160)"
|
||||
msgstr "Қолданба атауының максималды ені (пикс, бастапқы мәні 160)"
|
||||
|
||||
#: Settings.ui.h:31
|
||||
msgid "Use a fixed width for the application titles"
|
||||
msgstr "Қолданба атауы үшін біркелкі енді қолдану"
|
||||
|
||||
#: Settings.ui.h:32
|
||||
msgid ""
|
||||
"The application titles all have the same width, even if their texts are "
|
||||
"shorter than the maximum width. The maximum width value is used as the fixed "
|
||||
"width."
|
||||
msgstr ""
|
||||
"Қолданба атаулары үшін біркелкі енді қолдану, олардың мәтіні максималды "
|
||||
"енінен кіші болса да. Максималды мәні тұрақты ені ретінде қолданылады."
|
||||
|
||||
#: Settings.ui.h:33
|
||||
msgid "Display running indicators on unfocused applications"
|
||||
msgstr "Фокустағы емес қолданбалардың орындалу индикаторын көрсету"
|
||||
|
||||
#: Settings.ui.h:34
|
||||
msgid "Use the favorite icons as application launchers"
|
||||
msgstr "Таңдамалы таңбашаларды қолданба жөнелткіштері ретінде қолдану"
|
||||
|
||||
#: Settings.ui.h:35
|
||||
msgid "Preview timeout on icon leave (ms)"
|
||||
msgstr "Таңбашадан кеткен кезде кіші көріністі көрсету уақыты (мс)"
|
||||
|
||||
#: Settings.ui.h:36
|
||||
msgid ""
|
||||
"If set too low, the window preview of running applications may seem to close "
|
||||
"too quickly when trying to enter the popup. If set too high, the preview may "
|
||||
"linger too long when moving to an adjacent icon."
|
||||
msgstr ""
|
||||
"Мәні тым аз болса, кіші көрініске өту талабын жасау кезінде орындалып тұрған "
|
||||
"қолданбаның кіші көрінісі тым жылдам жабылуы мүмкін. Мәні тым үлкен болса, "
|
||||
"көрші таңбашаға ауысу кезінде ағымдағы кіші көрініс ұзақ уақыт бойы "
|
||||
"көрсетілуі мүмкін."
|
||||
|
||||
#: Settings.ui.h:37
|
||||
msgid "Time (ms) before showing (100 is default)"
|
||||
msgstr "Көрсету алдындағы уақыт (мс) (бастапқы шамасы 100)"
|
||||
|
||||
#: Settings.ui.h:38
|
||||
msgid "Enable window peeking"
|
||||
msgstr "Терезелерді анықтауды іске қосу"
|
||||
|
||||
#: Settings.ui.h:39
|
||||
msgid ""
|
||||
"When hovering over a window preview for some time, the window gets "
|
||||
"distinguished."
|
||||
msgstr ""
|
||||
"Курсор терезенің кіші көрінісі үстінен біраз уақыт бойы өтсе, ол терезе "
|
||||
"анықталатын болады."
|
||||
|
||||
#: Settings.ui.h:40
|
||||
msgid "Enter window peeking mode timeout (ms)"
|
||||
msgstr "Терезені анықтауды кідіріс уақытын енгізу (мс)"
|
||||
|
||||
#: Settings.ui.h:41
|
||||
msgid ""
|
||||
"Time of inactivity while hovering over a window preview needed to enter the "
|
||||
"window peeking mode."
|
||||
msgstr ""
|
||||
"Терезені анықтау үшін курсор терезенің үстінен қанша уақыт бойы аялдау керек."
|
||||
|
||||
#: Settings.ui.h:42
|
||||
msgid "Window peeking mode opacity"
|
||||
msgstr "Терезелерді анықтау режимінің мөлдірсіздігі"
|
||||
|
||||
#: Settings.ui.h:43
|
||||
msgid ""
|
||||
"All windows except for the peeked one have their opacity set to the same "
|
||||
"value."
|
||||
msgstr ""
|
||||
"Анықталған терезеден басқаларының мөлдірсіздігі бастапқы шамасына тең болады."
|
||||
|
||||
#: Settings.ui.h:44
|
||||
msgid "Middle click to close window"
|
||||
msgstr "Терезені жабу үшін орта шерту"
|
||||
|
||||
#: Settings.ui.h:45
|
||||
msgid "Middle click on the preview to close the window."
|
||||
msgstr "Терезені жабу үшін кіші көріністе орта шерту."
|
||||
|
||||
#: Settings.ui.h:46
|
||||
msgid "Super"
|
||||
msgstr "Super"
|
||||
|
||||
#: Settings.ui.h:47
|
||||
msgid "Super + Alt"
|
||||
msgstr "Super + Alt"
|
||||
|
||||
#: Settings.ui.h:48
|
||||
msgid "Hotkeys prefix"
|
||||
msgstr "Ыстық пернелер префиксі"
|
||||
|
||||
#: Settings.ui.h:49
|
||||
msgid "Hotkeys will either be Super+Number or Super+Alt+Num"
|
||||
msgstr "Ыстық пернелер Super+Сан or Super+Alt+Сан болады"
|
||||
|
||||
#: Settings.ui.h:50
|
||||
msgid "Never"
|
||||
msgstr "Ешқашан"
|
||||
|
||||
#: Settings.ui.h:51
|
||||
msgid "Show temporarily"
|
||||
msgstr "Уақытша көрсету"
|
||||
|
||||
#: Settings.ui.h:52
|
||||
msgid "Always visible"
|
||||
msgstr "Әрқашан көрінеді"
|
||||
|
||||
#: Settings.ui.h:53
|
||||
msgid "Number overlay"
|
||||
msgstr "Цифрлық оверлей"
|
||||
|
||||
#: Settings.ui.h:54
|
||||
msgid ""
|
||||
"Temporarily show the application numbers over the icons when using the "
|
||||
"hotkeys."
|
||||
msgstr ""
|
||||
"Ыстық пернелерді көрсету кезінде таңбашалардың үстінен өткізгенде қолданба "
|
||||
"нөмірлерін уақытша көрсету."
|
||||
|
||||
#: Settings.ui.h:55
|
||||
msgid "Hide timeout (ms)"
|
||||
msgstr "Жасыру кідірісі (мс)"
|
||||
|
||||
#: Settings.ui.h:56
|
||||
msgid "Shortcut to show the overlay for 2 seconds"
|
||||
msgstr "Оверлейді 2 секундқа көрсету үшін пернетақта жарлығы"
|
||||
|
||||
#: Settings.ui.h:57
|
||||
msgid "Syntax: <Shift>, <Ctrl>, <Alt>, <Super>"
|
||||
msgstr "Синтаксисі: <Shift>, <Ctrl>, <Alt>, <Super>"
|
||||
|
||||
#: Settings.ui.h:58
|
||||
msgid "Show Desktop button width (px)"
|
||||
msgstr "Жұмыс үстелі батырмасының (пикс)"
|
||||
|
||||
#: Settings.ui.h:59
|
||||
msgid "Panel screen position"
|
||||
msgstr "Панельдің экрандағы орны"
|
||||
|
||||
#: Settings.ui.h:60
|
||||
msgid "Bottom"
|
||||
msgstr "Төмен"
|
||||
|
||||
#: Settings.ui.h:61
|
||||
msgid "Top"
|
||||
msgstr "Жоғары"
|
||||
|
||||
#: Settings.ui.h:62
|
||||
msgid ""
|
||||
"Panel Size\n"
|
||||
"(default is 48)"
|
||||
msgstr ""
|
||||
"Панель өлшемі\n"
|
||||
"(бастапқы мәні 48)"
|
||||
|
||||
#: Settings.ui.h:64
|
||||
msgid ""
|
||||
"App Icon Margin\n"
|
||||
"(default is 8)"
|
||||
msgstr ""
|
||||
"Қолданба таңбашасының шет өрісі\n"
|
||||
"(бастапқы мәні 8)"
|
||||
|
||||
#: Settings.ui.h:66
|
||||
msgid "Running indicator position"
|
||||
msgstr "Орындалып тұрған индикатор орны"
|
||||
|
||||
#: Settings.ui.h:67
|
||||
msgid "Running indicator style (Focused app)"
|
||||
msgstr "Орындалып тұрған индикатордың стилі (фокустегі қолданба)"
|
||||
|
||||
#: Settings.ui.h:68
|
||||
msgid "Dots"
|
||||
msgstr "Нүктелер"
|
||||
|
||||
#: Settings.ui.h:69
|
||||
msgid "Squares"
|
||||
msgstr "Шаршылар"
|
||||
|
||||
#: Settings.ui.h:70
|
||||
msgid "Dashes"
|
||||
msgstr "Штрихтер"
|
||||
|
||||
#: Settings.ui.h:71
|
||||
msgid "Segmented"
|
||||
msgstr "Сегменттелген"
|
||||
|
||||
#: Settings.ui.h:72
|
||||
msgid "Solid"
|
||||
msgstr "Бүтін"
|
||||
|
||||
#: Settings.ui.h:73
|
||||
msgid "Ciliora"
|
||||
msgstr "Ciliora"
|
||||
|
||||
#: Settings.ui.h:74
|
||||
msgid "Metro"
|
||||
msgstr "Metro"
|
||||
|
||||
#: Settings.ui.h:75
|
||||
msgid "Running indicator style (Unfocused apps)"
|
||||
msgstr "Орындалып тұрған индикатордың стилі (фокустегі емес қолданба)"
|
||||
|
||||
#: Settings.ui.h:76
|
||||
msgid "Clock location"
|
||||
msgstr "Сағаттың орналасуы"
|
||||
|
||||
#: Settings.ui.h:77
|
||||
msgid "Natural"
|
||||
msgstr "Табиғи"
|
||||
|
||||
#: Settings.ui.h:78
|
||||
msgid "Left of status menu"
|
||||
msgstr "Қалып-күй мәзірінің сол жағы"
|
||||
|
||||
#: Settings.ui.h:79
|
||||
msgid "Right of status menu"
|
||||
msgstr "Қалып-күй мәзірінің оң жағы"
|
||||
|
||||
#: Settings.ui.h:80
|
||||
msgid "Taskbar position"
|
||||
msgstr "Тапсырмалар панелінің орны"
|
||||
|
||||
#: Settings.ui.h:81
|
||||
msgid "Left side of panel"
|
||||
msgstr "Панельдің сол жағы"
|
||||
|
||||
#: Settings.ui.h:82
|
||||
msgid "Centered in monitor"
|
||||
msgstr "Монитордың ортасында"
|
||||
|
||||
#: Settings.ui.h:83
|
||||
msgid "Centered in content"
|
||||
msgstr "Құраманың ортасында"
|
||||
|
||||
#: Settings.ui.h:84
|
||||
msgid "Position and Style"
|
||||
msgstr "Орны және стилі"
|
||||
|
||||
#: Settings.ui.h:85
|
||||
msgid "Show favorite applications"
|
||||
msgstr "Таңдамалы қолданбаларды көрсету"
|
||||
|
||||
#: Settings.ui.h:86
|
||||
msgid "Show <i>Applications</i> icon"
|
||||
msgstr "<i>Қолданбалар</i> таңбашасын көрсету"
|
||||
|
||||
#: Settings.ui.h:87
|
||||
msgid "Animate <i>Show Applications</i>."
|
||||
msgstr "<i>Қолданбаларды көрсету</i> анимациясын іске қосу."
|
||||
|
||||
#: Settings.ui.h:88
|
||||
msgid "Show <i>Activities</i> button"
|
||||
msgstr "<i>Көрініс</i> таңбашасын көрсету"
|
||||
|
||||
#: Settings.ui.h:89
|
||||
msgid "Show <i>Desktop</i> button"
|
||||
msgstr "<i>Жұмыс үстелі</i> батырмасын көрсету"
|
||||
|
||||
#: Settings.ui.h:90
|
||||
msgid "Show <i>AppMenu</i> button"
|
||||
msgstr "<i>Қолданбалар мәзірі</i> таңбашасын көрсету"
|
||||
|
||||
#: Settings.ui.h:91
|
||||
msgid "Top Bar > Show App Menu must be enabled in Tweak Tool"
|
||||
msgstr ""
|
||||
"Кеңейтілген баптаулар (Tweak) сайманында Үстіндегі панель >Қолданбалар "
|
||||
"мәзірін көрсету іске қосылған болуы тиіс"
|
||||
|
||||
#: Settings.ui.h:92
|
||||
msgid "Show window previews on hover"
|
||||
msgstr "Курсор үстінен өткен кезде, терезенің кіші көрінісін көрсету"
|
||||
|
||||
#: Settings.ui.h:93
|
||||
msgid "Isolate Workspaces"
|
||||
msgstr "Жұмыс орындарын оқшаулау"
|
||||
|
||||
#: Settings.ui.h:94
|
||||
msgid "Ungroup applications"
|
||||
msgstr "Қолданбаларды топтаудан босату"
|
||||
|
||||
#: Settings.ui.h:95
|
||||
msgid "Behaviour when clicking on the icon of a running application."
|
||||
msgstr "Орындалып тұрған қолданбаның таңбашасына шерту кезіндегі мінез-құлығы."
|
||||
|
||||
#: Settings.ui.h:96
|
||||
msgid "Click action"
|
||||
msgstr "Шерту әрекеті"
|
||||
|
||||
#: Settings.ui.h:97
|
||||
msgid ""
|
||||
"Enable Super+(0-9) as shortcuts to activate apps. It can also be used "
|
||||
"together with Shift and Ctrl."
|
||||
msgstr ""
|
||||
"Super+(0-9) қолданбаларды белсендіру үшін жарлықтар ретінде іске қосу. "
|
||||
"Сонымен қатар, ол Shift пен Ctrl пернелерімен бірге қолданылуы мүмкін."
|
||||
|
||||
#: Settings.ui.h:98
|
||||
msgid "Use hotkeys to activate apps"
|
||||
msgstr "Қолданбаларды белсендіру үшін ыстық пернелерді қолдану"
|
||||
|
||||
#: Settings.ui.h:99
|
||||
msgid "Behavior"
|
||||
msgstr "Мінез-құлығы"
|
||||
|
||||
#: Settings.ui.h:100
|
||||
msgid ""
|
||||
"Tray Font Size\n"
|
||||
"(0 = theme default)"
|
||||
msgstr ""
|
||||
"Трей қарібінің өлшемі\n"
|
||||
"(0 = теманың бастапқы өлшемі)"
|
||||
|
||||
#: Settings.ui.h:102
|
||||
msgid ""
|
||||
"LeftBox Font Size\n"
|
||||
"(0 = theme default)"
|
||||
msgstr ""
|
||||
"Сол жақ аймағының қаріп өлшемі\n"
|
||||
"(0 = теманың бастапқы өлшемі)"
|
||||
|
||||
#: Settings.ui.h:104
|
||||
msgid ""
|
||||
"Tray Item Padding\n"
|
||||
"(-1 = theme default)"
|
||||
msgstr ""
|
||||
"Трейдегі нәрсенің шегінісі\n"
|
||||
"(-1 = теманың бастапқы өлшемі)"
|
||||
|
||||
#: Settings.ui.h:106
|
||||
msgid ""
|
||||
"Status Icon Padding\n"
|
||||
"(-1 = theme default)"
|
||||
msgstr ""
|
||||
"Қалып-күй таңбашасының шегінісі\n"
|
||||
"(-1 = теманың бастапқы өлшемі)"
|
||||
|
||||
#: Settings.ui.h:108
|
||||
msgid ""
|
||||
"LeftBox Padding\n"
|
||||
"(-1 = theme default)"
|
||||
msgstr ""
|
||||
"Сол жақ аймағының шегінісі\n"
|
||||
"(-1 = теманың бастапқы өлшемі)"
|
||||
|
||||
#: Settings.ui.h:110
|
||||
msgid "Animate switching applications"
|
||||
msgstr "Қолданбаларды ауыстыру анимациясын іске қосу"
|
||||
|
||||
#: Settings.ui.h:111
|
||||
msgid "Animate launching new windows"
|
||||
msgstr "Қолданбаларды жөнелту анимациясын іске қосу"
|
||||
|
||||
#: Settings.ui.h:112
|
||||
msgid "App icon secondary (right-click) menu"
|
||||
msgstr "Қолданба таңбашысының қосалқы (оң жақпен шерту) мәзірі"
|
||||
|
||||
#: Settings.ui.h:114
|
||||
msgid "Fine-Tune"
|
||||
msgstr "Дәлдеп баптау"
|
||||
|
||||
#: Settings.ui.h:115
|
||||
msgid "version: "
|
||||
msgstr "нұсқасы: "
|
||||
|
||||
#: Settings.ui.h:116
|
||||
msgid "Github"
|
||||
msgstr "Github"
|
||||
|
||||
#: Settings.ui.h:117
|
||||
msgid ""
|
||||
"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
|
||||
"See the <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
|
||||
"\">GNU General Public License, version 2 or later</a> for details.</span>"
|
||||
msgstr ""
|
||||
"<span size=\"small\">Бұл бағдарлама ЕШҚАНДАЙ КЕПІЛДЕМЕСІЗ таратылады.\n"
|
||||
"Көбірек білу үшін <a href=\"https://www.gnu.org/licenses/old-licenses/"
|
||||
"gpl-2.0.html\">GNU General Public License, нұсқасы 2 немесе кейінірек</a> "
|
||||
"қараңыз.</span>"
|
||||
|
||||
#: Settings.ui.h:119
|
||||
msgid "About"
|
||||
msgstr "Осы туралы"
|
||||
|
||||
msgid "Weekday"
|
||||
msgstr "Жұмыс күні"
|
||||
|
||||
msgid "Date"
|
||||
msgstr "Күн"
|
||||
|
||||
msgid "Seconds"
|
||||
msgstr "Секундтар"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Жүйелік бақылаушы"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Файлдар"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Баптаулар"
|
||||
11
po/km.po
Normal file
11
po/km.po
Normal file
@@ -0,0 +1,11 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: km\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "កម្មវិធីត្រួតពិនិត្យប្រព័ន្ធ"
|
||||
17
po/kn.po
Normal file
17
po/kn.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: kn\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "ಗಣಕ ಮೇಲ್ವಿಚಾರಕ"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "ಕಡತಗಳು"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "ಸಿದ್ಧತೆಗಳು"
|
||||
17
po/ko.po
Normal file
17
po/ko.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: ko\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "시스템 정보"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "파일"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "설정"
|
||||
11
po/ku.po
Normal file
11
po/ku.po
Normal file
@@ -0,0 +1,11 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: ku\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Temaşekerê Pergalê"
|
||||
14
po/ky.po
Normal file
14
po/ky.po
Normal file
@@ -0,0 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: ky\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Тутум монитору"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Файлдар"
|
||||
11
po/li.po
Normal file
11
po/li.po
Normal file
@@ -0,0 +1,11 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: li\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Prosesbeheer"
|
||||
11
po/ln.po
Normal file
11
po/ln.po
Normal file
@@ -0,0 +1,11 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: ln\n"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Ba Fisyé"
|
||||
17
po/lt.po
Normal file
17
po/lt.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: lt\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Sistemos monitorius"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Failai"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Nustatymai"
|
||||
17
po/lv.po
Normal file
17
po/lv.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: lv\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Sistēmas pārraugs"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Datnes"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Iestatījumi"
|
||||
11
po/mai.po
Normal file
11
po/mai.po
Normal file
@@ -0,0 +1,11 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: mai\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "सिस्टम मानीटर"
|
||||
11
po/mg.po
Normal file
11
po/mg.po
Normal file
@@ -0,0 +1,11 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: mg\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Mpanara-maso ny rafitra"
|
||||
14
po/mjw.po
Normal file
14
po/mjw.po
Normal file
@@ -0,0 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: mjw\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "System Monitor"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Files"
|
||||
14
po/mk.po
Normal file
14
po/mk.po
Normal file
@@ -0,0 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: mk\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Надгледувач на системот"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Датотеки"
|
||||
17
po/ml.po
Normal file
17
po/ml.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: ml\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "സിസ്റ്റം നിരീക്ഷകന്"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "ഫയലുകള്"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "സജ്ജീകരണങ്ങള്"
|
||||
11
po/mn.po
Normal file
11
po/mn.po
Normal file
@@ -0,0 +1,11 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: mn\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Системийн монитор"
|
||||
17
po/mr.po
Normal file
17
po/mr.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: mr\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "प्रणाली मॉनिटर"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "फाइल्स्"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "सेटिंग्ज"
|
||||
17
po/ms.po
Normal file
17
po/ms.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: ms\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Pemantau Sistem"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Fail"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Tetapan"
|
||||
17
po/nb.po
Normal file
17
po/nb.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: nb\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Systemmonitor"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Filer"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Innstillinger"
|
||||
11
po/nds.po
Normal file
11
po/nds.po
Normal file
@@ -0,0 +1,11 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: nds\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Sysmonitor"
|
||||
17
po/ne.po
Normal file
17
po/ne.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: ne\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "प्रणाली निगरानी"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "फाइलहरू"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "सेटिङ"
|
||||
17
po/nl.po
Normal file
17
po/nl.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: nl\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Systeemmonitor"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Bestanden"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Instellingen"
|
||||
14
po/nn.po
Normal file
14
po/nn.po
Normal file
@@ -0,0 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: nn\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Systemovervakar"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Filer"
|
||||
17
po/oc.po
Normal file
17
po/oc.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: oc\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Monitor sistèma"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Fichièrs"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Paramètres"
|
||||
17
po/or.po
Normal file
17
po/or.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: or\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "ତନ୍ତ୍ର ପ୍ରଦର୍ଶିକା"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "ଫାଇଲଗୁଡିକ"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "ସେଟିଙ୍ଗଗୁଡିକ"
|
||||
17
po/pa.po
Normal file
17
po/pa.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: pa\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "ਸਿਸਟਮ ਨਿਗਰਾਨ"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "ਫਾਇਲਾਂ"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "ਸੈਟਿੰਗ"
|
||||
11
po/ps.po
Normal file
11
po/ps.po
Normal file
@@ -0,0 +1,11 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: ps\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "غونډال ليدانی"
|
||||
17
po/pt.po
Normal file
17
po/pt.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: pt\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Monitor de sistema"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Ficheiros"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Definições"
|
||||
475
po/pt_BR.po
Normal file
475
po/pt_BR.po
Normal file
@@ -0,0 +1,475 @@
|
||||
# Dash to panel.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# F<>bio Nogueira <fnogueira@gnome.org>, 2017
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-04-16 22:54-0300\n"
|
||||
"PO-Revision-Date: 2017-09-15 11:03-0300\n"
|
||||
"Last-Translator: Fábio Nogueira <fnogueira@gnome.org>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.0.3\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: appIcons.js:918
|
||||
msgid "Show Details"
|
||||
msgstr "Exibir detalhes"
|
||||
|
||||
#: appIcons.js:937
|
||||
msgid "New Window"
|
||||
msgstr "Nova janela"
|
||||
|
||||
#: appIcons.js:937 appIcons.js:998 appIcons.js:1000 Settings.ui.h:8
|
||||
msgid "Quit"
|
||||
msgstr "Sair"
|
||||
|
||||
#: appIcons.js:1000
|
||||
msgid "Windows"
|
||||
msgstr "Janelas"
|
||||
|
||||
#: appIcons.js:1159
|
||||
msgid "Taskbar Settings"
|
||||
msgstr "Configurações da barra de tarefas"
|
||||
|
||||
#: appIcons.js:1166
|
||||
msgid "Restore Windows"
|
||||
msgstr "Restaurar janelas"
|
||||
|
||||
#: appIcons.js:1166
|
||||
msgid "Show Desktop"
|
||||
msgstr "Exibir área de trabalho"
|
||||
|
||||
#: prefs.js:266
|
||||
msgid "Running Indicator Options"
|
||||
msgstr "Opções do indicador de execução"
|
||||
|
||||
#: prefs.js:273 prefs.js:433 prefs.js:498 prefs.js:566 prefs.js:608
|
||||
msgid "Reset to defaults"
|
||||
msgstr "Restaurar o padrão"
|
||||
|
||||
#: prefs.js:426
|
||||
msgid "Customize middle-click behavior"
|
||||
msgstr "Personalizar o comportamento do clique-do-meio"
|
||||
|
||||
#: prefs.js:491
|
||||
msgid "Advanced hotkeys options"
|
||||
msgstr "Opções avançadas das teclas de atalho"
|
||||
|
||||
#: prefs.js:559
|
||||
msgid "Secondary Menu Options"
|
||||
msgstr "Opções do menu secundário"
|
||||
|
||||
#: prefs.js:601 Settings.ui.h:85
|
||||
msgid "Advanced Options"
|
||||
msgstr "Opções avançadas"
|
||||
|
||||
#: Settings.ui.h:1
|
||||
msgid ""
|
||||
"When set to minimize, double clicking minimizes all the windows of the "
|
||||
"application."
|
||||
msgstr ""
|
||||
"Quando definido para minimizar, clicando duas vezes minimiza todas as "
|
||||
"janelas da aplicação."
|
||||
|
||||
#: Settings.ui.h:2
|
||||
msgid "Shift+Click action"
|
||||
msgstr "Ação do Shift+clique"
|
||||
|
||||
#: Settings.ui.h:3
|
||||
msgid "Raise window"
|
||||
msgstr "Elevar a janela"
|
||||
|
||||
#: Settings.ui.h:4
|
||||
msgid "Minimize window"
|
||||
msgstr "Minimizar a janela"
|
||||
|
||||
#: Settings.ui.h:5
|
||||
msgid "Launch new instance"
|
||||
msgstr "Carregar nova instância"
|
||||
|
||||
#: Settings.ui.h:6
|
||||
msgid "Cycle through windows"
|
||||
msgstr "Percorrer as janelas"
|
||||
|
||||
#: Settings.ui.h:7
|
||||
msgid "Cycle windows + minimize"
|
||||
msgstr "Percorrer as janelas + minimizar"
|
||||
|
||||
#: Settings.ui.h:9
|
||||
msgid "Behavior for Middle-Click."
|
||||
msgstr "Comportamento do clique-do-meio."
|
||||
|
||||
#: Settings.ui.h:10
|
||||
msgid "Middle-Click action"
|
||||
msgstr "Ação do clique-do-meio"
|
||||
|
||||
#: Settings.ui.h:11
|
||||
msgid "Behavior for Shift+Middle-Click."
|
||||
msgstr "Comportamento para o Shift+Clique-do-meio."
|
||||
|
||||
#: Settings.ui.h:12
|
||||
msgid "Shift+Middle-Click action"
|
||||
msgstr "Ação do Shift+Clique-do-meio"
|
||||
|
||||
#: Settings.ui.h:13
|
||||
msgid "Integrate <i>AppMenu</i> items"
|
||||
msgstr "Itens integrados ao <i>Menu de aplicativos</i>"
|
||||
|
||||
#: Settings.ui.h:14
|
||||
msgid "<i>Show Details</i> menu item"
|
||||
msgstr "Item do menu <i>Exibir detalhes</i>"
|
||||
|
||||
#: Settings.ui.h:15
|
||||
msgid "Highlight focused application"
|
||||
msgstr "Destaque para o aplicativo em foco"
|
||||
|
||||
#: Settings.ui.h:16
|
||||
msgid "Height (px)"
|
||||
msgstr "Altura (px)"
|
||||
|
||||
#: Settings.ui.h:17
|
||||
msgid "0"
|
||||
msgstr "0"
|
||||
|
||||
#: Settings.ui.h:18
|
||||
msgid "Color - Override Theme"
|
||||
msgstr "Cor - Tema de sobreposição"
|
||||
|
||||
#: Settings.ui.h:19
|
||||
msgid "1 window open"
|
||||
msgstr "1 janela aberta"
|
||||
|
||||
#: Settings.ui.h:20
|
||||
msgid "Apply to all"
|
||||
msgstr "Aplicar para tudo"
|
||||
|
||||
#: Settings.ui.h:21
|
||||
msgid "2 windows open"
|
||||
msgstr "2 janelas abertas"
|
||||
|
||||
#: Settings.ui.h:22
|
||||
msgid "3 windows open"
|
||||
msgstr "3 janelas abertas"
|
||||
|
||||
#: Settings.ui.h:23
|
||||
msgid "4+ windows open"
|
||||
msgstr "4 ou + janelas abertas"
|
||||
|
||||
#: Settings.ui.h:24
|
||||
msgid "Use different for unfocused"
|
||||
msgstr "Utilizar uma diferente para o que não está focado"
|
||||
|
||||
#: Settings.ui.h:25
|
||||
msgid "Preview timeout on icon leave (ms)"
|
||||
msgstr "Tempo limite de pré-visualização sobre o ícone sair (ms)"
|
||||
|
||||
#: Settings.ui.h:26
|
||||
msgid ""
|
||||
"If set too low, the window preview of running applications may seem to close "
|
||||
"too quickly when trying to enter the popup. If set too high, the preview may "
|
||||
"linger too long when moving to an adjacent icon."
|
||||
msgstr ""
|
||||
"Se definido como muito baixo, a pré-visualização da janela de aplicativos em "
|
||||
"execução pode fechar muito rapidamente ao tentar inserir o pop-up. Se "
|
||||
"definido como muito alto, a visualização pode demorar muito tempo ao mover-"
|
||||
"se para um ícone adjacente."
|
||||
|
||||
#: Settings.ui.h:27
|
||||
msgid "Super"
|
||||
msgstr "Super"
|
||||
|
||||
#: Settings.ui.h:28
|
||||
msgid "Super + Alt"
|
||||
msgstr "Super + Alt"
|
||||
|
||||
#: Settings.ui.h:29
|
||||
msgid "Hotkeys prefix"
|
||||
msgstr "Prefixo das teclas de atalho"
|
||||
|
||||
#: Settings.ui.h:30
|
||||
msgid "Hotkeys will either be Super+Number or Super+Alt+Num"
|
||||
msgstr "As teclas de atalho serão Super+Número ou Super+Alt+Número"
|
||||
|
||||
#: Settings.ui.h:31
|
||||
msgid "Number overlay"
|
||||
msgstr "Sobreposição de número"
|
||||
|
||||
#: Settings.ui.h:32
|
||||
msgid ""
|
||||
"Temporarily show the application numbers over the icons when using the "
|
||||
"hotkeys."
|
||||
msgstr ""
|
||||
"Exibe temporariamente os números das aplicações sobre os ícones ao usar as "
|
||||
"teclas de atalho."
|
||||
|
||||
#: Settings.ui.h:33
|
||||
msgid "Hide timeout (ms)"
|
||||
msgstr "Ocultar tempo limite (ms)"
|
||||
|
||||
#: Settings.ui.h:34
|
||||
msgid "Shortcut to show the overlay for 2 seconds"
|
||||
msgstr "Atalho para exibir a sobreposição por 2 segundos"
|
||||
|
||||
#: Settings.ui.h:35
|
||||
msgid "Syntax: <Shift>, <Ctrl>, <Alt>, <Super>"
|
||||
msgstr "Sintaxe: <Shift>, <Ctrl>, <Alt>, <Super>"
|
||||
|
||||
#: Settings.ui.h:36
|
||||
msgid "Panel screen position"
|
||||
msgstr "Posição da tela do painel"
|
||||
|
||||
#: Settings.ui.h:37
|
||||
msgid "Bottom"
|
||||
msgstr "Embaixo"
|
||||
|
||||
#: Settings.ui.h:38
|
||||
msgid "Top"
|
||||
msgstr "Topo"
|
||||
|
||||
#: Settings.ui.h:39
|
||||
msgid ""
|
||||
"Panel Size\n"
|
||||
"(default is 48)"
|
||||
msgstr ""
|
||||
"Tamanho do painel\n"
|
||||
"(O padrão é 48)"
|
||||
|
||||
#: Settings.ui.h:41
|
||||
msgid ""
|
||||
"App Icon Margin\n"
|
||||
"(default is 8)"
|
||||
msgstr ""
|
||||
"Margem do ícone do Aplicativo\n"
|
||||
"(O padrão é 8)"
|
||||
|
||||
#: Settings.ui.h:43
|
||||
msgid "Running indicator position"
|
||||
msgstr "Posição do indicador de execução"
|
||||
|
||||
#: Settings.ui.h:44
|
||||
msgid "Running indicator style (Focused app)"
|
||||
msgstr "Estilo do indicador de execução (Aplicativo em foco)"
|
||||
|
||||
#: Settings.ui.h:45
|
||||
msgid "Dots"
|
||||
msgstr "Pontos"
|
||||
|
||||
#: Settings.ui.h:46
|
||||
msgid "Squares"
|
||||
msgstr "Quadrados"
|
||||
|
||||
#: Settings.ui.h:47
|
||||
msgid "Dashes"
|
||||
msgstr "Traços"
|
||||
|
||||
#: Settings.ui.h:48
|
||||
msgid "Segmented"
|
||||
msgstr "Segmentado"
|
||||
|
||||
#: Settings.ui.h:49
|
||||
msgid "Solid"
|
||||
msgstr "Sólido"
|
||||
|
||||
#: Settings.ui.h:50
|
||||
msgid "Ciliora"
|
||||
msgstr "Ciliora"
|
||||
|
||||
#: Settings.ui.h:51
|
||||
msgid "Metro"
|
||||
msgstr "Metro"
|
||||
|
||||
#: Settings.ui.h:52
|
||||
msgid "Running indicator style (Unfocused apps)"
|
||||
msgstr "Estilo do indicador de execução (Aplicativos fora de foco)"
|
||||
|
||||
#: Settings.ui.h:53
|
||||
msgid "Clock location"
|
||||
msgstr "Local do relógio"
|
||||
|
||||
#: Settings.ui.h:54
|
||||
msgid "Natural"
|
||||
msgstr "Natural"
|
||||
|
||||
#: Settings.ui.h:55
|
||||
msgid "Left of status menu"
|
||||
msgstr "Esquerda do menu de status"
|
||||
|
||||
#: Settings.ui.h:56
|
||||
msgid "Right of status menu"
|
||||
msgstr "Direita do menu de status"
|
||||
|
||||
#: Settings.ui.h:57
|
||||
msgid "Position and Style"
|
||||
msgstr "Posição e Estilo"
|
||||
|
||||
#: Settings.ui.h:58
|
||||
msgid "Show <i>Applications</i> icon"
|
||||
msgstr "Mostrar ícone <i>Aplicativos</i>"
|
||||
|
||||
#: Settings.ui.h:59
|
||||
msgid "Animate <i>Show Applications</i>."
|
||||
msgstr "<i>Mostrar aplicativos</i> animado."
|
||||
|
||||
#: Settings.ui.h:60
|
||||
msgid "Show <i>Activities</i> button"
|
||||
msgstr "Mostrar botão <i>Atividades</i>"
|
||||
|
||||
#: Settings.ui.h:61
|
||||
msgid "Show <i>Desktop</i> button"
|
||||
msgstr "Mostrar botão <i>Área de trabalho</i>"
|
||||
|
||||
#: Settings.ui.h:62
|
||||
msgid "Show <i>AppMenu</i> button"
|
||||
msgstr "Mostrar botão <i>Menu de aplicativos</i>"
|
||||
|
||||
#: Settings.ui.h:63
|
||||
msgid "Top Bar > Show App Menu must be enabled in Tweak Tool"
|
||||
msgstr ""
|
||||
"Barra superior > Mostrar o Menu do aplicativos deve ser ativado na "
|
||||
"Ferramenta de ajustes do GNOME"
|
||||
|
||||
#: Settings.ui.h:64
|
||||
msgid "Show window previews on hover"
|
||||
msgstr "Mostrar pré-visulização da janela ao pairar"
|
||||
|
||||
#: Settings.ui.h:65
|
||||
msgid "Time (ms) before showing (100 is default)"
|
||||
msgstr "Tempo (ms) antes de exibir (100 é o padrão)"
|
||||
|
||||
#: Settings.ui.h:66
|
||||
msgid "Isolate Workspaces"
|
||||
msgstr "Isolar Espaços de trabalho"
|
||||
|
||||
#: Settings.ui.h:67
|
||||
msgid "Behaviour when clicking on the icon of a running application."
|
||||
msgstr "Comportamento ao clicar sobre o ícone de um aplicativo em execução."
|
||||
|
||||
#: Settings.ui.h:68
|
||||
msgid "Click action"
|
||||
msgstr "Ação do clique"
|
||||
|
||||
#: Settings.ui.h:69
|
||||
msgid ""
|
||||
"Enable Super+(0-9) as shortcuts to activate apps. It can also be used "
|
||||
"together with Shift and Ctrl."
|
||||
msgstr ""
|
||||
"Habilita o Super+(0-9) como atalho para os aplicativos. Isto pode ser usado "
|
||||
"junto com Shift e Ctrl."
|
||||
|
||||
#: Settings.ui.h:70
|
||||
msgid "Use hotkeys to activate apps"
|
||||
msgstr "Utilizar teclas de atalho para ativar os aplicativos"
|
||||
|
||||
#: Settings.ui.h:71
|
||||
msgid "Behavior"
|
||||
msgstr "Comportamento"
|
||||
|
||||
#: Settings.ui.h:72
|
||||
msgid ""
|
||||
"Tray Font Size\n"
|
||||
"(0 = theme default)"
|
||||
msgstr ""
|
||||
"Tamanho da fonte da bandeja\n"
|
||||
"(0 = padrão do tema)"
|
||||
|
||||
#: Settings.ui.h:74
|
||||
msgid ""
|
||||
"LeftBox Font Size\n"
|
||||
"(0 = theme default)"
|
||||
msgstr ""
|
||||
"Tamanho da fonte da caixa da esquerda\n"
|
||||
"(0 = padrão do tema)"
|
||||
|
||||
#: Settings.ui.h:76
|
||||
msgid ""
|
||||
"Tray Item Padding\n"
|
||||
"(-1 = theme default)"
|
||||
msgstr ""
|
||||
"Preenchimento do ítem da bandeja\n"
|
||||
"(-1 = padrão do tema)"
|
||||
|
||||
#: Settings.ui.h:78
|
||||
msgid ""
|
||||
"Status Icon Padding\n"
|
||||
"(-1 = theme default)"
|
||||
msgstr ""
|
||||
"Preenchimento do ícone de status\n"
|
||||
"(-1 = padrão do tema)"
|
||||
|
||||
#: Settings.ui.h:80
|
||||
msgid ""
|
||||
"LeftBox Padding\n"
|
||||
"(-1 = theme default)"
|
||||
msgstr ""
|
||||
"Preenchimento da caixa da esquerda\n"
|
||||
"(-1 = padrão do tema)"
|
||||
|
||||
#: Settings.ui.h:82
|
||||
msgid "Animate switching applications"
|
||||
msgstr "Animar alternações dos aplicativos"
|
||||
|
||||
#: Settings.ui.h:83
|
||||
msgid "Animate launching new windows"
|
||||
msgstr "Carregamento animado de novas janelas"
|
||||
|
||||
#: Settings.ui.h:84
|
||||
msgid "App icon secondary (right-click) menu"
|
||||
msgstr "Ícone do aplicativo do menu secundário (clique-direito)"
|
||||
|
||||
#: Settings.ui.h:86
|
||||
msgid "Fine-Tune"
|
||||
msgstr "Sintonia fina"
|
||||
|
||||
#: Settings.ui.h:87
|
||||
msgid "version: "
|
||||
msgstr "versão: "
|
||||
|
||||
#: Settings.ui.h:88
|
||||
msgid "Github"
|
||||
msgstr "Github"
|
||||
|
||||
#: Settings.ui.h:89
|
||||
msgid ""
|
||||
"<span size=\"small\">This program comes with ABSOLUTELY NO WARRANTY.\n"
|
||||
"See the <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
|
||||
"\">GNU General Public License, version 2 or later</a> for details.</span>"
|
||||
msgstr ""
|
||||
"<span size=\"small\">Este programa vem com ABSOLUTAMENTE NENHUMA GARANTIA.\n"
|
||||
"Veja a <a href=\"https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
|
||||
"\">Licença Pública Geral GNU, versão 2 ou posterior</a> para maiores "
|
||||
"detalhes.</span>"
|
||||
|
||||
#: Settings.ui.h:91
|
||||
msgid "About"
|
||||
msgstr "Sobre"
|
||||
|
||||
#~ msgid "Panel Size"
|
||||
#~ msgstr "Tamanho do painel"
|
||||
|
||||
#~ msgid "Appearance"
|
||||
#~ msgstr "Aparência"
|
||||
|
||||
msgid "Weekday"
|
||||
msgstr "Dia de semana"
|
||||
|
||||
msgid "Date"
|
||||
msgstr "Data"
|
||||
|
||||
msgid "Seconds"
|
||||
msgstr "Segundos"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Monitor do sistema"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Arquivos"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Configurações"
|
||||
17
po/ro.po
Normal file
17
po/ro.po
Normal file
@@ -0,0 +1,17 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: ro\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "Monitor de sistem"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "Fișiere"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Configurări"
|
||||
14
po/si.po
Normal file
14
po/si.po
Normal file
@@ -0,0 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"Project-Id-Version: Zorin OS\n"
|
||||
"Language: si\n"
|
||||
|
||||
msgid "System Monitor"
|
||||
msgstr "පද්ධති නිරීක්ෂකය"
|
||||
|
||||
msgid "Files"
|
||||
msgstr "ගොනු"
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user