Compare commits

...

53 Commits

Author SHA1 Message Date
Giovanni Campagna 9bafd12821 Bump version to 3.1.91
To go along newly released GNOME Shell 3.1.91
2011-09-07 16:04:54 +02:00
Philippe Normand 6d292945b6 gajim: various fixes to make it work again with latest Shell version.
TelepathyClient.Notification was renamed to ChatNotification, a
setChatState method was added in the Source API too and the timestamp
management changed a bit.

https://bugzilla.gnome.org/show_bug.cgi?id=657475
2011-09-07 15:14:02 +02:00
Giovanni Campagna ba269cef57 Bump version to 3.1.90
To go along GNOME Shell 3.1.90
2011-09-05 13:51:41 +02:00
Giovanni Campagna c08f3736e0 alternative-status-menu: update to shell master
The status menu (now called user-menu) was changed a lot recently,
update code to reflect that and make it more similar to the core
menu.
2011-09-05 13:51:40 +02:00
Fran Dieguez 6b5e3a3e85 Updated galician translations 2011-08-30 17:04:32 +02:00
Cheng-Chia Tseng 1ee7b39809 Updated Traditional Chinese translation(Hong Kong and Taiwan) 2011-08-29 19:00:42 +08:00
Giovanni Campagna 8276e6d583 all status area indicators: adapt to gnome-shell API changes
removeFromStatusArea was replaced with a destroy method on the
indicator itself. Cope with that.
2011-08-25 11:28:33 +02:00
Giovanni Campagna dad3c317a7 Merge remote-tracking branch 'origin/master' into extension-live-disable 2011-08-22 23:30:16 +02:00
Giovanni Campagna 23ecaf9b84 windowsNavigator: fix a bunch of typos related to disable
Same as native-window-placement (code was copy-pasted).
2011-08-22 22:52:10 +02:00
Giovanni Campagna 8351799a16 systemMonitor: fix typo
The global box was variable was in fact called _box.
2011-08-22 22:51:44 +02:00
Giovanni Campagna cb50830d26 native-window-placement: fix a bunch of typos related to disable()
This only appeared after testing. Plus we were missing init() also.
2011-08-22 22:50:44 +02:00
Giovanni Campagna 871049b9f2 xrandr-indicator: don't reference a non existing property
I was planning to add global.stage_xwindow, back when this was
written for core. Then this became an extension, but the reference
staid there.
We could use clutter_x11_get_stage_window(), if that wasn't marked
(skip). For now, let's just 0 (it is correct anyway, as we want
the dialog to be system modal)
2011-08-22 22:48:30 +02:00
A S Alam c019806c37 update Punjabi Translation 2011-08-21 09:58:09 +05:30
A S Alam af018b1f4a update Punjabi Translation 2011-08-21 09:56:24 +05:30
Giovanni Campagna 2d82dcbafa example: log initialization, enabling and disabling
This way the example extension can be used for debugging the
extension system.
2011-08-18 19:38:54 +02:00
Giovanni Campagna ba16a8e0d8 dock: update to new gnome-shell API
Main.chrome was replaced by Main.layoutManager, and main() was
replaced by init()
2011-08-18 19:38:10 +02:00
Giovanni Campagna f0a19173c1 apps-menu: fix for live disable
There is no .destroy() method on SystemStatusButton. Instead we
need to destroy manually the icon and the menu.
Also add the missing init() function.
2011-08-18 19:37:14 +02:00
Giovanni Campagna d7e13b4abd alternative-status-menu: fix for live disable
After recreating the menu, we need to update the visibility of
items affected by lockdown, and we need to update the presence
indicator.
2011-08-18 19:35:47 +02:00
Giovanni Campagna 61e62987fb windowsNavigator: port to new extension API
main() has been replaced by init(), enable() and disable()
2011-08-18 16:22:47 +02:00
Giovanni Campagna f8e40f2dde native-window-placement: port to new extension API
main() has been replaced by init(), enable() and disable()
It should disable, but it is likely I overlooked something.
2011-08-18 16:22:45 +02:00
Giovanni Campagna 5f299e109b auto-move-windows: port to new extension API
main() has been replaced by init(), enable() and disable()
I'm not sure it actually disables, it should unless you have more
extensions messing with the same methods.
2011-08-18 16:20:49 +02:00
Giovanni Campagna 5d26fc2e71 Merge branch 'master' into extension-live-disable
Conflicts:
	extensions/apps-menu/extension.js
2011-08-18 15:36:50 +02:00
Giovanni Campagna ab4436e728 various extensions: port to new ShellAppSystem API
shell_app_system_get_app() was renamed to lookup_app(), and
shell_app_activate() was renamed to shell_app_activate_full().
2011-08-17 13:55:27 +02:00
Giovanni Campagna 7e97c1440b apps-menu: adapt to gnome-shell API changes
When libgnome-menus became introspectable, ShellAppSystem was
modified to better adapt to GMenu. Adapt to those changes in the
extension as well.
2011-08-17 13:50:39 +02:00
Fran Dieguez f947f79603 Updated Galician translations 2011-08-16 23:18:10 +02:00
Jordi Mas f9895c4eaa Catalan translation 2011-08-07 14:55:26 +02:00
Giovanni Campagna 1eb245c514 user-theme: port to new extension API
main() has been	replaced by init(), enable() and disable()
2011-08-02 23:35:37 +02:00
Giovanni Campagna 231e1f610a systemMonitor: port to new extension API
main() has been	replaced by init(), enable() and disable()
2011-08-02 23:33:58 +02:00
Giovanni Campagna 765905f5b8 gajim: port to new extension API
main() has been	replaced by init(), enable() and disable()
when disabling, all sources and notifications associated with gajim
contacts are automatically closed
2011-08-02 23:33:25 +02:00
Giovanni Campagna aa38aa1e9e alternative-status-menu: port to new extension API
main() has been	replaced by init(), enable() and disable()
possibly not working, a better infrastructure for monkey patching
would be helpful
2011-08-02 23:32:51 +02:00
Giovanni Campagna 67dc01ea36 example: port to new extension API
main() has been	replaced by init(), enable() and disable()
2011-08-02 23:32:35 +02:00
Giovanni Campagna e4c977146a alternate-tab: port to new extension API
main() has been	replaced by init(), enable() and disable()
at the same time, ensure that all keybindings are correctly taken
(even though alt-tab and alt-shift-tab have the same effect right
now)
2011-08-02 23:31:46 +02:00
Giovanni Campagna 1c4252720d dock: port to new extension API
main() has been replaced by init(), enable() and disable()
not sure if it works, could cause memory leaks if disabling, because
of uncollectable cycles
2011-08-02 23:30:38 +02:00
Giovanni Campagna 6a33fd077d apps-menu, places-menu, drive-menu: port to new extension API
main() has been replaced by init(), enable() and disable()
committing together as changes are very similar in nature
2011-08-02 23:29:27 +02:00
Giovanni Campagna 2732f6d2c2 workspace-indicator: port to new extension API
main() has been replaced by init(), enable() and disable()
2011-08-02 23:28:44 +02:00
Giovanni Campagna 5115abcf54 xrandr-indicator: port to new extension API
main() has been replaced by init(), enable() and disable()
2011-08-02 23:28:22 +02:00
Giovanni Campagna 0597577d08 xrandr-indicator: remove gjs version
Now that we require 3.1.4 shell (which itself requires a new enough
gjs), there is no point in asking for a specific gjs version.
2011-08-01 17:29:43 +02:00
Giovanni Campagna fa4ac23a4d windowNavigator: fix workspace switching
Apparently, clutter_event_get_key_unicode() is not reliable for
numeric keys, and fails above 2. Let's use clutter_event_get_key_symbol()
and fix it.
2011-08-01 17:25:24 +02:00
Giovanni Campagna 1b05d27246 Bump version to 3.1.4
To go along GNOME Shell 3.1.4
2011-08-01 16:01:30 +02:00
Stefano Facchini 30ab8c5841 Tweak the workspace gaps in order to have a constant aspect ratio
https://bugzilla.gnome.org/show_bug.cgi?id=655432
2011-08-01 15:52:25 +02:00
Giovanni Campagna 23613f32c7 Fix mentions of shell_global_get_primary_monitor()
This method has been removed, and replaced by Main.layoutManager.primaryMonitor

Patch sent by Miguel Aguilar <zodiac_es@yahoo.es>
2011-08-01 15:45:40 +02:00
Giovanni Campagna 002b1b5d07 alternate-tab: more alternative implementations
Now alternate-tab shows a dialog on first usage, allowing to choose
between native behavior (app icons from all worskpaces), app icons
from current workspace only and window thumbnails only.

Patch written by Joachim Bargsten <dev@bargsten.org>
2011-08-01 15:38:28 +02:00
Giovanni Campagna 438bfe6b34 workspace-indicator: show a dot next to current workspace
In the menu, next to current workspace, show a dot, following the
pattern of other menus in the shell. Includes more whitespace
changes than I'd like.
2011-07-13 02:02:42 +02:00
Erick Pérez Castellanos 20094e43c5 New extension: workspace-indicator
This extension shows a menu in the status area that indicates
current workspace and allows for quick switching, similar to the
workspace-indicator applet in GNOME 2.
2011-07-13 01:29:03 +02:00
Giovanni Campagna bbc00e5c3d dock: implement autohiding
Now it is possible to configure in GSettings if the dock should be
visible at all time or it should autohide when not needed. If
autohiding, it animates, and the effect is itself configurable, as
well as his duration.
Based on a patch by Miguel Aguilar <zodiac_es@yahoo.es>
2011-07-13 00:55:08 +02:00
Giovanni Campagna dd4ccca358 Fix mentions of shell_global_get_primary_monitor()
This method has been removed from master, and replaced by
Main.layoutManager.primaryMonitor
2011-07-09 16:14:08 +02:00
Alessandro Crismani 9a8704203b AutoMoveWindows: show overview when the last window workspace is closed
Using the auto move window the overview is not shown when the last
window on the last workspace is closed, instead the workspace before is
activated. This differs from the core gnome-shell's behaviour. Fix the
extension to show the ovreview instead of changing workspace when the
last window is closed on the last workspace. The fix is basically merged
from gnome-shell master.

Summarizing, the behaviour is now:
- The last window is closed on any workspace but the last: do nothing
- The last window is closed on the last workspace: show the overview
  instead of switching to the "upper" workspace

https://bugzilla.gnome.org/show_bug.cgi?id=651586
2011-07-09 15:59:45 +02:00
Alessandro Crismani 68629ea7a6 Auto Move Windows: open overview when last window is closed
Using the auto move window the overview is not shown when the last
window on a workspace is closed, instead the workspace before is
activated. Fix the extension to show the ovreview instead of changing
workspace when the last window is closed. The fix is basically merged
from gnome-shell master.

https://bugzilla.gnome.org/show_bug.cgi?id=651586
2011-07-09 15:56:58 +02:00
malcolmlewis 048e29f3ed Fix zero-length warning for stylesheets
rpmlint emits a warning if you install a zero-lenght file. Fix that
by adding a comment in each empty file.

Signed-off-by: malcolmlewis <malcolmlewis@opensuse.org>

