Fixed notification badge sizing on 200% scaled displays

This commit is contained in:
Artyom Zorin
2021-07-21 13:26:56 +01:00
parent 86707f38f2
commit 2b37318010
128 changed files with 36429 additions and 1754 deletions

7
.gitignore vendored Normal file
View File

@@ -0,0 +1,7 @@
.~
*~
gschemas.compiled
zorin-taskbar@zorinos.com*.zip
*.mo
po/zorin-taskbar.pot
Settings.ui.h

96
Makefile Normal file
View 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

View File

@@ -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

File diff suppressed because it is too large Load Diff

1736
appIcons.js Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -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
View 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
View 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
View 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
View 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
View 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
View File

@@ -0,0 +1 @@
3.0 (native)

View File

@@ -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);
}

View 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
View 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
View 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
View 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);
}));
}
});

1446
panel.js Normal file

File diff suppressed because it is too large Load Diff

927
panelManager.js Executable file
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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"

1311
po/cs.po Normal file

File diff suppressed because it is too large Load Diff

11
po/cy.po Normal file
View 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
View 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"

1297
po/de.po Normal file

File diff suppressed because it is too large Load Diff

11
po/dz.po Normal file
View 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
View 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
View 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"

1343
po/es.po Normal file

File diff suppressed because it is too large Load Diff

17
po/et.po Normal file
View 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
View 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
View 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
View 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"

1426
po/fr.po Normal file

File diff suppressed because it is too large Load Diff

17
po/fur.po Normal file
View 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
View 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
View 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"

1312
po/gl.po Normal file

File diff suppressed because it is too large Load Diff

17
po/gu.po Normal file
View 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
View 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
View 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
View 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"

1305
po/hu.po Normal file

File diff suppressed because it is too large Load Diff

17
po/id.po Normal file
View 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
View 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"

1433
po/it.po Normal file

File diff suppressed because it is too large Load Diff

1455
po/ja.po Normal file

File diff suppressed because it is too large Load Diff

11
po/ka.po Normal file
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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 "ਸੈਟਿੰਗ"

1321
po/pl.po Normal file

File diff suppressed because it is too large Load Diff

11
po/ps.po Normal file
View 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
View 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
View 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
View 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"

1419
po/ru.po Normal file

File diff suppressed because it is too large Load Diff

14
po/si.po Normal file
View 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