Compare commits

..

36 Commits
3.0.2 ... 3.1.3

Author SHA1 Message Date
Giovanni Campagna
de173d0e1c Bump version to 3.1.3
To go with recently released GNOME Shell 3.1.3
Fixed gjs version and distcheck at the same time
2011-07-02 14:23:09 +02:00
Giovanni Campagna
939994d07d dock: fix showing in overview with gnome-shell master
Chrome module no longer updates the visibility of objects when
the overview is shown or hidden, so we need to do it ourselves.
2011-06-30 21:52:18 +02:00
Gabor Kelemen
18912db64e Added Hungarian translation 2011-06-07 23:09:50 +02:00
Gabor Kelemen
d5366cb800 Added hu to LINGUAS 2011-06-07 23:09:35 +02:00
Yuri Myasoedov
da89fe53fb Updated Russian translation 2011-06-05 15:01:52 +04:00
Nguyễn Thái Ngọc Duy
31ee462a0b Updated Vietnamese translation 2011-06-04 14:00:06 +07:00
A S Alam
4d8af00bba added Punjabi Translation and update LINGUAS file for locale 2011-06-03 08:19:15 +05:30
Vamsi Krishna Brahmajosyula
bdbf44805d New Extension: applications menu on the panel 2011-05-31 22:03:34 +02:00
Giovanni Campagna
47b478df60 Revert "Add 3.0 to user-theme"
This reverts commit 60bc404d95.

master branch is for master gnome-shell, which is 3.0.1 and unstable.
gnome-3-0 branch is for stable shell, and has 3.0 for everything
which is supported by shell developers.
Next time, please ask me before committing.
2011-05-31 20:25:19 +02:00
John Stowers
60bc404d95 Add 3.0 to user-theme 2011-05-31 14:10:11 +12:00
Martin Dengler
72583b1bf6 fix undeclared file variable in user-theme/extension.js
Eliminates the warning message about assigning to an undeclared
variable when User Theme extension is used. Fixes BZ #651374.
2011-05-31 14:09:16 +12:00
Giovanni Campagna
63dd27c4f5 drive-menu: rework to use PlacesManager from the Shell
Rewrite to use similar code to that used by places-menu, and the
mounts shown by searching in the overview.
Should fix the issue in bug #650076 that prevented remounting the
drives after ejecting, and should be compatible with what Nautilus
does by default.
2011-05-23 23:25:02 +02:00
Marc Alcalà
41d9b71b26 Allow dock allows multiple positions in screen
Use GSettings to store configuration and make the dock position
customizabile. Currently, supported are left and right of the
primary monitor; more could be added in the future.

(Commit message edited by Giovanni Campagna)

https://bugzilla.gnome.org/show_bug.cgi?id=647394

Signed-off-by: Giovanni Campagna <gcampagna@src.gnome.org>
2011-05-23 22:42:07 +02:00
Arash Mousavi
93dbe4cb6b Added Persian translation 2011-05-23 22:38:48 +04:30
Giovanni Campagna
212bf6c70c Add NEWS file, and update gnome-shell-extensions.doap
Necessary for releasing tarballs.
2011-05-21 16:17:15 +02:00
Yaron Shahrabani
251b1cc935 Updated Hebrew translation. 2011-05-13 13:19:59 +03:00
Yaron Shahrabani
ed5bb6cf9a Updated Hebrew translation. 2011-05-13 13:18:59 +03:00
Yaron Shahrabani
40ca668f0c Added he to the LINGUAS 2011-05-13 13:17:07 +03:00
Giovanni Campagna
03660f45b1 drive-menu: do nothing if the drive is has no volume
If the drive is not partitioned, or the volume has not appeared yet,
return early from activate, to avoid an exception.
2011-05-12 19:40:52 +02:00
Giovanni Campagna
1a00ee38fe native-window-placement: make placement strategy a setting
Now it is possible to use GSettings to configure the placement
strategy (natural KDE-like or default grid) and whether to consolidate
the windows more tigthly, as well as the position of the window
captions.
2011-05-12 19:35:55 +02:00
Giovanni Campagna
190f722fe6 Update README
Add the new extensions that were left out.
2011-05-12 18:59:40 +02:00
Giovanni Campagna
2d1e3560b3 native-window-placement: update coding style and indentation
Mostly a whitespace patch, plus the removal of some commented out
code.
2011-05-12 18:58:30 +02:00
Giovanni Campagna
f24365520c New extension: native-window-placement
This extension employs an algorithm (taken from KDE) for layouting
the thumbnails in the overview that more closely reflects the positions
and relative sizes of the actual windows, instead of using a fixed
grid.
2011-05-12 18:42:53 +02:00
Giovanni Campagna
bfd107cef0 xrandr-indicator: require the right gjs version
xrandr-indicator makes the whole shell crash if the right gjs
features are missing, but instead of asking not to install it, we
can use gjs versioning.
2011-05-12 18:32:06 +02:00
Giovanni Campagna
eae099f97c Rework how external packages are pulled in
Now if a required external package cannot be found, it doesn't fail
and instead prints a warning. This is to allow building with
--enable-extensions=all without the required libraries.
Also bump required libgtop version to the one with the typelib.
2011-05-12 18:28:48 +02:00
Giovanni Campagna
3281a10031 Rework how default extensions are chosen
Now we enable by default only extensions that are unlikely to
conflict much with the shell experience (so no alternate-tab, no
auto-move-windows, etc.) and require no GSettings or external
packages.
2011-05-12 18:06:32 +02:00
Maxim Ermilov
30273d09df systemMonitor: new extension
https://bugzilla.gnome.org/show_bug.cgi?id=634080
2011-05-11 00:42:37 +04:00
Giovanni Campagna
b20cba35a8 places-menu: don't show "removable drives" if none is attached
Having an empty submenu is weird, it's better to hide it completely
in that case.
Plus a bunch of whitespace fixes.
2011-05-04 16:29:22 +02:00
Vamsi Krishna Brahmajosyula
a78e42e4fc New Extension: Places Menu Status Indicator
Signed-off-by: Vamsi Krishna Brahmajosyula <vamsikrishna.brahmajosyula@gmail.com>

https://bugzilla.gnome.org/show_bug.cgi?id=648724
2011-05-04 16:10:32 +02:00
Giovanni Campagna
5b212bd1fd Add COPYING
License file for GNU General Public Licence v2
2011-05-03 18:36:10 +02:00
Elad Alfassa
268fd462ac Support globally installed themes
If a theme cannot be found in the user directory, try in system
data dirs (XDG_DATA_DIRS, usually /usr/share and /usr/local/share)

Signed-off-by: Giovanni Campagna <gcampagna@src.gnome.org>
2011-05-02 18:31:19 +02:00
Giovanni Campagna
d942e255f7 user-theme: fix resetting theme to null
Previously null stylesheets were ignored, making it impossible to
reset the default. We still need to filter out invalid (non existing)
stylesheets, as no check is performed by shell code.
2011-05-02 18:07:39 +02:00
Giovanni Campagna
f016b95f77 Update Italian translation 2011-04-26 15:35:56 +02:00
Giovanni Campagna
6756ad4630 StatusMenu: update to latest GNOME Shell API
The hook to access the status menu was changed in panel.js. Also
replace the alternating menu item with two separate menu items (which
side-steps bug 643631) and use own translations instead of those
provided by gnome-shell (so Hibernate is translated)
2011-04-26 15:35:44 +02:00
Giovanni Campagna
2df002955e New extension: Removable Drive Menu
Adds a menu in the system status area that tracks removable disk devices
attached and offers to browse them and eject/unmount them.

https://bugzilla.gnome.org/show_bug.cgi?id=647027
2011-04-26 01:21:53 +02:00
Giovanni Campagna
0ce994ba46 Revert "Mark extensions that require only public API"
This reverts commit 6cd9530862, and
reopens development againts GNOME Shell master. Time for 3.2!
2011-04-26 01:17:23 +02:00
49 changed files with 2160 additions and 119 deletions

16
NEWS Normal file
View File

@@ -0,0 +1,16 @@
3.1.1 (unreleased)
==================
* New extensions: drive-menu, places-menu, native-window-placement,
systemMonitor
* Dock position is configurable
* Compatibility with released Shell was broken, API usage
was updated
3.0.2
=====
* Updated translations.
* Fixed bug #647386 (reverting of user-theme to default)
* Fixed bug #647599 (support globally installed themes)
* Added license and README

21
README
View File

@@ -30,6 +30,10 @@ alternative-status-menu
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.
auto-move-windows
Lets you manage your workspaces more easily, assigning a specific workspace to
@@ -40,6 +44,10 @@ dock
Shows a dock-style task switcher on the right side of the screen.
drive-menu
Shows a status menu for rapid unmount and power off of external storage devices
(i.e. pendrives)
example
A minimal example illustrating how to write extensions.
@@ -48,6 +56,19 @@ gajim
Integration with Gajim, a Jabber/XMPP instant messaging client.
native-window-placement
An alternative algorithm for layouting the thumbnails in the windows overview, that
more closely reflects the actual positions and sizes.
places-menu
Shows a status Indicator for navigating to Places.
systemMonitor
An message tray indicator showing CPU and memory loads.
user-theme
Loads a shell theme from ~/.themes/<name>/gnome-shell.

