Compare commits

...

626 Commits

Author SHA1 Message Date
Florian Müllner 14c60eb954 Bump version to 43.alpha
Update NEWS.
2022-07-10 14:36:37 +02:00
Florian Müllner 0234cd74f7 Update sass submodule 2022-07-10 14:36:37 +02:00
Florian Müllner f637e81c8c native-window-placement: Minor style fix
JSDoc prefer "object" over "Object", so update the doc comment
accordingly.
2022-07-10 14:20:25 +02:00
Marco Ciampa ea82830a9f Update it.po, corrected the file-manager name File. 2022-07-06 12:51:16 +00:00
Florian Müllner 8b62c38e20 Bump version to 42.3
Update NEWS.
2022-07-02 18:41:28 +02:00
Florian Müllner 4667b4704d window-list: Open menu on long press
Right-click isn't available on touch, so implement long-press as
an alternative.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/146

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/233>
2022-06-20 14:45:58 +02:00
Florian Müllner fe60614b41 window-list: Fix primary button action on touch
If a click event was triggered via touch rather than a pointer
device, the button parameter is 0 rather than a mouse button
number.

Account for that to make sure that touch events are not misinterpreted
as right clicks.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/146

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/233>
2022-06-20 14:45:58 +02:00
Florian Müllner 1e833f542f screenshot-window-sizer: Delay size popup
We use the actual frame size for the popup rather than the target
size. That means (on wayland), we have to wait for the size to
actually change.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/232>
2022-06-09 19:20:44 +02:00
Florian Müllner faabfa11c2 screenshot-window-sizer: Remove superfluous check
We already filter out sizes that don't fit the screen when
building the scaledSizes array, no need to check again.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/232>
2022-06-09 19:06:24 +02:00
Florian Müllner 959782835d Bump version to 42.2
Update NEWS.
2022-05-28 14:30:58 +02:00
Jason Lynch 412762ae9d window-list: Set visibility based on the target monitor.
Currently, the visibility of the window list on a given monitor is set
according to the fullscreen status of the primary monitor. When a
fullscreen application is on a secondary monitor (but not on the primary
monitor), entering and exiting the overview will lead to the window list
incorrectly being visible on the monitor with the fullscreen
application.

Instead, determine the visibility based on the fullscreen status of the
monitor being evaluated.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/400

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/230>
2022-05-19 18:31:33 -07:00
Florian Müllner 6e4f4126b6 native-window-placement: Adjust to 42 changes
gnome-shell's new screenshot UI reuses the overview's window
picker layout, but its window previews don't give access to
the underlying MetaWindow.

Adjust to that by using the boundingBox property instead, which
is all we really need from the window anyway.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/399

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/229>
2022-05-19 19:08:59 +02:00
Cheng-Chia Tseng 5dc212d1e5 Update Chinese (Taiwan) translation 2022-05-11 16:02:45 +00:00
Florian Müllner a02c9b6589 Bump version to 42.1
Update NEWS.
2022-05-06 13:35:32 +02:00
Florian Müllner 18e18f240f Update sass submodule 2022-05-06 13:30:26 +02:00
Zurab Kargareteli 96bdc7c74a Add Georgian translation 2022-04-23 16:59:34 +00:00
Ngọc Quân Trần 812b96a571 Update Vietnamese translation 2022-04-03 07:51:00 +00:00
Florian Müllner a51145f9db window-list: Fix cleaning up signal on removal
The map uses windows as key, so trying to remove the handler ID
will leave stray windows/signals.

Spotted by Ron Yorston.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/225>
2022-03-29 17:06:40 +02:00
Nathan Follens 36fc042e27 Update Dutch translation 2022-03-25 11:44:09 +00:00
Rūdolfs Mazurs 54f39318ba Update Latvian translation 2022-03-24 20:15:56 +00:00
Florian Müllner cbd5c2438d classic: Drop unnecessary calendar styling
It is already fully covered by the light variant.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/222>
2022-03-24 00:08:09 +00:00
Florian Müllner 29e032d89c classic: Drop unused toggle-switch style/assets
gnome-shell dropped the separate us/intl handling back in 2019.
That includes adding the corresponding style classes, so the
style and assets are completely unused now.

Nobody noticed because gnome-shell itself includes assets for
a light variant, so we can simply drop the unused stuff.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/222>
2022-03-24 00:08:09 +00:00
Florian Müllner 72a9696249 build: Remove unused stylesheets
The only reason for installing empty stylesheets is minimizing
build system differences between extensions. That's not a very
good reason and we don't do this for other optional files like
schemas.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/223>
2022-03-24 00:53:13 +01:00
Milo Casagrande 9ca89cdf63 Update Italian translation 2022-03-17 08:34:22 +00:00
Florian Müllner 227c900d1c Bump version to 42.0
Update NEWS.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/220>
2022-03-12 23:57:47 +01:00
Baurzhan Muftakhidinov 49b304f3b7 Update Kazakh translation 2022-03-12 17:57:43 +00:00
sicklylife ac77f0b879 Update Japanese translation 2022-03-12 10:42:11 +00:00
Марко Костић 54e02b1925 Update Serbian translation 2022-03-11 06:11:09 +00:00
Balázs Úr 1489e42c46 Update Hungarian translation 2022-03-11 00:39:00 +00:00
Philipp Kiemle 684004bd89 Update German translation 2022-03-10 23:34:18 +00:00
Florian Müllner 80e68be9fa Bump version to 42.rc
Update NEWS.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/219>
2022-03-07 16:04:51 +01:00
Florian Müllner 06af10e0d3 Update sass submodule
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/219>
2022-03-07 16:03:40 +01:00
Changwoo Ryu 95b8aa38cb Update Korean translation 2022-03-03 12:45:28 +00:00
Charles Monzat b010bff5d9 Update French translation 2022-03-03 07:53:48 +00:00
Alan Mortensen a8b73861a6 Updated Danish translation 2022-02-28 18:46:32 +01:00
Luna Jernberg bd002fa96d Update Swedish translation 2022-02-28 15:17:45 +00:00
Jiri Grönroos 5712dd05d9 Update Finnish translation 2022-02-27 16:54:51 +00:00
Piotr Drąg 694b0552c2 Update Polish translation 2022-02-26 15:17:47 +01:00
Dušan Kazik d9f5726d45 Update Slovak translation 2022-02-25 07:14:55 +00:00
Florian Müllner 3c5a56b440 auto-move: Bind list to model
Using a model gives us a clear separation between data and representation,
as well as between regular rows and the "new item" row at the end.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/218>
2022-02-18 13:09:35 +01:00
Florian Müllner 725cf83551 auto-move-windows: Change 'update' action to 'rename'
Limiting the action to the row that changed instead of the list as
a whole makes it easier to only update the changed value and not
recreate the entire list.

This doesn't make a difference right now, because we carefully sync
the list to reuse existing rows, but we are about to back the list
with a GListModel instead of updating it manually.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/218>
2022-02-18 13:08:09 +01:00
Florian Müllner f91275ffd2 workspace-indicator: Bind list to model
Using a model gives us a clear separation between data and representation,
as well as between regular rows and the "new item" row at the end.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/218>
2022-02-18 13:02:17 +01:00
Florian Müllner f0e46f4b12 workspace-indicator: Change 'update' action to 'rename'
Limiting the action to the row that changed instead of the list as
a whole makes it easier to only update the changed value and not
recreate the entire list.

This doesn't make a difference right now, because we carefully sync
the list to reuse existing rows, but we are about to back the list
with a GListModel instead of updating it manually.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/218>
2022-02-18 12:55:57 +01:00
Florian Müllner 57f7f21ecb workspace-indicator: Bind name to action target
Since we now have an override for bind_properties_full(), we can
use that instead of an explicit notify handler.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/218>
2022-02-18 12:42:07 +01:00
Florian Müllner 9f673f27ef cleanup: Use static class blocks for gtype registration
gjs enabled support for static class blocks, which gives us a
less error-prone and more readable alternative to _classInit(),
provided we make sure to call registerClass() first.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/215>
2022-02-18 03:34:06 +00:00
Florian Müllner 08db193b31 cleanup: Use regular constructors in GObject subclasses
As a side-effect of supporting class fields, regular constructors
now work in GObject subclasses. Using _init() still works and
there's no functional difference, but it's simply much nicer
to use the same syntax for all classes.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/215>
2022-02-18 03:34:06 +00:00
Florian Müllner 0be8b10995 cleanup: Simplify action handling
GTK4 has dedicated API for widget-specific actions, make use of that
instead of explicitly managing an action group.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/215>
2022-02-18 03:34:06 +00:00
Florian Müllner b35df9062c lint: Sync with gjs
This is needed for eslint to recognize static class blocks.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/215>
2022-02-18 03:34:06 +00:00
Florian Müllner f6f34c6341 ci: Replace js78 job
Provided we use the correct version of the SpiderMonkey shell, we
can perform checks using the same engine that is used by gjs.

However some engine features are opt-in, so the set of features enabled
by gjs and js91 may differ. The obvious option for avoiding this is
replacing js91 with gjs for tests.

Switch to the newly added gjs-check-syntax script, which does precisely
that.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/215>
2022-02-18 03:34:06 +00:00
Florian Müllner 22e4ca8925 ci: Bump gnome-shell image
We are about to make use of new language features, so update to an
image that has the necessary tooling.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/215>
2022-02-18 03:34:06 +00:00
Marek Černocký 4fd2be744e Updated Czech translation 2022-02-16 10:00:12 +01:00
Florian Müllner 31e48437ec classic: Update list of sass sources 2022-02-14 23:49:00 +01:00
Florian Müllner 78f1bb3cc9 Update sass submodule 2022-02-14 23:48:12 +01:00
Florian Müllner 14cdb5fa16 Bump version to 42.beta
Update NEWS.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/216>
2022-02-14 23:18:46 +01:00
Emin Tufan Çetin 533cd07cfd Update Turkish translation 2022-02-13 22:42:10 +00:00
Alexander Shopov 7232118978 Update Bulgarian translation 2022-02-13 10:41:54 +00:00
Naala Nanba 7a1286ec1c Update Abkhazian translation 2022-02-12 20:25:06 +00:00
Naala Nanba a51a52268e Update Abkhazian translation 2022-02-12 19:40:52 +00:00
Naala Nanba 6db43f9603 Add Abkhazian translation 2022-02-12 19:36:35 +00:00
Florian Müllner f7b5836c75 auto-move-windows: Use custom spin button in prefs
Gtk.SpinButton doesn't look great in lists, so replace it with a
small custom widget based on current mockups from the design team.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/213>
2022-02-12 02:05:50 +00:00
Florian Müllner ffb2b27477 auto-move-windows: Use libadwaita's row widgets
We get to remove a bunch of boring code, and get something better
looking and more standardized in return.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/213>
2022-02-12 02:05:50 +00:00
Florian Müllner dd3c524c49 prefs: Replace 'content' list style
It's deprecated in favor of 'boxed-list'.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/213>
2022-02-12 02:05:50 +00:00
Florian Müllner b92973df00 cleanup: Simplify promisify() calls
If the finish function isn't specified, promisify will now try
to use the async name without '_async'/'_begin' suffix (if any)
and '_finish' appended.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/214>
2022-02-11 16:22:38 +01:00
Florian Müllner 0b7e8f9720 user-theme: Stop using Gio._LocalFilePrototype
Now that promisify() works on interfaces, we don't need this
cludge anymore.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/214>
2022-02-11 16:22:38 +01:00
Florian Müllner f6342d3b52 cleanup: Replace Promise wrappers
gjs now supports overriding interface methods, which means that
promisify started to work on interfaces.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/214>
2022-02-11 16:22:38 +01:00
Florian Müllner 013b3fb73c apps-menu: Adapt to Clutter.Grab changes
Device grabs are gone, switch to the new API.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/212>
2022-02-10 00:28:04 +01:00
Florian Müllner 69527857f8 window-list: Adapt to Clutter.Grab changes
pushModal() now returns a grab object that has to be passed to
popModal() to release the grab.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/212>
2022-02-10 00:12:22 +01:00
Florian Müllner e0128a7817 window-list: Use libadwaita for preferences
libadwaita has now become stable and will be part of the GNOME 42
platform. Time to embrace it and get fancier preferences with
less code.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/209>
2022-02-08 19:22:41 +00:00
Florian Müllner 62628b25c6 auto-move-windows: Use libadwaita for preferences
libadwaita has now become stable and will be part of the GNOME 42
platform. Time to embrace it and get fancier preferences with
less code.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/209>
2022-02-08 19:22:41 +00:00
Florian Müllner 3f89b57c96 workspace-indicator: Use libadwaita for preferences
libadwaita has now become stable and will be part of the GNOME 42
platform. Time to embrace it and get fancier preferences with
less code.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/209>
2022-02-08 19:22:41 +00:00
Florian Müllner 01537b401f user-theme: Use libadwaita for preferences
libadwaita has now become stable and will be part of the GNOME 42
platform. Time to embrace it and get fancier preferences with
less code.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/209>
2022-02-08 19:22:41 +00:00
Matej Urbančič 30e846274c Update Slovenian translation 2022-01-26 21:03:10 +00:00
Florian Müllner d340922fea window-list: Track window-created/unmanaged
Shell's WindowTracker switched to those signals instead of tracking
windows through MetaWorkspace's window-added/removed signals.

As ::window-created is only emitted after a window has been added to
its workspace, looking up its app on ::window-added now fails because
the window isn't tracked yet.

Address this by switching to the same signals for window tracking
(which is simpler anyway).

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/372

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/207>
2022-01-26 12:33:35 +00:00
Florian Müllner 8dd8d6f561 workspace-indicator: Fix cancelling editing with Esc
The CallbackAction's callback must return true to stop the event
from propagating to the dialog, where it will trigger the close
binding.

It makes sense to still allow closing the dialog with Escape while
not editing a row. The easiest way to achieve that is by moving the
controller to the entry.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/208>
2022-01-26 10:55:59 +00:00
Jan Beich cdaa837d48 meson: Drop unused argument for i18n.merge_file()
Ignored in Meson < 0.60.0, deprecated since 0.60.1 and fatal since 0.61.0.

data/meson.build:23:0: ERROR: Function does not take positional arguments.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/210>
2022-01-25 11:52:56 +00:00
Boyuan Yang 7576b5c602 Update Chinese (China) translation 2022-01-13 20:28:37 +00:00
Florian Müllner fac3d8b8c4 Bump version to 42.alpha
Update NEWS.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/206>
2022-01-10 22:40:29 +01:00
Rafael Fontenelle cecf778381 Update Brazilian Portuguese translation 2022-01-07 22:59:34 +00:00
Kukuh Syafaat 0663a989f4 Update Indonesian translation 2022-01-05 03:24:29 +00:00
Asier Sarasua Garmendia 7b2d9d0b73 Update Basque translation 2021-12-25 14:00:09 +00:00
Aurimas Černius f220e11bce Updated Lithuanian translation 2021-12-14 13:49:10 +02:00
Aleksandr Melman af4165d3e5 Update Russian translation 2021-12-13 11:27:53 +00:00
Sveinn í Felli c82ca68c03 Update Icelandic translation 2021-12-13 09:08:27 +00:00
Florian Müllner 02e5029eb6 window-list: Fix OSK
The reveal animation moved from Main.layoutManager.keyboardBox to
the keyboard itself, so instead of applying an additional translation
for the bottom panel, we override the translation that would reveal
the keyboard (and thus prevent it from showing altogether).

Fix this by moving our translation to the keyboardBox instead.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/199>
2021-11-26 20:01:40 +01:00
Daniel Mustieles d98153ba9e Updated Spanish translation 2021-11-26 18:05:13 +01:00
Fran Dieguez 4d913adcec Update Galician translation 2021-11-19 22:22:52 +00:00
MohammadSaleh Kamyab 5729d0b84a Update Persian translation 2021-11-18 22:40:00 +00:00
Sebastian Keller 4a26cecd7d native-window-placement: Remove custom styling
The window-picker padding was causing it to become smaller in the
overview resulting in a jump when opening it and caused sizing issues
with the workspace view in the app picker. However it is not needed
anymore with the new overview, so this can be fixed by simply removing
it.

The horizontal- and vertical-spacing properties got replaced with a
spacing property a while ago. However this is only used in
WorkspaceLayout::_createBestLayout() which gets overridden by this
extension which does not use it. So they can simply be removed.

The shell-caption-spacing property got removed when the window captions
got changed to always use the full length and has not been doing
anything since.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/301
Fixes: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/309
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/189>
2021-11-17 12:37:28 +00:00
Jordi Mas i Hernandez e5a3fa4cfa Update Catalan translation 2021-11-15 07:57:14 +00:00
Goran Vidović 6268e82f35 Update Croatian translation 2021-11-12 11:25:34 +00:00
Yaron Shahrabani 348a5777d3 Update Hebrew translation 2021-11-11 22:54:01 +00:00
Hugo Carvalho 594af0c412 Update Portuguese translation 2021-11-07 22:32:42 +00:00
Quentin PAGÈS d6a81150b6 Update Occitan translation 2021-11-07 19:54:26 +00:00
Fabio Tomat 38b3413e94 Update Friulian translation 2021-11-07 16:51:51 +00:00
Just Perfection 762ec75601 user-theme: Extensions review guidelines compatibility
Extensions review guidelines enforces extensions to
don't create objects in the constructor of the class
that init() returns. so creating settings object in enable()
can make the extension compatible with the ego review guidelines.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/197>
2021-11-06 21:58:59 +00:00
Yuri Chornoivan 6da9a39959 Update Ukrainian translation 2021-11-06 16:35:25 +00:00
Piotr Drąg 2938a1a312 Update POTFILES.in
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/198>
2021-11-06 15:02:17 +01:00
Neal Gompa eb517c8517 classic: Install the session for Wayland and ship override sessions
The regular GNOME session ships with three options:

* GNOME
* GNOME on Wayland (available when GDM starts in X11)
* GNOME on Xorg (available when GDM starts in Wayland)

The main GNOME session is set up so it works to match how GDM starts,
so GNOME is on Wayland if GDM is (or GNOME is on X11 if GDM is).

For GNOME Classic, we are missing this setup, so port this behavior
over from the GNOME session setup.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/195>
2021-10-29 10:00:02 -04:00
Neal Gompa a79d2afb2d classic: Add X-GNOME-SessionRegisters
GDM has supported sessions registering with it for a few years now so
it can know when to shut down the greeter. Having the GNOME Classic
session declare that it will register itself allows GDM to avoid
executing a fallback codepath.

This has been supported with the regular GNOME session for a while,
and this session was likely forgotten about when it was added there.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/195>
2021-10-29 09:58:38 -04:00
Sveinn í Felli 396f4ef566 Update Icelandic translation 2021-09-29 10:18:03 +00:00
Goran Vidović c26b4803c3 Update Croatian translation 2021-09-23 14:38:14 +00:00
Florian Müllner 4ccf12e988 Bump version to 41.0
Update NEWS.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/192>
2021-09-19 12:47:07 +02:00
Florian Müllner 74121fce78 Bump version to 41.rc.1
Update NEWS.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/191>
2021-09-06 01:40:31 +02:00
Florian Müllner 0a7491d747 build: Bump meson requirement
Passing arguments to dist scripts was only introduced after 0.44,
so bump the requirement to shut up the corresponding warning.

Meson 0.53 is the same version requirement as gnome-shell, so that
shouldn't be an issue for distributors.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/191>
2021-09-06 01:40:11 +02:00
Florian Müllner 68bf3e7ff7 ci: Fix classic build
The option name used in CI was wrong, so we did not actually build
the auxiliary classic mode file.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/190>
2021-09-06 00:41:04 +02:00
Florian Müllner 93dd8f535d ci: Init submodule
As the gnome-shell-sass submodule isn't included under subprojects,
meson doesn't handle it automatically.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/190>
2021-09-06 00:39:50 +02:00
Florian Müllner 0b993525f5 build: Check sassc errors when generating stylesheet
We currently just call sassc, but don't check its return value. That
means as long as sassc is available, the script (and therefore the
newly added dist CI job) will succeed.

Make sure we fail on failure.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/190>
2021-09-06 00:33:08 +02:00
Florian Müllner 5dfdb68c75 Bump version to 41.rc
Update NEWS.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/188>
2021-09-05 02:02:52 +02:00
Florian Müllner 443d1dc42b ci: Add dist job
So far, releases are done locally by invoking `meson dist`.

We can do better and leverage the existing CI infrastructure, to get
to the following release workflow:

 - bump version in meson.build, update NEWS etc.
 - open merge request for the release
 - merge when the pipeline (including dist check) succeeds
 - tag the release
 - wait for the tag pipeline to spit out the tarball artifact

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/186>
2021-09-04 05:10:23 +02:00
Florian Müllner 34f6c9514a ci: Add a fedora build job
We currently use a setup modelled after the flatpak CI workflow,
where we produce extension bundles and expose them as artifacts
for easy testing.

It still makes sense to test a regular build though, in particular
as that can include classic mode support.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/186>
2021-09-04 05:10:23 +02:00
Florian Müllner 2f2619403a ci: Build custom image
The gnome-shell image we are using is well-suited for the jobs we
are running, but the lack of sassc means that we don't cover classic
mode.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/186>
2021-09-04 05:10:23 +02:00
Florian Müllner d25cc847f3 ci: Reindent yaml configuration
The file currently uses a mix of 4 and 2 space indentation (with the
occasional 1 space thrown in). It looks like most GNOME projects have
settled on 2-space indentation, so use that.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/186>
2021-09-04 05:10:23 +02:00
Florian Müllner 769ad859e6 build: Check NEWS for version
I don't think this ever happened to me, but it can't hurt enforcing
that every release has a corresponding NEWS entry.

(The script has been copied from Polari, thus the metainfo support)

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/186>
2021-09-04 05:10:23 +02:00
Florian Müllner 7ba0e5b42c apps-menu: Stop using panel-main-menu shortcut
It's an old GNOME 2 shortcut that's no longer worth supporting in
the regular session. Instead, set up a new shortcut backed by our
own schema.

https://discourse.gnome.org/t/difference-between-show-the-overview-and-show-the-activities-overview-keyboard-shortcuts/6572

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/173>
2021-08-31 23:42:23 +02:00
Florian Müllner 201339345d window-list: Only show at the end of the overview transition
gnome-shell now considers the work area in the overview, so popping
up at the beginning of the overview transition is now more jarring
than at the end.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/185>
2021-08-26 23:36:53 +02:00
Florian Müllner 6ee4205f1e window-list: Fix initial visibility
Mutter uses an undefined initial in-fullscreen state, so it will
always emit the `in-fullscreen-changed` signal when it determines
the actual initial state.

This didn't use to be an issue when the shell started in the session,
but now results in the window list ending up visible in the overview
on startup.

Work around this by hiding ourselves again when the in-fullscreen
state changes in the overview.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/185>
2021-08-26 23:28:44 +02:00
Florian Müllner 2307e2cabe Bump version to 41.beta
Update NEWS.
2021-08-18 01:50:19 +02:00
Florian Müllner 4becaa28ce Update sass submodule 2021-08-18 01:50:19 +02:00
Florian Müllner cc45bd63ab cleanup: Use new gettext() convenience
gnome-shell now includes convenience helpers for gettext functions that
use an extension's text domain (as initialized by initTranslations()).

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/183>
2021-08-14 23:15:56 +02:00
Florian Müllner 757bcee4e2 build: Use backend-agnostic meson commands for export
There's no alternative backend in sight for us, but it's nice to
only deal with a single build tool.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/182>
2021-08-13 05:25:47 +02:00
Florian Müllner 1340b209f9 window-list: Simplify radio handling
Instead of handling the active state manually and updating settings
on changes, we can use GActions to leave the nitty-gritty to GTK.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/181>
2021-08-13 05:22:41 +02:00
Florian Müllner 8f362d57fe lint: Synchronize configuration with gjs
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/180>
2021-08-13 04:57:35 +02:00
Florian Müllner d0b9c9b54a cleanup: Document functions
gjs now enforces this in its eslint configuration. Adding type
information generally is a good idea, so add appropriate comments
to public functions before picking up that configuration change.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/180>
2021-08-13 04:48:22 +02:00
Florian Müllner 6284b0c489 window-list: Move functions into base class
The helper functions date back to a time when AppButton and WindowButton
were unconnected classes. But nowadays they share a common base class, so
we have a better place for them than external helper functions.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/180>
2021-08-13 04:39:00 +02:00
Florian Müllner 8a211f98fd build: Rewrite gettext domain when exporting zips
Now that every extension picks up its gettext domain from
its metadata, we can easily change it when exporting the
zips.

That ensures that every extension only binds its own domain
instead of messing up other extension's translations.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/335

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/179>
2021-08-11 19:05:45 +02:00
Florian Müllner d6633397b7 build: Remove unused variable
https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/335

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/179>
2021-08-11 19:05:45 +02:00
Florian Müllner 0d06cc685e extensions: Pick up gettext domain from metadata
Since commit a6ee142f21, the extension archives that are uploaded
to extensions.gnome.org only contain strings that are relevant for
the extension, not all translations from all extensions.

Unfortunately all extensions still share a common gettext domain,
so the extension with the last bind_textdomain() call wins and
leaves the others without translations.

We'll address this by using distinct domains when not installed
system-wide. That becomes easier if there is a canonical place
for the text domain, with the existing metadata key being the
natural choice.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/335

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/179>
2021-08-11 18:42:43 +02:00
Marco Trevisan (Treviño) 8de89a44a4 README: Fix typo on instructions to move to main branch 2021-07-21 19:50:34 +02:00
Florian Müllner f3b1f10f6c ci: Set FDO_UPSTREAM_REPO
ci-fairy uses the variable to set the upstream remote that is used
to build the commit range to check.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/178>
2021-07-19 17:23:44 +02:00
Florian Müllner 2bced47762 classic: Remove padding from app menu
It is now inconsistent with other top bar items, so drop it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/167>
2021-07-18 21:57:38 +00:00
Florian Müllner 7ba9b87064 docs: Add README section for default branch
We are about to change it, so briefly outline how to update local
checkouts.

(Copied from glib)

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/177>
2021-07-14 21:11:59 +02:00
Florian Müllner a642c439ce docs: Use HEAD in external URLs
That way the link will keep working when the other project changes
its default branch name.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/177>
2021-07-14 20:37:15 +02:00
Florian Müllner d421bbfa60 drive-menu: Hide items initially
Now that the check for network mounts is non-blocking, the initial
sync doesn't take effect immediately. We don't want hidden items
to briefly flash the indicator, so create them initially hidden.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/176>
2021-07-13 11:54:21 +02:00
Florian Müllner 3539ce1139 drive-menu: Fix indicator visibility
Commit 519269be9d made the check for network mounts non-blocking, and
we now update the indicator's visibility before a newly-added network
mount is hidden.

Address this by monitoring the item itself for visibility changes.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/176>
2021-07-13 11:46:16 +02:00
Florian Müllner 94b907f46d window-list: Init translations
Whoops, we are missing the bindtextdomain() call, which means translations
won't work when no other extension that shares the same domain is used
(like in GNOME Classic for instance).

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/340

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/174>
2021-07-12 16:04:50 +00:00
Alexander Shopov 1e04622eb4 Update Bulgarian translation 2021-07-11 08:21:24 +00:00
Florian Müllner 519269be9d drive-menu: Avoid blocking I/O when querying filesystem
The last commit improved the heuristics for detecting network mounts,
but at the price of potentially blocking the shell. Avoid that drawback
by making the code in question async.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/53

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/27>
2021-06-23 18:15:42 +02:00
Florian Müllner 7d6670ce3c drive-menu: Don't assume mounts without volume are local
The intention of the code is to only expose actually plugged in
devices rather than network mounts, but the existing heuristics are
based on GVolume and simply assume a local mount where there's no
associated volume. Fill that gap by querying the ::remote filesystem
attribute in that case.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/53

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/27>
2021-06-23 17:52:19 +02:00
Juliano de Souza Camargo 50bd597baa Update Portuguese translation
(cherry picked from commit 12eedcf6f7)
2021-06-07 10:22:07 +00:00
Hugo Carvalho 4403b54fbc Update Portuguese translation
(cherry picked from commit 08d382facc)
2021-06-02 16:10:00 +00:00
Adam Goode d6648b0b5c window-list: Don't use panel-button class for the workspace indicator
The panel-button introduces some horizontal padding which is insensitive
to scroll events. Without this change, there is a small dead zone in the
corner that cannot be used to switch workspaces with the mouse wheel.

For useMenu mode, this has the effect of removing all of the horizontal
space to the edge of the screen, so I add some back with the
status-label-bin margin.

This a is similar change to 8bad8a3b63.

Fixes #315.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/171>
2021-05-26 11:57:41 +00:00
Florian Müllner 861e5c0be6 build: Only use major version in shell-versions
The website changed its version handling again, and now takes "40.0"
to mean "40.0, and only 40.0".

Not complaining though, as "40" is more correct in my opinion anyway ...

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/172>
2021-05-25 15:45:21 +02:00
Florian Müllner bf86b84d6c Post-release version bump 2021-05-14 17:01:12 +02:00
Florian Müllner 605dd02217 Tag release 40.1
Update NEWS.
2021-05-13 16:51:52 +02:00
Florian Müllner b33a62f2dc Update sass submodule 2021-05-13 16:50:34 +02:00
Quentin PAGÈS 8a320eb0a1 Update Occitan translation 2021-05-10 20:04:48 +00:00
Pawan Chitrakar 83c4ced407 Update Nepali translation 2021-05-01 05:49:03 +00:00
Florian Müllner e094dead91 windowsNavigator: Adjust to gnome-shell change
Parts of WindowPreview were moved to C for performance reasons, which
turned a formerly private JS property into a GObject property.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/302

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/170>
2021-04-08 16:38:40 +02:00
Carmen Bianca BAKKER 6cdf86b6b3 Update Esperanto translation 2021-04-07 12:05:20 +00:00
Florian Müllner 3e8bbb07ea classic: Disable welcome dialog
The Tour focuses on new overview features, which aren't relevant
for gnome-classic where the overview is disabled altogether.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4026

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/169>
2021-04-05 20:32:19 +02:00
Anders Jonsson e3ddd8e7d0 Update Swedish translation 2021-03-27 20:14:29 +00:00
Ngọc Quân Trần aa67982129 Update Vietnamese translation 2021-03-27 07:54:17 +00:00
Florian Müllner 8aa645ae5d build: Adjust shell-version
With the new version scheme, only the major version is relevant as
far as gnome-shell is concerned. However the extension website does
not handle that at the moment, so always append a ".0".
2021-03-20 13:39:25 +01:00
Florian Müllner 20540cb843 Post-release version bump 2021-03-20 13:39:25 +01:00
Florian Müllner d338930d69 Tag release 40.0
Update NEWS.
2021-03-20 13:10:47 +01:00
Jiri Grönroos 35c1763792 Update Finnish translation 2021-03-16 10:15:46 +00:00
Florian Müllner 7a87bdcb1b Post-release version bump 2021-03-16 00:00:31 +01:00
Florian Müllner 50b6bd1884 Tag release 40.rc
Update NEWS.
2021-03-15 16:32:30 +01:00
Florian Müllner db853d9023 Update sass submodule 2021-03-15 16:29:55 +01:00
Florian Müllner 5be44705f7 window-list: Improve preview styling
The current styling doesn't indicate the active workspace very well, and
makes it difficult to differentiate empty workspaces from workspaces with
maximized windows.

Tweak the styling to address those issues.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/283

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/166>
2021-03-11 12:08:38 +00:00
Florian Müllner fdfa46099b workspace-indicator: Improve preview styling
The current styling doesn't indicate the active workspace very well, and
makes it difficult to differentiate empty workspaces from workspaces with
maximized windows.

Tweak the styling to address those issues.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/283

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/166>
2021-03-11 12:08:38 +00:00
Florian Müllner f987e5f13d workspace-indicator: Reindent stylesheet
For some reason the CSS here uses a different indentation than
gnome-shell or the other extensions, fix that.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/283

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/166>
2021-03-11 12:08:38 +00:00
Florian Müllner c766230118 window-list: Only show previews for up to six workspaces
On request of GNOME Classic users, we add GNOME2-like workspace previews
when using a horizontal workspace layout. The previews scale a lot worse
than the menu though, with the risk that they take up all the available
width in extreme cases.

Address this by also taking the number of workspaces into account, and
switch to the menu when we have more than six.

This is particularly important now that we switched to a horizontal
layout by default.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/165>
2021-03-10 20:11:18 +01:00
Florian Müllner bb2b1204b4 workspace-indicator: Only show previews for up to six workspaces
On request of GNOME Classic users, we add GNOME2-like workspace previews
when using a horizontal workspace layout. The previews scale a lot worse
than the menu though, with the risk that they take up all the available
width in extreme cases.

Address this by also taking the number of workspaces into account, and
switch to the menu when we have more than six.

This is particularly important now that we switched to a horizontal
layout by default.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/165>
2021-03-10 20:11:18 +01:00
Florian Müllner cf3690a434 windowsNavigator: Adjust to gnome-shell changes
Unsurprisingly, the big overview changes in gnome-shell broke the
extension. Make the necessary adjustments to get it working again:
 - changed constructor parameters for Workspace/WorkspacesView
 - overall state handling done by adjustment
 - window preview layout changes

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/296

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/163>
2021-03-10 15:28:37 +00:00
Florian Müllner 7062acf10f native-window-placement: Adjust to gnome-shell changes
More unsurprising breakage:
 - the workspace layout/strategy relation has been cleaned up
 - window previews now include an icon that influences the
   title position
 - window previews scale up on hover, which again influences
   the title position

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/164>
2021-03-10 15:26:26 +00:00
Fran Dieguez 7ace9c4d51 Update Galician translation 2021-02-24 21:14:57 +00:00
Florian Müllner 23887ce2a3 Post-release version bump 2021-02-24 01:57:00 +01:00
Florian Müllner e8b8677bfe Tag release 40.beta
Update NEWS.
2021-02-24 01:50:31 +01:00
Florian Müllner 3603bc7c6a Update sass submodule 2021-02-24 01:50:31 +01:00
Florian Müllner 1e44941db6 drive-menu: Remove unused style class
The .single-indicator class was added to add extra spacing to
lone top bar items when removing the arrows, but dropped again
after solving the extra spacing differently.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/161>
2021-02-24 00:45:58 +00:00
Florian Müllner f71da9e843 window-list: Replace WorkspaceBackground as well
The shell now scales down the backgrounds and adds a rounded corner
clip. Undo both those changes with another override.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/160>
2021-02-24 01:24:11 +01:00
Florian Müllner 1b4a20a8af window-list: Replace Workspace prototype
This is arguably more elegant than injecting into individual methods, and
will be consistent with an upcoming override that cannot be implemented
as method injection.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/160>
2021-02-24 01:24:11 +01:00
Florian Müllner d8e179ed09 window-list: Adjust to OSK changes
Visibility changes are now handled internally, without an easy way
for us to hook into. We can resort to a hack though, as the gesture
action to bring up the keyboard is only enabled while the keyboard
is hidden.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/160>
2021-02-24 01:24:11 +01:00
A S Alam 8016cf7ae9 Update Punjabi translation 2021-02-14 00:58:36 +00:00
Аляксей 7774426eb9 Update Belarusian translation 2021-02-12 16:18:20 +00:00
Florian Müllner 9fa522c29a window-list: Adjust to overview changes
The overview code changed significantly, including the bits we re-use
to implement the window picker in the classic session. Adjust to those
changes to unbreak the extension.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/159>
2021-02-12 02:20:20 +01:00
Florian Müllner b92295ad2c Update sass submodule
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/159>
2021-02-12 02:20:20 +01:00
Florian Müllner d7c8a5d193 extensions: Remove horizontal-workspaces extension
Workspaces are now horizontal by default, so we don't need to change
the layout for classic mode anymore.

That was the only reason why the extension was added, so it has now
outlived its usefulness.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/158>
2021-01-29 16:09:59 +00:00
Michael Lawton 0d8d6dceb0 places-menu: Mark mounts that can be unmounted as removable
While the eject() code falls back to unmount() for mounts that
don't support ejecting, it's not possible to actually do so
because we hide the eject button.

Fix this by treating all mounts as removable that can either be
ejected or unmounted.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/161

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/152>
2021-01-28 12:25:26 +01:00
Daniel van Vugt 8a5e793b3d auto-move-windows: Don't move windows already on all workspaces
This fixes a particular case of mutter#992.

Although gnome-shell will also be softened to not crash in future, it's
also a good idea for the extension to explicitly decide how it wants to
handle windows that are already on all workspaces.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/157>
2021-01-28 16:33:50 +08:00
Florian Müllner 8fcbed6481 classic: Remove arrow-override
No need to hide what is no longer there.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3567

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/156>
2021-01-26 17:00:24 +01:00
Florian Müllner ac2ed286e1 extensions: Remove arrows from top bar menus
... following the corresponding gnome-shell change.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3567

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/156>
2021-01-26 16:59:43 +01:00
Florian Müllner 3c3c1f702d window-list: Add tooltips to workspace thumbnails
When showing previews instead of the menu, the workspace names
don't appear anywhere. Some users care strongly about those, so
expose them as tooltip on hover.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/155>
2021-01-20 23:58:13 +01:00
Florian Müllner c33be29f56 workspace-indicator: Add tooltips to workspace thumbnails
When showing previews instead of the menu, the workspace names from
our preferences don't appear anywhere. Some users care strongly about
those, so expose them as tooltip on hover.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/155>
2021-01-20 23:58:13 +01:00
Florian Müllner d8ae2dcba2 window-list: Drop height override
gnome-shell's top bar got taller, and is now just 1px smaller than
our size override. We don't need that additional pixel to fit our
UI, so remove the override to make the sizes of both bars consistent.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/271

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/154>
2021-01-18 22:43:52 +01:00
Florian Müllner 3b14c0a04e Post-release version bump 2021-01-14 19:04:45 +01:00
Florian Müllner 0e3d6465eb Tag release 40.alpha.1
Update NEWS.
2021-01-14 19:02:07 +01:00
Florian Müllner d381a0b89b auto-move-windows: Use Gtk.Button.icon_name property
Image buttons are a very common pattern, so GTK4 added some
convenience API we can use to construct them.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/148>
2021-01-14 14:40:55 +01:00
Florian Müllner 5df0fa145b workspace-indicator: Use Gtk.Button.icon_name property
Image buttons are a very common pattern, so GTK4 added some
convenience API we can use to construct them.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/148>
2021-01-14 14:40:55 +01:00
Florian Müllner f0ff0e1400 workspace-indicator: Stop using header func for separators
GTK4 added built-in support for this common pattern, so use that
instead.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/148>
2021-01-14 14:40:55 +01:00
Florian Müllner 53f5a92dc8 user-theme: Stop using header func for separators
GTK4 provides built-in support for this common pattern, so use
that instead.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/148>
2021-01-14 14:40:55 +01:00
Florian Müllner d5c31273ee auto-move-windows: Stop using header func for separators
GTK4 added built-in support for this common pattern, so use that
instead.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/148>
2021-01-14 14:40:55 +01:00
Florian Müllner 22ea58a849 workspace-indicator: Port to GTK4
With this port, all extensions now use GTK4 for their preferences.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/148>
2021-01-14 14:40:55 +01:00
Florian Müllner 67d96993ce auto-move-windows: Port to GTK4
Just like the previous ports, this consists mostly of
replacing the old Gtk.Container methods.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/148>
2021-01-14 14:40:55 +01:00
Florian Müllner 96dd4f9835 window-list: Port to GTK4
Another easy port:
 - replace Gtk.Container methods
 - stop using show_all()
 - Gtk.CheckButton now provides the
   Gtk.RadioButton functionality as well

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/148>
2021-01-14 14:40:55 +01:00
Florian Müllner 3bef6be7c1 user-theme: Port to GTK4
With the previous preparations in place, the actual GTK4 port is
now trivial:
 - replace Gtk.Container methods with widget-specific methods
 - stop using show_all()

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/148>
2021-01-14 14:40:55 +01:00
Florian Müllner b83d38a72e user-theme: Track GSettings to sync checkmark
GTK4 removes the generic GtkWidget API for accessing an inserted
action group, so we need an alternative for tracking the currently
selected theme.

Using the underlying GSettings object looks like the easiest option,
so do that.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/148>
2021-01-14 14:40:54 +01:00
Florian Müllner 5b73960f34 extensions: Stop using :margin shortcut
The property has been removed in GTK4, so prepare for a port by
setting the four individual margin properties instead.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/148>
2021-01-14 14:40:54 +01:00
Jonas Dreßler 505a7f4ac9 classic: Fixup panel styling after gnome-shell changes
We don't want a transparent panel in the classic session (this is
already taken care of by the existing panel background-color overrides),
and we want to avoid the new pill-shaped hover/focus indicators in the
classic session.

For the gnome-shell changes, see
https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1397.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/153>
2021-01-14 00:25:47 +01:00
Florian Müllner e8acfb2b51 Update sass submodule
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/153>
2021-01-14 00:25:47 +01:00
Florian Müllner dcd5dc4c7f ci: Add back commit-rules file
Somehow git-mv ended up as git-rm without me noticing, whoops.
2021-01-11 14:17:04 +01:00
Florian Müllner 2702cdf889 ci: Update ci-fairy image
The default rules file name has changed from commitrules.yml to
commit-rules.yml, adjust to that change.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/151>
2021-01-11 14:03:44 +01:00
Florian Müllner 669e7c32a2 classic: Pre-generate stylesheet
We follow the rule of not putting generated files under version
control, but that means drawing in additional build-time dependencies.
We can reduce those when building from a released tarball by
generating the stylesheets at dist time though, so do that.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/150>
2020-12-29 00:27:07 +01:00
Florian Müllner 294eb0feb5 data: Update list of theme dependencies
The scss sources were split up in gnome-shell last cycle, catch
up with that change.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/150>
2020-12-29 00:16:16 +01:00
Florian Müllner a7ddbd0d53 Change upcoming version (again)
The extension website doesn't handle the chosen scheme correctly,
so use 40.alpha.1 instead.
2020-12-25 23:29:06 +01:00
Florian Müllner c745dd6362 build: Change upcoming version to 40.alpha2
I messed up and released 40.alpha at the same time as 3.38.2, when it's
supposed to be in January. In order to re-align with the schedule, change
the upcoming version to 40.alpha2 so we don't have to skip a release and
will be back on track in time of 40.beta.
2020-12-22 01:33:44 +01:00
Florian Müllner a4cf9f956e ci: Add some more commit message rules
Now that we have the ability to easily define custom rules, add some
more to enforce the existing commit message style.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/149>
2020-12-18 19:26:50 +01:00
Florian Müllner 02aa68b24a ci: Replace custom commit-log script with ci-fairy
ci-fairy now supports checking commit messages for required/disallowed
patterns. Use that to replace our custom commit-log script.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/149>
2020-12-18 19:26:42 +01:00
Florian Müllner 4e731e1dce Post-release version bump 2020-12-02 20:40:19 +01:00
Florian Müllner eee341e907 Tag release 40.alpha
Update NEWS.
2020-12-02 20:33:56 +01:00
Florian Müllner aad96bb1c4 Update sass submodule 2020-12-02 20:33:56 +01:00
Florian Müllner 50d3ee5703 workspace-indicator: Use overlap to determine preview visibility
In order to better reflect the actual workspace, show any preview
that is at least partially located on the monitor, not only those
that have the major part on that monitor.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/142>
2020-12-02 19:27:44 +01:00
Florian Müllner 08dfb78815 window-list: Use overlap to determine preview visibility
In order to better reflect the actual workspace, show any preview
that is at least partially located on the monitor, not only those
that have the major part on that monitor.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/142>
2020-12-02 19:22:51 +01:00
Florian Müllner 6949a5d075 workspace-indicator: Account for monitor offset in window previews
Windows' frame rects are in screen coordinates, while the workspace
thumbnails are based on the monitor work area. Unless we account
for the difference, previews end up mispositioned in multi-monitor
setups.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/142>
2020-12-02 19:22:12 +01:00
Florian Müllner 893d3b0473 window-list: Account for monitor offset in window previews
Windows' frame rects are in screen coordinates, while the workspace
thumbnails are based on the monitor work area. Unless we account
for the difference, previews end up mispositioned in multi-monitor
setups.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/142>
2020-12-02 19:20:08 +01:00
Florian Müllner f5128e13f2 workspace-indicator: Round calculated preview sizes
While not strictly necessary, there's no reason to differ from the
copy in the window-list extension ...

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/142>
2020-12-02 19:17:36 +01:00
Ray Strode 8318ea919f window-list: Stop monitoring drag operation if window list is destroyed
If a user is in the middle of a drag in the window list and the
window list associated with the drag gets destroyed, the drag
monitor gets leaked.

Later when the drag motion is processed, spew goes to the log:

clutter_actor_contains: assertion 'CLUTTER_IS_ACTOR (self)' failed

Examples of triggers for this bug:

- The monitor topology changes
- The screen gets locked during the drag

This commit fixes the spew and the leak by ensuring any pending
drag monitoring is disabled when the window lists are destroyed.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/145>
2020-11-25 17:48:21 +00:00
Florian Müllner bde20e78f0 ci: Bump ci-fairy template include
This fixes the check-merge-request job when MR branch and target branch are
on the same repo.

See
https://gitlab.freedesktop.org/freedesktop/ci-templates/-/merge_requests/66

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/146>
2020-11-24 16:28:40 +01:00
Jordan Petridis 02db9525e7 ci: Replace only/except with rules
only/except keywords where deperecated in favor of rules.

Since we started using GNOME/gnome-shell!1492 it introduced
a second pipeline being run for each commit.

Detached pipelines are the only way to access CI_MERGE_REQUEST_*
variables, and if we disable normal pipelines you will need to
create wip/spam MRs in order to run the tests.

This reworked rules makes it so, the normal pipeline needs manual
interaction to be started, and the detached/MR pipleines is always
run.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/144>
2020-11-21 01:14:39 +01:00
Jordan Petridis 8d4586bd57 ci: Set some sensible defaults
* Allow for all jobs to be cancelled if a newer commit is pushed
* Automatically retry jobs if they fail due to some infrastructure issue

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/144>
2020-11-21 01:14:39 +01:00
Jonas Ådahl 8872659621 ci: Check that merge requests have the right settings
This will catch the missing "allow write access for maintainers" check
box being checked.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/144>
2020-11-21 01:14:39 +01:00
Florian Müllner 46c7677643 ci: Use ci-fairy image for commit log check
This is in line with what mutter/gnome-shell are using, and should
be smaller (read: faster) than the gjs image.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/144>
2020-11-21 01:14:39 +01:00
Jonas Ådahl 4b9f4b1b63 doap: Make marge-bot a maintainer
This is so that the merge button can be restricted to maintainers, thus
decreasing the risk of merging using the merge button.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/141>
2020-11-19 01:32:23 +01:00
Jonas Ådahl b64c93897b ci: Wait for 'check-commit-log' before continuing
The check-commit-log is quick, and to get a result early is helpful as
one can then more quickly check for failures via the report provided via
the JUnit report.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/141>
2020-11-19 01:32:23 +01:00
Jonas Ådahl a7939f18d1 ci/check-commit-log: Generate JUnit report
This means the merge request will see the commit log review issues
causing the pipeline to fail without having to dig through CI log files.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/141>
2020-11-19 01:13:11 +01:00
Jonas Ådahl 15efbc29be ci/check-commit-log: Reverse the merge request URL check
Instead of making sure there is a reference to a bug or merge request,
make sure there isn't. The reason for this is that marge-bot will always
append a merge request URL in the end of the commit message.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/141>
2020-11-19 01:13:11 +01:00
Florian Müllner 6e5466a4ec ci: Explicitly specify job dependencies
We can speed up CI a bit by allowing build jobs to run in parallel
with review jobs.

See https://gitlab.gnome.org/help/ci/yaml/README.md#needs for details.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/141>
2020-11-19 01:12:29 +01:00
Thun Pin 737c897624 window-navigator: Adjust to 3.38 overview changes
gnome-shell's overview code changed significantly in 3.38,
adjust the extension to work without the separate overlay.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/259
2020-11-18 23:54:18 +00:00
Florian Müllner c317a876dd ci: Switch to updated gnome-shell image
gnome-shell now produces a CI image as part of its pipeline. Use that
instead of the old, manually-updated image.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/140
2020-11-19 00:22:01 +01:00
Florian Müllner 72c67aacc4 lint: Sync configuration with gjs
gjs updated its eslint configuration, so sync our copy.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/137
2020-11-14 00:58:52 +01:00
Florian Müllner ba7e3fc0b5 cleanup: Remove empty leading/trailing lines in blocks
gjs added a new rule to its eslint ruleset that forbids "block padding",
so make sure we conform to that rule before syncing up the configuration.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/137
2020-11-14 00:58:52 +01:00
Florian Müllner 61cf679b8c auto-move-windows: Exclude sticky windows from empty-check
We modify gnome-shell's workspace tracker to only remove empty
workspaces from the end. However we currently don't take into
account that sticky windows appear on all workspaces, so those
are preventing any workspace from getting removed at the moment.

Exclude them when determining whether a workspace is empty to
get the expected behavior.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/135
2020-11-13 23:53:49 +00:00
Florian Müllner ba55bacab4 ci: Use junit output format
Gitlab has built-in support for junit reports, so switch eslint's
output to that format.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/136
2020-11-07 01:55:02 +01:00
Jordi Mas 9445bd2205 Update Catalan translation 2020-10-23 21:10:23 +02:00
Florian Müllner 6ed1f45ffd window-list: Use custom layout manager for thumbnails
The current code positions window previews explicitly using a fixed
layout manager. For that it relies on a valid parent allocation,
which is error-prone and frequently results in warnings.

Address this by moving the positioning code into a custom layout
manager, and only update the visibility from the window preview.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/260
2020-10-21 03:09:45 +02:00
Florian Müllner 81be1d2e2f workspace-indicator: Use custom layout manager for thumbnails
The current code positions window previews explicitly using a fixed
layout manager. For that it relies on a valid parent allocation,
which is error-prone and frequently results in warnings.

Address this by moving the positioning code into a custom layout
manager, and only update the visibility from the window preview.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/260
2020-10-21 03:09:40 +02:00
Florian Müllner 52abf74088 window-list: Adjust to overview changes
Window DND in the overview is now based on the metaWindow,
not the window actor (misnamed as "real window").

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/133
2020-10-21 01:05:07 +00:00
Florian Müllner 623bc6dbf3 workspace-indicator: Adjust to overview changes
Window DND in the overview is now based on the metaWindow,
not the window actor (misnamed as "real window").

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/133
2020-10-21 01:05:07 +00:00
Fabio Tomat 04b23ec68f Update Friulian translation 2020-10-17 20:14:41 +00:00
Sergio Costas b65f362f0d window-list: Honor changes in skip-taskbar property
Although window-list checks the 'skip-taskbar' property when a
window is added to the desktop to decide wether it should be
shown in the bar or not, it doesn't honor that when the property
is changed after a window has already been added. Since the new
WaylandClient API allows to change this property for already
mapped windows, supporting this is a good idea.

This patch fixes this.

Fix https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/130
2020-10-08 23:42:21 +02:00
Florian Müllner 7c30f35b12 Bump version to 40.alpha
The GNOME project has adopted a new versioning scheme[0], and
GNOME 3.38 will be followed by GNOME 40.

Open the new development cycle by switching to the new scheme, as
well as to post-release bumps as recommended.

[0] https://discourse.gnome.org/t/new-gnome-versioning-scheme/4235

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/131
2020-10-06 15:07:54 +02:00
Florian Müllner 9e976f06b4 Bump version to 3.38.1
Update NEWS.
2020-10-05 20:43:21 +02:00
Florian Müllner 369801dbeb Update sass submodule 2020-10-05 20:42:16 +02:00
Yosef Or Boczko 2c3c7e8a73 Update Hebrew translation 2020-09-28 19:05:19 +00:00
Stas Solovey bb8f34de83 Update Russian translation 2020-09-22 19:52:00 +00:00
Cheng-Chia Tseng 6c98658fe1 Update Chinese (Taiwan) translation 2020-09-22 15:07:44 +00:00
Yacine Bouklif 3f06c2bc04 Add Kabyle translation 2020-09-19 11:51:36 +00:00
Florian Müllner 9e38b091a9 Bump version to 3.38.0
Update NEWS.
2020-09-14 22:52:43 +02:00
Rūdolfs Mazurs 62d7b883f0 Update Latvian translation 2020-09-12 09:06:28 +00:00
Milo Casagrande e56a9c5681 Update Italian translation 2020-09-10 08:12:04 +00:00
Tim Sabsch 03aa180472 Update German translation 2020-09-09 06:04:41 +00:00
Juliano Camargo bbb0775e1a Update Portuguese translation 2020-09-08 20:08:29 +00:00
Alan Mortensen c41d285131 Updated Danish translation 2020-09-07 19:58:09 +02:00
Balázs Meskó cc63876b7e Update Hungarian translation 2020-09-06 21:06:21 +00:00
Florian Müllner 08769ec0b6 Bump version to 3.37.92
Update NEWS.
2020-09-06 01:06:49 +02:00
Dušan Kazik 5615c21797 Update Slovak translation 2020-09-02 12:02:31 +00:00
Changwoo Ryu 48d2b4c902 Update Korean translation 2020-08-30 07:46:02 +00:00
Marek Černocký a43db7233d Updated Czech translation 2020-08-28 22:21:25 +02:00
Aurimas Černius 25143c92f4 Updated Lithuanian translation 2020-08-26 22:34:38 +03:00
Zander Brown c4ab7e9bbf Update British English translation 2020-08-26 12:25:53 +00:00
Nathan Follens 1d082fc026 Update Dutch translation 2020-08-25 15:38:07 +00:00
Florian Müllner 75919911f5 Bump version to 3.37.91
Update NEWS.
2020-08-24 18:09:27 +02:00
Florian Müllner bf1f129854 Update sass submodule 2020-08-24 18:07:44 +02:00
Goran Vidović 59bcc0a6a7 Update Croatian translation 2020-08-19 22:39:08 +00:00
Goran Vidović 61a54add2e Update Croatian translation 2020-08-19 22:38:38 +00:00
Марко Костић 17d07239c1 Update Serbian translation 2020-08-19 05:21:54 +00:00
Jiri Grönroos bf8a31a6c8 Update Finnish translation 2020-08-16 15:17:57 +00:00
Rafael Fontenelle 1d2fdf5c19 Update Brazilian Portuguese translation 2020-08-16 10:30:03 +00:00
Piotr Drąg f6ada58f5f Update Polish translation 2020-08-15 11:39:47 +02:00
Kukuh Syafaat ebfbc397be Update Indonesian translation 2020-08-13 12:19:05 +00:00
Akarshan Biswas 02290e8bba Update Bengali (India) translation 2020-08-13 04:36:03 +00:00
Fran Dieguez 1537ac39d4 Update Galician translation 2020-08-12 23:02:45 +00:00
Florian Müllner e39c3b4561 Bump version to 3.37.90
Update NEWS.
2020-08-11 17:32:17 +02:00
Florian Müllner 80030687d9 Update sass submodule 2020-08-11 17:30:02 +02:00
Alexandre Franke 3859c09318 Update French translation 2020-08-10 10:50:40 +00:00
Asier Sarasua Garmendia a41cd3c19a Update Basque translation 2020-08-10 07:06:33 +00:00
Anders Jonsson fcbdeba8c5 Update Swedish translation 2020-08-01 23:10:54 +00:00
Piotr Drąg 116f074e3b Update POTFILES.in
https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/128
2020-08-01 14:38:05 +02:00
Florian Müllner 9a78c7e4f4 classic: Drop separate gnome-session definition
Originally the classic session replaced `gnome-shell.desktop` with
`gnome-shell-classic.desktop` (to add the --mode=classic parameter)
and added `nautilus-classic.desktop` (to force on desktop icons).

Neither is the case anymore (and hasn't been for years): Nowadays the
only expected difference is the GNOME_SHELL_SESSION_MODE variable and
the DesktopNames field, which are both set from the session .desktop
file rather than the gnome-session session definition.

Any difference in the latter - like not starting the USBProtection
plugin and missing systemd user session support - are bugs. The
easiest way to avoid those in the future is by removing the obsolete
duplication that enables them, so do just that.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/126
2020-07-31 08:52:51 +00:00
Efstathios Iosifidis 9a2d6d68ff Update Greek translation 2020-07-13 21:42:11 +00:00
Fabio Tomat bc49778100 Update Friulian translation 2020-07-12 16:10:38 +00:00
Florian Müllner 67d2e2f623 Bump version to 3.37.3
Update NEWS.
2020-07-07 18:47:17 +02:00
Florian Müllner eff625fcb8 native-window-placement: Adjust to gnome-shell changes
The extension was affected pretty badly by the window picker overhaul;
adjust to all(?) the major and minor changes to get it to work again.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/124
2020-07-07 17:39:36 +02:00
Florian Müllner 3742f79d4b window-list: Adjust to gnome-shell changes
The window picker saw a significant overhaul. Amazingly the adjustments
necessary are relatively small ...

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/124
2020-07-07 17:31:52 +02:00
Florian Müllner b6a3503f5e window-list: Remove some dead code
Since PanelMenu.Button started to inherit from St.Widget, the custom
_allocate() function isn't called anymore.

Simply changing the function to vfunc_allocate() doesn't work as other
changes happened in the meantime, so for now just remove it altogether.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/124
2020-07-07 17:31:52 +02:00
Baurzhan Muftakhidinov f449ab31c9 Update Kazakh translation 2020-07-02 06:40:14 +00:00
Baurzhan Muftakhidinov 920b925b12 Update Kazakh translation
(cherry picked from commit 9a8b5caca3)
2020-06-25 05:18:54 +00:00
Boyuan Yang ad5e70b03b Update Chinese (China) translation 2020-06-23 21:15:19 +00:00
sicklylife 7beebc11f6 Update Japanese translation 2020-06-10 12:34:10 +00:00
sicklylife 1391acd71f Update Japanese translation 2020-06-10 12:18:25 +00:00
Jordi Mas 761fdf1036 Update Catalan translation 2020-06-06 14:42:37 +02:00
Florian Müllner 7f2c39cdb2 Bump version to 3.37.2
Update NEWS.
2020-06-02 22:16:25 +02:00
Matej Urbančič b5ff860118 Updated Slovenian translation 2020-06-01 22:08:36 +02:00
Florian Müllner aeaba3f379 window-list: Replace removed Clutter.BoxLayout method
The method was deprecated for years and has finally been removed.
Just set appropriate expand/align properties on the children and
add them with the usual add_child() method.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/122
2020-05-28 02:46:06 +02:00
Florian Müllner f96943a4dc window-list: Replace allocation-changed signal
It has been removed in favor of notify::allocation.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/122
2020-05-28 02:46:06 +02:00
Florian Müllner 60ad2e37ff window-list: Stop using obsolete StBin properties
Those properties were deprecated (and made no-ops) last cycle, and
have now been removed altogether.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/122
2020-05-28 02:46:06 +02:00
Florian Müllner 8c53fd9590 workspace-indicator: Stop using obsolete StBin properties
Those properties were deprecated (and made no-ops) last cycle, and
have now been removed altogether.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/122
2020-05-28 02:46:06 +02:00
Daniel Șerbănescu 867ace0b0a Update Romanian translation 2020-05-22 09:14:46 +00:00
Danial Behzadi a74862e745 Update Persian translation 2020-05-12 14:27:33 +00:00
Emin Tufan Çetin c16f9828bd Update Turkish translation 2020-05-05 14:34:53 +00:00
Daniel Mustieles 608a8b1639 Updated Spanish translation 2020-05-04 15:45:54 +02:00
Yuri Chornoivan 7bc9b282a2 Update Ukrainian translation 2020-05-03 19:20:15 +00:00
Florian Müllner 9db7b96f24 window-list: Modernize preference dialog a bit
The current widget uses UI patterns that are reminiscent of GNOME 2.
It doesn't take a lot to make it look more modern: Simply giving the
radio group a distinct background and border allows us to move the
whole UI to the center, making the dialog more balanced and visually
pleasing.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/121
2020-05-03 19:51:24 +02:00
Florian Müllner c87cfc822a auto-move: Overhaul preference dialog
auto-move uses the same outdated UI pattern as workspace-indicator did
until commit 90d3c5c51d, imposing the same problems for a future GTK4
port.

So replace treeview and toolbar with an editable list like we did for
the other extension.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/121
2020-05-03 19:51:24 +02:00
Cheng-Chia Tseng ff94c5a143 Update Chinese (Taiwan) translation 2020-05-02 08:06:58 +00:00
Florian Müllner 81f999f761 Bump version to 3.37.1
Update NEWS.
2020-04-29 21:55:52 +02:00
Florian Müllner 17b5c0400a Update sass submodule 2020-04-29 21:49:53 +02:00
Florian Müllner ac937b9549 user-theme: Make rows non-selectable
A row has to be activated to select a theme, not merely selected.
The selection therefore doesn't do anything, so disable it.
2020-04-29 21:44:13 +02:00
Daniel Mustieles 0c223de045 Updated Spanish translation 2020-04-28 17:47:14 +02:00
Anders Jonsson 564235d44c Update Swedish translation 2020-04-26 18:52:30 +00:00
Yuri Chornoivan 92a2361306 Update Ukrainian translation 2020-04-25 08:07:50 +00:00
Danial Behzadi 9f27654729 Update Persian translation 2020-04-24 20:13:04 +00:00
Dz Chen f4013c7a5c Update Chinese (China) translation 2020-04-18 09:59:29 +00:00
Kristjan SCHMIDT 9e7eff4a3e Update Esperanto translation
(cherry picked from commit c5246b7415)
2020-04-18 09:00:54 +00:00
Florian Müllner 5b2bdd138a user-themes: Support session mode styles
Session mode stylesheets are installed in gnome-shell's theme
directory instead of a subdirectory of the global themes direc-
tory.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/118
2020-04-17 16:33:03 +00:00
Florian Müllner 90d3c5c51d workspace-indicator: Overhaul prefs widget
Inline toolbars are an outdated UI pattern, and both the toolbar widget
and the inline styling have been removed from GTK4. Making sure the
extension doesn't get in the way of a future GTK4 port is a good excuse
for modernizing the UI, so do just that :-)

Replace treeview and toolbar with an editable list as outline in the HIG:
https://developer.gnome.org/hig/stable/lists.html.en

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/120
2020-04-17 17:54:15 +02:00
Milan Crha b00e531626 window-list: Invalid current mode selected in Preferences
It seems that gtk+ resets the active radio whenever a new radio button
is added into the group, thus rather restore the current mode after
the group is fully populated.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/119
2020-04-17 09:37:13 +02:00
Florian Müllner b1c1b01184 po: Update POTFILES.in
The user-themes extension actually never had translatable strings.
2020-04-12 04:41:53 +02:00
Florian Müllner 739b1e11a0 user-themes: Add preference widget
While we don't endorse or support 3rd party theming, the extension
exists and is actively used. However right now the most convenient
way of setting it up is by installing Tweak Tool; give users an
alternative by providing a simple settings dialog ourselves.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/117
2020-04-12 04:13:25 +02:00
Florian Müllner a3541ff0d9 ci: Drop "regular" build job
We already do a meson build/install when exporting extension bundles, and
now that the syntax check is handled by the CI instead of `meson test`,
the job just duplicates work.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/116
2020-04-11 01:08:11 +02:00
Florian Müllner 8fb5476a1c build: Drop syntax-checks from meson test
Those checks are just as well handled by the CI, and removing them
makes for a nice build system cleanup.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/116
2020-04-11 01:08:02 +02:00
Florian Müllner fc8a46f15a ci: Syntax-check js sources
This is currently done as part of `ninja test`, but doing the check
in a separate CI job means it can run in parallel with other review
jobs and fail before trying to build.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/116
2020-04-11 01:07:55 +02:00
Florian Müllner 2e21f7cf72 ci: Combine commit/source checks under 'review'
The current names are an artifact from when flatpak-ci used
review/stop_review jobs. 'review' is a much better name and
matches what gnome-shell itself uses.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/116
2020-04-11 01:07:45 +02:00
Florian Müllner a317d79016 ci: Set a default image
All jobs but one use the same issue, so specify that globally instead
of for each job.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/116
2020-04-11 01:07:37 +02:00
Florian Müllner 4722b89cc3 cleanup: Don't linebreak before closing parentheses
Otherwise recent versions of eslint want "dangling" commas,
which is at least ugly considering that most functions don't
allow adding arguments at leisure.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/116
2020-04-11 01:03:38 +02:00
Florian Müllner 5a4b71ba90 ci: Create and expose extension bundles
Similar to how we let CI create flatpaks for application, create
and expose extension bundles for easier testing.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/114
2020-04-10 23:57:09 +02:00
Florian Müllner a6ee142f21 build: Omit unneeded translations from zip files
Each extension zip we create includes the translations of all extensions,
which is clearly wasteful. Avoid that by generating per-extension .pot
files and filtering out unnecessary translations.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/114
2020-04-10 23:11:43 +02:00
Florian Müllner 35427ed4f1 build: Use gnome-extensions-tool for zipping up
The tool has a dedicated command for creating an extension bundle. It
knows how to handle translations and GSettings schemas, so we don't
have to.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/114
2020-04-10 23:11:43 +02:00
Florian Müllner bce63d3168 places-menu: Emphasize eject buttons here as well
We already align the buttons correctly here, but otherwise they can
use the same treatment as in the drive-menu.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/223
2020-04-10 14:31:40 +00:00
Florian Müllner 0426d1d8d5 drive-menu: Emphasize eject buttons as distinct controls
The buttons currently appear more as an attachment to the label
than as distinct controls. Address that by:

 - applying .button styling
 - increasing spacing between label and button
 - aligning buttons at the end

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/223
2020-04-10 14:31:40 +00:00
Xiaoguang Wang f9aaa732b2 windowPicker: Wrong signal ID _nWorkspacesNotifyId
https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/106
2020-04-10 16:27:41 +02:00
Florian Müllner 7b82c5e12b ci: Update URL check
Gitlab started inserting a /-/ in its URLs, account for that.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/113
2020-04-10 16:19:27 +02:00
Yosef Or Boczko db305687d5 Update Hebrew translation
(cherry picked from commit c477f10bfb)
2020-04-01 15:22:54 +00:00
Florian Müllner f527fe3774 build: Post-release version bump
... and official start of the next development cycle.
2020-03-31 01:03:14 +02:00
Florian Müllner 3428bebb67 Update sass submodule 2020-03-31 00:57:31 +02:00
Daniel Korostil 73822dc5f5 Update Ukrainian translation 2020-03-10 20:46:17 +00:00
Florian Müllner 961757f717 Bump version to 3.36.0
Update NEWS.
2020-03-07 23:07:37 +01:00
Florian Müllner 7d5c985004 build: Switch to js68 for tests
It's what the cool kids use nowadays ...
2020-03-07 23:07:37 +01:00
Florian Müllner cd16995503 Update sass submodule 2020-03-07 23:00:47 +01:00
Florian Müllner 3a3b5bac85 Bump version to 3.35.92 2020-03-01 02:22:25 +01:00
Florian Müllner 9f6b83eece Update sass submodule 2020-03-01 02:22:02 +01:00
Florian Müllner 4456b440d8 Bump version to 3.35.91
Update NEWS.
2020-02-18 00:36:15 +01:00
Florian Müllner f61e2f5f5c Update sass submodule 2020-02-18 00:35:32 +01:00
Zander Brown a8eecac0ff Update British English translation 2020-02-11 19:32:35 +00:00
Florian Müllner 9a6b4da33c Bump version to 3.35.90
Update NEWS.
2020-02-06 21:54:51 +01:00
Florian Müllner cb53d0b85c Update sass submodule 2020-02-06 21:51:09 +01:00
Umarzuki Bin Mochlis Moktar 318b9b18af Update Malay translation 2020-01-27 12:27:08 +00:00
Florian Müllner cdf970d4b6 ci: Fix eslint job
eslint requires a file/directory, and will fail when the parameter
is not specified. Unfortunately it only indicates the failure by
printing its help output, but not via its return value, so our test
still completes successfully.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/105
2020-01-26 23:43:18 +01:00
Florian Müllner 1ee3803265 window-list: Fix typo
Whoops, missed a shift-press there. Another issues that sneaked
in thanks to the broken eslint check.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/105
2020-01-26 23:43:18 +01:00
Florian Müllner b25c4d07a7 style: Avoid unnecessary parentheses
The eslint check in CI is broken, and some style nits weren't caught
as a consequence.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/105
2020-01-26 23:43:18 +01:00
Florian Müllner 330e7b312d windowsNavigator: Adjust to deprecated API removal
The old raise/lower methods have been deprecated for years, and
mutter finally removed those APIs.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/104
2020-01-26 23:30:55 +01:00
Florian Müllner 01f921541f windowsNavigator: Use normal inheritance for non-GObject class
More fallout from commit 63615cb657.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/104
2020-01-26 23:30:55 +01:00
Florian Müllner cc52f4a260 windowsNavigator: Add missing imports
Commit 63615cb657 missed that, which is an easy mistake to make.

But how on earth did CI not catch this?!

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/104
2020-01-26 23:25:38 +01:00
sicklylife eb71474c95 Update Japanese translation 2020-01-20 22:21:08 +00:00
sicklylife 69681cdc9a Update Japanese translation 2020-01-20 22:13:20 +00:00
Florian Müllner c958e2d0fd window-list: Force single-line window titles
While window titles really really shouldn't contain newline characters,
they are under application control and therefore may very well do.
Force the corresponding labels to be single line, to prevent offending
applications from messing up the whole window list layout.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/202
2020-01-17 15:03:54 +01:00
Florian Müllner 9c964eaf1b drive-menu: Stop using deprecated child properties
StBoxLayout's child properties were deprecated in favor of the generic
expand/align properties.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/102
2020-01-09 20:16:39 +01:00
Florian Müllner 0500480d75 window-list: Stop using deprecated child properties
StBoxLayout's child properties were deprecated in favor of the generic
expand/align properties.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/102
2020-01-09 20:15:52 +01:00
Florian Müllner 37a09b7be1 apps-menu: Stop using deprecated (child) properties
StBoxLayout's child properties were deprecated in favor of the generic
expand/align properties.

StBin now uses the same Clutter.Actor properties instead of its own.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/102
2020-01-09 20:13:11 +01:00
Florian Müllner d8c734124d classic: Add new import
The shell SCSS got reorganized, and we are now missing an import in
the classic style. Add it to get back a working classic style.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/101
2020-01-09 19:33:34 +01:00
Florian Müllner 25b6b562d9 windowPicker: Adjust to gnome-shell changes
WorkspacesDisplay now takes an adjustment for the workspace position,
provide that.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/100
2020-01-09 19:25:25 +01:00
Florian Müllner f2315d28f9 Update sass submodule 2020-01-09 18:29:44 +01:00
Florian Müllner 9b93931de6 Bump version to 3.35.3
Update NEWS.
2020-01-05 13:23:09 +01:00
Florian Müllner 47a2fd36e1 Update sass submodule 2020-01-05 13:23:09 +01:00
Fran Dieguez be19802f78 Update Galician translation 2019-12-25 14:29:08 +00:00
Florian Müllner 35746251fd Bump version to 3.35.2
Update NEWS.
2019-12-11 18:59:03 +01:00
Willy Stadnick a2b014ccbf screenshot-window-sizer: Fix cycling through all valid sizes
When cycling through window sizes, we should skip any sizes that are
bigger than the available area. We do that, but the current code
assumes that the possible sizes are sorted, which is no longer the
case since the addition of "phone" sizes in commit 5b43d4733c.

As a result, we may now skip sizes that would fit perfectly fine.
Address this by filtering out invalid sizes beforehand instead of
assuming a certain order (wich no longer work due to the addition
of a portrait format).

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/97
2019-11-26 00:49:08 +01:00
Florian Müllner 95131dc252 workspace-indicator: Exclude DESKTOP windows from window previews
While nautilus removed its desktop support a while ago in favor of an
extension, it's still possible that some external X11 desktop icon app
is used. As DESKTOP windows cannot be moved between workspaces or stacked,
and aren't perceived as regular windows, it doesn't make sense to show
them as previews in the workspace switcher.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/93
2019-11-21 21:42:16 +00:00
Florian Müllner f3acb27d61 window-list: Exclude DESKTOP windows from window previews
While nautilus removed its desktop support a while ago in favor of an
extension, it's still possible that some external X11 desktop icon app
is used. As DESKTOP windows cannot be moved between workspaces or stacked,
and aren't perceived as regular windows, it doesn't make sense to show
them as previews in the workspace switcher.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/93
2019-11-21 21:42:16 +00:00
Florian Müllner a904d51cf7 window-list: Fix faking overview
The public overview properties are now read-only, so switch to the
private properties which back them to fake the overview visibility.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/96
2019-11-21 22:38:50 +01:00
Florian Müllner 30ad3d670f extensions: Stop setting GTypeName
The type name generated by gjs now includes the filename, so we
don't have to set it ourselves to make sure it's unique.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/95
2019-11-21 22:25:43 +01:00
Marco Trevisan (Treviño) 63615cb657 cleanup: Use inheritance for Actor classes instead of composition
Use GObject types when inheriting from native actor classes.

Related to https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/559

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/89
2019-11-21 21:22:26 +00:00
Florian Müllner a894897770 Bump version to 3.34.1
Update NEWS.
2019-10-09 03:04:32 +02:00
Florian Müllner 1b2c0a4b6c Update sass submodule 2019-10-09 03:04:32 +02:00
Yi-Jyun Pan 8e8b0392a2 Update Chinese (Taiwan) translation 2019-10-08 11:31:58 +00:00
Ask Hjorth Larsen aea57f0305 Updated Danish translation 2019-10-02 05:54:09 +02:00
Dušan Kazik 6462af30ee Update Slovak translation 2019-09-26 07:15:50 +00:00
Nathan Follens 8d658f7e0d Update Dutch translation 2019-09-25 10:55:33 +00:00
Xiaoguang Wang 05bcd981cd data: Adjust to g-s-d's plugin removals
Remove "org.gnome.SettingsDaemon.Clipboard" and
"org.gnome.SettingsDaemon.Mouse", now the function is moved to
gnome-shell/mutter.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/94
2019-09-17 09:09:22 +08:00
Florian Müllner ecf608ead8 Revert "ci: Import run-eslint script from gnome-shell"
Filtering errors by changed lines in a merge request means some
errors can slip through, for example when an import becomes unused
but isn't removed.

That's more common than rules changing behind our back, so revert
to running eslint directly again.

This reverts commit 119da3291b.
2019-09-14 01:55:58 +02:00
Florian Müllner 4ad50ab035 Bump version to 3.34.0
Update NEWS.
2019-09-09 20:32:39 +02:00
Sabri Ünal 934d17db4b Update Turkish translation 2019-09-06 20:09:49 +00:00
Milo Casagrande b25e9541ce Update Italian translation 2019-09-06 08:41:27 +00:00
Efstathios Iosifidis 3204fd7842 Update Greek translation 2019-09-05 16:28:15 +00:00
Rafael Fontenelle 808f75e998 Update Brazilian Portuguese translation 2019-09-05 05:22:30 +00:00
Florian Müllner 56ecc684cc Bump version to 3.33.92
Update NEWS.
2019-09-04 23:30:47 +02:00
Goran Vidović 67ceca8f70 Update Croatian translation 2019-09-03 15:50:36 +00:00
Fabio Tomat 953445d6cf Update Friulian translation 2019-08-28 07:35:27 +00:00
Ryuta Fujii cb834f9fa1 Update Japanese translation 2019-08-27 13:00:02 +00:00
Ryuta Fujii ca2cd844b2 Update Japanese translation 2019-08-27 12:58:15 +00:00
Changwoo Ryu 98b3da41e8 Update Korean translation 2019-08-26 11:17:23 +00:00
Fran Dieguez c00c749c0b Update Galician translation 2019-08-25 16:13:27 +00:00
Claude Paroz e11c90365b Updated French translation 2019-08-25 10:44:16 +02:00
Balázs Úr c812fdc134 Update Hungarian translation 2019-08-24 19:56:32 +00:00
Matej Urbančič 9299db49fb Updated Slovenian translation 2019-08-24 20:05:57 +02:00
Rūdolfs Mazurs 3a15dffe76 Update Latvian translation 2019-08-24 14:33:04 +00:00
Tim Sabsch 3df4e5fdbb Update German translation 2019-08-23 19:29:11 +00:00
Марко Костић c0a5d0d091 Update Serbian translation 2019-08-21 21:16:23 +00:00
Florian Müllner d36a196540 Bump version to 3.33.91
Update NEWS.
2019-08-21 20:00:22 +00:00
Florian Müllner 9077687c0a places-menu: Fix loop
Fix fallout from commit 63c07bdc73.
2019-08-21 20:00:22 +00:00
Florian Müllner fcbfaec53e apps-menu: Adjust to mutter API change
The global grab API got dropped from mutter's Clutter fork, so use the
corresponding input device API instead.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/90
2019-08-21 19:39:11 +02:00
Florian Müllner 7c170e7e90 cleanup: Always use type-safe comparisons
The type coercion performed by the regular == and != operators can
have surprising results. It is therefore considered good practice
to use the type-safe === and !== variants instead.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:44 +00:00
Florian Müllner ed7a292805 cleanup: Don't use comparison operator when checking falsy values
We mostly use the regular == and != comparison operators over their
type-safe === and !== counterparts. This is about to change, but there
are some places where we don't care whether a value is null, undefined
or 0; just check for falsiness there instead of using operators, so
we can start to consistently use the type-safe operators everywhere
else in a follow-up commit.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:44 +00:00
Florian Müllner eb79f5b512 cleanup: Require "dangling" commas
Since ES5, trailing commas in arrays and object literals are valid.
We generally haven't used them so far, but they are actually a good
idea, as they make additions and removals in diffs much cleaner.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:44 +00:00
Florian Müllner eceff51ba1 cleanup: Use consistent brace style of blocks
Our coding style has always been to avoid braces when all blocks
are single-lines. Make sure we apply that style consistently.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:44 +00:00
Florian Müllner 63c07bdc73 cleanup: Don't shadow variables
Having variables that share the same name in overlapping scopes is
confusing and error-prone, and is best avoided.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:44 +00:00
Florian Müllner fdc3dda484 cleanup: Fix stray/missing spaces
Those are wrong according to our style guidelines, but the previous
eslint ruleset didn't catch them.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:44 +00:00
Florian Müllner fca516e58a cleanup: Disambiguate assignments in arrow functions
As arrow functions have an implicit return value, an assignment of
this.foo = bar could have been intended as a this.foo === bar
comparison. To catch those errors, we will disallow these kinds
of assignments unless they are marked explicitly by an extra pair
of parentheses.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:43 +00:00
Florian Müllner c14f7f6fb8 cleanup: Use consistent style for ternary operator
We are currently inconsistent whether to put the operators in front
of the corresonding line or at the end of the preceding one. The
former makes more sense, so go with that.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:43 +00:00
Florian Müllner 2497dc6d31 cleanup: Use object destructuring where possible
ES6's destructuring is a nice way of assigning a variable in a concise way,
without duplicating the name of the object property. Use it consistently
where possible.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:43 +00:00
Florian Müllner a1f38d818d cleanup: Use some more array destructuring
Array destructuring has been supported by gjs/mozjs for quite some time,
so we are already using it heavily where it makes sense.

However one place still sneaked through where using destructuring makes
sense, as the element's position has semantic meaning (instead of just
making it the first, second, ... element).

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:43 +00:00
Florian Müllner 9646149f9a cleanup: Use object shorthand where possible
ES6 allows to omit property names where they match the name of the
assigned variable, which makes code less redundant and thus cleaner.
We will soon enforce that in our eslint rules, so make sure we use
the shorthand wherever possible.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:43 +00:00
Florian Müllner b6d02f8e1f cleanup: Use operator shorthands where possible
Shorthands like a += b are well-established, so prefer them over the
less concise a = a + b.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:43 +00:00
Florian Müllner 5f96b3c11c cleanup: Don't omit parens when constructing
While it is legal to omit parentheses when invoking a constructor
with no arguments, we generally avoid that in our coding style.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:43 +00:00
Florian Müllner e217f23767 cleanup: Avoid unnecessary parentheses
Extra parentheses usually add noise rather than clarity, so avoid
them.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:43 +00:00
Florian Müllner 579a290bae screenshot-window-sizer: Rearrange calculation
eslint has a rule to prohibit unnecessary parentheses. While this is
generally a good idea stylistically, the parentheses in a calculation
of (a / b) * c add more clarity, as a / b * c lacks the unambiguity of
proper math notation:

   a                a
  --- * c   vs   -------
   b              b * c

We can still follow the style rule by rearranging to the unambiguous
c * a / b.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:43 +00:00
Florian Müllner 2dc4325a90 places-menu: Use spread operator for variadic function
Invoking functions via Function.prototype.apply() and .call() is
less performant than a regular function call, and makes code harder
to read.

Before ES6 there was no other way of writing a function with variadic
arguments, but since we now have the spread operator, we can use that
as the better alternative.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:43 +00:00
Florian Müllner 376502e952 windowsNavigator: Don't add linebreak before operator
When breaking overly long conditions into multiple lines, the operator
should end the previous line instead of starting the new one.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:43 +00:00
Florian Müllner 91c9982d7f workspace-indicator: Remove some inactive code
This code has been commented out since it was added, presumably due to
difficulty in avoiding a cycle of reloading rows on settings changes
and writing settings on row changes.

Considering that the setting changing while the preference dialog is
up is extremely unlikely, don't bother with making it work and just
remove the dead code.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:43 +00:00
Florian Müllner c721121a2d native-window-placement: Fix weird comment styles
Don't use gtk-doc style comments for regular comments, and WTF is
/// comment ////?!

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:43 +00:00
Florian Müllner 4007b61cf2 apps-menu: Minor cleanup
We have a much more idiomatic way of transforming one array
into another than pushing values while iterating over the
original array ...

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:43 +00:00
Florian Müllner 2655419880 lint: Sync configuration with gjs
gjs updated its eslint configuration to a much more complete and
thorough set.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/91
2019-08-21 15:13:43 +00:00
Danial Behzadi 9f1b52c852 Update Persian translation 2019-08-21 11:31:51 +00:00
Jordi Mas d375cac32e Update Catalan translation 2019-08-21 09:18:10 +02:00
Piotr Drąg 66e2b32c8f Update Polish translation 2019-08-20 19:24:05 +02:00
Daniel Mustieles 95dd651b29 Updated Spanish translation 2019-08-20 12:43:32 +02:00
Aurimas Černius 1534e50a15 Updated Lithuanian translation 2019-08-18 22:07:01 +03:00
Florentina Mușat 23781abead Update Romanian translation 2019-08-18 12:25:30 +00:00
Jiri Grönroos 8065d38fdd Update Finnish translation 2019-08-17 13:00:55 +00:00
Kukuh Syafaat 05faa0763b Update Indonesian translation 2019-08-16 08:44:06 +00:00
Marek Černocký e88cd44b3c Updated Czech translation 2019-08-16 10:20:25 +02:00
Florian Müllner 85fa282153 lint: Convert eslint JSON to YAML
gjs will change its configuration to YAML, so switch to that format
to keep syncing possible.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/90
2019-08-14 16:34:45 +00:00
Florian Müllner 119da3291b ci: Import run-eslint script from gnome-shell
Since we dropped the legacy configuration, we run eslint directly
instead of via a script. However gnome-shell's variant of the script
also has special treatment of merge requests to only consider errors
in changed lines.

While we strive for zero errors, new errors can appear when we update
eslint or change the configuration. Not blocking merge requests due
to unrelated eslint errors is a good thing, run eslint through a
modified version of the gnome-shell script.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/90
2019-08-14 16:34:45 +00:00
Anders Jonsson 6675d1c55d Update Swedish translation 2019-08-12 19:32:37 +00:00
Asier Sarasua Garmendia be1a22069a Update Basque translation 2019-08-12 06:20:02 +00:00
Asier Sarasua Garmendia 2b9162b79d Update Basque translation 2019-08-11 13:48:18 +00:00
Florian Müllner 6aab09bd06 screenshot-window-sizer: Fix imports
Since we replaced Tweener with Clutter animations, we must import the
latter and don't need the former.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/88
2019-08-10 18:33:18 +02:00
Florian Müllner c336e7d70e Bump version to 3.33.90
Update NEWS.
2019-08-10 00:41:55 +02:00
Florian Müllner f486dfa112 Update sass submodule 2019-08-10 00:40:11 +02:00
Florian Müllner 80de26dc16 cleanup: Stop using Tweener
gnome-shell added convenience API for Clutter animations and replaced
Tweener everywhere; follow suite and do the same.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/87
2019-08-10 00:27:20 +02:00
Florian Müllner af6f5fea54 window-list: Adjust animation time
gnome-shell changed all animations times to use milliseconds.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/86
2019-08-10 00:25:08 +02:00
Florian Müllner 9743054174 window-list: Don't override existing signal
Since commit b6a6de9bb5 turned WindowPicker into a ClutterActor
subclass, we already have a 'scroll-event' signal and don't need
to define our own.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/86
2019-08-10 00:25:08 +02:00
Florian Müllner 827af154b8 window-list: Support showing windows from all workspaces
gnome-panel's window list applet has such an option, so let's support
it as well.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/154
2019-08-09 22:20:43 +00:00
Jor Teron f9b87f9b44 Update Karbi translation 2019-07-25 10:46:02 +00:00
Florian Müllner a41bcd4f10 Bump version to 3.33.4
Update NEWS.
2019-07-20 18:09:56 +02:00
Piotr Drąg 1a13f29b0c Update POTFILES.in 2019-07-20 14:01:47 +02:00
Florian Müllner b6a6de9bb5 window-list: Actorize
gnome-shell is in the process of moving from composition to subclassing.
Do the same here, and use custom actor classes instead of "actor" and
"_delegate" properties.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/84
2019-07-20 00:20:51 +02:00
Florian Müllner 5b7631898c cleanup: Use GObject.NotImplementedError
Since version 1.50.0, gjs defines GObject.NotImplementedError for throwing
errors when a virtual method that requires a subclass implementation is not
defined.

So use this instead of a generic JS Error in such cases.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/84
2019-07-20 00:20:51 +02:00
Florian Müllner f8bae05036 cleanup: Stop using PopupMenuItem.actor properties
Popup menu items are now actor subclasses, and their actor property
points to the item itself.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/84
2019-07-20 00:20:51 +02:00
Florian Müllner 60c75e5fcf classic: Add 'horizontal-workspaces' extension
Vertical workspaces are another defining characteristics of GNOME 3,
and thus rather un-classic. That switch was driven by the overall
layout of the overview, and now that we disable the overview in
GNOME Classic, we can just return to the traditional workspace
layout as well.

Add a small extension that does just that.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/72
2019-07-19 13:54:09 +02:00
Florian Müllner c6d2063f4d workspace-indicator: Show previews in workspace switcher
Currently the new horizontal workspace switcher only shows a series of
buttons, with no indication of the workspaces' contents. Go full GNOME 2
and add tiny draggable preview rectangles that represent the windows
on a particular workspace.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/77
2019-07-19 13:48:21 +02:00
Florian Müllner 52f373fb70 workspace-indicator: Support horizontal workspace layout
Just like we did for the workspace indicator in the window-list, improve
the handling of horizontal workspace layouts by showing the switcher
in-place instead of delegating the functionality to a menu.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/71
2019-07-19 13:42:44 +02:00
Florian Müllner 283a1ec5c2 workspace-indicator: Minor cleanup
Pass the style class at construction time instead of setting it later.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/71
2019-07-19 13:24:50 +02:00
Florian Müllner c516f05927 workspace-indicator: Refactor workspace signal handlers
We are about to support a separate representation if horizontal
workspaces are used. To prepare for that, rename the handlers to
something more generic and split out menu-specific bits into a
dedicated helper function.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/71
2019-07-19 13:24:50 +02:00
Florian Müllner e836a9e5e0 workspace-indicator: Minor cleanup
Mutter has a dedicated method for getting the index of the active
workspace, use that instead of getting first the active workspace
and then its index.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/71
2019-07-19 13:24:50 +02:00
Florian Müllner d1674c5f75 workspace-indicator: Update workspace names in-place
There's no good reason to rebuild the entire menu on workspace names
changes, we can simply update the labels in-place.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/71
2019-07-19 13:24:50 +02:00
Florian Müllner 9fa283877c workspace-indicator: Make some properties private
There's no reason why they should be public.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/71
2019-07-19 13:24:50 +02:00
Florian Müllner f1a154207f workspace-indicator: Fix whitespace error
We only want a single space before and after operators, not at least
one. Unfortunately eslint only enforces the latter ...

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/71
2019-07-19 13:24:50 +02:00
Florian Müllner 5b07dfded9 window-list: Show previews in workspace switcher
Currently the new horizontal workspace switcher only shows a series of
buttons, with no indication of the workspaces' contents. Go full GNOME 2
and add tiny draggable preview rectangles that represent the windows
on a particular workspace.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/74
2019-07-19 13:16:40 +02:00
Florian Müllner 9f9dbd579b window-list: Turn workspace thumbs into drop targets
It makes some sense to allow using the workspace indicator for moving
windows between workspaces as well as for workspace switching. This
applies particularly in GNOME classic after we disabled the overview
there, so that there is again a non-shortcut way of moving windows
between workspaces.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/74
2019-07-19 13:15:52 +02:00
Florian Müllner c9477dd94d window-list: Support horizontal workspace layout
Unlike in GNOME 2, the workspace indicator we display in the window list
isn't a workspace switcher, but a menu button that allows switching
workspaces via its menu. The reason for that is that a horizontal
in-place switcher would be at odds with the vertical workspace layout
used in GNOME 3.

However that reasoning doesn't apply when the layout is changed to a
horizontal one, so replace the button with a traditional workspace
switcher in that case.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/70
2019-07-19 13:11:22 +02:00
Florian Müllner 5a30ebe403 window-list: Refactor workspace signal handlers
We are about to support a separate representation if horizontal
workspaces are used. To prepare for that, rename the handlers to
something more generic and split out menu-specific bits into a
dedicated helper function.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/70
2019-07-19 13:11:15 +02:00
Florian Müllner a5f347ba10 window-list: Improve workspace label styling
The border currently looks off - it extends all the way vertically
and leaves zero spacing to the label horizontally. Fix both issues
by setting appropriate padding/margins.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/70
2019-07-19 13:11:09 +02:00
Florian Müllner dab326c17e window-list: Minor cleanup
Mutter has a dedicated method for getting the index of the active
workspace, use that instead of getting first the active workspace
and then its index.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/70
2019-07-19 13:11:09 +02:00
Florian Müllner bdf6af3ee3 window-list: Update workspace names in-place
There's no good reason to rebuild the entire menu on workspace names
changes, we can simply update the labels in-place.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/70
2019-07-19 13:11:09 +02:00
Florian Müllner 1532c15325 window-list: Make some properties private
There's no reason why they should be public.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/70
2019-07-19 13:11:09 +02:00
Florian Müllner cbd1b7d983 window-list: Use a more specific GTypeName for workspace indicator
Now that the class inherits from GObject, the generic name easily
conflicts with other classes otherwise, for example with the one
from the workspace-indicator extension.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/70
2019-07-19 13:11:09 +02:00
Florian Müllner 4b9c53ff2e window-list: Split out workspaceIndicator
The extension has grown unwieldily big, so before starting to improve
on the workspace indicator, move it to its own source file.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/70
2019-07-19 13:11:09 +02:00
Florian Müllner 6eb3a62e2b apps-menu: Add drop-shadow to application icons
... to make sure they are readable on light backgrounds.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/168
2019-07-18 11:17:04 +00:00
Florian Müllner 0469fc6aa9 Update sass submodule (again) 2019-07-18 12:32:15 +02:00
Florian Müllner 1f6f22010e Update sass submodule 2019-07-18 12:24:15 +02:00
Jakub Steiner ae1b17d29c classic: Update window-list styling
Make buttons flatter, rounder to match default styling.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/82
2019-07-16 11:17:11 +02:00
Jakub Steiner 3fa750ce17 classic: No special casing of notifications
The default already handles light variant.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/82
2019-07-16 11:17:10 +02:00
Jakub Steiner 56e2a570e3 classic: hover state for panel buttons
- prelight before active
- lighten up slightly, similar to what the default does (inverted)

Fixes https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/169
2019-07-15 23:45:03 +02:00
Jor Teron 167f0be6b4 Update Karbi translation 2019-07-16 02:51:57 +00:00
Jor Teron 80eb29bd51 Add Karbi translation 2019-07-14 04:30:50 +00:00
Florian Müllner f2b261c573 window-list: Handle closing window picker with Escape
Just like the overview can be closed with Escape, it makes sense to
allow the same for the window picker (in addition to pressing super
repeatedly).

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/80
2019-07-02 21:20:01 +02:00
Florian Müllner 6c49ca825c window-list: Move super-key handling into WindowPicker
We have an option to put a window list on each monitor, so we may have
more than one window picker toggle. We don't want each of those try to
toggle the window picker simultanuously, so move handling of the super
key directly into the picker.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/80
2019-07-02 21:20:01 +02:00
Florian Müllner 6a25971366 lint: Also allow camelcase for default signal handlers
on_some_signal() is used less than vfunc_some_method(), but it can
still be useful.
2019-07-02 02:44:22 +02:00
Florian Müllner dc3523a344 lint: Remove misleading globals
While those are defined by gnome-shell, we generally want to define our
own with the correct gettext domain.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/79
2019-06-29 03:07:56 +02:00
Florian Müllner 2ef6dba0a5 window-list: Fix resetting handler ID
This is embarrassing, although destroy() is expected to only run once,
so the bug shouldn't have an effect in practice.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/78
2019-06-29 02:56:33 +02:00
Florian Müllner 92db87f7cb window-list: Add window picker button
With the latest changes, GNOME Classic has become so classic that it
is bordering dull. Salvage at least a tiny piece of GNOME 3 in form
of a window-pick button which toggles an exposé-like reduced overview.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/73
2019-06-28 23:02:58 +02:00
Florian Müllner 82d2011061 classic: Disable overview
The overview is one of the defining features of GNOME 3, and thus
almost by definition at odds with the classic session, which
emulates a traditional GNOME 2 desktop.

Even with the less prominent placement inside the application menu
it never quite fit in - it doesn't help that besides the different
UI paradigma, the overview keeps its "normal" styling which differs
greatly with classic's normal mode.

So besides removing the "Activities" button via the session mode
definition, now that the apps-menu extension doesn't replace it anymore,
disable the overview completely in the classic session.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/69
2019-06-28 20:55:28 +00:00
Florian Müllner 545b811562 apps-menu: Hide overview when launching app
Now that we no longer hide the overview when the menu is opened,
it is possible to activate menu entries from the overview. Start
hiding the overview in that case, which is consistent with app
launching elsewhere.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/69
2019-06-28 20:55:28 +00:00
Florian Müllner d99d0a06bd apps-menu: Stop hiding the overview when toggled
Now that the extension no longer doubles as the "Activities" button,
that behavior is confusing.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/69
2019-06-28 20:55:28 +00:00
Florian Müllner 6105eecff2 apps-menu: Stop taking over Activities button
We don't want the "Activities" button in GNOME Classic, but the current
way of handling it is confusing:

 - the button is hidden, but the corresponding hot corner
   sometimes works (when the application menu isn't open)

 - the button is effectively moved inside the menu, although
   it's clearly not an app or category

 - the apps-menu can be used independent from classic mode, in
   which case removing the "Activities" button may not be wanted

Address those points by removing any handling of the activities button
from the apps-menu extension. We will remove it again from the classic
session via a session mode tweak.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/69
2019-06-28 20:55:28 +00:00
Florian Müllner d1254d9b57 places-menu: Don't hardcode position
The extension currently assumes that we have the "Activities" button
at the left of the top bar. This is currently true, not only in the
regular session, but also in GNOME classic where the button is hidden
(but still present).

However this is about to change: We will stop taking over the button
from the apps-menu extension, and instead disable "Activities" from
the session mode definition.

Prepare for this by adding the places menu before the application menu
instead of assuming a hardcoded position.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/69
2019-06-28 20:55:28 +00:00
Florian Müllner 2db4589dea cleanup: Re-order imports
They should be grouped between external (GI/gjs) and shell and in
alphabetical order. Until commit bab4be1a ExtensionUtils was special
as it was required for some imports, but that's no longer the case
for most extensions.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/76
2019-06-28 21:51:38 +02:00
Florian Müllner dfeb99fc0a apps-menu: Add missing chain-up
PanelMenu.Button is a bit weird in that it also "contains" its parent
actor. That container is supposed to be destroyed with the button, but
as we currently don't chain up to the parent class' _onDestroy(), we
leave behind an empty container every time the extension is disabled.

Fix this by adding the missing chain-up.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/75
2019-06-27 04:26:35 +02:00
Florian Müllner 48ea80d391 Bump version to 3.33.3
Update NEWS.
2019-06-24 20:34:02 +02:00
Jakub Steiner b138e218bb classic: fix a broken build
- redesign of the default theme nuked some local variables
  breaking the build.
2019-06-24 20:28:03 +02:00
Florian Müllner 829440f546 Update sass submodule 2019-06-24 20:02:18 +02:00
Marco Trevisan (Treviño) 14859b4009 window-list: Pass the actor as PopupMenuManager owner
PopupMenuManager's grabHelper starting from gnome-shell@7bb84da must be
an actor, so pass it explicitly instead of expecting the shell to do it
for us.

This fixes an error during pushModal that was causing a grab not to be
released.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/68
2019-05-29 14:45:43 -05:00
Florian Müllner 3a596054ad places-menu: Adjust to GObject-ification of menu items
https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/67
2019-05-29 09:38:21 +00:00
Florian Müllner 65191d83b4 drive-menu: Adjust to GObject-ification of menu items
https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/67
2019-05-29 09:38:21 +00:00
Florian Müllner 8499b0e254 apps-menu: Adjust to GObject-ification of menu items
https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/67
2019-05-29 09:38:21 +00:00
Florian Müllner f166ca501f window-list: Stop using deprecated actor property
Since PanelMenu.Button was changed to inherit from St.Widget, its actor
property is deprecated and points to itself. Stop using it to avoid the
corresponding warning.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/67
2019-05-29 09:38:21 +00:00
Florian Müllner a36331522f Bump version to 3.33.2
Update NEWS.
2019-05-22 18:58:31 +00:00
Florian Müllner 25e43a5d08 lint: Remove legacy configuration
After the last batch of indentation changes, the whole code base
conforms to the new style now, so we can drop the legacy eslint
configuration.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/66
2019-05-22 20:40:19 +02:00
Florian Müllner ad914441a2 window-list: Reindent to conform with new style
Instead of aligning arguments like we used to do, use a consistent
four-space indent as mandated by gjs' current style guide.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/66
2019-05-22 20:40:19 +02:00
Florian Müllner 200d337769 apps-menu: Reindent to conform with new style
Instead of aligning arguments like we used to do, use a consistent
four-space indent as mandated by gjs' current style guide.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/66
2019-05-22 20:40:19 +02:00
Florian Müllner e56f1a976e native-window-placement: Reindent to conform with new style
Instead of aligning arguments like we used to do, use a consistent
four-space indent as mandated by gjs' current style guide.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/66
2019-05-22 20:40:19 +02:00
Florian Müllner 6a66cd4fa6 places-menu: Reindent to conform with new style
Instead of aligning arguments like we used to do, use a consistent
four-space indent as mandated by gjs' current style guide.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/66
2019-05-22 20:40:19 +02:00
Florian Müllner 55c493389a auto-move-windows: Reindent to conform with new style
Instead of aligning arguments like we used to do, use a consistent
four-space indent as mandated by gjs' current style guide.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/66
2019-05-22 20:40:18 +02:00
Florian Müllner 06f1303834 drive-menu: Reindent to conform with new style
Instead of aligning arguments like we used to do, use a consistent
four-space indent as mandated by gjs' current style guide.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/66
2019-05-22 20:40:18 +02:00
Florian Müllner 3d5687ae3c workspace-indicator: Reindent to conform with new style
Instead of aligning arguments like we used to do, use a consistent
four-space indent as mandated by gjs' current style guide.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/66
2019-05-22 20:40:18 +02:00
Florian Müllner cdd3fba593 screenshot-window-sizer: Reindent to conform with new style
Instead of aligning arguments like we used to do, use a consistent
four-space indent as mandated by gjs' current style guide.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/66
2019-05-22 20:40:18 +02:00
Florian Müllner f11c101878 Bump version to 3.33.1
Update NEWS.
2019-05-14 17:53:56 +00:00
Florian Müllner 7c412ca7d9 window-list: Don't use anchor point
It is deprecated and we can easily replace it with a translation.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/64
2019-04-28 11:08:02 +00:00
Florian Müllner e3a6e8f82c Bump version to 3.32.1
Update NEWS.
2019-04-17 22:09:40 +02:00
Florian Müllner ce10ad64c4 Update sass submodule 2019-04-17 22:06:50 +02:00
Adrien Plazas 5b43d4733c screenshot-window-sizer: Add phone screenshot sizes
This is going to be convenient to take fake screenshots for phones like
the Librem 5.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/65
2019-04-12 14:31:53 +02:00
Florian Müllner 3671d5a299 cleanup: Use an extension object instead of globals
https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/143
2019-04-08 06:00:29 +00:00
Florian Müllner a024d9f005 windowsNavigator: Use subclasses instead of injections
gnome-shell moved to ES6 classes, which means the constructor is
no longer a regular method that we can swap out with an injected
version.

Instead, do our modifications in subclasses and use them to replace
the original classes.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/143
2019-04-08 06:00:29 +00:00
Fabian P. Schmidt d94a3500f6 README: Re-add extension alternate-tab with obsolescence notice
This commit adds a short notice about the former extension
alternate-tab to the README. This notice should be removed once
the traffic of users searching for this obsolete extension settled
down.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/62
2019-03-20 12:00:08 +01:00
Florian Müllner 78141e6433 Bump version to 3.32.0
Update NEWS.
2019-03-12 00:02:14 +01:00
Florian Müllner dd53fb8eb7 Update sass submodule 2019-03-12 00:01:26 +01:00
Mart Raudsepp 6cd2be452b Update Estonian translation 2019-03-10 17:27:41 +00:00
Kristjan SCHMIDT 36abd576b5 Update Esperanto translation 2019-03-06 21:15:21 +00:00
Victor Ibragimov 730547b3e1 Update Tajik Translation 2019-03-06 21:03:41 +05:00
Florian Müllner e7e6b882a3 Bump version to 3.31.92
Update NEWS.
2019-03-05 06:07:01 +01:00
Florian Müllner 53f92f2910 Update sass submodule 2019-03-05 06:05:05 +01:00
Florian Müllner a26380d56e user-theme: Clarify some code
Commit 2582ab accidentally pointed out that the current theme loading code
obfuscates which directories are searched for themes. Rewrite it with modern
JS features to make it more obvious.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/60
2019-03-04 19:35:18 +01:00
Florian Müllner ab334d95e0 Revert "User theme: compatibility with XDG Base Directory"
We already handled themes in XDG_DATA_HOME before commit 2582ab
by prepending it to the system dirs.

This reverts commit 2582ab4fd0.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/60
2019-03-04 19:35:10 +01:00
Florian Müllner 7e5726e632 apps-menu: Promisify marking file as trusted
Use async/await to make nested operations easier to read.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/60
2019-03-04 19:35:10 +01:00
Florian Müllner 95b40069bf apps-menu: Remove unnecessary check
The function is always called with an array parameter (albeit it may
be empty), so remove the unnecessary check and cut down on indentation.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/60
2019-03-04 19:35:10 +01:00
Florian Müllner bd9f1cfd91 apps-menu: Avoid deep nesting
https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/60
2019-03-04 19:35:10 +01:00
Florian Müllner 81548ced69 native-window-placement: Clarify some code
Add some intermediate variables for better legibility.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/60
2019-03-04 19:35:10 +01:00
Florian Müllner a378e5fc34 placesDisplay: Promisify launching
Use async/await to make nested async operations easier to read.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/60
2019-03-04 19:35:10 +01:00
Florian Müllner 56d19ad480 placesMenu: Add early return to reduce indentation level
https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/60
2019-03-04 19:35:10 +01:00
Florian Müllner a071685c13 auto-move-windows: Clarify some code
Apply some tricks to align column numbers with their corresponding
values for better legibility.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/60
2019-03-04 19:35:10 +01:00
Florian Müllner 599428d292 auto-move-windows: De-duplicate row appending
https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/60
2019-03-04 19:35:10 +01:00
Florian Müllner 1f1f9664a6 cleanup: Share unmount/eject arugments
Besides the callback, eject and unmount share the same arguments.
Make this explicit by sharing the common arguments between branches.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/60
2019-03-04 19:35:10 +01:00
Florian Müllner fb039c0fb5 cleanup: Use Meta.MaximizeFlags.BOTH
This shorthand has been around for a long time, use it make (un)maximize
code more readable.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/60
2019-03-04 19:35:10 +01:00
Florian Müllner 6e63edd737 lint: Sync with gjs
Some of our custom rules have been upstreamed[0], update the
rule sets accordingly.

[0] https://gitlab.gnome.org/GNOME/gjs/merge_requests/272
https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/59
2019-03-03 05:54:58 +01:00
Florian Müllner 55ecd3939e ci: Switch to extension-ci image
gnome-shell now provides a docker image with useful tools for extension CI;
as it contains everything we need, we can speed up CI by not running the
package manager.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/58
2019-02-28 23:54:46 +01:00
Florian Müllner d83d6e857a style: Use single-quotes for translated strings
The coding style of using double quotes for translatable strings
and single quotes otherwise is unnecessarily complex and cannot
be enforced with an eslint rule.

Simply use single quotes consistently for all strings.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/57
2019-02-28 23:29:31 +01:00
Florian Müllner db35d7ae7c style: Change indentation style of object literals
Instead of keeping the first property on the same line as the opening
brace and aligning the properties, use a four-space indent. This brings
us closer to gjs' coding style, and as a bonus helps keeping lines in
the soft 80 character limit.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/57
2019-02-28 23:29:24 +01:00
Florian Müllner d34b5030b9 style: Use a consistent style for array literals
Most array literals already use a four-space indent, except the ones in
GObject metainfo and function parameters. Reindent those as well to make
the style consistent and bring it closer to gjs' coding style.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/57
2019-02-28 23:29:14 +01:00
Florian Müllner 7f8f1234ae style: Stop using braces for single-line arrow functions
Braces are optional for single-line arrow functions, but there's a
subtle difference:
Without braces, the expression is implicitly used as return value; with
braces, the function returns nothing unless there's an explicit return.

We currently reflect that in our style by only omitting braces when the
function is expected to have a return value, but that's not very obvious,
not an important differentiation to make, and not easy to express in an
automatic rule.

So just omit braces consistently as mandated by gjs' coding style.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/57
2019-02-28 23:29:05 +01:00
Florian Müllner 9b25a227c6 style: Don't exempt ternary expressions from indent rule
It turns out we can comply with gjs' coding style and still align the
branches if line breaks are required, so do that to reduce diversion
from the canonical GNOME style.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/57
2019-02-28 23:28:55 +01:00
Florian Müllner 78580bc3a8 lint: Remove unused rules
We picked those up from Polari, which had those for

 - object arrays:
    let foo = [
        { bar: 42,
          quz: true },
        { bar: 23,
          quz: false }
    ];

 - "enums":

    let Options = {
        ONE:   0,
        TWO:   1,
        THREE: 2
    };

We don't have either of those, so drop the rules to minimise divergence
with gjs.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/57
2019-02-28 23:28:44 +01:00
Florian Müllner b50074fd37 lint: Restrict deprecated Lang API
Now that we moved to ES standard replacements, let's make sure they
don't creep back in accidentally.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/57
2019-02-28 23:28:33 +01:00
Florian Müllner d5a1044244 Bump version to 3.31.91
Update NEWS.
2019-02-21 22:41:20 +01:00
Florian Müllner 11cad1f3b3 Update sass submodule
https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/56
2019-02-21 22:23:52 +01:00
Tomasz Gąsior 2582ab4fd0 User theme: compatibility with XDG Base Directory
See https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/55
2019-02-20 01:15:49 +01:00
Gun Chleoc 5a06de606d Update Scottish Gaelic translation
(cherry picked from commit c394dbefba216e685fb01c4268c7bb0db93728ff)
2019-02-16 09:34:54 +00:00
Florian Müllner 4671c24b78 places-menu: Stop using deprecated Mainloop module
Just use the underlying GLib functions directly.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/54
2019-02-16 00:49:44 +01:00
Florian Müllner 0d41643866 cleanup: Use destructuring for imports from GI
This is *much* nicer than repetitive "imports.gi" lines ...

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/54
2019-02-16 00:49:44 +01:00
Florian Müllner d8f7d70c10 apps-menu: Remove outdated legacy-tray handling
The tray is long gone, so trying to access it will result in
warnings.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/53
2019-02-16 00:40:55 +01:00
Florian Müllner cbd981351e ci: Check for issue/MR URLs in commit messages
Commit messages should include the full URL to an issue or merge
request to keep associated information easily available in future
log digging.

Jonas came up with a script to enforce that policy for mutter and
gnome-shell. It's an excellent idea, so adopt it here as well.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/52
2019-02-16 00:03:49 +01:00
Matej Urbančič 434185ba03 Added Slovenian translation 2019-02-12 20:52:31 +01:00
Florian Müllner abc8877d11 Update sass submodule 2019-02-07 17:44:44 +01:00
Florian Müllner a7ff9f401e Bump version to 3.31.90
Update NEWS.
2019-02-06 22:34:06 +01:00
Florian Müllner bab4be1a59 extensions: Drop Convenience library
Its methods are now provided by gnome-shell itself and can be used
as an easy drop-in replacement.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/44
2019-02-06 20:17:59 +01:00
Florian Müllner 47beeb1a8e ci: Allow gradual switch to new style
It doesn't make too much sense to declare parts of the existing style
"legacy", but then enforce it via CI. To allow for a gradual switch,
generate a report with all issues that eslint considers errors in both
configurations.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/50
2019-01-28 06:51:36 +01:00
Florian Müllner 945eddbc26 ci: Add "source_check" stage
More testing is always good, and the static analysis that eslint
provides goes well beyond what js60 offers, so run it as part of
the CI.

This will also ensure that new contributions comply with the style
rules we have set up.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/50
2019-01-28 06:51:30 +01:00
Florian Müllner c37ba0878a ci: Don't use global image/before_script
We are about to add another job that will use different parameters,
so it makes sense to set them under the job they belong to rather
than globally.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/50
2019-01-28 06:51:25 +01:00
Florian Müllner 3861ffae31 extensions: Mark exported symbols
eslint obviously doesn't know about gnome-shell's extension API, so
the various entry points trigger unused-variable errors. To fix,
explicitly mark those symbols as exported.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/50
2019-01-28 06:51:20 +01:00
Florian Müllner 2081309679 lib: Mark globals used from other modules as exported
eslint cannot figure out that those symbols are used from other modules
via imports, so they trigger unused-variable errors. To fix, explicitly
mark those symbols as exported.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/50
2019-01-28 06:51:15 +01:00
Florian Müllner 08a04b2f02 cleanup: Mark unused (but useful) variables as ignored
While we aren't using those destructured variables, they are still useful
to document the meaning of those elements. We don't want eslint to keep
warning about them though, so mark them accordingly.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/50
2019-01-28 06:51:09 +01:00
Florian Müllner 7b363fd659 cleanup: Mark unused arguments as unused
This will stop eslint from warning about them, while keeping their
self-documenting benefit.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/50
2019-01-28 06:51:02 +01:00
Florian Müllner 85112394b3 lint: Allow marking variables/arguments as unused
Unused variables or arguments can indicate bugs, but they can also
help document the code, in particular in case of signal handlers
and destructuring.

Account for this by keeping the error, but set up patterns that allow
us to opt out of if for individual variables/arguments. For arguments
we pick a '_' prefix, while for variables we go with a suffix instead,
to not accidentally exempt private module-scope variables.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/50
2019-01-28 06:50:53 +01:00
Florian Müllner 190243ee89 lint: Add "legacy" configuration
Regarding coding style, gjs is moving in a direction that departs quite
significantly from the established style, in particular when indenting
multi-line array/object literals or method arguments:

Currently we are keeping those elements aligned, while the gjs rules now
expect them to use the regular 4-space indentation.

There are certainly good arguments that can be made for that move - it's
much less prone to leading to overly-long lines, and matches popluar JS
styles elsewhere. But switching coding style implies large diffs which
interfere with git-blame and friends, so in order to allow for a more
gradual change, add a separate set of "legacy" rules that match more
closely the style we would expect up to now.

It also disables the rules for quotes and template strings - the former
because we cannot match the current style to use double-quotes for
translatable strings and single-quotes otherwise, the latter because
template strings are still relatively new, so we haven't adopted them
yet.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/50
2019-01-28 06:50:45 +01:00
Florian Müllner 1141d996d9 lint: Don't require indent for GObject.registerClass()
That function will eventually be replaced with decorators, and we don't
want to re-indent all GObject classes when that happens, so allow class
declarations with no indent:

    GObject.registerClass(
    class Foo extends GObject.Object {
    });

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/50
2019-01-28 06:50:38 +01:00
Florian Müllner f7cbd0d600 lint: Tweak indenting rule
I simply cannot deal with multi-line trinary expressions where the
two "branches" don't align, so add an exception for them.

And while the strict 4-line indent for objects is growing on me for
"regular" objects:

    let foo = new Foo({
        bar: 42,
        baz: 'bam'
    });

I do prefer the current style of compact braces and aligned properties
for object lists:

    let entries = [
        { name: 'foo',
          visible: true },
        { name: 'bar',
          halign: Gtk.Align.START }
    ];

So allow the latter style as well, at least for the time being.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/50
2019-01-28 06:50:31 +01:00
Florian Müllner c704f0de55 lint: Allow single-line braces
When using arrow functions, we only omit the braces when we are using
the return value:

    this.get_children().filter(w => w.visible);

When braces are used, eslint by default enforces line breaks, but
there are cases where the expression is hardly less concise than
the above:

    this.get_children().forEach(w => { w.destroy(); });

So change the default to allow this.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/50
2019-01-28 06:50:19 +01:00
Florian Müllner c8a1cd9c99 lint: Allow multiple spaces before key values
This is useful for imitating namespaced flags/enums:

```
const FooFlags = {
    NONE :   0,
    SMEAGLY: 1 << 0,
    SMOGLEY: 1 << 1,
    MUGGLY:  1 << 2
};
```

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/50
2019-01-28 06:50:10 +01:00
Florian Müllner ff79588d3b lint: Enforce camelCase
All variables should be in camelCase, so configure the corresponding
rule to enforce this. Exempt properties for now, to accommodate the
existing practice of using C-style underscore names for construct
properties of introspected objects.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/50
2019-01-28 06:50:05 +01:00
Florian Müllner 8ae84703a4 lint: Enforce arrow notation
We replaced all Lang.bind() calls with arrow functions or the standardized
Function.prototype.bind(), at least for the former eslint has some options
to ensure that the old custom doesn't sneak back in.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/50
2019-01-28 06:49:59 +01:00
Florian Müllner f18b281020 lint: Require spaces inside braces in object literals
Prohibiting spaces where the established GNOME style has required
them for a decade would be a harsh change for no good reason.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/50
2019-01-28 06:49:54 +01:00
Florian Müllner 75503b5f3c lint: Tweak the whitelist of globals
gjs doesn't include any gettext wrappers, and obviously can't know
about the shell's global object, so include those in the list of
globals.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/50
2019-01-28 06:49:42 +01:00
Florian Müllner 1d96f83362 lint: Import eslint rules from gjs
gjs started to run eslint during its CI a while ago, so there is an
existing rules set we can use as a starting point for our own setup.

As we will adapt those rules to our code base, we don't want those
changes to make it harder to synchronize the copy with future gjs
changes, so include the rules from a separate file rather than using
the configuration directly.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/50
2019-01-28 06:49:31 +01:00
Florian Müllner b3f009017c style: Use consistent style for object literal parameters
Spotted by eslint.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/49
2019-01-28 06:37:28 +01:00
Florian Müllner 05d961dfe1 style: Avoid trailing commas in array destructuring
When destructuring multiple return values, we often use trailing commas
to indicate that there are additional elements that we are ignoring.

There isn't anything inherently wrong with that, but it's a style that's
too confusing for eslint - on the one hand we require a space after a
comma, on the other hand we require no space before closing brackets.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/49
2019-01-28 06:37:28 +01:00
Florian Müllner 8a2b9abc09 style: Stop using string concatenation
String concatenation is considered bad style after ES6 added
template strings. The latter is the replacement we generally
want, except where the aforementioned xgettext bug would trip
over the backtick/slash combination.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/49
2019-01-28 06:37:28 +01:00
Florian Müllner 3effc9cfc2 style: Fix indentation errors
While we have some style inconsistencies - mostly regarding split lines,
i.e. aligning to the first arguments vs. a four-space indent - there are
a couple of places where the spacing is simply wrong. Fix those.

Spotted by eslint.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/49
2019-01-28 06:37:28 +01:00
Florian Müllner 1be7061da0 style: Fix stray/missing spaces
Spotted by eslint.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/49
2019-01-28 06:37:28 +01:00
Florian Müllner f75d1d75af style: Fix stray/missing semi-colons
Spotted by eslint.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/49
2019-01-28 06:37:28 +01:00
Florian Müllner 67f9e4c419 style: Use space after catch
We currently use a consistent style of not adding spaces in catch
clauses, however that's inconsistent with the style we use for any
other statement. There's not really a good reason to stick with it,
so switch to the style gjs/eslint default to.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/49
2019-01-28 06:37:28 +01:00
Florian Müllner aaeff6d12b style: Use camelCase for variable names
Spotted by eslint.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/49
2019-01-28 06:37:28 +01:00
Florian Müllner 912ba1e651 cleanup: Remove unhelpful unused init() argument
Virtually all extensions use the getCurrentExtension() helper instead
of the obscure init() argument, and we are no exception.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/49
2019-01-28 06:37:28 +01:00
Florian Müllner b741b1bbe2 cleanup: Remove empty init() functions
The method is optional, so there's no point at all in letting the
shell call an empty method during initialization.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/49
2019-01-28 06:37:28 +01:00
Florian Müllner d7414025a5 cleanup: Remove unused variables
Spotted by eslint.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/49
2019-01-28 06:37:28 +01:00
Florian Müllner a317d75f70 cleanups: Clean up unused imports
Spotted by eslint.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/49
2019-01-28 06:37:28 +01:00
Florian Müllner 194e294d2c user-theme: Don't use concatenation to build filenames
Since template strings were added in ES6, string concatenation is
considered bad style. There's a catch though: xgettext currently
has a nasty bug concerning the combination of backticks and slashes.
Avoid that issue by building filenames with the corresponding GLib
helper function.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/49
2019-01-28 06:37:28 +01:00
Florian Müllner a092da2527 apps-menu: Remove unused function parameter
It hasn't been used since commit d86044f383.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/49
2019-01-28 06:37:28 +01:00
Florian Müllner 4655cde002 build: Bump js-shell used for syntax checks
gjs moved from SpiderMonkey 52 to 60 during the last cycle, it's time
we follow suit.
2019-01-28 06:35:26 +01:00
Florian Müllner 0a979f5bfa extensions: Remove alternate-tab left-over
This fell through the cracks in commit d731534d04.
2019-01-28 02:11:07 +01:00
Pieter Schalk Schoeman d2046bb2c6 Update Afrikaans translation 2019-01-20 23:05:23 +00:00
Charles Monzat a2f40952b3 Update French translation
(cherry picked from commit 4231e4794ff1e30060b8ecdb404c02a829da3241)
2019-01-17 17:12:23 +00:00
Ryuta Fujii 29917bcb1b Update Japanese translation 2019-01-03 05:10:57 +00:00
Florian Müllner 1b881e1eaa Bump version to 3.31.2
Update NEWS.
2018-11-14 02:21:07 +01:00
Florian Müllner 40a8ab60f4 Update sass submodule 2018-11-14 02:21:07 +01:00
Piotr Drąg b684e756e2 Update POTFILES.in 2018-11-13 01:26:18 +01:00
Florian Müllner 7eae32eb76 workspace-indicator: Don't override ClutterActor.destroy()
Now that PanelMenu.Button was made an StWidget subclass, the destroy()
method actually maps to the ClutterActor method, and overriding it
results in warnings when the extension is disabled. So instead, use
the existing ::destroy handler.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/113
2018-11-12 23:42:06 +00:00
Florian Müllner 34c20e6176 workspace-indicator: Stop using compatibility actor property
PanelMenu.Button sets up a `this.actor = this` property for compatibility,
but let's reflect the actual new object hierarchy.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/113
2018-11-12 23:42:06 +00:00
Florian Müllner 62818e71e9 workspace-indicator: Adjust to gnome-shell changes
PanelMenu.Button is now a GObject subclass, so initialization must
happen in _init() rather than constructor().

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/113
2018-11-12 23:42:06 +00:00
Florian Müllner ee85839d60 drive-menu: Don't override ClutterActor.destroy()
Now that PanelMenu.Button was made an StWidget subclass, the destroy()
method actually maps to the ClutterActor method, and overriding it
results in warnings when the extension is disabled. So instead, use
the existing ::destroy handler.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/113
2018-11-12 23:42:06 +00:00
Florian Müllner d9932b8f55 drive-menu: Stop using compatibility actor property
PanelMenu.Button sets up a `this.actor = this` property for compatibility,
but let's reflect the actual new object hierarchy.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/113
2018-11-12 23:42:06 +00:00
Florian Müllner efa882080f drive-menu: Adjust to gnome-shell changes
PanelMenu.Button is now a GObject subclass, so initialization must
happen in _init() rather than constructor().

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/113
2018-11-12 23:42:06 +00:00
Florian Müllner 132b3b0509 places-menu: Don't override ClutterActor.destroy()
Now that PanelMenu.Button was made an StWidget subclass, the destroy()
method actually maps to the ClutterActor method, and overriding it
results in warnings when the extension is disabled. So instead, use
the existing ::destroy handler.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/113
2018-11-12 23:42:06 +00:00
Florian Müllner e5a0616a0a places-menu: Stop using compatibility actor property
PanelMenu.Button sets up a `this.actor = this` property for compatibility,
but let's reflect the actual new object hierarchy.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/113
2018-11-12 23:42:06 +00:00
Florian Müllner fbeb3cf1e9 places-menu: Adjust to gnome-shell changes
PanelMenu.Button is now a GObject subclass, so initialization must
happen in _init() rather than constructor().

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/113
2018-11-12 23:42:06 +00:00
Florian Müllner 072fbee7cb apps-menu: Stop using compatibility actor property
PanelMenu.Button sets up a `this.actor = this` property for compatibility,
but let's reflect the actual new object hierarchy.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/113
2018-11-12 23:42:06 +00:00
Florian Müllner e9928b3c08 apps-menu: Adjust to gnome-shell changes
PanelMenu.Button is now a GObject subclass, so initialization must
happen in _init() rather than constructor().

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/113
2018-11-12 23:42:06 +00:00
Florian Müllner 2af737a8c2 apps-menu: Remove pointless destroy() implementation
https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/113
2018-11-12 23:42:06 +00:00
Florian Müllner 321702fd15 window-list: Stop using compatibility actor property
PanelMenu.Button sets up a `this.actor = this` property for compatibility,
but let's reflect the actual new object hierarchy.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/113
2018-11-12 23:42:06 +00:00
Florian Müllner 60493faf96 window-list: Don't override ClutterActor.destroy()
Now that PanelMenu.Button was made an StWidget subclass, the destroy()
method actually maps to the ClutterActor method, and overriding it
results in warnings when the extension is disabled. So instead, use
the existing ::destroy handler.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/113
2018-11-12 23:42:06 +00:00
Florian Müllner 821cbf9328 window-list: Adjust to gnome-shell changes
PanelMenu.Button is now a GObject subclass, so initialization must
happen in _init() rather than constructor().

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/113
2018-11-12 23:42:06 +00:00
Florian Müllner cc0f167c0e extensions: Remove example extension
There are plenty of extension examples out there, no need to include
a sample extension that doesn't show-case any useful functionality
but puts additional burden on distributors to exclude it from packaged
extensions.
2018-11-13 00:19:45 +01:00
Florian Müllner d731534d04 extensions: Remove alternate-tab
Ever since GNOME 3.8 when gnome-shell started to provide the window
switcher functionality itself, the extension has only existed to
change the default behavior of the alt-tab shortcut in the classic
session. Now that we achieve this behavior with a per-desktop override,
there's no longer a need for the extension, so remove it altogether.

Users who prefer the window switcher over the default app switcher
can use the regular keyboard settings to assign a shortcut to the
"Switch windows" action.

https://bugzilla.gnome.org/show_bug.cgi?id=786496
2018-11-13 00:14:44 +01:00
Florian Müllner 94eba47358 Bump version to 3.30.1
Update NEWS.
2018-10-08 22:55:05 +02:00
Florian Müllner d34933de0b Update sass submodule 2018-10-08 22:50:52 +02:00
Florian Müllner 9410bdfad6 window-list: Ignore hidden buttons when scrolling
Window lists are per-monitor, so workspaces are implemented by
simply hiding all buttons that correspond to windows/apps on
other workspaces. That means we need to take the visibility
into account when handling scroll-events to switch through the
list, or else we'll end up switching "randomly" between workspaces.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/78
2018-10-06 16:05:46 +00:00
Florian Müllner d424b0f645 window-list: Minor clean-up
Modern javascript has explicit methods for locating the first
element of an array that meets a certain condition, use those
instead of manually looping over the array.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/78
2018-10-06 16:05:46 +00:00
Florian Müllner c0454db0c6 appsMenu: Consider scale-factor in height computation
Actor heights are in physical pixels, while CSS measures are in logical
pixels, so we need to adjust accordingly to prevent the scale factor
from being applied twice.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/102
2018-09-23 17:31:03 +02:00
Florian Müllner 913b2ba691 Bump version to 3.30.0 2018-09-04 00:10:36 +02:00
Florian Müllner ba51869b93 Bump version to 3.29.91
Update NEWS.
2018-08-20 15:48:53 +02:00
Florian Müllner ffe6110ea9 Stop using conditional catch statements
They are a mozilla extension that is going away in SpiderMonkey 60.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/90
2018-08-13 12:00:22 +02:00
Florian Müllner 8b1bcc9fed Bump version to 3.29.90
Update NEWS.
2018-08-01 03:47:30 +02:00
Florian Müllner ebad80c64d Update sass submodule 2018-08-01 03:46:05 +02:00
Florian Müllner 39caf951e0 data: Use override for default alt-tab keybindings
Per-desktop overrides aren't limited to keys in org.gnome.mutter, so
we can use them instead of the alternate-tab extension to default to
the window switcher in the classic session.

https://bugzilla.gnome.org/show_bug.cgi?id=786496
2018-07-09 19:18:54 +02:00
Florian Müllner ecf28e13b4 window-list: Use correct settings schemas
Override schemas are gone (yay!), so we can now simply use the original
schema independent from the used session mode.

https://bugzilla.gnome.org/show_bug.cgi?id=786496
2018-07-09 19:18:54 +02:00
Florian Müllner a01b44f7de data: Replace override schema with per-desktop override
GSettings now recognizes per-desktop overrides that can be used
to change schemas' default values for classic mode, so use that
instead of the separate override schema we currently use with
mutter's custom override mechanism.

https://bugzilla.gnome.org/show_bug.cgi?id=786496
2018-07-09 19:18:54 +02:00
140 changed files with 14300 additions and 13055 deletions
+3
View File
@@ -0,0 +1,3 @@
extends:
- ./lint/eslintrc-gjs.yml
- ./lint/eslintrc-shell.yml
+166 -8
View File
@@ -1,13 +1,171 @@
image: fedora:latest include:
- remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/bbe5232986c9b98eb1efe62484e07216f7d1a4df/templates/fedora.yml'
- remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/6f86b8bcb0cd5168c32779c4fea9a893c4a0c046/templates/ci-fairy.yml"
image: registry.gitlab.gnome.org/gnome/gnome-shell/fedora/35:2022-02-18.0
stages: stages:
- build - pre_review
- prepare
- review
- build
- deploy
before_script: default:
- dnf install -y meson gettext mozjs52-devel # Cancel jobs if newer commits are pushed to the branch
interruptible: true
# Auto-retry jobs in case of infra failures
retry:
max: 1
when:
- 'runner_system_failure'
- 'stuck_or_timeout_failure'
- 'scheduler_failure'
- 'api_failure'
build-shell-extensions: variables:
stage: build FDO_UPSTREAM_REPO: GNOME/gnome-shell-extensions
LINT_LOG: "eslint-report.xml"
workflow:
rules:
- if: '$CI_MERGE_REQUEST_IID'
- if: '$CI_COMMIT_TAG'
- if: '$CI_COMMIT_BRANCH'
.pipeline_guard: &pipeline_guard
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_TAG'
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
- if: '$CI_COMMIT_BRANCH =~ /^gnome-[0-9-]+$/'
- when: 'manual'
.gnome-shell-extensions.fedora:34:
variables:
FDO_DISTRIBUTION_VERSION: 34
FDO_DISTRIBUTION_TAG: '2021-08-31.0'
FDO_DISTRIBUTION_PACKAGES: >
meson git gettext sassc
.prereview_req: &prereview_req
needs:
- check_commit_log
- check-merge-request
check_commit_log:
extends:
- .fdo.ci-fairy
stage: pre_review
script: script:
- meson _build . - if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ;
- ninja -C _build test install then
ci-fairy check-commits --junit-xml=commit-message-junit-report.xml ;
else
echo "Not a merge request" ;
fi
<<: *pipeline_guard
artifacts:
expire_in: 1 week
paths:
- commit-message-junit-report.xml
reports:
junit: commit-message-junit-report.xml
check-merge-request:
extends:
- .fdo.ci-fairy
stage: pre_review
script:
- if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ;
then
ci-fairy check-merge-request --require-allow-collaboration --junit-xml=check-merge-request-report.xml ;
else
echo "Not a merge request" ;
fi
<<: *pipeline_guard
artifacts:
expire_in: 1 week
paths:
- check-merge-request-report.xml
reports:
junit: check-merge-request-report.xml
build-fedora-container:
extends:
- .fdo.container-build@fedora@x86_64
- .gnome-shell-extensions.fedora:34
stage: prepare
<<: *prereview_req
js_check:
stage: review
<<: *prereview_req
script:
- gjs-check-syntax
eslint:
stage: review
<<: *prereview_req
script:
- eslint -o $LINT_LOG -f junit --resolve-plugins-relative-to $(npm root -g) extensions
artifacts:
paths:
- ${LINT_LOG}
reports:
junit: ${LINT_LOG}
build-bundles:
stage: build
<<: *prereview_req
script:
- ./export-zips.sh
artifacts:
name: 'Extension bundles'
expose_as: 'Get Extension bundles here'
paths:
- zip-files/
fedora-build:
extends:
- .fdo.distribution-image@fedora
- .gnome-shell-extensions.fedora:34
stage: build
needs:
- build-fedora-container
before_script:
- git submodule update --init
script:
- meson setup build --werror -Dextension_set=all -Dclassic_mode=true
- meson compile -C build
- meson test -C build
- meson install -C build
artifacts:
paths:
- build
fedora-dist:
extends:
- .fdo.distribution-image@fedora
- .gnome-shell-extensions.fedora:34
stage: deploy
needs:
- fedora-build
before_script:
- git submodule update --init
script:
- meson dist -C build
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes:
- "**/meson.build"
- meson/*
fedora-dist-tarball:
extends: fedora-dist
artifacts:
expose_as: 'Get tarball here'
paths:
- build/meson-dist/$CI_PROJECT_NAME-$CI_COMMIT_TAG.tar.xz
rules:
- if: '$CI_COMMIT_TAG'
+13
View File
@@ -0,0 +1,13 @@
patterns:
deny:
- regex: '^$CI_MERGE_REQUEST_PROJECT_URL/(-/)?merge_requests/$CI_MERGE_REQUEST_IID$'
message: Commit message must not contain a link to its own merge request
- regex: '^extensions/'
message: Commit message subject should not be prefixed with 'extensions/', use the extension name instead
where: subject
- regex: '^[^:]+: [a-z]'
message: "Commit message subject should be properly Capitalized. E.g. 'window: Marginalize extradicity'"
where: subject
- regex: '^\S*\.js:'
message: Commit message subject prefix should not include .js
where: subject
+1 -1
View File
@@ -28,4 +28,4 @@ imports (like imports.lang or imports.dbus) and introspection,
the other for Shell API. Within the same group, put everything the other for Shell API. Within the same group, put everything
in alphabetic order. in alphabetic order.
[coding-style]: https://gitlab.gnome.org/GNOME/gjs/blob/master/doc/Style_Guide.md [coding-style]: https://gitlab.gnome.org/GNOME/gjs/blob/HEAD/doc/Style_Guide.md
+501
View File
@@ -1,3 +1,504 @@
43.alpha
========
Contributors:
Florian Müllner
Translators:
Marco Ciampa [it]
42.3
====
* screenshot-window-sizer: Fix reported sizes on wayland [Florian; !232]
* window-list: Improve touch support [Florian; !233]
Contributors:
Florian Müllner
42.2
====
* native-window-placement: Adjust to gnome-shell 42 changes [Florian; !229]
* window-list: Fix visibility on non-primary monitors [Jason; !230]
Contributors:
Jason Lynch, Florian Müllner
Translators:
Cheng-Chia Tseng [zh_TW]
42.1
====
* Misc. bug fixes and cleanups [Florian; !223, !222, !225]
Contributors:
Florian Müllner
Translators:
Milo Casagrande [it], Rūdolfs Mazurs [lv], Nathan Follens [nl],
Ngọc Quân Trần [vi], Zurab Kargareteli [ka]
42.0
====
Translators:
Philipp Kiemle [de], Balázs Úr [hu], Марко Костић [sr], sicklylife [ja],
Baurzhan Muftakhidinov [kk]
42.rc
=====
* Misc. bug fixes and cleanups [Florian; !215, !218]
Contributors:
Florian Müllner
Translators:
Marek Černocký [cs], Dušan Kazik [sk], Piotr Drąg [pl], Jiri Grönroos [fi],
Luna Jernberg [sv], Alan Mortensen [da], Charles Monzat [fr],
Changwoo Ryu [ko]
42.beta
=======
* workspace-indicator: Fix cancelling editing with Esc [Florian; !208]
* window-list: Update window tracking to avoid missing icons [Florian; !207]
* Use libadwaita for preferences [Florian; !209, !213]
* Adapt to Clutter grab API changes [Florian; !212]
* Misc. bug fixes and cleanups [Jan, Florian; !210, !214]
Contributors:
Jan Beich, Florian Müllner, Naala Nanba
Translators:
Boyuan Yang [zh_CN], Matej Urbančič [sl], Naala Nanba [ab],
Alexander Shopov [bg], Emin Tufan Çetin [tr]
42.alpha
========
* native-window-placement: Fix distorted layout in app grid [Sebastian; !189]
* window-list: Fix on-screen keyboard [Florian; !199]
* Misc. bug fixes and cleanups [Neal; Just; !195, !197]
Contributors:
Piotr Drąg, Neal Gompa, Sebastian Keller, Florian Müllner, Just Perfection
Translators:
Goran Vidović [hr], Sveinn í Felli [is], Yuri Chornoivan [uk],
Fabio Tomat [fur], Quentin PAGÈS [oc], Hugo Carvalho [pt],
Yaron Shahrabani [he], Jordi Mas i Hernandez [ca], MohammadSaleh Kamyab [fa],
Fran Dieguez [gl], Daniel Mustieles [es], Aleksandr Melman [ru],
Aurimas Černius [lt], Asier Sarasua Garmendia [eu], Kukuh Syafaat [id],
Rafael Fontenelle [pt_BR]
41.0
====
* Bump version
41.rc.1
=======
* Fix pre-generating stylesheets in tarball [Florian; !190]
Contributors:
Florian Müllner
41.rc
=====
* window-list: Adapt to overview-on-startup [Florian; !185]
* apps-menu: Use a custom 'toggle-menu' shortcut [Florian; !173]
* Misc. bug fixes and cleanups [Florian; !186]
Contributors:
Florian Müllner
41.beta
=======
* window-list: Extend reactive area of minimap to screen edges [Adam; !171]
* drive-menu: Improve detection of network mounts [Florian; !27, !176]
* Use distinct gettext domain for e.g.o uploads [Florian; #335]
* Misc. bug fixes and cleanups [Florian; !172, !174, !177, !167, !178, !180,
!181, !182, !183]
Contributors:
Marco Trevisan (Treviño), Adam Goode, Florian Müllner
Translators:
Hugo Carvalho [pt], Juliano de Souza Camargo [pt], Alexander Shopov [bg]
40.1
====
* Disable welcome dialog in classic session [Florian; !169]
* windowsNavigator: Adjust to a late gnome-shell change [Florian; !170]
Contributors:
Florian Müllner
Translators:
Ngọc Quân Trần [vi], Anders Jonsson [sv], Carmen Bianca BAKKER [eo],
Pawan Chitrakar [ne], Quentin PAGÈS [oc]
40.0
====
Translators:
Jiri Grönroos [fi]
40.rc
=====
* native-window-placement: Adjust to gnome-shell changes [Florian; !164]
* windows-navigator: Adjust to gnome-shell changes [Florian; !163]
* window-list, workspace-indicator: Only show previews for up to six workspaces
[Florian; !165]
* window-list, workspace-indicator: Improve workspace preview appearance
[Florian; !166]
Contributors:
Florian Müllner
Translators:
Fran Dieguez [gl]
40.beta
=======
* Add tooltips to workspace thumbnails [Florian; !155]
* Drop arrows from top bar menus [Florian; !156]
* drive-menu: Mark mounts that can be unmounted as removable [Michael; !152]
* Remove horizontal-workspaces extension [Florian; !158]
* Adjust to shell overview changes [Florian; !159, !160]
* Fix crashes [Daniel; !157]
* Misc. bug fixes and cleanups [Florian; !154, !161]
Contributors:
Michael Lawton, Florian Müllner, Daniel van Vugt
Translators:
Аляксей [be], A S Alam [pa]
40.alpha.1
==========
* Don't depend on sassc when building from tarball [Florian; !150]
* Port extensions preferences to GTK4 [Florian; !148]
* Misc. bug fixes and cleanups [Florian, Jonas; !149, !151, !153]
Contributors:
Jonas Dreßler, Florian Müllner
40.alpha
========
* window-list: Honor changes in skip-taskbar property [Sergio; !130]
* window-list, workspace-indicator: Adjust to 3.38 changes [Florian; !133]
* window-list, workspace-indicator: Improve previews in workspace thumbs
[Florian; #260, !142]
* auto-move: Improve behavior on multi-monitor setups [Florian; !135]
* windowNavigator: Adjust to 3.38 changes [Thun; #259]
* Misc. bug fixes and cleanups [Florian, Jonas Å, Jordan, Ray; !131, !136,
!137, !140, !141, !144, !146, !145]
Contributors:
Sergio Costas, Florian Müllner, Jordan Petridis, Thun Pin, Ray Strode,
Jonas Ådahl
Translators:
Fabio Tomat [fur], Jordi Mas [ca]
3.38.1
======
Contributors:
Yacine Bouklif, Florian Müllner
Translators:
Yacine Bouklif [kab], Cheng-Chia Tseng [zh_TW], Stas Solovey [ru],
Yosef Or Boczko [he]
3.38.0
======
Translators:
Balázs Meskó [hu], Alan Mortensen [da], Juliano Camargo [pt], Tim Sabsch [de],
Milo Casagrande [it], Rūdolfs Mazurs [lv]
3.37.92
=======
Translators:
Nathan Follens [nl], Zander Brown [en_GB], Aurimas Černius [lt],
Marek Černocký [cs], Changwoo Ryu [ko], Dušan Kazik [sk]
3.37.91
=======
Contributors:
Florian Müllner
Translators:
Fran Dieguez [gl], Akarshan Biswas [bn_IN], Kukuh Syafaat [id],
Piotr Drąg [pl], Rafael Fontenelle [pt_BR], Jiri Grönroos [fi],
Марко Костић [sr], Goran Vidović [hr]
3.37.90
=======
* Misc. bug fixes and cleanups [Florian, Piotr; !126, !128]
Contributors:
Piotr Drąg, Florian Müllner
Translators:
Fabio Tomat [fur], Efstathios Iosifidis [el], Anders Jonsson [sv],
Asier Sarasua Garmendia [eu], Alexandre Franke [fr]
3.37.3
======
* window-list, native-window-placement: Adjust to shell changes [Florian; !124]
Contributors:
Florian Müllner
Translators:
Jordi Mas [ca], sicklylife [ja], Boyuan Yang [zh_CN],
Baurzhan Muftakhidinov [kk]
3.37.2
======
* window-list, auto-move: Modernize preference dialogs [Florian; !121]
* Adjust to gnome-shell changes [Florian; !122]
Contributors:
Florian Müllner
Translators:
Cheng-Chia Tseng [zh_TW], Yuri Chornoivan [uk], Daniel Mustieles [es],
Emin Tufan Çetin [tr], Danial Behzadi [fa], Daniel Șerbănescu [ro],
Matej Urbančič [sl]
3.37.1
======
* drive-menu: Emphasize eject buttons [Florian; #223]
* user-theme: Add preference dialog [Florian; !117]
* window-list: Fix inconsistent state in preference dialog [Milan; !119]
* workspace-indicator: Overhaul preference dialog [Florian; !120]
* user-theme: Support session mode styles [Florian; !118]
* Misc. bug fixes and cleanups [Florian, Xiaoguang; !113, !106, !114, !116]
Contributors:
Milan Crha, Florian Müllner, Xiaoguang Wang
Translators:
Daniel Korostil [uk], Yosef Or Boczko [he], Kristjan SCHMIDT [eo],
Dz Chen [zh_CN], Danial Behzadi [fa], Yuri Chornoivan [uk],
Anders Jonsson [sv], Daniel Mustieles [es]
3.36.0
======
Contributors:
Florian Müllner
3.35.91
=======
Contributors:
Florian Müllner
Translators:
Zander Brown [en_GB]
3.35.90
=======
* Adjust to gnome-shell changes [Florian; !100, !101, !102]
* Force single-line window titles in window list [Florian; #202]
* Misc. bug fixes and cleanup [Florian; !104, !105]
Contributors:
Florian Müllner
Translators:
sicklylife [ja], Umarzuki Bin Mochlis Moktar [ms]
3.35.3
======
Translators:
Fran Dieguez [gl]
3.35.2
======
* Adjust to gnome-shell changes [Marco, Florian; !89, !95, !96]
* window-list, workspace-indicator: Exclude DESKTOP windows from previews
[Florian; !93]
* screenshot-window-sizer: Fix cycling through all valid sizes [Willy; !97]
Contributors:
Marco Trevisan (Treviño), Florian Müllner, Willy Stadnick
3.34.1
======
* Adjust to gnome-settings-daemon plugin removals [Xiaoguang; !94]
Contributors:
Florian Müllner, Xiaoguang Wang
Translators:
Nathan Follens [nl], Dušan Kazik [sk], Ask Hjorth Larsen [da],
Yi-Jyun Pan [zh_TW]
3.34.0
======
Translators:
Rafael Fontenelle [pt_BR], Efstathios Iosifidis [el], Milo Casagrande [it],
Sabri Ünal [tr]
3.33.92
=======
Translators:
Марко Костић [sr], Tim Sabsch [de], Rūdolfs Mazurs [lv], Matej Urbančič [sl],
Balázs Úr [hu], Claude Paroz [fr], Fran Dieguez [gl], Changwoo Ryu [ko],
Ryuta Fujii [ja], Fabio Tomat [fur], Goran Vidović [hr]
3.33.91
=======
* Misc. bug fixes and cleanups [Florian; !88, !90, !91, !92]
Contributors:
Florian Müllner
Translators:
Asier Sarasua Garmendia [eu], Anders Jonsson [sv], Marek Černocký [cs],
Kukuh Syafaat [id], Jiri Grönroos [fi], Florentina Mușat [ro],
Aurimas Černius [lt], Daniel Mustieles [es], Piotr Drąg [pl], Jordi Mas [ca],
Danial Behzadi [fa]
3.33.90
=======
* window-list: Support showing windows from all workspaces [Florian; #154]
* Misc. bug fixes and cleanups [Florian; !86, !87]
Contributors:
Florian Müllner
Translators:
Jor Teron [mjw]
3.33.4
======
* Make GNOME Classic more classic:
- Disable GNOME 3 overview [Florian; !69]
- Add window picker button to window list [Florian; !73, !80]
- Style improvements and fixes [Jakub; #169, !82]
- Support horizontal workspace layout in window list [Florian; !70]
- Add draggable previews to window list workspace switcher [Florian; !74]
- Arrange workspaces horizontally [Florian; !72]
* workspace-indicator: Support horizontal workspace layout [Florian; !71]
* workspace-indicator: Add draggable previews [Florian; !77]
* Misc. bug fixes and cleanups [Florian; !75, !76, !79, !78, #168, !84]
Contributors:
Florian Müllner, Jakub Steiner, Jor Teron
Translators:
Jor Teron [mjw]
3.33.3
======
* Misc. bug fixes [Florian, Marco; !67, !68]
Contributors:
Florian Müllner, Marco Trevisan (Treviño)
3.33.2
======
* Misc. bug fixes and cleanups [Florian; !66]
Contributors:
Florian Müllner
3.33.1
======
* Misc. bug fixes [Florian; !64]
Contributors:
Florian Müllner
3.32.1
======
* Fix windowsNavigator extension after ES6 port [Florian; #143]
* screenshot-window-sizer: Add phone screenshot sizes [Adrien; !65]
* Misc. bug fixes and cleanups [Fabian; !62]
Contributors:
Florian Müllner, Adrien Plazas, Fabian P. Schmidt
3.32.0
======
Contributors:
Florian Müllner
Translations:
Victor Ibragimov [tg], Kristjan SCHMIDT [eo], Mart Raudsepp [et]
3.31.92
=======
* Misc. bug fixes and cleanups [Florian; !57, !58, !59, !60]
Contributors:
Florian Müllner
3.31.91
=======
* apps-menu: Remove outdated legacy-tray handling [Florian; !53]
* user-theme: Allow using XDG user data dir [Tomasz; !55]
* Misc. bug fixes and cleanups [Florian; !52, !54, !56]
Contributors:
Tomasz Gąsior, Florian Müllner
Translators:
Matej Urbančič [sl], Gun Chleoc [gd]
3.31.90
=======
* Misc. bug fixes and cleanups [Florian; !49, !50, !51]
Contributors:
Florian Müllner
Translators:
Ryuta Fujii [ja], Charles Monzat [fr], Pieter Schalk Schoeman [af]
3.31.2
======
* Remove obsolete alternate-tab extension [Florian; #786496]
* Adjust to gnome-shell changes [Florian; #113]
Contributors:
Florian Müllner
3.30.1
======
* apps-menu: Fix height on HiDPI systems [Florian; #102]
* window-list: Only switch between windows on active workspace when scrolling
[Florian; #78]
Contributors:
Florian Müllner
3.30.0
======
* Bump version
3.29.91
=======
* Misc. bug fixes [Florian; #90]
Contributors:
Florian Müllner
3.29.90
=======
* Misc. bug fixes [Florian; #786496]
Contributors:
Florian Müllner
3.29.3 3.29.3
====== ======
* Adjust to global.screen removal [Jonas; #759538] * Adjust to global.screen removal [Jonas; #759538]
+17 -5
View File
@@ -15,9 +15,11 @@ Bugs should be reported to the GNOME [bug tracking system][bug-tracker].
## Extensions ## Extensions
* alternate-tab * alternate-tab (**OBSOLETE**)
Lets you use classic Alt+Tab (window-based instead of app-based) in GNOME Shell. Lets you use classic Alt+Tab (window-based instead of app-based) in GNOME Shell.
This extension is obsolete since GNOME 3.30, see [this blogpost][alternatetab-post]
for further details.
* apps-menu * apps-menu
@@ -34,10 +36,6 @@ GSettings key.
Shows a status menu for rapid unmount and power off of external storage devices Shows a status menu for rapid unmount and power off of external storage devices
(i.e. pendrives) (i.e. pendrives)
* example
A minimal example illustrating how to write extensions.
* launch-new-instance * launch-new-instance
Changes application icons to always launch a new instance when activated. Changes application icons to always launch a new instance when activated.
@@ -71,6 +69,19 @@ GSettings key.
Adds a simple workspace switcher to the top bar. Adds a simple workspace switcher to the top bar.
## Default branch
The default development branch is `main`. If you still have a local
checkout under the old name, use:
```sh
git checkout master
git branch -m master main
git fetch
git branch --unset-upstream
git branch -u origin/master
git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/main
```
## License ## License
GNOME Shell Extensions are distributed under the terms of the GNU General GNOME Shell Extensions are distributed under the terms of the GNU General
@@ -82,3 +93,4 @@ file for details.
[shell-page]: https://wiki.gnome.org/Projects/GnomeShell [shell-page]: https://wiki.gnome.org/Projects/GnomeShell
[bug-tracker]: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues [bug-tracker]: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues
[license]: COPYING [license]: COPYING
[alternatetab-post]: https://blogs.gnome.org/fmuellner/2018/10/11/the-future-of-alternatetab-and-why-you-need-not-worry/
@@ -0,0 +1,9 @@
[org.gnome.mutter:GNOME-Classic]
dynamic-workspaces=false
[org.gnome.desktop.wm.preferences:GNOME-Classic]
button-layout='appmenu:minimize,maximize,close'
[org.gnome.desktop.wm.keybindings:GNOME-Classic]
switch-applications=[]
switch-windows=['<Super>Tab','<Alt>Tab']
-178
View File
@@ -1,178 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
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:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="24"
height="24"
id="svg10621"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="calendar-today.svg">
<defs
id="defs10623">
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient34508-1-3"
id="radialGradient99561-1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
cx="51"
cy="30"
fx="51"
fy="30"
r="42" />
<linearGradient
inkscape:collect="always"
id="linearGradient34508-1-3">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop34510-1-9" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop34512-4-5" />
</linearGradient>
<radialGradient
r="42"
fy="30"
fx="51"
cy="30"
cx="51"
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
gradientUnits="userSpaceOnUse"
id="radialGradient10592"
xlink:href="#linearGradient34508-1-3"
inkscape:collect="always" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient34508-1-3"
id="radialGradient3770"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
cx="51"
cy="30"
fx="51"
fy="30"
r="42" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient34508-1-3"
id="radialGradient3001"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
cx="51"
cy="30"
fx="51"
fy="30"
r="42" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient34508-1-3"
id="radialGradient3007"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
cx="51"
cy="30"
fx="51"
fy="30"
r="42" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient34508-1-3"
id="radialGradient3067"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
cx="51"
cy="30"
fx="51"
fy="30"
r="42" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient34508-1-3"
id="radialGradient3072"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
cx="51"
cy="30"
fx="51"
fy="30"
r="42" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient34508-1-3"
id="radialGradient2997"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
cx="51"
cy="30"
fx="51"
fy="30"
r="42" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#d3d3d3"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="8"
inkscape:cx="-55.349829"
inkscape:cy="-31.442864"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="2133"
inkscape:window-height="1241"
inkscape:window-x="238"
inkscape:window-y="89"
inkscape:window-maximized="0"
borderlayer="true"
inkscape:showpageshadow="false">
<inkscape:grid
type="xygrid"
id="grid3109"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<metadata
id="metadata10626">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-469.08263,-537.99307)">
<circle
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#555753;fill-opacity:0.23756906;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="path7305"
cx="481.57138"
cy="559.4649"
r="1.5" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.6 KiB

-262
View File
@@ -1,262 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
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:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="65"
height="22"
id="svg10865"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="classic-toggle-off-intl.svg">
<defs
id="defs10867">
<linearGradient
id="linearGradient62852-6-5">
<stop
id="stop62854-6-7"
offset="0"
style="stop-color:#ffffff;stop-opacity:1" />
<stop
style="stop-color:#eeeeec;stop-opacity:1"
offset="0.97726452"
id="stop62858-8-0" />
<stop
id="stop62860-5-3"
offset="1"
style="stop-color:#f5f5f4;stop-opacity:1" />
</linearGradient>
<inkscape:path-effect
is_visible="true"
id="path-effect62989-8-0"
effect="spiro" />
<linearGradient
id="linearGradient62821-5-8">
<stop
id="stop62823-2-4"
offset="0"
style="stop-color:#d1d3d1;stop-opacity:1;" />
<stop
id="stop62825-3-8"
offset="1"
style="stop-color:#ebebeb;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient62852-6-5-3">
<stop
id="stop62854-6-7-6"
offset="0"
style="stop-color:#ffffff;stop-opacity:1" />
<stop
style="stop-color:#eeeeec;stop-opacity:1"
offset="0.97726452"
id="stop62858-8-0-3" />
<stop
id="stop62860-5-3-9"
offset="1"
style="stop-color:#f5f5f4;stop-opacity:1" />
</linearGradient>
<inkscape:path-effect
effect="spiro"
id="path-effect62829-6-8-0"
is_visible="true" />
<linearGradient
id="linearGradient62821-5-8-1">
<stop
id="stop62823-2-4-2"
offset="0"
style="stop-color:#d1d3d1;stop-opacity:1;" />
<stop
id="stop62825-3-8-9"
offset="1"
style="stop-color:#ebebeb;stop-opacity:1;" />
</linearGradient>
<linearGradient
y2="507.42715"
x2="702.58966"
y1="484.49405"
x1="702.58966"
gradientTransform="matrix(1.3066667,0,0,1,-841.64667,-483)"
gradientUnits="userSpaceOnUse"
id="linearGradient11647"
xlink:href="#linearGradient62821-5-8-1"
inkscape:collect="always" />
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath65663">
<rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:new"
id="rect65665"
width="96.999924"
height="24.292892"
x="708.71954"
y="406.96973"
rx="3.1139846"
ry="1.9595497"
inkscape:export-filename="/home/lapo.fedora/SparkleShare/gnome-mockups/content selection/content-selection.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
</clipPath>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5378-2-5-9-9-0-80-7-6-8-4-5-7-3-6-2-9"
id="linearGradient65582"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.5250827,0,0,0.72144839,620.16092,156.4917)"
x1="207.17195"
y1="497.39584"
x2="207.17195"
y2="531.48669" />
<linearGradient
inkscape:collect="always"
id="linearGradient5378-2-5-9-9-0-80-7-6-8-4-5-7-3-6-2-9">
<stop
style="stop-color:#f4f6f4;stop-opacity:1"
offset="0"
id="stop5380-6-1-1-9-3-6-3-6-45-6-4-4-9-9-8-9" />
<stop
style="stop-color:#d7dad7;stop-opacity:1"
offset="1"
id="stop5382-06-3-6-4-2-4-6-8-0-9-6-8-7-7-6-7" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient65584">
<stop
style="stop-color:#f1f1f1;stop-opacity:1"
offset="0"
id="stop65586" />
<stop
style="stop-color:#a7aba7;stop-opacity:0;"
offset="1"
id="stop65588" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5378-2-5-9-9-0-80-7-6-8-4-5-7-3-6-2-9"
id="linearGradient65582-5"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.5250827,0,0,0.72144839,-75.348673,-359.16458)"
x1="207.17195"
y1="497.39584"
x2="207.17195"
y2="531.48669" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient65584"
id="linearGradient65590-6"
x1="716.62506"
y1="537.23358"
x2="716.62506"
y2="535.23358"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0139469,0,0,1.0139469,-705.52354,-521.99915)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="23.565368"
inkscape:cy="19.596892"
inkscape:document-units="px"
inkscape:current-layer="g62929"
showgrid="false"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:snap-others="false"
inkscape:window-width="2560"
inkscape:window-height="1342"
inkscape:window-x="0"
inkscape:window-y="28"
inkscape:window-maximized="1"
showborder="false">
<inkscape:grid
type="xygrid"
id="grid11512" />
</sodipodi:namedview>
<metadata
id="metadata10870">
<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 />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1030.3622)">
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/lapo.fedora/SparkleShare/gnome-mockups/system-settings/network/network-panel-summary.png"
style="display:inline"
id="g62929"
transform="translate(-643.91421,517.29894)">
<g
transform="translate(0,30)"
id="g62931">
<rect
style="fill:#cecece;fill-opacity:1;stroke:#a7a7a7;stroke-width:1;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill-rule:nonzero;stroke-linejoin:miter;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new;clip-rule:nonzero;opacity:1;isolation:auto;mix-blend-mode:normal;solid-color:#000000;solid-opacity:1;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;filter-blend-mode:normal;filter-gaussianBlur-deviation:0;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto"
id="rect62935"
width="63.856125"
height="21.093594"
x="644.5"
y="483.5"
rx="2"
ry="2" />
<rect
style="fill:url(#linearGradient65582);fill-opacity:1;stroke:#a7a7a7;stroke-width:0.97313344;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;color:#000000;clip-rule:nonzero;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill-rule:nonzero;stroke-linejoin:miter;stroke-dashoffset:0;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;filter-blend-mode:normal;filter-gaussianBlur-deviation:0;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="rect62937"
width="29.97398"
height="17.022524"
x="646.55896"
y="485.61429"
rx="1"
ry="1" />
<g
transform="translate(-38.048674,-1.9445437)"
id="g62939" />
<path
inkscape:connector-curvature="0"
inkscape:original-d="m 647.78241,486.57192 27.73523,0"
inkscape:path-effect="#path-effect62989-8-0"
id="path62947"
d="m 647.78241,486.57192 27.73523,0"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g11665"
transform="matrix(0.78906097,0,0,0.78906097,178.78814,111.57844)" />
<path
sodipodi:type="arc"
id="path3016"
sodipodi:cx="50.375"
sodipodi:cy="11.875"
sodipodi:rx="4.625"
sodipodi:ry="4.625"
d="M 55,11.875 A 4.625,4.625 0 0 1 50.375,16.5 4.625,4.625 0 0 1 45.75,11.875 4.625,4.625 0 0 1 50.375,7.25 4.625,4.625 0 0 1 55,11.875 Z"
transform="translate(642.41421,512.02037)"
style="fill:none;stroke:#2e3436;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 9.5 KiB

-222
View File
@@ -1,222 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
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:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="65"
height="22"
id="svg10865"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="classic-toggle-off-us.svg">
<defs
id="defs10867">
<linearGradient
id="linearGradient62852-6-5">
<stop
id="stop62854-6-7"
offset="0"
style="stop-color:#ffffff;stop-opacity:1" />
<stop
style="stop-color:#eeeeec;stop-opacity:1"
offset="0.97726452"
id="stop62858-8-0" />
<stop
id="stop62860-5-3"
offset="1"
style="stop-color:#f5f5f4;stop-opacity:1" />
</linearGradient>
<inkscape:path-effect
is_visible="true"
id="path-effect62989-8-0"
effect="spiro" />
<linearGradient
id="linearGradient62821-5-8">
<stop
id="stop62823-2-4"
offset="0"
style="stop-color:#d1d3d1;stop-opacity:1;" />
<stop
id="stop62825-3-8"
offset="1"
style="stop-color:#ebebeb;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient62852-6-5-3">
<stop
id="stop62854-6-7-6"
offset="0"
style="stop-color:#ffffff;stop-opacity:1" />
<stop
style="stop-color:#eeeeec;stop-opacity:1"
offset="0.97726452"
id="stop62858-8-0-3" />
<stop
id="stop62860-5-3-9"
offset="1"
style="stop-color:#f5f5f4;stop-opacity:1" />
</linearGradient>
<inkscape:path-effect
effect="spiro"
id="path-effect62829-6-8-0"
is_visible="true" />
<linearGradient
id="linearGradient62821-5-8-1">
<stop
id="stop62823-2-4-2"
offset="0"
style="stop-color:#d1d3d1;stop-opacity:1;" />
<stop
id="stop62825-3-8-9"
offset="1"
style="stop-color:#ebebeb;stop-opacity:1;" />
</linearGradient>
<linearGradient
y2="507.42715"
x2="702.58966"
y1="484.49405"
x1="702.58966"
gradientTransform="matrix(1.3066667,0,0,1,-841.64667,-483)"
gradientUnits="userSpaceOnUse"
id="linearGradient11647"
xlink:href="#linearGradient62821-5-8-1"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5378-2-5-9-9-0-80-7-6-8-4-5-7-3-6-2-9"
id="linearGradient65582"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.5250827,0,0,0.72144839,620.16092,156.4917)"
x1="207.17195"
y1="497.39584"
x2="207.17195"
y2="531.48669" />
<linearGradient
inkscape:collect="always"
id="linearGradient5378-2-5-9-9-0-80-7-6-8-4-5-7-3-6-2-9">
<stop
style="stop-color:#f4f6f4;stop-opacity:1"
offset="0"
id="stop5380-6-1-1-9-3-6-3-6-45-6-4-4-9-9-8-9" />
<stop
style="stop-color:#d7dad7;stop-opacity:1"
offset="1"
id="stop5382-06-3-6-4-2-4-6-8-0-9-6-8-7-7-6-7" />
</linearGradient>
<inkscape:path-effect
is_visible="true"
id="path-effect62989-8-0-6"
effect="spiro" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="78.222729"
inkscape:cy="-3.6620078"
inkscape:document-units="px"
inkscape:current-layer="g62929"
showgrid="false"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:snap-others="false"
inkscape:window-width="2560"
inkscape:window-height="1342"
inkscape:window-x="0"
inkscape:window-y="28"
inkscape:window-maximized="1"
showborder="false">
<inkscape:grid
type="xygrid"
id="grid11512" />
</sodipodi:namedview>
<metadata
id="metadata10870">
<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 />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1030.3622)">
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/lapo.fedora/SparkleShare/gnome-mockups/system-settings/network/network-panel-summary.png"
style="display:inline"
id="g62929"
transform="translate(-643.91421,517.29894)">
<g
style="display:inline"
transform="translate(0,30)"
id="g62931">
<rect
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecece;fill-opacity:1;fill-rule:nonzero;stroke:#a7a7a7;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
id="rect62935"
width="63.856125"
height="21.093594"
x="644.5"
y="483.5"
rx="2"
ry="2" />
<rect
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient65582);fill-opacity:1;fill-rule:nonzero;stroke:#a7a7a7;stroke-width:0.97313344;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="rect62937"
width="29.97398"
height="17.022524"
x="646.55896"
y="485.61429"
rx="1"
ry="1" />
<g
transform="translate(-38.048674,-1.9445437)"
id="g62939" />
<path
inkscape:connector-curvature="0"
inkscape:original-d="m 647.78241,486.57192 27.73523,0"
inkscape:path-effect="#path-effect62989-8-0-6"
id="path62947"
d="m 647.78241,486.57192 27.73523,0"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<g
id="g11665"
transform="matrix(0.78906097,0,0,0.78906097,167.78814,111.57844)">
<text
xml:space="preserve"
style="font-size:12.69556618px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#2e3436;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
x="644.46393"
y="533.87158"
id="text62949"
sodipodi:linespacing="125%"
transform="scale(1.0113976,0.98873084)"><tspan
sodipodi:role="line"
id="tspan62951"
x="644.46393"
y="533.87158">OFF</tspan></text>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8.0 KiB

-175
View File
@@ -1,175 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
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:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="65"
height="22"
id="svg10865"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="classic-toggle-on-intl.svg">
<defs
id="defs10867">
<linearGradient
id="linearGradient62852-6-5">
<stop
id="stop62854-6-7"
offset="0"
style="stop-color:#ffffff;stop-opacity:1" />
<stop
style="stop-color:#eeeeec;stop-opacity:1"
offset="0.97726452"
id="stop62858-8-0" />
<stop
id="stop62860-5-3"
offset="1"
style="stop-color:#f5f5f4;stop-opacity:1" />
</linearGradient>
<inkscape:path-effect
is_visible="true"
id="path-effect62989-8-0"
effect="spiro" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient38513"
id="linearGradient38519"
x1="690"
y1="506.25049"
x2="690"
y2="480.93414"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
id="linearGradient38513">
<stop
style="stop-color:#729fcf;stop-opacity:1"
offset="0"
id="stop38515" />
<stop
style="stop-color:#6f9ccd;stop-opacity:1"
offset="1"
id="stop38517" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient62852-6-5"
id="linearGradient62981-1-1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.85639946,0,0,0.81059641,57.747905,92.132229)"
x1="740"
y1="486.10501"
x2="740"
y2="505.3204" />
<inkscape:path-effect
is_visible="true"
id="path-effect62989-8-0-8"
effect="spiro" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="9.3225163"
inkscape:cy="-0.1588306"
inkscape:document-units="px"
inkscape:current-layer="g62929"
showgrid="false"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:snap-others="false"
inkscape:window-width="2560"
inkscape:window-height="1342"
inkscape:window-x="0"
inkscape:window-y="28"
inkscape:window-maximized="1"
showborder="false">
<inkscape:grid
type="xygrid"
id="grid11512" />
</sodipodi:namedview>
<metadata
id="metadata10870">
<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 />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1030.3622)">
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/lapo.fedora/SparkleShare/gnome-mockups/system-settings/network/network-panel-summary.png"
style="display:inline"
id="g62929"
transform="translate(-643.91421,517.29894)">
<g
style="display:inline"
transform="translate(0,30)"
id="g62931">
<rect
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient38519);fill-opacity:1;fill-rule:nonzero;stroke:#3465a4;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="rect62935"
width="63.856125"
height="21.093594"
x="644.5"
y="483.5"
rx="2"
ry="2" />
<rect
style="display:inline;fill:url(#linearGradient62981-1-1);fill-opacity:1;stroke:#3465a4;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect62937"
width="29.97398"
height="17.022524"
x="676.49646"
y="485.67679"
rx="1"
ry="1" />
<g
transform="translate(-7.9861743,-1.9445437)"
id="g62939" />
<path
inkscape:connector-curvature="0"
inkscape:original-d="m 677.59874,486.57192 27.94632,0"
inkscape:path-effect="#path-effect62989-8-0-8"
id="path62947"
d="m 677.59874,486.57192 27.94632,0"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<path
inkscape:connector-curvature="0"
id="path4444"
d="m 661.91421,522.09451 0,7"
style="fill:#3465a4;stroke:#3465a4;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;color:#000000;fill-opacity:1;fill-rule:nonzero;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<path
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
d="m 18,7.96875 0,7"
id="path3922"
inkscape:connector-curvature="0"
transform="translate(643.91421,513.06326)" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.2 KiB

-209
View File
@@ -1,209 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
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:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="65"
height="22"
id="svg10865"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="classic-toggle-on-us.svg">
<defs
id="defs10867">
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient62852-6-5"
id="linearGradient62981-1-1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.85639946,0,0,0.81059641,57.747905,92.132229)"
x1="740"
y1="486.10501"
x2="740"
y2="505.3204" />
<linearGradient
id="linearGradient62852-6-5">
<stop
id="stop62854-6-7"
offset="0"
style="stop-color:#ffffff;stop-opacity:1" />
<stop
style="stop-color:#eeeeec;stop-opacity:1"
offset="0.97726452"
id="stop62858-8-0" />
<stop
id="stop62860-5-3"
offset="1"
style="stop-color:#f5f5f4;stop-opacity:1" />
</linearGradient>
<inkscape:path-effect
is_visible="true"
id="path-effect62989-8-0"
effect="spiro" />
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath65663">
<rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:new"
id="rect65665"
width="96.999924"
height="24.292892"
x="708.71954"
y="406.96973"
rx="3.1139846"
ry="1.9595497"
inkscape:export-filename="/home/lapo.fedora/SparkleShare/gnome-mockups/content selection/content-selection.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
</clipPath>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient38513"
id="linearGradient38519"
x1="690"
y1="506.25049"
x2="690"
y2="480.93414"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
id="linearGradient38513">
<stop
style="stop-color:#729fcf;stop-opacity:1"
offset="0"
id="stop38515" />
<stop
style="stop-color:#6f9ccd;stop-opacity:1"
offset="1"
id="stop38517" />
</linearGradient>
<linearGradient
gradientTransform="translate(-644,-483)"
inkscape:collect="always"
xlink:href="#linearGradient38513"
id="linearGradient38519-3"
x1="690"
y1="506.25049"
x2="690"
y2="480.93414"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="20.775745"
inkscape:cy="7.0434022"
inkscape:document-units="px"
inkscape:current-layer="g62929"
showgrid="false"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:snap-others="false"
inkscape:window-width="2560"
inkscape:window-height="1342"
inkscape:window-x="0"
inkscape:window-y="28"
inkscape:window-maximized="1"
showborder="false">
<inkscape:grid
type="xygrid"
id="grid11512" />
</sodipodi:namedview>
<metadata
id="metadata10870">
<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 />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1030.3622)">
<g
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/lapo.fedora/SparkleShare/gnome-mockups/system-settings/network/network-panel-summary.png"
style="display:inline"
id="g62929"
transform="translate(-643.91421,517.29894)">
<g
transform="translate(0,30)"
id="g62931">
<rect
style="fill:url(#linearGradient38519);fill-opacity:1;stroke:#3465a4;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill-rule:nonzero;stroke-linejoin:miter;stroke-dashoffset:0;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;filter-blend-mode:normal;filter-gaussianBlur-deviation:0;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="rect62935"
width="63.856125"
height="21.093594"
x="644.5"
y="483.5"
rx="2"
ry="2" />
<rect
style="fill:url(#linearGradient62981-1-1);fill-opacity:1;stroke:#3465a4;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
id="rect62937"
width="29.97398"
height="17.022524"
x="676.49646"
y="485.67679"
rx="1"
ry="1" />
<g
transform="translate(-7.9861743,-1.9445437)"
id="g62939" />
<path
inkscape:connector-curvature="0"
inkscape:original-d="m 677.59874,486.57192 27.94632,0"
inkscape:path-effect="#path-effect62989-8-0"
id="path62947"
d="m 677.59874,486.57192 27.94632,0"
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<text
transform="scale(1.0113976,0.98873084)"
sodipodi:linespacing="125%"
id="text62949-7"
y="534.96918"
x="646.71399"
style="font-size:10.01104736px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#3465a4;fill-opacity:1;stroke:none;display:inline;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold;"
xml:space="preserve"><tspan
y="534.96918"
x="646.71399"
id="tspan62951-7"
sodipodi:role="line">ON</tspan></text>
<text
transform="scale(1.0113976,0.98873084)"
sodipodi:linespacing="125%"
id="text62949"
y="533.94482"
x="646.71399"
style="font-size:10.01104736px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
xml:space="preserve"><tspan
y="533.94482"
x="646.71399"
id="tspan62951"
sodipodi:role="line">ON</tspan></text>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.5 KiB

+3 -1
View File
@@ -1,8 +1,10 @@
{ {
"parentMode": "user", "parentMode": "user",
"stylesheetName": "gnome-classic.css", "stylesheetName": "gnome-classic.css",
"hasOverview": false,
"showWelcomeDialog": false,
"enabledExtensions": [@CLASSIC_EXTENSIONS@], "enabledExtensions": [@CLASSIC_EXTENSIONS@],
"panel": { "left": ["activities", "appMenu"], "panel": { "left": ["appMenu"],
"center": [], "center": [],
"right": ["a11y", "keyboard", "dateMenu", "aggregateMenu"] "right": ["a11y", "keyboard", "dateMenu", "aggregateMenu"]
} }
+8
View File
@@ -0,0 +1,8 @@
[Desktop Entry]
Name=GNOME Classic on Wayland
Comment=This session logs you into GNOME Classic
Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session
TryExec=gnome-session
Type=Application
DesktopNames=GNOME-Classic;GNOME;
X-GDM-SessionRegisters=true
+8
View File
@@ -0,0 +1,8 @@
[Desktop Entry]
Name=GNOME Classic on Xorg
Comment=This session logs you into GNOME Classic
Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session
TryExec=gnome-session
Type=Application
DesktopNames=GNOME-Classic;GNOME;
X-GDM-SessionRegisters=true
+2 -1
View File
@@ -1,7 +1,8 @@
[Desktop Entry] [Desktop Entry]
Name=GNOME Classic Name=GNOME Classic
Comment=This session logs you into GNOME Classic Comment=This session logs you into GNOME Classic
Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session
TryExec=gnome-session TryExec=gnome-session
Type=Application Type=Application
DesktopNames=GNOME-Classic;GNOME; DesktopNames=GNOME-Classic;GNOME;
X-GDM-SessionRegisters=true
+26 -36
View File
@@ -4,6 +4,7 @@ $variant: 'light';
@import "gnome-shell-sass/_colors"; //use gtk colors @import "gnome-shell-sass/_colors"; //use gtk colors
@import "gnome-shell-sass/_drawing"; @import "gnome-shell-sass/_drawing";
@import "gnome-shell-sass/_common"; @import "gnome-shell-sass/_common";
@import "gnome-shell-sass/_widgets";
/* Overrides */ /* Overrides */
@@ -32,18 +33,32 @@ $variant: 'light';
font-weight: normal; font-weight: normal;
color: $fg_color; color: $fg_color;
text-shadow: none; text-shadow: none;
&:active, &:overview, &:focus, &:checked { transition-duration: 0ms;
// Trick due to St limitations. It needs a background to draw border: 0;
// a box-shadow border-radius: 0px;
background-color: $selected_bg_color !important;
color: $selected_fg_color !important; &.clock-display {
box-shadow: none; .clock {
& > .system-status-icon { icon-shadow: none; } transition-duration: 0ms;
border: 0;
border-radius: 0px;
}
} }
&:hover { &:hover {
color: lighten($fg_color,10%);
text-shadow: none; text-shadow: none;
& .system-status-icon { icon-shadow: none; } & .system-status-icon { icon-shadow: none; }
} }
&:active, &:overview, &:focus, &:checked {
// Trick due to St limitations. It needs a background to draw
// a box-shadow
background-color: $selected_bg_color;
color: $selected_fg_color;
box-shadow: none;
& > .system-status-icon { icon-shadow: none; }
}
.app-menu-icon { width: 0; height: 0; margin: 0; } // shell's display:none; :D .app-menu-icon { width: 0; height: 0; margin: 0; } // shell's display:none; :D
.system-status-icon { .system-status-icon {
@@ -60,18 +75,17 @@ $variant: 'light';
&.lock-screen, &.lock-screen,
&.unlock-screen, &.unlock-screen,
&.login-screen { &.login-screen {
background-color: transparentize($_bubble_bg_color, 0.5); background-color: transparentize($bg_color, 0.5);
background-gradient-start: transparentize($_bubble_bg_color, 0.5); background-gradient-start: transparentize($bg_color, 0.5);
background-gradient-end: transparentize($_bubble_bg_color, 0.5); background-gradient-end: transparentize($bg_color, 0.5);
border-bottom: none; border-bottom: none;
.panel-button { color: $osd_fg_color; } .panel-button { color: $osd_fg_color; }
} }
.popup-menu-arrow { width: 0; height: 0; } // shell's display: none;
} }
#appMenu { #appMenu {
padding: 0 8px 0 8px;
spinner-image: url("classic-process-working.svg"); spinner-image: url("classic-process-working.svg");
.panel-status-menu-box { padding: 0; }
} }
.tile-preview-left.on-primary, .tile-preview-left.on-primary,
.tile-preview-right.on-primary, .tile-preview-right.on-primary,
@@ -79,27 +93,3 @@ $variant: 'light';
/* keep in sync with -panel-corner-radius */ /* keep in sync with -panel-corner-radius */
border-radius: 0; border-radius: 0;
} }
@each $v in us, intl {
.toggle-switch-#{$v} {
background-image: url("classic-toggle-off-#{$v}.svg");
&:checked { background-image: url("classic-toggle-on-#{$v}.svg"); }
}
}
.calendar-day-with-events {
background-image: url("calendar-today.svg");
}
.message-list-clear-button.button {
color: $fg_color
}
.notification-banner {
background-color: $bg_color !important;
color: $fg_color;
.notification-button {
background-color: darken($bg_color,5%);
&:hover, &focus { background-color: darken($bg_color,2%); }
}
}
-3
View File
@@ -1,3 +0,0 @@
[GNOME Session]
Name=GNOME Classic
RequiredComponents=org.gnome.Shell;org.gnome.SettingsDaemon.A11ySettings;org.gnome.SettingsDaemon.Clipboard;org.gnome.SettingsDaemon.Color;org.gnome.SettingsDaemon.Datetime;org.gnome.SettingsDaemon.Housekeeping;org.gnome.SettingsDaemon.Keyboard;org.gnome.SettingsDaemon.MediaKeys;org.gnome.SettingsDaemon.Mouse;org.gnome.SettingsDaemon.Power;org.gnome.SettingsDaemon.PrintNotifications;org.gnome.SettingsDaemon.Rfkill;org.gnome.SettingsDaemon.ScreensaverProxy;org.gnome.SettingsDaemon.Sharing;org.gnome.SettingsDaemon.Smartcard;org.gnome.SettingsDaemon.Sound;org.gnome.SettingsDaemon.Wacom;org.gnome.SettingsDaemon.XSettings;
+80 -30
View File
@@ -1,17 +1,33 @@
sessions = [ session_desktop_base = 'gnome-classic'
['gnome-classic.session.desktop.in', sessiondir],
['gnome-classic.desktop.in', xsessiondir] session_desktops = [
session_desktop_base,
session_desktop_base + '-xorg',
session_desktop_base + '-wayland',
] ]
foreach s : sessions
name_array = s[0].split('.') foreach name: session_desktops
i18n.merge_file('', session_desktop = name + '.desktop'
input: s[0], if name.endswith('-xorg')
output: '.'.join([name_array[0], name_array[1]]), session_instdir = xsessiondir
po_dir: '../po', elif name.endswith('-wayland')
install: true, session_instdir = wlsessiondir
install_dir: s[1], else
type: 'desktop' # FIXME: The same target can not be copied into two directories.
) # There is a workaround in meson/session-post-install.py until proper
# solution arises:
# https://github.com/mesonbuild/meson/issues/2416
session_instdir = xsessiondir
#session_instdir = [ xesssiondir, wlsessiondir ]
endif
i18n.merge_file(
input: session_desktop + '.in',
output: session_desktop,
po_dir: '../po',
install: true,
install_dir: session_instdir,
type: 'desktop'
)
endforeach endforeach
classic_uuids = [] classic_uuids = []
@@ -34,30 +50,64 @@ theme_sources = files(
'gnome-shell-sass/_colors.scss', 'gnome-shell-sass/_colors.scss',
'gnome-shell-sass/_common.scss', 'gnome-shell-sass/_common.scss',
'gnome-shell-sass/_drawing.scss', 'gnome-shell-sass/_drawing.scss',
'gnome-shell-sass/_high-contrast-colors.scss' 'gnome-shell-sass/_high-contrast-colors.scss',
'gnome-shell-sass/_widgets.scss',
'gnome-shell-sass/widgets/_a11y.scss',
'gnome-shell-sass/widgets/_app-grid.scss',
'gnome-shell-sass/widgets/_base.scss',
'gnome-shell-sass/widgets/_buttons.scss',
'gnome-shell-sass/widgets/_calendar.scss',
'gnome-shell-sass/widgets/_check-box.scss',
'gnome-shell-sass/widgets/_corner-ripple.scss',
'gnome-shell-sass/widgets/_dash.scss',
'gnome-shell-sass/widgets/_dialogs.scss',
'gnome-shell-sass/widgets/_entries.scss',
'gnome-shell-sass/widgets/_hotplug.scss',
'gnome-shell-sass/widgets/_ibus-popup.scss',
'gnome-shell-sass/widgets/_keyboard.scss',
'gnome-shell-sass/widgets/_login-dialog.scss',
'gnome-shell-sass/widgets/_looking-glass.scss',
'gnome-shell-sass/widgets/_message-list.scss',
'gnome-shell-sass/widgets/_misc.scss',
'gnome-shell-sass/widgets/_network-dialog.scss',
'gnome-shell-sass/widgets/_notifications.scss',
'gnome-shell-sass/widgets/_osd.scss',
'gnome-shell-sass/widgets/_overview.scss',
'gnome-shell-sass/widgets/_panel.scss',
'gnome-shell-sass/widgets/_popovers.scss',
'gnome-shell-sass/widgets/_screen-shield.scss',
'gnome-shell-sass/widgets/_scrollbars.scss',
'gnome-shell-sass/widgets/_search-entry.scss',
'gnome-shell-sass/widgets/_search-results.scss',
'gnome-shell-sass/widgets/_slider.scss',
'gnome-shell-sass/widgets/_switcher-popup.scss',
'gnome-shell-sass/widgets/_switches.scss',
'gnome-shell-sass/widgets/_window-picker.scss',
'gnome-shell-sass/widgets/_workspace-switcher.scss',
'gnome-shell-sass/widgets/_workspace-thumbnails.scss'
) )
theme_data = [ theme_data = [
'calendar-today.svg',
'classic-process-working.svg', 'classic-process-working.svg',
'classic-toggle-off-intl.svg',
'classic-toggle-off-us.svg',
'classic-toggle-on-intl.svg',
'classic-toggle-on-us.svg',
'gnome-classic-high-contrast.css' 'gnome-classic-high-contrast.css'
] ]
style = 'gnome-classic' stylesheet = 'gnome-classic.css'
custom_target(style + '.css', if fs.exists(stylesheet)
input: style + '.scss', install_data(stylesheet, install_dir: themedir)
output: style + '.css', else
depend_files: theme_sources, sassc = find_program('sassc', required: true)
command: [sassc, '-a', '@INPUT@', '@OUTPUT@'], custom_target(stylesheet,
install: true, input: fs.replace_suffix(stylesheet, '.scss'),
install_dir: themedir output: stylesheet,
) depend_files: theme_sources,
command: [sassc, '-a', '@INPUT@', '@OUTPUT@'],
install: true,
install_dir: themedir
)
endif
install_data(theme_data, install_dir: themedir) install_data(theme_data, install_dir: themedir)
classic_schema = 'org.gnome.shell.extensions.classic-overrides.gschema.xml' classic_override = '00_org.gnome.shell.extensions.classic.gschema.override'
install_data(classic_schema, install_dir: schemadir) install_data(classic_override, install_dir: schemadir)
@@ -1,46 +0,0 @@
<schemalist>
<schema id="org.gnome.shell.extensions.classic-overrides"
path="/org/gnome/shell/extensions/classic-overrides/"
gettext-domain="gnome-shell-extensions">
<key name="attach-modal-dialogs" type="b">
<default>true</default>
<summary>Attach modal dialog to the parent window</summary>
<description>
This key overrides the key in org.gnome.mutter when running
GNOME Shell.
</description>
</key>
<key name="button-layout" type="s">
<default>"appmenu:minimize,maximize,close"</default>
<summary>Arrangement of buttons on the titlebar</summary>
<description>
This key overrides the key in org.gnome.desktop.wm.preferences when running GNOME Shell.
</description>
</key>
<key name="edge-tiling" type="b">
<default>true</default>
<summary>Enable edge tiling when dropping windows on screen edges</summary>
<description>
This key overrides the key in org.gnome.mutter when running GNOME Shell.
</description>
</key>
<key name="workspaces-only-on-primary" type="b">
<default>true</default>
<summary>Workspaces only on primary monitor</summary>
<description>
This key overrides the key in org.gnome.mutter when running GNOME Shell.
</description>
</key>
<key name="focus-change-on-pointer-rest" type="b">
<default>true</default>
<summary>Delay focus changes in mouse mode until the pointer stops moving</summary>
<description>
This key overrides the key in org.gnome.mutter when running GNOME Shell.
</description>
</key>
</schema>
</schemalist>
+19 -9
View File
@@ -7,30 +7,40 @@ builddir=`mktemp -p $srcdir -d _build.XXXXXX` || exit 1
installdir=`mktemp -p $srcdir -d _install.XXXXXX` || exit 1 installdir=`mktemp -p $srcdir -d _install.XXXXXX` || exit 1
meson setup --prefix=$installdir -Dextension_set=all $srcdir $builddir meson setup --prefix=$installdir -Dextension_set=all $srcdir $builddir
ninja -C$builddir install meson install -C $builddir
rm -rf $srcdir/zip-files rm -rf $srcdir/zip-files
mkdir $srcdir/zip-files mkdir $srcdir/zip-files
extensiondir=$installdir/share/gnome-shell/extensions extensiondir=$installdir/share/gnome-shell/extensions
schemadir=$installdir/share/glib-2.0/schemas schemadir=$installdir/share/glib-2.0/schemas
localedir=$installdir/share/locale
for f in $extensiondir/*; do for f in $extensiondir/*; do
name=`basename ${f%%@*}` name=`basename ${f%%@*}`
uuid=$name@gnome-shell-extensions.gcampax.github.com uuid=$name@gnome-shell-extensions.gcampax.github.com
schema=$schemadir/org.gnome.shell.extensions.$name.gschema.xml schema=$schemadir/org.gnome.shell.extensions.$name.gschema.xml
cp $srcdir/NEWS $srcdir/COPYING $f olddomain=gnome-shell-extensions
cp -r $localedir $f newdomain=gnome-shell-extension-$name
sed -i "/gettext-domain/ s:$olddomain:$newdomain:" $f/metadata.json
if [ -f $schema ]; then xgettext --from-code=UTF-8 --output-dir=$builddir --output=$name.pot $f/*.js
mkdir $f/schemas
cp $schema $f/schemas; if [ -f $builddir/$name.pot ]; then
glib-compile-schemas $f/schemas mkdir $f/po
for l in $(<$srcdir/po/LINGUAS); do
msgmerge --quiet --output-file=$f/po/$l.po \
$srcdir/po/$l.po $builddir/$name.pot
done
fi fi
(cd $f && zip -rmq $srcdir/zip-files/$uuid.shell-extension.zip .) cp $srcdir/NEWS $srcdir/COPYING $f
sources=(NEWS COPYING $(cd $f; ls *.js))
[ -f $schema ] || unset schema
gnome-extensions pack ${sources[@]/#/--extra-source=} \
${schema:+--schema=$schema} --out-dir=$srcdir/zip-files $f
done done
rm -rf $builddir rm -rf $builddir
View File
-62
View File
@@ -1,62 +0,0 @@
/* -*- mode: js; js-basic-offset: 4; indent-tabs-mode: nil -*- */
const Clutter = imports.gi.Clutter;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const AltTab = imports.ui.altTab;
const Main = imports.ui.main;
const WindowManager = imports.ui.windowManager;
let injections = {};
function init(metadata) {
}
function setKeybinding(name, func) {
Main.wm.setCustomKeybindingHandler(name, Shell.ActionMode.NORMAL, func);
}
function enable() {
injections['_keyPressHandler'] = AltTab.WindowSwitcherPopup.prototype._keyPressHandler;
AltTab.WindowSwitcherPopup.prototype._keyPressHandler = function(keysym, action) {
switch(action) {
case Meta.KeyBindingAction.SWITCH_APPLICATIONS:
action = Meta.KeyBindingAction.SWITCH_WINDOWS;
break;
case Meta.KeyBindingAction.SWITCH_APPLICATIONS_BACKWARD:
action = Meta.KeyBindingAction.SWITCH_WINDOWS_BACKWARD;
break;
}
return injections['_keyPressHandler'].call(this, keysym, action);
};
Main.wm._forcedWindowSwitcher = function(display, window, binding) {
/* prevent a corner case where both popups show up at once */
if (this._workspaceSwitcherPopup != null)
this._workspaceSwitcherPopup.destroy();
let tabPopup = new AltTab.WindowSwitcherPopup();
if (!tabPopup.show(binding.is_reversed(), binding.get_name(), binding.get_mask()))
tabPopup.destroy();
};
setKeybinding('switch-applications',
Main.wm._forcedWindowSwitcher.bind(Main.wm));
setKeybinding('switch-applications-backward',
Main.wm._forcedWindowSwitcher.bind(Main.wm));
}
function disable() {
var prop;
setKeybinding('switch-applications',
Main.wm._startSwitcher.bind(Main.wm));
setKeybinding('switch-applications-backward',
Main.wm._startSwitcher.bind(Main.wm));
for (prop in injections)
AltTab.WindowSwitcherPopup.prototype[prop] = injections[prop];
delete Main.wm._forcedWindowSwitcher;
}
-7
View File
@@ -1,7 +0,0 @@
extension_data += configure_file(
input: metadata_name + '.in',
output: metadata_name,
configuration: metadata_conf
)
extension_sources += files('prefs.js')
-11
View File
@@ -1,11 +0,0 @@
{
"extension-id": "@extension_id@",
"uuid": "@uuid@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "AlternateTab",
"description": "Substitute Alt-Tab with a window based switcher that does not group by application.\nThis extension is part of Classic Mode and is officially supported by GNOME. Please do not report bugs using the form below, use GNOME's GitLab instance instead.",
"original-authors": [ "jw@bargsten.org", "thomas.bouffon@gmail.com" ],
"shell-version": [ "@shell_current@" ],
"url": "@url@"
}
-81
View File
@@ -1,81 +0,0 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const Gio = imports.gi.Gio;
const Gtk = imports.gi.Gtk;
const GObject = imports.gi.GObject;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const N_ = e => e;
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
const SETTINGS_APP_ICON_MODE = 'app-icon-mode';
const SETTINGS_CURRENT_WORKSPACE_ONLY = 'current-workspace-only';
const MODES = {
'thumbnail-only': N_("Thumbnail only"),
'app-icon-only': N_("Application icon only"),
'both': N_("Thumbnail and application icon"),
};
const AltTabSettingsWidget = GObject.registerClass(
class AltTabSettingsWidget extends Gtk.Grid {
_init(params) {
super._init(params);
this.margin = 24;
this.row_spacing = 6;
this.orientation = Gtk.Orientation.VERTICAL;
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell.window-switcher' });
let presentLabel = '<b>' + _("Present windows as") + '</b>';
this.add(new Gtk.Label({ label: presentLabel, use_markup: true,
halign: Gtk.Align.START }));
let align = new Gtk.Alignment({ left_padding: 12 });
this.add(align);
let grid = new Gtk.Grid({ orientation: Gtk.Orientation.VERTICAL,
row_spacing: 6,
column_spacing: 6 });
align.add(grid);
let radio = null;
let currentMode = this._settings.get_string(SETTINGS_APP_ICON_MODE);
for (let mode in MODES) {
// copy the mode variable because it has function scope, not block scope
// so cannot be used in a closure
let modeCapture = mode;
let name = Gettext.gettext(MODES[mode]);
radio = new Gtk.RadioButton({ group: radio, label: name, valign: Gtk.Align.START });
radio.connect('toggled', widget => {
if (widget.active)
this._settings.set_string(SETTINGS_APP_ICON_MODE, modeCapture);
});
grid.add(radio);
if (mode == currentMode)
radio.active = true;
}
let check = new Gtk.CheckButton({ label: _("Show only windows in the current workspace"),
margin_top: 6 });
this._settings.bind(SETTINGS_CURRENT_WORKSPACE_ONLY, check, 'active', Gio.SettingsBindFlags.DEFAULT);
this.add(check);
}
});
function init() {
Convenience.initTranslations();
}
function buildPrefsWidget() {
let widget = new AltTabSettingsWidget();
widget.show_all();
return widget;
}
-1
View File
@@ -1 +0,0 @@
/* This extensions requires no special styling */
+221 -291
View File
@@ -1,27 +1,18 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */ /* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
/* exported init enable disable */
const {
Atk, Clutter, Gio, GLib, GMenu, GObject, Gtk, Meta, Shell, St,
} = imports.gi;
const Signals = imports.signals;
const Atk = imports.gi.Atk;
const DND = imports.ui.dnd; const DND = imports.ui.dnd;
const GMenu = imports.gi.GMenu; const ExtensionUtils = imports.misc.extensionUtils;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Clutter = imports.gi.Clutter;
const Main = imports.ui.main; const Main = imports.ui.main;
const Meta = imports.gi.Meta;
const PanelMenu = imports.ui.panelMenu; const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
const Gtk = imports.gi.Gtk;
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const Signals = imports.signals;
const Pango = imports.gi.Pango;
const Gettext = imports.gettext.domain('gnome-shell-extensions'); const _ = ExtensionUtils.gettext;
const _ = Gettext.gettext;
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
const appSys = Shell.AppSystem.get_default(); const appSys = Shell.AppSystem.get_default();
@@ -30,65 +21,56 @@ const HORIZ_FACTOR = 5;
const MENU_HEIGHT_OFFSET = 132; const MENU_HEIGHT_OFFSET = 132;
const NAVIGATION_REGION_OVERSHOOT = 50; const NAVIGATION_REGION_OVERSHOOT = 50;
class ActivitiesMenuItem extends PopupMenu.PopupBaseMenuItem { Gio._promisify(Gio._LocalFilePrototype, 'query_info_async', 'query_info_finish');
constructor(button) { Gio._promisify(Gio._LocalFilePrototype, 'set_attributes_async', 'set_attributes_finish');
super();
this._button = button;
this.actor.add_child(new St.Label({ text: _("Activities Overview") }));
}
activate(event) {
this._button.menu.toggle();
Main.overview.toggle();
super.activate(event);
}
};
class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem { class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem {
static {
GObject.registerClass(this);
}
constructor(button, app) { constructor(button, app) {
super(); super();
this._app = app; this._app = app;
this._button = button; this._button = button;
this._iconBin = new St.Bin(); this._iconBin = new St.Bin();
this.actor.add_child(this._iconBin); this.add_child(this._iconBin);
let appLabel = new St.Label({ text: app.get_name(), y_expand: true, let appLabel = new St.Label({
y_align: Clutter.ActorAlign.CENTER }); text: app.get_name(),
this.actor.add_child(appLabel); y_expand: true,
this.actor.label_actor = appLabel; y_align: Clutter.ActorAlign.CENTER,
});
this.add_child(appLabel);
this.label_actor = appLabel;
let textureCache = St.TextureCache.get_default(); let textureCache = St.TextureCache.get_default();
let iconThemeChangedId = textureCache.connect('icon-theme-changed', let iconThemeChangedId = textureCache.connect('icon-theme-changed',
this._updateIcon.bind(this)); this._updateIcon.bind(this));
this.actor.connect('destroy', () => { this.connect('destroy', () => {
textureCache.disconnect(iconThemeChangedId); textureCache.disconnect(iconThemeChangedId);
}); });
this._updateIcon(); this._updateIcon();
this.actor._delegate = this; this._delegate = this;
let draggable = DND.makeDraggable(this.actor); let draggable = DND.makeDraggable(this);
let maybeStartDrag = draggable._maybeStartDrag; let maybeStartDrag = draggable._maybeStartDrag;
draggable._maybeStartDrag = (event) => { draggable._maybeStartDrag = event => {
if (this._dragEnabled) if (this._dragEnabled)
return maybeStartDrag.call(draggable, event); return maybeStartDrag.call(draggable, event);
return false; return false;
}; };
draggable.connect('drag-begin', () => {
Shell.util_set_hidden_from_pick(Main.legacyTray.actor, true);
});
draggable.connect('drag-end', () => {
Shell.util_set_hidden_from_pick(Main.legacyTray.actor, false);
});
} }
activate(event) { activate(event) {
this._app.open_new_window(-1); this._app.open_new_window(-1);
this._button.selectCategory(null, null); this._button.selectCategory(null);
this._button.menu.toggle(); this._button.menu.toggle();
super.activate(event); super.activate(event);
Main.overview.hide();
} }
setActive(active, params) { setActive(active, params) {
@@ -97,8 +79,8 @@ class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem {
super.setActive(active, params); super.setActive(active, params);
} }
setDragEnabled(enable) { setDragEnabled(enabled) {
this._dragEnabled = enable; this._dragEnabled = enabled;
} }
getDragActor() { getDragActor() {
@@ -110,11 +92,17 @@ class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem {
} }
_updateIcon() { _updateIcon() {
this._iconBin.set_child(this.getDragActor()); let icon = this.getDragActor();
icon.style_class = 'icon-dropshadow';
this._iconBin.set_child(icon);
} }
}; }
class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem { class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
static {
GObject.registerClass(this);
}
constructor(button, category) { constructor(button, category) {
super(); super();
this._category = category; this._category = category;
@@ -127,22 +115,23 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
if (this._category) if (this._category)
name = this._category.get_name(); name = this._category.get_name();
else else
name = _("Favorites"); name = _('Favorites');
this.actor.add_child(new St.Label({ text: name })); this.add_child(new St.Label({ text: name }));
this.actor.connect('motion-event', this._onMotionEvent.bind(this)); this.connect('motion-event', this._onMotionEvent.bind(this));
this.connect('notify::active', this._onActiveChanged.bind(this));
} }
activate(event) { activate(event) {
this._button.selectCategory(this._category, this); this._button.selectCategory(this._category);
this._button.scrollToCatButton(this); this._button.scrollToCatButton(this);
super.activate(event); super.activate(event);
} }
_isNavigatingSubmenu([x, y]) { _isNavigatingSubmenu([x, y]) {
let [posX, posY] = this.actor.get_transformed_position(); let [posX, posY] = this.get_transformed_position();
if (this._oldX == -1) { if (this._oldX === -1) {
this._oldX = x; this._oldX = x;
this._oldY = y; this._oldY = y;
return true; return true;
@@ -155,11 +144,11 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
this._oldY = y; this._oldY = y;
// If it lies outside the x-coordinates then it is definitely outside. // If it lies outside the x-coordinates then it is definitely outside.
if (posX > x || posX + this.actor.width < x) if (posX > x || posX + this.width < x)
return false; return false;
// If it lies inside the menu item then it is definitely inside. // If it lies inside the menu item then it is definitely inside.
if (posY <= y && posY + this.actor.height >= y) if (posY <= y && posY + this.height >= y)
return true; return true;
// We want the keep-up triangle only if the movement is more // We want the keep-up triangle only if the movement is more
@@ -180,37 +169,42 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
// only check for triangle ABC. // only check for triangle ABC.
if (posY > y) { if (posY > y) {
let offset = posY - y; let offset = posY - y;
y = posY + this.actor.height + offset; y = posY + this.height + offset;
} }
// Ensure that A is (0, 0). // Ensure that A is (0, 0).
x -= posX; x -= posX;
y -= posY + this.actor.height; y -= posY + this.height;
// Check which side of line AB the point P lies on by taking the // Check which side of line AB the point P lies on by taking the
// cross-product of AB and AP. See: // cross-product of AB and AP. See:
// http://stackoverflow.com/questions/3461453/determine-which-side-of-a-line-a-point-lies // http://stackoverflow.com/questions/3461453/determine-which-side-of-a-line-a-point-lies
if (((this.actor.width * y) - (NAVIGATION_REGION_OVERSHOOT * x)) <= 0) if (this.width * y - NAVIGATION_REGION_OVERSHOOT * x <= 0)
return true; return true;
return false; return false;
} }
_onMotionEvent(actor, event) { _onMotionEvent(actor, event) {
if (!Clutter.get_pointer_grab()) { if (!this._grab) {
this._oldX = -1; this._oldX = -1;
this._oldY = -1; this._oldY = -1;
Clutter.grab_pointer(this.actor); const grab = global.stage.grab(this);
if (grab.get_seat_state() !== Clutter.GrabState.NONE)
this._grab = grab;
else
grab.dismiss();
} }
this.actor.hover = true; this.hover = true;
if (this._isNavigatingSubmenu(event.get_coords())) if (this._isNavigatingSubmenu(event.get_coords()))
return true; return true;
this._oldX = -1; this._oldX = -1;
this._oldY = -1; this._oldY = -1;
this.actor.hover = false; this.hover = false;
Clutter.ungrab_pointer(); this._grab?.dismiss();
delete this._grab;
let source = event.get_source(); let source = event.get_source();
if (source instanceof St.Widget) if (source instanceof St.Widget)
@@ -219,14 +213,14 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
return false; return false;
} }
setActive(active, params) { _onActiveChanged() {
if (active) { if (!this.active)
this._button.selectCategory(this._category, this); return;
this._button.scrollToCatButton(this);
} this._button.selectCategory(this._category);
super.setActive(active, params); this._button.scrollToCatButton(this);
} }
}; }
class ApplicationsMenu extends PopupMenu.PopupMenu { class ApplicationsMenu extends PopupMenu.PopupMenu {
constructor(sourceActor, arrowAlignment, arrowSide, button) { constructor(sourceActor, arrowAlignment, arrowSide, button) {
@@ -238,31 +232,12 @@ class ApplicationsMenu extends PopupMenu.PopupMenu {
return false; return false;
} }
open(animate) {
this._button.hotCorner.setBarrierSize(0);
if (this._button.hotCorner.actor) // fallback corner
this._button.hotCorner.actor.hide();
super.open(animate);
}
close(animate) {
let size = Main.layoutManager.panelBox.height;
this._button.hotCorner.setBarrierSize(size);
if (this._button.hotCorner.actor) // fallback corner
this._button.hotCorner.actor.show();
super.close(animate);
}
toggle() { toggle() {
if (this.isOpen) { if (this.isOpen)
this._button.selectCategory(null, null); this._button.selectCategory(null);
} else {
if (Main.overview.visible)
Main.overview.hide();
}
super.toggle(); super.toggle();
} }
}; }
class DesktopTarget { class DesktopTarget {
constructor() { constructor() {
@@ -271,7 +246,7 @@ class DesktopTarget {
this._windowAddedId = this._windowAddedId =
global.window_group.connect('actor-added', global.window_group.connect('actor-added',
this._onWindowAdded.bind(this)); this._onWindowAdded.bind(this));
global.get_window_actors().forEach(a => { global.get_window_actors().forEach(a => {
this._onWindowAdded(a.get_parent(), a); this._onWindowAdded(a.get_parent(), a);
@@ -279,14 +254,14 @@ class DesktopTarget {
} }
get hasDesktop() { get hasDesktop() {
return this._desktop != null; return this._desktop !== null;
} }
_onWindowAdded(group, actor) { _onWindowAdded(group, actor) {
if (!(actor instanceof Meta.WindowActor)) if (!(actor instanceof Meta.WindowActor))
return; return;
if (actor.meta_window.get_window_type() == Meta.WindowType.DESKTOP) if (actor.meta_window.get_window_type() === Meta.WindowType.DESKTOP)
this._setDesktop(actor); this._setDesktop(actor);
} }
@@ -315,48 +290,32 @@ class DesktopTarget {
return source._app.app_info; return source._app.app_info;
} }
_touchFile(file) { async _markTrusted(file) {
let queryFlags = Gio.FileQueryInfoFlags.NONE;
let ioPriority = GLib.PRIORITY_DEFAULT;
let info = new Gio.FileInfo();
info.set_attribute_uint64(Gio.FILE_ATTRIBUTE_TIME_ACCESS,
GLib.get_real_time());
file.set_attributes_async (info, queryFlags, ioPriority, null,
(o, res) => {
try {
o.set_attributes_finish(res);
} catch(e) {
log('Failed to update access time: ' + e.message);
}
});
}
_markTrusted(file) {
let modeAttr = Gio.FILE_ATTRIBUTE_UNIX_MODE; let modeAttr = Gio.FILE_ATTRIBUTE_UNIX_MODE;
let trustedAttr = 'metadata::trusted'; let trustedAttr = 'metadata::trusted';
let queryFlags = Gio.FileQueryInfoFlags.NONE; let queryFlags = Gio.FileQueryInfoFlags.NONE;
let ioPriority = GLib.PRIORITY_DEFAULT; let ioPriority = GLib.PRIORITY_DEFAULT;
file.query_info_async(modeAttr, queryFlags, ioPriority, null, try {
(o, res) => { let info = await file.query_info_async(modeAttr, queryFlags, ioPriority, null);
try {
let info = o.query_info_finish(res);
let mode = info.get_attribute_uint32(modeAttr) | 0o100;
info.set_attribute_uint32(modeAttr, mode); let mode = info.get_attribute_uint32(modeAttr) | 0o100;
info.set_attribute_string(trustedAttr, 'yes'); info.set_attribute_uint32(modeAttr, mode);
file.set_attributes_async (info, queryFlags, ioPriority, null, info.set_attribute_string(trustedAttr, 'yes');
(o, res) => { await file.set_attributes_async(info, queryFlags, ioPriority, null);
o.set_attributes_finish(res);
// Hack: force nautilus to reload file info // Hack: force nautilus to reload file info
this._touchFile(file); info = new Gio.FileInfo();
}); info.set_attribute_uint64(
} catch(e) { Gio.FILE_ATTRIBUTE_TIME_ACCESS, GLib.get_real_time());
log('Failed to mark file as trusted: ' + e.message); try {
} await file.set_attributes_async(info, queryFlags, ioPriority, null);
}); } catch (e) {
log(`Failed to update access time: ${e.message}`);
}
} catch (e) {
log(`Failed to mark file as trusted: ${e.message}`);
}
} }
destroy() { destroy() {
@@ -367,7 +326,7 @@ class DesktopTarget {
this._setDesktop(null); this._setDesktop(null);
} }
handleDragOver(source, actor, x, y, time) { handleDragOver(source, _actor, _x, _y, _time) {
let appInfo = this._getSourceAppInfo(source); let appInfo = this._getSourceAppInfo(source);
if (!appInfo) if (!appInfo)
return DND.DragMotionResult.CONTINUE; return DND.DragMotionResult.CONTINUE;
@@ -375,7 +334,7 @@ class DesktopTarget {
return DND.DragMotionResult.COPY_DROP; return DND.DragMotionResult.COPY_DROP;
} }
acceptDrop(source, actor, x, y, time) { acceptDrop(source, _actor, _x, _y, _time) {
let appInfo = this._getSourceAppInfo(source); let appInfo = this._getSourceAppInfo(source);
if (!appInfo) if (!appInfo)
return false; return false;
@@ -391,51 +350,53 @@ class DesktopTarget {
// copy_async() isn't introspectable :-( // copy_async() isn't introspectable :-(
src.copy(dst, Gio.FileCopyFlags.OVERWRITE, null, null); src.copy(dst, Gio.FileCopyFlags.OVERWRITE, null, null);
this._markTrusted(dst); this._markTrusted(dst);
} catch(e) { } catch (e) {
log('Failed to copy to desktop: ' + e.message); log(`Failed to copy to desktop: ${e.message}`);
} }
return true; return true;
} }
}; }
Signals.addSignalMethods(DesktopTarget.prototype); Signals.addSignalMethods(DesktopTarget.prototype);
class ApplicationsButton extends PanelMenu.Button { class ApplicationsButton extends PanelMenu.Button {
static {
GObject.registerClass(this);
}
constructor() { constructor() {
super(1.0, null, false); super(1.0, null, false);
this.setMenu(new ApplicationsMenu(this.actor, 1.0, St.Side.TOP, this)); this.setMenu(new ApplicationsMenu(this, 1.0, St.Side.TOP, this));
Main.panel.menuManager.addMenu(this.menu); Main.panel.menuManager.addMenu(this.menu);
// At this moment applications menu is not keyboard navigable at // At this moment applications menu is not keyboard navigable at
// all (so not accessible), so it doesn't make sense to set as // all (so not accessible), so it doesn't make sense to set as
// role ATK_ROLE_MENU like other elements of the panel. // role ATK_ROLE_MENU like other elements of the panel.
this.actor.accessible_role = Atk.Role.LABEL; this.accessible_role = Atk.Role.LABEL;
let hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' }); this._label = new St.Label({
text: _('Applications'),
y_expand: true,
y_align: Clutter.ActorAlign.CENTER,
});
this._label = new St.Label({ text: _("Applications"), this.add_actor(this._label);
y_expand: true, this.name = 'panelApplications';
y_align: Clutter.ActorAlign.CENTER }); this.label_actor = this._label;
hbox.add_child(this._label);
hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM));
this.actor.add_actor(hbox);
this.actor.name = 'panelApplications';
this.actor.label_actor = this._label;
this.actor.connect('captured-event', this._onCapturedEvent.bind(this));
this.actor.connect('destroy', this._onDestroy.bind(this));
this._showingId = Main.overview.connect('showing', () => { this._showingId = Main.overview.connect('showing', () => {
this.actor.add_accessible_state (Atk.StateType.CHECKED); this.add_accessible_state(Atk.StateType.CHECKED);
}); });
this._hidingId = Main.overview.connect('hiding', () => { this._hidingId = Main.overview.connect('hiding', () => {
this.actor.remove_accessible_state (Atk.StateType.CHECKED); this.remove_accessible_state(Atk.StateType.CHECKED);
}); });
Main.layoutManager.connect('startup-complete', Main.wm.addKeybinding(
this._setKeybinding.bind(this)); 'apps-menu-toggle-menu',
this._setKeybinding(); ExtensionUtils.getSettings(),
Meta.KeyBindingFlags.IGNORE_AUTOREPEAT,
Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW,
() => this.menu.toggle());
this._desktopTarget = new DesktopTarget(); this._desktopTarget = new DesktopTarget();
this._desktopTarget.connect('app-dropped', () => { this._desktopTarget.connect('app-dropped', () => {
@@ -449,14 +410,14 @@ class ApplicationsButton extends PanelMenu.Button {
this._tree = new GMenu.Tree({ menu_basename: 'applications.menu' }); this._tree = new GMenu.Tree({ menu_basename: 'applications.menu' });
this._treeChangedId = this._tree.connect('changed', this._treeChangedId = this._tree.connect('changed',
this._onTreeChanged.bind(this)); this._onTreeChanged.bind(this));
this._applicationsButtons = new Map(); this._applicationsButtons = new Map();
this.reloadFlag = false; this.reloadFlag = false;
this._createLayout(); this._createLayout();
this._display(); this._display();
this._installedChangedId = appSys.connect('installed-changed', this._installedChangedId = appSys.connect('installed-changed',
this._onTreeChanged.bind(this)); this._onTreeChanged.bind(this));
} }
_onTreeChanged() { _onTreeChanged() {
@@ -468,47 +429,34 @@ class ApplicationsButton extends PanelMenu.Button {
} }
} }
get hotCorner() {
return Main.layoutManager.hotCorners[Main.layoutManager.primaryIndex];
}
_createVertSeparator() { _createVertSeparator() {
let separator = new St.DrawingArea({ style_class: 'calendar-vertical-separator', let separator = new St.DrawingArea({
pseudo_class: 'highlighted' }); style_class: 'calendar-vertical-separator',
pseudo_class: 'highlighted',
});
separator.connect('repaint', this._onVertSepRepaint.bind(this)); separator.connect('repaint', this._onVertSepRepaint.bind(this));
return separator; return separator;
} }
_onDestroy() { _onDestroy() {
super._onDestroy();
Main.overview.disconnect(this._showingId); Main.overview.disconnect(this._showingId);
Main.overview.disconnect(this._hidingId); Main.overview.disconnect(this._hidingId);
appSys.disconnect(this._installedChangedId); appSys.disconnect(this._installedChangedId);
this._tree.disconnect(this._treeChangedId); this._tree.disconnect(this._treeChangedId);
this._tree = null; this._tree = null;
Main.wm.setCustomKeybindingHandler('panel-main-menu', Main.wm.removeKeybinding('apps-menu-toggle-menu');
Shell.ActionMode.NORMAL |
Shell.ActionMode.OVERVIEW,
Main.sessionMode.hasOverview ?
Main.overview.toggle.bind(Main.overview) :
null);
this._desktopTarget.destroy(); this._desktopTarget.destroy();
} }
_onCapturedEvent(actor, event) {
if (event.type() == Clutter.EventType.BUTTON_PRESS) {
if (!Main.overview.shouldToggleByCornerOrButton())
return true;
}
return false;
}
_onMenuKeyPress(actor, event) { _onMenuKeyPress(actor, event) {
let symbol = event.get_key_symbol(); let symbol = event.get_key_symbol();
if (symbol == Clutter.KEY_Left || symbol == Clutter.KEY_Right) { if (symbol === Clutter.KEY_Left || symbol === Clutter.KEY_Right) {
let direction = symbol == Clutter.KEY_Left ? Gtk.DirectionType.LEFT let direction = symbol === Clutter.KEY_Left
: Gtk.DirectionType.RIGHT; ? Gtk.DirectionType.LEFT : Gtk.DirectionType.RIGHT;
if (this.menu.actor.navigate_focus(global.stage.key_focus, direction, false)) if (this.menu.actor.navigate_focus(global.stage.key_focus, direction, false))
return true; return true;
} }
@@ -521,7 +469,7 @@ class ApplicationsButton extends PanelMenu.Button {
let [width, height] = area.get_surface_size(); let [width, height] = area.get_surface_size();
let stippleColor = themeNode.get_color('-stipple-color'); let stippleColor = themeNode.get_color('-stipple-color');
let stippleWidth = themeNode.get_length('-stipple-width'); let stippleWidth = themeNode.get_length('-stipple-width');
let x = Math.floor(width/2) + 0.5; let x = Math.floor(width / 2) + 0.5;
cr.moveTo(x, 0); cr.moveTo(x, 0);
cr.lineTo(x, height); cr.lineTo(x, height);
Clutter.cairo_set_source_color(cr, stippleColor); Clutter.cairo_set_source_color(cr, stippleColor);
@@ -531,21 +479,14 @@ class ApplicationsButton extends PanelMenu.Button {
} }
_onOpenStateChanged(menu, open) { _onOpenStateChanged(menu, open) {
if (open) { if (open) {
if (this.reloadFlag) { if (this.reloadFlag) {
this._redisplay(); this._redisplay();
this.reloadFlag = false; this.reloadFlag = false;
} }
this.mainBox.show(); this.mainBox.show();
} }
super._onOpenStateChanged(menu, open); super._onOpenStateChanged(menu, open);
}
_setKeybinding() {
Main.wm.setCustomKeybindingHandler('panel-main-menu',
Shell.ActionMode.NORMAL |
Shell.ActionMode.OVERVIEW,
() => { this.menu.toggle(); });
} }
_redisplay() { _redisplay() {
@@ -557,13 +498,13 @@ class ApplicationsButton extends PanelMenu.Button {
_loadCategory(categoryId, dir) { _loadCategory(categoryId, dir) {
let iter = dir.iter(); let iter = dir.iter();
let nextType; let nextType;
while ((nextType = iter.next()) != GMenu.TreeItemType.INVALID) { while ((nextType = iter.next()) !== GMenu.TreeItemType.INVALID) {
if (nextType == GMenu.TreeItemType.ENTRY) { if (nextType === GMenu.TreeItemType.ENTRY) {
let entry = iter.get_entry(); let entry = iter.get_entry();
let id; let id;
try { try {
id = entry.get_desktop_file_id(); // catch non-UTF8 filenames id = entry.get_desktop_file_id(); // catch non-UTF8 filenames
} catch(e) { } catch (e) {
continue; continue;
} }
let app = appSys.lookup_app(id); let app = appSys.lookup_app(id);
@@ -571,9 +512,9 @@ class ApplicationsButton extends PanelMenu.Button {
app = new Shell.App({ app_info: entry.get_app_info() }); app = new Shell.App({ app_info: entry.get_app_info() });
if (app.get_app_info().should_show()) if (app.get_app_info().should_show())
this.applicationsByCategory[categoryId].push(app); this.applicationsByCategory[categoryId].push(app);
} else if (nextType == GMenu.TreeItemType.SEPARATOR) { } else if (nextType === GMenu.TreeItemType.SEPARATOR) {
this.applicationsByCategory[categoryId].push('separator'); this.applicationsByCategory[categoryId].push('separator');
} else if (nextType == GMenu.TreeItemType.DIRECTORY) { } else if (nextType === GMenu.TreeItemType.DIRECTORY) {
let subdir = iter.get_directory(); let subdir = iter.get_directory();
if (!subdir.get_is_nodisplay()) if (!subdir.get_is_nodisplay())
this._loadCategory(categoryId, subdir); this._loadCategory(categoryId, subdir);
@@ -586,13 +527,13 @@ class ApplicationsButton extends PanelMenu.Button {
let appsScrollBoxAlloc = this.applicationsScrollBox.get_allocation_box(); let appsScrollBoxAlloc = this.applicationsScrollBox.get_allocation_box();
let currentScrollValue = appsScrollBoxAdj.get_value(); let currentScrollValue = appsScrollBoxAdj.get_value();
let boxHeight = appsScrollBoxAlloc.y2 - appsScrollBoxAlloc.y1; let boxHeight = appsScrollBoxAlloc.y2 - appsScrollBoxAlloc.y1;
let buttonAlloc = button.actor.get_allocation_box(); let buttonAlloc = button.get_allocation_box();
let newScrollValue = currentScrollValue; let newScrollValue = currentScrollValue;
if (currentScrollValue > buttonAlloc.y1 - 10) if (currentScrollValue > buttonAlloc.y1 - 10)
newScrollValue = buttonAlloc.y1 - 10; newScrollValue = buttonAlloc.y1 - 10;
if (boxHeight + currentScrollValue < buttonAlloc.y2 + 10) if (boxHeight + currentScrollValue < buttonAlloc.y2 + 10)
newScrollValue = buttonAlloc.y2 - boxHeight + 10; newScrollValue = buttonAlloc.y2 - boxHeight + 10;
if (newScrollValue != currentScrollValue) if (newScrollValue !== currentScrollValue)
appsScrollBoxAdj.set_value(newScrollValue); appsScrollBoxAdj.set_value(newScrollValue);
} }
@@ -601,13 +542,13 @@ class ApplicationsButton extends PanelMenu.Button {
let catsScrollBoxAlloc = this.categoriesScrollBox.get_allocation_box(); let catsScrollBoxAlloc = this.categoriesScrollBox.get_allocation_box();
let currentScrollValue = catsScrollBoxAdj.get_value(); let currentScrollValue = catsScrollBoxAdj.get_value();
let boxHeight = catsScrollBoxAlloc.y2 - catsScrollBoxAlloc.y1; let boxHeight = catsScrollBoxAlloc.y2 - catsScrollBoxAlloc.y1;
let buttonAlloc = button.actor.get_allocation_box(); let buttonAlloc = button.get_allocation_box();
let newScrollValue = currentScrollValue; let newScrollValue = currentScrollValue;
if (currentScrollValue > buttonAlloc.y1 - 10) if (currentScrollValue > buttonAlloc.y1 - 10)
newScrollValue = buttonAlloc.y1 - 10; newScrollValue = buttonAlloc.y1 - 10;
if (boxHeight + currentScrollValue < buttonAlloc.y2 + 10) if (boxHeight + currentScrollValue < buttonAlloc.y2 + 10)
newScrollValue = buttonAlloc.y2 - boxHeight + 10; newScrollValue = buttonAlloc.y2 - boxHeight + 10;
if (newScrollValue != currentScrollValue) if (newScrollValue !== currentScrollValue)
catsScrollBoxAdj.set_value(newScrollValue); catsScrollBoxAdj.set_value(newScrollValue);
} }
@@ -616,9 +557,10 @@ class ApplicationsButton extends PanelMenu.Button {
this.menu.addMenuItem(section); this.menu.addMenuItem(section);
this.mainBox = new St.BoxLayout({ vertical: false }); this.mainBox = new St.BoxLayout({ vertical: false });
this.leftBox = new St.BoxLayout({ vertical: true }); this.leftBox = new St.BoxLayout({ vertical: true });
this.applicationsScrollBox = new St.ScrollView({ x_fill: true, y_fill: false, this.applicationsScrollBox = new St.ScrollView({
y_align: St.Align.START, style_class: 'apps-menu vfade',
style_class: 'apps-menu vfade' }); x_expand: true,
});
this.applicationsScrollBox.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC); this.applicationsScrollBox.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
let vscroll = this.applicationsScrollBox.get_vscroll_bar(); let vscroll = this.applicationsScrollBox.get_vscroll_bar();
vscroll.connect('scroll-start', () => { vscroll.connect('scroll-start', () => {
@@ -627,21 +569,14 @@ class ApplicationsButton extends PanelMenu.Button {
vscroll.connect('scroll-stop', () => { vscroll.connect('scroll-stop', () => {
this.menu.passEvents = false; this.menu.passEvents = false;
}); });
this.categoriesScrollBox = new St.ScrollView({ x_fill: true, y_fill: false, this.categoriesScrollBox = new St.ScrollView({
y_align: St.Align.START, style_class: 'vfade',
style_class: 'vfade' }); });
this.categoriesScrollBox.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC); this.categoriesScrollBox.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
vscroll = this.categoriesScrollBox.get_vscroll_bar(); vscroll = this.categoriesScrollBox.get_vscroll_bar();
vscroll.connect('scroll-start', () => { this.menu.passEvents = true; }); vscroll.connect('scroll-start', () => (this.menu.passEvents = true));
vscroll.connect('scroll-stop', () => { this.menu.passEvents = false; }); vscroll.connect('scroll-stop', () => (this.menu.passEvents = false));
this.leftBox.add(this.categoriesScrollBox, { expand: true, this.leftBox.add_child(this.categoriesScrollBox);
x_fill: true, y_fill: true,
y_align: St.Align.START });
let activities = new ActivitiesMenuItem(this);
this.leftBox.add(activities.actor, { expand: false,
x_fill: true, y_fill: false,
y_align: St.Align.START });
this.applicationsBox = new St.BoxLayout({ vertical: true }); this.applicationsBox = new St.BoxLayout({ vertical: true });
this.applicationsScrollBox.add_actor(this.applicationsBox); this.applicationsScrollBox.add_actor(this.applicationsBox);
@@ -649,47 +584,52 @@ class ApplicationsButton extends PanelMenu.Button {
this.categoriesScrollBox.add_actor(this.categoriesBox); this.categoriesScrollBox.add_actor(this.categoriesBox);
this.mainBox.add(this.leftBox); this.mainBox.add(this.leftBox);
this.mainBox.add(this._createVertSeparator(), { expand: false, x_fill: false, y_fill: true}); this.mainBox.add_child(this._createVertSeparator());
this.mainBox.add(this.applicationsScrollBox, { expand: true, x_fill: true, y_fill: true }); this.mainBox.add_child(this.applicationsScrollBox);
section.actor.add_actor(this.mainBox); section.actor.add_actor(this.mainBox);
} }
_display() { _display() {
this._applicationsButtons.clear(); this._applicationsButtons.clear();
this.mainBox.style=('width: 35em;'); this.mainBox.style = 'width: 35em;';
this.mainBox.hide(); this.mainBox.hide();
//Load categories // Load categories
this.applicationsByCategory = {}; this.applicationsByCategory = {};
this._tree.load_sync(); this._tree.load_sync();
let root = this._tree.get_root_directory(); let root = this._tree.get_root_directory();
let categoryMenuItem = new CategoryMenuItem(this, null); let categoryMenuItem = new CategoryMenuItem(this, null);
this.categoriesBox.add_actor(categoryMenuItem.actor); this.categoriesBox.add_actor(categoryMenuItem);
let iter = root.iter(); let iter = root.iter();
let nextType; let nextType;
while ((nextType = iter.next()) != GMenu.TreeItemType.INVALID) { while ((nextType = iter.next()) !== GMenu.TreeItemType.INVALID) {
if (nextType == GMenu.TreeItemType.DIRECTORY) { if (nextType !== GMenu.TreeItemType.DIRECTORY)
let dir = iter.get_directory(); continue;
if (!dir.get_is_nodisplay()) {
let categoryId = dir.get_menu_id(); let dir = iter.get_directory();
this.applicationsByCategory[categoryId] = []; if (dir.get_is_nodisplay())
this._loadCategory(categoryId, dir); continue;
if (this.applicationsByCategory[categoryId].length > 0) {
let categoryMenuItem = new CategoryMenuItem(this, dir); let categoryId = dir.get_menu_id();
this.categoriesBox.add_actor(categoryMenuItem.actor); this.applicationsByCategory[categoryId] = [];
} this._loadCategory(categoryId, dir);
} if (this.applicationsByCategory[categoryId].length > 0) {
categoryMenuItem = new CategoryMenuItem(this, dir);
this.categoriesBox.add_actor(categoryMenuItem);
} }
} }
//Load applications // Load applications
this._displayButtons(this._listApplications(null)); this._displayButtons(this._listApplications(null));
let height = this.categoriesBox.height + MENU_HEIGHT_OFFSET + 'px'; let themeContext = St.ThemeContext.get_for_stage(global.stage);
this.mainBox.style+=('height: ' + height); let scaleFactor = themeContext.scale_factor;
let categoriesHeight = this.categoriesBox.height / scaleFactor;
let height = Math.round(categoriesHeight) + MENU_HEIGHT_OFFSET;
this.mainBox.style += `height: ${height}px`;
} }
selectCategory(dir, categoryMenuItem) { selectCategory(dir) {
this.applicationsBox.get_children().forEach(c => { this.applicationsBox.get_children().forEach(c => {
if (c._delegate instanceof PopupMenu.PopupSeparatorMenuItem) if (c._delegate instanceof PopupMenu.PopupSeparatorMenuItem)
c._delegate.destroy(); c._delegate.destroy();
@@ -704,64 +644,54 @@ class ApplicationsButton extends PanelMenu.Button {
} }
_displayButtons(apps) { _displayButtons(apps) {
if (apps) { for (let i = 0; i < apps.length; i++) {
for (let i = 0; i < apps.length; i++) { let app = apps[i];
let app = apps[i]; let item;
let item; if (app instanceof Shell.App)
if (app instanceof Shell.App) item = this._applicationsButtons.get(app);
item = this._applicationsButtons.get(app); else
else item = new PopupMenu.PopupSeparatorMenuItem();
item = new PopupMenu.PopupSeparatorMenuItem(); if (!item) {
if (!item) { item = new ApplicationMenuItem(this, app);
item = new ApplicationMenuItem(this, app); item.setDragEnabled(this._desktopTarget.hasDesktop);
item.setDragEnabled(this._desktopTarget.hasDesktop); this._applicationsButtons.set(app, item);
this._applicationsButtons.set(app, item);
}
if (!item.actor.get_parent())
this.applicationsBox.add_actor(item.actor);
} }
} if (!item.get_parent())
this.applicationsBox.add_actor(item);
}
} }
_listApplications(category_menu_id) { _listApplications(categoryMenuId) {
let applist; let applist;
if (category_menu_id) { if (categoryMenuId) {
applist = this.applicationsByCategory[category_menu_id]; applist = this.applicationsByCategory[categoryMenuId];
} else { } else {
applist = new Array(); applist = global.settings.get_strv('favorite-apps')
let favorites = global.settings.get_strv('favorite-apps'); .map(id => appSys.lookup_app(id))
for (let i = 0; i < favorites.length; i++) { .filter(app => app);
let app = appSys.lookup_app(favorites[i]);
if (app)
applist.push(app);
}
} }
return applist; return applist;
} }
destroy() {
super.destroy();
}
};
let appsMenuButton;
let activitiesButton;
function enable() {
activitiesButton = Main.panel.statusArea['activities'];
activitiesButton.container.hide();
appsMenuButton = new ApplicationsButton();
Main.panel.addToStatusArea('apps-menu', appsMenuButton, 1, 'left');
} }
let appsMenuButton;
/** */
function enable() {
appsMenuButton = new ApplicationsButton();
let index = Main.sessionMode.panel.left.indexOf('activities') + 1;
Main.panel.addToStatusArea('apps-menu', appsMenuButton, index, 'left');
}
/** */
function disable() { function disable() {
Main.panel.menuManager.removeMenu(appsMenuButton.menu); Main.panel.menuManager.removeMenu(appsMenuButton.menu);
appsMenuButton.destroy(); appsMenuButton.destroy();
activitiesButton.container.show();
} }
function init(metadata) { /** */
Convenience.initTranslations(); function init() {
ExtensionUtils.initTranslations();
} }
+2
View File
@@ -3,3 +3,5 @@ extension_data += configure_file(
output: metadata_name, output: metadata_name,
configuration: metadata_conf configuration: metadata_conf
) )
extension_data += files('stylesheet.css')
extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml')
+1
View File
@@ -1,6 +1,7 @@
{ {
"extension-id": "@extension_id@", "extension-id": "@extension_id@",
"uuid": "@uuid@", "uuid": "@uuid@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@", "gettext-domain": "@gettext_domain@",
"name": "Applications Menu", "name": "Applications Menu",
"description": "Add a category-based menu for applications.\nThis extension is part of Classic Mode and is officially supported by GNOME. Please do not report bugs using the form below, use GNOME's GitLab instance instead.", "description": "Add a category-based menu for applications.\nThis extension is part of Classic Mode and is officially supported by GNOME. Please do not report bugs using the form below, use GNOME's GitLab instance instead.",
@@ -0,0 +1,12 @@
<schemalist gettext-domain="gnome-shell-extensions">
<schema id="org.gnome.shell.extensions.apps-menu"
path="/org/gnome/shell/extensions/apps-menu/">
<key name="apps-menu-toggle-menu" type="as">
<default>["&lt;Alt&gt;F1"]</default>
<summary>Keybinding to open the applications menu</summary>
<description>
Keybinding to open the applications menu.
</description>
</key>
</schema>
</schemalist>
+32 -27
View File
@@ -1,24 +1,22 @@
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- // -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
// Start apps on custom workspaces // Start apps on custom workspaces
/* exported init enable disable */
const Shell = imports.gi.Shell; const { Shell } = imports.gi;
const Main = imports.ui.main;
const ExtensionUtils = imports.misc.extensionUtils; const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension(); const Main = imports.ui.main;
const Convenience = Me.imports.convenience;
class WindowMover { class WindowMover {
constructor() { constructor() {
this._settings = Convenience.getSettings(); this._settings = ExtensionUtils.getSettings();
this._appSystem = Shell.AppSystem.get_default(); this._appSystem = Shell.AppSystem.get_default();
this._appConfigs = new Map(); this._appConfigs = new Map();
this._appData = new Map(); this._appData = new Map();
this._appsChangedId = this._appsChangedId =
this._appSystem.connect('installed-changed', this._appSystem.connect('installed-changed',
this._updateAppData.bind(this)); this._updateAppData.bind(this));
this._settings.connect('changed', this._updateAppConfigs.bind(this)); this._settings.connect('changed', this._updateAppConfigs.bind(this));
this._updateAppConfigs(); this._updateAppConfigs();
@@ -37,24 +35,23 @@ class WindowMover {
_updateAppData() { _updateAppData() {
let ids = [...this._appConfigs.keys()]; let ids = [...this._appConfigs.keys()];
let removedApps = [...this._appData.keys()].filter( let removedApps = [...this._appData.keys()]
a => !ids.includes(a.id) .filter(a => !ids.includes(a.id));
);
removedApps.forEach(app => { removedApps.forEach(app => {
app.disconnect(this._appData.get(app).windowsChangedId); app.disconnect(this._appData.get(app).windowsChangedId);
this._appData.delete(app); this._appData.delete(app);
}); });
let addedApps = ids.map(id => this._appSystem.lookup_app(id)).filter( let addedApps = ids
app => app != null && !this._appData.has(app) .map(id => this._appSystem.lookup_app(id))
); .filter(app => app && !this._appData.has(app));
addedApps.forEach(app => { addedApps.forEach(app => {
let data = { let data = {
windowsChangedId: app.connect('windows-changed', windowsChangedId: app.connect('windows-changed',
this._appWindowsChanged.bind(this)), this._appWindowsChanged.bind(this)),
moveWindowsId: 0, moveWindowsId: 0,
windows: app.get_windows() windows: app.get_windows(),
} };
this._appData.set(app, data); this._appData.set(app, data);
}); });
} }
@@ -75,7 +72,7 @@ class WindowMover {
} }
_moveWindow(window, workspaceNum) { _moveWindow(window, workspaceNum) {
if (window.skip_taskbar) if (window.skip_taskbar || window.is_on_all_workspaces())
return; return;
// ensure we have the required number of workspaces // ensure we have the required number of workspaces
@@ -96,9 +93,9 @@ class WindowMover {
// the window still exists and is just moved to a different workspace // the window still exists and is just moved to a different workspace
// or something; assume it'll be added back immediately, so keep it // or something; assume it'll be added back immediately, so keep it
// to avoid moving it again // to avoid moving it again
windows.push(...data.windows.filter( windows.push(...data.windows.filter(w => {
w => !windows.includes(w) && w.get_compositor_private() != null return !windows.includes(w) && w.get_compositor_private() !== null;
)); }));
let workspaceNum = this._appConfigs.get(app.id); let workspaceNum = this._appConfigs.get(app.id);
windows.filter(w => !data.windows.includes(w)).forEach(window => { windows.filter(w => !data.windows.includes(w)).forEach(window => {
@@ -106,33 +103,40 @@ class WindowMover {
}); });
data.windows = windows; data.windows = windows;
} }
}; }
let prevCheckWorkspaces; let prevCheckWorkspaces;
let winMover; let winMover;
/** */
function init() { function init() {
Convenience.initTranslations(); ExtensionUtils.initTranslations();
} }
/**
* @returns {bool} - false (used as MetaLater handler)
*/
function myCheckWorkspaces() { function myCheckWorkspaces() {
let keepAliveWorkspaces = []; let keepAliveWorkspaces = [];
let foundNonEmpty = false; let foundNonEmpty = false;
for (let i = this._workspaces.length - 1; i >= 0; i--) { for (let i = this._workspaces.length - 1; i >= 0; i--) {
if (!foundNonEmpty) if (!foundNonEmpty) {
foundNonEmpty = this._workspaces[i].list_windows().length > 0; foundNonEmpty = this._workspaces[i].list_windows().some(
else if (!this._workspaces[i]._keepAliveId) w => !w.is_on_all_workspaces());
} else if (!this._workspaces[i]._keepAliveId) {
keepAliveWorkspaces.push(this._workspaces[i]); keepAliveWorkspaces.push(this._workspaces[i]);
}
} }
// make sure the original method only removes empty workspaces at the end // make sure the original method only removes empty workspaces at the end
keepAliveWorkspaces.forEach(ws => { ws._keepAliveId = 1; }); keepAliveWorkspaces.forEach(ws => (ws._keepAliveId = 1));
prevCheckWorkspaces.call(this); prevCheckWorkspaces.call(this);
keepAliveWorkspaces.forEach(ws => { delete ws._keepAliveId; }); keepAliveWorkspaces.forEach(ws => delete ws._keepAliveId);
return false; return false;
} }
/** */
function enable() { function enable() {
prevCheckWorkspaces = Main.wm._workspaceTracker._checkWorkspaces; prevCheckWorkspaces = Main.wm._workspaceTracker._checkWorkspaces;
Main.wm._workspaceTracker._checkWorkspaces = myCheckWorkspaces; Main.wm._workspaceTracker._checkWorkspaces = myCheckWorkspaces;
@@ -140,6 +144,7 @@ function enable() {
winMover = new WindowMover(); winMover = new WindowMover();
} }
/** */
function disable() { function disable() {
Main.wm._workspaceTracker._checkWorkspaces = prevCheckWorkspaces; Main.wm._workspaceTracker._checkWorkspaces = prevCheckWorkspaces;
winMover.destroy(); winMover.destroy();
+303 -212
View File
@@ -1,260 +1,351 @@
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- // -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
// Start apps on custom workspaces // Start apps on custom workspaces
/* exported init buildPrefsWidget */
const Gio = imports.gi.Gio; const { Adw, Gio, GLib, GObject, Gtk } = imports.gi;
const GObject = imports.gi.GObject;
const Gtk = imports.gi.Gtk;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const N_ = e => e;
const ExtensionUtils = imports.misc.extensionUtils; const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience; const _ = ExtensionUtils.gettext;
const SETTINGS_KEY = 'application-list'; const SETTINGS_KEY = 'application-list';
const WORKSPACE_MAX = 36; // compiled in limit of mutter const WORKSPACE_MAX = 36; // compiled in limit of mutter
const Columns = { class NewItem extends GObject.Object {}
APPINFO: 0, GObject.registerClass(NewItem);
DISPLAY_NAME: 1,
ICON: 2,
WORKSPACE: 3,
ADJUSTMENT: 4
};
const Widget = GObject.registerClass({ class NewItemModel extends GObject.Object {
GTypeName: 'AutoMoveWindowsPrefsWidget', static [GObject.interfaces] = [Gio.ListModel];
}, class Widget extends Gtk.Grid { static {
_init(params) { GObject.registerClass(this);
super._init(params);
this.set_orientation(Gtk.Orientation.VERTICAL);
this._settings = Convenience.getSettings();
this._settings.connect('changed', this._refresh.bind(this));
this._changedPermitted = false;
this._store = new Gtk.ListStore();
this._store.set_column_types([Gio.AppInfo, GObject.TYPE_STRING, Gio.Icon, GObject.TYPE_INT,
Gtk.Adjustment]);
let scrolled = new Gtk.ScrolledWindow({ shadow_type: Gtk.ShadowType.IN});
scrolled.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
this.add(scrolled);
this._treeView = new Gtk.TreeView({ model: this._store,
hexpand: true, vexpand: true });
this._treeView.get_selection().set_mode(Gtk.SelectionMode.SINGLE);
let appColumn = new Gtk.TreeViewColumn({ expand: true, sort_column_id: Columns.DISPLAY_NAME,
title: _("Application") });
let iconRenderer = new Gtk.CellRendererPixbuf;
appColumn.pack_start(iconRenderer, false);
appColumn.add_attribute(iconRenderer, "gicon", Columns.ICON);
let nameRenderer = new Gtk.CellRendererText;
appColumn.pack_start(nameRenderer, true);
appColumn.add_attribute(nameRenderer, "text", Columns.DISPLAY_NAME);
this._treeView.append_column(appColumn);
let workspaceColumn = new Gtk.TreeViewColumn({ title: _("Workspace"),
sort_column_id: Columns.WORKSPACE });
let workspaceRenderer = new Gtk.CellRendererSpin({ editable: true });
workspaceRenderer.connect('edited', this._workspaceEdited.bind(this));
workspaceColumn.pack_start(workspaceRenderer, true);
workspaceColumn.add_attribute(workspaceRenderer, "adjustment", Columns.ADJUSTMENT);
workspaceColumn.add_attribute(workspaceRenderer, "text", Columns.WORKSPACE);
this._treeView.append_column(workspaceColumn);
scrolled.add(this._treeView);
let toolbar = new Gtk.Toolbar({ icon_size: Gtk.IconSize.SMALL_TOOLBAR });
toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_INLINE_TOOLBAR);
this.add(toolbar);
let newButton = new Gtk.ToolButton({ icon_name: 'bookmark-new-symbolic',
label: _("Add Rule"),
is_important: true });
newButton.connect('clicked', this._createNew.bind(this));
toolbar.add(newButton);
let delButton = new Gtk.ToolButton({ icon_name: 'edit-delete-symbolic' });
delButton.connect('clicked', this._deleteSelected.bind(this));
toolbar.add(delButton);
let selection = this._treeView.get_selection();
selection.connect('changed', () => {
delButton.sensitive = selection.count_selected_rows() > 0;
});
delButton.sensitive = selection.count_selected_rows() > 0;
this._changedPermitted = true;
this._refresh();
} }
_createNew() { #item = new NewItem();
let dialog = new Gtk.Dialog({ title: _("Create new matching rule"),
transient_for: this.get_toplevel(),
use_header_bar: true,
modal: true });
dialog.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL);
let addButton = dialog.add_button(_("Add"), Gtk.ResponseType.OK);
dialog.set_default_response(Gtk.ResponseType.OK);
let grid = new Gtk.Grid({ column_spacing: 10, vfunc_get_item_type() {
row_spacing: 15, return NewItem;
margin: 10 }); }
dialog._appChooser = new Gtk.AppChooserWidget({ show_all: true });
dialog._appChooser.connect('application-selected', (w, appInfo) => { vfunc_get_n_items() {
addButton.sensitive = appInfo && this._checkId(appInfo.get_id()); return 1;
}
vfunc_get_item(_pos) {
return this.#item;
}
}
class Rule extends GObject.Object {
static [GObject.properties] = {
'app-info': GObject.ParamSpec.object(
'app-info', 'app-info', 'app-info',
GObject.ParamFlags.READWRITE,
Gio.DesktopAppInfo),
'workspace': GObject.ParamSpec.uint(
'workspace', 'workspace', 'workspace',
GObject.ParamFlags.READWRITE,
1, WORKSPACE_MAX, 1),
};
static {
GObject.registerClass(this);
}
}
class RulesList extends GObject.Object {
static [GObject.interfaces] = [Gio.ListModel];
static {
GObject.registerClass(this);
}
#settings = ExtensionUtils.getSettings();
#rules = [];
#changedId;
constructor() {
super();
this.#changedId =
this.#settings.connect(`changed::${SETTINGS_KEY}`,
() => this.#sync());
this.#sync();
}
append(appInfo) {
const pos = this.#rules.length;
this.#rules.push(new Rule({ appInfo }));
this.#saveRules();
this.items_changed(pos, 0, 1);
}
remove(id) {
const pos = this.#rules.findIndex(r => r.appInfo.get_id() === id);
if (pos < 0)
return;
this.#rules.splice(pos, 1);
this.#saveRules();
this.items_changed(pos, 1, 0);
}
changeWorkspace(id, workspace) {
const pos = this.#rules.findIndex(r => r.appInfo.get_id() === id);
if (pos < 0)
return;
this.#rules[pos].set({ workspace });
this.#saveRules();
}
#saveRules() {
this.#settings.block_signal_handler(this.#changedId);
this.#settings.set_strv(SETTINGS_KEY,
this.#rules.map(r => `${r.app_info.get_id()}:${r.workspace}`));
this.#settings.unblock_signal_handler(this.#changedId);
}
#sync() {
const removed = this.#rules.length;
this.#rules = [];
for (const stringRule of this.#settings.get_strv(SETTINGS_KEY)) {
const [id, workspace] = stringRule.split(':');
const appInfo = Gio.DesktopAppInfo.new(id);
if (appInfo)
this.#rules.push(new Rule({ appInfo, workspace }));
else
log(`Invalid ID ${id}`);
}
this.items_changed(0, removed, this.#rules.length);
}
vfunc_get_item_type() {
return Rule;
}
vfunc_get_n_items() {
return this.#rules.length;
}
vfunc_get_item(pos) {
return this.#rules[pos] ?? null;
}
}
class AutoMoveSettingsWidget extends Adw.PreferencesGroup {
static {
GObject.registerClass(this);
this.install_action('rules.add', null, self => self._addNewRule());
this.install_action('rules.remove', 's',
(self, name, param) => self._rules.remove(param.unpack()));
this.install_action('rules.change-workspace', '(si)',
(self, name, param) => self._rules.changeWorkspace(...param.deepUnpack()));
}
constructor() {
super({
title: _('Workspace Rules'),
}); });
let appInfo = dialog._appChooser.get_app_info();
addButton.sensitive = appInfo && this._checkId(appInfo.get_id());
grid.attach(dialog._appChooser, 0, 0, 2, 1); this._rules = new RulesList();
grid.attach(new Gtk.Label({ label: _("Workspace"),
halign: Gtk.Align.END }), 0, 1, 1, 1);
let adjustment = new Gtk.Adjustment({ lower: 1,
upper: WORKSPACE_MAX,
step_increment: 1
});
dialog._spin = new Gtk.SpinButton({ adjustment: adjustment,
snap_to_ticks: true });
dialog._spin.set_value(1);
grid.attach(dialog._spin, 1, 1, 1, 1);
dialog.get_content_area().add(grid);
dialog.connect('response', (dialog, id) => { const store = new Gio.ListStore({ item_type: Gio.ListModel });
if (id != Gtk.ResponseType.OK) { const listModel = new Gtk.FlattenListModel({ model: store });
dialog.destroy(); store.append(this._rules);
return; store.append(new NewItemModel());
}
let appInfo = dialog._appChooser.get_app_info(); this._list = new Gtk.ListBox({
if (!appInfo) selection_mode: Gtk.SelectionMode.NONE,
return; css_classes: ['boxed-list'],
let index = Math.floor(dialog._spin.value); });
if (isNaN(index) || index < 0) this.add(this._list);
index = 1;
this._changedPermitted = false; this._list.bind_model(listModel, item => {
this._appendItem(appInfo.get_id(), index); return item instanceof NewItem
this._changedPermitted = true; ? new NewRuleRow()
: new RuleRow(item);
let iter = this._store.append(); });
let adj = new Gtk.Adjustment({ lower: 1, }
upper: WORKSPACE_MAX,
step_increment: 1,
value: index });
this._store.set(iter,
[Columns.APPINFO, Columns.ICON, Columns.DISPLAY_NAME, Columns.WORKSPACE, Columns.ADJUSTMENT],
[appInfo, appInfo.get_icon(), appInfo.get_display_name(), index, adj]);
_addNewRule() {
const dialog = new NewRuleDialog(this.get_root());
dialog.connect('response', (dlg, id) => {
const appInfo = id === Gtk.ResponseType.OK
? dialog.get_widget().get_app_info() : null;
if (appInfo)
this._rules.append(appInfo);
dialog.destroy(); dialog.destroy();
}); });
dialog.show_all(); dialog.show();
}
}
class WorkspaceSelector extends Gtk.Widget {
static [GObject.properties] = {
'number': GObject.ParamSpec.uint(
'number', 'number', 'number',
GObject.ParamFlags.READWRITE,
1, WORKSPACE_MAX, 1),
};
static {
GObject.registerClass(this);
this.set_layout_manager_type(Gtk.BoxLayout);
} }
_deleteSelected() { constructor() {
let [any, model, iter] = this._treeView.get_selection().get_selected(); super();
if (any) { this.layout_manager.spacing = 6;
let appInfo = this._store.get_value(iter, Columns.APPINFO);
this._changedPermitted = false; const label = new Gtk.Label({
this._removeItem(appInfo.get_id()); xalign: 1,
this._changedPermitted = true; margin_end: 6,
this._store.remove(iter); });
} this.bind_property('number',
label, 'label',
GObject.BindingFlags.SYNC_CREATE);
label.set_parent(this);
const buttonProps = {
css_classes: ['circular'],
valign: Gtk.Align.CENTER,
};
this._decButton = new Gtk.Button({
icon_name: 'list-remove-symbolic',
...buttonProps,
});
this._decButton.set_parent(this);
this._decButton.connect('clicked', () => this.number--);
this._incButton = new Gtk.Button({
icon_name: 'list-add-symbolic',
...buttonProps,
});
this._incButton.set_parent(this);
this._incButton.connect('clicked', () => this.number++);
this.connect('notify::number', () => this._syncButtons());
this._syncButtons();
} }
_workspaceEdited(renderer, pathString, text) { _syncButtons() {
let index = parseInt(text); this._decButton.sensitive = this.number > 1;
if (isNaN(index) || index < 0) this._incButton.sensitive = this.number < WORKSPACE_MAX;
index = 1; }
let path = Gtk.TreePath.new_from_string(pathString); }
let [model, iter] = this._store.get_iter(path);
let appInfo = this._store.get_value(iter, Columns.APPINFO);
this._changedPermitted = false; class RuleRow extends Adw.ActionRow {
this._changeItem(appInfo.get_id(), index); static {
this._store.set_value(iter, Columns.WORKSPACE, index); GObject.registerClass(this);
this._changedPermitted = true;
} }
_refresh() { constructor(rule) {
if (!this._changedPermitted) const { appInfo } = rule;
// Ignore this notification, model is being modified outside const id = appInfo.get_id();
return;
this._store.clear(); super({
activatable: false,
title: rule.appInfo.get_display_name(),
});
let currentItems = this._settings.get_strv(SETTINGS_KEY); const icon = new Gtk.Image({
let validItems = [ ]; css_classes: ['icon-dropshadow'],
for (let i = 0; i < currentItems.length; i++) { gicon: appInfo.get_icon(),
let [id, index] = currentItems[i].split(':'); pixel_size: 32,
let appInfo = Gio.DesktopAppInfo.new(id); });
if (!appInfo) this.add_prefix(icon);
continue;
validItems.push(currentItems[i]);
let iter = this._store.append(); const wsButton = new WorkspaceSelector();
let adj = new Gtk.Adjustment({ lower: 1, rule.bind_property('workspace',
upper: WORKSPACE_MAX, wsButton, 'number',
step_increment: 1, GObject.BindingFlags.SYNC_CREATE);
value: index }); this.add_suffix(wsButton);
this._store.set(iter,
[Columns.APPINFO, Columns.ICON, Columns.DISPLAY_NAME, Columns.WORKSPACE, Columns.ADJUSTMENT],
[appInfo, appInfo.get_icon(), appInfo.get_display_name(), parseInt(index), adj]);
}
if (validItems.length != currentItems.length) // some items were filtered out wsButton.connect('notify::number', () => {
this._settings.set_strv(SETTINGS_KEY, validItems); this.activate_action('rules.change-workspace',
new GLib.Variant('(si)', [id, wsButton.number]));
});
const button = new Gtk.Button({
action_name: 'rules.remove',
action_target: new GLib.Variant('s', id),
icon_name: 'edit-delete-symbolic',
has_frame: false,
valign: Gtk.Align.CENTER,
});
this.add_suffix(button);
}
}
class NewRuleRow extends Gtk.ListBoxRow {
static {
GObject.registerClass(this);
} }
_checkId(id) { constructor() {
let items = this._settings.get_strv(SETTINGS_KEY); super({
return !items.some(i => i.startsWith(id + ':')); action_name: 'rules.add',
child: new Gtk.Image({
icon_name: 'list-add-symbolic',
pixel_size: 16,
margin_top: 12,
margin_bottom: 12,
margin_start: 12,
margin_end: 12,
}),
});
this.update_property(
[Gtk.AccessibleProperty.LABEL], [_('Add Rule')]);
}
}
class NewRuleDialog extends Gtk.AppChooserDialog {
static {
GObject.registerClass(this);
} }
_appendItem(id, workspace) { constructor(parent) {
let currentItems = this._settings.get_strv(SETTINGS_KEY); super({
currentItems.push(id + ':' + workspace); transient_for: parent,
this._settings.set_strv(SETTINGS_KEY, currentItems); modal: true,
});
this._settings = ExtensionUtils.getSettings();
this.get_widget().set({
show_all: true,
show_other: true, // hide more button
});
this.get_widget().connect('application-selected',
this._updateSensitivity.bind(this));
this._updateSensitivity();
} }
_removeItem(id) { _updateSensitivity() {
let currentItems = this._settings.get_strv(SETTINGS_KEY); const rules = this._settings.get_strv(SETTINGS_KEY);
let index = currentItems.map(el => el.split(':')[0]).indexOf(id); const appInfo = this.get_widget().get_app_info();
this.set_response_sensitive(Gtk.ResponseType.OK,
if (index < 0) appInfo && !rules.some(i => i.startsWith(appInfo.get_id())));
return;
currentItems.splice(index, 1);
this._settings.set_strv(SETTINGS_KEY, currentItems);
} }
}
_changeItem(id, workspace) { /** */
let currentItems = this._settings.get_strv(SETTINGS_KEY);
let index = currentItems.map(el => el.split(':')[0]).indexOf(id);
if (index < 0)
currentItems.push(id + ':' + workspace);
else
currentItems[index] = id + ':' + workspace;
this._settings.set_strv(SETTINGS_KEY, currentItems);
}
});
function init() { function init() {
Convenience.initTranslations(); ExtensionUtils.initTranslations();
} }
/**
* @returns {Gtk.Widget} - the prefs widget
*/
function buildPrefsWidget() { function buildPrefsWidget() {
let widget = new Widget({ margin: 12 }); return new AutoMoveSettingsWidget();
widget.show_all();
return widget;
} }
@@ -1 +0,0 @@
/* This extensions requires no special styling */
+98 -69
View File
@@ -1,43 +1,57 @@
/* exported init enable disable */
// Drive menu extension // Drive menu extension
const Clutter = imports.gi.Clutter; const { Clutter, Gio, GObject, Shell, St } = imports.gi;
const Gio = imports.gi.Gio;
const St = imports.gi.St;
const Shell = imports.gi.Shell;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const ExtensionUtils = imports.misc.extensionUtils;
const Main = imports.ui.main; const Main = imports.ui.main;
const Panel = imports.ui.panel;
const PanelMenu = imports.ui.panelMenu; const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
const ShellMountOperation = imports.ui.shellMountOperation; const ShellMountOperation = imports.ui.shellMountOperation;
const ExtensionUtils = imports.misc.extensionUtils; const _ = ExtensionUtils.gettext;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience; Gio._promisify(Gio.File.prototype, 'query_filesystem_info_async');
class MountMenuItem extends PopupMenu.PopupBaseMenuItem { class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
constructor(mount) { static {
super(); GObject.registerClass(this);
}
this.label = new St.Label({ text: mount.get_name() }); constructor(mount) {
this.actor.add(this.label, { expand: true }); super({
this.actor.label_actor = this.label; style_class: 'drive-menu-item',
});
this.label = new St.Label({
text: mount.get_name(),
x_expand: true,
y_align: Clutter.ActorAlign.CENTER,
});
this.add_child(this.label);
this.label_actor = this.label;
this.mount = mount; this.mount = mount;
let ejectIcon = new St.Icon({ icon_name: 'media-eject-symbolic', this.connect('destroy', this._onDestroy.bind(this));
style_class: 'popup-menu-icon ' });
let ejectButton = new St.Button({ child: ejectIcon }); let ejectIcon = new St.Icon({
icon_name: 'media-eject-symbolic',
style_class: 'popup-menu-icon',
});
let ejectButton = new St.Button({
child: ejectIcon,
style_class: 'button',
});
ejectButton.connect('clicked', this._eject.bind(this)); ejectButton.connect('clicked', this._eject.bind(this));
this.actor.add(ejectButton); this.add(ejectButton);
this.hide();
this._changedId = mount.connect('changed', this._syncVisibility.bind(this)); this._changedId = mount.connect('changed', this._syncVisibility.bind(this));
this._syncVisibility(); this._syncVisibility();
} }
destroy() { _onDestroy() {
if (this._changedId) { if (this._changedId) {
this.mount.disconnect(this._changedId); this.mount.disconnect(this._changedId);
this._changedId = 0; this._changedId = 0;
@@ -46,7 +60,7 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
super.destroy(); super.destroy();
} }
_isInteresting() { async _isInteresting() {
if (!this.mount.can_eject() && !this.mount.can_unmount()) if (!this.mount.can_eject() && !this.mount.can_unmount())
return false; return false;
if (this.mount.is_shadowed()) if (this.mount.is_shadowed())
@@ -54,38 +68,47 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
let volume = this.mount.get_volume(); let volume = this.mount.get_volume();
if (volume == null) { if (volume)
// probably a GDaemonMount, could be network or return volume.get_identifier('class') !== 'network';
// local, but we can't tell; assume it's local for now
return true; const root = this.mount.get_root();
try {
const attr = Gio.FILE_ATTRIBUTE_FILESYSTEM_REMOTE;
const info = await root.query_filesystem_info_async(attr, null);
return !info.get_attribute_boolean(attr);
} catch (e) {
log(`Failed to query filesystem: ${e.message}`);
} }
return volume.get_identifier('class') != 'network'; // Hack, fall back to looking at GType
return Gio._LocalFilePrototype.isPrototypeOf(root);
} }
_syncVisibility() { async _syncVisibility() {
this.actor.visible = this._isInteresting(); this.visible = await this._isInteresting();
} }
_eject() { _eject() {
let mountOp = new ShellMountOperation.ShellMountOperation(this.mount); let unmountArgs = [
Gio.MountUnmountFlags.NONE,
new ShellMountOperation.ShellMountOperation(this.mount).mountOp,
null, // Gio.Cancellable
];
if (this.mount.can_eject()) if (this.mount.can_eject()) {
this.mount.eject_with_operation(Gio.MountUnmountFlags.NONE, this.mount.eject_with_operation(...unmountArgs,
mountOp.mountOp, this._ejectFinish.bind(this));
null, // Gio.Cancellable } else {
this._ejectFinish.bind(this)); this.mount.unmount_with_operation(...unmountArgs,
else this._unmountFinish.bind(this));
this.mount.unmount_with_operation(Gio.MountUnmountFlags.NONE, }
mountOp.mountOp,
null, // Gio.Cancellable
this._unmountFinish.bind(this));
} }
_unmountFinish(mount, result) { _unmountFinish(mount, result) {
try { try {
mount.unmount_with_operation_finish(result); mount.unmount_with_operation_finish(result);
} catch(e) { } catch (e) {
this._reportFailure(e); this._reportFailure(e);
} }
} }
@@ -93,54 +116,55 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
_ejectFinish(mount, result) { _ejectFinish(mount, result) {
try { try {
mount.eject_with_operation_finish(result); mount.eject_with_operation_finish(result);
} catch(e) { } catch (e) {
this._reportFailure(e); this._reportFailure(e);
} }
} }
_reportFailure(exception) { _reportFailure(exception) {
// TRANSLATORS: %s is the filesystem name // TRANSLATORS: %s is the filesystem name
let msg = _("Ejecting drive “%s” failed:").format(this.mount.get_name()); let msg = _('Ejecting drive “%s” failed:').format(this.mount.get_name());
Main.notifyError(msg, exception.message); Main.notifyError(msg, exception.message);
} }
activate(event) { activate(event) {
let uri = this.mount.get_root().get_uri();
let context = global.create_app_launch_context(event.get_time(), -1); let context = global.create_app_launch_context(event.get_time(), -1);
Gio.AppInfo.launch_default_for_uri(this.mount.get_root().get_uri(), Gio.AppInfo.launch_default_for_uri(uri, context);
context);
super.activate(event); super.activate(event);
} }
}; }
class DriveMenu extends PanelMenu.Button { class DriveMenu extends PanelMenu.Button {
static {
GObject.registerClass(this);
}
constructor() { constructor() {
super(0.0, _("Removable devices")); super(0.0, _('Removable devices'));
let hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' }); let icon = new St.Icon({
let icon = new St.Icon({ icon_name: 'media-eject-symbolic', icon_name: 'media-eject-symbolic',
style_class: 'system-status-icon' }); style_class: 'system-status-icon',
});
hbox.add_child(icon); this.add_child(icon);
hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM));
this.actor.add_child(hbox);
this._monitor = Gio.VolumeMonitor.get(); this._monitor = Gio.VolumeMonitor.get();
this._addedId = this._monitor.connect('mount-added', (monitor, mount) => { this._addedId = this._monitor.connect('mount-added',
this._addMount(mount); (monitor, mount) => this._addMount(mount));
this._updateMenuVisibility();
});
this._removedId = this._monitor.connect('mount-removed', (monitor, mount) => { this._removedId = this._monitor.connect('mount-removed', (monitor, mount) => {
this._removeMount(mount); this._removeMount(mount);
this._updateMenuVisibility(); this._updateMenuVisibility();
}); });
this._mounts = [ ]; this._mounts = [];
this._monitor.get_mounts().forEach(this._addMount.bind(this)); this._monitor.get_mounts().forEach(this._addMount.bind(this));
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addAction(_("Open Files"), event => { this.menu.addAction(_('Open Files'), event => {
let appSystem = Shell.AppSystem.get_default(); let appSystem = Shell.AppSystem.get_default();
let app = appSystem.lookup_app('org.gnome.Nautilus.desktop'); let app = appSystem.lookup_app('org.gnome.Nautilus.desktop');
app.activate_full(-1, event.get_time()); app.activate_full(-1, event.get_time());
@@ -150,31 +174,33 @@ class DriveMenu extends PanelMenu.Button {
} }
_updateMenuVisibility() { _updateMenuVisibility() {
if (this._mounts.filter(i => i.actor.visible).length > 0) if (this._mounts.filter(i => i.visible).length > 0)
this.actor.show(); this.show();
else else
this.actor.hide(); this.hide();
} }
_addMount(mount) { _addMount(mount) {
let item = new MountMenuItem(mount); let item = new MountMenuItem(mount);
this._mounts.unshift(item); this._mounts.unshift(item);
this.menu.addMenuItem(item, 0); this.menu.addMenuItem(item, 0);
item.connect('notify::visible', () => this._updateMenuVisibility());
} }
_removeMount(mount) { _removeMount(mount) {
for (let i = 0; i < this._mounts.length; i++) { for (let i = 0; i < this._mounts.length; i++) {
let item = this._mounts[i]; let item = this._mounts[i];
if (item.mount == mount) { if (item.mount === mount) {
item.destroy(); item.destroy();
this._mounts.splice(i, 1); this._mounts.splice(i, 1);
return; return;
} }
} }
log ('Removing a mount that was never added to the menu'); log('Removing a mount that was never added to the menu');
} }
destroy() { _onDestroy() {
if (this._addedId) { if (this._addedId) {
this._monitor.disconnect(this._addedId); this._monitor.disconnect(this._addedId);
this._monitor.disconnect(this._removedId); this._monitor.disconnect(this._removedId);
@@ -182,21 +208,24 @@ class DriveMenu extends PanelMenu.Button {
this._removedId = 0; this._removedId = 0;
} }
super.destroy(); super._onDestroy();
} }
}; }
/** */
function init() { function init() {
Convenience.initTranslations(); ExtensionUtils.initTranslations();
} }
let _indicator; let _indicator;
/** */
function enable() { function enable() {
_indicator = new DriveMenu; _indicator = new DriveMenu();
Main.panel.addToStatusArea('drive-menu', _indicator); Main.panel.addToStatusArea('drive-menu', _indicator);
} }
/** */
function disable() { function disable() {
_indicator.destroy(); _indicator.destroy();
} }
+1
View File
@@ -3,3 +3,4 @@ extension_data += configure_file(
output: metadata_name, output: metadata_name,
configuration: metadata_conf configuration: metadata_conf
) )
extension_data += files('stylesheet.css')
+7 -1
View File
@@ -1 +1,7 @@
/* This extensions requires no custom styling */ .drive-menu-item { spacing: 12px; }
.drive-menu-item .button {
border-radius: 99px;
padding: 3px;
min-height: auto;
}
-49
View File
@@ -1,49 +0,0 @@
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
// Sample extension code, makes clicking on the panel show a message
const St = imports.gi.St;
const Mainloop = imports.mainloop;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const Main = imports.ui.main;
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
function _showHello() {
let settings = Convenience.getSettings();
let text = settings.get_string('hello-text') || _("Hello, world!");
let label = new St.Label({ style_class: 'helloworld-label', text: text });
let monitor = Main.layoutManager.primaryMonitor;
global.stage.add_actor(label);
label.set_position(Math.floor (monitor.width / 2 - label.width / 2), Math.floor(monitor.height / 2 - label.height / 2));
Mainloop.timeout_add(3000, () => { label.destroy(); });
}
// Put your extension initialization code here
function init(metadata) {
log ('Example extension initalized');
Convenience.initTranslations();
}
let signalId;
function enable() {
log ('Example extension enabled');
Main.panel.actor.reactive = true;
signalId = Main.panel.actor.connect('button-release-event', _showHello);
}
function disable() {
log ('Example extension disabled');
if (signalId) {
Main.panel.actor.disconnect(signalId);
signalId = 0;
}
}
-8
View File
@@ -1,8 +0,0 @@
extension_data += configure_file(
input: metadata_name + '.in',
output: metadata_name,
configuration: metadata_conf
)
extension_sources += files('prefs.js')
extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml')
-10
View File
@@ -1,10 +0,0 @@
{
"extension-id": "@extension_id@",
"uuid": "@uuid@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "Hello, World!",
"description": "An example extension to show how it works. Shows Hello, world when clicking on the top panel.",
"shell-version": [ "@shell_current@" ],
"url": "@url@"
}
@@ -1,9 +0,0 @@
<schemalist gettext-domain="gnome-shell-extensions">
<schema id="org.gnome.shell.extensions.example" path="/org/gnome/shell/extensions/example/">
<key name="hello-text" type="s">
<default>''</default>
<summary>Alternative greeting text.</summary>
<description>If not empty, it contains the text that will be shown when clicking on the panel.</description>
</key>
</schema>
</schemalist>
-54
View File
@@ -1,54 +0,0 @@
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
const GLib = imports.gi.GLib;
const GObject = imports.gi.GObject;
const Gio = imports.gi.Gio;
const Gtk = imports.gi.Gtk;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
function init() {
Convenience.initTranslations();
}
const ExamplePrefsWidget = GObject.registerClass(
class ExamplePrefsWidget extends Gtk.Grid {
_init(params) {
super._init(params);
this.margin = 12;
this.row_spacing = this.column_spacing = 6;
this.set_orientation(Gtk.Orientation.VERTICAL);
this.add(new Gtk.Label({ label: '<b>' + _("Message") + '</b>',
use_markup: true,
halign: Gtk.Align.START }));
let entry = new Gtk.Entry({ hexpand: true,
margin_bottom: 12 });
this.add(entry);
this._settings = Convenience.getSettings();
this._settings.bind('hello-text', entry, 'text', Gio.SettingsBindFlags.DEFAULT);
// TRANSLATORS: Example is the name of the extension, should not be
// translated
let primaryText = _("Example aims to show how to build well behaved \
extensions for the Shell and as such it has little functionality on its own.\n\
Nevertheless its possible to customize the greeting message.");
this.add(new Gtk.Label({ label: primaryText,
wrap: true, xalign: 0 }));
}
});
function buildPrefsWidget() {
let widget = new ExamplePrefsWidget();
widget.show_all();
return widget;
}
-8
View File
@@ -1,8 +0,0 @@
/* Example stylesheet */
.helloworld-label {
font-size: 36px;
font-weight: bold;
color: #ffffff;
background-color: rgba(10,10,10,0.7);
border-radius: 5px;
}
+8 -8
View File
@@ -1,17 +1,17 @@
/* exported enable disable */
const AppDisplay = imports.ui.appDisplay; const AppDisplay = imports.ui.appDisplay;
let _activateOriginal = null; let _activateOriginal = null;
function init() { /** */
}
function enable() { function enable() {
_activateOriginal = AppDisplay.AppIcon.prototype.activate; _activateOriginal = AppDisplay.AppIcon.prototype.activate;
AppDisplay.AppIcon.prototype.activate = function() { AppDisplay.AppIcon.prototype.activate = function () {
_activateOriginal.call(this, 2); _activateOriginal.call(this, 2);
}; };
} }
/** */
function disable() { function disable() {
AppDisplay.AppIcon.prototype.activate = _activateOriginal; AppDisplay.AppIcon.prototype.activate = _activateOriginal;
} }
@@ -1 +0,0 @@
/* This extensions requires no special styling */
+6 -22
View File
@@ -1,9 +1,9 @@
extension_schemas = [] extension_schemas = []
js_sources = extensionlib js_sources = []
metadata_name = 'metadata.json' metadata_name = 'metadata.json'
foreach e : all_extensions foreach e : enabled_extensions
uuid = e + uuid_suffix uuid = e + uuid_suffix
metadata_conf = configuration_data() metadata_conf = configuration_data()
@@ -15,31 +15,15 @@ foreach e : all_extensions
metadata_conf.set('url', 'https://gitlab.gnome.org/GNOME/gnome-shell-extensions') metadata_conf.set('url', 'https://gitlab.gnome.org/GNOME/gnome-shell-extensions')
extension_sources = files(e + '/extension.js') extension_sources = files(e + '/extension.js')
extension_data = files(e + '/stylesheet.css') extension_data = []
subdir(e) subdir(e)
js_sources += extension_sources install_data (extension_sources + extension_data,
install_dir: join_paths(extensiondir, uuid)
if (enabled_extensions.contains(e)) )
install_data (extension_sources + extension_data + extensionlib,
install_dir: join_paths(extensiondir, uuid)
)
endif
endforeach endforeach
install_data (extension_schemas, install_data (extension_schemas,
install_dir: schemadir install_dir: schemadir
) )
foreach js_source : js_sources
if (js52.found())
path_array = '@0@'.format(js_source).split('/')
name = join_paths(path_array[-2], path_array[-1])
test('Checking syntax of ' + name, js52,
args: ['-s', '-c', js_source],
workdir: meson.current_source_dir()
)
endif
endforeach
+1
View File
@@ -4,5 +4,6 @@ extension_data += configure_file(
configuration: metadata_conf configuration: metadata_conf
) )
# extension_data += files('stylesheet.css')
# extension_sources += files('prefs.js') # extension_sources += files('prefs.js')
# extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml') # extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml')
+115 -104
View File
@@ -1,13 +1,13 @@
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- // -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
const Workspace = imports.ui.workspace; /* exported enable disable */
const { Clutter } = imports.gi;
const ExtensionUtils = imports.misc.extensionUtils; const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension(); const Main = imports.ui.main;
const Convenience = Me.imports.convenience; const { WindowPreview } = imports.ui.windowPreview;
const Workspace = imports.ui.workspace;
// testing settings for natural window placement strategy: // testing settings for natural window placement strategy:
const WINDOW_PLACEMENT_NATURAL_FILLGAPS = true; // enlarge windows at the end to fill gaps // not implemented yet
const WINDOW_PLACEMENT_NATURAL_GRID_FALLBACK = true; // fallback to grid mode if all windows have the same size and positions. // not implemented yet
const WINDOW_PLACEMENT_NATURAL_ACCURACY = 20; // accuracy of window translate moves (KDE-default: 20) const WINDOW_PLACEMENT_NATURAL_ACCURACY = 20; // accuracy of window translate moves (KDE-default: 20)
const WINDOW_PLACEMENT_NATURAL_GAPS = 5; // half of the minimum gap between windows const WINDOW_PLACEMENT_NATURAL_GAPS = 5; // half of the minimum gap between windows
const WINDOW_PLACEMENT_NATURAL_MAX_TRANSLATIONS = 5000; // safety limit for preventing endless loop if something is wrong in the algorithm const WINDOW_PLACEMENT_NATURAL_MAX_TRANSLATIONS = 5000; // safety limit for preventing endless loop if something is wrong in the algorithm
@@ -17,29 +17,25 @@ class Rect {
[this.x, this.y, this.width, this.height] = [x, y, width, height]; [this.x, this.y, this.width, this.height] = [x, y, width, height];
} }
/** // used in _calculateWindowTransformationsNatural to replace Meta.Rectangle that is too slow.
* used in _calculateWindowTransformationsNatural to replace Meta.Rectangle that is too slow.
*/
copy() { copy() {
return new Rect(this.x, this.y, this.width, this.height); return new Rect(this.x, this.y, this.width, this.height);
} }
union(rect2) { union(rect2) {
let dest = this.copy(); let dest = this.copy();
if (rect2.x < dest.x) if (rect2.x < dest.x) {
{
dest.width += dest.x - rect2.x; dest.width += dest.x - rect2.x;
dest.x = rect2.x; dest.x = rect2.x;
} }
if (rect2.y < dest.y) if (rect2.y < dest.y) {
{
dest.height += dest.y - rect2.y; dest.height += dest.y - rect2.y;
dest.y = rect2.y; dest.y = rect2.y;
} }
if (rect2.x + rect2.width > dest.x + dest.width) if (rect2.x + rect2.width > dest.x + dest.width)
dest.width = rect2.x + rect2.width - dest.x; dest.width = rect2.x + rect2.width - dest.x;
if (rect2.y + rect2.height > dest.y + dest.height) if (rect2.y + rect2.height > dest.y + dest.height)
dest.height = rect2.y + rect2.height - dest.y; dest.height = rect2.y + rect2.height - dest.y;
return dest; return dest;
} }
@@ -54,10 +50,10 @@ class Rect {
} }
overlap(rect2) { overlap(rect2) {
return !((this.x + this.width <= rect2.x) || return !(this.x + this.width <= rect2.x ||
(rect2.x + rect2.width <= this.x) || rect2.x + rect2.width <= this.x ||
(this.y + this.height <= rect2.y) || this.y + this.height <= rect2.y ||
(rect2.y + rect2.height <= this.y)); rect2.y + rect2.height <= this.y);
} }
center() { center() {
@@ -68,19 +64,21 @@ class Rect {
this.x += dx; this.x += dx;
this.y += dy; this.y += dy;
} }
}; }
class NaturalLayoutStrategy extends Workspace.LayoutStrategy { class NaturalLayoutStrategy extends Workspace.LayoutStrategy {
constructor(settings) { constructor(params, settings) {
super(); super(params);
this._settings = settings; this._settings = settings;
} }
computeLayout(windows, layout) { computeLayout(windows, _params) {
layout.windows = windows; return {
windows,
};
} }
/** /*
* Returns clones with matching target coordinates and scales to arrange windows in a natural way that no overlap exists and relative window size is preserved. * Returns clones with matching target coordinates and scales to arrange windows in a natural way that no overlap exists and relative window size is preserved.
* This function is almost a 1:1 copy of the function * This function is almost a 1:1 copy of the function
* PresentWindowsEffect::calculateWindowTransformationsNatural() from KDE, see: * PresentWindowsEffect::calculateWindowTransformationsNatural() from KDE, see:
@@ -90,8 +88,8 @@ class NaturalLayoutStrategy extends Workspace.LayoutStrategy {
// As we are using pseudo-random movement (See "slot") we need to make sure the list // As we are using pseudo-random movement (See "slot") we need to make sure the list
// is always sorted the same way no matter which window is currently active. // is always sorted the same way no matter which window is currently active.
let area_rect = new Rect(area.x, area.y, area.width, area.height); let areaRect = new Rect(area.x, area.y, area.width, area.height);
let bounds = area_rect.copy(); let bounds = areaRect.copy();
let clones = layout.windows; let clones = layout.windows;
let direction = 0; let direction = 0;
@@ -99,43 +97,43 @@ class NaturalLayoutStrategy extends Workspace.LayoutStrategy {
let rects = []; let rects = [];
for (let i = 0; i < clones.length; i++) { for (let i = 0; i < clones.length; i++) {
// save rectangles into 4-dimensional arrays representing two corners of the rectangular: [left_x, top_y, right_x, bottom_y] // save rectangles into 4-dimensional arrays representing two corners of the rectangular: [left_x, top_y, right_x, bottom_y]
let rect = clones[i].metaWindow.get_frame_rect(); let rect = clones[i].boundingBox;
rects[i] = new Rect(rect.x, rect.y, rect.width, rect.height); rects[i] = new Rect(rect.x, rect.y, rect.width, rect.height);
bounds = bounds.union(rects[i]); bounds = bounds.union(rects[i]);
// This is used when the window is on the edge of the screen to try to use as much screen real estate as possible. // This is used when the window is on the edge of the screen to try to use as much screen real estate as possible.
directions[i] = direction; directions[i] = direction;
direction++; direction++;
if (direction == 4) { if (direction === 4)
direction = 0; direction = 0;
}
} }
let loop_counter = 0; let loopCounter = 0;
let overlap; let overlap;
do { do {
overlap = false; overlap = false;
for (let i = 0; i < rects.length; i++) { for (let i = 0; i < rects.length; i++) {
for (let j = 0; j < rects.length; j++) { for (let j = 0; j < rects.length; j++) {
if (i != j && rects[i].adjusted(-WINDOW_PLACEMENT_NATURAL_GAPS, -WINDOW_PLACEMENT_NATURAL_GAPS, let adjustments = [-1, -1, 1, 1]
WINDOW_PLACEMENT_NATURAL_GAPS, WINDOW_PLACEMENT_NATURAL_GAPS).overlap( .map(v => (v *= WINDOW_PLACEMENT_NATURAL_GAPS));
rects[j].adjusted(-WINDOW_PLACEMENT_NATURAL_GAPS, -WINDOW_PLACEMENT_NATURAL_GAPS, let iAdjusted = rects[i].adjusted(...adjustments);
WINDOW_PLACEMENT_NATURAL_GAPS, WINDOW_PLACEMENT_NATURAL_GAPS))) { let jAdjusted = rects[j].adjusted(...adjustments);
loop_counter++; if (i !== j && iAdjusted.overlap(jAdjusted)) {
loopCounter++;
overlap = true; overlap = true;
// TODO: something like a Point2D would be nicer here: // TODO: something like a Point2D would be nicer here:
// Determine pushing direction // Determine pushing direction
let i_center = rects[i].center(); let iCenter = rects[i].center();
let j_center = rects[j].center(); let jCenter = rects[j].center();
let diff = [j_center[0] - i_center[0], j_center[1] - i_center[1]]; let diff = [jCenter[0] - iCenter[0], jCenter[1] - iCenter[1]];
// Prevent dividing by zero and non-movement // Prevent dividing by zero and non-movement
if (diff[0] == 0 && diff[1] == 0) if (diff[0] === 0 && diff[1] === 0)
diff[0] = 1; diff[0] = 1;
// Try to keep screen/workspace aspect ratio // Try to keep screen/workspace aspect ratio
if ( bounds.height / bounds.width > area_rect.height / area_rect.width ) if (bounds.height / bounds.width > areaRect.height / areaRect.width)
diff[0] *= 2; diff[0] *= 2;
else else
diff[1] *= 2; diff[1] *= 2;
@@ -164,33 +162,33 @@ class NaturalLayoutStrategy extends Workspace.LayoutStrategy {
let xSection = Math.round((rects[i].x - bounds.x) / (bounds.width / 3)); let xSection = Math.round((rects[i].x - bounds.x) / (bounds.width / 3));
let ySection = Math.round((rects[i].y - bounds.y) / (bounds.height / 3)); let ySection = Math.round((rects[i].y - bounds.y) / (bounds.height / 3));
let i_center = rects[i].center(); iCenter = rects[i].center();
diff[0] = 0; diff[0] = 0;
diff[1] = 0; diff[1] = 0;
if (xSection != 1 || ySection != 1) { // Remove this if you want the center to pull as well if (xSection !== 1 || ySection !== 1) { // Remove this if you want the center to pull as well
if (xSection == 1) if (xSection === 1)
xSection = (directions[i] / 2 ? 2 : 0); xSection = directions[i] / 2 ? 2 : 0;
if (ySection == 1) if (ySection === 1)
ySection = (directions[i] % 2 ? 2 : 0); ySection = directions[i] % 2 ? 2 : 0;
} }
if (xSection == 0 && ySection == 0) { if (xSection === 0 && ySection === 0) {
diff[0] = bounds.x - i_center[0]; diff[0] = bounds.x - iCenter[0];
diff[1] = bounds.y - i_center[1]; diff[1] = bounds.y - iCenter[1];
} }
if (xSection == 2 && ySection == 0) { if (xSection === 2 && ySection === 0) {
diff[0] = bounds.x + bounds.width - i_center[0]; diff[0] = bounds.x + bounds.width - iCenter[0];
diff[1] = bounds.y - i_center[1]; diff[1] = bounds.y - iCenter[1];
} }
if (xSection == 2 && ySection == 2) { if (xSection === 2 && ySection === 2) {
diff[0] = bounds.x + bounds.width - i_center[0]; diff[0] = bounds.x + bounds.width - iCenter[0];
diff[1] = bounds.y + bounds.height - i_center[1]; diff[1] = bounds.y + bounds.height - iCenter[1];
} }
if (xSection == 0 && ySection == 2) { if (xSection === 0 && ySection === 2) {
diff[0] = bounds.x - i_center[0]; diff[0] = bounds.x - iCenter[0];
diff[1] = bounds.y + bounds.height - i_center[1]; diff[1] = bounds.y + bounds.height - iCenter[1];
} }
if (diff[0] != 0 || diff[1] != 0) { if (diff[0] !== 0 || diff[1] !== 0) {
let length = Math.sqrt(diff[0]*diff[0] + diff[1]*diff[1]); length = Math.sqrt(diff[0] * diff[0] + diff[1] * diff[1]);
diff[0] *= WINDOW_PLACEMENT_NATURAL_ACCURACY / length / 2; // /2 to make it less influencing than the normal center-move above diff[0] *= WINDOW_PLACEMENT_NATURAL_ACCURACY / length / 2; // /2 to make it less influencing than the normal center-move above
diff[1] *= WINDOW_PLACEMENT_NATURAL_ACCURACY / length / 2; diff[1] *= WINDOW_PLACEMENT_NATURAL_ACCURACY / length / 2;
rects[i].translate(diff[0], diff[1]); rects[i].translate(diff[0], diff[1]);
@@ -203,78 +201,94 @@ class NaturalLayoutStrategy extends Workspace.LayoutStrategy {
} }
} }
} }
} while (overlap && loop_counter < WINDOW_PLACEMENT_NATURAL_MAX_TRANSLATIONS); } while (overlap && loopCounter < WINDOW_PLACEMENT_NATURAL_MAX_TRANSLATIONS);
// Work out scaling by getting the most top-left and most bottom-right window coords. // Work out scaling by getting the most top-left and most bottom-right window coords.
let scale; let scale;
scale = Math.min(area_rect.width / bounds.width, scale = Math.min(
area_rect.height / bounds.height, areaRect.width / bounds.width,
1.0); areaRect.height / bounds.height,
1.0);
// Make bounding rect fill the screen size for later steps // Make bounding rect fill the screen size for later steps
bounds.x = bounds.x - (area_rect.width - bounds.width * scale) / 2; bounds.x -= (areaRect.width - bounds.width * scale) / 2;
bounds.y = bounds.y - (area_rect.height - bounds.height * scale) / 2; bounds.y -= (areaRect.height - bounds.height * scale) / 2;
bounds.width = area_rect.width / scale; bounds.width = areaRect.width / scale;
bounds.height = area_rect.height / scale; bounds.height = areaRect.height / scale;
// Move all windows back onto the screen and set their scale // Move all windows back onto the screen and set their scale
for (let i = 0; i < rects.length; i++) { for (let i = 0; i < rects.length; i++)
rects[i].translate(-bounds.x, -bounds.y); rects[i].translate(-bounds.x, -bounds.y);
}
// TODO: Implement the KDE part "Try to fill the gaps by enlarging windows if they have the space" here. (If this is wanted)
// rescale to workspace // rescale to workspace
let scales = [];
let buttonOuterHeight, captionHeight;
let buttonOuterWidth = 0;
let slots = []; let slots = [];
for (let i = 0; i < rects.length; i++) { for (let i = 0; i < rects.length; i++) {
rects[i].x = rects[i].x * scale + area_rect.x; rects[i].x = rects[i].x * scale + areaRect.x;
rects[i].y = rects[i].y * scale + area_rect.y; rects[i].y = rects[i].y * scale + areaRect.y;
rects[i].width *= scale;
rects[i].height *= scale;
slots.push([rects[i].x, rects[i].y, scale, clones[i]]); slots.push([rects[i].x, rects[i].y, rects[i].width, rects[i].height, clones[i]]);
} }
return slots; return slots;
} }
}; }
let winInjections, workspaceInjections; let winInjections, workspaceInjections;
/** */
function resetState() { function resetState() {
winInjections = { }; winInjections = { };
workspaceInjections = { }; workspaceInjections = { };
} }
/** */
function enable() { function enable() {
resetState(); resetState();
let settings = Convenience.getSettings(); let settings = ExtensionUtils.getSettings();
workspaceInjections['_getBestLayout'] = Workspace.Workspace.prototype._getBestLayout; workspaceInjections['_createBestLayout'] = Workspace.WorkspaceLayout.prototype._createBestLayout;
Workspace.Workspace.prototype._getBestLayout = function(windows) { Workspace.WorkspaceLayout.prototype._createBestLayout = function (_area) {
let strategy = new NaturalLayoutStrategy(settings); this._layoutStrategy = new NaturalLayoutStrategy({
let layout = { strategy }; monitor: Main.layoutManager.monitors[this._monitorIndex],
strategy.computeLayout(windows, layout); }, settings);
return this._layoutStrategy.computeLayout(this._sortedWindows);
};
return layout; // position window titles on top of windows in overlay
} winInjections['_init'] = WindowPreview.prototype._init;
WindowPreview.prototype._init = function (...args) {
winInjections['_init'].call(this, ...args);
/// position window titles on top of windows in overlay //// if (!settings.get_boolean('window-captions-on-top'))
winInjections['relayout'] = Workspace.WindowOverlay.prototype.relayout; return;
Workspace.WindowOverlay.prototype.relayout = function(animate) {
if (settings.get_boolean('window-captions-on-top')) {
let [, , , cloneHeight] = this._windowClone.slot;
this.title.translation_y = -cloneHeight;
}
winInjections['relayout'].call(this, animate); const alignConstraint = this._title.get_constraints().find(
c => c.align_axis && c.align_axis === Clutter.AlignAxis.Y_AXIS);
alignConstraint.factor = 0;
const bindConstraint = this._title.get_constraints().find(
c => c.coordinate && c.coordinate === Clutter.BindCoordinate.Y);
bindConstraint.offset = 0;
};
winInjections['_adjustOverlayOffsets'] =
WindowPreview.prototype._adjustOverlayOffsets;
WindowPreview.prototype._adjustOverlayOffsets = function (...args) {
winInjections['_adjustOverlayOffsets'].call(this, ...args);
if (settings.get_boolean('window-captions-on-top'))
this._title.translation_y = -this._title.translation_y;
}; };
} }
/**
* @param {object} object - object that was modified
* @param {object} injection - the map of previous injections
* @param {string} name - the @injection key that should be removed
*/
function removeInjection(object, injection, name) { function removeInjection(object, injection, name) {
if (injection[name] === undefined) if (injection[name] === undefined)
delete object[name]; delete object[name];
@@ -282,18 +296,15 @@ function removeInjection(object, injection, name) {
object[name] = injection[name]; object[name] = injection[name];
} }
/** */
function disable() { function disable() {
var i; var i;
for (i in workspaceInjections) for (i in workspaceInjections)
removeInjection(Workspace.Workspace.prototype, workspaceInjections, i); removeInjection(Workspace.WorkspaceLayout.prototype, workspaceInjections, i);
for (i in winInjections) for (i in winInjections)
removeInjection(Workspace.WindowOverlay.prototype, winInjections, i); removeInjection(WindowPreview.prototype, winInjections, i);
global.stage.queue_relayout(); global.stage.queue_relayout();
resetState(); resetState();
} }
function init() {
/* do nothing */
}
@@ -1,9 +0,0 @@
.window-caption {
-shell-caption-spacing: 13px; /* current caption height is 26px => set it to half of it. TODO: better solution needed */
}
.window-picker {
-horizontal-spacing: 32px;
-vertical-spacing: 32px;
padding: 64px 32px;
}
+61 -44
View File
@@ -1,49 +1,60 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */ /* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
/* exported init enable disable */
const Clutter = imports.gi.Clutter; const { Clutter, GObject, St } = imports.gi;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const ExtensionUtils = imports.misc.extensionUtils;
const Main = imports.ui.main; const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu; const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
const Panel = imports.ui.panel;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const N_ = x => x;
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension(); const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
const PlaceDisplay = Me.imports.placeDisplay; const PlaceDisplay = Me.imports.placeDisplay;
const _ = ExtensionUtils.gettext;
const N_ = x => x;
const PLACE_ICON_SIZE = 16; const PLACE_ICON_SIZE = 16;
class PlaceMenuItem extends PopupMenu.PopupBaseMenuItem { class PlaceMenuItem extends PopupMenu.PopupBaseMenuItem {
static {
GObject.registerClass(this);
}
constructor(info) { constructor(info) {
super(); super({
style_class: 'place-menu-item',
});
this._info = info; this._info = info;
this._icon = new St.Icon({ gicon: info.icon, this._icon = new St.Icon({
icon_size: PLACE_ICON_SIZE }); gicon: info.icon,
this.actor.add_child(this._icon); icon_size: PLACE_ICON_SIZE,
});
this.add_child(this._icon);
this._label = new St.Label({ text: info.name, x_expand: true }); this._label = new St.Label({
this.actor.add_child(this._label); text: info.name,
x_expand: true,
y_align: Clutter.ActorAlign.CENTER,
});
this.add_child(this._label);
if (info.isRemovable()) { if (info.isRemovable()) {
this._ejectIcon = new St.Icon({ icon_name: 'media-eject-symbolic', this._ejectIcon = new St.Icon({
style_class: 'popup-menu-icon ' }); icon_name: 'media-eject-symbolic',
this._ejectButton = new St.Button({ child: this._ejectIcon }); style_class: 'popup-menu-icon',
});
this._ejectButton = new St.Button({
child: this._ejectIcon,
style_class: 'button',
});
this._ejectButton.connect('clicked', info.eject.bind(info)); this._ejectButton.connect('clicked', info.eject.bind(info));
this.actor.add_child(this._ejectButton); this.add_child(this._ejectButton);
} }
this._changedId = info.connect('changed', this._changedId = info.connect('changed',
this._propertiesChanged.bind(this)); this._propertiesChanged.bind(this));
} }
destroy() { destroy() {
@@ -65,35 +76,38 @@ class PlaceMenuItem extends PopupMenu.PopupBaseMenuItem {
this._icon.gicon = info.icon; this._icon.gicon = info.icon;
this._label.text = info.name; this._label.text = info.name;
} }
}; }
const SECTIONS = [ const SECTIONS = [
'special', 'special',
'devices', 'devices',
'bookmarks', 'bookmarks',
'network' 'network',
] ];
class PlacesMenu extends PanelMenu.Button { class PlacesMenu extends PanelMenu.Button {
constructor() { static {
super(0.0, _("Places")); GObject.registerClass(this);
}
let hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' }); constructor() {
let label = new St.Label({ text: _("Places"), super(0.0, _('Places'));
y_expand: true,
y_align: Clutter.ActorAlign.CENTER }); let label = new St.Label({
hbox.add_child(label); text: _('Places'),
hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM)); y_expand: true,
this.actor.add_actor(hbox); y_align: Clutter.ActorAlign.CENTER,
});
this.add_actor(label);
this.placesManager = new PlaceDisplay.PlacesManager(); this.placesManager = new PlaceDisplay.PlacesManager();
this._sections = { }; this._sections = { };
for (let i=0; i < SECTIONS.length; i++) { for (let i = 0; i < SECTIONS.length; i++) {
let id = SECTIONS[i]; let id = SECTIONS[i];
this._sections[id] = new PopupMenu.PopupMenuSection(); this._sections[id] = new PopupMenu.PopupMenuSection();
this.placesManager.connect(id + '-updated', () => { this.placesManager.connect(`${id}-updated`, () => {
this._redisplay(id); this._redisplay(id);
}); });
@@ -103,10 +117,10 @@ class PlacesMenu extends PanelMenu.Button {
} }
} }
destroy() { _onDestroy() {
this.placesManager.destroy(); this.placesManager.destroy();
super.destroy(); super._onDestroy();
} }
_redisplay(id) { _redisplay(id) {
@@ -122,23 +136,26 @@ class PlacesMenu extends PanelMenu.Button {
this._sections[id].actor.visible = places.length > 0; this._sections[id].actor.visible = places.length > 0;
} }
}; }
/** */
function init() { function init() {
Convenience.initTranslations(); ExtensionUtils.initTranslations();
} }
let _indicator; let _indicator;
/** */
function enable() { function enable() {
_indicator = new PlacesMenu; _indicator = new PlacesMenu();
let pos = 1; let pos = Main.sessionMode.panel.left.indexOf('appMenu');
if ('apps-menu' in Main.panel.statusArea) if ('apps-menu' in Main.panel.statusArea)
pos = 2; pos++;
Main.panel.addToStatusArea('places-menu', _indicator, pos, 'left'); Main.panel.addToStatusArea('places-menu', _indicator, pos, 'left');
} }
/** */
function disable() { function disable() {
_indicator.destroy(); _indicator.destroy();
} }
+1
View File
@@ -3,5 +3,6 @@ extension_data += configure_file(
output: metadata_name, output: metadata_name,
configuration: metadata_conf configuration: metadata_conf
) )
extension_data += files('stylesheet.css')
extension_sources += files('placeDisplay.js') extension_sources += files('placeDisplay.js')
+134 -128
View File
@@ -1,23 +1,18 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const GLib = imports.gi.GLib; const { Gio, GLib, Shell } = imports.gi;
const Gio = imports.gi.Gio;
const Shell = imports.gi.Shell;
const Mainloop = imports.mainloop;
const Signals = imports.signals; const Signals = imports.signals;
const St = imports.gi.St;
const DND = imports.ui.dnd; const ExtensionUtils = imports.misc.extensionUtils;
const Main = imports.ui.main; const Main = imports.ui.main;
const Params = imports.misc.params;
const Search = imports.ui.search;
const ShellMountOperation = imports.ui.shellMountOperation; const ShellMountOperation = imports.ui.shellMountOperation;
const Util = imports.misc.util;
const Gettext = imports.gettext.domain('gnome-shell-extensions'); const _ = ExtensionUtils.gettext;
const _ = Gettext.gettext;
const N_ = x => x; const N_ = x => x;
Gio._promisify(Gio.AppInfo, 'launch_default_for_uri_async');
Gio._promisify(Gio.File.prototype, 'mount_enclosing_volume');
const BACKGROUND_SCHEMA = 'org.gnome.desktop.background'; const BACKGROUND_SCHEMA = 'org.gnome.desktop.background';
const Hostname1Iface = '<node> \ const Hostname1Iface = '<node> \
@@ -28,8 +23,8 @@ const Hostname1Iface = '<node> \
const Hostname1 = Gio.DBusProxy.makeProxyWrapper(Hostname1Iface); const Hostname1 = Gio.DBusProxy.makeProxyWrapper(Hostname1Iface);
class PlaceInfo { class PlaceInfo {
constructor() { constructor(...params) {
this._init.apply(this, arguments); this._init(...params);
} }
_init(kind, file, name, icon) { _init(kind, file, name, icon) {
@@ -46,61 +41,54 @@ class PlaceInfo {
return false; return false;
} }
_createLaunchCallback(launchContext, tryMount) { async _ensureMountAndLaunch(context, tryMount) {
return (_ignored, result) => { try {
try { await Gio.AppInfo.launch_default_for_uri_async(this.file.get_uri(), context, null);
Gio.AppInfo.launch_default_for_uri_finish(result); } catch (err) {
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_MOUNTED)) { if (!err.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_MOUNTED)) {
let source = { Main.notifyError(_('Failed to launch “%s”').format(this.name), err.message);
get_icon: () => { return this.icon; } return;
}; }
let op = new ShellMountOperation.ShellMountOperation(source);
this.file.mount_enclosing_volume(0, op.mountOp, null, (file, result) => {
try {
op.close();
file.mount_enclosing_volume_finish(result);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.FAILED_HANDLED)) {
// e.g. user canceled the password dialog
return;
} catch(e) {
Main.notifyError(_("Failed to mount volume for “%s”").format(this.name), e.message);
return;
}
if (tryMount) { let source = {
let callback = this._createLaunchCallback(launchContext, false); get_icon: () => this.icon,
Gio.AppInfo.launch_default_for_uri_async(file.get_uri(), };
launchContext, let op = new ShellMountOperation.ShellMountOperation(source);
null, try {
callback); await this.file.mount_enclosing_volume(0, op.mountOp, null);
}
}); if (tryMount)
} catch(e) { this._ensureMountAndLaunch(context, false);
Main.notifyError(_("Failed to launch “%s”").format(this.name), e.message); } catch (e) {
if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.FAILED_HANDLED))
Main.notifyError(_('Failed to mount volume for “%s”').format(this.name), e.message);
} finally {
op.close();
} }
} }
} }
launch(timestamp) { launch(timestamp) {
let launchContext = global.create_app_launch_context(timestamp, -1); let launchContext = global.create_app_launch_context(timestamp, -1);
let callback = this._createLaunchCallback(launchContext, true); this._ensureMountAndLaunch(launchContext, true);
Gio.AppInfo.launch_default_for_uri_async(this.file.get_uri(),
launchContext,
null,
callback);
} }
getIcon() { getIcon() {
this.file.query_info_async('standard::symbolic-icon', 0, 0, null, this.file.query_info_async('standard::symbolic-icon',
(file, result) => { Gio.FileQueryInfoFlags.NONE,
try { 0,
let info = file.query_info_finish(result); null,
this.icon = info.get_symbolic_icon(); (file, result) => {
this.emit('changed'); try {
} catch(e if e instanceof Gio.IOErrorEnum) { let info = file.query_info_finish(result);
return; this.icon = info.get_symbolic_icon();
} this.emit('changed');
}); } catch (e) {
if (e instanceof Gio.IOErrorEnum)
return;
throw e;
}
});
// return a generic icon for this kind for now, until we have the // return a generic icon for this kind for now, until we have the
// icon from the query info above // icon from the query info above
@@ -123,16 +111,18 @@ class PlaceInfo {
try { try {
let info = this.file.query_info('standard::display-name', 0, null); let info = this.file.query_info('standard::display-name', 0, null);
return info.get_display_name(); return info.get_display_name();
} catch(e if e instanceof Gio.IOErrorEnum) { } catch (e) {
return this.file.get_basename(); if (e instanceof Gio.IOErrorEnum)
return this.file.get_basename();
throw e;
} }
} }
}; }
Signals.addSignalMethods(PlaceInfo.prototype); Signals.addSignalMethods(PlaceInfo.prototype);
class RootInfo extends PlaceInfo { class RootInfo extends PlaceInfo {
_init() { _init() {
super._init('devices', Gio.File.new_for_path('/'), _("Computer")); super._init('devices', Gio.File.new_for_path('/'), _('Computer'));
let busName = 'org.freedesktop.hostname1'; let busName = 'org.freedesktop.hostname1';
let objPath = '/org/freedesktop/hostname1'; let objPath = '/org/freedesktop/hostname1';
@@ -142,7 +132,7 @@ class RootInfo extends PlaceInfo {
this._proxy = obj; this._proxy = obj;
this._proxy.connect('g-properties-changed', this._proxy.connect('g-properties-changed',
this._propertiesChanged.bind(this)); this._propertiesChanged.bind(this));
this._propertiesChanged(obj); this._propertiesChanged(obj);
}); });
} }
@@ -155,7 +145,7 @@ class RootInfo extends PlaceInfo {
// GDBusProxy will emit a g-properties-changed when hostname1 goes down // GDBusProxy will emit a g-properties-changed when hostname1 goes down
// ignore it // ignore it
if (proxy.g_name_owner) { if (proxy.g_name_owner) {
this.name = proxy.PrettyHostname || _("Computer"); this.name = proxy.PrettyHostname || _('Computer');
this.emit('changed'); this.emit('changed');
} }
} }
@@ -167,7 +157,7 @@ class RootInfo extends PlaceInfo {
} }
super.destroy(); super.destroy();
} }
}; }
class PlaceDeviceInfo extends PlaceInfo { class PlaceDeviceInfo extends PlaceInfo {
@@ -181,28 +171,29 @@ class PlaceDeviceInfo extends PlaceInfo {
} }
isRemovable() { isRemovable() {
return this._mount.can_eject(); return this._mount.can_eject() || this._mount.can_unmount();
} }
eject() { eject() {
let mountOp = new ShellMountOperation.ShellMountOperation(this._mount); let unmountArgs = [
Gio.MountUnmountFlags.NONE,
new ShellMountOperation.ShellMountOperation(this._mount).mountOp,
null, // Gio.Cancellable
];
if (this._mount.can_eject()) if (this._mount.can_eject()) {
this._mount.eject_with_operation(Gio.MountUnmountFlags.NONE, this._mount.eject_with_operation(...unmountArgs,
mountOp.mountOp, this._ejectFinish.bind(this));
null, // Gio.Cancellable } else {
this._ejectFinish.bind(this)); this._mount.unmount_with_operation(...unmountArgs,
else this._unmountFinish.bind(this));
this._mount.unmount_with_operation(Gio.MountUnmountFlags.NONE, }
mountOp.mountOp,
null, // Gio.Cancellable
this._unmountFinish.bind(this));
} }
_ejectFinish(mount, result) { _ejectFinish(mount, result) {
try { try {
mount.eject_with_operation_finish(result); mount.eject_with_operation_finish(result);
} catch(e) { } catch (e) {
this._reportFailure(e); this._reportFailure(e);
} }
} }
@@ -210,16 +201,16 @@ class PlaceDeviceInfo extends PlaceInfo {
_unmountFinish(mount, result) { _unmountFinish(mount, result) {
try { try {
mount.unmount_with_operation_finish(result); mount.unmount_with_operation_finish(result);
} catch(e) { } catch (e) {
this._reportFailure(e); this._reportFailure(e);
} }
} }
_reportFailure(exception) { _reportFailure(exception) {
let msg = _("Ejecting drive “%s” failed:").format(this._mount.get_name()); let msg = _('Ejecting drive “%s” failed:').format(this._mount.get_name());
Main.notifyError(msg, exception.message); Main.notifyError(msg, exception.message);
} }
}; }
class PlaceVolumeInfo extends PlaceInfo { class PlaceVolumeInfo extends PlaceInfo {
_init(kind, volume) { _init(kind, volume) {
@@ -245,7 +236,7 @@ class PlaceVolumeInfo extends PlaceInfo {
getIcon() { getIcon() {
return this._volume.get_symbolic_icon(); return this._volume.get_symbolic_icon();
} }
}; }
const DEFAULT_DIRECTORIES = [ const DEFAULT_DIRECTORIES = [
GLib.UserDirectory.DIRECTORY_DOCUMENTS, GLib.UserDirectory.DIRECTORY_DOCUMENTS,
@@ -265,9 +256,8 @@ var PlacesManager = class {
}; };
this._settings = new Gio.Settings({ schema_id: BACKGROUND_SCHEMA }); this._settings = new Gio.Settings({ schema_id: BACKGROUND_SCHEMA });
this._showDesktopIconsChangedId = this._showDesktopIconsChangedId = this._settings.connect(
this._settings.connect('changed::show-desktop-icons', 'changed::show-desktop-icons', this._updateSpecials.bind(this));
this._updateSpecials.bind(this));
this._updateSpecials(); this._updateSpecials();
/* /*
@@ -277,7 +267,7 @@ var PlacesManager = class {
this._connectVolumeMonitorSignals(); this._connectVolumeMonitorSignals();
this._updateMounts(); this._updateMounts();
this._bookmarksFile = this._findBookmarksFile() this._bookmarksFile = this._findBookmarksFile();
this._bookmarkTimeoutId = 0; this._bookmarkTimeoutId = 0;
this._monitor = null; this._monitor = null;
@@ -287,11 +277,12 @@ var PlacesManager = class {
if (this._bookmarkTimeoutId > 0) if (this._bookmarkTimeoutId > 0)
return; return;
/* Defensive event compression */ /* Defensive event compression */
this._bookmarkTimeoutId = Mainloop.timeout_add(100, () => { this._bookmarkTimeoutId = GLib.timeout_add(
this._bookmarkTimeoutId = 0; GLib.PRIORITY_DEFAULT, 100, () => {
this._reloadBookmarks(); this._bookmarkTimeoutId = 0;
return false; this._reloadBookmarks();
}); return false;
});
}); });
this._reloadBookmarks(); this._reloadBookmarks();
@@ -299,9 +290,17 @@ var PlacesManager = class {
} }
_connectVolumeMonitorSignals() { _connectVolumeMonitorSignals() {
const signals = ['volume-added', 'volume-removed', 'volume-changed', const signals = [
'mount-added', 'mount-removed', 'mount-changed', 'volume-added',
'drive-connected', 'drive-disconnected', 'drive-changed']; 'volume-removed',
'volume-changed',
'mount-added',
'mount-removed',
'mount-changed',
'drive-connected',
'drive-disconnected',
'drive-changed',
];
this._volumeMonitorSignals = []; this._volumeMonitorSignals = [];
let func = this._updateMounts.bind(this); let func = this._updateMounts.bind(this);
@@ -322,18 +321,19 @@ var PlacesManager = class {
if (this._monitor) if (this._monitor)
this._monitor.cancel(); this._monitor.cancel();
if (this._bookmarkTimeoutId) if (this._bookmarkTimeoutId)
Mainloop.source_remove(this._bookmarkTimeoutId); GLib.source_remove(this._bookmarkTimeoutId);
} }
_updateSpecials() { _updateSpecials() {
this._places.special.forEach(p => { p.destroy(); }); this._places.special.forEach(p => p.destroy());
this._places.special = []; this._places.special = [];
let homePath = GLib.get_home_dir(); let homePath = GLib.get_home_dir();
this._places.special.push(new PlaceInfo('special', this._places.special.push(new PlaceInfo(
Gio.File.new_for_path(homePath), 'special',
_("Home"))); Gio.File.new_for_path(homePath),
_('Home')));
let specials = []; let specials = [];
let dirs = DEFAULT_DIRECTORIES.slice(); let dirs = DEFAULT_DIRECTORIES.slice();
@@ -343,14 +343,16 @@ var PlacesManager = class {
for (let i = 0; i < dirs.length; i++) { for (let i = 0; i < dirs.length; i++) {
let specialPath = GLib.get_user_special_dir(dirs[i]); let specialPath = GLib.get_user_special_dir(dirs[i]);
if (specialPath == null || specialPath == homePath) if (!specialPath || specialPath === homePath)
continue; continue;
let file = Gio.File.new_for_path(specialPath), info; let file = Gio.File.new_for_path(specialPath), info;
try { try {
info = new PlaceInfo('special', file); info = new PlaceInfo('special', file);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) { } catch (e) {
continue; if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
continue;
throw e;
} }
specials.push(info); specials.push(info);
@@ -366,30 +368,31 @@ var PlacesManager = class {
let networkMounts = []; let networkMounts = [];
let networkVolumes = []; let networkVolumes = [];
this._places.devices.forEach(p => { p.destroy(); }); this._places.devices.forEach(p => p.destroy());
this._places.devices = []; this._places.devices = [];
this._places.network.forEach(p => { p.destroy(); }); this._places.network.forEach(p => p.destroy());
this._places.network = []; this._places.network = [];
/* Add standard places */ /* Add standard places */
this._places.devices.push(new RootInfo()); this._places.devices.push(new RootInfo());
this._places.network.push(new PlaceInfo('network', this._places.network.push(new PlaceInfo(
Gio.File.new_for_uri('network:///'), 'network',
_("Browse Network"), Gio.File.new_for_uri('network:///'),
'network-workgroup-symbolic')); _('Browse Network'),
'network-workgroup-symbolic'));
/* first go through all connected drives */ /* first go through all connected drives */
let drives = this._volumeMonitor.get_connected_drives(); let drives = this._volumeMonitor.get_connected_drives();
for (let i = 0; i < drives.length; i++) { for (let i = 0; i < drives.length; i++) {
let volumes = drives[i].get_volumes(); let volumes = drives[i].get_volumes();
for(let j = 0; j < volumes.length; j++) { for (let j = 0; j < volumes.length; j++) {
let identifier = volumes[j].get_identifier('class'); let identifier = volumes[j].get_identifier('class');
if (identifier && identifier.includes('network')) { if (identifier && identifier.includes('network')) {
networkVolumes.push(volumes[j]); networkVolumes.push(volumes[j]);
} else { } else {
let mount = volumes[j].get_mount(); let mount = volumes[j].get_mount();
if(mount != null) if (mount)
this._addMount('devices', mount); this._addMount('devices', mount);
} }
} }
@@ -397,8 +400,8 @@ var PlacesManager = class {
/* add all volumes that is not associated with a drive */ /* add all volumes that is not associated with a drive */
let volumes = this._volumeMonitor.get_volumes(); let volumes = this._volumeMonitor.get_volumes();
for(let i = 0; i < volumes.length; i++) { for (let i = 0; i < volumes.length; i++) {
if(volumes[i].get_drive() != null) if (volumes[i].get_drive())
continue; continue;
let identifier = volumes[i].get_identifier('class'); let identifier = volumes[i].get_identifier('class');
@@ -406,18 +409,18 @@ var PlacesManager = class {
networkVolumes.push(volumes[i]); networkVolumes.push(volumes[i]);
} else { } else {
let mount = volumes[i].get_mount(); let mount = volumes[i].get_mount();
if(mount != null) if (mount)
this._addMount('devices', mount); this._addMount('devices', mount);
} }
} }
/* add mounts that have no volume (/etc/mtab mounts, ftp, sftp,...) */ /* add mounts that have no volume (/etc/mtab mounts, ftp, sftp,...) */
let mounts = this._volumeMonitor.get_mounts(); let mounts = this._volumeMonitor.get_mounts();
for(let i = 0; i < mounts.length; i++) { for (let i = 0; i < mounts.length; i++) {
if(mounts[i].is_shadowed()) if (mounts[i].is_shadowed())
continue; continue;
if(mounts[i].get_volume()) if (mounts[i].get_volume())
continue; continue;
let root = mounts[i].get_default_location(); let root = mounts[i].get_default_location();
@@ -437,9 +440,9 @@ var PlacesManager = class {
this._addVolume('network', networkVolumes[i]); this._addVolume('network', networkVolumes[i]);
} }
for (let i = 0; i < networkMounts.length; i++) { for (let i = 0; i < networkMounts.length; i++)
this._addMount('network', networkMounts[i]); this._addMount('network', networkMounts[i]);
}
this.emit('devices-updated'); this.emit('devices-updated');
this.emit('network-updated'); this.emit('network-updated');
@@ -460,7 +463,6 @@ var PlacesManager = class {
} }
_reloadBookmarks() { _reloadBookmarks() {
this._bookmarks = []; this._bookmarks = [];
let content = Shell.get_file_contents_utf8_sync(this._bookmarksFile.get_path()); let content = Shell.get_file_contents_utf8_sync(this._bookmarksFile.get_path());
@@ -470,7 +472,7 @@ var PlacesManager = class {
for (let i = 0; i < lines.length; i++) { for (let i = 0; i < lines.length; i++) {
let line = lines[i]; let line = lines[i];
let components = line.split(' '); let components = line.split(' ');
let bookmark = components[0]; let [bookmark] = components;
if (!bookmark) if (!bookmark)
continue; continue;
@@ -480,16 +482,16 @@ var PlacesManager = class {
continue; continue;
let duplicate = false; let duplicate = false;
for (let i = 0; i < this._places.special.length; i++) { for (let j = 0; j < this._places.special.length; j++) {
if (file.equal(this._places.special[i].file)) { if (file.equal(this._places.special[j].file)) {
duplicate = true; duplicate = true;
break; break;
} }
} }
if (duplicate) if (duplicate)
continue; continue;
for (let i = 0; i < bookmarks.length; i++) { for (let j = 0; j < bookmarks.length; j++) {
if (file.equal(bookmarks[i].file)) { if (file.equal(bookmarks[j].file)) {
duplicate = true; duplicate = true;
break; break;
} }
@@ -514,8 +516,10 @@ var PlacesManager = class {
try { try {
devItem = new PlaceDeviceInfo(kind, mount); devItem = new PlaceDeviceInfo(kind, mount);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) { } catch (e) {
return; if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
return;
throw e;
} }
this._places[kind].push(devItem); this._places[kind].push(devItem);
@@ -526,8 +530,10 @@ var PlacesManager = class {
try { try {
volItem = new PlaceVolumeInfo(kind, volume); volItem = new PlaceVolumeInfo(kind, volume);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) { } catch (e) {
return; if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
return;
throw e;
} }
this._places[kind].push(volItem); this._places[kind].push(volItem);
+8 -1
View File
@@ -1 +1,8 @@
/* none used*/ .place-menu-item .button {
border-radius: 99px;
padding: 3px;
min-height: auto;
}
.place-menu-item .button:ltr { margin-left: 6px; }
.place-menu-item .button:rtl { margin-right: 6px; }
+61 -50
View File
@@ -1,3 +1,4 @@
/* exported enable disable */
/* Screenshot Window Sizer for Gnome Shell /* Screenshot Window Sizer for Gnome Shell
* *
* Copyright (c) 2013 Owen Taylor <otaylor@redhat.com> * Copyright (c) 2013 Owen Taylor <otaylor@redhat.com>
@@ -18,47 +19,46 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
const Gio = imports.gi.Gio; const { Clutter, Meta, Shell, St } = imports.gi;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Main = imports.ui.main;
const Tweener = imports.ui.tweener;
const ExtensionUtils = imports.misc.extensionUtils; const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension(); const Main = imports.ui.main;
const Convenience = Me.imports.convenience;
const MESSAGE_FADE_TIME = 2; const MESSAGE_FADE_TIME = 2000;
let text, button; let text;
/** */
function hideMessage() { function hideMessage() {
text.destroy(); text.destroy();
text = null; text = null;
} }
/**
* @param {string} message - the message to flash
*/
function flashMessage(message) { function flashMessage(message) {
if (!text) { if (!text) {
text = new St.Label({ style_class: 'screenshot-sizer-message' }); text = new St.Label({ style_class: 'screenshot-sizer-message' });
Main.uiGroup.add_actor(text); Main.uiGroup.add_actor(text);
} }
Tweener.removeTweens(text); text.remove_all_transitions();
text.text = message; text.text = message;
text.opacity = 255; text.opacity = 255;
let monitor = Main.layoutManager.primaryMonitor; let monitor = Main.layoutManager.primaryMonitor;
text.set_position(monitor.x + Math.floor(monitor.width / 2 - text.width / 2), text.set_position(
monitor.y + Math.floor(monitor.height / 2 - text.height / 2)); monitor.x + Math.floor(monitor.width / 2 - text.width / 2),
monitor.y + Math.floor(monitor.height / 2 - text.height / 2));
Tweener.addTween(text, text.ease({
{ opacity: 0, opacity: 0,
time: MESSAGE_FADE_TIME, duration: MESSAGE_FADE_TIME,
transition: 'easeOutQuad', mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: hideMessage }); onComplete: hideMessage,
});
} }
let SIZES = [ let SIZES = [
@@ -66,25 +66,33 @@ let SIZES = [
[800, 450], [800, 450],
[1024, 576], [1024, 576],
[1200, 675], [1200, 675],
[1600, 900] [1600, 900],
[360, 654], // Phone portrait maximized
[720, 360], // Phone landscape fullscreen
]; ];
/**
* @param {Meta.Display} display - the display
* @param {Meta.Window=} window - for per-window bindings, the window
* @param {Meta.KeyBinding} binding - the key binding
*/
function cycleScreenshotSizes(display, window, binding) { function cycleScreenshotSizes(display, window, binding) {
// Probably this isn't useful with 5 sizes, but you can decrease instead // Probably this isn't useful with 5 sizes, but you can decrease instead
// of increase by holding down shift. // of increase by holding down shift.
let modifiers = binding.get_modifiers(); let modifiers = binding.get_modifiers();
let backwards = (modifiers & Meta.VirtualModifier.SHIFT_MASK) != 0; let backwards = (modifiers & Meta.VirtualModifier.SHIFT_MASK) !== 0;
// Unmaximize first // Unmaximize first
if (window.maximized_horizontally || window.maximizedVertically) if (window.get_maximized() !== 0)
window.unmaximize(Meta.MaximizeFlags.HORIZONTAL | Meta.MaximizeFlags.VERTICAL); window.unmaximize(Meta.MaximizeFlags.BOTH);
let workArea = window.get_work_area_current_monitor(); let workArea = window.get_work_area_current_monitor();
let outerRect = window.get_frame_rect(); let outerRect = window.get_frame_rect();
// Double both axes if on a hidpi display // Double both axes if on a hidpi display
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
let scaledSizes = SIZES.map(size => size.map(wh => wh * scaleFactor)); let scaledSizes = SIZES.map(size => size.map(wh => wh * scaleFactor))
.filter(([w, h]) => w <= workArea.width && h <= workArea.height);
// Find the nearest 16:9 size for the current window size // Find the nearest 16:9 size for the current window size
let nearestIndex; let nearestIndex;
@@ -93,13 +101,9 @@ function cycleScreenshotSizes(display, window, binding) {
for (let i = 0; i < scaledSizes.length; i++) { for (let i = 0; i < scaledSizes.length; i++) {
let [width, height] = scaledSizes[i]; let [width, height] = scaledSizes[i];
// ignore sizes bigger than the workArea
if (width > workArea.width || height > workArea.height)
continue;
// get the best initial window size // get the best initial window size
let error = Math.abs(width - outerRect.width) + Math.abs(height - outerRect.height); let error = Math.abs(width - outerRect.width) + Math.abs(height - outerRect.height);
if (nearestIndex == null || error < nearestError) { if (nearestIndex === undefined || error < nearestError) {
nearestIndex = i; nearestIndex = i;
nearestError = error; nearestError = error;
} }
@@ -107,10 +111,7 @@ function cycleScreenshotSizes(display, window, binding) {
// get the next size up or down from ideal // get the next size up or down from ideal
let newIndex = (nearestIndex + (backwards ? -1 : 1)) % scaledSizes.length; let newIndex = (nearestIndex + (backwards ? -1 : 1)) % scaledSizes.length;
let newWidth, newHeight; let [newWidth, newHeight] = scaledSizes[newIndex];
[newWidth, newHeight] = scaledSizes[newIndex];
if (newWidth > workArea.width || newHeight > workArea.height)
[newWidth, newHeight] = scaledSizes[0];
// Push the window onscreen if it would be resized offscreen // Push the window onscreen if it would be resized offscreen
let newX = outerRect.x; let newX = outerRect.x;
@@ -120,40 +121,50 @@ function cycleScreenshotSizes(display, window, binding) {
if (newY + newHeight > workArea.y + workArea.height) if (newY + newHeight > workArea.y + workArea.height)
newY = Math.max(workArea.y + workArea.height - newHeight); newY = Math.max(workArea.y + workArea.height - newHeight);
const id = window.connect('size-changed', () => {
window.disconnect(id);
_notifySizeChange(window);
});
window.move_resize_frame(true, newX, newY, newWidth, newHeight); window.move_resize_frame(true, newX, newY, newWidth, newHeight);
}
/**
* @param {Meta.Window} window - the window whose size changed
*/
function _notifySizeChange(window) {
const { scaleFactor } = St.ThemeContext.get_for_stage(global.stage);
let newOuterRect = window.get_frame_rect(); let newOuterRect = window.get_frame_rect();
let message = '%d×%d'.format( let message = '%d×%d'.format(
(newOuterRect.width / scaleFactor), newOuterRect.width / scaleFactor,
(newOuterRect.height / scaleFactor)); newOuterRect.height / scaleFactor);
// The new size might have been constrained by geometry hints (e.g. for // The new size might have been constrained by geometry hints (e.g. for
// a terminal) - in that case, include the actual ratio to the message // a terminal) - in that case, include the actual ratio to the message
// we flash // we flash
let actualNumerator = (newOuterRect.width / newOuterRect.height) * 9; let actualNumerator = 9 * newOuterRect.width / newOuterRect.height;
if (Math.abs(actualNumerator - 16) > 0.01) if (Math.abs(actualNumerator - 16) > 0.01)
message += ' (%.2f:9)'.format(actualNumerator); message += ' (%.2f:9)'.format(actualNumerator);
flashMessage(message); flashMessage(message);
} }
function init() { /** */
}
function enable() { function enable() {
Main.wm.addKeybinding('cycle-screenshot-sizes', Main.wm.addKeybinding(
Convenience.getSettings(), 'cycle-screenshot-sizes',
Meta.KeyBindingFlags.PER_WINDOW, ExtensionUtils.getSettings(),
Shell.ActionMode.NORMAL, Meta.KeyBindingFlags.PER_WINDOW,
cycleScreenshotSizes); Shell.ActionMode.NORMAL,
Main.wm.addKeybinding('cycle-screenshot-sizes-backward', cycleScreenshotSizes);
Convenience.getSettings(), Main.wm.addKeybinding(
Meta.KeyBindingFlags.PER_WINDOW | 'cycle-screenshot-sizes-backward',
Meta.KeyBindingFlags.IS_REVERSED, ExtensionUtils.getSettings(),
Shell.ActionMode.NORMAL, Meta.KeyBindingFlags.PER_WINDOW | Meta.KeyBindingFlags.IS_REVERSED,
cycleScreenshotSizes); Shell.ActionMode.NORMAL,
cycleScreenshotSizes);
} }
/** */
function disable() { function disable() {
Main.wm.removeKeybinding('cycle-screenshot-sizes'); Main.wm.removeKeybinding('cycle-screenshot-sizes');
Main.wm.removeKeybinding('cycle-screenshot-sizes-backward'); Main.wm.removeKeybinding('cycle-screenshot-sizes-backward');
@@ -3,5 +3,6 @@ extension_data += configure_file(
output: metadata_name, output: metadata_name,
configuration: metadata_conf configuration: metadata_conf
) )
extension_data += files('stylesheet.css')
extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml') extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml')
+32 -39
View File
@@ -1,68 +1,61 @@
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- // -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
// Load shell theme from ~/.themes/name/gnome-shell // Load shell theme from ~/.local/share/themes/name/gnome-shell
/* exported init */
const GLib = imports.gi.GLib; const { Gio } = imports.gi;
const Gio = imports.gi.Gio;
const ExtensionUtils = imports.misc.extensionUtils;
const Main = imports.ui.main; const Main = imports.ui.main;
const Me = ExtensionUtils.getCurrentExtension();
const Util = Me.imports.util;
const SETTINGS_KEY = 'name'; const SETTINGS_KEY = 'name';
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
class ThemeManager { class ThemeManager {
constructor() {
this._settings = Convenience.getSettings();
}
enable() { enable() {
this._changedId = this._settings.connect('changed::'+SETTINGS_KEY, this._changeTheme.bind(this)); this._settings = ExtensionUtils.getSettings();
this._settings.connect(`changed::${SETTINGS_KEY}`, this._changeTheme.bind(this));
this._changeTheme(); this._changeTheme();
} }
disable() { disable() {
if (this._changedId) { this._settings?.run_dispose();
this._settings.disconnect(this._changedId); this._settings = null;
this._changedId = 0;
}
Main.setThemeStylesheet(null); Main.setThemeStylesheet(null);
Main.loadTheme(); Main.loadTheme();
} }
_changeTheme() { _changeTheme() {
let _stylesheet = null; let stylesheet = null;
let _themeName = this._settings.get_string(SETTINGS_KEY); let themeName = this._settings.get_string(SETTINGS_KEY);
if (_themeName) { if (themeName) {
let _userCssStylesheet = GLib.get_home_dir() + '/.themes/' + _themeName + '/gnome-shell/gnome-shell.css'; const stylesheetPaths = Util.getThemeDirs()
let file = Gio.file_new_for_path(_userCssStylesheet); .map(dir => `${dir}/${themeName}/gnome-shell/gnome-shell.css`);
if (file.query_exists(null))
_stylesheet = _userCssStylesheet; stylesheetPaths.push(...Util.getModeThemeDirs()
else { .map(dir => `${dir}/${themeName}.css`));
let sysdirs = GLib.get_system_data_dirs();
sysdirs.unshift(GLib.get_user_data_dir()); stylesheet = stylesheetPaths.find(path => {
for (let i = 0; i < sysdirs.length; i++) { let file = Gio.file_new_for_path(path);
_userCssStylesheet = sysdirs[i] + '/themes/' + _themeName + '/gnome-shell/gnome-shell.css'; return file.query_exists(null);
let file = Gio.file_new_for_path(_userCssStylesheet); });
if (file.query_exists(null)) {
_stylesheet = _userCssStylesheet;
break;
}
}
}
} }
if (_stylesheet) if (stylesheet)
global.log('loading user theme: ' + _stylesheet); global.log(`loading user theme: ${stylesheet}`);
else else
global.log('loading default theme (Adwaita)'); global.log('loading default theme (Adwaita)');
Main.setThemeStylesheet(_stylesheet); Main.setThemeStylesheet(stylesheet);
Main.loadTheme(); Main.loadTheme();
} }
}; }
/**
* @returns {ThemeManager} - the extension state object
*/
function init() { function init() {
return new ThemeManager(); return new ThemeManager();
} }
+1
View File
@@ -4,4 +4,5 @@ extension_data += configure_file(
configuration: metadata_conf configuration: metadata_conf
) )
extension_sources += files('prefs.js', 'util.js')
extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml') extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml')
+137
View File
@@ -0,0 +1,137 @@
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
/* exported init buildPrefsWidget */
// we use async/await here to not block the mainloop, not to parallelize
/* eslint-disable no-await-in-loop */
const { Adw, Gio, GLib, GObject, Gtk } = imports.gi;
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Util = Me.imports.util;
Gio._promisify(Gio.File.prototype, 'enumerate_children_async');
Gio._promisify(Gio.File.prototype, 'query_info_async');
Gio._promisify(Gio.FileEnumerator.prototype, 'next_files_async');
class UserThemePrefsWidget extends Adw.PreferencesGroup {
static {
GObject.registerClass(this);
}
constructor() {
super({ title: 'Themes' });
this._actionGroup = new Gio.SimpleActionGroup();
this.insert_action_group('theme', this._actionGroup);
this._settings = ExtensionUtils.getSettings();
this._actionGroup.add_action(
this._settings.create_action('name'));
this.connect('destroy', () => this._settings.run_dispose());
this._rows = new Map();
this._addTheme(''); // default
this._collectThemes();
}
async _collectThemes() {
for (const dirName of Util.getThemeDirs()) {
const dir = Gio.File.new_for_path(dirName);
for (const name of await this._enumerateDir(dir)) {
if (this._rows.has(name))
continue;
const file = dir.resolve_relative_path(
`${name}/gnome-shell/gnome-shell.css`);
try {
await file.query_info_async(
Gio.FILE_ATTRIBUTE_STANDARD_NAME,
Gio.FileQueryInfoFlags.NONE,
GLib.PRIORITY_DEFAULT, null);
this._addTheme(name);
} catch (e) {
if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
logError(e);
}
}
}
for (const dirName of Util.getModeThemeDirs()) {
const dir = Gio.File.new_for_path(dirName);
for (const filename of await this._enumerateDir(dir)) {
if (!filename.endsWith('.css'))
continue;
const name = filename.slice(0, -4);
if (!this._rows.has(name))
this._addTheme(name);
}
}
}
_addTheme(name) {
const row = new ThemeRow(name);
this._rows.set(name, row);
this.add(row);
}
async _enumerateDir(dir) {
const fileInfos = [];
let fileEnum;
try {
fileEnum = await dir.enumerate_children_async(
Gio.FILE_ATTRIBUTE_STANDARD_NAME,
Gio.FileQueryInfoFlags.NONE,
GLib.PRIORITY_DEFAULT, null);
} catch (e) {
if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
logError(e);
return [];
}
let infos;
do {
infos = await fileEnum.next_files_async(100,
GLib.PRIORITY_DEFAULT, null);
fileInfos.push(...infos);
} while (infos.length > 0);
return fileInfos.map(info => info.get_name());
}
}
class ThemeRow extends Adw.ActionRow {
static {
GObject.registerClass(this);
}
constructor(name) {
const check = new Gtk.CheckButton({
action_name: 'theme.name',
action_target: new GLib.Variant('s', name),
});
super({
title: name || 'Default',
activatable_widget: check,
});
this.add_prefix(check);
}
}
/** */
function init() {
}
/**
* @returns {Gtk.Widget} - the prefs widget
*/
function buildPrefsWidget() {
return new UserThemePrefsWidget();
}
-1
View File
@@ -1 +0,0 @@
/* none used */
+23
View File
@@ -0,0 +1,23 @@
/* exported getThemeDirs getModeThemeDirs */
const { GLib } = imports.gi;
const fn = (...args) => GLib.build_filenamev(args);
/**
* @returns {string[]} - an ordered list of theme directories
*/
function getThemeDirs() {
return [
fn(GLib.get_home_dir(), '.themes'),
fn(GLib.get_user_data_dir(), 'themes'),
...GLib.get_system_data_dirs().map(dir => fn(dir, 'themes')),
];
}
/**
* @returns {string[]} - an ordered list of mode theme directories
*/
function getModeThemeDirs() {
return GLib.get_system_data_dirs()
.map(dir => fn(dir, 'gnome-shell', 'theme'));
}
+39 -17
View File
@@ -4,36 +4,39 @@
border-top-width: 1px; border-top-width: 1px;
border-bottom-width: 0px; border-bottom-width: 0px;
height: 2.25em ; height: 2.25em ;
padding: 2px;
}
.bottom-panel .window-button > StWidget,
.bottom-panel .window-picker-toggle > StWidget {
color: #2e3436;
background-color: #eee;
border-radius: 3px;
padding: 3px 6px 1px;
box-shadow: none;
text-shadow: none;
border: 1px solid rgba(0,0,0,0.2);
} }
.bottom-panel .window-button > StWidget { .bottom-panel .window-button > StWidget {
background-gradient-drection: vertical;
background-color: #fff;
background-gradient-start: #fff;
background-gradient-end: #eee;
color: #000;
-st-natural-width: 18.7em; -st-natural-width: 18.7em;
max-width: 18.75em; max-width: 18.75em;
color: #2e3436;
background-color: #eee;
border-radius: 2px;
padding: 3px 6px 1px;
box-shadow: inset -1px -1px 1px rgba(0,0,0,0.5);
text-shadow: 0 0 transparent;
} }
.bottom-panel .window-button:hover > StWidget { .bottom-panel .window-button:hover > StWidget,
.bottom-panel .window-picker-toggle:hover > StWidget {
background-color: #f9f9f9; background-color: #f9f9f9;
} }
.bottom-panel .window-button:active > StWidget, .bottom-panel .window-button:active > StWidget,
.bottom-panel .window-button:focus > StWidget { .bottom-panel .window-button:focus > StWidget {
box-shadow: inset 1px 1px 2px rgba(0,0,0,0.5); box-shadow: inset 0 1px 3px rgba(0,0,0,0.1);
} }
.bottom-panel .window-button.focused > StWidget { .bottom-panel .window-button.focused > StWidget,
background-color: #ddd; .bottom-panel .window-picker-toggle:checked > StWidget {
box-shadow: inset 1px 1px 1px rgba(0,0,0,0.5); background-color: #ccc;
box-shadow: inset 0 1px 3px rgba(0,0,0,0.1);
} }
.bottom-panel .window-button.focused:hover > StWidget { .bottom-panel .window-button.focused:hover > StWidget {
@@ -42,5 +45,24 @@
.bottom-panel .window-button.minimized > StWidget { .bottom-panel .window-button.minimized > StWidget {
color: #888; color: #888;
box-shadow: inset -1px -1px 1px rgba(0,0,0,0.5); box-shadow: none;
} }
/* workspace switcher */
.window-list-workspace-indicator .workspace {
border: 2px solid #f6f5f4;
background-color: #ccc;
}
.window-list-workspace-indicator .workspace.active {
border-color: #888;
}
.window-list-window-preview {
background-color: #ededed;
border: 1px solid #ccc;
}
.window-list-window-preview.active {
background-color: #f6f5f4;
}
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -3,8 +3,9 @@ extension_data += configure_file(
output: metadata_name, output: metadata_name,
configuration: metadata_conf configuration: metadata_conf
) )
extension_data += files('stylesheet.css')
extension_sources += files('prefs.js') extension_sources += files('prefs.js', 'windowPicker.js', 'workspaceIndicator.js')
extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml') extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml')
if classic_mode_enabled if classic_mode_enabled
@@ -15,6 +15,13 @@
window list. Possible values are “never”, “auto” and “always”. window list. Possible values are “never”, “auto” and “always”.
</description> </description>
</key> </key>
<key name="display-all-workspaces" type="b">
<default>false</default>
<summary>Show windows from all workspaces</summary>
<description>
Whether to show windows from all workspaces or only the current one.
</description>
</key>
<key name="show-on-all-monitors" type="b"> <key name="show-on-all-monitors" type="b">
<default>false</default> <default>false</default>
<summary>Show the window list on all monitors</summary> <summary>Show the window list on all monitors</summary>
+72 -63
View File
@@ -1,83 +1,92 @@
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- // -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
/* exported init buildPrefsWidget */
const Gio = imports.gi.Gio; const { Adw, Gio, GLib, GObject, Gtk } = imports.gi;
const GObject = imports.gi.GObject;
const Gtk = imports.gi.Gtk;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const ExtensionUtils = imports.misc.extensionUtils; const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
const _ = ExtensionUtils.gettext;
/** */
function init() { function init() {
Convenience.initTranslations(); ExtensionUtils.initTranslations();
} }
const WindowListPrefsWidget = GObject.registerClass( class WindowListPrefsWidget extends Adw.PreferencesPage {
class WindowListPrefsWidget extends Gtk.Grid { static {
_init(params) { GObject.registerClass(this);
super._init(params); }
this.margin = 24; constructor() {
this.row_spacing = 6; super();
this.orientation = Gtk.Orientation.VERTICAL;
let groupingLabel = '<b>' + _("Window Grouping") + '</b>'; this._actionGroup = new Gio.SimpleActionGroup();
this.add(new Gtk.Label({ label: groupingLabel, use_markup: true, this.insert_action_group('window-list', this._actionGroup);
halign: Gtk.Align.START }));
let align = new Gtk.Alignment({ left_padding: 12 }); this._settings = ExtensionUtils.getSettings();
this.add(align); this._actionGroup.add_action(
this._settings.create_action('grouping-mode'));
this._actionGroup.add_action(
this._settings.create_action('show-on-all-monitors'));
this._actionGroup.add_action(
this._settings.create_action('display-all-workspaces'));
let grid = new Gtk.Grid({ orientation: Gtk.Orientation.VERTICAL, const groupingGroup = new Adw.PreferencesGroup({
row_spacing: 6, title: _('Window Grouping'),
column_spacing: 6 }); });
align.add(grid); this.add(groupingGroup);
this._settings = Convenience.getSettings(); const modes = [
let currentMode = this._settings.get_string('grouping-mode'); { mode: 'never', title: _('Never group windows') },
let range = this._settings.get_range('grouping-mode'); { mode: 'auto', title: _('Group windows when space is limited') },
let modes = range.deep_unpack()[1].deep_unpack(); { mode: 'always', title: _('Always group windows') },
];
let modeLabels = { for (const { mode, title } of modes) {
'never': _("Never group windows"), const check = new Gtk.CheckButton({
'auto': _("Group windows when space is limited"), action_name: 'window-list.grouping-mode',
'always': _("Always group windows") action_target: new GLib.Variant('s', mode),
};
let radio = null;
for (let i = 0; i < modes.length; i++) {
let mode = modes[i];
let label = modeLabels[mode];
if (!label) {
log('Unhandled option "%s" for grouping-mode'.format(mode));
continue;
}
radio = new Gtk.RadioButton({ active: currentMode == mode,
label: label,
group: radio });
grid.add(radio);
radio.connect('toggled', button => {
if (button.active)
this._settings.set_string('grouping-mode', mode);
}); });
const row = new Adw.ActionRow({
activatable_widget: check,
title,
});
row.add_prefix(check);
groupingGroup.add(row);
} }
let check = new Gtk.CheckButton({ label: _("Show on all monitors"), const miscGroup = new Adw.PreferencesGroup();
margin_top: 6 }); this.add(miscGroup);
this._settings.bind('show-on-all-monitors', check, 'active', Gio.SettingsBindFlags.DEFAULT);
this.add(check); let toggle = new Gtk.Switch({
action_name: 'window-list.show-on-all-monitors',
valign: Gtk.Align.CENTER,
});
let row = new Adw.ActionRow({
title: _('Show on all monitors'),
activatable_widget: toggle,
});
row.add_suffix(toggle);
miscGroup.add(row);
toggle = new Gtk.Switch({
action_name: 'window-list.display-all-workspaces',
valign: Gtk.Align.CENTER,
});
this._settings.bind('display-all-workspaces',
toggle, 'active', Gio.SettingsBindFlags.DEFAULT);
row = new Adw.ActionRow({
title: _('Show windows from all workspaces'),
activatable_widget: toggle,
});
row.add_suffix(toggle);
miscGroup.add(row);
} }
}); }
function buildPrefsWidget() { /**
let widget = new WindowListPrefsWidget(); * @returns {Gtk.Widget} - the prefs widget
widget.show_all(); */
function buildPrefsWidget() {
return widget; return new WindowListPrefsWidget();
} }
+49 -18
View File
@@ -1,10 +1,3 @@
.bottom-panel {
/* .window-button-icon height +
.window-button vertical padding +
.window-button > StWidget vertical padding) */
height: 2.25em;
}
.window-list { .window-list {
spacing: 2px; spacing: 2px;
font-size: 10pt; font-size: 10pt;
@@ -26,18 +19,31 @@
spacing: 4px; spacing: 4px;
} }
.window-button > StWidget { .window-button > StWidget,
-st-natural-width: 18.75em; .window-picker-toggle > StWidget {
max-width: 18.75em;
color: #bbb; color: #bbb;
background-color: black; background-color: black;
border-radius: 4px; border-radius: 2px;
padding: 3px 6px 1px; padding: 3px 6px 1px;
box-shadow: inset 1px 1px 4px rgba(255,255,255,0.5); box-shadow: inset 1px 1px 4px rgba(255,255,255,0.5);
text-shadow: 1px 1px 4px rgba(0,0,0,0.8); text-shadow: 1px 1px 4px rgba(0,0,0,0.8);
} }
.window-button:hover > StWidget { .window-picker-toggle {
padding: 3px;
}
.window-picker-toggle > StWidet {
border: 1px solid rgba(255,255,255,0.3);
}
.window-button > StWidget {
-st-natural-width: 18.75em;
max-width: 18.75em;
}
.window-button:hover > StWidget,
.window-picker-toggle:hover > StWidget {
color: white; color: white;
background-color: #1f1f1f; background-color: #1f1f1f;
} }
@@ -47,12 +53,14 @@
box-shadow: inset 2px 2px 4px rgba(255,255,255,0.5); box-shadow: inset 2px 2px 4px rgba(255,255,255,0.5);
} }
.window-button.focused > StWidget { .window-button.focused > StWidget,
.window-picker-toggle:checked > StWidget {
color: white; color: white;
box-shadow: inset 1px 1px 4px rgba(255,255,255,0.7); box-shadow: inset 1px 1px 4px rgba(255,255,255,0.7);
} }
.window-button.focused:active > StWidget { .window-button.focused:active > StWidget,
.window-picker-toggle:checked:active > StWidget {
box-shadow: inset 2px 2px 4px rgba(255,255,255,0.7); box-shadow: inset 2px 2px 4px rgba(255,255,255,0.7);
} }
@@ -70,13 +78,36 @@
height: 24px; height: 24px;
} }
.window-list-workspace-indicator { .window-list-workspace-indicator .status-label-bin {
background-color: rgba(200, 200, 200, .3);
border: 1px solid #cccccc;
padding: 0 3px;
margin: 3px;
}
.window-list-workspace-indicator .workspaces-box {
spacing: 3px;
padding: 3px; padding: 3px;
} }
.window-list-workspace-indicator > StWidget { .window-list-workspace-indicator .workspace {
background-color: rgba(200, 200, 200, .3); border: 2px solid #000;
border: 1px solid #cccccc; width: 52px;
border-radius: 4px;
background-color: #595959;
}
.window-list-workspace-indicator .workspace.active {
border-color: #fff;
}
.window-list-window-preview {
background-color: #bebebe;
border: 1px solid #828282;
}
.window-list-window-preview.active {
background-color: #d4d4d4;
} }
.notification { .notification {
+364
View File
@@ -0,0 +1,364 @@
/* exported WindowPicker, WindowPickerToggle */
const { Clutter, GObject, Shell, St } = imports.gi;
const Layout = imports.ui.layout;
const Main = imports.ui.main;
const { WorkspacesDisplay } = imports.ui.workspacesView;
const Workspace = imports.ui.workspace;
const { VIGNETTE_BRIGHTNESS } = imports.ui.lightbox;
const {
SIDE_CONTROLS_ANIMATION_TIME,
OverviewAdjustment,
ControlsState,
} = imports.ui.overviewControls;
class MyWorkspacesDisplay extends WorkspacesDisplay {
static {
GObject.registerClass(this);
}
constructor(controls, overviewAdjustment) {
let workspaceManager = global.workspace_manager;
const workspaceAdjustment = new St.Adjustment({
value: workspaceManager.get_active_workspace_index(),
lower: 0,
page_increment: 1,
page_size: 1,
step_increment: 0,
upper: workspaceManager.n_workspaces,
});
super(controls, workspaceAdjustment, overviewAdjustment);
this._workspaceAdjustment = workspaceAdjustment;
this._workspaceAdjustment.actor = this;
this._nWorkspacesChangedId =
workspaceManager.connect('notify::n-workspaces',
this._updateAdjustment.bind(this));
this.add_constraint(
new Layout.MonitorConstraint({
primary: true,
work_area: true,
}));
}
prepareToEnterOverview(...args) {
if (!this._scrollEventId) {
this._scrollEventId = Main.windowPicker.connect('scroll-event',
this._onScrollEvent.bind(this));
}
super.prepareToEnterOverview(...args);
}
vfunc_hide(...args) {
if (this._scrollEventId > 0)
Main.windowPicker.disconnect(this._scrollEventId);
this._scrollEventId = 0;
super.vfunc_hide(...args);
}
_updateAdjustment() {
let workspaceManager = global.workspace_manager;
this._workspaceAdjustment.set({
upper: workspaceManager.n_workspaces,
value: workspaceManager.get_active_workspace_index(),
});
}
_onDestroy() {
if (this._nWorkspacesChangedId)
global.workspace_manager.disconnect(this._nWorkspacesChangedId);
this._nWorkspacesChangedId = 0;
super._onDestroy();
}
}
class MyWorkspace extends Workspace.Workspace {
static {
GObject.registerClass(this);
}
constructor(...args) {
super(...args);
this._adjChangedId =
this._overviewAdjustment.connect('notify::value', () => {
const { value: progress } = this._overviewAdjustment;
const brightness = 1 - (1 - VIGNETTE_BRIGHTNESS) * progress;
for (const bg of this._background?._backgroundGroup ?? []) {
bg.content.set({
vignette: true,
brightness,
});
}
});
}
_onDestroy() {
super._onDestroy();
if (this._adjChangedId)
this._overviewAdjustment.disconnect(this._adjChangedId);
this._adjChangedId = 0;
}
}
class MyWorkspaceBackground extends Workspace.WorkspaceBackground {
static {
GObject.registerClass(this);
}
_updateBorderRadius() {
}
vfunc_allocate(box) {
this.set_allocation(box);
const themeNode = this.get_theme_node();
const contentBox = themeNode.get_content_box(box);
this._bin.allocate(contentBox);
const [contentWidth, contentHeight] = contentBox.get_size();
const monitor = Main.layoutManager.monitors[this._monitorIndex];
const xRatio = contentWidth / this._workarea.width;
const yRatio = contentHeight / this._workarea.height;
const right = area => area.x + area.width;
const bottom = area => area.y + area.height;
const offsets = {
left: xRatio * (this._workarea.x - monitor.x),
right: xRatio * (right(monitor) - right(this._workarea)),
top: yRatio * (this._workarea.y - monitor.y),
bottom: yRatio * (bottom(monitor) - bottom(this._workarea)),
};
contentBox.set_origin(-offsets.left, -offsets.top);
contentBox.set_size(
offsets.left + contentWidth + offsets.right,
offsets.top + contentHeight + offsets.bottom);
this._backgroundGroup.allocate(contentBox);
}
}
var WindowPicker = class WindowPicker extends Clutter.Actor {
static [GObject.signals] = {
'open-state-changed': { param_types: [GObject.TYPE_BOOLEAN] },
};
static {
GObject.registerClass(this);
}
constructor() {
super({ reactive: true });
this._visible = false;
this._modal = false;
this._overlayKeyId = 0;
this._stageKeyPressId = 0;
this._adjustment = new OverviewAdjustment(this);
this.connect('destroy', this._onDestroy.bind(this));
global.bind_property('screen-width',
this, 'width',
GObject.BindingFlags.SYNC_CREATE);
global.bind_property('screen-height',
this, 'height',
GObject.BindingFlags.SYNC_CREATE);
this._workspacesDisplay = new MyWorkspacesDisplay(this, this._adjustment);
this.add_child(this._workspacesDisplay);
Main.uiGroup.insert_child_below(this, global.window_group);
if (!Main.sessionMode.hasOverview) {
this._injectBackgroundShade();
this._overlayKeyId = global.display.connect('overlay-key', () => {
if (!this._visible)
this.open();
else
this.close();
});
}
}
_injectBackgroundShade() {
this._origWorkspace = Workspace.Workspace;
this._origWorkspaceBackground = Workspace.WorkspaceBackground;
Workspace.Workspace = MyWorkspace;
Workspace.WorkspaceBackground = MyWorkspaceBackground;
}
get visible() {
return this._visible;
}
open() {
if (this._visible)
return;
this._visible = true;
if (!this._syncGrab())
return;
this._fakeOverviewVisible(true);
this._workspacesDisplay.prepareToEnterOverview();
Main.overview._animationInProgress = true;
this._adjustment.value = ControlsState.HIDDEN;
this._adjustment.ease(ControlsState.WINDOW_PICKER, {
duration: SIDE_CONTROLS_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => (Main.overview._animationInProgress = false),
});
this._stageKeyPressId = global.stage.connect('key-press-event',
(a, event) => {
let sym = event.get_key_symbol();
if (sym === Clutter.KEY_Escape) {
this.close();
return Clutter.EVENT_STOP;
}
return Clutter.EVENT_PROPAGATE;
});
this.emit('open-state-changed', this._visible);
}
close() {
if (!this._visible)
return;
this._visible = false;
if (!this._syncGrab())
return;
this._workspacesDisplay.prepareToLeaveOverview();
Main.overview._animationInProgress = true;
this._adjustment.ease(ControlsState.HIDDEN, {
duration: SIDE_CONTROLS_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => {
Main.overview._animationInProgress = false;
this._workspacesDisplay.hide();
this._fakeOverviewVisible(false);
},
});
global.stage.disconnect(this._stageKeyPressId);
this._stageKeyPressId = 0;
this.emit('open-state-changed', this._visible);
}
getWorkspacesBoxForState() {
return this.allocation;
}
_fakeOverviewVisible(visible) {
// Fake overview state for WorkspacesDisplay
Main.overview._visible = visible;
// Hide real windows
Main.layoutManager._inOverview = visible;
Main.layoutManager._updateVisibility();
}
_syncGrab() {
if (this._visible) {
if (this._modal)
return true;
const grab = Main.pushModal(global.stage, {
actionMode: Shell.ActionMode.OVERVIEW,
});
if (grab.get_seat_state() !== Clutter.GrabState.NONE) {
this._grab = grab;
this._modal = true;
} else {
Main.popModal(grab);
this.hide();
return false;
}
} else if (this._modal) {
Main.popModal(this._grab);
this._modal = false;
this._grab = null;
}
return true;
}
_onDestroy() {
if (this._origWorkspace)
Workspace.Workspace = this._origWorkspace;
if (this._origWorkspaceBackground)
Workspace.WorkspaceBackground = this._origWorkspaceBackground;
if (this._monitorsChangedId)
Main.layoutManager.disconnect(this._monitorsChangedId);
this._monitorsChangedId = 0;
if (this._overlayKeyId)
global.display.disconnect(this._overlayKeyId);
this._overlayKeyId = 0;
if (this._stageKeyPressId)
global.stage.disconnect(this._stageKeyPressId);
this._stageKeyPressId = 0;
}
};
var WindowPickerToggle = class WindowPickerToggle extends St.Button {
static {
GObject.registerClass(this);
}
constructor() {
let iconBin = new St.Widget({
layout_manager: new Clutter.BinLayout(),
});
iconBin.add_child(new St.Icon({
icon_name: 'focus-windows-symbolic',
icon_size: 16,
x_expand: true,
y_expand: true,
x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.CENTER,
}));
super({
style_class: 'window-picker-toggle',
child: iconBin,
visible: !Main.sessionMode.hasOverview,
toggle_mode: true,
});
this.connect('notify::checked', () => {
if (this.checked)
Main.windowPicker.open();
else
Main.windowPicker.close();
});
Main.windowPicker.connect('open-state-changed', () => {
this.checked = Main.windowPicker.visible;
});
}
};
@@ -0,0 +1,450 @@
/* exported WorkspaceIndicator */
const { Clutter, Gio, GObject, Meta, St } = imports.gi;
const DND = imports.ui.dnd;
const ExtensionUtils = imports.misc.extensionUtils;
const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const _ = ExtensionUtils.gettext;
const TOOLTIP_OFFSET = 6;
const TOOLTIP_ANIMATION_TIME = 150;
const MAX_THUMBNAILS = 6;
class WindowPreview extends St.Button {
static {
GObject.registerClass(this);
}
constructor(window) {
super({
style_class: 'window-list-window-preview',
});
this._delegate = this;
DND.makeDraggable(this, { restoreOnSuccess: true });
this._window = window;
this.connect('destroy', this._onDestroy.bind(this));
this._sizeChangedId = this._window.connect('size-changed',
() => this.queue_relayout());
this._positionChangedId = this._window.connect('position-changed',
() => {
this._updateVisible();
this.queue_relayout();
});
this._minimizedChangedId = this._window.connect('notify::minimized',
this._updateVisible.bind(this));
this._focusChangedId = global.display.connect('notify::focus-window',
this._onFocusChanged.bind(this));
this._onFocusChanged();
}
// needed for DND
get metaWindow() {
return this._window;
}
_onDestroy() {
this._window.disconnect(this._sizeChangedId);
this._window.disconnect(this._positionChangedId);
this._window.disconnect(this._minimizedChangedId);
global.display.disconnect(this._focusChangedId);
}
_onFocusChanged() {
if (global.display.focus_window === this._window)
this.add_style_class_name('active');
else
this.remove_style_class_name('active');
}
_updateVisible() {
const monitor = Main.layoutManager.findIndexForActor(this);
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
this.visible = this._window.get_frame_rect().overlap(workArea) &&
this._window.window_type !== Meta.WindowType.DESKTOP &&
this._window.showing_on_its_workspace();
}
}
class WorkspaceLayout extends Clutter.LayoutManager {
static {
GObject.registerClass(this);
}
vfunc_get_preferred_width() {
return [0, 0];
}
vfunc_get_preferred_height() {
return [0, 0];
}
vfunc_allocate(container, box) {
const monitor = Main.layoutManager.findIndexForActor(container);
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
const hscale = box.get_width() / workArea.width;
const vscale = box.get_height() / workArea.height;
for (const child of container) {
const childBox = new Clutter.ActorBox();
const frameRect = child.metaWindow.get_frame_rect();
childBox.set_size(
Math.round(Math.min(frameRect.width, workArea.width) * hscale),
Math.round(Math.min(frameRect.height, workArea.height) * vscale));
childBox.set_origin(
Math.round((frameRect.x - workArea.x) * hscale),
Math.round((frameRect.y - workArea.y) * vscale));
child.allocate(childBox);
}
}
}
class WorkspaceThumbnail extends St.Button {
static {
GObject.registerClass(this);
}
constructor(index) {
super({
style_class: 'workspace',
child: new Clutter.Actor({
layout_manager: new WorkspaceLayout(),
clip_to_allocation: true,
}),
});
this._tooltip = new St.Label({
style_class: 'dash-label',
visible: false,
});
Main.uiGroup.add_child(this._tooltip);
this.connect('destroy', this._onDestroy.bind(this));
this.connect('notify::hover', this._syncTooltip.bind(this));
this._index = index;
this._delegate = this; // needed for DND
this._windowPreviews = new Map();
let workspaceManager = global.workspace_manager;
this._workspace = workspaceManager.get_workspace_by_index(index);
this._windowAddedId = this._workspace.connect('window-added',
(ws, window) => {
this._addWindow(window);
});
this._windowRemovedId = this._workspace.connect('window-removed',
(ws, window) => {
this._removeWindow(window);
});
this._restackedId = global.display.connect('restacked',
this._onRestacked.bind(this));
this._workspace.list_windows().forEach(w => this._addWindow(w));
this._onRestacked();
}
acceptDrop(source) {
if (!source.metaWindow)
return false;
this._moveWindow(source.metaWindow);
return true;
}
handleDragOver(source) {
if (source.metaWindow)
return DND.DragMotionResult.MOVE_DROP;
else
return DND.DragMotionResult.CONTINUE;
}
_addWindow(window) {
if (this._windowPreviews.has(window))
return;
let preview = new WindowPreview(window);
preview.connect('clicked', (a, btn) => this.emit('clicked', btn));
this._windowPreviews.set(window, preview);
this.child.add_child(preview);
}
_removeWindow(window) {
let preview = this._windowPreviews.get(window);
if (!preview)
return;
this._windowPreviews.delete(window);
preview.destroy();
}
_onRestacked() {
let lastPreview = null;
let windows = global.get_window_actors().map(a => a.meta_window);
for (let i = 0; i < windows.length; i++) {
let preview = this._windowPreviews.get(windows[i]);
if (!preview)
continue;
this.child.set_child_above_sibling(preview, lastPreview);
lastPreview = preview;
}
}
_moveWindow(window) {
let monitorIndex = Main.layoutManager.findIndexForActor(this);
if (monitorIndex !== window.get_monitor())
window.move_to_monitor(monitorIndex);
window.change_workspace_by_index(this._index, false);
}
on_clicked() {
let ws = global.workspace_manager.get_workspace_by_index(this._index);
if (ws)
ws.activate(global.get_current_time());
}
_syncTooltip() {
if (this.hover) {
this._tooltip.set({
text: Meta.prefs_get_workspace_name(this._index),
visible: true,
opacity: 0,
});
const [stageX, stageY] = this.get_transformed_position();
const thumbWidth = this.allocation.get_width();
const tipWidth = this._tooltip.width;
const tipHeight = this._tooltip.height;
const xOffset = Math.floor((thumbWidth - tipWidth) / 2);
const monitor = Main.layoutManager.findMonitorForActor(this);
const x = Math.clamp(
stageX + xOffset,
monitor.x,
monitor.x + monitor.width - tipWidth);
const y = stageY - tipHeight - TOOLTIP_OFFSET;
this._tooltip.set_position(x, y);
}
this._tooltip.ease({
opacity: this.hover ? 255 : 0,
duration: TOOLTIP_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => (this._tooltip.visible = this.hover),
});
}
_onDestroy() {
this._tooltip.destroy();
this._workspace.disconnect(this._windowAddedId);
this._workspace.disconnect(this._windowRemovedId);
global.display.disconnect(this._restackedId);
}
}
var WorkspaceIndicator = class WorkspaceIndicator extends PanelMenu.Button {
static {
GObject.registerClass(this);
}
constructor() {
super(0.0, _('Workspace Indicator'), true);
this.setMenu(new PopupMenu.PopupMenu(this, 0.0, St.Side.BOTTOM));
this.add_style_class_name('window-list-workspace-indicator');
this.remove_style_class_name('panel-button');
this.menu.actor.remove_style_class_name('panel-menu');
let container = new St.Widget({
layout_manager: new Clutter.BinLayout(),
x_expand: true,
y_expand: true,
});
this.add_actor(container);
let workspaceManager = global.workspace_manager;
this._currentWorkspace = workspaceManager.get_active_workspace_index();
this._statusLabel = new St.Label({ text: this._getStatusText() });
this._statusBin = new St.Bin({
style_class: 'status-label-bin',
x_expand: true,
y_expand: true,
child: this._statusLabel,
});
container.add_actor(this._statusBin);
this._thumbnailsBox = new St.BoxLayout({
style_class: 'workspaces-box',
y_expand: true,
reactive: true,
});
this._thumbnailsBox.connect('scroll-event',
this._onScrollEvent.bind(this));
container.add_actor(this._thumbnailsBox);
this._workspacesItems = [];
this._workspaceManagerSignals = [
workspaceManager.connect('notify::n-workspaces',
this._nWorkspacesChanged.bind(this)),
workspaceManager.connect_after('workspace-switched',
this._onWorkspaceSwitched.bind(this)),
workspaceManager.connect('notify::layout-rows',
this._updateThumbnailVisibility.bind(this)),
];
this.connect('scroll-event', this._onScrollEvent.bind(this));
this._updateMenu();
this._updateThumbnails();
this._updateThumbnailVisibility();
this._settings = new Gio.Settings({ schema_id: 'org.gnome.desktop.wm.preferences' });
this._settingsChangedId = this._settings.connect(
'changed::workspace-names', this._updateMenuLabels.bind(this));
}
_onDestroy() {
for (let i = 0; i < this._workspaceManagerSignals.length; i++)
global.workspace_manager.disconnect(this._workspaceManagerSignals[i]);
if (this._settingsChangedId) {
this._settings.disconnect(this._settingsChangedId);
this._settingsChangedId = 0;
}
super._onDestroy();
}
_updateThumbnailVisibility() {
const { workspaceManager } = global;
const vertical = workspaceManager.layout_rows === -1;
const useMenu =
vertical || workspaceManager.n_workspaces > MAX_THUMBNAILS;
this.reactive = useMenu;
this._statusBin.visible = useMenu;
this._thumbnailsBox.visible = !useMenu;
}
_onWorkspaceSwitched() {
let workspaceManager = global.workspace_manager;
this._currentWorkspace = workspaceManager.get_active_workspace_index();
this._updateMenuOrnament();
this._updateActiveThumbnail();
this._statusLabel.set_text(this._getStatusText());
}
_nWorkspacesChanged() {
this._updateMenu();
this._updateThumbnails();
this._updateThumbnailVisibility();
}
_updateMenuOrnament() {
for (let i = 0; i < this._workspacesItems.length; i++) {
this._workspacesItems[i].setOrnament(i === this._currentWorkspace
? PopupMenu.Ornament.DOT
: PopupMenu.Ornament.NONE);
}
}
_updateActiveThumbnail() {
let thumbs = this._thumbnailsBox.get_children();
for (let i = 0; i < thumbs.length; i++) {
if (i === this._currentWorkspace)
thumbs[i].add_style_class_name('active');
else
thumbs[i].remove_style_class_name('active');
}
}
_getStatusText() {
let workspaceManager = global.workspace_manager;
let current = workspaceManager.get_active_workspace_index();
let total = workspaceManager.n_workspaces;
return '%d / %d'.format(current + 1, total);
}
_updateMenuLabels() {
for (let i = 0; i < this._workspacesItems.length; i++) {
let item = this._workspacesItems[i];
let name = Meta.prefs_get_workspace_name(i);
item.label.text = name;
}
}
_updateMenu() {
let workspaceManager = global.workspace_manager;
this.menu.removeAll();
this._workspacesItems = [];
this._currentWorkspace = workspaceManager.get_active_workspace_index();
for (let i = 0; i < workspaceManager.n_workspaces; i++) {
let name = Meta.prefs_get_workspace_name(i);
let item = new PopupMenu.PopupMenuItem(name);
item.workspaceId = i;
item.connect('activate', () => {
this._activate(item.workspaceId);
});
if (i === this._currentWorkspace)
item.setOrnament(PopupMenu.Ornament.DOT);
this.menu.addMenuItem(item);
this._workspacesItems[i] = item;
}
this._statusLabel.set_text(this._getStatusText());
}
_updateThumbnails() {
let workspaceManager = global.workspace_manager;
this._thumbnailsBox.destroy_all_children();
for (let i = 0; i < workspaceManager.n_workspaces; i++) {
let thumb = new WorkspaceThumbnail(i);
this._thumbnailsBox.add_actor(thumb);
}
this._updateActiveThumbnail();
}
_activate(index) {
let workspaceManager = global.workspace_manager;
if (index >= 0 && index < workspaceManager.n_workspaces) {
let metaWorkspace = workspaceManager.get_workspace_by_index(index);
metaWorkspace.activate(global.get_current_time());
}
}
_onScrollEvent(actor, event) {
let direction = event.get_scroll_direction();
let diff = 0;
if (direction === Clutter.ScrollDirection.DOWN)
diff = 1;
else if (direction === Clutter.ScrollDirection.UP)
diff = -1;
else
return;
let newIndex = this._currentWorkspace + diff;
this._activate(newIndex);
}
};
+157 -172
View File
@@ -1,145 +1,184 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */ /* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const Clutter = imports.gi.Clutter; /* exported init */
const Mainloop = imports.mainloop; const { Clutter, Graphene, GObject, St } = imports.gi;
const St = imports.gi.St;
const Main = imports.ui.main; const Main = imports.ui.main;
const OverviewControls = imports.ui.overviewControls;
const Workspace = imports.ui.workspace; const Workspace = imports.ui.workspace;
const WorkspacesView = imports.ui.workspacesView; const WorkspacesView = imports.ui.workspacesView;
function injectToFunction(parent, name, func) { const WINDOW_SLOT = 4;
let origin = parent[name];
parent[name] = function() { class MyWorkspace extends Workspace.Workspace {
let ret; static {
ret = origin.apply(this, arguments); GObject.registerClass(this);
if (ret === undefined)
ret = func.apply(this, arguments);
return ret;
} }
return origin;
}
let winInjections, workspaceInjections, workViewInjections, createdActors, connectedSignals; constructor(...args) {
super(...args);
function resetState() { if (this.metaWorkspace && this.metaWorkspace.index() < 9) {
winInjections = { }; this._tip = new St.Label({
workspaceInjections = { }; style_class: 'extension-windowsNavigator-window-tooltip',
workViewInjections = { }; visible: false,
createdActors = [ ]; });
connectedSignals = [ ]; this.add_actor(this._tip);
}
function enable() { this.connect('notify::scale-x', () => {
resetState(); this._tip.set_scale(1 / this.scale_x, 1 / this.scale_x);
});
Workspace.WindowOverlay.prototype.showTooltip = function() { } else {
this._text.raise_top(); this._tip = null;
this._text.show(); }
this._text.text = (this._windowClone.slotId + 1).toString();
} }
winInjections['showTooltip'] = undefined;
Workspace.WindowOverlay.prototype.hideTooltip = function() { vfunc_allocate(box) {
if (this._text && this._text.visible) super.vfunc_allocate(box);
this._text.hide();
if (this._tip)
this._tip.allocate_preferred_size(0, 0);
} }
winInjections['hideTooltip'] = undefined;
Workspace.Workspace.prototype.showTooltip = function() { showTooltip() {
if (this._tip == null || this._actualGeometry == null) if (!this._tip)
return; return;
this._tip.text = (this.metaWorkspace.index() + 1).toString(); this._tip.text = (this.metaWorkspace.index() + 1).toString();
this._tip.show();
this.set_child_below_sibling(this._tip, null);
}
// Hand code this instead of using _getSpacingAndPadding hideTooltip() {
// because that fails on empty workspaces if (this._tip)
let node = this.actor.get_theme_node(); this._tip.hide();
let padding = { }
left: node.get_padding(St.Side.LEFT),
top: node.get_padding(St.Side.TOP), getWindowWithTooltip(id) {
bottom: node.get_padding(St.Side.BOTTOM), const { layoutManager } = this._container;
right: node.get_padding(St.Side.RIGHT), const slot = layoutManager._windowSlots[id - 1];
return slot ? slot[WINDOW_SLOT].metaWindow : null;
}
showWindowsTooltips() {
const { layoutManager } = this._container;
for (let i = 0; i < layoutManager._windowSlots.length; i++) {
if (layoutManager._windowSlots[i])
layoutManager._windowSlots[i][WINDOW_SLOT].showTooltip(`${i + 1}`);
}
}
hideWindowsTooltips() {
const { layoutManager } = this._container;
for (let i in layoutManager._windowSlots) {
if (layoutManager._windowSlots[i])
layoutManager._windowSlots[i][WINDOW_SLOT].hideTooltip();
}
}
// overriding _addWindowClone to apply the tooltip patch on the cloned
// windowPreview
_addWindowClone(metaWindow) {
const clone = super._addWindowClone(metaWindow);
// appling the tooltip patch
(function patchPreview() {
this._text = new St.Label({
style_class: 'extension-windowsNavigator-window-tooltip',
visible: false,
});
this._text.add_constraint(new Clutter.BindConstraint({
source: this.windowContainer,
coordinate: Clutter.BindCoordinate.POSITION,
}));
this._text.add_constraint(new Clutter.AlignConstraint({
source: this.windowContainer,
align_axis: Clutter.AlignAxis.X_AXIS,
pivot_point: new Graphene.Point({ x: 0.5, y: -1 }),
factor: this._closeButtonSide === St.Side.LEFT ? 1 : 0,
}));
this._text.add_constraint(new Clutter.AlignConstraint({
source: this.windowContainer,
align_axis: Clutter.AlignAxis.Y_AXIS,
pivot_point: new Graphene.Point({ x: -1, y: 0.5 }),
factor: 0,
}));
this.add_child(this._text);
}).call(clone);
clone.showTooltip = function (text) {
this._text.set({ text });
this._text.show();
}; };
let area = Workspace.padArea(this._actualGeometry, padding); clone.hideTooltip = function () {
this._tip.x = area.x; if (this._text && this._text.visible)
this._tip.y = area.y; this._text.hide();
this._tip.show(); };
this._tip.raise_top();
}
workspaceInjections['showTooltip'] = undefined;
Workspace.Workspace.prototype.hideTooltip = function() { return clone;
if (this._tip == null)
return;
if (!this._tip.get_parent())
return;
this._tip.hide();
} }
workspaceInjections['hideTooltip'] = undefined; }
Workspace.Workspace.prototype.getWindowWithTooltip = function(id) { class MyWorkspacesView extends WorkspacesView.WorkspacesView {
for (let i = 0; i < this._windows.length; i++) { static {
if ((this._windows[i].slotId + 1) == id) GObject.registerClass(this);
return this._windows[i].metaWindow;
}
return null;
} }
workspaceInjections['getWindowWithTooltip'] = undefined;
Workspace.Workspace.prototype.showWindowsTooltips = function() { constructor(...args) {
for (let i in this._windowOverlays) { super(...args);
if (this._windowOverlays[i] != null)
this._windowOverlays[i].showTooltip(); this._pickWorkspace = false;
} this._pickWindow = false;
this._keyPressEventId =
global.stage.connect('key-press-event', this._onKeyPress.bind(this));
this._keyReleaseEventId =
global.stage.connect('key-release-event', this._onKeyRelease.bind(this));
} }
workspaceInjections['showWindowsTooltips'] = undefined;
Workspace.Workspace.prototype.hideWindowsTooltips = function() { _onDestroy() {
for (let i in this._windowOverlays) { super._onDestroy();
if (this._windowOverlays[i] != null)
this._windowOverlays[i].hideTooltip(); global.stage.disconnect(this._keyPressEventId);
} global.stage.disconnect(this._keyReleaseEventId);
} }
workspaceInjections['hideWindowsTooltips'] = undefined;
WorkspacesView.WorkspacesView.prototype._hideTooltips = function() { _hideTooltips() {
if (global.stage.get_key_focus() == global.stage) if (global.stage.get_key_focus() === global.stage)
global.stage.set_key_focus(this._prevFocusActor); global.stage.set_key_focus(this._prevFocusActor);
this._pickWindow = false; this._pickWindow = false;
for (let i = 0; i < this._workspaces.length; i++) for (let i = 0; i < this._workspaces.length; i++)
this._workspaces[i].hideWindowsTooltips(); this._workspaces[i].hideWindowsTooltips();
} }
workViewInjections['_hideTooltips'] = undefined;
WorkspacesView.WorkspacesView.prototype._hideWorkspacesTooltips = function() { _hideWorkspacesTooltips() {
global.stage.set_key_focus(this._prevFocusActor); global.stage.set_key_focus(this._prevFocusActor);
this._pickWorkspace = false; this._pickWorkspace = false;
for (let i = 0; i < this._workspaces.length; i++) for (let i = 0; i < this._workspaces.length; i++)
this._workspaces[i].hideTooltip(); this._workspaces[i].hideTooltip();
} }
workViewInjections['_hideWorkspacesTooltips'] = undefined;
WorkspacesView.WorkspacesView.prototype._onKeyRelease = function(s, o) { _onKeyRelease(s, o) {
if (this._pickWindow && if (this._pickWindow &&
(o.get_key_symbol() == Clutter.KEY_Alt_L || (o.get_key_symbol() === Clutter.KEY_Alt_L ||
o.get_key_symbol() == Clutter.KEY_Alt_R)) o.get_key_symbol() === Clutter.KEY_Alt_R))
this._hideTooltips(); this._hideTooltips();
if (this._pickWorkspace && if (this._pickWorkspace &&
(o.get_key_symbol() == Clutter.KEY_Control_L || (o.get_key_symbol() === Clutter.KEY_Control_L ||
o.get_key_symbol() == Clutter.KEY_Control_R)) o.get_key_symbol() === Clutter.KEY_Control_R))
this._hideWorkspacesTooltips(); this._hideWorkspacesTooltips();
} }
workViewInjections['_onKeyRelease'] = undefined;
WorkspacesView.WorkspacesView.prototype._onKeyPress = function(s, o) { _onKeyPress(s, o) {
if(Main.overview.viewSelector._activePage != Main.overview.viewSelector._workspacesPage) const { ControlsState } = OverviewControls;
if (this._overviewAdjustment.value !== ControlsState.WINDOW_PICKER)
return false; return false;
let workspaceManager = global.workspace_manager; let workspaceManager = global.workspace_manager;
if ((o.get_key_symbol() == Clutter.KEY_Alt_L || if ((o.get_key_symbol() === Clutter.KEY_Alt_L ||
o.get_key_symbol() == Clutter.KEY_Alt_R) o.get_key_symbol() === Clutter.KEY_Alt_R) &&
&& !this._pickWorkspace) { !this._pickWorkspace) {
this._prevFocusActor = global.stage.get_key_focus(); this._prevFocusActor = global.stage.get_key_focus();
global.stage.set_key_focus(null); global.stage.set_key_focus(null);
this._active = workspaceManager.get_active_workspace_index(); this._active = workspaceManager.get_active_workspace_index();
@@ -147,9 +186,9 @@ function enable() {
this._workspaces[workspaceManager.get_active_workspace_index()].showWindowsTooltips(); this._workspaces[workspaceManager.get_active_workspace_index()].showWindowsTooltips();
return true; return true;
} }
if ((o.get_key_symbol() == Clutter.KEY_Control_L || if ((o.get_key_symbol() === Clutter.KEY_Control_L ||
o.get_key_symbol() == Clutter.KEY_Control_R) o.get_key_symbol() === Clutter.KEY_Control_R) &&
&& !this._pickWindow) { !this._pickWindow) {
this._prevFocusActor = global.stage.get_key_focus(); this._prevFocusActor = global.stage.get_key_focus();
global.stage.set_key_focus(null); global.stage.set_key_focus(null);
this._pickWorkspace = true; this._pickWorkspace = true;
@@ -158,17 +197,17 @@ function enable() {
return true; return true;
} }
if (global.stage.get_key_focus() != global.stage) if (global.stage.get_key_focus() !== global.stage)
return false; return false;
// ignore shift presses, they're required to get numerals in azerty keyboards // ignore shift presses, they're required to get numerals in azerty keyboards
if ((this._pickWindow || this._pickWorkspace) && if ((this._pickWindow || this._pickWorkspace) &&
(o.get_key_symbol() == Clutter.KEY_Shift_L || (o.get_key_symbol() === Clutter.KEY_Shift_L ||
o.get_key_symbol() == Clutter.KEY_Shift_R)) o.get_key_symbol() === Clutter.KEY_Shift_R))
return true; return true;
if (this._pickWindow) { if (this._pickWindow) {
if (this._active != workspaceManager.get_active_workspace_index()) { if (this._active !== workspaceManager.get_active_workspace_index()) {
this._hideTooltips(); this._hideTooltips();
return false; return false;
} }
@@ -210,82 +249,28 @@ function enable() {
} }
return false; return false;
} }
workViewInjections['_onKeyPress'] = undefined;
winInjections['_init'] = injectToFunction(Workspace.WindowOverlay.prototype, '_init', function(windowClone, parentActor) {
this._id = null;
createdActors.push(this._text = new St.Label({ style_class: 'extension-windowsNavigator-window-tooltip' }));
this._text.hide();
parentActor.add_actor(this._text);
});
winInjections['relayout'] = injectToFunction(Workspace.WindowOverlay.prototype, 'relayout', function(animate) {
let [cloneX, cloneY, cloneWidth, cloneHeight] = this._windowClone.slot;
let textX = cloneX - 2;
let textY = cloneY - 2;
this._text.set_position(Math.floor(textX) + 5, Math.floor(textY) + 5);
this._text.raise_top();
});
workspaceInjections['_init'] = injectToFunction(Workspace.Workspace.prototype, '_init', function(metaWorkspace) {
if (metaWorkspace && metaWorkspace.index() < 9) {
createdActors.push(this._tip = new St.Label({ style_class: 'extension-windowsNavigator-window-tooltip',
visible: false }));
this.actor.add_actor(this._tip);
let signalId = this.actor.connect('notify::scale-x', () => {
this._tip.set_scale(1 / this.actor.scale_x, 1 / this.actor.scale_x);
});
connectedSignals.push({ obj: this.actor, id: signalId });
} else
this._tip = null;
});
workViewInjections['_init'] = injectToFunction(WorkspacesView.WorkspacesView.prototype, '_init', function(width, height, x, y, workspaces) {
this._pickWorkspace = false;
this._pickWindow = false;
this._keyPressEventId =
global.stage.connect('key-press-event', this._onKeyPress.bind(this));
this._keyReleaseEventId =
global.stage.connect('key-release-event', this._onKeyRelease.bind(this));
connectedSignals.push({ obj: global.stage, id: this._keyPressEventId });
connectedSignals.push({ obj: global.stage, id: this._keyReleaseEventId });
});
workViewInjections['_onDestroy'] = injectToFunction(WorkspacesView.WorkspacesView.prototype, '_onDestroy', function() {
global.stage.disconnect(this._keyPressEventId);
global.stage.disconnect(this._keyReleaseEventId);
connectedSignals = [ ];
});
} }
function removeInjection(object, injection, name) { class Extension {
if (injection[name] === undefined) constructor() {
delete object[name]; this._origWorkspace = Workspace.Workspace;
else this._origWorkspacesView = WorkspacesView.WorkspacesView;
object[name] = injection[name]; }
}
enable() {
function disable() { Workspace.Workspace = MyWorkspace;
let i; WorkspacesView.WorkspacesView = MyWorkspacesView;
}
for (i in workspaceInjections)
removeInjection(Workspace.Workspace.prototype, workspaceInjections, i); disable() {
for (i in winInjections) Workspace.Workspace = this._origWorkspace;
removeInjection(Workspace.WindowOverlay.prototype, winInjections, i); WorkspacesView.WorkspacesView = this._origWorkspacesView;
for (i in workViewInjections) }
removeInjection(WorkspacesView.WorkspacesView.prototype, workViewInjections, i);
for (i of connectedSignals)
i.obj.disconnect(i.id);
for (i of createdActors)
i.destroy();
resetState();
} }
/**
* @returns {Extension} - the extension's state object
*/
function init() { function init() {
/* do nothing */ return new Extension();
} }
+1
View File
@@ -3,3 +3,4 @@ extension_data += configure_file(
output: metadata_name, output: metadata_name,
configuration: metadata_conf configuration: metadata_conf
) )
extension_data += files('stylesheet.css')
+386 -64
View File
@@ -1,63 +1,322 @@
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- // -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
/* exported init enable disable */
const Gio = imports.gi.Gio; const { Clutter, Gio, GObject, Meta, St } = imports.gi;
const Meta = imports.gi.Meta;
const Clutter = imports.gi.Clutter; const DND = imports.ui.dnd;
const St = imports.gi.St; const ExtensionUtils = imports.misc.extensionUtils;
const Mainloop = imports.mainloop; const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu; const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
const Panel = imports.ui.panel;
const Gettext = imports.gettext.domain('gnome-shell-extensions'); const _ = ExtensionUtils.gettext;
const _ = Gettext.gettext;
const Main = imports.ui.main;
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences'; const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
const WORKSPACE_KEY = 'workspace-names'; const WORKSPACE_KEY = 'workspace-names';
const TOOLTIP_OFFSET = 6;
const TOOLTIP_ANIMATION_TIME = 150;
const MAX_THUMBNAILS = 6;
class WindowPreview extends St.Button {
static {
GObject.registerClass(this);
}
constructor(window) {
super({
style_class: 'workspace-indicator-window-preview',
});
this._delegate = this;
DND.makeDraggable(this, { restoreOnSuccess: true });
this._window = window;
this.connect('destroy', this._onDestroy.bind(this));
this._sizeChangedId = this._window.connect('size-changed',
() => this.queue_relayout());
this._positionChangedId = this._window.connect('position-changed',
() => {
this._updateVisible();
this.queue_relayout();
});
this._minimizedChangedId = this._window.connect('notify::minimized',
this._updateVisible.bind(this));
this._focusChangedId = global.display.connect('notify::focus-window',
this._onFocusChanged.bind(this));
this._onFocusChanged();
}
// needed for DND
get metaWindow() {
return this._window;
}
_onDestroy() {
this._window.disconnect(this._sizeChangedId);
this._window.disconnect(this._positionChangedId);
this._window.disconnect(this._minimizedChangedId);
global.display.disconnect(this._focusChangedId);
}
_onFocusChanged() {
if (global.display.focus_window === this._window)
this.add_style_class_name('active');
else
this.remove_style_class_name('active');
}
_updateVisible() {
const monitor = Main.layoutManager.findIndexForActor(this);
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
this.visible = this._window.get_frame_rect().overlap(workArea) &&
this._window.window_type !== Meta.WindowType.DESKTOP &&
this._window.showing_on_its_workspace();
}
}
class WorkspaceLayout extends Clutter.LayoutManager {
static {
GObject.registerClass(this);
}
vfunc_get_preferred_width() {
return [0, 0];
}
vfunc_get_preferred_height() {
return [0, 0];
}
vfunc_allocate(container, box) {
const monitor = Main.layoutManager.findIndexForActor(container);
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
const hscale = box.get_width() / workArea.width;
const vscale = box.get_height() / workArea.height;
for (const child of container) {
const childBox = new Clutter.ActorBox();
const frameRect = child.metaWindow.get_frame_rect();
childBox.set_size(
Math.round(Math.min(frameRect.width, workArea.width) * hscale),
Math.round(Math.min(frameRect.height, workArea.height) * vscale));
childBox.set_origin(
Math.round((frameRect.x - workArea.x) * hscale),
Math.round((frameRect.y - workArea.y) * vscale));
child.allocate(childBox);
}
}
}
class WorkspaceThumbnail extends St.Button {
static {
GObject.registerClass(this);
}
constructor(index) {
super({
style_class: 'workspace',
child: new Clutter.Actor({
layout_manager: new WorkspaceLayout(),
clip_to_allocation: true,
}),
});
this._tooltip = new St.Label({
style_class: 'dash-label',
visible: false,
});
Main.uiGroup.add_child(this._tooltip);
this.connect('destroy', this._onDestroy.bind(this));
this.connect('notify::hover', this._syncTooltip.bind(this));
this._index = index;
this._delegate = this; // needed for DND
this._windowPreviews = new Map();
let workspaceManager = global.workspace_manager;
this._workspace = workspaceManager.get_workspace_by_index(index);
this._windowAddedId = this._workspace.connect('window-added',
(ws, window) => {
this._addWindow(window);
});
this._windowRemovedId = this._workspace.connect('window-removed',
(ws, window) => {
this._removeWindow(window);
});
this._restackedId = global.display.connect('restacked',
this._onRestacked.bind(this));
this._workspace.list_windows().forEach(w => this._addWindow(w));
this._onRestacked();
}
acceptDrop(source) {
if (!source.metaWindow)
return false;
this._moveWindow(source.metaWindow);
return true;
}
handleDragOver(source) {
if (source.metaWindow)
return DND.DragMotionResult.MOVE_DROP;
else
return DND.DragMotionResult.CONTINUE;
}
_addWindow(window) {
if (this._windowPreviews.has(window))
return;
let preview = new WindowPreview(window);
preview.connect('clicked', (a, btn) => this.emit('clicked', btn));
this._windowPreviews.set(window, preview);
this.child.add_child(preview);
}
_removeWindow(window) {
let preview = this._windowPreviews.get(window);
if (!preview)
return;
this._windowPreviews.delete(window);
preview.destroy();
}
_onRestacked() {
let lastPreview = null;
let windows = global.get_window_actors().map(a => a.meta_window);
for (let i = 0; i < windows.length; i++) {
let preview = this._windowPreviews.get(windows[i]);
if (!preview)
continue;
this.child.set_child_above_sibling(preview, lastPreview);
lastPreview = preview;
}
}
_moveWindow(window) {
let monitorIndex = Main.layoutManager.findIndexForActor(this);
if (monitorIndex !== window.get_monitor())
window.move_to_monitor(monitorIndex);
window.change_workspace_by_index(this._index, false);
}
on_clicked() {
let ws = global.workspace_manager.get_workspace_by_index(this._index);
if (ws)
ws.activate(global.get_current_time());
}
_syncTooltip() {
if (this.hover) {
this._tooltip.set({
text: Meta.prefs_get_workspace_name(this._index),
visible: true,
opacity: 0,
});
const [stageX, stageY] = this.get_transformed_position();
const thumbWidth = this.allocation.get_width();
const thumbHeight = this.allocation.get_height();
const tipWidth = this._tooltip.width;
const xOffset = Math.floor((thumbWidth - tipWidth) / 2);
const monitor = Main.layoutManager.findMonitorForActor(this);
const x = Math.clamp(
stageX + xOffset,
monitor.x,
monitor.x + monitor.width - tipWidth);
const y = stageY + thumbHeight + TOOLTIP_OFFSET;
this._tooltip.set_position(x, y);
}
this._tooltip.ease({
opacity: this.hover ? 255 : 0,
duration: TOOLTIP_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => (this._tooltip.visible = this.hover),
});
}
_onDestroy() {
this._tooltip.destroy();
this._workspace.disconnect(this._windowAddedId);
this._workspace.disconnect(this._windowRemovedId);
global.display.disconnect(this._restackedId);
}
}
class WorkspaceIndicator extends PanelMenu.Button { class WorkspaceIndicator extends PanelMenu.Button {
static {
GObject.registerClass(this);
}
constructor() { constructor() {
super(0.0, _("Workspace Indicator")); super(0.0, _('Workspace Indicator'));
let container = new St.Widget({
layout_manager: new Clutter.BinLayout(),
x_expand: true,
y_expand: true,
});
this.add_actor(container);
let workspaceManager = global.workspace_manager; let workspaceManager = global.workspace_manager;
this._currentWorkspace = workspaceManager.get_active_workspace().index(); this._currentWorkspace = workspaceManager.get_active_workspace_index();
this.statusLabel = new St.Label({ y_align: Clutter.ActorAlign.CENTER, this._statusLabel = new St.Label({
text: this._labelText() }); style_class: 'panel-workspace-indicator',
y_align: Clutter.ActorAlign.CENTER,
text: this._labelText(),
});
this.actor.add_actor(this.statusLabel); container.add_actor(this._statusLabel);
this.workspacesItems = []; this._thumbnailsBox = new St.BoxLayout({
style_class: 'panel-workspace-indicator-box',
y_expand: true,
reactive: true,
});
container.add_actor(this._thumbnailsBox);
this._workspacesItems = [];
this._workspaceSection = new PopupMenu.PopupMenuSection(); this._workspaceSection = new PopupMenu.PopupMenuSection();
this.menu.addMenuItem(this._workspaceSection); this.menu.addMenuItem(this._workspaceSection);
this._workspaceManagerSignals = []; this._workspaceManagerSignals = [
this._workspaceManagerSignals.push(workspaceManager.connect_after('workspace-added', workspaceManager.connect_after('notify::n-workspaces',
this._createWorkspacesSection.bind(this))); this._nWorkspacesChanged.bind(this)),
this._workspaceManagerSignals.push(workspaceManager.connect_after('workspace-removed', workspaceManager.connect_after('workspace-switched',
this._createWorkspacesSection.bind(this))); this._onWorkspaceSwitched.bind(this)),
this._workspaceManagerSignals.push(workspaceManager.connect_after('workspace-switched', workspaceManager.connect('notify::layout-rows',
this._updateIndicator.bind(this))); this._updateThumbnailVisibility.bind(this)),
];
this.actor.connect('scroll-event', this._onScrollEvent.bind(this)); this.connect('scroll-event', this._onScrollEvent.bind(this));
this._thumbnailsBox.connect('scroll-event', this._onScrollEvent.bind(this));
this._createWorkspacesSection(); this._createWorkspacesSection();
this._updateThumbnails();
//styling this._updateThumbnailVisibility();
this.statusLabel.add_style_class_name('panel-workspace-indicator');
this._settings = new Gio.Settings({ schema_id: WORKSPACE_SCHEMA }); this._settings = new Gio.Settings({ schema_id: WORKSPACE_SCHEMA });
this._settingsChangedId = this._settingsChangedId = this._settings.connect(
this._settings.connect('changed::' + WORKSPACE_KEY, `changed::${WORKSPACE_KEY}`,
this._createWorkspacesSection.bind(this)); this._updateMenuLabels.bind(this));
} }
destroy() { _onDestroy() {
for (let i = 0; i < this._workspaceManagerSignals.length; i++) for (let i = 0; i < this._workspaceManagerSignals.length; i++)
global.workspace_manager.disconnect(this._workspaceManagerSignals[i]); global.workspace_manager.disconnect(this._workspaceManagerSignals[i]);
@@ -66,54 +325,114 @@ class WorkspaceIndicator extends PanelMenu.Button {
this._settingsChangedId = 0; this._settingsChangedId = 0;
} }
super.destroy(); Main.panel.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS);
super._onDestroy();
} }
_updateIndicator() { _updateThumbnailVisibility() {
this.workspacesItems[this._currentWorkspace].setOrnament(PopupMenu.Ornament.NONE); const { workspaceManager } = global;
this._currentWorkspace = global.workspace_manager.get_active_workspace().index(); const vertical = workspaceManager.layout_rows === -1;
this.workspacesItems[this._currentWorkspace].setOrnament(PopupMenu.Ornament.DOT); const useMenu =
vertical || workspaceManager.n_workspaces > MAX_THUMBNAILS;
this.reactive = useMenu;
this.statusLabel.set_text(this._labelText()); this._statusLabel.visible = useMenu;
this._thumbnailsBox.visible = !useMenu;
// Disable offscreen-redirect when showing the workspace switcher
// so that clip-to-allocation works
Main.panel.set_offscreen_redirect(useMenu
? Clutter.OffscreenRedirect.ALWAYS
: Clutter.OffscreenRedirect.AUTOMATIC_FOR_OPACITY);
}
_onWorkspaceSwitched() {
this._currentWorkspace = global.workspace_manager.get_active_workspace_index();
this._updateMenuOrnament();
this._updateActiveThumbnail();
this._statusLabel.set_text(this._labelText());
}
_nWorkspacesChanged() {
this._createWorkspacesSection();
this._updateThumbnails();
this._updateThumbnailVisibility();
}
_updateMenuOrnament() {
for (let i = 0; i < this._workspacesItems.length; i++) {
this._workspacesItems[i].setOrnament(i === this._currentWorkspace
? PopupMenu.Ornament.DOT
: PopupMenu.Ornament.NONE);
}
}
_updateActiveThumbnail() {
let thumbs = this._thumbnailsBox.get_children();
for (let i = 0; i < thumbs.length; i++) {
if (i === this._currentWorkspace)
thumbs[i].add_style_class_name('active');
else
thumbs[i].remove_style_class_name('active');
}
} }
_labelText(workspaceIndex) { _labelText(workspaceIndex) {
if(workspaceIndex == undefined) { if (workspaceIndex === undefined) {
workspaceIndex = this._currentWorkspace; workspaceIndex = this._currentWorkspace;
return (workspaceIndex + 1).toString(); return (workspaceIndex + 1).toString();
} }
return Meta.prefs_get_workspace_name(workspaceIndex); return Meta.prefs_get_workspace_name(workspaceIndex);
} }
_updateMenuLabels() {
for (let i = 0; i < this._workspacesItems.length; i++)
this._workspacesItems[i].label.text = this._labelText(i);
}
_createWorkspacesSection() { _createWorkspacesSection() {
let workspaceManager = global.workspace_manager; let workspaceManager = global.workspace_manager;
this._workspaceSection.removeAll(); this._workspaceSection.removeAll();
this.workspacesItems = []; this._workspacesItems = [];
this._currentWorkspace = workspaceManager.get_active_workspace().index(); this._currentWorkspace = workspaceManager.get_active_workspace_index();
let i = 0; let i = 0;
for(; i < workspaceManager.n_workspaces; i++) { for (; i < workspaceManager.n_workspaces; i++) {
this.workspacesItems[i] = new PopupMenu.PopupMenuItem(this._labelText(i)); this._workspacesItems[i] = new PopupMenu.PopupMenuItem(this._labelText(i));
this._workspaceSection.addMenuItem(this.workspacesItems[i]); this._workspaceSection.addMenuItem(this._workspacesItems[i]);
this.workspacesItems[i].workspaceId = i; this._workspacesItems[i].workspaceId = i;
this.workspacesItems[i].label_actor = this.statusLabel; this._workspacesItems[i].label_actor = this._statusLabel;
let self = this; this._workspacesItems[i].connect('activate', (actor, _event) => {
this.workspacesItems[i].connect('activate', (actor, event) => {
this._activate(actor.workspaceId); this._activate(actor.workspaceId);
}); });
if (i == this._currentWorkspace) if (i === this._currentWorkspace)
this.workspacesItems[i].setOrnament(PopupMenu.Ornament.DOT); this._workspacesItems[i].setOrnament(PopupMenu.Ornament.DOT);
} }
this.statusLabel.set_text(this._labelText()); this._statusLabel.set_text(this._labelText());
}
_updateThumbnails() {
let workspaceManager = global.workspace_manager;
this._thumbnailsBox.destroy_all_children();
for (let i = 0; i < workspaceManager.n_workspaces; i++) {
let thumb = new WorkspaceThumbnail(i);
this._thumbnailsBox.add_actor(thumb);
}
this._updateActiveThumbnail();
} }
_activate(index) { _activate(index) {
let workspaceManager = global.workspace_manager; let workspaceManager = global.workspace_manager;
if(index >= 0 && index < workspaceManager.n_workspaces) { if (index >= 0 && index < workspaceManager.n_workspaces) {
let metaWorkspace = workspaceManager.get_workspace_by_index(index); let metaWorkspace = workspaceManager.get_workspace_by_index(index);
metaWorkspace.activate(global.get_current_time()); metaWorkspace.activate(global.get_current_time());
} }
@@ -122,30 +441,33 @@ class WorkspaceIndicator extends PanelMenu.Button {
_onScrollEvent(actor, event) { _onScrollEvent(actor, event) {
let direction = event.get_scroll_direction(); let direction = event.get_scroll_direction();
let diff = 0; let diff = 0;
if (direction == Clutter.ScrollDirection.DOWN) { if (direction === Clutter.ScrollDirection.DOWN)
diff = 1; diff = 1;
} else if (direction == Clutter.ScrollDirection.UP) { else if (direction === Clutter.ScrollDirection.UP)
diff = -1; diff = -1;
} else { else
return; return;
}
let newIndex = global.workspace_manager.get_active_workspace().index() + diff;
let newIndex = global.workspace_manager.get_active_workspace_index() + diff;
this._activate(newIndex); this._activate(newIndex);
} }
}; }
function init(meta) { /** */
Convenience.initTranslations(); function init() {
ExtensionUtils.initTranslations();
} }
let _indicator; let _indicator;
/** */
function enable() { function enable() {
_indicator = new WorkspaceIndicator; _indicator = new WorkspaceIndicator();
Main.panel.addToStatusArea('workspace-indicator', _indicator); Main.panel.addToStatusArea('workspace-indicator', _indicator);
} }
/** */
function disable() { function disable() {
_indicator.destroy(); _indicator.destroy();
} }
@@ -3,5 +3,6 @@ extension_data += configure_file(
output: metadata_name, output: metadata_name,
configuration: metadata_conf configuration: metadata_conf
) )
extension_data += files('stylesheet.css')
extension_sources += files('prefs.js') extension_sources += files('prefs.js')
+221 -163
View File
@@ -1,211 +1,269 @@
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- // -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
/* exported init buildPrefsWidget */
const Gio = imports.gi.Gio; const { Adw, Gio, GLib, GObject, Gtk, Pango } = imports.gi;
const GLib = imports.gi.GLib;
const GObject = imports.gi.GObject;
const Gtk = imports.gi.Gtk;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const N_ = e => e;
const ExtensionUtils = imports.misc.extensionUtils; const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience; const _ = ExtensionUtils.gettext;
const N_ = e => e;
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences'; const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
const WORKSPACE_KEY = 'workspace-names'; const WORKSPACE_KEY = 'workspace-names';
const WorkspaceNameModel = GObject.registerClass( class NewItem extends GObject.Object {}
class WorkspaceNameModel extends Gtk.ListStore { GObject.registerClass(NewItem);
_init(params) {
super._init(params);
this.set_column_types([GObject.TYPE_STRING]);
this.Columns = { class NewItemModel extends GObject.Object {
LABEL: 0, static [GObject.interfaces] = [Gio.ListModel];
}; static {
GObject.registerClass(this);
this._settings = new Gio.Settings({ schema_id: WORKSPACE_SCHEMA });
//this._settings.connect('changed::workspace-names', this._reloadFromSettings.bind(this));
this._reloadFromSettings();
// overriding class closure doesn't work, because GtkTreeModel
// plays tricks with marshallers and class closures
this.connect('row-changed', this._onRowChanged.bind(this));
this.connect('row-inserted', this._onRowInserted.bind(this));
this.connect('row-deleted', this._onRowDeleted.bind(this));
} }
_reloadFromSettings() { #item = new NewItem();
if (this._preventChanges)
return;
this._preventChanges = true;
let newNames = this._settings.get_strv(WORKSPACE_KEY); vfunc_get_item_type() {
return NewItem;
let i = 0;
let [ok, iter] = this.get_iter_first();
while (ok && i < newNames.length) {
this.set(iter, [this.Columns.LABEL], [newNames[i]]);
ok = this.iter_next(iter);
i++;
}
while (ok)
ok = this.remove(iter);
for ( ; i < newNames.length; i++) {
iter = this.append();
this.set(iter, [this.Columns.LABEL], [newNames[i]]);
}
this._preventChanges = false;
} }
_onRowChanged(self, path, iter) { vfunc_get_n_items() {
if (this._preventChanges) return 1;
return;
this._preventChanges = true;
let index = path.get_indices()[0];
let names = this._settings.get_strv(WORKSPACE_KEY);
if (index >= names.length) {
// fill with blanks
for (let i = names.length; i <= index; i++)
names[i] = '';
}
names[index] = this.get_value(iter, this.Columns.LABEL);
this._settings.set_strv(WORKSPACE_KEY, names);
this._preventChanges = false;
} }
_onRowInserted(self, path, iter) { vfunc_get_item(_pos) {
if (this._preventChanges) return this.#item;
return; }
this._preventChanges = true; }
let index = path.get_indices()[0]; class WorkspacesList extends GObject.Object {
let names = this._settings.get_strv(WORKSPACE_KEY); static [GObject.interfaces] = [Gio.ListModel];
let label = this.get_value(iter, this.Columns.LABEL) || ''; static {
names.splice(index, 0, label); GObject.registerClass(this);
this._settings.set_strv(WORKSPACE_KEY, names);
this._preventChanges = false;
} }
_onRowDeleted(self, path) { #settings = new Gio.Settings({ schema_id: WORKSPACE_SCHEMA });
if (this._preventChanges) #names = this.#settings.get_strv(WORKSPACE_KEY);
return; #items = Gtk.StringList.new(this.#names);
this._preventChanges = true; #changedId;
let index = path.get_indices()[0]; constructor() {
let names = this._settings.get_strv(WORKSPACE_KEY); super();
if (index >= names.length) this.#changedId =
return; this.#settings.connect(`changed::${WORKSPACE_KEY}`, () => {
const removed = this.#names.length;
names.splice(index, 1); this.#names = this.#settings.get_strv(WORKSPACE_KEY);
this.#items.splice(0, removed, this.#names);
// compact the array this.items_changed(0, removed, this.#names.length);
for (let i = names.length -1; i >= 0 && !names[i]; i++) });
names.pop();
this._settings.set_strv(WORKSPACE_KEY, names);
this._preventChanges = false;
} }
});
const WorkspaceSettingsWidget = GObject.registerClass( append() {
class WorkspaceSettingsWidget extends Gtk.Grid { const name = _('Workspace %d').format(this.#names.length + 1);
_init(params) {
super._init(params);
this.margin = 12;
this.orientation = Gtk.Orientation.VERTICAL;
this.add(new Gtk.Label({ label: '<b>' + _("Workspace Names") + '</b>', this.#names.push(name);
use_markup: true, margin_bottom: 6, this.#settings.block_signal_handler(this.#changedId);
hexpand: true, halign: Gtk.Align.START })); this.#settings.set_strv(WORKSPACE_KEY, this.#names);
this.#settings.unblock_signal_handler(this.#changedId);
let scrolled = new Gtk.ScrolledWindow({ shadow_type: Gtk.ShadowType.IN }); const pos = this.#items.get_n_items();
scrolled.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC); this.#items.append(name);
this.add(scrolled); this.items_changed(pos, 0, 1);
}
this._store = new WorkspaceNameModel(); remove(name) {
this._treeView = new Gtk.TreeView({ model: this._store, const pos = this.#names.indexOf(name);
headers_visible: false, if (pos < 0)
reorderable: true, return;
hexpand: true,
vexpand: true
});
let column = new Gtk.TreeViewColumn({ title: _("Name") }); this.#names.splice(pos, 1);
let renderer = new Gtk.CellRendererText({ editable: true });
renderer.connect('edited', this._cellEdited.bind(this));
column.pack_start(renderer, true);
column.add_attribute(renderer, 'text', this._store.Columns.LABEL);
this._treeView.append_column(column);
scrolled.add(this._treeView); this.#settings.block_signal_handler(this.#changedId);
this.#settings.set_strv(WORKSPACE_KEY, this.#names);
this.#settings.unblock_signal_handler(this.#changedId);
let toolbar = new Gtk.Toolbar({ icon_size: Gtk.IconSize.SMALL_TOOLBAR }); this.#items.remove(pos);
toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_INLINE_TOOLBAR); this.items_changed(pos, 1, 0);
}
let newButton = new Gtk.ToolButton({ icon_name: 'list-add-symbolic' }); rename(oldName, newName) {
newButton.connect('clicked', this._newClicked.bind(this)); const pos = this.#names.indexOf(oldName);
toolbar.add(newButton); if (pos < 0)
return;
let delButton = new Gtk.ToolButton({ icon_name: 'list-remove-symbolic' }); this.#names.splice(pos, 1, newName);
delButton.connect('clicked', this._delClicked.bind(this)); this.#items.splice(pos, 1, [newName]);
toolbar.add(delButton);
let selection = this._treeView.get_selection(); this.#settings.block_signal_handler(this.#changedId);
selection.connect('changed', () => { this.#settings.set_strv(WORKSPACE_KEY, this.#names);
delButton.sensitive = selection.count_selected_rows() > 0; this.#settings.unblock_signal_handler(this.#changedId);
}
vfunc_get_item_type() {
return Gtk.StringObject;
}
vfunc_get_n_items() {
return this.#items.get_n_items();
}
vfunc_get_item(pos) {
return this.#items.get_item(pos);
}
}
class WorkspaceSettingsWidget extends Adw.PreferencesGroup {
static {
GObject.registerClass(this);
this.install_action('workspaces.add', null,
self => self._workspaces.append());
this.install_action('workspaces.remove', 's',
(self, name, param) => self._workspaces.remove(param.unpack()));
this.install_action('workspaces.rename', '(ss)',
(self, name, param) => self._workspaces.rename(...param.deepUnpack()));
}
constructor() {
super({
title: _('Workspace Names'),
}); });
delButton.sensitive = selection.count_selected_rows() > 0;
this.add(toolbar); this._workspaces = new WorkspacesList();
const store = new Gio.ListStore({ item_type: Gio.ListModel });
const listModel = new Gtk.FlattenListModel({ model: store });
store.append(this._workspaces);
store.append(new NewItemModel());
this._list = new Gtk.ListBox({
selection_mode: Gtk.SelectionMode.NONE,
css_classes: ['boxed-list'],
});
this._list.connect('row-activated', (l, row) => row.edit());
this.add(this._list);
this._list.bind_model(listModel, item => {
return item instanceof NewItem
? new NewWorkspaceRow()
: new WorkspaceRow(item.string);
});
}
}
class WorkspaceRow extends Adw.PreferencesRow {
static {
GObject.registerClass(this);
} }
_cellEdited(renderer, path, new_text) { constructor(name) {
let [ok, iter] = this._store.get_iter_from_string(path); super({ name });
if (ok) const box = new Gtk.Box({
this._store.set(iter, [this._store.Columns.LABEL], [new_text]); spacing: 12,
margin_top: 6,
margin_bottom: 6,
margin_start: 6,
margin_end: 6,
});
const label = new Gtk.Label({
hexpand: true,
xalign: 0,
max_width_chars: 25,
ellipsize: Pango.EllipsizeMode.END,
});
this.bind_property('name', label, 'label',
GObject.BindingFlags.SYNC_CREATE);
box.append(label);
const button = new Gtk.Button({
action_name: 'workspaces.remove',
icon_name: 'edit-delete-symbolic',
has_frame: false,
});
box.append(button);
this.bind_property_full('name',
button, 'action-target',
GObject.BindingFlags.SYNC_CREATE,
(bind, target) => [true, new GLib.Variant('s', target)],
null);
this._entry = new Gtk.Entry({
max_width_chars: 25,
});
const controller = new Gtk.ShortcutController();
controller.add_shortcut(new Gtk.Shortcut({
trigger: Gtk.ShortcutTrigger.parse_string('Escape'),
action: Gtk.CallbackAction.new(() => {
this._stopEdit();
return true;
}),
}));
this._entry.add_controller(controller);
this._stack = new Gtk.Stack();
this._stack.add_named(box, 'display');
this._stack.add_named(this._entry, 'edit');
this.child = this._stack;
this._entry.connect('activate', () => {
this.activate_action('workspaces.rename',
new GLib.Variant('(ss)', [this.name, this._entry.text]));
this.name = this._entry.text;
this._stopEdit();
});
this._entry.connect('notify::has-focus', () => {
if (this._entry.has_focus)
return;
this._stopEdit();
});
} }
_newClicked() { edit() {
let iter = this._store.append(); this._entry.text = this.name;
let index = this._store.get_path(iter).get_indices()[0]; this._entry.grab_focus();
this._stack.visible_child_name = 'edit';
let label = _("Workspace %d").format(index + 1);
this._store.set(iter, [this._store.Columns.LABEL], [label]);
} }
_delClicked() { _stopEdit() {
let [any, model, iter] = this._treeView.get_selection().get_selected(); this.grab_focus();
this._stack.visible_child_name = 'display';
if (any)
this._store.remove(iter);
} }
}); }
class NewWorkspaceRow extends Adw.PreferencesRow {
static {
GObject.registerClass(this);
}
constructor() {
super({
action_name: 'workspaces.add',
child: new Gtk.Image({
icon_name: 'list-add-symbolic',
pixel_size: 16,
margin_top: 12,
margin_bottom: 12,
margin_start: 12,
margin_end: 12,
}),
});
this.update_property(
[Gtk.AccessibleProperty.LABEL], [_('Add Workspace')]);
}
}
/** */
function init() { function init() {
Convenience.initTranslations(); ExtensionUtils.initTranslations();
} }
/**
* @returns {Gtk.Widget} - the prefs widget
*/
function buildPrefsWidget() { function buildPrefsWidget() {
let widget = new WorkspaceSettingsWidget(); return new WorkspaceSettingsWidget();
widget.show_all();
return widget;
} }
+26 -3
View File
@@ -1,5 +1,28 @@
.panel-workspace-indicator { .panel-workspace-indicator {
padding: 0 8px; padding: 0 8px;
background-color: rgba(200, 200, 200, .5); }
border: 1px solid #cccccc;
.panel-workspace-indicator-box {
padding: 4px 0;
spacing: 4px;
}
.panel-workspace-indicator-box .workspace {
width: 40px;
border: 2px solid #000;
border-radius: 2px;
background-color: #595959;
}
.panel-workspace-indicator-box .workspace.active {
border-color: #fff;
}
.workspace-indicator-window-preview {
background-color: #bebebe;
border: 1px solid #828282;
}
.workspace-indicator-window-preview.active {
background-color: #d4d4d4;
} }
+6
View File
@@ -34,4 +34,10 @@ and will be picked automatically at next login.
<gnome:userid>fmuellner</gnome:userid> <gnome:userid>fmuellner</gnome:userid>
</foaf:Person> </foaf:Person>
</maintainer> </maintainer>
<maintainer>
<foaf:Person>
<foaf:name>Marge Bot</foaf:name>
<gnome:userid>marge-bot</gnome:userid>
</foaf:Person>
</maintainer>
</Project> </Project>
-93
View File
@@ -1,93 +0,0 @@
/* -*- mode: js; js-basic-offset: 4; indent-tabs-mode: nil -*- */
/*
Copyright (c) 2011-2012, Giovanni Campagna <scampa.giovanni@gmail.com>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the GNOME nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
const Gettext = imports.gettext;
const Gio = imports.gi.Gio;
const Config = imports.misc.config;
const ExtensionUtils = imports.misc.extensionUtils;
/**
* initTranslations:
* @domain: (optional): the gettext domain to use
*
* Initialize Gettext to load translations from extensionsdir/locale.
* If @domain is not provided, it will be taken from metadata['gettext-domain']
*/
function initTranslations(domain) {
let extension = ExtensionUtils.getCurrentExtension();
domain = domain || extension.metadata['gettext-domain'];
// check if this extension was built with "make zip-file", and thus
// has the locale files in a subfolder
// otherwise assume that extension has been installed in the
// same prefix as gnome-shell
let localeDir = extension.dir.get_child('locale');
if (localeDir.query_exists(null))
Gettext.bindtextdomain(domain, localeDir.get_path());
else
Gettext.bindtextdomain(domain, Config.LOCALEDIR);
}
/**
* getSettings:
* @schema: (optional): the GSettings schema id
*
* Builds and return a GSettings schema for @schema, using schema files
* in extensionsdir/schemas. If @schema is not provided, it is taken from
* metadata['settings-schema'].
*/
function getSettings(schema) {
let extension = ExtensionUtils.getCurrentExtension();
schema = schema || extension.metadata['settings-schema'];
const GioSSS = Gio.SettingsSchemaSource;
// check if this extension was built with "make zip-file", and thus
// has the schema files in a subfolder
// otherwise assume that extension has been installed in the
// same prefix as gnome-shell (and therefore schemas are available
// in the standard folders)
let schemaDir = extension.dir.get_child('schemas');
let schemaSource;
if (schemaDir.query_exists(null))
schemaSource = GioSSS.new_from_directory(schemaDir.get_path(),
GioSSS.get_default(),
false);
else
schemaSource = GioSSS.get_default();
let schemaObj = schemaSource.lookup(schema, true);
if (!schemaObj)
throw new Error('Schema ' + schema + ' could not be found for extension '
+ extension.metadata.uuid + '. Please check your installation.');
return new Gio.Settings({ settings_schema: schemaObj });
}
+270
View File
@@ -0,0 +1,270 @@
---
# SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
# SPDX-FileCopyrightText: 2018 Claudio André <claudioandre.br@gmail.com>
env:
es2021: true
extends: 'eslint:recommended'
plugins:
- jsdoc
rules:
array-bracket-newline:
- error
- consistent
array-bracket-spacing:
- error
- never
array-callback-return: error
arrow-parens:
- error
- as-needed
arrow-spacing: error
block-scoped-var: error
block-spacing: error
brace-style: error
# Waiting for this to have matured a bit in eslint
# camelcase:
# - error
# - properties: never
# allow: [^vfunc_, ^on_, _instance_init]
comma-dangle:
- error
- arrays: always-multiline
objects: always-multiline
functions: never
comma-spacing:
- error
- before: false
after: true
comma-style:
- error
- last
computed-property-spacing: error
curly:
- error
- multi-or-nest
- consistent
dot-location:
- error
- property
eol-last: error
eqeqeq: error
func-call-spacing: error
func-name-matching: error
func-style:
- error
- declaration
- allowArrowFunctions: true
indent:
- error
- 4
- ignoredNodes:
# Allow not indenting the body of GObject.registerClass, since in the
# future it's intended to be a decorator
- 'CallExpression[callee.object.name=GObject][callee.property.name=registerClass] > ClassExpression:first-child'
# Allow dedenting chained member expressions
MemberExpression: 'off'
jsdoc/check-alignment: error
jsdoc/check-param-names: error
jsdoc/check-tag-names: error
jsdoc/check-types: error
jsdoc/implements-on-classes: error
jsdoc/newline-after-description: error
jsdoc/require-jsdoc: error
jsdoc/require-param: error
jsdoc/require-param-description: error
jsdoc/require-param-name: error
jsdoc/require-param-type: error
key-spacing:
- error
- beforeColon: false
afterColon: true
keyword-spacing:
- error
- before: true
after: true
linebreak-style:
- error
- unix
lines-between-class-members:
- error
- always
- exceptAfterSingleLine: true
max-nested-callbacks: error
max-statements-per-line: error
new-parens: error
no-array-constructor: error
no-await-in-loop: error
no-caller: error
no-constant-condition:
- error
- checkLoops: false
no-div-regex: error
no-empty:
- error
- allowEmptyCatch: true
no-extra-bind: error
no-extra-parens:
- error
- all
- conditionalAssign: false
nestedBinaryExpressions: false
returnAssign: false
no-implicit-coercion:
- error
- allow:
- '!!'
no-invalid-this: error
no-iterator: error
no-label-var: error
no-lonely-if: error
no-loop-func: error
no-nested-ternary: error
no-new-object: error
no-new-wrappers: error
no-octal-escape: error
no-proto: error
no-prototype-builtins: 'off'
no-restricted-globals: [error, window]
no-restricted-properties:
- error
- object: imports
property: format
message: Use template strings
- object: pkg
property: initFormat
message: Use template strings
- object: Lang
property: copyProperties
message: Use Object.assign()
- object: Lang
property: bind
message: Use arrow notation or Function.prototype.bind()
- object: Lang
property: Class
message: Use ES6 classes
no-restricted-syntax:
- error
- selector: >-
MethodDefinition[key.name="_init"] >
FunctionExpression[params.length=1] >
BlockStatement[body.length=1]
CallExpression[arguments.length=1][callee.object.type="Super"][callee.property.name="_init"] >
Identifier:first-child
message: _init() that only calls super._init() is unnecessary
- selector: >-
MethodDefinition[key.name="_init"] >
FunctionExpression[params.length=0] >
BlockStatement[body.length=1]
CallExpression[arguments.length=0][callee.object.type="Super"][callee.property.name="_init"]
message: _init() that only calls super._init() is unnecessary
- selector: BinaryExpression[operator="instanceof"][right.name="Array"]
message: Use Array.isArray()
no-return-assign: error
no-return-await: error
no-self-compare: error
no-shadow: error
no-shadow-restricted-names: error
no-spaced-func: error
no-tabs: error
no-template-curly-in-string: error
no-throw-literal: error
no-trailing-spaces: error
no-undef-init: error
no-unneeded-ternary: error
no-unused-expressions: error
no-unused-vars:
- error
# Vars use a suffix _ instead of a prefix because of file-scope private vars
- varsIgnorePattern: (^unused|_$)
argsIgnorePattern: ^(unused|_)
no-useless-call: error
no-useless-computed-key: error
no-useless-concat: error
no-useless-constructor: error
no-useless-rename: error
no-useless-return: error
no-whitespace-before-property: error
no-with: error
nonblock-statement-body-position:
- error
- below
object-curly-newline:
- error
- consistent: true
multiline: true
object-curly-spacing: error
object-shorthand: error
operator-assignment: error
operator-linebreak: error
padded-blocks:
- error
- never
# These may be a bit controversial, we can try them out and enable them later
# prefer-const: error
# prefer-destructuring: error
prefer-numeric-literals: error
prefer-promise-reject-errors: error
prefer-rest-params: error
prefer-spread: error
prefer-template: error
quotes:
- error
- single
- avoidEscape: true
require-await: error
rest-spread-spacing: error
semi:
- error
- always
semi-spacing:
- error
- before: false
after: true
semi-style: error
space-before-blocks: error
space-before-function-paren:
- error
- named: never
# for `function ()` and `async () =>`, preserve space around keywords
anonymous: always
asyncArrow: always
space-in-parens: error
space-infix-ops:
- error
- int32Hint: false
space-unary-ops: error
spaced-comment: error
switch-colon-spacing: error
symbol-description: error
template-curly-spacing: error
template-tag-spacing: error
unicode-bom: error
wrap-iife:
- error
- inside
yield-star-spacing: error
yoda: error
settings:
jsdoc:
mode: typescript
globals:
ARGV: readonly
Debugger: readonly
GIRepositoryGType: readonly
globalThis: readonly
imports: readonly
Intl: readonly
log: readonly
logError: readonly
print: readonly
printerr: readonly
window: readonly
TextEncoder: readonly
TextDecoder: readonly
console: readonly
setTimeout: readonly
setInterval: readonly
clearTimeout: readonly
clearInterval: readonly
parserOptions:
ecmaVersion: 2022
+11
View File
@@ -0,0 +1,11 @@
rules:
camelcase:
- error
- properties: never
allow: [^vfunc_, ^on_]
object-curly-spacing:
- error
- always
prefer-arrow-callback: error
globals:
global: readonly
+14 -14
View File
@@ -1,11 +1,12 @@
project('gnome-shell-extensions', project('gnome-shell-extensions',
version: '3.29.3', version: '43.alpha',
meson_version: '>= 0.44.0', meson_version: '>= 0.53.0',
license: 'GPL2+' license: 'GPL2+'
) )
gettext_domain = meson.project_name() gettext_domain = meson.project_name()
fs = import('fs')
gnome = import('gnome') gnome = import('gnome')
i18n = import('i18n') i18n = import('i18n')
@@ -19,22 +20,14 @@ themedir = join_paths(shelldir, 'theme')
schemadir = join_paths(datadir, 'glib-2.0', 'schemas') schemadir = join_paths(datadir, 'glib-2.0', 'schemas')
sessiondir = join_paths(datadir, 'gnome-session', 'sessions') sessiondir = join_paths(datadir, 'gnome-session', 'sessions')
xsessiondir = join_paths(datadir, 'xsessions') xsessiondir = join_paths(datadir, 'xsessions')
wlsessiondir = join_paths(datadir, 'wayland-sessions')
extensionlib = files('lib/convenience.js')
js52 = find_program('js52', required: false)
ver_arr = meson.project_version().split('.') ver_arr = meson.project_version().split('.')
if ver_arr[1].to_int().is_even() shell_version = ver_arr[0]
shell_version = '@0@.@1@'.format(ver_arr[0], ver_arr[1])
else
shell_version = '.'.join(ver_arr)
endif
uuid_suffix = '@gnome-shell-extensions.gcampax.github.com' uuid_suffix = '@gnome-shell-extensions.gcampax.github.com'
classic_extensions = [ classic_extensions = [
'alternate-tab',
'apps-menu', 'apps-menu',
'places-menu', 'places-menu',
'launch-new-instance', 'launch-new-instance',
@@ -52,7 +45,6 @@ default_extensions += [
all_extensions = default_extensions all_extensions = default_extensions
all_extensions += [ all_extensions += [
'auto-move-windows', 'auto-move-windows',
'example',
'native-window-placement', 'native-window-placement',
'user-theme' 'user-theme'
] ]
@@ -91,9 +83,17 @@ foreach e : enabled_extensions
endforeach endforeach
if classic_mode_enabled if classic_mode_enabled
sassc = find_program('sassc', required: true)
subdir('data') subdir('data')
meson.add_install_script(
'meson/session-post-install.py',
join_paths(get_option('prefix'), datadir)
)
endif endif
subdir('extensions') subdir('extensions')
subdir('po') subdir('po')
meson.add_dist_script('meson/generate-stylesheets.py')
meson.add_dist_script('meson/check-version.py',
meson.project_version(),
'NEWS')
+32
View File
@@ -0,0 +1,32 @@
#!/usr/bin/env python3
import os, sys
from pathlib import Path
import argparse, subprocess
def check_version(version, file, type='news'):
if type == 'news':
line = file.open().readline()
ok = line.startswith(version)
print("{}: {}".format(file, "OK" if ok else "FAILED"))
if not ok:
raise Exception("{} does not start with {}".format(file, version))
elif type == 'metainfo':
subprocess.run(['appstream-util', 'validate-version', file, version],
check=True)
else:
raise Exception('Not implemented')
parser = argparse.ArgumentParser(description='Check release version information.')
parser.add_argument('--type', choices=['metainfo','news'], default='news')
parser.add_argument('version', help='the version to check for')
parser.add_argument('files', nargs='+', help='files to check')
args = parser.parse_args()
distroot = os.environ.get('MESON_DIST_ROOT', './')
try:
for file in args.files:
check_version(args.version, Path(distroot, file), args.type)
except:
sys.exit(1)
+13
View File
@@ -0,0 +1,13 @@
#!/usr/bin/env python3
import os
from pathlib import PurePath
import subprocess
sourceroot = os.environ.get('MESON_SOURCE_ROOT')
distroot = os.environ.get('MESON_DIST_ROOT')
stylesheet_path = PurePath('data/gnome-classic.css')
src = PurePath(sourceroot, stylesheet_path.with_suffix('.scss'))
dst = PurePath(distroot, stylesheet_path)
subprocess.run(['sassc', '-a', src, dst], check=True)
+20
View File
@@ -0,0 +1,20 @@
#!/usr/bin/env python3
import os
import shutil
import sys
if os.environ.get('DESTDIR'):
install_root = os.environ.get('DESTDIR') + os.path.abspath(sys.argv[1])
else:
install_root = sys.argv[1]
# FIXME: Meson is unable to copy a generated target file:
# https://groups.google.com/forum/#!topic/mesonbuild/3iIoYPrN4P0
dst_dir = os.path.join(install_root, 'wayland-sessions')
if not os.path.exists(dst_dir):
os.makedirs(dst_dir)
src = os.path.join(install_root, 'xsessions', 'gnome-classic.desktop')
dst = os.path.join(dst_dir, 'gnome-classic.desktop')
shutil.copyfile(src, dst)
+4
View File
@@ -1,3 +1,4 @@
ab
af af
an an
ar ar
@@ -32,12 +33,15 @@ id
is is
it it
ja ja
ka
kab
kk kk
km km
kn kn
ko ko
lt lt
lv lv
mjw
ml ml
mr mr
ms ms
+3 -7
View File
@@ -1,25 +1,21 @@
data/gnome-classic.desktop.in data/gnome-classic.desktop.in
data/gnome-classic.session.desktop.in data/gnome-classic-wayland.desktop.in
data/org.gnome.shell.extensions.classic-overrides.gschema.xml data/gnome-classic-xorg.desktop.in
extensions/alternate-tab/prefs.js
extensions/apps-menu/extension.js extensions/apps-menu/extension.js
extensions/auto-move-windows/extension.js extensions/auto-move-windows/extension.js
extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml
extensions/auto-move-windows/prefs.js extensions/auto-move-windows/prefs.js
extensions/drive-menu/extension.js extensions/drive-menu/extension.js
extensions/example/extension.js
extensions/example/org.gnome.shell.extensions.example.gschema.xml
extensions/example/prefs.js
extensions/native-window-placement/extension.js extensions/native-window-placement/extension.js
extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml
extensions/places-menu/extension.js extensions/places-menu/extension.js
extensions/places-menu/placeDisplay.js extensions/places-menu/placeDisplay.js
extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml
extensions/user-theme/extension.js
extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml
extensions/window-list/extension.js extensions/window-list/extension.js
extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml
extensions/window-list/prefs.js extensions/window-list/prefs.js
extensions/window-list/workspaceIndicator.js
extensions/windowsNavigator/extension.js extensions/windowsNavigator/extension.js
extensions/workspace-indicator/extension.js extensions/workspace-indicator/extension.js
extensions/workspace-indicator/prefs.js extensions/workspace-indicator/prefs.js
+261
View File
@@ -0,0 +1,261 @@
# Abkhazian translation for gnome-shell-extensions.
# Copyright (C) 2022 gnome-shell-extensions's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell-extensions package.
# Нанба Наала <naala-nanba@rambler.ru>, 2022.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions main\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"issues\n"
"POT-Creation-Date: 2022-02-12 02:08+0000\n"
"PO-Revision-Date: 2022-02-12 02:08+0000\n"
"Last-Translator: Нанба Наала <naala-nanba@rambler.ru>, 2022\n"
"Language-Team: Abkhazian <ab@li.org>\n"
"Language: ab\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: data/gnome-classic.desktop.in:3
msgid "GNOME Classic"
msgstr "Аклассикатә GNOME"
#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4
#: data/gnome-classic-xorg.desktop.in:4
msgid "This session logs you into GNOME Classic"
msgstr "Ари асеанс аклассикатә усуратә еишәа GNOME хархәагас иамоуп "
#: data/gnome-classic-wayland.desktop.in:3
msgid "GNOME Classic on Wayland"
msgstr "Аклассикатә GNOME Wayland аҟны"
#: data/gnome-classic-xorg.desktop.in:3
msgid "GNOME Classic on Xorg"
msgstr "Аклассикатә GNOME Xorg аҟны"
#: extensions/apps-menu/extension.js:112
msgid "Favorites"
msgstr "Иалкаау"
#: extensions/apps-menu/extension.js:370
msgid "Applications"
msgstr "Аԥшьқәа"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list"
msgstr "Аԥшьи аусуратә ҵакырақәа рыхьӡынҵеи"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
msgstr "Ацәаҳәақәа рыхьӡынҵа аиԥшрагәаҭага аԥшьы (desktop-фаил ахьӡ )"
"змоу, зашьҭахь ҩ-кәаԥки аусуратә ҭыԥ аномери гылоу "
#: extensions/auto-move-windows/prefs.js:19
msgid "Workspace Rules"
msgstr "Аусуратә ҵакыра аԥҟаррақәа"
#: extensions/auto-move-windows/prefs.js:245
msgid "Add Rule"
msgstr "Аԥҟара ацҵара"
#. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:123
#: extensions/places-menu/placeDisplay.js:210
#, javascript-format
msgid "Ejecting drive “%s” failed:"
msgstr "Адиск «%s» аҭыгара залымшахеит:"
#: extensions/drive-menu/extension.js:139
msgid "Removable devices"
msgstr "Иаҿыҵуа аиҿартәырақәа"
#: extensions/drive-menu/extension.js:161
msgid "Open Files"
msgstr "Афаил аартра"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows"
msgstr "Изыцҵоу аекран аҵакыра аԥенџьырқәа рзы ахархәара"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
"This setting applies only with the natural placement strategy."
msgstr "Шәхы иашәырхәа изыцҵоу аекран аҵакыра аминиатиура атыԥаркразы"
"аекран аганқәа реизышәара ԥсахуа аҭыԥыркра шәыржәпала, анаҩс адаԥа ҳәаақәызҵо ашәагаа архәыҷразы"
"ари ахышәара ахархәара аиуоит аминиатиура «natural» аҭыԥыркра алгоритм ахархәараан"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top"
msgstr " Аԥенџьырқәа рыхқәа хыхь рҭыԥыркра"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
"restarting the shell to have any effect."
msgstr "Иалхзар, ахқәа аминиатиура хыхьтәи ахәҭаҟны аҭыԥ ааныркылалоит"
"(ишыҟоу еиԥш ахқәа ҵаҟатәи аҭыԥ ааныркылоит).Ари ахышәара аԥсахраан,"
"уи аус аура иалагарцазы, иаҭахуп Shell аиҭарура."
#: extensions/places-menu/extension.js:88
#: extensions/places-menu/extension.js:91
msgid "Places"
msgstr "Аҭыԥқәа"
#: extensions/places-menu/placeDisplay.js:49
#, javascript-format
msgid "Failed to launch “%s”"
msgstr " «%s» аус арура залшом"
#: extensions/places-menu/placeDisplay.js:64
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Иамоуӡит атом аибыҭара «%s» азы"
#: extensions/places-menu/placeDisplay.js:125
#: extensions/places-menu/placeDisplay.js:148
msgid "Computer"
msgstr "Акомпиутер"
#: extensions/places-menu/placeDisplay.js:336
msgid "Home"
msgstr "Аҩнытәи аҭаӡ"
#: extensions/places-menu/placeDisplay.js:381
msgid "Browse Network"
msgstr "Аҳа алаԥшхагара"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgid "Cycle Screenshot Sizes"
msgstr "Аекран аҭыхымҭа ашәагаақәа рыԥсахра"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgid "Cycle Screenshot Sizes Backward"
msgstr "Аекран аҭыхымҭа ашәагаақәа шьҭахьҟатәи ахырхарҭала рыԥсахра"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Theme name"
msgstr "Атема ахьӡ"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "~/.themes/name/gnome-shell аҟынтә иҭагалоу атема ахьӡ "
#: extensions/window-list/extension.js:72
msgid "Close"
msgstr "Аркра"
#: extensions/window-list/extension.js:92
msgid "Unminimize"
msgstr "Архынҳәра"
#: extensions/window-list/extension.js:92
msgid "Minimize"
msgstr "Аиҟәырҳәра"
#: extensions/window-list/extension.js:99
msgid "Unmaximize"
msgstr "Аиҭашьақәыргылара"
#: extensions/window-list/extension.js:99
msgid "Maximize"
msgstr "Аиҵыхра"
#: extensions/window-list/extension.js:434
msgid "Minimize all"
msgstr "Зегьы реиҟәырҳәра"
#: extensions/window-list/extension.js:440
msgid "Unminimize all"
msgstr "Зегьы рырхынҳәра"
#: extensions/window-list/extension.js:446
msgid "Maximize all"
msgstr "Зегьы реиҵыхра"
#: extensions/window-list/extension.js:454
msgid "Unmaximize all"
msgstr "Зегьы реиҭашьақәыргылара"
#: extensions/window-list/extension.js:462
msgid "Close all"
msgstr "Зегьы рыркра"
#: extensions/window-list/extension.js:741
msgid "Window List"
msgstr "Аԥенџьырқәа рыхьӡынҵа"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows"
msgstr "Аԥенџьырқәа аидыргәыԥлара анаҭаху"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”."
msgstr "Иҳәаақәнаҵоит, ианаҭаху ԥшьык иаҵанакуа аԥенџьырқәа реидыргәыԥлара, аԥенџьырқәа рыхьӡынҵаҟны"
" Иҟалар зылшо аҵакқәа : «never» — ахаан; «auto» — автоматла; «always» — есқьынгьы"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:76
msgid "Show windows from all workspaces"
msgstr "Аҵакырақәа зегьы рҟынтә аԥенџьырқәа раарԥшра"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr
"Аԥенџьырқәа рыхьӡынҵа аусуратә ҵакырақәа зегь рҟынтә акәу,мамзар уажәтәи аҟынтә акәу ишаарԥшлатәу"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors"
msgstr "Аԥенџьырқәа рыхьӡынҵа амониторқәа зегьы рҟны рырбара"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid ""
"Whether to show the window list on all connected monitors or only on the "
"primary one."
msgstr
"Аԥенџьырқәа рыхьӡынҵа иаҿаку амониторқәа зегьы рыҟноума иахьаарԥшлатәу , мамзар ихадоу аҟны акәу."
#: extensions/window-list/prefs.js:32
msgid "Window Grouping"
msgstr "Аԥенџьырқәа реидыргәыԥлара"
#: extensions/window-list/prefs.js:37
msgid "Never group windows"
msgstr "Ахаангьы аԥенџьырқәа реидмыргәыԥлара"
#: extensions/window-list/prefs.js:38
msgid "Group windows when space is limited"
msgstr "Аҭыԥ маҷхазар, аԥенџьырқәа еидшәыргәыԥла"
#: extensions/window-list/prefs.js:39
msgid "Always group windows"
msgstr "Еснагь аԥенџьырқәа реидыргәыԥлара"
#: extensions/window-list/prefs.js:63
msgid "Show on all monitors"
msgstr "Амониторқәа зегьы рҟны рырбара"
#: extensions/window-list/workspaceIndicator.js:249
#: extensions/workspace-indicator/extension.js:254
msgid "Workspace Indicator"
msgstr "Аусуратә ҵакыра аиндикатор"
#: extensions/workspace-indicator/prefs.js:18
msgid "Workspace Names"
msgstr "Аусуратә ҵакырақәа рыхьӡқәа"
#: extensions/workspace-indicator/prefs.js:39
#, javascript-format
msgid "Workspace %d"
msgstr "Аусуратә ҵакыра %d"
#: extensions/workspace-indicator/prefs.js:184
msgid "Add Workspace"
msgstr "Аусуратә ҵакыра ацҵара"
+180 -121
View File
@@ -1,311 +1,370 @@
# Afrikaans translation for gnome-shell-extensions. # Afrikaans translation for gnome-shell-extensions.
# This file is distributed under the same license as the gnome-shell-extensions package. # This file is distributed under the same license as the gnome-shell-extensions package.
# F Wolff <friedel@translate.org.za>, 2013. # F Wolff <friedel@translate.org.za>, 2013.
# Pieter Schoeman <pieter@sonbesie.co.za>, 2017.
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n" "Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"shell&keywords=I18N+L10N&component=extensions\n" "issues\n"
"POT-Creation-Date: 2013-09-26 20:32+0000\n" "POT-Creation-Date: 2018-09-06 10:29+0000\n"
"PO-Revision-Date: 2013-09-27 16:17+0200\n" "PO-Revision-Date: 2018-02-06 17:47+0200\n"
"Last-Translator: F Wolff <friedel@translate.org.za>\n" "Last-Translator: Pieter Schalk Schoeman <pieter@sonbesie.co.za>\n"
"Language-Team: translate-discuss-af@lists.sourceforge.net\n" "Language-Team: Afrikaans <pieter@sonbesie.co.za>\n"
"Language: af\n" "Language: af\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Virtaal 0.7.1\n" "X-Generator: Poedit 2.0.3\n"
"X-Project-Style: gnome\n" "X-Project-Style: gnome\n"
#: ../data/gnome-classic.desktop.in.h:1 #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3
#: ../data/gnome-classic.session.desktop.in.in.h:1
msgid "GNOME Classic" msgid "GNOME Classic"
msgstr "GNOME Klassiek" msgstr "GNOME Klassiek"
#: ../data/gnome-classic.desktop.in.h:2 #: data/gnome-classic.desktop.in:4
msgid "This session logs you into GNOME Classic" msgid "This session logs you into GNOME Classic"
msgstr "Hierdie sessie laat mens aanmeld by GNOME Klassiek" msgstr "Hierdie sessie laat mens aanmeld by GNOME Klassiek"
#: ../data/gnome-shell-classic.desktop.in.in.h:1 #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:7
msgid "GNOME Shell Classic"
msgstr "GNOME Shell Klassiek"
#: ../data/gnome-shell-classic.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Vensterbestuur en toepassinglansering"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1
msgid "Attach modal dialog to the parent window" msgid "Attach modal dialog to the parent window"
msgstr "" msgstr "Heg modale dialoogvenster vas aan die ouervenster"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2 #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:8
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:25
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:33
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:41
msgid "" msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell." "This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr "" msgstr ""
"Hierdie sleutel oorskryf die sleutel in org.gnome.mutter wanneer GNOME Shell "
"uitgevoer word."
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3 #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:16
msgid "Arrangement of buttons on the titlebar"
msgstr "Knoppie rangskikking op die titelbalk"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:17
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"Die sleutel oorheers die sleutel in org.gnome.desktop.wm.preferences wanneer "
"GNOME uitgevoer word."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:24
msgid "Enable edge tiling when dropping windows on screen edges" msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "" msgstr "Aktiveer rand-tilering wanneer vensters op skermrand laat val word"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4 #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:32
msgid "Workspaces only on primary monitor" msgid "Workspaces only on primary monitor"
msgstr "Werkruimtes slegs op primêre monitor" msgstr "Werkspasies slegs op primêre monitor"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:5 #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:40
msgid "Delay focus changes in mouse mode until the pointer stops moving" msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "" msgstr "Vertraag fokusverandering in muismodus totdat die wyser ophou beweeg"
#: ../extensions/alternate-tab/prefs.js:20 #: extensions/alternate-tab/prefs.js:19
msgid "Thumbnail only" msgid "Thumbnail only"
msgstr "" msgstr "Slegs duimnael"
#: ../extensions/alternate-tab/prefs.js:21 #: extensions/alternate-tab/prefs.js:20
msgid "Application icon only" msgid "Application icon only"
msgstr "Slegs toepassingsikoon" msgstr "Slegs toepassingsikoon"
#: ../extensions/alternate-tab/prefs.js:22 #: extensions/alternate-tab/prefs.js:21
msgid "Thumbnail and application icon" msgid "Thumbnail and application icon"
msgstr "Duimnael en toepassingsikoon" msgstr "Duimnael en toepassingsikoon"
#: ../extensions/alternate-tab/prefs.js:37 #: extensions/alternate-tab/prefs.js:34
msgid "Present windows as" msgid "Present windows as"
msgstr "Wys vensters as" msgstr "Wys vensters as"
#: ../extensions/alternate-tab/prefs.js:62 #: extensions/alternate-tab/prefs.js:65
msgid "Show only windows in the current workspace" msgid "Show only windows in the current workspace"
msgstr "Wys slegs vensters van die huidige werkruimte" msgstr "Wys slegs vensters van die huidige werkruimte"
#: ../extensions/apps-menu/extension.js:39 #: extensions/apps-menu/extension.js:37
msgid "Activities Overview" msgid "Activities Overview"
msgstr "Aktiwiteite-oorsig" msgstr "Aktiwiteite-oorsig"
#: ../extensions/apps-menu/extension.js:113 #: extensions/apps-menu/extension.js:130
msgid "Favorites" msgid "Favorites"
msgstr "Gunstelinge" msgstr "Gunstelinge"
#: ../extensions/apps-menu/extension.js:282 #: extensions/apps-menu/extension.js:417
msgid "Applications" msgid "Applications"
msgstr "Toepassings" msgstr "Toepassings"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1 #: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list" msgid "Application and workspace list"
msgstr "Toepassing- en werkruimtelys" msgstr "Toepassing- en werkspasielys"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2 #: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid "" msgid ""
"A list of strings, each containing an application id (desktop file name), " "A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number" "followed by a colon and the workspace number"
msgstr "" msgstr ""
"'n Lys stringe wat elkeen 'n toepassing id (werkskerm en lêernaam) sowel as "
"komma gevolg deur 'n werkspasie nommer bevat"
#: ../extensions/auto-move-windows/prefs.js:55 #: extensions/auto-move-windows/prefs.js:53
msgid "Application" msgid "Application"
msgstr "Toepassing" msgstr "Toepassing"
#: ../extensions/auto-move-windows/prefs.js:64 #: extensions/auto-move-windows/prefs.js:62
#: ../extensions/auto-move-windows/prefs.js:106 #: extensions/auto-move-windows/prefs.js:117
msgid "Workspace" msgid "Workspace"
msgstr "Werkruimte" msgstr "Werkspasie"
#: ../extensions/auto-move-windows/prefs.js:80 #: extensions/auto-move-windows/prefs.js:78
msgid "Add rule" msgid "Add Rule"
msgstr "Voeg reël by" msgstr "Voeg reël by"
#: ../extensions/auto-move-windows/prefs.js:94 #: extensions/auto-move-windows/prefs.js:98
msgid "Create new matching rule" msgid "Create new matching rule"
msgstr "" msgstr "Skep 'n nuwe ooreenstemmende reël"
#: ../extensions/auto-move-windows/prefs.js:98 #: extensions/auto-move-windows/prefs.js:103
msgid "Add" msgid "Add"
msgstr "Voeg by" msgstr "Voeg by"
#: ../extensions/drive-menu/extension.js:73 #. TRANSLATORS: %s is the filesystem name
#, c-format #: extensions/drive-menu/extension.js:103
msgid "Ejecting drive '%s' failed:" #: extensions/places-menu/placeDisplay.js:219
msgstr "Kon nie skyf '%s' uitskiet nie:" #, javascript-format
msgid "Ejecting drive “%s” failed:"
msgstr "Kon nie skyf \"%s\" uitskiet nie:"
#: ../extensions/drive-menu/extension.js:90 #: extensions/drive-menu/extension.js:118
msgid "Removable devices" msgid "Removable devices"
msgstr "Verwyderbare toestelle" msgstr "Verwyderbare toestelle"
#: ../extensions/drive-menu/extension.js:117 #: extensions/drive-menu/extension.js:143
msgid "Open File" msgid "Open Files"
msgstr "Open lêer" msgstr "Open lêer"
#: ../extensions/example/extension.js:17 #: extensions/example/extension.js:17
msgid "Hello, world!" msgid "Hello, world!"
msgstr "Hallo, wêreld!" msgstr "Hallo, wêreld!"
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1 #: extensions/example/org.gnome.shell.extensions.example.gschema.xml:5
msgid "Alternative greeting text." msgid "Alternative greeting text."
msgstr "" msgstr "Alternatiewe groetboodskap."
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2 #: extensions/example/org.gnome.shell.extensions.example.gschema.xml:6
msgid "" msgid ""
"If not empty, it contains the text that will be shown when clicking on the " "If not empty, it contains the text that will be shown when clicking on the "
"panel." "panel."
msgstr "" msgstr ""
"Indien dit nie leeg is nie bevat dit die teks wat op die paneel gewys word "
"as daarop geklik word."
#: extensions/example/prefs.js:27
msgid "Message"
msgstr "Boodskap"
#. TRANSLATORS: Example is the name of the extension, should not be #. TRANSLATORS: Example is the name of the extension, should not be
#. translated #. translated
#: ../extensions/example/prefs.js:30 #: extensions/example/prefs.js:40
msgid "" msgid ""
"Example aims to show how to build well behaved extensions for the Shell and " "Example aims to show how to build well behaved extensions for the Shell and "
"as such it has little functionality on its own.\n" "as such it has little functionality on its own.\n"
"Nevertheless it's possible to customize the greeting message." "Nevertheless its possible to customize the greeting message."
msgstr "" msgstr ""
"Example het ten doel om te wys hoe om goeie uitbreidings vir die Shell te "
"skep en het dus min funksionaliteit.\n"
"Tog is dit moontlik om die groeteboodskap aan te pas."
#: ../extensions/example/prefs.js:36 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Message:"
msgstr "Boodskap:"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
msgid "Use more screen for windows" msgid "Use more screen for windows"
msgstr "" msgstr "Gebruik meer skermspasie vir vensters"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
msgid "" msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen " "Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. " "aspect ratio, and consolidating them further to reduce the bounding box. "
"This setting applies only with the natural placement strategy." "This setting applies only with the natural placement strategy."
msgstr "" msgstr ""
"Probeer om meer skermspasie te gebruik vir die plasing van vensterduimnaels "
"deur aan te pas by die skerm-aspekverhouding. Hierdie instelling is slegs "
"van toepassing op die normale plasingstrategie."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top" msgid "Place window captions on top"
msgstr "" msgstr "Plaas venster opskrifte bo"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid "" msgid ""
"If true, place window captions on top the respective thumbnail, overriding " "If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires " "shell default of placing it at the bottom. Changing this setting requires "
"restarting the shell to have any effect." "restarting the shell to have any effect."
msgstr "" msgstr ""
"As waar, plaas venster opskrifte bo hul onderskeie duimnaels, anders as die "
"shell standaard waar hulle onder sou verskyn. As u hierdie instelling "
"verander, moet die shell weer begin word om enige effek te toon."
#: ../extensions/places-menu/extension.js:78 #: extensions/places-menu/extension.js:79
#: ../extensions/places-menu/extension.js:81 #: extensions/places-menu/extension.js:82
msgid "Places" msgid "Places"
msgstr "Plekke" msgstr "Plekke"
#: ../extensions/places-menu/placeDisplay.js:56 #: extensions/places-menu/placeDisplay.js:66
#, c-format #, javascript-format
msgid "Failed to launch \"%s\"" msgid "Failed to mount volume for “%s”"
msgstr "Kon nie die \"%s\" volume heg nie"
#: extensions/places-menu/placeDisplay.js:79
#, javascript-format
msgid "Failed to launch “%s”"
msgstr "Kon nie \"%s\" lanseer nie" msgstr "Kon nie \"%s\" lanseer nie"
#: ../extensions/places-menu/placeDisplay.js:98 #: extensions/places-menu/placeDisplay.js:135
#: ../extensions/places-menu/placeDisplay.js:121 #: extensions/places-menu/placeDisplay.js:158
msgid "Computer" msgid "Computer"
msgstr "Rekenaar" msgstr "Rekenaar"
#: ../extensions/places-menu/placeDisplay.js:199 #: extensions/places-menu/placeDisplay.js:336
msgid "Home" msgid "Home"
msgstr "Tuis" msgstr "Tuis"
#: ../extensions/places-menu/placeDisplay.js:286 #: extensions/places-menu/placeDisplay.js:378
msgid "Browse Network" msgid "Browse Network"
msgstr "Blaai deur netwerk" msgstr "Blaai deur netwerk"
#: ../extensions/systemMonitor/extension.js:214 #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgid "CPU" msgid "Cycle Screenshot Sizes"
msgstr "SVE" msgstr "Rol deur skermkiekies"
#: ../extensions/systemMonitor/extension.js:267 #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgid "Memory" msgid "Cycle Screenshot Sizes Backward"
msgstr "Geheue" msgstr "Rol agteruit deur skermkiekies"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1 #: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Theme name" msgid "Theme name"
msgstr "Temanaam" msgstr "Temanaam"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2 #: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "" msgstr ""
"Die naam van die tema wat van ~/.themes/name/gnome-shell gelaai moet word"
#: ../extensions/window-list/extension.js:92 #: extensions/window-list/extension.js:106
msgid "Close" msgid "Close"
msgstr "Sluit" msgstr "Sluit"
#: ../extensions/window-list/extension.js:102 #: extensions/window-list/extension.js:125
msgid "Unminimize" msgid "Unminimize"
msgstr "" msgstr "Onminimeer"
#: ../extensions/window-list/extension.js:103 #: extensions/window-list/extension.js:126
msgid "Minimize" msgid "Minimize"
msgstr "Minimeer" msgstr "Minimeer"
#: ../extensions/window-list/extension.js:109 #: extensions/window-list/extension.js:132
msgid "Unmaximize" msgid "Unmaximize"
msgstr "" msgstr "Onmaksimeer"
#: ../extensions/window-list/extension.js:110 #: extensions/window-list/extension.js:133
msgid "Maximize" msgid "Maximize"
msgstr "Maksimeer" msgstr "Maksimeer"
#: ../extensions/window-list/extension.js:270 #: extensions/window-list/extension.js:408
msgid "Minimize all" msgid "Minimize all"
msgstr "Minimeer almal" msgstr "Minimeer almal"
#: ../extensions/window-list/extension.js:278 #: extensions/window-list/extension.js:414
msgid "Unminimize all" msgid "Unminimize all"
msgstr "" msgstr "Onminimeer almal"
#: ../extensions/window-list/extension.js:286 #: extensions/window-list/extension.js:420
msgid "Maximize all" msgid "Maximize all"
msgstr "Maksimeer almal" msgstr "Maksimeer almal"
#: ../extensions/window-list/extension.js:295 #: extensions/window-list/extension.js:429
msgid "Unmaximize all" msgid "Unmaximize all"
msgstr "" msgstr "Ommaksimeer almal"
#: ../extensions/window-list/extension.js:304 #: extensions/window-list/extension.js:438
msgid "Close all" msgid "Close all"
msgstr "Sluit almal" msgstr "Sluit almal"
#: ../extensions/window-list/extension.js:591 #: extensions/window-list/extension.js:646
#: ../extensions/workspace-indicator/extension.js:30 #: extensions/workspace-indicator/extension.js:26
msgid "Workspace Indicator" msgid "Workspace Indicator"
msgstr "" msgstr "Werkspasie aanwyser"
#: ../extensions/window-list/extension.js:743 #: extensions/window-list/extension.js:811
msgid "Window List" msgid "Window List"
msgstr "Vensterlys" msgstr "Vensterlys"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows" msgid "When to group windows"
msgstr "Wanneer om vensters te groepeer" msgstr "Wanneer om vensters te groepeer"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid "" msgid ""
"Decides when to group windows from the same application on the window list. " "Decides when to group windows from the same application on the window list. "
"Possible values are \"never\", \"auto\" and \"always\"." "Possible values are never”, “auto and always."
msgstr "" msgstr ""
"Besluit wanneer om vensters van dieselfde toepassing in die vensterlys te " "Besluit wanneer om vensters van dieselfde toepassing in die vensterlys te "
"groepeer. Moontlike waardes is \"never\", \"auto\" en \"always\"." "groepeer. Moontlike waardes is \"nooit\", \"outomaties\" en \"altyd\"."
#: ../extensions/window-list/prefs.js:30 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
msgid "Show the window list on all monitors"
msgstr "Wys vensterlys op alle skerms"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid ""
"Whether to show the window list on all connected monitors or only on the "
"primary one."
msgstr ""
"Of die vensterlys op alle gekonnekteerde monitors vertoon moet word of slegs "
"die primêre een."
#: extensions/window-list/prefs.js:28
msgid "Window Grouping" msgid "Window Grouping"
msgstr "Venstergroepering" msgstr "Venstergroepering"
#: ../extensions/window-list/prefs.js:49 #: extensions/window-list/prefs.js:46
msgid "Never group windows" msgid "Never group windows"
msgstr "Moet nooit vensters groepeer nie" msgstr "Moet nooit vensters groepeer nie"
#: ../extensions/window-list/prefs.js:50 #: extensions/window-list/prefs.js:47
msgid "Group windows when space is limited" msgid "Group windows when space is limited"
msgstr "Groepeer vensters wanneer ruimte beperk is" msgstr "Groepeer vensters wanneer ruimte beperk is"
#: ../extensions/window-list/prefs.js:51 #: extensions/window-list/prefs.js:48
msgid "Always group windows" msgid "Always group windows"
msgstr "Groepeer vensters altyd" msgstr "Groepeer vensters altyd"
#: ../extensions/workspace-indicator/prefs.js:141 #: extensions/window-list/prefs.js:71
msgid "Workspace names:" msgid "Show on all monitors"
msgstr "Werkruimtename:" msgstr "Wys op alle skerms"
#: ../extensions/workspace-indicator/prefs.js:152 #: extensions/workspace-indicator/prefs.js:134
msgid "Workspace Names"
msgstr "Werkspasiename"
#: extensions/workspace-indicator/prefs.js:150
msgid "Name" msgid "Name"
msgstr "Naam" msgstr "Naam"
#: ../extensions/workspace-indicator/prefs.js:186 #: extensions/workspace-indicator/prefs.js:190
#, c-format #, javascript-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Werkruimte %d" msgstr "Werkspasie %d"
#~ msgid "GNOME Shell Classic"
#~ msgstr "GNOME Shell Klassiek"
#~ msgid "Window management and application launching"
#~ msgstr "Vensterbestuur en toepassinglansering"
#~ msgid "CPU"
#~ msgstr "SVE"
#~ msgid "Memory"
#~ msgstr "Geheue"
+181 -196
View File
@@ -6,11 +6,11 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n" "Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"shell&keywords=I18N+L10N&component=extensions\n" "issues\n"
"POT-Creation-Date: 2017-08-19 16:41+0000\n" "POT-Creation-Date: 2021-01-20 23:03+0000\n"
"PO-Revision-Date: 2017-09-01 17:56+0300\n" "PO-Revision-Date: 2021-01-24 15:33+0300\n"
"Last-Translator: Yuras Shumovich <shumovichy@gmail.com>\n" "Last-Translator: Launchpad translators\n"
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n" "Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
"Language: be\n" "Language: be\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -18,9 +18,9 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 1.8.11\n" "X-Generator: Poedit 2.4.2\n"
#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 #: data/gnome-classic.desktop.in:3
msgid "GNOME Classic" msgid "GNOME Classic"
msgstr "Класічны GNOME" msgstr "Класічны GNOME"
@@ -28,171 +28,69 @@ msgstr "Класічны GNOME"
msgid "This session logs you into GNOME Classic" msgid "This session logs you into GNOME Classic"
msgstr "Гэты сеанс выкарыстоўвае класічны GNOME" msgstr "Гэты сеанс выкарыстоўвае класічны GNOME"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:7 #: extensions/apps-menu/extension.js:113
msgid "Attach modal dialog to the parent window"
msgstr "Прымацаваць мадальны дыялог да бацькоўскага акна"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:8
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:25
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:33
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:41
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr "Гэты ключ засланяе ключ у org.gnome.mutter калі запушчаны GNOME Shell."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:16
msgid "Arrangement of buttons on the titlebar"
msgstr "Парадак кнопак у загалоўнай стужцы"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:17
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"Гэты ключ засланяе ключ у org.gnome.desktop.wm.preferences калі запушчаны "
"GNOME Shell."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:24
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Аўтаматычна змяняць памеры акна пры перамяшчэнні да края экрана"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:32
msgid "Workspaces only on primary monitor"
msgstr "Працоўныя прасторы толькі на асноўным маніторы"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:40
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Затрымліваць змяненні фокуса ў рэжыме мышы да спынення паказальніка"
#: extensions/alternate-tab/prefs.js:20
msgid "Thumbnail only"
msgstr "Толькі мініяцюра"
#: extensions/alternate-tab/prefs.js:21
msgid "Application icon only"
msgstr "Толькі значок праграмы"
#: extensions/alternate-tab/prefs.js:22
msgid "Thumbnail and application icon"
msgstr "Мініяцюра і значок праграмы"
#: extensions/alternate-tab/prefs.js:38
msgid "Present windows as"
msgstr "Адлюстроўваць вокны як"
#: extensions/alternate-tab/prefs.js:69
msgid "Show only windows in the current workspace"
msgstr "Паказваць вокны толькі з бягучай працоўная прасторы"
#: extensions/apps-menu/extension.js:41
msgid "Activities Overview"
msgstr "Агляд заняткаў"
#: extensions/apps-menu/extension.js:141
msgid "Favorites" msgid "Favorites"
msgstr "Упадабаныя" msgstr "Абраныя"
#: extensions/apps-menu/extension.js:436 #: extensions/apps-menu/extension.js:369
msgid "Applications" msgid "Applications"
msgstr "Праграмы" msgstr "Праграмы"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6 #: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list" msgid "Application and workspace list"
msgstr "Праграма і спіс працоўных прастораў" msgstr "Праграма і спіс працоўных прастор"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7 #: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid "" msgid ""
"A list of strings, each containing an application id (desktop file name), " "A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number" "followed by a colon and the workspace number"
msgstr "" msgstr ""
"Спіс радкоў, кожны з якіх утрымлівае ідэнтыфікатар праграмы (імя *.desktop " "Спіс радкоў, кожны з якіх змяшчае ідэнтыфікатар праграмы (імя файла *."
"файла), затым двукроп'е і нумар працоўнай прасторы" "desktop), затым двукроп'е і нумар працоўнай прасторы"
#: extensions/auto-move-windows/prefs.js:60 #: extensions/auto-move-windows/prefs.js:35
msgid "Application" msgid "Workspace Rules"
msgstr "Праграма" msgstr "Правілы для працоўнай прасторы"
#: extensions/auto-move-windows/prefs.js:69 #: extensions/auto-move-windows/prefs.js:237
#: extensions/auto-move-windows/prefs.js:127
msgid "Workspace"
msgstr "Працоўная прастора"
#: extensions/auto-move-windows/prefs.js:85
msgid "Add Rule" msgid "Add Rule"
msgstr "Дадаць правіла" msgstr "Дадаць правіла"
#: extensions/auto-move-windows/prefs.js:106
msgid "Create new matching rule"
msgstr "Стварыць новае правіла адпаведнасці"
#: extensions/auto-move-windows/prefs.js:111
msgid "Add"
msgstr "Дадаць"
#. TRANSLATORS: %s is the filesystem name #. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:107 #: extensions/drive-menu/extension.js:112
#: extensions/places-menu/placeDisplay.js:233
#, javascript-format #, javascript-format
msgid "Ejecting drive “%s” failed:" msgid "Ejecting drive “%s” failed:"
msgstr "Не ўдалося выняць прывод \"%s\":" msgstr "Не ўдалося выняць дыск «%s»:"
#: extensions/drive-menu/extension.js:125 #: extensions/drive-menu/extension.js:128
msgid "Removable devices" msgid "Removable devices"
msgstr "Зменныя прыстасаванні" msgstr "Здымныя прылады"
#: extensions/drive-menu/extension.js:150 #: extensions/drive-menu/extension.js:155
msgid "Open Files" msgid "Open Files"
msgstr "Адкрыць файлы" msgstr "Адкрыць файлы"
#: extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "Прывітанне, свет!"
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:5
msgid "Alternative greeting text."
msgstr "Альтэрнатыўны тэкст вітання."
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:6
msgid ""
"If not empty, it contains the text that will be shown when clicking on the "
"panel."
msgstr ""
"Калі не пуста, ўтрымлівае тэкст, які будзе паказвацца пры націсканні на "
"панэль."
#: extensions/example/prefs.js:30
msgid "Message"
msgstr "Паведамленне"
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: extensions/example/prefs.js:43
msgid ""
"Example aims to show how to build well behaved extensions for the Shell and "
"as such it has little functionality on its own.\n"
"Nevertheless its possible to customize the greeting message."
msgstr ""
"Example пакажа як ствараць пашырэнні для Shell. Сам па сабе ён мае мала "
"функцыянальнасці.\n"
"Тым не менш, можна змяніць тэкст прывітання."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
#, fuzzy
msgid "Use more screen for windows" msgid "Use more screen for windows"
msgstr "Выкарыстоўваць большую плошчу экрана для вокнаў" msgstr "Выкарыстоўваць большую плошчу экрана для вокнаў"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
#, fuzzy
msgid "" msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen " "Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. " "aspect ratio, and consolidating them further to reduce the bounding box. "
"This setting applies only with the natural placement strategy." "This setting applies only with the natural placement strategy."
msgstr "" msgstr ""
"Спрабаваць выкарыстаць большую плошчу экрана для размяшчэння мініяцюр шляхам " "Спрабаваць выкарыстаць большую плошчу экрана для размяшчэння мініяцюр праз "
"змянення суадносінаў бакоў экрана і ўшчыльняючы іх з мэтай змяншэння памераў " "змяненне суадносінаў бакоў экрана, ўшчыльняючы іх, каб зменшыць памеры "
"абмежавальнай рамкі. Гэты параметр ужываецца толькі разам з звычайным " "абмежавальнай рамкі. Гэты параметр ужываецца толькі з натуральным "
"размяшчэннем мініяцюр." "размяшчэннем мініяцюр."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top" msgid "Place window captions on top"
msgstr "Змяшчаць загалоўкі вокнаў зверху" msgstr "Размяшчаць подпіс акна зверху"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid "" msgid ""
@@ -200,156 +98,243 @@ msgid ""
"shell default of placing it at the bottom. Changing this setting requires " "shell default of placing it at the bottom. Changing this setting requires "
"restarting the shell to have any effect." "restarting the shell to have any effect."
msgstr "" msgstr ""
"Калі выбрана, загалоўкі вокнаў будуць размешчаны ўверсе мініяцюры, а не " "Калі выбрана, подпіс акна будзе над мініяцюрай, а не пад ей (як "
"знізу, як прадвызначана. Для таго, каб гэтая настройка ўступіла ў сілу, " "перадвызначана). Каб змена налады ўступіла ў сілу, трэба перазапусціць "
"трэба перазапусціць абалонку." "абалонку."
#: extensions/places-menu/extension.js:78 #: extensions/places-menu/extension.js:89
#: extensions/places-menu/extension.js:81 #: extensions/places-menu/extension.js:93
msgid "Places" msgid "Places"
msgstr "Месцы" msgstr "Месцы"
#: extensions/places-menu/placeDisplay.js:65 #: extensions/places-menu/placeDisplay.js:46
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Не ўдалося прымацаваць том для \"%s\"."
#: extensions/places-menu/placeDisplay.js:78
#, javascript-format #, javascript-format
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "Не ўдалося запусціць \"%s\"" msgstr "Не ўдалося запусціць «%s»"
#: extensions/places-menu/placeDisplay.js:137 #: extensions/places-menu/placeDisplay.js:61
#: extensions/places-menu/placeDisplay.js:160 #, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Не ўдалося прымацаваць том для «%s»."
#: extensions/places-menu/placeDisplay.js:148
#: extensions/places-menu/placeDisplay.js:171
msgid "Computer" msgid "Computer"
msgstr "Камп'ютар" msgstr "Камп'ютар"
#: extensions/places-menu/placeDisplay.js:303 #: extensions/places-menu/placeDisplay.js:359
msgid "Home" msgid "Home"
msgstr "Дамашняя папка" msgstr "Хатняя папка"
#: extensions/places-menu/placeDisplay.js:347 #: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network" msgid "Browse Network"
msgstr "Агляд сеткі" msgstr "Агляд сеткі"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7 #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgid "Cycle Screenshot Sizes" msgid "Cycle Screenshot Sizes"
msgstr "Чаргаваць памеры экраннага здымка" msgstr "Паслядоўнасць змены памераў для здымка экрана"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11 #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgid "Cycle Screenshot Sizes Backward" msgid "Cycle Screenshot Sizes Backward"
msgstr "Чаргаваць памеры экраннага здымка ў адваротным напрамку" msgstr "Адваротная паслядоўнасць змены памераў для здымка экрана"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5 #: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Theme name" msgid "Theme name"
msgstr "Імя матыву аздаблення" msgstr "Назва тэмы"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6 #: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "" msgstr "Назва тэмы, што загрузіцца з ~/.themes/name/gnome-shell"
"Імя матыву аздаблення, які будзе загружаны з ~/.themes/name/gnome-shell"
#: extensions/window-list/extension.js:110 #: extensions/window-list/extension.js:98
msgid "Close" msgid "Close"
msgstr "Закрыць" msgstr "Закрыць"
#: extensions/window-list/extension.js:129 #: extensions/window-list/extension.js:118
msgid "Unminimize" msgid "Unminimize"
msgstr "Скасаваць мінімалізацыю" msgstr "Скасаваць згортванне"
#: extensions/window-list/extension.js:130 #: extensions/window-list/extension.js:118
msgid "Minimize" msgid "Minimize"
msgstr "Мінімалізаваць" msgstr "Згарнуць"
#: extensions/window-list/extension.js:136 #: extensions/window-list/extension.js:125
msgid "Unmaximize" msgid "Unmaximize"
msgstr "Скасаваць максімалізацыю" msgstr "Скасаваць разгортванне"
#: extensions/window-list/extension.js:137 #: extensions/window-list/extension.js:125
msgid "Maximize" msgid "Maximize"
msgstr "Максімалізаваць" msgstr "Разгарнуць"
#: extensions/window-list/extension.js:420 #: extensions/window-list/extension.js:432
msgid "Minimize all" msgid "Minimize all"
msgstr "Мінімалізаваць усе" msgstr "Згарнуць усе"
#: extensions/window-list/extension.js:428 #: extensions/window-list/extension.js:438
msgid "Unminimize all" msgid "Unminimize all"
msgstr "Скасаваць мінімалізацыю для ўсіх" msgstr "Скасаваць згортванне для ўсіх"
#: extensions/window-list/extension.js:436 #: extensions/window-list/extension.js:444
msgid "Maximize all" msgid "Maximize all"
msgstr "Максімалізаваць усе" msgstr "Разгарнуць усе"
#: extensions/window-list/extension.js:445 #: extensions/window-list/extension.js:452
msgid "Unmaximize all" msgid "Unmaximize all"
msgstr "Скасаваць максімалізацыю для ўсіх" msgstr "Скасаваць разгортванне для ўсіх"
#: extensions/window-list/extension.js:454 #: extensions/window-list/extension.js:460
msgid "Close all" msgid "Close all"
msgstr "Закрыць усе" msgstr "Закрыць усе"
#: extensions/window-list/extension.js:678 #: extensions/window-list/extension.js:737
#: extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Індыкатар працоўнай прасторы"
#: extensions/window-list/extension.js:842
msgid "Window List" msgid "Window List"
msgstr "Спіс вокнаў" msgstr "Спіс вокнаў"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows" msgid "When to group windows"
msgstr "Калі групаваць вокны" msgstr "Умовы групавання вокнаў"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid "" msgid ""
"Decides when to group windows from the same application on the window list. " "Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”." "Possible values are “never”, “auto” and “always”."
msgstr "" msgstr ""
"Вырашае калі групаваць вокны адной праграмы ў спісе вокнаў. Магчымыя " "Вызначае калі групаваць вокны адной праграмы ў спісе вокнаў. Магчымыя "
"значэнні: \"never\" (ніколі), \"auto\" (аўтаматычна), \"always\" (заўсёды)." "значэнні: «never» (ніколі), «auto» (аўтаматычна), «always» (заўсёды)."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
msgid "Show the window list on all monitors" #: extensions/window-list/prefs.js:100
msgstr "Паказаць спіс вокнаў на ўсіх маніторах" msgid "Show windows from all workspaces"
msgstr "Паказваць вокны з усіх працоўных прастор"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr "Паказваць вокны з усіх працоўных прастор ці толькі з бягучай."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors"
msgstr "Паказваць спіс вокнаў на ўсіх маніторах"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid "" msgid ""
"Whether to show the window list on all connected monitors or only on the " "Whether to show the window list on all connected monitors or only on the "
"primary one." "primary one."
msgstr "" msgstr ""
"Ці паказваць спіс вокнаў на ўсіх злучаных маніторах або толькі на галоўным." "Паказваць спіс вокнаў на ўсіх падлучаных маніторах ці толькі на асноўным."
#: extensions/window-list/prefs.js:32 #: extensions/window-list/prefs.js:29
msgid "Window Grouping" msgid "Window Grouping"
msgstr "Групаванне вокнаў" msgstr "Групаванне вокнаў"
#: extensions/window-list/prefs.js:50 #: extensions/window-list/prefs.js:58
msgid "Never group windows" msgid "Never group windows"
msgstr "Ніколі не групаваць вокны" msgstr "Ніколі не групаваць вокны"
#: extensions/window-list/prefs.js:51 #: extensions/window-list/prefs.js:59
msgid "Group windows when space is limited" msgid "Group windows when space is limited"
msgstr "Групаваць вокны калі не хапае месца" msgstr "Групаваць вокны калі не хапае месца"
#: extensions/window-list/prefs.js:52 #: extensions/window-list/prefs.js:60
msgid "Always group windows" msgid "Always group windows"
msgstr "Заўсёды групаваць вокны" msgstr "Заўсёды групаваць вокны"
#: extensions/window-list/prefs.js:75 #: extensions/window-list/prefs.js:94
msgid "Show on all monitors" msgid "Show on all monitors"
msgstr "Паказаць усе маніторы" msgstr "Паказваць на ўсіх маніторах"
#: extensions/workspace-indicator/prefs.js:141 #: extensions/window-list/workspaceIndicator.js:247
#: extensions/workspace-indicator/extension.js:253
msgid "Workspace Indicator"
msgstr "Індыкатар працоўнай прасторы"
#: extensions/workspace-indicator/prefs.js:34
msgid "Workspace Names" msgid "Workspace Names"
msgstr "Назвы працоўных прастораў" msgstr "Назвы працоўных прастор"
#: extensions/workspace-indicator/prefs.js:157 #: extensions/workspace-indicator/prefs.js:67
msgid "Name"
msgstr "Імя"
#: extensions/workspace-indicator/prefs.js:198
#, javascript-format #, javascript-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Працоўная прастора %d" msgstr "Працоўная прастора %d"
#: extensions/workspace-indicator/prefs.js:208
msgid "Add Workspace"
msgstr "Дадаць працоўную прастору"
#~ msgid "Attach modal dialog to the parent window"
#~ msgstr "Прымацаваць мадальны дыялог да бацькоўскага акна"
#~ msgid ""
#~ "This key overrides the key in org.gnome.mutter when running GNOME Shell."
#~ msgstr ""
#~ "Гэты ключ засланяе ключ у org.gnome.mutter калі запушчаны GNOME Shell."
#~ msgid "Arrangement of buttons on the titlebar"
#~ msgstr "Парадак кнопак у загалоўнай стужцы"
#~ msgid ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
#~ "running GNOME Shell."
#~ msgstr ""
#~ "Гэты ключ засланяе ключ у org.gnome.desktop.wm.preferences калі запушчаны "
#~ "GNOME Shell."
#~ msgid "Enable edge tiling when dropping windows on screen edges"
#~ msgstr "Аўтаматычна змяняць памеры акна пры перамяшчэнні да края экрана"
#~ msgid "Workspaces only on primary monitor"
#~ msgstr "Працоўныя прасторы толькі на асноўным маніторы"
#~ msgid "Delay focus changes in mouse mode until the pointer stops moving"
#~ msgstr "Затрымліваць змяненні фокуса ў рэжыме мышы да спынення паказальніка"
#~ msgid "Thumbnail only"
#~ msgstr "Толькі мініяцюра"
#~ msgid "Application icon only"
#~ msgstr "Толькі значок праграмы"
#~ msgid "Thumbnail and application icon"
#~ msgstr "Мініяцюра і значок праграмы"
#~ msgid "Present windows as"
#~ msgstr "Адлюстроўваць вокны як"
#~ msgid "Activities Overview"
#~ msgstr "Агляд заняткаў"
#~ msgid "Application"
#~ msgstr "Праграма"
#~ msgid "Create new matching rule"
#~ msgstr "Стварыць новае правіла адпаведнасці"
#~ msgid "Add"
#~ msgstr "Дадаць"
#~ msgid "Hello, world!"
#~ msgstr "Прывітанне, свет!"
#~ msgid "Alternative greeting text."
#~ msgstr "Альтэрнатыўны тэкст вітання."
#~ msgid ""
#~ "If not empty, it contains the text that will be shown when clicking on "
#~ "the panel."
#~ msgstr ""
#~ "Калі не пуста, ўтрымлівае тэкст, які будзе паказвацца пры націсканні на "
#~ "панэль."
#~ msgid "Message"
#~ msgstr "Паведамленне"
#~ msgid ""
#~ "Example aims to show how to build well behaved extensions for the Shell "
#~ "and as such it has little functionality on its own.\n"
#~ "Nevertheless its possible to customize the greeting message."
#~ msgstr ""
#~ "Example пакажа як ствараць пашырэнні для Shell. Сам па сабе ён мае мала "
#~ "функцыянальнасці.\n"
#~ "Тым не менш, можна змяніць тэкст прывітання."
#~ msgid "Name"
#~ msgstr "Імя"
+78 -165
View File
@@ -1,17 +1,18 @@
# Bulgarian translation for gnome-shell-extensions po-file. # Bulgarian translation for gnome-shell-extensions po-file.
# Copyright (C) 2014, 2015, 2017 Free Software Foundation, Inc. # Copyright (C) 2014, 2015, 2017 Free Software Foundation, Inc.
# Copyright (C) 2021, 2022 Alexander Shopov <ash@kambanaria.org>.
# This file is distributed under the same license as the gnome-shell-extensions package. # This file is distributed under the same license as the gnome-shell-extensions package.
# Ivaylo Valkov <ivaylo@e-valkov.org>, 2014. # Ivaylo Valkov <ivaylo@e-valkov.org>, 2014.
# Alexander Shopov <ash@kambanaria.org>, 2014, 2015. # Alexander Shopov <ash@kambanaria.org>, 2014, 2015, 2021, 2022.
# Lyubomir Vasilev <lyubomirv@abv.bg>, 2017. # Lyubomir Vasilev <lyubomirv@abv.bg>, 2017.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n" "Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"shell&keywords=I18N+L10N&component=extensions\n" "issues\n"
"POT-Creation-Date: 2017-09-09 15:20+0000\n" "POT-Creation-Date: 2022-02-12 20:25+0000\n"
"PO-Revision-Date: 2017-09-08 08:47+0300\n" "PO-Revision-Date: 2022-02-13 11:40+0100\n"
"Last-Translator: Lyubomir Vasilev <lyubomirv@abv.bg>\n" "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n" "Language-Team: Bulgarian <dict@fsa-bg.org>\n"
"Language: bg\n" "Language: bg\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -19,83 +20,28 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 #: data/gnome-classic.desktop.in:3
msgid "GNOME Classic" msgid "GNOME Classic"
msgstr "Класически GNOME" msgstr "Класически GNOME"
#: data/gnome-classic.desktop.in:4 #: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4
#: data/gnome-classic-xorg.desktop.in:4
msgid "This session logs you into GNOME Classic" msgid "This session logs you into GNOME Classic"
msgstr "Работната среда изглежда като класическия GNOME (2.x)" msgstr "Работната среда изглежда като класическия GNOME (2.x)"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:7 #: data/gnome-classic-wayland.desktop.in:3
msgid "Attach modal dialog to the parent window" msgid "GNOME Classic on Wayland"
msgstr "Прикрепяне на модалните прозорци към родителските им прозорци" msgstr "Класически GNOME в Wayland"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:8 #: data/gnome-classic-xorg.desktop.in:3
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:25 msgid "GNOME Classic on Xorg"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:33 msgstr "Класически GNOME в Xorg"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:41
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Този ключ при е с по-голям приоритет от „org.gnome.mutter“ при изпълнението "
"на обвивката на GNOME."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:16 #: extensions/apps-menu/extension.js:112
msgid "Arrangement of buttons on the titlebar"
msgstr "Подредба на бутоните на заглавната лента"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:17
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"Този ключ при е с по-голям приоритет от „org.gnome.desktop.wm.preferences“ "
"при изпълнението на обвивката на GNOME."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:24
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Включване на специална подредба при приближаване на прозорец до ръбовете на "
"екрана"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:32
msgid "Workspaces only on primary monitor"
msgstr "Работни плотове само на основния екран"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:40
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Забавяне на смяната на фокуса до спирането на движението на показалеца"
#: extensions/alternate-tab/prefs.js:20
msgid "Thumbnail only"
msgstr "Само миниатюри"
#: extensions/alternate-tab/prefs.js:21
msgid "Application icon only"
msgstr "Само икони на приложенията"
#: extensions/alternate-tab/prefs.js:22
msgid "Thumbnail and application icon"
msgstr "Миниатюри и икони на приложенията"
#: extensions/alternate-tab/prefs.js:38
msgid "Present windows as"
msgstr "Показване на прозорците като"
#: extensions/alternate-tab/prefs.js:69
msgid "Show only windows in the current workspace"
msgstr "Да се показват само прозорците на текущия работен плот"
#: extensions/apps-menu/extension.js:41
msgid "Activities Overview"
msgstr "Показване на програмите"
#: extensions/apps-menu/extension.js:141
msgid "Favorites" msgid "Favorites"
msgstr "Любими" msgstr "Любими"
#: extensions/apps-menu/extension.js:436 #: extensions/apps-menu/extension.js:370
msgid "Applications" msgid "Applications"
msgstr "Програми" msgstr "Програми"
@@ -109,74 +55,31 @@ msgid ""
"followed by a colon and the workspace number" "followed by a colon and the workspace number"
msgstr "" msgstr ""
"Списък от низове. Всеки съдържа идентификатор на програма (име на файл „." "Списък от низове. Всеки съдържа идентификатор на програма (име на файл „."
"desktop“ file name), следван от знака „:“ и номер на работен плот" "desktop“), следван от знака „:“ и номер на работен плот"
#: extensions/auto-move-windows/prefs.js:60 #: extensions/auto-move-windows/prefs.js:19
msgid "Application" msgid "Workspace Rules"
msgstr "Програма" msgstr "Правила за работните плотове"
#: extensions/auto-move-windows/prefs.js:69 #: extensions/auto-move-windows/prefs.js:245
#: extensions/auto-move-windows/prefs.js:127
msgid "Workspace"
msgstr "Работен плот"
#: extensions/auto-move-windows/prefs.js:85
msgid "Add Rule" msgid "Add Rule"
msgstr "Добавяне на правило" msgstr "Добавяне на правило"
#: extensions/auto-move-windows/prefs.js:106
msgid "Create new matching rule"
msgstr "Създаване на правило за съвпадение"
#: extensions/auto-move-windows/prefs.js:111
msgid "Add"
msgstr "Добавяне"
#. TRANSLATORS: %s is the filesystem name #. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:107 #: extensions/drive-menu/extension.js:123
#: extensions/places-menu/placeDisplay.js:210
#, javascript-format #, javascript-format
msgid "Ejecting drive “%s” failed:" msgid "Ejecting drive “%s” failed:"
msgstr "Неуспешно изваждане на устройство „%s“:" msgstr "Неуспешно изваждане на устройство „%s“:"
#: extensions/drive-menu/extension.js:125 #: extensions/drive-menu/extension.js:139
msgid "Removable devices" msgid "Removable devices"
msgstr "Преносими медии" msgstr "Преносими медии"
#: extensions/drive-menu/extension.js:150 #: extensions/drive-menu/extension.js:161
msgid "Open Files" msgid "Open Files"
msgstr "Отваряне на файлове" msgstr "Отваряне на файлове"
#: extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "Здравей, свят!"
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:5
msgid "Alternative greeting text."
msgstr "Друго приветстващо съобщение."
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:6
msgid ""
"If not empty, it contains the text that will be shown when clicking on the "
"panel."
msgstr ""
"Ако ключът не е празен, съдържанието му се извежда при натискането на панела."
#: extensions/example/prefs.js:30
msgid "Message"
msgstr "Съобщение"
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: extensions/example/prefs.js:43
msgid ""
"Example aims to show how to build well behaved extensions for the Shell and "
"as such it has little functionality on its own.\n"
"Nevertheless its possible to customize the greeting message."
msgstr ""
"Това е пример за добре работещо разширение на обвивката на GNOME и има "
"минимална функционалност.\n"
"С него можете да промените приветстващото съобщение на панела."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows" msgid "Use more screen for windows"
msgstr "Повече пространство за прозорците" msgstr "Повече пространство за прозорците"
@@ -206,31 +109,31 @@ msgstr ""
"им, а не както е стандартно — отдолу. За прилагане на промяната на " "им, а не както е стандартно — отдолу. За прилагане на промяната на "
"настройката трябва да рестартирате обвивката на GNOME." "настройката трябва да рестартирате обвивката на GNOME."
#: extensions/places-menu/extension.js:78 #: extensions/places-menu/extension.js:88
#: extensions/places-menu/extension.js:81 #: extensions/places-menu/extension.js:91
msgid "Places" msgid "Places"
msgstr "Места" msgstr "Места"
#: extensions/places-menu/placeDisplay.js:65 #: extensions/places-menu/placeDisplay.js:49
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Неуспешно монтиране на тома „%s“"
#: extensions/places-menu/placeDisplay.js:78
#, javascript-format #, javascript-format
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "Неуспешно стартиране на „%s“" msgstr "Неуспешно стартиране на „%s“"
#: extensions/places-menu/placeDisplay.js:137 #: extensions/places-menu/placeDisplay.js:64
#: extensions/places-menu/placeDisplay.js:160 #, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Неуспешно монтиране на тома „%s“"
#: extensions/places-menu/placeDisplay.js:125
#: extensions/places-menu/placeDisplay.js:148
msgid "Computer" msgid "Computer"
msgstr "Компютър" msgstr "Компютър"
#: extensions/places-menu/placeDisplay.js:303 #: extensions/places-menu/placeDisplay.js:336
msgid "Home" msgid "Home"
msgstr "Домашна папка" msgstr "Домашна папка"
#: extensions/places-menu/placeDisplay.js:347 #: extensions/places-menu/placeDisplay.js:381
msgid "Browse Network" msgid "Browse Network"
msgstr "Мрежа" msgstr "Мрежа"
@@ -251,73 +154,78 @@ msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "" msgstr ""
"Името на темата, която да бъде заредена от „~/.themes/name/gnome-shell“" "Името на темата, която да бъде заредена от „~/.themes/name/gnome-shell“"
#: extensions/window-list/extension.js:110 #: extensions/window-list/extension.js:72
msgid "Close" msgid "Close"
msgstr "Затваряне" msgstr "Затваряне"
#: extensions/window-list/extension.js:129 #: extensions/window-list/extension.js:92
msgid "Unminimize" msgid "Unminimize"
msgstr "Деминимизиране" msgstr "Деминимизиране"
#: extensions/window-list/extension.js:130 #: extensions/window-list/extension.js:92
msgid "Minimize" msgid "Minimize"
msgstr "Минимизиране" msgstr "Минимизиране"
#: extensions/window-list/extension.js:136 #: extensions/window-list/extension.js:99
msgid "Unmaximize" msgid "Unmaximize"
msgstr "Демаксимизиране" msgstr "Демаксимизиране"
#: extensions/window-list/extension.js:137 #: extensions/window-list/extension.js:99
msgid "Maximize" msgid "Maximize"
msgstr "Максимизиране" msgstr "Максимизиране"
#: extensions/window-list/extension.js:420 #: extensions/window-list/extension.js:434
msgid "Minimize all" msgid "Minimize all"
msgstr "Минимизиране на всички" msgstr "Минимизиране на всички"
#: extensions/window-list/extension.js:428 #: extensions/window-list/extension.js:440
msgid "Unminimize all" msgid "Unminimize all"
msgstr "Деминимизиране на всички" msgstr "Деминимизиране на всички"
#: extensions/window-list/extension.js:436 #: extensions/window-list/extension.js:446
msgid "Maximize all" msgid "Maximize all"
msgstr "Максимизиране на всички" msgstr "Максимизиране на всички"
#: extensions/window-list/extension.js:445 #: extensions/window-list/extension.js:454
msgid "Unmaximize all" msgid "Unmaximize all"
msgstr "Демаксимизиране на всички" msgstr "Демаксимизиране на всички"
#: extensions/window-list/extension.js:454 #: extensions/window-list/extension.js:462
msgid "Close all" msgid "Close all"
msgstr "Затваряне на всички" msgstr "Затваряне на всички"
#: extensions/window-list/extension.js:678 #: extensions/window-list/extension.js:741
#: extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Индикатор на работните плотове"
#: extensions/window-list/extension.js:842
msgid "Window List" msgid "Window List"
msgstr "Списък на прозорците" msgstr "Списък на прозорците"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows" msgid "When to group windows"
msgstr "Кога да се групират прозорците" msgstr "Кога прозорците да се групират"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid "" msgid ""
"Decides when to group windows from the same application on the window list. " "Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”." "Possible values are “never”, “auto” and “always”."
msgstr "" msgstr ""
"Кога да се групират прозорците на една програма в списъка с прозорците. " "Кога прозорците на една програма да се групират в списъка с прозорците. "
"Възможните стойности са „never“ (никога), „auto“ (автоматично) и " "Възможните стойности са „never“ (никога), „auto“ (автоматично) и "
"„always“ (винаги)." "„always“ (винаги)."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:76
msgid "Show windows from all workspaces"
msgstr "Да се показват прозорците от всички работни плотове"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr ""
"Дали да се показват прозорците от всички работни плотове или само от текущия."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors" msgid "Show the window list on all monitors"
msgstr "Извеждане на списъка с прозорци на всички монитори" msgstr "Извеждане на списъка с прозорци на всички монитори"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid "" msgid ""
"Whether to show the window list on all connected monitors or only on the " "Whether to show the window list on all connected monitors or only on the "
"primary one." "primary one."
@@ -329,31 +237,36 @@ msgstr ""
msgid "Window Grouping" msgid "Window Grouping"
msgstr "Групиране на прозорци" msgstr "Групиране на прозорци"
#: extensions/window-list/prefs.js:50 #: extensions/window-list/prefs.js:37
msgid "Never group windows" msgid "Never group windows"
msgstr "Никога да не се групират" msgstr "Никога да не се групират"
#: extensions/window-list/prefs.js:51 #: extensions/window-list/prefs.js:38
msgid "Group windows when space is limited" msgid "Group windows when space is limited"
msgstr "Групиране при ограничено място" msgstr "Групиране при ограничено място"
#: extensions/window-list/prefs.js:52 #: extensions/window-list/prefs.js:39
msgid "Always group windows" msgid "Always group windows"
msgstr "Винаги да се групират" msgstr "Винаги да се групират"
#: extensions/window-list/prefs.js:75 #: extensions/window-list/prefs.js:63
msgid "Show on all monitors" msgid "Show on all monitors"
msgstr "На всички монитори" msgstr "На всички монитори"
#: extensions/workspace-indicator/prefs.js:141 #: extensions/window-list/workspaceIndicator.js:249
#: extensions/workspace-indicator/extension.js:254
msgid "Workspace Indicator"
msgstr "Индикатор на работните плотове"
#: extensions/workspace-indicator/prefs.js:18
msgid "Workspace Names" msgid "Workspace Names"
msgstr "Имена на работните плотове" msgstr "Имена на работните плотове"
#: extensions/workspace-indicator/prefs.js:157 #: extensions/workspace-indicator/prefs.js:39
msgid "Name"
msgstr "Име"
#: extensions/workspace-indicator/prefs.js:198
#, javascript-format #, javascript-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Работен плот %d" msgstr "Работен плот %d"
#: extensions/workspace-indicator/prefs.js:184
msgid "Add Workspace"
msgstr "Добавяне на работен плот"
+209 -219
View File
@@ -1,360 +1,350 @@
# sray <sray@redhat.com>, 2013, 2014. #zanata. # sray <sray@redhat.com>, 2013, 2014. #zanata.
# Akarshan Biswas <akarshan.biswas@hotmail.com>, 2020.
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: unnamed project\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"shell&keywords=I18N+L10N&component=extensions\n" "issues\n"
"POT-Creation-Date: 2014-09-22 07:38+0000\n" "POT-Creation-Date: 2020-05-28 00:55+0000\n"
"PO-Revision-Date: 2014-09-22 16:37+0000\n" "PO-Revision-Date: 2020-08-13 10:03+0530\n"
"Last-Translator: \n" "Last-Translator: Akarshan Biswas <akarshan.biswas@hotmail.com>\n"
"Language-Team: American English <kde-i18n-doc@kde.org>\n" "Language-Team: Bengali (India) <anubad@lists.ankur.org.in>\n"
"Language: bn_IN\n" "Language: bn_IN\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 1.5\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-DamnedLies-Scope: partial\n"
"X-Generator: Gtranslator 3.36.0\n"
#: ../data/gnome-classic.desktop.in.h:1 #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3
#: ../data/gnome-classic.session.desktop.in.in.h:1
msgid "GNOME Classic" msgid "GNOME Classic"
msgstr "GNOME ক্লাসিক" msgstr "GNOME ক্লাসিক"
#: ../data/gnome-classic.desktop.in.h:2 #: data/gnome-classic.desktop.in:4
msgid "This session logs you into GNOME Classic" msgid "This session logs you into GNOME Classic"
msgstr "এই সেশন অাপনাকে GNOME ক্লাসিকে লগ করায়" msgstr "এই সেশন পনাকে GNOME ক্লাসিকে লগ করায়"
#: ../data/gnome-shell-classic.desktop.in.in.h:1
msgid "GNOME Shell Classic"
msgstr "GNOME সেল ক্লাসিক"
# auto translated by TM merge from project: gnome-shell, version: 3.8.4, DocId: gnome-shell
#: ../data/gnome-shell-classic.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "উইন্ডো পরিচালনা ও অ্যাপ্লিকেশন প্রারম্ভ"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1
msgid "Attach modal dialog to the parent window"
msgstr "প্রধান উইন্ডোতে মোডেল ডায়ালগ সংযুক্ত করুন"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"GNOME সেল চালানোর ক্ষেত্রে এই কী in org.gnome.mutter এর কী ওভাররাইড করে।"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3
msgid "Arrangement of buttons on the titlebar"
msgstr "শিরোনাম দন্ডে বোতামগুলির সজ্জা"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4
#| msgid ""
#| "This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"GNOME সেল চালানোর সময়ে এই কী org.gnome.desktop.wm.preferences-এর কী ওভাররাইড "
"করে।"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:5
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "উইন্ডো স্ক্রীন কিনারায় রাখার সময়ে কিনারা টাইলিং সক্রিয় করুন"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:6
msgid "Workspaces only on primary monitor"
msgstr "শুধুমাত্র প্রধান মনিটরে ওয়ার্কস্পেস"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:7
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr ""
"পয়েন্টার অবস্থান পরিবর্তন না থামানো পর্যন্ত মাউস মোডে ফোকাস পরিবর্তন বিলম্বিত "
"করুন"
#: ../extensions/alternate-tab/prefs.js:20
msgid "Thumbnail only"
msgstr "শুধুমাত্র থাম্বনেইল"
#: ../extensions/alternate-tab/prefs.js:21
msgid "Application icon only"
msgstr "শুধুমাত্র অ্যাপ্লিকেশন অাইকন"
#: ../extensions/alternate-tab/prefs.js:22
msgid "Thumbnail and application icon"
msgstr "থাম্বনেইল এবং অ্যাপ্লিকেশন অাইকন"
#: ../extensions/alternate-tab/prefs.js:38
msgid "Present windows as"
msgstr "এই রূপে উইন্ডো উপস্থাপনা"
#: ../extensions/alternate-tab/prefs.js:69
msgid "Show only windows in the current workspace"
msgstr "শুধুমাত্র উইন্ডো বর্তমান ওয়ার্কস্পেসে দেখান"
#: ../extensions/apps-menu/extension.js:39
msgid "Activities Overview"
msgstr "ক্রিয়াকলাপের পূর্বরূপ"
# auto translated by TM merge from project: system-config-printer, version: 1.1.16-23, DocId: system-config-printer # auto translated by TM merge from project: system-config-printer, version: 1.1.16-23, DocId: system-config-printer
#: ../extensions/apps-menu/extension.js:113 #: extensions/apps-menu/extension.js:113
msgid "Favorites" msgid "Favorites"
msgstr "বিশেষ" msgstr "বিশেষ"
# auto translated by TM merge from project: gnome-menus, version: 3.8.0, DocId: gnome-menus-3.0 # auto translated by TM merge from project: gnome-menus, version: 3.8.0, DocId: gnome-menus-3.0
#: ../extensions/apps-menu/extension.js:282 #: extensions/apps-menu/extension.js:369
msgid "Applications" msgid "Applications"
msgstr "অ্যাপ্লিকেশন" msgstr "অ্যাপ্লিকেশন"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1 #: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list" msgid "Application and workspace list"
msgstr "অ্যাপ্লেকেশন এবং ওয়ার্কস্পেস তালিকা" msgstr "অ্যাপ্লেকেশন এবং ওয়ার্কস্পেস তালিকা"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2 #: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid "" msgid ""
"A list of strings, each containing an application id (desktop file name), " "A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number" "followed by a colon and the workspace number"
msgstr "" msgstr ""
"স্ট্রীঙের একটি তালিকা, প্রতিটিতে থাকে একটি অ্যাপ্লিকেশন অাইডি (ডেস্কটপ ফাইল " "স্ট্রীঙের একটি তালিকা, প্রতিটিতে থাকে একটি অ্যাপ্লিকেশন ইডি (ডেস্কটপ ফাইল নাম), "
"নাম), "
"সংগে থাকে যতিচিহ্ন এবং ওয়ার্কস্পেস নম্বর" "সংগে থাকে যতিচিহ্ন এবং ওয়ার্কস্পেস নম্বর"
# auto translated by TM merge from project: yelp, version: 3.8.1, DocId: yelp #: extensions/auto-move-windows/prefs.js:35
#: ../extensions/auto-move-windows/prefs.js:60 #| msgid "Workspace Names"
msgid "Application" msgid "Workspace Rules"
msgstr "অ্যাপ্লিকেশন" msgstr "ওয়ার্কস্পেস নিয়মগুলি"
#: ../extensions/auto-move-windows/prefs.js:69
#: ../extensions/auto-move-windows/prefs.js:127
msgid "Workspace"
msgstr "ওয়ার্কস্পেস"
# auto translated by TM merge from project: evolution, version: el6, DocId: evolution-2.32 # auto translated by TM merge from project: evolution, version: el6, DocId: evolution-2.32
#: ../extensions/auto-move-windows/prefs.js:85 #: extensions/auto-move-windows/prefs.js:243
#| msgid "Add rule"
msgid "Add Rule" msgid "Add Rule"
msgstr "নিয়ম যোগ করুন" msgstr "নিয়ম যোগ করুন"
#: ../extensions/auto-move-windows/prefs.js:106 #. TRANSLATORS: %s is the filesystem name
msgid "Create new matching rule" #: extensions/drive-menu/extension.js:112
msgstr "মেলানোর নতুন নিয়ম তৈরি করুন" #: extensions/places-menu/placeDisplay.js:233
# auto translated by TM merge from project: file-roller, version: 3.8.3, DocId: file-roller
#: ../extensions/auto-move-windows/prefs.js:111
msgid "Add"
msgstr "যোগ করুন"
#: ../extensions/drive-menu/extension.js:106
#, javascript-format #, javascript-format
msgid "Ejecting drive '%s' failed:" #| msgid "Ejecting drive '%s' failed:"
msgstr "'%s' ড্রাইভ ইজেক্ট করা গেল না:" msgid "Ejecting drive “%s” failed:"
msgstr "'%s' ড্রাইভ ইজেক্ট করতে ব্যর্থ :"
#: ../extensions/drive-menu/extension.js:123 #: extensions/drive-menu/extension.js:128
msgid "Removable devices" msgid "Removable devices"
msgstr "অপসারণযোগ্য ডিভাইসগুলি" msgstr "অপসারণযোগ্য ডিভাইসগুলি"
# auto translated by TM merge from project: gnome-user-share, version: 3.8, DocId: gnome-user-share # auto translated by TM merge from project: gnome-user-share, version: 3.8, DocId: gnome-user-share
#: ../extensions/drive-menu/extension.js:150 #: extensions/drive-menu/extension.js:155
msgid "Open File" #| msgid "Open File"
msgid "Open Files"
msgstr "ফাইল খুলুন" msgstr "ফাইল খুলুন"
#: ../extensions/example/extension.js:17 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Hello, world!"
msgstr "ওহে, বিশ্ব!"
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1
msgid "Alternative greeting text."
msgstr "বিকল্প অভিবাদন পাঠ্য।"
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2
msgid ""
"If not empty, it contains the text that will be shown when clicking on the "
"panel."
msgstr "খালি না থাকলে, তাতে পাঠ্য থাকবে যা প্যানেলে ক্লিক করা হলে দেখানো হবে।"
#: ../extensions/example/prefs.js:30
#| msgid "Message:"
msgid "Message"
msgstr "বার্তা"
#: ../extensions/example/prefs.js:43
msgid ""
"Example aims to show how to build well behaved extensions for the Shell and "
"as such it has little functionality on its own.\n"
"Nevertheless it's possible to customize the greeting message."
msgstr ""
"সেলের জন্য সুস্থিত এক্সটেনশন কীভাবে গঠন করা সম্ভব তা উদাহরণের মাধ্যমে "
"উপস্থাপিত করা "
"হয়।\n"
"উপরন্তু অভিভাদন বার্তা নিজের পছন্দ মতোও করে নেওয়া যায়।"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
msgid "Use more screen for windows" msgid "Use more screen for windows"
msgstr "উইন্ডোর জন্য অারো স্ক্রীন ব্যবহার করুন" msgstr "উইন্ডোর জন্য রো স্ক্রীন ব্যবহার করুন"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
msgid "" msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen " "Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. " "aspect ratio, and consolidating them further to reduce the bounding box. "
"This setting applies only with the natural placement strategy." "This setting applies only with the natural placement strategy."
msgstr "" msgstr ""
"স্ক্রীন অ্যাসপেক্ট অনুপাত সামঞ্জস্যপূর্ণ করে উইন্ডো থাম্বনেইল রাখার জন্য অারো " "স্ক্রীন অ্যাসপেক্ট অনুপাত সামঞ্জস্যপূর্ণ করে উইন্ডো থাম্বনেইল রাখার জন্য আরো স্ক্রীন "
"স্ক্রীন " "ব্যবহারের চেষ্টা করুন, এবং বাউন্ডিং বক্স কমাতে তাদের সংঘবদ্ধ করার চেষ্টা করুন। এই "
"ব্যবহারের চেষ্টা করুন, এবং বাউন্ডিং বক্স কমাতে তাদের সংঘবদ্ধ করার চেষ্টা "
"করুন। এই "
"সেটিং শুধুমাত্র স্বাভাবিক প্লেসমেন্ট কৌশলের ক্ষেত্রেই প্রযোজ্য হয়।" "সেটিং শুধুমাত্র স্বাভাবিক প্লেসমেন্ট কৌশলের ক্ষেত্রেই প্রযোজ্য হয়।"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top" msgid "Place window captions on top"
msgstr "উইন্ডো ক্যাপশন একেবারে শীর্ষে রাখুন" msgstr "উইন্ডো ক্যাপশন একেবারে শীর্ষে রাখুন"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid "" msgid ""
"If true, place window captions on top the respective thumbnail, overriding " "If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires " "shell default of placing it at the bottom. Changing this setting requires "
"restarting the shell to have any effect." "restarting the shell to have any effect."
msgstr "" msgstr ""
"যদি সত্য হয়, তলায় রাখার সেল ডিফল্ট ওভাররাইড করে সংশ্লিষ্ট থাম্বনেইলের শীর্ষে " "যদি সত্য হয়, তলায় রাখার সেল ডিফল্ট ওভাররাইড করে সংশ্লিষ্ট থাম্বনেইলের শীর্ষে উইন্ডো "
"উইন্ডো " "ক্যাপশন রাখুন। এই সেটিং পরিবর্তন করলে তা প্রয়োগ করতে সেল বন্ধ করে চালু করতে হবে।"
"ক্যাপশন রাখুন। এই সেটিং পরিবর্তন করলে তা প্রয়োগ করতে সেল বন্ধ করে চালু করতে "
"হবে।"
# auto translated by TM merge from project: file-roller, version: 3.8.3, DocId: file-roller # auto translated by TM merge from project: file-roller, version: 3.8.3, DocId: file-roller
#: ../extensions/places-menu/extension.js:78 #: extensions/places-menu/extension.js:89
#: ../extensions/places-menu/extension.js:81 #: extensions/places-menu/extension.js:93
msgid "Places" msgid "Places"
msgstr "অবস্থান" msgstr "অবস্থান"
#: ../extensions/places-menu/placeDisplay.js:57 #: extensions/places-menu/placeDisplay.js:46
#, javascript-format #, javascript-format
msgid "Failed to launch \"%s\"" #| msgid "Failed to launch \"%s\""
msgstr "\"%s\" লঞ্চ করা গেল না" msgid "Failed to launch “%s”"
msgstr "\"%s\" লঞ্চ করতে ব্যর্থ "
#: extensions/places-menu/placeDisplay.js:61
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "\"%s\" এর জন্য ভলিউম মাউন্ট করতে ব্যর্থ"
# auto translated by TM merge from project: gvfs, version: 1.16.3, DocId: gvfs # auto translated by TM merge from project: gvfs, version: 1.16.3, DocId: gvfs
#: ../extensions/places-menu/placeDisplay.js:99 #: extensions/places-menu/placeDisplay.js:148
#: ../extensions/places-menu/placeDisplay.js:122 #: extensions/places-menu/placeDisplay.js:171
msgid "Computer" msgid "Computer"
msgstr "কম্পিউটার" msgstr "কম্পিউটার"
# auto translated by TM merge from project: rhsm-web, version: 0.0, DocId: management # auto translated by TM merge from project: rhsm-web, version: 0.0, DocId: management
#: ../extensions/places-menu/placeDisplay.js:200 #: extensions/places-menu/placeDisplay.js:359
msgid "Home" msgid "Home"
msgstr "প্রথম পাতা" msgstr "প্রথম পাতা"
#: ../extensions/places-menu/placeDisplay.js:287 #: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network" msgid "Browse Network"
msgstr "নেটওয়ার্ক ব্রাউজ" msgstr "নেটওয়ার্ক ব্রাউজ"
# auto translated by TM merge from project: gnome-system-monitor, version: 3.8.2.1, DocId: gnome-system-monitor #: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
#: ../extensions/systemMonitor/extension.js:214
msgid "CPU"
msgstr "CPU"
# auto translated by TM merge from project: RHEV Installation Guide, version: 3.1, DocId: topics/Planning_your_Data_Center
#: ../extensions/systemMonitor/extension.js:267
msgid "Memory"
msgstr "মেমরি"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
msgid "Theme name" msgid "Theme name"
msgstr "থিম নাম" msgstr "থিম নাম"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2 #: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "থিমের নাম, ~/.themes/name/gnome-shell থেকে লোড করা হবে" msgstr "থিমের নাম, ~/.themes/name/gnome-shell থেকে লোড করা হবে"
#: ../extensions/window-list/extension.js:110 #: extensions/window-list/extension.js:98
msgid "Close" msgid "Close"
msgstr "বন্ধ করুন" msgstr "বন্ধ করুন"
#: ../extensions/window-list/extension.js:120 #: extensions/window-list/extension.js:118
msgid "Unminimize" msgid "Unminimize"
msgstr "অান-মিনিমাইজ" msgstr "ন-মিনিমাইজ"
#: ../extensions/window-list/extension.js:121 #: extensions/window-list/extension.js:118
msgid "Minimize" msgid "Minimize"
msgstr "ছোট করুন" msgstr "ছোট করুন"
#: ../extensions/window-list/extension.js:127 #: extensions/window-list/extension.js:125
msgid "Unmaximize" msgid "Unmaximize"
msgstr "অান-ম্যাক্সিমাইজ" msgstr "ন-ম্যাক্সিমাইজ"
#: ../extensions/window-list/extension.js:128 #: extensions/window-list/extension.js:125
msgid "Maximize" msgid "Maximize"
msgstr "বড় করুন" msgstr "বড় করুন"
#: ../extensions/window-list/extension.js:300 #: extensions/window-list/extension.js:428
msgid "Minimize all" msgid "Minimize all"
msgstr "সকল ছোট করুন" msgstr "সকল ছোট করুন"
#: ../extensions/window-list/extension.js:308 #: extensions/window-list/extension.js:434
msgid "Unminimize all" msgid "Unminimize all"
msgstr "সকল অান-মিনিমাইজ করুন" msgstr "সকল ন-মিনিমাইজ করুন"
#: ../extensions/window-list/extension.js:316 #: extensions/window-list/extension.js:440
msgid "Maximize all" msgid "Maximize all"
msgstr "সকল বড় করুন" msgstr "সকল বড় করুন"
#: ../extensions/window-list/extension.js:325 #: extensions/window-list/extension.js:448
msgid "Unmaximize all" msgid "Unmaximize all"
msgstr "সকল অান-ম্যাক্সিমাইজ করুন" msgstr "সকল ন-ম্যাক্সিমাইজ করুন"
#: ../extensions/window-list/extension.js:334 #: extensions/window-list/extension.js:456
msgid "Close all" msgid "Close all"
msgstr "সকল বন্ধ করুন" msgstr "সকল বন্ধ করুন"
#: ../extensions/window-list/extension.js:644 #: extensions/window-list/extension.js:734
#: ../extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "ওয়ার্কস্পেস সূচক"
#: ../extensions/window-list/extension.js:808
#| msgid "Window Grouping"
msgid "Window List" msgid "Window List"
msgstr "উইন্ডো তালিকা" msgstr "উইন্ডো তালিকা"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows" msgid "When to group windows"
msgstr "উইন্ডো দলভুক্তকরণ" msgstr "উইন্ডো দলভুক্তকরণ"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
#| msgid ""
#| "Decides when to group windows from the same application on the window "
#| "list. Possible values are \"never\", \"auto\" and \"always\"."
msgid "" msgid ""
"Decides when to group windows from the same application on the window list. " "Decides when to group windows from the same application on the window list. "
"Possible values are \"never\", \"auto\" and \"always\"." "Possible values are never”, “auto and always."
msgstr "" msgstr ""
"উইন্ডো তালিকা একই অ্যাপ্লিকেশন থেকে কখন উইন্ডো দলভুক্ত করা হবে তা সিদ্ধান্ত " "উইন্ডো তালিকা একই অ্যাপ্লিকেশন থেকে কখন উইন্ডোজকে গ্রুপ করবে তা সিদ্ধান্ত নেয়। "
"নেয়। " "সম্ভাব্য মানগুলি হ'ল \"কখনই\", \"স্বয়ং\" এবং \"সর্বদা\"।"
"সম্ভাব্য মানগুলি হল \"কখনও নয়\", \"স্বয়ংক্রিয়\" এবং \"সর্বদা\"।"
#: ../extensions/window-list/prefs.js:30 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:100
#| msgid "Show only windows in the current workspace"
msgid "Show windows from all workspaces"
msgstr "সমস্ত ওয়ার্কস্পেসে থেকে উইন্ডো প্রদর্শন করুন"
#: extensions/window-list/prefs.js:29
msgid "Window Grouping" msgid "Window Grouping"
msgstr "উইন্ডো দলভুক্তকরণ" msgstr "উইন্ডো দলভুক্তকরণ"
#: ../extensions/window-list/prefs.js:49 #: extensions/window-list/prefs.js:58
msgid "Never group windows" msgid "Never group windows"
msgstr "উইন্ডো কখনও দলভুক্ত করবেন না" msgstr "উইন্ডো কখনও দলভুক্ত করবেন না"
#: ../extensions/window-list/prefs.js:50 #: extensions/window-list/prefs.js:59
msgid "Group windows when space is limited" msgid "Group windows when space is limited"
msgstr "স্থান কম থাকলে উইন্ডো দলভুক্ত করুন" msgstr "স্থান কম থাকলে উইন্ডো দলভুক্ত করুন"
#: ../extensions/window-list/prefs.js:51 #: extensions/window-list/prefs.js:60
msgid "Always group windows" msgid "Always group windows"
msgstr "উইন্ডো সর্বদা দলভুক্ত করুন" msgstr "উইন্ডো সর্বদা দলভুক্ত করুন"
#: ../extensions/workspace-indicator/prefs.js:141 #: extensions/window-list/prefs.js:94
#| msgid "Workspace names:" msgid "Show on all monitors"
msgstr "সমস্ত মনিটরের উপর দেখান"
#: extensions/window-list/workspaceIndicator.js:207
#: extensions/workspace-indicator/extension.js:213
msgid "Workspace Indicator"
msgstr "ওয়ার্কস্পেস সূচক"
#: extensions/workspace-indicator/prefs.js:34
msgid "Workspace Names" msgid "Workspace Names"
msgstr "ওয়ার্কস্পেস নামগুলি" msgstr "ওয়ার্কস্পেস নামগুলি"
#: ../extensions/workspace-indicator/prefs.js:157 #: extensions/workspace-indicator/prefs.js:67
msgid "Name"
msgstr "নাম"
#: ../extensions/workspace-indicator/prefs.js:198
#, javascript-format #, javascript-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "ওয়ার্কস্পেস %d" msgstr "ওয়ার্কস্পেস %d"
#: extensions/workspace-indicator/prefs.js:218
#| msgid "Workspace"
msgid "Add Workspace"
msgstr "ওয়ার্কস্পেস যোগ করুন"
#~ msgid "GNOME Shell Classic"
#~ msgstr "GNOME সেল ক্লাসিক"
# auto translated by TM merge from project: gnome-shell, version: 3.8.4, DocId: gnome-shell
#~ msgid "Window management and application launching"
#~ msgstr "উইন্ডো পরিচালনা ও অ্যাপ্লিকেশন প্রারম্ভ"
#~ msgid "Attach modal dialog to the parent window"
#~ msgstr "প্রধান উইন্ডোতে মোডেল ডায়ালগ সংযুক্ত করুন"
#~ msgid ""
#~ "This key overrides the key in org.gnome.mutter when running GNOME Shell."
#~ msgstr ""
#~ "GNOME সেল চালানোর ক্ষেত্রে এই কী in org.gnome.mutter এর কী ওভাররাইড করে।"
#~ msgid "Arrangement of buttons on the titlebar"
#~ msgstr "শিরোনাম দন্ডে বোতামগুলির সজ্জা"
#~| msgid ""
#~| "This key overrides the key in org.gnome.mutter when running GNOME Shell."
#~ msgid ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
#~ "running GNOME Shell."
#~ msgstr ""
#~ "GNOME সেল চালানোর সময়ে এই কী org.gnome.desktop.wm.preferences-এর কী "
#~ "ওভাররাইড করে।"
#~ msgid "Enable edge tiling when dropping windows on screen edges"
#~ msgstr "উইন্ডো স্ক্রীন কিনারায় রাখার সময়ে কিনারা টাইলিং সক্রিয় করুন"
#~ msgid "Workspaces only on primary monitor"
#~ msgstr "শুধুমাত্র প্রধান মনিটরে ওয়ার্কস্পেস"
#~ msgid "Delay focus changes in mouse mode until the pointer stops moving"
#~ msgstr ""
#~ "পয়েন্টার অবস্থান পরিবর্তন না থামানো পর্যন্ত মাউস মোডে ফোকাস পরিবর্তন বিলম্বিত করুন"
#~ msgid "Thumbnail only"
#~ msgstr "শুধুমাত্র থাম্বনেইল"
#~ msgid "Application icon only"
#~ msgstr "শুধুমাত্র অ্যাপ্লিকেশন আইকন"
#~ msgid "Thumbnail and application icon"
#~ msgstr "থাম্বনেইল এবং অ্যাপ্লিকেশন আইকন"
#~ msgid "Present windows as"
#~ msgstr "এই রূপে উইন্ডো উপস্থাপনা"
#~ msgid "Activities Overview"
#~ msgstr "ক্রিয়াকলাপের পূর্বরূপ"
# auto translated by TM merge from project: yelp, version: 3.8.1, DocId: yelp
#~ msgid "Application"
#~ msgstr "অ্যাপ্লিকেশন"
#~ msgid "Create new matching rule"
#~ msgstr "মেলানোর নতুন নিয়ম তৈরি করুন"
# auto translated by TM merge from project: file-roller, version: 3.8.3, DocId: file-roller
#~ msgid "Add"
#~ msgstr "যোগ করুন"
#~ msgid "Hello, world!"
#~ msgstr "ওহে, বিশ্ব!"
#~ msgid "Alternative greeting text."
#~ msgstr "বিকল্প অভিবাদন পাঠ্য।"
#~ msgid ""
#~ "If not empty, it contains the text that will be shown when clicking on "
#~ "the panel."
#~ msgstr "খালি না থাকলে, তাতে পাঠ্য থাকবে যা প্যানেলে ক্লিক করা হলে দেখানো হবে।"
#~| msgid "Message:"
#~ msgid "Message"
#~ msgstr "বার্তা"
#~ msgid ""
#~ "Example aims to show how to build well behaved extensions for the Shell "
#~ "and as such it has little functionality on its own.\n"
#~ "Nevertheless it's possible to customize the greeting message."
#~ msgstr ""
#~ "সেলের জন্য সুস্থিত এক্সটেনশন কীভাবে গঠন করা সম্ভব তা উদাহরণের মাধ্যমে উপস্থাপিত "
#~ "করা হয়।\n"
#~ "উপরন্তু অভিভাদন বার্তা নিজের পছন্দ মতোও করে নেওয়া যায়।"
# auto translated by TM merge from project: gnome-system-monitor, version: 3.8.2.1, DocId: gnome-system-monitor
#~ msgid "CPU"
#~ msgstr "CPU"
# auto translated by TM merge from project: RHEV Installation Guide, version: 3.1, DocId: topics/Planning_your_Data_Center
#~ msgid "Memory"
#~ msgstr "মেমরি"
#~ msgid "Name"
#~ msgstr "নাম"
# auto translated by TM merge from project: gdm, version: 3.8.4, DocId: gdm # auto translated by TM merge from project: gdm, version: 3.8.4, DocId: gdm
#~ msgid "Suspend" #~ msgid "Suspend"
#~ msgstr "স্থগিত করুন" #~ msgstr "স্থগিত করুন"
@@ -370,13 +360,13 @@ msgstr "ওয়ার্কস্পেস %d"
#~ msgstr "স্থগিত সক্রিয় করুন" #~ msgstr "স্থগিত সক্রিয় করুন"
#~ msgid "Control the visibility of the Suspend menu item" #~ msgid "Control the visibility of the Suspend menu item"
#~ msgstr "স্থগিত মেনু অাইটেমের দৃশ্যমানতা নিয়ন্ত্রণ করুন" #~ msgstr "স্থগিত মেনু ইটেমের দৃশ্যমানতা নিয়ন্ত্রণ করুন"
#~ msgid "Enable hibernating" #~ msgid "Enable hibernating"
#~ msgstr "নিদ্রিত অবস্থা সক্রিয় করুন" #~ msgstr "নিদ্রিত অবস্থা সক্রিয় করুন"
#~ msgid "Control the visibility of the Hibernate menu item" #~ msgid "Control the visibility of the Hibernate menu item"
#~ msgstr "নিদ্রিত অবস্থা মেনু অাইটেমের দৃশ্যমানতা নিয়ন্ত্রণ করুন" #~ msgstr "নিদ্রিত অবস্থা মেনু ইটেমের দৃশ্যমানতা নিয়ন্ত্রণ করুন"
#~ msgid "Normal" #~ msgid "Normal"
#~ msgstr "স্বাভাবিক" #~ msgstr "স্বাভাবিক"
+76 -177
View File
@@ -7,9 +7,9 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell-extensions\n" "Project-Id-Version: gnome-shell-extensions\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"shell&keywords=I18N+L10N&component=extensions\n" "issues\n"
"POT-Creation-Date: 2017-08-19 16:41+0000\n" "POT-Creation-Date: 2021-11-06 14:08+0000\n"
"PO-Revision-Date: 2017-07-08 13:29+0100\n" "PO-Revision-Date: 2017-07-08 13:29+0100\n"
"Last-Translator: Jordi Mas <jmas@softcatala.org>\n" "Last-Translator: Jordi Mas <jmas@softcatala.org>\n"
"Language-Team: Catalan <tradgnome@softcatala.org>\n" "Language-Team: Catalan <tradgnome@softcatala.org>\n"
@@ -19,84 +19,28 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 #: data/gnome-classic.desktop.in:3
msgid "GNOME Classic" msgid "GNOME Classic"
msgstr "GNOME clàssic" msgstr "GNOME clàssic"
#: data/gnome-classic.desktop.in:4 #: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4
#: data/gnome-classic-xorg.desktop.in:4
msgid "This session logs you into GNOME Classic" msgid "This session logs you into GNOME Classic"
msgstr "Aquesta sessió us permet utilitzar el GNOME clàssic" msgstr "Aquesta sessió us permet utilitzar el GNOME clàssic"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:7 #: data/gnome-classic-wayland.desktop.in:3
msgid "Attach modal dialog to the parent window" msgid "GNOME Classic on Wayland"
msgstr "Adjunta el diàleg modal a la finestra pare" msgstr "GNOME clàssic amb Wayland"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:8 #: data/gnome-classic-xorg.desktop.in:3
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:25 msgid "GNOME Classic on Xorg"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:33 msgstr "GNOME clàssic amb Xorg"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:41
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Si s'executa el GNOME Shell, aquesta clau sobreescriu la clau «org.gnome."
"mutter»."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:16 #: extensions/apps-menu/extension.js:112
msgid "Arrangement of buttons on the titlebar"
msgstr "Disposició dels botons en la barra de títol"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:17
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"Si s'executa el GNOME Shell, aquesta clau sobreescriu la clau «org.gnome."
"desktop.wm.preferences»."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:24
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Habilita la tessel·lització a les vores en deixar anar les finestres a les "
"vores de la pantalla"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:32
msgid "Workspaces only on primary monitor"
msgstr "Els espais de treball només es mostren en el monitor principal"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:40
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr ""
"Retarda el canvi de focus, en mode ratolí, fins que el punter estigui quiet"
#: extensions/alternate-tab/prefs.js:20
msgid "Thumbnail only"
msgstr "Només miniatures"
#: extensions/alternate-tab/prefs.js:21
msgid "Application icon only"
msgstr "Només la icona de l'aplicació"
#: extensions/alternate-tab/prefs.js:22
msgid "Thumbnail and application icon"
msgstr "Miniatura i icona de l'aplicació"
#: extensions/alternate-tab/prefs.js:38
msgid "Present windows as"
msgstr "Mostra les finestres com a"
#: extensions/alternate-tab/prefs.js:69
msgid "Show only windows in the current workspace"
msgstr "Mostra només les icones de l'espai de treball actual"
#: extensions/apps-menu/extension.js:41
msgid "Activities Overview"
msgstr "Vista general d'activitats"
#: extensions/apps-menu/extension.js:141
msgid "Favorites" msgid "Favorites"
msgstr "Preferides" msgstr "Preferides"
#: extensions/apps-menu/extension.js:436 #: extensions/apps-menu/extension.js:366
msgid "Applications" msgid "Applications"
msgstr "Aplicacions" msgstr "Aplicacions"
@@ -113,73 +57,29 @@ msgstr ""
"d'aplicació (nom del fitxer de l'escriptori), seguit de dos punts i el " "d'aplicació (nom del fitxer de l'escriptori), seguit de dos punts i el "
"número de l'espai de treball" "número de l'espai de treball"
#: extensions/auto-move-windows/prefs.js:60 #: extensions/auto-move-windows/prefs.js:34
msgid "Application" msgid "Workspace Rules"
msgstr "Aplicació" msgstr "Regles dels espais de treball"
#: extensions/auto-move-windows/prefs.js:69 #: extensions/auto-move-windows/prefs.js:236
#: extensions/auto-move-windows/prefs.js:127
msgid "Workspace"
msgstr "Espai de treball"
#: extensions/auto-move-windows/prefs.js:85
msgid "Add Rule" msgid "Add Rule"
msgstr "Afegeix una regla" msgstr "Afegeix una regla"
#: extensions/auto-move-windows/prefs.js:106
msgid "Create new matching rule"
msgstr "Crea una regla de coincidència nova"
#: extensions/auto-move-windows/prefs.js:111
msgid "Add"
msgstr "Afegeix"
#. TRANSLATORS: %s is the filesystem name #. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:107 #: extensions/drive-menu/extension.js:133
#: extensions/places-menu/placeDisplay.js:233
#, javascript-format #, javascript-format
msgid "Ejecting drive “%s” failed:" msgid "Ejecting drive “%s” failed:"
msgstr "Ha fallat l'expulsió de la unitat «%s»:" msgstr "Ha fallat l'expulsió de la unitat «%s»:"
#: extensions/drive-menu/extension.js:125 #: extensions/drive-menu/extension.js:149
msgid "Removable devices" msgid "Removable devices"
msgstr "Dispositius extraïbles" msgstr "Dispositius extraïbles"
#: extensions/drive-menu/extension.js:150 #: extensions/drive-menu/extension.js:171
msgid "Open Files" msgid "Open Files"
msgstr "Obre els fitxers" msgstr "Obre els fitxers"
#: extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "Hola, món!"
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:5
msgid "Alternative greeting text."
msgstr "Text de rebuda alternatiu."
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:6
msgid ""
"If not empty, it contains the text that will be shown when clicking on the "
"panel."
msgstr ""
"Si no és buit, conté el text que es mostrarà quan es faci clic en el quadre."
#: extensions/example/prefs.js:30
msgid "Message"
msgstr "Missatge"
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: extensions/example/prefs.js:43
msgid ""
"Example aims to show how to build well behaved extensions for the Shell and "
"as such it has little functionality on its own.\n"
"Nevertheless its possible to customize the greeting message."
msgstr ""
"L'«Example» està pensat com una extensió del GNOME Shell que demostri la "
"manera correcta de crear extensions. Com a extensió pròpiament dita no fa "
"gairebé res.\n"
"Tot i així permet personalitzar el missatge de benvinguda."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows" msgid "Use more screen for windows"
msgstr "Utilitza més pantalla per les finestres" msgstr "Utilitza més pantalla per les finestres"
@@ -190,10 +90,10 @@ msgid ""
"aspect ratio, and consolidating them further to reduce the bounding box. " "aspect ratio, and consolidating them further to reduce the bounding box. "
"This setting applies only with the natural placement strategy." "This setting applies only with the natural placement strategy."
msgstr "" msgstr ""
"Intenta utilitzar més espai de la pantalla per posicionar les miniatures de " "Intenta utilitzar més espai de la pantalla per a posicionar les miniatures "
"les finestres adaptant-les a la ràtio d'aspecte de la pantalla, consolidant-" "de les finestres adaptant-les a la ràtio d'aspecte de la pantalla, "
"les més per reduir la capsa que les envolta. Aquest paràmetre de " "consolidant-les més per a reduir la caixa que les envolta. Aquest paràmetre "
"configuració només s'aplica a l'estratègia de posicionament de finestres " "de configuració només s'aplica a l'estratègia de posicionament de finestres "
"natural." "natural."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
@@ -211,31 +111,31 @@ msgstr ""
"posicionar-lo a baix. Cal reiniciar el Shell per tal que aquest canvi tingui " "posicionar-lo a baix. Cal reiniciar el Shell per tal que aquest canvi tingui "
"efecte." "efecte."
#: extensions/places-menu/extension.js:78 #: extensions/places-menu/extension.js:88
#: extensions/places-menu/extension.js:81 #: extensions/places-menu/extension.js:91
msgid "Places" msgid "Places"
msgstr "Llocs" msgstr "Llocs"
#: extensions/places-menu/placeDisplay.js:65 #: extensions/places-menu/placeDisplay.js:46
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "No s'ha pogut muntar el volum «%s»"
#: extensions/places-menu/placeDisplay.js:78
#, javascript-format #, javascript-format
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "No s'ha pogut iniciar «%s»" msgstr "No s'ha pogut iniciar «%s»"
#: extensions/places-menu/placeDisplay.js:137 #: extensions/places-menu/placeDisplay.js:61
#: extensions/places-menu/placeDisplay.js:160 #, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "No s'ha pogut muntar el volum «%s»"
#: extensions/places-menu/placeDisplay.js:148
#: extensions/places-menu/placeDisplay.js:171
msgid "Computer" msgid "Computer"
msgstr "Ordinador" msgstr "Ordinador"
#: extensions/places-menu/placeDisplay.js:303 #: extensions/places-menu/placeDisplay.js:359
msgid "Home" msgid "Home"
msgstr "Inici" msgstr "Inici"
#: extensions/places-menu/placeDisplay.js:347 #: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network" msgid "Browse Network"
msgstr "Navega per la xarxa" msgstr "Navega per la xarxa"
@@ -255,52 +155,47 @@ msgstr "Nom del tema"
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "El nom del tema que es carregarà des de ~/.themes/name/gnome-shell" msgstr "El nom del tema que es carregarà des de ~/.themes/name/gnome-shell"
#: extensions/window-list/extension.js:110 #: extensions/window-list/extension.js:72
msgid "Close" msgid "Close"
msgstr "Tanca" msgstr "Tanca"
#: extensions/window-list/extension.js:129 #: extensions/window-list/extension.js:92
msgid "Unminimize" msgid "Unminimize"
msgstr "Desminimitza" msgstr "Desminimitza"
#: extensions/window-list/extension.js:130 #: extensions/window-list/extension.js:92
msgid "Minimize" msgid "Minimize"
msgstr "Minimitza" msgstr "Minimitza"
#: extensions/window-list/extension.js:136 #: extensions/window-list/extension.js:99
msgid "Unmaximize" msgid "Unmaximize"
msgstr "Desmaximitza" msgstr "Desmaximitza"
#: extensions/window-list/extension.js:137 #: extensions/window-list/extension.js:99
msgid "Maximize" msgid "Maximize"
msgstr "Maximitza" msgstr "Maximitza"
#: extensions/window-list/extension.js:420 #: extensions/window-list/extension.js:434
msgid "Minimize all" msgid "Minimize all"
msgstr "Minimitza-ho tot" msgstr "Minimitza-ho tot"
#: extensions/window-list/extension.js:428 #: extensions/window-list/extension.js:440
msgid "Unminimize all" msgid "Unminimize all"
msgstr "Desminimitza-ho tot" msgstr "Desminimitza-ho tot"
#: extensions/window-list/extension.js:436 #: extensions/window-list/extension.js:446
msgid "Maximize all" msgid "Maximize all"
msgstr "Maximitza-ho tot" msgstr "Maximitza-ho tot"
#: extensions/window-list/extension.js:445 #: extensions/window-list/extension.js:454
msgid "Unmaximize all" msgid "Unmaximize all"
msgstr "Desmaximitza-ho tot" msgstr "Desmaximitza-ho tot"
#: extensions/window-list/extension.js:454 #: extensions/window-list/extension.js:462
msgid "Close all" msgid "Close all"
msgstr "Tanca-ho tot" msgstr "Tanca-ho tot"
#: extensions/window-list/extension.js:678 #: extensions/window-list/extension.js:741
#: extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Indicador de l'espai de treball"
#: extensions/window-list/extension.js:842
msgid "Window List" msgid "Window List"
msgstr "Llista de finestres" msgstr "Llista de finestres"
@@ -318,10 +213,21 @@ msgstr ""
"«auto» (automàticament) i «always» (sempre)." "«auto» (automàticament) i «always» (sempre)."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:86
msgid "Show windows from all workspaces"
msgstr "Mostra les finestres de tots els espais de treball"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr ""
"Si es mostren les finestres de tots els espais de treballs o només de "
"l'actual."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors" msgid "Show the window list on all monitors"
msgstr "Mostra la llista de finestres a tots els monitors" msgstr "Mostra la llista de finestres a tots els monitors"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid "" msgid ""
"Whether to show the window list on all connected monitors or only on the " "Whether to show the window list on all connected monitors or only on the "
"primary one." "primary one."
@@ -329,47 +235,40 @@ msgstr ""
"Si es mostra la llista de finestres en tots els monitors connectats o només " "Si es mostra la llista de finestres en tots els monitors connectats o només "
"al primari." "al primari."
#: extensions/window-list/prefs.js:32 #: extensions/window-list/prefs.js:39
msgid "Window Grouping" msgid "Window Grouping"
msgstr "Agrupació de finestres" msgstr "Agrupació de finestres"
#: extensions/window-list/prefs.js:50 #: extensions/window-list/prefs.js:63
msgid "Never group windows" msgid "Never group windows"
msgstr "Mai agrupis les finestres" msgstr "Mai agrupis les finestres"
#: extensions/window-list/prefs.js:51 #: extensions/window-list/prefs.js:64
msgid "Group windows when space is limited" msgid "Group windows when space is limited"
msgstr "Agrupa les finestres quan l'espai estigui limitat" msgstr "Agrupa les finestres quan l'espai estigui limitat"
#: extensions/window-list/prefs.js:52 #: extensions/window-list/prefs.js:65
msgid "Always group windows" msgid "Always group windows"
msgstr "Agrupa les finestres sempre" msgstr "Agrupa les finestres sempre"
#: extensions/window-list/prefs.js:75 #: extensions/window-list/prefs.js:81
msgid "Show on all monitors" msgid "Show on all monitors"
msgstr "Mostra a tots els monitors" msgstr "Mostra a tots els monitors"
#: extensions/workspace-indicator/prefs.js:141 #: extensions/window-list/workspaceIndicator.js:249
#: extensions/workspace-indicator/extension.js:254
msgid "Workspace Indicator"
msgstr "Indicador de l'espai de treball"
#: extensions/workspace-indicator/prefs.js:33
msgid "Workspace Names" msgid "Workspace Names"
msgstr "Noms dels espais de treball" msgstr "Noms dels espais de treball"
#: extensions/workspace-indicator/prefs.js:157 #: extensions/workspace-indicator/prefs.js:66
msgid "Name"
msgstr "Nom"
#: extensions/workspace-indicator/prefs.js:198
#, javascript-format #, javascript-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Espai de treball %d" msgstr "Espai de treball %d"
#~ msgid "GNOME Shell Classic" #: extensions/workspace-indicator/prefs.js:207
#~ msgstr "GNOME Shell clàssic" msgid "Add Workspace"
msgstr "Afegeix un espai de treball"
#~ msgid "Window management and application launching"
#~ msgstr "Gestió de finestres i iniciació d'aplicacions"
#~ msgid "CPU"
#~ msgstr "CPU"
#~ msgid "Memory"
#~ msgstr "Memòria"
+74 -158
View File
@@ -2,15 +2,15 @@
# Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell-extensions package. # This file is distributed under the same license as the gnome-shell-extensions package.
# Petr Kovar <pknbe@volny.cz>, 2013. # Petr Kovar <pknbe@volny.cz>, 2013.
# Marek Černocký <marek@manet.cz>, 2011, 2012, 2013, 2014, 2015, 2017. # Marek Černocký <marek@manet.cz>, 2011, 2012, 2013, 2014, 2015, 2017, 2019, 2020, 2022.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell-extensions\n" "Project-Id-Version: gnome-shell-extensions\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"shell&keywords=I18N+L10N&component=extensions\n" "issues\n"
"POT-Creation-Date: 2017-07-05 15:07+0000\n" "POT-Creation-Date: 2021-11-06 14:08+0000\n"
"PO-Revision-Date: 2017-07-10 16:48+0200\n" "PO-Revision-Date: 2022-02-16 09:58+0100\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n" "Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\n" "Language-Team: Czech <gnome-cs-list@gnome.org>\n"
"Language: cs\n" "Language: cs\n"
@@ -20,79 +20,28 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Gtranslator 2.91.6\n" "X-Generator: Gtranslator 2.91.6\n"
#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 #: data/gnome-classic.desktop.in:3
msgid "GNOME Classic" msgid "GNOME Classic"
msgstr "GNOME klasik" msgstr "GNOME klasik"
#: data/gnome-classic.desktop.in:4 #: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4
#: data/gnome-classic-xorg.desktop.in:4
msgid "This session logs you into GNOME Classic" msgid "This session logs you into GNOME Classic"
msgstr "Toto sezení vás přihlásí do GNOME klasik" msgstr "Toto sezení vás přihlásí do GNOME klasik"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:7 #: data/gnome-classic-wayland.desktop.in:3
msgid "Attach modal dialog to the parent window" msgid "GNOME Classic on Wayland"
msgstr "Modální dialogová okna připojovat k rodičovskému oknu" msgstr "GNOME klasik na Waylandu"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:8 #: data/gnome-classic-xorg.desktop.in:3
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:25 msgid "GNOME Classic on Xorg"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:33 msgstr "GNOME klasik na Xorg"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:41
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr "Když běží GNOME Shell, tento klíč přepíše klíč v org.gnome.mutter"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:16 #: extensions/apps-menu/extension.js:112
msgid "Arrangement of buttons on the titlebar"
msgstr "Uspořádání tlačítek v záhlaví"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:17
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"Když běží GNOME Shell, tento klíč přepíše klíč v org.gnome.desktop.wm."
"preferences"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:24
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Okna upuštěná u okraje obrazovky nechat řadit jako dlaždice"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:32
msgid "Workspaces only on primary monitor"
msgstr "Pracovní plochy jen na hlavním monitoru"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:40
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Neměnit zaměření v režimu s myší, dokud se nezastaví ukazatel"
#: extensions/alternate-tab/prefs.js:20
msgid "Thumbnail only"
msgstr "Pouze náhled"
#: extensions/alternate-tab/prefs.js:21
msgid "Application icon only"
msgstr "Pouze ikona aplikace"
#: extensions/alternate-tab/prefs.js:22
msgid "Thumbnail and application icon"
msgstr "Náhled a ikona aplikace"
#: extensions/alternate-tab/prefs.js:38
msgid "Present windows as"
msgstr "Představovat okna jako"
#: extensions/alternate-tab/prefs.js:69
msgid "Show only windows in the current workspace"
msgstr "Zobrazovat pouze okna z aktuální pracovní plochy"
#: extensions/apps-menu/extension.js:41
msgid "Activities Overview"
msgstr "Přehled činností"
#: extensions/apps-menu/extension.js:141
msgid "Favorites" msgid "Favorites"
msgstr "Oblíbené" msgstr "Oblíbené"
#: extensions/apps-menu/extension.js:436 #: extensions/apps-menu/extension.js:366
msgid "Applications" msgid "Applications"
msgstr "Aplikace" msgstr "Aplikace"
@@ -108,71 +57,29 @@ msgstr ""
"Seznam řetězců, z nichž každý obsahuje ID aplikace (název souboru pracovní " "Seznam řetězců, z nichž každý obsahuje ID aplikace (název souboru pracovní "
"plochy), následovaný dvojtečkou a číslem pracovní plochy" "plochy), následovaný dvojtečkou a číslem pracovní plochy"
#: extensions/auto-move-windows/prefs.js:60 #: extensions/auto-move-windows/prefs.js:34
msgid "Application" msgid "Workspace Rules"
msgstr "Aplikace" msgstr "Pravidla pracovních ploch"
#: extensions/auto-move-windows/prefs.js:69 #: extensions/auto-move-windows/prefs.js:236
#: extensions/auto-move-windows/prefs.js:127
msgid "Workspace"
msgstr "Pracovní plocha"
#: extensions/auto-move-windows/prefs.js:85
msgid "Add Rule" msgid "Add Rule"
msgstr "Přidat pravidlo" msgstr "Přidat pravidlo"
#: extensions/auto-move-windows/prefs.js:106 #. TRANSLATORS: %s is the filesystem name
msgid "Create new matching rule" #: extensions/drive-menu/extension.js:133
msgstr "Vytvoření nového srovnávacího pravidla" #: extensions/places-menu/placeDisplay.js:233
#: extensions/auto-move-windows/prefs.js:111
msgid "Add"
msgstr "Přidat"
#: extensions/drive-menu/extension.js:106
#, javascript-format #, javascript-format
msgid "Ejecting drive “%s” failed:" msgid "Ejecting drive “%s” failed:"
msgstr "Vysunutí disku „%s“ selhalo:" msgstr "Vysunutí disku „%s“ selhalo:"
#: extensions/drive-menu/extension.js:124 #: extensions/drive-menu/extension.js:149
msgid "Removable devices" msgid "Removable devices"
msgstr "Výměnná zařízení" msgstr "Výměnná zařízení"
#: extensions/drive-menu/extension.js:149 #: extensions/drive-menu/extension.js:171
msgid "Open Files" msgid "Open Files"
msgstr "Otevřít soubory" msgstr "Otevřít soubory"
#: extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "Ahoj světe!"
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:5
msgid "Alternative greeting text."
msgstr "Alternativní uvítací text"
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:6
msgid ""
"If not empty, it contains the text that will be shown when clicking on the "
"panel."
msgstr ""
"Pokud není prázdné, obsahuje text, který se objeví po kliknutí na panel."
#: extensions/example/prefs.js:30
msgid "Message"
msgstr "Zpráva"
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: extensions/example/prefs.js:43
msgid ""
"Example aims to show how to build well behaved extensions for the Shell and "
"as such it has little functionality on its own.\n"
"Nevertheless its possible to customize the greeting message."
msgstr ""
"Rozšíření Example vám má jen ukázat, jak sestavit dobře fungující rozšíření "
"pro Shell, a tak je jeho praktické využití pramalé.\n"
"Přesto si můžete alespoň upravit uvítací zprávu."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows" msgid "Use more screen for windows"
msgstr "Použít větší část obrazovky pro okna" msgstr "Použít větší část obrazovky pro okna"
@@ -201,31 +108,31 @@ msgstr ""
"přepíše výchozí chování shellu, který jej umisťuje dolů. Změna tohoto " "přepíše výchozí chování shellu, který jej umisťuje dolů. Změna tohoto "
"nastavení vyžaduje restart shellu, aby se projevila." "nastavení vyžaduje restart shellu, aby se projevila."
#: extensions/places-menu/extension.js:78 #: extensions/places-menu/extension.js:88
#: extensions/places-menu/extension.js:81 #: extensions/places-menu/extension.js:91
msgid "Places" msgid "Places"
msgstr "Místa" msgstr "Místa"
#: extensions/places-menu/placeDisplay.js:65 #: extensions/places-menu/placeDisplay.js:46
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Selhalo připojení svazku pro „%s“"
#: extensions/places-menu/placeDisplay.js:78
#, javascript-format #, javascript-format
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "Selhalo spuštění „%s“" msgstr "Selhalo spuštění „%s“"
#: extensions/places-menu/placeDisplay.js:137 #: extensions/places-menu/placeDisplay.js:61
#: extensions/places-menu/placeDisplay.js:160 #, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Selhalo připojení svazku pro „%s“"
#: extensions/places-menu/placeDisplay.js:148
#: extensions/places-menu/placeDisplay.js:171
msgid "Computer" msgid "Computer"
msgstr "Počítač" msgstr "Počítač"
#: extensions/places-menu/placeDisplay.js:303 #: extensions/places-menu/placeDisplay.js:359
msgid "Home" msgid "Home"
msgstr "Domů" msgstr "Domů"
#: extensions/places-menu/placeDisplay.js:347 #: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network" msgid "Browse Network"
msgstr "Procházet síť" msgstr "Procházet síť"
@@ -245,52 +152,47 @@ msgstr "Název motivu"
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "Název motivu, který se má načíst z ~/.themes/name/gnome-shell" msgstr "Název motivu, který se má načíst z ~/.themes/name/gnome-shell"
#: extensions/window-list/extension.js:110 #: extensions/window-list/extension.js:72
msgid "Close" msgid "Close"
msgstr "Zavřít" msgstr "Zavřít"
#: extensions/window-list/extension.js:129 #: extensions/window-list/extension.js:92
msgid "Unminimize" msgid "Unminimize"
msgstr "Zrušit minimalizaci" msgstr "Zrušit minimalizaci"
#: extensions/window-list/extension.js:130 #: extensions/window-list/extension.js:92
msgid "Minimize" msgid "Minimize"
msgstr "Minimalizovat" msgstr "Minimalizovat"
#: extensions/window-list/extension.js:136 #: extensions/window-list/extension.js:99
msgid "Unmaximize" msgid "Unmaximize"
msgstr "Zrušit maximalizaci" msgstr "Zrušit maximalizaci"
#: extensions/window-list/extension.js:137 #: extensions/window-list/extension.js:99
msgid "Maximize" msgid "Maximize"
msgstr "Maximalizovat" msgstr "Maximalizovat"
#: extensions/window-list/extension.js:420 #: extensions/window-list/extension.js:434
msgid "Minimize all" msgid "Minimize all"
msgstr "Minimalizovat všechna" msgstr "Minimalizovat všechna"
#: extensions/window-list/extension.js:428 #: extensions/window-list/extension.js:440
msgid "Unminimize all" msgid "Unminimize all"
msgstr "Zrušit minimalizaci všech" msgstr "Zrušit minimalizaci všech"
#: extensions/window-list/extension.js:436 #: extensions/window-list/extension.js:446
msgid "Maximize all" msgid "Maximize all"
msgstr "Maximalizovat všechna" msgstr "Maximalizovat všechna"
#: extensions/window-list/extension.js:445 #: extensions/window-list/extension.js:454
msgid "Unmaximize all" msgid "Unmaximize all"
msgstr "Zrušit maximalizaci všech" msgstr "Zrušit maximalizaci všech"
#: extensions/window-list/extension.js:454 #: extensions/window-list/extension.js:462
msgid "Close all" msgid "Close all"
msgstr "Zavřít všechna" msgstr "Zavřít všechna"
#: extensions/window-list/extension.js:678 #: extensions/window-list/extension.js:741
#: extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Ukazatel pracovní plochy"
#: extensions/window-list/extension.js:842
msgid "Window List" msgid "Window List"
msgstr "Seznam oken" msgstr "Seznam oken"
@@ -307,10 +209,19 @@ msgstr ""
"hodnoty jsou „never“ (nikdy), „auto“ (automaticky) a „always“ (vždy)." "hodnoty jsou „never“ (nikdy), „auto“ (automaticky) a „always“ (vždy)."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:86
msgid "Show windows from all workspaces"
msgstr "Zobrazovat okna ze všech pracovních ploch"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr "Zda zobrazovat okna ze všech pracovních ploch nebo jen z aktuální."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors" msgid "Show the window list on all monitors"
msgstr "Zobrazovat seznam oken na všech monitorech" msgstr "Zobrazovat seznam oken na všech monitorech"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid "" msgid ""
"Whether to show the window list on all connected monitors or only on the " "Whether to show the window list on all connected monitors or only on the "
"primary one." "primary one."
@@ -318,35 +229,40 @@ msgstr ""
"Zda zobrazovat seznam oken na všech připojených monitorech nebo jen na " "Zda zobrazovat seznam oken na všech připojených monitorech nebo jen na "
"hlavním." "hlavním."
#: extensions/window-list/prefs.js:32 #: extensions/window-list/prefs.js:39
msgid "Window Grouping" msgid "Window Grouping"
msgstr "Seskupování oken" msgstr "Seskupování oken"
#: extensions/window-list/prefs.js:50 #: extensions/window-list/prefs.js:63
msgid "Never group windows" msgid "Never group windows"
msgstr "Nikdy neseskupovat okna" msgstr "Nikdy neseskupovat okna"
#: extensions/window-list/prefs.js:51 #: extensions/window-list/prefs.js:64
msgid "Group windows when space is limited" msgid "Group windows when space is limited"
msgstr "Seskupovat okna při nedostatku místa" msgstr "Seskupovat okna při nedostatku místa"
#: extensions/window-list/prefs.js:52 #: extensions/window-list/prefs.js:65
msgid "Always group windows" msgid "Always group windows"
msgstr "Vždy seskupovat okna" msgstr "Vždy seskupovat okna"
#: extensions/window-list/prefs.js:75 #: extensions/window-list/prefs.js:81
msgid "Show on all monitors" msgid "Show on all monitors"
msgstr "Zobrazovat na všech monitorech" msgstr "Zobrazovat na všech monitorech"
#: extensions/workspace-indicator/prefs.js:141 #: extensions/window-list/workspaceIndicator.js:249
#: extensions/workspace-indicator/extension.js:254
msgid "Workspace Indicator"
msgstr "Ukazatel pracovní plochy"
#: extensions/workspace-indicator/prefs.js:33
msgid "Workspace Names" msgid "Workspace Names"
msgstr "Názvy pracovních ploch" msgstr "Názvy pracovních ploch"
#: extensions/workspace-indicator/prefs.js:157 #: extensions/workspace-indicator/prefs.js:66
msgid "Name"
msgstr "Název"
#: extensions/workspace-indicator/prefs.js:198
#, javascript-format #, javascript-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Pracovní plocha %d" msgstr "Pracovní plocha %d"
#: extensions/workspace-indicator/prefs.js:207
msgid "Add Workspace"
msgstr "Přidat pracovní plochu"
+157 -163
View File
@@ -9,94 +9,41 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n" "Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"shell&keywords=I18N+L10N&component=extensions\n" "issues\n"
"POT-Creation-Date: 2017-08-11 01:33+0000\n" "POT-Creation-Date: 2021-11-06 14:08+0000\n"
"PO-Revision-Date: 2017-09-10 17:13+0200\n" "PO-Revision-Date: 2022-02-27 13:21+0100\n"
"Last-Translator: Kris Thomsen <mail@kristhomsen.dk>\n" "Last-Translator: Alan Mortensen <alanmortensen.am@gmail.com>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n" "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
"Language: da\n" "Language: da\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.3\n"
#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 #: data/gnome-classic.desktop.in:3
msgid "GNOME Classic" msgid "GNOME Classic"
msgstr "GNOME Classic" msgstr "GNOME Classic"
#: data/gnome-classic.desktop.in:4 #: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4
#: data/gnome-classic-xorg.desktop.in:4
msgid "This session logs you into GNOME Classic" msgid "This session logs you into GNOME Classic"
msgstr "Denne session logger dig ind i GNOME Classic" msgstr "Denne session logger dig ind i GNOME Classic"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:7 #: data/gnome-classic-wayland.desktop.in:3
msgid "Attach modal dialog to the parent window" msgid "GNOME Classic on Wayland"
msgstr "Tillæg modal-dialog til det overordnede vindue" msgstr "GNOME Classic på Wayland"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:8 #: data/gnome-classic-xorg.desktop.in:3
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:25 msgid "GNOME Classic on Xorg"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:33 msgstr "GNOME Classic på Xorg"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:41
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Denne nøgle tilsidesætter nøglen i org.gnome.mutter når GNOME Shell kører."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:16 #: extensions/apps-menu/extension.js:112
msgid "Arrangement of buttons on the titlebar"
msgstr "Placeringen af knapper i titellinjen"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:17
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"Denne nøgle tilsidesætter nøglen i org.gnome.desktop.wm.preferences når "
"GNOME Shell kører."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:24
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Aktivér kant-fliselægning når vinduer slippes på skærmkanter"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:32
msgid "Workspaces only on primary monitor"
msgstr "Kun arbejdsområder på primær skærm"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:40
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr ""
"Forsink fokusændringer i musetilstand indtil pegeren holder op med at bevæge "
"sig"
#: extensions/alternate-tab/prefs.js:20
msgid "Thumbnail only"
msgstr "Kun miniaturebillede"
#: extensions/alternate-tab/prefs.js:21
msgid "Application icon only"
msgstr "Kun programikon"
#: extensions/alternate-tab/prefs.js:22
msgid "Thumbnail and application icon"
msgstr "Miniaturebillede og programikon"
#: extensions/alternate-tab/prefs.js:38
msgid "Present windows as"
msgstr "Præsentér vindue som"
#: extensions/alternate-tab/prefs.js:69
msgid "Show only windows in the current workspace"
msgstr "Vis kun vinduer i det nuværende arbejdsområde"
#: extensions/apps-menu/extension.js:41
msgid "Activities Overview"
msgstr "Aktivitetsoversigt"
#: extensions/apps-menu/extension.js:141
msgid "Favorites" msgid "Favorites"
msgstr "Favoritter" msgstr "Favoritter"
#: extensions/apps-menu/extension.js:436 #: extensions/apps-menu/extension.js:366
msgid "Applications" msgid "Applications"
msgstr "Programmer" msgstr "Programmer"
@@ -112,74 +59,29 @@ msgstr ""
"En liste over strenge, som hver indeholder et program-id " "En liste over strenge, som hver indeholder et program-id "
"(skrivebordsfilnavn), efterfulgt af et kolon og arbejdsområdets nummer" "(skrivebordsfilnavn), efterfulgt af et kolon og arbejdsområdets nummer"
#: extensions/auto-move-windows/prefs.js:60 #: extensions/auto-move-windows/prefs.js:34
msgid "Application" msgid "Workspace Rules"
msgstr "Program" msgstr "Regler for arbejdsområde"
#: extensions/auto-move-windows/prefs.js:69 #: extensions/auto-move-windows/prefs.js:236
#: extensions/auto-move-windows/prefs.js:127
msgid "Workspace"
msgstr "Arbejdsområde"
#: extensions/auto-move-windows/prefs.js:85
msgid "Add Rule" msgid "Add Rule"
msgstr "Tilføj regel" msgstr "Tilføj regel"
#: extensions/auto-move-windows/prefs.js:106
msgid "Create new matching rule"
msgstr "Opret ny regel for match"
#: extensions/auto-move-windows/prefs.js:111
msgid "Add"
msgstr "Tilføj"
#. TRANSLATORS: %s is the filesystem name #. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:107 #: extensions/drive-menu/extension.js:133
#: extensions/places-menu/placeDisplay.js:233
#, javascript-format #, javascript-format
msgid "Ejecting drive “%s” failed:" msgid "Ejecting drive “%s” failed:"
msgstr "Udskubning af drevet “%s” mislykkedes:" msgstr "Udskubning af drevet “%s” mislykkedes:"
#: extensions/drive-menu/extension.js:125 #: extensions/drive-menu/extension.js:149
msgid "Removable devices" msgid "Removable devices"
msgstr "Flytbare enheder" msgstr "Flytbare enheder"
#: extensions/drive-menu/extension.js:150 #: extensions/drive-menu/extension.js:171
msgid "Open Files" msgid "Open Files"
msgstr "Åbn filer" msgstr "Åbn filer"
#: extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "Hej verden!"
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:5
msgid "Alternative greeting text."
msgstr "Alternativ velkomsttekst."
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:6
msgid ""
"If not empty, it contains the text that will be shown when clicking on the "
"panel."
msgstr ""
"Hvis den ikke er tom, så indeholder den teksten, der vil blive vist når der "
"klikkes på panelet."
#: extensions/example/prefs.js:30
msgid "Message"
msgstr "Besked"
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: extensions/example/prefs.js:43
msgid ""
"Example aims to show how to build well behaved extensions for the Shell and "
"as such it has little functionality on its own.\n"
"Nevertheless its possible to customize the greeting message."
msgstr ""
"Example sigter efter at vise, hvordan man bygger udvidelser til skallen, som "
"opfører sig ordentligt, og har som sådan meget lidt selvstændig "
"funktionalitet.\n"
"Alligevel er det muligt at tilpasse velkomstbeskeden."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows" msgid "Use more screen for windows"
msgstr "Brug mere skærmplads til vinduer" msgstr "Brug mere skærmplads til vinduer"
@@ -210,31 +112,31 @@ msgstr ""
"Ændring af denne indstilling kræver at shell'en genstartes for at træde i " "Ændring af denne indstilling kræver at shell'en genstartes for at træde i "
"kraft." "kraft."
#: extensions/places-menu/extension.js:78 #: extensions/places-menu/extension.js:88
#: extensions/places-menu/extension.js:81 #: extensions/places-menu/extension.js:91
msgid "Places" msgid "Places"
msgstr "Steder" msgstr "Steder"
#: extensions/places-menu/placeDisplay.js:65 #: extensions/places-menu/placeDisplay.js:46
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Kunne ikke montere diskenhed for “%s”"
#: extensions/places-menu/placeDisplay.js:78
#, javascript-format #, javascript-format
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "Kunne ikke åbne “%s”" msgstr "Kunne ikke åbne “%s”"
#: extensions/places-menu/placeDisplay.js:137 #: extensions/places-menu/placeDisplay.js:61
#: extensions/places-menu/placeDisplay.js:160 #, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Kunne ikke montere diskenhed for “%s”"
#: extensions/places-menu/placeDisplay.js:148
#: extensions/places-menu/placeDisplay.js:171
msgid "Computer" msgid "Computer"
msgstr "Computer" msgstr "Computer"
#: extensions/places-menu/placeDisplay.js:303 #: extensions/places-menu/placeDisplay.js:359
msgid "Home" msgid "Home"
msgstr "Hjem" msgstr "Hjem"
#: extensions/places-menu/placeDisplay.js:347 #: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network" msgid "Browse Network"
msgstr "Gennemse netværk" msgstr "Gennemse netværk"
@@ -254,52 +156,47 @@ msgstr "Temanavn"
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "Navnet på temaet, som indlæses fra ~/.themes/name/gnome-shell" msgstr "Navnet på temaet, som indlæses fra ~/.themes/name/gnome-shell"
#: extensions/window-list/extension.js:110 #: extensions/window-list/extension.js:72
msgid "Close" msgid "Close"
msgstr "Luk" msgstr "Luk"
#: extensions/window-list/extension.js:129 #: extensions/window-list/extension.js:92
msgid "Unminimize" msgid "Unminimize"
msgstr "Afminimér" msgstr "Afminimér"
#: extensions/window-list/extension.js:130 #: extensions/window-list/extension.js:92
msgid "Minimize" msgid "Minimize"
msgstr "Minimér" msgstr "Minimér"
#: extensions/window-list/extension.js:136 #: extensions/window-list/extension.js:99
msgid "Unmaximize" msgid "Unmaximize"
msgstr "Afmaksimér" msgstr "Afmaksimér"
#: extensions/window-list/extension.js:137 #: extensions/window-list/extension.js:99
msgid "Maximize" msgid "Maximize"
msgstr "Maksimér" msgstr "Maksimér"
#: extensions/window-list/extension.js:420 #: extensions/window-list/extension.js:434
msgid "Minimize all" msgid "Minimize all"
msgstr "Minimér" msgstr "Minimér"
#: extensions/window-list/extension.js:428 #: extensions/window-list/extension.js:440
msgid "Unminimize all" msgid "Unminimize all"
msgstr "Afminimér alle" msgstr "Afminimér alle"
#: extensions/window-list/extension.js:436 #: extensions/window-list/extension.js:446
msgid "Maximize all" msgid "Maximize all"
msgstr "Maksimér alle" msgstr "Maksimér alle"
#: extensions/window-list/extension.js:445 #: extensions/window-list/extension.js:454
msgid "Unmaximize all" msgid "Unmaximize all"
msgstr "Afmaksimér alle" msgstr "Afmaksimér alle"
#: extensions/window-list/extension.js:454 #: extensions/window-list/extension.js:462
msgid "Close all" msgid "Close all"
msgstr "Luk alle" msgstr "Luk alle"
#: extensions/window-list/extension.js:678 #: extensions/window-list/extension.js:741
#: extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Arbejdsområdeindikator"
#: extensions/window-list/extension.js:842
msgid "Window List" msgid "Window List"
msgstr "Vinduesliste" msgstr "Vinduesliste"
@@ -316,10 +213,20 @@ msgstr ""
"Mulige værdier er “never” (aldrig), “auto” (automatisk) og “always” (altid)." "Mulige værdier er “never” (aldrig), “auto” (automatisk) og “always” (altid)."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:86
msgid "Show windows from all workspaces"
msgstr "Vis vinduer fra alle arbejdsområder"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr ""
"Om der skal vises vinduer fra alle arbejdsområder eller kun det nuværende."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors" msgid "Show the window list on all monitors"
msgstr "Vis vindueslisten på alle skærme" msgstr "Vis vindueslisten på alle skærme"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid "" msgid ""
"Whether to show the window list on all connected monitors or only on the " "Whether to show the window list on all connected monitors or only on the "
"primary one." "primary one."
@@ -327,35 +234,122 @@ msgstr ""
"Om vindueslisten skal vise på alle tilsluttede skærme, eller kun på den " "Om vindueslisten skal vise på alle tilsluttede skærme, eller kun på den "
"primære." "primære."
#: extensions/window-list/prefs.js:32 #: extensions/window-list/prefs.js:39
msgid "Window Grouping" msgid "Window Grouping"
msgstr "Vinduesgruppering" msgstr "Vinduesgruppering"
#: extensions/window-list/prefs.js:50 #: extensions/window-list/prefs.js:63
msgid "Never group windows" msgid "Never group windows"
msgstr "Gruppér aldrig vinduer" msgstr "Gruppér aldrig vinduer"
#: extensions/window-list/prefs.js:51 #: extensions/window-list/prefs.js:64
msgid "Group windows when space is limited" msgid "Group windows when space is limited"
msgstr "Gruppér vinduer når pladsen er begrænset" msgstr "Gruppér vinduer når pladsen er begrænset"
#: extensions/window-list/prefs.js:52 #: extensions/window-list/prefs.js:65
msgid "Always group windows" msgid "Always group windows"
msgstr "Gruppér altid vinduer" msgstr "Gruppér altid vinduer"
#: extensions/window-list/prefs.js:75 #: extensions/window-list/prefs.js:81
msgid "Show on all monitors" msgid "Show on all monitors"
msgstr "Vis på alle skærme" msgstr "Vis på alle skærme"
#: extensions/workspace-indicator/prefs.js:141 #: extensions/window-list/workspaceIndicator.js:249
#: extensions/workspace-indicator/extension.js:254
msgid "Workspace Indicator"
msgstr "Arbejdsområdeindikator"
#: extensions/workspace-indicator/prefs.js:33
msgid "Workspace Names" msgid "Workspace Names"
msgstr "Navne på arbejdsområder" msgstr "Navne på arbejdsområder"
#: extensions/workspace-indicator/prefs.js:157 #: extensions/workspace-indicator/prefs.js:66
msgid "Name"
msgstr "Navn"
#: extensions/workspace-indicator/prefs.js:198
#, javascript-format #, javascript-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Arbejdsområde %d" msgstr "Arbejdsområde %d"
#: extensions/workspace-indicator/prefs.js:207
msgid "Add Workspace"
msgstr "Tilføj arbejdsområde"
#~ msgid "Application"
#~ msgstr "Program"
#~ msgid "Create new matching rule"
#~ msgstr "Opret ny regel for match"
#~ msgid "Add"
#~ msgstr "Tilføj"
#~ msgid "Name"
#~ msgstr "Navn"
#~ msgid "Attach modal dialog to the parent window"
#~ msgstr "Tillæg modal-dialog til det overordnede vindue"
#~ msgid ""
#~ "This key overrides the key in org.gnome.mutter when running GNOME Shell."
#~ msgstr ""
#~ "Denne nøgle tilsidesætter nøglen i org.gnome.mutter når GNOME Shell kører."
#~ msgid "Arrangement of buttons on the titlebar"
#~ msgstr "Placeringen af knapper i titellinjen"
#~ msgid ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
#~ "running GNOME Shell."
#~ msgstr ""
#~ "Denne nøgle tilsidesætter nøglen i org.gnome.desktop.wm.preferences når "
#~ "GNOME Shell kører."
#~ msgid "Enable edge tiling when dropping windows on screen edges"
#~ msgstr "Aktivér kant-fliselægning når vinduer slippes på skærmkanter"
#~ msgid "Workspaces only on primary monitor"
#~ msgstr "Kun arbejdsområder på primær skærm"
#~ msgid "Delay focus changes in mouse mode until the pointer stops moving"
#~ msgstr ""
#~ "Forsink fokusændringer i musetilstand indtil pegeren holder op med at "
#~ "bevæge sig"
#~ msgid "Thumbnail only"
#~ msgstr "Kun miniaturebillede"
#~ msgid "Application icon only"
#~ msgstr "Kun programikon"
#~ msgid "Thumbnail and application icon"
#~ msgstr "Miniaturebillede og programikon"
#~ msgid "Present windows as"
#~ msgstr "Præsentér vindue som"
#~ msgid "Activities Overview"
#~ msgstr "Aktivitetsoversigt"
#~ msgid "Hello, world!"
#~ msgstr "Hej verden!"
#~ msgid "Alternative greeting text."
#~ msgstr "Alternativ velkomsttekst."
#~ msgid ""
#~ "If not empty, it contains the text that will be shown when clicking on "
#~ "the panel."
#~ msgstr ""
#~ "Hvis den ikke er tom, så indeholder den teksten, der vil blive vist når "
#~ "der klikkes på panelet."
#~ msgid "Message"
#~ msgstr "Besked"
#~ msgid ""
#~ "Example aims to show how to build well behaved extensions for the Shell "
#~ "and as such it has little functionality on its own.\n"
#~ "Nevertheless its possible to customize the greeting message."
#~ msgstr ""
#~ "Example sigter efter at vise, hvordan man bygger udvidelser til skallen, "
#~ "som opfører sig ordentligt, og har som sådan meget lidt selvstændig "
#~ "funktionalitet.\n"
#~ "Alligevel er det muligt at tilpasse velkomstbeskeden."
+166 -168
View File
@@ -2,18 +2,20 @@
# Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER # Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell-extensions package. # This file is distributed under the same license as the gnome-shell-extensions package.
# Mario Blättermann <mario.blaettermann@gmail.com>, 2011-2013, 2017. # Mario Blättermann <mario.blaettermann@gmail.com>, 2011-2013, 2017.
# Christian Kirbach <Christian.Kirbach@googlemail.com>, 2011, 2012. # Christian Kirbach <Christian.Kirbach@googlemail.com>, 2011, 2012, 2022.
# Benjamin Steinwender <b@stbe.at>, 2013. # Benjamin Steinwender <b@stbe.at>, 2013.
# Wolfgang Stöggl <c72578@yahoo.de>, 2014. # Wolfgang Stöggl <c72578@yahoo.de>, 2014.
# Paul Seyfert <pseyfert@mathphys.fsk.uni-heidelberg.de>, 2017. # Paul Seyfert <pseyfert@mathphys.fsk.uni-heidelberg.de>, 2017.
# Tim Sabsch <tim@sabsch.com>, 2019-2020.
# Philipp Kiemle <philipp.kiemle@gmail.com>, 2022.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n" "Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"shell&keywords=I18N+L10N&component=extensions\n" "issues\n"
"POT-Creation-Date: 2017-07-06 14:32+0000\n" "POT-Creation-Date: 2022-03-07 15:35+0000\n"
"PO-Revision-Date: 2017-07-07 21:43+0200\n" "PO-Revision-Date: 2022-03-10 22:26+0100\n"
"Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n" "Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
"Language-Team: Deutsch <gnome-de@gnome.org>\n" "Language-Team: Deutsch <gnome-de@gnome.org>\n"
"Language: de\n" "Language: de\n"
@@ -21,87 +23,30 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.0.2\n" "X-Generator: Poedit 3.0.1\n"
#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 #: data/gnome-classic.desktop.in:3
msgid "GNOME Classic" msgid "GNOME Classic"
msgstr "GNOME Classic" msgstr "GNOME Classic"
#: data/gnome-classic.desktop.in:4 #: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4
#: data/gnome-classic-xorg.desktop.in:4
msgid "This session logs you into GNOME Classic" msgid "This session logs you into GNOME Classic"
msgstr "Diese Sitzung meldet Sie in GNOME Classic an" msgstr "Diese Sitzung meldet Sie in GNOME Classic an"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:7 #: data/gnome-classic-wayland.desktop.in:3
msgid "Attach modal dialog to the parent window" msgid "GNOME Classic on Wayland"
msgstr "Einen modalen Dialog an das übergeordnete Fenster anhängen" msgstr "GNOME Classic unter Wayland"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:8 #: data/gnome-classic-xorg.desktop.in:3
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:25 msgid "GNOME Classic on Xorg"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:33 msgstr "GNOME Classic unter Xorg"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:41
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Dieser Schlüssel überschreibt den Schlüssel in »org.gnome.mutter«, wenn die "
"GNOME-Shell ausgeführt wird."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:16 #: extensions/apps-menu/extension.js:118
msgid "Arrangement of buttons on the titlebar"
msgstr "Anordnung von Knöpfen auf der Titelleiste"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:17
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"Dieser Schlüssel überschreibt den Schlüssel in »org.gnome.desktop.wm."
"preferences«, wenn die GNOME-Shell ausgeführt wird."
# identisch zum Schüssel in »gnome-shell«
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:24
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Größenanpassung aktivieren, wenn ein Fenster an die Bildschirmkante "
"verschoben wird"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:32
msgid "Workspaces only on primary monitor"
msgstr "Arbeitsflächen nur auf dem Primärmonitor"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:40
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr ""
"Fokuswechsel im Mausmodus verzögern, bis sich der Zeiger nicht mehr bewegt."
#: extensions/alternate-tab/prefs.js:20
msgid "Thumbnail only"
msgstr "Nur Vorschaubild"
#: extensions/alternate-tab/prefs.js:21
msgid "Application icon only"
msgstr "Nur Anwendungssymbol"
#: extensions/alternate-tab/prefs.js:22
msgid "Thumbnail and application icon"
msgstr "Vorschaubild und Anwendungssymbol"
#: extensions/alternate-tab/prefs.js:38
msgid "Present windows as"
msgstr "Fenster darstellen als"
#: extensions/alternate-tab/prefs.js:69
msgid "Show only windows in the current workspace"
msgstr "Nur Fenster der aktuellen Arbeitsfläche anzeigen"
#: extensions/apps-menu/extension.js:41
msgid "Activities Overview"
msgstr "Aktivitäten-Übersicht"
#: extensions/apps-menu/extension.js:141
msgid "Favorites" msgid "Favorites"
msgstr "Favoriten" msgstr "Favoriten"
#: extensions/apps-menu/extension.js:436 #: extensions/apps-menu/extension.js:379
msgid "Applications" msgid "Applications"
msgstr "Anwendungen" msgstr "Anwendungen"
@@ -118,72 +63,29 @@ msgstr ""
"Datei) enthält, gefolgt von einem Doppelpunkt und der Nummer der " "Datei) enthält, gefolgt von einem Doppelpunkt und der Nummer der "
"Arbeitsfläche" "Arbeitsfläche"
#: extensions/auto-move-windows/prefs.js:60 #: extensions/auto-move-windows/prefs.js:152
msgid "Application" msgid "Workspace Rules"
msgstr "Anwendung" msgstr "Arbeitsfläche-Regeln"
#: extensions/auto-move-windows/prefs.js:69 #: extensions/auto-move-windows/prefs.js:306
#: extensions/auto-move-windows/prefs.js:127
msgid "Workspace"
msgstr "Arbeitsfläche "
#: extensions/auto-move-windows/prefs.js:85
msgid "Add Rule" msgid "Add Rule"
msgstr "Regel hinzufügen" msgstr "Regel hinzufügen"
#: extensions/auto-move-windows/prefs.js:106 #. TRANSLATORS: %s is the filesystem name
msgid "Create new matching rule" #: extensions/drive-menu/extension.js:126
msgstr "Neue Übereinstimmungsregel erstellen" #: extensions/places-menu/placeDisplay.js:210
#: extensions/auto-move-windows/prefs.js:111
msgid "Add"
msgstr "Hinzufügen"
#: extensions/drive-menu/extension.js:106
#, javascript-format #, javascript-format
msgid "Ejecting drive “%s” failed:" msgid "Ejecting drive “%s” failed:"
msgstr "Auswerfen von Laufwerk »%s« schlug fehl:" msgstr "Auswerfen von Laufwerk »%s« schlug fehl:"
#: extensions/drive-menu/extension.js:124 #: extensions/drive-menu/extension.js:145
msgid "Removable devices" msgid "Removable devices"
msgstr "Wechseldatenträger" msgstr "Wechseldatenträger"
#: extensions/drive-menu/extension.js:149 #: extensions/drive-menu/extension.js:167
msgid "Open Files" msgid "Open Files"
msgstr "Dateien öffnen" msgstr "Dateien öffnen"
#: extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "Hallo Welt!"
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:5
msgid "Alternative greeting text."
msgstr "Alternativer Begrüßungstext."
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:6
msgid ""
"If not empty, it contains the text that will be shown when clicking on the "
"panel."
msgstr ""
"Falls nicht leer, ist dies der Text, der beim Anklicken des Panels angezeigt "
"wird."
#: extensions/example/prefs.js:30
msgid "Message"
msgstr "Nachricht"
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: extensions/example/prefs.js:43
msgid ""
"Example aims to show how to build well behaved extensions for the Shell and "
"as such it has little functionality on its own.\n"
"Nevertheless its possible to customize the greeting message."
msgstr ""
"Das Beispiel soll zeigen, wie sich korrekt verhaltende Erweiterungen für die "
"Shell erstellt werden. Es enthält grundlegende Funktionalität.\n"
"Es ist möglich, die Begrüßungsnachricht zu ändern."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows" msgid "Use more screen for windows"
msgstr "Mehr Bildschirmbereich für Fenster verwenden" msgstr "Mehr Bildschirmbereich für Fenster verwenden"
@@ -214,31 +116,31 @@ msgstr ""
"Vorschaubild platziert und damit die Voreinstellung der Shell übergangen. " "Vorschaubild platziert und damit die Voreinstellung der Shell übergangen. "
"Eine Änderungseinstellung tritt erst mit einem Neustart der Shell in Kraft." "Eine Änderungseinstellung tritt erst mit einem Neustart der Shell in Kraft."
#: extensions/places-menu/extension.js:78 #: extensions/places-menu/extension.js:94
#: extensions/places-menu/extension.js:81 #: extensions/places-menu/extension.js:97
msgid "Places" msgid "Places"
msgstr "Orte" msgstr "Orte"
#: extensions/places-menu/placeDisplay.js:65 #: extensions/places-menu/placeDisplay.js:49
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Datenträger für »%s« konnte nicht eingebunden werden"
#: extensions/places-menu/placeDisplay.js:78
#, javascript-format #, javascript-format
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "Starten von »%s« fehlgeschlagen" msgstr "Starten von »%s« fehlgeschlagen"
#: extensions/places-menu/placeDisplay.js:137 #: extensions/places-menu/placeDisplay.js:64
#: extensions/places-menu/placeDisplay.js:160 #, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Datenträger für »%s« konnte nicht eingebunden werden"
#: extensions/places-menu/placeDisplay.js:125
#: extensions/places-menu/placeDisplay.js:148
msgid "Computer" msgid "Computer"
msgstr "Rechner" msgstr "Rechner"
#: extensions/places-menu/placeDisplay.js:303 #: extensions/places-menu/placeDisplay.js:336
msgid "Home" msgid "Home"
msgstr "Persönlicher Ordner" msgstr "Persönlicher Ordner"
#: extensions/places-menu/placeDisplay.js:347 #: extensions/places-menu/placeDisplay.js:381
msgid "Browse Network" msgid "Browse Network"
msgstr "Netzwerk durchsuchen" msgstr "Netzwerk durchsuchen"
@@ -260,52 +162,47 @@ msgstr ""
"Der Name des Themas, welches aus ~/.themes/name/gnome-shell geladen werden " "Der Name des Themas, welches aus ~/.themes/name/gnome-shell geladen werden "
"soll" "soll"
#: extensions/window-list/extension.js:110 #: extensions/window-list/extension.js:72
msgid "Close" msgid "Close"
msgstr "Schließen" msgstr "Schließen"
#: extensions/window-list/extension.js:129 #: extensions/window-list/extension.js:92
msgid "Unminimize" msgid "Unminimize"
msgstr "Minimieren rückgängig" msgstr "Minimieren rückgängig"
#: extensions/window-list/extension.js:130 #: extensions/window-list/extension.js:92
msgid "Minimize" msgid "Minimize"
msgstr "Minimieren" msgstr "Minimieren"
#: extensions/window-list/extension.js:136 #: extensions/window-list/extension.js:99
msgid "Unmaximize" msgid "Unmaximize"
msgstr "Maximieren rückgängig" msgstr "Maximieren rückgängig"
#: extensions/window-list/extension.js:137 #: extensions/window-list/extension.js:99
msgid "Maximize" msgid "Maximize"
msgstr "Maximieren" msgstr "Maximieren"
#: extensions/window-list/extension.js:420 #: extensions/window-list/extension.js:441
msgid "Minimize all" msgid "Minimize all"
msgstr "Alle minimieren" msgstr "Alle minimieren"
#: extensions/window-list/extension.js:428 #: extensions/window-list/extension.js:447
msgid "Unminimize all" msgid "Unminimize all"
msgstr "Alle minimieren rückgängig" msgstr "Alle minimieren rückgängig"
#: extensions/window-list/extension.js:436 #: extensions/window-list/extension.js:453
msgid "Maximize all" msgid "Maximize all"
msgstr "Alle maximieren" msgstr "Alle maximieren"
#: extensions/window-list/extension.js:445 #: extensions/window-list/extension.js:461
msgid "Unmaximize all" msgid "Unmaximize all"
msgstr "Alle maximieren rückgängig" msgstr "Alle maximieren rückgängig"
#: extensions/window-list/extension.js:454 #: extensions/window-list/extension.js:469
msgid "Close all" msgid "Close all"
msgstr "Alle schließen" msgstr "Alle schließen"
#: extensions/window-list/extension.js:678 #: extensions/window-list/extension.js:753
#: extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Arbeitsflächenindikator"
#: extensions/window-list/extension.js:842
msgid "Window List" msgid "Window List"
msgstr "Fensterliste" msgstr "Fensterliste"
@@ -323,10 +220,21 @@ msgstr ""
"»always« (immer)." "»always« (immer)."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:79
msgid "Show windows from all workspaces"
msgstr "Fenster von allen Arbeitsflächen anzeigen"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr ""
"Legt fest, ob Fenster von allen oder nur der aktuellen Arbeitsflächen "
"angezeigt werden."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors" msgid "Show the window list on all monitors"
msgstr "Die Fensterliste auf allen Bildschirmen anzeigen" msgstr "Die Fensterliste auf allen Bildschirmen anzeigen"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid "" msgid ""
"Whether to show the window list on all connected monitors or only on the " "Whether to show the window list on all connected monitors or only on the "
"primary one." "primary one."
@@ -334,35 +242,125 @@ msgstr ""
"Legt fest, ob die Fensterliste auf allen angeschlossenen Bildschirmen " "Legt fest, ob die Fensterliste auf allen angeschlossenen Bildschirmen "
"angezeigt wird oder nur auf dem Primären." "angezeigt wird oder nur auf dem Primären."
#: extensions/window-list/prefs.js:32 #: extensions/window-list/prefs.js:35
msgid "Window Grouping" msgid "Window Grouping"
msgstr "Fenstergruppierung" msgstr "Fenstergruppierung"
#: extensions/window-list/prefs.js:50 #: extensions/window-list/prefs.js:40
msgid "Never group windows" msgid "Never group windows"
msgstr "Fenster niemals gruppieren" msgstr "Fenster niemals gruppieren"
#: extensions/window-list/prefs.js:51 #: extensions/window-list/prefs.js:41
msgid "Group windows when space is limited" msgid "Group windows when space is limited"
msgstr "Fenster bei Platzmangel gruppieren" msgstr "Fenster bei Platzmangel gruppieren"
#: extensions/window-list/prefs.js:52 #: extensions/window-list/prefs.js:42
msgid "Always group windows" msgid "Always group windows"
msgstr "Fenster immer gruppieren" msgstr "Fenster immer gruppieren"
#: extensions/window-list/prefs.js:75 #: extensions/window-list/prefs.js:66
msgid "Show on all monitors" msgid "Show on all monitors"
msgstr "Auf allen Bildschirmen anzeigen" msgstr "Auf allen Bildschirmen anzeigen"
#: extensions/workspace-indicator/prefs.js:141 #: extensions/window-list/workspaceIndicator.js:261
msgid "Workspace Names" #: extensions/workspace-indicator/extension.js:266
msgstr "Namen der Arbeitsflächen" msgid "Workspace Indicator"
msgstr "Arbeitsflächenindikator"
#: extensions/workspace-indicator/prefs.js:157 #: extensions/workspace-indicator/prefs.js:62
msgid "Name"
msgstr "Name"
#: extensions/workspace-indicator/prefs.js:198
#, javascript-format #, javascript-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Arbeitsfläche %d" msgstr "Arbeitsfläche %d"
#: extensions/workspace-indicator/prefs.js:129
msgid "Workspace Names"
msgstr "Namen der Arbeitsflächen"
#: extensions/workspace-indicator/prefs.js:255
msgid "Add Workspace"
msgstr "Arbeitsfläche hinzufügen"
#~ msgid "Application"
#~ msgstr "Anwendung"
#~ msgid "Create new matching rule"
#~ msgstr "Neue Übereinstimmungsregel erstellen"
#~ msgid "Add"
#~ msgstr "Hinzufügen"
#~ msgid "Name"
#~ msgstr "Name"
#~ msgid "Attach modal dialog to the parent window"
#~ msgstr "Einen modalen Dialog an das übergeordnete Fenster anhängen"
#~ msgid ""
#~ "This key overrides the key in org.gnome.mutter when running GNOME Shell."
#~ msgstr ""
#~ "Dieser Schlüssel überschreibt den Schlüssel in »org.gnome.mutter«, wenn "
#~ "die GNOME-Shell ausgeführt wird."
#~ msgid "Arrangement of buttons on the titlebar"
#~ msgstr "Anordnung von Knöpfen auf der Titelleiste"
#~ msgid ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
#~ "running GNOME Shell."
#~ msgstr ""
#~ "Dieser Schlüssel überschreibt den Schlüssel in »org.gnome.desktop.wm."
#~ "preferences«, wenn die GNOME-Shell ausgeführt wird."
# identisch zum Schüssel in »gnome-shell«
#~ msgid "Enable edge tiling when dropping windows on screen edges"
#~ msgstr ""
#~ "Größenanpassung aktivieren, wenn ein Fenster an die Bildschirmkante "
#~ "verschoben wird"
#~ msgid "Workspaces only on primary monitor"
#~ msgstr "Arbeitsflächen nur auf dem Primärmonitor"
#~ msgid "Delay focus changes in mouse mode until the pointer stops moving"
#~ msgstr ""
#~ "Fokuswechsel im Mausmodus verzögern, bis sich der Zeiger nicht mehr "
#~ "bewegt."
#~ msgid "Thumbnail only"
#~ msgstr "Nur Vorschaubild"
#~ msgid "Application icon only"
#~ msgstr "Nur Anwendungssymbol"
#~ msgid "Thumbnail and application icon"
#~ msgstr "Vorschaubild und Anwendungssymbol"
#~ msgid "Present windows as"
#~ msgstr "Fenster darstellen als"
#~ msgid "Activities Overview"
#~ msgstr "Aktivitäten-Übersicht"
#~ msgid "Hello, world!"
#~ msgstr "Hallo Welt!"
#~ msgid "Alternative greeting text."
#~ msgstr "Alternativer Begrüßungstext."
#~ msgid ""
#~ "If not empty, it contains the text that will be shown when clicking on "
#~ "the panel."
#~ msgstr ""
#~ "Falls nicht leer, ist dies der Text, der beim Anklicken des Panels "
#~ "angezeigt wird."
#~ msgid "Message"
#~ msgstr "Nachricht"
#~ msgid ""
#~ "Example aims to show how to build well behaved extensions for the Shell "
#~ "and as such it has little functionality on its own.\n"
#~ "Nevertheless its possible to customize the greeting message."
#~ msgstr ""
#~ "Das Beispiel soll zeigen, wie sich korrekt verhaltende Erweiterungen für "
#~ "die Shell erstellt werden. Es enthält grundlegende Funktionalität.\n"
#~ "Es ist möglich, die Begrüßungsnachricht zu ändern."
+157 -171
View File
@@ -5,22 +5,23 @@
# Ιωάννης Ζαμπούκας <ioza1964@yahoo.gr>, 2011. # Ιωάννης Ζαμπούκας <ioza1964@yahoo.gr>, 2011.
# Dimitris Spingos (Δημήτρης Σπίγγος) <dmtrs32@gmail.com>, 2013, 2015. # Dimitris Spingos (Δημήτρης Σπίγγος) <dmtrs32@gmail.com>, 2013, 2015.
# Vangelis Skarmoutsos <skarmoutsosv@gmail.com>, 2013. # Vangelis Skarmoutsos <skarmoutsosv@gmail.com>, 2013.
# Efstathios Iosifidis <iosifidis@opensuse.org>, 2013. # Efstathios Iosifidis <iosifidis@opensuse.org>, 2013-2019.
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n" "Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"shell&keywords=I18N+L10N&component=extensions\n" "issues\n"
"POT-Creation-Date: 2017-08-11 01:33+0000\n" "POT-Creation-Date: 2020-05-28 00:55+0000\n"
"PO-Revision-Date: 2017-09-09 14:10+0200\n" "PO-Revision-Date: 2020-07-14 00:40+0300\n"
"Last-Translator: Efstathios Iosifidis <iosifidis@opensuse.org>\n" "Last-Translator: Efstathios Iosifidis <eiosifidis@gnome.org>\n"
"Language-Team: team@lists.gnome.gr\n" "Language-Team: Greek, Modern (1453-) <gnome-el-list@gnome.org>\n"
"Language: el\n" "Language: el\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.5.7\n" "X-Generator: Poedit 1.8.7.1\n"
"X-Project-Style: gnome\n" "X-Project-Style: gnome\n"
#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3
@@ -31,77 +32,11 @@ msgstr "GNOME Classic"
msgid "This session logs you into GNOME Classic" msgid "This session logs you into GNOME Classic"
msgstr "Αυτή η συνεδρία σας συνδέει στο GNOME Classic" msgstr "Αυτή η συνεδρία σας συνδέει στο GNOME Classic"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:7 #: extensions/apps-menu/extension.js:113
msgid "Attach modal dialog to the parent window"
msgstr "Προσάρτηση αποκλειστικού διαλόγου στο γονικό παράθυρο"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:8
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:25
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:33
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:41
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Αυτό το κλειδί επικαλύπτει το κλειδί στο org.gnome.mutter όταν εκτελείται το "
"GNOME Shell."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:16
msgid "Arrangement of buttons on the titlebar"
msgstr "Διάταξη κουμπιών της γραμμής τίτλου"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:17
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"Αυτό το κλειδί επικαλύπτει το κλειδί στο org.gnome.mutter όταν εκτελείται το "
"GNOME Shell."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:24
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Ενεργοποίηση προσκόλλησης στην άκρη, όταν αφήνονται παράθυρα στα άκρα της "
"οθόνης"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:32
msgid "Workspaces only on primary monitor"
msgstr "Χώροι εργασίας μόνο στην κύρια οθόνη"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:40
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr ""
"Καθυστέρηση εστίασης αλλαγών στην κατάσταση ποντικιού μέχρι να σταματήσει να "
"κινείται ο δείκτης"
#: extensions/alternate-tab/prefs.js:20
msgid "Thumbnail only"
msgstr "Μόνο μικρογραφία"
#: extensions/alternate-tab/prefs.js:21
msgid "Application icon only"
msgstr "Μόνο εικονίδιο εφαρμογής"
#: extensions/alternate-tab/prefs.js:22
msgid "Thumbnail and application icon"
msgstr "Μικρογραφία και εικονίδιο εφαρμογής"
#: extensions/alternate-tab/prefs.js:38
msgid "Present windows as"
msgstr "Παρουσίαση παραθύρων ως"
#: extensions/alternate-tab/prefs.js:69
msgid "Show only windows in the current workspace"
msgstr "Εμφάνιση μόνο των παραθύρων του τρέχοντος χώρου εργασίας"
#: extensions/apps-menu/extension.js:41
msgid "Activities Overview"
msgstr "Επισκόπηση δραστηριοτήτων"
#: extensions/apps-menu/extension.js:141
msgid "Favorites" msgid "Favorites"
msgstr "Αγαπημένα" msgstr "Αγαπημένα"
#: extensions/apps-menu/extension.js:436 #: extensions/apps-menu/extension.js:369
msgid "Applications" msgid "Applications"
msgstr "Εφαρμογές" msgstr "Εφαρμογές"
@@ -118,74 +53,29 @@ msgstr ""
"(όνομα αρχείου επιφάνειας εργασίας), ακολουθούμενη από άνω-κάτω τελεία και " "(όνομα αρχείου επιφάνειας εργασίας), ακολουθούμενη από άνω-κάτω τελεία και "
"τον αριθμό του χώρου εργασίας" "τον αριθμό του χώρου εργασίας"
#: extensions/auto-move-windows/prefs.js:60 #: extensions/auto-move-windows/prefs.js:35
msgid "Application" msgid "Workspace Rules"
msgstr "Εφαρμογή" msgstr "Κανόνες χώρων εργασίας"
#: extensions/auto-move-windows/prefs.js:69 #: extensions/auto-move-windows/prefs.js:243
#: extensions/auto-move-windows/prefs.js:127
msgid "Workspace"
msgstr "Χώρος εργασίας"
#: extensions/auto-move-windows/prefs.js:85
msgid "Add Rule" msgid "Add Rule"
msgstr "Προσθήκη κανόνα" msgstr "Προσθήκη κανόνα"
#: extensions/auto-move-windows/prefs.js:106
msgid "Create new matching rule"
msgstr "Δημιουργία νέου κανόνα αντιστοίχισης"
#: extensions/auto-move-windows/prefs.js:111
msgid "Add"
msgstr "Προσθήκη"
#. TRANSLATORS: %s is the filesystem name #. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:107 #: extensions/drive-menu/extension.js:112
#: extensions/places-menu/placeDisplay.js:233
#, javascript-format
msgid "Ejecting drive “%s” failed:" msgid "Ejecting drive “%s” failed:"
msgstr "Αποτυχία εξαγωγής του δίσκου «%s»:" msgstr "Αποτυχία εξαγωγής του δίσκου «%s»:"
#: extensions/drive-menu/extension.js:125 #: extensions/drive-menu/extension.js:128
msgid "Removable devices" msgid "Removable devices"
msgstr "Αφαιρούμενες συσκευές" msgstr "Αφαιρούμενες συσκευές"
#: extensions/drive-menu/extension.js:150 #: extensions/drive-menu/extension.js:155
#| msgid "Open File"
msgid "Open Files" msgid "Open Files"
msgstr "Άνοιγμα αρχείων" msgstr "Άνοιγμα αρχείων"
#: extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "Γεια σου, κόσμε!"
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:5
msgid "Alternative greeting text."
msgstr "Εναλλακτικό κείμενο χαιρετισμού."
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:6
msgid ""
"If not empty, it contains the text that will be shown when clicking on the "
"panel."
msgstr ""
"Αν δεν είναι κενό, περιέχει το κείμενο που θα εμφανιστεί όταν γίνεται κλικ "
"στον πίνακα εφαρμογών."
#: extensions/example/prefs.js:30
msgid "Message"
msgstr "Μήνυμα"
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: extensions/example/prefs.js:43
msgid ""
"Example aims to show how to build well behaved extensions for the Shell and "
"as such it has little functionality on its own.\n"
"Nevertheless its possible to customize the greeting message."
msgstr ""
"Το παράδειγμα στοχεύει να δείξει πώς δημιουργούμε επεκτάσεις που "
"συμπεριφέρονται σωστά στο κέλυφος και ως τέτοιο έχει μικρή λειτουργικότητα "
"από μόνο του.\n"
"Παρ' όλα αυτά είναι δυνατό να προσαρμόσετε το μήνυμα χαιρετισμού."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows" msgid "Use more screen for windows"
msgstr "Χρησιμοποιήστε περισσότερη οθόνη για τα παράθυρα" msgstr "Χρησιμοποιήστε περισσότερη οθόνη για τα παράθυρα"
@@ -216,30 +106,31 @@ msgstr ""
"στο κάτω μέρος. Η αλλαγή αυτής της ρύθμισης απαιτεί επανεκκίνηση του " "στο κάτω μέρος. Η αλλαγή αυτής της ρύθμισης απαιτεί επανεκκίνηση του "
"κελύφους για να υπάρξει κάποιο αποτέλεσμα." "κελύφους για να υπάρξει κάποιο αποτέλεσμα."
#: extensions/places-menu/extension.js:78 #: extensions/places-menu/extension.js:89
#: extensions/places-menu/extension.js:81 #: extensions/places-menu/extension.js:93
msgid "Places" msgid "Places"
msgstr "Τοποθεσίες" msgstr "Τοποθεσίες"
#: extensions/places-menu/placeDisplay.js:65 #: extensions/places-menu/placeDisplay.js:46
#| msgid "Failed to launch “%s”" #, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Αποτυχία προσάρτησης τόμου για «%s»"
#: extensions/places-menu/placeDisplay.js:78
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "Αποτυχία εκκίνησης «%s»" msgstr "Αποτυχία εκκίνησης «%s»"
#: extensions/places-menu/placeDisplay.js:137 #: extensions/places-menu/placeDisplay.js:61
#: extensions/places-menu/placeDisplay.js:160 #, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Αποτυχία προσάρτησης τόμου για «%s»"
#: extensions/places-menu/placeDisplay.js:148
#: extensions/places-menu/placeDisplay.js:171
msgid "Computer" msgid "Computer"
msgstr "Υπολογιστής" msgstr "Υπολογιστής"
#: extensions/places-menu/placeDisplay.js:303 #: extensions/places-menu/placeDisplay.js:359
msgid "Home" msgid "Home"
msgstr "Προσωπικός φάκελος" msgstr "Προσωπικός φάκελος"
#: extensions/places-menu/placeDisplay.js:347 #: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network" msgid "Browse Network"
msgstr "Περιήγηση δικτύου" msgstr "Περιήγηση δικτύου"
@@ -248,7 +139,6 @@ msgid "Cycle Screenshot Sizes"
msgstr "Περιδιάβαση τα μεγέθη των στιγμιοτύπων" msgstr "Περιδιάβαση τα μεγέθη των στιγμιοτύπων"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11 #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
#| msgid "Cycle Screenshot Sizes"
msgid "Cycle Screenshot Sizes Backward" msgid "Cycle Screenshot Sizes Backward"
msgstr "Μεγέθη κυκλικών στιγμιοτύπων προς τα πίσω" msgstr "Μεγέθη κυκλικών στιγμιοτύπων προς τα πίσω"
@@ -261,52 +151,47 @@ msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "" msgstr ""
"Το όνομα του θέματος που θα φορτωθεί από το ~ /.themes/name/gnome-shell" "Το όνομα του θέματος που θα φορτωθεί από το ~ /.themes/name/gnome-shell"
#: extensions/window-list/extension.js:110 #: extensions/window-list/extension.js:98
msgid "Close" msgid "Close"
msgstr "Κλείσιμο" msgstr "Κλείσιμο"
#: extensions/window-list/extension.js:129 #: extensions/window-list/extension.js:118
msgid "Unminimize" msgid "Unminimize"
msgstr "Αποελαχιστοποίηση" msgstr "Αποελαχιστοποίηση"
#: extensions/window-list/extension.js:130 #: extensions/window-list/extension.js:118
msgid "Minimize" msgid "Minimize"
msgstr "Ελαχιστοποίηση" msgstr "Ελαχιστοποίηση"
#: extensions/window-list/extension.js:136 #: extensions/window-list/extension.js:125
msgid "Unmaximize" msgid "Unmaximize"
msgstr "Απομεγιστοποίηση" msgstr "Απομεγιστοποίηση"
#: extensions/window-list/extension.js:137 #: extensions/window-list/extension.js:125
msgid "Maximize" msgid "Maximize"
msgstr "Μεγιστοποίηση" msgstr "Μεγιστοποίηση"
#: extensions/window-list/extension.js:420 #: extensions/window-list/extension.js:428
msgid "Minimize all" msgid "Minimize all"
msgstr "Ελαχιστοποίηση όλων" msgstr "Ελαχιστοποίηση όλων"
#: extensions/window-list/extension.js:428 #: extensions/window-list/extension.js:434
msgid "Unminimize all" msgid "Unminimize all"
msgstr "Αποελαχιστοποίηση όλων" msgstr "Αποελαχιστοποίηση όλων"
#: extensions/window-list/extension.js:436 #: extensions/window-list/extension.js:440
msgid "Maximize all" msgid "Maximize all"
msgstr "Μεγιστοποίηση όλων" msgstr "Μεγιστοποίηση όλων"
#: extensions/window-list/extension.js:445 #: extensions/window-list/extension.js:448
msgid "Unmaximize all" msgid "Unmaximize all"
msgstr "Απομεγιστοποίηση όλων" msgstr "Απομεγιστοποίηση όλων"
#: extensions/window-list/extension.js:454 #: extensions/window-list/extension.js:456
msgid "Close all" msgid "Close all"
msgstr "Κλείσιμο όλων" msgstr "Κλείσιμο όλων"
#: extensions/window-list/extension.js:678 #: extensions/window-list/extension.js:734
#: extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Δείκτης χώρου εργασίας"
#: extensions/window-list/extension.js:842
msgid "Window List" msgid "Window List"
msgstr "Λίστα παραθύρου" msgstr "Λίστα παραθύρου"
@@ -324,10 +209,20 @@ msgstr ""
"«always» (πάντα)." "«always» (πάντα)."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:100
msgid "Show windows from all workspaces"
msgstr "Εμφάνιση των παραθύρων από όλους τους χώρους εργασίας"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr ""
"Αν θα εμφανίζονται παράθυρα όλων των χώρων εργασίας ή μόνο του τρέχοντα."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors" msgid "Show the window list on all monitors"
msgstr "Να εμφανίζεται ο κατάλογος παραθύρων σε όλες τις οθόνες" msgstr "Να εμφανίζεται ο κατάλογος παραθύρων σε όλες τις οθόνες"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid "" msgid ""
"Whether to show the window list on all connected monitors or only on the " "Whether to show the window list on all connected monitors or only on the "
"primary one." "primary one."
@@ -335,38 +230,129 @@ msgstr ""
"Αν θα εμφανίζεται ο κατάλογος παραθύρων όλων των συνδεμένων οθονών ή μόνο " "Αν θα εμφανίζεται ο κατάλογος παραθύρων όλων των συνδεμένων οθονών ή μόνο "
"της κύριας οθόνης." "της κύριας οθόνης."
#: extensions/window-list/prefs.js:32 #: extensions/window-list/prefs.js:29
msgid "Window Grouping" msgid "Window Grouping"
msgstr "Ομαδοποίηση παραθύρου" msgstr "Ομαδοποίηση παραθύρου"
#: extensions/window-list/prefs.js:50 #: extensions/window-list/prefs.js:58
msgid "Never group windows" msgid "Never group windows"
msgstr "Να μη γίνεται ποτέ ομαδοποίηση παραθύρων" msgstr "Να μη γίνεται ποτέ ομαδοποίηση παραθύρων"
#: extensions/window-list/prefs.js:51 #: extensions/window-list/prefs.js:59
msgid "Group windows when space is limited" msgid "Group windows when space is limited"
msgstr "Ομαδοποίηση παραθύρων όταν ο χώρος είναι περιορισμένος" msgstr "Ομαδοποίηση παραθύρων όταν ο χώρος είναι περιορισμένος"
#: extensions/window-list/prefs.js:52 #: extensions/window-list/prefs.js:60
msgid "Always group windows" msgid "Always group windows"
msgstr "Να γίνεται πάντα ομαδοποίηση παραθύρων" msgstr "Να γίνεται πάντα ομαδοποίηση παραθύρων"
#: extensions/window-list/prefs.js:75 #: extensions/window-list/prefs.js:94
msgid "Show on all monitors" msgid "Show on all monitors"
msgstr "Να εμφανίζεται σε όλες τις οθόνες" msgstr "Να εμφανίζεται σε όλες τις οθόνες"
#: extensions/workspace-indicator/prefs.js:141 #: extensions/window-list/workspaceIndicator.js:207
#: extensions/workspace-indicator/extension.js:213
msgid "Workspace Indicator"
msgstr "Δείκτης χώρου εργασίας"
#: extensions/workspace-indicator/prefs.js:34
msgid "Workspace Names" msgid "Workspace Names"
msgstr "Ονόματα χώρων εργασίας:" msgstr "Ονόματα χώρων εργασίας:"
#: extensions/workspace-indicator/prefs.js:157 #: extensions/workspace-indicator/prefs.js:67
msgid "Name" #, javascript-format
msgstr "Όνομα"
#: extensions/workspace-indicator/prefs.js:198
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Χώρος εργασίας %d" msgstr "Χώρος εργασίας %d"
#: extensions/workspace-indicator/prefs.js:218
msgid "Add Workspace"
msgstr "Προσθήκη χώρου εργασίας"
#~ msgid "Application"
#~ msgstr "Εφαρμογή"
#~ msgid "Create new matching rule"
#~ msgstr "Δημιουργία νέου κανόνα αντιστοίχισης"
#~ msgid "Add"
#~ msgstr "Προσθήκη"
#~ msgid "Name"
#~ msgstr "Όνομα"
#~ msgid "Attach modal dialog to the parent window"
#~ msgstr "Προσάρτηση αποκλειστικού διαλόγου στο γονικό παράθυρο"
#~ msgid ""
#~ "This key overrides the key in org.gnome.mutter when running GNOME Shell."
#~ msgstr ""
#~ "Αυτό το κλειδί επικαλύπτει το κλειδί στο org.gnome.mutter όταν εκτελείται "
#~ "το GNOME Shell."
#~ msgid "Arrangement of buttons on the titlebar"
#~ msgstr "Διάταξη κουμπιών της γραμμής τίτλου"
#~ msgid ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
#~ "running GNOME Shell."
#~ msgstr ""
#~ "Αυτό το κλειδί επικαλύπτει το κλειδί στο org.gnome.mutter όταν εκτελείται "
#~ "το GNOME Shell."
#~ msgid "Enable edge tiling when dropping windows on screen edges"
#~ msgstr ""
#~ "Ενεργοποίηση προσκόλλησης στην άκρη, όταν αφήνονται παράθυρα στα άκρα της "
#~ "οθόνης"
#~ msgid "Workspaces only on primary monitor"
#~ msgstr "Χώροι εργασίας μόνο στην κύρια οθόνη"
#~ msgid "Delay focus changes in mouse mode until the pointer stops moving"
#~ msgstr ""
#~ "Καθυστέρηση εστίασης αλλαγών στην κατάσταση ποντικιού μέχρι να σταματήσει "
#~ "να κινείται ο δείκτης"
#~ msgid "Thumbnail only"
#~ msgstr "Μόνο μικρογραφία"
#~ msgid "Application icon only"
#~ msgstr "Μόνο εικονίδιο εφαρμογής"
#~ msgid "Thumbnail and application icon"
#~ msgstr "Μικρογραφία και εικονίδιο εφαρμογής"
#~ msgid "Present windows as"
#~ msgstr "Παρουσίαση παραθύρων ως"
#~ msgid "Activities Overview"
#~ msgstr "Επισκόπηση δραστηριοτήτων"
#~ msgid "Hello, world!"
#~ msgstr "Γεια σου, κόσμε!"
#~ msgid "Alternative greeting text."
#~ msgstr "Εναλλακτικό κείμενο χαιρετισμού."
#~ msgid ""
#~ "If not empty, it contains the text that will be shown when clicking on "
#~ "the panel."
#~ msgstr ""
#~ "Αν δεν είναι κενό, περιέχει το κείμενο που θα εμφανιστεί όταν γίνεται "
#~ "κλικ στον πίνακα εφαρμογών."
#~ msgid "Message"
#~ msgstr "Μήνυμα"
#~ msgid ""
#~ "Example aims to show how to build well behaved extensions for the Shell "
#~ "and as such it has little functionality on its own.\n"
#~ "Nevertheless its possible to customize the greeting message."
#~ msgstr ""
#~ "Το παράδειγμα στοχεύει να δείξει πώς δημιουργούμε επεκτάσεις που "
#~ "συμπεριφέρονται σωστά στο κέλυφος και ως τέτοιο έχει μικρή "
#~ "λειτουργικότητα από μόνο του.\n"
#~ "Παρ' όλα αυτά είναι δυνατό να προσαρμόσετε το μήνυμα χαιρετισμού."
#~ msgid "CPU" #~ msgid "CPU"
#~ msgstr "CPU" #~ msgstr "CPU"
+151 -172
View File
@@ -4,21 +4,23 @@
# Bruce Cowan <bruce@bcowan.eu>, 2011, 2018. # Bruce Cowan <bruce@bcowan.eu>, 2011, 2018.
# Chris Leonard <cjlhomeaddress@gmail.com>, 2012. # Chris Leonard <cjlhomeaddress@gmail.com>, 2012.
# Philip Withnall <philip@tecnocode.co.uk>, 2014. # Philip Withnall <philip@tecnocode.co.uk>, 2014.
# Zander Brown <zbrown@gnome.org>, 2019-2020.
#
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell-extensions\n" "Project-Id-Version: gnome-shell-extensions\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"issues\n" "issues\n"
"POT-Creation-Date: 2018-02-20 23:07+0000\n" "POT-Creation-Date: 2020-05-28 00:55+0000\n"
"PO-Revision-Date: 2018-03-10 18:03+0000\n" "PO-Revision-Date: 2020-08-24 23:05+0100\n"
"Last-Translator: Bruce Cowan <bruce@bcowan.eu>\n" "Last-Translator: Zander Brown <zbrown@gnome.org>\n"
"Language-Team: Sugar Labs\n" "Language-Team: English - United Kingdom <en_GB@li.org>\n"
"Language: en_GB\n" "Language: en_GB\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.0.6\n" "X-Generator: Gtranslator 3.36.0\n"
"X-Project-Style: gnome\n" "X-Project-Style: gnome\n"
#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3
@@ -29,72 +31,11 @@ msgstr "GNOME Classic"
msgid "This session logs you into GNOME Classic" msgid "This session logs you into GNOME Classic"
msgstr "This session logs you into GNOME Classic" msgstr "This session logs you into GNOME Classic"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:7 #: extensions/apps-menu/extension.js:113
msgid "Attach modal dialog to the parent window"
msgstr "Attach modal dialogue to the parent window"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:8
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:25
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:33
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:41
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:16
msgid "Arrangement of buttons on the titlebar"
msgstr "Arrangement of buttons on the titlebar"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:17
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:24
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Enable edge tiling when dropping windows on screen edges"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:32
msgid "Workspaces only on primary monitor"
msgstr "Workspaces only on primary monitor"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:40
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Delay focus changes in mouse mode until the pointer stops moving"
#: extensions/alternate-tab/prefs.js:19
msgid "Thumbnail only"
msgstr "Thumbnail only"
#: extensions/alternate-tab/prefs.js:20
msgid "Application icon only"
msgstr "Application icon only"
#: extensions/alternate-tab/prefs.js:21
msgid "Thumbnail and application icon"
msgstr "Thumbnail and application icon"
#: extensions/alternate-tab/prefs.js:34
msgid "Present windows as"
msgstr "Present windows as"
#: extensions/alternate-tab/prefs.js:65
msgid "Show only windows in the current workspace"
msgstr "Show only windows in the current workspace"
#: extensions/apps-menu/extension.js:37
msgid "Activities Overview"
msgstr "Activities Overview"
#: extensions/apps-menu/extension.js:130
msgid "Favorites" msgid "Favorites"
msgstr "Favourites" msgstr "Favourites"
#: extensions/apps-menu/extension.js:417 #: extensions/apps-menu/extension.js:369
msgid "Applications" msgid "Applications"
msgstr "Applications" msgstr "Applications"
@@ -110,80 +51,30 @@ msgstr ""
"A list of strings, each containing an application id (desktop file name), " "A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number" "followed by a colon and the workspace number"
#: extensions/auto-move-windows/prefs.js:53 #: extensions/auto-move-windows/prefs.js:35
msgid "Application" #| msgid "Workspace Names"
msgstr "Application" msgid "Workspace Rules"
msgstr "Workspace Rules"
#: extensions/auto-move-windows/prefs.js:62 #: extensions/auto-move-windows/prefs.js:243
#: extensions/auto-move-windows/prefs.js:117
msgid "Workspace"
msgstr "Workspace"
#: extensions/auto-move-windows/prefs.js:78
msgid "Add Rule" msgid "Add Rule"
msgstr "Add Rule" msgstr "Add Rule"
#: extensions/auto-move-windows/prefs.js:98
msgid "Create new matching rule"
msgstr "Create new matching rule"
#: extensions/auto-move-windows/prefs.js:103
msgid "Add"
msgstr "Add"
#. TRANSLATORS: %s is the filesystem name #. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:103 #: extensions/drive-menu/extension.js:112
#: extensions/places-menu/placeDisplay.js:219 #: extensions/places-menu/placeDisplay.js:233
#, javascript-format #, javascript-format
#| msgid "Ejecting drive '%s' failed:"
msgid "Ejecting drive “%s” failed:" msgid "Ejecting drive “%s” failed:"
msgstr "Ejecting drive “%s” failed:" msgstr "Ejecting drive “%s” failed:"
#: extensions/drive-menu/extension.js:118 #: extensions/drive-menu/extension.js:128
msgid "Removable devices" msgid "Removable devices"
msgstr "Removable devices" msgstr "Removable devices"
#: extensions/drive-menu/extension.js:143 #: extensions/drive-menu/extension.js:155
#| msgid "Open File"
msgid "Open Files" msgid "Open Files"
msgstr "Open Files" msgstr "Open Files"
#: extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "Hello, world!"
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:5
msgid "Alternative greeting text."
msgstr "Alternative greeting text."
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:6
msgid ""
"If not empty, it contains the text that will be shown when clicking on the "
"panel."
msgstr ""
"If not empty, it contains the text that will be shown when clicking on the "
"panel."
#: extensions/example/prefs.js:27
msgid "Message"
msgstr "Message"
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: extensions/example/prefs.js:40
#| msgid ""
#| "Example aims to show how to build well behaved extensions for the Shell "
#| "and as such it has little functionality on its own.\n"
#| "Nevertheless it's possible to customize the greeting message."
msgid ""
"Example aims to show how to build well behaved extensions for the Shell and "
"as such it has little functionality on its own.\n"
"Nevertheless its possible to customize the greeting message."
msgstr ""
"Example aims to show how to build well behaved extensions for the Shell and "
"as such it has little functionality on its own.\n"
"Nevertheless its possible to customise the greeting message."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows" msgid "Use more screen for windows"
msgstr "Use more screen for windows" msgstr "Use more screen for windows"
@@ -212,32 +103,31 @@ msgstr ""
"shell default of placing it at the bottom. Changing this setting requires " "shell default of placing it at the bottom. Changing this setting requires "
"restarting the shell to have any effect." "restarting the shell to have any effect."
#: extensions/places-menu/extension.js:79 #: extensions/places-menu/extension.js:89
#: extensions/places-menu/extension.js:82 #: extensions/places-menu/extension.js:93
msgid "Places" msgid "Places"
msgstr "Places" msgstr "Places"
#: extensions/places-menu/placeDisplay.js:66 #: extensions/places-menu/placeDisplay.js:46
#, javascript-format
msgid "Failed to launch “%s”"
msgstr "Failed to launch “%s”"
#: extensions/places-menu/placeDisplay.js:61
#, javascript-format #, javascript-format
msgid "Failed to mount volume for “%s”" msgid "Failed to mount volume for “%s”"
msgstr "Failed to mount volume for “%s”" msgstr "Failed to mount volume for “%s”"
#: extensions/places-menu/placeDisplay.js:79 #: extensions/places-menu/placeDisplay.js:148
#, javascript-format #: extensions/places-menu/placeDisplay.js:171
#| msgid "Failed to launch \"%s\""
msgid "Failed to launch “%s”"
msgstr "Failed to launch “%s”"
#: extensions/places-menu/placeDisplay.js:135
#: extensions/places-menu/placeDisplay.js:158
msgid "Computer" msgid "Computer"
msgstr "Computer" msgstr "Computer"
#: extensions/places-menu/placeDisplay.js:336 #: extensions/places-menu/placeDisplay.js:359
msgid "Home" msgid "Home"
msgstr "Home" msgstr "Home"
#: extensions/places-menu/placeDisplay.js:378 #: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network" msgid "Browse Network"
msgstr "Browse Network" msgstr "Browse Network"
@@ -246,7 +136,6 @@ msgid "Cycle Screenshot Sizes"
msgstr "Cycle Screenshot Sizes" msgstr "Cycle Screenshot Sizes"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11 #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
#| msgid "Cycle Screenshot Sizes"
msgid "Cycle Screenshot Sizes Backward" msgid "Cycle Screenshot Sizes Backward"
msgstr "Cycle Screenshot Sizes Backward" msgstr "Cycle Screenshot Sizes Backward"
@@ -258,52 +147,47 @@ msgstr "Theme name"
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgstr "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
#: extensions/window-list/extension.js:106 #: extensions/window-list/extension.js:98
msgid "Close" msgid "Close"
msgstr "Close" msgstr "Close"
#: extensions/window-list/extension.js:125 #: extensions/window-list/extension.js:118
msgid "Unminimize" msgid "Unminimize"
msgstr "Unminimise" msgstr "Unminimise"
#: extensions/window-list/extension.js:126 #: extensions/window-list/extension.js:118
msgid "Minimize" msgid "Minimize"
msgstr "Minimise" msgstr "Minimise"
#: extensions/window-list/extension.js:132 #: extensions/window-list/extension.js:125
msgid "Unmaximize" msgid "Unmaximize"
msgstr "Unmaximise" msgstr "Unmaximise"
#: extensions/window-list/extension.js:133 #: extensions/window-list/extension.js:125
msgid "Maximize" msgid "Maximize"
msgstr "Maximise" msgstr "Maximise"
#: extensions/window-list/extension.js:408 #: extensions/window-list/extension.js:428
msgid "Minimize all" msgid "Minimize all"
msgstr "Minimise all" msgstr "Minimise all"
#: extensions/window-list/extension.js:414 #: extensions/window-list/extension.js:434
msgid "Unminimize all" msgid "Unminimize all"
msgstr "Unminimise all" msgstr "Unminimise all"
#: extensions/window-list/extension.js:420 #: extensions/window-list/extension.js:440
msgid "Maximize all" msgid "Maximize all"
msgstr "Maximise all" msgstr "Maximise all"
#: extensions/window-list/extension.js:429 #: extensions/window-list/extension.js:448
msgid "Unmaximize all" msgid "Unmaximize all"
msgstr "Unmaximise all" msgstr "Unmaximise all"
#: extensions/window-list/extension.js:438 #: extensions/window-list/extension.js:456
msgid "Close all" msgid "Close all"
msgstr "Close all" msgstr "Close all"
#: extensions/window-list/extension.js:646 #: extensions/window-list/extension.js:734
#: extensions/workspace-indicator/extension.js:26
msgid "Workspace Indicator"
msgstr "Workspace Indicator"
#: extensions/window-list/extension.js:811
msgid "Window List" msgid "Window List"
msgstr "Window List" msgstr "Window List"
@@ -312,9 +196,6 @@ msgid "When to group windows"
msgstr "When to group windows" msgstr "When to group windows"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
#| msgid ""
#| "Decides when to group windows from the same application on the window "
#| "list. Possible values are \"never\", \"auto\" and \"always\"."
msgid "" msgid ""
"Decides when to group windows from the same application on the window list. " "Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”." "Possible values are “never”, “auto” and “always”."
@@ -323,10 +204,19 @@ msgstr ""
"Possible values are “never”, “auto” and “always”." "Possible values are “never”, “auto” and “always”."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:100
msgid "Show windows from all workspaces"
msgstr "Show windows from all workspaces"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr "Whether to show windows from all workspaces or only the current one."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors" msgid "Show the window list on all monitors"
msgstr "Show the window list on all monitors" msgstr "Show the window list on all monitors"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid "" msgid ""
"Whether to show the window list on all connected monitors or only on the " "Whether to show the window list on all connected monitors or only on the "
"primary one." "primary one."
@@ -334,39 +224,128 @@ msgstr ""
"Whether to show the window list on all connected monitors or only on the " "Whether to show the window list on all connected monitors or only on the "
"primary one." "primary one."
#: extensions/window-list/prefs.js:28 #: extensions/window-list/prefs.js:29
msgid "Window Grouping" msgid "Window Grouping"
msgstr "Window Grouping" msgstr "Window Grouping"
#: extensions/window-list/prefs.js:46 #: extensions/window-list/prefs.js:58
msgid "Never group windows" msgid "Never group windows"
msgstr "Never group windows" msgstr "Never group windows"
#: extensions/window-list/prefs.js:47 #: extensions/window-list/prefs.js:59
msgid "Group windows when space is limited" msgid "Group windows when space is limited"
msgstr "Group windows when space is limited" msgstr "Group windows when space is limited"
#: extensions/window-list/prefs.js:48 #: extensions/window-list/prefs.js:60
msgid "Always group windows" msgid "Always group windows"
msgstr "Always group windows" msgstr "Always group windows"
#: extensions/window-list/prefs.js:71 #: extensions/window-list/prefs.js:94
msgid "Show on all monitors" msgid "Show on all monitors"
msgstr "Show on all monitors" msgstr "Show on all monitors"
#: extensions/workspace-indicator/prefs.js:134 #: extensions/window-list/workspaceIndicator.js:207
#: extensions/workspace-indicator/extension.js:213
msgid "Workspace Indicator"
msgstr "Workspace Indicator"
#: extensions/workspace-indicator/prefs.js:34
msgid "Workspace Names" msgid "Workspace Names"
msgstr "Workspace Names" msgstr "Workspace Names"
#: extensions/workspace-indicator/prefs.js:150 #: extensions/workspace-indicator/prefs.js:67
msgid "Name"
msgstr "Name"
#: extensions/workspace-indicator/prefs.js:190
#, javascript-format #, javascript-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Workspace %d" msgstr "Workspace %d"
#: extensions/workspace-indicator/prefs.js:218
#| msgid "Workspace"
msgid "Add Workspace"
msgstr "Add Workspace"
#~ msgid "Application"
#~ msgstr "Application"
#~ msgid "Create new matching rule"
#~ msgstr "Create new matching rule"
#~ msgid "Add"
#~ msgstr "Add"
#~ msgid "Name"
#~ msgstr "Name"
#~ msgid "Attach modal dialog to the parent window"
#~ msgstr "Attach modal dialogue to the parent window"
#~ msgid ""
#~ "This key overrides the key in org.gnome.mutter when running GNOME Shell."
#~ msgstr ""
#~ "This key overrides the key in org.gnome.mutter when running GNOME Shell."
#~ msgid "Arrangement of buttons on the titlebar"
#~ msgstr "Arrangement of buttons on the titlebar"
#~ msgid ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
#~ "running GNOME Shell."
#~ msgstr ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
#~ "running GNOME Shell."
#~ msgid "Enable edge tiling when dropping windows on screen edges"
#~ msgstr "Enable edge tiling when dropping windows on screen edges"
#~ msgid "Workspaces only on primary monitor"
#~ msgstr "Workspaces only on primary monitor"
#~ msgid "Delay focus changes in mouse mode until the pointer stops moving"
#~ msgstr "Delay focus changes in mouse mode until the pointer stops moving"
#~ msgid "Thumbnail only"
#~ msgstr "Thumbnail only"
#~ msgid "Application icon only"
#~ msgstr "Application icon only"
#~ msgid "Thumbnail and application icon"
#~ msgstr "Thumbnail and application icon"
#~ msgid "Present windows as"
#~ msgstr "Present windows as"
#~ msgid "Activities Overview"
#~ msgstr "Activities Overview"
#~ msgid "Hello, world!"
#~ msgstr "Hello, world!"
#~ msgid "Alternative greeting text."
#~ msgstr "Alternative greeting text."
#~ msgid ""
#~ "If not empty, it contains the text that will be shown when clicking on "
#~ "the panel."
#~ msgstr ""
#~ "If not empty, it contains the text that will be shown when clicking on "
#~ "the panel."
#~ msgid "Message"
#~ msgstr "Message"
#~| msgid ""
#~| "Example aims to show how to build well behaved extensions for the Shell "
#~| "and as such it has little functionality on its own.\n"
#~| "Nevertheless it's possible to customize the greeting message."
#~ msgid ""
#~ "Example aims to show how to build well behaved extensions for the Shell "
#~ "and as such it has little functionality on its own.\n"
#~ "Nevertheless its possible to customize the greeting message."
#~ msgstr ""
#~ "Example aims to show how to build well behaved extensions for the Shell "
#~ "and as such it has little functionality on its own.\n"
#~ "Nevertheless its possible to customise the greeting message."
#~ msgid "GNOME Shell Classic" #~ msgid "GNOME Shell Classic"
#~ msgstr "GNOME Shell Classic" #~ msgstr "GNOME Shell Classic"
+197 -199
View File
@@ -3,107 +3,47 @@
# This file is distributed under the same license as the gnome-shell-extensions package. # This file is distributed under the same license as the gnome-shell-extensions package.
# Ryan LORTIE <desrt@desrt.ca>, 2013. # Ryan LORTIE <desrt@desrt.ca>, 2013.
# Daniel PUENTES <blatberk@openmailbox.org>, 2015. # Daniel PUENTES <blatberk@openmailbox.org>, 2015.
# Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>, 2011, 2015. # Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>, 2011-2019.
# Carmen Bianca BAKKER <carmen@carmenbianca.eu>, 2021.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n" "Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"shell&keywords=I18N+L10N&component=extensions\n" "issues\n"
"POT-Creation-Date: 2015-01-31 08:37+0000\n" "POT-Creation-Date: 2021-03-27 20:14+0000\n"
"PO-Revision-Date: 2015-02-01 16:13+0100\n" "PO-Revision-Date: 2021-03-29 17:24+0200\n"
"Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n" "Last-Translator: Carmen Bianca BAKKER <carmen@carmenbianca.eu>\n"
"Language-Team: Esperanto <gnome-l10n-eo@lists.launchpad.net>\n" "Language-Team: Esperanto <gnome-eo-list@gnome.org>\n"
"Language: eo\n" "Language: eo\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Poedit 1.5.4\n" "X-Generator: Gtranslator 3.38.0\n"
"X-Project-Style: gnome\n"
#: ../data/gnome-classic.desktop.in.h:1 #: data/gnome-classic.desktop.in:3
#: ../data/gnome-classic.session.desktop.in.in.h:1
msgid "GNOME Classic" msgid "GNOME Classic"
msgstr "GNOME-klasika" msgstr "GNOME-klasika"
#: ../data/gnome-classic.desktop.in.h:2 #: data/gnome-classic.desktop.in:4
msgid "This session logs you into GNOME Classic" msgid "This session logs you into GNOME Classic"
msgstr "Ĉi seanco ensalutas vin GNOME-klasiken" msgstr "Ĉi tiu seanco ensalutas vin GNOME-klasiken"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1 #: extensions/apps-menu/extension.js:113
msgid "Attach modal dialog to the parent window"
msgstr "Kunligi modalan dialogon al la patra fenestro"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:2
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Ĉi ŝlosilo atutas la ŝlosilon en org.gnome.mutter kiam rulanta GNOME-ŝelon."
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3
msgid "Arrangement of buttons on the titlebar"
msgstr "Aranĝo de butonoj en la titolbreto"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4
#| msgid ""
#| "This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"Ĉi tiu ŝlosilo anstataŭas la ŝlosilon en org.gnome.desktop.wm.preferences "
"kiam GNOME-ŝelo rulas."
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:5
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Aktivigi kahelan aranĝon kiam demetante fenestrojn sur ekranaj borderoj"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:6
msgid "Workspaces only on primary monitor"
msgstr "Laborspacoj nur sur la ĉefa ekrano"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:7
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "En musa reĝimo, prokrasti ŝanĝi fokuson ĝis la musmontrilo haltas"
#: ../extensions/alternate-tab/prefs.js:20
msgid "Thumbnail only"
msgstr "Miniaturo nur"
#: ../extensions/alternate-tab/prefs.js:21
msgid "Application icon only"
msgstr "Aplikaĵa piktogramo nur"
#: ../extensions/alternate-tab/prefs.js:22
msgid "Thumbnail and application icon"
msgstr "Miniaturo kaj aplikaĵo piktogramo"
#: ../extensions/alternate-tab/prefs.js:38
msgid "Present windows as"
msgstr "Prezenti fenestron kiel"
#: ../extensions/alternate-tab/prefs.js:69
msgid "Show only windows in the current workspace"
msgstr "Montri nur fenestrojn en la aktuala laborspaco"
#: ../extensions/apps-menu/extension.js:39
msgid "Activities Overview"
msgstr "Aktivecoj-Superrigardon"
#: ../extensions/apps-menu/extension.js:114
msgid "Favorites" msgid "Favorites"
msgstr "Plej ŝatataj" msgstr "Plej ŝatataj"
#: ../extensions/apps-menu/extension.js:283 #: extensions/apps-menu/extension.js:367
msgid "Applications" msgid "Applications"
msgstr "Aplikaĵoj" msgstr "Aplikaĵoj"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1 #: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list" msgid "Application and workspace list"
msgstr "Aplikaĵa kaj laborspaca listo" msgstr "Aplikaĵa kaj laborspaca listo"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2 #: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid "" msgid ""
"A list of strings, each containing an application id (desktop file name), " "A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number" "followed by a colon and the workspace number"
@@ -111,76 +51,34 @@ msgstr ""
"Listo de ĉenoj, ĉiu enhavas aplikaĵan identigilon ('desktop' dosiernomo), " "Listo de ĉenoj, ĉiu enhavas aplikaĵan identigilon ('desktop' dosiernomo), "
"sevkita per dupunkto kaj la laborspaca numero" "sevkita per dupunkto kaj la laborspaca numero"
#: ../extensions/auto-move-windows/prefs.js:60 #: extensions/auto-move-windows/prefs.js:35
msgid "Application" msgid "Workspace Rules"
msgstr "Aplikaĵo" msgstr "Laborspacaj reguloj"
#: ../extensions/auto-move-windows/prefs.js:69 #: extensions/auto-move-windows/prefs.js:237
#: ../extensions/auto-move-windows/prefs.js:127
msgid "Workspace"
msgstr "Laborspaco"
#: ../extensions/auto-move-windows/prefs.js:85
#| msgid "Add rule"
msgid "Add Rule" msgid "Add Rule"
msgstr "Aldoni regulon" msgstr "Aldoni regulon"
#: ../extensions/auto-move-windows/prefs.js:106 #. TRANSLATORS: %s is the filesystem name
msgid "Create new matching rule" #: extensions/drive-menu/extension.js:112
msgstr "Krei novan kongruantan regulon" #: extensions/places-menu/placeDisplay.js:233
#, javascript-format
msgid "Ejecting drive “%s” failed:"
msgstr "Elĵeto de volumo “%s” malsukcesis:"
#: ../extensions/auto-move-windows/prefs.js:111 #: extensions/drive-menu/extension.js:128
msgid "Add"
msgstr "Aldoni"
#: ../extensions/drive-menu/extension.js:106
msgid "Ejecting drive '%s' failed:"
msgstr "Elĵeto de volumo '%s' malsukcesis:"
#: ../extensions/drive-menu/extension.js:124
msgid "Removable devices" msgid "Removable devices"
msgstr "Demeteblaj aparatoj" msgstr "Demeteblaj aparatoj"
#: ../extensions/drive-menu/extension.js:151 #: extensions/drive-menu/extension.js:152
msgid "Open File" msgid "Open Files"
msgstr "Malfermi dosieron" msgstr "Malfermi dosierojn"
#: ../extensions/example/extension.js:17 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Hello, world!"
msgstr "Saluton, mondo!"
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1
msgid "Alternative greeting text."
msgstr "Alterna saluta teksto."
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2
msgid ""
"If not empty, it contains the text that will be shown when clicking on the "
"panel."
msgstr ""
"Se ne malplena, enhavas la tekston kiu estos montrita kiam alklakante sur la "
"panelo."
#: ../extensions/example/prefs.js:30
#| msgid "Message:"
msgid "Message"
msgstr "Mesaĝo"
#: ../extensions/example/prefs.js:43
msgid ""
"Example aims to show how to build well behaved extensions for the Shell and "
"as such it has little functionality on its own.\n"
"Nevertheless it's possible to customize the greeting message."
msgstr ""
"Ekzemplo klopodas montri kial krei bone-kondutantan etendojn por la ŝelo kaj "
"sekve ne havas multan funkcion.\n"
"Tamen, eblas agordi la salutan mesagon."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
msgid "Use more screen for windows" msgid "Use more screen for windows"
msgstr "Uzi pli da ekrano por fenetroj" msgstr "Uzi pli da ekrano por fenetroj"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
msgid "" msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen " "Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. " "aspect ratio, and consolidating them further to reduce the bounding box. "
@@ -190,11 +88,11 @@ msgstr ""
"aspekta rilatumo, kaj kunfandi ilin plu por redukti la limigan keston. Ĉi " "aspekta rilatumo, kaj kunfandi ilin plu por redukti la limigan keston. Ĉi "
"agordo uzitas nur kun la natura lokada strategio." "agordo uzitas nur kun la natura lokada strategio."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top" msgid "Place window captions on top"
msgstr "Meti fenestrajn apudskribojn supre" msgstr "Meti fenestrajn apudskribojn supre"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid "" msgid ""
"If true, place window captions on top the respective thumbnail, overriding " "If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires " "shell default of placing it at the bottom. Changing this setting requires "
@@ -204,154 +102,254 @@ msgstr ""
"estas meti ĝin malsupre). Si vi ŝanĝas ĉi agordon tiam vi devas restartigi " "estas meti ĝin malsupre). Si vi ŝanĝas ĉi agordon tiam vi devas restartigi "
"la ŝelon." "la ŝelon."
#: ../extensions/places-menu/extension.js:78 #: extensions/places-menu/extension.js:89
#: ../extensions/places-menu/extension.js:81 #: extensions/places-menu/extension.js:92
msgid "Places" msgid "Places"
msgstr "Lokoj" msgstr "Lokoj"
#: ../extensions/places-menu/placeDisplay.js:57 #: extensions/places-menu/placeDisplay.js:46
msgid "Failed to launch \"%s\"" #, javascript-format
msgstr "Malsukceis lanĉi \"%s\"" msgid "Failed to launch “%s”"
msgstr "Malsukcesis lanĉi “%s”"
#: ../extensions/places-menu/placeDisplay.js:99 #: extensions/places-menu/placeDisplay.js:61
#: ../extensions/places-menu/placeDisplay.js:122 #, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Ne eblis munti datumportilon por “%s”"
#: extensions/places-menu/placeDisplay.js:148
#: extensions/places-menu/placeDisplay.js:171
msgid "Computer" msgid "Computer"
msgstr "Komputilo" msgstr "Komputilo"
#: ../extensions/places-menu/placeDisplay.js:200 #: extensions/places-menu/placeDisplay.js:359
msgid "Home" msgid "Home"
msgstr "Domo" msgstr "Domo"
#: ../extensions/places-menu/placeDisplay.js:287 #: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network" msgid "Browse Network"
msgstr "Foliumi reton" msgstr "Foliumi reton"
#: ../extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml.in.h:1 #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgid "Cycle Screenshot Sizes" msgid "Cycle Screenshot Sizes"
msgstr "Cikle montri ekrankopiajn grandojn" msgstr "Cikle montri ekrankopiajn grandojn"
#: ../extensions/systemMonitor/extension.js:214 #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgid "CPU" msgid "Cycle Screenshot Sizes Backward"
msgstr "Ĉefprocesoro" msgstr "Montri ekrankopiajn grandojn laŭ inversa sinsekvo"
#: ../extensions/systemMonitor/extension.js:267 #: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Memory"
msgstr "Memoro"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
msgid "Theme name" msgid "Theme name"
msgstr "Etosnomo" msgstr "Etosnomo"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2 #: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "La nomo de la etoso, malfermigi de ~/.themes/name/gnome-shell" msgstr "La nomo de la etoso, malfermigi de ~/.themes/name/gnome-shell"
#: ../extensions/window-list/extension.js:110 #: extensions/window-list/extension.js:98
msgid "Close" msgid "Close"
msgstr "Malfermi" msgstr "Fermi"
#: ../extensions/window-list/extension.js:120 #: extensions/window-list/extension.js:118
msgid "Unminimize" msgid "Unminimize"
msgstr "Neplejetigi" msgstr "Malminimumigi"
#: ../extensions/window-list/extension.js:121 #: extensions/window-list/extension.js:118
msgid "Minimize" msgid "Minimize"
msgstr "Plejetigi" msgstr "Minimumigi"
#: ../extensions/window-list/extension.js:127 #: extensions/window-list/extension.js:125
msgid "Unmaximize" msgid "Unmaximize"
msgstr "Nemaksimumigi" msgstr "Malmaksimumigi"
#: ../extensions/window-list/extension.js:128 #: extensions/window-list/extension.js:125
msgid "Maximize" msgid "Maximize"
msgstr "Maksimumigi" msgstr "Maksimumigi"
#: ../extensions/window-list/extension.js:390 #: extensions/window-list/extension.js:432
msgid "Minimize all" msgid "Minimize all"
msgstr "Plejetigi ĉiujn" msgstr "Minimumigi ĉiujn"
#: ../extensions/window-list/extension.js:398 #: extensions/window-list/extension.js:438
msgid "Unminimize all" msgid "Unminimize all"
msgstr "Neplejetigi ĉiujn" msgstr "Malminimumigi ĉiujn"
#: ../extensions/window-list/extension.js:406 #: extensions/window-list/extension.js:444
msgid "Maximize all" msgid "Maximize all"
msgstr "Maksimumigi ĉiujn" msgstr "Maksimumigi ĉiujn"
#: ../extensions/window-list/extension.js:415 #: extensions/window-list/extension.js:452
msgid "Unmaximize all" msgid "Unmaximize all"
msgstr "Nemaksimumigi ĉiujn" msgstr "Malmaksimumigi ĉiujn"
#: ../extensions/window-list/extension.js:424 #: extensions/window-list/extension.js:460
msgid "Close all" msgid "Close all"
msgstr "Fermi ĉiujn" msgstr "Fermi ĉiujn"
#: ../extensions/window-list/extension.js:706 #: extensions/window-list/extension.js:737
#: ../extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Laborspaco Indikilo"
#: ../extensions/window-list/extension.js:870
msgid "Window List" msgid "Window List"
msgstr "Fenestra listo" msgstr "Fenestra listo"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows" msgid "When to group windows"
msgstr "Kiam grupigi fenestrojn" msgstr "Kiam grupigi fenestrojn"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid "" msgid ""
"Decides when to group windows from the same application on the window list. " "Decides when to group windows from the same application on the window list. "
"Possible values are \"never\", \"auto\" and \"always\"." "Possible values are never”, “auto and always."
msgstr "" msgstr ""
"Decidas kiam grupi fenestrojn de la sama aplikaĵo en la fenestra listo. " "Decidas kiam grupi fenestrojn de la sama aplikaĵo en la fenestra listo. "
"Validaj valoroj estas \"never\" (neniam), \"auto\" (aŭtomate) kaj \"always" "Validaj valoroj estas neniam, aŭtomate kaj ĉiam”."
"\" (ĉiam)."
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:3 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:100
msgid "Show windows from all workspaces"
msgstr "Montri la fenestrojn de ĉiuj laborspacoj"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr "Ĉu montri la fenestrojn de ĉiuj laborspacoj aŭ nur de la nuna."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors" msgid "Show the window list on all monitors"
msgstr "Montri la fenestroliston en ĉiuj ekranoj" msgstr "Montri la fenestroliston en ĉiuj ekranoj"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:4 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid "" msgid ""
"Whether to show the window list on all connected monitors or only on the " "Whether to show the window list on all connected monitors or only on the "
"primary one." "primary one."
msgstr "" msgstr ""
"Ĉu montri la fenestroliston en ĉiuj konektitaj ekranoj aŭ nur en la ĉefa." "Ĉu montri la fenestroliston en ĉiuj konektitaj ekranoj aŭ nur en la ĉefa."
#: ../extensions/window-list/prefs.js:32 #: extensions/window-list/prefs.js:29
msgid "Window Grouping" msgid "Window Grouping"
msgstr "Fenestra grupigo" msgstr "Fenestra grupigo"
#: ../extensions/window-list/prefs.js:50 #: extensions/window-list/prefs.js:58
msgid "Never group windows" msgid "Never group windows"
msgstr "Neniam grupigi fenestrojn" msgstr "Neniam grupigi fenestrojn"
#: ../extensions/window-list/prefs.js:51 #: extensions/window-list/prefs.js:59
msgid "Group windows when space is limited" msgid "Group windows when space is limited"
msgstr "Grupigi fenestrojn kiam spaco limitas" msgstr "Grupigi fenestrojn kiam spaco limitas"
#: ../extensions/window-list/prefs.js:52 #: extensions/window-list/prefs.js:60
msgid "Always group windows" msgid "Always group windows"
msgstr "Ĉiam grupigi fenestrojn" msgstr "Ĉiam grupigi fenestrojn"
#: ../extensions/window-list/prefs.js:75 #: extensions/window-list/prefs.js:94
msgid "Show on all monitors" msgid "Show on all monitors"
msgstr "Montri en ĉiuj ekranoj" msgstr "Montri en ĉiuj ekranoj"
#: ../extensions/workspace-indicator/prefs.js:141 #: extensions/window-list/workspaceIndicator.js:249
#| msgid "Workspace names:" #: extensions/workspace-indicator/extension.js:255
msgid "Workspace Indicator"
msgstr "Laborspaco Indikilo"
#: extensions/workspace-indicator/prefs.js:34
msgid "Workspace Names" msgid "Workspace Names"
msgstr "Laborspacaj nomoj" msgstr "Laborspacaj nomoj"
#: ../extensions/workspace-indicator/prefs.js:157 #: extensions/workspace-indicator/prefs.js:67
msgid "Name" #, javascript-format
msgstr "Nomo"
#: ../extensions/workspace-indicator/prefs.js:198
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Laborspaco %d" msgstr "Laborspaco %d"
#: extensions/workspace-indicator/prefs.js:208
msgid "Add Workspace"
msgstr "Aldoni laborspacon"
#~ msgid "Application"
#~ msgstr "Aplikaĵo"
#~ msgid "Create new matching rule"
#~ msgstr "Krei novan kongruantan regulon"
#~ msgid "Add"
#~ msgstr "Aldoni"
#~ msgid "Name"
#~ msgstr "Nomo"
#~ msgid "Activities Overview"
#~ msgstr "Aktivecoj-Superrigardon"
#~ msgid "Attach modal dialog to the parent window"
#~ msgstr "Kunligi modalan dialogon al la patra fenestro"
#~ msgid ""
#~ "This key overrides the key in org.gnome.mutter when running GNOME Shell."
#~ msgstr ""
#~ "Ĉi ŝlosilo atutas la ŝlosilon en org.gnome.mutter kiam rulanta GNOME-"
#~ "ŝelon."
#~ msgid "Arrangement of buttons on the titlebar"
#~ msgstr "Aranĝo de butonoj en la titolbreto"
#~| msgid ""
#~| "This key overrides the key in org.gnome.mutter when running GNOME Shell."
#~ msgid ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
#~ "running GNOME Shell."
#~ msgstr ""
#~ "Ĉi tiu ŝlosilo anstataŭas la ŝlosilon en org.gnome.desktop.wm.preferences "
#~ "kiam GNOME-ŝelo rulas."
#~ msgid "Enable edge tiling when dropping windows on screen edges"
#~ msgstr ""
#~ "Aktivigi kahelan aranĝon kiam demetante fenestrojn sur ekranaj borderoj"
#~ msgid "Workspaces only on primary monitor"
#~ msgstr "Laborspacoj nur sur la ĉefa ekrano"
#~ msgid "Delay focus changes in mouse mode until the pointer stops moving"
#~ msgstr "En musa reĝimo, prokrasti ŝanĝi fokuson ĝis la musmontrilo haltas"
#~ msgid "Thumbnail only"
#~ msgstr "Miniaturo nur"
#~ msgid "Application icon only"
#~ msgstr "Aplikaĵa piktogramo nur"
#~ msgid "Thumbnail and application icon"
#~ msgstr "Miniaturo kaj aplikaĵo piktogramo"
#~ msgid "Present windows as"
#~ msgstr "Prezenti fenestron kiel"
#~ msgid "Hello, world!"
#~ msgstr "Saluton, mondo!"
#~ msgid "Alternative greeting text."
#~ msgstr "Alterna saluta teksto."
#~ msgid ""
#~ "If not empty, it contains the text that will be shown when clicking on "
#~ "the panel."
#~ msgstr ""
#~ "Se ne malplena, enhavas la tekston kiu estos montrita kiam alklakante sur "
#~ "la panelo."
#~| msgid "Message:"
#~ msgid "Message"
#~ msgstr "Mesaĝo"
#~ msgid ""
#~ "Example aims to show how to build well behaved extensions for the Shell "
#~ "and as such it has little functionality on its own.\n"
#~ "Nevertheless it's possible to customize the greeting message."
#~ msgstr ""
#~ "Ekzemplo klopodas montri kial krei bone-kondutantan etendojn por la ŝelo "
#~ "kaj sekve ne havas multan funkcion.\n"
#~ "Tamen, eblas agordi la salutan mesagon."
#~ msgid "CPU"
#~ msgstr "Ĉefprocesoro"
#~ msgid "Memory"
#~ msgstr "Memoro"
#~ msgid "GNOME Shell Classic" #~ msgid "GNOME Shell Classic"
#~ msgstr "GNOME-ŝelo-klasika" #~ msgstr "GNOME-ŝelo-klasika"
+168 -168
View File
@@ -4,101 +4,48 @@
# Jorge González <jorgegonz@svn.gnome.org>, 2011. # Jorge González <jorgegonz@svn.gnome.org>, 2011.
# Nicolás Satragno <nsatragno@gmail.com>, 2011. # Nicolás Satragno <nsatragno@gmail.com>, 2011.
# #
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011-2015, 2017. # Daniel Mustieles <daniel.mustieles@gmail.com>, 2011-2021.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n" "Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"shell&keywords=I18N+L10N&component=extensions\n" "issues\n"
"POT-Creation-Date: 2017-07-20 23:40+0000\n" "POT-Creation-Date: 2021-11-06 14:08+0000\n"
"PO-Revision-Date: 2017-07-24 15:40+0200\n" "PO-Revision-Date: 2021-11-26 17:58+0100\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n" "Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: es <gnome-es-list@gnome.org>\n" "Language-Team: Spanish - Spain <gnome-es-list@gnome.org>\n"
"Language: es\n" "Language: es_ES\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Gtranslator 2.91.6\n" "X-Generator: Gtranslator 41.0\n"
#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 #: data/gnome-classic.desktop.in:3
msgid "GNOME Classic" msgid "GNOME Classic"
msgstr "GNOME clásico" msgstr "GNOME clásico"
#: data/gnome-classic.desktop.in:4 #: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4
#: data/gnome-classic-xorg.desktop.in:4
msgid "This session logs you into GNOME Classic" msgid "This session logs you into GNOME Classic"
msgstr "Esta sesión inicia GNOME clásico" msgstr "Esta sesión inicia GNOME clásico"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:7 #: data/gnome-classic-wayland.desktop.in:3
msgid "Attach modal dialog to the parent window" #| msgid "GNOME Classic"
msgstr "Acoplar un diálogo modal a la ventana padre" msgid "GNOME Classic on Wayland"
msgstr "GNOME clásico en Wayland"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:8 #: data/gnome-classic-xorg.desktop.in:3
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:25 #| msgid "GNOME Classic"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:33 msgid "GNOME Classic on Xorg"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:41 msgstr "GNOME clásicoen Xorg"
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Esta clave sobrescribe la clave en org.gnome.mutter al ejecutar GNOME Shell."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:16 #: extensions/apps-menu/extension.js:112
msgid "Arrangement of buttons on the titlebar"
msgstr "Ordenación de los botones en la barra de título"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:17
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"Esta clave sobrescribe la clave en org.gnome.desktop.wm.preferences al "
"ejecutar GNOME Shell."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:24
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Activar el mosaico en los bordes al arrastrar ventanas a los bordes de la "
"ventana"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:32
msgid "Workspaces only on primary monitor"
msgstr "Áreas de trabajo solo en la pantalla principal"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:40
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr ""
"Retrasar el cambio del foco del ratón hasta que el puntero deje de moverse"
#: extensions/alternate-tab/prefs.js:20
msgid "Thumbnail only"
msgstr "Sólo miniaturas"
#: extensions/alternate-tab/prefs.js:21
msgid "Application icon only"
msgstr "Sólo icono de la aplicación"
#: extensions/alternate-tab/prefs.js:22
msgid "Thumbnail and application icon"
msgstr "Miniatura e icono de la aplicación"
#: extensions/alternate-tab/prefs.js:38
msgid "Present windows as"
msgstr "Presentar ventanas como"
#: extensions/alternate-tab/prefs.js:69
msgid "Show only windows in the current workspace"
msgstr "Mostrar ventanas solamente en el área de trabajo actual"
#: extensions/apps-menu/extension.js:41
msgid "Activities Overview"
msgstr "Vista de actividades"
#: extensions/apps-menu/extension.js:141
msgid "Favorites" msgid "Favorites"
msgstr "Favoritos" msgstr "Favoritos"
#: extensions/apps-menu/extension.js:436 #: extensions/apps-menu/extension.js:366
msgid "Applications" msgid "Applications"
msgstr "Aplicaciones" msgstr "Aplicaciones"
@@ -114,73 +61,29 @@ msgstr ""
"Una lista de cadenas, conteniendo cada una un ID de aplicación (nombre de " "Una lista de cadenas, conteniendo cada una un ID de aplicación (nombre de "
"archivo de escritorio), seguido de dos puntos y el número del área de trabajo" "archivo de escritorio), seguido de dos puntos y el número del área de trabajo"
#: extensions/auto-move-windows/prefs.js:60 #: extensions/auto-move-windows/prefs.js:34
msgid "Application" msgid "Workspace Rules"
msgstr "Aplicación" msgstr "Reglas de las áreas de trabajo"
#: extensions/auto-move-windows/prefs.js:69 #: extensions/auto-move-windows/prefs.js:236
#: extensions/auto-move-windows/prefs.js:127
msgid "Workspace"
msgstr "Área de trabajo"
#: extensions/auto-move-windows/prefs.js:85
msgid "Add Rule" msgid "Add Rule"
msgstr "Añadir regla" msgstr "Añadir regla"
#: extensions/auto-move-windows/prefs.js:106 #. TRANSLATORS: %s is the filesystem name
msgid "Create new matching rule" #: extensions/drive-menu/extension.js:133
msgstr "Crear regla de coincidencia nueva" #: extensions/places-menu/placeDisplay.js:233
#: extensions/auto-move-windows/prefs.js:111
msgid "Add"
msgstr "Añadir"
#: extensions/drive-menu/extension.js:106
#, javascript-format #, javascript-format
msgid "Ejecting drive “%s” failed:" msgid "Ejecting drive “%s” failed:"
msgstr "Falló al expulsar el dispositivo «%s»:" msgstr "Falló al expulsar el dispositivo «%s»:"
#: extensions/drive-menu/extension.js:124 #: extensions/drive-menu/extension.js:149
msgid "Removable devices" msgid "Removable devices"
msgstr "Dispositivos extraíbles" msgstr "Dispositivos extraíbles"
#: extensions/drive-menu/extension.js:149 #: extensions/drive-menu/extension.js:171
msgid "Open Files" msgid "Open Files"
msgstr "Abrir archivos" msgstr "Abrir archivos"
#: extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "¡Hola, mundo!"
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:5
msgid "Alternative greeting text."
msgstr "Texto de bienvenida alternativo."
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:6
msgid ""
"If not empty, it contains the text that will be shown when clicking on the "
"panel."
msgstr ""
"Si no está vacío, contiene el texto que se desplegará al pulsar sobre el "
"panel."
#: extensions/example/prefs.js:30
msgid "Message"
msgstr "Mensaje"
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: extensions/example/prefs.js:43
msgid ""
"Example aims to show how to build well behaved extensions for the Shell and "
"as such it has little functionality on its own.\n"
"Nevertheless its possible to customize the greeting message."
msgstr ""
"«Example» tiene por objeto mostrar cómo construir extensiones de buen "
"comportamiento para la Shell y por eso tiene poca funcionalidad por sí "
"solo.\n"
"Sin embargo, es posible personalizar el mensaje de bienvenida."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows" msgid "Use more screen for windows"
msgstr "Usar más pantalla para las ventanas" msgstr "Usar más pantalla para las ventanas"
@@ -210,31 +113,31 @@ msgstr ""
"los sitúa por debajo. Cambiar esta configuración requiere reiniciar la shell " "los sitúa por debajo. Cambiar esta configuración requiere reiniciar la shell "
"para que tenga efecto." "para que tenga efecto."
#: extensions/places-menu/extension.js:78 #: extensions/places-menu/extension.js:88
#: extensions/places-menu/extension.js:81 #: extensions/places-menu/extension.js:91
msgid "Places" msgid "Places"
msgstr "Lugares" msgstr "Lugares"
#: extensions/places-menu/placeDisplay.js:65 #: extensions/places-menu/placeDisplay.js:46
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Falló al montar el volumen para «%s»"
#: extensions/places-menu/placeDisplay.js:78
#, javascript-format #, javascript-format
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "Falló al lanzar «%s»" msgstr "Falló al lanzar «%s»"
#: extensions/places-menu/placeDisplay.js:137 #: extensions/places-menu/placeDisplay.js:61
#: extensions/places-menu/placeDisplay.js:160 #, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Falló al montar el volumen para «%s»"
#: extensions/places-menu/placeDisplay.js:148
#: extensions/places-menu/placeDisplay.js:171
msgid "Computer" msgid "Computer"
msgstr "Equipo" msgstr "Equipo"
#: extensions/places-menu/placeDisplay.js:303 #: extensions/places-menu/placeDisplay.js:359
msgid "Home" msgid "Home"
msgstr "Carpeta personal" msgstr "Carpeta personal"
#: extensions/places-menu/placeDisplay.js:347 #: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network" msgid "Browse Network"
msgstr "Examinar la red" msgstr "Examinar la red"
@@ -243,7 +146,6 @@ msgid "Cycle Screenshot Sizes"
msgstr "Tamaños de capturas de pantalla cíclicos" msgstr "Tamaños de capturas de pantalla cíclicos"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11 #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
#| msgid "Cycle Screenshot Sizes"
msgid "Cycle Screenshot Sizes Backward" msgid "Cycle Screenshot Sizes Backward"
msgstr "Tamaños de capturas de pantalla cíclicos" msgstr "Tamaños de capturas de pantalla cíclicos"
@@ -255,52 +157,47 @@ msgstr "Nombre del tema"
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "El nombre del tema, que se carga desde ~/.themes/nombre/gnome-shell" msgstr "El nombre del tema, que se carga desde ~/.themes/nombre/gnome-shell"
#: extensions/window-list/extension.js:110 #: extensions/window-list/extension.js:72
msgid "Close" msgid "Close"
msgstr "Cerrar" msgstr "Cerrar"
#: extensions/window-list/extension.js:129 #: extensions/window-list/extension.js:92
msgid "Unminimize" msgid "Unminimize"
msgstr "Desminimizar" msgstr "Desminimizar"
#: extensions/window-list/extension.js:130 #: extensions/window-list/extension.js:92
msgid "Minimize" msgid "Minimize"
msgstr "Minimizar" msgstr "Minimizar"
#: extensions/window-list/extension.js:136 #: extensions/window-list/extension.js:99
msgid "Unmaximize" msgid "Unmaximize"
msgstr "Desmaximizar" msgstr "Desmaximizar"
#: extensions/window-list/extension.js:137 #: extensions/window-list/extension.js:99
msgid "Maximize" msgid "Maximize"
msgstr "Maximizar" msgstr "Maximizar"
#: extensions/window-list/extension.js:420 #: extensions/window-list/extension.js:434
msgid "Minimize all" msgid "Minimize all"
msgstr "Minimizar todo" msgstr "Minimizar todo"
#: extensions/window-list/extension.js:428 #: extensions/window-list/extension.js:440
msgid "Unminimize all" msgid "Unminimize all"
msgstr "Desminimizar todo" msgstr "Desminimizar todo"
#: extensions/window-list/extension.js:436 #: extensions/window-list/extension.js:446
msgid "Maximize all" msgid "Maximize all"
msgstr "Maximizar todo" msgstr "Maximizar todo"
#: extensions/window-list/extension.js:445 #: extensions/window-list/extension.js:454
msgid "Unmaximize all" msgid "Unmaximize all"
msgstr "Desmaximizar todo" msgstr "Desmaximizar todo"
#: extensions/window-list/extension.js:454 #: extensions/window-list/extension.js:462
msgid "Close all" msgid "Close all"
msgstr "Cerrar todo" msgstr "Cerrar todo"
#: extensions/window-list/extension.js:678 #: extensions/window-list/extension.js:741
#: extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Indicador de área de trabajo"
#: extensions/window-list/extension.js:842
msgid "Window List" msgid "Window List"
msgstr "Lista de ventanas" msgstr "Lista de ventanas"
@@ -317,10 +214,21 @@ msgstr ""
"ventanas. Los valores posibles son «never», «auto» y «always»." "ventanas. Los valores posibles son «never», «auto» y «always»."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:86
msgid "Show windows from all workspaces"
msgstr "Mostrar ventanas de todas las áreas de trabajo"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr ""
"Indica si se deben mostrar ventanas de todas las áreas de trabajo o sólo de "
"la actual."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors" msgid "Show the window list on all monitors"
msgstr "Mostrar la lista de ventanas en todas las pantallas" msgstr "Mostrar la lista de ventanas en todas las pantallas"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid "" msgid ""
"Whether to show the window list on all connected monitors or only on the " "Whether to show the window list on all connected monitors or only on the "
"primary one." "primary one."
@@ -328,39 +236,131 @@ msgstr ""
"Indica si se debe mostrar la lista de ventanas en todas las pantallas " "Indica si se debe mostrar la lista de ventanas en todas las pantallas "
"conectadas o sólo en la primaria." "conectadas o sólo en la primaria."
#: extensions/window-list/prefs.js:32 #: extensions/window-list/prefs.js:39
msgid "Window Grouping" msgid "Window Grouping"
msgstr "Agrupación de ventanas" msgstr "Agrupación de ventanas"
#: extensions/window-list/prefs.js:50 #: extensions/window-list/prefs.js:63
msgid "Never group windows" msgid "Never group windows"
msgstr "Nunca agrupar las ventanas" msgstr "Nunca agrupar las ventanas"
#: extensions/window-list/prefs.js:51 #: extensions/window-list/prefs.js:64
msgid "Group windows when space is limited" msgid "Group windows when space is limited"
msgstr "Agrupar las ventanas cuando el espacio esté limitado" msgstr "Agrupar las ventanas cuando el espacio esté limitado"
#: extensions/window-list/prefs.js:52 #: extensions/window-list/prefs.js:65
msgid "Always group windows" msgid "Always group windows"
msgstr "Siempre agrupar las ventanas" msgstr "Siempre agrupar las ventanas"
#: extensions/window-list/prefs.js:75 #: extensions/window-list/prefs.js:81
msgid "Show on all monitors" msgid "Show on all monitors"
msgstr "Mostrar en todas las pantallas" msgstr "Mostrar en todas las pantallas"
#: extensions/workspace-indicator/prefs.js:141 #: extensions/window-list/workspaceIndicator.js:249
#: extensions/workspace-indicator/extension.js:254
msgid "Workspace Indicator"
msgstr "Indicador de área de trabajo"
#: extensions/workspace-indicator/prefs.js:33
msgid "Workspace Names" msgid "Workspace Names"
msgstr "Nombres de los áreas de trabajo" msgstr "Nombres de los áreas de trabajo"
#: extensions/workspace-indicator/prefs.js:157 #: extensions/workspace-indicator/prefs.js:66
msgid "Name"
msgstr "Nombre"
#: extensions/workspace-indicator/prefs.js:198
#, javascript-format #, javascript-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Área de trabajo %d" msgstr "Área de trabajo %d"
#: extensions/workspace-indicator/prefs.js:207
msgid "Add Workspace"
msgstr "Añadir área de trabajo"
#~ msgid "Application"
#~ msgstr "Aplicación"
#~ msgid "Workspace"
#~ msgstr "Área de trabajo"
#~ msgid "Create new matching rule"
#~ msgstr "Crear regla de coincidencia nueva"
#~ msgid "Add"
#~ msgstr "Añadir"
#~ msgid "Name"
#~ msgstr "Nombre"
#~ msgid "Attach modal dialog to the parent window"
#~ msgstr "Acoplar un diálogo modal a la ventana padre"
#~ msgid ""
#~ "This key overrides the key in org.gnome.mutter when running GNOME Shell."
#~ msgstr ""
#~ "Esta clave sobrescribe la clave en org.gnome.mutter al ejecutar GNOME "
#~ "Shell."
#~ msgid "Arrangement of buttons on the titlebar"
#~ msgstr "Ordenación de los botones en la barra de título"
#~ msgid ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
#~ "running GNOME Shell."
#~ msgstr ""
#~ "Esta clave sobrescribe la clave en org.gnome.desktop.wm.preferences al "
#~ "ejecutar GNOME Shell."
#~ msgid "Enable edge tiling when dropping windows on screen edges"
#~ msgstr ""
#~ "Activar el mosaico en los bordes al arrastrar ventanas a los bordes de la "
#~ "ventana"
#~ msgid "Workspaces only on primary monitor"
#~ msgstr "Áreas de trabajo solo en la pantalla principal"
#~ msgid "Delay focus changes in mouse mode until the pointer stops moving"
#~ msgstr ""
#~ "Retrasar el cambio del foco del ratón hasta que el puntero deje de moverse"
#~ msgid "Thumbnail only"
#~ msgstr "Sólo miniaturas"
#~ msgid "Application icon only"
#~ msgstr "Sólo icono de la aplicación"
#~ msgid "Thumbnail and application icon"
#~ msgstr "Miniatura e icono de la aplicación"
#~ msgid "Present windows as"
#~ msgstr "Presentar ventanas como"
#~ msgid "Activities Overview"
#~ msgstr "Vista de actividades"
#~ msgid "Hello, world!"
#~ msgstr "¡Hola, mundo!"
#~ msgid "Alternative greeting text."
#~ msgstr "Texto de bienvenida alternativo."
#~ msgid ""
#~ "If not empty, it contains the text that will be shown when clicking on "
#~ "the panel."
#~ msgstr ""
#~ "Si no está vacío, contiene el texto que se desplegará al pulsar sobre el "
#~ "panel."
#~ msgid "Message"
#~ msgstr "Mensaje"
#~ msgid ""
#~ "Example aims to show how to build well behaved extensions for the Shell "
#~ "and as such it has little functionality on its own.\n"
#~ "Nevertheless its possible to customize the greeting message."
#~ msgstr ""
#~ "«Example» tiene por objeto mostrar cómo construir extensiones de buen "
#~ "comportamiento para la Shell y por eso tiene poca funcionalidad por sí "
#~ "solo.\n"
#~ "Sin embargo, es posible personalizar el mensaje de bienvenida."
#~ msgid "CPU" #~ msgid "CPU"
#~ msgstr "CPU" #~ msgstr "CPU"
+171 -90
View File
@@ -6,85 +6,44 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n" "Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"shell&keywords=I18N+L10N&component=extensions\n" "issues\n"
"POT-Creation-Date: 2014-08-06 07:34+0000\n" "POT-Creation-Date: 2019-03-02 10:57+0000\n"
"PO-Revision-Date: 2014-08-06 21:43+0300\n" "PO-Revision-Date: 2019-03-10 19:24+0200\n"
"Last-Translator: Mattias Põldaru <mahfiaz@gmail.com>\n" "Last-Translator: Mart Raudsepp <leio@gentoo.org>\n"
"Language-Team: Estonian <gnome-et-list@gnome.org>\n" "Language-Team: Estonian <gnome-et-list@gnome.org>\n"
"Language: et\n" "Language: et\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.5.4\n" "X-Generator: Poedit 2.2\n"
#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3
msgid "GNOME Classic" msgid "GNOME Classic"
msgstr "Klassikaline GNOME" msgstr "Klassikaline GNOME"
#: data/gnome-classic.desktop.in:4
msgid "This session logs you into GNOME Classic" msgid "This session logs you into GNOME Classic"
msgstr "See on klassikalise GNOME seanss" msgstr "See on klassikalise GNOME seanss"
msgid "GNOME Shell Classic" #: extensions/apps-menu/extension.js:29
msgstr "GNOME klassikaline kest"
msgid "Window management and application launching"
msgstr "Akende haldus ja rakenduste käivitamine"
msgid "Attach modal dialog to the parent window"
msgstr "Modaalsed dialoogid on vanemakna küljes"
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"See võti on tähtsam võtmest org.gnome.mutter GNOME Shelli käivitamisel."
msgid "Arrangement of buttons on the titlebar"
msgstr "Nuppude järjestus tiitliribal"
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"See võti on tähtsam võtmest org.gnome.desktop.wm.preferences GNOME Shelli "
"käivitamisel."
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Akna automaatpaigutus on lubatud, kui aken lohistatakse ekraani serva"
msgid "Workspaces only on primary monitor"
msgstr "Tööalad on ainult peamisel ekraanil"
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Hiire all asuv aken saab fookuse alles hiire peatumisel"
msgid "Thumbnail only"
msgstr "Ainult pisipilt"
msgid "Application icon only"
msgstr "Ainult rakenduse ikoon"
msgid "Thumbnail and application icon"
msgstr "Pisipilt ja rakenduse ikoon"
msgid "Present windows as"
msgstr "Aknaid esitletakse kui"
msgid "Show only windows in the current workspace"
msgstr "Näidatakse ainult käesoleva tööala aknaid"
msgid "Activities Overview" msgid "Activities Overview"
msgstr "Tegevuste ülevaade" msgstr "Tegevuste ülevaade"
#: extensions/apps-menu/extension.js:118
msgid "Favorites" msgid "Favorites"
msgstr "Lemmikud" msgstr "Lemmikud"
#: extensions/apps-menu/extension.js:407
msgid "Applications" msgid "Applications"
msgstr "Rakendused" msgstr "Rakendused"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list" msgid "Application and workspace list"
msgstr "Rakenduste ja tööalade loend" msgstr "Rakenduste ja tööalade loend"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid "" msgid ""
"A list of strings, each containing an application id (desktop file name), " "A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number" "followed by a colon and the workspace number"
@@ -92,57 +51,47 @@ msgstr ""
"Rakenduste loend, sõnedest, mis sisaldavad rakenduse id-d (desktop faili " "Rakenduste loend, sõnedest, mis sisaldavad rakenduse id-d (desktop faili "
"nimi), koolonit ja tööala numbrit." "nimi), koolonit ja tööala numbrit."
#: extensions/auto-move-windows/prefs.js:60
msgid "Application" msgid "Application"
msgstr "Rakendus" msgstr "Rakendus"
#: extensions/auto-move-windows/prefs.js:71
#: extensions/auto-move-windows/prefs.js:134
msgid "Workspace" msgid "Workspace"
msgstr "Tööala" msgstr "Tööala"
#: extensions/auto-move-windows/prefs.js:89
msgid "Add Rule" msgid "Add Rule"
msgstr "Lisa reegel" msgstr "Lisa reegel"
#: extensions/auto-move-windows/prefs.js:111
msgid "Create new matching rule" msgid "Create new matching rule"
msgstr "Uue reegli loomine" msgstr "Uue reegli loomine"
#: extensions/auto-move-windows/prefs.js:117
msgid "Add" msgid "Add"
msgstr "Lisa" msgstr "Lisa"
#. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:100
#: extensions/places-menu/placeDisplay.js:217
#, javascript-format #, javascript-format
msgid "Ejecting drive '%s' failed:" msgid "Ejecting drive %s failed:"
msgstr "Seadme '%s' väljastamine nurjus:" msgstr "Seadme %s väljastamine nurjus:"
#: extensions/drive-menu/extension.js:116
msgid "Removable devices" msgid "Removable devices"
msgstr "Eemaldatavad seadmed" msgstr "Eemaldatavad seadmed"
msgid "Open File" #: extensions/drive-menu/extension.js:143
msgstr "Faili avamine" msgid "Open Files"
msgstr "Failide avamine"
msgid "Hello, world!"
msgstr "Tere, maailm!"
msgid "Alternative greeting text."
msgstr "Alternatiivne tervitustekst."
msgid ""
"If not empty, it contains the text that will be shown when clicking on the "
"panel."
msgstr "Kui see pole tühi, näidatakse seda teksti paneelile klõpsates."
msgid "Message"
msgstr "Sõnum"
msgid ""
"Example aims to show how to build well behaved extensions for the Shell and "
"as such it has little functionality on its own.\n"
"Nevertheless it's possible to customize the greeting message."
msgstr ""
"Näide hästi käituva Shelli laienduse koostamise kohta, see ise väga kasulik "
"ei ole.\n"
"See võimaldab muuta kõigest tervitusteksti."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows" msgid "Use more screen for windows"
msgstr "Rohkem pinda akende jaoks" msgstr "Rohkem pinda akende jaoks"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
msgid "" msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen " "Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. " "aspect ratio, and consolidating them further to reduce the bounding box. "
@@ -152,9 +101,11 @@ msgstr ""
"ja paigutatakse aknad üksteisele lähemale. See säte kehtib ainult koos " "ja paigutatakse aknad üksteisele lähemale. See säte kehtib ainult koos "
"akende loomuliku paigutusega." "akende loomuliku paigutusega."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top" msgid "Place window captions on top"
msgstr "Akende pealkirjad on üleval" msgstr "Akende pealkirjad on üleval"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid "" msgid ""
"If true, place window captions on top the respective thumbnail, overriding " "If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires " "shell default of placing it at the bottom. Changing this setting requires "
@@ -164,99 +115,229 @@ msgstr ""
"Shelli vaikimisi viisi, alla asetamist. Selle sätte muutmine mõjub alles " "Shelli vaikimisi viisi, alla asetamist. Selle sätte muutmine mõjub alles "
"pärast Shelli taaskäivitust." "pärast Shelli taaskäivitust."
#: extensions/places-menu/extension.js:79
#: extensions/places-menu/extension.js:83
msgid "Places" msgid "Places"
msgstr "Asukohad" msgstr "Asukohad"
#: extensions/places-menu/placeDisplay.js:59
#, javascript-format #, javascript-format
msgid "Failed to launch \"%s\"" msgid "Failed to mount volume for “%s”"
msgstr "\"%s\" käivitamine nurjus" msgstr ""
#: extensions/places-menu/placeDisplay.js:72
#, javascript-format
msgid "Failed to launch “%s”"
msgstr "„%s“ käivitamine nurjus"
#: extensions/places-menu/placeDisplay.js:133
#: extensions/places-menu/placeDisplay.js:156
msgid "Computer" msgid "Computer"
msgstr "Arvuti" msgstr "Arvuti"
#: extensions/places-menu/placeDisplay.js:343
msgid "Home" msgid "Home"
msgstr "Kodu" msgstr "Kodu"
#: extensions/places-menu/placeDisplay.js:387
msgid "Browse Network" msgid "Browse Network"
msgstr "Võrgu sirvimine" msgstr "Võrgu sirvimine"
msgid "CPU" #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgstr "Protsessor" msgid "Cycle Screenshot Sizes"
msgstr ""
msgid "Memory" #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgstr "Mälu" msgid "Cycle Screenshot Sizes Backward"
msgstr ""
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Theme name" msgid "Theme name"
msgstr "Kujunduse nimi" msgstr "Kujunduse nimi"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "Kujunduse nimi, mis laaditakse asukohast ~/.themes/name/gnome-shell" msgstr "Kujunduse nimi, mis laaditakse asukohast ~/.themes/name/gnome-shell"
#: extensions/window-list/extension.js:100
msgid "Close" msgid "Close"
msgstr "Sulge" msgstr "Sulge"
#: extensions/window-list/extension.js:120
msgid "Unminimize" msgid "Unminimize"
msgstr "Taasta" msgstr "Taasta"
#: extensions/window-list/extension.js:120
msgid "Minimize" msgid "Minimize"
msgstr "Minimeeri" msgstr "Minimeeri"
#: extensions/window-list/extension.js:127
msgid "Unmaximize" msgid "Unmaximize"
msgstr "Taasta suurus" msgstr "Taasta suurus"
#: extensions/window-list/extension.js:127
msgid "Maximize" msgid "Maximize"
msgstr "Maksimeeri" msgstr "Maksimeeri"
#: extensions/window-list/extension.js:408
msgid "Minimize all" msgid "Minimize all"
msgstr "Minimeeri kõik" msgstr "Minimeeri kõik"
#: extensions/window-list/extension.js:414
msgid "Unminimize all" msgid "Unminimize all"
msgstr "Taasta kõik" msgstr "Taasta kõik"
#: extensions/window-list/extension.js:420
msgid "Maximize all" msgid "Maximize all"
msgstr "Maksimeeri kõik" msgstr "Maksimeeri kõik"
#: extensions/window-list/extension.js:429
msgid "Unmaximize all" msgid "Unmaximize all"
msgstr "Taasta kõigi suurus" msgstr "Taasta kõigi suurus"
#: extensions/window-list/extension.js:438
msgid "Close all" msgid "Close all"
msgstr "Sulge kõik" msgstr "Sulge kõik"
#: extensions/window-list/extension.js:655
#: extensions/workspace-indicator/extension.js:21
msgid "Workspace Indicator" msgid "Workspace Indicator"
msgstr "Tööala näitaja" msgstr "Tööala näitaja"
#: extensions/window-list/extension.js:836
msgid "Window List" msgid "Window List"
msgstr "Akende loend" msgstr "Akende loend"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows" msgid "When to group windows"
msgstr "Millal aknaid grupeeritakse" msgstr "Millal aknaid grupeeritakse"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid "" msgid ""
"Decides when to group windows from the same application on the window list. " "Decides when to group windows from the same application on the window list. "
"Possible values are \"never\", \"auto\" and \"always\"." "Possible values are never”, “auto and always."
msgstr "" msgstr ""
"Määrab, millal akende loendis sama rakenduse aknaid grupeeritakse. " "Määrab, millal akende loendis sama rakenduse aknaid grupeeritakse. "
"Võimalikud väärtused on \"never\" (mitte kunagi), \"auto\" (automaatselt) ja " "Võimalikud väärtused on never (mitte kunagi), auto (automaatselt) ja "
"\"always\" (alati)." "always (alati)."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
msgid "Show the window list on all monitors"
msgstr ""
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid ""
"Whether to show the window list on all connected monitors or only on the "
"primary one."
msgstr ""
#: extensions/window-list/prefs.js:25
msgid "Window Grouping" msgid "Window Grouping"
msgstr "Akende grupeerimine" msgstr "Akende grupeerimine"
#: extensions/window-list/prefs.js:47
msgid "Never group windows" msgid "Never group windows"
msgstr "Aknaid ei grupeerita kunagi" msgstr "Aknaid ei grupeerita kunagi"
#: extensions/window-list/prefs.js:48
msgid "Group windows when space is limited" msgid "Group windows when space is limited"
msgstr "Aknaid grupeeritakse, kui ruumi on vähe" msgstr "Aknaid grupeeritakse, kui ruumi on vähe"
#: extensions/window-list/prefs.js:49
msgid "Always group windows" msgid "Always group windows"
msgstr "Aknaid grupeeritakse alati" msgstr "Aknaid grupeeritakse alati"
#: extensions/window-list/prefs.js:75
msgid "Show on all monitors"
msgstr ""
#: extensions/workspace-indicator/prefs.js:131
msgid "Workspace Names" msgid "Workspace Names"
msgstr "Tööalade nimed" msgstr "Tööalade nimed"
#: extensions/workspace-indicator/prefs.js:151
msgid "Name" msgid "Name"
msgstr "Nimi" msgstr "Nimi"
#: extensions/workspace-indicator/prefs.js:191
#, javascript-format #, javascript-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Tööala %d" msgstr "Tööala %d"
#~ msgid "GNOME Shell Classic"
#~ msgstr "GNOME klassikaline kest"
#~ msgid "Window management and application launching"
#~ msgstr "Akende haldus ja rakenduste käivitamine"
#~ msgid "Attach modal dialog to the parent window"
#~ msgstr "Modaalsed dialoogid on vanemakna küljes"
#~ msgid ""
#~ "This key overrides the key in org.gnome.mutter when running GNOME Shell."
#~ msgstr ""
#~ "See võti on tähtsam võtmest org.gnome.mutter GNOME Shelli käivitamisel."
#~ msgid "Arrangement of buttons on the titlebar"
#~ msgstr "Nuppude järjestus tiitliribal"
#~ msgid ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
#~ "running GNOME Shell."
#~ msgstr ""
#~ "See võti on tähtsam võtmest org.gnome.desktop.wm.preferences GNOME Shelli "
#~ "käivitamisel."
#~ msgid "Enable edge tiling when dropping windows on screen edges"
#~ msgstr ""
#~ "Akna automaatpaigutus on lubatud, kui aken lohistatakse ekraani serva"
#~ msgid "Workspaces only on primary monitor"
#~ msgstr "Tööalad on ainult peamisel ekraanil"
#~ msgid "Delay focus changes in mouse mode until the pointer stops moving"
#~ msgstr "Hiire all asuv aken saab fookuse alles hiire peatumisel"
#~ msgid "Thumbnail only"
#~ msgstr "Ainult pisipilt"
#~ msgid "Application icon only"
#~ msgstr "Ainult rakenduse ikoon"
#~ msgid "Thumbnail and application icon"
#~ msgstr "Pisipilt ja rakenduse ikoon"
#~ msgid "Present windows as"
#~ msgstr "Aknaid esitletakse kui"
#~ msgid "Show only windows in the current workspace"
#~ msgstr "Näidatakse ainult käesoleva tööala aknaid"
#~ msgid "Hello, world!"
#~ msgstr "Tere, maailm!"
#~ msgid "Alternative greeting text."
#~ msgstr "Alternatiivne tervitustekst."
#~ msgid ""
#~ "If not empty, it contains the text that will be shown when clicking on "
#~ "the panel."
#~ msgstr "Kui see pole tühi, näidatakse seda teksti paneelile klõpsates."
#~ msgid "Message"
#~ msgstr "Sõnum"
#~ msgid ""
#~ "Example aims to show how to build well behaved extensions for the Shell "
#~ "and as such it has little functionality on its own.\n"
#~ "Nevertheless it's possible to customize the greeting message."
#~ msgstr ""
#~ "Näide hästi käituva Shelli laienduse koostamise kohta, see ise väga "
#~ "kasulik ei ole.\n"
#~ "See võimaldab muuta kõigest tervitusteksti."
#~ msgid "CPU"
#~ msgstr "Protsessor"
#~ msgid "Memory"
#~ msgstr "Mälu"
+166 -191
View File
@@ -5,101 +5,44 @@
# assar <asiersar@yahoo.com>, 2011. # assar <asiersar@yahoo.com>, 2011.
# Iñaki Larrañaga Murgoitio <dooteo@zundan.com>, 2011, 2013, 2015, 2017. # Iñaki Larrañaga Murgoitio <dooteo@zundan.com>, 2011, 2013, 2015, 2017.
# Edurne Labaka <elabaka@uzei.com>, 2015. # Edurne Labaka <elabaka@uzei.com>, 2015.
# Asier Sarasua Garmendia <asiersarasua@ni.eus>, 2019, 2020, 2021.
#
msgid "" msgid ""
msgstr "" msgstr "Project-Id-Version: gnome-shell-extensions master\n"
"Project-Id-Version: gnome-shell-extensions master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "POT-Creation-Date: 2021-11-06 14:08+0000\n"
"shell&keywords=I18N+L10N&component=extensions\n" "PO-Revision-Date: 2021-12-25 00:42+0200\n"
"POT-Creation-Date: 2017-08-11 01:33+0000\n" "Last-Translator: Asier Sarasua Garmendia <asiersarasua@ni.eus>\n"
"PO-Revision-Date: 2017-08-27 15:49+0200\n"
"Last-Translator: Iñaki Larrañaga Murgoitio <dooteo@zundan.com>\n"
"Language-Team: Basque <librezale@librezale.eus>\n" "Language-Team: Basque <librezale@librezale.eus>\n"
"Language: eu\n" "Language: eu\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 1.5\n"
"X-Project-Style: gnome\n" "X-Project-Style: gnome\n"
#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 #: data/gnome-classic.desktop.in:3
msgid "GNOME Classic" msgid "GNOME Classic"
msgstr "GNOME Klasikoa" msgstr "GNOME Klasikoa"
#: data/gnome-classic.desktop.in:4 #: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4
#: data/gnome-classic-xorg.desktop.in:4
msgid "This session logs you into GNOME Classic" msgid "This session logs you into GNOME Classic"
msgstr "Saio honek GNOME Klasikoa hasten du" msgstr "Saio honek GNOME Klasikoa hasten du"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:7 #: data/gnome-classic-wayland.desktop.in:3
msgid "Attach modal dialog to the parent window" msgid "GNOME Classic on Wayland"
msgstr "Erantsi elkarrizketa-koadro modala leiho gurasoari" msgstr "GNOME klasikoa Wayland gainean"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:8 #: data/gnome-classic-xorg.desktop.in:3
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:25 msgid "GNOME Classic on Xorg"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:33 msgstr "GNOME klasikoa Xorg gainean"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:41
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Gako honek org.gnome.mutter-eko gakoa gainidazten du GNOME Shell exekutatzen "
"ari denean."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:16 #: extensions/apps-menu/extension.js:112
msgid "Arrangement of buttons on the titlebar"
msgstr "Botoien antolamendua titulu-barran"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:17
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"Gako honekorg.gnome.desktop.wm.preferences-eko gakoa gainidazten du GNOME "
"Shell exekutatzen ari denean."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:24
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Gaitu ertza lauza gisa ezartzea leihoak pantailaren ertzetara jaregitean"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:32
msgid "Workspaces only on primary monitor"
msgstr "Laneko areak pantaila nagusian soilik"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:40
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr ""
"Fokuaren aldaketaren atzerapena saguaren moduan erakusleak mugitzeari utzi "
"arte"
#: extensions/alternate-tab/prefs.js:20
msgid "Thumbnail only"
msgstr "Koadro txikiak soilik"
#: extensions/alternate-tab/prefs.js:21
msgid "Application icon only"
msgstr "Aplikazioen ikonoa soilik"
#: extensions/alternate-tab/prefs.js:22
msgid "Thumbnail and application icon"
msgstr "Koadro txikien eta aplikazioen ikonoa"
#: extensions/alternate-tab/prefs.js:38
msgid "Present windows as"
msgstr "Aurkeztu leihoa honela"
#: extensions/alternate-tab/prefs.js:69
msgid "Show only windows in the current workspace"
msgstr "Erakutsi leihoak bakarrik uneko laneko arean"
#: extensions/apps-menu/extension.js:41
msgid "Activities Overview"
msgstr "Jardueren ikuspegi orokorra"
#: extensions/apps-menu/extension.js:141
msgid "Favorites" msgid "Favorites"
msgstr "Gogokoak" msgstr "Gogokoak"
#: extensions/apps-menu/extension.js:436 #: extensions/apps-menu/extension.js:366
msgid "Applications" msgid "Applications"
msgstr "Aplikazioak" msgstr "Aplikazioak"
@@ -111,76 +54,31 @@ msgstr "Aplikazioen eta laneko areen zerrenda"
msgid "" msgid ""
"A list of strings, each containing an application id (desktop file name), " "A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number" "followed by a colon and the workspace number"
msgstr "" msgstr "Kateen zerrenda bat, bakoitzak aplikazio-ID bat duena (mahaigainaren fitxategi-izena) eta jarraian bi puntu eta laneko arearen zenbakia dituena"
"Kateen zerrenda bat, bakoitzak aplikazio-ID bat duena (mahaigainaren "
"fitxategi-izena) eta jarraian bi puntu eta laneko arearen zenbakia dituena"
#: extensions/auto-move-windows/prefs.js:60 #: extensions/auto-move-windows/prefs.js:34
msgid "Application" msgid "Workspace Rules"
msgstr "Aplikazioa" msgstr "Laneko areen arauak"
#: extensions/auto-move-windows/prefs.js:69 #: extensions/auto-move-windows/prefs.js:236
#: extensions/auto-move-windows/prefs.js:127
msgid "Workspace"
msgstr "Laneko area"
#: extensions/auto-move-windows/prefs.js:85
msgid "Add Rule" msgid "Add Rule"
msgstr "Gehitu araua" msgstr "Gehitu araua"
#: extensions/auto-move-windows/prefs.js:106
msgid "Create new matching rule"
msgstr "Sortu bat datorren arau berria"
#: extensions/auto-move-windows/prefs.js:111
msgid "Add"
msgstr "Gehitu"
#. TRANSLATORS: %s is the filesystem name #. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:107 #: extensions/drive-menu/extension.js:133
#: extensions/places-menu/placeDisplay.js:233
#, javascript-format #, javascript-format
msgid "Ejecting drive “%s” failed:" msgid "Ejecting drive “%s” failed:"
msgstr "Huts egin du “%s“ unitatea egoztean: " msgstr "Huts egin du “%s“ unitatea egoztean:"
#: extensions/drive-menu/extension.js:125 #: extensions/drive-menu/extension.js:149
msgid "Removable devices" msgid "Removable devices"
msgstr "Gailu aldagarriak" msgstr "Gailu aldagarriak"
#: extensions/drive-menu/extension.js:150 #: extensions/drive-menu/extension.js:171
#| msgid "Open File"
msgid "Open Files" msgid "Open Files"
msgstr "Ireki fitxategiak" msgstr "Ireki fitxategiak"
#: extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "Kaixo mundua!"
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:5
msgid "Alternative greeting text."
msgstr "Ongi etorriaren bestelako testua."
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:6
msgid ""
"If not empty, it contains the text that will be shown when clicking on the "
"panel."
msgstr "Ez badago hutsik, panelean klik egitean erakutsiko den testua dauka."
#: extensions/example/prefs.js:30
msgid "Message"
msgstr "Mezua"
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: extensions/example/prefs.js:43
msgid ""
"Example aims to show how to build well behaved extensions for the Shell and "
"as such it has little functionality on its own.\n"
"Nevertheless its possible to customize the greeting message."
msgstr ""
"Shell-erako portaera egokia duten hedapenak nola eraikitzen den erakusteko "
"helburua du adibideak, ondorioz bere kasa funtzionalitate baxukoa da.\n"
"Hala ere, ongi etorriko mezua pertsonalizatzeko aukera dago."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows" msgid "Use more screen for windows"
msgstr "Erabili pantaila gehiago leihoentzako" msgstr "Erabili pantaila gehiago leihoentzako"
@@ -190,11 +88,7 @@ msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen " "Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. " "aspect ratio, and consolidating them further to reduce the bounding box. "
"This setting applies only with the natural placement strategy." "This setting applies only with the natural placement strategy."
msgstr "" msgstr "Saiatu pantaila gehiago erabiltzen leihoen koadro txikiak kokatzeko pantailaren aspektu-erlaziora egokituz, eta haiek taldekatu muga-koadroa txikiagotzeko. Ezarpen hau kokapen naturalaren estrategiarekin soilik aplikatzen da."
"Saiatu pantaila gehiago erabiltzen leihoen koadro txikiak kokatzeko "
"pantailaren aspektu-erlaziora egokituz, eta haiek taldekatu muga-koadroa "
"txikiagotzeko. Ezarpen hau kokapen naturalaren estrategiarekin soilik "
"aplikatzen da."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top" msgid "Place window captions on top"
@@ -205,37 +99,33 @@ msgid ""
"If true, place window captions on top the respective thumbnail, overriding " "If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires " "shell default of placing it at the bottom. Changing this setting requires "
"restarting the shell to have any effect." "restarting the shell to have any effect."
msgstr "" msgstr "TRUE (egia) bada, leihoen epigrafeak dagokien koadro txikien gainean jarriko ditu, Shell-aren lehenespena (behean jartzearena) gainidatziz. Ezarpen hau aldatzeko eta aplikatzeko Shell berrabiarazi behar da."
"TRUE (egia) bada, leihoen epigrafeak dagokien koadro txikien gainean jarriko "
"ditu, Shell-aren lehenespena (behean jartzearena) gainidatziz. Ezarpen hau "
"aldatzeko eta aplikatzeko Shell berrabiarazi behar da."
#: extensions/places-menu/extension.js:78 #: extensions/places-menu/extension.js:88
#: extensions/places-menu/extension.js:81 #: extensions/places-menu/extension.js:91
msgid "Places" msgid "Places"
msgstr "Lekuak" msgstr "Lekuak"
#: extensions/places-menu/placeDisplay.js:65 #: extensions/places-menu/placeDisplay.js:46
#, javascript-format
msgid "Failed to launch “%s”"
msgstr "Huts egin du '%s' abiaraztean"
#: extensions/places-menu/placeDisplay.js:61
#, javascript-format #, javascript-format
#| msgid "Failed to launch “%s”"
msgid "Failed to mount volume for “%s”" msgid "Failed to mount volume for “%s”"
msgstr "Huts egin du “%s“(r)en bolumena muntatzean" msgstr "Huts egin du “%s“(r)en bolumena muntatzean"
#: extensions/places-menu/placeDisplay.js:78 #: extensions/places-menu/placeDisplay.js:148
#, javascript-format #: extensions/places-menu/placeDisplay.js:171
msgid "Failed to launch “%s”"
msgstr "Huts egin du “%s“ abiaraztean"
#: extensions/places-menu/placeDisplay.js:137
#: extensions/places-menu/placeDisplay.js:160
msgid "Computer" msgid "Computer"
msgstr "Ordenagailua" msgstr "Ordenagailua"
#: extensions/places-menu/placeDisplay.js:303 #: extensions/places-menu/placeDisplay.js:359
msgid "Home" msgid "Home"
msgstr "Karpeta nagusia" msgstr "Karpeta nagusia"
#: extensions/places-menu/placeDisplay.js:347 #: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network" msgid "Browse Network"
msgstr "Arakatu sarea" msgstr "Arakatu sarea"
@@ -244,7 +134,6 @@ msgid "Cycle Screenshot Sizes"
msgstr "Pantaila-argazkien tamainak begiztan" msgstr "Pantaila-argazkien tamainak begiztan"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11 #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
#| msgid "Cycle Screenshot Sizes"
msgid "Cycle Screenshot Sizes Backward" msgid "Cycle Screenshot Sizes Backward"
msgstr "Pantaila-argazkien tamainak atzerantz begiztan" msgstr "Pantaila-argazkien tamainak atzerantz begiztan"
@@ -256,54 +145,49 @@ msgstr "Gaiaren izena"
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "Gaiaren izena, ~/.themes/izena/gnome-shell direktoriotik kargatzeko" msgstr "Gaiaren izena, ~/.themes/izena/gnome-shell direktoriotik kargatzeko"
#: extensions/window-list/extension.js:110 #: extensions/window-list/extension.js:72
msgid "Close" msgid "Close"
msgstr "Itxi" msgstr "Itxi"
#: extensions/window-list/extension.js:129 #: extensions/window-list/extension.js:92
msgid "Unminimize" msgid "Unminimize"
msgstr "Leheneratu" msgstr "Leheneratu"
#: extensions/window-list/extension.js:130 #: extensions/window-list/extension.js:92
msgid "Minimize" msgid "Minimize"
msgstr "Minimizatu" msgstr "Minimizatu"
#: extensions/window-list/extension.js:136 #: extensions/window-list/extension.js:99
msgid "Unmaximize" msgid "Unmaximize"
msgstr "Desmaximizatu" msgstr "Desmaximizatu"
#: extensions/window-list/extension.js:137 #: extensions/window-list/extension.js:99
msgid "Maximize" msgid "Maximize"
msgstr "Maximizatu" msgstr "Maximizatu"
#: extensions/window-list/extension.js:420 #: extensions/window-list/extension.js:434
msgid "Minimize all" msgid "Minimize all"
msgstr "Minimizatu denak" msgstr "Minimizatu denak"
#: extensions/window-list/extension.js:428 #: extensions/window-list/extension.js:440
msgid "Unminimize all" msgid "Unminimize all"
msgstr "Leheneratu denak" msgstr "Leheneratu denak"
#: extensions/window-list/extension.js:436 #: extensions/window-list/extension.js:446
msgid "Maximize all" msgid "Maximize all"
msgstr "Maximizatu denak" msgstr "Maximizatu denak"
#: extensions/window-list/extension.js:445 #: extensions/window-list/extension.js:454
msgid "Unmaximize all" msgid "Unmaximize all"
msgstr "Desmaximizatu denak" msgstr "Desmaximizatu denak"
#: extensions/window-list/extension.js:454 #: extensions/window-list/extension.js:462
msgid "Close all" msgid "Close all"
msgstr "Itxi denak" msgstr "Itxi denak"
#: extensions/window-list/extension.js:678 #: extensions/window-list/extension.js:741
#: extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Lan arearen adierazlea"
#: extensions/window-list/extension.js:842
msgid "Window List" msgid "Window List"
msgstr "Leihoen zerrenda" msgstr "Leiho-zerrenda"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows" msgid "When to group windows"
@@ -313,56 +197,148 @@ msgstr "Noiz elkartu leihoak"
msgid "" msgid ""
"Decides when to group windows from the same application on the window list. " "Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”." "Possible values are “never”, “auto” and “always”."
msgstr "" msgstr "Aplikazio bereko leihoak leihoen zerrendan noiz elkartuko diren erabakitzen du. Balio erabilgarriak: “never“ (inoiz ere ez), “auto“ (automatikoa) eta “always“ (beti)."
"Aplikazio bereko leihoak leihoen zerrendan noiz elkartuko diren erabakitzen "
"du. Balio erabilgarriak: “never“ (inoiz ere ez), “auto“ (automatikoa) eta "
"“always“ (beti)."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:86
msgid "Show windows from all workspaces"
msgstr "Erakutsi laneko area guztietako leihoak"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr "Laneko area guztietako leihoak edo uneko areakoak soilik erakutsiko diren."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors" msgid "Show the window list on all monitors"
msgstr "Erakutsi leihoen zerrenda pantaila guztietan" msgstr "Erakutsi leihoen zerrenda pantaila guztietan"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid "" msgid ""
"Whether to show the window list on all connected monitors or only on the " "Whether to show the window list on all connected monitors or only on the "
"primary one." "primary one."
msgstr "" msgstr "Leihoen zerrenda konektatutako pantaila guztietan edo soilik pantaila nagusian erakutsiko den."
"Leihoen zerrenda konektatutako pantaila guztietan edo soilik pantaila "
"nagusian erakutsiko den."
#: extensions/window-list/prefs.js:32 #: extensions/window-list/prefs.js:39
msgid "Window Grouping" msgid "Window Grouping"
msgstr "Leihoak elkartzea" msgstr "Leiho-elkartzea"
#: extensions/window-list/prefs.js:50 #: extensions/window-list/prefs.js:63
msgid "Never group windows" msgid "Never group windows"
msgstr "Leihoak inoiz ez elkartu" msgstr "Leihoak inoiz ez elkartu"
#: extensions/window-list/prefs.js:51 #: extensions/window-list/prefs.js:64
msgid "Group windows when space is limited" msgid "Group windows when space is limited"
msgstr "Elkartu leihoak lekua mugatuta dagoenean" msgstr "Elkartu leihoak lekua mugatuta dagoenean"
#: extensions/window-list/prefs.js:52 #: extensions/window-list/prefs.js:65
msgid "Always group windows" msgid "Always group windows"
msgstr "Elkartu beti leihoak" msgstr "Elkartu beti leihoak"
#: extensions/window-list/prefs.js:75 #: extensions/window-list/prefs.js:81
msgid "Show on all monitors" msgid "Show on all monitors"
msgstr "Erakutsi pantaila guztietan" msgstr "Erakutsi pantaila guztietan"
#: extensions/workspace-indicator/prefs.js:141 #: extensions/window-list/workspaceIndicator.js:249
#: extensions/workspace-indicator/extension.js:254
msgid "Workspace Indicator"
msgstr "Lan arearen adierazlea"
#: extensions/workspace-indicator/prefs.js:33
msgid "Workspace Names" msgid "Workspace Names"
msgstr "Laneko areen izenak" msgstr "Laneko areen izenak"
#: extensions/workspace-indicator/prefs.js:157 #: extensions/workspace-indicator/prefs.js:66
msgid "Name"
msgstr "Izena"
#: extensions/workspace-indicator/prefs.js:198
#, javascript-format #, javascript-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "%d. laneko area" msgstr "%d. laneko area"
#: extensions/workspace-indicator/prefs.js:207
msgid "Add Workspace"
msgstr "Gehitu laneko area"
#~ msgid "Application"
#~ msgstr "Aplikazioa"
#~ msgid "Create new matching rule"
#~ msgstr "Sortu bat datorren arau berria"
#~ msgid "Add"
#~ msgstr "Gehitu"
#~ msgid "Name"
#~ msgstr "Izena"
#~ msgid "Attach modal dialog to the parent window"
#~ msgstr "Erantsi elkarrizketa-koadro modala leiho gurasoari"
#~ msgid ""
#~ "This key overrides the key in org.gnome.mutter when running GNOME Shell."
#~ msgstr ""
#~ "Gako honek org.gnome.mutter-eko gakoa gainidazten du GNOME Shell "
#~ "exekutatzen ari denean."
#~ msgid "Arrangement of buttons on the titlebar"
#~ msgstr "Botoien antolamendua titulu-barran"
#~ msgid ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
#~ "running GNOME Shell."
#~ msgstr ""
#~ "Gako honekorg.gnome.desktop.wm.preferences-eko gakoa gainidazten du GNOME "
#~ "Shell exekutatzen ari denean."
#~ msgid "Enable edge tiling when dropping windows on screen edges"
#~ msgstr ""
#~ "Gaitu ertza lauza gisa ezartzea leihoak pantailaren ertzetara jaregitean"
#~ msgid "Workspaces only on primary monitor"
#~ msgstr "Laneko areak pantaila nagusian soilik"
#~ msgid "Delay focus changes in mouse mode until the pointer stops moving"
#~ msgstr ""
#~ "Fokuaren aldaketaren atzerapena saguaren moduan erakusleak mugitzeari "
#~ "utzi arte"
#~ msgid "Thumbnail only"
#~ msgstr "Koadro txikiak soilik"
#~ msgid "Application icon only"
#~ msgstr "Aplikazioen ikonoa soilik"
#~ msgid "Thumbnail and application icon"
#~ msgstr "Koadro txikien eta aplikazioen ikonoa"
#~ msgid "Present windows as"
#~ msgstr "Aurkeztu leihoa honela"
#~ msgid "Activities Overview"
#~ msgstr "Jardueren ikuspegi orokorra"
#~ msgid "Hello, world!"
#~ msgstr "Kaixo mundua!"
#~ msgid "Alternative greeting text."
#~ msgstr "Ongi etorriaren bestelako testua."
#~ msgid ""
#~ "If not empty, it contains the text that will be shown when clicking on "
#~ "the panel."
#~ msgstr ""
#~ "Ez badago hutsik, panelean klik egitean erakutsiko den testua dauka."
#~ msgid "Message"
#~ msgstr "Mezua"
#~ msgid ""
#~ "Example aims to show how to build well behaved extensions for the Shell "
#~ "and as such it has little functionality on its own.\n"
#~ "Nevertheless its possible to customize the greeting message."
#~ msgstr ""
#~ "Shell-erako portaera egokia duten hedapenak nola eraikitzen den "
#~ "erakusteko helburua du adibideak, ondorioz bere kasa funtzionalitate "
#~ "baxukoa da.\n"
#~ "Hala ere, ongi etorriko mezua pertsonalizatzeko aukera dago."
#~ msgid "CPU" #~ msgid "CPU"
#~ msgstr "PUZ" #~ msgstr "PUZ"
@@ -375,7 +351,6 @@ msgstr "%d. laneko area"
#~ msgid "Window management and application launching" #~ msgid "Window management and application launching"
#~ msgstr "Leiho-kudeaketa eta aplikazioak abiaraztea" #~ msgstr "Leiho-kudeaketa eta aplikazioak abiaraztea"
#, fuzzy
#~ msgid "Online Accounts" #~ msgid "Online Accounts"
#~ msgstr "Nire kontua" #~ msgstr "Nire kontua"

Some files were not shown because too many files have changed in this diff Show More