Compare commits
55 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
26f5c03040 | ||
|
|
6cd9530862 | ||
|
|
fcddcc5185 | ||
|
|
311accd815 | ||
|
|
ac8d16674c | ||
|
|
941c819604 | ||
|
|
6edb1c7c60 | ||
|
|
5a5b7e56a1 | ||
|
|
0f3e93a39a | ||
|
|
a0181ce802 | ||
|
|
0307c59f0e | ||
|
|
46e959845d | ||
|
|
610bdb0b52 | ||
|
|
0ecccc7868 | ||
|
|
e0f27e9496 | ||
|
|
9563164d76 | ||
|
|
223e934ba9 | ||
|
|
a4d7a4eba4 | ||
|
|
1639f9f624 | ||
|
|
1148415672 | ||
|
|
1d9a26d7d7 | ||
|
|
783ec6cf68 | ||
|
|
5514ecbc3e | ||
|
|
2cc0eec19d | ||
|
|
40dff3d08f | ||
|
|
f28e3c78ab | ||
|
|
a1ae5a338a | ||
|
|
441d4b6b01 | ||
|
|
e4602fd890 | ||
|
|
6e5114d897 | ||
|
|
6177734a65 | ||
|
|
3825069e52 | ||
|
|
c3e1e63eef | ||
|
|
064a4c5891 | ||
|
|
c828d09539 | ||
|
|
27a1714f37 | ||
|
|
41ec4150e5 | ||
|
|
984e755ee6 | ||
|
|
fbbe5ba764 | ||
|
|
a7d59970cb | ||
|
|
4e12738df2 | ||
|
|
349d1f5e52 | ||
|
|
b289b0fdee | ||
|
|
e7c2d2c277 | ||
|
|
f62424e9bb | ||
|
|
f92addbbf6 | ||
|
|
53384f9eaf | ||
|
|
e12ff1b6f9 | ||
|
|
586d72f1fe | ||
|
|
7a4e22feec | ||
|
|
b730d7f97e | ||
|
|
ecd7c1754d | ||
|
|
951d59ba15 | ||
|
|
2962768a6f | ||
|
|
aaf2057725 |
9
.gitignore
vendored
9
.gitignore
vendored
@@ -4,10 +4,15 @@ Makefile.in.in
|
||||
configure
|
||||
config.log
|
||||
config.status
|
||||
config/
|
||||
aclocal.m4
|
||||
autom4te.cache/
|
||||
m4/
|
||||
po/gnome-shell-extensions.pot
|
||||
po/POTFILES
|
||||
po/stamp-it
|
||||
staging/
|
||||
|
||||
*~
|
||||
*.gmo
|
||||
metadata.json
|
||||
*.gschema.xml
|
||||
*.gschema.valid
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
|
||||
|
||||
SUBDIRS = extensions po
|
||||
|
||||
DISTCHECK_CONFIGURE_FLAGS = --enable-extensions=all
|
||||
|
||||
3
config/.gitignore
vendored
Normal file
3
config/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
install-sh
|
||||
mkinstalldirs
|
||||
missing
|
||||
36
configure.ac
36
configure.ac
@@ -1,10 +1,10 @@
|
||||
AC_PREREQ(2.63)
|
||||
AC_INIT([gnome-shell-extensions],[2.91.6],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&component=extensions])
|
||||
AC_INIT([gnome-shell-extensions],[3.0.0],[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])
|
||||
AM_INIT_AUTOMAKE([1.10 dist-bzip2 no-dist-gzip foreign tar-ustar])
|
||||
|
||||
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
|
||||
|
||||
@@ -16,23 +16,33 @@ IT_PROG_INTLTOOL(0.26)
|
||||
|
||||
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"
|
||||
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"
|
||||
AC_ARG_ENABLE([extensions],
|
||||
[AS_HELP_STRING([--enable-extensions],[Space separated list of extensions to enable. Default is that all extensions are built.])],
|
||||
[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.])],
|
||||
[],
|
||||
[enable_extensions=$ALL_EXTENSIONS]
|
||||
[enable_extensions=$DEFAULT_EXTENSIONS]
|
||||
)
|
||||
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="gnome-desktop-3.0 >= 2.91.6"
|
||||
ADDITIONAL_PACKAGES="$ADDITIONAL_PAGKAGES gnome-desktop-3.0 >= 2.91.6"
|
||||
;;
|
||||
alternate-tab|example|windowsNavigator)
|
||||
alternate-tab|example|windowsNavigator|auto-move-windows|dock|user-theme|alternative-status-menu|gajim)
|
||||
ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e"
|
||||
;;
|
||||
*)
|
||||
@@ -49,13 +59,19 @@ if test "x$ADDITIONAL_PACKAGES" != x; then
|
||||
PKG_CHECK_MODULES(ADDITIONAL, [$ADDITIONAL_PACKAGES])
|
||||
fi
|
||||
|
||||
dnl Please keep this sorted alphabetically
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
extensions/Makefile
|
||||
extensions/example/Makefile
|
||||
extensions/alternate-tab/Makefile
|
||||
extensions/alternative-status-menu/Makefile
|
||||
extensions/auto-move-windows/Makefile
|
||||
extensions/dock/Makefile
|
||||
extensions/example/Makefile
|
||||
extensions/windowsNavigator/Makefile
|
||||
extensions/gajim/Makefile
|
||||
extensions/xrandr-indicator/Makefile
|
||||
extensions/user-theme/Makefile
|
||||
extensions/Makefile
|
||||
Makefile
|
||||
po/Makefile.in
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
||||
22
extension.mk
22
extension.mk
@@ -1,10 +1,22 @@
|
||||
extensionurl = http://git.gnome.org/gnome-shell-extensions
|
||||
|
||||
# Change these to modify how installation is performed
|
||||
# If you modify extensionbase, you also need to modify
|
||||
# metadata.json of each extension
|
||||
topextensiondir = $(datadir)/gnome-shell/extensions
|
||||
extensionbase = @gnome-shell-extensions.gnome.org
|
||||
|
||||
extensiondir = $(topextensiondir)/$(EXTENSION_ID)$(extensionbase)
|
||||
uuid = $(EXTENSION_ID)$(extensionbase)
|
||||
|
||||
dist_extension_DATA = metadata.json extension.js stylesheet.css
|
||||
nodist_extension_DATA = $(EXTRA_EXTENSION)
|
||||
extensiondir = $(topextensiondir)/$(uuid)
|
||||
|
||||
dist_extension_DATA = extension.js stylesheet.css
|
||||
nodist_extension_DATA = metadata.json $(EXTRA_EXTENSION)
|
||||
|
||||
EXTRA_DIST = metadata.json.in
|
||||
|
||||
metadata.json: metadata.json.in $(top_builddir)/config.status
|
||||
$(AM_V_GEN) sed -e "s|[@]LOCALEDIR@|$(datadir)/locale|" \
|
||||
-e "s|[@]uuid@|$(uuid)|" \
|
||||
-e "s|[@]shell_current@|$(PACKAGE_VERSION)|" \
|
||||
-e "s|[@]url@|$(extensionurl)|" $< > $@
|
||||
|
||||
CLEANFILES = metadata.json
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
DIST_SUBDIRS = example alternate-tab xrandr-indicator windowsNavigator
|
||||
DIST_SUBDIRS = example alternate-tab xrandr-indicator windowsNavigator auto-move-windows dock user-theme alternative-status-menu gajim
|
||||
|
||||
SUBDIRS = $(ENABLED_EXTENSIONS)
|
||||
|
||||
@@ -92,6 +92,7 @@ AltTabPopup2.prototype = {
|
||||
this.actor.connect('scroll-event', Lang.bind(this, this._onScroll));
|
||||
|
||||
this._appSwitcher = new WindowList(windows);
|
||||
this._appSwitcher._altTabPopup=this;
|
||||
this._appSwitcher.highlight(0,false);
|
||||
this.actor.add_actor(this._appSwitcher.actor);
|
||||
this._appSwitcher.connect('item-activated', Lang.bind(this, this._appActivated));
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
{
|
||||
"uuid": "alternate-tab@gnome-shell-extensions.gnome.org",
|
||||
"uuid": "@uuid@",
|
||||
"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": [ "2.91.5", "2.91.6" ]
|
||||
"shell-version": [ "3.0" ],
|
||||
"localedir": "@LOCALEDIR@",
|
||||
"url": "@url@"
|
||||
}
|
||||
3
extensions/alternative-status-menu/Makefile.am
Normal file
3
extensions/alternative-status-menu/Makefile.am
Normal file
@@ -0,0 +1,3 @@
|
||||
EXTENSION_ID = alternative-status-menu
|
||||
|
||||
include ../../extension.mk
|
||||
112
extensions/alternative-status-menu/extension.js
Normal file
112
extensions/alternative-status-menu/extension.js
Normal file
@@ -0,0 +1,112 @@
|
||||
/* -*- 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 GnomeSession = imports.misc.gnomeSession;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
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 onSuspendOrHibernateActivate(item) {
|
||||
Main.overview.hide();
|
||||
|
||||
let haveSuspend = this._upClient.get_can_suspend();
|
||||
let haveHibernate = this._upClient.get_can_hibernate();
|
||||
|
||||
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 createSubMenu() {
|
||||
let item;
|
||||
|
||||
item = new PopupMenu.PopupImageMenuItem(_("Available"), 'user-available');
|
||||
item.connect('activate', Lang.bind(this, this._setPresenceStatus, GnomeSession.PresenceStatus.AVAILABLE));
|
||||
this.menu.addMenuItem(item);
|
||||
this._presenceItems[GnomeSession.PresenceStatus.AVAILABLE] = item;
|
||||
|
||||
item = new PopupMenu.PopupImageMenuItem(_("Busy"), 'user-busy');
|
||||
item.connect('activate', Lang.bind(this, this._setPresenceStatus, GnomeSession.PresenceStatus.BUSY));
|
||||
this.menu.addMenuItem(item);
|
||||
this._presenceItems[GnomeSession.PresenceStatus.BUSY] = item;
|
||||
|
||||
item = new PopupMenu.PopupSeparatorMenuItem();
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("My Account"));
|
||||
item.connect('activate', Lang.bind(this, this._onMyAccountActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("System Settings"));
|
||||
item.connect('activate', Lang.bind(this, this._onPreferencesActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupSeparatorMenuItem();
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("Lock Screen"));
|
||||
item.connect('activate', Lang.bind(this, this._onLockScreenActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("Switch User"));
|
||||
item.connect('activate', Lang.bind(this, this._onLoginScreenActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
this._loginScreenItem = item;
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("Log Out..."));
|
||||
item.connect('activate', Lang.bind(this, this._onQuitSessionActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupSeparatorMenuItem();
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupAlternatingMenuItem(_("Suspend"),
|
||||
_("Hibernate"));
|
||||
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() {
|
||||
this._session.ShutdownRemote();
|
||||
}));
|
||||
this.menu.addMenuItem(item);
|
||||
}
|
||||
|
||||
// Put your extension initialization code here
|
||||
function main(metadata) {
|
||||
let statusMenu = Main.panel._statusmenu;
|
||||
statusMenu.menu.removeAll();
|
||||
createSubMenu.call(statusMenu);
|
||||
}
|
||||
8
extensions/alternative-status-menu/metadata.json.in
Normal file
8
extensions/alternative-status-menu/metadata.json.in
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"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" ],
|
||||
"localedir": "@LOCALEDIR@",
|
||||
"url": "@url@"
|
||||
}
|
||||
3
extensions/alternative-status-menu/stylesheet.css
Normal file
3
extensions/alternative-status-menu/stylesheet.css
Normal file
@@ -0,0 +1,3 @@
|
||||
.popup-alternating-menu-item:alternate {
|
||||
font-weight: normal !important;
|
||||
}
|
||||
14
extensions/auto-move-windows/Makefile.am
Normal file
14
extensions/auto-move-windows/Makefile.am
Normal file
@@ -0,0 +1,14 @@
|
||||
EXTENSION_ID = auto-move-windows
|
||||
|
||||
include ../../extension.mk
|
||||
|
||||
gschemas_in = org.gnome.shell.extensions.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)
|
||||
109
extensions/auto-move-windows/extension.js
Normal file
109
extensions/auto-move-windows/extension.js
Normal file
@@ -0,0 +1,109 @@
|
||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||
// Start apps on custom workspaces
|
||||
|
||||
const Glib = imports.gi.GLib;
|
||||
const Gio = imports.gi.Gio;
|
||||
const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
|
||||
const SETTINGS_SCHEMA = 'org.gnome.shell.extensions.auto-move-windows';
|
||||
const SETTINGS_KEY = 'application-list';
|
||||
|
||||
function WindowMover() {
|
||||
this._init();
|
||||
}
|
||||
|
||||
WindowMover.prototype = {
|
||||
_init: function() {
|
||||
this._settings = new Gio.Settings({ schema: SETTINGS_SCHEMA });
|
||||
this._windowTracker = Shell.WindowTracker.get_default();
|
||||
|
||||
let display = global.screen.get_display();
|
||||
// Connect after so the handler from ShellWindowTracker has already run
|
||||
display.connect_after('window-created', Lang.bind(this, this._findAndMove));
|
||||
},
|
||||
|
||||
_ensureAtLeastWorkspaces: function(num, window) {
|
||||
for (let j = global.screen.n_workspaces; j <= num; j++) {
|
||||
window.change_workspace_by_index(j-1, false, global.get_current_time());
|
||||
global.screen.append_new_workspace(false, 0);
|
||||
}
|
||||
},
|
||||
|
||||
_findAndMove: function(display, window, noRecurse) {
|
||||
if (!this._windowTracker.is_window_interesting(window))
|
||||
return;
|
||||
|
||||
let spaces = this._settings.get_strv(SETTINGS_KEY);
|
||||
|
||||
let app = this._windowTracker.get_window_app(window);
|
||||
if (!app) {
|
||||
if (!noRecurse) {
|
||||
// window is not tracked yet
|
||||
Mainloop.idle_add(Lang.bind(this, function() {
|
||||
this._findAndMove(display, window, true);
|
||||
return false;
|
||||
}));
|
||||
} else
|
||||
log ('Cannot find application for window');
|
||||
return;
|
||||
}
|
||||
let app_id = app.get_id();
|
||||
for ( let j = 0 ; j < spaces.length; j++ ) {
|
||||
let apps_to_space = spaces[j].split(":");
|
||||
// Match application id
|
||||
if (apps_to_space[0] == app_id) {
|
||||
let workspace_num = parseInt(apps_to_space[1]) - 1;
|
||||
|
||||
if (workspace_num >= global.screen.n_workspaces)
|
||||
this._ensureAtLeastWorkspaces(workspace_num, window);
|
||||
|
||||
window.change_workspace_by_index(workspace_num, false, global.get_current_time());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function main(extensionMeta) {
|
||||
Main._checkWorkspaces = function() {
|
||||
let i;
|
||||
let emptyWorkspaces = new Array(Main._workspaces.length);
|
||||
|
||||
for (i = 0; i < Main._workspaces.length; i++)
|
||||
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);
|
||||
}
|
||||
|
||||
// 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;
|
||||
}
|
||||
Main._checkWorkspacesId = 0;
|
||||
return false;
|
||||
|
||||
};
|
||||
|
||||
new WindowMover();
|
||||
}
|
||||
9
extensions/auto-move-windows/metadata.json.in
Normal file
9
extensions/auto-move-windows/metadata.json.in
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"uuid": "@uuid@",
|
||||
"name": "Auto Move Windows",
|
||||
"description": "Move applications to specific workspaces when they create windows",
|
||||
"shell-version": [ "@shell_current@" ],
|
||||
"localedir": "@LOCALEDIR@",
|
||||
"original-authors": [ "alessandro.crismani@gmail.com", "thomas.bouffon@gmail.com" ],
|
||||
"url": "@url@"
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<schemalist gettext-domain="gnome-shell-extensions">
|
||||
<schema id="org.gnome.shell.extensions.auto-move-windows" path="/org/gnome/shell/extensions/auto-move-windows/">
|
||||
<key name="application-list" type="as">
|
||||
<!-- FIXME: should be a(su), when JS supports more of GVariant -->
|
||||
<default>[ ]</default>
|
||||
<_summary>Application and workspace list</_summary>
|
||||
<_description>A list of strings, each containing an application id (desktop file name), followed by a colon and the workspace number</_description>
|
||||
</key>
|
||||
</schema>
|
||||
</schemalist>
|
||||
1
extensions/auto-move-windows/stylesheet.css
Normal file
1
extensions/auto-move-windows/stylesheet.css
Normal file
@@ -0,0 +1 @@
|
||||
/* This extensions requires no special styling */
|
||||
3
extensions/dock/Makefile.am
Normal file
3
extensions/dock/Makefile.am
Normal file
@@ -0,0 +1,3 @@
|
||||
EXTENSION_ID = dock
|
||||
|
||||
include ../../extension.mk
|
||||
456
extensions/dock/extension.js
Normal file
456
extensions/dock/extension.js
Normal file
@@ -0,0 +1,456 @@
|
||||
/* -*- 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;
|
||||
|
||||
const DOCKICON_SIZE = 48;
|
||||
const DND_RAISE_APP_TIMEOUT = 500;
|
||||
|
||||
function Dock() {
|
||||
this._init();
|
||||
}
|
||||
|
||||
Dock.prototype = {
|
||||
_init : function() {
|
||||
this._placeholderText = null;
|
||||
this._menus = [];
|
||||
this._menuDisplays = [];
|
||||
|
||||
this._favorites = [];
|
||||
|
||||
this._spacing = 4;
|
||||
this._item_size = DOCKICON_SIZE;
|
||||
|
||||
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._appSystem.connect('installed-changed', Lang.bind(this, this._queueRedisplay));
|
||||
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 });
|
||||
this.actor.lower_bottom();
|
||||
},
|
||||
|
||||
_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();
|
||||
|
||||
/* hardcode here pending some design about how exactly desktop contexts behave */
|
||||
let contextId = '';
|
||||
|
||||
let running = this._tracker.get_running_apps(contextId);
|
||||
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.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);
|
||||
icons++;
|
||||
this.addItem(display.actor);
|
||||
}
|
||||
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 = 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);
|
||||
},
|
||||
|
||||
_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;
|
||||
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) {
|
||||
this._init(app);
|
||||
}
|
||||
|
||||
DockIcon.prototype = {
|
||||
_init : function(app) {
|
||||
this.app = app;
|
||||
this.actor = new St.Button({ style_class: 'dock-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 = this.app.create_icon_texture(DOCKICON_SIZE);
|
||||
this.actor.set_child(this._icon);
|
||||
|
||||
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();
|
||||
},
|
||||
|
||||
_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();
|
||||
|
||||
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('popup', Lang.bind(this, function (menu, isPoppedUp) {
|
||||
if (!isPoppedUp)
|
||||
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) {
|
||||
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.connect('open-state-changed', Lang.bind(this, this._onOpenStateChanged));
|
||||
|
||||
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.chrome.addActor(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 main(extensionMeta) {
|
||||
imports.gettext.bindtextdomain('gnome-shell-extensions', extensionMeta.localedir);
|
||||
|
||||
let dock = new Dock();
|
||||
}
|
||||
9
extensions/dock/metadata.json.in
Normal file
9
extensions/dock/metadata.json.in
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"uuid": "@uuid@",
|
||||
"name": "Dock",
|
||||
"description": "A dock for the GNOME Shell -- displays favorite and running applications",
|
||||
"original-author": "tclaesson@gmail.com",
|
||||
"shell-version": [ "3.0" ],
|
||||
"localedir": "@LOCALEDIR@",
|
||||
"url": "@url@"
|
||||
}
|
||||
54
extensions/dock/stylesheet.css
Normal file
54
extensions/dock/stylesheet.css
Normal file
@@ -0,0 +1,54 @@
|
||||
#dock {
|
||||
border-radius: 9px;
|
||||
background-color: rgba(0,0,0,0.9);
|
||||
border-width: 2px;
|
||||
border-color: #5f5f5f;
|
||||
}
|
||||
/* Panel */
|
||||
.dock-app {
|
||||
padding: 4px;
|
||||
width: 70px;
|
||||
height: 70px;
|
||||
border-radius: 4px;
|
||||
transition-duration: 100;
|
||||
}
|
||||
|
||||
.dock-app.running {
|
||||
padding: 3px;
|
||||
border: 1px solid #181818;
|
||||
background-gradient-direction: vertical;
|
||||
background-gradient-start: #3d3d3d;
|
||||
background-gradient-end: #181818;
|
||||
}
|
||||
|
||||
.dock-app.selected {
|
||||
padding: 3px;
|
||||
border: 1px solid #666666;
|
||||
}
|
||||
|
||||
.dock-app.focused {
|
||||
padding: 3px;
|
||||
border: 1px solid #5f5f5f;
|
||||
background-gradient-direction: vertical;
|
||||
background-gradient-start: rgba(61,61,61,0.8);
|
||||
background-gradient-end: rgba(24,24,24,0.2);
|
||||
}
|
||||
|
||||
.dock-app:hover {
|
||||
padding: 3px;
|
||||
border: 1px solid #666666;
|
||||
background-gradient-direction: vertical;
|
||||
background-gradient-start: rgba(61,61,61,0.8);
|
||||
background-gradient-end: rgba(24,24,24,0.2);
|
||||
transition-duration: 100;
|
||||
}
|
||||
|
||||
.dock-app:active {
|
||||
padding: 3px;
|
||||
background-color: #1e1e1e;
|
||||
border: 1px solid #5f5f5f;
|
||||
}
|
||||
|
||||
.dock-menu {
|
||||
font-size: 12px
|
||||
}
|
||||
@@ -2,10 +2,13 @@
|
||||
const St = imports.gi.St;
|
||||
const Mainloop = imports.mainloop;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
|
||||
function _showHello() {
|
||||
let text = new St.Label({ style_class: 'helloworld-label', text: "Hello, world!" });
|
||||
let text = new St.Label({ style_class: 'helloworld-label', text: _("Hello, world!") });
|
||||
let monitor = global.get_primary_monitor();
|
||||
global.stage.add_actor(text);
|
||||
text.set_position(Math.floor (monitor.width / 2 - text.width / 2), Math.floor(monitor.height / 2 - text.height / 2));
|
||||
@@ -13,7 +16,9 @@ function _showHello() {
|
||||
}
|
||||
|
||||
// Put your extension initialization code here
|
||||
function main() {
|
||||
function main(metadata) {
|
||||
imports.gettext.bindtextdomain('gnome-shell-extensions', metadata.localedir);
|
||||
|
||||
Main.panel.actor.reactive = true;
|
||||
Main.panel.actor.connect('button-release-event', _showHello);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
{
|
||||
"uuid": "example@gnome-shell-extensions.gnome.org",
|
||||
"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": [ "2.91.6" ]
|
||||
"shell-version": [ "3.0" ],
|
||||
"localedir": "@LOCALEDIR@",
|
||||
"url": "@url@"
|
||||
}
|
||||
3
extensions/gajim/Makefile.am
Normal file
3
extensions/gajim/Makefile.am
Normal file
@@ -0,0 +1,3 @@
|
||||
EXTENSION_ID = gajim
|
||||
|
||||
include ../../extension.mk
|
||||
313
extensions/gajim/extension.js
Normal file
313
extensions/gajim/extension.js
Normal file
@@ -0,0 +1,313 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const DBus = imports.dbus;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
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) {
|
||||
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.Notification(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().get_app('gajim.desktop');
|
||||
app.activate_window(null, global.get_current_time());
|
||||
},
|
||||
|
||||
_onChatState: function(emitter, data) {
|
||||
let chatstate = data[1][5];
|
||||
if (chatstate == 'gone')
|
||||
this.destroy();
|
||||
},
|
||||
|
||||
_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 text = data[1][1];
|
||||
let chatstate = data[1][3];
|
||||
|
||||
if (text) {
|
||||
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 = {};
|
||||
this._cacheDir = GLib.get_user_cache_dir() + '/gnome-shell/gajim-avatars';
|
||||
GLib.mkdir_with_parents(this._cacheDir, 0x1c0); // 0x1c0 = octal 0700
|
||||
|
||||
this._proxy = new Gajim(DBus.session, 'org.gajim.dbus', '/org/gajim/dbus/RemoteObject');
|
||||
this._proxy.connect('NewMessage', Lang.bind(this, this._messageReceived));
|
||||
},
|
||||
|
||||
proxy : function() {
|
||||
return this._proxy;
|
||||
},
|
||||
|
||||
_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 main() {
|
||||
let client = new GajimClient();
|
||||
}
|
||||
8
extensions/gajim/metadata.json.in
Normal file
8
extensions/gajim/metadata.json.in
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"uuid": "@uuid@",
|
||||
"name": "Gajim IM integration",
|
||||
"description": "Display Gajim incoming chats as notifications in the Shell message tray.",
|
||||
"shell-version": [ "3.0" ],
|
||||
"localedir": "@LOCALEDIR@",
|
||||
"url": "http://base-art.net"
|
||||
}
|
||||
0
extensions/gajim/stylesheet.css
Normal file
0
extensions/gajim/stylesheet.css
Normal file
14
extensions/user-theme/Makefile.am
Normal file
14
extensions/user-theme/Makefile.am
Normal file
@@ -0,0 +1,14 @@
|
||||
EXTENSION_ID = user-theme
|
||||
|
||||
include ../../extension.mk
|
||||
|
||||
gschemas_in = org.gnome.shell.extensions.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)
|
||||
45
extensions/user-theme/extension.js
Normal file
45
extensions/user-theme/extension.js
Normal file
@@ -0,0 +1,45 @@
|
||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||
// Load shell theme from ~/.themes/name/gnome-shell
|
||||
|
||||
const GLib = imports.gi.GLib;
|
||||
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();
|
||||
}
|
||||
|
||||
ThemeManager.prototype = {
|
||||
_init: function() {
|
||||
this._settings = new Gio.Settings({ schema: SETTINGS_SCHEMA });
|
||||
this._settings.connect('changed::'+SETTINGS_KEY, Lang.bind(this, this._changeTheme));
|
||||
this._changeTheme();
|
||||
},
|
||||
|
||||
_changeTheme: function() {
|
||||
let _stylesheet = null;
|
||||
let _themeName = this._settings.get_string(SETTINGS_KEY);
|
||||
|
||||
if (_themeName) {
|
||||
let _userCssStylesheet = GLib.get_home_dir() + '/.themes/' + _themeName + '/gnome-shell/gnome-shell.css';
|
||||
file = Gio.file_new_for_path(_userCssStylesheet);
|
||||
if (file.query_exists(null))
|
||||
_stylesheet = _userCssStylesheet;
|
||||
}
|
||||
|
||||
if (_stylesheet) {
|
||||
global.log('loading user theme: ' + _stylesheet)
|
||||
Main.setThemeStylesheet(_stylesheet);
|
||||
Main.loadTheme();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function main(metadata) {
|
||||
new ThemeManager();
|
||||
}
|
||||
9
extensions/user-theme/metadata.json.in
Normal file
9
extensions/user-theme/metadata.json.in
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"uuid": "@uuid@",
|
||||
"name": "User Themes",
|
||||
"description": "Load shell themes from user directory",
|
||||
"shell-version": [ "3.0" ],
|
||||
"localedir": "@LOCALEDIR@",
|
||||
"original-authors": [ "john.stowers@gmail.com" ],
|
||||
"url": "@url@"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<schemalist gettext-domain="gnome-shell-extensions">
|
||||
<schema id="org.gnome.shell.extensions.user-theme" path="/org/gnome/shell/extensions/user-theme/">
|
||||
<key name="name" type="s">
|
||||
<default>""</default>
|
||||
<_summary>Theme name</_summary>
|
||||
<_description>The name of the theme, to be loaded from ~/.themes/name/gnome-shell</_description>
|
||||
</key>
|
||||
</schema>
|
||||
</schemalist>
|
||||
0
extensions/user-theme/stylesheet.css
Normal file
0
extensions/user-theme/stylesheet.css
Normal file
@@ -45,9 +45,10 @@ function main() {
|
||||
Workspace.Workspace.prototype.showTooltip = function() {
|
||||
if (this._tip == null)
|
||||
return;
|
||||
if (this.parent)
|
||||
return;
|
||||
this.actor.add_actor(this._tip);
|
||||
this._tip.text = (this.metaWorkspace.index() + 1).toString();
|
||||
this._tip.x = this._x;
|
||||
this._tip.y = this._y;
|
||||
this._tip.show();
|
||||
this._tip.raise_top();
|
||||
}
|
||||
Workspace.Workspace.prototype.hideTooltip = function() {
|
||||
@@ -55,7 +56,7 @@ function main() {
|
||||
return;
|
||||
if (!this._tip.get_parent())
|
||||
return;
|
||||
this.actor.remove_actor(this._tip);
|
||||
this._tip.hide();
|
||||
}
|
||||
Workspace.Workspace.prototype.getWindowWithTooltip = function(id) {
|
||||
for (let i in this._windowOverlays) {
|
||||
@@ -80,7 +81,8 @@ function main() {
|
||||
}
|
||||
|
||||
WorkspacesView.WorkspacesView.prototype._hideTooltips = function() {
|
||||
global.stage.set_key_focus(this._prevFocusActor);
|
||||
if (global.stage.get_key_focus() == global.stage)
|
||||
global.stage.set_key_focus(this._prevFocusActor);
|
||||
this._pickWindow = false;
|
||||
for (let i = 0; i < this._workspaces.length; i++)
|
||||
this._workspaces[i].hideWindowsTooltips();
|
||||
@@ -153,7 +155,7 @@ function main() {
|
||||
|
||||
injectToFunction(Workspace.WindowOverlay.prototype, '_init', function(windowClone, parentActor) {
|
||||
this._id = null;
|
||||
this._text = new St.Label({ style_class: 'window-tooltip' });
|
||||
this._text = new St.Label({ style_class: 'extension-windowsNavigator-window-tooltip' });
|
||||
this._text.hide();
|
||||
parentActor.add_actor(this._text);
|
||||
});
|
||||
@@ -164,9 +166,11 @@ function main() {
|
||||
this._text.raise_top();
|
||||
});
|
||||
injectToFunction(Workspace.Workspace.prototype, '_init', function(metaWorkspace) {
|
||||
if (metaWorkspace.index() < 9) {
|
||||
this._tip = new St.Label({ style_class: 'window-tooltip',
|
||||
text: (metaWorkspace.index() + 1).toString() });
|
||||
if (metaWorkspace && metaWorkspace.index() < 9) {
|
||||
this._tip = new St.Label({ style_class: 'extension-windowsNavigator-window-tooltip',
|
||||
visible: false });
|
||||
|
||||
this.actor.add_actor(this._tip);
|
||||
this.actor.connect('notify::scale-x', Lang.bind(this, function() {
|
||||
this._tip.set_scale(1 / this.actor.scale_x, 1 / this.actor.scale_x);
|
||||
}));
|
||||
@@ -174,7 +178,7 @@ function main() {
|
||||
this._tip = null;
|
||||
});
|
||||
injectToFunction(Workspace.Workspace.prototype, 'positionWindows', function(flags) {
|
||||
let visibleClones = this._getVisibleClones();
|
||||
let visibleClones = this._windows.slice();
|
||||
if (this._reservedSlot)
|
||||
visibleClones.push(this._reservedSlot);
|
||||
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
{
|
||||
"shell-version": ["2.91.5", "2.91.6"],
|
||||
"uuid": "windowsNavigator@gnome-shell-extensions.gnome.org",
|
||||
"shell-version": ["@shell_current@"],
|
||||
"uuid": "@uuid@",
|
||||
"localedir": "@LOCALEDIR@",
|
||||
"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",
|
||||
"url": "@url@"
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
.window-tooltip {
|
||||
.extension-windowsNavigator-window-tooltip {
|
||||
color: #ff0000;
|
||||
background: rgba(0,0,0,0.8);
|
||||
border: 1px solid rgba(128,128,128,0.40);
|
||||
|
||||
@@ -13,8 +13,9 @@ const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
const Panel = imports.ui.panel;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||
const _ = Gettext.gettext;
|
||||
const N_ = function(e) { return e };
|
||||
|
||||
const possibleRotations = [ GnomeDesktop.RRRotation.ROTATION_0,
|
||||
GnomeDesktop.RRRotation.ROTATION_90,
|
||||
@@ -22,10 +23,10 @@ const possibleRotations = [ GnomeDesktop.RRRotation.ROTATION_0,
|
||||
GnomeDesktop.RRRotation.ROTATION_270
|
||||
];
|
||||
|
||||
let rotations = [ [ GnomeDesktop.RRRotation.ROTATION_0, _("Normal") ],
|
||||
[ GnomeDesktop.RRRotation.ROTATION_90, _("Left") ],
|
||||
[ GnomeDesktop.RRRotation.ROTATION_270, _("Right") ],
|
||||
[ GnomeDesktop.RRRotation.ROTATION_180, _("Upside-down") ]
|
||||
let rotations = [ [ GnomeDesktop.RRRotation.ROTATION_0, N_("Normal") ],
|
||||
[ GnomeDesktop.RRRotation.ROTATION_90, N_("Left") ],
|
||||
[ GnomeDesktop.RRRotation.ROTATION_270, N_("Right") ],
|
||||
[ GnomeDesktop.RRRotation.ROTATION_180, N_("Upside-down") ]
|
||||
];
|
||||
|
||||
const XRandr2Iface = {
|
||||
@@ -58,7 +59,7 @@ Indicator.prototype = {
|
||||
}
|
||||
|
||||
this._createMenu();
|
||||
this._screen.connect('screen-changed', Lang.bind(this, this._randrEvent));
|
||||
this._screen.connect('changed', Lang.bind(this, this._randrEvent));
|
||||
},
|
||||
|
||||
_randrEvent: function() {
|
||||
@@ -70,7 +71,7 @@ Indicator.prototype = {
|
||||
let config = GnomeDesktop.RRConfig.new_current(this._screen);
|
||||
let outputs = config.get_outputs();
|
||||
for (let i = 0; i < outputs.length; i++) {
|
||||
if (outputs[i].get_connected())
|
||||
if (outputs[i].is_connected())
|
||||
this._addOutputItem(config, outputs[i]);
|
||||
}
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
@@ -87,10 +88,14 @@ Indicator.prototype = {
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
let allowedRotations = this._getAllowedRotations(config, output);
|
||||
let currentRotation = output.get_rotation();
|
||||
for (let i = 0; i < rotations.length; i++) {
|
||||
let [bitmask, name] = rotations[i];
|
||||
if (bitmask & allowedRotations) {
|
||||
this.menu.addAction(name, Lang.bind(this, function(event) {
|
||||
let item = new PopupMenu.PopupMenuItem(Gettext.gettext(name));
|
||||
if (bitmask & currentRotation)
|
||||
item.setShowDot(true);
|
||||
item.connect('activate', Lang.bind(this, function(item, event) {
|
||||
/* ensure config is saved so we get a backup if anything goes wrong */
|
||||
config.save();
|
||||
|
||||
@@ -99,9 +104,10 @@ Indicator.prototype = {
|
||||
config.save();
|
||||
this._proxy.ApplyConfigurationRemote(global.stage_xwindow, event.get_time());
|
||||
} catch (e) {
|
||||
logError ('Could not save monitor configuration: ' + e);
|
||||
log ('Could not save monitor configuration: ' + e);
|
||||
}
|
||||
}));
|
||||
this.menu.addMenuItem(item);
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -130,6 +136,8 @@ Indicator.prototype = {
|
||||
}
|
||||
|
||||
|
||||
function main() {
|
||||
function main(metadata) {
|
||||
imports.gettext.bindtextdomain('gnome-shell-extensions', metadata.localedir);
|
||||
|
||||
Panel.STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['display'] = Indicator;
|
||||
}
|
||||
|
||||
@@ -1,132 +0,0 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const DBus = imports.dbus;
|
||||
const Gdk = imports.gi.Gdk;
|
||||
const GLib = imports.gi.GLib;
|
||||
const GnomeDesktop = imports.gi.GnomeDesktop;
|
||||
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');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const possibleRotations = [ GnomeDesktop.RRRotation.ROTATION_0,
|
||||
GnomeDesktop.RRRotation.ROTATION_90,
|
||||
GnomeDesktop.RRRotation.ROTATION_180,
|
||||
GnomeDesktop.RRRotation.ROTATION_270
|
||||
];
|
||||
|
||||
let rotations = [ [ GnomeDesktop.RRRotation.ROTATION_0, _("Normal") ],
|
||||
[ GnomeDesktop.RRRotation.ROTATION_90, _("Left") ],
|
||||
[ GnomeDesktop.RRRotation.ROTATION_270, _("Right") ],
|
||||
[ GnomeDesktop.RRRotation.ROTATION_180, _("Upside-down") ]
|
||||
];
|
||||
|
||||
const XRandr2Iface = {
|
||||
name: 'org.gnome.SettingsDaemon.XRANDR_2',
|
||||
methods: [
|
||||
{ name: 'ApplyConfiguration', inSignature: 'xx', outSignature: '' },
|
||||
]
|
||||
};
|
||||
let XRandr2 = DBus.makeProxyClass(XRandr2Iface);
|
||||
|
||||
function Indicator() {
|
||||
this._init.apply(this, arguments);
|
||||
}
|
||||
|
||||
Indicator.prototype = {
|
||||
__proto__: PanelMenu.SystemStatusButton.prototype,
|
||||
|
||||
_init: function() {
|
||||
PanelMenu.SystemStatusButton.prototype._init.call(this, 'preferences-desktop-display');
|
||||
|
||||
this._proxy = new XRandr2(DBus.session, 'org.gnome.SettingsDaemon', '/org/gnome/SettingsDaemon/XRANDR');
|
||||
|
||||
try {
|
||||
this._screen = new GnomeDesktop.RRScreen({ gdk_screen: Gdk.Screen.get_default() });
|
||||
this._screen.init(null);
|
||||
} catch(e) {
|
||||
// an error means there is no XRandR extension
|
||||
this.actor.hide();
|
||||
return;
|
||||
}
|
||||
|
||||
this._createMenu();
|
||||
this._screen.connect('screen-changed', Lang.bind(this, this._randrEvent));
|
||||
},
|
||||
|
||||
_randrEvent: function() {
|
||||
this.menu.removeAll();
|
||||
this._createMenu();
|
||||
},
|
||||
|
||||
_createMenu: function() {
|
||||
let config = GnomeDesktop.RRConfig.new_current(this._screen);
|
||||
let outputs = config.get_outputs();
|
||||
for (let i = 0; i < outputs.length; i++) {
|
||||
if (outputs[i].get_connected())
|
||||
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');
|
||||
});
|
||||
},
|
||||
|
||||
_addOutputItem: function(config, output) {
|
||||
let item = new PopupMenu.PopupMenuItem(output.get_display_name());
|
||||
item.label.add_style_class_name('display-subtitle');
|
||||
item.actor.reactive = false;
|
||||
item.actor.can_focus = false;
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
let allowedRotations = this._getAllowedRotations(config, output);
|
||||
for (let i = 0; i < rotations.length; i++) {
|
||||
let [bitmask, name] = rotations[i];
|
||||
if (bitmask & allowedRotations) {
|
||||
this.menu.addAction(name, Lang.bind(this, function(event) {
|
||||
/* ensure config is saved so we get a backup if anything goes wrong */
|
||||
config.save();
|
||||
|
||||
output.set_rotation(bitmask);
|
||||
try {
|
||||
config.save();
|
||||
this._proxy.ApplyConfigurationRemote(global.stage_xwindow, event.get_time());
|
||||
} catch (e) {
|
||||
logError ('Could not save monitor configuration: ' + e);
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_getAllowedRotations: function(config, output) {
|
||||
let retval = 0;
|
||||
|
||||
let current = output.get_rotation();
|
||||
|
||||
for (let i = 0; i < possibleRotations.length; i++) {
|
||||
output.set_rotation(possibleRotations[i]);
|
||||
if (config.applicable(this._screen)) {
|
||||
retval |= possibleRotations[i];
|
||||
}
|
||||
}
|
||||
|
||||
output.set_rotation(current);
|
||||
|
||||
if (retval.lenght == 0) {
|
||||
// what, no rotation?
|
||||
// what's current then?
|
||||
retval = current;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
|
||||
Panel.STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['display'] = Indicator;
|
||||
@@ -1,6 +1,8 @@
|
||||
{
|
||||
"uuid": "xrandr-indicator@gnome-shell-extensions.gnome.org",
|
||||
"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": [ "2.91.5", "2.91.6" ]
|
||||
"shell-version": [ "3.0" ],
|
||||
"localedir": "@LOCALEDIR@",
|
||||
"url": "@url@"
|
||||
}
|
||||
1
m4/.gitignore
vendored
Normal file
1
m4/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
intltool.m4
|
||||
13
po/LINGUAS
Normal file
13
po/LINGUAS
Normal file
@@ -0,0 +1,13 @@
|
||||
cs
|
||||
da
|
||||
de
|
||||
es
|
||||
fr
|
||||
it
|
||||
pt
|
||||
pt_BR
|
||||
pl
|
||||
sl
|
||||
sv
|
||||
vi
|
||||
zh_CN
|
||||
@@ -1,4 +1,9 @@
|
||||
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/example/extension.js
|
||||
extensions/gajim/extension.js
|
||||
extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in
|
||||
extensions/windowsNavigator/extension.js
|
||||
extensions/xrandr-indicator/extension.js
|
||||
extensions/alternate-tab/extension.js
|
||||
|
||||
104
po/cs.po
Normal file
104
po/cs.po
Normal file
@@ -0,0 +1,104 @@
|
||||
# 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.
|
||||
#
|
||||
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-01 16:40+0000\n"
|
||||
"PO-Revision-Date: 2011-04-02 19:19+0200\n"
|
||||
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
|
||||
"Language-Team: Czech <gnome-cs-list@gnome.org>\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"
|
||||
|
||||
#: ../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 ""
|
||||
"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/dock/extension.js:116
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Přetažením sem přidáte do oblíbených"
|
||||
|
||||
#: ../extensions/dock/extension.js:417
|
||||
msgid "New Window"
|
||||
msgstr "Nové okno"
|
||||
|
||||
#: ../extensions/dock/extension.js:419
|
||||
msgid "Quit Application"
|
||||
msgstr "Ukončit aplikaci"
|
||||
|
||||
#: ../extensions/dock/extension.js:424
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Odebrat z oblíbených"
|
||||
|
||||
#: ../extensions/dock/extension.js:425
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Přidat do oblíbených"
|
||||
|
||||
#: ../extensions/example/extension.js:11
|
||||
msgid "Hello, world!"
|
||||
msgstr "Ahoj světe!"
|
||||
|
||||
#: ../extensions/gajim/extension.js:219
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s je pryč."
|
||||
|
||||
#: ../extensions/gajim/extension.js:222
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s je odpojen."
|
||||
|
||||
#: ../extensions/gajim/extension.js:225
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s je připojen."
|
||||
|
||||
#: ../extensions/gajim/extension.js:228
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s je zaneprázdněn."
|
||||
|
||||
#: ../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
|
||||
msgid "Normal"
|
||||
msgstr "Normální"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:27
|
||||
msgid "Left"
|
||||
msgstr "Doleva"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:28
|
||||
msgid "Right"
|
||||
msgstr "Doprava"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:29
|
||||
msgid "Upside-down"
|
||||
msgstr "Vzhůru nohama"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:78
|
||||
msgid "Configure display settings..."
|
||||
msgstr "Upravit nastavení zobrazení…"
|
||||
83
po/da.po
Normal file
83
po/da.po
Normal file
@@ -0,0 +1,83 @@
|
||||
# Danish 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.
|
||||
#
|
||||
# Kris Thomsen <lakristho@gmail.com>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell-extensions master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-03-30 22:37+0200\n"
|
||||
"PO-Revision-Date: 2011-03-29 00:18+0000\n"
|
||||
"Last-Translator: Kris Thomsen <lakristho@gmail.com>\n"
|
||||
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
|
||||
"Language: da\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"
|
||||
|
||||
#: ../extensions/example/extension.js:11
|
||||
msgid "Hello, world!"
|
||||
msgstr "Hej verden!"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:26
|
||||
msgid "Normal"
|
||||
msgstr "Normal"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:27
|
||||
msgid "Left"
|
||||
msgstr "Venstre"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:28
|
||||
msgid "Right"
|
||||
msgstr "Højre"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:29
|
||||
msgid "Upside-down"
|
||||
msgstr "På hovedet"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:78
|
||||
msgid "Configure display settings..."
|
||||
msgstr "Konfigurér skærmindstillinger..."
|
||||
|
||||
#: ../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 ""
|
||||
"En liste over strenge, som hver indeholder et program-id "
|
||||
"(skrivebordsfilnavn), efterfulgt af et kolon og arbejdsområdets nummer"
|
||||
|
||||
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||
msgid "Application and workspace list"
|
||||
msgstr "Liste over programmer og arbejdsområder"
|
||||
|
||||
#: ../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 "Navnet på temaet, som indlæses fra ~/.themes/name/gnome-shell"
|
||||
|
||||
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||
msgid "Theme name"
|
||||
msgstr "Temanavn"
|
||||
|
||||
#: ../extensions/dock/extension.js:116
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Træk hertil for at føje til favoritter"
|
||||
|
||||
#: ../extensions/dock/extension.js:417
|
||||
msgid "New Window"
|
||||
msgstr "Nyt vindue"
|
||||
|
||||
#: ../extensions/dock/extension.js:419
|
||||
msgid "Quit Application"
|
||||
msgstr "Afslut program"
|
||||
|
||||
#: ../extensions/dock/extension.js:424
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Fjern fra favoritter"
|
||||
|
||||
#: ../extensions/dock/extension.js:425
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Føj til favoritter"
|
||||
84
po/de.po
Normal file
84
po/de.po
Normal file
@@ -0,0 +1,84 @@
|
||||
# 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 <mariobl@gnome.org>, 2011.
|
||||
#
|
||||
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-03-16 16:06+0000\n"
|
||||
"PO-Revision-Date: 2011-03-17 17:52+0100\n"
|
||||
"Last-Translator: Mario Blättermann <mariobl@gnome.org>\n"
|
||||
"Language-Team: German <gnome-de@gnome.org>\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"
|
||||
|
||||
#: ../extensions/example/extension.js:11
|
||||
msgid "Hello, world!"
|
||||
msgstr "Hallo, Welt!"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:26
|
||||
msgid "Normal"
|
||||
msgstr "Normal"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:27
|
||||
msgid "Left"
|
||||
msgstr "Links"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:28
|
||||
msgid "Right"
|
||||
msgstr "Rechts"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:29
|
||||
msgid "Upside-down"
|
||||
msgstr "Kopfüber"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:78
|
||||
msgid "Configure display settings..."
|
||||
msgstr "Bildschirmeinstellungen festlegen …"
|
||||
|
||||
#: ../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 ""
|
||||
"Eine Liste aus Zeichenketten, wovon jede eine Anwendungskennung (*.desktop-"
|
||||
"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/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 ""
|
||||
"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/dock/extension.js:116
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Hierher ziehen, um zu Favoriten hinzuzufügen"
|
||||
|
||||
#: ../extensions/dock/extension.js:417
|
||||
msgid "New Window"
|
||||
msgstr "Neues Fenster"
|
||||
|
||||
#: ../extensions/dock/extension.js:419
|
||||
msgid "Quit Application"
|
||||
msgstr "Anwendung beenden"
|
||||
|
||||
#: ../extensions/dock/extension.js:424
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Aus Favoriten entfernen"
|
||||
|
||||
#: ../extensions/dock/extension.js:425
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Zu Favoriten hinzufügen"
|
||||
103
po/es.po
Normal file
103
po/es.po
Normal file
@@ -0,0 +1,103 @@
|
||||
# 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.
|
||||
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011.
|
||||
#
|
||||
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-01 16:40+0000\n"
|
||||
"PO-Revision-Date: 2011-04-04 13:30+0200\n"
|
||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||
"Language-Team: Español <gnome-es-list@gnome.org>\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"
|
||||
|
||||
#: ../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 ""
|
||||
"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 espacio 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/dock/extension.js:116
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Arrastrar aquí para añadir a favoritos"
|
||||
|
||||
#: ../extensions/dock/extension.js:417
|
||||
msgid "New Window"
|
||||
msgstr "Ventana nueva"
|
||||
|
||||
#: ../extensions/dock/extension.js:419
|
||||
msgid "Quit Application"
|
||||
msgstr "Salir de la aplicación"
|
||||
|
||||
#: ../extensions/dock/extension.js:424
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Quitar de favoritos"
|
||||
|
||||
#: ../extensions/dock/extension.js:425
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Añadir a favoritos"
|
||||
|
||||
#: ../extensions/example/extension.js:11
|
||||
msgid "Hello, world!"
|
||||
msgstr "¡Hola, Mundo!"
|
||||
|
||||
#: ../extensions/gajim/extension.js:219
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s no está disponible."
|
||||
|
||||
#: ../extensions/gajim/extension.js:222
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s está desconectado."
|
||||
|
||||
#: ../extensions/gajim/extension.js:225
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s está conectado."
|
||||
|
||||
#: ../extensions/gajim/extension.js:228
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s está ocupado."
|
||||
|
||||
#: ../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 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
|
||||
msgid "Theme name"
|
||||
msgstr "Nombre del tema"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:26
|
||||
msgid "Normal"
|
||||
msgstr "Normal"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:27
|
||||
msgid "Left"
|
||||
msgstr "Izquierda"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:28
|
||||
msgid "Right"
|
||||
msgstr "Derecha"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:29
|
||||
msgid "Upside-down"
|
||||
msgstr "Hacia abajo"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:78
|
||||
msgid "Configure display settings..."
|
||||
msgstr "Configurar las opciones de pantalla…"
|
||||
83
po/fr.po
Normal file
83
po/fr.po
Normal file
@@ -0,0 +1,83 @@
|
||||
# French translation for gnome-shell-extensions.
|
||||
# Copyright (C) 2011 Listed translators
|
||||
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||
# Claude Paroz <claude@2xlibre.net>, 2011.
|
||||
#
|
||||
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-03-18 14:07+0000\n"
|
||||
"PO-Revision-Date: 2011-03-19 09:37+0100\n"
|
||||
"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
|
||||
"Language-Team: French <gnomefr@traduc.org>\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"
|
||||
|
||||
#: ../extensions/example/extension.js:11
|
||||
msgid "Hello, world!"
|
||||
msgstr "Bonjour le monde !"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:26
|
||||
msgid "Normal"
|
||||
msgstr "Normal"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:27
|
||||
msgid "Left"
|
||||
msgstr "Gauche"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:28
|
||||
msgid "Right"
|
||||
msgstr "Droite"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:29
|
||||
msgid "Upside-down"
|
||||
msgstr "Renversé"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:78
|
||||
msgid "Configure display settings..."
|
||||
msgstr "Configurer les paramètres d'affichage..."
|
||||
|
||||
#: ../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 ""
|
||||
"Une liste de chaînes, contenant chacune un identifiant d'application (nom "
|
||||
"de fichier desktop), suivi par un deux-points et le numéro de l'espace de "
|
||||
"travail"
|
||||
|
||||
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||
msgid "Application and workspace list"
|
||||
msgstr "Liste d'applications et d'espaces de travail"
|
||||
|
||||
#: ../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 "Le nom du thème, à charger à partir de ~/.themes/name/gnome-shell"
|
||||
|
||||
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||
msgid "Theme name"
|
||||
msgstr "Nom du thème"
|
||||
|
||||
#: ../extensions/dock/extension.js:116
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Déposez ici pour ajouter aux favoris"
|
||||
|
||||
#: ../extensions/dock/extension.js:417
|
||||
msgid "New Window"
|
||||
msgstr "Nouvelle fenêtre"
|
||||
|
||||
#: ../extensions/dock/extension.js:419
|
||||
msgid "Quit Application"
|
||||
msgstr "Quitter l'application"
|
||||
|
||||
#: ../extensions/dock/extension.js:424
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Enlever des favoris"
|
||||
|
||||
#: ../extensions/dock/extension.js:425
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Ajouter aux favoris"
|
||||
82
po/it.po
Normal file
82
po/it.po
Normal file
@@ -0,0 +1,82 @@
|
||||
# Italian translations for GNOME Shell extensions
|
||||
# Copyright (C) 2011 Giovanni Campagna et al.
|
||||
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||
# Giovanni Campagna <scampa.giovanni@gmail.com>, 2011
|
||||
#
|
||||
#, fuzzy
|
||||
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"
|
||||
"Last-Translator: Giovanni Campagna <scampa.giovanni@gmail.com>\n"
|
||||
"Language-Team: none <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"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/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..."
|
||||
|
||||
#: ../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 ""
|
||||
"Una lista di stringhe, ognuna contenente un id applicazione (nome del file ."
|
||||
"desktop), seguito da due punti e il numero dello spazio di lavoro"
|
||||
|
||||
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||
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"
|
||||
|
||||
#: ../extensions/dock/extension.js:417
|
||||
msgid "New Window"
|
||||
msgstr "Nuova finestra"
|
||||
|
||||
#: ../extensions/dock/extension.js:419
|
||||
msgid "Quit Application"
|
||||
msgstr "Chiudi applicazione"
|
||||
|
||||
#: ../extensions/dock/extension.js:424
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Rimuovi dai preferiti"
|
||||
|
||||
#: ../extensions/dock/extension.js:425
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Aggiungi ai preferiti"
|
||||
86
po/pl.po
Normal file
86
po/pl.po
Normal file
@@ -0,0 +1,86 @@
|
||||
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
# Aviary.pl
|
||||
# Jeśli masz jakiekolwiek uwagi odnoszące się do tłumaczenia lub chcesz
|
||||
# pomóc w jego rozwijaniu i pielęgnowaniu, napisz do nas:
|
||||
# gnomepl@aviary.pl
|
||||
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell-extensions\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-03-12 21:49+0000\n"
|
||||
"PO-Revision-Date: 2011-03-12 23:55+0100\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Polish <gnomepl@aviary.pl>\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==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2);\n"
|
||||
"X-Poedit-Language: Polish\n"
|
||||
"X-Poedit-Country: Poland\n"
|
||||
|
||||
#: ../extensions/example/extension.js:11
|
||||
msgid "Hello, world!"
|
||||
msgstr "Witaj, świecie!"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:26
|
||||
msgid "Normal"
|
||||
msgstr "Normalnie"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:27
|
||||
msgid "Left"
|
||||
msgstr "W lewo"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:28
|
||||
msgid "Right"
|
||||
msgstr "W prawo"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:29
|
||||
msgid "Upside-down"
|
||||
msgstr "Odbicie poziomo"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:78
|
||||
msgid "Configure display settings..."
|
||||
msgstr "Skonfiguruj ustawienia ekranu..."
|
||||
|
||||
#: ../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 ""
|
||||
"Lista ciągów, każdy zawierający identyfikator programu (nazwę pliku "
|
||||
".desktop) z przecinkiem i numerem obszaru roboczego"
|
||||
|
||||
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||
msgid "Application and workspace list"
|
||||
msgstr "Lista programów i obszarów roboczych"
|
||||
|
||||
#: ../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 "Nazwa motywu do wczytania z katalogu ~/.themes/name/gnome-shell"
|
||||
|
||||
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||
msgid "Theme name"
|
||||
msgstr "Nazwa motywu"
|
||||
|
||||
#: ../extensions/dock/extension.js:116
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Przeciągnięcie tutaj dodaje do ulubionych"
|
||||
|
||||
#: ../extensions/dock/extension.js:417
|
||||
msgid "New Window"
|
||||
msgstr "Nowe okno"
|
||||
|
||||
#: ../extensions/dock/extension.js:419
|
||||
msgid "Quit Application"
|
||||
msgstr "Zakończ program"
|
||||
|
||||
#: ../extensions/dock/extension.js:424
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Usuń z ulubionych"
|
||||
|
||||
#: ../extensions/dock/extension.js:425
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Dodaj do ulubionych"
|
||||
102
po/pt.po
Normal file
102
po/pt.po
Normal file
@@ -0,0 +1,102 @@
|
||||
# gnome-shell-extensions' Portuguese translation.
|
||||
# Copyright © 2011 gnome-shell-extensions
|
||||
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||
# Duarte Loreto <happyguy_pt@hotmail.com>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 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-04-01 16:40+0000\n"
|
||||
"PO-Revision-Date: 2011-04-02 00:20+0000\n"
|
||||
"Last-Translator: Duarte Loreto <happyguy_pt@hotmail.com>\n"
|
||||
"Language-Team: Portuguese <gnome_pt@yahoogroups.com>\n"
|
||||
"Language: pt\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ../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 ""
|
||||
"Uma lista de expressões, cada uma contendo o id de uma aplicação (nome do "
|
||||
"ficheiro desktop), seguido de dois pontos e o número da área de trabalho"
|
||||
|
||||
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||
msgid "Application and workspace list"
|
||||
msgstr "Lista de aplicações e áreas de trabalho"
|
||||
|
||||
#: ../extensions/dock/extension.js:116
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Arrastar para aqui para adicionar favoritos"
|
||||
|
||||
#: ../extensions/dock/extension.js:417
|
||||
msgid "New Window"
|
||||
msgstr "Nova Janela"
|
||||
|
||||
#: ../extensions/dock/extension.js:419
|
||||
msgid "Quit Application"
|
||||
msgstr "Sair da Aplicação"
|
||||
|
||||
#: ../extensions/dock/extension.js:424
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Remover dos Favoritos"
|
||||
|
||||
#: ../extensions/dock/extension.js:425
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Adicionar aos Favoritos"
|
||||
|
||||
#: ../extensions/example/extension.js:11
|
||||
msgid "Hello, world!"
|
||||
msgstr "Olá, mundo!"
|
||||
|
||||
#: ../extensions/gajim/extension.js:219
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s está ausente."
|
||||
|
||||
#: ../extensions/gajim/extension.js:222
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s está desligado."
|
||||
|
||||
#: ../extensions/gajim/extension.js:225
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s está ligado."
|
||||
|
||||
#: ../extensions/gajim/extension.js:228
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s está ocupado."
|
||||
|
||||
#: ../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 "O nome do tema, a ser lido de ~/.themes/name/gnome-shell"
|
||||
|
||||
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||
msgid "Theme name"
|
||||
msgstr "Nome do tema"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:26
|
||||
msgid "Normal"
|
||||
msgstr "Normal"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:27
|
||||
msgid "Left"
|
||||
msgstr "Esquerda"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:28
|
||||
msgid "Right"
|
||||
msgstr "Direita"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:29
|
||||
msgid "Upside-down"
|
||||
msgstr "Pernas para o ar"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:78
|
||||
msgid "Configure display settings..."
|
||||
msgstr "Configurar as definições de ecrã..."
|
||||
103
po/pt_BR.po
Normal file
103
po/pt_BR.po
Normal file
@@ -0,0 +1,103 @@
|
||||
# Brazilian Portuguese 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.
|
||||
# Felipe Borges <felipe10borges@gmail.com>, 2011.
|
||||
# Rodrigo Padula <contato@rodrigopadula.com>, 2011.
|
||||
#
|
||||
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-04 17:57+0000\n"
|
||||
"PO-Revision-Date: 2011-04-05 02:39-0300\n"
|
||||
"Last-Translator: Rodrigo Padula de Oliveira <contato@rodrigopadula.com>\n"
|
||||
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\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"
|
||||
|
||||
#: ../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 ""
|
||||
"Uma lista de strings, cada uma contendo um id do aplicativo (nome de arquivo "
|
||||
"desktop), seguido por dois pontos e o número da área de trabalho"
|
||||
|
||||
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||
msgid "Application and workspace list"
|
||||
msgstr "Aplicativo e lista de área de trabalho"
|
||||
|
||||
#: ../extensions/dock/extension.js:116
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Arraste aqui para adicionar favoritos"
|
||||
|
||||
#: ../extensions/dock/extension.js:417
|
||||
msgid "New Window"
|
||||
msgstr "Nova janela"
|
||||
|
||||
#: ../extensions/dock/extension.js:419
|
||||
msgid "Quit Application"
|
||||
msgstr "Fechar aplicativo"
|
||||
|
||||
#: ../extensions/dock/extension.js:424
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Remover dos favoritos"
|
||||
|
||||
#: ../extensions/dock/extension.js:425
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Adicionar aos favoritos"
|
||||
|
||||
#: ../extensions/example/extension.js:11
|
||||
msgid "Hello, world!"
|
||||
msgstr "Olá, mundo!"
|
||||
|
||||
#: ../extensions/gajim/extension.js:219
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s está ausente."
|
||||
|
||||
#: ../extensions/gajim/extension.js:222
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s está desconectado."
|
||||
|
||||
#: ../extensions/gajim/extension.js:225
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s está conectado."
|
||||
|
||||
#: ../extensions/gajim/extension.js:228
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s está ocupado."
|
||||
|
||||
#: ../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 "O nome do tema, para ser carregado de ~/.themes/name/gnome-shell"
|
||||
|
||||
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||
msgid "Theme name"
|
||||
msgstr "Nome do tema"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:26
|
||||
msgid "Normal"
|
||||
msgstr "Normal"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:27
|
||||
msgid "Left"
|
||||
msgstr "Esquerda"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:28
|
||||
msgid "Right"
|
||||
msgstr "Direita"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:29
|
||||
msgid "Upside-down"
|
||||
msgstr "De cabeça pra baixo"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:78
|
||||
msgid "Configure display settings..."
|
||||
msgstr "Definir configurações de exibição..."
|
||||
81
po/sl.po
Normal file
81
po/sl.po
Normal file
@@ -0,0 +1,81 @@
|
||||
# Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||
#
|
||||
# Matej Urbančič <mateju@svn.gnome.org>, 2011.
|
||||
#
|
||||
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: 2009-09-10 22:35+0000\n"
|
||||
"PO-Revision-Date: 2011-03-16 11:12+0100\n"
|
||||
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
|
||||
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n"
|
||||
"X-Poedit-Language: Slovenian\n"
|
||||
"X-Poedit-Country: SLOVENIA\n"
|
||||
"X-Poedit-SourceCharset: utf-8\n"
|
||||
|
||||
#: ../extensions/example/extension.js:11
|
||||
msgid "Hello, world!"
|
||||
msgstr "Pozdravljen, svet!"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:26
|
||||
msgid "Normal"
|
||||
msgstr "Običajno"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:27
|
||||
msgid "Left"
|
||||
msgstr "Levo"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:28
|
||||
msgid "Right"
|
||||
msgstr "Desno"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:29
|
||||
msgid "Upside-down"
|
||||
msgstr "Zgornja stran navzdol"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:78
|
||||
msgid "Configure display settings..."
|
||||
msgstr "Nastavitve zaslona ..."
|
||||
|
||||
#: ../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 "Seznam nizov z določilom ID programa (namizno ime programa), ki mu sledi dvopičje in nato številka delovne površine."
|
||||
|
||||
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||
msgid "Application and workspace list"
|
||||
msgstr "Seznam programov in delovnih površin"
|
||||
|
||||
#: ../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 "Ime teme, ki bo naložena iz ~/.themes/name/gnome-shell"
|
||||
|
||||
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||
msgid "Theme name"
|
||||
msgstr "Ime teme"
|
||||
|
||||
#: ../extensions/dock/extension.js:116
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Potegnite sem, za dodajanje med priljubljene"
|
||||
|
||||
#: ../extensions/dock/extension.js:417
|
||||
msgid "New Window"
|
||||
msgstr "Novo okno"
|
||||
|
||||
#: ../extensions/dock/extension.js:419
|
||||
msgid "Quit Application"
|
||||
msgstr "Končaj program"
|
||||
|
||||
#: ../extensions/dock/extension.js:424
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Odstrani iz priljubljenih"
|
||||
|
||||
#: ../extensions/dock/extension.js:425
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Dodaj med priljubljene"
|
||||
|
||||
78
po/sv.po
Normal file
78
po/sv.po
Normal file
@@ -0,0 +1,78 @@
|
||||
# Swedish translation for gnome-shell-extensions.
|
||||
# Copyright (C) 2011 Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||
# Daniel Nylander <po@danielnylander.se>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell-extensions\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-03-14 10:07+0100\n"
|
||||
"PO-Revision-Date: 2011-03-14 10:10+0100\n"
|
||||
"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
|
||||
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ../extensions/example/extension.js:11
|
||||
msgid "Hello, world!"
|
||||
msgstr "Hej, världen!"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:26
|
||||
msgid "Normal"
|
||||
msgstr "Normal"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:27
|
||||
msgid "Left"
|
||||
msgstr "Vänster"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:28
|
||||
msgid "Right"
|
||||
msgstr "Höger"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:29
|
||||
msgid "Upside-down"
|
||||
msgstr "Upp och ner"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:78
|
||||
msgid "Configure display settings..."
|
||||
msgstr "Konfigurera skärminställningar.."
|
||||
|
||||
#: ../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 "En lista över strängar, var och en innehållande ett program-id (skrivbordsfilnamn), följt av ett kolontecken och arbetsytans nummer"
|
||||
|
||||
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||
msgid "Application and workspace list"
|
||||
msgstr "Lista över program och arbetsyta"
|
||||
|
||||
#: ../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 "Namnet på temat, kommer att läsas in från ~/.themes/name/gnome-shell"
|
||||
|
||||
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||
msgid "Theme name"
|
||||
msgstr "Temanamn"
|
||||
|
||||
#: ../extensions/dock/extension.js:116
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Dra hit för att lägga till i favoriter"
|
||||
|
||||
#: ../extensions/dock/extension.js:417
|
||||
msgid "New Window"
|
||||
msgstr "Nytt fönster"
|
||||
|
||||
#: ../extensions/dock/extension.js:419
|
||||
msgid "Quit Application"
|
||||
msgstr "Avsluta programmet"
|
||||
|
||||
#: ../extensions/dock/extension.js:424
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Ta bort från favoriter"
|
||||
|
||||
#: ../extensions/dock/extension.js:425
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Lägg till i favoriter"
|
||||
|
||||
82
po/vi.po
Normal file
82
po/vi.po
Normal file
@@ -0,0 +1,82 @@
|
||||
# Vietnamese 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.
|
||||
# Nguyễn Thái Ngọc Duy <pclouds@gmail.com>, 2011.
|
||||
#
|
||||
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-03-26 15:50+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"
|
||||
"Language-Team: Vietnamese <gnomevi-list@lists.sourceforge.net>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
|
||||
#: ../extensions/example/extension.js:11
|
||||
msgid "Hello, world!"
|
||||
msgstr "Xin chào!"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:26
|
||||
msgid "Normal"
|
||||
msgstr "Chuẩn"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:27
|
||||
msgid "Left"
|
||||
msgstr "Trái"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:28
|
||||
msgid "Right"
|
||||
msgstr "Phải"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:29
|
||||
msgid "Upside-down"
|
||||
msgstr "Trên xuống"
|
||||
|
||||
#: ../extensions/xrandr-indicator/extension.js:78
|
||||
msgid "Configure display settings..."
|
||||
msgstr "Cấu hình thiết lập hiển thị..."
|
||||
|
||||
#: ../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 ""
|
||||
"Danh sách chuỗi các id ứng dụng (tên tập tin .desktop), theo sau là dấu hai "
|
||||
"chấm và mã số vùng làm việc"
|
||||
|
||||
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||
msgid "Application and workspace list"
|
||||
msgstr "Danh sách ứng dụng và vùng làm việc"
|
||||
|
||||
#: ../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 "Tên sắc thái, nạp từ ~/.themes/name/gnome-shell"
|
||||
|
||||
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||
msgid "Theme name"
|
||||
msgstr "Tên sắc thái"
|
||||
|
||||
#: ../extensions/dock/extension.js:116
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Thả vào đây để thêm ưa thích"
|
||||
|
||||
#: ../extensions/dock/extension.js:417
|
||||
msgid "New Window"
|
||||
msgstr "Cửa sổ mới"
|
||||
|
||||
#: ../extensions/dock/extension.js:419
|
||||
msgid "Quit Application"
|
||||
msgstr "Thoát ứng dụng"
|
||||
|
||||
#: ../extensions/dock/extension.js:424
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Hết ưa thích"
|
||||
|
||||
#: ../extensions/dock/extension.js:425
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Đánh dấu ưa thích"
|
||||
80
po/zh_CN.po
Normal file
80
po/zh_CN.po
Normal file
@@ -0,0 +1,80 @@
|
||||
# Chinese (China) translation for gnome-shell-extensions.
|
||||
# Copyright (C) 2011 Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||
# Yinghua_Wang <wantinghard@gmail.com>, 2011.
|
||||
#
|
||||
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-03-14 10:28+0000\n"
|
||||
"PO-Revision-Date: 2011-03-18 20:56+0800\n"
|
||||
"Last-Translator: Yinghua Wang <wantinghard@gmail.com>\n"
|
||||
"Language-Team: Chinese (China) <i18n-zh@googlegroups.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ../extensions/example/extension.js:11
|
||||
msgid "Hello, world!"
|
||||
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 "配置显示设置..."
|
||||
|
||||
#: ../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/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/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 "添加收藏"
|
||||
Reference in New Issue
Block a user