View File

@@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell-extensions],[3.0.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&component=extensions])
AC_INIT([gnome-shell-extensions],[3.1.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&component=extensions])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_AUX_DIR([config])
@@ -18,11 +18,13 @@ PKG_PROG_PKG_CONFIG([0.22])
GLIB_GSETTINGS
ADDITIONAL_PACKAGES=
dnl keep this in sync with extensions/Makefile.am
ALL_EXTENSIONS="example alternate-tab xrandr-indicator windowsNavigator auto-move-windows dock user-theme alternative-status-menu gajim"
DEFAULT_EXTENSIONS="alternate-tab windowsNavigator dock alternative-status-menu"
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"
ALL_EXTENSIONS="$DEFAULT_EXTENSIONS alternate-tab auto-move-windows example native-window-placement systemMonitor user-theme xrandr-indicator"
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.
@@ -34,15 +36,21 @@ if test x$enable_extensions = xall; then
enable_extensions="$ALL_EXTENSIONS"
fi
ADDITIONAL_PACKAGES=
ENABLED_EXTENSIONS=
for e in $enable_extensions; do
case $e in
xrandr-indicator)
ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e"
ADDITIONAL_PACKAGES="$ADDITIONAL_PAGKAGES gnome-desktop-3.0 >= 2.91.6"
systemMonitor)
PKG_CHECK_MODULES(GTOP, libgtop-2.0 >= 2.28.4,
[ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e"],
[AC_MSG_WARN([libgtop-2.0 not found, disabling systemMonitor])])
;;
alternate-tab|example|windowsNavigator|auto-move-windows|dock|user-theme|alternative-status-menu|gajim)
xrandr-indicator)
PKG_CHECK_MODULES(GNOME_DESKTOP, gnome-desktop-3.0 >= 2.91.6,
[ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e"],
[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)
ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e"
;;
*)
@@ -52,22 +60,20 @@ done
AC_SUBST(ENABLED_EXTENSIONS, [$ENABLED_EXTENSIONS])
dnl We don't really need cflags or libdirs, we just check
dnl to ensure we don't fail at runtime.
if test "x$ADDITIONAL_PACKAGES" != x; then
PKG_CHECK_MODULES(ADDITIONAL, [$ADDITIONAL_PACKAGES])
fi
dnl Please keep this sorted alphabetically
AC_CONFIG_FILES([
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/systemMonitor/Makefile
extensions/windowsNavigator/Makefile
extensions/gajim/Makefile
extensions/native-window-placement/Makefile
extensions/places-menu/Makefile
extensions/xrandr-indicator/Makefile
extensions/user-theme/Makefile
extensions/Makefile

View File

@@ -1,3 +1,3 @@
DIST_SUBDIRS = example alternate-tab xrandr-indicator windowsNavigator auto-move-windows dock user-theme alternative-status-menu gajim
DIST_SUBDIRS = $(ALL_EXTENSIONS)
SUBDIRS = $(ENABLED_EXTENSIONS)

View File

@@ -3,7 +3,7 @@
"name": "AlternateTab",
"description": "A replacement for Alt-Tab, allows to cycle between windows and does not group by application",
"original-author": "thomas.bouffon@gmail.com",
"shell-version": [ "3.0" ],
"shell-version": [ "@shell_current@" ],
"localedir": "@LOCALEDIR@",
"url": "@url@"
}

View File

@@ -2,48 +2,35 @@
const Lang = imports.lang;
const St = imports.gi.St;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
const GnomeSession = imports.misc.gnomeSession;
const Gettext = imports.gettext.domain('gnome-shell');
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
function updateSuspendOrHibernate(object, pspec, item) {
let canSuspend = this._upClient.get_can_suspend();
let canHibernate = this._upClient.get_can_hibernate();
if (!canSuspend && !canHibernate) {
item.actor.hide();
return;
} else
item.actor.show();
if (!canSuspend && canHibernate) {
item.updateText(_("Hibernate"), null);
return;
}
let suspendText = _("Suspend");
let hibernateText = canHibernate ? _("Hibernate") : null;
item.updateText(suspendText, hibernateText);
function updateSuspend(object, pspec, item) {
item.actor.visible = object.get_can_suspend();
}
function onSuspendOrHibernateActivate(item) {
function updateHibernate(object, pspec, item) {
item.actor.visible = object.get_can_hibernate();
}
function onSuspendActivate(item) {
Main.overview.hide();
let haveSuspend = this._upClient.get_can_suspend();
let haveHibernate = this._upClient.get_can_hibernate();
this._screenSaverProxy.LockRemote(Lang.bind(this, function() {
this._upClient.suspend_sync(null);
}));
}
if (haveSuspend &&
item.state == PopupMenu.PopupAlternatingMenuItemState.DEFAULT) {
this._screenSaverProxy.LockRemote(Lang.bind(this, function() {
this._upClient.suspend_sync(null);
}));
} else {
this._screenSaverProxy.LockRemote(Lang.bind(this, function() {
this._upClient.hibernate_sync(null);
}));
}
function onHibernateActivate(item) {
Main.overview.hide();
this._screenSaverProxy.LockRemote(Lang.bind(this, function() {
this._upClient.hibernate_sync(null);
}));
}
function createSubMenu() {
@@ -89,13 +76,17 @@ function createSubMenu() {
item = new PopupMenu.PopupSeparatorMenuItem();
this.menu.addMenuItem(item);
item = new PopupMenu.PopupAlternatingMenuItem(_("Suspend"),
_("Hibernate"));
item = new PopupMenu.PopupMenuItem(_("Suspend"));
item.connect('activate', Lang.bind(this, onSuspendActivate));
this._upClient.connect('notify::can-suspend', Lang.bind(this, updateSuspend, item));
updateSuspend(this._upClient, null, item);
this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("Hibernate"));
item.connect('activate', Lang.bind(this, onHibernateActivate));
this._upClient.connect('notify::can-hibernate', Lang.bind(this, updateHibernate, item));
updateHibernate(this._upClient, null, item);
this.menu.addMenuItem(item);
item.connect('activate', Lang.bind(this, onSuspendOrHibernateActivate));
this._upClient.connect('notify::can-suspend', Lang.bind(this, updateSuspendOrHibernate, item));
this._upClient.connect('notify::can-hibernate', Lang.bind(this, updateSuspendOrHibernate, item));
updateSuspendOrHibernate.call(this, null, null, item);
item = new PopupMenu.PopupMenuItem(_("Power Off..."));
item.connect('activate', Lang.bind(this, function() {
@@ -106,7 +97,9 @@ function createSubMenu() {
// Put your extension initialization code here
function main(metadata) {
let statusMenu = Main.panel._statusmenu;
imports.gettext.bindtextdomain('gnome-shell-extensions', metadata.localedir);
let statusMenu = Main.panel._userMenu;
statusMenu.menu.removeAll();
createSubMenu.call(statusMenu);
}

View File

@@ -2,7 +2,7 @@
"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": [ "3.0" ],
"shell-version": [ "@shell_current@" ],
"localedir": "@LOCALEDIR@",
"url": "@url@"
}

View File

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

View File

@@ -0,0 +1,97 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const St = imports.gi.St;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
const PanelMenu = imports.ui.panelMenu;
const Shell = imports.gi.Shell;
const Lang = imports.lang;
const ICON_SIZE = 28;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
let appsys = Shell.AppSystem.get_default();
function AppMenuItem(appInfo,params) {
this._init(appInfo,params);
}
AppMenuItem.prototype = {
__proto__: PopupMenu.PopupBaseMenuItem.prototype,
_init: function (appInfo, params) {
PopupMenu.PopupBaseMenuItem.prototype._init.call(this, params);
let app = appsys.get_app(appInfo.get_id());
this.label = new St.Label({ text: appInfo.get_name() });
this.addActor(this.label);
this._icon = app.create_icon_texture(ICON_SIZE);
this.addActor(this._icon,{expand : false});
this._appInfo = appInfo;
},
_onButtonReleaseEvent: function (actor, event) {
let id = this._appInfo.get_id();
appsys.get_app(id).activate(-1);
this.activate(event);
}
};
function ApplicationsButton() {
this._init();
}
ApplicationsButton.prototype = {
__proto__: PanelMenu.SystemStatusButton.prototype,
_init: function() {
PanelMenu.SystemStatusButton.prototype._init.call(this, 'start-here');
this._display();
appsys.connect('installed-changed', Lang.bind(this,this.reDisplay));
},
reDisplay : function() {
this._clearAll();
this._display();
},
_clearAll : function() {
this.menu.removeAll();
},
_display : function() {
let id;
this.appItems = [];
this.categories = appsys.get_sections();
for ( id = 0; id < this.categories.length; id++) {
this.appItems[this.categories[id]] = new PopupMenu.PopupSubMenuMenuItem(this.categories[id]);
this.menu.addMenuItem(this.appItems[this.categories[id]]);
}
this._addSubMenuItems();
for ( id = 0; id < this.categories.length; id++) {
let item = this.appItems[this.categories[id]];
if(item.menu._getMenuItems().length == 0){
item.actor.hide();
}
}
},
_addSubMenuItems: function() {
let appInfos = appsys.get_flattened_apps().filter(function(app) {
return !app.get_is_nodisplay();
});
for (let appid = appInfos.length-1 ; appid >= 0; appid--) {
let appInfo = appInfos[appid];
let appItem = new AppMenuItem(appInfo);
this.appItems[appInfo.get_section()].menu.addMenuItem(appItem);
}
},
_onDestroy: function() {
this._clearAll();
}
};
function main(metadata) {
let 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);
}

View File

@@ -0,0 +1,8 @@
{
"uuid": "@uuid@",
"name": "Applications Menu",
"description": "Add a gnome 2.x style menu for applications",
"shell-version": [ "@shell_current@" ],
"localedir": "@LOCALEDIR@",
"url": "@url@"
}

View File

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

View File

@@ -2,7 +2,7 @@
"uuid": "@uuid@",
"name": "Auto Move Windows",
"description": "Move applications to specific workspaces when they create windows",
"shell-version": [ "3.0.0", "3.0.1", "3.0.2" ],
"shell-version": [ "@shell_current@" ],
"localedir": "@LOCALEDIR@",
"original-authors": [ "alessandro.crismani@gmail.com", "thomas.bouffon@gmail.com" ],
"url": "@url@"

View File

@@ -1,3 +1,14 @@
EXTENSION_ID = dock
include ../../extension.mk
gschemas_in = org.gnome.shell.extensions.dock.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

@@ -25,7 +25,19 @@ const AltTab = imports.ui.altTab;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const DOCKICON_SIZE = 48;
// Settings
const DOCK_SETTINGS_SCHEMA = 'org.gnome.shell.extensions.dock';
const DOCK_POSITION_KEY = 'position';
const DOCK_SIZE_KEY = 'size';
// Keep enums in sync with GSettings schemas
const PositionMode = {
LEFT: 0,
RIGHT: 1
};
let position = PositionMode.RIGHT;
let dockicon_size = 48;
const DND_RAISE_APP_TIMEOUT = 500;
function Dock() {
@@ -40,8 +52,16 @@ Dock.prototype = {
this._favorites = [];
// Load Settings
this._settings = new Gio.Settings({ schema: DOCK_SETTINGS_SCHEMA });
position = this._settings.get_enum(DOCK_POSITION_KEY);
dockicon_size = this._settings.get_int(DOCK_SIZE_KEY);
//global.log("POSITION: " + position);
//global.log("dockicon_size: " + dockicon_size);
this._spacing = 4;
this._item_size = DOCKICON_SIZE;
this._item_size = dockicon_size;
this.actor = new St.BoxLayout({ name: 'dock', vertical: true, reactive: true });
@@ -62,7 +82,13 @@ Dock.prototype = {
AppFavorites.getAppFavorites().connect('changed', Lang.bind(this, this._queueRedisplay));
this._tracker.connect('app-state-changed', Lang.bind(this, this._queueRedisplay));
Main.chrome.addActor(this.actor, { visibleInOverview: false });
Main.overview.connect('showing', Lang.bind(this, function() {
this.actor.hide();
}));
Main.overview.connect('hidden', Lang.bind(this, function() {
this.actor.show();
}));
Main.chrome.addActor(this.actor);
this.actor.lower_bottom();
},
@@ -119,8 +145,18 @@ Dock.prototype = {
let primary = global.get_primary_monitor();
let height = (icons)*(this._item_size + this._spacing) + 2*this._spacing;
this.actor.set_size(this._item_size + 4*this._spacing, height);
this.actor.set_position(primary.width-this._item_size-this._spacing-2, (primary.height-height)/2);
let width = (icons)*(this._item_size + this._spacing) + 2*this._spacing;
switch (position) {
case PositionMode.LEFT:
this.actor.set_size(this._item_size + 4*this._spacing, height);
this.actor.set_position(0-this._spacing-4, (primary.height-height)/2);
break;
case PositionMode.RIGHT:
default:
this.actor.set_size(this._item_size + 4*this._spacing, height);
this.actor.set_position(primary.width-this._item_size-this._spacing-2, (primary.height-height)/2);
}
},
_getPreferredWidth: function (grid, forHeight, alloc) {
@@ -141,6 +177,8 @@ Dock.prototype = {
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++) {
@@ -191,9 +229,9 @@ DockIcon.prototype = {
x_fill: true,
y_fill: true });
this.actor._delegate = this;
this.actor.set_size(DOCKICON_SIZE, DOCKICON_SIZE);
this.actor.set_size(dockicon_size, dockicon_size);
this._icon = this.app.create_icon_texture(DOCKICON_SIZE);
this._icon = this.app.create_icon_texture(dockicon_size);
this.actor.set_child(this._icon);
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
@@ -371,7 +409,14 @@ DockIconMenu.prototype = {
__proto__: AppDisplay.AppIconMenu.prototype,
_init: function(source) {
PopupMenu.PopupMenu.prototype._init.call(this, source.actor, St.Align.MIDDLE, St.Side.RIGHT, 0);
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;

View File

@@ -3,7 +3,7 @@
"name": "Dock",
"description": "A dock for the GNOME Shell -- displays favorite and running applications",
"original-author": "tclaesson@gmail.com",
"shell-version": [ "3.0" ],
"shell-version": [ "@shell_current@" ],
"localedir": "@LOCALEDIR@",
"url": "@url@"
}

View File

@@ -0,0 +1,19 @@
<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>
<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>
</schema>
</schemalist>

View File

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

View File

@@ -0,0 +1,98 @@
// Drive menu extension
const Gio = imports.gi.Gio;
const Lang = imports.lang;
const St = imports.gi.St;
const Shell = imports.gi.Shell;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const Main = imports.ui.main;
const Panel = imports.ui.panel;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
function DriveMenuItem(place) {
this._init(place);
}
DriveMenuItem.prototype = {
__proto__: PopupMenu.PopupBaseMenuItem.prototype,
_init: function(place) {
PopupMenu.PopupBaseMenuItem.prototype._init.call(this);
this.place = place;
this.label = new St.Label({ text: place.name });
this.addActor(this.label);
let ejectIcon = new St.Icon({ icon_name: 'media-eject',
icon_type: St.IconType.SYMBOLIC,
style_class: 'popup-menu-icon ' });
let ejectButton = new St.Button({ child: ejectIcon });
ejectButton.connect('clicked', Lang.bind(this, this._eject));
this.addActor(ejectButton);
},
_eject: function() {
this.place.remove();
},
activate: function(event) {
this.place.launch({ timestamp: event.get_time() });
PopupMenu.PopupBaseMenuItem.prototype.activate.call(this, event);
}
};
function DriveMenu() {
this._init();
}
DriveMenu.prototype = {
__proto__: PanelMenu.SystemStatusButton.prototype,
_init: function() {
// is 'media-eject' better?
PanelMenu.SystemStatusButton.prototype._init.call(this, 'media-optical');
this._manager = Main.placesManager;
this._manager.connect('mounts-updated', Lang.bind(this, this._update));
this._contentSection = new PopupMenu.PopupMenuSection();
this.menu.addMenuItem(this._contentSection);
this._update();
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addAction(_("Open file manager"), function(event) {
let appSystem = Shell.AppSystem.get_default();
let app = appSystem.get_app('nautilus.desktop');
app.activate(-1);
});
},
_update: function() {
this._contentSection.removeAll();
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;
}
}
this.actor.visible = any;
},
}
// Put your extension initialization code here
function main(metadata) {
imports.gettext.bindtextdomain('gnome-shell-extensions', metadata.localedir);
Panel.STANDARD_TRAY_ICON_ORDER.unshift('drive-menu');
Panel.STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['drive-menu'] = DriveMenu;
}

View File

@@ -0,0 +1,8 @@
{
"uuid": "@uuid@",
"name": "Removable Drive Menu",
"description": "A status menu for accessing and unmounting removable devices",
"shell-version": [ "@shell_current@" ],
"localedir": "@LOCALEDIR@",
"url": "@url@"
}

View File

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

View File

@@ -2,7 +2,7 @@
"uuid": "@uuid@",
"name": "Hello, World!",
"description": "An example extension to show how it works. Shows Hello, world when clicking on the top panel.",
"shell-version": [ "3.0" ],
"shell-version": [ "@shell_current@" ],
"localedir": "@LOCALEDIR@",
"url": "@url@"
}

View File

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

View File

@@ -0,0 +1,14 @@
EXTENSION_ID = native-window-placement
include ../../extension.mk
gschemas_in = org.gnome.shell.extensions.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

@@ -0,0 +1,493 @@
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
// import just everything from workspace.js:
const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta;
const Pango = imports.gi.Pango;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Signals = imports.signals;
const DND = imports.ui.dnd;
const Lightbox = imports.ui.lightbox;
const Main = imports.ui.main;
const Overview = imports.ui.overview;
const Panel = imports.ui.panel;
const Tweener = imports.ui.tweener;
const Workspace = imports.ui.workspace;
const WindowPositionFlags = Workspace.WindowPositionFlags;
const WindowPlacementStrategy = {
NATURAL: 0,
GRID: 1,
};
// testing settings for natural window placement strategy:
const WINDOW_PLACEMENT_NATURAL_FILLGAPS = true; // enlarge windows at the end to fill gaps // not implemented yet
const WINDOW_PLACEMENT_NATURAL_GRID_FALLBACK = true; // fallback to grid mode if all windows have the same size and positions. // not implemented yet
const WINDOW_PLACEMENT_NATURAL_ACCURACY = 20; // accuracy of window translate moves (KDE-default: 20)
const WINDOW_PLACEMENT_NATURAL_GAPS = 5; // half of the minimum gap between windows
const WINDOW_PLACEMENT_NATURAL_MAX_TRANSLATIONS = 5000; // safety limit for preventing endless loop if something is wrong in the algorithm
const PLACE_WINDOW_CAPTIONS_ON_TOP = true; // place window titles in overview on top of windows with overlap parameter
function injectToFunction(parent, name, func) {
let origin = parent[name];
parent[name] = function() {
let ret;
ret = origin.apply(this, arguments);
if (ret === undefined)
ret = func.apply(this, arguments);
return ret;
}
}
function Rect(x, y, width, height) {
[this.x, this.y, this.width, this.height] = arguments;
}
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);
},
union: function(rect2) {
let dest = this.copy();
if (rect2.x < dest.x)
{
dest.width += dest.x - rect2.x;
dest.x = rect2.x;
}
if (rect2.y < dest.y)
{
dest.height += dest.y - rect2.y;
dest.y = rect2.y;
}
if (rect2.x + rect2.width > dest.x + dest.width)
dest.width = rect2.x + rect2.width - dest.x;
if (rect2.y + rect2.height > dest.y + dest.height)
dest.height = rect2.y + rect2.height - dest.y;
return dest;
},
adjusted: function(dx, dy, dx2, dy2) {
let dest = this.copy();
dest.x += dx;
dest.y += dy;
dest.width += -dx + dx2;
dest.height += -dy + dy2;
return dest;
},
overlap: function(rect2) {
return !((this.x + this.width <= rect2.x) ||
(rect2.x + rect2.width <= this.x) ||
(this.y + this.height <= rect2.y) ||
(rect2.y + rect2.height <= this.y));
},
center: function() {
return [this.x + this.width / 2, this.y + this.height / 2];
},
translate: function(dx, dy) {
this.x += dx;
this.y += dy;
}
};
// Put your extension initialization code here
function main() {
let settings = new Gio.Settings({ schema: 'org.gnome.shell.extensions.native-window-placement' });
let placementStrategy = settings.get_enum('strategy');
settings.connect('changed::strategy', function() {
placementStrategy = settings.get_enum('strategy');
// we don't update immediately, we wait for a relayout
// (and hope for the best)
});
let useMoreScreen = settings.get_boolean('use-more-screen');
settings.connect('changed::use-more-screen', function() {
useMoreScreen = settings.get_boolean('use-more-screen');
});
/**
* _calculateWindowTransformationsNatural:
* @clones: Array of #MetaWindow
*
* Returns clones with matching target coordinates and scales to arrange windows in a natural way that no overlap exists and relative window size is preserved.
* This function is almost a 1:1 copy of the function
* 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) {
// 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();
});
// 2 * 10 px gaps at the border
let area = new Rect(this._x + 10, this._y + 10, this._width - 20, this._height - 20);
let bounds = area.copy();
let direction = 0;
let directions = [];
let rects = [];
for (let i = 0; i < clones.length; i++) {
// save rectangles into 4-dimensional arrays representing two corners of the rectangular: [left_x, top_y, right_x, bottom_y]
let rect = clones[i].metaWindow.get_outer_rect();
rects[i] = new Rect(rect.x, rect.y, rect.width, rect.height);
bounds = bounds.union(rects[i]);
// This is used when the window is on the edge of the screen to try to use as much screen real estate as possible.
directions[i] = direction;
direction++;
if (direction == 4) {
direction = 0;
}
}
let loop_counter = 0;
let overlap;
do {
overlap = false;
for (let i = 0; i < rects.length; i++) {
for (let j = 0; j < rects.length; j++) {
if (i != j && rects[i].adjusted(-WINDOW_PLACEMENT_NATURAL_GAPS, -WINDOW_PLACEMENT_NATURAL_GAPS,
WINDOW_PLACEMENT_NATURAL_GAPS, WINDOW_PLACEMENT_NATURAL_GAPS).overlap(
rects[j].adjusted(-WINDOW_PLACEMENT_NATURAL_GAPS, -WINDOW_PLACEMENT_NATURAL_GAPS,
WINDOW_PLACEMENT_NATURAL_GAPS, WINDOW_PLACEMENT_NATURAL_GAPS))) {
loop_counter++;
overlap = true;
// TODO: something like a Point2D would be nicer here:
// Determine pushing direction
let i_center = rects[i].center();
let j_center = rects[j].center();
let diff = [j_center[0] - i_center[0], j_center[1] - i_center[1]];
// Prevent dividing by zero and non-movement
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 )
diff[0] *= 2;
else
diff[1] *= 2;
// Approximate a vector of between 10px and 20px in magnitude in the same direction
let length = Math.sqrt(diff[0] * diff[0] + diff[1] * diff[1]);
diff[0] = diff[0] * WINDOW_PLACEMENT_NATURAL_ACCURACY / length;
diff[1] = diff[1] * WINDOW_PLACEMENT_NATURAL_ACCURACY / length;
// Move both windows apart
rects[i].translate(-diff[0], -diff[1]);
rects[j].translate(diff[0], diff[1]);
if (useMoreScreen) {
// Try to keep the bounding rect the same aspect as the screen so that more
// screen real estate is utilised. We do this by splitting the screen into nine
// equal sections, if the window center is in any of the corner sections pull the
// window towards the outer corner. If it is in any of the other edge sections
// alternate between each corner on that edge. We don't want to determine it
// randomly as it will not produce consistant locations when using the filter.
// Only move one window so we don't cause large amounts of unnecessary zooming
// in some situations. We need to do this even when expanding later just in case
// all windows are the same size.
// (We are using an old bounding rect for this, hopefully it doesn't matter)
let xSection = Math.round((rects[i].x - bounds.x) / (bounds.width / 3));
let ySection = Math.round((rects[i].y - bounds.y) / (bounds.height / 3));
let i_center = rects[i].center();
diff[0] = 0;
diff[1] = 0;
if (xSection != 1 || ySection != 1) { // Remove this if you want the center to pull as well
if (xSection == 1)
xSection = (directions[i] / 2 ? 2 : 0);
if (ySection == 1)
ySection = (directions[i] % 2 ? 2 : 0);
}
if (xSection == 0 && ySection == 0) {
diff[0] = bounds.x - i_center[0];
diff[1] = bounds.y - i_center[1];
}
if (xSection == 2 && ySection == 0) {
diff[0] = bounds.x + bounds.width - i_center[0];
diff[1] = bounds.y - i_center[1];
}
if (xSection == 2 && ySection == 2) {
diff[0] = bounds.x + bounds.width - i_center[0];
diff[1] = bounds.y + bounds.height - i_center[1];
}
if (xSection == 0 && ySection == 2) {
diff[0] = bounds.x - i_center[0];
diff[1] = bounds.y + bounds.height - i_center[1];
}
if (diff[0] != 0 || diff[1] != 0) {
let length = Math.sqrt(diff[0]*diff[0] + diff[1]*diff[1]);
diff[0] *= WINDOW_PLACEMENT_NATURAL_ACCURACY / length / 2; // /2 to make it less influencing than the normal center-move above
diff[1] *= WINDOW_PLACEMENT_NATURAL_ACCURACY / length / 2;
rects[i].translate(diff[0], diff[1]);
}
}
// Update bounding rect
bounds = bounds.union(rects[i]);
bounds = bounds.union(rects[j]);
}
}
}
} while (overlap && loop_counter < WINDOW_PLACEMENT_NATURAL_MAX_TRANSLATIONS);
// Work out scaling by getting the most top-left and most bottom-right window coords.
// The 20's and 10's are so that the windows don't touch the edge of the screen.
// Most 20's and 10's are already calculated into area now.
let scale;
scale = Math.min(area.width / bounds.width,
area.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 - 10 / scale;
bounds.y = bounds.y - (area.height - bounds.height * scale) / 2 - 10 / scale;
bounds.width = area.width / scale;
bounds.height = area.height / scale;
// Move all windows back onto the screen and set their scale
for (let i = 0; i < rects.length; i++) {
rects[i].translate(-bounds.x, -bounds.y);
}
// TODO: Implement the KDE part "Try to fill the gaps by enlarging windows if they have the space" here. (If this is wanted)
// rescale to workspace
let scales = [];
let buttonOuterHeight, captionHeight;
let buttonOuterWidth = 0;
let targets = [];
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;
targets[i] = [rects[i].x, rects[i].y, scale];
}
return [clones, targets];
},
/**
* _calculateWindowTransformationsGrid:
* @clones: Array of #MetaWindow
*
* Returns clones with matching target coordinates and scales to arrange windows in a grid.
*/
Workspace.Workspace.prototype._calculateWindowTransformationsGrid = function(clones) {
let slots = this._computeAllWindowSlots(clones.length);
clones = this._orderWindowsByMotionAndStartup(clones, slots);
let targets = [];
for (let i = 0; i < clones.length; i++) {
targets[i] = this._computeWindowLayout(clones[i].metaWindow, slots[i]);
}
return [clones, targets];
}
/**
* positionWindows:
* @flags:
* INITIAL - this is the initial positioning of the windows.
* ANIMATE - Indicates that we need animate changing position.
*/
Workspace.Workspace.prototype.positionWindows = function(flags) {
if (this._repositionWindowsId > 0) {
Mainloop.source_remove(this._repositionWindowsId);
this._repositionWindowsId = 0;
}
let clones = this._windows.slice();
if (this._reservedSlot)
clones.push(this._reservedSlot);
let initialPositioning = flags & WindowPositionFlags.INITIAL;
let animate = flags & WindowPositionFlags.ANIMATE;
// Start the animations
let targets = [];
let scales = [];
switch (placementStrategy) {
case WindowPlacementStrategy.NATURAL:
[clones, targets] = this._calculateWindowTransformationsNatural(clones);
break;
default:
log ('Invalid window placement strategy');
placementStrategy = WindowPlacementStrategy.GRID;
case WindowPlacementStrategy.GRID:
[clones, targets] = this._calculateWindowTransformationsGrid(clones);
break;
}
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];
// 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;
if (overlay)
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;
}
// Make the window slightly transparent to indicate it's hidden
Tweener.addTween(clone.actor,
{ opacity: 255,
time: Overview.ANIMATION_TIME,
transition: 'easeInQuad'
});
}
Tweener.addTween(clone.actor,
{ x: x,
y: y,
scale_x: scale,
scale_y: scale,
time: Overview.ANIMATION_TIME,
transition: 'easeOutQuad',
onComplete: Lang.bind(this, function() {
this._showWindowOverlay(clone, overlay, true);
})
});
} else {
clone.actor.set_position(x, y);
clone.actor.set_scale(scale, scale);
this._showWindowOverlay(clone, overlay, isOnCurrentWorkspace);
}
}
}
/// position window titles on top of windows in overlay ////
if (settings.get_boolean('window-captions-on-top')) {
Workspace.WindowOverlay.prototype._init = function(windowClone, parentActor) {
let metaWindow = windowClone.metaWindow;
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();
},
Workspace.WindowOverlay.prototype.chromeHeights = function () {
return [Math.max( this.closeButton.height - this.closeButton._overlap, this.title.height - this.title._overlap),
0];
},
Workspace.WindowOverlay.prototype.updatePositions = function(cloneX, cloneY, cloneWidth, cloneHeight) {
let button = this.closeButton;
let title = this.title;
let buttonX;
let buttonY = cloneY - (button.height - button._overlap);
if (St.Widget.get_default_direction() == St.TextDirection.RTL)
buttonX = cloneX - (button.width - button._overlap);
else
buttonX = cloneX + (cloneWidth - button._overlap);
button.set_position(Math.floor(buttonX), Math.floor(buttonY));
if (!title.fullWidth)
title.fullWidth = title.width;
title.width = Math.min(title.fullWidth, cloneWidth);
let titleX = cloneX + (cloneWidth - title.width) / 2;
let titleY = cloneY - title.height + title._overlap;
title.set_position(Math.floor(titleX), Math.floor(titleY));
},
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 closeNode = this.closeButton.get_theme_node();
this.closeButton._overlap = closeNode.get_length('-shell-close-overlap');
this._parentActor.queue_relayout();
}
}
}

