Compare commits

...

376 Commits
3.3.3 ... 3.9.5

Author SHA1 Message Date
Giovanni Campagna
79055cf7a0 Bump version to 3.9.5
To go along GNOME Shell 3.9.5

And fix distcheck at the same time.
2013-07-30 15:34:13 +02:00
Giovanni Campagna
2e5d8c7384 Fix a number of undeclared variable warnings
"for (prop in object)" needs a "var prop" before, or it declares
a global property.
2013-07-30 13:23:47 +02:00
Giovanni Campagna
1d6f85c8f4 apps-menu: update to work with gnome-shell master
The span parameter was removed from the PopupMenuItem API.
2013-07-30 13:20:33 +02:00
Giovanni Campagna
fb8ad70db6 Remove alternative-status-menu extension
As part of the new unified status menu, the old status menu
was reworked considerably in 3.9.5, and the extension as it
was written does not make sense.
If hibernation is needed, it should be added (through another
extension) in the shutdown dialog.
2013-07-30 13:17:00 +02:00
Nilamdyuti Goswami
f67db2a2af Added Assamese LINGUAS 2013-07-29 13:10:41 +05:30
Nilamdyuti Goswami
13c3512ed0 Assamese translation updated 2013-07-29 13:08:57 +05:30
Yuri Myasoedov
71f19d8391 Updated Russian translation 2013-07-27 15:41:39 +04:00
Emmanuele Bassi
7173fa9e9e Revert "Added Assamese to LINGUAS"
This reverts commit e71d48853d.

The Assamese PO file does not exist in the repository. It should be
committed before modifying the LINGUAS file, to avoid breaking the
build.
2013-07-26 11:08:23 +01:00
Nilamdyuti Goswami
e71d48853d Added Assamese to LINGUAS 2013-07-26 15:30:45 +05:30
Sweta Kothari
f5c8ddf6cd Added gu in LINGUAS file 2013-07-19 14:31:20 +05:30
Sweta Kothari
55d80ea091 Updated Gujarati Translations 2013-07-19 14:18:27 +05:30
Milo Casagrande
66d4b0adc4 [l10n] Updated Italian translation. 2013-07-19 09:34:12 +02:00
Giovanni Campagna
1673dc6e9b Bump version to 3.9.4
To go along GNOME Shell 3.9.4
2013-07-18 12:45:07 +02:00
Anish A
6105afed0d Updated Malayalam Translation 2013-07-17 21:06:17 +05:30
Giovanni Campagna
ae9df9f001 user-theme: look for gnome-shell themes in ~/.local/share too
Just like we look in XDG_DATA_DIRS, we should honor XDG_DATA_HOME
as well.
For compatibility reasons, we look in ~/.themes first, then ~/.local/share,
then /usr/share.
2013-07-14 15:19:14 +02:00
tuhaihe
05e42a4b95 update Simplified Chinese (zh_CN) translation 2013-07-12 21:12:14 +08:00
Benjamin Steinwender
9e5079bd83 Updated German translation 2013-07-08 17:23:34 +02:00
Trần Ngọc Quân
b408fc4d17 Updated Vietnamese translation 2013-07-06 18:23:13 +07:00
Nguyễn Thái Ngọc Duy
0c6825d2c5 po/vi: import from Damned Lies 2013-07-06 18:21:03 +07:00
Giovanni Campagna
6fbc63e9e6 alternative-status-menu: unpack the result of CanHibernate
The DBus call yields a GVariant, which we need to unpack to
obtain the JS value to compare.

https://bugzilla.gnome.org/show_bug.cgi?id=702300
2013-07-04 16:51:35 +02:00
Giovanni Campagna
a2f14c57c5 apps-menu: don't store the hot corner at creation
HotCorners become invalid when the xrandr configuration changes,
so instead of storing it fetch it directly from layoutManager when
needed.

https://bugzilla.gnome.org/show_bug.cgi?id=702038
2013-07-04 16:06:24 +02:00
Andika Triwidada
e03343d4a8 Updated Indonesian translation 2013-07-04 18:35:01 +07:00
Rafael Ferreira
9df6831f64 Updated Brazilian Portuguese translation 2013-06-30 08:58:07 -03:00
Giovanni Campagna
b82400cd66 Bump version to 3.9.3
To go along GNOME Shell 3.9.3
2013-06-18 21:39:29 +02:00
Giovanni Campagna
858e67d33e systemMonitor: don't propagate clicks up
Otherwise you get gnome-system-monitor and a message tray menu.
2013-06-18 21:36:41 +02:00
Giovanni Campagna
b66824c500 xrandr-indicator: fix syntax error
It shows the level of testing or usefulness this extension has...
2013-06-18 21:36:10 +02:00
Giovanni Campagna
76713a74be places-menu: null-check g_volume_get_identifier()
Not all volumes have the 'class' identifier (for example MTP doesn't),
and we can't apply indexOf on null.
2013-06-17 21:42:15 +02:00
Kjartan Maraas
c92c2fa6b9 Updated Norwegian bokmål translation 2013-06-17 12:30:23 +02:00
Victor Ibragimov
c436598ba6 Tajik translation updated 2013-06-16 23:37:13 +05:00
Piotr Drąg
9dbf937d0f Updated POTFILES.in 2013-06-15 18:55:44 +02:00
Daniel Mustieles
daf081619e Updated Spanish translation 2013-06-13 11:25:28 +02:00
Daniel Mustieles
2b332d70f0 Updated Spanish translation 2013-06-13 11:25:21 +02:00
Fran Diéguez
18f6d63790 Updated Galician translations 2013-06-10 10:25:19 +02:00
Jeremy Bicha
85038e2f56 classic: Drop IsRunnableHelper
https://bugzilla.gnome.org/show_bug.cgi?id=701886
2013-06-08 20:24:34 -04:00
Piotr Drąg
f01018a063 Updated Polish translation 2013-06-08 21:06:36 +02:00
Wepmaschda
64d76fef6a adapt native-window-placement to 3.9 changes
* remove unnecessary chromeHeight that breaks the system
* copy original _updateWindowPositions from 3.9
* use nativeWindowPlacement in update function
* tidy up NaturalWindowPlacement function

https://bugzilla.gnome.org/show_bug.cgi?id=699054
2013-06-08 18:47:02 +02:00
Wepmaschda
80082fdfcb make windowCaptionsOnTop working again
* changed positionWindows() to relayout()
* additionally marked the difference to the original relayout() function.

https://bugzilla.gnome.org/show_bug.cgi?id=699054
2013-06-08 18:47:02 +02:00
Wepmaschda
2396490d1e reduce gnome-shell modifications
* use original realPositionWindows() and map _computeAllWindowSlots() to our function (_calculateWindowTransformationsNatural()).
* adapted _calculateWindowTransformationsNatural() to _computeAllWindowSlots()' behaviour

https://bugzilla.gnome.org/show_bug.cgi?id=699054
2013-06-08 18:47:02 +02:00
Marek Černocký
0c47e96a3b Updated Czech translation 2013-06-08 07:50:10 +02:00
Florian Müllner
0ffaf62c4c classic: Replace mini-extensions with mode-specific overridesSchema
Some default values differ between classic and normal sessions. We
used to implement this by overriding the shell's default values in
mini-extensions (or more precisely: reversing the shell's overrides).
Use a mode-specific overridesSchema instead, which has the advantage
that settings defaults will not change unexpectedly when extensions
are disabled/enabled (for instance during screen locks).

https://bugzilla.gnome.org/show_bug.cgi?id=701717
2013-06-08 00:47:30 +02:00
Jakub Steiner
6f572119d8 Style scrollbar in classic bubbles
https://bugzilla.gnome.org/show_bug.cgi?id=700485
2013-06-07 20:18:02 +02:00
Florian Müllner
505220f163 classic: Adjust popup menu slider style
https://bugzilla.gnome.org/show_bug.cgi?id=697917
2013-06-07 20:16:05 +02:00
Giovanni Campagna
24967c7cbe xrandr-indicator: stop processing RandR events when disabled
It's hard to tell people to disconnect their signals, when we
are the first to forget it...
2013-06-06 23:33:57 +02:00
Jorge Pérez Pérez
ee1c850f47 Added Aragonese translation 2013-06-05 22:05:14 +02:00
Dušan Kazik
fb0dcec005 Updated slovak translation 2013-06-05 20:52:19 +02:00
Dimitris Spingos
f5b2d17a4a Updated Greek translation 2013-06-05 08:14:28 +03:00
Kjartan Maraas
dca43009b3 Updated Norwegian bokmål translation 2013-06-02 01:37:57 +02:00
Victor Ibragimov
08b5f5fe82 Tajik translation added 2013-06-01 00:01:53 +05:00
Fran Diéguez
16e0d467f8 Updated Galician translations 2013-05-31 01:17:06 +02:00
Giovanni Campagna
5e10182f94 Bump version to 3.9.2
To go along GNOME Shell 3.9.2
2013-05-28 20:09:11 +02:00
Giovanni Campagna
ae244569ef alternative-status-menu: take GSettings in consideration for item visibility
Seems this was lost at some point.
2013-05-24 19:15:30 +02:00
Florian Müllner
292a48073a apps-menu: Add some padding to ScrollView
In case the scroll bar is visible, is is currently positioned at
the very edge of the popup, which looks fairly bad; so add some
minimal padding.

https://bugzilla.gnome.org/show_bug.cgi?id=700852
2013-05-22 19:40:02 +02:00
Giovanni Campagna
274a6f040c Update descriptions of extensions
Mark classic mode extensions as such, so bug reports don't go
lost in my inbox.
2013-05-20 19:06:59 +02:00
Мирослав Николић
aaacd3dba4 Updated Serbian translation 2013-05-14 18:51:11 +02:00
Florian Müllner
45767c93d5 window-list: Make bottom panel taller in classic mode
Consider additional borders in classic styling for the panel height.

https://bugzilla.gnome.org/show_bug.cgi?id=698169
2013-05-13 22:01:01 +02:00
Giovanni Campagna
6094c21634 Bump version to 3.9.1
To go along GNOME Shell 3.9.1
2013-05-01 00:46:47 +02:00
Giovanni Campagna
5052c6d350 windowsNavigator: update for gnome-shell changes
The position of a workspace is not part of a geometry object.
2013-05-01 00:45:06 +02:00
Florian Müllner
f38d61b4c9 window-list: Use notify::n-workspaces to recreate workspace menu
When the number of workspaces changes, we clear the existing menu
and recreate it based on the screen::n-workspaces property, so it
is slightly more correct to track changes to the property directly
instead of using the workspace-added/workspace-removed signals.
This change also fixes a corner case, where changes to the property
before workspaces are initialized are missed and we end up with the
wrong number of workspaces.

https://bugzilla.gnome.org/show_bug.cgi?id=699350
2013-04-30 21:54:05 +02:00
Florian Müllner
8ba3bedd20 workspace-indicator: Adjust to PopupMenu API change
setShowDot() has become setOrnament()

https://bugzilla.gnome.org/show_bug.cgi?id=699335
2013-04-30 17:49:49 +02:00
Florian Müllner
d903f1f15b xrandr-indicator: Adjust to PopupMenu API change
setShowDot() has become setOrnament()

https://bugzilla.gnome.org/show_bug.cgi?id=699335
2013-04-30 17:49:49 +02:00
Florian Müllner
8628addfc9 window-list: Adjust to PopupMenu API change
setShowDot() has become setOrnament().

https://bugzilla.gnome.org/show_bug.cgi?id=699335
2013-04-30 17:49:48 +02:00
Aurimas Černius
27b5178646 Updated Lithuanian translation 2013-04-27 23:40:52 +03:00
Matej Urbančič
6b2fa94f5a Updated Slovenian translation 2013-04-21 08:26:05 +02:00
Marek Černocký
174ffc05f2 Updated Czech translation 2013-04-20 15:37:04 +02:00
Piotr Drąg
8ba1cc7c9d Updated Polish translation 2013-04-19 21:14:04 +02:00
Daniel Mustieles
20e164fb39 Updated Spanish translation 2013-04-18 13:12:37 +02:00
Rafael Ferreira
568f63917a Updated Brazilian Portuguese translation 2013-04-16 22:43:15 -03:00
Giovanni Campagna
e2a2f12c10 Bump version to 3.8.1
To follow the 3.8.1 stable release of GNOME
2013-04-16 22:08:26 +02:00
Giovanni Campagna
c1bc688a5c WindowList: add a workspace switching menu
Import a copy of the workspace indicator extension, to have it
in the bottom panel.

https://bugzilla.gnome.org/show_bug.cgi?id=694914
2013-04-16 22:00:39 +02:00
Florian Müllner
360ba43579 window-list: Add support for AUTO grouping
In addition to "always" and "never", gnome-panel supported an "auto"
grouping mode, which only started to group items when running out of
available space. It makes sense for us to support the same option in
the window-list extension, so implement it.

https://bugzilla.gnome.org/show_bug.cgi?id=697157
2013-04-16 20:05:27 +02:00
Florian Müllner
1a41b639ef window-list: Don't rely solely on -st-natural-width
-st-natural-width is useful to request a larger-than-usual width,
add back the max-width removed in commit 702cf52cfc to also request
a smaller-than-usual width as necessary.
2013-04-16 20:05:26 +02:00
Florian Müllner
4ebd46c9f0 classic: Style startup spinner differently in classic mode
https://bugzilla.gnome.org/show_bug.cgi?id=693688
2013-04-16 19:28:12 +02:00
Florian Müllner
702cf52cfc window-list: Fill max-width if possible
Items in the window list should take up a fixed amount of space
unless the list is full and items need to shrink. To achieve this,
replace the max-width with the newly added -st-natural-width.

https://bugzilla.gnome.org/show_bug.cgi?id=695392
2013-04-16 18:10:16 +02:00
Matthias Clasen
689dda0515 Revert "window-list: add a workspace switcher"
This reverts commit f86f09955b.

Pushed by accident.
2013-04-08 20:25:33 -04:00
Matthias Clasen
db0b1af99a classic: Tweak separator colors
The previous commit made them too prominent, so tone it down.
2013-04-08 20:21:52 -04:00
Matthias Clasen
cdbb94ccbf classic: Improve menu separators
These were barely showing up in white-on-light-gray, so
turn them dark.

https://bugzilla.gnome.org/show_bug.cgi?id=697596
2013-04-08 19:35:53 -04:00
Giovanni Campagna
f86f09955b window-list: add a workspace switcher
This is the most basic version of a workspace switcher, taken from
Frippery Bottom Panel and adapted. It handles clicks and scrolls,
and does not show window thumbnails or shapes.
Note that, differently from the frippery version, it won't change
the workspace layout, and actually assume a linear vertical layout,
which is then shown horizontally. This is to keep compatibility
with the overview, which uses a vertical layout.

https://bugzilla.gnome.org/show_bug.cgi?id=694914
2013-04-08 10:19:26 -04:00
Милош Поповић
58c36bd719 Small fix in Serbian translation 2013-04-08 15:35:27 +02:00
Florian Müllner
46a216853f window-list: Update icons on icon theme changes
https://bugzilla.gnome.org/show_bug.cgi?id=697400
2013-04-07 21:11:31 +02:00
Florian Müllner
25be4d60b4 app-menu: Update icons on icon theme changes
https://bugzilla.gnome.org/show_bug.cgi?id=697400
2013-04-07 21:11:31 +02:00
Florian Müllner
94941843e3 apps-menu: Allow for keynav between categories/applications
PanelMenu.Button listens to key-press-events on the corresponding
menu to move focus to neighboring buttons on left/right arrow. In
order to allow keynav from the category list on the left to the
application list on the right and vice-versa, we may need to suppress
the parent behavior depending on the currently focused actor, so
overwrite the signal handler accordingly.

https://bugzilla.gnome.org/show_bug.cgi?id=693074
2013-04-07 21:11:31 +02:00
Rui Matos
6adeed4e60 window-list: Fix preferences radio buttons not reflecting the setting
When setting GtkRadioButton's group property, its active property is
also set as a by-product. This means that setting these properties
isn't commutative which arguably is a bug in gtk+ but one that we can
easily work around by just switching the order here.

https://bugzilla.gnome.org/show_bug.cgi?id=697495
2013-04-07 21:00:51 +02:00
Florian Müllner
a97d08a2d2 window-list: Set metaWindow for single-window items when grouped
When grouping is enabled, items that are only have a single window
associated are still expected to behave like ungrouped items.
This includes activating windows by DND, which uses the metaWindow
property on the hovered actor's _delegate, so make sure it is set
on AppButtons in single-window mode as well.

https://bugzilla.gnome.org/show_bug.cgi?id=693561
2013-04-04 18:09:46 +02:00
Florian Müllner
91aa1cfbc0 window-list: Activate window on hover during drag operations
Reimplement the common task list behavior of activating windows
when hovering over a task list item during a drag operation.

https://bugzilla.gnome.org/show_bug.cgi?id=693561
2013-04-04 18:09:46 +02:00
Jakub Steiner
e6e31c16b7 make submenus "fit in" for classic
https://bugzilla.gnome.org/show_bug.cgi?id=696960
2013-04-04 16:59:37 +02:00
Debarshi Ray
802c70e14c apps-menu: Improve submenu navigation
Implement a keep-up triangle to keep submenus from changing if the
pointer strays a bit when mousing towards the application list on the
right. The keep-up triangle is only used if the mouse movement is more
horizontal than vertical.

This is similar to the behaviour of GtkMenu, but much more simple
because we are only dealing one specific kind of menu, and hence don't
need to be as generic.

https://bugzilla.gnome.org/show_bug.cgi?id=692913
2013-04-04 14:41:07 +02:00
Giovanni Campagna
d212a2f26d WindowList: fix behavior on fullscreen
LayoutManager will take care of our visibility, but we need to
adjust the message tray anchor point manually. Also, we must not
show ourselves when coming out of the overview if we're in fullscreen.

https://bugzilla.gnome.org/show_bug.cgi?id=696929
2013-04-02 23:05:57 +02:00
Changwoo Ryu
fb77156c88 Updated Korean translation 2013-03-28 02:57:09 +09:00
Fran Diéguez
bfd94b7ae1 Updated Galician translations 2013-03-26 12:51:33 +01:00
Giovanni Campagna
a6016db862 Bump version to 3.8.0
To go along GNOME Shell 3.8.0
2013-03-25 23:27:36 +01:00
Jiro Matsuzawa
01d6a469a1 l10n: Update Japanese translation 2013-03-25 17:08:09 +09:00
Ville-Pekka Vainio
4a60bec60c Finnish translation update by Jiri Grönroos 2013-03-21 22:40:49 +02:00
Gabor Kelemen
8d4db767d4 Updated Hungarian translation 2013-03-21 00:49:37 +01:00
Milo Casagrande
916d9d963f [l10n] Updated Italian translation. 2013-03-20 10:05:56 +01:00
Giovanni Campagna
39a7434569 Bump version to 3.7.92
To go along GNOME Shell 3.7.92
2013-03-19 07:19:51 +01:00
Mario Blättermann
7aeba983e1 [l10n] Updated German translation 2013-03-15 19:23:23 +01:00
Rafael Ferreira
89830470f1 Updated Brazilian Portuguese translation 2013-03-10 22:25:05 -03:00
Florian Müllner
8688596e80 window-list: Fix updating message tray anchor
After recent overview changes, we may end up with the message tray
showing partially in the overview when the window-list extension
is enabled. Adjusting the anchor explicitly when entering/leaving
the overview fixes the issue, requiring less code.

https://bugzilla.gnome.org/show_bug.cgi?id=695390
2013-03-08 14:08:01 +01:00
Florian Müllner
0bd8966115 window-list: connect_after() to 'window-added'
We switched from using the window icon to using the associated
application's icon; however when we create the window list item
from a handler to the 'window-added' signal, the association of
window and application might not exist yet, as WindowTracker uses
the same signal to create the association. Use connect_after()
for creating the window list item to make sure that WindowTracker's
signal handler has run already.

https://bugzilla.gnome.org/show_bug.cgi?id=695389
2013-03-08 14:08:00 +01:00
Matej Urbančič
9bf13353a8 Updated Slovenian translation 2013-03-07 21:56:58 +01:00
Florian Müllner
8305ef3b98 app-menu: Fix non-fallback hot corners
Commit 2d1d812474 fixed handling of hot corners for the fallback
case, but broke the menu completely for the non-fallback case.

https://bugzilla.gnome.org/show_bug.cgi?id=695373
2013-03-07 18:01:43 +01:00
Yuri Myasoedov
3b6446f33a Updated Russian translation 2013-03-07 09:32:29 +04:00
Florian Müllner
dda3512769 Bump version to 3.7.91
To go along GNOME Shell 3.7.91
2013-03-05 00:50:46 +01:00
Giovanni Campagna
2d1d812474 apps-menu: update for gnome-shell changes
HotCorner handling was broken once again...
2013-03-04 23:35:32 +01:00
Giovanni Campagna
c70b152628 apps-menu: don't load subdirectories as separate categories
Directories that are not immediate children of the root should be merged
in the parent, to preserve the flat structure and to be consistent with
the Activities overview.

https://bugzilla.gnome.org/show_bug.cgi?id=693241
2013-03-04 23:30:11 +01:00
Florian Müllner
040c106c7b window-list: Always use ShellApp icon rather than _NET_WM_ICON
We currently use the application icon for items that are grouped
by application and the window icon otherwise. However with the
icon property being unused anywhere else in GNOME3, applications
have started to not set any window icon at all.
Rather than complaining to application authors, switch to using
the app icon everywhere, which improves consistency with the rest
of GNOME3 anyway.

https://bugzilla.gnome.org/show_bug.cgi?id=694850
2013-03-02 20:58:15 +01:00
tuhaihe
f46627b624 Update Simplified Chinese translation 2013-02-28 21:02:48 +08:00
Aurimas Černius
0a1f7e725c Updated Lithuanian translation 2013-02-27 23:10:03 +02:00
Florian Müllner
7b07fd9656 launch-new-instance: Adjust for AppWellIcon -> AppIcon change
https://bugzilla.gnome.org/show_bug.cgi?id=694555
2013-02-24 08:55:25 +01:00
Giovanni Campagna
48bfe6dc1e Bump version to 3.7.90
To go along GNOME Shell 3.7.90
2013-02-20 20:47:34 +01:00
Мирослав Николић
f380f527d0 Updated Serbian translation 2013-02-20 12:20:52 +01:00
Giovanni Campagna
5c9292aae3 build: install NEWS inside each zip file
In case users want to know what changed between each version.
2013-02-19 23:33:06 +01:00
Giovanni Campagna
ab3d3ce41b alternative-status-menu: update for gnome-shell changes
We use a logind inhibitor now, so we don't need to lock the screen before
calling logind. Also, the UPower path was removed, and suspension is not
available for ConsoleKit.

Sorry, Ubuntu users!
2013-02-19 23:33:06 +01:00
Giovanni Campagna
c3796b2b19 places-menu: sort special directories like nautilus does
Place Home first, then show the others in alphabetical order.

https://bugzilla.gnome.org/show_bug.cgi?id=693242
2013-02-19 23:21:06 +01:00
Giovanni Campagna
e5ae9e7110 apps-menu: update for gnome-shell changes
After the stage hierarchy handling moved to LayoutManager, HotCorner
wants the layoutManager instance as a parameter.
2013-02-19 23:21:06 +01:00
Marek Černocký
5c91a2867d Updated Czech translation 2013-02-17 09:22:01 +01:00
Giovanni Campagna
2f5c095f7a places-menu: show the computer pretty name for the file system root
As Nautilus does, query hostnamed for the pretty hostname and watch
for changes.
If hostnamed is not available, we just show Computer, as before.

https://bugzilla.gnome.org/show_bug.cgi?id=693240
2013-02-13 22:43:21 +01:00
Florian Müllner
95b0d72e04 classic-theme: Fix top bar style in (un)lock screen
The top bar should be translucent/transparent on the (un)lock screen,
even in classic mode.

https://bugzilla.gnome.org/show_bug.cgi?id=693663
2013-02-12 18:34:37 +01:00
Daniel Mustieles
7fb52fa115 Updated Spanish translation 2013-02-11 14:38:02 +01:00
Matthias Clasen
5c6c81dd2b Drop the FallbackSession key from the classic mode
The gnome-fallback session does not exist anymore.
2013-02-09 23:24:07 -05:00
Matthias Clasen
ab45ec8ee7 Add nautilus-classic to the classic mode
Nautilus 3.7.5 ships a separate nautilus-classic.desktop file which
turns on icons on the desktop, regardless of the setting.
2013-02-09 23:24:06 -05:00
Debarshi Ray
b9fba54b9f apps-menu: Prevent the ApplicationMenuItem from becoming too wide
PopupMenu.PopupBaseMenuItem uses the natural width of its children to
set its own minimum and natural widths. We don't want that because
some of our children can be too wide. So, we override it.

We also set the span and expand parameters of the label to -1 and true
respectively. Otherwise we won't get to see the "...".

https://bugzilla.gnome.org/show_bug.cgi?id=693282
2013-02-09 21:35:21 +01:00
Debarshi Ray
f187f47cdd places-menu: Make 'network' volume handling more Nautilus-like
Currently we ended up ignore 'network' volumes that did not have a
mount associated with it. Instead we should behave like Nautilus and
still show them.

https://bugzilla.gnome.org/show_bug.cgi?id=693437
2013-02-09 21:33:51 +01:00
Debarshi Ray
c4a694337c places-menu: Fix a typo
https://bugzilla.gnome.org/show_bug.cgi?id=693432
2013-02-09 21:32:34 +01:00
Piotr Drąg
4103a228b2 Updated Polish translation 2013-02-08 15:41:39 +01:00
Debarshi Ray
da49c0d635 apps-menu: Clean up mark up handling and set label_actor
Get rid of fixMarkup, which turns & into &, so that we need to
again set use_markup.

https://bugzilla.gnome.org/show_bug.cgi?id=693334
2013-02-08 13:29:44 +01:00
Debarshi Ray
c626cc2a1d apps-menu: Clean up code
The empty array is created and inserted into the hashtable before
every call to _loadCategory. No need to check for it and create it
again inside the function.

Don't mix up negated if conditions with continue while skipping stuff
that should not be displayed. Follow one style for consistency.

https://bugzilla.gnome.org/show_bug.cgi?id=693346
2013-02-08 13:24:25 +01:00
Jeremy Bicha
92ccfc0e0d build xz tarball by default instead of bz2
https://bugzilla.gnome.org/show_bug.cgi?id=693238
2013-02-06 08:24:37 -05:00
Jeremy Bicha
61ee59f083 places: Rename 'File System' to 'Computer' and capitalize 'Network'
The Nautilus sidebar calls it 'Computer' so we should too.
Use title case for "Browse Network"

https://bugzilla.gnome.org/show_bug.cgi?id=693240
2013-02-06 08:21:55 -05:00
Giovanni Campagna
7783e99842 Bump version to 3.7.5.1
Includes an important build fix
2013-02-06 12:11:42 +01:00
Jeremy Bicha
2397289568 build: Add theme_data to dist
Fixes gnome-shell-extensions build failure with tarball

https://bugzilla.gnome.org/show_bug.cgi?id=693239
2013-02-06 12:10:38 +01:00
Giovanni Campagna
edefa7b674 Bump version to 3.7.5
To go along GNOME Shell 3.7.5
2013-02-06 12:04:21 +01:00
Piotr Drąg
5392a50e98 Updated Polish translation 2013-02-06 02:07:40 +01:00
Piotr Drąg
fc5c7c8fda Updated POTFILES.in 2013-02-06 02:06:09 +01:00
Piotr Drąg
3c0d84469a Updated Polish translation 2013-02-06 02:03:41 +01:00
Florian Müllner
01542c3dc7 build: Fix distcheck 2013-02-05 20:21:20 +01:00
Florian Müllner
0aaa37c30f data: Add missing file
Commit 9b05c80f81 left out the actual stylesheet :(
2013-02-05 20:17:06 +01:00
Florian Müllner
a1c938d3d9 window-list: Add classic mode styling
Classic mode uses a distinct visual style, support this by shipping
a dedicated stylesheet.

https://bugzilla.gnome.org/show_bug.cgi?id=693171
2013-02-05 20:09:16 +01:00
Florian Müllner
f23197e09e window-list: Add a small preference UI
https://bugzilla.gnome.org/show_bug.cgi?id=693171
2013-02-05 20:09:11 +01:00
Florian Müllner
a4fe08d53d window-list: Add option for grouping windows by application
https://bugzilla.gnome.org/show_bug.cgi?id=693171
2013-02-05 20:09:00 +01:00
Florian Müllner
7e3b48da9d window-list: Factor out WindowTitle
https://bugzilla.gnome.org/show_bug.cgi?id=693171
2013-02-05 20:08:46 +01:00
Florian Müllner
b843058c18 window-list: New extension
https://bugzilla.gnome.org/show_bug.cgi?id=693171
2013-02-05 20:06:53 +01:00
Florian Müllner
9b05c80f81 Use different styling in classic mode
Classic mode should be visually distinct from the normal session,
so provide a mode-specific stylesheet which looks closer to the
familiar GNOME2 default theme.

https://bugzilla.gnome.org/show_bug.cgi?id=693169
2013-02-05 20:06:53 +01:00
Florian Müllner
3805054b25 apps-menu: Update to Shell API change 2013-02-05 18:32:49 +01:00
Giovanni Campagna
348f0faf22 windowsNavigator: fix a warning in disable() 2013-02-04 23:58:33 +01:00
Giovanni Campagna
b907e44fdf windowsNavigator: update for gnome-shell changes
Update for the new way to layout window overlays
2013-02-04 23:52:17 +01:00
Giovanni Campagna
032233cf9d native-window-placement: update for gnome-shell changes
Update to the new way to layout window overlays, which requires
setting a slot on the clone, and update to the new padding setting
for the window picker, including a custom style to avoid placing titles
outside the clip area.
2013-02-04 23:52:17 +01:00
Florian Müllner
443837e09d alternate-tab: Update to Shell API change
Main.KeybindingMode is now Shell.KeyBindingMode ...
2013-02-04 17:05:36 +01:00
Daniel Mustieles
7f1904a97c Updated Spanish translation 2013-02-01 10:48:51 +01:00
Marek Černocký
caaa544fd6 Updated Czech translation 2013-01-31 20:10:24 +01:00
Piotr Drąg
179b14ea4b Updated Polish translation 2013-01-31 18:05:29 +01:00
Debarshi Ray
9211fa4409 apps-menu: Replace it with a new version based on AxeMenu
This is a severely toned down version of the original AxeMenu:
 - the column on the left has been removed, because it duplicates
   functionality provided by the places-menu and the user menu
 - the application search functionality has been removed because it
   is already provided by vanilla gnome-shell
 - the "All" category ended up being too crowded and has been replaced
   by "Favorites", so there is no separate page for it any more

https://bugzilla.gnome.org/show_bug.cgi?id=692527
2013-01-30 16:15:32 +01:00
OKANO Takayoshi
edb8a65c78 [l10n] Update Japanese translation 2013-01-27 22:11:13 +09:00
Marek Černocký
fdd2fa09d7 Updated Czech translation 2013-01-22 09:35:59 +01:00
Florian Müllner
5d37b39ce5 places-menu: Design update
After review from the design team, the following changes were requested:
 - use a "Places" label instead of a symbolic icon in the top bar
   (as in GNOME 2)
 - move places icons in front of the name (as in Nautilus)
 - use menu separators between sections instead of section titles

https://bugzilla.gnome.org/show_bug.cgi?id=692027
2013-01-19 00:08:27 +01:00
Gabriel Rossetti
b673e1624a launch-new-instance: New extension
https://bugzilla.gnome.org/show_bug.cgi?id=692030
2013-01-18 23:36:29 +01:00
Florian Müllner
2b81d125cb classic: Move dateMenu to the right
With new items being added on the left, the top bar gets a little
crowded with the dateMenu at the center, so move it to its "classic"
position on the right.

https://bugzilla.gnome.org/show_bug.cgi?id=692016
2013-01-18 18:07:15 +01:00
Giovanni Campagna
31128e0dae Revert "Remove places-menu from the classic extensions"
This reverts commit f53d251a46.
Designs changed, and places-menu is back.
2013-01-18 18:04:35 +01:00
Giovanni Campagna
680e4e075a Bump version to 3.7.4
To go along GNOME Shell 3.7.4
2013-01-15 16:07:44 +01:00
Мирослав Николић
dd3349bf6d Updated Serbian translation 2013-01-08 20:16:47 +01:00
Giovanni Campagna
f53d251a46 Remove places-menu from the classic extensions
It is not part of the designed traditional experience.
2013-01-08 18:30:12 +01:00
Giovanni Campagna
80b4f108df Add a separate configure option for classic mode datafiles
Ubuntu wants to install classic mode files but still tweak the set of
built extensions.

https://bugzilla.gnome.org/show_bug.cgi?id=690799
2013-01-03 01:23:37 +01:00
Balázs Úr
df2e1e6217 Updated Hungarian translation 2013-01-01 16:05:56 +01:00
Rafael Ferreira
292661d943 Updated Brazilian Portuguese Translation 2012-12-31 02:42:26 -02:00
Fran Diéguez
c978057d3a Updated Galician translations 2012-12-27 00:52:50 +01:00
Khaled Hosny
8034b65f46 Update Arabic translation 2012-12-24 12:46:34 +02:00
Aurimas Černius
c1c9f280d8 Updated Lithuanian translation 2012-12-20 22:41:06 +02:00
Giovanni Campagna
e179ab72fc Bump version to 3.7.3
To go along GNOME Shell 3.7.3
2012-12-18 21:20:58 +01:00
Yuri Myasoedov
11e8f2832c Updated Russian translation 2012-12-17 09:16:13 +04:00
Florian Müllner
61f86a3f29 alternate-tab: Re-use window-switcher in gnome-shell
gnome-shell now provides its own traditional window switcher using
a dedicated keybinding, so update the extension to just take over
the default application-based switchers as well.

https://bugzilla.gnome.org/show_bug.cgi?id=689724
2012-12-11 07:40:40 +01:00
Florian Müllner
0fed304f79 static-workspaces: New extension
Just as the default-min-max extension, this extension reverts a
gnome-shell override and is meant to be used in classic mode.

https://bugzilla.gnome.org/show_bug.cgi?id=689739
2012-12-11 05:29:47 +05:30
Ryan Lortie
02989fd0f7 gnome-classic.session: fix @libexecdir@ substitution
The Makefile had two rules by which it could possibly have generated the
intermediate .in file (on the way from .in.in to .session) and it picked
the one that didn't contain the substitution for @libexecdir@.

Consolidate the rules into one that does all the needed substitutions.

https://bugzilla.gnome.org/show_bug.cgi?id=689756
2012-12-11 05:24:36 +05:30
Giovanni Campagna
9900ae19dc Revert "Remove alternate-tab extension"
This reverts commit 0b7c3e3dbb.
Pushed by mistake, and we actually want the alternate-tab extension,
just in a different form.
2012-12-11 00:10:17 +01:00
Giovanni Campagna
b9a4d178a8 Enable classic-mode if all extensions are enabled
This allows to test classic-mode integration without losing the other
extensions.
2012-12-10 23:11:33 +01:00
Florian Müllner
8815c670ea Install a 'classic' mode for gnome-shell
Commit c421da905f added the necessary machinery for adding a
classic session, do the same for the corresponding gnome-shell
mode.

https://bugzilla.gnome.org/show_bug.cgi?id=689738
2012-12-10 23:02:25 +01:00
Florian Müllner
1e45a69d36 Add generated data files to .gitignore
https://bugzilla.gnome.org/show_bug.cgi?id=689738
2012-12-10 23:02:12 +01:00
Giovanni Campagna
0b7c3e3dbb Remove alternate-tab extension
It's in core shell now! Just replace the switch applications keybinding
with switch windows in the keyboard panel.
2012-12-10 23:00:46 +01:00
Matej Urbančič
b9563829bb Updated Slovenian translation 2012-12-10 21:54:18 +01:00
Piotr Drąg
4b26753d83 Updated Polish translation 2012-12-06 22:35:29 +01:00
Daniel Mustieles
cdb7ff0cec Updated Spanish translation 2012-12-05 20:08:57 +01:00
Debarshi Ray
c421da905f Add the machinery to provide a classic-mode session
A new session is added only when --enable-extensions=classic-mode is
used.

https://bugzilla.gnome.org/show_bug.cgi?id=689285
2012-11-30 18:53:29 +01:00
Debarshi Ray
5a08081cc0 workspace-indicator: Remove it from CLASSIC_EXTENSIONS
It is not one of the extensions nominated for the fallback replacement
mode.

https://bugzilla.gnome.org/show_bug.cgi?id=689365
2012-11-30 18:50:35 +01:00
Debarshi Ray
ad542d2f77 default-min-max: New extension
Adds minimize and maximize buttons to the titlebar by default. It
restores org.gnome.desktop.wm.preferences as the schema to be used for
the button-layout key.

It is included in classic-mode.

https://bugzilla.gnome.org/show_bug.cgi?id=689275
2012-11-30 18:50:14 +01:00
Khaled Hosny
20e8a0dcc3 Update Arabic translation 2012-11-21 17:00:42 +02:00
Cheng-Chia Tseng
87c26eab14 Updated Traditional Chinese translation(Hong Kong and Taiwan) 2012-11-21 14:40:34 +08:00
Giovanni Campagna
877a53c2fc Bump version to 3.7.2
To go along GNOME Shell 3.7.2
2012-11-20 16:46:42 +01:00
Giovanni Campagna
10e38adf20 Add "classic-mode" build infrastructure
As part of removing fallback mode, GNOME wants to support a subset of
gnome-shell-extensions that restore part of the GNOME 2 experience.
This commit introduces that distinction, and allows to build only the
supported "classic-mode" extensions.
2012-11-20 16:39:45 +01:00
Giovanni Campagna
2a64ee6993 alternative-status-menu: flip the default hibernate option
Many people complained that they can't make hibernate visible. Given
that using gsettings with extensions is not easy (you need --schemadir etc.),
just flip the default, and tell people that don't want it to change it
(or just core shell)
2012-11-20 16:37:20 +01:00
Giovanni Campagna
9d9ef27317 WindowsNavigator: fix with recent shell
Recently WindowsNavigator would just crash the shell upon entering
the overview. I'm not sure where the bug was, probably it was due to
the new window layout code.
2012-11-20 16:37:20 +01:00
Giovanni Campagna
785656d149 alternate-tab: don't show attached modal dialogs
Attached modal dialogs cannot be focused on their own, so the expected
interaction is to choose their parent instead.
2012-11-20 16:37:20 +01:00
Giovanni Campagna
f8ee696c7c alternate-tab: port to the new keybindings infrastructure
Keybindings were refactored in 3.7.2, to allow handling them
while the shell is modal, and now require a set of flags indicating
the "allowed modes"
2012-11-20 16:37:20 +01:00
Stas Solovey
aa677b265a Updated Russian translation 2012-11-20 11:33:17 +04:00
Giovanni Campagna
9b04e6f44c PlacesMenu: ignore missing local bookmarks
If a local bookmark does not refer to an existing directory, ignore
it instead of showing a broken entry.
2012-11-16 20:29:56 +01:00
Giovanni Campagna
315aa82d15 PlacesMenu: support historical location for bookmarks file
Ubuntu is shipping with Nautilus 3.4 in 12.10, so the bookmarks file
was not moved to .config/gtk-3.0.
2012-11-16 20:29:51 +01:00
Giovanni Campagna
0bc41bcb1d native-window-placement: fix disabling the extension
The monkey patch was being reinstalled under the wrong name.
2012-11-11 19:26:56 +01:00
Мирослав Николић
e59c218c62 Updated Serbian translation 2012-11-09 11:54:47 +01:00
Giovanni Campagna
880758e470 PlacesMenu: don't fail for GIO errors getting the file name
Different GIO backends can fail in different ways trying to query
file infos. If that's the case, fail back to safe get_basename()
instead of crashing.
2012-11-07 17:43:17 +01:00
Dušan Kazik
a5ce94c6d3 Updated slovak translation 2012-11-06 23:29:13 +01:00
Giovanni Campagna
8a73e58134 Bump version to 3.7.1
To go along GNOME Shell 3.7.1
2012-10-26 17:20:41 +02:00
Giovanni Campagna
bfe7a760d1 NativeWindowPlacement: reduce the number of hacks to work better with 3.7.1
3.7 is brought some big changes in the window layout code, but I'm not
going to take advantage of them (as the assume some sort of row based layout).
Instead, just work around them in a way that makes the extension work
without major issues.
2012-10-26 17:20:41 +02:00
Giovanni Campagna
0d932f4b24 alternative-status-menu: update for 3.7
gnome-shell uses logind for suspending now. Take the occasion to
do some cleanups as well.
2012-10-26 17:20:41 +02:00
Giovanni Campagna
6c1dbe1ee1 places-menu: don't crash if a special directory or mount doesn't exists
Under broken configurations, it is possible that a special directory
is configured but does not exist. In that case, just skip the menu item
altogheter.
2012-10-26 17:20:41 +02:00
A S Alam
a125390c5f update Punjabi Translation for package 2012-10-25 09:11:13 +05:30
Christian Kirbach
fdb5f3e8ef Updated German translation 2012-10-24 12:41:24 +02:00
Aurimas Černius
d64feb040d Updated Lithuanian translation 2012-10-20 21:52:39 +03:00
Giovanni Campagna
987409b742 Remove dock and gajim extensions from the repository
They're buggy, unmaintained, and nobody stepped up to fix them.
See full rationale at
https://mail.gnome.org/archives/gnome-shell-list/2012-August/msg00132.html

Anyone who's unhappy with this decision, please contact me and we
can arrange co-maintainership or ownership transfer.
2012-10-16 16:22:45 +02:00
Giovanni Campagna
e14efb3dfc Bump version to 3.6.1
To go along newly released GNOME Shell 3.6.1
2012-10-16 16:16:02 +02:00
Andika Triwidada
7e3262a58d Updated Indonesian translation 2012-10-15 21:55:23 +07:00
Daniel Mustieles
f670aa5cc3 Updated Spanish translation 2012-10-13 13:00:56 +02:00
Rūdolfs Mazurs
da2ed2d695 Updated Latvian translation 2012-10-12 23:26:07 +03:00
Fran Diéguez
23e5cd30a4 Updated Galician translations 2012-10-12 01:16:31 +02:00
Tom Tryfonidis
42a85d81a6 Updated Greek translation 2012-10-11 17:19:28 +03:00
Piotr Drąg
1d65af715f Updated Polish translation 2012-10-08 23:04:17 +02:00
Marek Černocký
7ae2ddcb95 Updated Czech translation 2012-10-08 22:42:08 +02:00
Matej Urbančič
0abb0f4b57 Updated Slovenian translation 2012-10-08 21:14:45 +02:00
Giovanni Campagna
dfcff4b297 DriveMenu: make it independent of PlacesDisplay
That module was removed from GNOME Shell 3.6, so reimplement for mounts
only, borrowing code and behaviour from the resident message tray source.
2012-10-08 19:42:28 +02:00
Giovanni Campagna
fa2840aee3 alternative-status-menu: fix for 3.6
Code was still refererring to the external screensaver instead of
activating the screenshield.
I feel like a genius for writing both modules and not noticing this
until after 3.6.0.
2012-10-08 19:09:13 +02:00
Giovanni Campagna
e48e1d0a38 alternate-tab: fix a warning about passing 0 to source_remove 2012-10-07 02:08:55 +02:00
Khaled Hosny
f9f4684c8d Updated Arabic translation 2012-10-05 21:47:00 +02:00
Giovanni Campagna
3954649632 Bump version to 3.6.0
To go along GNOME Shell 3.6.0.
drive-menu doesn't yet work, due to the late removal of PlacesManager
from the shell. I will work on it if I have time.
2012-10-02 20:38:03 +02:00
Gil Forcada
74702c00e5 [l10n] Updated Catalan translation 2012-09-29 00:07:41 +02:00
Stas Solovey
727872833f Updated Russian translation 2012-09-27 17:24:00 +04:00
Chris Leonard
e0518f0bda Updated British English translation 2012-09-22 11:34:11 +01:00
Gabor Kelemen
ef5a8a9641 Updated Hungarian translation 2012-09-20 15:47:29 +02:00
Andika Triwidada
69bfc23b7f Updated Indonesian translation 2012-09-17 12:31:08 +07:00
Tom Tryfonidis
9bc1e04654 Updated Greek translation 2012-09-15 15:17:35 +03:00
Aurimas Černius
c3872afc30 Updated Lithuanian translation 2012-09-15 15:14:54 +03:00
Ville-Pekka Vainio
a6e5f8aab7 Finnish translation update by Jiri Grönroos 2012-09-12 22:45:11 +03:00
Matej Urbančič
67a4db07aa Updated Slovenian translation 2012-09-12 21:05:20 +02:00
Daniel Mustieles
f834c29530 Updated Spanish translation 2012-09-10 18:19:38 +02:00
Og B. Maciel
60f38b3b6c Minor typo. 2012-09-07 11:25:02 -04:00
Og B. Maciel
3fddc8e846 Updated Brazilian Portuguese translations. 2012-09-07 11:23:29 -04:00
Мирослав Николић
f0e1229a26 Updated Serbian translation 2012-09-07 11:17:36 +02:00
Christian Kirbach
00871cc98f Updated German translation 2012-09-07 00:18:07 +02:00
Piotr Drąg
3992182905 Updated Polish translation 2012-09-06 19:52:37 +02:00
Piotr Drąg
2df41753e5 Updated POTFILES.in 2012-09-06 19:50:56 +02:00
Giovanni Campagna
39c221775e places-menu: recognize if apps-menu is present, and place to the right of it
If apps-menu is enabled at the same time as places-menu, the right order
is activities, apps-menu, places-menu, app-menu. Previously we used the
extension activation order to obtain this, but it's not reliable enough,
so make it explicit in code.
2012-09-06 19:41:13 +02:00
Giovanni Campagna
eda45e6072 places-menu: rework to be more similar to the Files sidebar
Let's go GNOME 3 style, and make a places menu that looks like the sidebar
in Files, with for subsections corresponding to default places, devices,
bookmarks and network mounts.
Among other things, this should fix the duplicate home or duplicate desktop
bookmark problem (as now we don't bookmarks that are same as the default
locations), and it makes us future proof for the removal of PlacesManager
in core shell.
2012-09-06 19:41:10 +02:00
Daniel Mustieles
333871387a Updated Spanish translation 2012-09-06 18:27:47 +02:00
Marek Černocký
eb6b84eb18 Updated Czech translation 2012-09-06 12:25:33 +02:00
Piotr Drąg
d8c651f255 Updated Polish translation 2012-09-05 01:22:48 +02:00
Giovanni Campagna
7cf25a3bc0 Bump version to 3.5.91
To go along GNOME Shell 3.5.91
2012-09-05 00:54:38 +02:00
Giovanni Campagna
fdad0263ec various: update for gnome-shell changes
The panel changed the way it builds the buttons outside the system
status area.
- Update alternative-status-menu to the new way of accessing panel
  contents.
- Update apps-menu to the new way of adding items to the panel.
- Move places-menu to the left now that it is possible without hacks.
2012-09-05 00:50:35 +02:00
Giovanni Campagna
c5181cda46 alternate-tab: make the highlight square again
Fixes a regression from a78a16b4a7
2012-09-05 00:50:35 +02:00
Giovanni Campagna
56f6eccc82 i18n: Updated Italian translation 2012-09-05 00:50:35 +02:00
Giovanni Campagna
6a74326a61 place-menu: use symbolic icons for places
This makes us more consisten with the other menus and with the sidebar
in Files.
Also, reduce the icon size to 16px, same as the other menus.
2012-09-05 00:50:35 +02:00
Giovanni Campagna
48d4956ee0 Port all extensions to the new symbolic icon handling
St.IconType was removed from master, St.Icon users are expected to add '-symbolic'
themselves.
2012-09-05 00:50:35 +02:00
Giovanni Campagna
0ab46d5c70 xrandr-indicator: port to 2012
Someone left this poor extension in the last century.
Port to GDBus, port to Lang.Class, port to addSettingsAction, port to new
symbolic icon handling.
2012-09-05 00:50:35 +02:00
Giovanni Campagna
cd7d9aa2a4 Auto-move-windows: don't manage workspaces if they're not dynamic
The workspace management done by auto-move-windows is semi-dynamic,
in that it collects empty workspaces at the end, and ensures there
is always one free.
This is undesirable when the user explicitly choose static
workspaces in the tweak tool or in dconf-editor.
2012-09-05 00:50:35 +02:00
Giovanni Campagna
ea3d27c311 SystemMonitor: left align the indicator container
MessageTray.actor now has ClutterBinLayout layout manager, so we need
to tell it esplicitly where to place us.
2012-09-05 00:50:35 +02:00
Piotr Drąg
6c050118f4 Updated Polish translation 2012-09-04 00:17:04 +02:00
Fran Diéguez
dfb942f6fe Updated Galician translations 2012-08-30 04:16:23 +02:00
Matej Urbančič
262efe3c9e Updated Slovenian translation 2012-08-29 09:11:42 +02:00
Giovanni Campagna
d1d099fbbf alternate-tab: don't crash if a window is not associated with an app
A dialog for which the parent application is closed may end up without
an app. In that case, show only the thumbnail, or if showing icons only,
show a missing icon.
2012-08-29 02:05:02 +02:00
Giovanni Campagna
45da997dd3 alternate-tab: don't assume that at least two windows exist
Initial selection would go out of the array bounds if only one window
existed.
2012-08-29 02:05:02 +02:00
Daniel Mustieles
d91c949068 Updated Spanish translation 2012-08-25 12:07:40 +02:00
Piotr Drąg
5a028aab52 Updated Polish translation 2012-08-22 20:04:42 +02:00
Giovanni Campagna
c49758f1c5 Bump version to 3.5.90
To go along GNOME Shell 3.5.90
2012-08-22 16:19:53 +02:00
Giovanni Campagna
5ca52e89d5 windowsNavigator: update for gnome-shell changes
The ViewSelector was refactored for modekill feature. Update
accordingly.
2012-08-22 16:19:33 +02:00
Giovanni Campagna
dd26111c04 systemMonitor: add tooltips to the indicators
Currently it's hard to find what the indicator mean, without any
label. Add a tooltip, shamelessly copied from js/ui/dash.js in
core shell.
2012-08-22 16:13:52 +02:00
Giovanni Campagna
f40e7109e5 systemMonitor: update for gnome-shell changes
gnome-shell 3.5.90 has a new, bigger, message-tray. Restyle the
systemMonitor appropriately to blend in.
2012-08-22 16:13:52 +02:00
Giovanni Campagna
5cb3e1877a native-window-placement: update for gnome-shell changes
Workspace.positionWindows semantics changed, so the function
we want to override is now _realPositionWindows.
2012-08-22 16:13:52 +02:00
Giovanni Campagna
a78a16b4a7 alternate-tab: respect aspect ratio for window thumbnails
It is weird if 16:9 thumbnails get turned into squares. Instead,
center them.

https://bugzilla.gnome.org/show_bug.cgi?id=656217
2012-08-22 15:35:33 +02:00
Daniel Mustieles
a6307d48c0 Updated Spanish translation 2012-08-20 14:17:34 +02:00
A S Alam
f9d95b9408 update Punjabi Translation 2012-08-19 15:12:45 +05:30
Giovanni Campagna
fb3df46a25 alternate-tab: rework again
Kill the mode switch distinction, and kill the old and unmaintained
Workspace&Icons mode.
Introduce instead configurability for the All&Thumbnails code, which
now independently allows choosing if only all windows or only those
from current workspace should be shown, and in which way (thumbnail,
icon, both).
All configuration settings changed, so the extension must be configured
again (although hopefully I chose reasonable defaults)
2012-08-18 02:40:20 +02:00
Daniel Mustieles
d2a7a95628 Updated Spanish translation 2012-08-10 11:14:52 +02:00
Giovanni Campagna
12e91b86e5 Bump version to 3.5.5
To go along GNOME Shell 3.5.5
2012-08-07 23:41:18 +02:00
Giovanni Campagna
5e89c761ca alternate-tab: show an application icon overlaid to the thumbnails
In All&Thumbnails mode, show an application icon above the thumbnail,
for easier recognition of the window.
The old behaviour can be restored in the preferences dialog.
2012-08-07 23:22:25 +02:00
Giovanni Campagna
d12307991a alternate-tab: refactor All & Thumbnails
Split the two modes in two different modules, for easier maintenance.
Refactor the AllThumbnails code completely, by copying relevant
or useful code for gnome-shell directly instead of hacking around
it.
2012-08-07 23:22:19 +02:00
Dirgita
c711ce83fa Updated Indonesian translation 2012-08-07 23:40:11 +07:00
Мирослав Николић
96f91eda59 Updated Serbian translation 2012-08-07 10:40:36 +02:00
Giovanni Campagna
e2a76b665a Convenience: relicense to BSD
This module is meant to be a copy-lib, and it is used all over the
place (including GPLv3, LGPL or BSD licensed extensions). I don't
want to block an extension for license incompatibility.

The rest of the repository is still GPLv2, as it is the tarball
distribution and individual extensions downloaded from the website.
2012-08-06 23:44:27 +02:00
Aurimas Černius
c638e6c0f2 Updated Lithuanian translation 2012-08-05 17:07:34 +03:00
Giovanni Campagna
9ef1ecd827 Bump version to 3.5.4
To go along GNOME Shell 3.5.4
2012-07-18 16:35:58 +02:00
Christian Kirbach
60f0954a76 Updated German translation 2012-07-15 13:56:28 +02:00
Wylmer Wang
08339cd78e update Simplified Chinese (zh_CN) translation 2012-06-23 18:01:59 +08:00
Wylmer Wang
a772154471 update Simplified Chinese (zh_CN) translation 2012-06-23 17:52:43 +08:00
Rūdolfs Mazurs
e02cd89c8b Updated Latvian translation 2012-06-20 20:33:39 +03:00
Khaled Hosny
706857132a Updated Arabic translation 2012-06-09 18:36:04 +02:00
Daniel Mustieles
c0f6028212 Updated Spanish translation 2012-06-09 11:55:04 +02:00
Matej Urbančič
ecd9e4ab6c Updated Slovenian translation 2012-06-08 21:14:45 +02:00
Giovanni Campagna
d4f3391481 Bump version to 3.5.2
To go along GNOME Shell 3.5.2
2012-06-08 14:07:05 +02:00
Giovanni Campagna
dd9b47e51e native-window-placement: fix undefined variable warning 2012-06-08 14:02:00 +02:00
Giovanni Campagna
279dd348e4 alternative-status-menu: update for current mockups
Core shell changed the user menu so that Power Off is no longer at
the end, and it's no longer hidden by Alt. Update the extension
so that it blends nicely with the core behavior, while still exposing
Suspend/Hibernate/Power Off as separate menu items.
2012-06-08 13:59:50 +02:00
Daniel Mustieles
efe068324b Updated Spanish translation 2012-06-06 13:43:51 +02:00
Alejandro Piñeiro
338f742310 a11y: setting labels for Removable Drive Menu extension
This includes:
 * A proper name for the menu (using when exploring the top panel)
 * A proper label for each device item

https://bugzilla.gnome.org/show_bug.cgi?id=677228
2012-06-04 09:48:06 +02:00
Andika Triwidada
c1845d73bd Updated Indonesian translation 2012-06-02 20:34:30 +07:00
Andika Triwidada
a3ae190edc Added Indonesian translation 2012-06-02 20:32:29 +07:00
Jasper St. Pierre
6e946fe702 drive-menu: Update to work with GNOME Shell git
https://bugzilla.gnome.org/show_bug.cgi?id=677289
2012-06-02 05:11:36 -04:00
Jasper St. Pierre
dca49d662d places-menu: Update to work with GNOME Shell git
https://bugzilla.gnome.org/show_bug.cgi?id=677289
2012-06-02 05:11:36 -04:00
Мирослав Николић
df73753b08 Updated Serbian translation 2012-06-01 21:05:17 +02:00
Martin Srebotnjak
0676b9c0f9 Updated Slovenian translation 2012-05-21 09:11:39 +02:00
Michael Biebl
13b8b3c22c build: Properly quote $enable_extensions
Otherwise test will complain if more then one extension in enabled, i.e.
when we have a space in the configure argument.

https://bugzilla.gnome.org/show_bug.cgi?id=676446
2012-05-21 00:40:11 +02:00
Arash Mousavi
35ee8fc2c6 Updated Persian Translations 2012-05-14 20:41:40 +04:30
Marek Černocký
99924c3952 Updated Czech translation 2012-05-12 09:16:00 +02:00
Marek Černocký
dfd7191aa1 Updated Czech translation 2012-05-08 22:01:34 +02:00
Bastien Durel
c5fd578214 create actor at the right place, so there is no more clipping-out-of-screen problem
https://bugzilla.gnome.org/show_bug.cgi?id=664318
2012-05-07 23:06:17 +02:00
Matej Urbančič
e00a73b88a Updated Slovenian translation 2012-05-04 13:47:32 +02:00
Tom Tryfonidis
487fd4cd1c Updated Greek translation 2012-05-03 13:59:40 +03:00
Alexandre Franke
2acb53fa2e Update French translation 2012-05-02 19:29:02 +02:00
Fran Diéguez
548ede7eea Updated Galician translations 2012-04-30 16:43:12 +02:00
Fran Diéguez
667f72532e Updated Galician translations 2012-04-30 16:42:21 +02:00
Piotr Drąg
7753a68331 Updated Polish translation 2012-04-30 16:19:37 +02:00
Daniel Mustieles
6728411a52 Updated Spanish translation 2012-04-30 13:17:05 +02:00
Giovanni Campagna
31ff2d4c97 auto-move-windows: make the suspend and hibernate items configurable
Desktop users rarely use suspend, and in general hibernate is
more trouble than it's worth to show at all times, so make their
visibility configurable in GSettings.
Supend defaults to true (since that's the GNOME 3 message anyway),
while hibernate is normally false. No UI is provided, since it's
unlikely that changing this is necessary.
2012-04-29 23:26:07 +02:00
Wepmaschda
d355424f22 native-window-placement: add WINDOW_AREA_TOP_GAP and place the windows bottom-center.
This keeps window captions and close buttons always visible.

https://bugzilla.gnome.org/show_bug.cgi?id=674338
2012-04-29 22:41:37 +02:00
Bastien Durel
dde7084711 Let user choose the monitor where to show dock 2012-04-29 22:35:24 +02:00
Giovanni Campagna
f77bf60bcb auto-move-windows/prefs: filter out apps that don't exist
Recognize if the desktop file no longer exists and remove its
entry in GSettings, instead of crashing because of a null GAppInfo.
2012-04-29 21:11:00 +02:00
Giovanni Campagna
e3f1091f2d dock: clip the actor to the primary monitor
In particular with the move effect, but also with others, the
dock could end up partially on the neighbor screen when hidden.
2012-04-28 18:28:36 +02:00
Giovanni Campagna
ffb3462d54 gajim: fix for missing FN field
The full name is not always present. If so, fallback to nickname
or Jabber ID.

Based on a patch by Łukasz Faber <nnidyu@annwn.eu>
2012-04-26 22:58:04 +02:00
Giovanni Campagna
e1c1fc73e2 windowsNavigator: only access tooltip if it's known to exist
Apparently, windowOverlay._text can be null sometimes. In that
case, do nothing instead of crashing.
2012-04-26 22:50:11 +02:00
Giovanni Campagna
5ca9f35a95 places-menu: fix allocation of the icon
Because the popup-menu min-width imposed by the theme was bigger
than the natural size of the menu, and because core shell code
cannot deal with that, the icon was not right aligned unless
"Removable devices" was showing.
Hack around that by setting span: -1, which pushes it to end of
the menu item.
2012-04-14 00:41:12 +02:00
Seong-ho Cho
6128102eac Add Korean translation 2012-04-05 02:52:23 +09:00
Giovanni Campagna
cb6d5357d9 Bump version to 3.4.0
GNOME 3.4 is out! Yay for the stable release!
2012-03-29 19:59:11 +02:00
Giovanni Campagna
9fb703ca6b build: strip micro version if minor is even
To avoid manually adding the 3.4 stable version when doing the
release, check in configure if building a stable (even minor) version
and strip micro at that time.
2012-03-29 19:51:13 +02:00
Khaled Hosny
06d2b906e0 Arabic translation 2012-03-28 18:52:45 +02:00
Marek Černocký
98403dfc3b Updated Czech translation 2012-03-25 18:49:23 +02:00
Bruno Brouard
ec88930f80 Updated French translation 2012-03-24 21:48:36 +01:00
Giovanni Campagna
ee5e54f9f4 Bump version to 3.3.92
To go along GNOME Shell 3.3.92
2012-03-24 02:11:24 +01:00
Giovanni Campagna
ed9c17dfdd native-window-placement: update for gnome-shell API changes
St.Widget.get_default_direction() was replaced with
Clutter.get_default_text_direction() as part of the Clutter Apocalypses
2012-03-24 02:06:49 +01:00
Gabor Kelemen
10027b6697 Updated Hungarian translation 2012-03-22 23:53:39 +01:00
A S Alam
27abc7a42b update Punjabi Translation 2012-03-17 16:52:11 +05:30
Rudolfs Mazurs
3bb56a7a59 Updated Latvian translation. 2012-03-17 00:07:35 +02:00
Piotr Drąg
0e94c81734 Updated Polish translation 2012-03-16 21:19:40 +01:00
Fran Diéguez
7d41bd9fbd Updated Galician translations 2012-03-16 12:16:13 +01:00
Kjartan Maraas
f12cd9ba39 Updated Norwegian bokmål translation 2012-03-14 18:52:34 +01:00
Timo Jyrinki
182a9cff18 Finnish translation update from http://l10n.laxstrom.name/wiki/Gnome_3.4 translation sprint 2012-03-12 11:08:16 +02:00
Cheng-Chia Tseng
9bb5399263 Updated Traditional Chinese translation(Hong Kong and Taiwan) 2012-03-09 20:13:17 +08:00
bhuztez
82bd3efc73 windowsNavigator: do nothing when viewtab is not active
The keybindings should only kick-in when the "windows" tab is active,
otherwise it is confusing and could conflict with other combinations.
2012-03-03 02:11:25 +01:00
Daniel Mustieles
0b3f7e37f0 Updated Spanish translation 2012-03-02 14:19:00 +01:00
Giovanni Campagna
2f034bbee2 [l10n] Update Italian translation 2012-03-01 21:12:08 +01:00
Giovanni Campagna
f14ae5f3c9 workspace-indicator: remove debug spew 2012-03-01 21:10:41 +01:00
Giovanni Campagna
1463a6481e dock: update for gnome-shell API changes
Shell.get_event_state() was removed, use direct .get_state()
instead.
2012-03-01 21:05:14 +01:00
Giovanni Campagna
0a9be8fc82 workspace-indicator: drop the "shorter" style class
It makes it appear different from other popup menus, which looks
strange.
2012-03-01 21:05:14 +01:00
Giovanni Campagna
75629a468f build system: move local-install to a make rule
This way, "make zip-file && ./local-install.sh" is not needed, you
just do "make local-install". Also, it allows to specify a different
prefix as a make variable.
2012-03-01 21:05:14 +01:00
Mario Blättermann
72a5a3424f [l10n] Updated German translation 2012-03-01 13:13:26 +01:00
Мирослав Николић
4e35410b7a Updated Serbian translation 2012-03-01 10:39:25 +01:00
Leandro Toledo
9faa028f1e Updated Brazilian Portuguese translation 2012-02-28 06:54:42 -03:00
Matej Urbančič
60f8139482 Updated Slovenian translation 2012-02-28 21:54:30 +01:00
Matej Urbančič
e7f7a488c6 Updated Slovenian translation 2012-02-28 21:54:30 +01:00
Daniel Nylander
f0b3e4de0a Updated Swedish translation 2012-02-28 21:45:44 +01:00
Giovanni Campagna
25ada42ed9 Bump version to 3.3.90
To go along GNOME Shell 3.3.90
2012-02-28 19:19:17 +01:00
Giovanni Campagna
ef95c7e4e7 apps-menu: update for Clutter/St API changes
Some StContainer API was removed to accomodate clutter deprecations.
Adapt apps-menu to that.
2012-02-28 19:18:22 +01:00
Милош Поповић
9e53a37c08 Updated Serbian translation 2012-02-27 00:17:27 +01:00
Fran Diéguez
b3e783e7a8 Updated Galician translations 2012-02-26 16:21:58 +01:00
Piotr Drąg
9e41c06cd7 Updated POTFILES.in 2012-02-24 19:22:41 +01:00
Giovanni Campagna
7b3650fb68 convenience: use recursive lookup for schemas
If the schema is not found in the extension directory, fall back
to the default source, allowing for systemwide installation of
extensions.
2012-02-24 11:23:59 +01:00
Giovanni Campagna
0bb2184efb workspace-indicator: add preferences dialog
Add a simple pref dialog to configure workspace name, similar to
the one available for GNOME 2.
2012-02-24 11:23:59 +01:00
Gabriel Speckhahn
e55101526c Updated Brazilian Portuguese translation 2012-02-16 12:57:51 -02:00
Matej Urbančič
50b89bb8b5 Updated Slovenian translation 2012-02-17 21:30:41 +01:00
Gonzalo Sanhueza
856ebbf7e6 Updated Spanish translation 2012-02-17 10:49:35 +01:00
Giovanni Campagna
0c5564fe55 workspace-indicator: fix focus after workspace change
meta_workspace_activate() expects the timestamp of the user action.
Not sure where that true came from.
2012-02-13 23:06:59 +01:00
Giovanni Campagna
53ee4c096e i18n: Updated Italian translation 2012-02-13 18:56:25 +01:00
Giovanni Campagna
5754e2db58 example: add settings and preference dialogs
This continues turning "example" in a real gnome-shell extension
tutorial, showing how to create GSettings using Convenience and
how to build a simple preference dialog by subclassing GtkGrid
and binding GObject properties to GSettings.
2012-02-13 18:55:15 +01:00
Giovanni Campagna
468ed6cfe6 auto-move-windows: introduce configuration dialog
Using the new configuration framework from gnome-shell, add
a simple tree view to configure the automatic moving rules.
2012-02-13 18:55:15 +01:00
Giovanni Campagna
a4fac964dc convenience: allow system-wide installation again
Check if necessary files are installed in the extension folder
(as done by "make zip-file"), and if not, fallback to the standard
paths.
2012-02-13 18:55:15 +01:00
Giovanni Campagna
245ab96a27 alternate-tab: move to the new configuration system
Since 3.3.5, gnome-shell offers an integrated configuration tool
for extensions, which can be used by adding a new "prefs" module.
Replace the old modal dialog with a new gtk dialog, which also allows
to configure the new highlight-selected setting.
2012-02-13 18:55:15 +01:00
Daniel Mustieles
6b373686d3 Updated Spanish translation 2012-02-12 13:54:09 +01:00
Piotr Drąg
c90f90a5c7 Updated POTFILES.in 2012-02-10 19:44:28 +01:00
Giovanni Campagna
1dca3fecaa alternate-tab: optionally highlight selected window in workspace&icons mode
Optionally, bring the selected window to front before dismissing
the popup, in a manner similar to cycle-windows keybinding (but
without the rendering artifacts, and without application grouping).

Based on a patch by Pallai Roland <dap@magex.hu>
2012-02-10 15:22:07 +01:00
Giovanni Campagna
b6f4ed7013 Bump version to 3.3.5
To go along GNOME Shell 3.3.5
2012-02-10 15:21:01 +01:00
Giovanni Campagna
9b6374881d all: port to the new class framework
A long due update, since this was merged in gjs and core shell.
We no longer need to mess with __proto__ and prototype, and can
use decent syntax for true object oriented programming.
(This affects all except xrandr-indicator, since I want to port
that to GDBus too, using the new bindings right from the start)
2012-02-10 15:16:46 +01:00
Giovanni Campagna
2388b8738f dock: refactor and clean up code
Modified to avoid global settings variables, that were updated
unpredictably. Removed the inital show effect and placing the dock
at primary.y at startup (causing a big and often unexpected jump).
Ported to the new class framework, which should mean cleaner code.
2012-02-10 15:16:16 +01:00
Giovanni Campagna
775bd5a86a alternate-tab: shuffle and update code around a bit
Mode selection was cleaned up, settings dialog was moved to a
separate file (in preparation for GTK replacement), all classes
were moved to Lang.Class. No big code changes though.
2012-02-09 18:43:29 +01:00
Giovanni Campagna
3630228cac all: port to the new convienence module
Retrieve Convenience from the extension helper object (Me), and
pass no arguments to initTranslations and getSettings (since the
metadata has all that is required)
2012-02-09 18:43:28 +01:00
Giovanni Campagna
7517d8ab6a convenience: update for the new extension API
Extension helper and metadata are now different objects, so the
first needs be retrieved from ExtensionUtils.
Also, reduce the number of required arguments (by using the new
metadata keys) and make generic enough for usage by other extensions.
Includes documentation.
2012-02-09 18:43:25 +01:00
Giovanni Campagna
9ebfd1f495 build system: factor out setting schema generation
Introduce a common settings.mk file, which is included in extensions
that need GSettings, to ensure that conventions are respected, and
necessary fixes can be applied from one place.
2012-02-08 18:01:00 +01:00
Giovanni Campagna
dfca68062c build system: add additional automatic metadata
Add "gettext-domain", "extension-id" (containing the base part of the
UUID) and "gschemabase" (which, combined with "extension-id", gives
the GSettings schema) to metadata.json, autogenerated by the build
system.
2012-02-08 18:00:56 +01:00
Giovanni Campagna
ce1334a610 Bump version to 3.3.4
To go along GNOME Shell 3.3.4
2012-02-06 21:21:35 +01:00
Giovanni Campagna
8bc650ae19 windowsNavigator: improve the appearance of tooltips
Based on a patch by Simon Friis Vindum <simonfv@mail.com>
2012-02-06 21:18:39 +01:00
Giovanni Campagna
46fe71d1b8 native-window-placement: remove debug color
Apparently, in some situations (or themes) it can result in red
overlays.
2012-02-06 21:18:39 +01:00
Giovanni Campagna
29b0d0d96b native-window-placement: respect button layout
If the user configures the window buttons on the left, the X button
in the overview should be moved accordingly.
2012-02-06 21:18:31 +01:00
Giovanni Campagna
037a65c3d1 windowsNavigator: allows input from the keypad
Based on a patch by Simon Friis Vindum <simonfv@mail.com>
2012-02-06 16:42:34 +01:00
Djavan Fagundes
55bd12c989 Updated Brazilian Portuguese translation 2012-01-30 19:57:37 -02:00
Marek Černocký
2c5c6e0c1a Updated Czech translation 2012-01-16 10:53:44 +01:00
127 changed files with 18231 additions and 8034 deletions

5
.gitignore vendored
View File

@@ -6,13 +6,18 @@ config.log
config.status
aclocal.m4
autom4te.cache/
data/*.json
po/gnome-shell-extensions.pot
po/POTFILES
po/stamp-it
staging/
zip-files/
*~
*.gmo
metadata.json
*.desktop
*.desktop.in
*.gschema.xml
*.gschema.valid
*.session

View File

@@ -1,7 +1,13 @@
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
DIST_SUBDIRS = data extensions po
SUBDIRS = extensions po
if CLASSIC_MODE
SUBDIRS += data
endif
EXTRA_DIST = lib/convenience.js
DISTCHECK_CONFIGURE_FLAGS = --enable-extensions=all
@@ -11,15 +17,16 @@ include include.mk
zip-file: all
-rm -fR $(builddir)/_build
-rm -fR $(builddir)/zip-files
mkdir $(builddir)/_build; \
mkdir $(builddir)/zip-files; \
$(MKDIR_P) $(builddir)/_build; \
$(MKDIR_P) $(builddir)/zip-files; \
$(MAKE) install DESTDIR="$(abs_builddir)/_build"; \
for i in $(ENABLED_EXTENSIONS); do \
mv "$(builddir)/_build$(topextensiondir)/$${i}$(extensionbase)" "$(builddir)/_build/"; \
cp -r "$(builddir)/_build$(datadir)/locale" "$(builddir)/_build/$${i}$(extensionbase)"; \
cp "$(srcdir)/COPYING" -t "$(builddir)/_build/$${i}$(extensionbase)"; \
cp "$(srcdir)/NEWS" -t "$(builddir)/_build/$${i}$(extensionbase)"; \
if [ -f "$(builddir)/_build$(datadir)/glib-2.0/schemas/$(gschemabase).$${i}.gschema.xml" ]; then \
mkdir "$(builddir)/_build/$${i}$(extensionbase)/schemas"; \
$(MKDIR_P) "$(builddir)/_build/$${i}$(extensionbase)/schemas"; \
mv "$(builddir)/_build$(datadir)/glib-2.0/schemas/$(gschemabase).$${i}.gschema.xml" "$(builddir)/_build/$${i}$(extensionbase)/schemas"; \
glib-compile-schemas "$(builddir)/_build/$${i}$(extensionbase)/schemas"; \
fi; \
@@ -27,3 +34,19 @@ zip-file: all
zip -qr "$(abs_builddir)/zip-files/$${i}$(extensionbase).shell-extension.zip" .; \
); \
done
-rm -fR $(builddir)/_build
localprefix = $(HOME)/.local/share/gnome-shell/extensions
local-install: zip-file
for i in $(ENABLED_EXTENSIONS); do \
uuid="$${i}$(extensionbase)"; \
zip_file="$(abs_builddir)/zip-files/$${uuid}.shell-extension.zip"; \
if [ -d "$(localprefix)/$${uuid}" ]; then \
rm -fR "$(localprefix)/$${uuid}"; \
fi; \
$(MKDIR_P) $(localprefix)/$${uuid}; \
(cd $(localprefix)/$${uuid}; \
unzip -q $${zip_file}; \
); \
done

243
NEWS
View File

@@ -1,3 +1,246 @@
3.9.5
=====
* alternative-status-menu was removed entirely, as
it does not fit in the designs of the new unified
status menu
* updated translations (as, gu, it, ru)
3.9.4
=====
* apps-menu: fixed handling of hot corner in case
of screen reconfiguration
* alternative-status-menu now correctly honors polkit
for hibernation
* user-menu now loads themes from $XDG_DATA_HOME too
* translation updates (de, id, pt_BR, vi, zh_CN, ml)
3.9.3
=====
* classic mode mini extensions were replaced with a
GSettings override specified in the .json file
* styling of classic mode improved
* native-window-placement is back working on 3.9
* misc bug fixes
* traslation updates (an, cs, el, es, gl, nb, pl, sk, tg)
3.9.2
=====
* apps-menu: appearance of the scrollbars was improved
* window-list is a little taller in classic mode (to account
for the workspace switcher)
* alternative-status-menu honors again the dconf configuration
* translation updates (sr)
3.9.1
=====
* updates to window-list, xrandr-indicator,
workspace-indicator, windowsNavigator for gnome-shell
changes
* translation updates (cs, es, lt, pl, pt_BR, sl)
3.8.1
=====
* many improvements to window-list:
- windows are activated by DND over them
- window buttons now have the right size,
even if the text is smaller or larger
than the ideal
- window buttons can be grouped automatically
when the panel becomes crowded
- added a workspace switcher menu
* added keyboard navigation to apps-menu
* small tweaks to classic-mode theme, in particular
for menus
* translation updates (gl, ko, sr)
3.8.0
=====
* translation updates (hu, ja, fi, it)
3.7.92
======
* misc bug fixes to app-menu and window-list
* translation updates (de, sl, pt_BR, ru)
3.7.91
======
* various updates for shell changes
* update window-list to always use application icons
* update apps-menu to not load subdirectories as
separate categories
* translation updates (lt, zh_CN)
3.7.90
======
* various fixes to make places-menu behave more
like Nautilus, including showing the machine
name in place of File System
* various updates for shell changes
* alternative-status-menu no longer supports
ConsoleKit systems, you need to install logind
to have suspend or hibernate
* translation updates (es, cz, pl, sr)
3.7.5.1
=======
* new extension forgotten in previous NEWS entry:
windows-list
* also forgotten previously: classic mode got a new
GNOME2 style
* build fixes
3.7.5
=====
* places-menu is back in the classic extensions, with
a new old GNOME-2 look
* classic mode moved the date menu to right, where we
all know it rightly belongs
* apps-menu received a face-lift, with the inclusion
of a reduced form of AxeMenu
* new extension in the classic set: launch-new-instance,
which modifies the behavior of clicking in the dash
and app launcher
* alternate-tab, native-window-placement and windowsNavigator
updated for gnome-shell changes
* translation updates (es, cz, pl)
3.7.4
=====
* a separate configure switch has been added to enable
classic mode session definitions
* places-menu is no longer part of the classic-mode
extension set
* updated translations (ar, gl, hu, lt, pt_BR, sr)
3.7.3
=====
* new extensions: default-min-max, static-workspaces
* alternate-tab now uses the built-in window switcher and just
takes over the switch-application keybinding
* workspace-indicator: is no longer part of classic-mode
* we now install classic-mode data files for gdm, gnome-session
and gnome-shell, so if you enable classic-mode you get a new
session option in GDM
* updated translations (ar, es, pl, ru, sl, zh_HK, zh_TW)
3.7.2
=====
* fixed crashes with places-menu, windowsNavigator, alternate-tab
and native-window-placement
* alternate-tab now hides attached modal dialogs
* places-menu has restored support for Nautilus 3.4
* the default for hibernate is now to show in alternative-status-menu
* some extensions are now tagged as "classic", and can be chosen with
--enable-extensions=classic-mode
* dock and gajim were removed at the beginning of the 3.7.1 cycle,
as they were buggy and unmaintained
* updated translations (ar, cs, de, el, es, gl, id, lt, lv, pa, pl
ru, sk, sl, sr, sr@latin)
3.6.1
=====
* fixed alternative-status-menu for the new lock screen
* squashed some alternate-tab warnings
* drive-menu now works with 3.6 again
* updated translations (ar, cs, el, es, gl, id, lv, pl, sl)
3.6.0
=====
* major rework in places menu, to make it work without
removed supporting code in the shell and to make it look like
the nautilus sidebar
(similar work would be needed for drive-menu, not done yet)
* updated translations (ca, cs, de, el, en_GB, es, fi, hu, id, lt,
pl, pt_BR, ru, sl, sr)
3.5.91
======
* various crashers were fixed in alternative-tab
* auto-move-windows now can be made to work with static workspaces
* place-menu is now on the left and uses symbolic icons like Files
* StIconType usage was removed from all extensions, after it was
removed in core
* systemMonitor, xrandr-indicator, apps-menu, places-menu,
alternative-status-menu were updated for the newer shell
* updated translations (es, gl, it, pl, sl)
3.5.90
======
* alternate-tab has been reworked again, the old mode switch
was removed and the all&thumbnails code extended to handle
icons and filtering to the workspace
* alternate-tab thumbnails now reflect the aspect ratio of the windows
* systemMonitor now shows a tooltip above the indicator
* native-window-placement, systemMonitor and windowsNavigator have been updated
for the newer shell
* updated translations (es, pa)
3.5.5
=====
* convenience module has been relicensed to BSD,
for compatibility with GPLv3 extensions
* alternate-tab has been refactored and seen various
improvements to all&thumbnails mode, including a new
overlaid application icon
* updated translations (lt, id, sr)
3.5.4
=====
* updated translations (de, es, ar, sl, lv, zh_CN)
3.5.2
=====
* removable-drive-menu is now a11y friendly
* the dock can now be placed on any monitor, not just the primary
* dock is now clipped to its monitor
* alternative-status-menu now exposes GSettings for Suspend
and Hibernate visibility - no UI yet
* more gnome-shell API changes (places-menu, removable-drive-menu,
alternative-status-menu)
* miscellaneous bug fixes (native-window-placement, gajim,
auto-move-windows)
* updated translations
3.4.0
=====
* build system improvements
* updated translations (ar, cs, fr)
3.3.92
======
* various updates for gnome-shell API changes (dock,
native-window-placement)
* local-install is now a make rule, not a shell script
* updated translations (zh, es, sw, ga, hu, it, no, pt_BR, de, sl,
pl, la, fi, sr)
3.3.90
======
* system wide installation via "make install" is possible
again
* alternate-tab can now pre-activate the selected window
* auto-move-windows, workspace-indicator and example gained
new preference dialogs
* workspace-indicator: fixed a bug wrt focus stealing prevention
* updated translations (es, pt_BR, it, sl, gl, sr)
3.3.5
=====
* improvements to the build system and convenience module,
making it easier for other extensions to use, and bringing
it up to date with gnome-shell changes
* all extensions were ported to the Lang.Class framework
(except xrandr-indicator, which is pending GDBus merge)
* alternate-tab and dock were slightly refactored to clean up
some old code
3.3.4
=====
* improved styling of windowsNavigator tooltips
* fixed windowsNavigator when used with the numeric keypad
* fixed native-window-placement with custom button layout
* updated translations (pt_BR, cz)
3.3.3
=====
* windowsNavigator was fixed to work with azerty keyboards

6
README
View File

@@ -24,12 +24,6 @@ alternate-tab
Lets you use classic Alt+Tab (window-based instead of app-based) in GNOME Shell.
alternative-status-menu
For those who want a power off item visible at all the time, replaces GNOME Shell
status menu with one featuring separate Suspend and Power Off. Adds the ability to
hibernate as well.
apps-menu
Lets you reach an application using gnome 2.x style menu on the panel.

View File

@@ -1,10 +1,10 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell-extensions],[3.3.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&component=extensions])
AC_INIT([gnome-shell-extensions],[3.9.5],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&component=extensions])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_AUX_DIR([config])
AM_INIT_AUTOMAKE([1.10 dist-bzip2 no-dist-gzip foreign tar-ustar])
AM_INIT_AUTOMAKE([1.10 dist-xz no-dist-gzip foreign tar-ustar])
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
@@ -18,24 +18,45 @@ PKG_PROG_PKG_CONFIG([0.22])
GLIB_GSETTINGS
SHELL_VERSION="$PACKAGE_VERSION"
shell_major=`echo "$PACKAGE_VERSION" | cut -d'.' -f1`
shell_minor=`echo "$PACKAGE_VERSION" | cut -d'.' -f2`
if test "$(($shell_minor % 2))" -eq 0; then
SHELL_VERSION="$shell_major.$shell_minor"
fi
AC_SUBST([SHELL_VERSION])
dnl keep this in alphabetic order
dnl by default, install only extensions that do not change completely the shell experience,
dnl that don't require GSettings and that don't require external packages for typelibs
dnl (so basically only menus, status icons, search providers, overview tabs, message tray sources, etc.)
DEFAULT_EXTENSIONS="alternative-status-menu apps-menu dock drive-menu gajim places-menu windowsNavigator workspace-indicator"
ALL_EXTENSIONS="$DEFAULT_EXTENSIONS alternate-tab auto-move-windows example native-window-placement systemMonitor user-theme xrandr-indicator"
CLASSIC_EXTENSIONS="apps-menu places-menu alternate-tab launch-new-instance window-list"
DEFAULT_EXTENSIONS="$CLASSIC_EXTENSIONS drive-menu windowsNavigator workspace-indicator"
ALL_EXTENSIONS="$DEFAULT_EXTENSIONS auto-move-windows example native-window-placement systemMonitor user-theme xrandr-indicator"
AC_SUBST(CLASSIC_EXTENSIONS, [$CLASSIC_EXTENSIONS])
AC_SUBST(ALL_EXTENSIONS, [$ALL_EXTENSIONS])
AC_ARG_ENABLE([extensions],
[AS_HELP_STRING([--enable-extensions],[Space separated list of extensions to enable.
The default is to build all extensions that can be installed in the home directory and have no external depedencies.
Use "all" to enable all available extensions.])],
The default is to build and distribute all extensions that can be installed in the home directory and have no external depedencies.
Use "all" to enable all available extensions, or "classic-mode" to enable extensions that restore GNOME 2 functionality.])],
[],
[enable_extensions=$DEFAULT_EXTENSIONS]
)
if test x$enable_extensions = xall; then
if test x"$enable_extensions" = xall; then
enable_extensions="$ALL_EXTENSIONS"
enable_classic_mode_default=yes
elif test x"$enable_extensions" = xclassic-mode; then
enable_extensions="$CLASSIC_EXTENSIONS"
enable_classic_mode_default=yes
else
enable_classic_mode_default=no
fi
AC_ARG_ENABLE([classic-mode],
[AS_HELP_STRING([--enable-classic-mode],[Enable installing data files for classic mode.
Defaults to yes if enabling all or classic-mode extensions, and no otherwise.])],
[],
[enable_classic_mode=$enable_classic_mode_default])
AM_CONDITIONAL([CLASSIC_MODE], [test x"$enable_classic_mode" != xno])
ENABLED_EXTENSIONS=
for e in $enable_extensions; do
case $e in
@@ -50,7 +71,7 @@ for e in $enable_extensions; do
[AC_MSG_WARN([gnome-desktop-3.0 not found, disabling xrandr-indicator])])
;;
dnl keep this in alphabetic order
alternate-tab|alternative-status-menu|apps-menu|auto-move-windows|dock|drive-menu|example|gajim|native-window-placement|places-menu|user-theme|windowsNavigator|workspace-indicator)
alternate-tab|apps-menu|auto-move-windows|drive-menu|example|launch-new-instance|native-window-placement|places-menu|user-theme|window-list|windowsNavigator|workspace-indicator)
ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e"
;;
*)
@@ -62,18 +83,18 @@ AC_SUBST(ENABLED_EXTENSIONS, [$ENABLED_EXTENSIONS])
dnl Please keep this sorted alphabetically
AC_CONFIG_FILES([
data/Makefile
extensions/alternate-tab/Makefile
extensions/alternative-status-menu/Makefile
extensions/apps-menu/Makefile
extensions/auto-move-windows/Makefile
extensions/dock/Makefile
extensions/drive-menu/Makefile
extensions/example/Makefile
extensions/gajim/Makefile
extensions/launch-new-instance/Makefile
extensions/native-window-placement/Makefile
extensions/places-menu/Makefile
extensions/systemMonitor/Makefile
extensions/user-theme/Makefile
extensions/window-list/Makefile
extensions/windowsNavigator/Makefile
extensions/workspace-indicator/Makefile
extensions/xrandr-indicator/Makefile

72
data/Makefile.am Normal file
View File

@@ -0,0 +1,72 @@
include $(top_srcdir)/include.mk
desktopdir = $(datadir)/applications
desktop_in_in_files = gnome-shell-classic.desktop.in.in
desktop_in_files = $(desktop_in_in_files:.desktop.in.in=.desktop.in)
desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
sessiondir = $(datadir)/gnome-session/sessions
session_in_in_files = gnome-classic.session.desktop.in.in
session_in_files = $(session_in_in_files:.session.desktop.in.in=.session.desktop.in)
session_DATA = $(session_in_files:.session.desktop.in=.session)
xsessiondir = $(datadir)/xsessions
xsession_in_files = gnome-classic.desktop.in
xsession_DATA = $(xsession_in_files:.desktop.in=.desktop)
modedir = $(datadir)/gnome-shell/modes
mode_in_files = classic.json.in
mode_DATA = $(mode_in_files:.json.in=.json)
themedir = $(datadir)/gnome-shell/theme
theme_DATA = \
$(srcdir)/classic-process-working.svg \
$(srcdir)/classic-toggle-off-intl.svg \
$(srcdir)/classic-toggle-off-us.svg \
$(srcdir)/classic-toggle-on-intl.svg \
$(srcdir)/classic-toggle-on-us.svg \
$(srcdir)/gnome-classic.css \
$(NULL)
gsettings_in_files = org.gnome.shell.extensions.classic-overrides.gschema.xml.in
gsettings_SCHEMAS = $(gsettings_in_files:.xml.in=.xml)
@INTLTOOL_XML_NOMERGE_RULE@
@GSETTINGS_RULES@
%.desktop.in:%.desktop.in.in
$(AM_V_GEN) sed \
-e "s|\@bindir\@|$(bindir)|" \
-e "s|\@VERSION\@|$(VERSION)|" \
$< > $@
comma:=,
empty:=
space:= $(empty) $(empty)
extensions:=$(patsubst %,\"%$(extensionbase)\",$(CLASSIC_EXTENSIONS))
extension_list:=$(subst $(space),$(comma),$(extensions))
%.json:%.json.in
$(AM_V_GEN) sed \
-e "s|\@CLASSIC_EXTENSIONS\@|$(extension_list)|g" \
$< > $@
%.session: %.session.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
@INTLTOOL_DESKTOP_RULE@
EXTRA_DIST = \
$(desktop_in_in_files) \
$(session_in_in_files) \
$(xsession_in_files) \
$(mode_in_files) \
$(gsettings_in_files) \
$(theme_DATA) \
$(NULL)
CLEANFILES = \
$(desktop_DATA) \
$(session_DATA) \
$(xsession_DATA) \
$(mode_DATA) \
$(gsettings_SCHEMAS) \
$(NULL)

View File

@@ -0,0 +1,695 @@
<?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"
id="svg5369"
version="1.1"
inkscape:version="0.48.4 r9939"
width="96"
height="48"
sodipodi:docname="process-working-inverse.svg"
style="display:inline">
<metadata
id="metadata5375">
<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>
<defs
id="defs5373">
<filter
id="filter3278"
inkscape:label="Invert"
x="0"
y="0"
width="1"
height="1"
inkscape:menu="Color"
inkscape:menu-tooltip="Invert colors"
color-interpolation-filters="sRGB">
<feColorMatrix
id="feColorMatrix3280"
type="saturate"
values="1"
result="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3282"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 " />
</filter>
<filter
id="filter3284"
inkscape:label="Invert"
x="0"
y="0"
width="1"
height="1"
inkscape:menu="Color"
inkscape:menu-tooltip="Invert colors"
color-interpolation-filters="sRGB">
<feColorMatrix
id="feColorMatrix3286"
type="saturate"
values="1"
result="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3288"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 " />
</filter>
<filter
id="filter3290"
inkscape:label="Invert"
x="0"
y="0"
width="1"
height="1"
inkscape:menu="Color"
inkscape:menu-tooltip="Invert colors"
color-interpolation-filters="sRGB">
<feColorMatrix
id="feColorMatrix3292"
type="saturate"
values="1"
result="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3294"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 " />
</filter>
<filter
id="filter3296"
inkscape:label="Invert"
x="0"
y="0"
width="1"
height="1"
inkscape:menu="Color"
inkscape:menu-tooltip="Invert colors"
color-interpolation-filters="sRGB">
<feColorMatrix
id="feColorMatrix3298"
type="saturate"
values="1"
result="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3300"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 " />
</filter>
<filter
id="filter3302"
inkscape:label="Invert"
x="0"
y="0"
width="1"
height="1"
inkscape:menu="Color"
inkscape:menu-tooltip="Invert colors"
color-interpolation-filters="sRGB">
<feColorMatrix
id="feColorMatrix3304"
type="saturate"
values="1"
result="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3306"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 " />
</filter>
<filter
id="filter3308"
inkscape:label="Invert"
x="0"
y="0"
width="1"
height="1"
inkscape:menu="Color"
inkscape:menu-tooltip="Invert colors"
color-interpolation-filters="sRGB">
<feColorMatrix
id="feColorMatrix3310"
type="saturate"
values="1"
result="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3312"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 " />
</filter>
<filter
id="filter3314"
inkscape:label="Invert"
x="0"
y="0"
width="1"
height="1"
inkscape:menu="Color"
inkscape:menu-tooltip="Invert colors"
color-interpolation-filters="sRGB">
<feColorMatrix
id="feColorMatrix3316"
type="saturate"
values="1"
result="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3318"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 " />
</filter>
<filter
id="filter3320"
inkscape:label="Invert"
x="0"
y="0"
width="1"
height="1"
inkscape:menu="Color"
inkscape:menu-tooltip="Invert colors"
color-interpolation-filters="sRGB">
<feColorMatrix
id="feColorMatrix3322"
type="saturate"
values="1"
result="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3324"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 " />
</filter>
<filter
id="filter3326"
inkscape:label="Invert"
x="0"
y="0"
width="1"
height="1"
inkscape:menu="Color"
inkscape:menu-tooltip="Invert colors"
color-interpolation-filters="sRGB">
<feColorMatrix
id="feColorMatrix3328"
type="saturate"
values="1"
result="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3330"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 " />
</filter>
<filter
id="filter3332"
inkscape:label="Invert"
x="0"
y="0"
width="1"
height="1"
inkscape:menu="Color"
inkscape:menu-tooltip="Invert colors"
color-interpolation-filters="sRGB">
<feColorMatrix
id="feColorMatrix3334"
type="saturate"
values="1"
result="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3336"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 "
result="fbSourceGraphic" />
<feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix3374" />
<feColorMatrix
id="feColorMatrix3376"
type="saturate"
values="1"
result="fbSourceGraphic"
in="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3378"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 " />
</filter>
<filter
id="filter3338"
inkscape:label="Invert"
x="0"
y="0"
width="1"
height="1"
inkscape:menu="Color"
inkscape:menu-tooltip="Invert colors"
color-interpolation-filters="sRGB">
<feColorMatrix
id="feColorMatrix3340"
type="saturate"
values="1"
result="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3342"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 "
result="fbSourceGraphic" />
<feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix3380" />
<feColorMatrix
id="feColorMatrix3382"
type="saturate"
values="1"
result="fbSourceGraphic"
in="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3384"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 " />
</filter>
<filter
id="filter3344"
inkscape:label="Invert"
x="0"
y="0"
width="1"
height="1"
inkscape:menu="Color"
inkscape:menu-tooltip="Invert colors"
color-interpolation-filters="sRGB">
<feColorMatrix
id="feColorMatrix3346"
type="saturate"
values="1"
result="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3348"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 "
result="fbSourceGraphic" />
<feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix3386" />
<feColorMatrix
id="feColorMatrix3388"
type="saturate"
values="1"
result="fbSourceGraphic"
in="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3390"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 " />
</filter>
<filter
id="filter3350"
inkscape:label="Invert"
x="0"
y="0"
width="1"
height="1"
inkscape:menu="Color"
inkscape:menu-tooltip="Invert colors"
color-interpolation-filters="sRGB">
<feColorMatrix
id="feColorMatrix3352"
type="saturate"
values="1"
result="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3354"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 "
result="fbSourceGraphic" />
<feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix3392" />
<feColorMatrix
id="feColorMatrix3394"
type="saturate"
values="1"
result="fbSourceGraphic"
in="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3396"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 " />
</filter>
<filter
id="filter3356"
inkscape:label="Invert"
x="0"
y="0"
width="1"
height="1"
inkscape:menu="Color"
inkscape:menu-tooltip="Invert colors"
color-interpolation-filters="sRGB">
<feColorMatrix
id="feColorMatrix3358"
type="saturate"
values="1"
result="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3360"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 "
result="fbSourceGraphic" />
<feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix3398" />
<feColorMatrix
id="feColorMatrix3400"
type="saturate"
values="1"
result="fbSourceGraphic"
in="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3402"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 " />
</filter>
<filter
id="filter3362"
inkscape:label="Invert"
x="0"
y="0"
width="1"
height="1"
inkscape:menu="Color"
inkscape:menu-tooltip="Invert colors"
color-interpolation-filters="sRGB">
<feColorMatrix
id="feColorMatrix3364"
type="saturate"
values="1"
result="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3366"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 "
result="fbSourceGraphic" />
<feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix3404" />
<feColorMatrix
id="feColorMatrix3406"
type="saturate"
values="1"
result="fbSourceGraphic"
in="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3408"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 " />
</filter>
<filter
id="filter3368"
inkscape:label="Invert"
x="0"
y="0"
width="1"
height="1"
inkscape:menu="Color"
inkscape:menu-tooltip="Invert colors"
color-interpolation-filters="sRGB">
<feColorMatrix
id="feColorMatrix3370"
type="saturate"
values="1"
result="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3372"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 "
result="fbSourceGraphic" />
<feColorMatrix
result="fbSourceGraphicAlpha"
in="fbSourceGraphic"
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
id="feColorMatrix3410" />
<feColorMatrix
id="feColorMatrix3412"
type="saturate"
values="1"
result="fbSourceGraphic"
in="fbSourceGraphic" />
<feColorMatrix
id="feColorMatrix3414"
in="fbSourceGraphic"
values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 " />
</filter>
</defs>
<sodipodi:namedview
pagecolor="#808080"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1364"
inkscape:window-height="708"
id="namedview5371"
showgrid="true"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:zoom="5.27"
inkscape:cx="25.33344"
inkscape:cy="36.016983"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="0"
inkscape:current-layer="layer1">
<inkscape:grid
type="xygrid"
id="grid11933"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="tiles"
style="display:inline">
<rect
style="color:#000000;fill:#000000;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;filter:url(#filter3278)"
id="rect12451"
width="24"
height="24"
x="0"
y="0" />
<rect
y="24"
x="0"
height="24"
width="24"
id="rect12453"
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;filter:url(#filter3284);opacity:0" />
<rect
y="0"
x="24"
height="24"
width="24"
id="rect12455"
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;filter:url(#filter3290);opacity:0.00858369" />
<rect
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;filter:url(#filter3296);opacity:0"
id="rect12457"
width="24"
height="24"
x="24"
y="24" />
<rect
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;filter:url(#filter3302);opacity:0"
id="rect12459"
width="24"
height="24"
x="48"
y="0" />
<rect
y="24"
x="48"
height="24"
width="24"
id="rect12461"
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;filter:url(#filter3308);opacity:0" />
<rect
y="0"
x="72"
height="24"
width="24"
id="rect12463"
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;filter:url(#filter3314);opacity:0" />
<rect
style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;filter:url(#filter3320);opacity:0"
id="rect12465"
width="24"
height="24"
x="72"
y="24" />
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="spinner"
sodipodi:insensitive="true">
<g
transform="matrix(0.28240106,0,0,0.28240106,146.92015,-382.52444)"
id="g10450-5"
style="display:inline;filter:url(#filter3326)">
<path
inkscape:connector-curvature="0"
style="opacity:0.6;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m -477.76072,1373.3569 0,9.4717"
id="path18768"
sodipodi:nodetypes="cc"
inkscape:transform-center-y="-4.6808838" />
<path
inkscape:connector-curvature="0"
inkscape:transform-center-y="-3.3099227"
sodipodi:nodetypes="cc"
id="path18770"
d="m -461.0171,1380.2922 -7.23427,7.3824"
style="opacity:0.7;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
inkscape:transform-center-x="-3.3098966" />
<path
inkscape:connector-curvature="0"
inkscape:transform-center-x="-4.6808962"
style="opacity:0.8;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m -454.08163,1397.0359 -9.47165,0"
id="path18772"
sodipodi:nodetypes="cc"
inkscape:transform-center-y="-2.6596956e-05" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
id="path18774"
d="m -461.01709,1413.7796 -6.93831,-7.0864"
style="opacity:0.9;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
inkscape:transform-center-x="-3.3098966"
inkscape:transform-center-y="3.3098652" />
<path
inkscape:connector-curvature="0"
inkscape:transform-center-y="4.6808757"
style="color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m -477.76074,1420.715 9e-5,-9.4716"
id="path18776"
sodipodi:nodetypes="cc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
id="path18778"
d="m -494.50442,1413.7796 6.79048,-6.9384"
style="opacity:0.3;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
inkscape:transform-center-y="3.3098769"
inkscape:transform-center-x="3.3098883" />
<path
inkscape:connector-curvature="0"
inkscape:transform-center-x="4.6808941"
style="opacity:0.4;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
d="m -501.43987,1397.0359 9.47174,0"
id="path18780"
sodipodi:nodetypes="cc"
inkscape:transform-center-y="-2.6596956e-05" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
id="path18782"
d="m -494.5044,1380.2922 6.64243,6.9384"
style="opacity:0.5;color:#000000;fill:none;stroke:#ffffff;stroke-width:7.08212566;stroke-linecap:round;stroke-opacity:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
inkscape:transform-center-x="3.3098902"
inkscape:transform-center-y="-3.3099302" />
</g>
<use
style="display:inline;filter:url(#filter3332)"
x="0"
y="0"
xlink:href="#g10450-5"
id="use4981"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,36,-4.9705636)"
width="400"
height="400" />
<use
style="display:inline;filter:url(#filter3338)"
x="0"
y="0"
xlink:href="#use4981"
id="use4983"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,43.032478,-21.909695)"
width="400"
height="400" />
<use
style="display:inline;filter:url(#filter3344)"
x="0"
y="0"
xlink:href="#use4983"
id="use4985"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,50.081986,-38.904617)"
width="400"
height="400" />
<use
style="display:inline;filter:url(#filter3350)"
x="0"
y="0"
xlink:href="#use4985"
id="use4987"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,-38.919996,-31.872139)"
width="400"
height="400" />
<use
style="display:inline;filter:url(#filter3356)"
x="0"
y="0"
xlink:href="#use4987"
id="use4989"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,52.986628,2.0890543)"
width="400"
height="400" />
<use
style="display:inline;filter:url(#filter3362)"
x="0"
y="0"
xlink:href="#use4989"
id="use4991"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,60.013026,-14.912936)"
width="400"
height="400" />
<use
style="display:inline;filter:url(#filter3368)"
x="0"
y="0"
xlink:href="#use4991"
id="use4993"
transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,67.022396,-31.859127)"
width="400"
height="400" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -0,0 +1,250 @@
<?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.48.4 r9939"
sodipodi:docname="toggle-off-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,27.810405,92.069729)"
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" />
<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
inkscape:collect="always"
xlink:href="#linearGradient62821-5-8-1"
id="linearGradient62864-0-3-1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3066667,0,0,1,-197.64667,0)"
x1="702.58966"
y1="484.49405"
x2="702.58966"
y2="507.42715" />
<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" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="-133.20351"
inkscape:cy="20.84411"
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="1380"
inkscape:window-x="1600"
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></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(#linearGradient62864-0-3-1);fill-opacity:1;stroke:#a6a8a6;stroke-width:1;stroke-linecap:round;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:accumulate;clip-rule:nonzero"
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:#777b7a;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="646.55896"
y="485.61429"
rx="1"
ry="1" />
<g
transform="translate(-38.048674,-1.9445437)"
id="g62939">
<rect
ry="1"
rx="1"
y="492"
x="695"
height="8"
width="2"
id="rect62941"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
<rect
ry="1"
rx="1"
y="492"
x="699"
height="8"
width="2"
id="rect62943"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
<rect
ry="1"
rx="1"
y="492"
x="703"
height="8"
width="2"
id="rect62945"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
</g>
<path
inkscape:connector-curvature="0"
inkscape:original-d="m 647.78624,486.57192 27.94632,0"
inkscape:path-effect="#path-effect62989-8-0"
id="path62947"
d="m 647.78624,486.57192 27.94632,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
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
transform="translate(642.41421,514.02037)"
d="m 55,11.875 a 4.625,4.625 0 1 1 -9.25,0 4.625,4.625 0 1 1 9.25,0 z"
sodipodi:ry="4.625"
sodipodi:rx="4.625"
sodipodi:cy="11.875"
sodipodi:cx="50.375"
id="path3786"
sodipodi:type="arc" />
<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 1 1 -9.25,0 4.625,4.625 0 1 1 9.25,0 z"
transform="translate(642.41421,512.02037)"
style="fill:none;stroke:#555753;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.1 KiB

View File

@@ -0,0 +1,255 @@
<?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.48+devel r12050"
sodipodi:docname="toggle-off-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,27.810405,92.069729)"
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" />
<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
inkscape:collect="always"
xlink:href="#linearGradient62821-5-8-1"
id="linearGradient62864-0-3-1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3066667,0,0,1,-197.64667,0)"
x1="702.58966"
y1="484.49405"
x2="702.58966"
y2="507.42715" />
<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" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="50.925774"
inkscape:cy="11.296867"
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="1375"
inkscape:window-x="1600"
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></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(#linearGradient62864-0-3-1);fill-opacity:1;stroke:#a6a8a6;stroke-width:1;stroke-linecap:round;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:accumulate;clip-rule:nonzero"
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:#777b7a;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="646.55896"
y="485.61429"
rx="1"
ry="1" />
<g
transform="translate(-38.048674,-1.9445437)"
id="g62939">
<rect
ry="1"
rx="1"
y="492"
x="695"
height="8"
width="2"
id="rect62941"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
<rect
ry="1"
rx="1"
y="492"
x="699"
height="8"
width="2"
id="rect62943"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
<rect
ry="1"
rx="1"
y="492"
x="703"
height="8"
width="2"
id="rect62945"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
</g>
<path
inkscape:connector-curvature="0"
inkscape:original-d="m 647.78624,486.57192 27.94632,0"
inkscape:path-effect="#path-effect62989-8-0"
id="path62947"
d="m 647.78624,486.57192 27.94632,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:13.14816952px;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;display:inline;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
x="644.02277"
y="534.94739"
id="text62949-7"
sodipodi:linespacing="125%"
transform="scale(1.0113976,0.98873084)"><tspan
sodipodi:role="line"
id="tspan62951-7"
x="644.02277"
y="534.94739">OFF</tspan></text>
<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>

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

@@ -0,0 +1,199 @@
<?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.48.4 r9939"
sodipodi:docname="toggle-on-us.svg">
<defs
id="defs10867">
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient62991-9-6"
id="linearGradient62979-8-1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3066667,0,0,1,-197.64667,0)"
x1="702.58966"
y1="484.49405"
x2="702.58966"
y2="507.42715" />
<linearGradient
inkscape:collect="always"
id="linearGradient62991-9-6">
<stop
style="stop-color:#589fe9;stop-opacity:1"
offset="0"
id="stop62993-6-9" />
<stop
style="stop-color:#a3cefe;stop-opacity:1"
offset="1"
id="stop62995-1-6" />
</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" />
<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" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="14.199007"
inkscape:cy="11.127758"
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="1380"
inkscape:window-x="1600"
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></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(#linearGradient62979-8-1);fill-opacity:1;stroke:#1a71cc;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
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:#777b7a;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">
<rect
ry="1"
rx="1"
y="492"
x="695"
height="8"
width="2"
id="rect62941"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
<rect
ry="1"
rx="1"
y="492"
x="699"
height="8"
width="2"
id="rect62943"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
<rect
ry="1"
rx="1"
y="492"
x="703"
height="8"
width="2"
id="rect62945"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
</g>
<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>
<path
inkscape:connector-curvature="0"
id="path4444"
d="m 661.91421,522.09451 0,7"
style="fill:none;stroke:#1a71cc;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>

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@@ -0,0 +1,212 @@
<?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.48+devel r12050"
sodipodi:docname="toggle-on-us.svg">
<defs
id="defs10867">
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient62991-9-6"
id="linearGradient62979-8-1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3066667,0,0,1,-197.64667,0)"
x1="702.58966"
y1="484.49405"
x2="702.58966"
y2="507.42715" />
<linearGradient
inkscape:collect="always"
id="linearGradient62991-9-6">
<stop
style="stop-color:#589fe9;stop-opacity:1"
offset="0"
id="stop62993-6-9" />
<stop
style="stop-color:#a3cefe;stop-opacity:1"
offset="1"
id="stop62995-1-6" />
</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" />
<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" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="8.2018252"
inkscape:cy="8.0650495"
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="1375"
inkscape:window-x="1600"
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(#linearGradient62979-8-1);fill-opacity:1;stroke:#1a71cc;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
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:#777b7a;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">
<rect
ry="1"
rx="1"
y="492"
x="695"
height="8"
width="2"
id="rect62941"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
<rect
ry="1"
rx="1"
y="492"
x="699"
height="8"
width="2"
id="rect62943"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
<rect
ry="1"
rx="1"
y="492"
x="703"
height="8"
width="2"
id="rect62945"
style="fill:#e8e8e5;fill-opacity:1;stroke:none;display:inline" />
</g>
<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:#1a71cc;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>

After

Width:  |  Height:  |  Size: 6.9 KiB

11
data/classic.json.in Normal file
View File

@@ -0,0 +1,11 @@
{
"parentMode": "user",
"stylesheetName": "gnome-classic.css",
"overridesSchema": "org.gnome.shell.extensions.classic-overrides",
"enabledExtensions": [@CLASSIC_EXTENSIONS@],
"panel": { "left": ["activities", "appMenu"],
"center": [],
"right": ["a11y", "keyboard", "volume", "bluetooth",
"network", "battery", "dateMenu", "userMenu"]
}
}

257
data/gnome-classic.css Normal file
View File

@@ -0,0 +1,257 @@
@import url("gnome-shell.css");
/* FIXME:
- white edge highlight with text-shadow and icon-shadow for panel-button
- better shading of the panel (dark 5%) - impossible without multipoint gradients, image-bg is a hack
*/
#panel {
background-color: #e9e9e9 !important;
background-gradient-direction: vertical;
background-gradient-end: #d0d0d0;
border-top-color: #666; /* we don't support non-uniform border-colors and
use the top border color for any border, so we
need to set it even if all we want is a bottom
border */
border-bottom: 1px solid #666;
app-icon-bottom-clip: 0px;
/* hrm, still no multipoint gradients
background-image: linear-gradient(left, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1) 50%, rgba(255, 255, 255, 0)) !important;*/
}
#panel:overview {
background-color: #000 !important;
background-gradient-end: #000 !important;
border-top-color: #000;
border-bottom: 1px solid #000 !important;
}
#panel.lock-screen {
background-color: rgba(0,0,0,0.3) !important;
background-gradient-end: rgba(0,0,0,0.3) !important;
border-top-color: transparent;
}
#panel.unlock-screen {
background-color: transparent !important;
background-gradient-end: transparent !important;
border-top-color: transparent;
}
/* TOP BAR */
.panel-corner,
.panel-corner:active,
.panel-corner:overview,
.panel-corner:focus {
-panel-corner-radius: 0 !important;
}
.panel-button {
color: #555 !important;
-natural-hpadding: 6px !important;
-minimum-hpadding: 3px !important;
}
#panel:overview .panel-button,
#panel.lock-screen .panel-button,
#panel.unlock-screen .panel-button {
color: #ccc !important;
}
.panel-button:hover {
color: #000 !important;
}
#panel:overview .panel-button:hover,
#panel:overview .panel-button:active {
color: white !important;
}
.panel-button > .system-status-icon {
icon-shadow: #fff 0 1px 0 !important; /* FIXME */
}
.panel-button:hover,
.panel-button:active,
.panel-button:overview,
.panel-button:focus {
text-shadow: 0 0 0 transparent !important; /* FIXME: why can't I do none ? */
}
.panel-button:active,
.panel-button:overview,
.panel-button:focus {
background-color: #4a90d9 !important; /* FIXME */
color: #fff !important;
border: none !important;
border-image: none !important;
background-image: none !important;
}
#panelUserMenu {
padding: 0 10px 0 10px !important;
}
#appMenu {
text-shadow: 0 0 0 transparent !important;
spinner-image: url("classic-process-working.svg");
}
/* used for the app menu header only */
.label-shadow {
color: rgba(0,0,0,0.5);
}
.label-shadow {
color: rgba(255,255,255,.5) !important;
}
.panel-button:active .label-shadow,
.panel-button:focus .label-shadow {
color: rgba(0,0,0,.5) !important;
}
.popup-menu-boxpointer {
-arrow-background-color: #e9e9e9 !important;
-arrow-border-width: 1px !important;
-arrow-border-color: #aaa !important;
-arrow-border-radius: 3px !important;
color: #000 !important;
-arrow-base: 11px !important;
-arrow-rise: 5px !important;
}
.popup-combo-menu {
background-color: #e9e9e9 !important;
border: 1px solid #aaa !important;
color: #000 !important;
}
.popup-menu-item:active {
background-color: #4a90d9 !important;
color: #fff !important;
}
.popup-menu-item:insensitive {
color: #888;
}
.popup-separator-menu-item {
-gradient-height: 1px;
-gradient-start: rgba(0,0,0,0.0);
-gradient-end: rgba(0,0,0,0.15);
-margin-horizontal: 24px;
height: 1px;
padding: 8px 0px;
}
.popup-slider-menu-item {
-slider-handle-border-color: #888;
-slider-handle-border-width: 1px;
}
.popup-menu-item:hover .popup-slider-menu-item {
color: #fff;
}
.popup-subtitle-menu-item, .popup-subtitle-menu-item:insensitive {
color: #000;
}
.popup-submenu-menu-item:open {
background-color: #888;
color: #fff;
}
.popup-sub-menu {
background-gradient-start: #ddd;
background-gradient-end: #dfdfdf;
background-gradient-direction: vertical;
box-shadow: inset 0px 1px 3px rgba(0,0,0,0.4);
}
/* SCROLLBARS for POPUP MENU */
.popup-menu StScrollBar StBin#trough {
background-color: transparent;
}
.popup-menu StScrollBar StButton#vhandle, .popup-menu StScrollBar StButton#hhandle {
border-color: #e9e9e9;
background-color: #888;
}
.popup-menu StScrollBar StButton#vhandle:hover,
.popup-menu StScrollBar StButton#hhandle:hover {
background-color: #666;
}
.popup-menu StScrollBar StButton#vhandle:active,
.popup-menu StScrollBar StButton#hhandle:active {
background-color: #4a90d9;
}
/* CALENDAR */
.calendar {}
.calendar-month-label {
color: #333 !important;
}
.datemenu-date-label,
.events-day-header {
color: #666 !important;
}
.calendar-day-base:active {
color: #fff !important;
background-color: #4a90d9 !important;
background-image: none !important;
border-image: none !important;
}
.calendar-today {
background-color: #4a90d9 !important;
background-image: none !important;
border-image: none !important;
}
.calendar-day-base {
color: #666 !important;
}
.calendar-day-base:hover {
background-color: #666 !important;
color: #fff !important;
}
.calendar-nonwork-day {
color: #999 !important;
}
.events-day-dayname,
.events-day-time {
color: #666 !important;
}
/* VOLUME SLIDER */
.popup-slider-menu-item {
-slider-background-color: #e9e9e9;
-slider-border-color: #999;
-slider-active-background-color: #76b0ec;
-slider-active-border-color: #1f6dbc;
}
/* ON OFF switch */
.toggle-switch-us {
background-image: url("classic-toggle-off-us.svg");
background-size: contain;
}
.toggle-switch-us:checked {
background-image: url("classic-toggle-on-us.svg");
background-size: contain;
}
.toggle-switch-intl {
background-image: url("classic-toggle-off-intl.svg");
background-size: contain;
}
.toggle-switch-intl:checked {
background-image: url("classic-toggle-on-intl.svg");
background-size: contain;
}

View File

@@ -0,0 +1,7 @@
[Desktop Entry]
_Name=GNOME Classic
_Comment=This session logs you into GNOME Classic
Exec=gnome-session --session gnome-classic
TryExec=gnome-session
Icon=
Type=Application

View File

@@ -0,0 +1,3 @@
[GNOME Session]
_Name=GNOME Classic
RequiredComponents=gnome-shell-classic;gnome-settings-daemon;nautilus-classic;

View File

@@ -0,0 +1,17 @@
[Desktop Entry]
Type=Application
_Name=GNOME Shell Classic
_Comment=Window management and application launching
Exec=@bindir@/gnome-shell --mode=classic
TryExec=@bindir@/gnome-shell
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gnome-shell
X-GNOME-Bugzilla-Component=general
X-GNOME-Bugzilla-Version=@VERSION@
Categories=GNOME;GTK;Core;
OnlyShowIn=GNOME;
NoDisplay=true
X-GNOME-Autostart-Phase=WindowManager
X-GNOME-Provides=panel;windowmanager;
X-GNOME-Autostart-Notify=true
X-GNOME-AutoRestart=false

View File

@@ -0,0 +1,38 @@
<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="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>

View File

@@ -1,13 +1,18 @@
include $(top_srcdir)/include.mk
dist_extension_DATA = extension.js stylesheet.css
dist_extension_DATA = extension.js stylesheet.css $(EXTRA_MODULES)
nodist_extension_DATA = metadata.json $(top_srcdir)/lib/convenience.js $(EXTRA_EXTENSION)
EXTRA_DIST = metadata.json.in
metadata.json: metadata.json.in $(top_builddir)/config.status
$(AM_V_GEN) sed -e "s|[@]uuid@|$(uuid)|" \
-e "s|[@]shell_current@|$(PACKAGE_VERSION)|" \
-e "s|[@]url@|$(extensionurl)|" $< > $@
$(AM_V_GEN) sed \
-e "s|[@]extension_id@|$(EXTENSION_ID)|" \
-e "s|[@]uuid@|$(uuid)|" \
-e "s|[@]gschemaname@|$(gschemaname)|" \
-e "s|[@]gettext_domain@|$(GETTEXT_PACKAGE)|" \
-e "s|[@]shell_current@|$(SHELL_VERSION)|" \
-e "s|[@]url@|$(extensionurl)|" \
$< > $@
CLEANFILES = metadata.json

View File

@@ -1,14 +1,5 @@
EXTENSION_ID = alternate-tab
EXTRA_MODULES = prefs.js
include ../../extension.mk
gschemas_in = $(gschemabase).alternate-tab.gschema.xml.in
@INTLTOOL_XML_NOMERGE_RULE@
gsettings_SCHEMAS = $(gschemas_in:.xml.in=.xml)
@GSETTINGS_RULES@
CLEANFILES += $(gschemas_in:.xml.in=.valid) $(gsettings_SCHEMAS)
EXTRA_DIST += $(gschemas_in)

View File

@@ -1,631 +1,66 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
/* most of the code is borrowed from
* > js/ui/altTab.js <
* of the gnome-shell source code
*/
/* -*- mode: js; js-basic-offset: 4; indent-tabs-mode: nil -*- */
const Clutter = imports.gi.Clutter;
const Gdk = imports.gi.Gdk;
const Gio = imports.gi.Gio;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const AltTab = imports.ui.altTab;
const Main = imports.ui.main;
const ModalDialog = imports.ui.modalDialog;
const Tweener = imports.ui.tweener;
const WindowManager = imports.ui.windowManager;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const N_ = function(e) { return e };
let settings;
const POPUP_DELAY_TIMEOUT = 150; // milliseconds
const SETTINGS_SCHEMA = 'org.gnome.shell.extensions.alternate-tab';
const SETTINGS_BEHAVIOUR_KEY = 'behaviour';
const SETTINGS_FIRST_TIME_KEY = 'first-time';
const MODES = {
all_thumbnails: function(display, binding, mask, window, backwards) {
let tabPopup = new AltTabPopup2();
if (!tabPopup.show(backwards, binding, mask))
tabPopup.destroy();
},
workspace_icons: function(display, binding, mask, window, backwards) {
if (Main.wm._workspaceSwitcherPopup)
Main.wm._workspaceSwitcherPopup.actor.hide();
let tabPopup = new AltTabPopupW();
if (!tabPopup.show(backwards, binding, mask))
tabPopup.destroy();
}
};
const MESSAGE = N_("This is the first time you use the Alternate Tab extension. \n\
Please choose your preferred behaviour:\n\
\n\
All & Thumbnails:\n\
This mode presents all applications from all workspaces in one selection \n\
list. Instead of using the application icon of every window, it uses small \n\
thumbnails resembling the window itself. \n\
\n\
Workspace & Icons:\n\
This mode let's you switch between the applications of your current \n\
workspace and gives you additionally the option to switch to the last used \n\
application of your previous workspace. This is always the last symbol in \n\
the list and is segregated by a separator/vertical line if available. \n\
Every window is represented by its application icon. \n\
\n\
If you whish to revert to the default behavior for the Alt-Tab switcher, just\n\
disable the extension from extensions.gnome.org or the Advanced Settings application.\
");
function AltTabPopupW() {
this._init();
}
AltTabPopupW.prototype = {
__proto__ : AltTab.AltTabPopup.prototype,
_windowActivated : function(thumbnailList, n) { },
show : function(backward, binding, mask) {
let appSys = Shell.AppSystem.get_default();
let apps = appSys.get_running ();
if (!apps.length)
return false;
if (!Main.pushModal(this.actor)) {
// Probably someone else has a pointer grab, try again with keyboard only
if (!Main.pushModal(this.actor, global.get_current_time(), Meta.ModalOptions.POINTER_ALREADY_GRABBED)) {
return false;
}
}
this._haveModal = true;
this._modifierMask = AltTab.primaryModifier(mask);
this.actor.connect('key-press-event', Lang.bind(this, this._keyPressEvent));
this.actor.connect('key-release-event', Lang.bind(this, this._keyReleaseEvent));
this.actor.connect('button-press-event', Lang.bind(this, this._clickedOutside));
this.actor.connect('scroll-event', Lang.bind(this, this._onScroll));
this._appSwitcher = new WindowSwitcher(apps, this);
this.actor.add_actor(this._appSwitcher.actor);
this._appSwitcher.connect('item-activated', Lang.bind(this, this._appActivated));
this._appSwitcher.connect('item-entered', Lang.bind(this, this._appEntered));
this._appIcons = this._appSwitcher.icons;
// Need to force an allocation so we can figure out whether we
// need to scroll when selecting
this.actor.opacity = 0;
this.actor.show();
this.actor.get_allocation_box();
// Make the initial selection
if (binding == 'switch_group') {
//see AltTab.AltTabPopup.show function
//cached windows are always of length one, so select first app and the window
//the direction doesn't matter, so ignore backward
this._select(0, 0);
} else if (binding == 'switch_group_backward') {
this._select(0, 0);
} else if (binding == 'switch_windows_backward') {
this._select(this._appIcons.length - 1);
} else if (this._appIcons.length == 1) {
this._select(0);
} else if (backward) {
this._select(this._appIcons.length - 1);
} else {
this._select(1);
}
// There's a race condition; if the user released Alt before
// we got the grab, then we won't be notified. (See
// https://bugzilla.gnome.org/show_bug.cgi?id=596695 for
// details.) So we check now. (Have to do this after updating
// selection.)
let [x, y, mods] = global.get_pointer();
if (!(mods & this._modifierMask)) {
this._finish();
return false;
}
// We delay showing the popup so that fast Alt+Tab users aren't
// disturbed by the popup briefly flashing.
this._initialDelayTimeoutId = Mainloop.timeout_add(POPUP_DELAY_TIMEOUT,
Lang.bind(this, function () {
this.actor.opacity = 255;
this._initialDelayTimeoutId = 0;
}));
return true;
},
_finish : function() {
let app = this._appIcons[this._currentApp];
if (!app)
return;
Main.activateWindow(app.cachedWindows[0]);
this.destroy();
}
};
function AppIcon(app, window) {
this._init(app, window);
}
AppIcon.prototype = {
__proto__ : AltTab.AppIcon.prototype,
_init: function(app, window) {
this.app = app;
this.cachedWindows = [];
this.cachedWindows.push(window);
this.actor = new St.BoxLayout({ style_class: 'alt-tab-app',
vertical: true });
this.icon = null;
this._iconBin = new St.Bin({ x_fill: true, y_fill: true });
this.actor.add(this._iconBin, { x_fill: false, y_fill: false } );
let title = window.get_title();
if (title) {
this.label = new St.Label({ text: title });
let bin = new St.Bin({ x_align: St.Align.MIDDLE });
bin.add_actor(this.label);
this.actor.add(bin);
}
else {
this.label = new St.Label({ text: this.app.get_name() });
this.actor.add(this.label, { x_fill: false });
}
}
};
function WindowSwitcher(apps, altTabPopup) {
this._init(apps, altTabPopup);
}
WindowSwitcher.prototype = {
__proto__ : AltTab.AppSwitcher.prototype,
_init : function(apps, altTabPopup) {
AltTab.SwitcherList.prototype._init.call(this, true);
// Construct the AppIcons, sort by time, add to the popup
let activeWorkspace = global.screen.get_active_workspace();
let workspaceIcons = [];
let otherIcons = [];
for (let i = 0; i < apps.length; i++) {
// Cache the window list now; we don't handle dynamic changes here,
// and we don't want to be continually retrieving it
let windows = apps[i].get_windows();
for(let j = 0; j < windows.length; j++) {
let appIcon = new AppIcon(apps[i], windows[j]);
if (this._isWindowOnWorkspace(windows[j], activeWorkspace)) {
workspaceIcons.push(appIcon);
}
else {
otherIcons.push(appIcon);
}
}
}
workspaceIcons.sort(Lang.bind(this, this._sortAppIcon));
otherIcons.sort(Lang.bind(this, this._sortAppIcon));
if(otherIcons.length > 0) {
let mostRecentOtherIcon = otherIcons[0];
otherIcons = [];
otherIcons.push(mostRecentOtherIcon);
}
this.icons = [];
this._arrows = [];
for (let i = 0; i < workspaceIcons.length; i++)
this._addIcon(workspaceIcons[i]);
if (workspaceIcons.length > 0 && otherIcons.length > 0)
this.addSeparator();
for (let i = 0; i < otherIcons.length; i++)
this._addIcon(otherIcons[i]);
this._curApp = -1;
this._iconSize = 0;
this._altTabPopup = altTabPopup;
this._mouseTimeOutId = 0;
},
_isWindowOnWorkspace: function(w, workspace) {
if (w.get_workspace() == workspace)
return true;
return false;
},
_sortAppIcon : function(appIcon1, appIcon2) {
let t1 = appIcon1.cachedWindows[0].get_user_time();
let t2 = appIcon2.cachedWindows[0].get_user_time();
if (t2 > t1) return 1;
else return -1;
}
};
function AltTabSettingsDialog() {
this._init();
}
AltTabSettingsDialog.prototype = {
__proto__: ModalDialog.ModalDialog.prototype,
_init : function() {
ModalDialog.ModalDialog.prototype._init.call(this, { styleClass: null });
let mainContentBox = new St.BoxLayout({ style_class: 'polkit-dialog-main-layout',
vertical: false });
this.contentLayout.add(mainContentBox,
{ x_fill: true,
y_fill: true });
let messageBox = new St.BoxLayout({ style_class: 'polkit-dialog-message-layout',
vertical: true });
mainContentBox.add(messageBox,
{ y_align: St.Align.START });
this._subjectLabel = new St.Label({ style_class: 'polkit-dialog-headline',
text: _("Alt Tab Behaviour") });
messageBox.add(this._subjectLabel,
{ y_fill: false,
y_align: St.Align.START });
this._descriptionLabel = new St.Label({ style_class: 'polkit-dialog-description',
text: Gettext.gettext(MESSAGE) });
messageBox.add(this._descriptionLabel,
{ y_fill: true,
y_align: St.Align.START });
this.setButtons([
{
label: _("All & Thumbnails"),
action: Lang.bind(this, function() {
this.setBehaviour('all_thumbnails');
this.close();
})
},
{
label: _("Workspace & Icons"),
action: Lang.bind(this, function() {
this.setBehaviour('workspace_icons');
this.close();
})
},
{
label: _("Cancel"),
action: Lang.bind(this, function() {
this.close();
}),
key: Clutter.Escape
}
]);
},
setBehaviour: function(behaviour) {
settings.set_string(SETTINGS_BEHAVIOUR_KEY, behaviour);
settings.set_boolean(SETTINGS_FIRST_TIME_KEY, false);
}
};
function AltTabPopup2() {
this._init();
}
AltTabPopup2.prototype = {
__proto__ : AltTab.AltTabPopup.prototype,
_init : function() {
this.actor = new Shell.GenericContainer({ name: 'altTabPopup',
reactive: true });
this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
this.actor.connect('allocate', Lang.bind(this, this._allocate));
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._haveModal = false;
this._currentApp = 0;
this._currentWindow = -1;
this._thumbnailTimeoutId = 0;
this._motionTimeoutId = 0;
// Initially disable hover so we ignore the enter-event if
// the switcher appears underneath the current pointer location
this._disableHover();
//this.show();
Main.uiGroup.add_actor(this.actor);
//this._select(0);
},
show : function(backward, binding, mask) {
let windows = global.get_window_actors();
let list = '';
let normal_windows= [];
let appIcons = [];
let appSys = Shell.AppSystem.get_default();
let apps = appSys.get_running();
for (let w = windows.length-1; w >= 0; w--) {
let win = windows[w].get_meta_window();
normal_windows.push(win);
}
normal_windows.sort(Lang.bind(this, this._sortWindows));
let win_on_top = normal_windows.shift();
normal_windows.push(win_on_top);
windows = normal_windows;
for (let w = 0; w < windows.length; w++) {
let win = windows[w];
let ap1 = null;
for (let i = 0;i < apps.length; i++) {
let app_wins = apps[i].get_windows();
for (let j = 0;j < app_wins.length; j++) {
if (app_wins[j] == win)
ap1 = new AltTab.AppIcon(apps[i]);
}
}
if (ap1 != null) {
ap1.cachedWindows = [win];
appIcons.push(ap1);
}
}
if (!windows.length) {
this.destroy();
return false;
}
if (!Main.pushModal(this.actor)) {
// Probably someone else has a pointer grab, try again with keyboard only
if (!Main.pushModal(this.actor, global.get_current_time(), Meta.ModalOptions.POINTER_ALREADY_GRABBED)) {
return false;
}
}
this._haveModal = true;
this._modifierMask = AltTab.primaryModifier(mask);
this.actor.connect('key-press-event', Lang.bind(this, this._keyPressEvent));
this.actor.connect('key-release-event', Lang.bind(this, this._keyReleaseEvent));
this.actor.connect('button-press-event', Lang.bind(this, this._clickedOutside));
this.actor.connect('scroll-event', Lang.bind(this, this._onScroll));
this._appSwitcher = new WindowList(windows);
this._appSwitcher._altTabPopup=this;
this.actor.add_actor(this._appSwitcher.actor);
this._appSwitcher.connect('item-activated', Lang.bind(this, this._appActivated));
this._appSwitcher.connect('item-entered', Lang.bind(this, this._appEntered));
this._appIcons = appIcons;
// make the initial selection
if (backward)
this._select(windows.length - 2);
else
this._select(0);
this.actor.opacity = 0;
this.actor.show();
// There's a race condition; if the user released Alt before
// we got the grab, then we won't be notified. (See
// https://bugzilla.gnome.org/show_bug.cgi?id=596695 for
// details.) So we check now. (Have to do this after updating
// selection.)
let [x, y, mods] = global.get_pointer();
if (!(mods & this._modifierMask)) {
this._finish();
return false;
}
// We delay showing the popup so that fast Alt+Tab users aren't
// disturbed by the popup briefly flashing.
this._initialDelayTimeoutId = Mainloop.timeout_add(AltTab.POPUP_DELAY_TIMEOUT,
Lang.bind(this, function () {
this.actor.opacity = 255;
this._initialDelayTimeoutId = 0;
}));
return true
},
/*
_keyPressEvent : function(actor, event) {
let keysym = event.get_key_symbol();
let shift = (Shell.get_event_state(event) & Clutter.ModifierType.SHIFT_MASK);
// X allows servers to represent Shift+Tab in two different ways
if (shift && keysym == Clutter.Tab)
keysym = Clutter.ISO_Left_Tab;
this._disableHover();
if (keysym == Clutter.grave)
this._select(this._currentApp, this._nextWindow());
else if (keysym == Clutter.asciitilde)
this._select(this._currentApp, this._previousWindow());
else if (keysym == Clutter.Escape)
this.destroy();
else if (this._thumbnailsFocused) {
if (keysym == Clutter.Tab) {
if (this._currentWindow == this._appIcons[this._currentApp].cachedWindows.length - 1)
this._select(this._nextApp());
else
this._select(this._currentApp, this._nextWindow());
} else if (keysym == Clutter.ISO_Left_Tab) {
if (this._currentWindow == 0 || this._currentWindow == -1)
this._select(this._previousApp());
else
this._select(this._currentApp, this._previousWindow());
} else if (keysym == Clutter.Left)
this._select(this._currentApp, this._previousWindow());
else if (keysym == Clutter.Right)
this._select(this._currentApp, this._nextWindow());
else if (keysym == Clutter.Up)
this._select(this._currentApp, null, true);
} else {
if (keysym == Clutter.Tab)
this._select(this._nextApp());
else if (keysym == Clutter.ISO_Left_Tab)
this._select(this._previousApp());
else if (keysym == Clutter.Left)
this._select(this._previousApp());
else if (keysym == Clutter.Right)
this._select(this._nextApp());
}
return true;
},
*/
_sortWindows : function(win1,win2) {
let t1 = win1.get_user_time();
let t2 = win2.get_user_time();
if (t2 > t1) return 1;
else return -1;
},
_appActivated : function(thumbnailList, n) {
let appIcon = this._appIcons[this._currentApp];
Main.activateWindow(appIcon.cachedWindows[0]);
this.destroy();
},
_finish : function() {
let app = this._appIcons[this._currentApp];
Main.activateWindow(app.cachedWindows[0]);
this.destroy();
},
};
function WindowList(windows) {
this._init(windows);
}
WindowList.prototype = {
__proto__ : AltTab.SwitcherList.prototype,
_init : function(windows) {
AltTab.SwitcherList.prototype._init.call(this, true);
let activeWorkspace = global.screen.get_active_workspace();
this._labels = new Array();
this._thumbnailBins = new Array();
this._clones = new Array();
this._windows = windows;
this._arrows = new Array();
this.icons = new Array();
for (let w = 0; w < windows.length; w++) {
let arrow = new St.DrawingArea({ style_class: 'switcher-arrow' });
arrow.connect('repaint', Lang.bind(this, function (area) {
Shell.draw_box_pointer(area, Shell.PointerDirection.DOWN);
}));
this._list.add_actor(arrow);
this._arrows.push(arrow);
arrow.hide();
let win=windows[w];
let appSys = Shell.AppSystem.get_default();
let apps = appSys.get_running();
let ap1 = null;
for (let i = 0; i < apps.length; i++) {
let app_wins = apps[i].get_windows();
for (let j = 0; j < app_wins.length; j++) {
if (app_wins[j] == win) {
ap1 = new AltTab.AppIcon(apps[i]);
let mutterWindow = win.get_compositor_private();
let windowTexture = mutterWindow.get_texture ();
let [width, height] = windowTexture.get_size();
let scale = Math.min(1.0, 128 / width, 128 / height);
let clone = new Clutter.Clone ({ source: windowTexture, reactive: true, width: width * scale, height: height * scale });
ap1.icon = ap1.app.create_icon_texture(128);
ap1._iconBin.set_size(128,128);
ap1._iconBin.child = clone;
ap1.label.text = win.get_title();
}
}
}
if (ap1 != null) {
ap1.cachedWindows = [win];
this.addItem(ap1.actor, ap1.label);
this.icons.push(ap1);
}
}
},
addSeparator: function () {
this._separator=null;
}
};
let injections = {};
function init(metadata) {
let me = imports.ui.extensionSystem.extensions[metadata.uuid];
me.convenience.initTranslations(metadata);
settings = me.convenience.getSettings(metadata, 'alternate-tab');
}
function doAltTab(display, screen, window, binding) {
if(settings.get_boolean(SETTINGS_FIRST_TIME_KEY)) {
new AltTabSettingsDialog().open();
} else {
let behaviour = settings.get_string(SETTINGS_BEHAVIOUR_KEY);
if(behaviour in MODES) {
let modifiers = binding.get_modifiers()
let backwards = modifiers & Meta.VirtualModifier.SHIFT_MASK;
MODES[behaviour](display, binding.get_name(), binding.get_mask(), window, backwards);
}
}
function setKeybinding(name, func) {
Main.wm.setCustomKeybindingHandler(name, Shell.KeyBindingMode.NORMAL, func);
}
function enable() {
Meta.keybindings_set_custom_handler('switch-windows', doAltTab);
Meta.keybindings_set_custom_handler('switch-group', doAltTab);
Meta.keybindings_set_custom_handler('switch-windows-backward', doAltTab);
Meta.keybindings_set_custom_handler('switch-group-backward', doAltTab);
injections['_initialSelection'] = AltTab.WindowSwitcherPopup.prototype._initialSelection;
AltTab.WindowSwitcherPopup.prototype._initialSelection = function(backward, binding) {
if (binding == 'switch-windows-backward' ||
binding == 'switch-applications-backward' ||
binding == 'switch-group-backward' || backward)
this._select(this._items.length - 1);
else if (this._items.length == 1)
this._select(0);
else
this._select(1);
};
injections['_keyPressHandler'] = AltTab.WindowSwitcherPopup.prototype._keyPressHandler;
AltTab.WindowSwitcherPopup.prototype._keyPressHandler = function(keysym, backwards, action) {
if (action == Meta.KeyBindingAction.SWITCH_WINDOWS ||
action == Meta.KeyBindingAction.SWITCH_APPLICATIONS ||
action == Meta.KeyBindingAction.SWITCH_GROUP) {
this._select(backwards ? this._previous() : this._next());
} else if (action == Meta.KeyBindingAction.SWITCH_WINDOWS_BACKWARD ||
action == Meta.KeyBindingAction.SWITCH_APPLICATIONS_BACKWARD ||
action == Meta.KeyBindingAction.SWITCH_GROUP_BACKWARD) {
this._select(this._previous());
} else {
if (keysym == Clutter.Left)
this._select(this._previous());
else if (keysym == Clutter.Right)
this._select(this._next());
}
};
setKeybinding('switch-applications', Lang.bind(Main.wm, Main.wm._startWindowSwitcher));
setKeybinding('switch-group', Lang.bind(Main.wm, Main.wm._startWindowSwitcher));
setKeybinding('switch-applications-backward', Lang.bind(Main.wm, Main.wm._startWindowSwitcher));
setKeybinding('switch-group-backward', Lang.bind(Main.wm, Main.wm._startWindowSwitcher));
}
function disable() {
Meta.keybindings_set_custom_handler('switch-windows', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
Meta.keybindings_set_custom_handler('switch-group', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
Meta.keybindings_set_custom_handler('switch-windows-backward', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
Meta.keybindings_set_custom_handler('switch-group-backward', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
var prop;
setKeybinding('switch-applications', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
setKeybinding('switch-group', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
setKeybinding('switch-applications-backward', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
setKeybinding('switch-group-backward', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
for (prop in injections)
AltTab.WindowSwitcherPopup.prototype[prop] = injections[prop];
}

View File

@@ -1,7 +1,10 @@
{
"extension-id": "@extension_id@",
"uuid": "@uuid@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "AlternateTab",
"description": "A replacement for Alt-Tab, allows to cycle between windows and does not group by application",
"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 Bugzilla instead.",
"original-authors": [ "jw@bargsten.org", "thomas.bouffon@gmail.com" ],
"shell-version": [ "@shell_current@" ],
"url": "@url@"

View File

@@ -1,18 +0,0 @@
<schemalist gettext-domain="gnome-shell-extensions">
<enum id="org.gnome.shell.extensions.alternate-tab.BehaviourMode">
<value value="1" nick="all_thumbnails"/>
<value value="2" nick="workspace_icons"/>
</enum>
<schema id="org.gnome.shell.extensions.alternate-tab" path="/org/gnome/shell/extensions/alternate-tab/">
<key name="behaviour" enum="org.gnome.shell.extensions.alternate-tab.BehaviourMode">
<default>'all_thumbnails'</default>
<_summary>The alt tab behaviour.</_summary>
<_description>Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and workspace_icons.</_description>
</key>
<key type="b" name="first-time">
<default>true</default>
<_summary>Indicates if Alternate Tab is newly installed</_summary>
<_description>Ask the user for a default behaviour if true.</_description>
</key>
</schema>
</schemalist>

View File

@@ -0,0 +1,78 @@
/* -*- 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 Lang = imports.lang;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const N_ = function(e) { return 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 = new GObject.Class({
Name: 'AlternateTab.Prefs.AltTabSettingsWidget',
GTypeName: 'AltTabSettingsWidget',
Extends: Gtk.Grid,
_init : function(params) {
this.parent(params);
this.margin = 10;
this.orientation = Gtk.Orientation.VERTICAL;
this._settings = new Gio.Settings({ schema: 'org.gnome.shell.window-switcher' });
let presentLabel = _("Present windows as");
this.add(new Gtk.Label({ label: presentLabel, sensitive: true,
margin_bottom: 10, margin_top: 5 }));
let top = 1;
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', Lang.bind(this, function(widget) {
if (widget.active)
this._settings.set_string(SETTINGS_APP_ICON_MODE, modeCapture);
}));
this.add(radio);
if (mode == currentMode)
radio.active = true;
top += 1;
}
let check = new Gtk.CheckButton({ label: _("Show only windows in the current workspace"),
margin_top: 12 });
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;
}

View File

@@ -1,3 +0,0 @@
EXTENSION_ID = alternative-status-menu
include ../../extension.mk

View File

@@ -1,126 +0,0 @@
/* -*- mode: js2 - indent-tabs-mode: nil - js2-basic-offset: 4 -*- */
const Lang = imports.lang;
const St = imports.gi.St;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
let suspend_item = null;
let hibernate_item = null;
let poweroff_item = null;
let suspend_signal_id = 0, hibernate_signal_id = 0;
function updateSuspend(object, pspec, item) {
item.actor.visible = object.get_can_suspend();
}
function updateHibernate(object, pspec, item) {
item.actor.visible = object.get_can_hibernate();
}
function onSuspendActivate(item) {
Main.overview.hide();
this._screenSaverProxy.LockRemote(Lang.bind(this, function() {
this._upClient.suspend_sync(null);
}));
}
function onHibernateActivate(item) {
Main.overview.hide();
this._screenSaverProxy.LockRemote(Lang.bind(this, function() {
this._upClient.hibernate_sync(null);
}));
}
function createSubMenu() {
}
// Put your extension initialization code here
function init(metadata) {
let me = imports.ui.extensionSystem.extensions[metadata.uuid];
me.convenience.initTranslations(metadata);
}
function resetMenu() {
}
function enable() {
let statusMenu = Main.panel._statusArea.userMenu;
let children = statusMenu.menu._getMenuItems();
let index = children.length;
/* find and destroy the old entry */
for (let i = children.length - 1; i >= 0; i--) {
if (children[i] == statusMenu._suspendOrPowerOffItem) {
children[i].destroy();
index = i;
break;
}
}
/* add the new entries */
suspend_item = new PopupMenu.PopupMenuItem(_("Suspend"));
suspend_item.connect('activate', Lang.bind(statusMenu, onSuspendActivate));
suspend_signal_id = statusMenu._upClient.connect('notify::can-suspend', Lang.bind(statusMenu, updateSuspend, suspend_item));
updateSuspend(statusMenu._upClient, null, suspend_item);
hibernate_item = new PopupMenu.PopupMenuItem(_("Hibernate"));
hibernate_item.connect('activate', Lang.bind(statusMenu, onHibernateActivate));
hibernate_signal_id = statusMenu._upClient.connect('notify::can-hibernate', Lang.bind(statusMenu, updateHibernate, hibernate_item));
updateHibernate(statusMenu._upClient, null, hibernate_item);
poweroff_item = new PopupMenu.PopupMenuItem(_("Power Off..."), { style_class: 'popup-alternating-menu-item' });
poweroff_item.actor.add_style_pseudo_class('alternate');
poweroff_item.connect('activate', Lang.bind(statusMenu, function() {
this._session.ShutdownRemote();
}));
/* insert the entries at the found position */
statusMenu.menu.addMenuItem(suspend_item, index);
statusMenu.menu.addMenuItem(hibernate_item, index + 1);
statusMenu.menu.addMenuItem(poweroff_item, index + 2);
// clear out this to avoid criticals (we don't mess with
// updateSuspendOrPowerOff)
statusMenu._suspendOrPowerOffItem = null;
}
function disable() {
let statusMenu = Main.panel._statusArea.userMenu;
let children = statusMenu.menu._getMenuItems();
let index = children.length;
/* find the index for the previously created suspend entry */
for (let i = children.length - 1; i >= 0; i--) {
if (children[i] == suspend_item) {
index = i;
break;
}
}
/* disconnect signals */
statusMenu._upClient.disconnect(suspend_signal_id);
statusMenu._upClient.disconnect(hibernate_signal_id);
suspend_signal_id = hibernate_signal_id = 0;
/* destroy the entries we had created */
suspend_item.destroy();
hibernate_item.destroy();
poweroff_item.destroy();
/* create a new suspend/poweroff entry */
/* empty strings are fine for the labels, since we immediately call updateSuspendOrPowerOff */
let item = new PopupMenu.PopupAlternatingMenuItem("", "");
/* restore the userMenu field */
statusMenu._suspendOrPowerOffItem = item;
statusMenu.menu.addMenuItem(item, index);
item.connect('activate', Lang.bind(statusMenu, statusMenu._onSuspendOrPowerOffActivate));
statusMenu._updateSuspendOrPowerOff();
}

View File

@@ -1,7 +0,0 @@
{
"uuid": "@uuid@",
"name": "Alternative Status Menu",
"description": "Replaces GNOME Shell Status Menu with one showing Suspend/Hibernate and Power Off as separate items",
"shell-version": [ "@shell_current@" ],
"url": "@url@"
}

View File

@@ -1,3 +0,0 @@
.popup-alternating-menu-item:alternate {
font-weight: normal !important;
}

View File

@@ -1,111 +1,605 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const Atk = imports.gi.Atk;
const GMenu = imports.gi.GMenu;
const Lang = imports.lang;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Clutter = imports.gi.Clutter;
const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const Gtk = imports.gi.Gtk;
const GLib = imports.gi.GLib;
const Signals = imports.signals;
const Layout = imports.ui.layout;
const Pango = imports.gi.Pango;
const ICON_SIZE = 28;
let appsys = Shell.AppSystem.get_default();
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
function AppMenuItem() {
this._init.apply(this, arguments);
}
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
AppMenuItem.prototype = {
__proto__: PopupMenu.PopupBaseMenuItem.prototype,
const appSys = Shell.AppSystem.get_default();
_init: function (app, params) {
PopupMenu.PopupBaseMenuItem.prototype._init.call(this, params);
const APPLICATION_ICON_SIZE = 32;
const HORIZ_FACTOR = 5;
const MENU_HEIGHT_OFFSET = 132;
const NAVIGATION_REGION_OVERSHOOT = 50;
this._app = app;
this.label = new St.Label({ text: app.get_name() });
this.addActor(this.label);
this._icon = app.create_icon_texture(ICON_SIZE);
this.addActor(this._icon, { expand: false });
const ActivitiesMenuItem = new Lang.Class({
Name: 'ActivitiesMenuItem',
Extends: PopupMenu.PopupBaseMenuItem,
_init: function(button) {
this.parent();
this._button = button;
this.addActor(new St.Label({ text: _("Activities Overview") }));
},
activate: function (event) {
this._app.activate_full(-1, event.get_time());
activate: function(event) {
this._button.menu.toggle();
Main.overview.toggle();
this.parent(event);
},
});
PopupMenu.PopupBaseMenuItem.prototype.activate.call(this, event);
const ApplicationMenuItem = new Lang.Class({
Name: 'ApplicationMenuItem',
Extends: PopupMenu.PopupBaseMenuItem,
_init: function(button, app) {
this.parent();
this._app = app;
this._button = button;
this._iconBin = new St.Bin();
this.addActor(this._iconBin);
let appLabel = new St.Label({ text: app.get_name() });
this.addActor(appLabel, { expand: true });
this.actor.label_actor = appLabel;
let textureCache = St.TextureCache.get_default();
let iconThemeChangedId = textureCache.connect('icon-theme-changed',
Lang.bind(this, this._updateIcon));
this.actor.connect('destroy', Lang.bind(this,
function() {
textureCache.disconnect(iconThemeChangedId);
}));
this._updateIcon();
},
activate: function(event) {
this._app.open_new_window(event.get_time());
this._button.selectCategory(null, null);
this._button.menu.toggle();
this.parent(event);
},
setActive: function(active, params) {
if (active)
this._button.scrollToButton(this);
this.parent(active, params);
},
_getPreferredWidth: function(actor, forHeight, alloc) {
alloc.min_size = alloc.natural_size = -1;
},
_updateIcon: function() {
this._iconBin.set_child(this._app.create_icon_texture(APPLICATION_ICON_SIZE));
}
});
};
const CategoryMenuItem = new Lang.Class({
Name: 'CategoryMenuItem',
Extends: PopupMenu.PopupBaseMenuItem,
function ApplicationsButton() {
this._init();
}
_init: function(button, category) {
this.parent();
this._category = category;
this._button = button;
ApplicationsButton.prototype = {
__proto__: PanelMenu.SystemStatusButton.prototype,
this._oldX = -1;
this._oldY = -1;
let name;
if (this._category)
name = this._category.get_name();
else
name = _("Favorites");
this.addActor(new St.Label({ text: name }));
this.actor.connect('motion-event', Lang.bind(this, this._onMotionEvent));
},
activate: function(event) {
this._button.selectCategory(this._category, this);
this._button.scrollToCatButton(this);
this.parent(event);
},
_isNavigatingSubmenu: function([x, y]) {
let [posX, posY] = this.actor.get_transformed_position();
if (this._oldX == -1) {
this._oldX = x;
this._oldY = y;
return true;
}
let deltaX = Math.abs(x - this._oldX);
let deltaY = Math.abs(y - this._oldY);
this._oldX = x;
this._oldY = y;
// If it lies outside the x-coordinates then it is definitely outside.
if (posX > x || posX + this.actor.width < x)
return false;
// If it lies inside the menu item then it is definitely inside.
if (posY <= y && posY + this.actor.height >= y)
return true;
// We want the keep-up triangle only if the movement is more
// horizontal than vertical.
if (deltaX * HORIZ_FACTOR < deltaY)
return false;
// Check whether the point lies inside triangle ABC, and a similar
// triangle on the other side of the menu item.
//
// +---------------------+
// | menu item |
// A +---------------------+ C
// P |
// B
// Ensure that the point P always lies below line AC so that we can
// only check for triangle ABC.
if (posY > y) {
let offset = posY - y;
y = posY + this.actor.height + offset;
}
// Ensure that A is (0, 0).
x -= posX;
y -= posY + this.actor.height;
// Check which side of line AB the point P lies on by taking the
// cross-product of AB and AP. See:
// http://stackoverflow.com/questions/3461453/determine-which-side-of-a-line-a-point-lies
if (((this.actor.width * y) - (NAVIGATION_REGION_OVERSHOOT * x)) <= 0)
return true;
return false;
},
_onMotionEvent: function(actor, event) {
if (!Clutter.get_pointer_grab()) {
this._oldX = -1;
this._oldY = -1;
Clutter.grab_pointer(this.actor);
}
this.actor.hover = true;
if (this._isNavigatingSubmenu(event.get_coords()))
return true;
this._oldX = -1;
this._oldY = -1;
this.actor.hover = false;
Clutter.ungrab_pointer();
return false;
},
setActive: function(active, params) {
if (active) {
this._button.selectCategory(this._category, this);
this._button.scrollToCatButton(this);
}
this.parent(active, params);
}
});
const HotCorner = new Lang.Class({
Name: 'HotCorner',
Extends: Layout.HotCorner,
_onCornerEntered : function() {
if (!this._entered) {
this._entered = true;
if (!Main.overview.animationInProgress) {
this._activationTime = Date.now() / 1000;
this.rippleAnimation();
Main.overview.toggle();
}
}
return false;
}
});
const ApplicationsMenu = new Lang.Class({
Name: 'ApplicationsMenu',
Extends: PopupMenu.PopupMenu,
_init: function(sourceActor, arrowAlignment, arrowSide, button) {
this.parent(sourceActor, arrowAlignment, arrowSide);
this._button = button;
},
open: function(animate) {
this._button.hotCorner.setBarrierSize(0);
if (this._button.hotCorner.actor) // fallback corner
this._button.hotCorner.actor.hide();
this.parent(animate);
},
close: function(animate) {
let size = Main.layoutManager.panelBox.height;
this._button.hotCorner.setBarrierSize(size);
if (this._button.hotCorner.actor) // fallback corner
this._button.hotCorner.actor.show();
this.parent(animate);
},
toggle: function() {
if (this.isOpen) {
this._button.selectCategory(null, null);
} else {
if (Main.overview.visible)
Main.overview.hide();
}
this.parent();
}
});
const ApplicationsButton = new Lang.Class({
Name: 'ApplicationsButton',
Extends: PanelMenu.Button,
_init: function() {
PanelMenu.SystemStatusButton.prototype._init.call(this, 'start-here');
this.parent(1.0, null, false);
this.setMenu(new ApplicationsMenu(this.actor, 1.0, St.Side.TOP, this));
Main.panel.menuManager.addMenu(this.menu);
// At this moment applications menu is not keyboard navigable at
// all (so not accessible), so it doesn't make sense to set as
// role ATK_ROLE_MENU like other elements of the panel.
this.actor.accessible_role = Atk.Role.LABEL;
this._label = new St.Label({ text: _("Applications") });
this.actor.add_actor(this._label);
this.actor.name = 'panelApplications';
this.actor.label_actor = this._label;
this.actor.connect('captured-event', Lang.bind(this, this._onCapturedEvent));
_showingId = Main.overview.connect('showing', Lang.bind(this, function() {
this.actor.add_accessible_state (Atk.StateType.CHECKED);
}));
_hidingId = Main.overview.connect('hiding', Lang.bind(this, function() {
this.actor.remove_accessible_state (Atk.StateType.CHECKED);
}));
this.reloadFlag = false;
this._createLayout();
this._display();
appsys.connect('installed-changed', Lang.bind(this, this.reDisplay));
_installedChangedId = appSys.connect('installed-changed', Lang.bind(this, function() {
if (this.menu.isOpen) {
this._redisplay();
this.mainBox.show();
} else {
this.reloadFlag = true;
}
}));
// Since the hot corner uses stage coordinates, Clutter won't
// queue relayouts for us when the panel moves. Queue a relayout
// when that happens.
_panelBoxChangedId = Main.layoutManager.connect('panel-box-changed', Lang.bind(this, function() {
container.queue_relayout();
}));
},
reDisplay : function() {
this._clearAll();
get hotCorner() {
return Main.layoutManager.hotCorners[Main.layoutManager.primaryIndex];
},
_createVertSeparator: function() {
let separator = new St.DrawingArea({ style_class: 'calendar-vertical-separator',
pseudo_class: 'highlighted' });
separator.connect('repaint', Lang.bind(this, this._onVertSepRepaint));
return separator;
},
_onCapturedEvent: function(actor, event) {
if (event.type() == Clutter.EventType.BUTTON_PRESS) {
if (!Main.overview.shouldToggleByCornerOrButton())
return true;
}
return false;
},
_onMenuKeyPress: function(actor, event) {
let symbol = event.get_key_symbol();
if (symbol == Clutter.KEY_Left || symbol == Clutter.KEY_Right) {
let direction = symbol == Clutter.KEY_Left ? Gtk.DirectionType.LEFT
: Gtk.DirectionType.RIGHT;
if (this.menu.actor.navigate_focus(global.stage.key_focus, direction, false))
return true;
}
return this.parent(actor, event);
},
_onVertSepRepaint: function(area) {
let cr = area.get_context();
let themeNode = area.get_theme_node();
let [width, height] = area.get_surface_size();
let stippleColor = themeNode.get_color('-stipple-color');
let stippleWidth = themeNode.get_length('-stipple-width');
let x = Math.floor(width/2) + 0.5;
cr.moveTo(x, 0);
cr.lineTo(x, height);
Clutter.cairo_set_source_color(cr, stippleColor);
cr.setDash([1, 3], 1); // Hard-code for now
cr.setLineWidth(stippleWidth);
cr.stroke();
},
_onOpenStateChanged: function(menu, open) {
if (open) {
if (this.reloadFlag) {
this._redisplay();
this.reloadFlag = false;
}
this.mainBox.show();
}
this.parent(menu, open);
},
_redisplay: function() {
this.applicationsBox.destroy_all_children();
this.categoriesBox.destroy_all_children();
this._display();
},
_clearAll : function() {
this.menu.removeAll();
},
// Recursively load a GMenuTreeDirectory; we could put this in ShellAppSystem too
// (taken from js/ui/appDisplay.js in core shell)
_loadCategory: function(dir, menu) {
var iter = dir.iter();
var nextType;
_loadCategory: function(categoryId, dir) {
let iter = dir.iter();
let nextType;
while ((nextType = iter.next()) != GMenu.TreeItemType.INVALID) {
if (nextType == GMenu.TreeItemType.ENTRY) {
var entry = iter.get_entry();
var app = appsys.lookup_app_by_tree_entry(entry);
if (!entry.get_app_info().get_nodisplay())
menu.addMenuItem(new AppMenuItem(app));
let entry = iter.get_entry();
if (!entry.get_app_info().get_nodisplay()) {
let app = appSys.lookup_app_by_tree_entry(entry);
let menu_id = dir.get_menu_id();
this.applicationsByCategory[categoryId].push(app);
}
} else if (nextType == GMenu.TreeItemType.DIRECTORY) {
this._loadCategory(iter.get_directory(), menu);
let subdir = iter.get_directory();
if (!subdir.get_is_nodisplay())
this._loadCategory(categoryId, subdir);
}
}
},
_display : function() {
let tree = appsys.get_tree();
let root = tree.get_root_directory();
scrollToButton: function(button) {
let appsScrollBoxAdj = this.applicationsScrollBox.get_vscroll_bar().get_adjustment();
let appsScrollBoxAlloc = this.applicationsScrollBox.get_allocation_box();
let currentScrollValue = appsScrollBoxAdj.get_value();
let boxHeight = appsScrollBoxAlloc.y2 - appsScrollBoxAlloc.y1;
let buttonAlloc = button.actor.get_allocation_box();
let newScrollValue = currentScrollValue;
if (currentScrollValue > buttonAlloc.y1 - 10)
newScrollValue = buttonAlloc.y1 - 10;
if (boxHeight + currentScrollValue < buttonAlloc.y2 + 10)
newScrollValue = buttonAlloc.y2 - boxHeight + 10;
if (newScrollValue != currentScrollValue)
appsScrollBoxAdj.set_value(newScrollValue);
},
scrollToCatButton: function(button) {
let catsScrollBoxAdj = this.categoriesScrollBox.get_vscroll_bar().get_adjustment();
let catsScrollBoxAlloc = this.categoriesScrollBox.get_allocation_box();
let currentScrollValue = catsScrollBoxAdj.get_value();
let boxHeight = catsScrollBoxAlloc.y2 - catsScrollBoxAlloc.y1;
let buttonAlloc = button.actor.get_allocation_box();
let newScrollValue = currentScrollValue;
if (currentScrollValue > buttonAlloc.y1 - 10)
newScrollValue = buttonAlloc.y1 - 10;
if (boxHeight + currentScrollValue < buttonAlloc.y2 + 10)
newScrollValue = buttonAlloc.y2 - boxHeight + 10;
if (newScrollValue != currentScrollValue)
catsScrollBoxAdj.set_value(newScrollValue);
},
_createLayout: function() {
let section = new PopupMenu.PopupMenuSection();
this.menu.addMenuItem(section);
this.mainBox = new St.BoxLayout({ vertical: false });
this.leftBox = new St.BoxLayout({ vertical: true });
this.applicationsScrollBox = new St.ScrollView({ x_fill: true, y_fill: false,
y_align: St.Align.START,
style_class: 'apps-menu vfade' });
this.applicationsScrollBox.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
let vscroll = this.applicationsScrollBox.get_vscroll_bar();
vscroll.connect('scroll-start', Lang.bind(this, function() {
this.menu.passEvents = true;
}));
vscroll.connect('scroll-stop', Lang.bind(this, function() {
this.menu.passEvents = false;
}));
this.categoriesScrollBox = new St.ScrollView({ x_fill: true, y_fill: false,
y_align: St.Align.START,
style_class: 'vfade' });
this.categoriesScrollBox.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
vscroll = this.categoriesScrollBox.get_vscroll_bar();
vscroll.connect('scroll-start', Lang.bind(this, function() {
this.menu.passEvents = true;
}));
vscroll.connect('scroll-stop', Lang.bind(this, function() {
this.menu.passEvents = false;
}));
this.leftBox.add(this.categoriesScrollBox, { expand: true,
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.applicationsScrollBox.add_actor(this.applicationsBox);
this.categoriesBox = new St.BoxLayout({ vertical: true });
this.categoriesScrollBox.add_actor(this.categoriesBox, { expand: true, x_fill: false });
this.mainBox.add(this.leftBox);
this.mainBox.add(this._createVertSeparator(), { expand: false, x_fill: false, y_fill: true});
this.mainBox.add(this.applicationsScrollBox, { expand: true, x_fill: true, y_fill: true });
section.actor.add_actor(this.mainBox);
},
_display: function() {
this._applicationsButtons = new Array();
this.mainBox.style=('width: 640px;');
this.mainBox.hide();
//Load categories
this.applicationsByCategory = {};
let tree = appSys.get_tree();
let root = tree.get_root_directory();
let categoryMenuItem = new CategoryMenuItem(this, null);
this.categoriesBox.add_actor(categoryMenuItem.actor);
let iter = root.iter();
let nextType;
while ((nextType = iter.next()) != GMenu.TreeItemType.INVALID) {
if (nextType == GMenu.TreeItemType.DIRECTORY) {
let dir = iter.get_directory();
let item = new PopupMenu.PopupSubMenuMenuItem(dir.get_name());
this._loadCategory(dir, item.menu);
this.menu.addMenuItem(item);
if (!dir.get_is_nodisplay()) {
let categoryId = dir.get_menu_id();
this.applicationsByCategory[categoryId] = [];
this._loadCategory(categoryId, dir);
if (this.applicationsByCategory[categoryId].length > 0) {
let categoryMenuItem = new CategoryMenuItem(this, dir);
this.categoriesBox.add_actor(categoryMenuItem.actor);
}
}
}
}
//Load applications
this._displayButtons(this._listApplications(null));
let height = this.categoriesBox.height + MENU_HEIGHT_OFFSET + 'px';
this.mainBox.style+=('height: ' + height);
},
_clearApplicationsBox: function(selectedActor) {
let actors = this.applicationsBox.get_children();
for (let i = 0; i < actors.length; i++) {
let actor = actors[i];
this.applicationsBox.remove_actor(actor);
}
},
selectCategory: function(dir, categoryMenuItem) {
if (categoryMenuItem)
this._clearApplicationsBox(categoryMenuItem.actor);
else
this._clearApplicationsBox(null);
if (dir)
this._displayButtons(this._listApplications(dir.get_menu_id()));
else
this._displayButtons(this._listApplications(null));
},
_displayButtons: function(apps) {
if (apps) {
for (let i = 0; i < apps.length; i++) {
let app = apps[i];
if (!this._applicationsButtons[app]) {
let applicationMenuItem = new ApplicationMenuItem(this, app);
this._applicationsButtons[app] = applicationMenuItem;
}
if (!this._applicationsButtons[app].actor.get_parent())
this.applicationsBox.add_actor(this._applicationsButtons[app].actor);
}
}
},
_listApplications: function(category_menu_id) {
let applist;
if (category_menu_id) {
applist = this.applicationsByCategory[category_menu_id];
} else {
applist = new Array();
let favorites = global.settings.get_strv('favorite-apps');
for (let i = 0; i < favorites.length; i++) {
let app = appSys.lookup_app(favorites[i]);
if (app)
applist.push(app);
}
}
applist.sort(function(a,b) {
return a.get_name().toLowerCase() > b.get_name().toLowerCase();
});
return applist;
},
destroy: function() {
this.menu.actor.get_children().forEach(function(c) { c.destroy() });
this.parent();
}
};
});
let appsMenuButton;
let activitiesButton;
let _hidingId;
let _installedChangedId;
let _panelBoxChangedId;
let _showingId;
function enable() {
activitiesButton = Main.panel.statusArea['activities'];
activitiesButton.container.hide();
appsMenuButton = new ApplicationsButton();
Main.panel._leftBox.insert_actor(appsMenuButton.actor, 1);
Main.panel._leftBox.child_set(appsMenuButton.actor, { y_fill : true } );
Main.panel._menus.addMenu(appsMenuButton.menu);
Main.panel.addToStatusArea('apps-menu', appsMenuButton, 1, 'left');
Main.wm.setCustomKeybindingHandler('panel-main-menu',
Shell.KeyBindingMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW,
function() {
appsMenuButton.menu.toggle();
});
}
function disable() {
Main.panel.menuManager.removeMenu(appsMenuButton.menu);
appSys.disconnect(_installedChangedId);
Main.layoutManager.disconnect(_panelBoxChangedId);
Main.overview.disconnect(_hidingId);
Main.overview.disconnect(_showingId);
appsMenuButton.destroy();
activitiesButton.container.show();
Main.wm.setCustomKeybindingHandler('panel-main-menu',
Shell.KeyBindingMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW,
Main.sessionMode.hasOverview ?
Lang.bind(Main.overview, Main.overview.toggle) :
null);
}
function init() {
/* do nothing */
function init(metadata) {
Convenience.initTranslations();
}

View File

@@ -1,7 +1,10 @@
{
"extension-id": "@extension_id@",
"uuid": "@uuid@",
"gettext-domain": "@gettext_domain@",
"name": "Applications Menu",
"description": "Add a gnome 2.x style menu for applications",
"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 Bugzilla instead.",
"original-authors": [ "e2002@bk.ru", "debarshir@gnome.org" ],
"shell-version": [ "@shell_current@" ],
"url": "@url@"
}

View File

@@ -1 +1,7 @@
/* none used*/
.apps-menu:ltr {
padding-right: 3px;
}
.apps-menu:rtl {
padding-left: 3px;
}

View File

@@ -1,14 +1,7 @@
EXTENSION_ID = auto-move-windows
EXTRA_MODULES = prefs.js
include ../../extension.mk
include ../../settings.mk
gschemas_in = $(gschemabase).auto-move-windows.gschema.xml.in
@INTLTOOL_XML_NOMERGE_RULE@
gsettings_SCHEMAS = $(gschemas_in:.xml.in=.xml)
@GSETTINGS_RULES@
CLEANFILES += $(gschemas_in:.xml.in=.valid) $(gsettings_SCHEMAS)
EXTRA_DIST += $(gschemas_in)

View File

@@ -11,16 +11,17 @@ const St = imports.gi.St;
const Main = imports.ui.main;
const SETTINGS_SCHEMA = 'org.gnome.shell.extensions.auto-move-windows';
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
const SETTINGS_KEY = 'application-list';
let settings;
function WindowMover() {
this._init();
}
const WindowMover = new Lang.Class({
Name: 'AutoMoveWindows.WindowMover',
WindowMover.prototype = {
_init: function() {
this._settings = settings;
this._windowTracker = Shell.WindowTracker.get_default();
@@ -76,86 +77,86 @@ WindowMover.prototype = {
}
}
}
}
});
let prevCheckWorkspaces;
let winMover;
function init(metadata) {
let me = imports.ui.extensionSystem.extensions[metadata.uuid];
me.convenience.initTranslations(metadata);
settings = me.convenience.getSettings(metadata, 'auto-move-windows');
function init() {
Convenience.initTranslations();
settings = Convenience.getSettings();
}
function myCheckWorkspaces() {
let i;
let emptyWorkspaces = new Array(Main._workspaces.length);
for (i = 0; i < Main._workspaces.length; i++) {
let lastRemoved = Main._workspaces[i]._lastRemovedWindow;
if (lastRemoved &&
(lastRemoved.get_window_type() == Meta.WindowType.SPLASHSCREEN ||
lastRemoved.get_window_type() == Meta.WindowType.DIALOG ||
lastRemoved.get_window_type() == Meta.WindowType.MODAL_DIALOG))
emptyWorkspaces[i] = false;
else
emptyWorkspaces[i] = true;
}
let windows = global.get_window_actors();
for (i = 0; i < windows.length; i++) {
let win = windows[i];
if (win.get_meta_window().is_on_all_workspaces())
continue;
let workspaceIndex = win.get_workspace();
emptyWorkspaces[workspaceIndex] = false;
}
// If we don't have an empty workspace at the end, add one
if (!emptyWorkspaces[emptyWorkspaces.length -1]) {
global.screen.append_new_workspace(false, global.get_current_time());
emptyWorkspaces.push(false);
}
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
let activeIsLast = activeWorkspaceIndex == global.screen.n_workspaces - 2;
let removingTrailWorkspaces = (emptyWorkspaces[activeWorkspaceIndex] &&
activeIsLast);
// Don't enter the overview when removing multiple empty workspaces at startup
let showOverview = (removingTrailWorkspaces &&
!emptyWorkspaces.every(function(x) { return x; }));
if (removingTrailWorkspaces) {
// "Merge" the empty workspace we are removing with the one at the end
Main.wm.blockAnimations();
}
// Delete other empty workspaces; do it from the end to avoid index changes
for (i = emptyWorkspaces.length - 2; i >= 0; i--) {
if (emptyWorkspaces[i])
global.screen.remove_workspace(Main._workspaces[i], global.get_current_time());
else
break;
}
if (removingTrailWorkspaces) {
global.screen.get_workspace_by_index(global.screen.n_workspaces - 1).activate(global.get_current_time());
Main.wm.unblockAnimations();
if (!Main.overview.visible && showOverview)
Main.overview.show();
}
Main._checkWorkspacesId = 0;
return false;
}
function enable() {
prevCheckWorkspaces = Main._checkWorkspaces;
Main._checkWorkspaces = function() {
let i;
let emptyWorkspaces = new Array(Main._workspaces.length);
for (i = 0; i < Main._workspaces.length; i++) {
let lastRemoved = Main._workspaces[i]._lastRemovedWindow;
if (lastRemoved &&
(lastRemoved.get_window_type() == Meta.WindowType.SPLASHSCREEN ||
lastRemoved.get_window_type() == Meta.WindowType.DIALOG ||
lastRemoved.get_window_type() == Meta.WindowType.MODAL_DIALOG))
emptyWorkspaces[i] = false;
else
emptyWorkspaces[i] = true;
}
let windows = global.get_window_actors();
for (i = 0; i < windows.length; i++) {
let win = windows[i];
if (win.get_meta_window().is_on_all_workspaces())
continue;
let workspaceIndex = win.get_workspace();
emptyWorkspaces[workspaceIndex] = false;
}
// If we don't have an empty workspace at the end, add one
if (!emptyWorkspaces[emptyWorkspaces.length -1]) {
global.screen.append_new_workspace(false, global.get_current_time());
emptyWorkspaces.push(false);
}
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
let activeIsLast = activeWorkspaceIndex == global.screen.n_workspaces - 2;
let removingTrailWorkspaces = (emptyWorkspaces[activeWorkspaceIndex] &&
activeIsLast);
// Don't enter the overview when removing multiple empty workspaces at startup
let showOverview = (removingTrailWorkspaces &&
!emptyWorkspaces.every(function(x) { return x; }));
if (removingTrailWorkspaces) {
// "Merge" the empty workspace we are removing with the one at the end
Main.wm.blockAnimations();
}
// Delete other empty workspaces; do it from the end to avoid index changes
for (i = emptyWorkspaces.length - 2; i >= 0; i--) {
if (emptyWorkspaces[i])
global.screen.remove_workspace(Main._workspaces[i], global.get_current_time());
else
break;
}
if (removingTrailWorkspaces) {
global.screen.get_workspace_by_index(global.screen.n_workspaces - 1).activate(global.get_current_time());
Main.wm.unblockAnimations();
if (!Main.overview.visible && showOverview)
Main.overview.show();
}
Main._checkWorkspacesId = 0;
return false;
};
if (Meta.prefs_get_dynamic_workspaces())
Main._checkWorkspaces = myCheckWorkspaces;
winMover = new WindowMover();
}

View File

@@ -1,7 +1,10 @@
{
"extension-id": "@extension_id@",
"uuid": "@uuid@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "Auto Move Windows",
"description": "Move applications to specific workspaces when they create windows",
"description": "Move applications to specific workspaces when they create windows.",
"shell-version": [ "@shell_current@" ],
"original-authors": [ "alessandro.crismani@gmail.com", "thomas.bouffon@gmail.com" ],
"url": "@url@"

View File

@@ -0,0 +1,260 @@
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
// Start apps on custom workspaces
const GdkPixbuf = imports.gi.GdkPixbuf;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const GObject = imports.gi.GObject;
const GMenu = imports.gi.GMenu;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const N_ = function(e) { return e };
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
const SETTINGS_KEY = 'application-list';
const WORKSPACE_MAX = 36; // compiled in limit of mutter
const Columns = {
APPINFO: 0,
DISPLAY_NAME: 1,
ICON: 2,
WORKSPACE: 3,
ADJUSTMENT: 4
};
const Widget = new GObject.Class({
Name: 'AutoMoveWindows.Prefs.Widget',
GTypeName: 'AutoMoveWindowsPrefsWidget',
Extends: Gtk.Grid,
_init: function(params) {
this.parent(params);
this.set_orientation(Gtk.Orientation.VERTICAL);
this._settings = Convenience.getSettings();
this._settings.connect('changed', Lang.bind(this, this._refresh));
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]);
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', Lang.bind(this, this._workspaceEdited));
workspaceColumn.pack_start(workspaceRenderer, true);
workspaceColumn.add_attribute(workspaceRenderer, "adjustment", Columns.ADJUSTMENT);
workspaceColumn.add_attribute(workspaceRenderer, "text", Columns.WORKSPACE);
this._treeView.append_column(workspaceColumn);
this.add(this._treeView);
let toolbar = new Gtk.Toolbar();
toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_INLINE_TOOLBAR);
this.add(toolbar);
let newButton = new Gtk.ToolButton({ stock_id: Gtk.STOCK_NEW,
label: _("Add rule"),
is_important: true });
newButton.connect('clicked', Lang.bind(this, this._createNew));
toolbar.add(newButton);
let delButton = new Gtk.ToolButton({ stock_id: Gtk.STOCK_DELETE });
delButton.connect('clicked', Lang.bind(this, this._deleteSelected));
toolbar.add(delButton);
this._changedPermitted = true;
this._refresh();
},
_createNew: function() {
let dialog = new Gtk.Dialog({ title: _("Create new matching rule"),
transient_for: this.get_toplevel(),
modal: true });
dialog.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL);
dialog.add_button(_("Add"), Gtk.ResponseType.OK);
dialog.set_default_response(Gtk.ResponseType.OK);
let grid = new Gtk.Grid({ column_spacing: 10,
row_spacing: 15,
margin: 10 });
dialog._appChooser = new Gtk.AppChooserWidget({ show_all: true });
grid.attach(dialog._appChooser, 0, 0, 2, 1);
grid.attach(new Gtk.Label({ label: _("Workspace") }),
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', Lang.bind(this, function(dialog, id) {
if (id != Gtk.ResponseType.OK) {
dialog.destroy();
return;
}
let appInfo = dialog._appChooser.get_app_info();
if (!appInfo)
return;
let index = Math.floor(dialog._spin.value);
if (isNaN(index) || index < 0)
index = 1;
this._changedPermitted = false;
if (!this._appendItem(appInfo.get_id(), index)) {
this._changedPermitted = true;
return;
}
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]);
this._changedPermitted = true;
dialog.destroy();
}));
dialog.show_all();
},
_deleteSelected: function() {
let [any, model, iter] = this._treeView.get_selection().get_selected();
if (any) {
let appInfo = this._store.get_value(iter, Columns.APPINFO);
this._changedPermitted = false;
this._removeItem(appInfo.get_id());
this._store.remove(iter);
this._changedPermitted = true;
}
},
_workspaceEdited: function(renderer, pathString, text) {
let index = parseInt(text);
if (isNaN(index) || index < 0)
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;
this._changeItem(appInfo.get_id(), index);
this._store.set_value(iter, Columns.WORKSPACE, index);
this._changedPermitted = true;
},
_refresh: function() {
if (!this._changedPermitted)
// Ignore this notification, model is being modified outside
return;
this._store.clear();
let currentItems = this._settings.get_strv(SETTINGS_KEY);
let validItems = [ ];
for (let i = 0; i < currentItems.length; i++) {
let [id, index] = currentItems[i].split(':');
let appInfo = Gio.DesktopAppInfo.new(id);
if (!appInfo)
continue;
validItems.push(currentItems[i]);
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(), parseInt(index), adj]);
}
if (validItems.length != currentItems.length) // some items were filtered out
this._settings.set_strv(SETTINGS_KEY, validItems);
},
_appendItem: function(id, workspace) {
let currentItems = this._settings.get_strv(SETTINGS_KEY);
let alreadyHave = currentItems.map(function(el) {
return el.split(':')[0];
}).indexOf(id) != -1;
if (alreadyHave) {
printerr("Already have an item for this id");
return false;
}
currentItems.push(id + ':' + workspace);
this._settings.set_strv(SETTINGS_KEY, currentItems);
return true;
},
_removeItem: function(id) {
let currentItems = this._settings.get_strv(SETTINGS_KEY);
let index = currentItems.map(function(el) {
return el.split(':')[0];
}).indexOf(id);
if (index < 0)
return;
currentItems.splice(index, 1);
this._settings.set_strv(SETTINGS_KEY, currentItems);
},
_changeItem: function(id, workspace) {
let currentItems = this._settings.get_strv(SETTINGS_KEY);
let index = currentItems.map(function(el) {
return 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() {
Convenience.initTranslations();
}
function buildPrefsWidget() {
let widget = new Widget();
widget.show_all();
return widget;
}

View File

@@ -1,946 +0,0 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const Clutter = imports.gi.Clutter;
const Pango = imports.gi.Pango;
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const Gtk = imports.gi.Gtk;
const Shell = imports.gi.Shell;
const Lang = imports.lang;
const Signals = imports.signals;
const St = imports.gi.St;
const Mainloop = imports.mainloop;
const AppFavorites = imports.ui.appFavorites;
const DND = imports.ui.dnd;
const Main = imports.ui.main;
const Overview = imports.ui.overview;
const PopupMenu = imports.ui.popupMenu;
const Search = imports.ui.search;
const Tweener = imports.ui.tweener;
const Workspace = imports.ui.workspace;
const AppDisplay = imports.ui.appDisplay;
const AltTab = imports.ui.altTab;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
// Settings
const DOCK_SETTINGS_SCHEMA = 'org.gnome.shell.extensions.dock';
const DOCK_POSITION_KEY = 'position';
const DOCK_SIZE_KEY = 'size';
const DOCK_HIDE_KEY = 'autohide';
const DOCK_EFFECTHIDE_KEY = 'hide-effect';
const DOCK_AUTOHIDE_ANIMATION_TIME_KEY = 'hide-effect-duration';
let _me, _metadata;
//hide
//const autohide_animation_time = 0.3;
// Keep enums in sync with GSettings schemas
const PositionMode = {
LEFT: 0,
RIGHT: 1
};
const AutoHideEffect = {
RESIZE: 0,
RESCALE: 1,
MOVE: 2
};
let position = PositionMode.RIGHT;
let dockicon_size = 48;
let hideable = true;
let hideDock = true;
let hideEffect = AutoHideEffect.RESIZE;
let autohide_animation_time = 0.3;
const DND_RAISE_APP_TIMEOUT = 500;
/*************************************************************************************/
/**** start resize's Dock functions *****************/
/*************************************************************************************/
function hideDock_size () {
if (hideable){
let monitor = Main.layoutManager.primaryMonitor
let position_x = monitor.x;
let height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
let width = this._item_size + 4*this._spacing;
Tweener.addTween(this,{
_item_size: 1,
time: autohide_animation_time,
transition: 'easeOutQuad',
onUpdate: function () {
height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
width = this._item_size + 4*this._spacing;
switch (position) {
case PositionMode.LEFT:
position_x=monitor.x-2*this._spacing;
break;
case PositionMode.RIGHT:
default:
position_x = monitor.x + (monitor.width-1-this._item_size-2*this._spacing);
}
this.actor.set_position (position_x,monitor.y+(monitor.height-height)/2);
this.actor.set_size(width,height);
},
});
hideDock=true;
}
}
function showDock_size () {
let monitor = Main.layoutManager.primaryMonitor;
let height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
let width = this._item_size + 4*this._spacing;
let position_x = monitor.x;
Tweener.addTween(this,{
_item_size: dockicon_size,
time: autohide_animation_time,
transition: 'easeOutQuad',
onUpdate: function () {
height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
width = this._item_size + 4*this._spacing;
switch (position) {
case PositionMode.LEFT:
position_x=monitor.x-2*this._spacing;
break;
case PositionMode.RIGHT:
default:
position_x=monitor.x + (monitor.width-this._item_size-2*this._spacing);
}
this.actor.set_position (position_x, monitor.y+(monitor.height-height)/2);
this.actor.set_size(width,height);
}
});
hideDock=false;
}
function initShowDock_size () {
this._item_size=1;
this._showDock();
}
function showEffectAddItem_size () {
let primary = Main.layoutManager.primaryMonitor;
let height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
let width = this._item_size + 4*this._spacing;
Tweener.addTween(this.actor, {
y: primary.y + (primary.height-height)/2,
height: height,
width: width,
time: autohide_animation_time,
transition: 'easeOutQuad'
});
}
/**************************************************************************************/
/**** start rescale's Dock functions *****************/
/**************************************************************************************/
function hideDock_scale () {
this._item_size = dockicon_size;
let monitor = Main.layoutManager.primaryMonitor;
let cornerX = 0;
let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
let width = this._item_size + 4*this._spacing;
switch (position) {
case PositionMode.LEFT:
cornerX=monitor.x;
break;
case PositionMode.RIGHT:
default:
cornerX = monitor.x + monitor.width-1;
}
if (hideable) {
Tweener.addTween(this.actor,{
y: monitor.y + (monitor.height-height)/2,
x: cornerX,
height:height,
width: width,
scale_x: 0.025,
time: autohide_animation_time,
transition: 'easeOutQuad'
});
hideDock=true;
}
}
function showDock_scale () {
this._item_size = dockicon_size;
let monitor = Main.layoutManager.primaryMonitor;
let position_x = monitor.x;
let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
let width = this._item_size + 4*this._spacing;
switch (position) {
case PositionMode.LEFT:
position_x=monitor.x-2*this._spacing;
break;
case PositionMode.RIGHT:
default:
position_x=monitor.x + (monitor.width-this._item_size-2*this._spacing);
}
Tweener.addTween(this.actor, {
y: monitor.y + (monitor.height-height)/2,
x: monitor.x + position_x,
height: height,
width: width,
scale_x: 1,
time: autohide_animation_time,
transition: 'easeOutQuad'
});
hideDock=false;
}
function initShowDock_scale () {
let primary = Main.layoutManager.primaryMonitor;
let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
let width = this._item_size + 4*this._spacing;
this.actor.set_scale (0,0);
this.actor.set_size (width,height);
// set the position of the dock
switch (position) {
case PositionMode.LEFT:
this.actor.x = 0;
// effect of creation of the dock
Tweener.addTween(this.actor, {
x: primary.x-2*this._spacing,
y: primary.y + (primary.height-height)/2,
time: autohide_animation_time * 3,
transition: 'easeOutQuad'
});
break;
case PositionMode.RIGHT:
default:
this.actor.x = primary.width-1;
// effect of creation of the dock
Tweener.addTween(this.actor, {
x: primary.x + primary.width-this._item_size- 2*this._spacing,
y: primary.y + (primary.height-height)/2,
time: autohide_animation_time * 3,
transition: 'easeOutQuad'
});
}
Tweener.addTween(this.actor,{
scale_x: 1,
scale_y: 1,
time: autohide_animation_time * 3,
transition: 'easeOutQuad'
});
hideDock=false;
}
function showEffectAddItem_scale () {
let monitor = Main.layoutManager.primaryMonitor;
let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
let width = this._item_size + 4*this._spacing;
Tweener.addTween(this.actor, {
y: monitor.y + (monitor.height-height)/2,
height: height,
width: width,
time: autohide_animation_time,
transition: 'easeOutQuad'
});
}
/**************************************************************************************/
/**** start move Dock functions *****************/
/**************************************************************************************/
function hideDock_move () {
this._item_size = dockicon_size;
let monitor = Main.layoutManager.primaryMonitor;
let cornerX = 0;
let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
let width = this._item_size + 4*this._spacing;
switch (position) {
case PositionMode.LEFT:
cornerX= monitor.x - width + this._spacing;
break;
case PositionMode.RIGHT:
default:
cornerX = monitor.x + monitor.width - this._spacing;
}
if (hideable) {
Tweener.addTween(this.actor,{
x: cornerX,
y: monitor.y + (monitor.height - height)/2,
width: width,
height: height,
time: autohide_animation_time,
transition: 'easeOutQuad'
});
hideDock=true;
}
}
function showDock_move () {
this._item_size = dockicon_size;
let monitor = Main.layoutManager.primaryMonitor;
let position_x = monitor.x;
let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
let width = this._item_size + 4*this._spacing;
switch (position) {
case PositionMode.LEFT:
position_x=monitor.x - 2*this._spacing;
break;
case PositionMode.RIGHT:
default:
position_x=monitor.x + (monitor.width-this._item_size-2*this._spacing);
}
Tweener.addTween(this.actor, {
x: position_x,
y: monitor.y + (monitor.height - height)/2,
width: width,
height: height,
time: autohide_animation_time,
transition: 'easeOutQuad'
});
hideDock=false;
}
function initShowDock_move () {
this._showDock();
}
function showEffectAddItem_move () {
let monitor = Main.layoutManager.primaryMonitor;
let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
let width = this._item_size + 4*this._spacing;
Tweener.addTween(this.actor, {
y: monitor.y + (monitor.height-height)/2,
height: height,
width: width,
time: autohide_animation_time,
transition: 'easeOutQuad'
});
}
function Dock() {
this._init();
}
Dock.prototype = {
_init : function() {
this._placeholderText = null;
this._menus = [];
this._menuDisplays = [];
this._favorites = [];
// Load Settings
this._settings = _me.convenience.getSettings(_metadata, 'dock');
position = this._settings.get_enum(DOCK_POSITION_KEY);
dockicon_size = this._settings.get_int(DOCK_SIZE_KEY);
hideDock = hideable = this._settings.get_boolean(DOCK_HIDE_KEY);
hideEffect = this._settings.get_enum(DOCK_EFFECTHIDE_KEY);
autohide_animation_time = this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY);
//global.log("POSITION: " + position);
//global.log("dockicon_size: " + dockicon_size);
this._spacing = 4;
this._item_size = dockicon_size;
this._nicons = 0;
this._selectFunctionsHide ();
this.actor = new St.BoxLayout({ name: 'dock', vertical: true, reactive: true });
this._grid = new Shell.GenericContainer();
this.actor.add(this._grid, { expand: true, y_align: St.Align.START });
this.actor.connect('style-changed', Lang.bind(this, this._onStyleChanged));
this._grid.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
this._grid.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
this._grid.connect('allocate', Lang.bind(this, this._allocate));
this._workId = Main.initializeDeferredWork(this.actor, Lang.bind(this, this._redisplay));
this._tracker = Shell.WindowTracker.get_default();
this._appSystem = Shell.AppSystem.get_default();
this._installedChangedId = this._appSystem.connect('installed-changed', Lang.bind(this, this._queueRedisplay));
this._appFavoritesChangedId = AppFavorites.getAppFavorites().connect('changed', Lang.bind(this, this._queueRedisplay));
this._appStateChangedId = this._appSystem.connect('app-state-changed', Lang.bind(this, this._queueRedisplay));
this._overviewShowingId = Main.overview.connect('showing', Lang.bind(this, function() {
this.actor.hide();
}));
this._overviewHiddenId = Main.overview.connect('hidden', Lang.bind(this, function() {
this.actor.show();
}));
Main.layoutManager.addChrome(this.actor,
{ affectsStruts: !this._settings.get_boolean(DOCK_HIDE_KEY) });
//hidden
this._settings.connect('changed::'+DOCK_POSITION_KEY, Lang.bind(this, function (){
let primary = Main.layoutManager.primaryMonitor;
position = this._settings.get_enum(DOCK_POSITION_KEY);
this.actor.y=primary.y;
this._redisplay();
}));
this._settings.connect('changed::'+DOCK_SIZE_KEY, Lang.bind(this, function (){
dockicon_size = this._settings.get_int(DOCK_SIZE_KEY);
this._redisplay();
}));
this._settings.connect('changed::'+DOCK_HIDE_KEY, Lang.bind(this, function (){
Main.layoutManager.removeChrome(this.actor);
Main.layoutManager.addChrome(this.actor,
{ affectsStruts: !this._settings.get_boolean(DOCK_HIDE_KEY) });
hideable = this._settings.get_boolean(DOCK_HIDE_KEY);
if (hideable){
hideDock=false;
this._hideDock();
} else {
hideDock=true;
this._showDock();
}
}));
this._settings.connect('changed::'+DOCK_EFFECTHIDE_KEY, Lang.bind(this, function () {
hideEffect = this._settings.get_enum(DOCK_EFFECTHIDE_KEY);
switch (hideEffect) {
case AutoHideEffect.RESCALE:
this._item_size=dockicon_size;
break;
case AutoHideEffect.RESIZE:
this.actor.set_scale (1,1);
break;
case AutoHideEffect.MOVE:
;
}
this.actor.disconnect(this._leave_event);
this.actor.disconnect(this._enter_event);
this._selectFunctionsHide ();
this._leave_event = this.actor.connect('leave-event', Lang.bind(this, this._hideDock));
this._enter_event = this.actor.connect('enter-event', Lang.bind(this, this._showDock));
this._redisplay();
}));
this._settings.connect('changed::'+DOCK_AUTOHIDE_ANIMATION_TIME_KEY, Lang.bind(this,function (){
autohide_animation_time = this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY);
}));
this._leave_event = this.actor.connect('leave-event', Lang.bind(this, this._hideDock));
this._enter_event = this.actor.connect('enter-event', Lang.bind(this, this._showDock));
this._hideDock();
},
destroy: function() {
if (this._installedChangedId) {
this._appSystem.disconnect(this._installedChangedId);
this._installedChangedId = 0;
}
if (this._appFavoritesChangedId) {
AppFavorites.getAppFavorites().disconnect(this._appFavoritesChangedId);
this._appFavoritesChangedId = 0;
}
if (this._appStateChangedId) {
this._appSystem.disconnect(this._appStateChangedId);
this._appStateChangedId = 0;
}
if (this._overviewShowingId) {
Main.overview.disconnect(this._overviewShowingId);
this._overviewShowingId = 0;
}
if (this._overviewHiddenId) {
Main.overview.disconnect(this._overviewHiddenId);
this._overviewHiddenId = 0;
}
this.actor.destroy();
// Break reference cycles
this._settings.run_dispose();
this._settings = null;
this._appSystem = null;
this._tracker = null;
},
// fuctions hide
_restoreHideDock: function(){
hideable = this._settings.get_boolean(DOCK_HIDE_KEY);
},
_disableHideDock: function (){
hideable = false;
},
_selectFunctionsHide: function () {
switch (hideEffect) {
case AutoHideEffect.RESCALE:
this._hideDock = hideDock_scale;
this._showDock = showDock_scale;
this._initShowDock = initShowDock_scale;
this._showEffectAddItem = showEffectAddItem_scale;
break;
case AutoHideEffect.MOVE:
this._hideDock = hideDock_move;
this._showDock = showDock_move;
this._initShowDock = initShowDock_move;
this._showEffectAddItem = showEffectAddItem_move;
break;
case AutoHideEffect.RESIZE:
default:
this._hideDock = hideDock_size;
this._showDock = showDock_size;
this._initShowDock = initShowDock_size;
this._showEffectAddItem = showEffectAddItem_size;
}
},
_appIdListToHash: function(apps) {
let ids = {};
for (let i = 0; i < apps.length; i++)
ids[apps[i].get_id()] = apps[i];
return ids;
},
_queueRedisplay: function () {
Main.queueDeferredWork(this._workId);
},
_redisplay: function () {
this.removeAll();
let favorites = AppFavorites.getAppFavorites().getFavoriteMap();
let running = this._appSystem.get_running();
let runningIds = this._appIdListToHash(running);
let icons = 0;
let nFavorites = 0;
for (let id in favorites) {
let app = favorites[id];
let display = new DockIcon(app,this);
this.addItem(display.actor);
nFavorites++;
icons++;
}
for (let i = 0; i < running.length; i++) {
let app = running[i];
if (app.get_id() in favorites)
continue;
let display = new DockIcon(app,this);
icons++;
this.addItem(display.actor);
}
this._nicons=icons;
if (this._placeholderText) {
this._placeholderText.destroy();
this._placeholderText = null;
}
if (running.length == 0 && nFavorites == 0) {
this._placeholderText = new St.Label({ text: _("Drag here to add favorites") });
this.actor.add_actor(this._placeholderText);
}
let primary = Main.layoutManager.primaryMonitor;
let height = (icons)*(this._item_size + this._spacing) + 2*this._spacing;
let width = this._item_size + 4*this._spacing;
if (this.actor.y != primary.y) {
if (hideable && hideDock) {
this._hideDock();
} else {
if (dockicon_size == this._item_size) {
// only add/delete icon
this._showEffectAddItem ();
} else {
// change size icon
this._showDock ();
}
}
} else {
// effect of creation
this._initShowDock ();
}
},
_getPreferredWidth: function (grid, forHeight, alloc) {
alloc.min_size = this._item_size;
alloc.natural_size = this._item_size + this._spacing;
},
_getPreferredHeight: function (grid, forWidth, alloc) {
let children = this._grid.get_children();
let nRows = children.length;
let totalSpacing = Math.max(0, nRows - 1) * this._spacing;
let height = nRows * this._item_size + totalSpacing;
alloc.min_size = height;
alloc.natural_size = height;
},
_allocate: function (grid, box, flags) {
let children = this._grid.get_children();
let x = box.x1 + this._spacing;
if (position == PositionMode.LEFT)
x = box.x1 + 2*this._spacing;
let y = box.y1 + this._spacing;
for (let i = 0; i < children.length; i++) {
let childBox = new Clutter.ActorBox();
childBox.x1 = x;
childBox.y1 = y;
childBox.x2 = childBox.x1 + this._item_size;
childBox.y2 = childBox.y1 + this._item_size;
children[i].allocate(childBox, flags);
y += this._item_size + this._spacing;
}
},
_onStyleChanged: function() {
let themeNode = this.actor.get_theme_node();
let [success, len] = themeNode.get_length('spacing', false);
if (success)
this._spacing = len;
[success, len] = themeNode.get_length('-shell-grid-item-size', false);
if (success)
this._item_size = len;
this._grid.queue_relayout();
},
removeAll: function () {
this._grid.get_children().forEach(Lang.bind(this, function (child) {
child.destroy();
}));
},
addItem: function(actor) {
this._grid.add_actor(actor);
}
};
Signals.addSignalMethods(Dock.prototype);
function DockIcon(app, dock) {
this._init(app, dock);
}
DockIcon.prototype = {
_init : function(app, dock) {
this.app = app;
this.actor = new St.Button({ style_class: 'app-well-app',
button_mask: St.ButtonMask.ONE | St.ButtonMask.TWO,
reactive: true,
x_fill: true,
y_fill: true });
this.actor._delegate = this;
//this.actor.set_size(dockicon_size, dockicon_size);
this._icon = new AppDisplay.AppIcon(app, { setSizeManually: true,
showLabel: false });
this.actor.set_child(this._icon.actor);
this._icon.setIconSize(dockicon_size);
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
this._menu = null;
this._menuManager = new PopupMenu.PopupMenuManager(this);
this._has_focus = false;
let tracker = Shell.WindowTracker.get_default();
tracker.connect('notify::focus-app', Lang.bind(this, this._onStateChanged));
this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress));
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this.actor.connect('notify::hover', Lang.bind(this, this._hoverChanged));
this._menuTimeoutId = 0;
this._stateChangedId = this.app.connect('notify::state',
Lang.bind(this, this._onStateChanged));
this._onStateChanged();
this._dock=dock;
},
_onDestroy: function() {
if (this._stateChangedId > 0)
this.app.disconnect(this._stateChangedId);
this._stateChangedId = 0;
this._removeMenuTimeout();
},
_removeMenuTimeout: function() {
if (this._menuTimeoutId > 0) {
Mainloop.source_remove(this._menuTimeoutId);
this._menuTimeoutId = 0;
}
},
_hoverChanged: function(actor) {
if (actor != this.actor)
this._has_focus = false;
else
this._has_focus = true;
return false;
},
_onStateChanged: function() {
let tracker = Shell.WindowTracker.get_default();
let focusedApp = tracker.focus_app;
if (this.app.state != Shell.AppState.STOPPED) {
this.actor.add_style_class_name('running');
if (this.app == focusedApp) {
this.actor.add_style_class_name('focused');
} else {
this.actor.remove_style_class_name('focused');
}
} else {
this.actor.remove_style_class_name('focused');
this.actor.remove_style_class_name('running');
}
},
_onButtonPress: function(actor, event) {
let button = event.get_button();
if (button == 1) {
this._removeMenuTimeout();
this._menuTimeoutId = Mainloop.timeout_add(AppDisplay.MENU_POPUP_TIMEOUT, Lang.bind(this, function() {
this.popupMenu();
}));
} else if (button == 3) {
this.popupMenu();
}
},
_onClicked: function(actor, button) {
this._removeMenuTimeout();
if (button == 1) {
this._onActivate(Clutter.get_current_event());
} else if (button == 2) {
// Last workspace is always empty
let launchWorkspace = global.screen.get_workspace_by_index(global.screen.n_workspaces - 1);
launchWorkspace.activate(global.get_current_time());
this.emit('launching');
this.app.open_new_window(-1);
}
return false;
},
getId: function() {
return this.app.get_id();
},
popupMenu: function() {
this._removeMenuTimeout();
this.actor.fake_release();
this._dock._disableHideDock();
if (!this._menu) {
this._menu = new DockIconMenu(this);
this._menu.connect('activate-window', Lang.bind(this, function (menu, window) {
this.activateWindow(window);
}));
this._menu.connect('open-state-changed', Lang.bind(this, function (menu, isPoppedUp) {
if (!isPoppedUp){
//Restore value of autohidedock
this._dock._restoreHideDock();
this._dock._hideDock();
this._onMenuPoppedDown();
}
}));
this._menuManager.addMenu(this._menu, true);
}
this._menu.popup();
return false;
},
activateWindow: function(metaWindow) {
if (metaWindow) {
this._didActivateWindow = true;
Main.activateWindow(metaWindow);
}
},
setSelected: function (isSelected) {
this._selected = isSelected;
if (this._selected)
this.actor.add_style_class_name('selected');
else
this.actor.remove_style_class_name('selected');
},
_onMenuPoppedDown: function() {
this.actor.sync_hover();
},
_getRunning: function() {
return this.app.state != Shell.AppState.STOPPED;
},
_onActivate: function (event) {
this.emit('launching');
let modifiers = Shell.get_event_state(event);
if (modifiers & Clutter.ModifierType.CONTROL_MASK
&& this.app.state == Shell.AppState.RUNNING) {
let current_workspace = global.screen.get_active_workspace().index();
this.app.open_new_window(current_workspace);
} else {
let tracker = Shell.WindowTracker.get_default();
let focusedApp = tracker.focus_app;
if (this.app == focusedApp) {
let windows = this.app.get_windows();
let current_workspace = global.screen.get_active_workspace();
for (let i = 0; i < windows.length; i++) {
let w = windows[i];
if (w.get_workspace() == current_workspace)
w.minimize();
}
} else {
this.app.activate(-1);
}
}
Main.overview.hide();
},
shellWorkspaceLaunch : function() {
this.app.open_new_window();
}
};
Signals.addSignalMethods(DockIcon.prototype);
function DockIconMenu(source) {
this._init(source);
}
DockIconMenu.prototype = {
__proto__: AppDisplay.AppIconMenu.prototype,
_init: function(source) {
switch (position) {
case PositionMode.LEFT:
PopupMenu.PopupMenu.prototype._init.call(this, source.actor, St.Align.MIDDLE, St.Side.LEFT, 0);
break;
case PositionMode.RIGHT:
default:
PopupMenu.PopupMenu.prototype._init.call(this, source.actor, St.Align.MIDDLE, St.Side.RIGHT, 0);
}
this._source = source;
this.connect('activate', Lang.bind(this, this._onActivate));
this.actor.add_style_class_name('dock-menu');
// Chain our visibility and lifecycle to that of the source
source.actor.connect('notify::mapped', Lang.bind(this, function () {
if (!source.actor.mapped)
this.close();
}));
source.actor.connect('destroy', Lang.bind(this, function () { this.actor.destroy(); }));
Main.layoutManager.addChrome(this.actor);
},
_redisplay: function() {
this.removeAll();
let windows = this._source.app.get_windows();
// Display the app windows menu items and the separator between windows
// of the current desktop and other windows.
let activeWorkspace = global.screen.get_active_workspace();
let separatorShown = windows.length > 0 && windows[0].get_workspace() != activeWorkspace;
for (let i = 0; i < windows.length; i++) {
if (!separatorShown && windows[i].get_workspace() != activeWorkspace) {
this._appendSeparator();
separatorShown = true;
}
let item = this._appendMenuItem(windows[i].title);
item._window = windows[i];
}
if (windows.length > 0)
this._appendSeparator();
let isFavorite = AppFavorites.getAppFavorites().isFavorite(this._source.app.get_id());
this._newWindowMenuItem = windows.length > 0 ? this._appendMenuItem(_("New Window")) : null;
this._quitAppMenuItem = windows.length >0 ? this._appendMenuItem(_("Quit Application")) : null;
if (windows.length > 0)
this._appendSeparator();
this._toggleFavoriteMenuItem = this._appendMenuItem(isFavorite ?
_("Remove from Favorites")
: _("Add to Favorites"));
this._highlightedItem = null;
},
_onActivate: function (actor, child) {
if (child._window) {
let metaWindow = child._window;
this.emit('activate-window', metaWindow);
} else if (child == this._newWindowMenuItem) {
let current_workspace = global.screen.get_active_workspace().index();
this._source.app.open_new_window(current_workspace);
this.emit('activate-window', null);
} else if (child == this._quitAppMenuItem) {
this._source.app.request_quit();
} else if (child == this._toggleFavoriteMenuItem) {
let favs = AppFavorites.getAppFavorites();
let isFavorite = favs.isFavorite(this._source.app.get_id());
if (isFavorite)
favs.removeFavorite(this._source.app.get_id());
else
favs.addFavorite(this._source.app.get_id());
}
this.close();
}
}
function init(metadata) {
_metadata = metadata;
_me = imports.ui.extensionSystem.extensions[metadata.uuid];
_me.convenience.initTranslations(metadata);
}
let dock;
function enable() {
dock = new Dock();
}
function disable() {
dock.destroy();
dock = null;
}

View File

@@ -1,8 +0,0 @@
{
"uuid": "@uuid@",
"name": "Dock",
"description": "A dock for the GNOME Shell -- displays favorite and running applications",
"original-author": "tclaesson@gmail.com",
"shell-version": [ "@shell_current@" ],
"url": "@url@"
}

View File

@@ -1,38 +0,0 @@
<schemalist gettext-domain="gnome-shell-extensions">
<enum id='org.gnome.shell.extensions.dock.PositionMode'>
<value nick='left' value='0'/>
<value nick='right' value='1'/>
</enum>
<enum id='org.gnome.shell.extensions.dock.AutoHideEffect'>
<value nick='resize' value='0'/>
<value nick='rescale' value='1'/>
<value nick='move' value='2'/>
</enum>
<schema id="org.gnome.shell.extensions.dock" path="/org/gnome/shell/extensions/dock/">
<key name="position" enum="org.gnome.shell.extensions.dock.PositionMode">
<default>'right'</default>
<_summary>Position of the dock</_summary>
<_description>Sets the position of the dock in the screen. Allowed values are 'right' or 'left'</_description>
</key>
<key name="size" type="i">
<default>48</default>
<_summary>Icon size</_summary>
<_description>Sets icon size of the dock.</_description>
</key>
<key name="autohide" type="b">
<default>true</default>
<_summary>Enable/disable autohide</_summary>
</key>
<key name="hide-effect" enum="org.gnome.shell.extensions.dock.AutoHideEffect">
<default>'move'</default>
<_summary>Autohide effect</_summary>
<_description>Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' and 'move'</_description>
</key>
<key name="hide-effect-duration" type="d">
<default>0.3</default>
<_summary>Autohide duration</_summary>
<_description>Sets the time duration of the autohide effect.</_description>
</key>
</schema>
</schemalist>

View File

@@ -1,10 +0,0 @@
#dock {
border-radius: 9px;
background-color: rgba(0,0,0,0.9);
border-width: 2px;
border-color: #5f5f5f;
}
.dock-menu {
font-size: 12px
}

View File

@@ -11,24 +11,26 @@ const Main = imports.ui.main;
const Panel = imports.ui.panel;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const ShellMountOperation = imports.ui.shellMountOperation;
function DriveMenuItem(place) {
this._init(place);
}
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
DriveMenuItem.prototype = {
__proto__: PopupMenu.PopupBaseMenuItem.prototype,
const MountMenuItem = new Lang.Class({
Name: 'DriveMenu.MountMenuItem',
Extends: PopupMenu.PopupBaseMenuItem,
_init: function(place) {
PopupMenu.PopupBaseMenuItem.prototype._init.call(this);
_init: function(mount) {
this.parent();
this.place = place;
this.label = new St.Label({ text: place.name });
this.label = new St.Label({ text: mount.get_name() });
this.addActor(this.label);
this.actor.label_actor = this.label;
let ejectIcon = new St.Icon({ icon_name: 'media-eject',
icon_type: St.IconType.SYMBOLIC,
this.mount = mount;
let ejectIcon = new St.Icon({ icon_name: 'media-eject-symbolic',
style_class: 'popup-menu-icon ' });
let ejectButton = new St.Button({ child: ejectIcon });
ejectButton.connect('clicked', Lang.bind(this, this._eject));
@@ -36,63 +38,140 @@ DriveMenuItem.prototype = {
},
_eject: function() {
this.place.remove();
let mountOp = new ShellMountOperation.ShellMountOperation(this.mount);
if (this.mount.can_eject())
this.mount.eject_with_operation(Gio.MountUnmountFlags.NONE,
mountOp.mountOp,
null, // Gio.Cancellable
Lang.bind(this, this._ejectFinish));
else
this.mount.unmount_with_operation(Gio.MountUnmountFlags.NONE,
mountOp.mountOp,
null, // Gio.Cancellable
Lang.bind(this, this._unmountFinish));
},
_unmountFinish: function(mount, result) {
try {
mount.unmount_with_operation_finish(result);
} catch(e) {
this._reportFailure(e);
}
},
_ejectFinish: function(mount, result) {
try {
mount.eject_with_operation_finish(result);
} catch(e) {
this._reportFailure(e);
}
},
_reportFailure: function(exception) {
let msg = _("Ejecting drive '%s' failed:").format(this.mount.get_name());
Main.notifyError(msg, exception.message);
},
activate: function(event) {
this.place.launch({ timestamp: event.get_time() });
Gio.AppInfo.launch_default_for_uri(this.mount.get_root().get_uri(),
global.create_app_launch_context());
PopupMenu.PopupBaseMenuItem.prototype.activate.call(this, event);
this.parent(event);
}
};
});
function DriveMenu() {
this._init();
}
DriveMenu.prototype = {
__proto__: PanelMenu.SystemStatusButton.prototype,
const DriveMenu = new Lang.Class({
Name: 'DriveMenu.DriveMenu',
Extends: PanelMenu.SystemStatusButton,
_init: function() {
// is 'media-eject' better?
PanelMenu.SystemStatusButton.prototype._init.call(this, 'media-eject');
this.parent('media-eject-symbolic', _("Removable devices"));
this._manager = Main.placesManager;
this._manager.connect('mounts-updated', Lang.bind(this, this._update));
this._monitor = Gio.VolumeMonitor.get();
this._addedId = this._monitor.connect('mount-added', Lang.bind(this, function(monitor, mount) {
this._addMount(mount);
this._updateMenuVisibility();
}));
this._removedId = this._monitor.connect('mount-removed', Lang.bind(this, function(monitor, mount) {
this._removeMount(mount);
this._updateMenuVisibility();
}));
this._contentSection = new PopupMenu.PopupMenuSection();
this.menu.addMenuItem(this._contentSection);
this._mounts = [ ];
this._update();
this._monitor.get_mounts().forEach(Lang.bind(this, this._addMount));
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addAction(_("Open file manager"), function(event) {
this.menu.addAction(_("Open File"), function(event) {
let appSystem = Shell.AppSystem.get_default();
let app = appSystem.lookup_app('nautilus.desktop');
app.activate_full(-1, event.get_time());
});
this._updateMenuVisibility();
},
_update: function() {
this._contentSection.removeAll();
_updateMenuVisibility: function() {
if (this._mounts.length > 0)
this.actor.show();
else
this.actor.hide();
},
let mounts = this._manager.getMounts();
let any = false;
for (let i = 0; i < mounts.length; i++) {
if (mounts[i].isRemovable()) {
this._contentSection.addMenuItem(new DriveMenuItem(mounts[i]));
any = true;
_isMountInteresting: function(mount) {
if (!mount.can_eject() && !mount.can_unmount())
return false;
let volume = mount.get_volume();
if (volume == null) {
// probably a GDaemonMount, could be network or
// local, but we can't tell; assume it's local for now
return true;
}
return volume.get_identifier('class') != 'network';
},
_addMount: function(mount) {
if (!this._isMountInteresting(mount))
return;
let item = new MountMenuItem(mount);
this._mounts.unshift(item);
this.menu.addMenuItem(item, 0);
},
_removeMount: function(mount) {
if (!this._isMountInteresting(mount))
return;
for (let i = 0; i < this._mounts.length; i++) {
let item = this._mounts[i];
if (item.mount == mount) {
item.destroy();
this._mounts.splice(i, 1);
return;
}
}
this.actor.visible = any;
log ('Removing a mount that was never added to the menu');
},
}
// Put your extension initialization code here
function init(metadata) {
let me = imports.ui.extensionSystem.extensions[metadata.uuid];
me.convenience.initTranslations(metadata);
destroy: function() {
if (this._connectedId) {
this._monitor.disconnect(this._connectedId);
this._monitor.disconnect(this._disconnectedId);
this._connectedId = 0;
this._disconnectedId = 0;
}
this.parent();
},
});
function init() {
Convenience.initTranslations();
}
let _indicator;

View File

@@ -1,7 +1,10 @@
{
"extension-id": "@extension_id@",
"uuid": "@uuid@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "Removable Drive Menu",
"description": "A status menu for accessing and unmounting removable devices",
"description": "A status menu for accessing and unmounting removable devices.",
"shell-version": [ "@shell_current@" ],
"url": "@url@"
}

View File

@@ -1,3 +1,6 @@
EXTENSION_ID = example
EXTRA_MODULES = prefs.js
include ../../extension.mk
include ../../settings.mk

View File

@@ -1,3 +1,4 @@
// -*- 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;
@@ -7,20 +8,26 @@ 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 text = new St.Label({ style_class: 'helloworld-label', text: _("Hello, world!") });
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(text);
text.set_position(Math.floor (monitor.width / 2 - text.width / 2), Math.floor(monitor.height / 2 - text.height / 2));
Mainloop.timeout_add(3000, function () { text.destroy(); });
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, function () { label.destroy(); });
}
// Put your extension initialization code here
function init(metadata) {
log ('Example extension initalized');
let me = imports.ui.extensionSystem.extensions[metadata.uuid];
me.convenience.initTranslations(metadata);
Convenience.initTranslations();
}
let signalId;

View File

@@ -1,5 +1,8 @@
{
"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@" ],

View File

@@ -0,0 +1,9 @@
<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>

View File

@@ -0,0 +1,52 @@
// -*- 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 = new GObject.Class({
Name: 'Example.Prefs.Widget',
GTypeName: 'ExamplePrefsWidget',
Extends: Gtk.Grid,
_init: function(params) {
this.parent(params);
this.margin = this.row_spacing = this.column_spacing = 10;
// 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 it's possible to customize the greeting message.");
this.attach(new Gtk.Label({ label: primaryText, wrap: true }), 0, 0, 2, 1);
this.attach(new Gtk.Label({ label: '<b>' + _("Message:") + '</b>', use_markup: true }),
0, 1, 1, 1);
let entry = new Gtk.Entry({ hexpand: true });
this.attach(entry, 1, 1, 1, 1);
this._settings = Convenience.getSettings();
this._settings.bind('hello-text', entry, 'text', Gio.SettingsBindFlags.DEFAULT);
}
});
function buildPrefsWidget() {
let widget = new ExamplePrefsWidget();
widget.show_all();
return widget;
}

View File

@@ -1,3 +0,0 @@
EXTENSION_ID = gajim
include ../../extension.mk

View File

@@ -1,340 +0,0 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const DBus = imports.dbus;
const Gettext = imports.gettext.domain('gnome-shell');
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Signals = imports.signals;
const St = imports.gi.St;
const Tp = imports.gi.TelepathyGLib;
const Main = imports.ui.main;
const Mainloop = imports.mainloop;
const MessageTray = imports.ui.messageTray;
const Shell = imports.gi.Shell;
const TelepathyClient = imports.ui.telepathyClient;
const _ = Gettext.gettext;
// http://ntt.cc/ext/base64-Encoding-Decoding.html
const keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
function decode64(input) {
let output = "";
let chr1, chr2, chr3;
let enc1, enc2, enc3, enc4;
let i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
do {
enc1 = keyStr.indexOf(input.charAt(i++));
enc2 = keyStr.indexOf(input.charAt(i++));
enc3 = keyStr.indexOf(input.charAt(i++));
enc4 = keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";
} while (i < input.length);
return unescape(output);
}
function wrappedText(text, sender, timestamp, direction) {
if (!timestamp)
timestamp = (Date.now() / 1000);
return {
messageType: Tp.ChannelTextMessageType.NORMAL,
text: text,
sender: sender,
timestamp: timestamp,
direction: direction
};
}
function Source(gajimClient, accountName, author, initialMessage) {
this._init(gajimClient, accountName, author, initialMessage);
}
Source.prototype = {
__proto__: MessageTray.Source.prototype,
_init: function(gajimClient, accountName, author, initialMessage) {
MessageTray.Source.prototype._init.call(this, author);
this.isChat = true;
this._author = author;
this._gajimClient = gajimClient;
this._accountName = accountName;
this._initialMessage = initialMessage;
this._iconUri = null;
this._presence = "online";
this._notification = new TelepathyClient.ChatNotification(this);
this._notification.setUrgency(MessageTray.Urgency.HIGH);
let jid = author.split('/')[0];
let proxy = this._gajimClient.proxy();
proxy.contact_infoRemote(jid, Lang.bind(this, this._gotContactInfos));
this._statusChangeId = proxy.connect('ContactStatus',
Lang.bind(this, this._onStatusChange));
this._contactAbsenceId = proxy.connect('ContactAbsence',
Lang.bind(this, this._onStatusChange));
this._chatStateId = proxy.connect('ChatState',
Lang.bind(this, this._onChatState));
this._messageSentId = proxy.connect('MessageSent',
Lang.bind(this, this._messageSent));
this._newMessageId = proxy.connect('NewMessage',
Lang.bind(this, this._messageReceived));
},
destroy: function() {
let proxy = this._gajimClient.proxy();
proxy.disconnect(this._statusChangeId);
proxy.disconnect(this._contactAbsenceId);
proxy.disconnect(this._chatStateId);
proxy.disconnect(this._messageSentId);
proxy.disconnect(this._newMessageId);
MessageTray.Source.prototype.destroy.call(this);
},
_gotContactInfos: function(result, excp) {
this.title = result['FN'];
let avatarUri = null;
if (result['PHOTO']) {
let mimeType = result['PHOTO']['TYPE'];
let avatarData = decode64(result['PHOTO']['BINVAL']);
let sha = result['PHOTO']['SHA'];
avatarUri = this._gajimClient.cacheAvatar(mimeType, sha, avatarData);
}
this._iconUri = avatarUri;
this._setSummaryIcon(this.createNotificationIcon());
let message = wrappedText(this._initialMessage, this._author, null, TelepathyClient.NotificationDirection.RECEIVED);
this._notification.appendMessage(message, false);
if (!Main.messageTray.contains(this))
Main.messageTray.add(this);
this.notify(this._notification);
},
createNotificationIcon: function() {
let iconBox = new St.Bin({ style_class: 'avatar-box' });
iconBox._size = this.ICON_SIZE;
if (!this._iconUri) {
iconBox.child = new St.Icon({ icon_name: 'avatar-default',
icon_type: St.IconType.FULLCOLOR,
icon_size: iconBox._size });
} else {
let textureCache = St.TextureCache.get_default();
iconBox.child = textureCache.load_uri_async(this._iconUri, iconBox._size, iconBox._size);
}
return iconBox;
},
open: function(notification) {
// Lookup for the messages window and display it. In the case where it's not o
// opened yet fallback to the roster window.
let windows = global.get_window_actors();
for (let i = 0; i < windows.length; i++) {
let metaWindow = windows[i].metaWindow;
if (metaWindow.get_wm_class_instance() == "gajim" &&
metaWindow.get_role() == "messages") {
Main.activateWindow(metaWindow);
return;
}
}
let app = Shell.AppSystem.get_default().lookup_app('gajim.desktop');
app.activate(-1);
},
_onChatState: function(emitter, data) {
let chatstate = data[1][5];
if (chatstate == 'gone')
this.destroy();
},
setChatState: function(state) {
// Gajim DBUS API doesn't support sending chatstate yet.
},
_messageReceived: function(emitter, data) {
let author = data[1][0];
let text = data[1][1];
if (text && (author == this._author)) {
let message = wrappedText(text, this._author, null, TelepathyClient.NotificationDirection.RECEIVED);
this._notification.appendMessage(message, false);
this.notify(this._notification);
}
},
_messageSent: function(emitter, data) {
let recipient = data[1][0];
let text = data[1][1];
let chatstate = data[1][3];
if (text && (recipient == this._author)) {
let message = wrappedText(text, this._author, null, TelepathyClient.NotificationDirection.SENT);
this._notification.appendMessage(message, false);
} else if (chatstate == 'gone')
this.destroy();
},
notify: function() {
MessageTray.Source.prototype.notify.call(this, this._notification);
},
respond: function(text) {
let jid = this._author;
let keyID = ""; // unencrypted.
this._gajimClient.proxy().send_chat_messageRemote(jid, text, keyID, this._accountName);
},
_onStatusChange: function(emitter, data) {
if (!this.title)
return;
let jid = data[1][0];
let presence = data[1][1];
let message = data[1][2];
if (jid != this._author.split('/')[0])
return;
let presenceMessage, shouldNotify, title;
title = GLib.markup_escape_text(this.title, -1);
if (presence == "away") {
presenceMessage = _("%s is away.").format(title);
shouldNotify = false;
} else if (presence == "offline") {
presenceMessage = _("%s is offline.").format(title);
shouldNotify = (this._presence != "offline");
} else if (presence == "online") {
presenceMessage = _("%s is online.").format(title);
shouldNotify = (this._presence == "offline");
} else if (presence == "dnd") {
presenceMessage = _("%s is busy.").format(title);
shouldNotify = false;
} else
return;
this._presence = presence;
if (message)
presenceMessage += ' <i>(' + GLib.markup_escape_text(message, -1) + ')</i>';
this._notification.appendPresence(presenceMessage, shouldNotify);
if (shouldNotify)
this.notify(this._notification);
}
};
const GajimIface = {
name: 'org.gajim.dbus.RemoteInterface',
properties: [],
methods: [{ name: 'send_chat_message', inSignature: 'ssss', outSignature: 'b'},
{ name: 'contact_info', inSignature: 's', outSignature: 'a{sv}'}],
signals: [{ name: 'NewMessage', inSignature: 'av' },
{ name: 'ChatState', inSignature: 'av' },
{ name: 'ContactStatus', inSignature: 'av' },
{ name: 'ContactAbsence', inSignature: 'av' },
{ name: 'MessageSent', inSignature: 'av' }]
};
let Gajim = DBus.makeProxyClass(GajimIface);
function GajimClient() {
this._init();
}
GajimClient.prototype = {
_init: function() {
this._sources = {};
},
proxy : function() {
return this._proxy;
},
enable: function() {
this._cacheDir = GLib.get_user_cache_dir() + '/gnome-shell/gajim-avatars';
let dir = Gio.file_new_for_path(this._cacheDir);
if (!dir.query_exists(null)) {
GLib.mkdir_with_parents(this._cacheDir, 0x1c0); // 0x1c0 = octal 0700
}
this._proxy = new Gajim(DBus.session, 'org.gajim.dbus', '/org/gajim/dbus/RemoteObject');
this._newMessageId = this._proxy.connect('NewMessage', Lang.bind(this, this._messageReceived));
},
disable: function() {
if (this._newMessageId) {
this._proxy.disconnect(this._newMessageId);
this._newMessageId = 0;
}
this._proxy = null;
for (let id in this._sources)
this._sources[id].destroy();
this._sources = { };
},
_messageReceived : function(emitter, data) {
let author = data[1][0];
let message = data[1][1];
let account = data[0];
let source = this._sources[author];
if (!source) {
source = new Source(this, account, author, message);
source.connect('destroy', Lang.bind(this,
function() {
delete this._sources[author];
}));
this._sources[author] = source;
}
},
cacheAvatar : function(mimeType, sha, avatarData) {
let ext = mimeType.split('/')[1];
let file = this._cacheDir + '/' + sha + '.' + ext;
let uri = GLib.filename_to_uri(file, null);
if (GLib.file_test(file, GLib.FileTest.EXISTS))
return uri;
let success = false;
try {
success = GLib.file_set_contents(file, avatarData, avatarData.length);
} catch (e) {
logError(e, 'Error caching avatar data');
}
return uri;
}
};
function init() {
return new GajimClient();
}

View File

@@ -1,7 +0,0 @@
{
"uuid": "@uuid@",
"name": "Gajim IM integration",
"description": "Display Gajim incoming chats as notifications in the Shell message tray.",
"shell-version": [ "@shell_current@" ],
"url": "http://base-art.net"
}

View File

@@ -1 +0,0 @@
/* none used */

View File

@@ -0,0 +1,3 @@
EXTENSION_ID = launch-new-instance
include ../../extension.mk

View File

@@ -0,0 +1,37 @@
const Main = imports.ui.main;
const AppDisplay = imports.ui.appDisplay;
var _onActivateOriginal = null;
var _activateResultOriginal = null;
function _onActivate(event) {
this.emit('launching');
if (this._onActivateOverride) {
this._onActivateOverride(event);
} else {
this.app.open_new_window(-1);
}
Main.overview.hide();
}
function _activateResult(app) {
app.open_new_window(-1);
}
function init() {
}
function enable() {
_onActivateOriginal = AppDisplay.AppIcon.prototype._onActivate;
AppDisplay.AppIcon.prototype._onActivate = _onActivate;
_activateResultOriginal = AppDisplay.AppSearchProvider.prototype.activateResult;
AppDisplay.AppSearchProvider.prototype.activateResult = _activateResult;
}
function disable() {
AppDisplay.AppIcon.prototype._onActivate = _onActivateOriginal;
AppDisplay.AppSearchProvider.prototype.activateResult = _activateResultOriginal;
}

View File

@@ -0,0 +1,10 @@
{
"extension-id": "@extension_id@",
"uuid": "@uuid@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "Launch new instance",
"description": "Always launch a new instance when clicking in the dash or the application view.\nThis extension is part of Classic Mode and is officially supported by GNOME. Please do not report bugs using the form below, use GNOME Bugzilla instead.",
"shell-version": [ "@shell_current@" ],
"url": "@url@"
}

View File

@@ -0,0 +1 @@
/* This extensions requires no special styling */

View File

@@ -1,14 +1,5 @@
EXTENSION_ID = native-window-placement
include ../../extension.mk
include ../../settings.mk
gschemas_in = $(gschemabase).native-window-placement.gschema.xml.in
@INTLTOOL_XML_NOMERGE_RULE@
gsettings_SCHEMAS = $(gschemas_in:.xml.in=.xml)
@GSETTINGS_RULES@
CLEANFILES += $(gschemas_in:.xml.in=.valid) $(gsettings_SCHEMAS)
EXTRA_DIST += $(gschemas_in)

View File

@@ -20,7 +20,9 @@ const Tweener = imports.ui.tweener;
const Workspace = imports.ui.workspace;
const WindowPositionFlags = Workspace.WindowPositionFlags;
let _me, _metadata;
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
// testing settings for natural window placement strategy:
const WINDOW_PLACEMENT_NATURAL_FILLGAPS = true; // enlarge windows at the end to fill gaps // not implemented yet
@@ -31,6 +33,12 @@ const WINDOW_PLACEMENT_NATURAL_MAX_TRANSLATIONS = 5000; // safety li
const PLACE_WINDOW_CAPTIONS_ON_TOP = true; // place window titles in overview on top of windows with overlap parameter
const WORKSPACE_BORDER_GAP = 10; // minimum gap between the workspace area and the workspace selector
const WINDOW_AREA_TOP_GAP = 20; // minimum gap between the workspace area and the top border. This keeps window captions and close buttons visible. 13px (26/2) should currently be enough.
const BUTTON_LAYOUT_SCHEMA = 'org.gnome.shell.overrides';
const BUTTON_LAYOUT_KEY = 'button-layout';
function injectToFunction(parent, name, func) {
let origin = parent[name];
parent[name] = function() {
@@ -41,17 +49,17 @@ function injectToFunction(parent, name, func) {
return ret;
}
}
const WORKSPACE_BORDER_GAP = 10; // gap between the workspace area and the workspace selector
function Rect(x, y, width, height) {
[this.x, this.y, this.width, this.height] = arguments;
}
const Rect = new Lang.Class({
Name: 'NativeWindowPlacement.Rect',
_init: function(x, y, width, height) {
[this.x, this.y, this.width, this.height] = [x, y, width, height];
},
Rect.prototype = {
/**
* used in _calculateWindowTransformationsNatural to replace Meta.Rectangle that is too slow.
*/
copy: function() {
return new Rect(this.x, this.y, this.width, this.height);
},
@@ -100,7 +108,7 @@ Rect.prototype = {
this.x += dx;
this.y += dy;
}
};
});
let winInjections, workspaceInjections, connectedSignals;
@@ -113,9 +121,10 @@ function resetState() {
function enable() {
resetState();
let settings = _me.convenience.getSettings(_metadata, 'native-window-placement');
let settings = Convenience.getSettings();
let useMoreScreen = settings.get_boolean('use-more-screen');
signalId = settings.connect('changed::use-more-screen', function() {
let windowCaptionsOnTop = settings.get_boolean('window-captions-on-top');
let signalId = settings.connect('changed::use-more-screen', function() {
useMoreScreen = settings.get_boolean('use-more-screen');
});
connectedSignals.push({ obj: settings, id: signalId });
@@ -129,19 +138,12 @@ function enable() {
* PresentWindowsEffect::calculateWindowTransformationsNatural() from KDE, see:
* https://projects.kde.org/projects/kde/kdebase/kde-workspace/repository/revisions/master/entry/kwin/effects/presentwindows/presentwindows.cpp
*/
Workspace.Workspace.prototype._calculateWindowTransformationsNatural = function(clones) {
Workspace.Workspace.prototype._calculateWindowTransformationsNatural = function(clones, area) {
// 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.
clones = clones.sort(function (win1, win2) {
return win2.metaWindow.get_stable_sequence() - win1.metaWindow.get_stable_sequence();
});
// Put a gap on the right edge of the workspace to separe it from the workspace selector
let x_gap = WORKSPACE_BORDER_GAP;
let y_gap = WORKSPACE_BORDER_GAP * this._height / this._width
let area = new Rect(this._x, this._y, this._width - x_gap, this._height - y_gap);
let bounds = area.copy();
let area_rect = new Rect(area.x, area.y, area.width, area.height);
let bounds = area_rect.copy();
let direction = 0;
let directions = [];
@@ -184,7 +186,7 @@ function enable() {
if (diff[0] == 0 && diff[1] == 0)
diff[0] = 1;
// Try to keep screen/workspace aspect ratio
if ( bounds.height / bounds.width > area.height / area.width )
if ( bounds.height / bounds.width > area_rect.height / area_rect.width )
diff[0] *= 2;
else
diff[1] *= 2;
@@ -256,15 +258,15 @@ function enable() {
// Work out scaling by getting the most top-left and most bottom-right window coords.
let scale;
scale = Math.min(area.width / bounds.width,
area.height / bounds.height,
scale = Math.min(area_rect.width / bounds.width,
area_rect.height / bounds.height,
1.0);
// Make bounding rect fill the screen size for later steps
bounds.x = bounds.x - (area.width - bounds.width * scale) / 2;
bounds.y = bounds.y - (area.height - bounds.height * scale) / 2;
bounds.width = area.width / scale;
bounds.height = area.height / scale;
bounds.x = bounds.x - (area_rect.width - bounds.width * scale) / 2;
bounds.y = bounds.y - (area_rect.height - bounds.height * scale) / 2;
bounds.width = area_rect.width / scale;
bounds.height = area_rect.height / scale;
// Move all windows back onto the screen and set their scale
for (let i = 0; i < rects.length; i++) {
@@ -279,191 +281,194 @@ function enable() {
let buttonOuterHeight, captionHeight;
let buttonOuterWidth = 0;
let targets = [];
let slots = [];
for (let i = 0; i < rects.length; i++) {
rects[i].x = rects[i].x * scale + this._x;
rects[i].y = rects[i].y * scale + this._y;
rects[i].x = rects[i].x * scale + area_rect.x;
rects[i].y = rects[i].y * scale + area_rect.y;
targets[i] = [rects[i].x, rects[i].y, scale];
slots.push([rects[i].x, rects[i].y, scale, clones[i]]);
}
return [clones, targets];
return slots;
}
workspaceInjections['_calculateWindowTransformationsNatural'] = undefined;
/**
* positionWindows:
* _updateWindowPositions:
* @flags:
* INITIAL - this is the initial positioning of the windows.
* ANIMATE - Indicates that we need animate changing position.
*/
workspaceInjections['positionWindows'] = Workspace.Workspace.prototype.positionWindows;
Workspace.Workspace.prototype.positionWindows = function(flags) {
if (this._repositionWindowsId > 0) {
Mainloop.source_remove(this._repositionWindowsId);
this._repositionWindowsId = 0;
}
workspaceInjections['_updateWindowPositions'] = Workspace.Workspace.prototype._updateWindowPositions;
Workspace.Workspace.prototype._updateWindowPositions = function(flags) {
if (this._currentLayout == null) {
this._recalculateWindowPositions(flags);
return;
}
let clones = this._windows.slice();
if (this._reservedSlot)
clones.push(this._reservedSlot);
let initialPositioning = flags & WindowPositionFlags.INITIAL;
let animate = flags & WindowPositionFlags.ANIMATE;
let initialPositioning = flags & WindowPositionFlags.INITIAL;
let animate = flags & WindowPositionFlags.ANIMATE;
let layout = this._currentLayout;
let strategy = layout.strategy;
// Start the animations
let targets = [];
let scales = [];
let [, , padding] = this._getSpacingAndPadding();
let area = Workspace.padArea(this._actualGeometry, padding);
[clones, targets] = this._calculateWindowTransformationsNatural(clones);
/// EDIT replace this version by our own:
//let slots = strategy.computeWindowSlots(layout, area);
let currentWorkspace = global.screen.get_active_workspace();
let isOnCurrentWorkspace = this.metaWorkspace == null || this.metaWorkspace == currentWorkspace;
for (let i = 0; i < clones.length; i++) {
let clone = clones[i];
let [x, y , scale] = targets[i];
let metaWindow = clone.metaWindow;
let mainIndex = this._lookupIndex(metaWindow);
let overlay = this._windowOverlays[mainIndex];
/// EDIT copied from _realRecalculateWindowPositions:
let clones = this._windows.slice();
if (clones.length == 0)
return;
// Positioning a window currently being dragged must be avoided;
// we'll just leave a blank spot in the layout for it.
if (clone.inDrag)
continue;
clones.sort(function(a, b) {
return a.metaWindow.get_stable_sequence() - b.metaWindow.get_stable_sequence();
});
if (overlay && initialPositioning)
overlay.hide();
if (animate && isOnCurrentWorkspace) {
if (!metaWindow.showing_on_its_workspace()) {
/* Hidden windows should fade in and grow
* therefore we need to resize them now so they
* can be scaled up later */
if (initialPositioning) {
clone.actor.opacity = 0;
clone.actor.scale_x = 0;
clone.actor.scale_y = 0;
clone.actor.x = x;
clone.actor.y = y;
}
if (this._reservedSlot)
clones.push(this._reservedSlot);
// Make the window slightly transparent to indicate it's hidden
Tweener.addTween(clone.actor,
{ opacity: 255,
time: Overview.ANIMATION_TIME,
transition: 'easeInQuad'
});
/// EDIT our own window placement function:
let slots = this._calculateWindowTransformationsNatural(clones, area);
let currentWorkspace = global.screen.get_active_workspace();
let isOnCurrentWorkspace = this.metaWorkspace == null || this.metaWorkspace == currentWorkspace;
for (let i = 0; i < slots.length; i++) {
let slot = slots[i];
let [x, y, scale, clone] = slot;
let metaWindow = clone.metaWindow;
let overlay = clone.overlay;
clone.slotId = i;
// Positioning a window currently being dragged must be avoided;
// we'll just leave a blank spot in the layout for it.
if (clone.inDrag)
continue;
let cloneWidth = clone.actor.width * scale;
let cloneHeight = clone.actor.height * scale;
clone.slot = [x, y, cloneWidth, cloneHeight];
if (overlay && (initialPositioning || !clone.positioned))
overlay.hide();
if (!clone.positioned) {
// This window appeared after the overview was already up
// Grow the clone from the center of the slot
clone.actor.x = x + cloneWidth / 2;
clone.actor.y = y + cloneHeight / 2;
clone.actor.scale_x = 0;
clone.actor.scale_y = 0;
clone.positioned = true;
}
this._animateClone(clone, overlay, x, y, scale, initialPositioning);
} else {
clone.actor.set_position(x, y);
clone.actor.set_scale(scale, scale);
this._updateWindowOverlayPositions(clone, overlay, x, y, scale, false);
this._showWindowOverlay(clone, overlay, isOnCurrentWorkspace);
if (animate && isOnCurrentWorkspace) {
if (!metaWindow.showing_on_its_workspace()) {
/* Hidden windows should fade in and grow
* therefore we need to resize them now so they
* can be scaled up later */
if (initialPositioning) {
clone.actor.opacity = 0;
clone.actor.scale_x = 0;
clone.actor.scale_y = 0;
clone.actor.x = x;
clone.actor.y = y;
}
Tweener.addTween(clone.actor,
{ opacity: 255,
time: Overview.ANIMATION_TIME,
transition: 'easeInQuad'
});
}
this._animateClone(clone, overlay, x, y, scale, initialPositioning);
} else {
// cancel any active tweens (otherwise they might override our changes)
Tweener.removeTweens(clone.actor);
clone.actor.set_position(x, y);
clone.actor.set_scale(scale, scale);
clone.overlay.relayout(false);
this._showWindowOverlay(clone, overlay, isOnCurrentWorkspace);
}
}
}
}
/// position window titles on top of windows in overlay ////
if (settings.get_boolean('window-captions-on-top')) {
winInjections['_init'] = Workspace.WindowOverlay.prototype._init;
Workspace.WindowOverlay.prototype._init = function(windowClone, parentActor) {
let metaWindow = windowClone.metaWindow;
if (windowCaptionsOnTop) {
this._windowClone = windowClone;
this._parentActor = parentActor;
this._hidden = false;
let title = new St.Label({ style_class: 'window-caption',
text: metaWindow.title });
title.clutter_text.ellipsize = Pango.EllipsizeMode.END;
title._spacing = 0;
title._overlap = 0;
this._updateCaptionId = metaWindow.connect('notify::title', Lang.bind(this, function(w) {
this.title.text = w.title;
}));
let button = new St.Button({ style_class: 'window-close' });
button._overlap = 0;
this._idleToggleCloseId = 0;
button.connect('clicked', Lang.bind(this, this._closeWindow));
windowClone.actor.connect('destroy', Lang.bind(this, this._onDestroy));
windowClone.actor.connect('enter-event', Lang.bind(this, this._onEnter));
windowClone.actor.connect('leave-event', Lang.bind(this, this._onLeave));
this._windowAddedId = 0;
windowClone.connect('zoom-start', Lang.bind(this, this.hide));
windowClone.connect('zoom-end', Lang.bind(this, this.show));
button.hide();
this.title = title;
this.closeButton = button;
parentActor.add_actor(this.title);
parentActor.add_actor(this.closeButton);
title.connect('style-changed', Lang.bind(this, this._onStyleChanged));
button.connect('style-changed', Lang.bind(this, this._onStyleChanged));
// force a style change if we are already on a stage - otherwise
// the signal will be emitted normally when we are added
if (parentActor.get_stage())
this._onStyleChanged();
},
winInjections['chromeHeights'] = Workspace.WindowOverlay.prototype.chromeHeights;
Workspace.WindowOverlay.prototype.chromeHeights = function () {
return [Math.max( this.closeButton.height - this.closeButton._overlap, this.title.height - this.title._overlap),
0];
},
winInjections['updatePositions'] = Workspace.WindowOverlay.prototype.updatePositions;
Workspace.WindowOverlay.prototype.updatePositions = function(cloneX, cloneY, cloneWidth, cloneHeight, animate) {
/// This is almost a direct copy of the original relayout function. Differences are marked.
winInjections['relayout'] = Workspace.WindowOverlay.prototype.relayout;
Workspace.WindowOverlay.prototype.relayout = function(animate) {
let button = this.closeButton;
let title = this.title;
let border = this.border;
Tweener.removeTweens(button);
Tweener.removeTweens(title);
Tweener.removeTweens(border);
let [cloneX, cloneY, cloneWidth, cloneHeight] = this._windowClone.slot;
let layout = Meta.prefs_get_button_layout();
let side = layout.left_buttons.indexOf(Meta.ButtonFunction.CLOSE) > -1 ? St.Side.LEFT : St.Side.RIGHT;
let buttonX;
let buttonY = cloneY - (button.height - button._overlap);
if (St.Widget.get_default_direction() == St.TextDirection.RTL)
buttonX = cloneX - (button.width - button._overlap);
if (side == St.Side.LEFT)
buttonX = cloneX - (button.width - button._overlap);
else
buttonX = cloneX + (cloneWidth - button._overlap);
buttonX = cloneX + (cloneWidth - button._overlap);
if (animate)
this._animateOverlayActor(button, Math.floor(buttonX), Math.floor(buttonY));
this._animateOverlayActor(button, Math.floor(buttonX), Math.floor(buttonY), button.width);
else
button.set_position(Math.floor(buttonX), Math.floor(buttonY));
if (!title.fullWidth)
title.fullWidth = title.width;
let titleWidth = Math.min(title.fullWidth, cloneWidth);
// Clutter.Actor.get_preferred_width() will return the fixed width if one
// is set, so we need to reset the width by calling set_width(-1), to forward
// the call down to StLabel.
// We also need to save and restore the current width, otherwise the animation
// starts from the wrong point.
let prevTitleWidth = title.width;
title.set_width(-1);
let [titleMinWidth, titleNatWidth] = title.get_preferred_width(-1);
let titleWidth = Math.max(titleMinWidth, Math.min(titleNatWidth, cloneWidth));
title.width = prevTitleWidth;
let titleX = cloneX + (cloneWidth - titleWidth) / 2;
let titleY = cloneY - title.height + title._overlap;
/// this is the actual difference to original gnome-shell:
//let titleY = cloneY + cloneHeight + title._spacing;
let titleY = cloneY - title.height + title._spacing;
if (animate)
this._animateOverlayActor(title, Math.floor(titleX), Math.floor(titleY));
this._animateOverlayActor(title, Math.floor(titleX), Math.floor(titleY), titleWidth);
else {
title.width = titleWidth;
title.set_position(Math.floor(titleX), Math.floor(titleY));
}
},
winInjections['_onStyleChanged'] = Workspace.WindowOverlay.prototype._onStyleChanged;
Workspace.WindowOverlay.prototype._onStyleChanged = function() {
let titleNode = this.title.get_theme_node();
this.title._spacing = titleNode.get_length('-shell-caption-spacing');
this.title._overlap = titleNode.get_length('-shell-caption-overlap');
let borderX = cloneX - this.borderSize;
let borderY = cloneY - this.borderSize;
let borderWidth = cloneWidth + 2 * this.borderSize;
let borderHeight = cloneHeight + 2 * this.borderSize;
let closeNode = this.closeButton.get_theme_node();
this.closeButton._overlap = closeNode.get_length('-shell-close-overlap');
this._parentActor.queue_relayout();
}
if (animate) {
this._animateOverlayActor(this.border, borderX, borderY,
borderWidth, borderHeight);
} else {
this.border.set_position(borderX, borderY);
this.border.set_size(borderWidth, borderHeight);
}
};
}
}
@@ -475,6 +480,8 @@ function removeInjection(object, injection, name) {
}
function disable() {
var i;
for (i in workspaceInjections)
removeInjection(Workspace.Workspace.prototype, workspaceInjections, i);
for (i in winInjections)
@@ -487,7 +494,6 @@ function disable() {
resetState();
}
function init(metadata) {
_metadata = metadata;
_me = imports.ui.extensionSystem.extensions[metadata.uuid];
function init() {
/* do nothing */
}

View File

@@ -1,7 +1,10 @@
{
"uuid": "@uuid@",
"extension-id": "@extension_id@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "Native Window Placement",
"description": "Arrange windows in overview in a more native way",
"description": "Arrange windows in overview in a more compact way.",
"shell-version": [ "@shell_current@" ],
"url": "@url@",
"original-authors": [ "wepmaschda@gmx.de" ]

View File

@@ -1,4 +1,9 @@
.window-caption {
color: red;
-shell-caption-overlap: 10px;
-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;
}

View File

@@ -1,3 +1,5 @@
EXTENSION_ID = places-menu
EXTRA_MODULES = placeDisplay.js
include ../../extension.mk

View File

@@ -1,6 +1,6 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const Gdk = imports.gi.Gdk;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Shell = imports.gi.Shell;
@@ -13,116 +13,122 @@ const Panel = imports.ui.panel;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const N_ = function(x) { return x; }
const PLACE_ICON_SIZE = 22;
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
const PlaceDisplay = Me.imports.placeDisplay;
function PlacesMenu() {
this._init.apply(this, arguments);
}
const PLACE_ICON_SIZE = 16;
PlacesMenu.prototype = {
__proto__: PanelMenu.SystemStatusButton.prototype,
const PlaceMenuItem = new Lang.Class({
Name: 'PlaceMenuItem',
Extends: PopupMenu.PopupBaseMenuItem,
_init: function(info) {
this.parent();
this._info = info;
this._icon = new St.Icon({ gicon: info.icon,
icon_size: PLACE_ICON_SIZE });
this.addActor(this._icon);
this._label = new St.Label({ text: info.name });
this.addActor(this._label);
this._changedId = info.connect('changed',
Lang.bind(this, this._propertiesChanged));
},
destroy: function() {
if (this._changedId) {
this._info.disconnect(this._changedId);
this._changedId = 0;
}
this.parent();
},
activate: function(event) {
this._info.launch(event.get_time());
this.parent(event);
},
_propertiesChanged: function(info) {
this._icon.gicon = info.icon;
this._label.text = info.name;
},
});
const SECTIONS = [
'special',
'devices',
'bookmarks',
'network'
]
const PlacesMenu = new Lang.Class({
Name: 'PlacesMenu.PlacesMenu',
Extends: PanelMenu.Button,
_init: function() {
PanelMenu.SystemStatusButton.prototype._init.call(this, 'folder');
let label = new St.Label({ text: _("Places") });
this.parent(0.0, label.text);
this.actor.add_actor(label);
this.defaultItems = [];
this.bookmarkItems = [];
this.deviceItems = [];
this._createDefaultPlaces();
this._bookmarksSection = new PopupMenu.PopupMenuSection();
this.menu.addMenuItem(this._bookmarksSection);
this._createBookmarks();
this._devicesMenuItem = new PopupMenu.PopupSubMenuMenuItem(_("Removable Devices"));
this.menu.addMenuItem(this._devicesMenuItem);
this._createDevices();
Main.placesManager.connect('bookmarks-updated',Lang.bind(this,this._redisplayBookmarks));
Main.placesManager.connect('mounts-updated',Lang.bind(this,this._redisplayDevices));
this.placesManager = new PlaceDisplay.PlacesManager();
this._sections = { };
for (let i=0; i < SECTIONS.length; i++) {
let id = SECTIONS[i];
this._sections[id] = new PopupMenu.PopupMenuSection();
this.placesManager.connect(id + '-updated', Lang.bind(this, function() {
this._redisplay(id);
}));
this._create(id);
this.menu.addMenuItem(this._sections[id]);
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
}
},
_redisplayBookmarks: function(){
this._clearBookmarks();
this._createBookmarks();
destroy: function() {
this.placesManager.destroy();
this.parent();
},
_redisplayDevices: function(){
this._clearDevices();
this._createDevices();
_redisplay: function(id) {
this._sections[id].removeAll();
this._create(id);
},
_createDefaultPlaces : function() {
this.defaultPlaces = Main.placesManager.getDefaultPlaces();
_create: function(id) {
let places = this.placesManager.get(id);
for (let placeid = 0; placeid < this.defaultPlaces.length; placeid++) {
this.defaultItems[placeid] = new PopupMenu.PopupMenuItem(this.defaultPlaces[placeid].name);
let icon = this.defaultPlaces[placeid].iconFactory(PLACE_ICON_SIZE);
this.defaultItems[placeid].addActor(icon, { align: St.Align.END });
this.defaultItems[placeid].place = this.defaultPlaces[placeid];
this.menu.addMenuItem(this.defaultItems[placeid]);
this.defaultItems[placeid].connect('activate', function(actor,event) {
actor.place.launch();
});
for (let i = 0; i < places.length; i++)
this._sections[id].addMenuItem(new PlaceMenuItem(places[i]));
}
},
this._sections[id].actor.visible = places.length > 0;
}
});
_createBookmarks : function() {
this.bookmarks = Main.placesManager.getBookmarks();
for (let bookmarkid = 0; bookmarkid < this.bookmarks.length; bookmarkid++) {
this.bookmarkItems[bookmarkid] = new PopupMenu.PopupMenuItem(this.bookmarks[bookmarkid].name);
let icon = this.bookmarks[bookmarkid].iconFactory(PLACE_ICON_SIZE);
this.bookmarkItems[bookmarkid].addActor(icon, { align: St.Align.END });
this.bookmarkItems[bookmarkid].place = this.bookmarks[bookmarkid];
this._bookmarksSection.addMenuItem(this.bookmarkItems[bookmarkid]);
this.bookmarkItems[bookmarkid].connect('activate', function(actor,event) {
actor.place.launch();
});
}
},
_createDevices : function() {
this.devices = Main.placesManager.getMounts();
for (let devid = 0; devid < this.devices.length; devid++) {
this.deviceItems[devid] = new PopupMenu.PopupMenuItem(this.devices[devid].name);
let icon = this.devices[devid].iconFactory(PLACE_ICON_SIZE);
this.deviceItems[devid].addActor(icon, { align: St.Align.END });
this.deviceItems[devid].place = this.devices[devid];
this._devicesMenuItem.menu.addMenuItem(this.deviceItems[devid]);
this.deviceItems[devid].connect('activate', function(actor,event) {
actor.place.launch();
});
}
if (this.devices.length == 0)
this._devicesMenuItem.actor.hide();
else
this._devicesMenuItem.actor.show();
},
_clearBookmarks : function(){
this._bookmarksSection.removeAll();
this.bookmarkItems = [];
},
_clearDevices : function(){
this._devicesMenuItem.menu.removeAll();
this.DeviceItems = [];
},
};
function init(metadata) {
let me = imports.ui.extensionSystem.extensions[metadata.uuid];
me.convenience.initTranslations(metadata);
function init() {
Convenience.initTranslations();
}
let _indicator;
function enable() {
_indicator = new PlacesMenu;
Main.panel.addToStatusArea('places-menu', _indicator);
let pos = 1;
if ('apps-menu' in Main.panel.statusArea)
pos = 2;
Main.panel.addToStatusArea('places-menu', _indicator, pos, 'left');
}
function disable() {

View File

@@ -1,7 +1,10 @@
{
"extension-id": "@extension_id@",
"uuid": "@uuid@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "Places Status Indicator",
"description": "Add a systems status menu for quickly navigating places in the system",
"description": "Add a menu for quickly navigating places in the system.\nThis extension is part of Classic Mode and is officially supported by GNOME. Please do not report bugs using the form below, use GNOME Bugzilla instead.",
"shell-version": [ "@shell_current@" ],
"url": "@url@"
}

View File

@@ -0,0 +1,448 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const Shell = imports.gi.Shell;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Signals = imports.signals;
const St = imports.gi.St;
const DND = imports.ui.dnd;
const Main = imports.ui.main;
const Params = imports.misc.params;
const Search = imports.ui.search;
const Util = imports.misc.util;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const N_ = function(x) { return x; }
const Hostname1Iface = <interface name="org.freedesktop.hostname1">
<property name="PrettyHostname" type="s" access="read" />
</interface>;
const Hostname1 = Gio.DBusProxy.makeProxyWrapper(Hostname1Iface);
const PlaceInfo = new Lang.Class({
Name: 'PlaceInfo',
_init: function(kind, file, name, icon) {
this.kind = kind;
this.file = file;
this.name = name || this._getFileName();
this.icon = icon ? new Gio.ThemedIcon({ name: icon }) : this.getIcon();
},
destroy: function() {
},
isRemovable: function() {
return false;
},
launch: function(timestamp) {
let launchContext = global.create_app_launch_context();
launchContext.set_timestamp(timestamp);
try {
Gio.AppInfo.launch_default_for_uri(this.file.get_uri(),
launchContext);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_MOUNTED)) {
this.file.mount_enclosing_volume(0, null, null, function(file, result) {
file.mount_enclosing_volume_finish(result);
Gio.AppInfo.launch_default_for_uri(file.get_uri(), launchContext);
});
} catch(e) {
Main.notifyError(_("Failed to launch \"%s\"").format(this.name), e.message);
}
},
getIcon: function() {
try {
let info = this.file.query_info('standard::symbolic-icon', 0, null);
return info.get_symbolic_icon();
} catch(e if e instanceof Gio.IOErrorEnum) {
// return a generic icon for this kind
switch (this.kind) {
case 'network':
return new Gio.ThemedIcon({ name: 'folder-remote-symbolic' });
case 'devices':
return new Gio.ThemedIcon({ name: 'drive-harddisk-symbolic' });
case 'special':
case 'bookmarks':
default:
if (!this.file.is_native())
return new Gio.ThemedIcon({ name: 'folder-remote-symbolic' });
else
return new Gio.ThemedIcon({ name: 'folder-symbolic' });
}
}
},
_getFileName: function() {
try {
let info = this.file.query_info('standard::display-name', 0, null);
return info.get_display_name();
} catch(e if e instanceof Gio.IOErrorEnum) {
return this.file.get_basename();
}
},
});
Signals.addSignalMethods(PlaceInfo.prototype);
const RootInfo = new Lang.Class({
Name: 'RootInfo',
Extends: PlaceInfo,
_init: function() {
this.parent('devices', Gio.File.new_for_path('/'), _("Computer"));
this._proxy = new Hostname1(Gio.DBus.system,
'org.freedesktop.hostname1',
'/org/freedesktop/hostname1',
Lang.bind(this, function(obj, error) {
if (error)
return;
this._proxy.connect('g-properties-changed',
Lang.bind(this, this._propertiesChanged));
this._propertiesChanged(obj);
}));
},
getIcon: function() {
return new Gio.ThemedIcon({ name: 'drive-harddisk-symbolic' });
},
_propertiesChanged: function(proxy) {
// GDBusProxy will emit a g-properties-changed when hostname1 goes down
// ignore it
if (proxy.g_name_owner) {
this.name = proxy.PrettyHostname || _("Computer");
this.emit('changed');
}
},
destroy: function() {
this._proxy.run_dispose();
this.parent();
}
});
const PlaceDeviceInfo = new Lang.Class({
Name: 'PlaceDeviceInfo',
Extends: PlaceInfo,
_init: function(kind, mount) {
this._mount = mount;
this.parent(kind, mount.get_root(), mount.get_name());
},
getIcon: function() {
return this._mount.get_symbolic_icon();
}
});
const PlaceVolumeInfo = new Lang.Class({
Name: 'PlaceVolumeInfo',
Extends: PlaceInfo,
_init: function(kind, volume) {
this._volume = volume;
this.parent(kind, volume.get_activation_root(), volume.get_name());
},
launch: function(timestamp) {
if (this.file) {
this.parent(timestamp);
return;
}
this._volume.mount(0, null, null, Lang.bind(this, function(volume, result) {
volume.mount_finish(result);
let mount = volume.get_mount();
this.file = mount.get_root();
this.parent(timestamp);
}));
},
getIcon: function() {
return this._volume.get_symbolic_icon();
}
});
const DEFAULT_DIRECTORIES = [
GLib.UserDirectory.DIRECTORY_DOCUMENTS,
GLib.UserDirectory.DIRECTORY_PICTURES,
GLib.UserDirectory.DIRECTORY_MUSIC,
GLib.UserDirectory.DIRECTORY_DOWNLOAD,
GLib.UserDirectory.DIRECTORY_VIDEOS,
];
const PlacesManager = new Lang.Class({
Name: 'PlacesManager',
_init: function() {
this._places = {
special: [],
devices: [],
bookmarks: [],
network: [],
};
let homePath = GLib.get_home_dir();
this._places.special.push(new PlaceInfo('special',
Gio.File.new_for_path(homePath),
_("Home")));
let specials = [];
for (let i = 0; i < DEFAULT_DIRECTORIES.length; i++) {
let specialPath = GLib.get_user_special_dir(DEFAULT_DIRECTORIES[i]);
if (specialPath == homePath)
continue;
let file = Gio.File.new_for_path(specialPath), info;
try {
info = new PlaceInfo('special', file);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) {
continue;
}
specials.push(info);
}
specials.sort(function(a, b) {
return GLib.utf8_collate(a.name, b.name);
});
this._places.special = this._places.special.concat(specials);
/*
* Show devices, code more or less ported from nautilus-places-sidebar.c
*/
this._volumeMonitor = Gio.VolumeMonitor.get();
this._connectVolumeMonitorSignals();
this._updateMounts();
this._bookmarksFile = this._findBookmarksFile()
this._bookmarkTimeoutId = 0;
this._monitor = null;
if (this._bookmarksFile) {
this._monitor = this._bookmarksFile.monitor_file(Gio.FileMonitorFlags.NONE, null);
this._monitor.connect('changed', Lang.bind(this, function () {
if (this._bookmarkTimeoutId > 0)
return;
/* Defensive event compression */
this._bookmarkTimeoutId = Mainloop.timeout_add(100, Lang.bind(this, function () {
this._bookmarkTimeoutId = 0;
this._reloadBookmarks();
return false;
}));
}));
this._reloadBookmarks();
}
},
_connectVolumeMonitorSignals: function() {
const signals = ['volume-added', 'volume-removed', 'volume-changed',
'mount-added', 'mount-removed', 'mount-changed',
'drive-connected', 'drive-disconnected', 'drive-changed'];
this._volumeMonitorSignals = [];
let func = Lang.bind(this, this._updateMounts);
for (let i = 0; i < signals.length; i++) {
let id = this._volumeMonitor.connect(signals[i], func);
this._volumeMonitorSignals.push(id);
}
},
destroy: function() {
for (let i = 0; i < this._volumeMonitorSignals.length; i++)
this._volumeMonitor.disconnect(this._volumeMonitorSignals[i]);
if (this._monitor)
this._monitor.cancel();
if (this._bookmarkTimeoutId)
Mainloop.source_remove(this._bookmarkTimeoutId);
},
_updateMounts: function() {
let networkMounts = [];
let networkVolumes = [];
this._places.devices.forEach(function (p) { p.destroy(); });
this._places.devices = [];
this._places.network.forEach(function (p) { p.destroy(); });
this._places.network = [];
/* Add standard places */
this._places.devices.push(new RootInfo());
this._places.network.push(new PlaceInfo('network',
Gio.File.new_for_uri('network:///'),
_("Browse Network"),
'network-workgroup-symbolic'));
/* first go through all connected drives */
let drives = this._volumeMonitor.get_connected_drives();
for (let i = 0; i < drives.length; i++) {
let volumes = drives[i].get_volumes();
for(let j = 0; j < volumes.length; j++) {
let identifier = volumes[j].get_identifier('class');
if (identifier && identifier.indexOf('network') >= 0) {
networkVolumes.push(volumes[j]);
} else {
let mount = volumes[j].get_mount();
if(mount != null)
this._addMount('devices', mount);
}
}
}
/* add all volumes that is not associated with a drive */
let volumes = this._volumeMonitor.get_volumes();
for(let i = 0; i < volumes.length; i++) {
if(volumes[i].get_drive() != null)
continue;
let identifier = volumes[i].get_identifier('class');
if (identifier && identifier.indexOf('network') >= 0) {
networkVolumes.push(volumes[i]);
} else {
let mount = volumes[i].get_mount();
if(mount != null)
this._addMount('devices', mount);
}
}
/* add mounts that have no volume (/etc/mtab mounts, ftp, sftp,...) */
let mounts = this._volumeMonitor.get_mounts();
for(let i = 0; i < mounts.length; i++) {
if(mounts[i].is_shadowed())
continue;
if(mounts[i].get_volume())
continue;
let root = mounts[i].get_default_location();
if (!root.is_native()) {
networkMounts.push(mounts[i]);
continue;
}
this._addMount('devices', mounts[i]);
}
for (let i = 0; i < networkVolumes.length; i++) {
let mount = networkVolumes[i].get_mount();
if (mount) {
networkMounts.push(mount);
continue;
}
this._addVolume('network', networkVolumes[i]);
}
for (let i = 0; i < networkMounts.length; i++) {
this._addMount('network', networkMounts[i]);
}
this.emit('devices-updated');
this.emit('network-updated');
},
_findBookmarksFile: function() {
let paths = [
GLib.build_filenamev([GLib.get_user_config_dir(), 'gtk-3.0', 'bookmarks']),
GLib.build_filenamev([GLib.get_home_dir(), '.gtk-bookmarks']),
];
for (let i = 0; i < paths.length; i++) {
if (GLib.file_test(paths[i], GLib.FileTest.EXISTS))
return Gio.File.new_for_path(paths[i]);
}
return null;
},
_reloadBookmarks: function() {
this._bookmarks = [];
let content = Shell.get_file_contents_utf8_sync(this._bookmarksFile.get_path());
let lines = content.split('\n');
let bookmarks = [];
for (let i = 0; i < lines.length; i++) {
let line = lines[i];
let components = line.split(' ');
let bookmark = components[0];
if (!bookmark)
continue;
let file = Gio.File.new_for_uri(bookmark);
if (file.is_native() && !file.query_exists(null))
continue;
let duplicate = false;
for (let i = 0; i < this._places.special.length; i++) {
if (file.equal(this._places.special[i].file)) {
duplicate = true;
break;
}
}
if (duplicate)
continue;
for (let i = 0; i < bookmarks.length; i++) {
if (file.equal(bookmarks[i].file)) {
duplicate = true;
break;
}
}
if (duplicate)
continue;
let label = null;
if (components.length > 1)
label = components.slice(1).join(' ');
bookmarks.push(new PlaceInfo('bookmarks', file, label));
}
this._places.bookmarks = bookmarks;
this.emit('bookmarks-updated');
},
_addMount: function(kind, mount) {
let devItem;
try {
devItem = new PlaceDeviceInfo(kind, mount);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) {
return;
}
this._places[kind].push(devItem);
},
_addVolume: function(kind, volume) {
let volItem;
try {
volItem = new PlaceVolumeInfo(kind, volume);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) {
return;
}
this._places[kind].push(volItem);
},
get: function (kind) {
return this._places[kind];
}
});
Signals.addSignalMethods(PlacesManager.prototype);

View File

@@ -8,31 +8,38 @@ const St = imports.gi.St;
const Shell = imports.gi.Shell;
const Main = imports.ui.main;
const Tweener = imports.ui.tweener;
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;
const INDICATOR_UPDATE_INTERVAL = 500;
const INDICATOR_NUM_GRID_LINES = 3;
let _cpuIndicator;
let _memIndicator;
let _box;
const ITEM_LABEL_SHOW_TIME = 0.15;
const ITEM_LABEL_HIDE_TIME = 0.1;
const ITEM_HOVER_TIMEOUT = 300;
function Indicator() {
this._init();
}
const Indicator = new Lang.Class({
Name: 'SystemMonitor.Indicator',
Indicator.prototype = {
_init: function() {
this._initValues();
this.drawing_area = new St.DrawingArea({ reactive: true });
this.drawing_area.width = 100; this.drawing_area.height = 100;
this.drawing_area.connect('repaint', Lang.bind(this, this._draw));
this.drawing_area.connect('button-press-event', function() {
let app = Shell.AppSystem.get_default().lookup_app('gnome-system-monitor.desktop');
app.open_new_window(-1);
return true;
});
this.actor = new St.Bin({ style_class: "extension-systemMonitor-indicator-area",
reactive: true});
reactive: true, track_hover: true,
x_fill: true, y_fill: true });
this.actor.add_actor(this.drawing_area);
this._timeout = Mainloop.timeout_add(INDICATOR_UPDATE_INTERVAL, Lang.bind(this, function () {
@@ -42,9 +49,63 @@ Indicator.prototype = {
}));
},
showLabel: function() {
if (this.label == null)
return;
this.label.opacity = 0;
this.label.show();
let [stageX, stageY] = this.actor.get_transformed_position();
let itemWidth = this.actor.allocation.x2 - this.actor.allocation.x1;
let itemHeight = this.actor.allocation.y2 - this.actor.allocation.y1;
let labelWidth = this.label.width;
let labelHeight = this.label.height;
let xOffset = Math.floor((itemWidth - labelWidth) / 2)
let x = stageX + xOffset;
let node = this.label.get_theme_node();
let yOffset = node.get_length('-y-offset');
let y = stageY - this.label.get_height() - yOffset;
this.label.set_position(x, y);
Tweener.addTween(this.label,
{ opacity: 255,
time: ITEM_LABEL_SHOW_TIME,
transition: 'easeOutQuad',
});
},
setLabelText: function(text) {
if (this.label == null)
this.label = new St.Label({ style_class: 'extension-systemMonitor-indicator-label'});
this.label.set_text(text);
Main.layoutManager.addChrome(this.label);
this.label.hide();
},
hideLabel: function () {
Tweener.addTween(this.label,
{ opacity: 0,
time: ITEM_LABEL_HIDE_TIME,
transition: 'easeOutQuad',
onComplete: Lang.bind(this, function() {
this.label.hide();
})
});
},
destroy: function() {
Mainloop.source_remove(this._timeout);
this.actor.destroy();
if (this.label)
this.label.destroy();
},
_initValues: function() {
@@ -131,20 +192,16 @@ Indicator.prototype = {
cr.setDash([], 0);
cr.stroke();
}
}
});
};
function CpuIndicator() {
this._init();
}
CpuIndicator.prototype = {
__proto__: Indicator.prototype,
const CpuIndicator = new Lang.Class({
Name: 'SystemMonitor.CpuIndicator',
Extends: Indicator,
_init: function() {
Indicator.prototype._init.call(this);
this.parent();
this.gridColor = '-grid-color';
this.renderStats = [ 'cpu-user', 'cpu-sys', 'cpu-iowait' ];
@@ -153,6 +210,8 @@ CpuIndicator.prototype = {
this.renderStats = this.renderStats.sort(function(a,b) {
return renderStatOrder[a] - renderStatOrder[b];
});
this.setLabelText(_("CPU"));
},
_initValues: function() {
@@ -187,17 +246,15 @@ CpuIndicator.prototype = {
this._prev = cpu;
}
};
});
function MemoryIndicator() {
this._init();
}
MemoryIndicator.prototype = {
__proto__: Indicator.prototype,
const MemoryIndicator = new Lang.Class({
Name: 'SystemMonitor.MemoryIndicator',
Extends: Indicator,
_init: function() {
Indicator.prototype._init.call(this);
this.parent();
this.gridColor = '-grid-color';
this.renderStats = [ 'mem-user', 'mem-other', 'mem-cached' ];
@@ -206,6 +263,8 @@ MemoryIndicator.prototype = {
this.renderStats = this.renderStats.sort(function(a,b) {
return renderStatOrder[a] - renderStatOrder[b];
});
this.setLabelText(_("Memory"));
},
_initValues: function() {
@@ -227,25 +286,76 @@ MemoryIndicator.prototype = {
t += this.mem.cached / this.mem.total;
this.stats['mem-cached'].values.push(t);
}
};
});
const INDICATORS = [CpuIndicator, MemoryIndicator];
const Extension = new Lang.Class({
Name: 'SystemMonitor.Extension',
_init: function() {
Convenience.initTranslations();
this._showLabelTimeoutId = 0;
this._resetHoverTimeoutId = 0;
this._labelShowing = false;
},
enable: function() {
this._box = new St.BoxLayout({ style_class: 'extension-systemMonitor-container',
x_align: Clutter.ActorAlign.START,
x_expand: true });
this._indicators = [ ];
for (let i = 0; i < INDICATORS.length; i++) {
let indicator = new (INDICATORS[i])();
indicator.actor.connect('notify::hover', Lang.bind(this, function() {
this._onHover(indicator);
}));
this._box.add_actor(indicator.actor);
this._indicators.push(indicator);
}
Main.messageTray.actor.add_actor(this._box);
},
disable: function() {
this._indicators.forEach(function(i) { i.destroy(); });
this._box.destroy();
},
_onHover: function (item) {
if (item.actor.get_hover()) {
if (this._showLabelTimeoutId == 0) {
let timeout = this._labelShowing ? 0 : ITEM_HOVER_TIMEOUT;
this._showLabelTimeoutId = Mainloop.timeout_add(timeout,
Lang.bind(this, function() {
this._labelShowing = true;
item.showLabel();
return false;
}));
if (this._resetHoverTimeoutId > 0) {
Mainloop.source_remove(this._resetHoverTimeoutId);
this._resetHoverTimeoutId = 0;
}
}
} else {
if (this._showLabelTimeoutId > 0)
Mainloop.source_remove(this._showLabelTimeoutId);
this._showLabelTimeoutId = 0;
item.hideLabel();
if (this._labelShowing) {
this._resetHoverTimeoutId = Mainloop.timeout_add(ITEM_HOVER_TIMEOUT,
Lang.bind(this, function() {
this._labelShowing = false;
return false;
}));
}
}
},
});
function init() {
// nothing to do here
}
function enable() {
_cpuIndicator = new CpuIndicator();
_memIndicator = new MemoryIndicator();
_box = new St.BoxLayout({ style_class: 'extension-systemMonitor-container' });
_box.add(_cpuIndicator.actor);
_box.add(_memIndicator.actor);
Main.messageTray.actor.add_actor(_box);
}
function disable() {
_cpuIndicator.destroy();
_cpuIndicator = null;
_memIndicator.destroy();
_memIndicator = null;
_box.destroy();
return new Extension();
}

View File

@@ -1,8 +1,11 @@
{
"shell-version": ["@shell_current@" ],
"uuid": "@uuid@",
"extension-id": "@extension_id@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"original-author": "zaspire@rambler.ru",
"name": "SystemMonitor",
"description": "System Monitor",
"description": "System monitor showing CPU and memory usage in the message tray.",
"url": "@url@"
}

View File

@@ -2,15 +2,17 @@
spacing: 5px;
padding-left: 5px;
padding-right: 5px;
padding-bottom: 1px;
padding-top: 0px;
padding-bottom: 10px;
padding-top: 10px;
}
.extension-systemMonitor-indicator-area {
border: 1px solid #8d8d8d;
border-radius: 3px;
width: 100px;
height: 30px;
/* message tray is 72px, so 20px padding of the container,
2px of border, makes it 50px */
height: 50px;
-grid-color: #575757;
-cpu-total-color: rgb(0,154,62);
-cpu-user-color: rgb(69,154,0);
@@ -21,3 +23,13 @@
-mem-other-color: rgb(205,203,41);
background-color: #1e1e1e;
}
.extension-systemMonitor-indicator-label {
border-radius: 7px;
padding: 4px 12px;
background-color: rgba(0,0,0,0.9);
text-align: center;
-y-offset: 8px;
font-size: 9pt;
font-weight: bold;
}

View File

@@ -1,14 +1,5 @@
EXTENSION_ID = user-theme
include ../../extension.mk
include ../../settings.mk
gschemas_in = $(gschemabase).user-theme.gschema.xml.in
@INTLTOOL_XML_NOMERGE_RULE@
gsettings_SCHEMAS = $(gschemas_in:.xml.in=.xml)
@GSETTINGS_RULES@
CLEANFILES += $(gschemas_in:.xml.in=.valid) $(gsettings_SCHEMAS)
EXTRA_DIST += $(gschemas_in)

View File

@@ -6,17 +6,17 @@ const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Main = imports.ui.main;
const SETTINGS_SCHEMA = 'org.gnome.shell.extensions.user-theme';
const SETTINGS_KEY = 'name';
function ThemeManager() {
this._init.apply(this, arguments);
}
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
ThemeManager.prototype = {
_init: function(metadata) {
let me = imports.ui.extensionSystem.extensions[metadata.uuid];
this._settings = me.convenience.getSettings(metadata, 'user-theme');
const ThemeManager = new Lang.Class({
Name: 'UserTheme.ThemeManager',
_init: function() {
this._settings = Convenience.getSettings();
},
enable: function() {
@@ -45,6 +45,7 @@ ThemeManager.prototype = {
_stylesheet = _userCssStylesheet;
else {
let sysdirs = GLib.get_system_data_dirs();
sysdirs.unshift(GLib.get_user_data_dir());
for (let i = 0; i < sysdirs.length; i++) {
_userCssStylesheet = sysdirs[i] + '/themes/' + _themeName + '/gnome-shell/gnome-shell.css';
let file = Gio.file_new_for_path(_userCssStylesheet);
@@ -63,9 +64,8 @@ ThemeManager.prototype = {
Main.setThemeStylesheet(_stylesheet);
Main.loadTheme();
}
}
});
function init(metadata) {
return new ThemeManager(metadata);
function init() {
return new ThemeManager();
}

View File

@@ -1,7 +1,10 @@
{
"uuid": "@uuid@",
"extension-id": "@extension_id@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "User Themes",
"description": "Load shell themes from user directory",
"description": "Load shell themes from user directory.",
"shell-version": [ "@shell_current@" ],
"original-authors": [ "john.stowers@gmail.com" ],
"url": "@url@"

View File

@@ -0,0 +1,10 @@
EXTENSION_ID = window-list
EXTRA_MODULES = prefs.js
if CLASSIC_MODE
EXTRA_MODULES += classic.css
endif
include ../../extension.mk
include ../../settings.mk

View File

@@ -0,0 +1,44 @@
@import url("stylesheet.css");
#panel.bottom-panel {
border-top-width: 1px;
border-bottom-width: 0px;
height: 32px !important;
}
.bottom-panel .window-button > StWidget {
background-color: #e9e9e9 !important;
background-gradient-direction: vertical;
background-gradient-end: #d0d0d0;
color: #555 !important;
border-radius: 2px !important;
padding: 4px 6px 2px !important;
text-shadow: 0 0 transparent;
box-shadow: inset -1px -1px 1px rgba(0,0,0,0.5) !important;
}
.bottom-panel .window-button:hover > StWidget {
background-color: #f9f9f9 !important;
background-gradient-end: #e0e0e0;
}
.bottom-panel .window-button:active > StWidget {
box-shadow: inset 1px 1px 2px rgba(0,0,0,0.5) !important;
}
.bottom-panel .window-button.focused > StWidget {
background-color: #a9a9a9 !important;
background-gradient-end: #b0b0b0;
box-shadow: inset 1px 1px 2px rgba(0,0,0,0.5) !important;
}
.bottom-panel .window-button.focused:hover > StWidget {
background-color: #b9b9b9 !important;
background-gradient-end: #c0c0c0;
}
.bottom-panel .window-button.minimized > StWidget {
color: #888 !important;
box-shadow: inset -1px -1px 1px rgba(0,0,0,0.4) !important;
}

View File

@@ -0,0 +1,862 @@
const Clutter = imports.gi.Clutter;
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const Gtk = imports.gi.Gtk;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const DND = imports.ui.dnd;
const Hash = imports.misc.hash;
const Lang = imports.lang;
const Main = imports.ui.main;
const MessageTray = imports.ui.messageTray;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
const ICON_TEXTURE_SIZE = 24;
const DND_ACTIVATE_TIMEOUT = 500;
const GroupingMode = {
NEVER: 0,
AUTO: 1,
ALWAYS: 2
};
function _minimizeOrActivateWindow(window) {
let focusWindow = global.display.focus_window;
if (focusWindow == window ||
focusWindow && focusWindow.get_transient_for() == window)
window.minimize();
else
window.activate(global.get_current_time());
}
const WindowTitle = new Lang.Class({
Name: 'WindowTitle',
_init: function(metaWindow) {
this._metaWindow = metaWindow;
this.actor = new St.BoxLayout();
let app = Shell.WindowTracker.get_default().get_window_app(metaWindow);
this._icon = new St.Bin({ style_class: 'window-button-icon',
child: app.create_icon_texture(ICON_TEXTURE_SIZE) });
this.actor.add(this._icon);
this._label = new St.Label();
this.actor.add(this._label);
this._textureCache = St.TextureCache.get_default();
this._iconThemeChangedId =
this._textureCache.connect('icon-theme-changed', Lang.bind(this,
function() {
this._icon.child = app.create_icon_texture(ICON_TEXTURE_SIZE);
}));
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._notifyTitleId =
this._metaWindow.connect('notify::title',
Lang.bind(this, this._updateTitle));
this._notifyMinimizedId =
this._metaWindow.connect('notify::minimized',
Lang.bind(this, this._minimizedChanged));
this._minimizedChanged();
},
_minimizedChanged: function() {
this._icon.opacity = this._metaWindow.minimized ? 128 : 255;
this._updateTitle();
},
_updateTitle: function() {
if (this._metaWindow.minimized)
this._label.text = '[%s]'.format(this._metaWindow.title);
else
this._label.text = this._metaWindow.title;
},
_onDestroy: function() {
this._textureCache.disconnect(this._iconThemeChangedId);
this._metaWindow.disconnect(this._notifyTitleId);
this._metaWindow.disconnect(this._notifyMinimizedId);
}
});
const WindowButton = new Lang.Class({
Name: 'WindowButton',
_init: function(metaWindow) {
this.metaWindow = metaWindow;
this._windowTitle = new WindowTitle(this.metaWindow);
this.actor = new St.Button({ style_class: 'window-button',
x_fill: true,
can_focus: true,
child: this._windowTitle.actor });
this.actor._delegate = this;
this.actor.connect('allocation-changed',
Lang.bind(this, this._updateIconGeometry));
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._switchWorkspaceId =
global.window_manager.connect('switch-workspace',
Lang.bind(this, this._updateVisibility));
this._updateVisibility();
this._notifyFocusId =
global.display.connect('notify::focus-window',
Lang.bind(this, this._updateStyle));
this._updateStyle();
},
_onClicked: function() {
_minimizeOrActivateWindow(this.metaWindow);
},
_updateStyle: function() {
if (this.metaWindow.minimized)
this.actor.add_style_class_name('minimized');
else
this.actor.remove_style_class_name('minimized');
if (global.display.focus_window == this.metaWindow)
this.actor.add_style_class_name('focused');
else
this.actor.remove_style_class_name('focused');
},
_updateVisibility: function() {
let workspace = global.screen.get_active_workspace();
this.actor.visible = this.metaWindow.located_on_workspace(workspace);
},
_updateIconGeometry: function() {
let rect = new Meta.Rectangle();
[rect.x, rect.y] = this.actor.get_transformed_position();
[rect.width, rect.height] = this.actor.get_transformed_size();
this.metaWindow.set_icon_geometry(rect);
},
_onDestroy: function() {
global.window_manager.disconnect(this._switchWorkspaceId);
global.display.disconnect(this._notifyFocusId);
}
});
const AppButton = new Lang.Class({
Name: 'AppButton',
_init: function(app) {
this.app = app;
let stack = new St.Widget({ layout_manager: new Clutter.BinLayout() });
this.actor = new St.Button({ style_class: 'window-button',
x_fill: true,
can_focus: true,
child: stack });
this.actor._delegate = this;
this.actor.connect('allocation-changed',
Lang.bind(this, this._updateIconGeometry));
this._singleWindowTitle = new St.Bin({ x_expand: true,
x_align: St.Align.START });
stack.add_actor(this._singleWindowTitle);
this._multiWindowTitle = new St.BoxLayout({ x_expand: true });
stack.add_actor(this._multiWindowTitle);
this._icon = new St.Bin({ style_class: 'window-button-icon',
child: app.create_icon_texture(ICON_TEXTURE_SIZE) });
this._multiWindowTitle.add(this._icon);
this._multiWindowTitle.add(new St.Label({ text: app.get_name() }));
this._menuManager = new PopupMenu.PopupMenuManager(this);
this._menu = new PopupMenu.PopupMenu(this.actor, 0.5, St.Side.BOTTOM);
this._menu.actor.hide();
this._menu.connect('activate', Lang.bind(this, this._onMenuActivate));
this._menuManager.addMenu(this._menu);
Main.uiGroup.add_actor(this._menu.actor);
this._textureCache = St.TextureCache.get_default();
this._iconThemeChangedId =
this._textureCache.connect('icon-theme-changed', Lang.bind(this,
function() {
this._icon.child = app.create_icon_texture(ICON_TEXTURE_SIZE);
}));
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._switchWorkspaceId =
global.window_manager.connect('switch-workspace',
Lang.bind(this, this._updateVisibility));
this._updateVisibility();
this._windowsChangedId =
this.app.connect('windows-changed',
Lang.bind(this, this._windowsChanged));
this._windowsChanged();
this._windowTracker = Shell.WindowTracker.get_default();
this._notifyFocusId =
this._windowTracker.connect('notify::focus-app',
Lang.bind(this, this._updateStyle));
this._updateStyle();
},
_updateVisibility: function() {
let workspace = global.screen.get_active_workspace();
this.actor.visible = this.app.is_on_workspace(workspace);
},
_updateStyle: function() {
if (this._windowTracker.focus_app == this.app)
this.actor.add_style_class_name('focused');
else
this.actor.remove_style_class_name('focused');
},
_updateIconGeometry: function() {
let rect = new Meta.Rectangle();
[rect.x, rect.y] = this.actor.get_transformed_position();
[rect.width, rect.height] = this.actor.get_transformed_size();
let windows = this.app.get_windows();
windows.forEach(function(w) {
w.set_icon_geometry(rect);
});
},
_getWindowList: function() {
let workspace = global.screen.get_active_workspace();
return this.app.get_windows().filter(function(win) {
return win.located_on_workspace(workspace);
});
},
_windowsChanged: function() {
let windows = this._getWindowList();
this._singleWindowTitle.visible = windows.length == 1;
this._multiWindowTitle.visible = !this._singleWindowTitle.visible;
if (this._singleWindowTitle.visible) {
if (!this._windowTitle) {
this.metaWindow = windows[0];
this._windowTitle = new WindowTitle(this.metaWindow);
this._singleWindowTitle.child = this._windowTitle.actor;
}
} else {
if (this._windowTitle) {
this.metaWindow = null;
this._singleWindowTitle.child = null;
this._windowTitle = null;
}
}
},
_onClicked: function() {
if (this._menu.isOpen) {
this._menu.close();
return;
}
let windows = this._getWindowList();
if (windows.length == 1) {
_minimizeOrActivateWindow(windows[0]);
} else {
this._menu.removeAll();
for (let i = 0; i < windows.length; i++) {
let windowTitle = new WindowTitle(windows[i]);
let item = new PopupMenu.PopupBaseMenuItem();
item.addActor(windowTitle.actor);
item._window = windows[i];
this._menu.addMenuItem(item);
}
this._menu.open();
let event = Clutter.get_current_event();
if (event && event.type() == Clutter.EventType.KEY_RELEASE)
this._menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
}
},
_onMenuActivate: function(menu, child) {
child._window.activate(global.get_current_time());
},
_onDestroy: function() {
this._textureCache.disconnect(this._iconThemeChangedId);
global.window_manager.disconnect(this._switchWorkspaceId);
this._windowTracker.disconnect(this._notifyFocusId);
this.app.disconnect(this._windowsChangedId);
this._menu.actor.destroy();
}
});
const TrayButton = new Lang.Class({
Name: 'TrayButton',
_init: function() {
this._counterLabel = new St.Label({ x_align: Clutter.ActorAlign.CENTER,
x_expand: true,
y_align: Clutter.ActorAlign.CENTER,
y_expand: true });
this.actor = new St.Button({ style_class: 'summary-source-counter',
child: this._counterLabel,
layoutManager: new Clutter.BinLayout() });
this.actor.set_x_align(Clutter.ActorAlign.END);
this.actor.set_x_expand(true);
this.actor.set_y_expand(true);
this.actor.connect('clicked', Lang.bind(this,
function() {
if (Main.messageTray._trayState == MessageTray.State.HIDDEN)
Main.messageTray.toggle();
}));
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._trayItemCount = 0;
Main.messageTray.getSources().forEach(Lang.bind(this,
function(source) {
this._sourceAdded(Main.messageTray, source);
}));
this._sourceAddedId =
Main.messageTray.connect('source-added',
Lang.bind(this, this._sourceAdded));
this._sourceRemovedId =
Main.messageTray.connect('source-removed',
Lang.bind(this, this._sourceRemoved));
this._updateVisibility();
},
_sourceAdded: function(tray, source) {
this._trayItemCount++;
this._updateVisibility();
},
_sourceRemoved: function(source) {
this._trayItemCount--;
this.actor.checked = false;
this._updateVisibility();
},
_updateVisibility: function() {
this._counterLabel.text = this._trayItemCount.toString();
this.actor.visible = this._trayItemCount > 0;
},
_onDestroy: function() {
Main.messageTray.getSources().forEach(Lang.bind(this,
function(source) {
if (!source._windowListDestroyId)
return;
source.disconnect(source._windowListDestroyId)
delete source._windowListDestroyId;
}));
Main.messageTray.disconnect(this._sourceAddedId);
Main.messageTray.disconnect(this._sourceRemovedId);
}
});
const WorkspaceIndicator = new Lang.Class({
Name: 'WindowList.WorkspaceIndicator',
Extends: PanelMenu.Button,
_init: function(){
this.parent(0.0, _("Workspace Indicator"));
this.actor.add_style_class_name('window-list-workspace-indicator');
this._currentWorkspace = global.screen.get_active_workspace().index();
this.statusLabel = new St.Label({ text: this._getStatusText() });
this.actor.add_actor(this.statusLabel);
this.workspacesItems = [];
this._screenSignals = [];
this._screenSignals.push(global.screen.connect('notify::n-workspaces', Lang.bind(this,this._updateMenu)));
this._screenSignals.push(global.screen.connect_after('workspace-switched', Lang.bind(this,this._updateIndicator)));
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
this._updateMenu();
this._settings = new Gio.Settings({ schema: 'org.gnome.desktop.wm.preferences' });
this._settingsChangedId = this._settings.connect('changed::workspace-names', Lang.bind(this, this._updateMenu));
},
destroy: function() {
for (let i = 0; i < this._screenSignals.length; i++)
global.screen.disconnect(this._screenSignals[i]);
if (this._settingsChangedId) {
this._settings.disconnect(this._settingsChangedId);
this._settingsChangedId = 0;
}
this.parent();
},
_updateIndicator: function() {
this.workspacesItems[this._currentWorkspace].setOrnament(PopupMenu.Ornament.NONE);
this._currentWorkspace = global.screen.get_active_workspace().index();
this.workspacesItems[this._currentWorkspace].setOrnament(PopupMenu.Ornament.DOT);
this.statusLabel.set_text(this._getStatusText());
},
_getStatusText: function() {
let current = global.screen.get_active_workspace().index();
let total = global.screen.n_workspaces;
return '%d / %d'.format(current + 1, total);
},
_updateMenu: function() {
this.menu.removeAll();
this.workspacesItems = [];
this._currentWorkspace = global.screen.get_active_workspace().index();
for(let i = 0; i < global.screen.n_workspaces; i++) {
let name = Meta.prefs_get_workspace_name(i);
let item = new PopupMenu.PopupMenuItem(name);
item.workspaceId = i;
item.connect('activate', Lang.bind(this, function(item, event) {
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());
},
_activate: function(index) {
if(index >= 0 && index < global.screen.n_workspaces) {
let metaWorkspace = global.screen.get_workspace_by_index(index);
metaWorkspace.activate(global.get_current_time());
}
},
_onScrollEvent: function(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);
},
});
const WindowList = new Lang.Class({
Name: 'WindowList',
_init: function() {
this.actor = new St.Widget({ name: 'panel',
style_class: 'bottom-panel',
reactive: true,
track_hover: true,
layout_manager: new Clutter.BinLayout()});
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
let box = new St.BoxLayout({ x_expand: true, y_expand: true });
this.actor.add_actor(box);
let layout = new Clutter.BoxLayout({ homogeneous: true });
this._windowList = new St.Widget({ style_class: 'window-list',
layout_manager: layout,
x_align: Clutter.ActorAlign.START,
x_expand: true,
y_expand: true });
box.add(this._windowList, { expand: true });
this._windowList.connect('style-changed', Lang.bind(this,
function() {
let node = this._windowList.get_theme_node();
let spacing = node.get_length('spacing');
this._windowList.layout_manager.spacing = spacing;
}));
this._windowList.connect('notify::allocation', Lang.bind(this,
function() {
if (this._groupingMode != GroupingMode.AUTO || this._grouped)
return;
let allocation = this._windowList.allocation;
let width = allocation.x2 - allocation.x1;
let [, natWidth] = this._windowList.get_preferred_width(-1);
if (width < natWidth) {
this._grouped = true;
Meta.later_add(Meta.LaterType.BEFORE_REDRAW,
Lang.bind(this, this._populateWindowList));
}
}));
this._workspaceIndicator = new WorkspaceIndicator();
box.add(this._workspaceIndicator.container);
this._menuManager = new PopupMenu.PopupMenuManager(this);
this._menuManager.addMenu(this._workspaceIndicator.menu);
this._trayButton = new TrayButton();
box.add(this._trayButton.actor);
Main.layoutManager.addChrome(this.actor, { affectsStruts: true,
trackFullscreen: true });
Main.ctrlAltTabManager.addGroup(this.actor, _('Window List'), 'start-here-symbolic');
this._appSystem = Shell.AppSystem.get_default();
this._appStateChangedId =
this._appSystem.connect('app-state-changed',
Lang.bind(this, this._onAppStateChanged));
this._monitorsChangedId =
Main.layoutManager.connect('monitors-changed',
Lang.bind(this, this._updatePosition));
this._updatePosition();
this._keyboardVisiblechangedId =
Main.layoutManager.connect('keyboard-visible-changed',
Lang.bind(this, function(o, state) {
Main.layoutManager.keyboardBox.visible = state;
Main.uiGroup.set_child_above_sibling(windowList.actor,
Main.layoutManager.keyboardBox);
this._updateKeyboardAnchor();
}));
this._workspaceSignals = new Hash.Map();
this._nWorkspacesChangedId =
global.screen.connect('notify::n-workspaces',
Lang.bind(this, this._onWorkspacesChanged));
this._onWorkspacesChanged();
this._overviewShowingId =
Main.overview.connect('showing', Lang.bind(this, function() {
this.actor.hide();
this._updateKeyboardAnchor();
this._updateMessageTrayAnchor();
}));
this._overviewHidingId =
Main.overview.connect('hiding', Lang.bind(this, function() {
this.actor.visible = !Main.layoutManager.primaryMonitor.inFullscreen;
this._updateKeyboardAnchor();
this._updateMessageTrayAnchor();
}));
this._updateMessageTrayAnchor();
this._fullscreenChangedId =
global.screen.connect('in-fullscreen-changed', Lang.bind(this, function() {
this._updateMessageTrayAnchor();
}));
this._dragBeginId =
Main.xdndHandler.connect('drag-begin',
Lang.bind(this, this._onDragBegin));
this._dragEndId =
Main.xdndHandler.connect('drag-end',
Lang.bind(this, this._onDragEnd));
this._dragMonitor = {
dragMotion: Lang.bind(this, this._onDragMotion)
};
this._dndTimeoutId = 0;
this._dndWindow = null;
this._settings = Convenience.getSettings();
this._groupingModeChangedId =
this._settings.connect('changed::grouping-mode',
Lang.bind(this, this._groupingModeChanged));
this._groupingModeChanged();
},
_groupingModeChanged: function() {
this._groupingMode = this._settings.get_enum('grouping-mode');
this._grouped = this._groupingMode == GroupingMode.ALWAYS;
this._populateWindowList();
},
_populateWindowList: function() {
this._windowList.destroy_all_children();
if (!this._grouped) {
let windows = Meta.get_window_actors(global.screen);
for (let i = 0; i < windows.length; i++)
this._onWindowAdded(null, windows[i].metaWindow);
} else {
let apps = this._appSystem.get_running();
for (let i = 0; i < apps.length; i++)
this._addApp(apps[i]);
}
},
_updatePosition: function() {
let monitor = Main.layoutManager.primaryMonitor;
this.actor.width = monitor.width;
this.actor.set_position(monitor.x, monitor.y + monitor.height - this.actor.height);
},
_updateKeyboardAnchor: function() {
if (!Main.keyboard.actor)
return;
let anchorY = Main.overview.visible ? 0 : this.actor.height;
Main.keyboard.actor.anchor_y = anchorY;
},
_updateMessageTrayAnchor: function() {
let anchorY = this.actor.visible ? this.actor.height : 0;
Main.messageTray.actor.anchor_y = anchorY;
Main.messageTray._notificationWidget.anchor_y = -anchorY;
},
_onAppStateChanged: function(appSys, app) {
if (!this._grouped)
return;
if (app.state == Shell.AppState.RUNNING)
this._addApp(app);
else if (app.state == Shell.AppState.STOPPED)
this._removeApp(app);
},
_addApp: function(app) {
let button = new AppButton(app);
this._windowList.layout_manager.pack(button.actor,
true, true, true,
Clutter.BoxAlignment.START,
Clutter.BoxAlignment.START);
},
_removeApp: function(app) {
let children = this._windowList.get_children();
for (let i = 0; i < children.length; i++) {
if (children[i]._delegate.app == app) {
children[i].destroy();
return;
}
}
},
_onWindowAdded: function(ws, win) {
if (!Shell.WindowTracker.get_default().is_window_interesting(win))
return;
if (this._grouped)
return;
let button = new WindowButton(win);
this._windowList.layout_manager.pack(button.actor,
true, true, true,
Clutter.BoxAlignment.START,
Clutter.BoxAlignment.START);
},
_onWindowRemoved: function(ws, win) {
if (this._grouped) {
if (this._groupingMode == GroupingMode.AUTO) {
this._grouped = false;
this._populateWindowList();
}
return;
}
let children = this._windowList.get_children();
for (let i = 0; i < children.length; i++) {
if (children[i]._delegate.metaWindow == win) {
children[i].destroy();
return;
}
}
},
_onWorkspacesChanged: function() {
let numWorkspaces = global.screen.n_workspaces;
for (let i = 0; i < numWorkspaces; i++) {
let workspace = global.screen.get_workspace_by_index(i);
if (this._workspaceSignals.has(workspace))
continue;
let signals = { windowAddedId: 0, windowRemovedId: 0 };
signals._windowAddedId =
workspace.connect_after('window-added',
Lang.bind(this, this._onWindowAdded));
signals._windowRemovedId =
workspace.connect('window-removed',
Lang.bind(this, this._onWindowRemoved));
this._workspaceSignals.set(workspace, signals);
}
},
_disconnectWorkspaceSignals: function() {
let numWorkspaces = global.screen.n_workspaces;
for (let i = 0; i < numWorkspaces; i++) {
let workspace = global.screen.get_workspace_by_index(i);
let signals = this._workspaceSignals.delete(workspace)[1];
workspace.disconnect(signals._windowAddedId);
workspace.disconnect(signals._windowRemovedId);
}
},
_onDragBegin: function() {
DND.addDragMonitor(this._dragMonitor);
},
_onDragEnd: function() {
DND.removeDragMonitor(this._dragMonitor);
this._removeActivateTimeout();
},
_onDragMotion: function(dragEvent) {
if (Main.overview.visible ||
!this.actor.contains(dragEvent.targetActor)) {
this._removeActivateTimeout();
return DND.DragMotionResult.CONTINUE;
}
let hoveredWindow = null;
if (dragEvent.targetActor._delegate)
hoveredWindow = dragEvent.targetActor._delegate.metaWindow;
if (!hoveredWindow ||
this._dndWindow == hoveredWindow)
return DND.DragMotionResult.CONTINUE;
this._removeActivateTimeout();
this._dndWindow = hoveredWindow;
this._dndTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT,
DND_ACTIVATE_TIMEOUT,
Lang.bind(this, this._activateWindow));
return DND.DragMotionResult.CONTINUE;
},
_removeActivateTimeout: function() {
if (this._dndTimeoutId)
GLib.source_remove (this._dndTimeoutId);
this._dndTimeoutId = 0;
this._dndWindow = null;
},
_activateWindow: function() {
let [x, y] = global.get_pointer();
let pickedActor = global.stage.get_actor_at_pos(Clutter.PickMode.ALL, x, y);
if (this._dndWindow && this.actor.contains(pickedActor))
this._dndWindow.activate(global.get_current_time());
this._dndWindow = null;
this._dndTimeoutId = 0;
return false;
},
_onDestroy: function() {
this._workspaceIndicator.destroy();
Main.ctrlAltTabManager.removeGroup(this.actor);
this._appSystem.disconnect(this._appStateChangedId);
this._appStateChangedId = 0;
Main.layoutManager.disconnect(this._monitorsChangedId);
this._monitorsChangedId = 0;
Main.layoutManager.disconnect(this._keyboardVisiblechangedId);
this._keyboardVisiblechangedId = 0;
Main.layoutManager.hideKeyboard();
this._disconnectWorkspaceSignals();
global.screen.disconnect(this._nWorkspacesChangedId);
this._nWorkspacesChangedId = 0;
Main.messageTray.actor.anchor_y = 0;
Main.messageTray._notificationWidget.anchor_y = 0;
Main.overview.disconnect(this._overviewShowingId);
Main.overview.disconnect(this._overviewHidingId);
global.screen.disconnect(this._fullscreenChangedId);
this._settings.disconnect(this._groupingModeChangedId);
let windows = Meta.get_window_actors(global.screen);
for (let i = 0; i < windows.length; i++)
windows[i].metaWindow.set_icon_geometry(null);
}
});
let windowList;
let injections = {};
let notificationParent;
function init() {
}
function enable() {
windowList = new WindowList();
windowList.actor.connect('notify::hover', Lang.bind(Main.messageTray,
function() {
this._pointerInTray = windowList.actor.hover;
this._updateState();
}));
injections['_trayDwellTimeout'] = MessageTray.MessageTray.prototype._trayDwellTimeout;
MessageTray.MessageTray.prototype._trayDwellTimeout = function() {
return false;
};
notificationParent = Main.messageTray._notificationWidget.get_parent();
Main.messageTray._notificationWidget.hide();
Main.messageTray._notificationWidget.reparent(windowList.actor);
Main.messageTray._notificationWidget.show();
}
function disable() {
var prop;
if (!windowList)
return;
windowList.actor.hide();
if (notificationParent) {
Main.messageTray._notificationWidget.reparent(notificationParent);
notificationParent = null;
}
windowList.actor.destroy();
windowList = null;
for (prop in injections)
MessageTray.MessageTray.prototype[prop] = injections[prop];
}

View File

@@ -0,0 +1,10 @@
{
"extension-id": "@extension_id@",
"uuid": "@uuid@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "Window List",
"description": "Display a window list at the bottom of the screen.\nThis extension is part of Classic Mode and is officially supported by GNOME. Please do not report bugs using the form below, use GNOME Bugzilla instead.",
"shell-version": [ "@shell_current@" ],
"url": "@url@"
}

View File

@@ -0,0 +1,19 @@
<schemalist gettext-domain="gnome-shell-extensions">
<enum id="org.gnome.shell.extensions.window-list.GroupingMode">
<value value="0" nick="never"/>
<value value="1" nick="auto"/>
<value value="2" nick="always"/>
</enum>
<schema id="org.gnome.shell.extensions.window-list"
path="/org/gnome/shell/extensions/window-list/">
<key name="grouping-mode"
enum="org.gnome.shell.extensions.window-list.GroupingMode">
<default>'never'</default>
<_summary>When to group windows</_summary>
<_description>
Decides when to group windows from the same application on the
window list. Possible values are "never", "auto" and "always".
</_description>
</key>
</schema>
</schemalist>

View File

@@ -0,0 +1,81 @@
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
const GObject = imports.gi.GObject;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
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 WindowListPrefsWidget = new GObject.Class({
Name: 'WindowList.Prefs.Widget',
GTypeName: 'WindowListPrefsWidget',
Extends: Gtk.Frame,
_init: function(params) {
this.parent(params);
this.shadow_type = Gtk.ShadowType.NONE;
this.margin = 24;
let title = '<b>' + _("Window Grouping") + '</b>';
let titleLabel = new Gtk.Label({ use_markup: true, label: title });
this.set_label_widget(titleLabel);
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,
margin_top: 6 });
align.add(grid);
this._settings = Convenience.getSettings();
let currentMode = this._settings.get_string('grouping-mode');
let range = this._settings.get_range('grouping-mode');
let modes = range.deep_unpack()[1].deep_unpack();
let modeLabels = {
'never': _("Never group windows"),
'auto': _("Group windows when space is limited"),
'always': _("Always group windows")
};
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', Lang.bind(this, function(button) {
if (button.active)
this._settings.set_string('grouping-mode', mode);
}));
}
}
});
function buildPrefsWidget() {
let widget = new WindowListPrefsWidget();
widget.show_all();
return widget;
}

View File

@@ -0,0 +1,77 @@
.bottom-panel {
/* .window-button-icon height +
.window-button vertical padding +
.window-button > StWidget vertical padding) */
height: 30px;
}
.window-list {
spacing: 2px;
font-size: 10pt;
}
.window-button {
padding: 1px;
}
.window-button:first-child:ltr {
padding-left: 2px;
}
.window-button:last-child:rtl {
padding-right: 2px;
}
.window-button > StWidget {
-st-natural-width: 250px;
max-width: 250px;
color: #bbb;
background-color: black;
border-radius: 4px;
padding: 3px 6px 1px;
box-shadow: inset 1px 1px 4px rgba(255,255,255,0.5);
text-shadow: 1px 1px 4px rgba(0,0,0,0.8);
spacing: 4px;
}
.window-button:hover > StWidget {
color: white;
background-color: #1f1f1f;
}
.window-button:active > StWidget,
.window-button:focus > StWidget {
box-shadow: inset 2px 2px 4px rgba(255,255,255,0.5);
}
.window-button.focused > StWidget {
color: white;
box-shadow: inset 1px 1px 4px rgba(255,255,255,0.7);
}
.window-button.focused:active > StWidget {
box-shadow: inset 2px 2px 4px rgba(255,255,255,0.7);
}
.window-button.minimized > StWidget {
color: #666;
box-shadow: inset -1px -1px 4px rgba(255,255,255,0.5);
}
.window-button.minimized:active > StWidget {
box-shadow: inset -2px -2px 4px rgba(255,255,255,0.5);
}
.window-button-icon {
width: 24px;
height: 24px;
}
.window-list-workspace-indicator {
background-color: rgba(200, 200, 200, .3);
border: 1px solid #cccccc;
}
.window-list-workspace-indicator > StLabel {
padding: 0 2px;
}

View File

@@ -33,41 +33,37 @@ function resetState() {
function enable() {
resetState();
Workspace.WindowOverlay.prototype.setId = function(id) {
if (this._text.visible && id == null)
this._text.hide();
this._id = id;
if (id != null)
this._text.text = this._id.toString();
}
winInjections['setId'] = undefined;
Workspace.WindowOverlay.prototype.getId = function() {
return this._id;
}
winInjections['getId'] = undefined;
Workspace.WindowOverlay.prototype.showTooltip = function() {
if (this._id === null)
return;
this._text.raise_top();
this._text.show();
this._text.text = this._id.toString();
this._text.text = (this._windowClone.slotId + 1).toString();
}
winInjections['showTooltip'] = undefined;
Workspace.WindowOverlay.prototype.hideTooltip = function() {
if (this._text.visible)
if (this._text && this._text.visible)
this._text.hide();
}
winInjections['hideTooltip'] = undefined;
Workspace.Workspace.prototype.showTooltip = function() {
if (this._tip == null)
if (this._tip == null || this._actualGeometry == null)
return;
this._tip.text = (this.metaWorkspace.index() + 1).toString();
this._tip.x = this._x;
this._tip.y = this._y;
// Hand code this instead of using _getSpacingAndPadding
// because that fails on empty workspaces
let node = this.actor.get_theme_node();
let padding = {
left: node.get_padding(St.Side.LEFT),
top: node.get_padding(St.Side.TOP),
bottom: node.get_padding(St.Side.BOTTOM),
right: node.get_padding(St.Side.RIGHT),
};
let area = Workspace.padArea(this._actualGeometry, padding);
this._tip.x = area.x;
this._tip.y = area.y;
this._tip.show();
this._tip.raise_top();
}
@@ -83,11 +79,9 @@ function enable() {
workspaceInjections['hideTooltip'] = undefined;
Workspace.Workspace.prototype.getWindowWithTooltip = function(id) {
for (let i in this._windowOverlays) {
if (this._windowOverlays[i] == null)
continue;
if (this._windowOverlays[i].getId() === id)
return this._windowOverlays[i]._windowClone.metaWindow;
for (let i = 0; i < this._windows.length; i++) {
if ((this._windows[i].slotId + 1) == id)
return this._windows[i].metaWindow;
}
return null;
}
@@ -127,11 +121,11 @@ function enable() {
workViewInjections['_hideWorkspacesTooltips'] = undefined;
WorkspacesView.WorkspacesView.prototype._onKeyRelease = function(s, o) {
if (this._pickWindow &&
if (this._pickWindow &&
(o.get_key_symbol() == Clutter.KEY_Alt_L ||
o.get_key_symbol() == Clutter.KEY_Alt_R))
this._hideTooltips();
if (this._pickWorkspace &&
if (this._pickWorkspace &&
(o.get_key_symbol() == Clutter.KEY_Control_L ||
o.get_key_symbol() == Clutter.KEY_Control_R))
this._hideWorkspacesTooltips();
@@ -139,6 +133,9 @@ function enable() {
workViewInjections['_onKeyRelease'] = undefined;
WorkspacesView.WorkspacesView.prototype._onKeyPress = function(s, o) {
if(Main.overview._viewSelector._activePage != Main.overview._viewSelector._workspacesPage)
return false;
if ((o.get_key_symbol() == Clutter.KEY_Alt_L ||
o.get_key_symbol() == Clutter.KEY_Alt_R)
&& !this._pickWorkspace) {
@@ -175,10 +172,14 @@ function enable() {
return false;
}
let c = o.get_key_symbol() - Clutter.KEY_0;
let c = o.get_key_symbol() - Clutter.KEY_KP_0;
if (c > 9 || c <= 0) {
this._hideTooltips();
return false;
c = o.get_key_symbol() - Clutter.KEY_0;
if (c > 9 || c <= 0) {
this._hideTooltips();
global.log(c);
return false;
}
}
let win = this._workspaces[this._active].getWindowWithTooltip(c);
@@ -190,10 +191,13 @@ function enable() {
return true;
}
if (this._pickWorkspace) {
let c = o.get_key_symbol() - Clutter.KEY_0;
let c = o.get_key_symbol() - Clutter.KEY_KP_0;
if (c > 9 || c <= 0) {
this._hideWorkspacesTooltips();
return false;
c = o.get_key_symbol() - Clutter.KEY_0;
if (c > 9 || c <= 0) {
this._hideWorkspacesTooltips();
return false;
}
}
let workspace = this._workspaces[c - 1];
@@ -214,10 +218,12 @@ function enable() {
parentActor.add_actor(this._text);
});
winInjections['updatePositions'] = injectToFunction(Workspace.WindowOverlay.prototype, 'updatePositions', function(cloneX, cloneY, cloneWidth, cloneHeight) {
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), Math.floor(textY));
this._text.set_position(Math.floor(textX) + 5, Math.floor(textY) + 5);
this._text.raise_top();
});
@@ -235,23 +241,6 @@ function enable() {
this._tip = null;
});
workspaceInjections['positionWindows'] = injectToFunction(Workspace.Workspace.prototype, 'positionWindows', function(flags) {
let visibleClones = this._windows.slice();
if (this._reservedSlot)
visibleClones.push(this._reservedSlot);
let slots = this._computeAllWindowSlots(visibleClones.length);
visibleClones = this._orderWindowsByMotionAndStartup(visibleClones, slots);
for (let i = 0; i < visibleClones.length; i++) {
let clone = visibleClones[i];
let metaWindow = clone.metaWindow;
let mainIndex = this._lookupIndex(metaWindow);
let overlay = this._windowOverlays[mainIndex];
if (overlay)
overlay.setId(i < 9 ? i + 1 : null);
}
});
workViewInjections['_init'] = injectToFunction(WorkspacesView.WorkspacesView.prototype, '_init', function(width, height, x, y, workspaces) {
this._pickWorkspace = false;
this._pickWindow = false;
@@ -276,6 +265,8 @@ function removeInjection(object, injection, name) {
}
function disable() {
let i;
for (i in workspaceInjections)
removeInjection(Workspace.Workspace.prototype, workspaceInjections, i);
for (i in winInjections)

View File

@@ -1,8 +1,11 @@
{
"shell-version": ["@shell_current@" ],
"extension-id": "@extension_id@",
"uuid": "@uuid@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"original-author": "zaspire@rambler.ru",
"name": "windowNavigator",
"description": "Allow keyboard selection of windows and workspaces in overlay mode",
"description": "Allow keyboard selection of windows and workspaces in overlay mode. <Ctrl>number selects a workspace, and <Alt>number selects a window.",
"url": "@url@"
}

View File

@@ -1,5 +1,5 @@
.extension-windowsNavigator-window-tooltip {
color: #ff0000;
color: #fefefe;
background: rgba(0,0,0,0.8);
border: 1px solid rgba(128,128,128,0.40);
border-radius: 10px;

View File

@@ -1,3 +1,5 @@
EXTENSION_ID = workspace-indicator
EXTRA_MODULES = prefs.js
include ../../extension.mk

View File

@@ -1,3 +1,6 @@
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
const Gio = imports.gi.Gio;
const Meta = imports.gi.Meta;
const Clutter = imports.gi.Clutter;
const St = imports.gi.St;
@@ -7,103 +10,125 @@ const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const Panel = imports.ui.panel;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const Main = imports.ui.main;
function WorkspaceIndicator() {
this._init.apply(this, arguments);
}
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
WorkspaceIndicator.prototype = {
__proto__: PanelMenu.SystemStatusButton.prototype,
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
const WORKSPACE_KEY = 'workspace-names';
_init: function(){
PanelMenu.SystemStatusButton.prototype._init.call(this, 'folder');
const WorkspaceIndicator = new Lang.Class({
Name: 'WorkspaceIndicator.WorkspaceIndicator',
Extends: PanelMenu.Button,
this._currentWorkspace = global.screen.get_active_workspace().index();
this.statusLabel = new St.Label({ text: this._labelText() });
_init: function(){
this.parent(0.0, _("Workspace Indicator"));
// destroy all previously created children, and add our statusLabel
this.actor.get_children().forEach(function(c) { c.destroy() });
this.actor.add_actor(this.statusLabel);
this._currentWorkspace = global.screen.get_active_workspace().index();
this.statusLabel = new St.Label({ text: this._labelText() });
this.workspacesItems = [];
this._workspaceSection = new PopupMenu.PopupMenuSection();
this.menu.addMenuItem(this._workspaceSection);
global.screen.connect_after('workspace-added', Lang.bind(this,this._createWorkspacesSection));
global.screen.connect_after('workspace-removed', Lang.bind(this,this._createWorkspacesSection));
global.screen.connect_after('workspace-switched', Lang.bind(this,this._updateIndicator));
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
this._createWorkspacesSection();
this.actor.add_actor(this.statusLabel);
//styling
this.menu.actor.add_style_class_name('workspace-indicator-shorter');
this.statusLabel.add_style_class_name('panel-workspace-indicator');
},
this.workspacesItems = [];
this._workspaceSection = new PopupMenu.PopupMenuSection();
this.menu.addMenuItem(this._workspaceSection);
_updateIndicator: function() {
this.workspacesItems[this._currentWorkspace].setShowDot(false);
this._currentWorkspace = global.screen.get_active_workspace().index();
this.workspacesItems[this._currentWorkspace].setShowDot(true);
this._screenSignals = [];
this._screenSignals.push(global.screen.connect_after('workspace-added', Lang.bind(this,this._createWorkspacesSection)));
this._screenSignals.push(global.screen.connect_after('workspace-removed', Lang.bind(this,this._createWorkspacesSection)));
this._screenSignals.push(global.screen.connect_after('workspace-switched', Lang.bind(this,this._updateIndicator)));
this.statusLabel.set_text(this._labelText());
},
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
this._createWorkspacesSection();
_labelText : function(workspaceIndex) {
if(workspaceIndex == undefined) {
workspaceIndex = this._currentWorkspace;
return (workspaceIndex + 1).toString();
}
return Meta.prefs_get_workspace_name(workspaceIndex);
},
//styling
this.statusLabel.add_style_class_name('panel-workspace-indicator');
_createWorkspacesSection : function() {
this._workspaceSection.removeAll();
this.workspacesItems = [];
this._currentWorkspace = global.screen.get_active_workspace().index();
this._settings = new Gio.Settings({ schema: WORKSPACE_SCHEMA });
this._settingsChangedId = this._settings.connect('changed::' + WORKSPACE_KEY, Lang.bind(this, this._createWorkspacesSection));
},
let i = 0;
for(; i < global.screen.n_workspaces; i++) {
this.workspacesItems[i] = new PopupMenu.PopupMenuItem(this._labelText(i));
this._workspaceSection.addMenuItem(this.workspacesItems[i]);
this.workspacesItems[i].workspaceId = i;
this.workspacesItems[i].label_actor = this.statusLabel;
let self = this;
this.workspacesItems[i].connect('activate', Lang.bind(this, function(actor, event) {
this._activate(actor.workspaceId);
}));
destroy: function() {
for (let i = 0; i < this._screenSignals.length; i++)
global.screen.disconnect(this._screenSignals[i]);
if (i == this._currentWorkspace)
this.workspacesItems[i].setShowDot(true);
}
if (this._settingsChangedId) {
this._settings.disconnect(this._settingsChangedId);
this._settingsChangedId = 0;
}
this.statusLabel.set_text(this._labelText());
},
this.parent();
},
_activate : function (index) {
if(index >= 0 && index < global.screen.n_workspaces) {
let metaWorkspace = global.screen.get_workspace_by_index(index);
metaWorkspace.activate(true);
}
},
_updateIndicator: function() {
this.workspacesItems[this._currentWorkspace].setOrnament(PopupMenu.Ornament.NONE);
this._currentWorkspace = global.screen.get_active_workspace().index();
this.workspacesItems[this._currentWorkspace].setOrnament(PopupMenu.Ornament.DOT);
_onScrollEvent : function(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;
}
this.statusLabel.set_text(this._labelText());
},
let newIndex = global.screen.get_active_workspace().index() + diff;
this._activate(newIndex);
},
}
_labelText : function(workspaceIndex) {
if(workspaceIndex == undefined) {
workspaceIndex = this._currentWorkspace;
return (workspaceIndex + 1).toString();
}
return Meta.prefs_get_workspace_name(workspaceIndex);
},
_createWorkspacesSection : function() {
this._workspaceSection.removeAll();
this.workspacesItems = [];
this._currentWorkspace = global.screen.get_active_workspace().index();
let i = 0;
for(; i < global.screen.n_workspaces; i++) {
this.workspacesItems[i] = new PopupMenu.PopupMenuItem(this._labelText(i));
this._workspaceSection.addMenuItem(this.workspacesItems[i]);
this.workspacesItems[i].workspaceId = i;
this.workspacesItems[i].label_actor = this.statusLabel;
let self = this;
this.workspacesItems[i].connect('activate', Lang.bind(this, function(actor, event) {
this._activate(actor.workspaceId);
}));
if (i == this._currentWorkspace)
this.workspacesItems[i].setOrnament(PopupMenu.Ornament.DOT);
}
this.statusLabel.set_text(this._labelText());
},
_activate : function (index) {
if(index >= 0 && index < global.screen.n_workspaces) {
let metaWorkspace = global.screen.get_workspace_by_index(index);
metaWorkspace.activate(global.get_current_time());
}
},
_onScrollEvent : function(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 = global.screen.get_active_workspace().index() + diff;
this._activate(newIndex);
},
});
function init(meta) {
// empty
Convenience.initTranslations();
}
let _indicator;

View File

@@ -1,7 +1,10 @@
{
"extension-id": "@extension_id@",
"uuid": "@uuid@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "Workspace Indicator",
"description": "Put an indicator on the panel signaling in which workspace you are, and give you the possibility of switching to another one",
"description": "Put an indicator on the panel signaling in which workspace you are, and give you the possibility of switching to another one.",
"shell-version": [ "@shell_current@" ],
"original-authors": [ "erick.red@gmail.com" ],
"url": "@url@"

View File

@@ -0,0 +1,207 @@
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const GObject = imports.gi.GObject;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const N_ = function(e) { return e };
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
const WORKSPACE_KEY = 'workspace-names';
const WorkspaceNameModel = new GObject.Class({
Name: 'WorkspaceIndicator.WorkspaceNameModel',
GTypeName: 'WorkspaceNameModel',
Extends: Gtk.ListStore,
Columns: {
LABEL: 0,
},
_init: function(params) {
this.parent(params);
this.set_column_types([GObject.TYPE_STRING]);
this._settings = new Gio.Settings({ schema: WORKSPACE_SCHEMA });
//this._settings.connect('changed::workspace-names', Lang.bind(this, this._reloadFromSettings));
this._reloadFromSettings();
// overriding class closure doesn't work, because GtkTreeModel
// plays tricks with marshallers and class closures
this.connect('row-changed', Lang.bind(this, this._onRowChanged));
this.connect('row-inserted', Lang.bind(this, this._onRowInserted));
this.connect('row-deleted', Lang.bind(this, this._onRowDeleted));
},
_reloadFromSettings: function() {
if (this._preventChanges)
return;
this._preventChanges = true;
let newNames = this._settings.get_strv(WORKSPACE_KEY);
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: function(self, path, iter) {
if (this._preventChanges)
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: function(self, path, iter) {
if (this._preventChanges)
return;
this._preventChanges = true;
let index = path.get_indices()[0];
let names = this._settings.get_strv(WORKSPACE_KEY);
let label = this.get_value(iter, this.Columns.LABEL) || '';
names.splice(index, 0, label);
this._settings.set_strv(WORKSPACE_KEY, names);
this._preventChanges = false;
},
_onRowDeleted: function(self, path) {
if (this._preventChanges)
return;
this._preventChanges = true;
let index = path.get_indices()[0];
let names = this._settings.get_strv(WORKSPACE_KEY);
if (index >= names.length)
return;
names.splice(index, 1);
// compact the array
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 = new GObject.Class({
Name: 'WorkspaceIndicator.WorkspaceSettingsWidget',
GTypeName: 'WorkspaceSettingsWidget',
Extends: Gtk.Grid,
_init: function(params) {
this.parent(params);
this.margin = 10;
this.orientation = Gtk.Orientation.VERTICAL;
this.add(new Gtk.Label({ label: _("Workspace names:"),
margin_bottom: 5 }));
this._store = new WorkspaceNameModel();
this._treeView = new Gtk.TreeView({ model: this._store,
headers_visible: false,
reorderable: true,
hexpand: true,
vexpand: true
});
let column = new Gtk.TreeViewColumn({ title: _("Name") });
let renderer = new Gtk.CellRendererText({ editable: true });
renderer.connect('edited', Lang.bind(this, this._cellEdited));
column.pack_start(renderer, true);
column.add_attribute(renderer, 'text', this._store.Columns.LABEL);
this._treeView.append_column(column);
this.add(this._treeView);
let toolbar = new Gtk.Toolbar();
toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_INLINE_TOOLBAR);
let newButton = new Gtk.ToolButton({ stock_id: Gtk.STOCK_NEW });
newButton.connect('clicked', Lang.bind(this, this._newClicked));
toolbar.add(newButton);
let delButton = new Gtk.ToolButton({ stock_id: Gtk.STOCK_DELETE });
delButton.connect('clicked', Lang.bind(this, this._delClicked));
toolbar.add(delButton);
this.add(toolbar);
},
_cellEdited: function(renderer, path, new_text) {
let [ok, iter] = this._store.get_iter_from_string(path);
if (ok)
this._store.set(iter, [this._store.Columns.LABEL], [new_text]);
},
_newClicked: function() {
let iter = this._store.append();
let index = this._store.get_path(iter).get_indices()[0];
let label = _("Workspace %d").format(index);
this._store.set(iter, [this._store.Columns.LABEL], [label]);
},
_delClicked: function() {
let [any, model, iter] = this._treeView.get_selection().get_selected();
if (any)
this._store.remove(iter);
}
});
function init() {
Convenience.initTranslations();
}
function buildPrefsWidget() {
let widget = new WorkspaceSettingsWidget();
widget.show_all();
return widget;
}

View File

@@ -1,7 +1,3 @@
.workspace-indicator-shorter {
min-width: 25px;
font-size: 10pt;
}
.panel-workspace-indicator {
padding: 0 8px;
background-color: rgba(200, 200, 200, .5);

View File

@@ -1,7 +1,7 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const DBus = imports.dbus;
const Gdk = imports.gi.Gdk;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const GnomeDesktop = imports.gi.GnomeDesktop;
const Lang = imports.lang;
@@ -17,6 +17,10 @@ const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const N_ = function(e) { return e };
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Convenience = Me.imports.convenience;
const possibleRotations = [ GnomeDesktop.RRRotation.ROTATION_0,
GnomeDesktop.RRRotation.ROTATION_90,
GnomeDesktop.RRRotation.ROTATION_180,
@@ -29,25 +33,23 @@ let rotations = [ [ GnomeDesktop.RRRotation.ROTATION_0, N_("Normal") ],
[ GnomeDesktop.RRRotation.ROTATION_180, N_("Upside-down") ]
];
const XRandr2Iface = {
name: 'org.gnome.SettingsDaemon.XRANDR_2',
methods: [
{ name: 'ApplyConfiguration', inSignature: 'xx', outSignature: '' },
]
};
let XRandr2 = DBus.makeProxyClass(XRandr2Iface);
const XRandr2Iface = <interface name='org.gnome.SettingsDaemon.XRANDR_2'>
<method name='ApplyConfiguration'>
<arg type='x' direction='in'/>
<arg type='x' direction='in'/>
</method>
</interface>;
function Indicator() {
this._init.apply(this, arguments);
}
const XRandr2 = Gio.DBusProxy.makeProxyWrapper(XRandr2Iface);
Indicator.prototype = {
__proto__: PanelMenu.SystemStatusButton.prototype,
const Indicator = new Lang.Class({
Name: 'XRandRIndicator',
Extends: PanelMenu.SystemStatusButton,
_init: function() {
PanelMenu.SystemStatusButton.prototype._init.call(this, 'preferences-desktop-display');
this.parent('preferences-desktop-display-symbolic', _("Display"));
this._proxy = new XRandr2(DBus.session, 'org.gnome.SettingsDaemon', '/org/gnome/SettingsDaemon/XRANDR');
this._proxy = new XRandr2(Gio.DBus.session, 'org.gnome.SettingsDaemon', '/org/gnome/SettingsDaemon/XRANDR');
try {
this._screen = new GnomeDesktop.RRScreen({ gdk_screen: Gdk.Screen.get_default() });
@@ -62,6 +64,13 @@ Indicator.prototype = {
this._screen.connect('changed', Lang.bind(this, this._randrEvent));
},
destroy: function() {
if (this._screen)
this._screen.run_dispose();
this.parent();
},
_randrEvent: function() {
this.menu.removeAll();
this._createMenu();
@@ -75,9 +84,7 @@ Indicator.prototype = {
this._addOutputItem(config, outputs[i]);
}
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addAction(_("Configure display settings..."), function() {
GLib.spawn_command_line_async('gnome-control-center display');
});
this.menu.addSettingsAction(_("Display Settings"), 'gnome-display-panel.desktop');
},
_addOutputItem: function(config, output) {
@@ -94,7 +101,7 @@ Indicator.prototype = {
if (bitmask & allowedRotations) {
let item = new PopupMenu.PopupMenuItem(Gettext.gettext(name));
if (bitmask & currentRotation)
item.setShowDot(true);
item.setOrnament(PopupMenu.Ornament.DOT);
item.connect('activate', Lang.bind(this, function(item, event) {
/* ensure config is saved so we get a backup if anything goes wrong */
config.save();
@@ -133,12 +140,10 @@ Indicator.prototype = {
}
return retval;
}
}
});
function init(metadata) {
let me = imports.ui.extensionSystem.extensions[metadata.uuid];
me.convenience.initTranslations(metadata);
Convenience.initTranslations();
}
let _indicator;

View File

@@ -1,7 +1,10 @@
{
"extension-id": "@extension_id@",
"uuid": "@uuid@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "Monitor Status Indicator",
"description": "Add a systems status menu for rotating monitors (overrides what is currently provided by gnome-settings-daemon)",
"description": "Add a system status menu for rotating monitors.",
"shell-version": [ "@shell_current@" ],
"url": "@url@"
}

View File

@@ -7,5 +7,6 @@ extensionbase = @gnome-shell-extensions.gcampax.github.com
gschemabase = org.gnome.shell.extensions
uuid = $(EXTENSION_ID)$(extensionbase)
gschemaname = $(gschemabase).$(EXTENSION_ID)
extensiondir = $(topextensiondir)/$(uuid)

View File

@@ -1,17 +1,93 @@
/* -*- 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;
function initTranslations(metadata) {
let localeDir = metadata.dir.get_child('locale').get_path();
Gettext.bindtextdomain('gnome-shell-extensions', localeDir);
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);
}
function getSettings(metadata, extension_id) {
let schemaDir = metadata.dir.get_child('schemas').get_path();
let schemaSource = Gio.SettingsSchemaSource.new_from_directory(schemaDir,
Gio.SettingsSchemaSource.get_default(),
false);
let schema = schemaSource.lookup('org.gnome.shell.extensions.' + extension_id, false);
return new Gio.Settings({ settings_schema: schema });
/**
* 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 });
}

View File

@@ -1,15 +0,0 @@
#!/bin/bash
extensionbase=~/.local/share/gnome-shell/extensions
for i in zip-files/*; do
zip_file=`pwd`/$i;
uuid=`basename $i | sed -e "s/.shell-extension.zip//"`;
if [ -d $extensionbase/$uuid ]; then
rm -fR $extensionbase/$uuid;
fi
mkdir $extensionbase/$uuid;
(cd $extensionbase/$uuid;
unzip -q $zip_file;
);
done

View File

@@ -1,3 +1,6 @@
an
ar
as
ca
cs
da
@@ -11,12 +14,16 @@ fa
fi
fr
gl
gu
he
hu
id
it
ja
ko
lv
lt
ml
nb
pa
pt
@@ -25,8 +32,11 @@ pl
ru
sk
sl
sr
sr@latin
sv
te
tg
vi
uk
zh_CN

View File

@@ -1,15 +1,27 @@
extensions/alternative-status-menu/extension.js
extensions/alternate-tab/extension.js
extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in
data/gnome-classic.desktop.in
data/gnome-classic.session.desktop.in.in
data/gnome-shell-classic.desktop.in.in
data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in
extensions/alternate-tab/prefs.js
extensions/apps-menu/extension.js
extensions/auto-move-windows/extension.js
extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in
extensions/dock/extension.js
extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in
extensions/auto-move-windows/prefs.js
extensions/drive-menu/extension.js
extensions/example/extension.js
extensions/gajim/extension.js
extensions/example/org.gnome.shell.extensions.example.gschema.xml.in
extensions/example/prefs.js
extensions/native-window-placement/extension.js
extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in
extensions/places-menu/extension.js
extensions/places-menu/placeDisplay.js
extensions/systemMonitor/extension.js
extensions/user-theme/extension.js
extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in
extensions/window-list/extension.js
extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in
extensions/window-list/prefs.js
extensions/windowsNavigator/extension.js
extensions/workspace-indicator/extension.js
extensions/workspace-indicator/prefs.js
extensions/xrandr-indicator/extension.js

313
po/an.po Normal file
View File

@@ -0,0 +1,313 @@
# Aragonese translation for gnome-shell-extensions.
# Copyright (C) 2013 gnome-shell-extensions's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell-extensions package.
# Jorge Pérez Pérez <jorgtum@gmail.com>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=extensions\n"
"POT-Creation-Date: 2013-06-05 18:52+0000\n"
"PO-Revision-Date: 2013-06-05 20:51+0100\n"
"Last-Translator: Jorge Pérez Pérez <jorgtum@gmail.com>\n"
"Language-Team: Aragonese <softaragones@googlegroups.com>\n"
"Language: an\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.4\n"
#: ../data/gnome-classic.desktop.in.h:1
#: ../data/gnome-classic.session.desktop.in.in.h:1
msgid "GNOME Classic"
msgstr "GNOME clasico"
#: ../data/gnome-classic.desktop.in.h:2
msgid "This session logs you into GNOME Classic"
msgstr "Ista sesión encieta lo GNOME clasico"
#: ../data/gnome-shell-classic.desktop.in.in.h:1
msgid "GNOME Shell Classic"
msgstr "GNOME Shell clasico"
#: ../data/gnome-shell-classic.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Chestión de finestras y inicio d'aplicacions"
#: ../extensions/alternate-tab/prefs.js:20
msgid "Thumbnail only"
msgstr "Nomás as miniaturas"
#: ../extensions/alternate-tab/prefs.js:21
msgid "Application icon only"
msgstr "Nomás l'icono de l'aplicación"
#: ../extensions/alternate-tab/prefs.js:22
msgid "Thumbnail and application icon"
msgstr "Miniatura y icono de l'aplicación"
#: ../extensions/alternate-tab/prefs.js:37
msgid "Present windows as"
msgstr "Presentar as finestras como"
#: ../extensions/alternate-tab/prefs.js:62
msgid "Show only windows in the current workspace"
msgstr "Amostrar as finestras solament en l'aria de treballo actual"
#. add the new entries
#: ../extensions/alternative-status-menu/extension.js:125
msgid "Suspend"
msgstr "Suspender"
#: ../extensions/alternative-status-menu/extension.js:128
msgid "Hibernate"
msgstr "Hibernar"
#: ../extensions/alternative-status-menu/extension.js:131
msgid "Power Off"
msgstr "Amortar"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1
msgid "Enable suspending"
msgstr "Activar a suspensión"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2
msgid "Control the visibility of the Suspend menu item"
msgstr "Controla la visibilidat de l'elemento de menú «Suspender»"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3
msgid "Enable hibernating"
msgstr "Activar a hibernación"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4
msgid "Control the visibility of the Hibernate menu item"
msgstr "Controla la visibilidat de l'elemento de menú «Hibernar»"
#: ../extensions/apps-menu/extension.js:39
msgid "Activities Overview"
msgstr "Anvista d'actividatz"
#: ../extensions/apps-menu/extension.js:113
msgid "Favorites"
msgstr "Favoritos"
#: ../extensions/apps-menu/extension.js:278
msgid "Applications"
msgstr "Aplicacions"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid "Application and workspace list"
msgstr "Lista d'aplicacions y arias de treballo"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
msgstr ""
"Una lista de cadenas, que cadaguna contién l'identificador de l'aplicación "
"(o nombre d'o fichero d'escritorio), seguiu por dos puntos y o numero de "
"l'aria de treballo"
#: ../extensions/auto-move-windows/prefs.js:55
msgid "Application"
msgstr "Aplicación"
#: ../extensions/auto-move-windows/prefs.js:64
#: ../extensions/auto-move-windows/prefs.js:106
msgid "Workspace"
msgstr "Aria de treballo"
#: ../extensions/auto-move-windows/prefs.js:80
msgid "Add rule"
msgstr "Adhibir un regle"
#: ../extensions/auto-move-windows/prefs.js:94
msgid "Create new matching rule"
msgstr "Creyar un regle nuevo de coincidencia"
#: ../extensions/auto-move-windows/prefs.js:98
msgid "Add"
msgstr "Adhibir"
#: ../extensions/drive-menu/extension.js:72
#, c-format
msgid "Ejecting drive '%s' failed:"
msgstr "Ha fallau en fer fuera o dispositivo «%s»"
#: ../extensions/drive-menu/extension.js:89
msgid "Removable devices"
msgstr "Dispositivos extraíbles"
#: ../extensions/drive-menu/extension.js:106
msgid "Open File"
msgstr "Ubrir o fichero"
#: ../extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "Ola, mundo!"
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1
msgid "Alternative greeting text."
msgstr "Texto alternativo de bienvenida"
#: ../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 ""
"Si no ye vuedo, contién o texto que s'amostrará quan se faiga clic en o "
"panel."
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: ../extensions/example/prefs.js:30
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 ""
"«Example» tien por obchecto amostrar cómo construir as extensions de buen "
"comportamiento ta la Shell y por ixo tien poca funcionalidat por ell "
"solenco.\n"
"Manimenos, ye posible presonalizar o mensache de bienvenida."
#: ../extensions/example/prefs.js:36
msgid "Message:"
msgstr "Mensache:"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
msgid "Use more screen for windows"
msgstr "Fer servir mas pantalla ta las finestras"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
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 ""
"Intenta fer servir mas espacio ta situar as miniaturas, adaptando-las a la "
"forma d'a pantalla, y consolidar-las encara mas ta reducir l'aria ocupada. "
"Ista opción solament s'aplica a la estratechia de posicionamiento «natural»."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid "Place window captions on top"
msgstr "Situar os titols de finestras alto"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
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 ""
"Si ye cierto, situar os titols d'as finestras dencima d'as miniaturas "
"correspondients, cambiando o comportamiento predeterminau de shell, que los "
"sitúa por debaixo. Cambiar ista configuración requier reiniciar a shell ta "
"que tienga efecto."
#: ../extensions/places-menu/extension.js:77
msgid "Places"
msgstr "Puestos"
#: ../extensions/places-menu/placeDisplay.js:56
#, c-format
msgid "Failed to launch \"%s\""
msgstr "Ha fallau en lanzar «%s»"
#: ../extensions/places-menu/placeDisplay.js:98
#: ../extensions/places-menu/placeDisplay.js:121
msgid "Computer"
msgstr "Equipo"
#: ../extensions/places-menu/placeDisplay.js:199
msgid "Home"
msgstr "Carpeta presonal"
#: ../extensions/places-menu/placeDisplay.js:286
msgid "Browse Network"
msgstr "Examinar o ret"
#: ../extensions/systemMonitor/extension.js:213
msgid "CPU"
msgstr "CPU"
#: ../extensions/systemMonitor/extension.js:266
msgid "Memory"
msgstr "CPU"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
msgid "Theme name"
msgstr "Nombre d'o tema"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "O nombre d'o tema, que se carga dende /.themes/nombre/gnome-shell"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1
msgid "When to group windows"
msgstr "Quan agrupar as finestras"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are \"never\", \"auto\" and \"always\"."
msgstr ""
"Decide quan agrupar as finestras dende a mesma aplicación en a lista de "
"finestras. As valors posibles son «never», «auto» y «always»."
#: ../extensions/window-list/prefs.js:30
msgid "Window Grouping"
msgstr "Agrupación de finestras"
#: ../extensions/window-list/prefs.js:49
msgid "Never group windows"
msgstr "Nunca no agrupar as finestras"
#: ../extensions/window-list/prefs.js:50
msgid "Group windows when space is limited"
msgstr "Agrupar as finestras quan l'espacio siga limitau"
#: ../extensions/window-list/prefs.js:51
msgid "Always group windows"
msgstr "Agrupar siempre as finestras"
#: ../extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Indicador d'aria de treballo"
#: ../extensions/workspace-indicator/prefs.js:141
msgid "Workspace names:"
msgstr "Nombres d'as arias de treballo:"
#: ../extensions/workspace-indicator/prefs.js:152
msgid "Name"
msgstr "Nombre"
#: ../extensions/workspace-indicator/prefs.js:186
#, c-format
msgid "Workspace %d"
msgstr "Aria de treballo %d"
#: ../extensions/xrandr-indicator/extension.js:30
msgid "Normal"
msgstr "Normal"
#: ../extensions/xrandr-indicator/extension.js:31
msgid "Left"
msgstr "Cucha"
#: ../extensions/xrandr-indicator/extension.js:32
msgid "Right"
msgstr "Dreita"
#: ../extensions/xrandr-indicator/extension.js:33
msgid "Upside-down"
msgstr "Enta baixo"
#: ../extensions/xrandr-indicator/extension.js:50
msgid "Display"
msgstr "Pantalla"
#: ../extensions/xrandr-indicator/extension.js:80
msgid "Display Settings"
msgstr "Opcions de pantalla"

338
po/ar.po Normal file
View File

@@ -0,0 +1,338 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Khaled Hosny <khaledhosny@eglug.org>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-12-24 12:44+0200\n"
"PO-Revision-Date: 2012-12-24 12:46+0200\n"
"Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n"
"Language-Team: Arabic <doc@arabeyes.org>\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
"X-Generator: Virtaal 0.7.0\n"
#: ../data/gnome-classic.desktop.in.h:1
#: ../data/gnome-classic.session.desktop.in.in.h:1
msgid "GNOME Classic"
msgstr "جنوم تقليدية"
#: ../data/gnome-classic.desktop.in.h:2
msgid "This session logs you into GNOME Classic"
msgstr "تولجك هذه الجلسة في جنوم التقليدية"
#: ../data/gnome-shell-classic.desktop.in.in.h:1
msgid "GNOME Shell Classic"
msgstr "صدفة جنوم تقليدية"
#: ../data/gnome-shell-classic.desktop.in.in.h:2
msgid "Window management and application launching"
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:37
msgid "Present windows as"
msgstr "كيفية عرض التطبيقات"
#: ../extensions/alternate-tab/prefs.js:62
msgid "Show only windows in the current workspace"
msgstr "أظهر نوافذ مساحات العمل الحالية فقط"
#. add the new entries
#: ../extensions/alternative-status-menu/extension.js:144
msgid "Suspend"
msgstr "علّق"
#: ../extensions/alternative-status-menu/extension.js:147
msgid "Hibernate"
msgstr "أسبِت"
#: ../extensions/alternative-status-menu/extension.js:150
msgid "Power Off"
msgstr "أطفئ"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1
msgid "Enable suspending"
msgstr "فعّل التعليق"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2
msgid "Control the visibility of the Suspend menu item"
msgstr "تحكم في ظهور ”علّق“ في القائمة"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3
msgid "Enable hibernating"
msgstr "فعّل الإسبات"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4
msgid "Control the visibility of the Hibernate menu item"
msgstr "تحكم في ظهور ”أسبِت“ في القائمة"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid "Application and workspace list"
msgstr "قائمة التطبيقات ومساحات العمل"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
msgstr ""
#: ../extensions/auto-move-windows/prefs.js:55
msgid "Application"
msgstr "التطبيق"
#: ../extensions/auto-move-windows/prefs.js:64
#: ../extensions/auto-move-windows/prefs.js:106
msgid "Workspace"
msgstr "مساحة العمل"
#: ../extensions/auto-move-windows/prefs.js:80
msgid "Add rule"
msgstr "أضِف قاعدة"
#: ../extensions/auto-move-windows/prefs.js:94
msgid "Create new matching rule"
msgstr "أنشئ قاعدة تطابق"
#: ../extensions/auto-move-windows/prefs.js:98
msgid "Add"
msgstr "أضِف"
#: ../extensions/drive-menu/extension.js:72
#, c-format
msgid "Ejecting drive '%s' failed:"
msgstr "فشل إخراج '%s':"
#: ../extensions/drive-menu/extension.js:89
msgid "Removable devices"
msgstr "الأجهزة المنفصلة"
#: ../extensions/drive-menu/extension.js:106
msgid "Open File"
msgstr "افتح الملف"
#: ../extensions/example/extension.js:17
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 ""
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: ../extensions/example/prefs.js:30
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 ""
#: ../extensions/example/prefs.js:36
msgid "Message:"
msgstr "الرسالة:"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
msgid "Use more screen for windows"
msgstr ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
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 ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid "Place window captions on top"
msgstr ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
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 ""
#: ../extensions/places-menu/extension.js:46
msgid "Places"
msgstr "الأماكن"
#: ../extensions/places-menu/extension.js:47
msgid "Devices"
msgstr "الأجهزة"
#: ../extensions/places-menu/extension.js:48
msgid "Bookmarks"
msgstr "العلامات"
#: ../extensions/places-menu/extension.js:49
msgid "Network"
msgstr "الشبكة"
#: ../extensions/places-menu/placeDisplay.js:48
#, c-format
msgid "Failed to launch \"%s\""
msgstr "فشل تشغيل \"%s\""
#: ../extensions/places-menu/placeDisplay.js:121
msgid "Home"
msgstr "المنزل"
#: ../extensions/places-menu/placeDisplay.js:195
msgid "File System"
msgstr "نظام الملفات"
#: ../extensions/places-menu/placeDisplay.js:199
msgid "Browse network"
msgstr "تصفّح الشبكة"
#: ../extensions/systemMonitor/extension.js:213
msgid "CPU"
msgstr "المعالج"
#: ../extensions/systemMonitor/extension.js:266
msgid "Memory"
msgstr "الذاكرة"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
msgid "Theme name"
msgstr "اسم السمة"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr ""
#: ../extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "مؤشر مساحات العمل"
#: ../extensions/workspace-indicator/prefs.js:141
msgid "Workspace names:"
msgstr "أسماء مساحات العمل"
#: ../extensions/workspace-indicator/prefs.js:152
msgid "Name"
msgstr "الاسم"
#: ../extensions/workspace-indicator/prefs.js:186
#, c-format
msgid "Workspace %d"
msgstr "مساحة العمل %Id"
#: ../extensions/xrandr-indicator/extension.js:30
msgid "Normal"
msgstr "عادي"
#: ../extensions/xrandr-indicator/extension.js:31
msgid "Left"
msgstr "يسار"
#: ../extensions/xrandr-indicator/extension.js:32
msgid "Right"
msgstr "يمين"
#: ../extensions/xrandr-indicator/extension.js:33
msgid "Upside-down"
msgstr "رأسا على عقب"
#: ../extensions/xrandr-indicator/extension.js:50
msgid "Display"
msgstr "العرض"
#: ../extensions/xrandr-indicator/extension.js:80
msgid "Display Settings"
msgstr "إعدادات العرض"
#~ msgid "Drag here to add favorites"
#~ msgstr "اسحب إلى هنا ليضاف إلى المفضّلة"
#~ msgid "New Window"
#~ msgstr "نافذة جديدة"
#~ msgid "Quit Application"
#~ msgstr "أغلق التطبيق"
#~ msgid "Remove from Favorites"
#~ msgstr "أزِل من المفضّلة"
#~ msgid "Add to Favorites"
#~ msgstr "أضِف إلى المفضّلة"
#~ msgid "Icon size"
#~ msgstr "حجم الأيقونة"
#~ msgid "Monitor"
#~ msgstr "الشاشة"
#~ msgid "%s is away."
#~ msgstr "%s غائب."
#~ msgid "%s is offline."
#~ msgstr "%s غير متّصل."
#~ msgid "%s is online."
#~ msgstr "%s متّصل."
#~ msgid "%s is busy."
#~ msgstr "%s مشغول."
#~ msgid ""
#~ "This mode presents all applications from all workspaces in one selection "
#~ "list. Instead of using the application icon of every window, it uses "
#~ "small thumbnails resembling the window itself."
#~ msgstr ""
#~ "يعرض هذا النمط كل التطبيقات من كل مساحات العمل في قائمة واحدة، وبدلا من "
#~ "استخدام أيقونة التطبيق لكل النوافذ يستخدم صورة مصغّرة للنافذة نفسها."
#~ msgid "Workspace & Icons"
#~ msgstr "مساحة العمل مع أيقونات"
#~ msgid ""
#~ "This mode let's you switch between the applications of your current "
#~ "workspace and gives you additionally the option to switch to the last "
#~ "used application of your previous workspace. This is always the last "
#~ "symbol in the list and is segregated by a separator/vertical line if "
#~ "available. \n"
#~ "Every window is represented by its application icon."
#~ msgstr ""
#~ "يتيح هذا النمط التنقل بين التطبيقات في مساحة العمل الحالية بالإضافة إلى "
#~ "إمكانية الانتقال إلى آخر تطبيق استُخدم في مساحة العمل السابقة، والذي سيكون "
#~ "دائما آخر عنصر في القائمة مفصولا بخط رأسي.\n"
#~ "تُمثل كل نافذة بأيقونة التطبيق الذي تنتمي إليه."
#~ msgid "Move current selection to front before closing the popup"
#~ msgstr "انقل الاختيار الحالي إلى المقدمة قبل غلق النافذة المنبثقة."
#~ msgid ""
#~ "The Alternate Tab can be used in different modes, that affect the way "
#~ "windows are chosen and presented."
#~ msgstr ""
#~ "يمكن استخدام هذا الامتداد في أنماط مختلفة تؤثر على كيفية اختيار وعرض "
#~ "النوافذ."
#~ msgid "Removable Devices"
#~ msgstr "الأجهزة المنفصلة"

333
po/as.po Normal file
View File

@@ -0,0 +1,333 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Nilamdyuti Goswami <ngoswami@redhat.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=extensions\n"
"POT-Creation-Date: 2013-07-26 09:56+0000\n"
"PO-Revision-Date: 2013-07-29 13:07+0530\n"
"Last-Translator: Nilamdyuti Goswami <ngoswami@redhat.com>\n"
"Language-Team: American English <kde-i18n-doc@kde.org>\n"
"Language: en_US\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 1.5\n"
#: ../data/gnome-classic.desktop.in.h:1
#: ../data/gnome-classic.session.desktop.in.in.h:1
msgid "GNOME Classic"
msgstr "GNOME ক্লাচিক"
#: ../data/gnome-classic.desktop.in.h:2
msgid "This session logs you into GNOME Classic"
msgstr "এই অধিবেশনে আপোনাক GNOME ক্লাচিকলৈ লগ কৰে"
#: ../data/gnome-shell-classic.desktop.in.in.h:1
msgid "GNOME Shell Classic"
msgstr "GNOME শ্বেল ক্লাচিক"
#: ../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 শ্বেল চলাওতে এই কি'য়ে org.gnome.mutter ত থকা কি' অভাৰৰাইড কৰে।"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "উইন্ডোসমূহক পৰ্দাৰ প্ৰান্তসমূহত এৰোতে প্ৰান্ত টাইলিং সামৰ্থবান কৰক"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:4
msgid "Workspaces only on primary monitor"
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:37
msgid "Present windows as"
msgstr "উইন্ডোসমূহক এই ধৰণে পৰিৱেশন কৰক"
#: ../extensions/alternate-tab/prefs.js:62
msgid "Show only windows in the current workspace"
msgstr "কেৱল বৰ্তমান কাৰ্য্যস্থানত থকা উইন্ডোসমূহ দেখুৱাওক"
#. add the new entries
#: ../extensions/alternative-status-menu/extension.js:125
msgid "Suspend"
msgstr "স্থগিত কৰক"
#: ../extensions/alternative-status-menu/extension.js:128
msgid "Hibernate"
msgstr "হাইবাৰনেইট"
#: ../extensions/alternative-status-menu/extension.js:131
msgid "Power Off"
msgstr "বন্ধ কৰক"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1
msgid "Enable suspending"
msgstr "স্থগিত কৰা সামৰ্থবান কৰক"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2
msgid "Control the visibility of the Suspend menu item"
msgstr "স্থগিত মেনু বস্তুৰ দৃশ্যমানতা নিয়ন্ত্ৰণ কৰক"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3
msgid "Enable hibernating"
msgstr "হাইবেৰনেইট কৰা সামৰ্থবান কৰক"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4
msgid "Control the visibility of the Hibernate menu item"
msgstr "হাইবেৰনেইট মেনু বস্তুৰ দৃশ্যমানতা নিয়ন্ত্ৰণ কৰক"
#: ../extensions/apps-menu/extension.js:39
msgid "Activities Overview"
msgstr "কাৰ্য্যসমূহৰ অভাৰভিউ"
#: ../extensions/apps-menu/extension.js:113
msgid "Favorites"
msgstr "পছন্দৰ"
#: ../extensions/apps-menu/extension.js:276
msgid "Applications"
msgstr "এপ্লিকেচনসমূহ"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid "Application and workspace list"
msgstr "এপ্লিকেচন আৰু কাৰ্য্যস্থান তালিকা"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
msgstr ""
"স্ট্ৰিংসমূহৰ এটা তালিকা, প্ৰতিটোয়ে এটা এপ্লিকেচন আইডি (ডেস্কটপ ফাইল নাম), এটা "
"কল'ন "
"আৰু কাৰ্য্যস্থান নম্বৰৰ সৈতে অনুকৰণ কৰা অন্তৰ্ভুক্ত কৰে"
#: ../extensions/auto-move-windows/prefs.js:55
msgid "Application"
msgstr "এপ্লিকেচন"
#: ../extensions/auto-move-windows/prefs.js:64
#: ../extensions/auto-move-windows/prefs.js:106
msgid "Workspace"
msgstr "কাৰ্য্যস্থান"
#: ../extensions/auto-move-windows/prefs.js:80
msgid "Add rule"
msgstr "নিয়ম যোগ কৰক"
#: ../extensions/auto-move-windows/prefs.js:94
msgid "Create new matching rule"
msgstr "নতুন মিল খোৱা নিয়ম সৃষ্টি কৰক"
#: ../extensions/auto-move-windows/prefs.js:98
msgid "Add"
msgstr "যোগ কৰক"
#: ../extensions/drive-menu/extension.js:72
#, c-format
msgid "Ejecting drive '%s' failed:"
msgstr "ড্ৰাইভ '%s' বাহিৰ কৰাটো ব্যৰ্থ হ'ল:"
#: ../extensions/drive-menu/extension.js:89
msgid "Removable devices"
msgstr "আতৰাব পৰা ডিভাইচসমূহ"
#: ../extensions/drive-menu/extension.js:106
msgid "Open File"
msgstr "ফাইল খোলক"
#: ../extensions/example/extension.js:17
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 "যদি ৰিক্ত নহয়, ই পেনেল ক্লিক কৰোতে দেখুৱা লিখনী অন্তৰ্ভুক্ত কৰিব।"
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: ../extensions/example/prefs.js:30
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/example/prefs.js:36
msgid "Message:"
msgstr "বাৰ্তা:"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
msgid "Use more screen for windows"
msgstr "উইন্ডোসমূহৰ বাবে অধিক পৰ্দা ব্যৱহাৰ কৰক"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
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 ""
"পৰ্দা অনুপাত হাৰৰ সৈতে অনুকূলন কৰি উইন্ডো থাম্বনেইলসমূহ উপস্থাপন কৰাৰ বাবে "
"অধিক পৰ্দা ব্যৱহাৰ কৰাৰ, "
"আৰু বান্ধনী বাকচ হ্ৰাস কৰিবলে সিহতক ততোধিক শৃঙ্খলাবদ্ধ কৰাৰ চেষ্টা কৰক। "
"এই সংহতি কেৱল স্বাভাৱিক উপস্থাপন কৌশলৰ সৈতে প্ৰযোজ্য।"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid "Place window captions on top"
msgstr "উইন্ডো কেপষণসমূহ ওপৰত ৰাখক"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
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 ""
"যদি সত্য, উইন্ডো কেপষণ প্ৰতিটো থাম্বনেইলৰ ওপৰত ৰাখক, ইয়াক তলত ৰখাৰ শ্বেলৰ "
"অবিকল্পিত "
"প্ৰক্ৰিয়াক অভাৰৰাইড কৰাকৈ। এই সংহতিৰ পৰিবৰ্তন প্ৰভাৱশালী হ'বলৈ শ্বেল পুনৰাম্ভ "
"কৰাৰ প্ৰয়োজন।"
#: ../extensions/places-menu/extension.js:77
msgid "Places"
msgstr "স্থানবোৰ"
#: ../extensions/places-menu/placeDisplay.js:56
#, c-format
msgid "Failed to launch \"%s\""
msgstr "\"%s\" লঞ্চ কৰিবলে ব্যৰ্থ"
#: ../extensions/places-menu/placeDisplay.js:98
#: ../extensions/places-menu/placeDisplay.js:121
msgid "Computer"
msgstr "কমপিউটাৰ"
#: ../extensions/places-menu/placeDisplay.js:199
msgid "Home"
msgstr "ঘৰ"
#: ../extensions/places-menu/placeDisplay.js:286
msgid "Browse Network"
msgstr "নেটৱাৰ্ক ব্ৰাউছ কৰক"
#: ../extensions/systemMonitor/extension.js:214
msgid "CPU"
msgstr "CPU"
#: ../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"
msgstr "থীম নাম"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "~/.themes/name/gnome-shell ৰ পৰা ল'ড কৰিব লগিয়া থীমৰ নাম"
#: ../extensions/window-list/extension.js:382
#: ../extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "কাৰ্য্যস্থান সূচক"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1
msgid "When to group windows"
msgstr "উইন্ডোসমূহ কেতিয়া একত্ৰিত কৰা হ'ব"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are \"never\", \"auto\" and \"always\"."
msgstr ""
"উইন্ডো তালিকাত একেটা এপ্লিকেচনৰ পৰা উইন্ডোসমূহ কেতিয়া দলবদ্ধ কৰা হ'ব নিৰ্ধাৰণ "
"কৰে। "
"সম্ভাব্য মানসমূহ হ'ল \"কেতিয়াও নহয়\", \"স্বচালিত\" আৰু \"সদায়\"।"
#: ../extensions/window-list/prefs.js:30
msgid "Window Grouping"
msgstr "উইন্ডো দলবদ্ধকৰণ"
#: ../extensions/window-list/prefs.js:49
msgid "Never group windows"
msgstr "উইন্ডোসমূহ কেতিয়াও দলবদ্ধ নকৰিব "
#: ../extensions/window-list/prefs.js:50
msgid "Group windows when space is limited"
msgstr "উইন্ডোসমূহ দলবদ্ধ কৰক যেতিয়া স্থান সীমিত থাকে"
#: ../extensions/window-list/prefs.js:51
msgid "Always group windows"
msgstr "উইন্ডোসমূহ সদায় দলবদ্ধ কৰিব"
#: ../extensions/workspace-indicator/prefs.js:141
msgid "Workspace names:"
msgstr "কাৰ্য্যস্থানৰ নামবোৰ:"
#: ../extensions/workspace-indicator/prefs.js:152
msgid "Name"
msgstr "নাম"
#: ../extensions/workspace-indicator/prefs.js:186
#, c-format
msgid "Workspace %d"
msgstr "কাৰ্য্যস্থান %d"
#: ../extensions/xrandr-indicator/extension.js:30
msgid "Normal"
msgstr "স্বাভাৱিক"
#: ../extensions/xrandr-indicator/extension.js:31
msgid "Left"
msgstr "বাঁওফাল"
#: ../extensions/xrandr-indicator/extension.js:32
msgid "Right"
msgstr "সোঁফাল"
#: ../extensions/xrandr-indicator/extension.js:33
msgid "Upside-down"
msgstr "উলোটা"
#: ../extensions/xrandr-indicator/extension.js:50
msgid "Display"
msgstr "প্ৰদৰ্শন"
#: ../extensions/xrandr-indicator/extension.js:87
msgid "Display Settings"
msgstr "প্ৰদৰ্শনৰ সংহতিসমূহ"

607
po/ca.po
View File

@@ -2,152 +2,93 @@
# Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell-extensions package.
# Jordi Mas i Hernandez <jmas@softcatala.org>, 2011.
# Gil Forcada <gilforcada@guifi.net>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-08-19 23:28+0200\n"
"PO-Revision-Date: 2011-08-02 07:30+0200\n"
"Last-Translator: jmas@softcatala.org\n"
"Language-Team: ca_ES <tradgnome@softcatala.net>\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=extensions\n"
"POT-Creation-Date: 2012-09-06 17:51+0000\n"
"PO-Revision-Date: 2012-09-29 00:02+0200\n"
"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Content-Transfer-Encoding: 8bits\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#: ../extensions/alternative-status-menu/extension.js:39
msgid "Available"
msgstr "Disponible"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
msgid "The application icon mode."
msgstr "El mode d'icona d'aplicació."
#: ../extensions/alternative-status-menu/extension.js:44
msgid "Busy"
msgstr "Ocupat"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
"only' (shows only the application icon) or 'both'."
msgstr ""
"Configura com es mostren les icones en l'intercanviador. Les possibilitats "
"vàlides són «thumbnail-only» (només miniatures, mostra les miniatures de les "
"finestres), «app-icon-only» (només icona de l'aplicació, mostra només la "
"icona de l'aplicació) o «both» (ambdós, mostra tan la icona de l'aplicació "
"com la miniatura). "
#: ../extensions/alternative-status-menu/extension.js:52
msgid "My Account"
msgstr "El meu compte"
#: ../extensions/alternate-tab/prefs.js:26
msgid "Thumbnail only"
msgstr "Només miniatures"
#: ../extensions/alternative-status-menu/extension.js:56
msgid "System Settings"
msgstr "Paràmetres de l'ordinador"
#: ../extensions/alternate-tab/prefs.js:27
msgid "Application icon only"
msgstr "Només la icona de l'aplicació"
#: ../extensions/alternative-status-menu/extension.js:63
msgid "Lock Screen"
msgstr "Bloca la pantalla"
#: ../extensions/alternate-tab/prefs.js:28
msgid "Thumbnail and application icon"
msgstr "Miniatura i icona de l'aplicació"
#: ../extensions/alternative-status-menu/extension.js:67
msgid "Switch User"
msgstr "Canvia d'usuari"
#: ../extensions/alternate-tab/prefs.js:43
msgid "Present windows as"
msgstr "Mostra les finestres com a"
#: ../extensions/alternative-status-menu/extension.js:72
msgid "Log Out..."
msgstr "Surt..."
#: ../extensions/alternate-tab/prefs.js:68
msgid "Show only windows in the current workspace"
msgstr "Mostra només les icones de l'espai de treball actual"
#: ../extensions/alternative-status-menu/extension.js:79
#. add the new entries
#: ../extensions/alternative-status-menu/extension.js:68
msgid "Suspend"
msgstr "Atura temporalment"
#: ../extensions/alternative-status-menu/extension.js:85
#: ../extensions/alternative-status-menu/extension.js:73
msgid "Hibernate"
msgstr "Hiberna"
#: ../extensions/alternative-status-menu/extension.js:91
msgid "Power Off..."
msgstr "Apaga..."
#: ../extensions/alternative-status-menu/extension.js:78
msgid "Power Off"
msgstr "Apaga"
#: ../extensions/alternate-tab/extension.js:44
msgid ""
"This is the first time you use the Alternate Tab extension. \n"
"Please choose your preferred behaviour:\n"
"\n"
"All & Thumbnails:\n"
" This mode presents all applications from all workspaces in one "
"selection \n"
" list. Instead of using the application icon of every window, it uses "
"small \n"
" thumbnails resembling the window itself. \n"
"\n"
"Workspace & Icons:\n"
" This mode let's you switch between the applications of your current \n"
" workspace and gives you additionally the option to switch to the last "
"used \n"
" application of your previous workspace. This is always the last symbol "
"in \n"
" the list and is segregated by a separator/vertical line if available. \n"
" Every window is represented by its application icon. \n"
"\n"
"Native:\n"
" This mode is the native GNOME 3 behaviour or in other words: Clicking \n"
" native switches the Alternate Tab extension off. \n"
msgstr ""
"Aquest és el primer cop que utilitzeu l'extensió «Alternate Tab». \n"
"Trieu el comportament que preferiu:\n"
"\n"
"Totes i miniatures:\n"
" Aquest mode presenta totes les aplicacions de tots els espais de treball "
"com a\n"
" una llista de selecció. En comptes de mostrar la icona d'aplicació de "
"cada finestra, mostra les \n"
" miniatures que representen el contingut de la finestra. \n"
"\n"
"Espai de treball i icones:\n"
" Aquest mode us permet canviar entre aplicacions de l'espai de treball "
"actual \n"
" i us dóna la possibilitat de canviar a l'última aplicació usada de "
"l'espai de \n"
" treball anterior. Aquest és sempre el darrer símbol a la llista i està "
"separat \n"
" per una línia vertical/separador quan està disponible. \n"
" Cada finestra es representa per la seva icona d'aplicació. \n"
"\n"
"Nadiu:\n"
" Aquest és el mode de comportament nadiu al GNOME 3 o amb altres "
"paraules: fent \n"
" clic inhabilita l'extensió «Alternate Tab». \n"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1
msgid "Enable suspending"
msgstr "Habilita l'aturada temporal"
#: ../extensions/alternate-tab/extension.js:269
msgid "Alt Tab Behaviour"
msgstr "Comportament de l'«Alternate Tab»"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2
msgid "Control the visibility of the Suspend menu item"
msgstr "Permet controlar si es mostra l'element de menú «Atura temporalment»"
#: ../extensions/alternate-tab/extension.js:285
msgid "All & Thumbnails"
msgstr "Totes i miniatures"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3
msgid "Enable hibernating"
msgstr "Habilita la hibernació"
#: ../extensions/alternate-tab/extension.js:292
msgid "Workspace & Icons"
msgstr "Espai de treball i icones"
#: ../extensions/alternate-tab/extension.js:299
msgid "Native"
msgstr "Nadiu"
#: ../extensions/alternate-tab/extension.js:306
msgid "Cancel"
msgstr "Cancel·la"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
msgid "Ask the user for a default behaviour if true."
msgstr "Si és «true» (cert) pregunta a l'usuari pel comportament per defecte."
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
msgid "Indicates if Alternate Tab is newly installed"
msgstr "Indica si s'acaba d'instal·lar l'«Alternate Tab»"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:3
msgid ""
"Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and "
"workspace_icons."
msgstr ""
"Defineix el comportament de l'«Alternate Tab». Els valors possibles són: "
"«native» (nadiu), «all_thumbnails» (totes i miniatures) i "
"«workspace_icons» (espai de treball i icones)."
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
msgid "The alt tab behaviour."
msgstr "Comportament de l'«Alternate Tab»"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4
msgid "Control the visibility of the Hibernate menu item"
msgstr "Permet controlar si es mostra l'element de menú «Hiberna»"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid "Application and workspace list"
msgstr "Aplicació i llista d'espais de treball"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
@@ -156,62 +97,52 @@ msgstr ""
"d'aplicació (nom del fitxer de l'escriptori), seguit de dos punts i el "
"número de l'espai de treball"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid "Application and workspace list"
msgstr "Aplicació i llista d'espais de treball"
#: ../extensions/auto-move-windows/prefs.js:55
msgid "Application"
msgstr "Aplicació"
#: ../extensions/dock/extension.js:437
#: ../extensions/auto-move-windows/prefs.js:64
#: ../extensions/auto-move-windows/prefs.js:106
msgid "Workspace"
msgstr "Espai de treball"
#: ../extensions/auto-move-windows/prefs.js:80
msgid "Add rule"
msgstr "Afegeix una regla"
#: ../extensions/auto-move-windows/prefs.js:94
msgid "Create new matching rule"
msgstr "Crea una regla de coincidència nova"
#: ../extensions/auto-move-windows/prefs.js:98
msgid "Add"
msgstr "Afegeix"
#: ../extensions/dock/extension.js:600
msgid "Drag here to add favorites"
msgstr "Arrossegueu aquí per afegir als preferits"
#: ../extensions/dock/extension.js:771
#: ../extensions/dock/extension.js:926
msgid "New Window"
msgstr "Finestra nova"
#: ../extensions/dock/extension.js:773
#: ../extensions/dock/extension.js:928
msgid "Quit Application"
msgstr "Surt de l'aplicació"
#: ../extensions/dock/extension.js:778
#: ../extensions/dock/extension.js:933
msgid "Remove from Favorites"
msgstr "Suprimeix dels preferits"
#: ../extensions/dock/extension.js:779
#: ../extensions/dock/extension.js:934
msgid "Add to Favorites"
msgstr "Afegeix als preferits"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
msgid "Autohide duration"
msgstr "Duració de l'ocultació automàtica"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
msgid "Autohide effect"
msgstr "Efecte de l'ocultació automàtica"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
msgid "Enable/disable autohide"
msgstr "Habilita/Inhabilita l'ocultació automàtica"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
msgid "Icon size"
msgstr "Mida de la icona"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
msgid "Position of the dock"
msgstr "Posició de l'acoblador"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
msgid "Sets icon size of the dock."
msgstr "Defineix la mida de la icona per l'acoblador."
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
msgid ""
"Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale'"
msgstr ""
"Defineix l'efecte de l'acoblador amagat. Els valors permesos són "
"«resize» (amplia) o «rescale» (escala)"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
msgid ""
"Sets the position of the dock in the screen. Allowed values are 'right' or "
"'left'"
@@ -219,61 +150,115 @@ msgstr ""
"Defineix la posició de l'acoblador a la pantalla. Els valors permesos són "
"«right» (dreta) o «left» (esquerra)"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
msgid "Icon size"
msgstr "Mida de la icona"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
msgid "Sets icon size of the dock."
msgstr "Defineix la mida de la icona per l'acoblador."
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
msgid "Enable/disable autohide"
msgstr "Habilita/inhabilita l'ocultació automàtica"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
msgid "Autohide effect"
msgstr "Efecte de l'ocultació automàtica"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
msgid ""
"Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' and "
"'move'"
msgstr ""
"Defineix l'efecte de l'acoblador ocult. Els valors permesos són "
"«resize» (amplia), «rescale» (escala) i «move» (mou)"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
msgid "Autohide duration"
msgstr "Duració de l'ocultació automàtica"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
msgid "Sets the time duration of the autohide effect."
msgstr "Defineix la durada en temps de l'efecte d'ocultació automàtica."
#: ../extensions/example/extension.js:11
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:10
msgid "Monitor"
msgstr "Pantalla"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:11
msgid ""
"Sets monitor to display dock in. The default value (-1) is the primary "
"monitor."
msgstr ""
"Estableix la pantalla a on es mostra l'acoblador. El valor per defecte és "
"«-1», la pantalla principal."
#: ../extensions/drive-menu/extension.js:56
msgid "Removable devices"
msgstr "Dispositius extraïbles"
#: ../extensions/drive-menu/extension.js:67
msgid "Open file manager"
msgstr "Obre del gestor de fitxers"
#: ../extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "Hola, món!"
#: ../extensions/gajim/extension.js:219
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1
msgid "Alternative greeting text."
msgstr "Text de rebuda alternatiu."
#: ../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 ""
"Si no és buit, conté el text que es mostrarà quan es faci clic en el quadre."
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: ../extensions/example/prefs.js:30
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 ""
"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 del rebedor."
#: ../extensions/example/prefs.js:36
msgid "Message:"
msgstr "Missatge:"
#: ../extensions/gajim/extension.js:226
#, c-format
msgid "%s is away."
msgstr "%s està absent."
#: ../extensions/gajim/extension.js:222
#: ../extensions/gajim/extension.js:229
#, c-format
msgid "%s is offline."
msgstr "%s està fora de línia."
#: ../extensions/gajim/extension.js:225
#: ../extensions/gajim/extension.js:232
#, c-format
msgid "%s is online."
msgstr "%s està en línia."
#: ../extensions/gajim/extension.js:228
#: ../extensions/gajim/extension.js:235
#, c-format
msgid "%s is busy."
msgstr "%s està ocupat."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
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 ""
"Si és «true» (cert), posiciona el títol de la finestra damunt de la "
"miniatura corresponent, substituint el comportament per defecte del Shell de "
"posicionar-lo a baix. Cal reiniciar el Shell per tal de que aquest canvi "
"tingui efecte."
msgid "Use more screen for windows"
msgstr "Utilitza més pantalla per les finestres"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
msgid "Place window captions on top"
msgstr "Posiciona els títols de les finestres al damunt"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid ""
"The algorithm used to layout thumbnails in the overview. 'grid' to use the "
"default grid based algorithm, 'natural' to use another one that reflects "
"more the position and size of the actual window"
msgstr ""
"L'algoritme per posicionar les miniatures en la perspectiva general. Useu "
"«grid» (graella) per a utilitzar l'algoritme per defecte basat en disposició "
"en graella, o «natural» (natural) per a usar un algoritme que reflexa millor "
"la posició i mida de la finestra actual."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
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. "
@@ -285,38 +270,258 @@ msgstr ""
"configuració només s'aplica a l'estratègia de posicionament de finestres "
"natural."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:5
msgid "Use more screen for windows"
msgstr "Utilitza més pantalla per les finestres"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid "Place window captions on top"
msgstr "Posiciona els títols de les finestres al damunt"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:6
msgid "Window placement strategy"
msgstr "Estratègia de posicionament de la finestra"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
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 ""
"Si és «true» (cert), posiciona el títol de la finestra damunt de la "
"miniatura corresponent, substituint el comportament per defecte del Shell de "
"posicionar-lo a baix. Cal reiniciar el Shell per tal de que aquest canvi "
"tingui efecte."
#: ../extensions/places-menu/extension.js:46
msgid "Places"
msgstr "Llocs"
#: ../extensions/places-menu/extension.js:47
msgid "Devices"
msgstr "Dispositius"
#: ../extensions/places-menu/extension.js:48
msgid "Bookmarks"
msgstr "Adreces d'interès"
#: ../extensions/places-menu/extension.js:49
msgid "Network"
msgstr "Xarxa"
#: ../extensions/places-menu/placeDisplay.js:48
#, c-format
msgid "Failed to launch \"%s\""
msgstr "No s'ha pogut iniciar «%s»"
#: ../extensions/places-menu/placeDisplay.js:121
msgid "Home"
msgstr "Inici"
#: ../extensions/places-menu/placeDisplay.js:184
msgid "File System"
msgstr "Sistema de fitxers"
#: ../extensions/places-menu/placeDisplay.js:188
msgid "Browse network"
msgstr "Navega per la xarxa"
#: ../extensions/systemMonitor/extension.js:213
msgid "CPU"
msgstr "CPU"
#: ../extensions/systemMonitor/extension.js:266
msgid "Memory"
msgstr "Memòria"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
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"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "Theme name"
msgstr "Nom del tema"
#: ../extensions/xrandr-indicator/extension.js:26
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
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"
#: ../extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Indicador de l'espai de treball"
#: ../extensions/workspace-indicator/prefs.js:141
msgid "Workspace names:"
msgstr "Noms dels espais de treball:"
#: ../extensions/workspace-indicator/prefs.js:152
msgid "Name"
msgstr "Nom"
#: ../extensions/workspace-indicator/prefs.js:186
#, c-format
msgid "Workspace %d"
msgstr "Espai de treball %d"
#: ../extensions/xrandr-indicator/extension.js:30
msgid "Normal"
msgstr "Normal"
#: ../extensions/xrandr-indicator/extension.js:27
#: ../extensions/xrandr-indicator/extension.js:31
msgid "Left"
msgstr "Esquerra"
#: ../extensions/xrandr-indicator/extension.js:28
#: ../extensions/xrandr-indicator/extension.js:32
msgid "Right"
msgstr "Dreta"
#: ../extensions/xrandr-indicator/extension.js:29
#: ../extensions/xrandr-indicator/extension.js:33
msgid "Upside-down"
msgstr "Capgira"
#: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..."
msgstr "Configura els paràmetres de visualització..."
#: ../extensions/xrandr-indicator/extension.js:50
msgid "Display"
msgstr "Pantalla"
#: ../extensions/xrandr-indicator/extension.js:80
msgid "Display Settings"
msgstr "Paràmetres de la pantalla"
#~ msgid "The alt tab behaviour."
#~ msgstr "Comportament de l'«Alternate Tab»."
#~ msgid ""
#~ "Sets the Alt-Tab behaviour. Possible values are: all_thumbnails and "
#~ "workspace_icons. See the configuration dialogs for details."
#~ msgstr ""
#~ "Defineix el comportament de l'«Alternate Tab». Els valors possibles són: "
#~ "«all_thumbnails» (totes i les miniatures) i «workspace_icons» (espais de "
#~ "treball i icones). Vegeu els diàlegs de configuració per saber-ne més."
#~ msgid ""
#~ "This mode presents all applications from all workspaces in one selection "
#~ "list. Instead of using the application icon of every window, it uses "
#~ "small thumbnails resembling the window itself."
#~ msgstr ""
#~ "Aquest mode mostra totes les aplicacions de tots els espais de treball en "
#~ "una sola llista de selecció. En comptes de fer servir la icona de "
#~ "l'aplicació per cada finestra, fa servir miniatures de les mateixes "
#~ "finestres de les aplicacions."
#~ msgid "Workspace & Icons"
#~ msgstr "Espai de treball i icones"
#~ msgid ""
#~ "This mode let's you switch between the applications of your current "
#~ "workspace and gives you additionally the option to switch to the last "
#~ "used application of your previous workspace. This is always the last "
#~ "symbol in the list and is segregated by a separator/vertical line if "
#~ "available. \n"
#~ "Every window is represented by its application icon."
#~ msgstr ""
#~ "Aquest mode us permet canviar entre les aplicacions de l'espai de treball "
#~ "actual i us dóna la possibilitat de canviar a l'última aplicació "
#~ "utilitzada de l'espai de treball anterior. Es mostra, en cas d'estar "
#~ "disponible, sempre com a l'última icona de la llista, separada de la "
#~ "resta amb un separador vertical.\n"
#~ "Cada finestra està representada per la seva icona d'aplicació."
#~ msgid "Move current selection to front before closing the popup"
#~ msgstr ""
#~ "Mou la selecció actual al primer pla abans de tancar el diàleg emergent"
#~ msgid ""
#~ "The Alternate Tab can be used in different modes, that affect the way "
#~ "windows are chosen and presented."
#~ msgstr ""
#~ "L'«Alternate Tab» es pot utilitzar de diferents maneres que canvien la "
#~ "forma en que es seleccionen i es mostren les finestres."
#~ msgid "Removable Devices"
#~ msgstr "Dispositius extraïbles"
#~ msgid "Configure display settings..."
#~ msgstr "Configura els paràmetres de visualització..."
#~ msgid "Available"
#~ msgstr "Disponible"
#~ msgid "Busy"
#~ msgstr "Ocupat"
#~ msgid "My Account"
#~ msgstr "El meu compte"
#~ msgid "Lock Screen"
#~ msgstr "Bloca la pantalla"
#~ msgid "Switch User"
#~ msgstr "Canvia d'usuari"
#~ msgid "Log Out..."
#~ msgstr "Surt..."
#~ msgid ""
#~ "This is the first time you use the Alternate Tab extension. \n"
#~ "Please choose your preferred behaviour:\n"
#~ "\n"
#~ "All & Thumbnails:\n"
#~ " This mode presents all applications from all workspaces in one "
#~ "selection \n"
#~ " list. Instead of using the application icon of every window, it uses "
#~ "small \n"
#~ " thumbnails resembling the window itself. \n"
#~ "\n"
#~ "Workspace & Icons:\n"
#~ " This mode let's you switch between the applications of your current \n"
#~ " workspace and gives you additionally the option to switch to the last "
#~ "used \n"
#~ " application of your previous workspace. This is always the last "
#~ "symbol in \n"
#~ " the list and is segregated by a separator/vertical line if "
#~ "available. \n"
#~ " Every window is represented by its application icon. \n"
#~ "\n"
#~ "Native:\n"
#~ " This mode is the native GNOME 3 behaviour or in other words: "
#~ "Clicking \n"
#~ " native switches the Alternate Tab extension off. \n"
#~ msgstr ""
#~ "Aquest és el primer cop que utilitzeu l'extensió «Alternate Tab». \n"
#~ "Trieu el comportament que preferiu:\n"
#~ "\n"
#~ "Totes i miniatures:\n"
#~ " Aquest mode presenta totes les aplicacions de tots els espais de "
#~ "treball com a\n"
#~ " una llista de selecció. En comptes de mostrar la icona d'aplicació de "
#~ "cada finestra, mostra les \n"
#~ " miniatures que representen el contingut de la finestra. \n"
#~ "\n"
#~ "Espai de treball i icones:\n"
#~ " Aquest mode us permet canviar entre aplicacions de l'espai de treball "
#~ "actual \n"
#~ " i us dóna la possibilitat de canviar a l'última aplicació usada de "
#~ "l'espai de \n"
#~ " treball anterior. Aquest és sempre el darrer símbol a la llista i "
#~ "està separat \n"
#~ " per una línia vertical/separador quan està disponible. \n"
#~ " Cada finestra es representa per la seva icona d'aplicació. \n"
#~ "\n"
#~ "Nadiu:\n"
#~ " Aquest és el mode de comportament nadiu al GNOME 3 o amb altres "
#~ "paraules: fent \n"
#~ " clic inhabilita l'extensió «Alternate Tab». \n"
#~ msgid "Alt Tab Behaviour"
#~ msgstr "Comportament de l'«Alternate Tab»"
#~ msgid "Cancel"
#~ msgstr "Cancel·la"
#~ msgid "Ask the user for a default behaviour if true."
#~ msgstr ""
#~ "Si és «true» (cert) pregunta a l'usuari pel comportament per defecte."
#~ msgid "Indicates if Alternate Tab is newly installed"
#~ msgstr "Indica si s'acaba d'instal·lar l'«Alternate Tab»"
#~ msgid ""
#~ "The algorithm used to layout thumbnails in the overview. 'grid' to use "
#~ "the default grid based algorithm, 'natural' to use another one that "
#~ "reflects more the position and size of the actual window"
#~ msgstr ""
#~ "L'algoritme per posicionar les miniatures en la perspectiva general. Useu "
#~ "«grid» (graella) per a utilitzar l'algoritme per defecte basat en "
#~ "disposició en graella, o «natural» (natural) per a usar un algoritme que "
#~ "reflexa millor la posició i mida de la finestra actual."
#~ msgid "Window placement strategy"
#~ msgstr "Estratègia de posicionament de la finestra"

461
po/cs.po
View File

@@ -1,146 +1,125 @@
# Czech translation for gnome-shell-extensions.
# Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell-extensions package.
#
# Marek Černocký <marek@manet.cz>, 2011.
# Marek Černocký <marek@manet.cz>, 2011, 2012, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=extensions\n"
"POT-Creation-Date: 2011-12-19 15:33+0000\n"
"PO-Revision-Date: 2011-12-20 00:11+0100\n"
"POT-Creation-Date: 2013-06-07 22:57+0000\n"
"PO-Revision-Date: 2013-06-08 07:44+0200\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: cs\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Gtranslator 2.91.6\n"
#: ../extensions/alternative-status-menu/extension.js:44
msgid "Notifications"
msgstr "Oznamování"
#: ../data/gnome-classic.desktop.in.h:1
#: ../data/gnome-classic.session.desktop.in.in.h:1
msgid "GNOME Classic"
msgstr "GNOME klasik"
#: ../extensions/alternative-status-menu/extension.js:52
msgid "Online Accounts"
msgstr "Účty on-line"
#: ../data/gnome-classic.desktop.in.h:2
msgid "This session logs you into GNOME Classic"
msgstr "Toto sezení vás přihlásí do GNOME klasik"
#: ../extensions/alternative-status-menu/extension.js:56
msgid "System Settings"
msgstr "Nastavení systému"
#: ../data/gnome-shell-classic.desktop.in.in.h:1
msgid "GNOME Shell Classic"
msgstr "GNOME Shell klasik"
#: ../extensions/alternative-status-menu/extension.js:63
msgid "Lock Screen"
msgstr "Zamknout obrazovku"
#: ../data/gnome-shell-classic.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Správa oken a spouštění aplikací"
#: ../extensions/alternative-status-menu/extension.js:68
msgid "Switch User"
msgstr "Přepnout uživatele"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1
msgid "Attach modal dialog to the parent window"
msgstr "Modální dialogová okna připojovat k rodičovskému oknu"
#: ../extensions/alternative-status-menu/extension.js:73
msgid "Log Out..."
msgstr "Odhlásit se…"
#: ../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 "Když běží GNOME Shell, tento klíč přepíše klíč v org.gnome.mutter"
#: ../extensions/alternative-status-menu/extension.js:81
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3
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.in.h:4
#| msgid "Workspace Indicator"
msgid "Workspaces only on primary monitor"
msgstr "Pracovní plochy jen na hlavním monitoru"
#: ../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:37
msgid "Present windows as"
msgstr "Představovat okna jako"
#: ../extensions/alternate-tab/prefs.js:62
msgid "Show only windows in the current workspace"
msgstr "Zobrazovat pouze okna z aktuální pracovní plochy"
#. add the new entries
#: ../extensions/alternative-status-menu/extension.js:125
msgid "Suspend"
msgstr "Uspat do paměti"
#: ../extensions/alternative-status-menu/extension.js:87
#: ../extensions/alternative-status-menu/extension.js:128
msgid "Hibernate"
msgstr "Uspat na disk"
#: ../extensions/alternative-status-menu/extension.js:93
msgid "Power Off..."
msgstr "Vypnout"
#: ../extensions/alternative-status-menu/extension.js:131
msgid "Power Off"
msgstr "Vypnout"
#: ../extensions/alternate-tab/extension.js:54
msgid ""
"This is the first time you use the Alternate Tab extension. \n"
"Please choose your preferred behaviour:\n"
"\n"
"All & Thumbnails:\n"
" This mode presents all applications from all workspaces in one "
"selection \n"
" list. Instead of using the application icon of every window, it uses "
"small \n"
" thumbnails resembling the window itself. \n"
"\n"
"Workspace & Icons:\n"
" This mode let's you switch between the applications of your current \n"
" workspace and gives you additionally the option to switch to the last "
"used \n"
" application of your previous workspace. This is always the last symbol "
"in \n"
" the list and is segregated by a separator/vertical line if available. \n"
" Every window is represented by its application icon. \n"
"\n"
"If you whish to revert to the default behavior for the Alt-Tab switcher, "
"just\n"
"disable the extension from extensions.gnome.org or the Advanced Settings "
"application."
msgstr ""
"Právě jste poprvé použili rozšíření Alternate Tab.\n"
"Vyberte si vámi upřednostňované chování:\n"
"\n"
"Vše a náhledy:\n"
" Tento režim předkládá všechny aplikace ze všech pracovních ploch\n"
" v jediném výběrovém seznamu. Místo ikon aplikací pro každé z oken\n"
" používá malé náhledy vytvořené přímo podle oken.\n"
"\n"
"Pracovní plocha a ikony:\n"
" Tento režim vám umožňuje přepínat mezi aplikacemi vaší aktuální "
"pracovní\n"
" plochy a poskytuje vám navíc možnost přepnout se na naposledy použitou\n"
" aplikaci vaší předchozí pracovní plochy. Jde vždy o poslední symbol v "
"seznamu\n"
" a pokud je k dispozici, je oddělen oddělovačem/svislou čárou. Každé z "
"oken\n"
" je prezentováno ikonou příslušné aplikace.\n"
"\n"
"Jestliže si přejete vrátit výchozí chování přepínače Alt-Tab, jednoduše "
"rozšíření\n"
"zakažte v extensions.gnome.org nebo v aplikaci Pokročilá nastavení."
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1
msgid "Enable suspending"
msgstr "Povolit uspávání do paměti"
#: ../extensions/alternate-tab/extension.js:295
msgid "Alt Tab Behaviour"
msgstr "Chování Alt Tab"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2
msgid "Control the visibility of the Suspend menu item"
msgstr "Řídí viditelnost položky „Uspat do paměti“ v nabídce"
#: ../extensions/alternate-tab/extension.js:311
msgid "All & Thumbnails"
msgstr "Vše a náhledy"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3
msgid "Enable hibernating"
msgstr "Povolit uspávání na disk"
#: ../extensions/alternate-tab/extension.js:318
msgid "Workspace & Icons"
msgstr "Pracovní plocha a ikony"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4
msgid "Control the visibility of the Hibernate menu item"
msgstr "Řídí viditelnost položky „Uspat na disk“ v nabídce"
#: ../extensions/alternate-tab/extension.js:325
msgid "Cancel"
msgstr "Zrušit"
#: ../extensions/apps-menu/extension.js:39
msgid "Activities Overview"
msgstr "Přehled činností"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
msgid "Ask the user for a default behaviour if true."
msgstr "Když je zapnuto, dotázat se uživatele na výchozí chování."
#: ../extensions/apps-menu/extension.js:113
msgid "Favorites"
msgstr "Oblíbené"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
msgid "Indicates if Alternate Tab is newly installed"
msgstr "Signalizuje, když je rozšíření Alternate Tab nově nainstalováno"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:3
msgid ""
"Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and "
"workspace_icons."
msgstr ""
"Nastavuje chování klávesové zkratky Alt-Tab. Možné hodnoty jsou: native "
"(přirozené), all_thumbnails (vše a náhledy) a workspace_icons (pracovní "
"plocha a ikony)."
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
msgid "The alt tab behaviour."
msgstr "Chování klávesové zkratky alt tab."
#: ../extensions/apps-menu/extension.js:278
msgid "Applications"
msgstr "Aplikace"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid "Application and workspace list"
msgstr "Seznam aplikací a pracovních ploch"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
@@ -148,123 +127,76 @@ msgstr ""
"Seznam řetězců, z nichž každý obsahuje ID aplikace (název souboru pracovní "
"plochy), následovaný dvojtečkou a číslem pracovní plochy"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid "Application and workspace list"
msgstr "Seznam aplikací a pracovních ploch"
#: ../extensions/auto-move-windows/prefs.js:55
msgid "Application"
msgstr "Aplikace"
#: ../extensions/dock/extension.js:570
msgid "Drag here to add favorites"
msgstr "Přetažením sem přidáte do oblíbených"
#: ../extensions/auto-move-windows/prefs.js:64
#: ../extensions/auto-move-windows/prefs.js:106
msgid "Workspace"
msgstr "Pracovní plocha"
#: ../extensions/dock/extension.js:903
msgid "New Window"
msgstr "Nové okno"
#: ../extensions/auto-move-windows/prefs.js:80
msgid "Add rule"
msgstr "Přidat pravidlo"
#: ../extensions/dock/extension.js:905
msgid "Quit Application"
msgstr "Ukončit aplikaci"
#: ../extensions/auto-move-windows/prefs.js:94
msgid "Create new matching rule"
msgstr "Vytvoření nového srovnávacího pravidla"
#: ../extensions/dock/extension.js:910
msgid "Remove from Favorites"
msgstr "Odebrat z oblíbených"
#: ../extensions/auto-move-windows/prefs.js:98
msgid "Add"
msgstr "Přidat"
#: ../extensions/dock/extension.js:911
msgid "Add to Favorites"
msgstr "Přidat do oblíbených"
#: ../extensions/drive-menu/extension.js:72
#, c-format
msgid "Ejecting drive '%s' failed:"
msgstr "Vysunutí disku „%s“ selhalo:"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
msgid "Autohide duration"
msgstr "Čas automatického skrývání"
#: ../extensions/drive-menu/extension.js:89
msgid "Removable devices"
msgstr "Výměnná zařízení"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
msgid "Autohide effect"
msgstr "Efekt automatického skrývání"
#: ../extensions/drive-menu/extension.js:106
msgid "Open File"
msgstr "Otevřít soubor"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
msgid "Enable/disable autohide"
msgstr "Zapnout/vypnout automatické skrývání"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
msgid "Icon size"
msgstr "Velikost ikony"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
msgid "Position of the dock"
msgstr "Poloha doku"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
msgid "Sets icon size of the dock."
msgstr "Nastavuje velikost ikon v doku."
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
msgid ""
"Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' and "
"'move'"
msgstr ""
"Nastavuje efekt skrývání doku. Povolené hodnoty jsou „resize“ (změna "
"velikosti), „rescale“ (změna měřítka) a „move“ (přesun)."
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
msgid ""
"Sets the position of the dock in the screen. Allowed values are 'right' or "
"'left'"
msgstr ""
"Nastavuje polohu doku na obrazovce. Povolené hodnoty jsou „right“ (vpravo) "
"nebo „left“ (vlevo)."
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
msgid "Sets the time duration of the autohide effect."
msgstr "Nastavuje čas trvání efektu automatického skrývání."
#: ../extensions/example/extension.js:11
#: ../extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "Ahoj světe!"
#: ../extensions/gajim/extension.js:227
#, c-format
msgid "%s is away."
msgstr "%s je pryč."
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1
msgid "Alternative greeting text."
msgstr "Alternativní uvítací text"
#: ../extensions/gajim/extension.js:230
#, c-format
msgid "%s is offline."
msgstr "%s je odpojen."
#: ../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 ""
"Pokud není prázdné, obsahuje text, který se objeví po kliknutí na panel."
#: ../extensions/gajim/extension.js:233
#, c-format
msgid "%s is online."
msgstr "%s je připojen."
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: ../extensions/example/prefs.js:30
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 ""
"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/gajim/extension.js:236
#, c-format
msgid "%s is busy."
msgstr "%s je zaneprázdněn."
#: ../extensions/example/prefs.js:36
msgid "Message:"
msgstr "Zpráva:"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
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 ""
"Pokud je zapnuto, umisťuje se název okna nad případný náhled, čímž se "
"přepíše výchozí chování shellu, který jej umisťuje dolů. Změna tohoto "
"nastavení vyžaduje restart shellu, aby se projevila."
msgid "Use more screen for windows"
msgstr "Použít větší část obrazovky pro okna"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
msgid "Place window captions on top"
msgstr "Umístit název okna nahoru"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid ""
"The algorithm used to layout thumbnails in the overview. 'grid' to use the "
"default grid based algorithm, 'natural' to use another one that reflects "
"more the position and size of the actual window"
msgstr ""
"Algoritmus použitý k rozvržení náhledů v přehledu. „grid“ použijte pro "
"výchozí algoritmus založený na pravidelné mřížce, „natural“ pro jiný "
"algoritmus, který se snaží brát v úvahu polohu a velikost aktuálního okna"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
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. "
@@ -274,38 +206,123 @@ msgstr ""
"využít větší část obrazovky pro umístění náhledů oken. Toto nastavení se "
"použije pouze dohromady se strategií umisťování „natural“."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:5
msgid "Use more screen for windows"
msgstr "Použít větší část obrazovky pro okna"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid "Place window captions on top"
msgstr "Umístit název okna nahoru"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:6
msgid "Window placement strategy"
msgstr "Strategie umisťování oken"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
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 ""
"Pokud je zapnuto, umisťuje se název okna nad případný náhled, čímž se "
"přepíše výchozí chování shellu, který jej umisťuje dolů. Změna tohoto "
"nastavení vyžaduje restart shellu, aby se projevila."
#: ../extensions/places-menu/extension.js:77
msgid "Places"
msgstr "Místa"
#: ../extensions/places-menu/placeDisplay.js:56
#, c-format
msgid "Failed to launch \"%s\""
msgstr "Selhalo spuštění „%s“"
#: ../extensions/places-menu/placeDisplay.js:98
#: ../extensions/places-menu/placeDisplay.js:121
msgid "Computer"
msgstr "Počítač"
#: ../extensions/places-menu/placeDisplay.js:199
msgid "Home"
msgstr "Domů"
#: ../extensions/places-menu/placeDisplay.js:286
msgid "Browse Network"
msgstr "Procházet síť"
#: ../extensions/systemMonitor/extension.js:213
msgid "CPU"
msgstr "Procesor"
#: ../extensions/systemMonitor/extension.js:266
msgid "Memory"
msgstr "Paměť"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
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"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "Theme name"
msgstr "Název motivu"
#: ../extensions/xrandr-indicator/extension.js:26
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
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"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1
msgid "When to group windows"
msgstr "Kdy seskupovat okna"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are \"never\", \"auto\" and \"always\"."
msgstr ""
"Rozhoduje, kdy se mají v seznamu oken seskupovat okna stejné aplikace. Možné "
"hodnoty jsou „never“ (nikdy), „auto“ (automaticky) a „always“ (vždy)."
#: ../extensions/window-list/prefs.js:30
msgid "Window Grouping"
msgstr "Seskupování oken"
#: ../extensions/window-list/prefs.js:49
msgid "Never group windows"
msgstr "Nikdy neseskupovat okna"
#: ../extensions/window-list/prefs.js:50
msgid "Group windows when space is limited"
msgstr "Seskupovat okna při nedostatku místa"
#: ../extensions/window-list/prefs.js:51
msgid "Always group windows"
msgstr "Vždy seskupovat okna"
#: ../extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Ukazatel pracovní plochy"
#: ../extensions/workspace-indicator/prefs.js:141
msgid "Workspace names:"
msgstr "Názvy pracovních ploch"
#: ../extensions/workspace-indicator/prefs.js:152
msgid "Name"
msgstr "Název"
#: ../extensions/workspace-indicator/prefs.js:186
#, c-format
msgid "Workspace %d"
msgstr "Pracovní plocha %d"
#: ../extensions/xrandr-indicator/extension.js:30
msgid "Normal"
msgstr "Normální"
#: ../extensions/xrandr-indicator/extension.js:27
#: ../extensions/xrandr-indicator/extension.js:31
msgid "Left"
msgstr "Doleva"
#: ../extensions/xrandr-indicator/extension.js:28
#: ../extensions/xrandr-indicator/extension.js:32
msgid "Right"
msgstr "Doprava"
#: ../extensions/xrandr-indicator/extension.js:29
#: ../extensions/xrandr-indicator/extension.js:33
msgid "Upside-down"
msgstr "Vzhůru nohama"
#: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..."
msgstr "Upravit nastavení zobrazení…"
#: ../extensions/xrandr-indicator/extension.js:50
msgid "Display"
msgstr "Obrazovka"
#: ../extensions/xrandr-indicator/extension.js:87
msgid "Display Settings"
msgstr "Nastavení obrazovky"

500
po/de.po
View File

@@ -1,234 +1,226 @@
# German translation for gnome-shell-extensions.
# Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell-extensions package.
# Mario Blättermann <mario.blaettermann@gmail.com>, 2011.
# Christian Kirbach <Christian.Kirbach@googlemail.com>, 2011.
# Mario Blättermann <mario.blaettermann@gmail.com>, 2011-2013.
# Christian Kirbach <Christian.Kirbach@googlemail.com>, 2011, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=extensions\n"
"POT-Creation-Date: 2011-12-27 14:30+0000\n"
"PO-Revision-Date: 2011-12-28 11:14+0100\n"
"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
"POT-Creation-Date: 2013-07-04 14:06+0000\n"
"PO-Revision-Date: 2013-07-08 17:20+0100\n"
"Last-Translator: Benjamin Steinwender <b@stbe.at>\n"
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
"Language: de_DE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-Poedit-Language: German\n"
"X-Poedit-Country: GERMANY\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.5.7\n"
#: ../data/gnome-classic.desktop.in.h:1
#: ../data/gnome-classic.session.desktop.in.in.h:1
msgid "GNOME Classic"
msgstr "GNOME Classic"
#: ../data/gnome-classic.desktop.in.h:2
msgid "This session logs you into GNOME Classic"
msgstr "Diese Sitzung meldet Sie in GNOME Classic an"
#: ../data/gnome-shell-classic.desktop.in.in.h:1
msgid "GNOME Shell Classic"
msgstr "GNOME Shell Classic"
#: ../data/gnome-shell-classic.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Fensterverwaltung und Anwendungsstart"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1
msgid "Attach modal dialog to the parent window"
msgstr "Einen modalen Dialog an das übergeordnete Fenster anhängen"
#: ../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 ""
"Dieser Schlüssel überschreibt den Schlüssel in »org.gnome.mutter« wenn die "
"GNOME-Shell ausgeführt wird."
# identisch zum Schüssel in »gnome-shell«
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3
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.in.h:4
#| msgid "Workspace Indicator"
msgid "Workspaces only on primary monitor"
msgstr "Arbeitsflächen nur auf dem Primärmonitor"
#: ../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:37
msgid "Present windows as"
msgstr "Fenster darstellen als"
#: ../extensions/alternate-tab/prefs.js:62
msgid "Show only windows in the current workspace"
msgstr "Nur Fenster der aktuellen Arbeitsfläche anzeigen"
#. add the new entries
#: ../extensions/alternative-status-menu/extension.js:68
#: ../extensions/alternative-status-menu/extension.js:125
msgid "Suspend"
msgstr "Bereitschaft"
#: ../extensions/alternative-status-menu/extension.js:73
#: ../extensions/alternative-status-menu/extension.js:128
msgid "Hibernate"
msgstr "Ruhezustand"
#: ../extensions/alternative-status-menu/extension.js:78
msgid "Power Off..."
#: ../extensions/alternative-status-menu/extension.js:131
msgid "Power Off"
msgstr "Ausschalten …"
#: ../extensions/alternate-tab/extension.js:54
msgid ""
"This is the first time you use the Alternate Tab extension. \n"
"Please choose your preferred behaviour:\n"
"\n"
"All & Thumbnails:\n"
" This mode presents all applications from all workspaces in one "
"selection \n"
" list. Instead of using the application icon of every window, it uses "
"small \n"
" thumbnails resembling the window itself. \n"
"\n"
"Workspace & Icons:\n"
" This mode let's you switch between the applications of your current \n"
" workspace and gives you additionally the option to switch to the last "
"used \n"
" application of your previous workspace. This is always the last symbol "
"in \n"
" the list and is segregated by a separator/vertical line if available. \n"
" Every window is represented by its application icon. \n"
"\n"
"If you whish to revert to the default behavior for the Alt-Tab switcher, "
"just\n"
"disable the extension from extensions.gnome.org or the Advanced Settings "
"application."
msgstr ""
"Sie verwenden die Erweiterung »Alt-Tab« das erste Mal. \n"
"Bitte wählen Sie das gewünschte Verhalten:\n"
"\n"
"Alle und Vorschaubilder:\n"
" Dieser Modus stellt alle Anwendungen aus allen Arbeitsflächen in einer\n"
" Auswahlliste dar. Anstelle des Anwendungssymbols jedes Fensters werden\n"
" kleine Vorschaubilder dargestellt, die dem Fenster ähnlich sind. \n"
"\n"
"Arbeitsfläche und Symbole:\n"
" Dieser Modus ermöglicht den Wechsel zwischen Anwendungen auf Ihrer \n"
" aktuellen Arbeitsfläche und ermöglicht weiterhin, auf die zuletzt "
"verwendete\n"
" Anwendung der letzten Arbeitsfläche zu wechseln. Sie ist immer das letzte "
"Symbol\n"
" der Liste und ist durch einen Trenner (vertikale Linie) getrennt. \n"
" Jedes Fenster wird durch das entsprechende Anwendungssymbol "
"repräsentiert.\n"
"\n"
"Falls Sie zum Standardverhalten der Alt-Tab-Umschaltung zurückkehren wollen,\n"
"deaktivieren Sie diese Erweiterung in extensions.gnome.org oder verwenden "
"Sie\n"
"die »Erweiterten Einstellungen«."
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1
msgid "Enable suspending"
msgstr "Bereitschaft einblenden"
#: ../extensions/alternate-tab/extension.js:295
msgid "Alt Tab Behaviour"
msgstr "Verhalten bei Alt-Tab"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2
msgid "Control the visibility of the Suspend menu item"
msgstr "Die Sichtbarkeit des Menüeintrags »Bereitschaft« festlegen"
#: ../extensions/alternate-tab/extension.js:311
msgid "All & Thumbnails"
msgstr "Alle und Vorschaubilder"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3
msgid "Enable hibernating"
msgstr "Ruhezustand einblenden"
#: ../extensions/alternate-tab/extension.js:318
msgid "Workspace & Icons"
msgstr "Arbeitsbereich und Symbole"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4
msgid "Control the visibility of the Hibernate menu item"
msgstr "Die Sichtbarkeit des Menüeintrags »Ruhezustand« festlegen"
#: ../extensions/alternate-tab/extension.js:325
msgid "Cancel"
msgstr "Abbrechen"
#: ../extensions/apps-menu/extension.js:39
msgid "Activities Overview"
msgstr "Aktivitäten-Übersicht"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
msgid "Ask the user for a default behaviour if true."
msgstr ""
"Falls wahr, so wird der Benutzer nach dem voreinzustellendem Verhalten "
"gefragt."
#: ../extensions/apps-menu/extension.js:113
msgid "Favorites"
msgstr "Favoriten"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
msgid "Indicates if Alternate Tab is newly installed"
msgstr "Gibt an, ob die Erweiterung »Alt-Tab« neu installiert wurde"
# Oder müssen die Werte doch übersetzt werden? -ck
# Nein, dconf verhält sich hier nicht anders als gconf. Keinesfalls übersetzen! -mb
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:3
msgid ""
"Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and "
"workspace_icons."
msgstr ""
"Legt das Verhalten bei Drücken von Alt-Tab fest. Mögliche Werte sind: "
"»native«, »all_thumbnails« und »workspace_icons«."
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
msgid "The alt tab behaviour."
msgstr "Das Verhalten bei Eingabe von Alt-Tab."
#: ../extensions/apps-menu/extension.js:276
msgid "Applications"
msgstr "Anwendungen"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid "Application and workspace list"
msgstr "Anwendungs- und Arbeitsflächenliste"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
msgstr ""
"Eine Liste aus Zeichenketten, wovon jede eine Anwendungskennung (*.desktop-"
"Datei) enthält, gefolgt von einem Doppelpunkt und der Nummer der Arbeitsfläche"
"Datei) enthält, gefolgt von einem Doppelpunkt und der Nummer der "
"Arbeitsfläche"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid "Application and workspace list"
msgstr "Anwendungs- und Arbeitsflächenliste"
#: ../extensions/auto-move-windows/prefs.js:55
msgid "Application"
msgstr "Anwendung"
#: ../extensions/dock/extension.js:561
msgid "Drag here to add favorites"
msgstr "Hierher ziehen, um zu Favoriten hinzuzufügen"
#: ../extensions/auto-move-windows/prefs.js:64
#: ../extensions/auto-move-windows/prefs.js:106
msgid "Workspace"
msgstr "Arbeitsfläche "
#: ../extensions/dock/extension.js:896
msgid "New Window"
msgstr "Neues Fenster"
#: ../extensions/auto-move-windows/prefs.js:80
msgid "Add rule"
msgstr "Regel hinzufügen"
#: ../extensions/dock/extension.js:898
msgid "Quit Application"
msgstr "Anwendung beenden"
#: ../extensions/auto-move-windows/prefs.js:94
msgid "Create new matching rule"
msgstr "Neue Übereinstimmungsregel erstellen"
#: ../extensions/dock/extension.js:903
msgid "Remove from Favorites"
msgstr "Aus Favoriten entfernen"
#: ../extensions/auto-move-windows/prefs.js:98
msgid "Add"
msgstr "Hinzufügen"
#: ../extensions/dock/extension.js:904
msgid "Add to Favorites"
msgstr "Zu Favoriten hinzufügen"
#: ../extensions/drive-menu/extension.js:72
#, c-format
msgid "Ejecting drive '%s' failed:"
msgstr "Auswerfen von Laufwerk »%s« schlug fehl:"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
msgid "Autohide duration"
msgstr "Dauer automatisch verbergen"
#: ../extensions/drive-menu/extension.js:89
msgid "Removable devices"
msgstr "Wechseldatenträger"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
msgid "Autohide effect"
msgstr "Effekt automatisch verbergen"
#: ../extensions/drive-menu/extension.js:106
msgid "Open File"
msgstr "Datei öffnen"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
msgid "Enable/disable autohide"
msgstr "Automatisches Verbergen aktivieren/deaktivieren"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
msgid "Icon size"
msgstr "Symbolgröße"
# Dock = das Dock ? -ck
# Sofern es sich nicht um das Original-Dash handelt, ja. -mb
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
msgid "Position of the dock"
msgstr "Position des Docks"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
msgid "Sets icon size of the dock."
msgstr "Legt die Symbolgröße für das Dock fest"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
msgid ""
"Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' and "
"'move'"
msgstr ""
"Legt den Effekt für das versteckte Dock fest. Mögliche Werte sind »resize«, "
"»rescale« und »move«"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
msgid ""
"Sets the position of the dock in the screen. Allowed values are 'right' or "
"'left'"
msgstr ""
"Legt die Position des Docks auf dem Bildschirm fest. Mögliche Werte sind "
"»right« und »left«"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
msgid "Sets the time duration of the autohide effect."
msgstr "Legt die Effektdauer für automatisches Verbergen fest."
#: ../extensions/drive-menu/extension.js:69
msgid "Open file manager"
msgstr "Dateiverwaltung öffnen"
#: ../extensions/example/extension.js:11
#: ../extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "Hallo, Welt!"
#: ../extensions/gajim/extension.js:227
#, c-format
msgid "%s is away."
msgstr "%s ist abwesend."
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1
msgid "Alternative greeting text."
msgstr "Alternative Begrüßungstext."
#: ../extensions/gajim/extension.js:230
#, c-format
msgid "%s is offline."
msgstr "%s ist abgemeldet."
#: ../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 ""
"Falls nicht leer, ist dies der Text, der beim Anklicken des Panels angezeigt "
"wird."
#: ../extensions/gajim/extension.js:233
#, c-format
msgid "%s is online."
msgstr "%s ist angemeldet."
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: ../extensions/example/prefs.js:30
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 ""
"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/gajim/extension.js:236
#, c-format
msgid "%s is busy."
msgstr "%s ist beschäftigt."
#: ../extensions/example/prefs.js:36
msgid "Message:"
msgstr "Nachricht:"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
msgid "Use more screen for windows"
msgstr "Mehr Bildschirmbereich für Fenster verwenden"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
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 ""
"Versuchen, mehr Bildschirmfläche zum Platzieren der Fenstervorschaubilder zu "
"verwenden, indem das Bildschirmseitenverhältnis berücksichtigt wird und "
"diese stärker zusammengelegt werden, um den umgebenden Rahmen zu "
"verkleinern. Diese Einstellung betrifft nur den natürlichen "
"Platzierungsalgorithmus."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid "Place window captions on top"
msgstr "Fensterbeschriftungen oben platzieren"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
@@ -238,55 +230,149 @@ msgstr ""
"Vorschaubild platziert und damit die Voreinstellung der Shell übergangen. "
"Eine Änderungseinstellung tritt erst mit einem Neustart der Shell in Kraft."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
msgid "Place window captions on top"
msgstr "Fensterbeschriftungen oben platzieren"
#: ../extensions/places-menu/extension.js:77
msgid "Places"
msgstr "Orte"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
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 ""
"Versuchen, mehr Bildschirmfläche zum Platzieren der Fenstervorschaubilder zu "
"verwenden, indem das Bildschirmseitenverhältnis berücksichtigt wird und diese "
"stärker zusammengelegt werden, um den umgebenden Rahmen zu verkleinern. Diese "
"Einstellung betrifft nur den natürlichen Platzierungsalgorithmus."
#: ../extensions/places-menu/placeDisplay.js:56
#, c-format
msgid "Failed to launch \"%s\""
msgstr "Starten von »%s« fehlgeschlagen"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
msgid "Use more screen for windows"
msgstr "Mehr Bildschirmbereich für Fenster verwenden"
#: ../extensions/places-menu/placeDisplay.js:98
#: ../extensions/places-menu/placeDisplay.js:121
msgid "Computer"
msgstr "Rechner"
#: ../extensions/places-menu/extension.js:36
msgid "Removable Devices"
msgstr "Wechseldatenträger"
#: ../extensions/places-menu/placeDisplay.js:199
msgid "Home"
msgstr "Persönlicher Ordner"
#: ../extensions/places-menu/placeDisplay.js:286
msgid "Browse Network"
msgstr "Netzwerk durchsuchen"
#: ../extensions/systemMonitor/extension.js:214
msgid "CPU"
msgstr "CPU"
#: ../extensions/systemMonitor/extension.js:267
msgid "Memory"
msgstr "Speicher"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
msgid "Theme name"
msgstr "Themenname"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr ""
"Der Name des Themas, welches aus ~/.themes/name/gnome-shell geladen werden "
"soll"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "Theme name"
msgstr "Themenname"
#: ../extensions/window-list/extension.js:382
#: ../extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Arbeitsflächenindikator"
#: ../extensions/xrandr-indicator/extension.js:26
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1
msgid "When to group windows"
msgstr "Fenstergruppierung"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are \"never\", \"auto\" and \"always\"."
msgstr ""
"Legt fest, ob Fenster der gleichen Anwendung in der Fensterliste gruppiert "
"werden sollen. Mögliche Werte sind »never« (nie), »auto« (automatisch) und "
"»always« (immer)."
#: ../extensions/window-list/prefs.js:30
msgid "Window Grouping"
msgstr "Fenstergruppierung"
#: ../extensions/window-list/prefs.js:49
msgid "Never group windows"
msgstr "Fenster niemals gruppieren"
#: ../extensions/window-list/prefs.js:50
msgid "Group windows when space is limited"
msgstr "Fenster bei Platzmangel gruppieren"
#: ../extensions/window-list/prefs.js:51
msgid "Always group windows"
msgstr "Fenster immer gruppieren"
#: ../extensions/workspace-indicator/prefs.js:141
msgid "Workspace names:"
msgstr "Namen der Arbeitsflächen:"
#: ../extensions/workspace-indicator/prefs.js:152
msgid "Name"
msgstr "Name"
#: ../extensions/workspace-indicator/prefs.js:186
#, c-format
msgid "Workspace %d"
msgstr "Arbeitsfläche %d"
#: ../extensions/xrandr-indicator/extension.js:30
msgid "Normal"
msgstr "Normal"
#: ../extensions/xrandr-indicator/extension.js:27
#: ../extensions/xrandr-indicator/extension.js:31
msgid "Left"
msgstr "Links"
#: ../extensions/xrandr-indicator/extension.js:28
#: ../extensions/xrandr-indicator/extension.js:32
msgid "Right"
msgstr "Rechts"
#: ../extensions/xrandr-indicator/extension.js:29
#: ../extensions/xrandr-indicator/extension.js:33
msgid "Upside-down"
msgstr "Kopfüber"
#: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..."
msgstr "Bildschirmeinstellungen festlegen …"
#: ../extensions/xrandr-indicator/extension.js:50
msgid "Display"
msgstr "Anzeige"
#: ../extensions/xrandr-indicator/extension.js:87
msgid "Display Settings"
msgstr "Bildschirmeinstellungen"
#~ msgid "The application icon mode."
#~ msgstr "Der Modus des Anwendungssymbols."
#~ msgid ""
#~ "Configures how the windows are shown in the switcher. Valid possibilities "
#~ "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
#~ "only' (shows only the application icon) or 'both'."
#~ msgstr ""
#~ "Legt fest, wie die Fenster im Fensterumschalter angezeigt werden. Gültige "
#~ "Werte sind »thumbnail-only« (zeigt ein Vorschaubild des Fensters), »app-"
#~ "icon-only« (zeigt das Anwendungssymbol) oder »both« (beides)."
#~ msgid "Devices"
#~ msgstr "Geräte"
#~ msgid "Bookmarks"
#~ msgstr "Lesezeichen"
#~ msgid "Network"
#~ msgstr "Netzwerk"
#~ msgid "File System"
#~ msgstr "Dateisystem"
#~ msgid "Drag here to add favorites"
#~ msgstr "Hierher ziehen, um zu Favoriten hinzuzufügen"
#~ msgid "New Window"
#~ msgstr "Neues Fenster"
#~ msgid "Quit Application"
#~ msgstr "Anwendung beenden"
#~ msgid "Remove from Favorites"
#~ msgstr "Aus Favoriten entfernen"

714
po/el.po
View File

@@ -3,151 +3,110 @@
# This file is distributed under the same license as the gnome-shell-extensions package.
# ioza1964 <ioza1964@yahoo.gr>, 2011.
# Ιωάννης Ζαμπούκας <ioza1964@yahoo.gr>, 2011.
#
# Dimitris Spingos (Δημήτρης Σπίγγος) <dmtrs32@gmail.com>, 2013.
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=extensions\n"
"POT-Creation-Date: 2011-09-17 15:20+0000\n"
"PO-Revision-Date: 2011-09-18 14:34+0300\n"
"Last-Translator: Ιωάννης Ζαμπούκας <ioza1964@yahoo.gr>\n"
"Language-Team: Greek <team@gnome.gr>\n"
"POT-Creation-Date: 2013-04-19 19:12+0000\n"
"PO-Revision-Date: 2013-06-05 08:09+0300\n"
"Last-Translator: Dimitris Spingos (Δημήτρης Σπίγγος) <dmtrs32@gmail.com>\n"
"Language-Team: team@gnome.gr\n"
"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bits\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Virtaal 0.7.1\n"
"X-Project-Style: gnome\n"
#: ../extensions/alternative-status-menu/extension.js:44
msgid "Notifications"
msgstr "Ειδοποιήσεις"
#: ../data/gnome-classic.desktop.in.h:1
#: ../data/gnome-classic.session.desktop.in.in.h:1
msgid "GNOME Classic"
msgstr "Κλασικό GNOME"
#: ../extensions/alternative-status-menu/extension.js:52
msgid "Online Accounts"
msgstr "Λογαριασμοί διαδικτύου"
#: ../data/gnome-classic.desktop.in.h:2
msgid "This session logs you into GNOME Classic"
msgstr "Αυτή η συνεδρία σας συνδέει στο κλασικό GNOME"
#: ../extensions/alternative-status-menu/extension.js:56
msgid "System Settings"
msgstr "Ρυθμίσεις συστήματος"
#: ../data/gnome-shell-classic.desktop.in.in.h:1
msgid "GNOME Shell Classic"
msgstr "Κλασικό κέλυφος GNOME"
#: ../extensions/alternative-status-menu/extension.js:63
msgid "Lock Screen"
msgstr "Κλείδωμα οθόνης"
#: ../data/gnome-shell-classic.desktop.in.in.h:2
#| msgid "Thumbnail and application icon"
msgid "Window management and application launching"
msgstr "Εκκίνηση διαχείρισης παραθύρου και εφαρμογής"
#: ../extensions/alternative-status-menu/extension.js:68
msgid "Switch User"
msgstr "Αλλαγή χρήστη"
#: ../extensions/alternate-tab/prefs.js:20
msgid "Thumbnail only"
msgstr "Μόνο μικρογραφίες"
#: ../extensions/alternative-status-menu/extension.js:73
msgid "Log Out..."
msgstr "Αποσύνδεση…"
#: ../extensions/alternate-tab/prefs.js:21
msgid "Application icon only"
msgstr "Μόνο εικονίδια εφαρμογών"
#: ../extensions/alternative-status-menu/extension.js:81
#: ../extensions/alternate-tab/prefs.js:22
msgid "Thumbnail and application icon"
msgstr "Εικονίδια μικρογραφιών και εφαρμογών"
#: ../extensions/alternate-tab/prefs.js:37
msgid "Present windows as"
msgstr "Παρουσίαση παραθύρων ως"
#: ../extensions/alternate-tab/prefs.js:62
msgid "Show only windows in the current workspace"
msgstr "Προβολή των παραθύρων μόνο στον τρέχων χώρο εργασίας"
#. add the new entries
#: ../extensions/alternative-status-menu/extension.js:125
msgid "Suspend"
msgstr "Αναστολή"
#: ../extensions/alternative-status-menu/extension.js:87
#: ../extensions/alternative-status-menu/extension.js:128
msgid "Hibernate"
msgstr "Αδρανοποίηση"
#: ../extensions/alternative-status-menu/extension.js:93
msgid "Power Off..."
msgstr "Σβήσιμο…"
#: ../extensions/alternative-status-menu/extension.js:131
msgid "Power Off"
msgstr "Τερματισμός"
#: ../extensions/alternate-tab/extension.js:44
msgid ""
"This is the first time you use the Alternate Tab extension. \n"
"Please choose your preferred behaviour:\n"
"\n"
"All & Thumbnails:\n"
" This mode presents all applications from all workspaces in one "
"selection \n"
" list. Instead of using the application icon of every window, it uses "
"small \n"
" thumbnails resembling the window itself. \n"
"\n"
"Workspace & Icons:\n"
" This mode let's you switch between the applications of your current \n"
" workspace and gives you additionally the option to switch to the last "
"used \n"
" application of your previous workspace. This is always the last symbol "
"in \n"
" the list and is segregated by a separator/vertical line if available. \n"
" Every window is represented by its application icon. \n"
"\n"
"Native:\n"
" This mode is the native GNOME 3 behaviour or in other words: Clicking \n"
" native switches the Alternate Tab extension off. \n"
msgstr ""
"Αυτή είναι η πρώτη φορά που χρησιμοποιήσατε την εναλλακτική επέκταση "
"στηλοθέτη. \n"
"Παρακαλούμε επιλέξτε την συμπεριφορά που επιθυμείτε εσείς:\n"
"\n"
"Όλα & μικρογραφίες:\n"
" Αυτή η κατάσταση εμφανίζει όλες τις εφαρμογές από όλους τους χώρους "
"εργασίας σε μια επιλογή \n"
" λίστα. Αντί να χρησιμοποιεί το εικονίδιο της εφαρμογής από κάθε "
"παράθυρο, χρησιμοποιεί μικρές \n"
" μικρογραφίες που μοιάζουν με το ίδιο το παράθυρο. \n"
"\n"
"Χώρος εργασίας & εικονίδια:\n"
" Αυτή η λειτουργία σας επιτρέπει να κάνετε εναλλαγή μεταξύ των εφαρμογών "
"του τρέχοντος \n"
" χώρου εργασίας σας και σας δίνει επιπλέον τη δυνατότητα να μεταβείτε "
"στην τελευταία χρησιμοποιημένη \n"
" εφαρμογή του προηγούμενου χώρου εργασίας σας. Αυτό είναι πάντα το "
"τελευταίο σύμβολο στη \n"
" λίστα και είναι απομονωμένο από ένα διαχωριστικό/κάθετη γραμμή, εάν "
"υπάρχει. \n"
" Κάθε παράθυρο αντιπροσωπεύεται από εικονίδιο της εφαρμογής της. \n"
"\n"
"Μητρική:\n"
" Αυτή η λειτουργία είναι η μητρική συμπεριφορά του GNOME 3 ή με άλλα "
"λόγια: Αν κάνετε κλικ \n"
" στο μητρική θέτει εκτός λειτουργίας την εναλλακτική επέκταση "
"στηλοθέτη. \n"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1
msgid "Enable suspending"
msgstr "Ενεργοποίηση αναστολής"
#: ../extensions/alternate-tab/extension.js:269
msgid "Alt Tab Behaviour"
msgstr "Συμπεριφορά Alt Tab"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2
msgid "Control the visibility of the Suspend menu item"
msgstr "Ελέγχει την ορατότητα του αντικειμένου Αναστολη"
#: ../extensions/alternate-tab/extension.js:285
msgid "All & Thumbnails"
msgstr "Όλα & μικρογραφίες"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3
msgid "Enable hibernating"
msgstr "Ενεργοποίηση αδρανοποίησης"
#: ../extensions/alternate-tab/extension.js:292
msgid "Workspace & Icons"
msgstr "Χώρος εργασίας & εικονίδια"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4
msgid "Control the visibility of the Hibernate menu item"
msgstr "Ελέγχει την ορατότητα του αντικειμένου Αδρανοποίηση"
#: ../extensions/alternate-tab/extension.js:299
msgid "Native"
msgstr "Εγγενή"
#: ../extensions/apps-menu/extension.js:39
msgid "Activities Overview"
msgstr "Επισκόπηση ενεργειών"
#: ../extensions/alternate-tab/extension.js:306
msgid "Cancel"
msgstr "Ακύρωση"
#: ../extensions/apps-menu/extension.js:113
#| msgid "Add to Favorites"
msgid "Favorites"
msgstr "Αγαπημένα"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
msgid "Ask the user for a default behaviour if true."
msgstr "Ρωτήστε τον χρήστη για μια προεπιλεγμένη συμπεριφορα εαν αληθεύει."
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
msgid "Indicates if Alternate Tab is newly installed"
msgstr "Υποδεικνύει αν ο εναλλακτικός στηλοθέτης είναι νεοεισαχθείς"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:3
msgid ""
"Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and "
"workspace_icons."
msgstr ""
"Ρυθμίζει την συμπεριφορά του Alt Tab. Πιθανές τιμές είναι οι εξής: μητρική, "
"όλες_μικρογραφίες και εικονίδια_χώρου εργασίας."
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
msgid "The alt tab behaviour."
msgstr "Η συμπεριφορά alt tab."
#: ../extensions/apps-menu/extension.js:278
#| msgid "Application"
msgid "Applications"
msgstr "Εφαρμογές"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid "Application and workspace list"
msgstr "Λίστα εφαρμογών και χώρου εργασίας"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
@@ -156,124 +115,78 @@ msgstr ""
"(όνομα αρχείου επιφάνειας εργασίας), ακολουθούμενη από άνω και κάτω τελεία "
"και τον αριθμό του χώρου εργασίας"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid "Application and workspace list"
msgstr "Λίστα εφαρμογής και χώρου εργασίας"
#: ../extensions/auto-move-windows/prefs.js:55
msgid "Application"
msgstr "Εφαρμογή"
#: ../extensions/dock/extension.js:486
msgid "Drag here to add favorites"
msgstr "Σύρετε εδώ για να προσθέσετε αγαπημένα"
#: ../extensions/auto-move-windows/prefs.js:64
#: ../extensions/auto-move-windows/prefs.js:106
msgid "Workspace"
msgstr "Χώρος εργασίας"
#: ../extensions/dock/extension.js:820
msgid "New Window"
msgstr "Νέο παράθυρο"
#: ../extensions/auto-move-windows/prefs.js:80
msgid "Add rule"
msgstr "Προσθήκη κανόνα"
#: ../extensions/dock/extension.js:822
msgid "Quit Application"
msgstr "Εγκατάλειψη εφαρμογής"
#: ../extensions/auto-move-windows/prefs.js:94
msgid "Create new matching rule"
msgstr "Δημιουργία νέου κανόνα που ταιριάζει"
#: ../extensions/dock/extension.js:827
msgid "Remove from Favorites"
msgstr "Απομάκρυνση από τα αγαπημένα"
#: ../extensions/auto-move-windows/prefs.js:98
msgid "Add"
msgstr "Προσθήκη"
#: ../extensions/dock/extension.js:828
msgid "Add to Favorites"
msgstr "Προσθήκη στα αγαπημένα"
#: ../extensions/drive-menu/extension.js:72
#, c-format
msgid "Ejecting drive '%s' failed:"
msgstr "Απέτυχε η εξαγωγή του δίσκου '%s':"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
msgid "Autohide duration"
msgstr "Διάρκεια αυτόματης απόκρυψης"
#: ../extensions/drive-menu/extension.js:89
msgid "Removable devices"
msgstr "Αφαιρούμενες συσκευές"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
msgid "Autohide effect"
msgstr "Εφέ αυτόματης απόκρυψης"
#: ../extensions/drive-menu/extension.js:106
msgid "Open File"
msgstr "Άνοιγμα αρχείου"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
msgid "Enable/disable autohide"
msgstr "Ενεργοποίηση/απενεργοποίηση αυτόματης απόκρυψης"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
msgid "Icon size"
msgstr "Μέγεθος εικονιδίου"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
msgid "Position of the dock"
msgstr "Θέση υποδοχέα"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
msgid "Sets icon size of the dock."
msgstr "Ρυθμίζει το μέγεθος εικόνας του υποδοχέα."
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
msgid ""
"Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale'"
msgstr ""
"Ρυθμίζειτην επίδραση κρυψίματος του υποδοχέα. Επιτρεπόμενες τιμές είναι "
"resize («αλλαγή μεγέθους») ή rescale («αλλαγή κλίμακας»)"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
msgid ""
"Sets the position of the dock in the screen. Allowed values are 'right' or "
"'left'"
msgstr ""
"Ρυθμίζει τη θέση του υποδοχέα στην οθόνη. Επιτρεπόμενες τιμές είναι right («δεξιά») "
"ή right («αριστερά»)"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
msgid "Sets the time duration of the autohide effect."
msgstr "Ρυθμίζει την χρονική διάρκεια του εφέ αυτόματης απόκρυψης."
#: ../extensions/example/extension.js:11
#: ../extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "Καλημέρα, Κόσμε!"
msgstr "Γεια σου, κόσμε!"
#: ../extensions/gajim/extension.js:227
#, c-format
msgid "%s is away."
msgstr "%s είναι εκτός."
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1
msgid "Alternative greeting text."
msgstr "Εναλλακτικό κείμενο χαιρετισμού"
#: ../extensions/gajim/extension.js:230
#, c-format
msgid "%s is offline."
msgstr "%s είναι εκτός σύνδεσης."
#: ../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/gajim/extension.js:233
#, c-format
msgid "%s is online."
msgstr "%s είναι σε σύνδεση."
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: ../extensions/example/prefs.js:30
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/gajim/extension.js:236
#, c-format
msgid "%s is busy."
msgstr "%s είναι απασχολημένος/η."
#: ../extensions/example/prefs.js:36
msgid "Message:"
msgstr "Μήνυμα:"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
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 ""
"Αν αυτό αληθεύει, τοποθετήστε τους τίτλους παράθυρου στην κορυφή της "
"αντίστοιχης μικρογραφίας, παρακάμπτοντας το προεπιλεγμένο του κελύφους πού "
"το τοποθετεί στο κάτω μέρος. Η αλλαγή αυτής της ρύθμισης απαιτεί "
"επανεκκίνηση του κέλυφους για να έχει κάποιο αποτέλεσμα."
msgid "Use more screen for windows"
msgstr "Χρησιμοποιήστε περισσότερη οθόνη για τα παράθυρα"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
msgid "Place window captions on top"
msgstr "Τοποθετήστε τίτλους παράθυρου στην κορυφή"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid ""
"The algorithm used to layout thumbnails in the overview. 'grid' to use the "
"default grid based algorithm, 'natural' to use another one that reflects "
"more the position and size of the actual window"
msgstr ""
"Ο αλγόριθμος που χρησιμοποιείται για την διάταξη μικρογραφιών στην "
"επισκόπηση. grid («πλέγμα») να χρησιμοποιήσει τον αλγόριθμο που βασίζετε στο "
"προεπιλεγμένο πλέγμα, natural («φυσικό») να χρησιμοποιήσει ένα άλλο που αντανακλά "
"περισσότερο τη θέση και το μέγεθος της πραγματικού παράθυρου"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
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. "
@@ -284,40 +197,375 @@ msgstr ""
"εδραιώνοντας τους περαιτέρω για να μειώσετε το πλαίσιο οριοθέτησης. Αυτή η "
"ρύθμιση ισχύει μόνο με την στρατηγική φυσικής τοποθέτησης."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:5
msgid "Use more screen for windows"
msgstr "Χρησιμοποιήστε περισσότερη οθόνη για τα παράθυρα"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid "Place window captions on top"
msgstr "Τοποθετήστε τίτλους παράθυρου στην κορυφή"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:6
msgid "Window placement strategy"
msgstr "Στρατηγική τοποθέτησης παραθύρου"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
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 ""
"Αν αυτό αληθεύει, τοποθετήστε τους τίτλους παράθυρου στην κορυφή της "
"αντίστοιχης μικρογραφίας, παρακάμπτοντας το προεπιλεγμένο του κελύφους πού "
"το τοποθετεί στο κάτω μέρος. Η αλλαγή αυτής της ρύθμισης απαιτεί "
"επανεκκίνηση του κέλυφους για να έχει κάποιο αποτέλεσμα."
#: ../extensions/places-menu/extension.js:77
msgid "Places"
msgstr "Τοποθεσίες"
#: ../extensions/places-menu/placeDisplay.js:56
#, c-format
msgid "Failed to launch \"%s\""
msgstr "Αποτυχία εκκίνησης \"%s\""
#: ../extensions/places-menu/placeDisplay.js:98
#: ../extensions/places-menu/placeDisplay.js:121
msgid "Computer"
msgstr "Υπολογιστής"
#: ../extensions/places-menu/placeDisplay.js:199
msgid "Home"
msgstr "Προσωπικός φάκελος"
#: ../extensions/places-menu/placeDisplay.js:286
#| msgid "Browse network"
msgid "Browse Network"
msgstr "Περιήγηση δικτύου"
#: ../extensions/systemMonitor/extension.js:213
msgid "CPU"
msgstr "CPU"
#: ../extensions/systemMonitor/extension.js:266
msgid "Memory"
msgstr "Μνήμη"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
msgid "Theme name"
msgstr "Όνομα θέματος"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr ""
"Το όνομα του θέματος, για να φορτωθεί από το αρχείο ~ / .themes / name / "
"gnome-shell"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "Theme name"
msgstr "Όνομα θέματος"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1
msgid "When to group windows"
msgstr "Πότε θα ομαδοποιούνται τα παράθυρα"
#: ../extensions/xrandr-indicator/extension.js:26
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2
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/prefs.js:30
msgid "Window Grouping"
msgstr "Ομαδοποίηση παραθύρων"
#: ../extensions/window-list/prefs.js:49
msgid "Never group windows"
msgstr "Να μη γίνεται ποτέ ομαδοποίηση παραθύρων"
#: ../extensions/window-list/prefs.js:50
msgid "Group windows when space is limited"
msgstr "Ομαδοποίηση παραθύρων όταν ο χώρος είναι περιορισμένος"
#: ../extensions/window-list/prefs.js:51
msgid "Always group windows"
msgstr "Να γίνεται πάντα ομαδοποίηση παραθύρων"
#: ../extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Δείκτης χώρου εργασίας"
#: ../extensions/workspace-indicator/prefs.js:141
msgid "Workspace names:"
msgstr "Ονόματα χώρων εργασίας:"
#: ../extensions/workspace-indicator/prefs.js:152
msgid "Name"
msgstr "Όνομα"
#: ../extensions/workspace-indicator/prefs.js:186
#, c-format
msgid "Workspace %d"
msgstr "Χώρος εργασίας %d"
#: ../extensions/xrandr-indicator/extension.js:30
msgid "Normal"
msgstr "Κανονικό"
#: ../extensions/xrandr-indicator/extension.js:27
#: ../extensions/xrandr-indicator/extension.js:31
msgid "Left"
msgstr "Αριστερά"
#: ../extensions/xrandr-indicator/extension.js:28
#: ../extensions/xrandr-indicator/extension.js:32
msgid "Right"
msgstr "Δεξιά"
#: ../extensions/xrandr-indicator/extension.js:29
#: ../extensions/xrandr-indicator/extension.js:33
msgid "Upside-down"
msgstr "Αναποδογυρισμένο"
#: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..."
msgstr "Διαμορφώστε τις ρυθμίσεις της οθόνης…"
#: ../extensions/xrandr-indicator/extension.js:50
msgid "Display"
msgstr "Οθόνη"
#: ../extensions/xrandr-indicator/extension.js:80
msgid "Display Settings"
msgstr "Ρυθμίσεις οθόνης"
#~ msgid "The application icon mode."
#~ msgstr "Η λειτουργία εικονιδίου της εφαρμογής"
#~ msgid ""
#~ "Configures how the windows are shown in the switcher. Valid possibilities "
#~ "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
#~ "only' (shows only the application icon) or 'both'."
#~ msgstr ""
#~ "Διαμορφώνει πως τα παράθυρα θα εμφανίζονται στν εναλλαγή των παραθύρων. "
#~ "Έγκυρες ρυθμίσεις είναι 'thumbnail-only' (εμφανίζει μια μικρογραφία του "
#~ "παραθύρου), 'app-icon-only' (εμφανίζει μόνο το εικονίδιο της εφαρμογής) ή "
#~ "'both'."
#~ msgid "Drag here to add favorites"
#~ msgstr "Σύρετε εδώ για να προσθέσετε αγαπημένα"
#~ msgid "New Window"
#~ msgstr "Νέο παράθυρο"
#~ msgid "Quit Application"
#~ msgstr "Εγκατάλειψη εφαρμογής"
#~ msgid "Remove from Favorites"
#~ msgstr "Απομάκρυνση από τα αγαπημένα"
#~ msgid "Position of the dock"
#~ msgstr "Θέση υποδοχέα"
#~ msgid ""
#~ "Sets the position of the dock in the screen. Allowed values are 'right' "
#~ "or 'left'"
#~ msgstr ""
#~ "Ρυθμίζει τη θέση του υποδοχέα στην οθόνη. Επιτρεπόμενες τιμές είναι right "
#~ "(«δεξιά») ή right («αριστερά»)"
#~ msgid "Icon size"
#~ msgstr "Μέγεθος εικονιδίου"
#~ msgid "Sets icon size of the dock."
#~ msgstr "Ρυθμίζει το μέγεθος εικόνας του υποδοχέα."
#~ msgid "Enable/disable autohide"
#~ msgstr "Ενεργοποίηση/απενεργοποίηση αυτόματης απόκρυψης"
#~ msgid "Autohide effect"
#~ msgstr "Εφέ αυτόματης απόκρυψης"
#~ msgid ""
#~ "Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' "
#~ "and 'move'"
#~ msgstr ""
#~ "Ρυθμίζει το εφέ κρυψίματος του υποδοχέα. Επιτρεπόμενες τιμές είναι "
#~ "'resize', 'rescale' και 'move'"
#~ msgid "Autohide duration"
#~ msgstr "Διάρκεια αυτόματης απόκρυψης"
#~ msgid "Sets the time duration of the autohide effect."
#~ msgstr "Ρυθμίζει την χρονική διάρκεια του εφέ αυτόματης απόκρυψης."
#~ msgid "Monitor"
#~ msgstr "Οθόνη"
#~ msgid ""
#~ "Sets monitor to display dock in. The default value (-1) is the primary "
#~ "monitor."
#~ msgstr ""
#~ "Ορίζει την οθόνη για την εμφάνιση του ταμπλό. Η προεπιλεγμένη τιμή (-1) "
#~ "είναι η κύρια οθόνη."
#~ msgid "%s is away."
#~ msgstr "%s είναι εκτός."
#~ msgid "%s is offline."
#~ msgstr "%s είναι εκτός σύνδεσης."
#~ msgid "%s is online."
#~ msgstr "%s είναι σε σύνδεση."
#~ msgid "%s is busy."
#~ msgstr "%s είναι απασχολημένος/η."
#~ msgid "Devices"
#~ msgstr "Συσκευές"
#~ msgid "Bookmarks"
#~ msgstr "Σελιδοδείκτες"
#~ msgid "Network"
#~ msgstr "Δίκτυο"
#~ msgid "File System"
#~ msgstr "Σύστημα αρχείων"
#~ msgid "The alt tab behaviour."
#~ msgstr "Η συμπεριφορά alt tab."
#~| msgid ""
#~| "Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails "
#~| "and workspace_icons."
#~ msgid ""
#~ "Sets the Alt-Tab behaviour. Possible values are: all_thumbnails and "
#~ "workspace_icons. See the configuration dialogs for details."
#~ msgstr ""
#~ "Ρυθμίζει την συμπεριφορά του Alt Tab. Πιθανές τιμές είναι οι εξής: "
#~ "όλες_μικρογραφίες (all_thumbnails) και εικονίδια_χώρου εργασίας "
#~ "(workspace_icons). Δείτε τις ρυθμίσεις διαλόγου για λεπτομέρειες."
#~ msgid ""
#~ "This mode presents all applications from all workspaces in one selection "
#~ "list. Instead of using the application icon of every window, it uses "
#~ "small thumbnails resembling the window itself."
#~ msgstr ""
#~ "Αυτή η κατάσταση εμφανίζει όλες τις εφαρμογές απ' όλους τους χώρους "
#~ "εργασίας σε μια λίστα επιλογής. Αντί να χρησιμοποιήσει το εικονίδιο της "
#~ "εφαρμογής για κάθε παράθυρο, χρησιμοποιεί μικρογραφίες που μοιάζουν με το "
#~ "ίδιο το παράθυρο."
#~ msgid "Workspace & Icons"
#~ msgstr "Χώρος εργασίας & εικονίδια"
#~ msgid ""
#~ "This mode let's you switch between the applications of your current "
#~ "workspace and gives you additionally the option to switch to the last "
#~ "used application of your previous workspace. This is always the last "
#~ "symbol in the list and is segregated by a separator/vertical line if "
#~ "available. \n"
#~ "Every window is represented by its application icon."
#~ msgstr ""
#~ "Αυτή η κατάσταση σας επιτρέπει την εναλλαγή μεταξύ των εφαρμογών του "
#~ "τωρινού χώρου εργασίας και σας δίνει επιπλέον την επιλογή να μεταβείτε "
#~ "στην τελευταία χρησιμοποιημένη εφαρμογή του προηγούμενου χώρου εργασίας "
#~ "σας. Αυτό είναι πάντα το τελευταίο σύμβολο στη λιστα και διαχωρίζεται από "
#~ "μια κάθετη γραμμή αν είναι διαθέσιμη. \n"
#~ "Κάθε παράθυρο αντιπροσωπεύεται από το εικονίδιο της εφαρμογής του."
#~ msgid "Move current selection to front before closing the popup"
#~ msgstr ""
#~ "Μετακινήστε τη τωρινή επιλογή προς τα εμπρός πριν το κλείσιμο του "
#~ "αναδυόμενου"
#, fuzzy
#~ msgid ""
#~ "The Alternate Tab can be used in different modes, that affect the way "
#~ "windows are chosen and presented."
#~ msgstr ""
#~ "Το Alternate Tab μπορεί να χρησιμοποιηθεί σε διαφορετικές καταστάσεις, οι "
#~ "οποίες επηρεάζουν τον τρόπο που τα παράθυρα επιλέγονται και "
#~ "παρουσιάζονται."
#~ msgid "Configure display settings..."
#~ msgstr "Διαμορφώστε τις ρυθμίσεις της οθόνης…"
#~ msgid "Notifications"
#~ msgstr "Ειδοποιήσεις"
#~ msgid "Online Accounts"
#~ msgstr "Λογαριασμοί διαδικτύου"
#~ msgid "Lock Screen"
#~ msgstr "Κλείδωμα οθόνης"
#~ msgid "Switch User"
#~ msgstr "Αλλαγή χρήστη"
#~ msgid "Log Out..."
#~ msgstr "Αποσύνδεση…"
#~ msgid ""
#~ "This is the first time you use the Alternate Tab extension. \n"
#~ "Please choose your preferred behaviour:\n"
#~ "\n"
#~ "All & Thumbnails:\n"
#~ " This mode presents all applications from all workspaces in one "
#~ "selection \n"
#~ " list. Instead of using the application icon of every window, it uses "
#~ "small \n"
#~ " thumbnails resembling the window itself. \n"
#~ "\n"
#~ "Workspace & Icons:\n"
#~ " This mode let's you switch between the applications of your current \n"
#~ " workspace and gives you additionally the option to switch to the last "
#~ "used \n"
#~ " application of your previous workspace. This is always the last "
#~ "symbol in \n"
#~ " the list and is segregated by a separator/vertical line if "
#~ "available. \n"
#~ " Every window is represented by its application icon. \n"
#~ "\n"
#~ "Native:\n"
#~ " This mode is the native GNOME 3 behaviour or in other words: "
#~ "Clicking \n"
#~ " native switches the Alternate Tab extension off. \n"
#~ msgstr ""
#~ "Αυτή είναι η πρώτη φορά που χρησιμοποιήσατε την εναλλακτική επέκταση "
#~ "στηλοθέτη. \n"
#~ "Παρακαλούμε επιλέξτε την συμπεριφορά που επιθυμείτε εσείς:\n"
#~ "\n"
#~ "Όλα & μικρογραφίες:\n"
#~ " Αυτή η κατάσταση εμφανίζει όλες τις εφαρμογές από όλους τους χώρους "
#~ "εργασίας σε μια επιλογή \n"
#~ " λίστα. Αντί να χρησιμοποιεί το εικονίδιο της εφαρμογής από κάθε "
#~ "παράθυρο, χρησιμοποιεί μικρές \n"
#~ " μικρογραφίες που μοιάζουν με το ίδιο το παράθυρο. \n"
#~ "\n"
#~ "Χώρος εργασίας & εικονίδια:\n"
#~ " Αυτή η λειτουργία σας επιτρέπει να κάνετε εναλλαγή μεταξύ των "
#~ "εφαρμογών του τρέχοντος \n"
#~ " χώρου εργασίας σας και σας δίνει επιπλέον τη δυνατότητα να μεταβείτε "
#~ "στην τελευταία χρησιμοποιημένη \n"
#~ " εφαρμογή του προηγούμενου χώρου εργασίας σας. Αυτό είναι πάντα το "
#~ "τελευταίο σύμβολο στη \n"
#~ " λίστα και είναι απομονωμένο από ένα διαχωριστικό/κάθετη γραμμή, εάν "
#~ "υπάρχει. \n"
#~ " Κάθε παράθυρο αντιπροσωπεύεται από εικονίδιο της εφαρμογής της. \n"
#~ "\n"
#~ "Μητρική:\n"
#~ " Αυτή η λειτουργία είναι η μητρική συμπεριφορά του GNOME 3 ή με άλλα "
#~ "λόγια: Αν κάνετε κλικ \n"
#~ " στο μητρική θέτει εκτός λειτουργίας την εναλλακτική επέκταση "
#~ "στηλοθέτη. \n"
#~ msgid "Alt Tab Behaviour"
#~ msgstr "Συμπεριφορά Alt Tab"
#~ msgid "Cancel"
#~ msgstr "Ακύρωση"
#~ msgid "Ask the user for a default behaviour if true."
#~ msgstr "Ρωτήστε τον χρήστη για μια προεπιλεγμένη συμπεριφορα εαν αληθεύει."
#~ msgid "Indicates if Alternate Tab is newly installed"
#~ msgstr "Υποδεικνύει αν ο εναλλακτικός στηλοθέτης είναι νεοεισαχθείς"
#~ msgid ""
#~ "The algorithm used to layout thumbnails in the overview. 'grid' to use "
#~ "the default grid based algorithm, 'natural' to use another one that "
#~ "reflects more the position and size of the actual window"
#~ msgstr ""
#~ "Ο αλγόριθμος που χρησιμοποιείται για την διάταξη μικρογραφιών στην "
#~ "επισκόπηση. grid («πλέγμα») να χρησιμοποιήσει τον αλγόριθμο που βασίζετε "
#~ "στο προεπιλεγμένο πλέγμα, natural («φυσικό») να χρησιμοποιήσει ένα άλλο "
#~ "που αντανακλά περισσότερο τη θέση και το μέγεθος της πραγματικού παράθυρου"
#~ msgid "Window placement strategy"
#~ msgstr "Στρατηγική τοποθέτησης παραθύρου"

View File

@@ -2,308 +2,475 @@
# Copyright (C) 2011 gnome-shell-extensions'S COPYRIGHT HOLDER.
# This file is distributed under the same license as the gnome-shell-extensions package.
# Bruce Cowan <bruce@bcowan.me.uk>, 2011.
# Chris Leonard <cjlhomeaddress@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-09-08 16:00+0100\n"
"PO-Revision-Date: 2011-09-08 16:04+0100\n"
"Last-Translator: Bruce Cowan <bruce@bcowan.me.uk>\n"
"Language-Team: British English <en@li.org>\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=extensions\n"
"POT-Creation-Date: 2012-09-20 13:47+0000\n"
"PO-Revision-Date: 2012-09-21 21:00-0400\n"
"Last-Translator: Chris Leonard <cjlhomeaddress@gmail.com>\n"
"Language-Team: Sugar Labs\n"
"Language: en_GB\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Virtaal 0.7.1-beta1\n"
"X-Generator: Virtaal 0.7.1\n"
"X-Project-Style: gnome\n"
#: ../extensions/alternative-status-menu/extension.js:44
msgid "Do Not Disturb"
msgstr "Do Not Disturb"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
msgid "The application icon mode."
msgstr "The application icon mode."
#: ../extensions/alternative-status-menu/extension.js:52
msgid "Online Accounts"
msgstr "Online Accounts"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
"only' (shows only the application icon) or 'both'."
msgstr ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
"only' (shows only the application icon) or 'both'."
#: ../extensions/alternative-status-menu/extension.js:56
msgid "System Settings"
msgstr "System Settings"
#: ../extensions/alternate-tab/prefs.js:26
msgid "Thumbnail only"
msgstr "Thumbnail only"
#: ../extensions/alternative-status-menu/extension.js:63
msgid "Lock Screen"
msgstr "Lock Screen"
#: ../extensions/alternate-tab/prefs.js:27
msgid "Application icon only"
msgstr "Application icon only"
#: ../extensions/alternate-tab/prefs.js:28
msgid "Thumbnail and application icon"
msgstr "Thumbnail and application icon"
#: ../extensions/alternate-tab/prefs.js:43
msgid "Present windows as"
msgstr "Present windows as"
#: ../extensions/alternate-tab/prefs.js:68
msgid "Show only windows in the current workspace"
msgstr "Show only windows in the current workspace"
#. add the new entries
#: ../extensions/alternative-status-menu/extension.js:68
msgid "Switch User"
msgstr "Switch User"
#: ../extensions/alternative-status-menu/extension.js:73
msgid "Log Out..."
msgstr "Log Out…"
#: ../extensions/alternative-status-menu/extension.js:81
msgid "Suspend"
msgstr "Suspend"
#: ../extensions/alternative-status-menu/extension.js:87
#: ../extensions/alternative-status-menu/extension.js:73
msgid "Hibernate"
msgstr "Hibernate"
#: ../extensions/alternative-status-menu/extension.js:93
msgid "Power Off..."
msgstr "Power Off"
#: ../extensions/alternative-status-menu/extension.js:78
msgid "Power Off"
msgstr "Power Off"
#: ../extensions/alternate-tab/extension.js:44
msgid ""
"This is the first time you use the Alternate Tab extension. \n"
"Please choose your preferred behaviour:\n"
"\n"
"All & Thumbnails:\n"
" This mode presents all applications from all workspaces in one "
"selection \n"
" list. Instead of using the application icon of every window, it uses "
"small \n"
" thumbnails resembling the window itself. \n"
"\n"
"Workspace & Icons:\n"
" This mode let's you switch between the applications of your current \n"
" workspace and gives you additionally the option to switch to the last "
"used \n"
" application of your previous workspace. This is always the last symbol "
"in \n"
" the list and is segregated by a separator/vertical line if available. \n"
" Every window is represented by its application icon. \n"
"\n"
"Native:\n"
" This mode is the native GNOME 3 behaviour or in other words: Clicking \n"
" native switches the Alternate Tab extension off. \n"
msgstr ""
"This is the first time you use the Alternate Tab extension. \n"
"Please choose your preferred behaviour:\n"
"\n"
"All & Thumbnails:\n"
" This mode presents all applications from all workspaces in one selection "
" list. Instead of using the application icon of every window, it uses "
"small \n"
" thumbnails resembling the window itself. \n"
"\n"
"Workspace & Icons:\n"
" This mode lets you switch between the applications of your current \n"
" workspace and additionally gives you the option to switch to the last "
"used \n"
" application of your previous workspace. This is always the last symbol "
"in \n"
" the list and is segregated by a separator/vertical line if available. \n"
" Every window is represented by its application icon. \n"
"\n"
"Native:\n"
" This mode is the native GNOME 3 behaviour or in other words: Clicking \n"
" native switches the Alternate Tab extension off. \n"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1
msgid "Enable suspending"
msgstr "Enable suspending"
#: ../extensions/alternate-tab/extension.js:269
msgid "Alt Tab Behaviour"
msgstr "Alt Tab Behaviour"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2
msgid "Control the visibility of the Suspend menu item"
msgstr "Control the visibility of the Suspend menu item"
#: ../extensions/alternate-tab/extension.js:285
msgid "All & Thumbnails"
msgstr "All & Thumbnails"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3
msgid "Enable hibernating"
msgstr "Enable hibernating"
#: ../extensions/alternate-tab/extension.js:292
msgid "Workspace & Icons"
msgstr "Workspace & Icons"
#: ../extensions/alternate-tab/extension.js:299
msgid "Native"
msgstr "Native"
#: ../extensions/alternate-tab/extension.js:306
msgid "Cancel"
msgstr "Cancel"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
msgid "Ask the user for a default behaviour if true."
msgstr "Ask the user for a default behaviour if true."
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
msgid "Indicates if Alternate Tab is newly installed"
msgstr "Indicates if Alternate Tab is newly installed"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:3
msgid ""
"Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and "
"workspace_icons."
msgstr ""
"Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and "
"workspace_icons."
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
msgid "The alt tab behaviour."
msgstr "The alt tab behaviour."
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4
msgid "Control the visibility of the Hibernate menu item"
msgstr "Control the visibility of the Hibernate menu item"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
msgstr ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid "Application and workspace list"
msgstr "Application and workspace list"
#: ../extensions/dock/extension.js:486
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
msgstr ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
#: ../extensions/auto-move-windows/prefs.js:55
msgid "Application"
msgstr "Application"
#: ../extensions/auto-move-windows/prefs.js:64
#: ../extensions/auto-move-windows/prefs.js:106
msgid "Workspace"
msgstr "Workspace"
#: ../extensions/auto-move-windows/prefs.js:80
msgid "Add rule"
msgstr "Add rule"
#: ../extensions/auto-move-windows/prefs.js:94
msgid "Create new matching rule"
msgstr "Create new matching rule"
#: ../extensions/auto-move-windows/prefs.js:98
msgid "Add"
msgstr "Add"
#: ../extensions/dock/extension.js:600
msgid "Drag here to add favorites"
msgstr "Drag here to add favourites"
#: ../extensions/dock/extension.js:820
#: ../extensions/dock/extension.js:926
msgid "New Window"
msgstr "New Window"
#: ../extensions/dock/extension.js:822
#: ../extensions/dock/extension.js:928
msgid "Quit Application"
msgstr "Quit Application"
#: ../extensions/dock/extension.js:827
#: ../extensions/dock/extension.js:933
msgid "Remove from Favorites"
msgstr "Remove from Favourites"
#: ../extensions/dock/extension.js:828
#: ../extensions/dock/extension.js:934
msgid "Add to Favorites"
msgstr "Add to Favourites"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
msgid "Autohide duration"
msgstr "Autohide duration"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
msgid "Autohide effect"
msgstr "Autohide effect"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
msgid "Enable/disable autohide"
msgstr "Enable/disable autohide"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
msgid "Icon size"
msgstr "Icon size"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
msgid "Position of the dock"
msgstr "Position of the dock"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
msgid ""
"Sets the position of the dock in the screen. Allowed values are 'right' or "
"'left'"
msgstr ""
"Sets the position of the dock in the screen. Allowed values are 'right' or "
"'left'"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
msgid "Icon size"
msgstr "Icon size"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
msgid "Sets icon size of the dock."
msgstr "Sets icon size of the dock."
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
msgid "Enable/disable autohide"
msgstr "Enable/disable autohide"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
msgid "Autohide effect"
msgstr "Autohide effect"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
msgid ""
"Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale'"
"Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' and "
"'move'"
msgstr ""
"Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale'"
"Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' and "
"'move'"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
msgid ""
"Sets the position of the dock in the screen. Allowed values are 'right' or "
"'left'"
msgstr ""
"Sets the position of the dock in the screen. Allowed values are 'right' or "
"'left'"
msgid "Autohide duration"
msgstr "Autohide duration"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
msgid "Sets the time duration of the autohide effect."
msgstr "Sets the time duration of the autohide effect."
#: ../extensions/example/extension.js:11
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:10
msgid "Monitor"
msgstr "Monitor"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:11
msgid ""
"Sets monitor to display dock in. The default value (-1) is the primary "
"monitor."
msgstr ""
"Sets monitor to display dock in. The default value (-1) is the primary "
"monitor."
#: ../extensions/drive-menu/extension.js:56
msgid "Removable devices"
msgstr "Removable devices"
#: ../extensions/drive-menu/extension.js:67
msgid "Open file manager"
msgstr "Open file manager"
#: ../extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "Hello, world!"
#: ../extensions/gajim/extension.js:227
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1
msgid "Alternative greeting text."
msgstr "Alternative greeting text."
#: ../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 ""
"If not empty, it contains the text that will be shown when clicking on the "
"panel."
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: ../extensions/example/prefs.js:30
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 ""
"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."
#: ../extensions/example/prefs.js:36
msgid "Message:"
msgstr "Message:"
#: ../extensions/gajim/extension.js:226
#, c-format
msgid "%s is away."
msgstr "%s is away."
#: ../extensions/gajim/extension.js:230
#: ../extensions/gajim/extension.js:229
#, c-format
msgid "%s is offline."
msgstr "%s is offline."
#: ../extensions/gajim/extension.js:233
#: ../extensions/gajim/extension.js:232
#, c-format
msgid "%s is online."
msgstr "%s is online."
#: ../extensions/gajim/extension.js:236
#: ../extensions/gajim/extension.js:235
#, c-format
msgid "%s is busy."
msgstr "%s is busy."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
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 ""
"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."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
msgid "Place window captions on top"
msgstr "Place window captions on top"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid ""
"The algorithm used to layout thumbnails in the overview. 'grid' to use the "
"default grid based algorithm, 'natural' to use another one that reflects "
"more the position and size of the actual window"
msgstr ""
"The algorithm used to layout thumbnails in the overview. 'grid' to use the "
"default grid based algorithm, 'natural' to use another one that reflects "
"more the position and size of the actual window"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
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 ""
"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."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:5
msgid "Use more screen for windows"
msgstr "Use more screen for windows"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:6
msgid "Window placement strategy"
msgstr "Window placement strategy"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
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 ""
"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."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid "Place window captions on top"
msgstr "Place window captions on top"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
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 ""
"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."
#: ../extensions/places-menu/extension.js:46
msgid "Places"
msgstr "Places"
#: ../extensions/places-menu/extension.js:47
msgid "Devices"
msgstr "Devices"
#: ../extensions/places-menu/extension.js:48
msgid "Bookmarks"
msgstr "Bookmarks"
#: ../extensions/places-menu/extension.js:49
msgid "Network"
msgstr "Network"
#: ../extensions/places-menu/placeDisplay.js:48
#, c-format
msgid "Failed to launch \"%s\""
msgstr "Failed to launch \"%s\""
#: ../extensions/places-menu/placeDisplay.js:121
msgid "Home"
msgstr "Home"
#: ../extensions/places-menu/placeDisplay.js:184
msgid "File System"
msgstr "File System"
#: ../extensions/places-menu/placeDisplay.js:188
msgid "Browse network"
msgstr "Browse network"
#: ../extensions/systemMonitor/extension.js:213
msgid "CPU"
msgstr "CPU"
#: ../extensions/systemMonitor/extension.js:266
msgid "Memory"
msgstr "Memory"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
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"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "Theme name"
msgstr "Theme name"
#: ../extensions/xrandr-indicator/extension.js:26
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
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"
#: ../extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Workspace Indicator"
#: ../extensions/workspace-indicator/prefs.js:141
msgid "Workspace names:"
msgstr "Workspace names:"
#: ../extensions/workspace-indicator/prefs.js:152
msgid "Name"
msgstr "Name"
#: ../extensions/workspace-indicator/prefs.js:186
#, c-format
msgid "Workspace %d"
msgstr "Workspace %d"
#: ../extensions/xrandr-indicator/extension.js:30
msgid "Normal"
msgstr "Normal"
#: ../extensions/xrandr-indicator/extension.js:27
#: ../extensions/xrandr-indicator/extension.js:31
msgid "Left"
msgstr "Left"
#: ../extensions/xrandr-indicator/extension.js:28
#: ../extensions/xrandr-indicator/extension.js:32
msgid "Right"
msgstr "Right"
#: ../extensions/xrandr-indicator/extension.js:29
#: ../extensions/xrandr-indicator/extension.js:33
msgid "Upside-down"
msgstr "Upside-down"
#: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..."
msgstr "Configure display settings…"
#: ../extensions/xrandr-indicator/extension.js:50
msgid "Display"
msgstr "Display"
#: ../extensions/xrandr-indicator/extension.js:80
msgid "Display Settings"
msgstr "Display Settings"
#~ msgid "Do Not Disturb"
#~ msgstr "Do Not Disturb"
#~ msgid "Online Accounts"
#~ msgstr "Online Accounts"
#~ msgid "Lock Screen"
#~ msgstr "Lock Screen"
#~ msgid "Switch User"
#~ msgstr "Switch User"
#~ msgid "Log Out..."
#~ msgstr "Log Out…"
#~ msgid ""
#~ "This is the first time you use the Alternate Tab extension. \n"
#~ "Please choose your preferred behaviour:\n"
#~ "\n"
#~ "All & Thumbnails:\n"
#~ " This mode presents all applications from all workspaces in one "
#~ "selection \n"
#~ " list. Instead of using the application icon of every window, it uses "
#~ "small \n"
#~ " thumbnails resembling the window itself. \n"
#~ "\n"
#~ "Workspace & Icons:\n"
#~ " This mode let's you switch between the applications of your current \n"
#~ " workspace and gives you additionally the option to switch to the last "
#~ "used \n"
#~ " application of your previous workspace. This is always the last "
#~ "symbol in \n"
#~ " the list and is segregated by a separator/vertical line if "
#~ "available. \n"
#~ " Every window is represented by its application icon. \n"
#~ "\n"
#~ "Native:\n"
#~ " This mode is the native GNOME 3 behaviour or in other words: "
#~ "Clicking \n"
#~ " native switches the Alternate Tab extension off. \n"
#~ msgstr ""
#~ "This is the first time you use the Alternate Tab extension. \n"
#~ "Please choose your preferred behaviour:\n"
#~ "\n"
#~ "All & Thumbnails:\n"
#~ " This mode presents all applications from all workspaces in one "
#~ "selection list. Instead of using the application icon of every "
#~ "window, it uses small \n"
#~ " thumbnails resembling the window itself. \n"
#~ "\n"
#~ "Workspace & Icons:\n"
#~ " This mode lets you switch between the applications of your current \n"
#~ " workspace and additionally gives you the option to switch to the last "
#~ "used \n"
#~ " application of your previous workspace. This is always the last "
#~ "symbol in \n"
#~ " the list and is segregated by a separator/vertical line if "
#~ "available. \n"
#~ " Every window is represented by its application icon. \n"
#~ "\n"
#~ "Native:\n"
#~ " This mode is the native GNOME 3 behaviour or in other words: "
#~ "Clicking \n"
#~ " native switches the Alternate Tab extension off. \n"
#~ msgid "Alt Tab Behaviour"
#~ msgstr "Alt Tab Behaviour"
#~ msgid "Native"
#~ msgstr "Native"
#~ msgid "Cancel"
#~ msgstr "Cancel"
#~ msgid "Ask the user for a default behaviour if true."
#~ msgstr "Ask the user for a default behaviour if true."
#~ msgid "Indicates if Alternate Tab is newly installed"
#~ msgstr "Indicates if Alternate Tab is newly installed"
#~ msgid ""
#~ "Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails "
#~ "and workspace_icons."
#~ msgstr ""
#~ "Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails "
#~ "and workspace_icons."
#~ msgid "The alt tab behaviour."
#~ msgstr "The alt tab behaviour."
#~ msgid ""
#~ "The algorithm used to layout thumbnails in the overview. 'grid' to use "
#~ "the default grid based algorithm, 'natural' to use another one that "
#~ "reflects more the position and size of the actual window"
#~ msgstr ""
#~ "The algorithm used to layout thumbnails in the overview. 'grid' to use "
#~ "the default grid based algorithm, 'natural' to use another one that "
#~ "reflects more the position and size of the actual window"
#~ msgid "Window placement strategy"
#~ msgstr "Window placement strategy"
#~ msgid "Configure display settings..."
#~ msgstr "Configure display settings…"

694
po/es.po
View File

@@ -1,230 +1,224 @@
# Spanish translation for gnome-shell-extensions.
# Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell-extensions package.
# Jorge González <jorgegonz@svn.gnome.org>, 2011.
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011.
# Nicolás Satragno <nsatragno@gmail.com>, 2011.
# Spanish translation for gnome-shell-extensions.
# Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell-extensions package.
# Jorge González <jorgegonz@svn.gnome.org>, 2011.
# Nicolás Satragno <nsatragno@gmail.com>, 2011.
#
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011, 2012.
, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"POT-Creation-Date: 2011-12-27 14:30+0000\n"
"PO-Revision-Date: 2011-12-27 16:58-0300\n"
"Last-Translator: Nicolás Satragno <nsatragno@gmail.com>\n"
"Language-Team: Español; Castellano <gnome-es-list@gnome.org>\n"
"shell&keywords=I18N+L10N&component=extensions\n"
"POT-Creation-Date: 2013-06-07 22:57+0000\n"
"PO-Revision-Date: 2013-06-13 11:24+0200\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Español <gnome-es-list@gnome.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-Generator: Gtranslator 2.91.5\n"
#: ../data/gnome-classic.desktop.in.h:1
#: ../data/gnome-classic.session.desktop.in.in.h:1
msgid "GNOME Classic"
msgstr "GNOME clásico"
#: ../data/gnome-classic.desktop.in.h:2
msgid "This session logs you into GNOME Classic"
msgstr "Esta sesión inicia GNOME clásico"
#: ../data/gnome-shell-classic.desktop.in.in.h:1
msgid "GNOME Shell Classic"
msgstr "GNOME Shell clásico"
#: ../data/gnome-shell-classic.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Gestión de ventanas e inicio de aplicaciones"
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:1
msgid "Attach modal dialog to the parent window"
msgstr "Acoplar un diálogo modal a la ventana padre"
#: ../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 ""
"Esta clave sobreescribe la clave en org.gnome.mutter al ejecutar GNOME Shell."
#: ../data/org.gnome.shell.extensions.classic-overrides.gschema.xml.in.h:3
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.in.h:4
#| msgid "Workspace Indicator"
msgid "Workspaces only on primary monitor"
msgstr "Áreas de trabajo solo en la pantalla principal"
#: ../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:37
msgid "Present windows as"
msgstr "Presentar ventanas como"
#: ../extensions/alternate-tab/prefs.js:62
msgid "Show only windows in the current workspace"
msgstr "Mostrar ventanas solamente en el área de trabajo actual"
#: ../extensions/alternative-status-menu/extension.js:68
#. add the new entries
#: ../extensions/alternative-status-menu/extension.js:125
msgid "Suspend"
msgstr "Suspender"
#: ../extensions/alternative-status-menu/extension.js:73
#: ../extensions/alternative-status-menu/extension.js:128
msgid "Hibernate"
msgstr "Hibernar"
#: ../extensions/alternative-status-menu/extension.js:78
msgid "Power Off..."
msgstr "Apagar…"
#: ../extensions/alternative-status-menu/extension.js:131
msgid "Power Off"
msgstr "Apagar"
#: ../extensions/alternate-tab/extension.js:54
msgid ""
"This is the first time you use the Alternate Tab extension. \n"
"Please choose your preferred behaviour:\n"
"\n"
"All & Thumbnails:\n"
" This mode presents all applications from all workspaces in one "
"selection \n"
" list. Instead of using the application icon of every window, it uses "
"small \n"
" thumbnails resembling the window itself. \n"
"\n"
"Workspace & Icons:\n"
" This mode let's you switch between the applications of your current \n"
" workspace and gives you additionally the option to switch to the last "
"used \n"
" application of your previous workspace. This is always the last symbol "
"in \n"
" the list and is segregated by a separator/vertical line if available. \n"
" Every window is represented by its application icon. \n"
"\n"
"If you whish to revert to the default behavior for the Alt-Tab switcher, "
"just\n"
"disable the extension from extensions.gnome.org or the Advanced Settings "
"application."
msgstr ""
"Esta es la primera vez que usa la extensión Alt+Tab. \n"
"Seleccione el comportamiento preferido:\n"
"\n"
"Todo y miniaturas:\n"
" Este modo muestra todas la aplicaciones de todas las áreas de trabajo \n"
" en una única lista. En lugar de usar el icono de la aplicación de cada "
"ventana, usa \n"
" miniaturas similares a la ventana.\n"
"\n"
"Área de trabajo e iconos:\n"
" Este modo permite le alternar entre aplicaciones del área de trabajo "
"actual, \n"
" y ofrece la posibilidad de cambiar a la última aplicación usada en el \n"
" área de trabajo anterior. Éste último es siempre el último símbolo en "
"la \n"
" lista, y está diferenciado mediante un separador/línea vertical, si "
"está \n"
" disponible. \n"
" Cada ventana se representa con el icono de la aplicación. \n"
"\n"
"Si quiere volver al comportamiento predeterminado de Alt+Tab, simplemente\n"
"desactive la extensión desde extensions.gnome.org o en la aplicación "
"Configuración avanzada."
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1
msgid "Enable suspending"
msgstr "Activar la suspensión"
#: ../extensions/alternate-tab/extension.js:295
msgid "Alt Tab Behaviour"
msgstr "Comportamiento de Alt+Tab"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2
msgid "Control the visibility of the Suspend menu item"
msgstr "Controla la visibilidad del elemento de menú «Suspender»"
#: ../extensions/alternate-tab/extension.js:311
msgid "All & Thumbnails"
msgstr "Todo y miniaturas"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3
msgid "Enable hibernating"
msgstr "Activar la hibernación"
#: ../extensions/alternate-tab/extension.js:318
msgid "Workspace & Icons"
msgstr "Espacio de trabajo e iconos"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4
msgid "Control the visibility of the Hibernate menu item"
msgstr "Controla la visibilidad del elemento de menú «Hibernar»"
#: ../extensions/alternate-tab/extension.js:325
msgid "Cancel"
msgstr "Cancelar"
#: ../extensions/apps-menu/extension.js:39
msgid "Activities Overview"
msgstr "Vista de actividades"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
msgid "Ask the user for a default behaviour if true."
msgstr "Si es cierto, preguntar al usuario el comportamiento predeterminado."
#: ../extensions/apps-menu/extension.js:113
msgid "Favorites"
msgstr "Favoritos"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
msgid "Indicates if Alternate Tab is newly installed"
msgstr "Indica si se ha instalado Alt+Tab recientemente"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:3
msgid ""
"Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and "
"workspace_icons."
msgstr ""
"Establece el comportamiento de Alt+Tab. Los valores posibles son: "
"«native» (nativo), «all_thumbnails» (todo y miniaturas) y "
"«workspace_icons» (iconos de áreas de trabajo)."
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
msgid "The alt tab behaviour."
msgstr "El comportamiento de Alt+Tab."
#: ../extensions/apps-menu/extension.js:278
msgid "Applications"
msgstr "Aplicaciones"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid "Application and workspace list"
msgstr "Lista de aplicaciones y áreas de trabajo"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
msgstr ""
"archivo de escritorio), seguido de dos puntos y el número del espacio de "
"trabajo"
"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"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid "Application and workspace list"
msgstr "Lista de aplicaciones y espacios de trabajo"
#: ../extensions/auto-move-windows/prefs.js:55
msgid "Application"
msgstr "Aplicación"
#: ../extensions/dock/extension.js:561
msgid "Drag here to add favorites"
msgstr "Arrastrar aquí para añadir a favoritos"
#: ../extensions/auto-move-windows/prefs.js:64
#: ../extensions/auto-move-windows/prefs.js:106
msgid "Workspace"
msgstr "Área de trabajo"
#: ../extensions/dock/extension.js:896
msgid "New Window"
msgstr "Ventana nueva"
#: ../extensions/auto-move-windows/prefs.js:80
msgid "Add rule"
msgstr "Añadir regla"
#: ../extensions/dock/extension.js:898
msgid "Quit Application"
msgstr "Salir de la aplicación"
#: ../extensions/auto-move-windows/prefs.js:94
msgid "Create new matching rule"
msgstr "Crear regla de coincidencia nueva"
#: ../extensions/dock/extension.js:903
msgid "Remove from Favorites"
msgstr "Quitar de favoritos"
#: ../extensions/auto-move-windows/prefs.js:98
msgid "Add"
msgstr "Añadir"
#: ../extensions/dock/extension.js:904
msgid "Add to Favorites"
msgstr "Añadir a favoritos"
#: ../extensions/drive-menu/extension.js:72
#, c-format
msgid "Ejecting drive '%s' failed:"
msgstr "Falló al expulsar el dispositivo «%s»"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
msgid "Autohide duration"
msgstr "Duración de la ocultación automática"
#: ../extensions/drive-menu/extension.js:89
msgid "Removable devices"
msgstr "Dispositivos extraíbles"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
msgid "Autohide effect"
msgstr "Efecto de ocultación automática"
#: ../extensions/drive-menu/extension.js:106
msgid "Open File"
msgstr "Abrir archivo"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
msgid "Enable/disable autohide"
msgstr "Activar/desactivar ocultación automática"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
msgid "Icon size"
msgstr "Tamaño del icono"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
msgid "Position of the dock"
msgstr "Posición del tablero"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
msgid "Sets icon size of the dock."
msgstr "Configura el tamaño de los íconos del tablero."
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
msgid ""
"Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' and "
"'move'"
msgstr ""
"Establece el efecto de ocultación del tablero. Los valores permitidos son "
"«resize» (redimensionar) y «rescale» (re-escalar) y «move» (mover)"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
msgid ""
"Sets the position of the dock in the screen. Allowed values are 'right' or "
"'left'"
msgstr ""
"Configura la posición del tablero en la pantalla. Los valores permitidos son "
"«right» (derecha) o «left» (izquierda)"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
msgid "Sets the time duration of the autohide effect."
msgstr "Configura la duración del efecto de ocultación automática."
#: ../extensions/drive-menu/extension.js:69
msgid "Open file manager"
msgstr "Abrir el gestor de archivos"
#: ../extensions/example/extension.js:11
#: ../extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "¡Hola, mundo!"
#: ../extensions/gajim/extension.js:227
#, c-format
msgid "%s is away."
msgstr "%s no está disponible."
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1
msgid "Alternative greeting text."
msgstr "Texto de bienvenida alternativo"
#: ../extensions/gajim/extension.js:230
#, c-format
msgid "%s is offline."
msgstr "%s está desconectado."
#: ../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 ""
"Si no está vacío, contiene el texto que se desplegará al pulsar sobre el "
"panel."
#: ../extensions/gajim/extension.js:233
#, c-format
msgid "%s is online."
msgstr "%s está conectado."
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: ../extensions/example/prefs.js:30
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 ""
"«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/gajim/extension.js:236
#, c-format
msgid "%s is busy."
msgstr "%s está ocupado."
#: ../extensions/example/prefs.js:36
msgid "Message:"
msgstr "Mensaje:"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
msgid "Use more screen for windows"
msgstr "Usar más pantalla para las ventanas"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
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 ""
"Intente utilizar más espacio para situar las miniaturas, adaptándolas a la "
"forma de la pantalla, y consolidarlas aún más para reducir el área ocupada. "
"Esta opción sólo se aplica a la estrategia de posicionamiento «natural»."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid "Place window captions on top"
msgstr "Situar los títulos de ventanas arriba"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
@@ -235,55 +229,335 @@ msgstr ""
"correspondientes, cambiando el comportamiento predeterminado de shell, que "
"los sitúa por debajo. Cambiar esta configuración requiere reiniciar la shell "
"para que tenga efecto."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
msgid "Place window captions on top"
msgstr "Situar los títulos de ventanas arriba"
#: ../extensions/places-menu/extension.js:77
msgid "Places"
msgstr "Lugares"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
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 ""
"Intente utilizar más espacio para situar las miniaturas, adaptándolas a la "
"forma de la pantalla, y consolidarlas aún más para reducir el área ocupada. "
"Esta opción sólo se aplica a la estrategia de posicionamiento «natural»."
#: ../extensions/places-menu/placeDisplay.js:56
#, c-format
msgid "Failed to launch \"%s\""
msgstr "Falló al lanzar «%s»"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
msgid "Use more screen for windows"
msgstr "Usar más pantalla para las ventanas"
#: ../extensions/places-menu/placeDisplay.js:98
#: ../extensions/places-menu/placeDisplay.js:121
msgid "Computer"
msgstr "Equipo"
#: ../extensions/places-menu/extension.js:36
msgid "Removable Devices"
msgstr "Dispositivos extraíbles"
#: ../extensions/places-menu/placeDisplay.js:199
msgid "Home"
msgstr "Carpeta personal"
#: ../extensions/places-menu/placeDisplay.js:286
msgid "Browse Network"
msgstr "Examinar la red"
#: ../extensions/systemMonitor/extension.js:213
msgid "CPU"
msgstr "CPU"
#: ../extensions/systemMonitor/extension.js:266
msgid "Memory"
msgstr "Memoria"
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"
#: ../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.in.h:1
msgid "Theme name"
msgstr "Nombre del tema"
#: ../extensions/xrandr-indicator/extension.js:26
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
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"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1
msgid "When to group windows"
msgstr "Cuándo agrupar las ventanas"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are \"never\", \"auto\" and \"always\"."
msgstr ""
"Decide cuándo agrupar ventanas para la misma aplicación en la lista de "
"ventanas. Los valores posibles son «never», «auto» y «always»."
#: ../extensions/window-list/prefs.js:30
msgid "Window Grouping"
msgstr "Agrupación de ventanas"
#: ../extensions/window-list/prefs.js:49
msgid "Never group windows"
msgstr "Nunca agrupar las ventanas"
#: ../extensions/window-list/prefs.js:50
msgid "Group windows when space is limited"
msgstr "Agrupar las ventanas cuando el espacio esté limitado"
#: ../extensions/window-list/prefs.js:51
msgid "Always group windows"
msgstr "Siempre agrupar las ventanas"
#: ../extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Indicador de área de trabajo"
#: ../extensions/workspace-indicator/prefs.js:141
msgid "Workspace names:"
msgstr "Nombres de los áreas de trabajo:"
#: ../extensions/workspace-indicator/prefs.js:152
msgid "Name"
msgstr "Nombre"
#: ../extensions/workspace-indicator/prefs.js:186
#, c-format
msgid "Workspace %d"
msgstr "Área de trabajo %d"
#: ../extensions/xrandr-indicator/extension.js:30
msgid "Normal"
msgstr "Normal"
#: ../extensions/xrandr-indicator/extension.js:27
#: ../extensions/xrandr-indicator/extension.js:31
msgid "Left"
msgstr "Izquierda"
#: ../extensions/xrandr-indicator/extension.js:28
#: ../extensions/xrandr-indicator/extension.js:32
msgid "Right"
msgstr "Derecha"
#: ../extensions/xrandr-indicator/extension.js:29
#: ../extensions/xrandr-indicator/extension.js:33
msgid "Upside-down"
msgstr "Hacia abajo"
#: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..."
msgstr "Configurar las opciones de pantalla"
#: ../extensions/xrandr-indicator/extension.js:50
msgid "Display"
msgstr "Pantalla"
#: ../extensions/xrandr-indicator/extension.js:87
msgid "Display Settings"
msgstr "Configuración de pantalla"
#~ msgid "File System"
#~ msgstr "Sistema de archivos"
#~ msgid "The application icon mode."
#~ msgstr "El modo de icono de la aplicación."
#~ msgid ""
#~ "Configures how the windows are shown in the switcher. Valid possibilities "
#~ "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
#~ "only' (shows only the application icon) or 'both'."
#~ msgstr ""
#~ "Configura cómo se muestran las ventanas en el intercambiador. Las "
#~ "opciones posibles son «thumbnail-only» (muestra una miniatura de la "
#~ "ventana, «app-icon-only» (sólo muestra el icono de la aplicación) o "
#~ "«both» (se muestran ambas cosas)."
#~ msgid "Devices"
#~ msgstr "Dispositivos"
#~ msgid "Bookmarks"
#~ msgstr "Marcadores"
#~ msgid "Network"
#~ msgstr "Red"
#~ msgid "Drag here to add favorites"
#~ msgstr "Arrastrar aquí para añadir a favoritos"
#~ msgid "New Window"
#~ msgstr "Ventana nueva"
#~ msgid "Quit Application"
#~ msgstr "Salir de la aplicación"
#~ msgid "Remove from Favorites"
#~ msgstr "Quitar de favoritos"
#~ msgid "Position of the dock"
#~ msgstr "Posición del tablero"
#~ msgid ""
#~ "Sets the position of the dock in the screen. Allowed values are 'right' "
#~ "or 'left'"
#~ msgstr ""
#~ "Configura la posición del tablero en la pantalla. Los valores permitidos "
#~ "son «right» (derecha) o «left» (izquierda)"
#~ msgid "Icon size"
#~ msgstr "Tamaño del icono"
#~ msgid "Sets icon size of the dock."
#~ msgstr "Configura el tamaño de los íconos del tablero."
#~ msgid "Enable/disable autohide"
#~ msgstr "Activar/desactivar ocultación automática"
#~ msgid "Autohide effect"
#~ msgstr "Efecto de ocultación automática"
#~ msgid ""
#~ "Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' "
#~ "and 'move'"
#~ msgstr ""
#~ "Establece el efecto de ocultación del tablero. Los valores permitidos son "
#~ "«resize» (redimensionar) y «rescale» (re-escalar) y «move» (mover)"
#~ msgid "Autohide duration"
#~ msgstr "Duración de la ocultación automática"
#~ msgid "Sets the time duration of the autohide effect."
#~ msgstr "Configura la duración del efecto de ocultación automática."
#~ msgid "Monitor"
#~ msgstr "Pantalla"
#~ msgid ""
#~ "Sets monitor to display dock in. The default value (-1) is the primary "
#~ "monitor."
#~ msgstr ""
#~ "Establece la pantalla en la que mostrar el tablero. El valor "
#~ "predeterminado es (-1), que es la pantalla principal."
#~ msgid "%s is away."
#~ msgstr "%s no está disponible."
#~ msgid "%s is offline."
#~ msgstr "%s está desconectado."
#~ msgid "%s is online."
#~ msgstr "%s está conectado."
#~ msgid "%s is busy."
#~ msgstr "%s está ocupado."
#~ msgid "Removable Devices"
#~ msgstr "Dispositivos extraíbles"
#~ msgid "Configure display settings..."
#~ msgstr "Configurar las opciones de pantalla…"
#~ msgid "The alt tab behaviour."
#~ msgstr "El comportamiento de Alt+Tab."
#~ msgid ""
#~ "Sets the Alt-Tab behaviour. Possible values are: all_thumbnails and "
#~ "workspace_icons. See the configuration dialogs for details."
#~ msgstr ""
#~ "Establece el comportamiento de Alt+Tab. Los valores posibles son: "
#~ "«native» (nativo), «all_thumbnails» (todo y miniaturas) y "
#~ "«workspace_icons» (iconos de áreas de trabajo). Para obtener información "
#~ "más detallada, consulte la configuración de los diálogos "
#~ msgid ""
#~ "This mode presents all applications from all workspaces in one selection "
#~ "list. Instead of using the application icon of every window, it uses "
#~ "small thumbnails resembling the window itself."
#~ msgstr ""
#~ "Este modo presenta todas las aplicaciones de todas las áreas de trabajo "
#~ "en una lista de selección. En lugar de usar el icono de aplicación de "
#~ "cada ventana, usa pequeñas miniaturas que se asemejan a la propia ventana."
#~ msgid "Workspace & Icons"
#~ msgstr "Área de trabajo e iconos"
#~| msgid ""
#~| "This mode let's you switch between the applications of your current "
#~| "workspace and gives you additionally the option to switch to the last "
#~| "used application of your previous workspace. This is always the last "
#~| "symbol in the list and is segregated by a separator/vertical line if "
#~| "available. \n"
#~| "Every window is represented by its application icon."
#~ msgid ""
#~ "This mode lets you switch between the applications of your current "
#~ "workspace and gives you additionally the option to switch to the last "
#~ "used application of your previous workspace. This is always the last "
#~ "symbol in the list and is separated by a separator/vertical line if "
#~ "available. \n"
#~ "Every window is represented by its application icon."
#~ msgstr ""
#~ "Este modo le permite alternar entre las aplicaciones de su área de "
#~ "trabajo actual y le da la opción de cambiar a la última aplicación "
#~ "utilizada de su área de trabajo anterior. Este siempre es el último "
#~ "símbolo de la lista y está separado por un separador/línea vertical si "
#~ "está disponible.\n"
#~ "Cada ventana está representada por su icono de aplicación."
#~ msgid "Move current selection to front before closing the popup"
#~ msgstr ""
#~ "Mover la selección actual al frente antes de cerrar la ventana emergente"
#~ msgid ""
#~ "The Alternate Tab can be used in different modes, that affect the way "
#~ "windows are chosen and presented."
#~ msgstr ""
#~ "La combinación de teclas Alt+Tab se puede usar en diferentes modos, que "
#~ "afectan la manera en que se eligen y presentan las ventanas."
#~ msgid "Indicates if Alternate Tab is newly installed"
#~ msgstr "Indica si se ha instalado Alt+Tab recientemente"
#~ msgid "Ask the user for a default behaviour if true."
#~ msgstr ""
#~ "Si es cierto, preguntar al usuario el comportamiento predeterminado."
#~ msgid ""
#~ "This is the first time you use the Alternate Tab extension. \n"
#~ "Please choose your preferred behaviour:\n"
#~ "\n"
#~ "All & Thumbnails:\n"
#~ " This mode presents all applications from all workspaces in one "
#~ "selection \n"
#~ " list. Instead of using the application icon of every window, it uses "
#~ "small \n"
#~ " thumbnails resembling the window itself. \n"
#~ "\n"
#~ "Workspace & Icons:\n"
#~ " This mode let's you switch between the applications of your current \n"
#~ " workspace and gives you additionally the option to switch to the last "
#~ "used \n"
#~ " application of your previous workspace. This is always the last "
#~ "symbol in \n"
#~ " the list and is segregated by a separator/vertical line if "
#~ "available. \n"
#~ " Every window is represented by its application icon. \n"
#~ "\n"
#~ "If you whish to revert to the default behavior for the Alt-Tab switcher, "
#~ "just\n"
#~ "disable the extension from extensions.gnome.org or the Advanced Settings "
#~ "application."
#~ msgstr ""
#~ "Esta es la primera vez que usa la extensión Alt+Tab. \n"
#~ "Seleccione el comportamiento preferido:\n"
#~ "\n"
#~ "Todo y miniaturas:\n"
#~ " Este modo muestra todas la aplicaciones de todas las áreas de "
#~ "trabajo \n"
#~ " en una única lista. En lugar de usar el icono de la aplicación de "
#~ "cada ventana, usa \n"
#~ " miniaturas similares a la ventana.\n"
#~ "\n"
#~ "Área de trabajo e iconos:\n"
#~ " Este modo permite le alternar entre aplicaciones del área de trabajo "
#~ "actual, \n"
#~ " y ofrece la posibilidad de cambiar a la última aplicación usada en "
#~ "el \n"
#~ " área de trabajo anterior. Éste último es siempre el último símbolo en "
#~ "la \n"
#~ " lista, y está diferenciado mediante un separador/línea vertical, si "
#~ "está \n"
#~ " disponible. \n"
#~ " Cada ventana se representa con el icono de la aplicación. \n"
#~ "\n"
#~ "Si quiere volver al comportamiento predeterminado de Alt+Tab, "
#~ "simplemente\n"
#~ "desactive la extensión desde extensions.gnome.org o en la aplicación "
#~ "Configuración avanzada."
#~ msgid "Alt Tab Behaviour"
#~ msgstr "Comportamiento de Alt+Tab"
#~ msgid "Cancel"
#~ msgstr "Cancelar"
#~ msgid "Notifications"
@@ -291,9 +565,6 @@ msgstr "Configurar las opciones de pantalla…"
#~ msgid "Online Accounts"
#~ msgstr "Cuentas en línea"
#~ msgid "System Settings"
#~ msgstr "Configuración del sistema"
#~ msgid "Lock Screen"
#~ msgstr "Bloquear la pantalla"
@@ -316,9 +587,6 @@ msgstr "Configurar las opciones de pantalla…"
#~ msgid "Window placement strategy"
#~ msgstr "Estrategia de ubicación de ventanas"
#~ msgid "Native"
#~ msgstr "Nativo"
#~ msgid "Available"
#~ msgstr "Disponible"

271
po/fa.po
View File

@@ -7,10 +7,10 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions gnome-3-0\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=extensions\n"
"POT-Creation-Date: 2011-05-21 14:17+0000\n"
"PO-Revision-Date: 2011-05-23 22:28+0330\n"
"POT-Creation-Date: 2012-04-29 21:33+0000\n"
"PO-Revision-Date: 2012-05-14 20:38+0330\n"
"Last-Translator: Arash Mousavi <mousavi.arash@gmail.com>\n"
"Language-Team: Persian <translate@ifsug.org>\n"
"Language-Team: Persian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -18,126 +18,277 @@ msgstr ""
"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n"
"X-Poedit-SourceCharset: utf-8\n"
#: ../extensions/alternative-status-menu/extension.js:23
#: ../extensions/alternative-status-menu/extension.js:27
#: ../extensions/alternative-status-menu/extension.js:93
msgid "Hibernate"
msgstr "خواب‌زمستانی"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
msgid "The alt tab behaviour."
msgstr "رفتار alt tab."
#: ../extensions/alternative-status-menu/extension.js:26
#: ../extensions/alternative-status-menu/extension.js:92
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
msgid "Sets the Alt-Tab behaviour. Possible values are: all_thumbnails and workspace_icons. See the configuration dialogs for details."
msgstr "رفتار Alt-Tab را تنظیم می‌کند. مقادیر ممکن عبارتند از: all_thumbnails و workspace_icons. برای جزئیات، محاوره‌ی پیکربندی را مشاهده کنید."
#: ../extensions/alternate-tab/prefs.js:27
msgid "All & Thumbnails"
msgstr "همه و تصاویر بندانگشتی"
#: ../extensions/alternate-tab/prefs.js:28
msgid "This mode presents all applications from all workspaces in one selection list. Instead of using the application icon of every window, it uses small thumbnails resembling the window itself."
msgstr ""
#: ../extensions/alternate-tab/prefs.js:34
msgid "Workspace & Icons"
msgstr "فضای‌کاری و شمایل‌ها"
#: ../extensions/alternate-tab/prefs.js:35
msgid ""
"This mode let's you switch between the applications of your current workspace and gives you additionally the option to switch to the last used application of your previous workspace. This is always the last symbol in the list and is segregated by a separator/vertical line if available. \n"
"Every window is represented by its application icon."
msgstr ""
#: ../extensions/alternate-tab/prefs.js:41
msgid "Move current selection to front before closing the popup"
msgstr "انتقالِ انتخاب فعلی به بالا قبل از بستن پنجره واشو"
#: ../extensions/alternate-tab/prefs.js:58
msgid "The Alternate Tab can be used in different modes, that affect the way windows are chosen and presented."
msgstr "«جای‌گزین Tab» می‌تواند در حالت‌های مختلفی استفاده شود، که در نحوه باز شدن و انتخاب پنجره‌ها تاثیر می‌گذارد."
#. add the new entries
#: ../extensions/alternative-status-menu/extension.js:64
msgid "Suspend"
msgstr "تعلیق"
#: ../extensions/alternative-status-menu/extension.js:52
msgid "Available"
msgstr "موجود"
#: ../extensions/alternative-status-menu/extension.js:57
msgid "Busy"
msgstr "مشغول"
#: ../extensions/alternative-status-menu/extension.js:65
msgid "My Account"
msgstr "حساب من"
#: ../extensions/alternative-status-menu/extension.js:69
msgid "System Settings"
msgstr "تنظیمات سیستم"
msgid "Hibernate"
msgstr "خواب‌زمستانی"
#: ../extensions/alternative-status-menu/extension.js:76
msgid "Lock Screen"
msgstr "قفل‌کردن صفحه‌نمایش"
#: ../extensions/alternative-status-menu/extension.js:80
msgid "Switch User"
msgstr "تعویض کاربر"
#: ../extensions/alternative-status-menu/extension.js:85
msgid "Log Out..."
msgstr "خروج از سیستم..."
#: ../extensions/alternative-status-menu/extension.js:100
#: ../extensions/alternative-status-menu/extension.js:74
msgid "Power Off..."
msgstr "خاموش کردن..."
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid "A list of strings, each containing an application id (desktop file name), followed by a colon and the workspace number"
msgstr "فهرستی از رشته‌ها، هرکدام حاوی شناسه‌ی یک برنامه (نام پرونده رومیزی)، در ادامه‌ی یک ویرگول و شماره‌ی فضای کاری"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid "Application and workspace list"
msgstr "فهرست برنامه‌ها و فضای‌کاری"
#: ../extensions/dock/extension.js:116
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid "A list of strings, each containing an application id (desktop file name), followed by a colon and the workspace number"
msgstr "فهرستی از رشته‌ها، هرکدام حاوی شناسه‌ی یک برنامه (نام پرونده رومیزی)، در ادامه‌ی یک ویرگول و شماره‌ی فضای کاری"
#: ../extensions/auto-move-windows/prefs.js:55
#| msgid "Quit Application"
msgid "Application"
msgstr "برنامه"
#: ../extensions/auto-move-windows/prefs.js:64
#: ../extensions/auto-move-windows/prefs.js:106
msgid "Workspace"
msgstr "فضای‌کاری"
#: ../extensions/auto-move-windows/prefs.js:80
msgid "Add rule"
msgstr "اضافه کردن قاعده"
#: ../extensions/auto-move-windows/prefs.js:94
msgid "Create new matching rule"
msgstr "اضافه کردن یک قاعده‌ی منطبق جدید"
#: ../extensions/auto-move-windows/prefs.js:98
msgid "Add"
msgstr "اضافه"
#: ../extensions/dock/extension.js:577
msgid "Drag here to add favorites"
msgstr "به اینجا بکشید تا به علاقه‌مندی‌ها اضافه شود"
#: ../extensions/dock/extension.js:417
#: ../extensions/dock/extension.js:903
msgid "New Window"
msgstr "پنجره جدید"
#: ../extensions/dock/extension.js:419
#: ../extensions/dock/extension.js:905
msgid "Quit Application"
msgstr "خروج از برنامه"
#: ../extensions/dock/extension.js:424
#: ../extensions/dock/extension.js:910
msgid "Remove from Favorites"
msgstr "حذف از علاقه‌مندی‌ها"
#: ../extensions/dock/extension.js:425
#: ../extensions/dock/extension.js:911
msgid "Add to Favorites"
msgstr "اضافه کردن به علاقه‌مندی‌ها"
#: ../extensions/example/extension.js:11
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
msgid "Position of the dock"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
msgid "Sets the position of the dock in the screen. Allowed values are 'right' or 'left'"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
msgid "Icon size"
msgstr "اندازه شمایل"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
msgid "Sets icon size of the dock."
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
msgid "Enable/disable autohide"
msgstr "فعال/غیرفعال کردن مخفی‌سازی خودکار"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
msgid "Autohide effect"
msgstr "جلوه‌ی مخفی‌سازی خودکار"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
msgid "Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' and 'move'"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
msgid "Autohide duration"
msgstr "طول مدت مخفی‌سازی خودکار"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
msgid "Sets the time duration of the autohide effect."
msgstr "تنظیم مدت زمان جلوه‌ی مخفی‌سازی خودکار"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:10
msgid "Monitor"
msgstr "نمایشگر"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:11
msgid "Sets monitor to display dock in. The default value (-1) is the primary monitor."
msgstr ""
#: ../extensions/drive-menu/extension.js:66
msgid "Open file manager"
msgstr "باز کردن مدیر پرونده"
#: ../extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "سلام دنیا!"
#: ../extensions/gajim/extension.js:219
#: ../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 "اگر خالی نباشد، حاوی متنی خواهد بود که که هنگام کلیک بر روی پنل نمایش داده می‌شود است."
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: ../extensions/example/prefs.js:30
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 ""
#: ../extensions/example/prefs.js:36
msgid "Message:"
msgstr "پیام:"
#: ../extensions/gajim/extension.js:227
#, c-format
msgid "%s is away."
msgstr "%s غائب است."
#: ../extensions/gajim/extension.js:222
#: ../extensions/gajim/extension.js:230
#, c-format
msgid "%s is offline."
msgstr "%s برون‌خط است."
#: ../extensions/gajim/extension.js:225
#: ../extensions/gajim/extension.js:233
#, c-format
msgid "%s is online."
msgstr "%s برخط است."
#: ../extensions/gajim/extension.js:228
#: ../extensions/gajim/extension.js:236
#, c-format
msgid "%s is busy."
msgstr "%s مشغول است."
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "نام تم، جهت بارگیری از شاخه themes/name/gnome-shell./~"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
msgid "Use more screen for windows"
msgstr "استفاده از صفحه بیشتر برای پنجره"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
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 ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid "Place window captions on top"
msgstr "قراردادن عنوان پنجره در بالا"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
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 "اگر بر روی درست باشد، عنوان پنجره را بالای تصویر آن قرار می‌دهد، که حالت پیش‌فرض شل در پایین را تغییر می‌دهد. تغییر این گزینه، نیاز به راه‌اندازی مجدد شل دارد تا تاثیر بگذارد."
#: ../extensions/places-menu/extension.js:37
msgid "Removable Devices"
msgstr "دستگاه‌های جدا شدنی"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
msgid "Theme name"
msgstr "نام تم"
#: ../extensions/xrandr-indicator/extension.js:26
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "نام تم، جهت بارگیری از شاخه themes/name/gnome-shell./~"
#: ../extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "نشانگر فضای‌کاری"
#: ../extensions/workspace-indicator/prefs.js:141
msgid "Workspace names:"
msgstr "نام فضاهای کاری:"
#: ../extensions/workspace-indicator/prefs.js:152
msgid "Name"
msgstr "نام"
#: ../extensions/workspace-indicator/prefs.js:186
#, c-format
msgid "Workspace %d"
msgstr "فضای‌کاری %Id"
#: ../extensions/xrandr-indicator/extension.js:30
msgid "Normal"
msgstr "عادی"
#: ../extensions/xrandr-indicator/extension.js:27
#: ../extensions/xrandr-indicator/extension.js:31
msgid "Left"
msgstr "چپ"
#: ../extensions/xrandr-indicator/extension.js:28
#: ../extensions/xrandr-indicator/extension.js:32
msgid "Right"
msgstr "راست"
#: ../extensions/xrandr-indicator/extension.js:29
#: ../extensions/xrandr-indicator/extension.js:33
msgid "Upside-down"
msgstr "برعکس"
#: ../extensions/xrandr-indicator/extension.js:78
#: ../extensions/xrandr-indicator/extension.js:82
msgid "Configure display settings..."
msgstr "پیکربندی تنظیمات نمایش..."
#~ msgid "Available"
#~ msgstr "موجود"
#~ msgid "Busy"
#~ msgstr "مشغول"
#~ msgid "My Account"
#~ msgstr "حساب من"
#~ msgid "System Settings"
#~ msgstr "تنظیمات سیستم"
#~ msgid "Lock Screen"
#~ msgstr "قفل‌کردن صفحه‌نمایش"
#~ msgid "Switch User"
#~ msgstr "تعویض کاربر"
#~ msgid "Log Out..."
#~ msgstr "خروج از سیستم..."

462
po/fi.po
View File

@@ -1,264 +1,370 @@
# Finnish translation of gnome-shell-extensions.
# Copyright (C) 2011 Ville-Pekka Vainio
# This file is distributed under the same license as the gnome-shell-extensions package.
# Gnome 2012-03 Finnish translation sprint participants:
# Jiri Grönroos
# Niklas Laxström
# Ville-Pekka Vainio
# Ville-Pekka Vainio <vpvainio@iki.fi>, 2011.
# Jiri Grönroos <jiri.gronroos@iki.fi>, 2012.
# Jiri Grönroos <jiri.gronroos@iki.fi>, 2012, 2013.
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-07 12:45+0200\n"
"PO-Revision-Date: 2012-01-05 20:37+0200\n"
"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
"Language-Team: Finnish <>\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=extensions\n"
"POT-Creation-Date: 2013-02-08 12:25+0000\n"
"PO-Revision-Date: 2013-03-20 23:54+0200\n"
"Last-Translator: Jiri Grönroos <jiri.gronroos+l10n@iki.fi>\n"
"Language-Team: Finnish <gnome-fi-laatu@lists.sourceforge.net>\n"
"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 1.4\n"
"X-Generator: Lokalize 1.5\n"
"X-Project-Style: gnome\n"
"X-POT-Import-Date: 2012-03-05 15:06:12+0000\n"
#: ../data/gnome-classic.desktop.in.h:1
#: ../data/gnome-classic.session.desktop.in.in.h:1
msgid "GNOME Classic"
msgstr "Perinteinen Gnome"
#: ../data/gnome-classic.desktop.in.h:2
msgid "This session logs you into GNOME Classic"
msgstr "Tämä istunto kirjaa sinut perinteiseen Gnomeen"
#: ../data/gnome-shell-classic.desktop.in.in.h:1
msgid "GNOME Shell Classic"
msgstr ""
#: ../data/gnome-shell-classic.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Ikkunoiden hallintaa ja sovellusten käynnistämistä"
#: ../extensions/alternate-tab/prefs.js:20
msgid "Thumbnail only"
msgstr "Pelkkä pienoiskuva"
#: ../extensions/alternate-tab/prefs.js:21
msgid "Application icon only"
msgstr "Pelkkä sovelluksen kuvake"
#: ../extensions/alternate-tab/prefs.js:22
msgid "Thumbnail and application icon"
msgstr ""
#: ../extensions/alternate-tab/prefs.js:37
msgid "Present windows as"
msgstr ""
#: ../extensions/alternate-tab/prefs.js:62
msgid "Show only windows in the current workspace"
msgstr "Näytä vain nykyisessä työtilassa olevat ikkunat"
#. add the new entries
#: ../extensions/alternative-status-menu/extension.js:68
#: ../extensions/alternative-status-menu/extension.js:144
msgid "Suspend"
msgstr "Valmiustila"
#: ../extensions/alternative-status-menu/extension.js:73
#: ../extensions/alternative-status-menu/extension.js:147
msgid "Hibernate"
msgstr "Lepotila"
#: ../extensions/alternative-status-menu/extension.js:78
msgid "Power Off..."
msgstr "Sammuta"
#: ../extensions/alternative-status-menu/extension.js:150
msgid "Power Off"
msgstr "Sammuta"
#: ../extensions/alternate-tab/extension.js:54
msgid ""
"This is the first time you use the Alternate Tab extension. \n"
"Please choose your preferred behaviour:\n"
"\n"
"All & Thumbnails:\n"
" This mode presents all applications from all workspaces in one "
"selection \n"
" list. Instead of using the application icon of every window, it uses "
"small \n"
" thumbnails resembling the window itself. \n"
"\n"
"Workspace & Icons:\n"
" This mode let's you switch between the applications of your current \n"
" workspace and gives you additionally the option to switch to the last "
"used \n"
" application of your previous workspace. This is always the last symbol "
"in \n"
" the list and is segregated by a separator/vertical line if available. \n"
" Every window is represented by its application icon. \n"
"\n"
"If you whish to revert to the default behavior for the Alt-Tab switcher, "
"just\n"
"disable the extension from extensions.gnome.org or the Advanced Settings "
"application."
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1
msgid "Enable suspending"
msgstr ""
#: ../extensions/alternate-tab/extension.js:295
msgid "Alt Tab Behaviour"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2
msgid "Control the visibility of the Suspend menu item"
msgstr ""
#: ../extensions/alternate-tab/extension.js:311
msgid "All & Thumbnails"
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3
msgid "Enable hibernating"
msgstr ""
#: ../extensions/alternate-tab/extension.js:318
msgid "Workspace & Icons"
msgstr "Työtila ja kuvakkeet"
#: ../extensions/alternate-tab/extension.js:325
msgid "Cancel"
msgstr "Peru"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
msgid "Ask the user for a default behaviour if true."
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4
msgid "Control the visibility of the Hibernate menu item"
msgstr ""
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
msgid "Indicates if Alternate Tab is newly installed"
msgstr ""
#: ../extensions/apps-menu/extension.js:50
msgid "Activities Overview"
msgstr "Yleisnäkymä"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:3
msgid ""
"Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and "
"workspace_icons."
msgstr ""
#: ../extensions/apps-menu/extension.js:103
#| msgid "Add to Favorites"
msgid "Favorites"
msgstr "Suosikit"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
msgid "The alt tab behaviour."
msgstr ""
#: ../extensions/apps-menu/extension.js:197
#| msgid "Application"
msgid "Applications"
msgstr "Sovellukset"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid "Application and workspace list"
msgstr ""
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
msgstr ""
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid "Application and workspace list"
#: ../extensions/auto-move-windows/prefs.js:55
msgid "Application"
msgstr "Sovellus"
#: ../extensions/auto-move-windows/prefs.js:64
#: ../extensions/auto-move-windows/prefs.js:106
msgid "Workspace"
msgstr "Työtila"
#: ../extensions/auto-move-windows/prefs.js:80
msgid "Add rule"
msgstr "Lisää sääntö"
#: ../extensions/auto-move-windows/prefs.js:94
msgid "Create new matching rule"
msgstr "Luo uusi vastaava sääntö"
#: ../extensions/auto-move-windows/prefs.js:98
msgid "Add"
msgstr "Lisää"
#: ../extensions/drive-menu/extension.js:72
#, c-format
msgid "Ejecting drive '%s' failed:"
msgstr ""
#: ../extensions/dock/extension.js:561
msgid "Drag here to add favorites"
msgstr "Raahaa tähän lisätäksesi suosikkeihin"
#: ../extensions/drive-menu/extension.js:89
msgid "Removable devices"
msgstr "Erilliset tallennusvälineet"
#: ../extensions/dock/extension.js:896
msgid "New Window"
msgstr "Uusi ikkuna"
#: ../extensions/drive-menu/extension.js:106
#| msgid "Open file manager"
msgid "Open File"
msgstr "Avaa tiedosto"
#: ../extensions/dock/extension.js:898
msgid "Quit Application"
msgstr "Lopeta ohjelma"
#: ../extensions/dock/extension.js:903
msgid "Remove from Favorites"
msgstr "Poista suosikeista"
#: ../extensions/dock/extension.js:904
msgid "Add to Favorites"
msgstr "Lisää suosikkeihin"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
msgid "Autohide duration"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
msgid "Autohide effect"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
msgid "Enable/disable autohide"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
msgid "Icon size"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
msgid "Position of the dock"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
msgid "Sets icon size of the dock."
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
msgid ""
"Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' and "
"'move'"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
msgid ""
"Sets the position of the dock in the screen. Allowed values are 'right' or "
"'left'"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
msgid "Sets the time duration of the autohide effect."
msgstr ""
#: ../extensions/drive-menu/extension.js:69
msgid "Open file manager"
msgstr ""
#: ../extensions/example/extension.js:11
#: ../extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "Hei, maailma!"
#: ../extensions/gajim/extension.js:227
#, c-format
msgid "%s is away."
msgstr "%s on poissa."
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1
msgid "Alternative greeting text."
msgstr "Vaihtoehtoinen tervehdysteksti."
#: ../extensions/gajim/extension.js:230
#, c-format
msgid "%s is offline."
msgstr "%s on poissa linjoilta."
#: ../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/gajim/extension.js:233
#, c-format
msgid "%s is online."
msgstr "%s on linjoilla."
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: ../extensions/example/prefs.js:30
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 ""
#: ../extensions/gajim/extension.js:236
#, c-format
msgid "%s is busy."
msgstr "%s on kiireinen."
#: ../extensions/example/prefs.js:36
msgid "Message:"
msgstr "Viesti:"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
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."
msgid "Use more screen for windows"
msgstr ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
msgid "Place window captions on top"
msgstr ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
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 ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
msgid "Use more screen for windows"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid "Place window captions on top"
msgstr ""
#: ../extensions/places-menu/extension.js:36
msgid "Removable Devices"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
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 ""
#: ../extensions/places-menu/extension.js:57
msgid "Places"
msgstr "Sijainnit"
#: ../extensions/places-menu/placeDisplay.js:48
#, c-format
msgid "Failed to launch \"%s\""
msgstr "Kohteen \"%s\" käynnistys epäonnistui"
#: ../extensions/places-menu/placeDisplay.js:121
msgid "Home"
msgstr "Koti"
#: ../extensions/places-menu/placeDisplay.js:195
msgid "Computer"
msgstr "Tietokone"
#: ../extensions/places-menu/placeDisplay.js:199
#| msgid "Browse network"
msgid "Browse Network"
msgstr "Selaa verkkoa"
#: ../extensions/systemMonitor/extension.js:213
msgid "CPU"
msgstr "Suoritin"
#: ../extensions/systemMonitor/extension.js:266
msgid "Memory"
msgstr "Muisti"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "Teeman nimi, ladataan sijainnista ~/.themes/name/gnome-shell"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "Theme name"
msgstr "Teeman nimi"
#: ../extensions/xrandr-indicator/extension.js:26
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "Teeman nimi, ladataan sijainnista ~/.themes/name/gnome-shell"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:1
msgid "When to group windows"
msgstr "Milloin ikkunat ryhmitetään"
#: ../extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml.in.h:2
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are \"never\" and \"always\"."
msgstr ""
#: ../extensions/window-list/prefs.js:30
msgid "Window Grouping"
msgstr "Ikkunoiden ryhmitys"
#: ../extensions/window-list/prefs.js:49
msgid "Never group windows"
msgstr "Älä ryhmitä ikkunoita koskaan"
#: ../extensions/window-list/prefs.js:50
msgid "Always group windows"
msgstr "Ryhmitä ikkunat aina"
#: ../extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Työtilan ilmaisin"
#: ../extensions/workspace-indicator/prefs.js:141
msgid "Workspace names:"
msgstr "Työtilojen nimet:"
#: ../extensions/workspace-indicator/prefs.js:152
msgid "Name"
msgstr "Nimi"
#: ../extensions/workspace-indicator/prefs.js:186
#, c-format
msgid "Workspace %d"
msgstr "Työtila %d"
#: ../extensions/xrandr-indicator/extension.js:30
msgid "Normal"
msgstr "Tavallinen"
#: ../extensions/xrandr-indicator/extension.js:27
#: ../extensions/xrandr-indicator/extension.js:31
msgid "Left"
msgstr "Vasen"
#: ../extensions/xrandr-indicator/extension.js:28
#: ../extensions/xrandr-indicator/extension.js:32
msgid "Right"
msgstr "Oikea"
#: ../extensions/xrandr-indicator/extension.js:29
#: ../extensions/xrandr-indicator/extension.js:33
msgid "Upside-down"
msgstr "Ylösalaisin"
#: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..."
msgstr "Määritä näytön asetukset…"
#: ../extensions/xrandr-indicator/extension.js:50
msgid "Display"
msgstr "Näyttö"
#~ msgid "Notifications"
#~ msgstr "Ilmoitukset"
#: ../extensions/xrandr-indicator/extension.js:80
msgid "Display Settings"
msgstr "Näytön asetukset"
#~ msgid "Online Accounts"
#~ msgstr "Verkkotilit"
#~ msgid "Drag here to add favorites"
#~ msgstr "Raahaa tähän lisätäksesi suosikkeihin"
#~ msgid "System Settings"
#~ msgstr "Järjestelmän asetukset"
#~ msgid "New Window"
#~ msgstr "Uusi ikkuna"
#~ msgid "Lock Screen"
#~ msgstr "Lukitse näyttö"
#~ msgid "Quit Application"
#~ msgstr "Lopeta ohjelma"
#~ msgid "Switch User"
#~ msgstr "Vaihda käyttäjää"
#~ msgid "Remove from Favorites"
#~ msgstr "Poista suosikeista"
#~ msgid "Log Out..."
#~ msgstr "Kirjaudu ulos…"
#~ msgid "Position of the dock"
#~ msgstr "Telakan sijainti"
#~ msgid ""
#~ "Sets the position of the dock in the screen. Allowed values are 'right' "
#~ "or 'left'"
#~ msgstr ""
#~ "Asettaa telakan sijainnin näytöllä. Sallitut arvot ovat 'right' tai 'left'"
#~ msgid "Icon size"
#~ msgstr "Kuvakkeiden koko"
#~ msgid "Sets icon size of the dock."
#~ msgstr "Asettaa telakan kuvakkeiden koon."
#~ msgid "Enable/disable autohide"
#~ msgstr "Automaattinen piilotus päälle/pois"
#~ msgid "Autohide effect"
#~ msgstr "Automaattisen piilotuksen tehoste"
#~ msgid "Autohide duration"
#~ msgstr "Automaattisen piilotuksen kesto"
#~ msgid "Monitor"
#~ msgstr "Näyttö"
#~ msgid "%s is away."
#~ msgstr "%s on poissa."
#~ msgid "%s is offline."
#~ msgstr "%s on poissa linjoilta."
#~ msgid "%s is online."
#~ msgstr "%s on linjoilla."
#~ msgid "%s is busy."
#~ msgstr "%s on kiireinen."
#~ msgid "Devices"
#~ msgstr "Laitteet"
#~ msgid "Bookmarks"
#~ msgstr "Kirjanmerkit"
#~ msgid "Network"
#~ msgstr "Verkko"
#~ msgid "File System"
#~ msgstr "Tiedostojärjestelmä"
#~ msgid "The alt tab behaviour."
#~ msgstr "Alt+tab-näppäinyhdistelmän toiminta."
#~ msgid "Workspace & Icons"
#~ msgstr "Työtila ja kuvakkeet"

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