https://bugzilla.gnome.org/show_bug.cgi?id=654274
2011-07-09 15:06:01 +02:00
Giovanni Campagna 4c313514ba Fix FSF address in COPYING
Reported in bug 654272
2011-07-09 15:03:17 +02:00
Giovanni Campagna deb70e5d5d systemMonitor: don't require a too new libgtop
libgtop 2.28.3 is the first version to introduce introspection
support, and it is enough for our needs.
2011-07-09 15:00:43 +02:00
Giovanni Campagna e8fd6244b2 Update NEWS
Forgot to update before.
2011-07-09 14:43:26 +02:00
Takeshi AIHANA 6055ad8866 Added Japanese translation. 2011-07-05 00:42:37 +09:00
36 changed files with 2900 additions and 230 deletions
+1 -2
View File
@@ -1,8 +1,7 @@
GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE
Version 2, June 1991 Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc. Copyright (C) 1989, 1991 Free Software Foundation, Inc. <http://fsf.org>
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed. of this license document, but changing it is not allowed.
+44 -7
View File
@@ -1,11 +1,48 @@
3.1.1 (unreleased) 3.1.91
================== ======
* New extensions: drive-menu, places-menu, native-window-placement, * gajim: update for gnome-shell API changes
systemMonitor
* Dock position is configurable 3.1.90
* Compatibility with released Shell was broken, API usage ======
was updated
* All extensions have been ported to the new extension
system (including live enable/disable)
* Updated translations
* xrandr-indicator no longer requires a specific gjs version
* windowsNavigator fixed for more than 2 workspaces
3.1.4
=====
* New extension: a menu for changing workspace (workspace-indicator)
* systemMonitor: lower the requirement on libgtop
* auto-move-windows: open overview when last window on
last workspace is closed
* dock: implement autohiding, with various configurable
effects
* alternate-tab: more configurable implementations available
* native-window-placement: don't rearrange the windows when
the workspace switcher is shown/hidden
* update for gnome-shell 3.1.4 API changes
3.1.3
=====
* New extension: a menu for removable drives (drive-menu
* New extensions: GNOME 2 like menus for apps and places
(apps-menu, places-menu)
* New extension: additional configurability for the window
layout in the overview, including a mechanism similar to
KDE4 (native-window-placement)
* New extension: a message tray indicator for CPU and memory
usage (uses libgtop) (systemMonitor)
* user-theme: fixed resetting theme
* user-theme: support themes installed in /usr/share/themes
* alternative-status-menu: ported to gnome-shell master
* dock: ported to gnome-shell master
* dock: make position configurable (can be left or right)
* Updated translations
3.0.2 3.0.2
===== =====
+8 -7
View File
@@ -1,5 +1,5 @@
AC_PREREQ(2.63) AC_PREREQ(2.63)
AC_INIT([gnome-shell-extensions],[3.1.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&component=extensions]) AC_INIT([gnome-shell-extensions],[3.1.91],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&component=extensions])
AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_AUX_DIR([config]) AC_CONFIG_AUX_DIR([config])
@@ -22,7 +22,7 @@ dnl keep this in alphabetic order
dnl by default, install only extensions that do not change completely the shell experience, dnl by default, install only extensions that do not change completely the shell experience,
dnl that don't require GSettings and that don't require external packages for typelibs dnl that don't require GSettings and that don't require external packages for typelibs
dnl (so basically only menus, status icons, search providers, overview tabs, message tray sources, etc.) dnl (so basically only menus, status icons, search providers, overview tabs, message tray sources, etc.)
DEFAULT_EXTENSIONS="alternative-status-menu apps-menu dock drive-menu gajim places-menu windowsNavigator" DEFAULT_EXTENSIONS="alternative-status-menu apps-menu dock drive-menu gajim places-menu windowsNavigator workspace-indicator"
ALL_EXTENSIONS="$DEFAULT_EXTENSIONS alternate-tab auto-move-windows example native-window-placement systemMonitor user-theme xrandr-indicator" ALL_EXTENSIONS="$DEFAULT_EXTENSIONS alternate-tab auto-move-windows example native-window-placement systemMonitor user-theme xrandr-indicator"
AC_SUBST(ALL_EXTENSIONS, [$ALL_EXTENSIONS]) AC_SUBST(ALL_EXTENSIONS, [$ALL_EXTENSIONS])
AC_ARG_ENABLE([extensions], AC_ARG_ENABLE([extensions],
@@ -40,7 +40,7 @@ ENABLED_EXTENSIONS=
for e in $enable_extensions; do for e in $enable_extensions; do
case $e in case $e in
systemMonitor) systemMonitor)
PKG_CHECK_MODULES(GTOP, libgtop-2.0 >= 2.28.4, PKG_CHECK_MODULES(GTOP, libgtop-2.0 >= 2.28.3,
[ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e"], [ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e"],
[AC_MSG_WARN([libgtop-2.0 not found, disabling systemMonitor])]) [AC_MSG_WARN([libgtop-2.0 not found, disabling systemMonitor])])
;; ;;
@@ -50,7 +50,7 @@ for e in $enable_extensions; do
[AC_MSG_WARN([gnome-desktop-3.0 not found, disabling xrandr-indicator])]) [AC_MSG_WARN([gnome-desktop-3.0 not found, disabling xrandr-indicator])])
;; ;;
dnl keep this in alphabetic order dnl keep this in alphabetic order
alternate-tab|alternative-status-menu|apps-menu|auto-move-windows|dock|drive-menu|example|gajim|native-window-placement|places-menu|user-theme|windowsNavigator) alternate-tab|alternative-status-menu|apps-menu|auto-move-windows|dock|drive-menu|example|gajim|native-window-placement|places-menu|user-theme|windowsNavigator|workspace-indicator)
ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e" ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e"
;; ;;
*) *)
@@ -69,13 +69,14 @@ AC_CONFIG_FILES([
extensions/dock/Makefile extensions/dock/Makefile
extensions/drive-menu/Makefile extensions/drive-menu/Makefile
extensions/example/Makefile extensions/example/Makefile
extensions/systemMonitor/Makefile
extensions/windowsNavigator/Makefile
extensions/gajim/Makefile extensions/gajim/Makefile
extensions/native-window-placement/Makefile extensions/native-window-placement/Makefile
extensions/places-menu/Makefile extensions/places-menu/Makefile
extensions/xrandr-indicator/Makefile extensions/systemMonitor/Makefile
extensions/user-theme/Makefile extensions/user-theme/Makefile
extensions/windowsNavigator/Makefile
extensions/workspace-indicator/Makefile
extensions/xrandr-indicator/Makefile
extensions/Makefile extensions/Makefile
Makefile Makefile
po/Makefile.in po/Makefile.in
+11
View File
@@ -1,3 +1,14 @@
EXTENSION_ID = alternate-tab EXTENSION_ID = alternate-tab
include ../../extension.mk include ../../extension.mk
gschemas_in = org.gnome.shell.extensions.alternate-tab.gschema.xml.in
@INTLTOOL_XML_NOMERGE_RULE@
gsettings_SCHEMAS = $(gschemas_in:.xml.in=.xml)
@GSETTINGS_RULES@
CLEANFILES += $(gschemas_in:.xml.in=.valid) $(gsettings_SCHEMAS)
EXTRA_DIST += $(gschemas_in)
+351 -15
View File
@@ -1,16 +1,324 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */ /* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const Clutter = imports.gi.Clutter; /* most of the code is borrowed from
const Lang = imports.lang; * > js/ui/altTab.js <
const Mainloop = imports.mainloop; * of the gnome-shell source code
const Shell= imports.gi.Shell; */
const St = imports.gi.St;
const AltTab=imports.ui.altTab; const AltTab = imports.ui.altTab;
const Clutter = imports.gi.Clutter;
const Gdk = imports.gi.Gdk;
const Gio = imports.gi.Gio;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Main = imports.ui.main; const Main = imports.ui.main;
const Mainloop = imports.mainloop;
const ModalDialog = imports.ui.modalDialog;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
const WindowManager = imports.ui.windowManager; const WindowManager = imports.ui.windowManager;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const N_ = function(e) { return e };
const POPUP_FADE_TIME = 0.1; // seconds
const SETTINGS_SCHEMA = 'org.gnome.shell.extensions.alternate-tab';
const SETTINGS_BEHAVIOUR_KEY = 'behaviour';
const SETTINGS_FIRST_TIME_KEY = 'first-time';
const MODES = {
native: function() {
Main.wm._startAppSwitcher();
},
all_thumbnails: function() {
new AltTabPopup2();
},
workspace_icons: function() {
new AltTabPopupW().show();
}
};
const MESSAGE = N_("This is the first time you use the Alternate Tab extension. \n\
Please choose your preferred behaviour:\n\
\n\
All & Thumbnails:\n\
This mode presents all applications from all workspaces in one selection \n\
list. Instead of using the application icon of every window, it uses small \n\
thumbnails resembling the window itself. \n\
\n\
Workspace & Icons:\n\
This mode let's you switch between the applications of your current \n\
workspace and gives you additionally the option to switch to the last used \n\
application of your previous workspace. This is always the last symbol in \n\
the list and is segregated by a separator/vertical line if available. \n\
Every window is represented by its application icon. \n\
\n\
Native:\n\
This mode is the native GNOME 3 behaviour or in other words: Clicking \n\
native switches the Alternate Tab extension off. \n\
");
function AltTabPopupW() {
this._init();
}
AltTabPopupW.prototype = {
__proto__ : AltTab.AltTabPopup.prototype,
show : function(backward, switch_group) {
let tracker = Shell.WindowTracker.get_default();
let apps = tracker.get_running_apps ('');
if (!apps.length)
return false;
if (!Main.pushModal(this.actor))
return false;
this._haveModal = true;
this.actor.connect('key-press-event', Lang.bind(this, this._keyPressEvent));
this.actor.connect('key-release-event', Lang.bind(this, this._keyReleaseEvent));
this.actor.connect('button-press-event', Lang.bind(this, this._clickedOutside));
this.actor.connect('scroll-event', Lang.bind(this, this._onScroll));
this._appSwitcher = new WindowSwitcher(apps, this);
this.actor.add_actor(this._appSwitcher.actor);
this._appSwitcher.connect('item-activated', Lang.bind(this, this._appActivated));
this._appSwitcher.connect('item-entered', Lang.bind(this, this._appEntered));
this._appIcons = this._appSwitcher.icons;
// Make the initial selection
if (switch_group) {
if (backward) {
this._select(0, this._appIcons[0].cachedWindows.length - 1);
} else {
if (this._appIcons[0].cachedWindows.length > 1)
this._select(0, 1);
else
this._select(0, 0);
}
} else if (this._appIcons.length == 1) {
this._select(0);
} else if (backward) {
this._select(this._appIcons.length - 1);
} else {
this._select(1);
}
// There's a race condition; if the user released Alt before
// we got the grab, then we won't be notified. (See
// https://bugzilla.gnome.org/show_bug.cgi?id=596695 for
// details.) So we check now. (Have to do this after updating
// selection.)
let [x, y, mods] = global.get_pointer();
if (!(mods & Gdk.ModifierType.MOD1_MASK)) {
this._finish();
return false;
}
this.actor.opacity = 0;
this.actor.show();
Tweener.addTween(this.actor,
{ opacity: 255,
time: POPUP_FADE_TIME,
transition: 'easeOutQuad'
});
return true;
},
_finish : function() {
let app = this._appIcons[this._currentApp];
Main.activateWindow(app.cachedWindows[0]);
this.destroy();
}
};
function AppIcon(app, window) {
this._init(app, window);
}
AppIcon.prototype = {
__proto__ : AltTab.AppIcon.prototype,
_init: function(app, window) {
this.app = app;
this.cachedWindows = [];
this.cachedWindows.push(window);
this.actor = new St.BoxLayout({ style_class: 'alt-tab-app',
vertical: true });
this.icon = null;
this._iconBin = new St.Bin({ x_fill: true, y_fill: true });
this.actor.add(this._iconBin, { x_fill: false, y_fill: false } );
let title = window.get_title();
if (title) {
this.label = new St.Label({ text: title });
let bin = new St.Bin({ x_align: St.Align.MIDDLE });
bin.add_actor(this.label);
this.actor.add(bin);
}
else {
this.label = new St.Label({ text: this.app.get_name() });
this.actor.add(this.label, { x_fill: false });
}
}
};
function WindowSwitcher(apps, altTabPopup) {
this._init(apps, altTabPopup);
}
WindowSwitcher.prototype = {
__proto__ : AltTab.AppSwitcher.prototype,
_init : function(apps, altTabPopup) {
AltTab.SwitcherList.prototype._init.call(this, true);
// Construct the AppIcons, sort by time, add to the popup
let activeWorkspace = global.screen.get_active_workspace();
let workspaceIcons = [];
let otherIcons = [];
for (let i = 0; i < apps.length; i++) {
// Cache the window list now; we don't handle dynamic changes here,
// and we don't want to be continually retrieving it
let windows = apps[i].get_windows();
for(let j = 0; j < windows.length; j++) {
let appIcon = new AppIcon(apps[i], windows[j]);
if (this._isWindowOnWorkspace(windows[j], activeWorkspace)) {
workspaceIcons.push(appIcon);
}
else {
otherIcons.push(appIcon);
}
}
}
workspaceIcons.sort(Lang.bind(this, this._sortAppIcon));
otherIcons.sort(Lang.bind(this, this._sortAppIcon));
if(otherIcons.length > 0) {
let mostRecentOtherIcon = otherIcons[0];
otherIcons = [];
otherIcons.push(mostRecentOtherIcon);
}
this.icons = [];
this._arrows = [];
for (let i = 0; i < workspaceIcons.length; i++)
this._addIcon(workspaceIcons[i]);
if (workspaceIcons.length > 0 && otherIcons.length > 0)
this.addSeparator();
for (let i = 0; i < otherIcons.length; i++)
this._addIcon(otherIcons[i]);
this._curApp = -1;
this._iconSize = 0;
this._altTabPopup = altTabPopup;
this._mouseTimeOutId = 0;
},
_isWindowOnWorkspace: function(w, workspace) {
if (w.get_workspace() == workspace)
return true;
return false;
},
_sortAppIcon : function(appIcon1, appIcon2) {
let t1 = appIcon1.cachedWindows[0].get_user_time();
let t2 = appIcon2.cachedWindows[0].get_user_time();
if (t2 > t1) return 1;
else return -1;
}
};
function AltTabSettingsDialog() {
this._init();
}
AltTabSettingsDialog.prototype = {
__proto__: ModalDialog.ModalDialog.prototype,
_init : function() {
ModalDialog.ModalDialog.prototype._init.call(this, { styleClass: null });
let mainContentBox = new St.BoxLayout({ style_class: 'polkit-dialog-main-layout',
vertical: false });
this.contentLayout.add(mainContentBox,
{ x_fill: true,
y_fill: true });
let messageBox = new St.BoxLayout({ style_class: 'polkit-dialog-message-layout',
vertical: true });
mainContentBox.add(messageBox,
{ y_align: St.Align.START });
this._subjectLabel = new St.Label({ style_class: 'polkit-dialog-headline',
text: _("Alt Tab Behaviour") });
messageBox.add(this._subjectLabel,
{ y_fill: false,
y_align: St.Align.START });
this._descriptionLabel = new St.Label({ style_class: 'polkit-dialog-description',
text: Gettext.gettext(MESSAGE) });
messageBox.add(this._descriptionLabel,
{ y_fill: true,
y_align: St.Align.START });
this.setButtons([
{
label: _("All & Thumbnails"),
action: Lang.bind(this, function() {
this.setBehaviour('all_thumbnails');
this.close();
})
},
{
label: _("Workspace & Icons"),
action: Lang.bind(this, function() {
this.setBehaviour('workspace_icons');
this.close();
})
},
{
label: _("Native"),
action: Lang.bind(this, function() {
this.setBehaviour('native');
this.close();
})
},
{
label: _("Cancel"),
action: Lang.bind(this, function() {
this.close();
}),
key: Clutter.Escape
}
]);
},
setBehaviour: function(behaviour) {
this._settings = new Gio.Settings({ schema: SETTINGS_SCHEMA });
this._settings.set_string(SETTINGS_BEHAVIOUR_KEY, behaviour);
this._settings.set_boolean(SETTINGS_FIRST_TIME_KEY, false);
}
};
function AltTabPopup2() { function AltTabPopup2() {
this._init(); this._init();
} }
@@ -41,6 +349,7 @@ AltTabPopup2.prototype = {
this.show(); this.show();
Main.uiGroup.add_actor(this.actor); Main.uiGroup.add_actor(this.actor);
this._select(0);
}, },
show : function(backward) { show : function(backward) {
@@ -54,9 +363,7 @@ AltTabPopup2.prototype = {
for (let w = windows.length-1; w >= 0; w--) { for (let w = windows.length-1; w >= 0; w--) {
let win = windows[w].get_meta_window(); let win = windows[w].get_meta_window();
if (win.window_type == 0) {
normal_windows.push(win); normal_windows.push(win);
}
} }
normal_windows.sort(Lang.bind(this, this._sortWindows)); normal_windows.sort(Lang.bind(this, this._sortWindows));
@@ -74,8 +381,10 @@ AltTabPopup2.prototype = {
ap1 = new AltTab.AppIcon(apps[i]); ap1 = new AltTab.AppIcon(apps[i]);
} }
} }
ap1.cachedWindows = [win]; if (ap1 != null) {
appIcons.push(ap1); ap1.cachedWindows = [win];
appIcons.push(ap1);
}
} }
if (!windows.length) if (!windows.length)
@@ -93,13 +402,13 @@ AltTabPopup2.prototype = {
this._appSwitcher = new WindowList(windows); this._appSwitcher = new WindowList(windows);
this._appSwitcher._altTabPopup=this; this._appSwitcher._altTabPopup=this;
this._appSwitcher.highlight(0,false);
this.actor.add_actor(this._appSwitcher.actor); this.actor.add_actor(this._appSwitcher.actor);
this._appSwitcher.connect('item-activated', Lang.bind(this, this._appActivated)); this._appSwitcher.connect('item-activated', Lang.bind(this, this._appActivated));
this._appSwitcher.connect('item-entered', Lang.bind(this, this._appEntered)); this._appSwitcher.connect('item-entered', Lang.bind(this, this._appEntered));
this._appIcons = appIcons; this._appIcons = appIcons;
return true return true
}, },
@@ -220,8 +529,10 @@ WindowList.prototype = {
} }
} }
} }
if (ap1 != null) {
ap1.cachedWindows = [win]; ap1.cachedWindows = [win];
this._addIcon(ap1); this._addIcon(ap1);
}
} }
}, },
@@ -230,8 +541,33 @@ WindowList.prototype = {
} }
}; };
function main() { function init(metadata) {
Main.wm.setKeybindingHandler('switch_windows', function() { imports.gettext.bindtextdomain('gnome-shell-extensions', metadata.localedir);
let alpopup = new AltTabPopup2(); }
});
function doAltTab(shellwm, binding, window, backwards) {
let settings = new Gio.Settings({ schema: SETTINGS_SCHEMA });
if(settings.get_boolean(SETTINGS_FIRST_TIME_KEY)) {
new AltTabSettingsDialog().open();
} else {
let behaviour = settings.get_string(SETTINGS_BEHAVIOUR_KEY);
if(behaviour in MODES) {
MODES[behaviour](binding, backwards);
}
}
}
function enable() {
Main.wm.setKeybindingHandler('switch_windows', doAltTab);
Main.wm.setKeybindingHandler('switch_group', doAltTab);
Main.wm.setKeybindingHandler('switch_windows_backward', doAltTab);
Main.wm.setKeybindingHandler('switch_group_backward', doAltTab);
}
function disable() {
Main.wm.setKeybindingHandler('switch_windows', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
Main.wm.setKeybindingHandler('switch_group', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
Main.wm.setKeybindingHandler('switch_windows_backward', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
Main.wm.setKeybindingHandler('switch_group_backward', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
} }
+1 -1
View File
@@ -2,7 +2,7 @@
"uuid": "@uuid@", "uuid": "@uuid@",
"name": "AlternateTab", "name": "AlternateTab",
"description": "A replacement for Alt-Tab, allows to cycle between windows and does not group by application", "description": "A replacement for Alt-Tab, allows to cycle between windows and does not group by application",
"original-author": "thomas.bouffon@gmail.com", "original-authors": [ "jw@bargsten.org", "thomas.bouffon@gmail.com" ],
"shell-version": [ "@shell_current@" ], "shell-version": [ "@shell_current@" ],
"localedir": "@LOCALEDIR@", "localedir": "@LOCALEDIR@",
"url": "@url@" "url": "@url@"
@@ -0,0 +1,19 @@
<schemalist gettext-domain="gnome-shell-extensions">
<enum id="org.gnome.shell.extensions.alternate-tab.BehaviourMode">
<value value="0" nick="native"/>
<value value="1" nick="all_thumbnails"/>
<value value="2" nick="workspace_icons"/>
</enum>
<schema id="org.gnome.shell.extensions.alternate-tab" path="/org/gnome/shell/extensions/alternate-tab/">
<key name="behaviour" enum="org.gnome.shell.extensions.alternate-tab.BehaviourMode">
<default>'native'</default>
<_summary>The alt tab behaviour.</_summary>
<_description>Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and workspace_icons.</_description>
</key>
<key type="b" name="first-time">
<default>true</default>
<_summary>Indicates if Alternate Tab is newly installed</_summary>
<_description>Ask the user for a default behaviour if true.</_description>
</key>
</schema>
</schemalist>
@@ -5,6 +5,7 @@ const St = imports.gi.St;
const Main = imports.ui.main; const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
const GnomeSession = imports.misc.gnomeSession; const GnomeSession = imports.misc.gnomeSession;
const UserMenu = imports.ui.userMenu;
const Gettext = imports.gettext.domain('gnome-shell-extensions'); const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext; const _ = Gettext.gettext;
@@ -36,21 +37,20 @@ function onHibernateActivate(item) {
function createSubMenu() { function createSubMenu() {
let item; let item;
item = new PopupMenu.PopupImageMenuItem(_("Available"), 'user-available'); item = new UserMenu.IMStatusChooserItem();
item.connect('activate', Lang.bind(this, this._setPresenceStatus, GnomeSession.PresenceStatus.AVAILABLE)); item.connect('activate', Lang.bind(this, this._onMyAccountActivate));
this.menu.addMenuItem(item); this.menu.addMenuItem(item);
this._presenceItems[GnomeSession.PresenceStatus.AVAILABLE] = item;
item = new PopupMenu.PopupImageMenuItem(_("Busy"), 'user-busy'); item = new PopupMenu.PopupSwitchMenuItem(_("Do Not Disturb"));
item.connect('activate', Lang.bind(this, this._setPresenceStatus, GnomeSession.PresenceStatus.BUSY)); item.connect('activate', Lang.bind(this, this._updatePresenceStatus));
this.menu.addMenuItem(item); this.menu.addMenuItem(item);
this._presenceItems[GnomeSession.PresenceStatus.BUSY] = item; this._dontDisturbSwitch = item;
item = new PopupMenu.PopupSeparatorMenuItem(); item = new PopupMenu.PopupSeparatorMenuItem();
this.menu.addMenuItem(item); this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("My Account")); item = new PopupMenu.PopupMenuItem(_("Online Accounts"));
item.connect('activate', Lang.bind(this, this._onMyAccountActivate)); item.connect('activate', Lang.bind(this, this._onOnlineAccountsActivate));
this.menu.addMenuItem(item); this.menu.addMenuItem(item);
item = new PopupMenu.PopupMenuItem(_("System Settings")); item = new PopupMenu.PopupMenuItem(_("System Settings"));
@@ -63,6 +63,7 @@ function createSubMenu() {
item = new PopupMenu.PopupMenuItem(_("Lock Screen")); item = new PopupMenu.PopupMenuItem(_("Lock Screen"));
item.connect('activate', Lang.bind(this, this._onLockScreenActivate)); item.connect('activate', Lang.bind(this, this._onLockScreenActivate));
this.menu.addMenuItem(item); this.menu.addMenuItem(item);
this._lockScreenItem = item;
item = new PopupMenu.PopupMenuItem(_("Switch User")); item = new PopupMenu.PopupMenuItem(_("Switch User"));
item.connect('activate', Lang.bind(this, this._onLoginScreenActivate)); item.connect('activate', Lang.bind(this, this._onLoginScreenActivate));
@@ -72,6 +73,7 @@ function createSubMenu() {
item = new PopupMenu.PopupMenuItem(_("Log Out...")); item = new PopupMenu.PopupMenuItem(_("Log Out..."));
item.connect('activate', Lang.bind(this, this._onQuitSessionActivate)); item.connect('activate', Lang.bind(this, this._onQuitSessionActivate));
this.menu.addMenuItem(item); this.menu.addMenuItem(item);
this._logoutItem = item;
item = new PopupMenu.PopupSeparatorMenuItem(); item = new PopupMenu.PopupSeparatorMenuItem();
this.menu.addMenuItem(item); this.menu.addMenuItem(item);
@@ -96,10 +98,28 @@ function createSubMenu() {
} }
// Put your extension initialization code here // Put your extension initialization code here
function main(metadata) { function init(metadata) {
imports.gettext.bindtextdomain('gnome-shell-extensions', metadata.localedir); imports.gettext.bindtextdomain('gnome-shell-extensions', metadata.localedir);
}
function reset(statusMenu) {
statusMenu._updateSwitchUser();
statusMenu._updateLogout();
statusMenu._updateLockScreen();
statusMenu._presence.getStatus(Lang.bind(statusMenu, statusMenu._updatePresenceIcon));
}
function enable() {
let statusMenu = Main.panel._userMenu; let statusMenu = Main.panel._userMenu;
statusMenu.menu.removeAll(); statusMenu.menu.removeAll();
createSubMenu.call(statusMenu); createSubMenu.call(statusMenu);
reset(statusMenu);
}
function disable() {
// not guarranteed to work, if more extensions operate in the same place
let statusMenu = Main.panel._userMenu;
statusMenu.menu.removeAll();
statusMenu._createSubMenu();
reset(statusMenu);
} }
+59 -46
View File
@@ -1,36 +1,38 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */ /* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const St = imports.gi.St; const GMenu = imports.gi.GMenu;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
const PanelMenu = imports.ui.panelMenu;
const Shell = imports.gi.Shell;
const Lang = imports.lang; const Lang = imports.lang;
const ICON_SIZE = 28; const Shell = imports.gi.Shell;
const Gettext = imports.gettext.domain('gnome-shell-extensions'); const St = imports.gi.St;
const _ = Gettext.gettext;
const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const ICON_SIZE = 28;
let appsys = Shell.AppSystem.get_default(); let appsys = Shell.AppSystem.get_default();
function AppMenuItem(appInfo,params) { function AppMenuItem() {
this._init(appInfo,params); this._init.apply(this, arguments);
} }
AppMenuItem.prototype = { AppMenuItem.prototype = {
__proto__: PopupMenu.PopupBaseMenuItem.prototype, __proto__: PopupMenu.PopupBaseMenuItem.prototype,
_init: function (appInfo, params) {
_init: function (app, params) {
PopupMenu.PopupBaseMenuItem.prototype._init.call(this, params); PopupMenu.PopupBaseMenuItem.prototype._init.call(this, params);
let app = appsys.get_app(appInfo.get_id());
this.label = new St.Label({ text: appInfo.get_name() }); this._app = app;
this.label = new St.Label({ text: app.get_name() });
this.addActor(this.label); this.addActor(this.label);
this._icon = app.create_icon_texture(ICON_SIZE); this._icon = app.create_icon_texture(ICON_SIZE);
this.addActor(this._icon,{expand : false}); this.addActor(this._icon, { expand: false });
this._appInfo = appInfo;
}, },
_onButtonReleaseEvent: function (actor, event) {
let id = this._appInfo.get_id(); activate: function (event) {
appsys.get_app(id).activate(-1); this._app.activate_full(-1, event.get_time());
this.activate(event);
PopupMenu.PopupBaseMenuItem.prototype.activate.call(this, event);
} }
}; };
@@ -45,7 +47,7 @@ ApplicationsButton.prototype = {
_init: function() { _init: function() {
PanelMenu.SystemStatusButton.prototype._init.call(this, 'start-here'); PanelMenu.SystemStatusButton.prototype._init.call(this, 'start-here');
this._display(); this._display();
appsys.connect('installed-changed', Lang.bind(this,this.reDisplay)); appsys.connect('installed-changed', Lang.bind(this, this.reDisplay));
}, },
reDisplay : function() { reDisplay : function() {
@@ -57,41 +59,52 @@ ApplicationsButton.prototype = {
this.menu.removeAll(); this.menu.removeAll();
}, },
_display : function() { // Recursively load a GMenuTreeDirectory; we could put this in ShellAppSystem too
let id; // (taken from js/ui/appDisplay.js in core shell)
this.appItems = []; _loadCategory: function(dir, menu) {
this.categories = appsys.get_sections(); var iter = dir.iter();
for ( id = 0; id < this.categories.length; id++) { var nextType;
this.appItems[this.categories[id]] = new PopupMenu.PopupSubMenuMenuItem(this.categories[id]); while ((nextType = iter.next()) != GMenu.TreeItemType.INVALID) {
this.menu.addMenuItem(this.appItems[this.categories[id]]); if (nextType == GMenu.TreeItemType.ENTRY) {
} var entry = iter.get_entry();
this._addSubMenuItems(); var app = appsys.lookup_app_by_tree_entry(entry);
for ( id = 0; id < this.categories.length; id++) { menu.addMenuItem(new AppMenuItem(app));
let item = this.appItems[this.categories[id]]; } else if (nextType == GMenu.TreeItemType.DIRECTORY) {
if(item.menu._getMenuItems().length == 0){ this._loadCategory(iter.get_directory(), appList);
item.actor.hide();
} }
} }
}, },
_addSubMenuItems: function() {
let appInfos = appsys.get_flattened_apps().filter(function(app) { _display : function() {
return !app.get_is_nodisplay(); let tree = appsys.get_tree();
}); let root = tree.get_root_directory();
for (let appid = appInfos.length-1 ; appid >= 0; appid--) {
let appInfo = appInfos[appid]; let iter = root.iter();
let appItem = new AppMenuItem(appInfo); let nextType;
this.appItems[appInfo.get_section()].menu.addMenuItem(appItem); while ((nextType = iter.next()) != GMenu.TreeItemType.INVALID) {
if (nextType == GMenu.TreeItemType.DIRECTORY) {
let dir = iter.get_directory();
let item = new PopupMenu.PopupSubMenuMenuItem(dir.get_name());
this._loadCategory(dir, item.menu);
this.menu.addMenuItem(item);
}
} }
},
_onDestroy: function() {
this._clearAll();
} }
}; };
let appsMenuButton;
function main(metadata) { function enable() {
let appsMenuButton = new ApplicationsButton(); appsMenuButton = new ApplicationsButton();
Main.panel._leftBox.insert_actor(appsMenuButton.actor, 1); Main.panel._leftBox.insert_actor(appsMenuButton.actor, 1);
Main.panel._leftBox.child_set(appsMenuButton.actor, { y_fill : true } ); Main.panel._leftBox.child_set(appsMenuButton.actor, { y_fill : true } );
Main.panel._menus.addMenu(appsMenuButton.menu); Main.panel._menus.addMenu(appsMenuButton.menu);
} }
function disable() {
appsMenuButton.destroy();
}
function init() {
/* do nothing */
}
+58 -5
View File
@@ -5,6 +5,7 @@ const Glib = imports.gi.GLib;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const Lang = imports.lang; const Lang = imports.lang;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const St = imports.gi.St; const St = imports.gi.St;
@@ -24,7 +25,14 @@ WindowMover.prototype = {
let display = global.screen.get_display(); let display = global.screen.get_display();
// Connect after so the handler from ShellWindowTracker has already run // Connect after so the handler from ShellWindowTracker has already run
display.connect_after('window-created', Lang.bind(this, this._findAndMove)); this._windowCreatedId = display.connect_after('window-created', Lang.bind(this, this._findAndMove));
},
destroy: function() {
if (this._windowCreatedId) {
global.screen.get_display().disconnect(this._windowCreatedId);
this._windowCreatedId = 0;
}
}, },
_ensureAtLeastWorkspaces: function(num, window) { _ensureAtLeastWorkspaces: function(num, window) {
@@ -68,13 +76,30 @@ WindowMover.prototype = {
} }
} }
function main(extensionMeta) { let prevCheckWorkspaces;
let winMover;
function init(extensionMeta) {
// do nothing here
}
function enable() {
prevCheckWorkspaces = Main._checkWorkspaces;
Main._checkWorkspaces = function() { Main._checkWorkspaces = function() {
let i; let i;
let emptyWorkspaces = new Array(Main._workspaces.length); let emptyWorkspaces = new Array(Main._workspaces.length);
for (i = 0; i < Main._workspaces.length; i++) for (i = 0; i < Main._workspaces.length; i++) {
emptyWorkspaces[i] = true; let lastRemoved = Main._workspaces[i]._lastRemovedWindow;
if (lastRemoved &&
(lastRemoved.get_window_type() == Meta.WindowType.SPLASHSCREEN ||
lastRemoved.get_window_type() == Meta.WindowType.DIALOG ||
lastRemoved.get_window_type() == Meta.WindowType.MODAL_DIALOG))
emptyWorkspaces[i] = false;
else
emptyWorkspaces[i] = true;
}
let windows = global.get_window_actors(); let windows = global.get_window_actors();
for (i = 0; i < windows.length; i++) { for (i = 0; i < windows.length; i++) {
@@ -93,6 +118,19 @@ function main(extensionMeta) {
emptyWorkspaces.push(false); emptyWorkspaces.push(false);
} }
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
let activeIsLast = activeWorkspaceIndex == global.screen.n_workspaces - 2;
let removingTrailWorkspaces = (emptyWorkspaces[activeWorkspaceIndex] &&
activeIsLast);
// Don't enter the overview when removing multiple empty workspaces at startup
let showOverview = (removingTrailWorkspaces &&
!emptyWorkspaces.every(function(x) { return x; }));
if (removingTrailWorkspaces) {
// "Merge" the empty workspace we are removing with the one at the end
Main.wm.blockAnimations();
}
// Delete other empty workspaces; do it from the end to avoid index changes // Delete other empty workspaces; do it from the end to avoid index changes
for (i = emptyWorkspaces.length - 2; i >= 0; i--) { for (i = emptyWorkspaces.length - 2; i >= 0; i--) {
if (emptyWorkspaces[i]) if (emptyWorkspaces[i])
@@ -100,10 +138,25 @@ function main(extensionMeta) {
else else
break; break;
} }
if (removingTrailWorkspaces) {
global.screen.get_workspace_by_index(global.screen.n_workspaces - 1).activate(global.get_current_time());
Main.wm.unblockAnimations();
if (!Main.overview.visible && showOverview)
Main.overview.show();
}
Main._checkWorkspacesId = 0; Main._checkWorkspacesId = 0;
return false; return false;
}; };
new WindowMover(); winMover = new WindowMover();
}
function disable() {
Main._checkWorkspaces = prevCheckWorkspaces;
winMover.destroy();
} }
+394 -27
View File
@@ -29,6 +29,13 @@ const _ = Gettext.gettext;
const DOCK_SETTINGS_SCHEMA = 'org.gnome.shell.extensions.dock'; const DOCK_SETTINGS_SCHEMA = 'org.gnome.shell.extensions.dock';
const DOCK_POSITION_KEY = 'position'; const DOCK_POSITION_KEY = 'position';
const DOCK_SIZE_KEY = 'size'; const DOCK_SIZE_KEY = 'size';
const DOCK_HIDE_KEY = 'autohide';
const DOCK_EFFECTHIDE_KEY = 'hide-effect';
const DOCK_AUTOHIDE_ANIMATION_TIME_KEY = 'hide-effect-duration';
//hide
//const autohide_animation_time = 0.3;
// Keep enums in sync with GSettings schemas // Keep enums in sync with GSettings schemas
const PositionMode = { const PositionMode = {
@@ -36,10 +43,213 @@ const PositionMode = {
RIGHT: 1 RIGHT: 1
}; };
const AutoHideEffect = {
RESIZE: 0,
RESCALE: 1
};
let position = PositionMode.RIGHT; let position = PositionMode.RIGHT;
let dockicon_size = 48; let dockicon_size = 48;
let hideable = true;
let hideDock = true;
let hideEffect = AutoHideEffect.RESIZE;
let autohide_animation_time = 0.3;
const DND_RAISE_APP_TIMEOUT = 500; const DND_RAISE_APP_TIMEOUT = 500;
/*************************************************************************************/
/**** start resize's Dock functions *****************/
/*************************************************************************************/
function hideDock_size () {
if (hideable){
let monitor = Main.layoutManager.primaryMonitor
let position_x = monitor.x;
let height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
let width = this._item_size + 4*this._spacing;
Tweener.addTween(this,{
_item_size: 1,
time: autohide_animation_time,
transition: 'easeOutQuad',
onUpdate: function () {
height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
width = this._item_size + 4*this._spacing;
switch (position) {
case PositionMode.LEFT:
position_x=monitor.x-2*this._spacing;
break;
case PositionMode.RIGHT:
default:
position_x = monitor.x + (monitor.width-1-this._item_size-2*this._spacing);
}
this.actor.set_position (position_x,monitor.y+(monitor.height-height)/2);
this.actor.set_size(width,height);
},
});
hideDock=true;
}
}
function showDock_size () {
let monitor = Main.layoutManager.primaryMonitor;
let height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
let width = this._item_size + 4*this._spacing;
let position_x = monitor.x;
Tweener.addTween(this,{
_item_size: dockicon_size,
time: autohide_animation_time,
transition: 'easeOutQuad',
onUpdate: function () {
height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
width = this._item_size + 4*this._spacing;
switch (position) {
case PositionMode.LEFT:
position_x=monitor.x-2*this._spacing;
break;
case PositionMode.RIGHT:
default:
position_x=monitor.x + (monitor.width-this._item_size-2*this._spacing);
}
this.actor.set_position (position_x, monitor.y+(monitor.height-height)/2);
this.actor.set_size(width,height);
}
});
hideDock=false;
}
function initShowDock_size () {
this._item_size=1;
this._showDock();
}
function showEffectAddItem_size () {
let primary = Main.layoutManager.primaryMonitor;
let height = (this._nicons)*(this._item_size + this._spacing) + 2*this._spacing;
let width = this._item_size + 4*this._spacing;
Tweener.addTween(this.actor, {
y: primary.y + (primary.height-height)/2,
height: height,
width: width,
time: autohide_animation_time,
transition: 'easeOutQuad'
});
}
/**************************************************************************************/
/**** start rescale's Dock functions *****************/
/**************************************************************************************/
function hideDock_scale () {
this._item_size = dockicon_size;
let monitor = Main.layoutManager.primaryMonitor;
let cornerX = 0;
let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
let width = this._item_size + 4*this._spacing;
switch (position) {
case PositionMode.LEFT:
cornerX=monitor.x;
break;
case PositionMode.RIGHT:
default:
cornerX = monitor.x + monitor.width-1;
}
if (hideable) {
Tweener.addTween(this.actor,{
y: monitor.y + (monitor.height-height)/2,
x: cornerX,
height:height,
width: width,
scale_x: 0.025,
time: autohide_animation_time,
transition: 'easeOutQuad'
});
hideDock=true;
}
}
function showDock_scale () {
this._item_size = dockicon_size;
let monitor = Main.layoutManager.primaryMonitor;
let position_x = monitor.x;
let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
let width = this._item_size + 4*this._spacing;
switch (position) {
case PositionMode.LEFT:
position_x=monitor.x-2*this._spacing;
break;
case PositionMode.RIGHT:
default:
position_x=monitor.x + (monitor.width-this._item_size-2*this._spacing);
}
Tweener.addTween(this.actor, {
y: monitor.y + (monitor.height-height)/2,
x: monitor.x + position_x,
height: height,
width: width,
scale_x: 1,
time: autohide_animation_time,
transition: 'easeOutQuad'
});
hideDock=false;
}
function initShowDock_scale () {
let primary = Main.layoutManager.primaryMonitor;
let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
let width = this._item_size + 4*this._spacing;
this.actor.set_scale (0,0);
this.actor.set_size (width,height);
// set the position of the dock
switch (position) {
case PositionMode.LEFT:
this.actor.x = 0;
// effect of creation of the dock
Tweener.addTween(this.actor, {
x: primary.x-2*this._spacing,
y: primary.y + (primary.height-height)/2,
time: autohide_animation_time * 3,
transition: 'easeOutQuad'
});
break;
case PositionMode.RIGHT:
default:
this.actor.x = primary.width-1;
// effect of creation of the dock
Tweener.addTween(this.actor, {
x: primary.x + primary.width-this._item_size- 2*this._spacing,
y: primary.y + (primary.height-height)/2,
time: autohide_animation_time * 3,
transition: 'easeOutQuad'
});
}
Tweener.addTween(this.actor,{
scale_x: 1,
scale_y: 1,
time: autohide_animation_time * 3,
transition: 'easeOutQuad'
});
hideDock=false;
}
function showEffectAddItem_scale () {
let monitor = Main.layoutManager.primaryMonitor;
let height = this._nicons*(this._item_size + this._spacing) + 2*this._spacing;
let width = this._item_size + 4*this._spacing;
Tweener.addTween(this.actor, {
y: monitor.y + (monitor.height-height)/2,
height: height,
width: width,
time: autohide_animation_time,
transition: 'easeOutQuad'
});
}
function Dock() { function Dock() {
this._init(); this._init();
} }
@@ -56,12 +266,17 @@ Dock.prototype = {
this._settings = new Gio.Settings({ schema: DOCK_SETTINGS_SCHEMA }); this._settings = new Gio.Settings({ schema: DOCK_SETTINGS_SCHEMA });
position = this._settings.get_enum(DOCK_POSITION_KEY); position = this._settings.get_enum(DOCK_POSITION_KEY);
dockicon_size = this._settings.get_int(DOCK_SIZE_KEY); dockicon_size = this._settings.get_int(DOCK_SIZE_KEY);
hideDock = hideable = this._settings.get_boolean(DOCK_HIDE_KEY);
hideEffect = this._settings.get_enum(DOCK_EFFECTHIDE_KEY);
autohide_animation_time = this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY);
//global.log("POSITION: " + position); //global.log("POSITION: " + position);
//global.log("dockicon_size: " + dockicon_size); //global.log("dockicon_size: " + dockicon_size);
this._spacing = 4; this._spacing = 4;
this._item_size = dockicon_size; this._item_size = dockicon_size;
this._nicons = 0;
this._selectFunctionsHide ();
this.actor = new St.BoxLayout({ name: 'dock', vertical: true, reactive: true }); this.actor = new St.BoxLayout({ name: 'dock', vertical: true, reactive: true });
@@ -78,18 +293,145 @@ Dock.prototype = {
this._tracker = Shell.WindowTracker.get_default(); this._tracker = Shell.WindowTracker.get_default();
this._appSystem = Shell.AppSystem.get_default(); this._appSystem = Shell.AppSystem.get_default();
this._appSystem.connect('installed-changed', Lang.bind(this, this._queueRedisplay)); this._installedChangedId = this._appSystem.connect('installed-changed', Lang.bind(this, this._queueRedisplay));
AppFavorites.getAppFavorites().connect('changed', Lang.bind(this, this._queueRedisplay)); this._appFavoritesChangedId = AppFavorites.getAppFavorites().connect('changed', Lang.bind(this, this._queueRedisplay));
this._tracker.connect('app-state-changed', Lang.bind(this, this._queueRedisplay)); this._appStateChangedId = this._tracker.connect('app-state-changed', Lang.bind(this, this._queueRedisplay));
Main.overview.connect('showing', Lang.bind(this, function() { this._overviewShowingId = Main.overview.connect('showing', Lang.bind(this, function() {
this.actor.hide(); this.actor.hide();
})); }));
Main.overview.connect('hidden', Lang.bind(this, function() { this._overviewHiddenId = Main.overview.connect('hidden', Lang.bind(this, function() {
this.actor.show(); this.actor.show();
})); }));
Main.chrome.addActor(this.actor); Main.layoutManager.addChrome(this.actor);
this.actor.lower_bottom(); this.actor.lower_bottom();
//hidden
this._settings.connect('changed::'+DOCK_POSITION_KEY, Lang.bind(this, function (){
if (!this._settings)
return;
let primary = Main.layoutManager.primaryMonitor;
position = this._settings.get_enum(DOCK_POSITION_KEY);
this.actor.y=primary.y;
this._redisplay();
}));
this._settings.connect('changed::'+DOCK_SIZE_KEY, Lang.bind(this, function (){
if (!this._settings)
return;
dockicon_size = this._settings.get_int(DOCK_SIZE_KEY);
this._redisplay();
}));
this._settings.connect('changed::'+DOCK_HIDE_KEY, Lang.bind(this, function (){
if (!this._settings)
return;
hideable = this._settings.get_boolean(DOCK_HIDE_KEY);
if (hideable){
hideDock=false;
this._hideDock();
} else {
hideDock=true;
this._showDock();
}
}));
this._settings.connect('changed::'+DOCK_EFFECTHIDE_KEY, Lang.bind(this, function () {
if (!this._settings)
return;
hideEffect = this._settings.get_enum(DOCK_EFFECTHIDE_KEY);
this.actor.y=0;
switch (hideEffect) {
case AutoHideEffect.RESCALE:
this._item_size=dockicon_size;
break;
case AutoHideEffect.RESIZE:
this.actor.set_scale (1,1);
}
this.actor.disconnect(leave_event);
this.actor.disconnect(enter_event);
this._selectFunctionsHide ();
leave_event = this.actor.connect('leave-event', Lang.bind(this, this._hideDock));
enter_event = this.actor.connect('enter-event', Lang.bind(this, this._showDock));
this._redisplay();
}));
this._settings.connect('changed::'+DOCK_AUTOHIDE_ANIMATION_TIME_KEY, Lang.bind(this,function (){
if (!this._settings)
return;
autohide_animation_time = this._settings.get_double(DOCK_AUTOHIDE_ANIMATION_TIME_KEY);
}));
this.actor.connect('leave-event', Lang.bind(this, this._hideDock));
this.actor.connect('enter-event', Lang.bind(this, this._showDock));
},
destroy: function() {
if (this._installedChangedId) {
this._appSystem.disconnect(this._installedChangedId);
this._installedChangedId = 0;
}
if (this._appFavoritesChangedId) {
AppFavorites.getAppFavorites().disconnect(this._appFavoritesChangedId);
this._appFavoritesChangedId = 0;
}
if (this._appStateChangedId) {
this._tracker.disconnect(this._appStateChangedId);
this._appStateChangedId = 0;
}
if (this._overviewShowingId) {
Main.overview.disconnect(this._overviewShowingId);
this._overviewShowingId = 0;
}
if (this._overviewHiddenId) {
Main.overview.disconnect(this._overviewHiddenId);
this._overviewHiddenId = 0;
}
this.actor.destroy();
// Break reference cycles
this._settings = null;
this._appSystem = null;
this._tracker = null;
},
// fuctions hide
_restoreHideDock: function(){
hideable = this._settings.get_boolean(DOCK_HIDE_KEY);
},
_disableHideDock: function (){
hideable = false;
},
_selectFunctionsHide: function () {
switch (hideEffect) {
case AutoHideEffect.RESCALE:
this._hideDock = hideDock_scale;
this._showDock = showDock_scale;
this._initShowDock = initShowDock_scale;
this._showEffectAddItem = showEffectAddItem_scale;
break;
case AutoHideEffect.RESIZE:
default:
this._hideDock = hideDock_size;
this._showDock = showDock_size;
this._initShowDock = initShowDock_size;
this._showEffectAddItem = showEffectAddItem_size;
}
}, },
_appIdListToHash: function(apps) { _appIdListToHash: function(apps) {
@@ -119,7 +461,7 @@ Dock.prototype = {
let nFavorites = 0; let nFavorites = 0;
for (let id in favorites) { for (let id in favorites) {
let app = favorites[id]; let app = favorites[id];
let display = new DockIcon(app); let display = new DockIcon(app,this);
this.addItem(display.actor); this.addItem(display.actor);
nFavorites++; nFavorites++;
icons++; icons++;
@@ -129,10 +471,12 @@ Dock.prototype = {
let app = running[i]; let app = running[i];
if (app.get_id() in favorites) if (app.get_id() in favorites)
continue; continue;
let display = new DockIcon(app); let display = new DockIcon(app,this);
icons++; icons++;
this.addItem(display.actor); this.addItem(display.actor);
} }
this._nicons=icons;
if (this._placeholderText) { if (this._placeholderText) {
this._placeholderText.destroy(); this._placeholderText.destroy();
this._placeholderText = null; this._placeholderText = null;
@@ -143,19 +487,25 @@ Dock.prototype = {
this.actor.add_actor(this._placeholderText); this.actor.add_actor(this._placeholderText);
} }
let primary = global.get_primary_monitor(); let primary = Main.layoutManager.primaryMonitor;
let height = (icons)*(this._item_size + this._spacing) + 2*this._spacing; let height = (icons)*(this._item_size + this._spacing) + 2*this._spacing;
let width = (icons)*(this._item_size + this._spacing) + 2*this._spacing; let width = this._item_size + 4*this._spacing;
switch (position) { if (this.actor.y != primary.y) {
case PositionMode.LEFT: if (hideable && hideDock) {
this.actor.set_size(this._item_size + 4*this._spacing, height); this._hideDock();
this.actor.set_position(0-this._spacing-4, (primary.height-height)/2); } else {
break; if (dockicon_size == this._item_size) {
case PositionMode.RIGHT: // only add/delete icon
default: this._showEffectAddItem ();
this.actor.set_size(this._item_size + 4*this._spacing, height); } else {
this.actor.set_position(primary.width-this._item_size-this._spacing-2, (primary.height-height)/2); // change size icon
this._showDock ();
}
}
} else {
// effect of creation
this._initShowDock ();
} }
}, },
@@ -216,12 +566,12 @@ Dock.prototype = {
}; };
Signals.addSignalMethods(Dock.prototype); Signals.addSignalMethods(Dock.prototype);
function DockIcon(app) { function DockIcon(app, dock) {
this._init(app); this._init(app, dock);
} }
DockIcon.prototype = { DockIcon.prototype = {
_init : function(app) { _init : function(app, dock) {
this.app = app; this.app = app;
this.actor = new St.Button({ style_class: 'dock-app', this.actor = new St.Button({ style_class: 'dock-app',
button_mask: St.ButtonMask.ONE | St.ButtonMask.TWO, button_mask: St.ButtonMask.ONE | St.ButtonMask.TWO,
@@ -252,6 +602,7 @@ DockIcon.prototype = {
this._stateChangedId = this.app.connect('notify::state', this._stateChangedId = this.app.connect('notify::state',
Lang.bind(this, this._onStateChanged)); Lang.bind(this, this._onStateChanged));
this._onStateChanged(); this._onStateChanged();
this._dock=dock;
}, },
_onDestroy: function() { _onDestroy: function() {
@@ -327,14 +678,21 @@ DockIcon.prototype = {
this._removeMenuTimeout(); this._removeMenuTimeout();
this.actor.fake_release(); this.actor.fake_release();
this._dock._disableHideDock();
if (!this._menu) { if (!this._menu) {
this._menu = new DockIconMenu(this); this._menu = new DockIconMenu(this);
this._menu.connect('activate-window', Lang.bind(this, function (menu, window) { this._menu.connect('activate-window', Lang.bind(this, function (menu, window) {
this.activateWindow(window); this.activateWindow(window);
})); }));
this._menu.connect('popup', Lang.bind(this, function (menu, isPoppedUp) { this._menu.connect('popup', Lang.bind(this, function (menu, isPoppedUp) {
if (!isPoppedUp) if (!isPoppedUp){
//Restore value of autohidedock
this._dock._restoreHideDock();
this._dock._hideDock();
this._onMenuPoppedDown(); this._onMenuPoppedDown();
}
})); }));
this._menuManager.addMenu(this._menu, true); this._menuManager.addMenu(this._menu, true);
@@ -432,7 +790,7 @@ DockIconMenu.prototype = {
})); }));
source.actor.connect('destroy', Lang.bind(this, function () { this.actor.destroy(); })); source.actor.connect('destroy', Lang.bind(this, function () { this.actor.destroy(); }));
Main.chrome.addActor(this.actor); Main.layoutManager.addChrome(this.actor);
}, },
_redisplay: function() { _redisplay: function() {
@@ -494,8 +852,17 @@ DockIconMenu.prototype = {
} }
} }
function main(extensionMeta) { function init(extensionMeta) {
imports.gettext.bindtextdomain('gnome-shell-extensions', extensionMeta.localedir); imports.gettext.bindtextdomain('gnome-shell-extensions', extensionMeta.localedir);
}
let dock = new Dock();
let dock;
function enable() {
dock = new Dock();
}
function disable() {
dock.destroy();
dock = null;
} }
@@ -3,6 +3,10 @@
<value nick='left' value='0'/> <value nick='left' value='0'/>
<value nick='right' value='1'/> <value nick='right' value='1'/>
</enum> </enum>
<enum id='org.gnome.shell.extensions.dock.AutoHideEfect'>
<value nick='resize' value='0'/>
<value nick='rescale' value='1'/>
</enum>
<schema id="org.gnome.shell.extensions.dock" path="/org/gnome/shell/extensions/dock/"> <schema id="org.gnome.shell.extensions.dock" path="/org/gnome/shell/extensions/dock/">
<key name="position" enum="org.gnome.shell.extensions.dock.PositionMode"> <key name="position" enum="org.gnome.shell.extensions.dock.PositionMode">
@@ -15,5 +19,19 @@
<_summary>Icon size</_summary> <_summary>Icon size</_summary>
<_description>Sets icon size of the dock.</_description> <_description>Sets icon size of the dock.</_description>
</key> </key>
<key name="autohide" type="b">
<default>true</default>
<_summary>Enable/disable autohide</_summary>
</key>
<key name="hide-effect" enum="org.gnome.shell.extensions.dock.AutoHideEfect">
<default>'resize'</default>
<_summary>Autohide effect</_summary>
<_description>Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale'</_description>
</key>
<key name="hide-effect-duration" type="d">
<default>0.3</default>
<_summary>Autohide duration</_summary>
<_description>Sets the time duration of the autohide effect.</_description>
</key>
</schema> </schema>
</schemalist> </schemalist>
+14 -6
View File
@@ -68,8 +68,8 @@ DriveMenu.prototype = {
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addAction(_("Open file manager"), function(event) { this.menu.addAction(_("Open file manager"), function(event) {
let appSystem = Shell.AppSystem.get_default(); let appSystem = Shell.AppSystem.get_default();
let app = appSystem.get_app('nautilus.desktop'); let app = appSystem.lookup_app('nautilus.desktop');
app.activate(-1); app.activate_full(-1, event.get_time());
}); });
}, },
@@ -90,9 +90,17 @@ DriveMenu.prototype = {
} }
// Put your extension initialization code here // Put your extension initialization code here
function main(metadata) { function init(metadata) {
imports.gettext.bindtextdomain('gnome-shell-extensions', metadata.localedir); imports.gettext.bindtextdomain('gnome-shell-extensions', metadata.localedir);
}
Panel.STANDARD_TRAY_ICON_ORDER.unshift('drive-menu');
Panel.STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['drive-menu'] = DriveMenu; let _indicator;
function enable() {
_indicator = new DriveMenu;
Main.panel.addToStatusArea('drive-menu', _indicator);
}
function disable() {
_indicator.destroy();
} }
+20 -3
View File
@@ -9,16 +9,33 @@ const Main = imports.ui.main;
function _showHello() { 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(); let monitor = Main.layoutManager.primaryMonitor;
global.stage.add_actor(text); global.stage.add_actor(text);
text.set_position(Math.floor (monitor.width / 2 - text.width / 2), Math.floor(monitor.height / 2 - text.height / 2)); text.set_position(Math.floor (monitor.width / 2 - text.width / 2), Math.floor(monitor.height / 2 - text.height / 2));
Mainloop.timeout_add(3000, function () { text.destroy(); }); Mainloop.timeout_add(3000, function () { text.destroy(); });
} }
// Put your extension initialization code here // Put your extension initialization code here
function main(metadata) { function init(metadata) {
log ('Example extension initalized');
imports.gettext.bindtextdomain('gnome-shell-extensions', metadata.localedir); imports.gettext.bindtextdomain('gnome-shell-extensions', metadata.localedir);
}
let signalId;
function enable() {
log ('Example extension enabled');
Main.panel.actor.reactive = true; Main.panel.actor.reactive = true;
Main.panel.actor.connect('button-release-event', _showHello); signalId = Main.panel.actor.connect('button-release-event', _showHello);
}
function disable() {
log ('Example extension disabled');
if (signalId) {
Main.panel.actor.disconnect(signalId);
signalId = 0;
}
} }
+38 -11
View File
@@ -2,6 +2,7 @@
const DBus = imports.dbus; const DBus = imports.dbus;
const Gettext = imports.gettext.domain('gnome-shell'); const Gettext = imports.gettext.domain('gnome-shell');
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Lang = imports.lang; const Lang = imports.lang;
const Signals = imports.signals; const Signals = imports.signals;
@@ -55,6 +56,8 @@ function decode64(input) {
} }
function wrappedText(text, sender, timestamp, direction) { function wrappedText(text, sender, timestamp, direction) {
if (!timestamp)
timestamp = (Date.now() / 1000);
return { return {
messageType: Tp.ChannelTextMessageType.NORMAL, messageType: Tp.ChannelTextMessageType.NORMAL,
text: text, text: text,
@@ -81,7 +84,7 @@ Source.prototype = {
this._iconUri = null; this._iconUri = null;
this._presence = "online"; this._presence = "online";
this._notification = new TelepathyClient.Notification(this); this._notification = new TelepathyClient.ChatNotification(this);
this._notification.setUrgency(MessageTray.Urgency.HIGH); this._notification.setUrgency(MessageTray.Urgency.HIGH);
let jid = author.split('/')[0]; let jid = author.split('/')[0];
@@ -160,8 +163,8 @@ Source.prototype = {
} }
} }
let app = Shell.AppSystem.get_default().get_app('gajim.desktop'); let app = Shell.AppSystem.get_default().lookup_app('gajim.desktop');
app.activate_window(null, global.get_current_time()); app.activate(-1);
}, },
_onChatState: function(emitter, data) { _onChatState: function(emitter, data) {
@@ -170,6 +173,10 @@ Source.prototype = {
this.destroy(); this.destroy();
}, },
setChatState: function(state) {
// Gajim DBUS API doesn't support sending chatstate yet.
},
_messageReceived: function(emitter, data) { _messageReceived: function(emitter, data) {
let author = data[1][0]; let author = data[1][0];
let text = data[1][1]; let text = data[1][1];
@@ -181,10 +188,11 @@ Source.prototype = {
}, },
_messageSent: function(emitter, data) { _messageSent: function(emitter, data) {
let recipient = data[1][0];
let text = data[1][1]; let text = data[1][1];
let chatstate = data[1][3]; let chatstate = data[1][3];
if (text) { if (text && (recipient == this._author)) {
let message = wrappedText(text, this._author, null, TelepathyClient.NotificationDirection.SENT); let message = wrappedText(text, this._author, null, TelepathyClient.NotificationDirection.SENT);
this._notification.appendMessage(message, false); this._notification.appendMessage(message, false);
} else if (chatstate == 'gone') } else if (chatstate == 'gone')
@@ -263,17 +271,36 @@ function GajimClient() {
GajimClient.prototype = { GajimClient.prototype = {
_init: function() { _init: function() {
this._sources = {}; 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() { proxy : function() {
return this._proxy; return this._proxy;
}, },
enable: function() {
this._cacheDir = GLib.get_user_cache_dir() + '/gnome-shell/gajim-avatars';
let dir = Gio.file_new_for_path(this._cacheDir);
if (!dir.query_exists(null)) {
GLib.mkdir_with_parents(this._cacheDir, 0x1c0); // 0x1c0 = octal 0700
}
this._proxy = new Gajim(DBus.session, 'org.gajim.dbus', '/org/gajim/dbus/RemoteObject');
this._newMessageId = this._proxy.connect('NewMessage', Lang.bind(this, this._messageReceived));
},
disable: function() {
if (this._newMessageId) {
this._proxy.disconnect(this._newMessageId);
this._newMessageId = 0;
}
this._proxy = null;
for (let id in this._sources)
this._sources[id].destroy();
this._sources = { };
},
_messageReceived : function(emitter, data) { _messageReceived : function(emitter, data) {
let author = data[1][0]; let author = data[1][0];
let message = data[1][1]; let message = data[1][1];
@@ -308,6 +335,6 @@ GajimClient.prototype = {
}; };
function main() { function init() {
let client = new GajimClient(); return new GajimClient();
} }
+1
View File
@@ -0,0 +1 @@
/* none used */
+52 -13
View File
@@ -44,8 +44,7 @@ function injectToFunction(parent, name, func) {
return ret; return ret;
} }
} }
const WORKSPACE_BORDER_GAP = 10; // gap between the workspace area and the workspace selector
function Rect(x, y, width, height) { function Rect(x, y, width, height) {
[this.x, this.y, this.width, this.height] = arguments; [this.x, this.y, this.width, this.height] = arguments;
@@ -106,20 +105,31 @@ Rect.prototype = {
} }
}; };
let winInjections, workspaceInjections, connectedSignals;
function resetState() {
winInjections = { };
workspaceInjections = { };
workViewInjections = { };
connectedSignals = [ ];
}
function enable() {
resetState();
// Put your extension initialization code here
function main() {
let settings = new Gio.Settings({ schema: 'org.gnome.shell.extensions.native-window-placement' }); let settings = new Gio.Settings({ schema: 'org.gnome.shell.extensions.native-window-placement' });
let placementStrategy = settings.get_enum('strategy'); let placementStrategy = settings.get_enum('strategy');
settings.connect('changed::strategy', function() { let signalId = settings.connect('changed::strategy', function() {
placementStrategy = settings.get_enum('strategy'); placementStrategy = settings.get_enum('strategy');
// we don't update immediately, we wait for a relayout // we don't update immediately, we wait for a relayout
// (and hope for the best) // (and hope for the best)
}); });
connectedSignals.push({ obj: settings, id: signalId });
let useMoreScreen = settings.get_boolean('use-more-screen'); let useMoreScreen = settings.get_boolean('use-more-screen');
settings.connect('changed::use-more-screen', function() { signalId = settings.connect('changed::use-more-screen', function() {
useMoreScreen = settings.get_boolean('use-more-screen'); useMoreScreen = settings.get_boolean('use-more-screen');
}); });
connectedSignals.push({ obj: settings, id: signalId });
/** /**
* _calculateWindowTransformationsNatural: * _calculateWindowTransformationsNatural:
@@ -137,8 +147,10 @@ function main() {
return win2.metaWindow.get_stable_sequence() - win1.metaWindow.get_stable_sequence(); return win2.metaWindow.get_stable_sequence() - win1.metaWindow.get_stable_sequence();
}); });
// 2 * 10 px gaps at the border // Put a gap on the right edge of the workspace to separe it from the workspace selector
let area = new Rect(this._x + 10, this._y + 10, this._width - 20, this._height - 20); let x_gap = WORKSPACE_BORDER_GAP;
let y_gap = WORKSPACE_BORDER_GAP * this._height / this._width
let area = new Rect(this._x, this._y, this._width - x_gap, this._height - y_gap);
let bounds = area.copy(); let bounds = area.copy();
@@ -254,16 +266,14 @@ function main() {
} while (overlap && loop_counter < WINDOW_PLACEMENT_NATURAL_MAX_TRANSLATIONS); } while (overlap && loop_counter < WINDOW_PLACEMENT_NATURAL_MAX_TRANSLATIONS);
// Work out scaling by getting the most top-left and most bottom-right window coords. // Work out scaling by getting the most top-left and most bottom-right window coords.
// The 20's and 10's are so that the windows don't touch the edge of the screen.
// Most 20's and 10's are already calculated into area now.
let scale; let scale;
scale = Math.min(area.width / bounds.width, scale = Math.min(area.width / bounds.width,
area.height / bounds.height, area.height / bounds.height,
1.0); 1.0);
// Make bounding rect fill the screen size for later steps // Make bounding rect fill the screen size for later steps
bounds.x = bounds.x - (area.width - bounds.width * scale) / 2 - 10 / scale; bounds.x = bounds.x - (area.width - bounds.width * scale) / 2;
bounds.y = bounds.y - (area.height - bounds.height * scale) / 2 - 10 / scale; bounds.y = bounds.y - (area.height - bounds.height * scale) / 2;
bounds.width = area.width / scale; bounds.width = area.width / scale;
bounds.height = area.height / scale; bounds.height = area.height / scale;
@@ -289,7 +299,8 @@ function main() {
} }
return [clones, targets]; return [clones, targets];
}, }
workspaceInjections['_calculateWindowTransformationsNatural'] = undefined;
/** /**
* _calculateWindowTransformationsGrid: * _calculateWindowTransformationsGrid:
@@ -308,6 +319,7 @@ function main() {
return [clones, targets]; return [clones, targets];
} }
workspaceInjections['_calculateWindowTransformationsGrid'] = undefined;
/** /**
* positionWindows: * positionWindows:
@@ -315,6 +327,7 @@ function main() {
* INITIAL - this is the initial positioning of the windows. * INITIAL - this is the initial positioning of the windows.
* ANIMATE - Indicates that we need animate changing position. * ANIMATE - Indicates that we need animate changing position.
*/ */
workspaceInjections['positionWindows'] = Workspace.Workspace.prototype.positionWindows;
Workspace.Workspace.prototype.positionWindows = function(flags) { Workspace.Workspace.prototype.positionWindows = function(flags) {
if (this._repositionWindowsId > 0) { if (this._repositionWindowsId > 0) {
Mainloop.source_remove(this._repositionWindowsId); Mainloop.source_remove(this._repositionWindowsId);
@@ -403,6 +416,7 @@ function main() {
/// position window titles on top of windows in overlay //// /// position window titles on top of windows in overlay ////
if (settings.get_boolean('window-captions-on-top')) { if (settings.get_boolean('window-captions-on-top')) {
winInjections['_init'] = Workspace.WindowOverlay.prototype._init;
Workspace.WindowOverlay.prototype._init = function(windowClone, parentActor) { Workspace.WindowOverlay.prototype._init = function(windowClone, parentActor) {
let metaWindow = windowClone.metaWindow; let metaWindow = windowClone.metaWindow;
@@ -450,11 +464,13 @@ function main() {
this._onStyleChanged(); this._onStyleChanged();
}, },
winInjections['chromeHeights'] = Workspace.WindowOverlay.prototype.chromeHeights;
Workspace.WindowOverlay.prototype.chromeHeights = function () { Workspace.WindowOverlay.prototype.chromeHeights = function () {
return [Math.max( this.closeButton.height - this.closeButton._overlap, this.title.height - this.title._overlap), return [Math.max( this.closeButton.height - this.closeButton._overlap, this.title.height - this.title._overlap),
0]; 0];
}, },
winInjections['updatePositions'] = Workspace.WindowOverlay.prototype.updatePositions;
Workspace.WindowOverlay.prototype.updatePositions = function(cloneX, cloneY, cloneWidth, cloneHeight) { Workspace.WindowOverlay.prototype.updatePositions = function(cloneX, cloneY, cloneWidth, cloneHeight) {
let button = this.closeButton; let button = this.closeButton;
let title = this.title; let title = this.title;
@@ -477,6 +493,7 @@ function main() {
title.set_position(Math.floor(titleX), Math.floor(titleY)); title.set_position(Math.floor(titleX), Math.floor(titleY));
}, },
winInjections['_onStyleChanged'] = Workspace.WindowOverlay.prototype._onStyleChanged;
Workspace.WindowOverlay.prototype._onStyleChanged = function() { Workspace.WindowOverlay.prototype._onStyleChanged = function() {
let titleNode = this.title.get_theme_node(); let titleNode = this.title.get_theme_node();
this.title._spacing = titleNode.get_length('-shell-caption-spacing'); this.title._spacing = titleNode.get_length('-shell-caption-spacing');
@@ -490,4 +507,26 @@ function main() {
} }
} }
function removeInjection(object, injection, name) {
if (injection[name] === undefined)
delete object[name];
else
object[name] = injection[name];
}
function disable() {
for (i in workspaceInjections)
removeInjection(Workspace.Workspace.prototype, workspaceInjections, i);
for (i in winInjections)
removeInjection(Workspace.WindowOverlay.prototype, winInjections, i);
for each (i in connectedSignals)
i.obj.disconnect(i.id);
global.stage.queue_relayout();
resetState();
}
function init() {
/* do nothing */
}
+12 -4
View File
@@ -113,9 +113,17 @@ PlacesMenu.prototype = {
}; };
function main(metadata) { function init(metadata) {
imports.gettext.bindtextdomain('gnome-shell-extensions', metadata.localedir); imports.gettext.bindtextdomain('gnome-shell-extensions', metadata.localedir);
}
Panel.STANDARD_TRAY_ICON_ORDER.unshift('places-menu');
Panel.STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['places-menu'] = PlacesMenu; let _indicator;
function enable() {
_indicator = new PlacesMenu;
Main.panel.addToStatusArea('places-menu', _indicator);
}
function disable() {
_indicator.destroy();
} }
+32 -7
View File
@@ -9,6 +9,10 @@ const Shell = imports.gi.Shell;
const Main = imports.ui.main; const Main = imports.ui.main;
let _cpuIndicator;
let _memIndicator;
let _box;
function Indicator() { function Indicator() {
this._init(); this._init();
} }
@@ -20,17 +24,26 @@ Indicator.prototype = {
reactive: true}); reactive: true});
this.actor.connect('repaint', Lang.bind(this, this._draw)); this.actor.connect('repaint', Lang.bind(this, this._draw));
this.actor.connect('button-press-event', function() { this.actor.connect('button-press-event', function() {
let app = Shell.AppSystem.get_default().get_app("gnome-system-monitor.desktop"); let app = Shell.AppSystem.get_default().lookup_app('gnome-system-monitor.desktop');
app.open_new_window(-1); app.open_new_window(-1);
}); });
Mainloop.timeout_add(250, Lang.bind(this, function () { this._timeoutId = Mainloop.timeout_add(250, Lang.bind(this, function () {
this._updateValues(); this._updateValues();
this.actor.queue_repaint(); this.actor.queue_repaint();
return true; return true;
})); }));
}, },
destroy: function() {
if (this._timeoutId) {
Mainloop.source_remove(this._timeoutId);
this._timeoutId = 0;
}
this.actor.destroy();
},
_initValues: function() { _initValues: function() {
}, },
@@ -125,9 +138,21 @@ MemoryIndicator.prototype = {
} }
}; };
function main() { function init() {
let box = new St.BoxLayout({ style_class: 'extension-systemMonitor-container' }); // nothing to do here
box.add((new CpuIndicator()).actor); }
box.add((new MemoryIndicator()).actor);
Main.messageTray.actor.add_actor(box); function enable() {
_cpuIndicator = new CpuIndicator();
_memIndicator = new MemoryIndicator();
_box = new St.BoxLayout({ style_class: 'extension-systemMonitor-container' });
_box.add(_cpuIndicator.actor);
_box.add(_memIndicator.actor);
Main.messageTray.actor.add_actor(_box);
}
function disable() {
_cpuIndicator.destroy();
_memIndicator.destroy();
_box.destroy();
} }
+18 -3
View File
@@ -15,11 +15,26 @@ function ThemeManager() {
ThemeManager.prototype = { ThemeManager.prototype = {
_init: function() { _init: function() {
},
enable: function() {
this._settings = new Gio.Settings({ schema: SETTINGS_SCHEMA }); this._settings = new Gio.Settings({ schema: SETTINGS_SCHEMA });
this._settings.connect('changed::'+SETTINGS_KEY, Lang.bind(this, this._changeTheme)); this._changedId = this._settings.connect('changed::'+SETTINGS_KEY, Lang.bind(this, this._changeTheme));
this._changeTheme(); this._changeTheme();
}, },
disable: function() {
if (this._changedId) {
this._settings.disconnect(this._changedId);
this._changedId = 0;
}
this._settings = null;
Main.setThemeStylesheet(null);
Main.loadTheme();
},
_changeTheme: function() { _changeTheme: function() {
let _stylesheet = null; let _stylesheet = null;
let _themeName = this._settings.get_string(SETTINGS_KEY); let _themeName = this._settings.get_string(SETTINGS_KEY);
@@ -52,6 +67,6 @@ ThemeManager.prototype = {
} }
function main(metadata) { function init(metadata) {
new ThemeManager(); return new ThemeManager();
} }
+1
View File
@@ -0,0 +1 @@
/* none used */
+97 -21
View File
@@ -17,9 +17,22 @@ function injectToFunction(parent, name, func) {
ret = func.apply(this, arguments); ret = func.apply(this, arguments);
return ret; return ret;
} }
return origin;
} }
function main() { let winInjections, workspaceInjections, workViewInjections, createdActors, connectedSignals;
function resetState() {
winInjections = { };
workspaceInjections = { };
workViewInjections = { };
createdActors = [ ];
connectedSignals = [ ];
}
function enable() {
resetState();
Workspace.WindowOverlay.prototype.setId = function(id) { Workspace.WindowOverlay.prototype.setId = function(id) {
if (this._text.visible && id == null) if (this._text.visible && id == null)
this._text.hide(); this._text.hide();
@@ -27,9 +40,13 @@ function main() {
if (id != null) if (id != null)
this._text.text = this._id.toString(); this._text.text = this._id.toString();
} }
winInjections['setId'] = undefined;
Workspace.WindowOverlay.prototype.getId = function() { Workspace.WindowOverlay.prototype.getId = function() {
return this._id; return this._id;
} }
winInjections['getId'] = undefined;
Workspace.WindowOverlay.prototype.showTooltip = function() { Workspace.WindowOverlay.prototype.showTooltip = function() {
if (this._id === null) if (this._id === null)
return; return;
@@ -37,10 +54,13 @@ function main() {
this._text.show(); this._text.show();
this._text.text = this._id.toString(); this._text.text = this._id.toString();
} }
winInjections['showTooltip'] = undefined;
Workspace.WindowOverlay.prototype.hideTooltip = function() { Workspace.WindowOverlay.prototype.hideTooltip = function() {
if (this._text.visible) if (this._text.visible)
this._text.hide(); this._text.hide();
} }
winInjections['hideTooltip'] = undefined;
Workspace.Workspace.prototype.showTooltip = function() { Workspace.Workspace.prototype.showTooltip = function() {
if (this._tip == null) if (this._tip == null)
@@ -51,6 +71,8 @@ function main() {
this._tip.show(); this._tip.show();
this._tip.raise_top(); this._tip.raise_top();
} }
workspaceInjections['showTooltip'] = undefined;
Workspace.Workspace.prototype.hideTooltip = function() { Workspace.Workspace.prototype.hideTooltip = function() {
if (this._tip == null) if (this._tip == null)
return; return;
@@ -58,6 +80,8 @@ function main() {
return; return;
this._tip.hide(); this._tip.hide();
} }
workspaceInjections['hideTooltip'] = undefined;
Workspace.Workspace.prototype.getWindowWithTooltip = function(id) { Workspace.Workspace.prototype.getWindowWithTooltip = function(id) {
for (let i in this._windowOverlays) { for (let i in this._windowOverlays) {
if (this._windowOverlays[i] == null) if (this._windowOverlays[i] == null)
@@ -67,18 +91,23 @@ function main() {
} }
return null; return null;
} }
workspaceInjections['getWindowWithTooltip'] = undefined;
Workspace.Workspace.prototype.showWindowsTooltips = function() { Workspace.Workspace.prototype.showWindowsTooltips = function() {
for (let i in this._windowOverlays) { for (let i in this._windowOverlays) {
if (this._windowOverlays[i] != null) if (this._windowOverlays[i] != null)
this._windowOverlays[i].showTooltip(); this._windowOverlays[i].showTooltip();
} }
} }
workspaceInjections['showWindowsTooltips'] = undefined;
Workspace.Workspace.prototype.hideWindowsTooltips = function() { Workspace.Workspace.prototype.hideWindowsTooltips = function() {
for (let i in this._windowOverlays) { for (let i in this._windowOverlays) {
if (this._windowOverlays[i] != null) if (this._windowOverlays[i] != null)
this._windowOverlays[i].hideTooltip(); this._windowOverlays[i].hideTooltip();
} }
} }
workspaceInjections['hideWindowsTooltips'] = undefined;
WorkspacesView.WorkspacesView.prototype._hideTooltips = function() { WorkspacesView.WorkspacesView.prototype._hideTooltips = function() {
if (global.stage.get_key_focus() == global.stage) if (global.stage.get_key_focus() == global.stage)
@@ -87,6 +116,7 @@ function main() {
for (let i = 0; i < this._workspaces.length; i++) for (let i = 0; i < this._workspaces.length; i++)
this._workspaces[i].hideWindowsTooltips(); this._workspaces[i].hideWindowsTooltips();
} }
workViewInjections['_hideTooltips'] = undefined;
WorkspacesView.WorkspacesView.prototype._hideWorkspacesTooltips = function() { WorkspacesView.WorkspacesView.prototype._hideWorkspacesTooltips = function() {
global.stage.set_key_focus(this._prevFocusActor); global.stage.set_key_focus(this._prevFocusActor);
@@ -94,15 +124,18 @@ function main() {
for (let i = 0; i < this._workspaces.length; i++) for (let i = 0; i < this._workspaces.length; i++)
this._workspaces[i].hideTooltip(); this._workspaces[i].hideTooltip();
} }
workViewInjections['_hideWorkspacesTooltips'] = undefined;
WorkspacesView.WorkspacesView.prototype._onKeyRelease = function(s, o) { WorkspacesView.WorkspacesView.prototype._onKeyRelease = function(s, o) {
if (this._pickWindow && o.get_key_symbol() == Clutter.Alt_L) if (this._pickWindow && o.get_key_symbol() == Clutter.KEY_Alt_L)
this._hideTooltips(); this._hideTooltips();
if (this._pickWorkspace && o.get_key_symbol() == Clutter.Control_L) if (this._pickWorkspace && o.get_key_symbol() == Clutter.KEY_Control_L)
this._hideWorkspacesTooltips(); this._hideWorkspacesTooltips();
} }
workViewInjections['_onKeyRelease'] = undefined;
WorkspacesView.WorkspacesView.prototype._onKeyPress = function(s, o) { WorkspacesView.WorkspacesView.prototype._onKeyPress = function(s, o) {
if (o.get_key_symbol() == Clutter.Alt_L && !this._pickWorkspace) { if (o.get_key_symbol() == Clutter.KEY_Alt_L && !this._pickWorkspace) {
this._prevFocusActor = global.stage.get_key_focus(); this._prevFocusActor = global.stage.get_key_focus();
global.stage.set_key_focus(null); global.stage.set_key_focus(null);
this._active = global.screen.get_active_workspace_index(); this._active = global.screen.get_active_workspace_index();
@@ -110,7 +143,7 @@ function main() {
this._workspaces[global.screen.get_active_workspace_index()].showWindowsTooltips(); this._workspaces[global.screen.get_active_workspace_index()].showWindowsTooltips();
return true; return true;
} }
if (o.get_key_symbol() == Clutter.Control_L && !this._pickWindow) { if (o.get_key_symbol() == Clutter.KEY_Control_L && !this._pickWindow) {
this._prevFocusActor = global.stage.get_key_focus(); this._prevFocusActor = global.stage.get_key_focus();
global.stage.set_key_focus(null); global.stage.set_key_focus(null);
this._pickWorkspace = true; this._pickWorkspace = true;
@@ -127,57 +160,68 @@ function main() {
this._hideTooltips(); this._hideTooltips();
return false; return false;
} }
let c = o.get_key_unicode();
if (c > '9'.charCodeAt(0) || c < '0'.charCodeAt(0)) { let c = o.get_key_symbol() - Clutter.KEY_0;
if (c > 9 || c <= 0) {
this._hideTooltips(); this._hideTooltips();
return false; return false;
} }
let win = this._workspaces[this._active].getWindowWithTooltip(c - '0'.charCodeAt(0));
let win = this._workspaces[this._active].getWindowWithTooltip(c);
this._hideTooltips(); this._hideTooltips();
if (win) if (win)
Main.activateWindow(win, global.get_current_time()); Main.activateWindow(win, global.get_current_time());
return true; return true;
} }
if (this._pickWorkspace) { if (this._pickWorkspace) {
let c = o.get_key_unicode(); let c = o.get_key_symbol() - Clutter.KEY_0;
if (c > '9'.charCodeAt(0) || c < '0'.charCodeAt(0)) { if (c > 9 || c <= 0) {
this._hideWorkspacesTooltips(); this._hideWorkspacesTooltips();
return false; return false;
} }
let workspace = this._workspaces[c - '0'.charCodeAt(0) - 1];
let workspace = this._workspaces[c - 1];
if (workspace !== undefined) if (workspace !== undefined)
workspace.metaWorkspace.activate(global.get_current_time()); workspace.metaWorkspace.activate(global.get_current_time());
this._hideWorkspacesTooltips(); this._hideWorkspacesTooltips();
return true; return true;
} }
return false; return false;
} }
workViewInjections['_onKeyPress'] = undefined;
injectToFunction(Workspace.WindowOverlay.prototype, '_init', function(windowClone, parentActor) { winInjections['_init'] = injectToFunction(Workspace.WindowOverlay.prototype, '_init', function(windowClone, parentActor) {
this._id = null; this._id = null;
this._text = new St.Label({ style_class: 'extension-windowsNavigator-window-tooltip' }); createdActors.push(this._text = new St.Label({ style_class: 'extension-windowsNavigator-window-tooltip' }));
this._text.hide(); this._text.hide();
parentActor.add_actor(this._text); parentActor.add_actor(this._text);
}); });
injectToFunction(Workspace.WindowOverlay.prototype, 'updatePositions', function(cloneX, cloneY, cloneWidth, cloneHeight) {
winInjections['updatePositions'] = injectToFunction(Workspace.WindowOverlay.prototype, 'updatePositions', function(cloneX, cloneY, cloneWidth, cloneHeight) {
let textX = cloneX - 2; let textX = cloneX - 2;
let textY = cloneY - 2; let textY = cloneY - 2;
this._text.set_position(Math.floor(textX), Math.floor(textY)); this._text.set_position(Math.floor(textX), Math.floor(textY));
this._text.raise_top(); this._text.raise_top();
}); });
injectToFunction(Workspace.Workspace.prototype, '_init', function(metaWorkspace) {
workspaceInjections['_init'] = injectToFunction(Workspace.Workspace.prototype, '_init', function(metaWorkspace) {
if (metaWorkspace && metaWorkspace.index() < 9) { if (metaWorkspace && metaWorkspace.index() < 9) {
this._tip = new St.Label({ style_class: 'extension-windowsNavigator-window-tooltip', createdActors.push(this._tip = new St.Label({ style_class: 'extension-windowsNavigator-window-tooltip',
visible: false }); visible: false }));
this.actor.add_actor(this._tip); this.actor.add_actor(this._tip);
this.actor.connect('notify::scale-x', Lang.bind(this, function() { let signalId = this.actor.connect('notify::scale-x', Lang.bind(this, function() {
this._tip.set_scale(1 / this.actor.scale_x, 1 / this.actor.scale_x); this._tip.set_scale(1 / this.actor.scale_x, 1 / this.actor.scale_x);
})); }));
connectedSignals.push({ obj: this.actor, id: signalId });
} else } else
this._tip = null; this._tip = null;
}); });
injectToFunction(Workspace.Workspace.prototype, 'positionWindows', function(flags) {
workspaceInjections['positionWindows'] = injectToFunction(Workspace.Workspace.prototype, 'positionWindows', function(flags) {
let visibleClones = this._windows.slice(); let visibleClones = this._windows.slice();
if (this._reservedSlot) if (this._reservedSlot)
visibleClones.push(this._reservedSlot); visibleClones.push(this._reservedSlot);
@@ -194,14 +238,46 @@ function main() {
} }
}); });
injectToFunction(WorkspacesView.WorkspacesView.prototype, '_init', function(width, height, x, y, workspaces) { workViewInjections['_init'] = injectToFunction(WorkspacesView.WorkspacesView.prototype, '_init', function(width, height, x, y, workspaces) {
this._pickWorkspace = false; this._pickWorkspace = false;
this._pickWindow = false; this._pickWindow = false;
this._keyPressEventId = global.stage.connect('key-press-event', Lang.bind(this, this._onKeyPress)); this._keyPressEventId = global.stage.connect('key-press-event', Lang.bind(this, this._onKeyPress));
this._keyReleaseEventId = global.stage.connect('key-release-event', Lang.bind(this, this._onKeyRelease)); this._keyReleaseEventId = global.stage.connect('key-release-event', Lang.bind(this, this._onKeyRelease));
connectedSignals.push({ obj: global.stage, id: this._keyPressEventId });
connectedSignals.push({ obj: global.stage, id: this._keyReleaseEventId });
}); });
injectToFunction(WorkspacesView.WorkspacesView.prototype, '_onDestroy', function() {
workViewInjections['_onDestroy'] = injectToFunction(WorkspacesView.WorkspacesView.prototype, '_onDestroy', function() {
global.stage.disconnect(this._keyPressEventId); global.stage.disconnect(this._keyPressEventId);
global.stage.disconnect(this._keyReleaseEventId); global.stage.disconnect(this._keyReleaseEventId);
connectedSignals = [ ];
}); });
} }
function removeInjection(object, injection, name) {
if (injection[name] === undefined)
delete object[name];
else
object[name] = injection[name];
}
function disable() {
for (i in workspaceInjections)
removeInjection(Workspace.Workspace.prototype, workspaceInjections, i);
for (i in winInjections)
removeInjection(Workspace.WindowOverlay.prototype, winInjections, i);
for (i in workViewInjections)
removeInjection(WorkspacesView.WorkspacesView.prototype, workViewInjections, i);
for each (i in connectedSignals)
i.obj.disconnect(i.id);
for each (i in createdActors)
i.destroy();
resetState();
}
function init() {
/* do nothing */
}
@@ -0,0 +1,3 @@
EXTENSION_ID = workspace-indicator
include ../../extension.mk
+109
View File
@@ -0,0 +1,109 @@
const Meta = imports.gi.Meta;
const Clutter = imports.gi.Clutter;
const St = imports.gi.St;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const Panel = imports.ui.panel;
const Main = imports.ui.main;
function WorkspaceIndicator() {
this._init.apply(this, arguments);
}
WorkspaceIndicator.prototype = {
__proto__: PanelMenu.SystemStatusButton.prototype,
_init: function(){
PanelMenu.SystemStatusButton.prototype._init.call(this, 'folder');
this._currentWorkspace = global.screen.get_active_workspace().index();
this.statusLabel = new St.Label({ text: this._labelText() });
this.actor.set_child(this.statusLabel);
this.workspacesItems = [];
this._workspaceSection = new PopupMenu.PopupMenuSection();
this.menu.addMenuItem(this._workspaceSection);
global.screen.connect_after('workspace-added', Lang.bind(this,this._createWorkspacesSection));
global.screen.connect_after('workspace-removed', Lang.bind(this,this._createWorkspacesSection));
global.screen.connect_after('workspace-switched', Lang.bind(this,this._updateIndicator));
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
this._createWorkspacesSection();
//styling
this.menu.actor.add_style_class_name('workspace-indicator-shorter');
},
_updateIndicator: function() {
this.workspacesItems[this._currentWorkspace].setShowDot(false);
this._currentWorkspace = global.screen.get_active_workspace().index();
this.workspacesItems[this._currentWorkspace].setShowDot(true);
this.statusLabel.set_text(this._labelText());
},
_labelText : function(workspaceIndex) {
if(workspaceIndex == undefined) {
workspaceIndex = this._currentWorkspace;
}
return Meta.prefs_get_workspace_name(workspaceIndex);
},
_createWorkspacesSection : function() {
this._workspaceSection.removeAll();
this.workspacesItems = [];
let i = 0;
for(; i < global.screen.n_workspaces; i++) {
this.workspacesItems[i] = new PopupMenu.PopupMenuItem(this._labelText(i));
this._workspaceSection.addMenuItem(this.workspacesItems[i]);
this.workspacesItems[i].workspaceId = i;
this.workspacesItems[i].label_actor = this.statusLabel;
let self = this;
this.workspacesItems[i].connect('activate', Lang.bind(this, function(actor, event) {
this._activate(actor.workspaceId);
}));
}
this._updateIndicator();
},
_activate : function (index) {
if(index >= 0 && index < global.screen.n_workspaces) {
let metaWorkspace = global.screen.get_workspace_by_index(index);
metaWorkspace.activate(true);
}
},
_onScrollEvent : function(actor, event) {
let direction = event.get_scroll_direction();
let diff = 0;
if (direction == Clutter.ScrollDirection.DOWN) {
diff = 1;
} else if (direction == Clutter.ScrollDirection.UP) {
diff = -1;
} else {
return;
}
let newIndex = global.screen.get_active_workspace().index() + diff;
this._activate(newIndex);
},
}
function init(meta) {
Panel.STANDARD_TRAY_ICON_ORDER.unshift('workspace-indicator');
}
let _indicator;
function enable() {
_indicator = new WorkspaceIndicator;
Main.panel.addToStatusArea('workspace-indicator', _indicator);
}
function disable() {
_indicator.destroy();
}
@@ -0,0 +1,9 @@
{
"uuid": "@uuid@",
"name": "Workspace Indicator",
"description": "Put an indicator on the panel signaling in which workspace you are, and give you the possibility of switching to another one",
"shell-version": [ "@shell_current@" ],
"localedir": "@LOCALEDIR@",
"original-authors": [ "erick.red@gmail.com" ],
"url": "@url@"
}
@@ -0,0 +1,4 @@
.workspace-indicator-shorter {
min-width: 25px;
font-size: 10pt;
}
+13 -4
View File
@@ -102,7 +102,7 @@ Indicator.prototype = {
output.set_rotation(bitmask); output.set_rotation(bitmask);
try { try {
config.save(); config.save();
this._proxy.ApplyConfigurationRemote(global.stage_xwindow, event.get_time()); this._proxy.ApplyConfigurationRemote(0, event.get_time());
} catch (e) { } catch (e) {
log ('Could not save monitor configuration: ' + e); log ('Could not save monitor configuration: ' + e);
} }
@@ -136,8 +136,17 @@ Indicator.prototype = {
} }
function main(metadata) { function init(metadata) {
imports.gettext.bindtextdomain('gnome-shell-extensions', metadata.localedir); imports.gettext.bindtextdomain('gnome-shell-extensions', metadata.localedir);
}
Panel.STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['display'] = Indicator;
let _indicator;
function enable() {
_indicator = new Indicator();
Main.panel.addToStatusArea('display', _indicator);
}
function disable() {
_indicator.destroy();
} }
@@ -3,7 +3,6 @@
"name": "Monitor Status Indicator", "name": "Monitor Status Indicator",
"description": "Add a systems status menu for rotating monitors (overrides what is currently provided by gnome-settings-daemon)", "description": "Add a systems status menu for rotating monitors (overrides what is currently provided by gnome-settings-daemon)",
"shell-version": [ "@shell_current@" ], "shell-version": [ "@shell_current@" ],
"js-version": [ "0.7.15", "1.29.1" ],
"localedir": "@LOCALEDIR@", "localedir": "@LOCALEDIR@",
"url": "@url@" "url": "@url@"
} }
+4
View File
@@ -1,3 +1,4 @@
ca
cs cs
da da
de de
@@ -8,6 +9,7 @@ gl
he he
hu hu
it it
ja
lv lv
nb nb
pa pa
@@ -19,3 +21,5 @@ sl
sv sv
vi vi
zh_CN zh_CN
zh_HK
zh_TW
+1
View File
@@ -1,5 +1,6 @@
extensions/alternative-status-menu/extension.js extensions/alternative-status-menu/extension.js
extensions/alternate-tab/extension.js extensions/alternate-tab/extension.js
extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in
extensions/auto-move-windows/extension.js extensions/auto-move-windows/extension.js
extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in
extensions/dock/extension.js extensions/dock/extension.js
+318
View File
@@ -0,0 +1,318 @@
# Catalan 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.
# Jordi Mas i Hernandez <jmas@softcatala.org>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-08-06 13:25+0200\n"
"PO-Revision-Date: 2011-08-02 07:30+0200\n"
"Last-Translator: jmas@softcatala.org\n"
"Language-Team: ca_ES <tradgnome@softcatala.net>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../extensions/alternative-status-menu/extension.js:39
msgid "Available"
msgstr "Disponible"
#: ../extensions/alternative-status-menu/extension.js:44
msgid "Busy"
msgstr "Ocupat"
#: ../extensions/alternative-status-menu/extension.js:52
msgid "My Account"
msgstr "El meu compte"
#: ../extensions/alternative-status-menu/extension.js:56
msgid "System Settings"
msgstr "Paràmetres de l'ordinador"
#: ../extensions/alternative-status-menu/extension.js:63
msgid "Lock Screen"
msgstr "Bloca la pantalla"
#: ../extensions/alternative-status-menu/extension.js:67
msgid "Switch User"
msgstr "Canvia d'usuari"
#: ../extensions/alternative-status-menu/extension.js:72
msgid "Log Out..."
msgstr "Surt..."
#: ../extensions/alternative-status-menu/extension.js:79
msgid "Suspend"
msgstr "Atura temporalment"
#: ../extensions/alternative-status-menu/extension.js:85
msgid "Hibernate"
msgstr "Hiberna"
#: ../extensions/alternative-status-menu/extension.js:91
msgid "Power Off..."
msgstr "Apaga..."
#: ../extensions/alternate-tab/extension.js:44
msgid ""
"This is the first time you use the Alternate Tab extension. \n"
"Please choose your preferred behaviour:\n"
"\n"
"All & Thumbnails:\n"
" This mode presents all applications from all workspaces in one "
"selection \n"
" list. Instead of using the application icon of every window, it uses "
"small \n"
" thumbnails resembling the window itself. \n"
"\n"
"Workspace & Icons:\n"
" This mode let's you switch between the applications of your current \n"
" workspace and gives you additionally the option to switch to the last "
"used \n"
" application of your previous workspace. This is always the last symbol "
"in \n"
" the list and is segregated by a separator/vertical line if available. \n"
" Every window is represented by its application icon. \n"
"\n"
"Native:\n"
" This mode is the native GNOME 3 behaviour or in other words: Clicking \n"
" native switches the Alternate Tab extension off. \n"
msgstr ""
"Aquest és el primer cop que useu l'extensió Alternate Tab. \n"
"Trieu el vostre comportament preferit:\n"
"\n"
"Totes i miniatures:\n"
" Aquest mode presenta totes les aplicacions de tots els espais de treball "
"com a\n"
" una llista de selecció. En comptes d'usar la icona d'aplicació de cada "
"finestra, usa \n"
" miniatures que representen el contingut de la finestra. \n"
"\n"
"Espai de treball i icones:\n"
" Aquest mode us permet canviar entre aplicacions de l'espai de treball "
"actual \n"
" i us dóna la possibilitat de canviar a l'última aplicació usada de "
"l'espai de \n"
" treball anterior. Aquest és sempre el darrer símbol a la llista i està "
"separat \n"
" per una línia vertical/separador quan està disponible. \n"
" Cada finestra es representa per la seva icona d'aplicació. \n"
"\n"
"Nadiu:\n"
" Aquest és el mode de comportament nadiu al GNOME 3 o amb altres "
"paraules: fent \n"
" clic inhabilita l'extensió Alternate Tab. \n"
#: ../extensions/alternate-tab/extension.js:269
msgid "Alt Tab Behaviour"
msgstr "Comportament de l'Alt Tab"
#: ../extensions/alternate-tab/extension.js:285
msgid "All & Thumbnails"
msgstr "Totes i miniatures"
#: ../extensions/alternate-tab/extension.js:292
msgid "Workspace & Icons"
msgstr "Espai de treball i icones"
#: ../extensions/alternate-tab/extension.js:299
msgid "Native"
msgstr "Nadiu"
#: ../extensions/alternate-tab/extension.js:306
msgid "Cancel"
msgstr "Cancel·la"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
msgid "Ask the user for a default behaviour if true."
msgstr "Si és cert, pregunta a l'usuari pel comportament per defecte."
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
msgid "Indicates if Alternate Tab is newly installed"
msgstr "Indica si s'acaba d'instal·lar novament l'Alternate Tab"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:3
msgid ""
"Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and "
"workspace_icons."
msgstr ""
"Defineix el comportament de l'Alt-Tab. Els valors possibles són: «native», "
"«all_thumbnails» i «workspace_icons»."
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
msgid "The alt tab behaviour."
msgstr "Comportament de l'Alt Tab"
#: ../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 llista de cadenes, que cada una conté l'identificador d'aplicació (nom del "
"fitxer de l'escriptori), seguit de dos punts i el número de l'espai de "
"treball"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid "Application and workspace list"
msgstr "Aplicació i llista d'espais de treball"
#: ../extensions/dock/extension.js:437
msgid "Drag here to add favorites"
msgstr "Arrossegueu aquí per afegir als preferits"
#: ../extensions/dock/extension.js:771
msgid "New Window"
msgstr "Finestra nova"
#: ../extensions/dock/extension.js:773
msgid "Quit Application"
msgstr "Surt de l'aplicació"
#: ../extensions/dock/extension.js:778
msgid "Remove from Favorites"
msgstr "Suprimeix dels favorits"
#: ../extensions/dock/extension.js:779
msgid "Add to Favorites"
msgstr "Afegeix als favorits"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
msgid "Autohide duration"
msgstr "Duració de l'ocultació automàtica"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
msgid "Autohide effect"
msgstr "Efecte d'ocultació automàtica"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
msgid "Enable/disable autohide"
msgstr "Habilita/Inhabilita l'ocultació automàtica"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
msgid "Icon size"
msgstr "Mida de l'icona"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
msgid "Position of the dock"
msgstr "Posició de l'acoblador"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
msgid "Sets icon size of the dock."
msgstr "Defineix la mida de l'icona per a l'acoblador."
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
msgid ""
"Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale'"
msgstr ""
"Defineix l'efecte de l'acoblador amagat. Els valors permesos són «resize» o "
"«rescale»"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
msgid ""
"Sets the position of the dock in the screen. Allowed values are 'right' or "
"'left'"
msgstr ""
"Defineix la posició de l'acoblador a la pantalla. Els valors permesos són "
"«right» o «left»"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
msgid "Sets the time duration of the autohide effect."
msgstr "Defineix la durada en temps de l'efecte d'ocultació automàtica."
#: ../extensions/example/extension.js:11
msgid "Hello, world!"
msgstr "Hola, món!"
#: ../extensions/gajim/extension.js:219
#, c-format
msgid "%s is away."
msgstr "%s es troba absent."
#: ../extensions/gajim/extension.js:222
#, c-format
msgid "%s is offline."
msgstr "%s està fora de línia."
#: ../extensions/gajim/extension.js:225
#, c-format
msgid "%s is online."
msgstr "%s està en línia."
#: ../extensions/gajim/extension.js:228
#, c-format
msgid "%s is busy."
msgstr "%s està ocupat."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
"restarting the shell to have any effect."
msgstr ""
"Si és cert, posiciona el títol de la finestra damunt de la miniatura "
"corresponent, substituint comportament per defecte del Shell de posicionar-"
"ho a baix. Per tal de que aquest canvi tingui efecte cal reiniciar el Shell."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
msgid "Place window captions on top"
msgstr "Posiciona els títols de les finestres al damunt"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid ""
"The algorithm used to layout thumbnails in the overview. 'grid' to use the "
"default grid based algorithm, 'natural' to use another one that reflects "
"more the position and size of the actual window"
msgstr ""
"L'algoritme usat per posicionar les miniatures en la perspectiva general. "
"Useu «grid» per a utilitzar l'algoritme per defecte basat en disposició en "
"graella, o «natural» per a usar un algoritme que reflexa millor la posició i "
"mida de la finestra actual."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
"This setting applies only with the natural placement strategy."
msgstr ""
"Intenta usar més pantalla per a posicionar les miniatures de les finestres "
"adaptant la ràtio d'aspecte de la pantalla, consolidant-les més per a reduir "
"la capsa que les envolta. Aquest paràmetre de configuració s'aplica "
"només a l'estratègia de posicionament de finestres natural."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:5
msgid "Use more screen for windows"
msgstr "Usa més pantalla per les finestres"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:6
msgid "Window placement strategy"
msgstr "Estratègia de posicionament de la finestra"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "El nom del tema, que es carregarà des de ~/.themes/name/gnome-shell"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "Theme name"
msgstr "Nom del tema"
#: ../extensions/xrandr-indicator/extension.js:26
msgid "Normal"
msgstr "Normal"
#: ../extensions/xrandr-indicator/extension.js:27
msgid "Left"
msgstr "Esquerra"
#: ../extensions/xrandr-indicator/extension.js:28
msgid "Right"
msgstr "Dreta"
#: ../extensions/xrandr-indicator/extension.js:29
msgid "Upside-down"
msgstr "Capgira"
#: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..."
msgstr "Configura els paràmetres de visualització..."
+218 -8
View File
@@ -8,8 +8,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n" "Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-04-14 09:58+0200\n" "POT-Creation-Date: 2011-08-30 17:01+0200\n"
"PO-Revision-Date: 2011-04-14 09:54+0200\n" "PO-Revision-Date: 2011-08-30 17:04+0200\n"
"Last-Translator: Fran Diéguez <frandieguez@gnome.org>\n" "Last-Translator: Fran Diéguez <frandieguez@gnome.org>\n"
"Language-Team: Galician <gnome-l10n-gl@gnome.org>\n" "Language-Team: Galician <gnome-l10n-gl@gnome.org>\n"
"Language: gl\n" "Language: gl\n"
@@ -18,6 +18,134 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../extensions/alternative-status-menu/extension.js:39
msgid "Available"
msgstr "Dispoñible"
#: ../extensions/alternative-status-menu/extension.js:44
msgid "Busy"
msgstr "Ocupado"
#: ../extensions/alternative-status-menu/extension.js:52
msgid "My Account"
msgstr "A Miña Conta"
#: ../extensions/alternative-status-menu/extension.js:56
msgid "System Settings"
msgstr "Configuracións do sistema"
#: ../extensions/alternative-status-menu/extension.js:63
msgid "Lock Screen"
msgstr "Bloquear Pantaia"
#: ../extensions/alternative-status-menu/extension.js:68
msgid "Switch User"
msgstr "Trocar de Usario"
#: ../extensions/alternative-status-menu/extension.js:73
msgid "Log Out..."
msgstr "Sair da sesión"
#: ../extensions/alternative-status-menu/extension.js:82
msgid "Suspend"
msgstr "Suspender"
#: ../extensions/alternative-status-menu/extension.js:88
msgid "Hibernate"
msgstr "Hibernar"
#: ../extensions/alternative-status-menu/extension.js:94
msgid "Power Off..."
msgstr "Apagar…"
#: ../extensions/alternate-tab/extension.js:44
msgid ""
"This is the first time you use the Alternate Tab extension. \n"
"Please choose your preferred behaviour:\n"
"\n"
"All & Thumbnails:\n"
" This mode presents all applications from all workspaces in one "
"selection \n"
" list. Instead of using the application icon of every window, it uses "
"small \n"
" thumbnails resembling the window itself. \n"
"\n"
"Workspace & Icons:\n"
" This mode let's you switch between the applications of your current \n"
" workspace and gives you additionally the option to switch to the last "
"used \n"
" application of your previous workspace. This is always the last symbol "
"in \n"
" the list and is segregated by a separator/vertical line if available. \n"
" Every window is represented by its application icon. \n"
"\n"
"Native:\n"
" This mode is the native GNOME 3 behaviour or in other words: Clicking \n"
" native switches the Alternate Tab extension off. \n"
msgstr ""
"É a primeira vez que usa a extensión de Tab alternativo.\n"
"Seleccione o comportamento prefirido:\n"
"\n"
"Todo e miniaturas:\n"
" Este modo mostra tódolos aplicativos de tódolos espazos de traballa "
"nunha\n"
" lista de selección. No lugar de usar as iconas de aplicativos para cada\n"
" xanela, usa miniaturas pequenas que representan as xanelas.\n"
"\n"
"Espazos de traballo e iconas:\n"
" Este modo permítelle cambiar entre os aplicativos do seu espazo de "
"traballo \n"
" actual e permítelle engadir a opción de cambiar entre o último "
"aplicativo\n"
" usado do seu espazo de traballo anterior. Sempre é o último símbolo na\n"
" lista e está separado por unha liña separador/vertical se está "
"dispoñíbel.\n"
" Cada xanela está representada pola icona do aplicativo.\n"
"\n"
"Nativo:\n"
" Este modo é o comportamento nativo de GNOME 3 ou noutras palabras: ao \n"
" seleccionar nativo desactiva a extensión Tab alternativo.\n"
#: ../extensions/alternate-tab/extension.js:269
msgid "Alt Tab Behaviour"
msgstr "Comportamento do Alt Tab"
#: ../extensions/alternate-tab/extension.js:285
msgid "All & Thumbnails"
msgstr "Todo e miniaturas"
#: ../extensions/alternate-tab/extension.js:292
msgid "Workspace & Icons"
msgstr "Espazos de traballo e iconas"
#: ../extensions/alternate-tab/extension.js:299
msgid "Native"
msgstr "Nativa"
#: ../extensions/alternate-tab/extension.js:306
msgid "Cancel"
msgstr "Cancelar"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
msgid "Ask the user for a default behaviour if true."
msgstr "Preguntarlle o comportamento predeterminado ao usuario se é certo."
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
msgid "Indicates if Alternate Tab is newly installed"
msgstr "Indica se o Tab alternativo está instalado recentemente"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:3
msgid ""
"Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and "
"workspace_icons."
msgstr ""
"Estabelece o comportamento do Alt-Tab. Os valores posíbeis son: nativa, "
"all_thumbnaisl e worspace_icons."
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
msgid "The alt tab behaviour."
msgstr "O comportamento de Alt Tab"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1 #: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid "" msgid ""
"A list of strings, each containing an application id (desktop file name), " "A list of strings, each containing an application id (desktop file name), "
@@ -30,26 +158,69 @@ msgstr ""
msgid "Application and workspace list" msgid "Application and workspace list"
msgstr "Lista de aplicativos e espazos de traballo" msgstr "Lista de aplicativos e espazos de traballo"
#: ../extensions/dock/extension.js:116 #: ../extensions/dock/extension.js:486
msgid "Drag here to add favorites" msgid "Drag here to add favorites"
msgstr "Arrastre aquí para engadir aos favoritos" msgstr "Arrastre aquí para engadir aos favoritos"
#: ../extensions/dock/extension.js:417 #: ../extensions/dock/extension.js:820
msgid "New Window" msgid "New Window"
msgstr "Nova xanela" msgstr "Nova xanela"
#: ../extensions/dock/extension.js:419 #: ../extensions/dock/extension.js:822
msgid "Quit Application" msgid "Quit Application"
msgstr "Saír do aplicativo" msgstr "Saír do aplicativo"
#: ../extensions/dock/extension.js:424 #: ../extensions/dock/extension.js:827
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Eliminar dos favoritos" msgstr "Eliminar dos favoritos"
#: ../extensions/dock/extension.js:425 #: ../extensions/dock/extension.js:828
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Engadir aos favoritos" msgstr "Engadir aos favoritos"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
msgid "Autohide duration"
msgstr "Duración do autoagochado"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
msgid "Autohide effect"
msgstr "Efecto de autoagochado"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
msgid "Enable/disable autohide"
msgstr "Activar/desactivar autoagochado"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
msgid "Icon size"
msgstr "Tamaño da icona"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
msgid "Position of the dock"
msgstr "Posición da doca"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
msgid "Sets icon size of the dock."
msgstr "Estabelece o tamaño das iconas na doca."
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
msgid ""
"Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale'"
msgstr ""
"Estabelece o efecto de agochado da doca. Os valores permitidos son «resize» "
"e «rescale»"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
msgid ""
"Sets the position of the dock in the screen. Allowed values are 'right' or "
"'left'"
msgstr ""
"Estabelece a posición da doca na pantalla. Os valores permitidos son «right» "
"e «left»"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
msgid "Sets the time duration of the autohide effect."
msgstr "Estabelece a duración do efecto de autoagochado."
#: ../extensions/example/extension.js:11 #: ../extensions/example/extension.js:11
msgid "Hello, world!" msgid "Hello, world!"
msgstr "Hola, mundo!" msgstr "Hola, mundo!"
@@ -74,6 +245,45 @@ msgstr "%s está conectado."
msgid "%s is busy." msgid "%s is busy."
msgstr "%s está ocupado." msgstr "%s está ocupado."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
"restarting the shell to have any effect."
msgstr ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
msgid "Place window captions on top"
msgstr "Pór a xanela sempre na parte superior"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid ""
"The algorithm used to layout thumbnails in the overview. 'grid' to use the "
"default grid based algorithm, 'natural' to use another one that reflects "
"more the position and size of the actual window"
msgstr ""
"O algoritmo usado pola disposición de miniaturas na vista previa. «grid» "
"para usar o algoritmo predeterminado baseado na grella, «natural» para usar "
"outro que reflexa máis a posición e tamaño da xanela actual"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
"This setting applies only with the natural placement strategy."
msgstr ""
"Tente usar máis pantalla para dispor as miniaturas das xanelas adaptándose á "
"taxa de aspecto da pantalla e consolidalas para reducir a caixa saltante. "
"Esta configuración aplícase só para a estratexia de disposición natural."
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:5
msgid "Use more screen for windows"
msgstr "Usar máis pantalla para as xanelas"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:6
msgid "Window placement strategy"
msgstr "Estratexia de disposición de xanelas"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1 #: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "O nome do tema, a cargar desde ~/.themes/name/gnome-shell" msgstr "O nome do tema, a cargar desde ~/.themes/name/gnome-shell"
@@ -100,4 +310,4 @@ msgstr "Co de arriba cara abaixo"
#: ../extensions/xrandr-indicator/extension.js:78 #: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..." msgid "Configure display settings..."
msgstr "Configurar as configuracións de pantalla..." msgstr "Configurar as configuracións de pantalla"
+205
View File
@@ -0,0 +1,205 @@
# gnome-shell-extensions ja.po
# Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell-extensions package.
# Takeshi AIHANA <takeshi.aihana@gmail.com>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-07-05 00:34+0900\n"
"PO-Revision-Date: 2011-07-05 00:34+0900\n"
"Last-Translator: Takeshi AIHANA <takeshi.aihana@gmail.com>\n"
"Language-Team: Japanese <takeshi.aihana@gmail.com>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../extensions/alternative-status-menu/extension.js:39
msgid "Available"
msgstr "在席中"
#: ../extensions/alternative-status-menu/extension.js:44
msgid "Busy"
msgstr "離席中"
#: ../extensions/alternative-status-menu/extension.js:52
msgid "My Account"
msgstr "自分のアカウント"
#: ../extensions/alternative-status-menu/extension.js:56
msgid "System Settings"
msgstr "システムの設定"
#: ../extensions/alternative-status-menu/extension.js:63
msgid "Lock Screen"
msgstr "画面のロック"
#: ../extensions/alternative-status-menu/extension.js:67
msgid "Switch User"
msgstr "ユーザの切り替え"
#: ../extensions/alternative-status-menu/extension.js:72
msgid "Log Out..."
msgstr "ログアウト..."
#: ../extensions/alternative-status-menu/extension.js:79
msgid "Suspend"
msgstr "サスペンド"
#: ../extensions/alternative-status-menu/extension.js:85
msgid "Hibernate"
msgstr "ハイバーネート"
#: ../extensions/alternative-status-menu/extension.js:91
msgid "Power Off..."
msgstr "電源オフ..."
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
msgstr ""
"アプリケーションの識別子 (.desktop ファイル名) とコロンの後にワークスペース番"
"号を付与した文字列を要素とするリストです。"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid "Application and workspace list"
msgstr "アプリケーションとワークスペースのリスト"
#: ../extensions/dock/extension.js:142
msgid "Drag here to add favorites"
msgstr "ここにドラッグしてお気に入りへ追加します"
#: ../extensions/dock/extension.js:462
msgid "New Window"
msgstr "新しいウィンドウで開く"
#: ../extensions/dock/extension.js:464
msgid "Quit Application"
msgstr "アプリケーションの終了"
#: ../extensions/dock/extension.js:469
msgid "Remove from Favorites"
msgstr "お気に入りから削除する"
#: ../extensions/dock/extension.js:470
msgid "Add to Favorites"
msgstr "お気に入りへ追加する"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
msgid "Icon size"
msgstr "アイコンのサイズ"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
msgid "Position of the dock"
msgstr "ドックの位置"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
msgid "Sets icon size of the dock."
msgstr "ドックに表示するアイコンの大きさを指定します。"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
msgid ""
"Sets the position of the dock in the screen. Allowed values are 'right' or "
"'left'"
msgstr ""
"ドックをデスクトップに表示する位置を指定します。指定可能な値: 'right'、'left'"
#: ../extensions/example/extension.js:11
msgid "Hello, world!"
msgstr "\"Hello, world!\""
#: ../extensions/gajim/extension.js:219
#, c-format
msgid "%s is away."
msgstr "%sさんは離席中です"
#: ../extensions/gajim/extension.js:222
#, c-format
msgid "%s is offline."
msgstr "%sさんはオフラインです"
#: ../extensions/gajim/extension.js:225
#, c-format
msgid "%s is online."
msgstr "%sさんはオンラインです"
#: ../extensions/gajim/extension.js:228
#, c-format
msgid "%s is busy."
msgstr "%sさんは取り込み中です"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
"restarting the shell to have any effect."
msgstr ""
"TRUE にすると、ウィンドウのサムネイルの上端にそのウィンドウのタイトルバーを表"
"示します (これは、サムネイルの下端にタイトルバーを表示する GNOME シェルのデ"
"フォルト値よりも優先されます)。この設定を適用する際は GNOME シェルを再起動し"
"て下さい。"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
msgid "Place window captions on top"
msgstr "ウィンドウのタイトルバーを上端に表示するかどうか"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid ""
"The algorithm used to layout thumbnails in the overview. 'grid' to use the "
"default grid based algorithm, 'natural' to use another one that reflects "
"more the position and size of the actual window"
msgstr ""
"オーバービュー・モードでウィンドウのサムネイルを配置する際のアルゴリズムで"
"す。指定可能な値: 'grid' (原則的に格子状に配置していくアルゴリズ"
"ム)、'natural' (ウィンドウの実際の位置や大きさを考慮して配置していくアルゴリ"
"ズム)"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
"This setting applies only with the natural placement strategy."
msgstr ""
"ウィンドウのサムネイルを複数配置する際に、画面のアスペクト比に合わせて、境界"
"部分を減らすことにより、ウィンドウを統合しすることで、さらにたくさんの画面を"
"使用できるようにするかどうかです。この設定は 'natural' の配置アルゴリズムを採"
"用している場合にのみ適用されます。"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:5
msgid "Use more screen for windows"
msgstr "ウィンドウにたくさんの画面を使うかどうか"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:6
msgid "Window placement strategy"
msgstr "ウィンドウを配置するアルゴリズム"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "テーマの名前です (~/.themes/name/gnome-shell 配下に格納します)。"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "Theme name"
msgstr "テーマの名前"
#: ../extensions/xrandr-indicator/extension.js:26
msgid "Normal"
msgstr "標準"
#: ../extensions/xrandr-indicator/extension.js:27
msgid "Left"
msgstr "左回り"
#: ../extensions/xrandr-indicator/extension.js:28
msgid "Right"
msgstr "右回り"
#: ../extensions/xrandr-indicator/extension.js:29
msgid "Upside-down"
msgstr "逆さま"
#: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..."
msgstr "ディスプレイの設定..."
+184 -28
View File
@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: gnome-shell-extensions gnome-3-0\n" "Project-Id-Version: gnome-shell-extensions gnome-3-0\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=extensions\n" "shell&keywords=I18N+L10N&component=extensions\n"
"POT-Creation-Date: 2011-05-21 14:17+0000\n" "POT-Creation-Date: 2011-08-01 14:02+0000\n"
"PO-Revision-Date: 2011-06-03 08:18+0530\n" "PO-Revision-Date: 2011-08-21 09:55+0530\n"
"Last-Translator: A S Alam <aalam@users.sf.net>\n" "Last-Translator: A S Alam <aalam@users.sf.net>\n"
"Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n" "Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -19,82 +19,205 @@ msgstr ""
"X-Generator: Lokalize 1.2\n" "X-Generator: Lokalize 1.2\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
#: ../extensions/alternative-status-menu/extension.js:23 #: ../extensions/alternative-status-menu/extension.js:39
#: ../extensions/alternative-status-menu/extension.js:27
#: ../extensions/alternative-status-menu/extension.js:93
msgid "Hibernate"
msgstr "ਹਾਈਬਰਨੇਟ"
#: ../extensions/alternative-status-menu/extension.js:26
#: ../extensions/alternative-status-menu/extension.js:92
msgid "Suspend"
msgstr "ਸਸਪੈਂਡ"
#: ../extensions/alternative-status-menu/extension.js:52
msgid "Available" msgid "Available"
msgstr "ਉਪਲੱਬਧ" msgstr "ਉਪਲੱਬਧ"
#: ../extensions/alternative-status-menu/extension.js:57 #: ../extensions/alternative-status-menu/extension.js:44
msgid "Busy" msgid "Busy"
msgstr "ਰੁਝਿਆ" msgstr "ਰੁਝਿਆ"
#: ../extensions/alternative-status-menu/extension.js:65 #: ../extensions/alternative-status-menu/extension.js:52
msgid "My Account" msgid "My Account"
msgstr "ਮੇਰਾ ਅਕਾਊਂਟ" msgstr "ਮੇਰਾ ਅਕਾਊਂਟ"
#: ../extensions/alternative-status-menu/extension.js:69 #: ../extensions/alternative-status-menu/extension.js:56
msgid "System Settings" msgid "System Settings"
msgstr "ਸਿਸਟਮ ਸੈਟਿੰਗ" msgstr "ਸਿਸਟਮ ਸੈਟਿੰਗ"
#: ../extensions/alternative-status-menu/extension.js:76 #: ../extensions/alternative-status-menu/extension.js:63
msgid "Lock Screen" msgid "Lock Screen"
msgstr "ਸਕਰੀਨ ਲਾਕ ਕਰੋ" msgstr "ਸਕਰੀਨ ਲਾਕ ਕਰੋ"
#: ../extensions/alternative-status-menu/extension.js:80 #: ../extensions/alternative-status-menu/extension.js:67
msgid "Switch User" msgid "Switch User"
msgstr "ਯੂਜ਼ਰ ਬਦਲੋ" msgstr "ਯੂਜ਼ਰ ਬਦਲੋ"
#: ../extensions/alternative-status-menu/extension.js:85 #: ../extensions/alternative-status-menu/extension.js:72
msgid "Log Out..." msgid "Log Out..."
msgstr "ਲਾਗਆਉਟ..." msgstr "ਲਾਗਆਉਟ..."
#: ../extensions/alternative-status-menu/extension.js:100 #: ../extensions/alternative-status-menu/extension.js:79
msgid "Suspend"
msgstr "ਸਸਪੈਂਡ"
#: ../extensions/alternative-status-menu/extension.js:85
msgid "Hibernate"
msgstr "ਹਾਈਬਰਨੇਟ"
#: ../extensions/alternative-status-menu/extension.js:91
msgid "Power Off..." msgid "Power Off..."
msgstr "...ਬੰਦ ਕਰੋ" msgstr "...ਬੰਦ ਕਰੋ"
#: ../extensions/alternate-tab/extension.js:44
msgid ""
"This is the first time you use the Alternate Tab extension. \n"
"Please choose your preferred behaviour:\n"
"\n"
"All & Thumbnails:\n"
" This mode presents all applications from all workspaces in one "
"selection \n"
" list. Instead of using the application icon of every window, it uses "
"small \n"
" thumbnails resembling the window itself. \n"
"\n"
"Workspace & Icons:\n"
" This mode let's you switch between the applications of your current \n"
" workspace and gives you additionally the option to switch to the last "
"used \n"
" application of your previous workspace. This is always the last symbol "
"in \n"
" the list and is segregated by a separator/vertical line if available. \n"
" Every window is represented by its application icon. \n"
"\n"
"Native:\n"
" This mode is the native GNOME 3 behaviour or in other words: Clicking \n"
" native switches the Alternate Tab extension off. \n"
msgstr ""
"ਇਹ ਪਹਿਲੀ ਵਾਰ ਹੈ, ਜਦੋਂ ਤੁਸੀਂ Alt(ernate) Tab ਇਕਸਟੈਨਸ਼ਨ ਵਰਤ ਰਹੇ ਹੋ।\n"
"ਆਪਣੀ ਪਸੰਦ ਮੁਤਾਬਕ ਰਵੱਈਏ ਦੀ ਚੋਣ ਕਰੋ ਜੀ:\n"
"\n"
"ਸਭ ਅਤੇ ਥੰਮਨੇਲ:\n"
" ਇਹ ਮੋਡ ਸਭ ਵਰਕਸਪੇਸ ਤੋਂ ਸਭ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਇੱਕ ਚੋਣ ਲਿਸਟ ਵਿੱਚ ਵੇਖਾਉਂਦੀ ਹੈ।\n"
" ਹਰੇਕ ਵਿੰਡੋ ਲਈ ਐਪਲੀਕੇਸ਼ਨ ਆਈਕਾਨ ਵਰਤਣ ਦੀ ਬਜਾਏ, ਇਹ ਹਰ ਵਿੰਡੋ ਨਾਲ ਰਲਦੇ\n"
" ਛੋਟੇ ਛੋਟੇ ਥੰਮਨੇਲ ਵਰਤਦੀ ਹੈ।\n"
"\n"
"ਵਰਕਸਪੇਸ ਅਤੇ ਆਈਕਾਨ:\n"
" ਇਹ ਮੋਡ ਤੁਹਾਨੂੰ ਤੁਹਾਡੇ ਮੌਜੂਦਾ ਵਰਕਸਪੇਸ ਦੀ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਮੱਦਦ ਕਰਨ ਲਈ ਸਹਾਇਕ "
"ਹੈ\n"
" ਅਤੇ ਤੁਹਾਨੂੰ ਤੁਹਾਡੇ ਪਿਛਲੇ ਵਰਕਸਪੇਸ ਵਿੱਚ ਵਰਤੀ ਆਖਰੀ ਐਪਲੀਕੇਸ਼ਨ ਵਰਤਣ ਦੀ ਚੋਣ ਵੀ\n"
" ਵਾਧੂ ਰੂਪ ਵਿੱਚ ਦਿੰਦਾ ਹੈ। ਇਹ ਲਿਸਟ ਵਿੱਚ ਆਖਰੀ ਨਿਸ਼ਾਨ ਹੁੰਦਾ ਹੈ ਅਤੇ ਇਸ ਨੂੰ ਵੱਖ "
"ਕਰਨ ਲਈ\n"
" ਖਿੜਵੀ/ਲੇਟਵੀ ਲਾਈਨ ਨਾਲ ਵੱਖ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਜੇ ਉਪਲੱਬਧ ਹੋਵੇ।\n"
" ਹਰੇਕ ਵਿੰਡੋ ਨੂੰ ਇਸ ਦੇ ਐਪਲੀਕੇਸ਼ਨ ਆਈਕਾਨ ਨਾਲ ਦਰਸਾਇਆ ਜਾਂਦਾ ਹੈ।\n"
"\n"
"ਨੇਟਿਵ:\n"
" ਇਹ ਮੋਡ ਨੇਟਿਵ ਗਨੋਮ 3 ਰਵੱਈਆ ਹੈ ਜਾਂ ਇੰਝ ਕਹਿ ਲਵੋ: ਨੇਟਿਵ ਸਵਿੱਚਾਂ ਨੂੰ ਨਾਲ\n"
" Alternative Tab ਇਕਸਟੈਨਸ਼ਨ ਬੰਦ ਕਰਦਾ ਹੈ।\n"
#: ../extensions/alternate-tab/extension.js:269
msgid "Alt Tab Behaviour"
msgstr "Alt Tab ਰਵੱਈਆ"
#: ../extensions/alternate-tab/extension.js:285
msgid "All & Thumbnails"
msgstr "ਸਭ ਅਤੇ ਥੰਮਨੇਲ"
#: ../extensions/alternate-tab/extension.js:292
msgid "Workspace & Icons"
msgstr "ਵਰਕਸਪੇਸ ਅਤੇ ਆਈਕਾਨ"
#: ../extensions/alternate-tab/extension.js:299
msgid "Native"
msgstr "ਨੇਟਿਵ"
#: ../extensions/alternate-tab/extension.js:306
msgid "Cancel"
msgstr "ਰੱਦ ਕਰੋ"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
msgid "Ask the user for a default behaviour if true."
msgstr "ਜੇ ਸਹੀ ਹੋਵੇ ਤਾਂ ਡਿਫਾਲਟ ਰਵੱਈਏ ਲਈ ਯੂਜ਼ਰ ਨੂੰ ਪੁੱਛੋ।"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
msgid "Indicates if Alternate Tab is newly installed"
msgstr "ਦਰਸਾਉਂਦਾ ਹੈ ਜੇ ਬਦਲਵੀਂ ਟੈਬ ਨਵੀਂ ਇੰਸਟਾਲ ਹੈ"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:3
msgid ""
"Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and "
"workspace_icons."
msgstr ""
"Alt-Tab ਰਵੱਈਆ ਸੈੱਟ ਕਰੋ। ਸੰਭਵ ਮੁੱਲ ਹਨ: native, all_thumbnails ਅਤੇ "
"workspace_icons।"
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
msgid "The alt tab behaviour."
msgstr "alt tab ਰਵੱਈਆ ਹੈ।"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1 #: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid "" msgid ""
"A list of strings, each containing an application id (desktop file name), " "A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number" "followed by a colon and the workspace number"
msgstr "" msgstr ""
"ਲਾਈਨਾਂ ਦੀ ਲਿਸਟ, ਜੋ ਕਿ ਐਪਲੀਕੇਸ਼ਨ ID (ਡੈਸਕਟਾਪ ਫਾਇਲ ਨਾਂ), ਬਾਅਦ 'ਚ ਕਾਲਮ ਅਤੇ " "ਲਾਈਨਾਂ ਦੀ ਲਿਸਟ, ਜੋ ਕਿ ਐਪਲੀਕੇਸ਼ਨ ID (ਡੈਸਕਟਾਪ ਫਾਇਲ ਨਾਂ), ਬਾਅਦ 'ਚ ਕਾਲਮ ਅਤੇ "
"ਵਰਕਸਪੇਸ " "ਵਰਕਸਪੇਸ ਨੰਬਰ "
"ਨੰਬਰ ਰੱਖਦਾ ਹੈ" "ਰੱਖਦਾ ਹੈ"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2 #: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid "Application and workspace list" msgid "Application and workspace list"
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਅਤੇ ਵਰਕਸਪੇਸ ਲਿਸਟ" msgstr "ਐਪਲੀਕੇਸ਼ਨ ਅਤੇ ਵਰਕਸਪੇਸ ਲਿਸਟ"
#: ../extensions/dock/extension.js:116 #: ../extensions/dock/extension.js:437
msgid "Drag here to add favorites" msgid "Drag here to add favorites"
msgstr "ਪਸੰਦ ਵਿੱਚ ਜੋੜਨ ਲਈ ਇੱਥੇ ਸੁੱਟੋ" msgstr "ਪਸੰਦ ਵਿੱਚ ਜੋੜਨ ਲਈ ਇੱਥੇ ਸੁੱਟੋ"
#: ../extensions/dock/extension.js:417 #: ../extensions/dock/extension.js:771
msgid "New Window" msgid "New Window"
msgstr "ਨਵੀਂ ਵਿੰਡੋ" msgstr "ਨਵੀਂ ਵਿੰਡੋ"
#: ../extensions/dock/extension.js:419 #: ../extensions/dock/extension.js:773
msgid "Quit Application" msgid "Quit Application"
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਬੰਦ ਕਰੋ" msgstr "ਐਪਲੀਕੇਸ਼ਨ ਬੰਦ ਕਰੋ"
#: ../extensions/dock/extension.js:424 #: ../extensions/dock/extension.js:778
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "ਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਓ" msgstr "ਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਓ"
#: ../extensions/dock/extension.js:425 #: ../extensions/dock/extension.js:779
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "ਪਸੰਦ 'ਚ ਸ਼ਾਮਲ ਕਰੋ" msgstr "ਪਸੰਦ 'ਚ ਸ਼ਾਮਲ ਕਰੋ"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
msgid "Autohide duration"
msgstr "ਆਪੇ ਓਹਲੇ ਹੋਣ ਅੰਤਰਾਲ"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
msgid "Autohide effect"
msgstr "ਆਪੇ-ਓਹਲੇ ਹੋਣ ਪ੍ਰਭਾਵ"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
msgid "Enable/disable autohide"
msgstr "ਆਪੇ-ਓਹਲੇ ਕਰਨਾ ਚਾਲੂ/ਬੰਦ"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
msgid "Icon size"
msgstr "ਆਈਕਾਨ ਆਕਾਰ"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
msgid "Position of the dock"
msgstr "ਡੌਕ ਦੀ ਸਥਿਤੀ"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
msgid "Sets icon size of the dock."
msgstr "ਡੌਕ ਦਾ ਆਈਕਾਨ ਆਕਾਰ ਸੈੱਟ ਕਰੋ।"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
msgid ""
"Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale'"
msgstr ""
"ਡੌਕ ਓਹਲੇ ਕਰਨ ਦਾ ਪ੍ਰਭਾਵ ਸੈੱਟ ਕਰਦਾ ਹੈ। ਸੰਭਵ ਮੁੱਲ ਹਨ 'resize' ਅਤੇ 'rescale'"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
msgid ""
"Sets the position of the dock in the screen. Allowed values are 'right' or "
"'left'"
msgstr "ਸਕਰੀਨ ਵਿੱਚ ਡੌਕ ਦੀ ਸਥਿਤੀ ਸੈੱਟ ਕਰਦਾ ਹੈ। ਸੰਭਵ ਮੁੱਲ ਹਨ 'right' ਜਾਂ 'left'"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
msgid "Sets the time duration of the autohide effect."
msgstr "ਆਪੇ-ਓਹਲੇ ਕਰਨ ਦੇ ਪ੍ਰਭਾਵ ਦੀ ਸਮੇਂ ਦਾ ਅੰਤਰਾਲ ਸੈੱਟ ਕਰੋ।"
#: ../extensions/example/extension.js:11 #: ../extensions/example/extension.js:11
msgid "Hello, world!" msgid "Hello, world!"
msgstr "ਹੈਲੋ, ਵਰਲਡ!" msgstr "ਹੈਲੋ, ਵਰਲਡ!"
@@ -119,6 +242,39 @@ msgstr "%s ਆਨਲਾਈਨ ਹੈ।"
msgid "%s is busy." msgid "%s is busy."
msgstr "%s ਰੁੱਝਿਆ/ਰੁੱਝੀ ਹੈ।" msgstr "%s ਰੁੱਝਿਆ/ਰੁੱਝੀ ਹੈ।"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
"restarting the shell to have any effect."
msgstr ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
msgid "Place window captions on top"
msgstr "ਥਾਂ ਵਿੰਡੋ ਸੁਰਖੀ ਸਭ ਤੋਂ ਉੱਤੇ"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid ""
"The algorithm used to layout thumbnails in the overview. 'grid' to use the "
"default grid based algorithm, 'natural' to use another one that reflects "
"more the position and size of the actual window"
msgstr ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
"This setting applies only with the natural placement strategy."
msgstr ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:5
msgid "Use more screen for windows"
msgstr "ਵਿੰਡੋਜ਼ ਲਈ ਹੋਰ ਸਕਰੀਨ ਵਰਤੋਂ"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:6
msgid "Window placement strategy"
msgstr "ਵਿੰਡੋ ਸਥਿਤੀ ਤਰਕੀਬ"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1 #: ../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" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "ਥੀਮ ਦਾ ਨਾਂ, ਜੋ ~/.themes/name/gnome-shell ਤੋਂ ਲੋਡ ਕੀਤਾ ਜਾਵੇਗਾ" msgstr "ਥੀਮ ਦਾ ਨਾਂ, ਜੋ ~/.themes/name/gnome-shell ਤੋਂ ਲੋਡ ਕੀਤਾ ਜਾਵੇਗਾ"
+275
View File
@@ -0,0 +1,275 @@
# Chinese (Hong Kong) 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.
# Cheng-Chia Tseng <pswo10680@gmail.com>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions gnome-3-0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-08-29 18:59+0800\n"
"PO-Revision-Date: 2011-08-29 18:59+0800\n"
"Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n"
"Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../extensions/alternative-status-menu/extension.js:39
msgid "Available"
msgstr "有空"
#: ../extensions/alternative-status-menu/extension.js:44
msgid "Busy"
msgstr "忙碌"
#: ../extensions/alternative-status-menu/extension.js:52
msgid "My Account"
msgstr "我的帳號"
#: ../extensions/alternative-status-menu/extension.js:56
msgid "System Settings"
msgstr "系統設定值"
#: ../extensions/alternative-status-menu/extension.js:63
msgid "Lock Screen"
msgstr "鎖定畫面"
#: ../extensions/alternative-status-menu/extension.js:68
msgid "Switch User"
msgstr "切換使用者"
#: ../extensions/alternative-status-menu/extension.js:73
msgid "Log Out..."
msgstr "登出..."
#: ../extensions/alternative-status-menu/extension.js:82
msgid "Suspend"
msgstr "暫停"
#: ../extensions/alternative-status-menu/extension.js:88
msgid "Hibernate"
msgstr "休眠"
#: ../extensions/alternative-status-menu/extension.js:94
msgid "Power Off..."
msgstr "關閉電源..."
#: ../extensions/alternate-tab/extension.js:44
msgid ""
"This is the first time you use the Alternate Tab extension. \n"
"Please choose your preferred behaviour:\n"
"\n"
"All & Thumbnails:\n"
" This mode presents all applications from all workspaces in one "
"selection \n"
" list. Instead of using the application icon of every window, it uses "
"small \n"
" thumbnails resembling the window itself. \n"
"\n"
"Workspace & Icons:\n"
" This mode let's you switch between the applications of your current \n"
" workspace and gives you additionally the option to switch to the last "
"used \n"
" application of your previous workspace. This is always the last symbol "
"in \n"
" the list and is segregated by a separator/vertical line if available. \n"
" Every window is represented by its application icon. \n"
"\n"
"Native:\n"
" This mode is the native GNOME 3 behaviour or in other words: Clicking \n"
" native switches the Alternate Tab extension off. \n"
msgstr ""
#: ../extensions/alternate-tab/extension.js:269
msgid "Alt Tab Behaviour"
msgstr ""
#: ../extensions/alternate-tab/extension.js:285
msgid "All & Thumbnails"
msgstr ""
#: ../extensions/alternate-tab/extension.js:292
msgid "Workspace & Icons"
msgstr ""
#: ../extensions/alternate-tab/extension.js:299
msgid "Native"
msgstr ""
#: ../extensions/alternate-tab/extension.js:306
msgid "Cancel"
msgstr ""
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
msgid "Ask the user for a default behaviour if true."
msgstr ""
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
msgid "Indicates if Alternate Tab is newly installed"
msgstr ""
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:3
msgid ""
"Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and "
"workspace_icons."
msgstr ""
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
msgid "The alt tab behaviour."
msgstr ""
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
msgstr "字串的清單,每個都包含一個應用程式 id (桌面檔名稱),後面接着半形分號 \";\" 與工作區號碼"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid "Application and workspace list"
msgstr "應用程式與工作區清單"
#: ../extensions/dock/extension.js:486
msgid "Drag here to add favorites"
msgstr "拖曳至此處以加入喜好"
#: ../extensions/dock/extension.js:820
msgid "New Window"
msgstr "新視窗"
#: ../extensions/dock/extension.js:822
msgid "Quit Application"
msgstr "退出應用程式"
#: ../extensions/dock/extension.js:827
msgid "Remove from Favorites"
msgstr "自喜好移除"
#: ../extensions/dock/extension.js:828
msgid "Add to Favorites"
msgstr "加入喜好"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
msgid "Autohide duration"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
msgid "Autohide effect"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
msgid "Enable/disable autohide"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
msgid "Icon size"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
msgid "Position of the dock"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
msgid "Sets icon size of the dock."
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
msgid ""
"Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale'"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
msgid ""
"Sets the position of the dock in the screen. Allowed values are 'right' or "
"'left'"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
msgid "Sets the time duration of the autohide effect."
msgstr ""
#: ../extensions/example/extension.js:11
msgid "Hello, world!"
msgstr "你好,世界!"
#: ../extensions/gajim/extension.js:219
#, c-format
msgid "%s is away."
msgstr "%s 已離開。"
#: ../extensions/gajim/extension.js:222
#, c-format
msgid "%s is offline."
msgstr "%s 現在離線。"
#: ../extensions/gajim/extension.js:225
#, c-format
msgid "%s is online."
msgstr "%s 現在上線。"
#: ../extensions/gajim/extension.js:228
#, c-format
msgid "%s is busy."
msgstr "%s 正忙碌。"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
"restarting the shell to have any effect."
msgstr ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
msgid "Place window captions on top"
msgstr ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid ""
"The algorithm used to layout thumbnails in the overview. 'grid' to use the "
"default grid based algorithm, 'natural' to use another one that reflects "
"more the position and size of the actual window"
msgstr ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
"This setting applies only with the natural placement strategy."
msgstr ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:5
msgid "Use more screen for windows"
msgstr ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:6
msgid "Window placement strategy"
msgstr ""
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "主題的名稱,要從 ~/.themes/name/gnome-shell 載入"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "Theme name"
msgstr "主題名稱"
#: ../extensions/xrandr-indicator/extension.js:26
msgid "Normal"
msgstr "一般"
#: ../extensions/xrandr-indicator/extension.js:27
msgid "Left"
msgstr "左"
#: ../extensions/xrandr-indicator/extension.js:28
msgid "Right"
msgstr "右"
#: ../extensions/xrandr-indicator/extension.js:29
msgid "Upside-down"
msgstr "上下顛倒"
#: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..."
msgstr "設定顯示器設定值..."
+277
View File
@@ -0,0 +1,277 @@
# Chinese (Taiwan) 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.
# Cheng-Chia Tseng <pswo10680@gmail.com>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions gnome-3-0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-08-29 18:59+0800\n"
"PO-Revision-Date: 2011-08-29 17:16+0800\n"
"Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n"
"Language-Team: Chinese (Taiwan) <chinese-l10n@googlegroups.com>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../extensions/alternative-status-menu/extension.js:39
msgid "Available"
msgstr "有空"
#: ../extensions/alternative-status-menu/extension.js:44
msgid "Busy"
msgstr "忙碌"
#: ../extensions/alternative-status-menu/extension.js:52
msgid "My Account"
msgstr "我的帳號"
#: ../extensions/alternative-status-menu/extension.js:56
msgid "System Settings"
msgstr "系統設定值"
#: ../extensions/alternative-status-menu/extension.js:63
msgid "Lock Screen"
msgstr "鎖定畫面"
#: ../extensions/alternative-status-menu/extension.js:68
msgid "Switch User"
msgstr "切換使用者"
#: ../extensions/alternative-status-menu/extension.js:73
msgid "Log Out..."
msgstr "登出..."
#: ../extensions/alternative-status-menu/extension.js:82
msgid "Suspend"
msgstr "暫停"
#: ../extensions/alternative-status-menu/extension.js:88
msgid "Hibernate"
msgstr "休眠"
#: ../extensions/alternative-status-menu/extension.js:94
msgid "Power Off..."
msgstr "關閉電源..."
#: ../extensions/alternate-tab/extension.js:44
msgid ""
"This is the first time you use the Alternate Tab extension. \n"
"Please choose your preferred behaviour:\n"
"\n"
"All & Thumbnails:\n"
" This mode presents all applications from all workspaces in one "
"selection \n"
" list. Instead of using the application icon of every window, it uses "
"small \n"
" thumbnails resembling the window itself. \n"
"\n"
"Workspace & Icons:\n"
" This mode let's you switch between the applications of your current \n"
" workspace and gives you additionally the option to switch to the last "
"used \n"
" application of your previous workspace. This is always the last symbol "
"in \n"
" the list and is segregated by a separator/vertical line if available. \n"
" Every window is represented by its application icon. \n"
"\n"
"Native:\n"
" This mode is the native GNOME 3 behaviour or in other words: Clicking \n"
" native switches the Alternate Tab extension off. \n"
msgstr ""
#: ../extensions/alternate-tab/extension.js:269
msgid "Alt Tab Behaviour"
msgstr ""
#: ../extensions/alternate-tab/extension.js:285
msgid "All & Thumbnails"
msgstr ""
#: ../extensions/alternate-tab/extension.js:292
msgid "Workspace & Icons"
msgstr ""
#: ../extensions/alternate-tab/extension.js:299
msgid "Native"
msgstr ""
#: ../extensions/alternate-tab/extension.js:306
msgid "Cancel"
msgstr ""
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
msgid "Ask the user for a default behaviour if true."
msgstr ""
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
msgid "Indicates if Alternate Tab is newly installed"
msgstr ""
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:3
msgid ""
"Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and "
"workspace_icons."
msgstr ""
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
msgid "The alt tab behaviour."
msgstr ""
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
msgstr ""
"字串的清單,每個都包含一個應用程式 id (桌面檔名稱),後面接著半形分號 \";\" 與"
"工作區號碼"
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
msgid "Application and workspace list"
msgstr "應用程式與工作區清單"
#: ../extensions/dock/extension.js:486
msgid "Drag here to add favorites"
msgstr "拖曳至此處以加入喜好"
#: ../extensions/dock/extension.js:820
msgid "New Window"
msgstr "新視窗"
#: ../extensions/dock/extension.js:822
msgid "Quit Application"
msgstr "退出應用程式"
#: ../extensions/dock/extension.js:827
msgid "Remove from Favorites"
msgstr "自喜好移除"
#: ../extensions/dock/extension.js:828
msgid "Add to Favorites"
msgstr "加入喜好"
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
msgid "Autohide duration"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
msgid "Autohide effect"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
msgid "Enable/disable autohide"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
msgid "Icon size"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
msgid "Position of the dock"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
msgid "Sets icon size of the dock."
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
msgid ""
"Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale'"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
msgid ""
"Sets the position of the dock in the screen. Allowed values are 'right' or "
"'left'"
msgstr ""
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
msgid "Sets the time duration of the autohide effect."
msgstr ""
#: ../extensions/example/extension.js:11
msgid "Hello, world!"
msgstr "你好,世界!"
#: ../extensions/gajim/extension.js:219
#, c-format
msgid "%s is away."
msgstr "%s 已離開。"
#: ../extensions/gajim/extension.js:222
#, c-format
msgid "%s is offline."
msgstr "%s 現在離線。"
#: ../extensions/gajim/extension.js:225
#, c-format
msgid "%s is online."
msgstr "%s 現在上線。"
#: ../extensions/gajim/extension.js:228
#, c-format
msgid "%s is busy."
msgstr "%s 正忙碌。"
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
"restarting the shell to have any effect."
msgstr ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
msgid "Place window captions on top"
msgstr ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
msgid ""
"The algorithm used to layout thumbnails in the overview. 'grid' to use the "
"default grid based algorithm, 'natural' to use another one that reflects "
"more the position and size of the actual window"
msgstr ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
"This setting applies only with the natural placement strategy."
msgstr ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:5
msgid "Use more screen for windows"
msgstr ""
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:6
msgid "Window placement strategy"
msgstr ""
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "主題的名稱,要從 ~/.themes/name/gnome-shell 載入"
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
msgid "Theme name"
msgstr "主題名稱"
#: ../extensions/xrandr-indicator/extension.js:26
msgid "Normal"
msgstr "一般"
#: ../extensions/xrandr-indicator/extension.js:27
msgid "Left"
msgstr "左"
#: ../extensions/xrandr-indicator/extension.js:28
msgid "Right"
msgstr "右"
#: ../extensions/xrandr-indicator/extension.js:29
msgid "Upside-down"
msgstr "上下顛倒"
#: ../extensions/xrandr-indicator/extension.js:78
msgid "Configure display settings..."
msgstr "設定顯示器設定值..."