View File

@@ -0,0 +1,9 @@
{
"uuid": "@uuid@",
"name": "Native Window Placement",
"description": "Arrange windows in overview in a more native way",
"shell-version": [ "@shell_current@" ],
"localedir": "@LOCALEDIR@",
"url": "@url@",
"original-authors": [ "wepmaschda@gmx.de" ]
}

View File

@@ -0,0 +1,26 @@
<schemalist gettext-domain="gnome-shell-extensions">
<enum id="org.gnome.shell.extensions.native-window-placement.strategy">
<value nick="natural" value="0" />
<value nick="grid" value="1" />
</enum>
<schema id="org.gnome.shell.extensions.native-window-placement" path="/org/gnome/shell/extensions/native-window-placement/">
<key name="strategy" enum="org.gnome.shell.extensions.native-window-placement.strategy">
<default>'natural'</default>
<_summary>Window placement strategy</_summary>
<_description>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</_description>
</key>
<key name="use-more-screen" type="b">
<default>true</default>
<_summary>Use more screen for windows</_summary>
<_description>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.</_description>
</key>
<key name="window-captions-on-top" type="b">
<default>true</default>
<_summary>Place window captions on top</_summary>
<_description>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.</_description>
</key>
</schema>
</schemalist>

View File

@@ -0,0 +1,4 @@
.window-caption {
color: red;
-shell-caption-overlap: 10px;
}

View File

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

View File

@@ -0,0 +1,121 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const Gdk = imports.gi.Gdk;
const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Main = imports.ui.main;
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 PLACE_ICON_SIZE = 22;
function PlacesMenu() {
this._init.apply(this, arguments);
}
PlacesMenu.prototype = {
__proto__: PanelMenu.SystemStatusButton.prototype,
_init: function() {
PanelMenu.SystemStatusButton.prototype._init.call(this, 'folder');
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));
},
_redisplayBookmarks: function(){
this._clearBookmarks();
this._createBookmarks();
},
_redisplayDevices: function(){
this._clearDevices();
this._createDevices();
},
_createDefaultPlaces : function() {
this.defaultPlaces = Main.placesManager.getDefaultPlaces();
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();
});
}
},
_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 main(metadata) {
imports.gettext.bindtextdomain('gnome-shell-extensions', metadata.localedir);
Panel.STANDARD_TRAY_ICON_ORDER.unshift('places-menu');
Panel.STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['places-menu'] = PlacesMenu;
}

View File

@@ -0,0 +1,8 @@
{
"uuid": "@uuid@",
"name": "Places Status Indicator",
"description": "Add a systems status menu for quickly navigating places in the system",
"shell-version": [ "@shell_current@" ],
"localedir": "@LOCALEDIR@",
"url": "@url@"
}

View File

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

View File

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

View File

@@ -0,0 +1,133 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const Clutter = imports.gi.Clutter;
const GTop = imports.gi.GTop;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const St = imports.gi.St;
const Shell = imports.gi.Shell;
const Main = imports.ui.main;
function Indicator() {
this._init();
}
Indicator.prototype = {
_init: function() {
this._initValues();
this.actor = new St.DrawingArea({ style_class: "extension-systemMonitor-indicator-area",
reactive: true});
this.actor.connect('repaint', Lang.bind(this, this._draw));
this.actor.connect('button-press-event', function() {
let app = Shell.AppSystem.get_default().get_app("gnome-system-monitor.desktop");
app.open_new_window(-1);
});
Mainloop.timeout_add(250, Lang.bind(this, function () {
this._updateValues();
this.actor.queue_repaint();
return true;
}));
},
_initValues: function() {
},
_updateValues: function() {
},
_draw: function(area) {
let [width, height] = area.get_surface_size();
let themeNode = this.actor.get_theme_node();
let cr = area.get_context();
for (let i = this.values.length - 1; i >= 0; i--) {
let color = themeNode.get_color(this.values[i].color);
cr.moveTo(0, height);
let k;
for (k = 0; k < this.values[i].values.length; k++) {
cr.lineTo(k, (1 - this.values[i].values[k]) * height);
}
if (k > width)
this.values[i].values.shift();
cr.lineTo(k, height);
cr.lineTo(0, height);
cr.closePath();
Clutter.cairo_set_source_color(cr, color);
cr.fill();
}
}
};
function CpuIndicator() {
this._init();
}
CpuIndicator.prototype = {
__proto__: Indicator.prototype,
_initValues: function() {
this._prev = new GTop.glibtop_cpu;
GTop.glibtop_get_cpu(this._prev);
this.values = [];
this.values.push({color: "-cpu-user-color", values: []});
this.values.push({color: "-cpu-sys-color", values: []});
this.values.push({color: "-cpu-iowait-color", values: []});
},
_updateValues: function() {
let cpu = new GTop.glibtop_cpu;
let t = 0.0;
GTop.glibtop_get_cpu(cpu);
let total = cpu.total - this._prev.total;
let user = cpu.user - this._prev.user;
let sys = cpu.sys - this._prev.sys;
let iowait = cpu.iowait - this._prev.iowait;
t = user / total;
this.values[0].values.push(t);
t += sys / total;
this.values[1].values.push(t);
t += iowait / total;
this.values[2].values.push(t);
this._prev = cpu;
}
};
function MemoryIndicator() {
this._init();
}
MemoryIndicator.prototype = {
__proto__: Indicator.prototype,
_initValues: function() {
this.mem = new GTop.glibtop_mem;
this.values = [];
this.values.push({ color: "-mem-user-color", values: [] });
this.values.push({ color: "-mem-other-color", values: [] });
this.values.push({ color: "-mem-cached-color", values: [] });
},
_updateValues: function() {
GTop.glibtop_get_mem(this.mem);
let t = this.mem.user / this.mem.total;
this.values[0].values.push(t);
t += (this.mem.used - this.mem.user - this.mem.cached) / this.mem.total;
this.values[1].values.push(t);
t += this.mem.cached / this.mem.total;
this.values[2].values.push(t);
}
};
function main() {
let box = new St.BoxLayout({ style_class: 'extension-systemMonitor-container' });
box.add((new CpuIndicator()).actor);
box.add((new MemoryIndicator()).actor);
Main.messageTray.actor.add_actor(box);
}

View File

@@ -0,0 +1,9 @@
{
"shell-version": ["@shell_current@"],
"uuid": "@uuid@",
"localedir": "@LOCALEDIR@",
"original-author": "zaspire@rambler.ru",
"name": "SystemMonitor",
"description": "System Monitor",
"url": "@url@"
}

View File

@@ -0,0 +1,16 @@
.extension-systemMonitor-container {
spacing: 5px;
}
.extension-systemMonitor-indicator-area {
border: 1px solid #000;
width: 100px;
height: 34px;
-cpu-user-color: #f00;
-cpu-sys-color: #0f0;
-cpu-iowait-color: #00f;
-mem-user-color: #ff0;
-mem-cached-color: #0ff;
-mem-other-color: #111;
background-color: #fff;
}

View File

@@ -26,14 +26,14 @@ ThemeManager.prototype = {
if (_themeName) {
let _userCssStylesheet = GLib.get_home_dir() + '/.themes/' + _themeName + '/gnome-shell/gnome-shell.css';
file = Gio.file_new_for_path(_userCssStylesheet);
let file = Gio.file_new_for_path(_userCssStylesheet);
if (file.query_exists(null))
_stylesheet = _userCssStylesheet;
else {
let sysdirs = GLib.get_system_data_dirs();
for (let i = 0; i < sysdirs.length; i++) {
_userCssStylesheet = sysdirs[i] + '/themes/' + _themeName + '/gnome-shell/gnome-shell.css';
file = Gio.file_new_for_path(_userCssStylesheet);
let file = Gio.file_new_for_path(_userCssStylesheet);
if (file.query_exists(null)) {
_stylesheet = _userCssStylesheet;
break;

View File

@@ -2,7 +2,7 @@
"uuid": "@uuid@",
"name": "User Themes",
"description": "Load shell themes from user directory",
"shell-version": [ "3.0" ],
"shell-version": [ "@shell_current@" ],
"localedir": "@LOCALEDIR@",
"original-authors": [ "john.stowers@gmail.com" ],
"url": "@url@"

View File

@@ -1,5 +1,5 @@
{
"shell-version": ["3.0.0", "3.0.1", "3.0.2"],
"shell-version": ["@shell_current@"],
"uuid": "@uuid@",
"localedir": "@LOCALEDIR@",
"original-author": "zaspire@rambler.ru",

View File

@@ -2,7 +2,8 @@
"uuid": "@uuid@",
"name": "Monitor Status Indicator",
"description": "Add a systems status menu for rotating monitors (overrides what is currently provided by gnome-settings-daemon)",
"shell-version": [ "3.0" ],
"shell-version": [ "@shell_current@" ],
"js-version": [ "0.7.15", "1.29.1" ],
"localedir": "@LOCALEDIR@",
"url": "@url@"
}

View File

@@ -6,6 +6,13 @@
<name xml:lang="en">GNOME Shell Extensions</name>
<shortdesc xml:lang="en">Modify and extend GNOME Shell functionality and behavior</shortdesc>
<description xml:lang="en">
GNOME Shell Extensions is a collection of extensions providing
additional and optional functionality to GNOME Shell.
Most extensions can be installed by configuring --prefix=$HOME/.local,
and will be picked automatically at next login.
</description>
<bug-database rdf:resource="http://bugzilla.gnome.org/browse.cgi?product=gnome-shell&amp;component=extensions" />
<homepage rdf:resource="http://live.gnome.org/GnomeShell/Extenstions" />
<maintainer>

View File

@@ -2,14 +2,19 @@ cs
da
de
es
fa
fr
gl
he
hu
it
lv
nb
pa
pt
pt_BR
pl
ru
sl
sv
vi

View File

@@ -3,8 +3,10 @@ extensions/alternate-tab/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/example/extension.js
extensions/gajim/extension.js
extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in
extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in
extensions/windowsNavigator/extension.js
extensions/xrandr-indicator/extension.js

143
po/fa.po Normal file
View File

@@ -0,0 +1,143 @@
# Persian translation for gnome-shell-extensions.
# Copyright (C) 2011 Iranian Free Software Users Group (IFSUG.org) translation team.
# This file is distributed under the same license as the gnome-shell-extensions package.
# Arash Mousavi <mousavi.arash@gmail.com>, 2011.
#
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"
"Last-Translator: Arash Mousavi <mousavi.arash@gmail.com>\n"
"Language-Team: Persian <translate@ifsug.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Persian\n"
"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/alternative-status-menu/extension.js:26
#: ../extensions/alternative-status-menu/extension.js:92
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 "تنظیمات سیستم"
#: ../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
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
msgid "Drag here to add favorites"
msgstr "به اینجا بکشید تا به علاقه‌مندی‌ها اضافه شود"
#: ../extensions/dock/extension.js:417
msgid "New Window"
msgstr "پنجره جدید"
#: ../extensions/dock/extension.js:419
msgid "Quit Application"
msgstr "خروج از برنامه"
#: ../extensions/dock/extension.js:424
msgid "Remove from Favorites"
msgstr "حذف از علاقه‌مندی‌ها"
#: ../extensions/dock/extension.js:425
msgid "Add to Favorites"
msgstr "اضافه کردن به علاقه‌مندی‌ها"
#: ../extensions/example/extension.js:11
msgid "Hello, world!"
msgstr "سلام دنیا!"
#: ../extensions/gajim/extension.js:219
#, c-format
msgid "%s is away."
msgstr "%s غائب است."
#: ../extensions/gajim/extension.js:222
#, c-format
msgid "%s is offline."
msgstr "%s برون‌خط است."
#: ../extensions/gajim/extension.js:225
#, c-format
msgid "%s is online."
msgstr "%s برخط است."
#: ../extensions/gajim/extension.js:228
#, 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/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "Theme name"
msgstr "نام تم"
#: ../extensions/xrandr-indicator/extension.js:26
msgid "Normal"
msgstr "عادی"
#: ../extensions/xrandr-indicator/extension.js:27
msgid "Left"
msgstr "چپ"
#: ../extensions/xrandr-indicator/extension.js:28
msgid "Right"
msgstr "راست"
#: ../extensions/xrandr-indicator/extension.js:29
msgid "Upside-down"
msgstr "برعکس"
#: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..."
msgstr "پیکربندی تنظیمات نمایش..."

187
po/he.po Normal file
View File

@@ -0,0 +1,187 @@
# Hebrew translations for PACKAGE package.
# Copyright (C) 2011 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Yaron Shahrabani <sh.yaron@gmail.com>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-05-13 13:11+0300\n"
"PO-Revision-Date: 2011-05-13 13:15+0200\n"
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
"Language-Team: Hebrew <sh.yaron@gmail.com>\n"
"Language: he\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: Hebrew\n"
"X-Poedit-Country: ISRAEL\n"
"X-Poedit-SourceCharset: UTF-8\n"
#: ../extensions/alternative-status-menu/extension.js:39
msgid "Available"
msgstr "פנוי"
#: ../extensions/alternative-status-menu/extension.js:44
msgid "Busy"
msgstr "עסוק"
#: ../extensions/alternative-status-menu/extension.js:52
msgid "My Account"
msgstr "החשבון שלי"
#: ../extensions/alternative-status-menu/extension.js:56
msgid "System Settings"
msgstr "הגדרות המערכת"
#: ../extensions/alternative-status-menu/extension.js:63
msgid "Lock Screen"
msgstr "נעילת המסך"
#: ../extensions/alternative-status-menu/extension.js:67
msgid "Switch User"
msgstr "החלפת משתמש"
#: ../extensions/alternative-status-menu/extension.js:72
msgid "Log Out..."
msgstr "יציאה..."
#: ../extensions/alternative-status-menu/extension.js:79
msgid "Suspend"
msgstr "השהיה"
#: ../extensions/alternative-status-menu/extension.js:85
msgid "Hibernate"
msgstr "תרדמת"
#: ../extensions/alternative-status-menu/extension.js:91
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 ""
"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:116
msgid "Drag here to add favorites"
msgstr "יש לגרור לכאן כדי להוסיף למועדפים"
#: ../extensions/dock/extension.js:417
msgid "New Window"
msgstr "חלון חדש"
#: ../extensions/dock/extension.js:419
msgid "Quit Application"
msgstr "יציאה מהיישום"
#: ../extensions/dock/extension.js:424
msgid "Remove from Favorites"
msgstr "הסרה מהמועדפים"
#: ../extensions/dock/extension.js:425
msgid "Add to Favorites"
msgstr "הוספה למועדפים"
#: ../extensions/example/extension.js:11
msgid "Hello, world!"
msgstr "שלום, עולם!"
#: ../extensions/gajim/extension.js:219
#, c-format
msgid "%s is away."
msgstr "%s הופיע/ה כמרוחק/ת."
#: ../extensions/gajim/extension.js:222
#, c-format
msgid "%s is offline."
msgstr "%s התנתק/ה."
#: ../extensions/gajim/extension.js:225
#, c-format
msgid "%s is online."
msgstr "%s פנוי/ה."
#: ../extensions/gajim/extension.js:228
#, c-format
msgid "%s is busy."
msgstr "%s עסוק/ה."
#: ../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/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
msgid "Normal"
msgstr "רגיל"
#: ../extensions/xrandr-indicator/extension.js:27
msgid "Left"
msgstr "שמאל"
#: ../extensions/xrandr-indicator/extension.js:28
msgid "Right"
msgstr "ימין"
#: ../extensions/xrandr-indicator/extension.js:29
msgid "Upside-down"
msgstr "הפוך"
#: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..."
msgstr "הגדרת תצורת התצוגה..."

177
po/hu.po Normal file
View File

@@ -0,0 +1,177 @@
# Hungarian translation of
# Copyright (C) 2011. Free Software Foundation, Inc.
# This file is distributed under the same license as the gnome-shell-extensions package.
#
# Biró Balázs <arch.scar at gmail dot com>, 2011.
# Gabor Kelemen <kelemeng at gnome dot hu>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-07 22:45+0200\n"
"PO-Revision-Date: 2011-06-07 22:44+0200\n"
"Last-Translator: Gabor Kelemen <kelemeng at gnome dot hu>\n"
"Language-Team: Hungarian <gnome-hu-list at gnome dot org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../extensions/alternative-status-menu/extension.js:39
msgid "Available"
msgstr "Elérhető"
#: ../extensions/alternative-status-menu/extension.js:44
msgid "Busy"
msgstr "Elfoglalt"
#: ../extensions/alternative-status-menu/extension.js:52
msgid "My Account"
msgstr "Saját fiók"
#: ../extensions/alternative-status-menu/extension.js:56
msgid "System Settings"
msgstr "Rendszerbeállítások"
#: ../extensions/alternative-status-menu/extension.js:63
msgid "Lock Screen"
msgstr "Képernyő zárolása"
#: ../extensions/alternative-status-menu/extension.js:67
msgid "Switch User"
msgstr "Felhasználóváltás"
#: ../extensions/alternative-status-menu/extension.js:72
msgid "Log Out..."
msgstr "Kijelentkezés…"
#: ../extensions/alternative-status-menu/extension.js:79
msgid "Suspend"
msgstr "Felfüggesztés"
#: ../extensions/alternative-status-menu/extension.js:85
msgid "Hibernate"
msgstr "Hibernálás"
#: ../extensions/alternative-status-menu/extension.js:91
msgid "Power Off..."
msgstr "Kikapcsolás…"
#: ../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 ""
"Alkalmazásazonosítókat (.desktop fájl neve), majd kettősponttal elválasztva "
"a munkaterület számát tartalmazó karakterláncok sorozata"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid "Application and workspace list"
msgstr "Alkalmazások és munkaterületek listája"
#: ../extensions/dock/extension.js:136
msgid "Drag here to add favorites"
msgstr "Húzza ide kedvenceit"
#: ../extensions/dock/extension.js:456
msgid "New Window"
msgstr "Új ablak"
#: ../extensions/dock/extension.js:458
msgid "Quit Application"
msgstr "Alkalmazás bezárása"
#: ../extensions/dock/extension.js:463
msgid "Remove from Favorites"
msgstr "Eltávolítás a Kedvencek közül"
#: ../extensions/dock/extension.js:464
msgid "Add to Favorites"
msgstr "Hozzáadás a Kedvencekhez"
#: ../extensions/example/extension.js:11
msgid "Hello, world!"
msgstr "Helló, világ!"
#: ../extensions/gajim/extension.js:219
#, c-format
msgid "%s is away."
msgstr "%s távol van."
#: ../extensions/gajim/extension.js:222
#, c-format
msgid "%s is offline."
msgstr "%s kilépett."
#: ../extensions/gajim/extension.js:225
#, c-format
msgid "%s is online."
msgstr "%s elérhető."
#: ../extensions/gajim/extension.js:228
#, c-format
msgid "%s is busy."
msgstr "%s elfoglalt."
#: ../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 ""
#: ../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 ""
#: ../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 ""
#: ../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:6
msgid "Window placement strategy"
msgstr ""
#: ../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 "A ~/.themes/név/gnome-shell alól betöltendő téma neve"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "Theme name"
msgstr "Témanév"
#: ../extensions/xrandr-indicator/extension.js:26
msgid "Normal"
msgstr "Normál"
#: ../extensions/xrandr-indicator/extension.js:27
msgid "Left"
msgstr "Balra"
#: ../extensions/xrandr-indicator/extension.js:28
msgid "Right"
msgstr "Jobbra"
#: ../extensions/xrandr-indicator/extension.js:29
msgid "Upside-down"
msgstr "Fejjel lefelé"
#: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..."
msgstr "Kijelzőbeállítások…"

116
po/it.po
View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions 2.91.6\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-03-12 22:11+0100\n"
"PO-Revision-Date: 2011-03-12 22:12+0100\n"
"POT-Creation-Date: 2011-04-26 15:14+0200\n"
"PO-Revision-Date: 2011-04-26 15:27+0200\n"
"Last-Translator: Giovanni Campagna <scampa.giovanni@gmail.com>\n"
"Language-Team: none <LL@li.org>\n"
"Language: \n"
@@ -17,29 +17,45 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../extensions/example/extension.js:11
msgid "Hello, world!"
msgstr "Ciao, mondo!"
#: ../extensions/alternative-status-menu/extension.js:39
msgid "Available"
msgstr "Disponibile"
#: ../extensions/xrandr-indicator/extension.js:26
msgid "Normal"
msgstr "Normale"
#: ../extensions/alternative-status-menu/extension.js:44
msgid "Busy"
msgstr "Non disponibile"
#: ../extensions/xrandr-indicator/extension.js:27
msgid "Left"
msgstr "Sinistra"
#: ../extensions/alternative-status-menu/extension.js:52
msgid "My Account"
msgstr "Account personale"
#: ../extensions/xrandr-indicator/extension.js:28
msgid "Right"
msgstr "Destra"
#: ../extensions/alternative-status-menu/extension.js:56
msgid "System Settings"
msgstr "Impostazioni di sistema"
#: ../extensions/xrandr-indicator/extension.js:29
msgid "Upside-down"
msgstr "Rovesciato"
#: ../extensions/alternative-status-menu/extension.js:63
msgid "Lock Screen"
msgstr "Blocca schermo"
#: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..."
msgstr "Configura impostazioni display..."
#: ../extensions/alternative-status-menu/extension.js:67
msgid "Switch User"
msgstr "Cambia utente"
#: ../extensions/alternative-status-menu/extension.js:72
msgid "Log Out..."
msgstr "Termina sessione..."
#: ../extensions/alternative-status-menu/extension.js:79
msgid "Suspend"
msgstr "Sospendi"
#: ../extensions/alternative-status-menu/extension.js:85
msgid "Hibernate"
msgstr "Iberna"
#: ../extensions/alternative-status-menu/extension.js:91
msgid "Power Off..."
msgstr "Spegni..."
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid ""
@@ -53,14 +69,6 @@ msgstr ""
msgid "Application and workspace list"
msgstr "Lista applicazioni e spazi di lavoro"
#: ../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 "Il nome del tema, da caricare in ~/.themes/nome/gnome-shell"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "Theme name"
msgstr "Nome del tema"
#: ../extensions/dock/extension.js:116
msgid "Drag here to add favorites"
msgstr "Trascina qui per aggiungere ai preferiti"
@@ -80,3 +88,55 @@ msgstr "Rimuovi dai preferiti"
#: ../extensions/dock/extension.js:425
msgid "Add to Favorites"
msgstr "Aggiungi ai preferiti"
#: ../extensions/example/extension.js:11
msgid "Hello, world!"
msgstr "Ciao, mondo!"
#: ../extensions/gajim/extension.js:219
#, c-format
msgid "%s is away."
msgstr "%s è assente"
#: ../extensions/gajim/extension.js:222
#, c-format
msgid "%s is offline."
msgstr "%s è fuori rete"
#: ../extensions/gajim/extension.js:225
#, c-format
msgid "%s is online."
msgstr "%s è disponibile"
#: ../extensions/gajim/extension.js:228
#, c-format
msgid "%s is busy."
msgstr "%s non è disponibile"
#: ../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 "Il nome del tema, da caricare in ~/.themes/nome/gnome-shell"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "Theme name"
msgstr "Nome del tema"
#: ../extensions/xrandr-indicator/extension.js:26
msgid "Normal"
msgstr "Normale"
#: ../extensions/xrandr-indicator/extension.js:27
msgid "Left"
msgstr "Sinistra"
#: ../extensions/xrandr-indicator/extension.js:28
msgid "Right"
msgstr "Destra"
#: ../extensions/xrandr-indicator/extension.js:29
msgid "Upside-down"
msgstr "Rovesciato"
#: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..."
msgstr "Configura impostazioni display..."

149
po/pa.po Normal file
View File

@@ -0,0 +1,149 @@
# Punjabi 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.
#
# A S Alam <aalam@users.sf.net>, 2011.
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-06-03 08:18+0530\n"
"Last-Translator: A S Alam <aalam@users.sf.net>\n"
"Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pa\n"
"X-Generator: Lokalize 1.2\n"
"Plural-Forms: nplurals=2; plural=n != 1;\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/alternative-status-menu/extension.js:26
#: ../extensions/alternative-status-menu/extension.js:92
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 "ਸਿਸਟਮ ਸੈਟਿੰਗ"
#: ../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
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 ""
"ਲਾਈਨਾਂ ਦੀ ਲਿਸਟ, ਜੋ ਕਿ ਐਪਲੀਕੇਸ਼ਨ ID (ਡੈਸਕਟਾਪ ਫਾਇਲ ਨਾਂ), ਬਾਅਦ 'ਚ ਕਾਲਮ ਅਤੇ "
"ਵਰਕਸਪੇਸ "
"ਨੰਬਰ ਰੱਖਦਾ ਹੈ"
#: ../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
msgid "Drag here to add favorites"
msgstr "ਪਸੰਦ ਵਿੱਚ ਜੋੜਨ ਲਈ ਇੱਥੇ ਸੁੱਟੋ"
#: ../extensions/dock/extension.js:417
msgid "New Window"
msgstr "ਨਵੀਂ ਵਿੰਡੋ"
#: ../extensions/dock/extension.js:419
msgid "Quit Application"
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਬੰਦ ਕਰੋ"
#: ../extensions/dock/extension.js:424
msgid "Remove from Favorites"
msgstr "ਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਓ"
#: ../extensions/dock/extension.js:425
msgid "Add to Favorites"
msgstr "ਪਸੰਦ 'ਚ ਸ਼ਾਮਲ ਕਰੋ"
#: ../extensions/example/extension.js:11
msgid "Hello, world!"
msgstr "ਹੈਲੋ, ਵਰਲਡ!"
#: ../extensions/gajim/extension.js:219
#, c-format
msgid "%s is away."
msgstr "%s ਦੂਰ ਹੈ।"
#: ../extensions/gajim/extension.js:222
#, c-format
msgid "%s is offline."
msgstr "%s ਆਫਲਾਈਨ ਹੈ।"
#: ../extensions/gajim/extension.js:225
#, c-format
msgid "%s is online."
msgstr "%s ਆਨਲਾਈਨ ਹੈ।"
#: ../extensions/gajim/extension.js:228
#, 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/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "Theme name"
msgstr "ਥੀਮ ਨਾਂ"
#: ../extensions/xrandr-indicator/extension.js:26
msgid "Normal"
msgstr "ਸਧਾਰਨ"
#: ../extensions/xrandr-indicator/extension.js:27
msgid "Left"
msgstr "ਖੱਬੇ"
#: ../extensions/xrandr-indicator/extension.js:28
msgid "Right"
msgstr "ਸੱਜੇ"
#: ../extensions/xrandr-indicator/extension.js:29
msgid "Upside-down"
msgstr "ਉਤਲਾ ਹੇਠ"
#: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..."
msgstr "ਡਿਸਪਲੇਅ ਸੈਟਿੰਗ ਸੰਰਚਨਾ..."

141
po/ru.po Normal file
View File

@@ -0,0 +1,141 @@
# Russian 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.
# Yuri Myasoedov <omerta13@yandex.ru>, 2011.
#
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-06-04 07:00+0000\n"
"PO-Revision-Date: 2011-06-05 14:59+0300\n"
"Last-Translator: Yuri Myasoedov <omerta13@yandex.ru>\n"
"Language-Team: Russian <gnome-cyr@gnome.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: ../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/alternative-status-menu/extension.js:26
#: ../extensions/alternative-status-menu/extension.js:92
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 "Системные параметры"
#: ../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
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 "Список строк, содержащих id приложения (имя desktop-файла), далее следует двоеточие и номер рабочего места"
#: ../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
msgid "Drag here to add favorites"
msgstr "Перетащите, чтобы добавить в избранное"
#: ../extensions/dock/extension.js:417
msgid "New Window"
msgstr "Создать окно"
#: ../extensions/dock/extension.js:419
msgid "Quit Application"
msgstr "Закрыть приложение"
#: ../extensions/dock/extension.js:424
msgid "Remove from Favorites"
msgstr "Удалить из избранного"
#: ../extensions/dock/extension.js:425
msgid "Add to Favorites"
msgstr "Добавить в избранное"
#: ../extensions/example/extension.js:11
msgid "Hello, world!"
msgstr "Привет, мир!"
#: ../extensions/gajim/extension.js:219
#, c-format
msgid "%s is away."
msgstr "%s отошёл."
#: ../extensions/gajim/extension.js:222
#, c-format
msgid "%s is offline."
msgstr "%s не в сети."
#: ../extensions/gajim/extension.js:225
#, c-format
msgid "%s is online."
msgstr "%s в сети."
#: ../extensions/gajim/extension.js:228
#, 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/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "Theme name"
msgstr "Название темы"
#: ../extensions/xrandr-indicator/extension.js:26
msgid "Normal"
msgstr "Обычно"
#: ../extensions/xrandr-indicator/extension.js:27
msgid "Left"
msgstr "Влево"
#: ../extensions/xrandr-indicator/extension.js:28
msgid "Right"
msgstr "Вправо"
#: ../extensions/xrandr-indicator/extension.js:29
msgid "Upside-down"
msgstr "На 180 градусов"
#: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..."
msgstr "Настроить параметры экрана…"

View File

@@ -6,11 +6,10 @@
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-04-16 16:32+0000\n"
"PO-Revision-Date: 2011-03-27 17:37+0700\n"
"Last-Translator: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\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-04-01 16:40+0000\n"
"PO-Revision-Date: 2011-04-18 21:07+0700\n"
"Last-Translator: Lê Trường An <xinemdungkhoc1@gmail.com>\n"
"Language-Team: Vietnamese <gnomevi-list@lists.sourceforge.net>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -21,44 +20,44 @@ msgstr ""
#: ../extensions/alternative-status-menu/extension.js:27
#: ../extensions/alternative-status-menu/extension.js:93
msgid "Hibernate"
msgstr ""
msgstr "Ngủ đông"
#: ../extensions/alternative-status-menu/extension.js:26
#: ../extensions/alternative-status-menu/extension.js:92
msgid "Suspend"
msgstr ""
msgstr "Ngừng"
#: ../extensions/alternative-status-menu/extension.js:52
msgid "Available"
msgstr ""
msgstr "Có mặt"
#: ../extensions/alternative-status-menu/extension.js:57
msgid "Busy"
msgstr ""
msgstr "Bận"
#: ../extensions/alternative-status-menu/extension.js:65
msgid "My Account"
msgstr ""
msgstr "Tài khoản của tôi"
#: ../extensions/alternative-status-menu/extension.js:69
msgid "System Settings"
msgstr ""
msgstr "Thiết lập hệ thống"
#: ../extensions/alternative-status-menu/extension.js:76
msgid "Lock Screen"
msgstr ""
msgstr "Khoá màn hình"
#: ../extensions/alternative-status-menu/extension.js:80
msgid "Switch User"
msgstr ""
msgstr "Đổi người dùng"
#: ../extensions/alternative-status-menu/extension.js:85
msgid "Log Out..."
msgstr ""
msgstr "Đăng xuất..."
#: ../extensions/alternative-status-menu/extension.js:100
msgid "Power Off..."
msgstr ""
msgstr "Tắt máy..."
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid ""