Compare commits
138 Commits
Author | SHA1 | Date | |
---|---|---|---|
08a159d0d8 | |||
26aa32c6cc | |||
09e6bb5d56 | |||
e661d904de | |||
407d51e871 | |||
c4a07fad83 | |||
9ea8fdc1d1 | |||
3d6bf43649 | |||
7bc1d57ad7 | |||
68b671a4f4 | |||
1de1fd44c5 | |||
e5101eb407 | |||
48e0d86340 | |||
c64cf30160 | |||
ff9d777c01 | |||
d8c33deb33 | |||
c03ff0bd4f | |||
d597633d8f | |||
4f6eb49be3 | |||
d23bd4c4a6 | |||
7f12265685 | |||
250023b823 | |||
3b52691ab4 | |||
b6cd548186 | |||
b3fabf11b1 | |||
15be562fdf | |||
599fa0b76c | |||
c520eb4de0 | |||
e33c68a415 | |||
97bd224261 | |||
503e086c56 | |||
7dd6b7f04f | |||
0b05b7a527 | |||
7e5274619a | |||
900957d658 | |||
e006b9b400 | |||
d042dd73aa | |||
347972e45f | |||
7e803fdf23 | |||
ccacb5f6de | |||
5117139add | |||
d5c0514e21 | |||
d81a6bdf41 | |||
2812afed22 | |||
f5bd86fa11 | |||
b625f1692c | |||
36ac1f8902 | |||
bec4b5c127 | |||
78cd8b9f9a | |||
205880e74e | |||
009d021e4f | |||
39a840e2c3 | |||
56d0d7253b | |||
7a29cc47d4 | |||
d769b72c43 | |||
a3439a5230 | |||
9f45161133 | |||
ed99bef458 | |||
c9ad54cd82 | |||
d7e42d5d6e | |||
5b339c8371 | |||
9c6e68f3e7 | |||
70526a8025 | |||
c405081d89 | |||
384e01b368 | |||
f819654ec8 | |||
4670db6629 | |||
6ebabd50c6 | |||
0c22a21a24 | |||
70a0c4211c | |||
a21af541c4 | |||
e07ba91486 | |||
a22e9ce9cd | |||
d4ce51b1b7 | |||
830005069c | |||
8c49267658 | |||
d0bab1f7ac | |||
f00826f3fb | |||
717c0ea19f | |||
3cd8dd0f32 | |||
aedd616346 | |||
b3de3ff00b | |||
b66dff8aed | |||
ff814df03a | |||
c9a528025c | |||
5f3ec8a6f1 | |||
becd29c50a | |||
a029a35050 | |||
d6a78d61d1 | |||
9be46bd212 | |||
4df3afced0 | |||
90f8e1df80 | |||
ea2ac89e61 | |||
695bfb9616 | |||
5dbdde8c15 | |||
854bfc17ed | |||
c8b192bcae | |||
f07306897f | |||
44d731fff5 | |||
52f939f64c | |||
f1d12c18d8 | |||
373ebb50eb | |||
b0b5be63b9 | |||
68f439425b | |||
cae4d92191 | |||
f336295475 | |||
06d0e7d74a | |||
5e0e3edc7b | |||
02a51bfa65 | |||
dbd04df311 | |||
e6adcd99c7 | |||
3171819c36 | |||
e4976b535d | |||
06d1602f17 | |||
603d0dfbc3 | |||
0b6c5b4620 | |||
d7894dbc44 | |||
d25d8126ea | |||
2402d3e115 | |||
ac4284d348 | |||
f9ef80749a | |||
22f0d3076e | |||
127b6dca1c | |||
8cfff33291 | |||
21f534c7f0 | |||
9faa1db942 | |||
2fc9bffb23 | |||
f16eae45a2 | |||
622e73c34c | |||
eb1c3d7045 | |||
fc26895f70 | |||
ca224b379f | |||
42b609b852 | |||
a24169e2aa | |||
144d1dca88 | |||
38ab6ba3ec | |||
bc6a0626c1 | |||
497f4f4a3c |
94
NEWS
94
NEWS
@ -1,3 +1,97 @@
|
||||
3.23.2
|
||||
======
|
||||
* Implement Pad configuration OSD [Carlos; #771067]
|
||||
* Show overview on three-finger touchpad pinch [Carlos; #765937]
|
||||
* Summarize network sections with too many devices [Florian; #773892]
|
||||
* Always show primary network icon when connected [Florian; #773890]
|
||||
* Fix fullscreen transitions on wayland [Rui; #770345]
|
||||
* Work around portal failures by using a URL without HTPPS redirect [Debarshi; #769940]
|
||||
* Fix app view hiding when no usage data is available [Florian, Xiaoguang; #774381]
|
||||
* Misc. bug fixes [Florian, Ray; #773875, #740043, #773893, #774643, #774805]
|
||||
|
||||
Contributors:
|
||||
Carlos Garnacho, Rui Matos, Florian Müllner, Debarshi Ray, Ray Strode,
|
||||
Xiaoguang Wang
|
||||
|
||||
Translations:
|
||||
Balázs Meskó [hu], Fabio Tomat [fur], Marek Cernocky [cs], Stas Solovey [ru],
|
||||
Daniel Mustieles [es], Marek Černocký [cs], Piotr Drąg [pl],
|
||||
Rafael Fontenelle [pt_BR], Baurzhan Muftakhidinov [kk], Jiri Grönroos [fi],
|
||||
Kjartan Maraas [nb]
|
||||
|
||||
3.23.1
|
||||
======
|
||||
* Request periodic scans while WiFi list is open [Dan; #767918]
|
||||
* Include extension UUID in structured log metadata [Jonh; #770717]
|
||||
* Line-wrap PAM messages on login screen [Tao; #764445]
|
||||
* Add a way to launch an app on the discrete GPU [Bastien; #773117]
|
||||
* Only allow graphs to lift screen shield when locked [Florian; #773328]
|
||||
* Add reload option to gnome-shell-extension-tool [Jonh; #772593]
|
||||
* Update background animations when resuming from suspend [Florian; #773265]
|
||||
* Misc. bug fixes [Cosimo, Bastien, Florian, Philip, Carlos; #772723, #772287,
|
||||
#756432, #772386, #772386, #773085, #773634]
|
||||
|
||||
Contributors:
|
||||
Cosimo Cecchi, Philip Chimento, Carlos Garcia Campos, Florian Müllner,
|
||||
Bastien Nocera, Jonh Wendell, Dan Williams, Tao Yang
|
||||
|
||||
Translations:
|
||||
Fabio Tomat [fur], Philip Chimento [zh_CN], YunQiang Su [zh_CN],
|
||||
Jordi Mas [ca], Piotr Drąg [pl], Muhammet Kara [tr], Marek Černocký [cs],
|
||||
Daniel Korostil [uk], Dušan Kazik [sk]
|
||||
|
||||
3.22.1
|
||||
======
|
||||
* Fix hidden network indicator on startup [Florian; #772249]
|
||||
* Fix order of windows with modal dialogs in window switcher [Florian; #747153]
|
||||
* Fix feedback loop between StClipboard and X11 bridge [Carlos; #760745]
|
||||
* Reliably match windows from Flatpak apps [Florian; #772615]
|
||||
* Misc. bug fixes [Philip; #742249]
|
||||
|
||||
Contributors:
|
||||
Philip Chimento, Carlos Garnacho, Florian Müllner
|
||||
|
||||
Translations:
|
||||
Inaki Larranaga Murgoitio [eu], Khaled Hosny [ar], BM [uz@cyrillic],
|
||||
Milo Casagrande [it], Cheng-Chia Tseng [zh_TW], gogo [hr]
|
||||
|
||||
3.22.0
|
||||
======
|
||||
* Misc. bug fixes [Florian, Rui; #771391, #771536] #771656]
|
||||
|
||||
Contributors:
|
||||
Rui Matos, Florian Müllner
|
||||
|
||||
Translations:
|
||||
Ask Hjorth Larsen [da], GNOME Translation Robot [gd], Alexandre Franke [fr],
|
||||
Daniel Korostil [uk], Jordi Mas [ca], Khaled Hosny [ar], David King [en_GB]
|
||||
|
||||
3.21.92
|
||||
=======
|
||||
* Adjust screen capture to work with multiple stage views [Jonas; #770128]
|
||||
* Improve handling of cycle shortcuts [Florian; #771063]
|
||||
* Fix windows not getting undimmed in some cases [Rui; #770163, #752524]
|
||||
* Disable extension version check by default [Florian; #770887]
|
||||
* Misc. bug fixes [Rui, Florian, Michael; #770382, #770888, #770328]
|
||||
|
||||
Contributors:
|
||||
Jonas Ådahl, Michael Catanzaro, Fran Dieguez, Olivier Fourdan, Rui Matos,
|
||||
Florian Müllner
|
||||
|
||||
Translations:
|
||||
Changwoo Ryu [ko], Baurzhan Muftakhidinov [kk], Aurimas Černius [lt],
|
||||
Muhammet Kara [tr], Trần Ngọc Quân [vi], A S Alam [pa], Yosef Or Boczko [he],
|
||||
Anders Jonsson [sv], Tiago Santos [pt], Hannie Dumoleyn [nl],
|
||||
Rūdolfs Mazurs [lv], Claude Paroz [fr], Arash Mousavi [fa],
|
||||
Fran Dieguez [gl], Stas Solovey [ru], Tom Tryfonidis [el]
|
||||
|
||||
3.21.91
|
||||
=======
|
||||
Translations:
|
||||
Mario Blättermann [de], Jiri Grönroos [fi], Dušan Kazik [sk],
|
||||
Andika Triwidada [id], Daniel Mustieles [es], Fabio Tomat [fur],
|
||||
Enrico Nicoletto [pt_BR], Matej Urbančič [sl], Мирослав Николић [sr, sr@latin]
|
||||
|
||||
3.21.90.1
|
||||
=========
|
||||
Contributors:
|
||||
|
@ -11,6 +11,8 @@ test -z "$srcdir" && srcdir=.
|
||||
exit 1
|
||||
}
|
||||
|
||||
pushd $srcdir
|
||||
|
||||
# Fetch submodules if needed
|
||||
if test ! -f src/gvc/Makefile.am || test ! -f data/theme/gnome-shell-sass/COPYING;
|
||||
then
|
||||
@ -19,6 +21,8 @@ then
|
||||
fi
|
||||
git submodule update
|
||||
|
||||
popd
|
||||
|
||||
which gnome-autogen.sh || {
|
||||
echo "You need to install gnome-common from GNOME Git (or from"
|
||||
echo "your OS vendor's package manager)."
|
||||
|
@ -1029,6 +1029,7 @@ NPP_GetValue(NPP instance,
|
||||
if (!instance->pdata)
|
||||
return NPERR_INVALID_INSTANCE_ERROR;
|
||||
|
||||
funcs.retainobject (instance->pdata);
|
||||
*(NPObject**)value = instance->pdata;
|
||||
break;
|
||||
|
||||
|
10
configure.ac
10
configure.ac
@ -1,5 +1,5 @@
|
||||
AC_PREREQ(2.63)
|
||||
AC_INIT([gnome-shell],[3.21.90.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
AC_INIT([gnome-shell],[3.23.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
AX_IS_RELEASE([git-directory])
|
||||
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
@ -77,8 +77,8 @@ AC_MSG_RESULT($enable_systemd)
|
||||
|
||||
CLUTTER_MIN_VERSION=1.21.5
|
||||
GOBJECT_INTROSPECTION_MIN_VERSION=1.49.1
|
||||
GJS_MIN_VERSION=1.39.0
|
||||
MUTTER_MIN_VERSION=3.21.90
|
||||
GJS_MIN_VERSION=1.47.0
|
||||
MUTTER_MIN_VERSION=3.23.2
|
||||
GTK_MIN_VERSION=3.15.0
|
||||
GIO_MIN_VERSION=2.45.3
|
||||
LIBECAL_MIN_VERSION=3.5.3
|
||||
@ -96,7 +96,7 @@ SHARED_PCS="gio-unix-2.0 >= $GIO_MIN_VERSION
|
||||
libxml-2.0
|
||||
gtk+-3.0 >= $GTK_MIN_VERSION
|
||||
atk-bridge-2.0
|
||||
gjs-internals-1.0 >= $GJS_MIN_VERSION
|
||||
gjs-1.0 >= $GJS_MIN_VERSION
|
||||
$recorder_modules
|
||||
gdk-x11-3.0 libsoup-2.4
|
||||
mutter-clutter-1.0 >= $CLUTTER_MIN_VERSION
|
||||
@ -114,7 +114,7 @@ fi
|
||||
PKG_CHECK_MODULES(GNOME_SHELL, $SHARED_PCS)
|
||||
PKG_CHECK_MODULES(MUTTER, libmutter >= $MUTTER_MIN_VERSION)
|
||||
|
||||
PKG_CHECK_MODULES(GNOME_SHELL_JS, gio-2.0 gjs-internals-1.0 >= $GJS_MIN_VERSION)
|
||||
PKG_CHECK_MODULES(GNOME_SHELL_JS, gio-2.0 gjs-1.0 >= $GJS_MIN_VERSION)
|
||||
PKG_CHECK_MODULES(ST, mutter-clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.8 x11)
|
||||
PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0)
|
||||
PKG_CHECK_MODULES(SHELL_HOTPLUG_SNIFFER, gio-2.0 gdk-pixbuf-2.0)
|
||||
|
@ -38,6 +38,7 @@ endif
|
||||
|
||||
introspectiondir = $(datadir)/dbus-1/interfaces
|
||||
introspection_DATA = \
|
||||
org.gnome.Shell.PadOsd.xml \
|
||||
org.gnome.Shell.Screencast.xml \
|
||||
org.gnome.Shell.Screenshot.xml \
|
||||
org.gnome.ShellSearchProvider.xml \
|
||||
@ -63,6 +64,7 @@ dist_theme_files = \
|
||||
theme/gnome-shell-sass/NEWS \
|
||||
theme/gnome-shell-sass/README \
|
||||
theme/gnome-shell-sass/gnome-shell-sass.doap \
|
||||
theme/pad-osd.css \
|
||||
theme/parse-sass.sh \
|
||||
$(NULL)
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
<file>no-events.svg</file>
|
||||
<file>no-notifications.svg</file>
|
||||
<file>noise-texture.png</file>
|
||||
<file>pad-osd.css</file>
|
||||
<file>page-indicator-active.svg</file>
|
||||
<file>page-indicator-inactive.svg</file>
|
||||
<file>page-indicator-checked.svg</file>
|
||||
|
28
data/org.gnome.Shell.PadOsd.xml
Normal file
28
data/org.gnome.Shell.PadOsd.xml
Normal file
@ -0,0 +1,28 @@
|
||||
<!DOCTYPE node PUBLIC
|
||||
'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
|
||||
'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
|
||||
<node>
|
||||
|
||||
<!--
|
||||
org.gnome.Shell.PadOSD:
|
||||
@short_description: Pad OSD interface
|
||||
|
||||
The interface used to show button map OSD on pad devices.
|
||||
-->
|
||||
<interface name='org.gnome.Shell.Wacom.PadOsd'>
|
||||
|
||||
<!--
|
||||
Show:
|
||||
@device_node: device node file, usually in /dev/input/...
|
||||
@edition_mode: whether toggling edition mode on when showing
|
||||
|
||||
Shows the pad button map OSD for the requested device, the OSD
|
||||
will be shown according the current device settings (output
|
||||
mapping, left handed mode, ...)
|
||||
-->
|
||||
<method name='Show'>
|
||||
<arg name='device_node' direction='in' type='o'/>
|
||||
<arg name='edition_mode' direction='in' type='b'/>
|
||||
</method>
|
||||
</interface>
|
||||
</node>
|
@ -22,7 +22,7 @@
|
||||
</description>
|
||||
</key>
|
||||
<key name="disable-extension-version-validation" type="b">
|
||||
<default>false</default>
|
||||
<default>true</default>
|
||||
<summary>Disables the validation of extension version compatibility</summary>
|
||||
<description>
|
||||
GNOME Shell will only load extensions that claim to support the current
|
||||
|
@ -562,6 +562,14 @@ StScrollBar {
|
||||
background-color: #eeeeec;
|
||||
border-radius: 0.3em; }
|
||||
|
||||
/* Pad OSD */
|
||||
.pad-osd-window {
|
||||
padding: 32px;
|
||||
background-color: rgba(0, 0, 0, 0.8); }
|
||||
|
||||
.combo-box-label {
|
||||
width: 15em; }
|
||||
|
||||
/* App Switcher */
|
||||
.switcher-popup {
|
||||
padding: 8px;
|
||||
@ -604,6 +612,10 @@ StScrollBar {
|
||||
width: 96px;
|
||||
height: 96px; }
|
||||
|
||||
/* Window Cycler */
|
||||
.cycler-highlight {
|
||||
border: 5px solid #215d9c; }
|
||||
|
||||
/* Workspace Switcher */
|
||||
.workspace-switcher-group {
|
||||
padding: 12px; }
|
||||
|
Submodule data/theme/gnome-shell-sass updated: 7ab2789464...50bbd0b50f
@ -562,6 +562,14 @@ StScrollBar {
|
||||
background-color: #eeeeec;
|
||||
border-radius: 0.3em; }
|
||||
|
||||
/* Pad OSD */
|
||||
.pad-osd-window {
|
||||
padding: 32px;
|
||||
background-color: rgba(0, 0, 0, 0.8); }
|
||||
|
||||
.combo-box-label {
|
||||
width: 15em; }
|
||||
|
||||
/* App Switcher */
|
||||
.switcher-popup {
|
||||
padding: 8px;
|
||||
@ -604,6 +612,10 @@ StScrollBar {
|
||||
width: 96px;
|
||||
height: 96px; }
|
||||
|
||||
/* Window Cycler */
|
||||
.cycler-highlight {
|
||||
border: 5px solid #215d9c; }
|
||||
|
||||
/* Workspace Switcher */
|
||||
.workspace-switcher-group {
|
||||
padding: 12px; }
|
||||
|
30
data/theme/pad-osd.css
Normal file
30
data/theme/pad-osd.css
Normal file
@ -0,0 +1,30 @@
|
||||
.Leader {
|
||||
stroke-width: .5 !important;
|
||||
stroke: #535353;
|
||||
fill: none !important;
|
||||
}
|
||||
|
||||
.Button {
|
||||
stroke-width: .25;
|
||||
stroke: #ededed;
|
||||
fill: #ededed;
|
||||
}
|
||||
|
||||
.Ring {
|
||||
stroke-width: .5 !important;
|
||||
stroke: #535353 !important;
|
||||
fill: none !important;
|
||||
}
|
||||
|
||||
.Label {
|
||||
stroke: none !important;
|
||||
stroke-width: .1 !important;
|
||||
font-size: .1 !important;
|
||||
fill: transparent !important;
|
||||
}
|
||||
|
||||
.TouchStrip, .TouchRing {
|
||||
stroke-width: .1 !important;
|
||||
stroke: #ededed !important;
|
||||
fill: #535353 !important;
|
||||
}
|
@ -152,6 +152,7 @@ const Application = new Lang.Class({
|
||||
let scroll = new Gtk.ScrolledWindow({ hscrollbar_policy: Gtk.PolicyType.NEVER,
|
||||
shadow_type: Gtk.ShadowType.IN,
|
||||
halign: Gtk.Align.CENTER,
|
||||
propagate_natural_width: true,
|
||||
margin: 18 });
|
||||
this._window.add(scroll);
|
||||
|
||||
|
@ -13,6 +13,7 @@ const Params = imports.misc.params;
|
||||
const ShellEntry = imports.ui.shellEntry;
|
||||
const Tweener = imports.ui.tweener;
|
||||
const UserWidget = imports.ui.userWidget;
|
||||
const Pango = imports.gi.Pango;
|
||||
|
||||
const DEFAULT_BUTTON_WELL_ICON_SIZE = 16;
|
||||
const DEFAULT_BUTTON_WELL_ANIMATION_DELAY = 1.0;
|
||||
@ -113,6 +114,7 @@ const AuthPrompt = new Lang.Class({
|
||||
this._message = new St.Label({ opacity: 0,
|
||||
styleClass: 'login-dialog-message' });
|
||||
this._message.clutter_text.line_wrap = true;
|
||||
this._message.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||
this.actor.add(this._message, { x_fill: false, x_align: St.Align.START, y_align: St.Align.START });
|
||||
|
||||
this._buttonBox = new St.BoxLayout({ style_class: 'login-dialog-button-box',
|
||||
|
@ -804,6 +804,11 @@ const LoginDialog = new Lang.Class({
|
||||
|
||||
this._user = null;
|
||||
|
||||
if (this._nextSignalId) {
|
||||
this._authPrompt.disconnect(this._nextSignalId);
|
||||
this._nextSignalId = 0;
|
||||
}
|
||||
|
||||
if (beginRequest == AuthPrompt.BeginRequestType.PROVIDE_USERNAME) {
|
||||
if (!this._disableUserList)
|
||||
this._showUserList();
|
||||
|
@ -72,6 +72,7 @@
|
||||
<file>ui/osdMonitorLabeler.js</file>
|
||||
<file>ui/overview.js</file>
|
||||
<file>ui/overviewControls.js</file>
|
||||
<file>ui/padOsd.js</file>
|
||||
<file>ui/panel.js</file>
|
||||
<file>ui/panelMenu.js</file>
|
||||
<file>ui/pointerWatcher.js</file>
|
||||
|
@ -6,9 +6,7 @@
|
||||
const Lang = imports.lang;
|
||||
const Signals = imports.signals;
|
||||
|
||||
const GLib = imports.gi.GLib;
|
||||
const Gio = imports.gi.Gio;
|
||||
const ShellJS = imports.gi.ShellJS;
|
||||
|
||||
const Config = imports.misc.config;
|
||||
const FileUtils = imports.misc.fileUtils;
|
||||
@ -21,14 +19,25 @@ const ExtensionType = {
|
||||
// Maps uuid -> metadata object
|
||||
const extensions = {};
|
||||
|
||||
/**
|
||||
* getCurrentExtension:
|
||||
*
|
||||
* Returns the current extension, or null if not called from an extension.
|
||||
*/
|
||||
function getCurrentExtension() {
|
||||
let stack = (new Error()).stack;
|
||||
let stack = (new Error()).stack.split('\n');
|
||||
let extensionStackLine;
|
||||
|
||||
// Assuming we're importing this directly from an extension (and we shouldn't
|
||||
// ever not be), its UUID should be directly in the path here.
|
||||
let extensionStackLine = stack.split('\n')[1];
|
||||
// Search for an occurrence of an extension stack frame
|
||||
// Start at 1 because 0 is the stack frame of this function
|
||||
for (let i = 1; i < stack.length; i++) {
|
||||
if (stack[i].indexOf('/gnome-shell/extensions/') > -1) {
|
||||
extensionStackLine = stack[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!extensionStackLine)
|
||||
throw new Error('Could not find current extension');
|
||||
return null;
|
||||
|
||||
// The stack line is like:
|
||||
// init([object Object])@/home/user/data/gnome-shell/extensions/u@u.id/prefs.js:8
|
||||
@ -38,7 +47,7 @@ function getCurrentExtension() {
|
||||
// @/home/user/data/gnome-shell/extensions/u@u.id/prefs.js:8
|
||||
let match = new RegExp('@(.+):\\d+').exec(extensionStackLine);
|
||||
if (!match)
|
||||
throw new Error('Could not find current extension');
|
||||
return null;
|
||||
|
||||
let path = match[1];
|
||||
let file = Gio.File.new_for_path(path);
|
||||
@ -52,7 +61,7 @@ function getCurrentExtension() {
|
||||
file = file.get_parent();
|
||||
}
|
||||
|
||||
throw new Error('Could not find current extension');
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -140,12 +149,13 @@ function createExtensionObject(uuid, dir, type) {
|
||||
return extension;
|
||||
}
|
||||
|
||||
var _extension = null;
|
||||
|
||||
function installImporter(extension) {
|
||||
_extension = extension;
|
||||
ShellJS.add_extension_importer('imports.misc.extensionUtils._extension', 'imports', extension.path);
|
||||
_extension = null;
|
||||
let oldSearchPath = imports.searchPath.slice(); // make a copy
|
||||
imports.searchPath = [extension.dir.get_parent().get_path()];
|
||||
// importing a "subdir" creates a new importer object that doesn't affect
|
||||
// the global one
|
||||
extension.imports = imports[extension.uuid];
|
||||
imports.searchPath = oldSearchPath;
|
||||
}
|
||||
|
||||
const ExtensionFinder = new Lang.Class({
|
||||
|
@ -94,7 +94,7 @@ function spawnApp(argv) {
|
||||
Gio.AppInfoCreateFlags.SUPPORTS_STARTUP_NOTIFICATION);
|
||||
|
||||
let context = global.create_app_launch_context(0, -1);
|
||||
app.launch([], context);
|
||||
app.launch([], context, false);
|
||||
} catch(err) {
|
||||
_handleSpawnError(argv[0], err);
|
||||
}
|
||||
|
@ -20,6 +20,8 @@ const PortalHelperResult = {
|
||||
};
|
||||
|
||||
const INACTIVITY_TIMEOUT = 30000; //ms
|
||||
const CONNECTIVITY_CHECK_HOST = 'nmcheck.gnome.org';
|
||||
const CONNECTIVITY_CHECK_URI = 'http://' + CONNECTIVITY_CHECK_HOST;
|
||||
const CONNECTIVITY_RECHECK_RATELIMIT_TIMEOUT = 30 * GLib.USEC_PER_SEC;
|
||||
|
||||
const HelperDBusInterface = '<node> \
|
||||
@ -50,7 +52,7 @@ const PortalWindow = new Lang.Class({
|
||||
this.parent({ application: application });
|
||||
|
||||
if (!url) {
|
||||
url = 'http://www.gnome.org';
|
||||
url = CONNECTIVITY_CHECK_URI;
|
||||
this._originalUrlWasGnome = true;
|
||||
} else {
|
||||
this._originalUrlWasGnome = false;
|
||||
@ -112,12 +114,12 @@ const PortalWindow = new Lang.Class({
|
||||
let uri = new Soup.URI(request.get_uri());
|
||||
|
||||
if (!uri.host_equal(this._uri) && this._originalUrlWasGnome) {
|
||||
if (uri.get_host() == 'www.gnome.org' && this._everSeenRedirect) {
|
||||
if (uri.get_host() == CONNECTIVITY_CHECK_HOST && this._everSeenRedirect) {
|
||||
// Yay, we got to gnome!
|
||||
decision.ignore();
|
||||
this._doneCallback(PortalHelperResult.COMPLETED);
|
||||
return true;
|
||||
} else if (uri.get_host() != 'www.gnome.org') {
|
||||
} else if (uri.get_host() != CONNECTIVITY_CHECK_HOST) {
|
||||
this._everSeenRedirect = true;
|
||||
}
|
||||
}
|
||||
|
111
js/ui/altTab.js
111
js/ui/altTab.js
@ -46,6 +46,19 @@ function _createWindowClone(window, size) {
|
||||
y_expand: true });
|
||||
};
|
||||
|
||||
function getWindows(workspace) {
|
||||
// We ignore skip-taskbar windows in switchers, but if they are attached
|
||||
// to their parent, their position in the MRU list may be more appropriate
|
||||
// than the parent; so start with the complete list ...
|
||||
let windows = global.display.get_tab_list(Meta.TabList.NORMAL_ALL,
|
||||
workspace);
|
||||
// ... map windows to their parent where appropriate ...
|
||||
return windows.map(w => {
|
||||
return w.is_attached_dialog() ? w.get_transient_for() : w;
|
||||
// ... and filter out skip-taskbar windows and duplicates
|
||||
}).filter((w, i, a) => !w.skip_taskbar && a.indexOf(w) == i);
|
||||
}
|
||||
|
||||
const AppSwitcherPopup = new Lang.Class({
|
||||
Name: 'AppSwitcherPopup',
|
||||
Extends: SwitcherPopup.SwitcherPopup,
|
||||
@ -354,6 +367,67 @@ const AppSwitcherPopup = new Lang.Class({
|
||||
}
|
||||
});
|
||||
|
||||
const CyclerHighlight = new Lang.Class({
|
||||
Name: 'CyclerHighlight',
|
||||
|
||||
_init: function() {
|
||||
this._window = null;
|
||||
|
||||
this.actor = new St.Widget({ layout_manager: new Clutter.BinLayout() });
|
||||
|
||||
this._clone = new Clutter.Clone();
|
||||
this.actor.add_actor(this._clone);
|
||||
|
||||
this._highlight = new St.Widget({ style_class: 'cycler-highlight' });
|
||||
this.actor.add_actor(this._highlight);
|
||||
|
||||
let coordinate = Clutter.BindCoordinate.ALL;
|
||||
let constraint = new Clutter.BindConstraint({ coordinate: coordinate });
|
||||
this._clone.bind_property('source', constraint, 'source', 0);
|
||||
|
||||
this.actor.add_constraint(constraint);
|
||||
|
||||
this.actor.connect('notify::allocation',
|
||||
Lang.bind(this, this._onAllocationChanged));
|
||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||
},
|
||||
|
||||
set window(w) {
|
||||
if (this._window == w)
|
||||
return;
|
||||
|
||||
this._window = w;
|
||||
|
||||
if (this._clone.source)
|
||||
this._clone.source.sync_visibility();
|
||||
|
||||
let windowActor = this._window ? this._window.get_compositor_private()
|
||||
: null;
|
||||
|
||||
if (windowActor)
|
||||
windowActor.hide();
|
||||
|
||||
this._clone.source = windowActor;
|
||||
},
|
||||
|
||||
_onAllocationChanged: function() {
|
||||
if (!this._window) {
|
||||
this._highlight.set_size(0, 0);
|
||||
this._highlight.hide();
|
||||
} else {
|
||||
let [x, y] = this.actor.allocation.get_origin();
|
||||
let rect = this._window.get_frame_rect();
|
||||
this._highlight.set_size(rect.width, rect.height);
|
||||
this._highlight.set_position(rect.x - x, rect.y - y);
|
||||
this._highlight.show();
|
||||
}
|
||||
},
|
||||
|
||||
_onDestroy: function() {
|
||||
this.window = null;
|
||||
}
|
||||
});
|
||||
|
||||
const CyclerPopup = new Lang.Class({
|
||||
Name: 'CyclerPopup',
|
||||
Extends: SwitcherPopup.SwitcherPopup,
|
||||
@ -367,6 +441,9 @@ const CyclerPopup = new Lang.Class({
|
||||
if (this._items.length == 0)
|
||||
return;
|
||||
|
||||
this._highlight = new CyclerHighlight();
|
||||
global.window_group.add_actor(this._highlight.actor);
|
||||
|
||||
// We don't show an actual popup, so just provide what SwitcherPopup
|
||||
// expects instead of inheriting from SwitcherList
|
||||
this._switcherList = { actor: new St.Widget(),
|
||||
@ -375,11 +452,37 @@ const CyclerPopup = new Lang.Class({
|
||||
},
|
||||
|
||||
_highlightItem: function(index, justOutline) {
|
||||
Main.activateWindow(this._items[index]);
|
||||
this._highlight.window = this._items[index];
|
||||
global.window_group.set_child_above_sibling(this._highlight.actor, null);
|
||||
},
|
||||
|
||||
_finish: function() {
|
||||
this._highlightItem(this._selectedIndex);
|
||||
let window = this._items[this._selectedIndex];
|
||||
let ws = window.get_workspace();
|
||||
let activeWs = global.screen.get_active_workspace();
|
||||
|
||||
if (window.minimized) {
|
||||
Main.wm.skipNextEffect(window.get_compositor_private());
|
||||
window.unminimize();
|
||||
}
|
||||
|
||||
if (activeWs == ws) {
|
||||
Main.activateWindow(window);
|
||||
} else {
|
||||
// If the selected window is on a different workspace, we don't
|
||||
// want it to disappear, then slide in with the workspace; instead,
|
||||
// always activate it on the active workspace ...
|
||||
activeWs.activate_with_focus(window, global.get_current_time());
|
||||
|
||||
// ... then slide it over to the original workspace if necessary
|
||||
Main.wm.actionMoveWindow(window, ws);
|
||||
}
|
||||
|
||||
this.parent();
|
||||
},
|
||||
|
||||
_onDestroy: function() {
|
||||
this._highlight.actor.destroy();
|
||||
|
||||
this.parent();
|
||||
}
|
||||
@ -427,7 +530,7 @@ const WindowSwitcherPopup = new Lang.Class({
|
||||
|
||||
_getWindowList: function() {
|
||||
let workspace = this._settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() : null;
|
||||
return global.display.get_tab_list(Meta.TabList.NORMAL, workspace);
|
||||
return getWindows(workspace);
|
||||
},
|
||||
|
||||
_keyPressHandler: function(keysym, action) {
|
||||
@ -465,7 +568,7 @@ const WindowCyclerPopup = new Lang.Class({
|
||||
|
||||
_getWindows: function() {
|
||||
let workspace = this._settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() : null;
|
||||
return global.display.get_tab_list(Meta.TabList.NORMAL, workspace);
|
||||
return getWindows(workspace);
|
||||
},
|
||||
|
||||
_keyPressHandler: function(keysym, action) {
|
||||
|
@ -67,7 +67,7 @@ const Animation = new Lang.Class({
|
||||
},
|
||||
|
||||
_animationsLoaded: function() {
|
||||
this._isLoaded = true;
|
||||
this._isLoaded = this._animations.get_n_children() > 0;
|
||||
|
||||
if (this._isPlaying)
|
||||
this.play();
|
||||
|
@ -60,6 +60,18 @@ const PAGE_SWITCH_TIME = 0.3;
|
||||
const VIEWS_SWITCH_TIME = 0.4;
|
||||
const VIEWS_SWITCH_ANIMATION_DELAY = 0.1;
|
||||
|
||||
const SWITCHEROO_BUS_NAME = 'net.hadess.SwitcherooControl';
|
||||
const SWITCHEROO_OBJECT_PATH = '/net/hadess/SwitcherooControl';
|
||||
|
||||
const SwitcherooProxyInterface = '<node> \
|
||||
<interface name="net.hadess.SwitcherooControl"> \
|
||||
<property name="HasDualGpu" type="b" access="read"/> \
|
||||
</interface> \
|
||||
</node>';
|
||||
|
||||
const SwitcherooProxy = Gio.DBusProxy.makeProxyWrapper(SwitcherooProxyInterface);
|
||||
let discreteGpuAvailable = false;
|
||||
|
||||
function _getCategories(info) {
|
||||
let categoriesStr = info.get_categories();
|
||||
if (!categoriesStr)
|
||||
@ -198,6 +210,14 @@ const BaseAppView = new Lang.Class({
|
||||
},
|
||||
|
||||
animate: function(animationDirection, onComplete) {
|
||||
if (onComplete) {
|
||||
let animationDoneId = this._grid.connect('animation-done', Lang.bind(this,
|
||||
function () {
|
||||
this._grid.disconnect(animationDoneId);
|
||||
onComplete();
|
||||
}));
|
||||
}
|
||||
|
||||
if (animationDirection == IconGrid.AnimationDirection.IN) {
|
||||
let toAnimate = this._grid.actor.connect('notify::allocation', Lang.bind(this,
|
||||
function() {
|
||||
@ -213,14 +233,6 @@ const BaseAppView = new Lang.Class({
|
||||
} else {
|
||||
this._doSpringAnimation(animationDirection);
|
||||
}
|
||||
|
||||
if (onComplete) {
|
||||
let animationDoneId = this._grid.connect('animation-done', Lang.bind(this,
|
||||
function () {
|
||||
this._grid.disconnect(animationDoneId);
|
||||
onComplete();
|
||||
}));
|
||||
}
|
||||
},
|
||||
|
||||
animateSwitch: function(animationDirection) {
|
||||
@ -969,10 +981,36 @@ const AppDisplay = new Lang.Class({
|
||||
initialView = Views.ALL;
|
||||
this._showView(initialView);
|
||||
this._updateFrequentVisibility();
|
||||
|
||||
Gio.DBus.system.watch_name(SWITCHEROO_BUS_NAME,
|
||||
Gio.BusNameWatcherFlags.NONE,
|
||||
Lang.bind(this, this._switcherooProxyAppeared),
|
||||
Lang.bind(this, function() {
|
||||
this._switcherooProxy = null;
|
||||
this._updateDiscreteGpuAvailable();
|
||||
}));
|
||||
},
|
||||
|
||||
_updateDiscreteGpuAvailable: function() {
|
||||
if (!this._switcherooProxy)
|
||||
discreteGpuAvailable = false;
|
||||
else
|
||||
discreteGpuAvailable = this._switcherooProxy.HasDualGpu;
|
||||
},
|
||||
|
||||
_switcherooProxyAppeared: function() {
|
||||
this._switcherooProxy = new SwitcherooProxy(Gio.DBus.system, SWITCHEROO_BUS_NAME, SWITCHEROO_OBJECT_PATH,
|
||||
Lang.bind(this, function(proxy, error) {
|
||||
if (error) {
|
||||
log(error.message);
|
||||
return;
|
||||
}
|
||||
this._updateDiscreteGpuAvailable();
|
||||
}));
|
||||
},
|
||||
|
||||
animate: function(animationDirection, onComplete) {
|
||||
let currentView = this._views[global.settings.get_uint('app-picker-view')].view;
|
||||
let currentView = this._views.filter(v => v.control.has_style_pseudo_class('checked')).pop().view;
|
||||
|
||||
// Animate controls opacity using iconGrid animation time, since
|
||||
// it will be the time the AllView or FrequentView takes to show
|
||||
@ -1861,6 +1899,19 @@ const AppIconMenu = new Lang.Class({
|
||||
this._appendSeparator();
|
||||
}
|
||||
|
||||
if (discreteGpuAvailable &&
|
||||
this._source.app.state == Shell.AppState.STOPPED &&
|
||||
actions.indexOf('activate-discrete-gpu') == -1) {
|
||||
this._onDiscreteGpuMenuItem = this._appendMenuItem(_("Launch using Dedicated Graphics Card"));
|
||||
this._onDiscreteGpuMenuItem.connect('activate', Lang.bind(this, function() {
|
||||
if (this._source.app.state == Shell.AppState.STOPPED)
|
||||
this._source.animateLaunch();
|
||||
|
||||
this._source.app.launch(0, -1, true);
|
||||
this.emit('activate-window', null);
|
||||
}));
|
||||
}
|
||||
|
||||
for (let i = 0; i < actions.length; i++) {
|
||||
let action = actions[i];
|
||||
let item = this._appendMenuItem(appInfo.get_action_name(action));
|
||||
|
@ -102,6 +102,7 @@ const Lang = imports.lang;
|
||||
const Meta = imports.gi.Meta;
|
||||
const Signals = imports.signals;
|
||||
|
||||
const LoginManager = imports.misc.loginManager;
|
||||
const Main = imports.ui.main;
|
||||
const Params = imports.misc.params;
|
||||
const Tweener = imports.ui.tweener;
|
||||
@ -254,6 +255,13 @@ const Background = new Lang.Class({
|
||||
this._loadAnimation(this._animation.file);
|
||||
}));
|
||||
|
||||
LoginManager.getLoginManager().connect('prepare-for-sleep',
|
||||
(lm, aboutToSuspend) => {
|
||||
if (aboutToSuspend)
|
||||
return;
|
||||
this._refreshAnimation();
|
||||
});
|
||||
|
||||
this._settingsChangedSignalId = this._settings.connect('changed', Lang.bind(this, function() {
|
||||
this.emit('changed');
|
||||
}));
|
||||
@ -282,10 +290,16 @@ const Background = new Lang.Class({
|
||||
},
|
||||
|
||||
updateResolution: function() {
|
||||
if (this._animation) {
|
||||
this._removeAnimationTimeout();
|
||||
this._updateAnimation();
|
||||
}
|
||||
if (this._animation)
|
||||
this._refreshAnimation();
|
||||
},
|
||||
|
||||
_refreshAnimation: function() {
|
||||
if (!this._animation)
|
||||
return;
|
||||
|
||||
this._removeAnimationTimeout();
|
||||
this._updateAnimation();
|
||||
},
|
||||
|
||||
_setLoaded: function() {
|
||||
|
@ -902,7 +902,7 @@ const EventsSection = new Lang.Class({
|
||||
let app = this._getCalendarApp();
|
||||
if (app.get_id() == 'evolution.desktop')
|
||||
app = Gio.DesktopAppInfo.new('evolution-calendar.desktop');
|
||||
app.launch([], global.create_app_launch_context(0, -1));
|
||||
app.launch([], global.create_app_launch_context(0, -1), false);
|
||||
},
|
||||
|
||||
setDate: function(date) {
|
||||
|
@ -64,7 +64,8 @@ function startAppForMount(app, mount) {
|
||||
|
||||
try {
|
||||
retval = app.launch(files,
|
||||
global.create_app_launch_context(0, -1))
|
||||
global.create_app_launch_context(0, -1),
|
||||
false)
|
||||
} catch (e) {
|
||||
log('Unable to launch the application ' + app.get_name()
|
||||
+ ': ' + e.toString());
|
||||
|
@ -615,6 +615,14 @@ const NetworkAgent = new Lang.Class({
|
||||
this._vpnRequests = { };
|
||||
this._notifications = { };
|
||||
|
||||
this._pluginDir = Gio.file_new_for_path(GLib.build_filenamev([Config.SYSCONFDIR, 'NetworkManager/VPN']));
|
||||
try {
|
||||
let monitor = this._pluginDir.monitor(Gio.FileMonitorFlags.NONE, null);
|
||||
monitor.connect('changed', () => { this._vpnCacheBuilt = false; });
|
||||
} catch(e) {
|
||||
log('Failed to create monitor for VPN plugin dir: ' + e.message);
|
||||
}
|
||||
|
||||
this._native.connect('new-request', Lang.bind(this, this._newRequest));
|
||||
this._native.connect('cancel-request', Lang.bind(this, this._cancelRequest));
|
||||
|
||||
@ -765,9 +773,8 @@ const NetworkAgent = new Lang.Class({
|
||||
this._vpnCacheBuilt = true;
|
||||
this._vpnBinaries = { };
|
||||
|
||||
let dir = Gio.file_new_for_path(GLib.build_filenamev([Config.SYSCONFDIR, 'NetworkManager/VPN']));
|
||||
try {
|
||||
let fileEnum = dir.enumerate_children('standard::name', Gio.FileQueryInfoFlags.NONE, null);
|
||||
let fileEnum = this._pluginDir.enumerate_children('standard::name', Gio.FileQueryInfoFlags.NONE, null);
|
||||
let info;
|
||||
|
||||
while ((info = fileEnum.next_file(null))) {
|
||||
@ -777,7 +784,7 @@ const NetworkAgent = new Lang.Class({
|
||||
|
||||
try {
|
||||
let keyfile = new GLib.KeyFile();
|
||||
keyfile.load_from_file(dir.get_child(name).get_path(), GLib.KeyFileFlags.NONE);
|
||||
keyfile.load_from_file(this._pluginDir.get_child(name).get_path(), GLib.KeyFileFlags.NONE);
|
||||
let service = keyfile.get_string('VPN Connection', 'service');
|
||||
let binary = keyfile.get_string('GNOME', 'auth-dialog');
|
||||
let externalUIMode = false;
|
||||
@ -810,7 +817,7 @@ const NetworkAgent = new Lang.Class({
|
||||
}
|
||||
} catch(e) {
|
||||
log('Error \'%s\' while processing VPN keyfile \'%s\''.
|
||||
format(e.message, dir.get_child(name).get_path()));
|
||||
format(e.message, this._pluginDir.get_child(name).get_path()));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
@ -475,6 +475,11 @@ const ChatSource = new Lang.Class({
|
||||
this._channel.close_async(function(channel, result) {
|
||||
channel.close_finish(result);
|
||||
});
|
||||
} else {
|
||||
// Don't indicate any unread messages when the notification
|
||||
// that represents them has been destroyed.
|
||||
this._pendingMessages = [];
|
||||
this.countUpdated();
|
||||
}
|
||||
|
||||
// Keep source alive while the channel is open
|
||||
|
@ -61,10 +61,19 @@ function _patchLayoutClass(layoutClass, styleProps) {
|
||||
};
|
||||
}
|
||||
|
||||
function _makeLoggingFunc(func) {
|
||||
return function() {
|
||||
return func([].join.call(arguments, ', '));
|
||||
};
|
||||
function _loggingFunc() {
|
||||
let fields = {'MESSAGE': [].join.call(arguments, ', ')};
|
||||
let domain = "GNOME Shell";
|
||||
|
||||
// If the caller is an extension, add it as metadata
|
||||
let extension = imports.misc.extensionUtils.getCurrentExtension();
|
||||
if (extension != null) {
|
||||
domain = extension.metadata.name;
|
||||
fields['GNOME_SHELL_EXTENSION_UUID'] = extension.uuid;
|
||||
fields['GNOME_SHELL_EXTENSION_NAME'] = extension.metadata.name;
|
||||
}
|
||||
|
||||
GLib.log_structured(domain, GLib.LogLevelFlags.LEVEL_MESSAGE, fields);
|
||||
}
|
||||
|
||||
function init() {
|
||||
@ -72,7 +81,7 @@ function init() {
|
||||
// browser convention of having that namespace be called 'window'.)
|
||||
window.global = Shell.Global.get();
|
||||
|
||||
window.log = _makeLoggingFunc(window.log);
|
||||
window.log = _loggingFunc;
|
||||
|
||||
window._ = Gettext.gettext;
|
||||
window.C_ = Gettext.pgettext;
|
||||
|
@ -26,6 +26,7 @@ const ModalDialog = imports.ui.modalDialog;
|
||||
const OsdWindow = imports.ui.osdWindow;
|
||||
const OsdMonitorLabeler = imports.ui.osdMonitorLabeler;
|
||||
const Overview = imports.ui.overview;
|
||||
const PadOsd = imports.ui.padOsd;
|
||||
const Panel = imports.ui.panel;
|
||||
const Params = imports.misc.params;
|
||||
const RunDialog = imports.ui.runDialog;
|
||||
@ -61,6 +62,7 @@ let screenShield = null;
|
||||
let notificationDaemon = null;
|
||||
let windowAttentionHandler = null;
|
||||
let ctrlAltTabManager = null;
|
||||
let padOsdService = null;
|
||||
let osdWindowManager = null;
|
||||
let osdMonitorLabeler = null;
|
||||
let sessionMode = null;
|
||||
@ -155,6 +157,7 @@ function _initializeUI() {
|
||||
// working until it's updated.
|
||||
uiGroup = layoutManager.uiGroup;
|
||||
|
||||
padOsdService = new PadOsd.PadOsdService();
|
||||
screencastService = new Screencast.ScreencastService();
|
||||
xdndHandler = new XdndHandler.XdndHandler();
|
||||
ctrlAltTabManager = new CtrlAltTab.CtrlAltTabManager();
|
||||
|
@ -72,8 +72,8 @@ const OsdWindowConstraint = new Lang.Class({
|
||||
|
||||
// Recenter
|
||||
let [x, y] = actorBox.get_origin();
|
||||
actorBox.set_origin(Math.floor(x + width / 2 - size / 2),
|
||||
Math.floor(y + height / 2 - size / 2));
|
||||
actorBox.set_origin(Math.ceil(x + width / 2 - size / 2),
|
||||
Math.ceil(y + height / 2 - size / 2));
|
||||
}
|
||||
});
|
||||
|
||||
@ -109,8 +109,11 @@ const OsdWindow = new Lang.Class({
|
||||
this._reset();
|
||||
|
||||
Main.layoutManager.connect('monitors-changed',
|
||||
Lang.bind(this, this._monitorsChanged));
|
||||
this._monitorsChanged();
|
||||
Lang.bind(this, this._relayout));
|
||||
let themeContext = St.ThemeContext.get_for_stage(global.stage);
|
||||
themeContext.connect('notify::scale-factor',
|
||||
Lang.bind(this, this._relayout));
|
||||
this._relayout();
|
||||
Main.uiGroup.add_child(this.actor);
|
||||
},
|
||||
|
||||
@ -188,7 +191,7 @@ const OsdWindow = new Lang.Class({
|
||||
this.setLevel(null);
|
||||
},
|
||||
|
||||
_monitorsChanged: function() {
|
||||
_relayout: function() {
|
||||
/* assume 110x110 on a 640x480 display and scale from there */
|
||||
let monitor = Main.layoutManager.monitors[this._monitorIndex];
|
||||
if (!monitor)
|
||||
|
761
js/ui/padOsd.js
Normal file
761
js/ui/padOsd.js
Normal file
@ -0,0 +1,761 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Lang = imports.lang;
|
||||
const Meta = imports.gi.Meta;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const St = imports.gi.St;
|
||||
const Rsvg = imports.gi.Rsvg;
|
||||
const GObject = imports.gi.GObject;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Gio = imports.gi.Gio;
|
||||
const GDesktopEnums = imports.gi.GDesktopEnums;
|
||||
const Atk = imports.gi.Atk;
|
||||
const Cairo = imports.cairo;
|
||||
const Signals = imports.signals;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
const Layout = imports.ui.layout;
|
||||
|
||||
const ACTIVE_COLOR = "#729fcf";
|
||||
|
||||
const LTR = 0;
|
||||
const RTL = 1;
|
||||
|
||||
const CW = 0;
|
||||
const CCW = 1;
|
||||
|
||||
const UP = 0;
|
||||
const DOWN = 1;
|
||||
|
||||
const KeybindingEntry = new Lang.Class({
|
||||
Name: 'KeybindingEntry',
|
||||
|
||||
_init: function () {
|
||||
this.actor = new St.Entry({ hint_text: _("New shortcut…"),
|
||||
style: 'width: 10em' });
|
||||
this.actor.connect('captured-event', Lang.bind(this, this._onCapturedEvent));
|
||||
},
|
||||
|
||||
_onCapturedEvent: function (actor, event) {
|
||||
if (event.type() != Clutter.EventType.KEY_PRESS)
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
let str = Gtk.accelerator_name_with_keycode(null,
|
||||
event.get_key_symbol(),
|
||||
event.get_key_code(),
|
||||
event.get_state());
|
||||
this.actor.set_text(str);
|
||||
this.emit('keybinding-edited', str);
|
||||
return Clutter.EVENT_STOP;
|
||||
}
|
||||
});
|
||||
Signals.addSignalMethods(KeybindingEntry.prototype);
|
||||
|
||||
const ActionComboBox = new Lang.Class({
|
||||
Name: 'ActionComboBox',
|
||||
|
||||
_init: function () {
|
||||
this.actor = new St.Button({ style_class: 'button' });
|
||||
this.actor.connect('clicked', Lang.bind(this, this._onButtonClicked));
|
||||
this.actor.set_toggle_mode(true);
|
||||
|
||||
let boxLayout = new Clutter.BoxLayout({ orientation: Clutter.Orientation.HORIZONTAL,
|
||||
spacing: 6 });
|
||||
let box = new St.Widget({ layout_manager: boxLayout });
|
||||
this.actor.set_child(box);
|
||||
|
||||
this._label = new St.Label({ style_class: 'combo-box-label' });
|
||||
box.add_child(this._label)
|
||||
|
||||
let arrow = new St.Icon({ style_class: 'popup-menu-arrow',
|
||||
icon_name: 'pan-down-symbolic',
|
||||
accessible_role: Atk.Role.ARROW,
|
||||
y_expand: true,
|
||||
y_align: Clutter.ActorAlign.CENTER });
|
||||
box.add_child(arrow);
|
||||
|
||||
this._editMenu = new PopupMenu.PopupMenu(this.actor, 0, St.Side.TOP);
|
||||
this._editMenu.connect('menu-closed', Lang.bind(this, function() { this.actor.set_checked(false); }));
|
||||
this._editMenu.actor.hide();
|
||||
Main.uiGroup.add_actor(this._editMenu.actor);
|
||||
|
||||
this._actionLabels = new Map();
|
||||
this._actionLabels.set(GDesktopEnums.PadButtonAction.NONE, _("Application defined"));
|
||||
this._actionLabels.set(GDesktopEnums.PadButtonAction.HELP, _("Show on-screen help"));
|
||||
this._actionLabels.set(GDesktopEnums.PadButtonAction.SWITCH_MONITOR, _("Switch monitor"));
|
||||
this._actionLabels.set(GDesktopEnums.PadButtonAction.KEYBINDING, _("Assign keystroke"));
|
||||
|
||||
for (let [action, label] of this._actionLabels.entries()) {
|
||||
let selectedAction = action;
|
||||
this._editMenu.addAction(label, Lang.bind(this, function() { this._onActionSelected(selectedAction) }));
|
||||
}
|
||||
|
||||
this.setAction(GDesktopEnums.PadButtonAction.NONE);
|
||||
},
|
||||
|
||||
_onActionSelected: function (action) {
|
||||
this.setAction(action);
|
||||
this.popdown();
|
||||
this.emit('action-selected', action);
|
||||
},
|
||||
|
||||
setAction: function (action) {
|
||||
this._label.set_text(this._actionLabels.get(action));
|
||||
},
|
||||
|
||||
popup: function () {
|
||||
this._editMenu.open(true);
|
||||
},
|
||||
|
||||
popdown: function () {
|
||||
this._editMenu.close(true);
|
||||
},
|
||||
|
||||
_onButtonClicked: function () {
|
||||
if (this.actor.get_checked())
|
||||
this.popup();
|
||||
else
|
||||
this.popdown();
|
||||
}
|
||||
});
|
||||
Signals.addSignalMethods(ActionComboBox.prototype);
|
||||
|
||||
const ActionEditor = new Lang.Class({
|
||||
Name: 'ActionEditor',
|
||||
|
||||
_init: function () {
|
||||
let boxLayout = new Clutter.BoxLayout({ orientation: Clutter.Orientation.HORIZONTAL,
|
||||
spacing: 12 });
|
||||
|
||||
this.actor = new St.Widget({ layout_manager: boxLayout });
|
||||
|
||||
this._actionComboBox = new ActionComboBox();
|
||||
this._actionComboBox.connect('action-selected', Lang.bind(this, this._onActionSelected));
|
||||
this.actor.add_actor(this._actionComboBox.actor);
|
||||
|
||||
this._keybindingEdit = new KeybindingEntry();
|
||||
this._keybindingEdit.connect('keybinding-edited', Lang.bind(this, this._onKeybindingEdited));
|
||||
this.actor.add_actor(this._keybindingEdit.actor);
|
||||
|
||||
this._doneButton = new St.Button({ label: _("Done"),
|
||||
style_class: 'button',
|
||||
x_expand: false});
|
||||
this._doneButton.connect('clicked', Lang.bind(this, this._onEditingDone));
|
||||
this.actor.add_actor(this._doneButton);
|
||||
},
|
||||
|
||||
_updateKeybindingEntryState: function () {
|
||||
if (this._currentAction == GDesktopEnums.PadButtonAction.KEYBINDING) {
|
||||
this._keybindingEdit.actor.set_text(this._currentKeybinding);
|
||||
this._keybindingEdit.actor.show();
|
||||
this._keybindingEdit.actor.grab_key_focus();
|
||||
} else {
|
||||
this._keybindingEdit.actor.hide();
|
||||
}
|
||||
},
|
||||
|
||||
setSettings: function (settings) {
|
||||
this._buttonSettings = settings;
|
||||
|
||||
this._currentAction = this._buttonSettings.get_enum('action');
|
||||
this._currentKeybinding = this._buttonSettings.get_string('keybinding');
|
||||
this._actionComboBox.setAction(this._currentAction);
|
||||
this._updateKeybindingEntryState();
|
||||
},
|
||||
|
||||
close: function() {
|
||||
this._actionComboBox.popdown();
|
||||
this.actor.hide();
|
||||
},
|
||||
|
||||
_onKeybindingEdited: function (entry, keybinding) {
|
||||
this._currentKeybinding = keybinding;
|
||||
},
|
||||
|
||||
_onActionSelected: function (menu, action) {
|
||||
this._currentAction = action;
|
||||
this._updateKeybindingEntryState();
|
||||
},
|
||||
|
||||
_storeSettings: function () {
|
||||
if (!this._buttonSettings)
|
||||
return;
|
||||
|
||||
let keybinding = null;
|
||||
|
||||
if (this._currentAction == GDesktopEnums.PadButtonAction.KEYBINDING)
|
||||
keybinding = this._currentKeybinding;
|
||||
|
||||
this._buttonSettings.set_enum('action', this._currentAction);
|
||||
|
||||
if (keybinding)
|
||||
this._buttonSettings.set_string('keybinding', keybinding);
|
||||
else
|
||||
this._buttonSettings.reset('keybinding');
|
||||
},
|
||||
|
||||
_onEditingDone: function () {
|
||||
this._storeSettings();
|
||||
this.close();
|
||||
this.emit('done');
|
||||
}
|
||||
});
|
||||
Signals.addSignalMethods(ActionEditor.prototype);
|
||||
|
||||
const PadDiagram = new Lang.Class({
|
||||
Name: 'PadDiagram',
|
||||
Extends: St.DrawingArea,
|
||||
Properties: { 'left-handed': GObject.ParamSpec.boolean('left-handed',
|
||||
'left-handed', 'Left handed',
|
||||
GObject.ParamFlags.READWRITE |
|
||||
GObject.ParamFlags.CONSTRUCT_ONLY,
|
||||
false),
|
||||
'image': GObject.ParamSpec.string('image', 'image', 'Image',
|
||||
GObject.ParamFlags.READWRITE |
|
||||
GObject.ParamFlags.CONSTRUCT_ONLY,
|
||||
null),
|
||||
'editor-actor': GObject.ParamSpec.object('editor-actor',
|
||||
'editor-actor',
|
||||
'Editor actor',
|
||||
GObject.ParamFlags.READWRITE |
|
||||
GObject.ParamFlags.CONSTRUCT_ONLY,
|
||||
Clutter.Actor.$gtype) },
|
||||
|
||||
_init: function (params) {
|
||||
let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/pad-osd.css');
|
||||
let [success, css, etag] = file.load_contents(null);
|
||||
this._css = css;
|
||||
this._labels = [];
|
||||
this._activeButtons = [];
|
||||
this.parent(params);
|
||||
},
|
||||
|
||||
get left_handed() {
|
||||
return this._leftHanded;
|
||||
},
|
||||
|
||||
set left_handed(leftHanded) {
|
||||
this._leftHanded = leftHanded;
|
||||
},
|
||||
|
||||
get image() {
|
||||
return this._imagePath;
|
||||
},
|
||||
|
||||
set image(imagePath) {
|
||||
let originalHandle = Rsvg.Handle.new_from_file(imagePath);
|
||||
let dimensions = originalHandle.get_dimensions();
|
||||
this._imageWidth = dimensions.width;
|
||||
this._imageHeight = dimensions.height;
|
||||
|
||||
this._imagePath = imagePath;
|
||||
this._handle = this._composeStyledDiagram();
|
||||
},
|
||||
|
||||
get editor_actor() {
|
||||
return this._editorActor;
|
||||
},
|
||||
|
||||
set editor_actor(actor) {
|
||||
actor.hide();
|
||||
this._editorActor = actor;
|
||||
this.add_actor(actor);
|
||||
},
|
||||
|
||||
_wrappingSvgHeader: function () {
|
||||
return ('<?xml version="1.0" encoding="UTF-8" standalone="no"?>' +
|
||||
'<svg version="1.1" xmlns="http://www.w3.org/2000/svg" ' +
|
||||
'xmlns:xi="http://www.w3.org/2001/XInclude" ' +
|
||||
'width="' + this._imageWidth + '" height="' + this._imageHeight + '"> ' +
|
||||
'<style type="text/css">');
|
||||
},
|
||||
|
||||
_wrappingSvgFooter: function () {
|
||||
return ('</style>' +
|
||||
'<xi:include href="' + this._imagePath + '" />' +
|
||||
'</svg>');
|
||||
},
|
||||
|
||||
_cssString: function () {
|
||||
let css = this._css;
|
||||
|
||||
for (let i = 0; i < this._activeButtons.length; i++) {
|
||||
let ch = String.fromCharCode('A'.charCodeAt() + this._activeButtons[i]);
|
||||
css += ('.' + ch + ' { ' +
|
||||
' stroke: ' + ACTIVE_COLOR + ' !important; ' +
|
||||
' fill: ' + ACTIVE_COLOR + ' !important; ' +
|
||||
'} ');
|
||||
}
|
||||
|
||||
return css;
|
||||
},
|
||||
|
||||
_composeStyledDiagram: function () {
|
||||
let svgData = '';
|
||||
|
||||
if (!GLib.file_test(this._imagePath, GLib.FileTest.EXISTS))
|
||||
return null;
|
||||
|
||||
svgData += this._wrappingSvgHeader();
|
||||
svgData += this._cssString();
|
||||
svgData += this._wrappingSvgFooter();
|
||||
|
||||
let handle = new Rsvg.Handle();
|
||||
handle.set_base_uri(GLib.path_get_dirname(this._imagePath));
|
||||
handle.write(svgData);
|
||||
handle.close();
|
||||
|
||||
return handle;
|
||||
},
|
||||
|
||||
_updateDiagramScale: function () {
|
||||
if (this._handle == null)
|
||||
return;
|
||||
|
||||
[this._actorWidth, this._actorHeight] = this.get_size();
|
||||
let dimensions = this._handle.get_dimensions();
|
||||
let scaleX = this._actorWidth / dimensions.width;
|
||||
let scaleY = this._actorHeight / dimensions.height;
|
||||
this._scale = Math.min(scaleX, scaleY);
|
||||
},
|
||||
|
||||
_allocateChild: function (child, x, y, direction) {
|
||||
let [prefHeight, natHeight] = child.get_preferred_height(-1);
|
||||
let [prefWidth, natWidth] = child.get_preferred_width(natHeight);
|
||||
let childBox = new Clutter.ActorBox();
|
||||
|
||||
if (direction == LTR) {
|
||||
childBox.x1 = x;
|
||||
childBox.x2 = x + natWidth;
|
||||
} else {
|
||||
childBox.x1 = x - natWidth;
|
||||
childBox.x2 = x;
|
||||
}
|
||||
|
||||
childBox.y1 = y - natHeight / 2;
|
||||
childBox.y2 = y + natHeight / 2;
|
||||
child.allocate(childBox, 0);
|
||||
},
|
||||
|
||||
vfunc_allocate: function (box, flags) {
|
||||
this.parent(box, flags);
|
||||
this._updateDiagramScale();
|
||||
|
||||
for (let i = 0; i < this._labels.length; i++) {
|
||||
let [label, action, idx, dir] = this._labels[i];
|
||||
let [found, x, y, arrangement] = this.getLabelCoords(action, idx, dir);
|
||||
this._allocateChild(label, x, y, arrangement);
|
||||
}
|
||||
|
||||
if (this._editorActor && this._curEdited) {
|
||||
let [label, action, idx, dir] = this._curEdited;
|
||||
let [found, x, y, arrangement] = this.getLabelCoords(action, idx, dir);
|
||||
this._allocateChild(this._editorActor, x, y, arrangement);
|
||||
}
|
||||
},
|
||||
|
||||
vfunc_repaint: function () {
|
||||
if (this._handle == null)
|
||||
return;
|
||||
|
||||
if (this._scale == null)
|
||||
this._updateDiagramScale();
|
||||
|
||||
let [width, height] = this.get_surface_size();
|
||||
let dimensions = this._handle.get_dimensions();
|
||||
let cr = this.get_context();
|
||||
|
||||
cr.save();
|
||||
cr.translate(width/2, height/2);
|
||||
cr.scale(this._scale, this._scale);
|
||||
if (this._leftHanded)
|
||||
cr.rotate(Math.PI);
|
||||
cr.translate(-dimensions.width/2, -dimensions.height/2);
|
||||
this._handle.render_cairo(cr);
|
||||
cr.restore();
|
||||
cr.$dispose();
|
||||
},
|
||||
|
||||
_transformPoint: function (x, y) {
|
||||
if (this._handle == null || this._scale == null)
|
||||
return [x, y];
|
||||
|
||||
// I miss Cairo.Matrix
|
||||
let dimensions = this._handle.get_dimensions();
|
||||
x = x * this._scale + this._actorWidth / 2 - dimensions.width / 2 * this._scale;
|
||||
y = y * this._scale + this._actorHeight / 2 - dimensions.height / 2 * this._scale;;
|
||||
return [Math.round(x), Math.round(y)];
|
||||
},
|
||||
|
||||
_getItemLabelCoords: function (labelName, leaderName) {
|
||||
if (this._handle == null)
|
||||
return [false];
|
||||
|
||||
let leaderPos, leaderSize, pos;
|
||||
let found, direction;
|
||||
|
||||
[found, pos] = this._handle.get_position_sub('#' + labelName);
|
||||
if (!found)
|
||||
return [false];
|
||||
|
||||
[found, leaderPos] = this._handle.get_position_sub('#' + leaderName);
|
||||
[found, leaderSize] = this._handle.get_dimensions_sub('#' + leaderName);
|
||||
if (!found)
|
||||
return [false];
|
||||
|
||||
if (pos.x > leaderPos.x + leaderSize.width)
|
||||
direction = LTR;
|
||||
else
|
||||
direction = RTL;
|
||||
|
||||
if (this._leftHanded) {
|
||||
direction = 1 - direction;
|
||||
pos.x = this._imageWidth - pos.x;
|
||||
pos.y = this._imageHeight - pos.y;
|
||||
}
|
||||
|
||||
let [x, y] = this._transformPoint(pos.x, pos.y)
|
||||
|
||||
return [true, x, y, direction];
|
||||
},
|
||||
|
||||
getButtonLabelCoords: function (button) {
|
||||
let ch = String.fromCharCode('A'.charCodeAt() + button);
|
||||
let labelName = 'Label' + ch;
|
||||
let leaderName = 'Leader' + ch;
|
||||
|
||||
return this._getItemLabelCoords(labelName, leaderName);
|
||||
},
|
||||
|
||||
getRingLabelCoords: function (number, dir) {
|
||||
let numStr = number > 0 ? number.toString() : '';
|
||||
let dirStr = dir == CW ? 'CW' : 'CCW';
|
||||
let labelName = 'LabelRing' + numStr + dirStr;
|
||||
let leaderName = 'LeaderRing' + numStr + dirStr;
|
||||
|
||||
return this._getItemLabelCoords(labelName, leaderName);
|
||||
},
|
||||
|
||||
getStripLabelCoords: function (number, dir) {
|
||||
let numStr = number > 0 ? (number + 1).toString() : '';
|
||||
let dirStr = dir == UP ? 'Up' : 'Down';
|
||||
let labelName = 'LabelStrip' + numStr + dirStr;
|
||||
let leaderName = 'LeaderStrip' + numStr + dirStr;
|
||||
|
||||
return this._getItemLabelCoords(labelName, leaderName);
|
||||
},
|
||||
|
||||
getLabelCoords: function (action, idx, dir) {
|
||||
if (action == Meta.PadActionType.BUTTON)
|
||||
return this.getButtonLabelCoords(idx);
|
||||
else if (action == Meta.PadActionType.RING)
|
||||
return this.getRingLabelCoords(idx, dir);
|
||||
else if (action == Meta.PadActionType.STRIP)
|
||||
return this.getStripLabelCoords(idx, dir);
|
||||
|
||||
return [false];
|
||||
},
|
||||
|
||||
_invalidateSvg: function () {
|
||||
if (this._handle == null)
|
||||
return;
|
||||
this._handle = this._composeStyledDiagram();
|
||||
this.queue_repaint();
|
||||
},
|
||||
|
||||
activateButton: function (button) {
|
||||
this._activeButtons.push(button);
|
||||
this._invalidateSvg();
|
||||
},
|
||||
|
||||
deactivateButton: function (button) {
|
||||
for (let i = 0; i < this._activeButtons.length; i++) {
|
||||
if (this._activeButtons[i] == button)
|
||||
this._activeButtons.splice(i, 1);
|
||||
}
|
||||
this._invalidateSvg();
|
||||
},
|
||||
|
||||
addLabel: function (label, type, idx, dir) {
|
||||
this._labels.push([label, type, idx, dir]);
|
||||
this.add_actor(label);
|
||||
},
|
||||
|
||||
stopEdition: function (str) {
|
||||
this._editorActor.hide();
|
||||
|
||||
if (this._curEdited) {
|
||||
let [label, action, idx, dir] = this._curEdited;
|
||||
if (str != null) {
|
||||
label.set_text(str);
|
||||
|
||||
let [found, x, y, arrangement] = this.getLabelCoords(action, idx, dir);
|
||||
this._allocateChild(label, x, y, arrangement);
|
||||
}
|
||||
label.show();
|
||||
this._curEdited = null;
|
||||
}
|
||||
},
|
||||
|
||||
startEdition: function(action, idx, dir) {
|
||||
let editedLabel;
|
||||
this.stopEdition();
|
||||
|
||||
for (let i = 0; i < this._labels.length; i++) {
|
||||
let [label, itemAction, itemIdx, itemDir] = this._labels[i];
|
||||
if (action == itemAction && idx == itemIdx && dir == itemDir) {
|
||||
this._curEdited = this._labels[i];
|
||||
editedLabel = label;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (this._curEdited == null)
|
||||
return;
|
||||
let [found] = this.getLabelCoords(action, idx, dir);
|
||||
if (!found)
|
||||
return;
|
||||
this._editorActor.show();
|
||||
editedLabel.hide();
|
||||
}
|
||||
});
|
||||
|
||||
const PadOsd = new Lang.Class({
|
||||
Name: 'PadOsd',
|
||||
|
||||
_init: function (padDevice, settings, imagePath, editionMode, monitorIndex) {
|
||||
this.padDevice = padDevice;
|
||||
this._settings = settings;
|
||||
this._imagePath = imagePath;
|
||||
this._editionMode = editionMode;
|
||||
this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this, this._onCapturedEvent));
|
||||
|
||||
let deviceManager = Clutter.DeviceManager.get_default();
|
||||
this._deviceRemovedId = deviceManager.connect('device-removed', Lang.bind(this, function (manager, device) {
|
||||
// If the device is being removed, destroy the padOsd.
|
||||
if (device == this.padDevice)
|
||||
this.destroy();
|
||||
}));
|
||||
|
||||
this.actor = new St.BoxLayout({ style_class: 'pad-osd-window',
|
||||
x_expand: true,
|
||||
y_expand: true,
|
||||
vertical: true,
|
||||
reactive: true });
|
||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||
Main.uiGroup.add_actor(this.actor);
|
||||
|
||||
this._monitorIndex = monitorIndex;
|
||||
let constraint = new Layout.MonitorConstraint({ index: monitorIndex });
|
||||
this.actor.add_constraint(constraint);
|
||||
|
||||
this._titleLabel = new St.Label({ style: 'font-side: larger; font-weight: bold;',
|
||||
x_align: Clutter.ActorAlign.CENTER });
|
||||
this._titleLabel.clutter_text.set_text(padDevice.get_device_name());
|
||||
this.actor.add_actor(this._titleLabel);
|
||||
|
||||
this._tipLabel = new St.Label({ x_align: Clutter.ActorAlign.CENTER });
|
||||
this.actor.add_actor(this._tipLabel);
|
||||
|
||||
this._actionEditor = new ActionEditor();
|
||||
this._actionEditor.connect('done', Lang.bind(this, this._endButtonActionEdition));
|
||||
|
||||
this._padDiagram = new PadDiagram({ image: this._imagePath,
|
||||
left_handed: settings.get_boolean('left-handed'),
|
||||
editor_actor: this._actionEditor.actor,
|
||||
x_expand: true,
|
||||
y_expand: true });
|
||||
this.actor.add_actor(this._padDiagram);
|
||||
|
||||
// FIXME: Fix num buttons.
|
||||
let i = 0;
|
||||
for (i = 0; i < 50; i++) {
|
||||
let [found] = this._padDiagram.getButtonLabelCoords(i);
|
||||
if (!found)
|
||||
break;
|
||||
this._createLabel(Meta.PadActionType.BUTTON, i);
|
||||
}
|
||||
|
||||
for (i = 0; i < padDevice.get_n_rings(); i++) {
|
||||
this._createLabel(Meta.PadActionType.RING, i, CW);
|
||||
this._createLabel(Meta.PadActionType.RING, i, CCW);
|
||||
}
|
||||
|
||||
for (i = 0; i < padDevice.get_n_strips(); i++) {
|
||||
this._createLabel(Meta.PadActionType.STRIP, i, UP);
|
||||
this._createLabel(Meta.PadActionType.STRIP, i, DOWN);
|
||||
}
|
||||
|
||||
let buttonBox = new St.Widget({ layout_manager: new Clutter.BinLayout(),
|
||||
x_expand: true,
|
||||
x_align: Clutter.ActorAlign.CENTER,
|
||||
y_align: Clutter.ActorAlign.CENTER });
|
||||
this.actor.add_actor(buttonBox);
|
||||
this._editButton = new St.Button({ label: _("Edit…"),
|
||||
style_class: 'button',
|
||||
x_align: Clutter.ActorAlign.CENTER,
|
||||
can_focus: true });
|
||||
this._editButton.connect('clicked', Lang.bind(this, function () { this.setEditionMode(true) }));
|
||||
buttonBox.add_actor(this._editButton);
|
||||
|
||||
this._syncEditionMode();
|
||||
Main.pushModal(this.actor);
|
||||
},
|
||||
|
||||
_createLabel: function (type, number, dir) {
|
||||
let str = global.display.get_pad_action_label(this.padDevice, type, number);
|
||||
let label = new St.Label({ text: str ? str : _("None") });
|
||||
this._padDiagram.addLabel(label, type, number, dir);
|
||||
},
|
||||
|
||||
_onCapturedEvent : function (actor, event) {
|
||||
if (event.type() == Clutter.EventType.PAD_BUTTON_PRESS &&
|
||||
event.get_source_device() == this.padDevice) {
|
||||
this._padDiagram.activateButton(event.get_button());
|
||||
|
||||
if (this._editionMode)
|
||||
this._startButtonActionEdition(event.get_button());
|
||||
return Clutter.EVENT_STOP;
|
||||
} else if (event.type() == Clutter.EventType.PAD_BUTTON_RELEASE &&
|
||||
event.get_source_device() == this.padDevice) {
|
||||
this._padDiagram.deactivateButton(event.get_button());
|
||||
return Clutter.EVENT_STOP;
|
||||
} else if (event.type() == Clutter.EventType.KEY_PRESS &&
|
||||
(!this._editionMode || event.get_key_symbol() == Clutter.Escape)) {
|
||||
if (this._editingButtonAction != null)
|
||||
this._endButtonActionEdition();
|
||||
else
|
||||
this.destroy();
|
||||
return Clutter.EVENT_STOP;
|
||||
}
|
||||
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
},
|
||||
|
||||
_syncEditionMode: function () {
|
||||
this._editButton.set_reactive(!this._editionMode);
|
||||
this._editButton.save_easing_state();
|
||||
this._editButton.set_easing_duration(200);
|
||||
this._editButton.set_opacity(this._editionMode ? 128 : 255);
|
||||
this._editButton.restore_easing_state();
|
||||
|
||||
let title;
|
||||
|
||||
if (this._editionMode) {
|
||||
title = _("Press a button to configure");
|
||||
this._tipLabel.set_text(_("Press Esc to exit"));
|
||||
} else {
|
||||
title = this.padDevice.get_device_name();
|
||||
this._tipLabel.set_text(_("Press any key to exit"));
|
||||
}
|
||||
|
||||
this._titleLabel.clutter_text.set_markup('<span size="larger"><b>' + title + '</b></span>');
|
||||
},
|
||||
|
||||
_endButtonActionEdition: function () {
|
||||
this._actionEditor.close();
|
||||
|
||||
if (this._editingButtonAction != null) {
|
||||
let str = global.display.get_pad_action_label(this.padDevice,
|
||||
Meta.PadActionType.BUTTON,
|
||||
this._editingButtonAction);
|
||||
this._padDiagram.stopEdition(str ? str : _("None"))
|
||||
this._editingButtonAction = null;
|
||||
}
|
||||
|
||||
this._editedButtonSettings = null;
|
||||
},
|
||||
|
||||
_startButtonActionEdition: function (button) {
|
||||
if (this._editingButtonAction == button)
|
||||
return;
|
||||
|
||||
this._endButtonActionEdition();
|
||||
this._editingButtonAction = button;
|
||||
|
||||
let ch = String.fromCharCode('A'.charCodeAt() + button);
|
||||
let settingsPath = this._settings.path + "button" + ch + '/';
|
||||
this._editedButtonSettings = Gio.Settings.new_with_path('org.gnome.desktop.peripherals.tablet.pad-button',
|
||||
settingsPath);
|
||||
this._actionEditor.setSettings(this._editedButtonSettings);
|
||||
this._padDiagram.startEdition(Meta.PadActionType.BUTTON, button);
|
||||
},
|
||||
|
||||
setEditionMode: function (editionMode) {
|
||||
if (this._editionMode == editionMode)
|
||||
return;
|
||||
|
||||
this._editionMode = editionMode;
|
||||
this._syncEditionMode();
|
||||
},
|
||||
|
||||
destroy: function () {
|
||||
this.actor.destroy();
|
||||
},
|
||||
|
||||
_onDestroy: function () {
|
||||
Main.popModal(this.actor);
|
||||
this._actionEditor.close();
|
||||
|
||||
if (this._deviceRemovedId != 0) {
|
||||
let deviceManager = Clutter.DeviceManager.get_default();
|
||||
deviceManager.disconnect(this._deviceRemovedId);
|
||||
this._deviceRemovedId = 0;
|
||||
}
|
||||
|
||||
if (this._capturedEventId != 0) {
|
||||
global.stage.disconnect(this._capturedEventId);
|
||||
this._capturedEventId = 0;
|
||||
}
|
||||
|
||||
this.actor = null;
|
||||
this.emit('closed');
|
||||
}
|
||||
});
|
||||
Signals.addSignalMethods(PadOsd.prototype);
|
||||
|
||||
const PadOsdIface = '<node> \
|
||||
<interface name="org.gnome.Shell.Wacom.PadOsd"> \
|
||||
<method name="Show"> \
|
||||
<arg name="device_node" direction="in" type="o"/> \
|
||||
<arg name="edition_mode" direction="in" type="b"/> \
|
||||
</method> \
|
||||
</interface> \
|
||||
</node>';
|
||||
|
||||
const PadOsdService = new Lang.Class({
|
||||
Name: 'PadOsdService',
|
||||
|
||||
_init: function() {
|
||||
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(PadOsdIface, this);
|
||||
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell/Wacom');
|
||||
Gio.DBus.session.own_name('org.gnome.Shell.Wacom.PadOsd', Gio.BusNameOwnerFlags.REPLACE, null, null);
|
||||
},
|
||||
|
||||
ShowAsync: function(params, invocation) {
|
||||
let [deviceNode, editionMode] = params;
|
||||
let deviceManager = Clutter.DeviceManager.get_default();
|
||||
let devices = deviceManager.list_devices();
|
||||
let padDevice = null;
|
||||
|
||||
devices.forEach(Lang.bind(this, function(device) {
|
||||
if (deviceNode == device.get_device_node())
|
||||
padDevice = device;
|
||||
}));
|
||||
|
||||
if (padDevice == null ||
|
||||
padDevice.get_device_type() != Clutter.InputDeviceType.PAD_DEVICE) {
|
||||
invocation.return_error_literal(Gio.IOErrorEnum,
|
||||
Gio.IOErrorEnum.CANCELLED,
|
||||
"Invalid params");
|
||||
return;
|
||||
}
|
||||
|
||||
global.display.request_pad_osd(padDevice, editionMode);
|
||||
invocation.return_value(null);
|
||||
}
|
||||
});
|
||||
Signals.addSignalMethods(PadOsdService.prototype);
|
@ -783,6 +783,16 @@ const PopupMenu = new Lang.Class({
|
||||
break;
|
||||
}
|
||||
|
||||
let state = event.get_state();
|
||||
|
||||
// if user has a modifier down (except capslock)
|
||||
// then don't handle the key press here
|
||||
state &= ~Clutter.ModifierType.LOCK_MASK;
|
||||
state &= Clutter.ModifierType.MODIFIER_MASK;
|
||||
|
||||
if (state)
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
let symbol = event.get_key_symbol();
|
||||
if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) {
|
||||
this.toggle();
|
||||
|
@ -297,7 +297,7 @@ const RemoteSearchProvider = new Lang.Class({
|
||||
// the provider is not compatible with the new version of the interface, launch
|
||||
// the app itself but warn so we can catch the error in logs
|
||||
log('Search provider ' + this.appInfo.get_id() + ' does not implement LaunchSearch');
|
||||
this.appInfo.launch([], global.create_app_launch_context(0, -1));
|
||||
this.appInfo.launch([], global.create_app_launch_context(0, -1), false);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -274,7 +274,7 @@ const RunDialog = new Lang.Class({
|
||||
|
||||
_restart: function() {
|
||||
if (Meta.is_wayland_compositor()) {
|
||||
this._showError('Restart is not available on Wayland');
|
||||
this._showError(_("Restart is not available on Wayland"));
|
||||
return;
|
||||
}
|
||||
this._shouldFadeOut = false;
|
||||
|
@ -665,7 +665,10 @@ const ScreenShield = new Lang.Class({
|
||||
let isEnter = (symbol == Clutter.KEY_Return ||
|
||||
symbol == Clutter.KEY_KP_Enter ||
|
||||
symbol == Clutter.KEY_ISO_Enter);
|
||||
if (!isEnter && !(GLib.unichar_isprint(unichar) || symbol == Clutter.KEY_Escape))
|
||||
let isEscape = (symbol == Clutter.KEY_Escape);
|
||||
let isLiftChar = (GLib.unichar_isprint(unichar) &&
|
||||
(this._isLocked || !GLib.unichar_isgraph(unichar)));
|
||||
if (!isEnter && !isEscape && !isLiftChar)
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
if (this._isLocked &&
|
||||
@ -847,6 +850,7 @@ const ScreenShield = new Lang.Class({
|
||||
},
|
||||
|
||||
_activateFade: function(lightbox, time) {
|
||||
Main.uiGroup.set_child_above_sibling(lightbox.actor, null);
|
||||
lightbox.show(time);
|
||||
|
||||
if (this._becameActiveId == 0)
|
||||
|
@ -137,7 +137,7 @@ const Indicator = new Lang.Class({
|
||||
else if (nConnectedDevices == -1)
|
||||
this._item.label.text = _("Off");
|
||||
else
|
||||
this._item.label.text = _("Not In Use");
|
||||
this._item.label.text = _("On");
|
||||
|
||||
this._toggleItem.label.text = this._proxy.BluetoothAirplaneMode ? _("Turn On") : _("Turn Off");
|
||||
},
|
||||
|
@ -5,6 +5,7 @@ const GObject = imports.gi.GObject;
|
||||
const Gio = imports.gi.Gio;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
const NetworkManager = imports.gi.NetworkManager;
|
||||
const NMClient = imports.gi.NMClient;
|
||||
const NMGtk = imports.gi.NMGtk;
|
||||
@ -39,6 +40,8 @@ const NMAccessPointSecurity = {
|
||||
WPA2_ENT: 6
|
||||
};
|
||||
|
||||
const MAX_DEVICE_ITEMS = 4;
|
||||
|
||||
// small optimization, to avoid using [] all the time
|
||||
const NM80211Mode = NetworkManager['80211Mode'];
|
||||
const NM80211ApFlags = NetworkManager['80211ApFlags'];
|
||||
@ -752,10 +755,9 @@ const NMWirelessDialog = new Lang.Class({
|
||||
this._updateSensitivity();
|
||||
this._syncView();
|
||||
|
||||
if (accessPoints.length == 0) {
|
||||
/* If there are no visible access points, request a scan */
|
||||
this._device.request_scan_simple(null);
|
||||
}
|
||||
this._scanTimeoutId = Mainloop.timeout_add_seconds(15, Lang.bind(this, this._onScanTimeout));
|
||||
GLib.Source.set_name_by_id(this._scanTimeoutId, '[gnome-shell] this._onScanTimeout');
|
||||
this._onScanTimeout();
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
@ -780,9 +782,19 @@ const NMWirelessDialog = new Lang.Class({
|
||||
this._airplaneModeChangedId = 0;
|
||||
}
|
||||
|
||||
if (this._scanTimeoutId) {
|
||||
Mainloop.source_remove(this._scanTimeoutId);
|
||||
this._scanTimeoutId = 0;
|
||||
}
|
||||
|
||||
this.parent();
|
||||
},
|
||||
|
||||
_onScanTimeout: function() {
|
||||
this._device.request_scan_simple(null);
|
||||
return GLib.SOURCE_CONTINUE;
|
||||
},
|
||||
|
||||
_activeApChanged: function() {
|
||||
if (this._activeNetwork)
|
||||
this._activeNetwork.item.setActive(false);
|
||||
@ -1491,7 +1503,7 @@ const NMVPNSection = new Lang.Class({
|
||||
if (nItems > 1) {
|
||||
let appSys = Shell.AppSystem.get_default();
|
||||
let app = appSys.lookup_app('gnome-network-panel.desktop');
|
||||
app.launch(0, -1);
|
||||
app.launch(0, -1, false);
|
||||
} else {
|
||||
let connection = this._connections[0];
|
||||
Util.spawnApp(['gnome-control-center', 'network', 'show-device',
|
||||
@ -1552,6 +1564,73 @@ const NMVPNSection = new Lang.Class({
|
||||
});
|
||||
Signals.addSignalMethods(NMVPNSection.prototype);
|
||||
|
||||
const DeviceCategory = new Lang.Class({
|
||||
Name: 'DeviceCategory',
|
||||
Extends: PopupMenu.PopupMenuSection,
|
||||
|
||||
_init: function(category) {
|
||||
this.parent();
|
||||
|
||||
this._category = category;
|
||||
|
||||
this.devices = [];
|
||||
|
||||
this.section = new PopupMenu.PopupMenuSection();
|
||||
this.section.box.connect('actor-added', Lang.bind(this, this._sync));
|
||||
this.section.box.connect('actor-removed', Lang.bind(this, this._sync));
|
||||
this.addMenuItem(this.section);
|
||||
|
||||
this._summaryItem = new PopupMenu.PopupSubMenuMenuItem('', true);
|
||||
this._summaryItem.icon.icon_name = this._getSummaryIcon();
|
||||
this.addMenuItem(this._summaryItem);
|
||||
|
||||
this._summaryItem.menu.addSettingsAction(_('Network Settings'),
|
||||
'gnome-network-panel.desktop');
|
||||
this._summaryItem.actor.hide();
|
||||
|
||||
},
|
||||
|
||||
_sync: function() {
|
||||
let nDevices = this.section.box.get_children().reduce(
|
||||
function(prev, child) {
|
||||
return prev + (child.visible ? 1 : 0);
|
||||
}, 0);
|
||||
this._summaryItem.label.text = this._getSummaryLabel(nDevices);
|
||||
let shouldSummarize = nDevices > MAX_DEVICE_ITEMS;
|
||||
this._summaryItem.actor.visible = shouldSummarize;
|
||||
this.section.actor.visible = !shouldSummarize;
|
||||
},
|
||||
|
||||
_getSummaryIcon: function() {
|
||||
switch(this._category) {
|
||||
case NMConnectionCategory.WIRED:
|
||||
return 'network-wired-symbolic';
|
||||
case NMConnectionCategory.WIRELESS:
|
||||
case NMConnectionCategory.WWAN:
|
||||
return 'network-wireless-symbolic';
|
||||
}
|
||||
return '';
|
||||
},
|
||||
|
||||
_getSummaryLabel: function(nDevices) {
|
||||
switch(this._category) {
|
||||
case NMConnectionCategory.WIRED:
|
||||
return ngettext("%s Wired Connection",
|
||||
"%s Wired Connections",
|
||||
nDevices).format(nDevices);
|
||||
case NMConnectionCategory.WIRELESS:
|
||||
return ngettext("%s Wi-Fi Connection",
|
||||
"%s Wi-Fi Connections",
|
||||
nDevices).format(nDevices);
|
||||
case NMConnectionCategory.WWAN:
|
||||
return ngettext("%s Modem Connection",
|
||||
"%s Modem Connections",
|
||||
nDevices).format(nDevices);
|
||||
}
|
||||
return '';
|
||||
}
|
||||
});
|
||||
|
||||
const NMApplet = new Lang.Class({
|
||||
Name: 'NMApplet',
|
||||
Extends: PanelMenu.SystemIndicator,
|
||||
@ -1595,15 +1674,6 @@ const NMApplet = new Lang.Class({
|
||||
this._tryLateInit();
|
||||
},
|
||||
|
||||
_createDeviceCategory: function() {
|
||||
let category = {
|
||||
section: new PopupMenu.PopupMenuSection(),
|
||||
devices: [ ],
|
||||
};
|
||||
this.menu.addMenuItem(category.section);
|
||||
return category;
|
||||
},
|
||||
|
||||
_tryLateInit: function() {
|
||||
if (!this._client || !this._settings)
|
||||
return;
|
||||
@ -1620,9 +1690,13 @@ const NMApplet = new Lang.Class({
|
||||
this._nmDevices = [];
|
||||
this._devices = { };
|
||||
|
||||
this._devices.wired = this._createDeviceCategory();
|
||||
this._devices.wireless = this._createDeviceCategory();
|
||||
this._devices.wwan = this._createDeviceCategory();
|
||||
let categories = [NMConnectionCategory.WIRED,
|
||||
NMConnectionCategory.WIRELESS,
|
||||
NMConnectionCategory.WWAN];
|
||||
for (let category of categories) {
|
||||
this._devices[category] = new DeviceCategory(category);
|
||||
this.menu.addMenuItem(this._devices[category]);
|
||||
}
|
||||
|
||||
this._vpnSection = new NMVPNSection(this._client);
|
||||
this._vpnSection.connect('activation-failed', Lang.bind(this, this._onActivationFailed));
|
||||
@ -1632,6 +1706,8 @@ const NMApplet = new Lang.Class({
|
||||
this._readConnections();
|
||||
this._readDevices();
|
||||
this._syncNMState();
|
||||
this._syncMainConnection();
|
||||
this._syncVPNConnections();
|
||||
|
||||
this._client.connect('notify::manager-running', Lang.bind(this, this._syncNMState));
|
||||
this._client.connect('notify::networking-enabled', Lang.bind(this, this._syncNMState));
|
||||
@ -2008,13 +2084,24 @@ const NMApplet = new Lang.Class({
|
||||
},
|
||||
|
||||
_updateIcon: function() {
|
||||
if (!this._client.networking_enabled || !this._mainConnection) {
|
||||
if (!this._client.networking_enabled) {
|
||||
this._primaryIndicator.visible = false;
|
||||
} else {
|
||||
let dev = this._mainConnection._primaryDevice;
|
||||
this._primaryIndicator.visible = (dev != null);
|
||||
if (dev)
|
||||
let dev = null;
|
||||
if (this._mainConnection)
|
||||
dev = this._mainConnection._primaryDevice;
|
||||
|
||||
let state = this._client.get_state();
|
||||
let connected = state == NetworkManager.State.CONNECTED_GLOBAL;
|
||||
this._primaryIndicator.visible = (dev != null) || connected;
|
||||
if (dev) {
|
||||
this._primaryIndicator.icon_name = dev.getIndicatorIcon();
|
||||
} else if (connected) {
|
||||
if (this._client.connectivity == NetworkManager.ConnectivityState.FULL)
|
||||
this._primaryIndicator.icon_name = 'network-wired-symbolic';
|
||||
else
|
||||
this._primaryIndicator.icon_name = 'network-wired-no-route-symbolic';
|
||||
}
|
||||
}
|
||||
|
||||
this._vpnIndicator.icon_name = this._vpnSection.getIndicatorIcon();
|
||||
|
@ -23,6 +23,7 @@ const EdgeDragAction = imports.ui.edgeDragAction;
|
||||
const IconGrid = imports.ui.iconGrid;
|
||||
|
||||
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
|
||||
const PINCH_GESTURE_THRESHOLD = 0.7;
|
||||
|
||||
const ViewPage = {
|
||||
WINDOWS: 1,
|
||||
@ -51,6 +52,28 @@ function getTermsForSearchString(searchString) {
|
||||
return terms;
|
||||
}
|
||||
|
||||
const TouchpadShowOverviewAction = new Lang.Class({
|
||||
Name: 'TouchpadShowOverviewAction',
|
||||
|
||||
_init: function(actor) {
|
||||
actor.connect('captured-event', Lang.bind(this, this._handleEvent));
|
||||
},
|
||||
|
||||
_handleEvent: function(actor, event) {
|
||||
if (event.type() != Clutter.EventType.TOUCHPAD_PINCH)
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
if (event.get_touchpad_gesture_finger_count() != 3)
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
if (event.get_gesture_phase() == Clutter.TouchpadGesturePhase.END)
|
||||
this.emit('activated', event.get_gesture_pinch_scale ());
|
||||
|
||||
return Clutter.EVENT_STOP;
|
||||
}
|
||||
});
|
||||
Signals.addSignalMethods(TouchpadShowOverviewAction.prototype);
|
||||
|
||||
const ShowOverviewAction = new Lang.Class({
|
||||
Name: 'ShowOverviewAction',
|
||||
Extends: Clutter.GestureAction,
|
||||
@ -230,11 +253,16 @@ const ViewSelector = new Lang.Class({
|
||||
global.stage.add_action(gesture);
|
||||
|
||||
gesture = new ShowOverviewAction();
|
||||
gesture.connect('activated', Lang.bind(this, function(action, areaDiff) {
|
||||
if (areaDiff < 0.7)
|
||||
Main.overview.show();
|
||||
}));
|
||||
gesture.connect('activated', Lang.bind(this, this._pinchGestureActivated));
|
||||
global.stage.add_action(gesture);
|
||||
|
||||
gesture = new TouchpadShowOverviewAction(global.stage);
|
||||
gesture.connect('activated', Lang.bind(this, this._pinchGestureActivated));
|
||||
},
|
||||
|
||||
_pinchGestureActivated: function(action, scale) {
|
||||
if (scale < PINCH_GESTURE_THRESHOLD)
|
||||
Main.overview.show();
|
||||
},
|
||||
|
||||
_toggleAppsPage: function() {
|
||||
|
@ -17,6 +17,7 @@ const Main = imports.ui.main;
|
||||
const ModalDialog = imports.ui.modalDialog;
|
||||
const Tweener = imports.ui.tweener;
|
||||
const WindowMenu = imports.ui.windowMenu;
|
||||
const PadOsd = imports.ui.padOsd;
|
||||
|
||||
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
|
||||
const MINIMIZE_WINDOW_ANIMATION_TIME = 0.2;
|
||||
@ -510,7 +511,7 @@ const TouchpadWorkspaceSwitchAction = new Lang.Class({
|
||||
if (event.type() != Clutter.EventType.TOUCHPAD_SWIPE)
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
if (event.get_gesture_swipe_finger_count() != 4)
|
||||
if (event.get_touchpad_gesture_finger_count() != 4)
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
if (event.get_gesture_phase() == Clutter.TouchpadGesturePhase.UPDATE) {
|
||||
@ -683,6 +684,8 @@ const WindowManager = new Lang.Class({
|
||||
|
||||
this._dimmedWindows = [];
|
||||
|
||||
this._skippedActors = [];
|
||||
|
||||
this._allowedKeybindings = {};
|
||||
|
||||
this._isWorkspacePrepended = false;
|
||||
@ -703,6 +706,7 @@ const WindowManager = new Lang.Class({
|
||||
this._shellwm.connect('minimize', Lang.bind(this, this._minimizeWindow));
|
||||
this._shellwm.connect('unminimize', Lang.bind(this, this._unminimizeWindow));
|
||||
this._shellwm.connect('size-change', Lang.bind(this, this._sizeChangeWindow));
|
||||
this._shellwm.connect('size-changed', Lang.bind(this, this._sizeChangedWindow));
|
||||
this._shellwm.connect('map', Lang.bind(this, this._mapWindow));
|
||||
this._shellwm.connect('destroy', Lang.bind(this, this._destroyWindow));
|
||||
this._shellwm.connect('filter-keybinding', Lang.bind(this, this._filterKeybinding));
|
||||
@ -915,6 +919,7 @@ const WindowManager = new Lang.Class({
|
||||
Lang.bind(this, this._toggleCalendar));
|
||||
|
||||
global.display.connect('show-resize-popup', Lang.bind(this, this._showResizePopup));
|
||||
global.display.connect('show-pad-osd', Lang.bind(this, this._showPadOsd));
|
||||
|
||||
Main.overview.connect('showing', Lang.bind(this, function() {
|
||||
for (let i = 0; i < this._dimmedWindows.length; i++)
|
||||
@ -944,7 +949,13 @@ const WindowManager = new Lang.Class({
|
||||
gesture = new AppSwitchAction();
|
||||
gesture.connect('activated', Lang.bind(this, this._switchApp));
|
||||
global.stage.add_action(gesture);
|
||||
},
|
||||
|
||||
_showPadOsd: function (display, device, settings, imagePath, editionMode, monitorIndex) {
|
||||
this._currentPadOsd = new PadOsd.PadOsd(device, settings, imagePath, editionMode, monitorIndex);
|
||||
this._currentPadOsd.connect('closed', Lang.bind(this, function() { this._currentPadOsd = null }));
|
||||
|
||||
return this._currentPadOsd.actor;
|
||||
},
|
||||
|
||||
_actionSwitchWorkspace: function(action, direction) {
|
||||
@ -1035,6 +1046,10 @@ const WindowManager = new Lang.Class({
|
||||
this._workspaceTracker.keepWorkspaceAlive(workspace, duration);
|
||||
},
|
||||
|
||||
skipNextEffect: function(actor) {
|
||||
this._skippedActors.push(actor);
|
||||
},
|
||||
|
||||
setCustomKeybindingHandler: function(name, modes, handler) {
|
||||
if (Meta.keybindings_set_custom_handler(name, handler))
|
||||
this.allowKeybinding(name, modes);
|
||||
@ -1061,6 +1076,9 @@ const WindowManager = new Lang.Class({
|
||||
},
|
||||
|
||||
_shouldAnimateActor: function(actor, types) {
|
||||
if (this._removeEffect(this._skippedActors, actor))
|
||||
return false;
|
||||
|
||||
if (!this._shouldAnimate())
|
||||
return false;
|
||||
|
||||
@ -1238,37 +1256,17 @@ const WindowManager = new Lang.Class({
|
||||
return;
|
||||
}
|
||||
|
||||
if (whichChange == Meta.SizeChange.FULLSCREEN)
|
||||
this._fullscreenWindow(shellwm, actor, oldFrameRect, oldBufferRect);
|
||||
else if (whichChange == Meta.SizeChange.UNFULLSCREEN)
|
||||
this._unfullscreenWindow(shellwm, actor, oldFrameRect, oldBufferRect);
|
||||
if ((whichChange == Meta.SizeChange.FULLSCREEN ||
|
||||
whichChange == Meta.SizeChange.UNFULLSCREEN) &&
|
||||
oldFrameRect.width > 0 && oldFrameRect.height > 0)
|
||||
this._fullscreenAnimation(shellwm, actor, oldFrameRect, whichChange);
|
||||
else
|
||||
shellwm.completed_size_change(actor);
|
||||
},
|
||||
|
||||
_fullscreenWindow: function(shellwm, actor, oldFrameRect, oldBufferRect) {
|
||||
let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
|
||||
actor.translation_x = oldFrameRect.x - monitor.x;
|
||||
actor.translation_y = oldFrameRect.y - monitor.y;
|
||||
this._fullscreenAnimation(shellwm, actor, oldFrameRect);
|
||||
},
|
||||
|
||||
_unfullscreenWindow: function(shellwm, actor, oldFrameRect, oldBufferRect) {
|
||||
let targetRect = actor.meta_window.get_frame_rect();
|
||||
let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
|
||||
actor.translation_x = -(targetRect.x - monitor.x);
|
||||
actor.translation_y = -(targetRect.y - monitor.y);
|
||||
this._fullscreenAnimation(shellwm, actor, oldFrameRect);
|
||||
},
|
||||
|
||||
_fullscreenAnimation: function(shellwm, actor, oldFrameRect) {
|
||||
this._resizing.push(actor);
|
||||
|
||||
_fullscreenAnimation: function(shellwm, actor, oldFrameRect, change) {
|
||||
// Position a clone of the window on top of the old position,
|
||||
// while actor updates are frozen.
|
||||
// Note that the MetaWindow has up to date sizing information for
|
||||
// the new geometry already.
|
||||
let targetRect = actor.meta_window.get_frame_rect();
|
||||
let actorContent = Shell.util_get_content_for_window_actor(actor, oldFrameRect);
|
||||
let actorClone = new St.Widget({ content: actorContent });
|
||||
actorClone.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS);
|
||||
@ -1276,10 +1274,26 @@ const WindowManager = new Lang.Class({
|
||||
actorClone.set_size(oldFrameRect.width, oldFrameRect.height);
|
||||
Main.uiGroup.add_actor(actorClone);
|
||||
|
||||
actor.__fullscreenClone = actorClone;
|
||||
let rect = change == Meta.SizeChange.FULLSCREEN ? oldFrameRect : null;
|
||||
|
||||
let scaleX = targetRect.width / oldFrameRect.width;
|
||||
let scaleY = targetRect.height / oldFrameRect.height;
|
||||
if (this._clearFullscreenInfo(actor))
|
||||
this._shellwm.completed_size_change(actor);
|
||||
|
||||
actor.__fullscreenInfo = { clone: actorClone,
|
||||
oldRect: rect };
|
||||
},
|
||||
|
||||
_sizeChangedWindow: function(shellwm, actor) {
|
||||
if (!actor.__fullscreenInfo)
|
||||
return;
|
||||
|
||||
let actorClone = actor.__fullscreenInfo.clone;
|
||||
let targetRect = actor.meta_window.get_frame_rect();
|
||||
|
||||
let scaleX = targetRect.width / actorClone.width;
|
||||
let scaleY = targetRect.height / actorClone.height;
|
||||
|
||||
this._resizing.push(actor);
|
||||
|
||||
// Now scale and fade out the clone
|
||||
Tweener.addTween(actorClone,
|
||||
@ -1292,9 +1306,17 @@ const WindowManager = new Lang.Class({
|
||||
transition: 'easeOutQuad'
|
||||
});
|
||||
|
||||
let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
|
||||
let oldRect = actor.__fullscreenInfo.oldRect;
|
||||
if (oldRect) {
|
||||
actor.translation_x = oldRect.x - monitor.x;
|
||||
actor.translation_y = oldRect.y - monitor.y;
|
||||
} else {
|
||||
actor.translation_x = -(targetRect.x - monitor.x);
|
||||
actor.translation_y = -(targetRect.y - monitor.y);
|
||||
}
|
||||
|
||||
// Now set scale the actor to size it as the clone.
|
||||
// Note that the caller of this function already set a translation
|
||||
// on the actor.
|
||||
actor.scale_x = 1 / scaleX;
|
||||
actor.scale_y = 1 / scaleY;
|
||||
|
||||
@ -1320,6 +1342,15 @@ const WindowManager = new Lang.Class({
|
||||
shellwm.completed_size_change(actor);
|
||||
},
|
||||
|
||||
_clearFullscreenInfo: function(actor) {
|
||||
if (actor.__fullscreenInfo) {
|
||||
actor.__fullscreenInfo.clone.destroy();
|
||||
delete actor.__fullscreenInfo;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
|
||||
_sizeChangeWindowDone: function(shellwm, actor) {
|
||||
if (this._removeEffect(this._resizing, actor)) {
|
||||
Tweener.removeTweens(actor);
|
||||
@ -1327,31 +1358,25 @@ const WindowManager = new Lang.Class({
|
||||
actor.scale_y = 1.0;
|
||||
actor.translation_x = 0;
|
||||
actor.translation_y = 0;
|
||||
|
||||
let actorClone = actor.__fullscreenClone;
|
||||
if (actorClone) {
|
||||
actorClone.destroy();
|
||||
delete actor.__fullscreenClone;
|
||||
}
|
||||
this._clearFullscreenInfo(actor);
|
||||
}
|
||||
},
|
||||
|
||||
_sizeChangeWindowOverwritten: function(shellwm, actor) {
|
||||
if (this._removeEffect(this._resizing, actor)) {
|
||||
let actorClone = actor.__fullscreenClone;
|
||||
if (actorClone) {
|
||||
actorClone.destroy();
|
||||
delete actor.__fullscreenClone;
|
||||
}
|
||||
}
|
||||
if (this._removeEffect(this._resizing, actor))
|
||||
this._clearFullscreenInfo(actor);
|
||||
},
|
||||
|
||||
_hasAttachedDialogs: function(window, ignoreWindow) {
|
||||
var count = 0;
|
||||
window.foreach_transient(function(win) {
|
||||
if (win != ignoreWindow && win.is_attached_dialog())
|
||||
if (win != ignoreWindow &&
|
||||
win.is_attached_dialog() &&
|
||||
win.get_transient_for() == window) {
|
||||
count++;
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
return count != 0;
|
||||
},
|
||||
@ -1420,6 +1445,11 @@ const WindowManager = new Lang.Class({
|
||||
|
||||
actor._windowType = type;
|
||||
}));
|
||||
actor.meta_window.connect('unmanaged', Lang.bind(this, function(window) {
|
||||
let parent = window.get_transient_for();
|
||||
if (parent)
|
||||
this._checkDimming(parent);
|
||||
}));
|
||||
|
||||
if (actor.meta_window.is_attached_dialog())
|
||||
this._checkDimming(actor.get_meta_window().get_transient_for());
|
||||
|
@ -19,8 +19,7 @@ const WorkspaceSwitcherPopup = new Lang.Class({
|
||||
Name: 'WorkspaceSwitcherPopup',
|
||||
|
||||
_init : function() {
|
||||
this.actor = new St.Widget({ reactive: true,
|
||||
x: 0,
|
||||
this.actor = new St.Widget({ x: 0,
|
||||
y: 0,
|
||||
width: global.screen_width,
|
||||
height: global.screen_height,
|
||||
|
@ -29,6 +29,7 @@ gl
|
||||
gu
|
||||
he
|
||||
hi
|
||||
hr
|
||||
hu
|
||||
ia
|
||||
id
|
||||
|
@ -10,7 +10,7 @@ top_builddir = ..
|
||||
# These options get passed to xgettext.
|
||||
XGETTEXT_OPTIONS = --from-code=UTF-8 --keyword=_ --keyword=N_ \
|
||||
--keyword=C_:1c,2 --keyword=NC_:1c,2 \
|
||||
--keyword=g_dngettext:2,3 \
|
||||
--keyword=g_dngettext:2,3 --add-comments \
|
||||
--flag=g_dngettext:2:pass-c-format \
|
||||
--flag=g_strdup_printf:1:c-format \
|
||||
--flag=g_string_printf:2:c-format \
|
||||
|
@ -39,6 +39,7 @@ js/ui/mpris.js
|
||||
js/ui/notificationDaemon.js
|
||||
js/ui/overviewControls.js
|
||||
js/ui/overview.js
|
||||
js/ui/padOsd.js
|
||||
js/ui/panel.js
|
||||
js/ui/popupMenu.js
|
||||
js/ui/runDialog.js
|
||||
|
719
po/ca.po
719
po/ca.po
@ -10,324 +10,16 @@ msgstr ""
|
||||
"Project-Id-Version: HEAD\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2016-03-13 10:20+0000\n"
|
||||
"PO-Revision-Date: 2016-03-13 14:47+0100\n"
|
||||
"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
|
||||
"POT-Creation-Date: 2016-09-16 21:22+0200\n"
|
||||
"PO-Revision-Date: 2016-09-16 21:22+0200\n"
|
||||
"Last-Translator: Jordi Mas <jmas@softcatala.org>\n"
|
||||
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
|
||||
"Language: ca\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bits\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Gtranslator 2.91.6\n"
|
||||
|
||||
#: ../data/50-gnome-shell-system.xml.in.h:1
|
||||
msgid "System"
|
||||
msgstr "Sistema"
|
||||
|
||||
#: ../data/50-gnome-shell-system.xml.in.h:2
|
||||
msgid "Show the notification list"
|
||||
msgstr "Mostra la llista de notificacions"
|
||||
|
||||
#: ../data/50-gnome-shell-system.xml.in.h:3
|
||||
msgid "Focus the active notification"
|
||||
msgstr "Posa el focus en la notificació activa"
|
||||
|
||||
#: ../data/50-gnome-shell-system.xml.in.h:4
|
||||
msgid "Show the overview"
|
||||
msgstr "Mostra la vista general"
|
||||
|
||||
#: ../data/50-gnome-shell-system.xml.in.h:5
|
||||
msgid "Show all applications"
|
||||
msgstr "Mostra totes les aplicacions"
|
||||
|
||||
#: ../data/50-gnome-shell-system.xml.in.h:6
|
||||
msgid "Open the application menu"
|
||||
msgstr "Obre el menú d'aplicació"
|
||||
|
||||
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
|
||||
msgid "GNOME Shell Extension Preferences"
|
||||
msgstr "Preferències de les extensions del GNOME Shell"
|
||||
|
||||
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:2
|
||||
msgid "Configure GNOME Shell Extensions"
|
||||
msgstr "Configureu les extensions del GNOME Shell"
|
||||
|
||||
#: ../data/org.gnome.Shell.desktop.in.in.h:1
|
||||
msgid "GNOME Shell"
|
||||
msgstr "GNOME Shell"
|
||||
|
||||
#: ../data/org.gnome.Shell.desktop.in.in.h:2
|
||||
msgid "Window management and application launching"
|
||||
msgstr "Gestor de finestres i llançador d'aplicacions"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
msgstr ""
|
||||
"Habilita les eines internes en el diàleg de l'Alt+F2 que són útils per als "
|
||||
"desenvolupadors i provadors"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:2
|
||||
msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
"dialog."
|
||||
msgstr ""
|
||||
"Permet l'accés a les eines de depuració i de seguiment internes a través del "
|
||||
"diàleg de l'Alt+F2."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:3
|
||||
msgid "UUIDs of extensions to enable"
|
||||
msgstr ""
|
||||
"Identificadors universals únics de les extensions que s'han d'habilitar"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:4
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a UUID property; this key lists extensions which "
|
||||
"should be loaded. Any extension that wants to be loaded needs to be in this "
|
||||
"list. You can also manipulate this list with the EnableExtension and "
|
||||
"DisableExtension D-Bus methods on org.gnome.Shell."
|
||||
msgstr ""
|
||||
"Les extensions del GNOME Shell tenen un identificador universal. Aquesta "
|
||||
"clau conté una llista de les extensions que s'han de carregar. Qualsevol "
|
||||
"extensió que s'hagi de carregar ha de ser a la llista. Podeu modificar "
|
||||
"aquesta llista amb els mètodes de D-Bus «EnableExtension» (activa una "
|
||||
"extensió) i «DisableExtension» (desactiva una extensió) a org.gnome.Shell."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:5
|
||||
msgid "Disables the validation of extension version compatibility"
|
||||
msgstr "Desactiva la validació de la compatibilitat de versió d'extensions"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:6
|
||||
msgid ""
|
||||
"GNOME Shell will only load extensions that claim to support the current "
|
||||
"running version. Enabling this option will disable this check and try to "
|
||||
"load all extensions regardless of the versions they claim to support."
|
||||
msgstr ""
|
||||
"El GNOME Shell només carregarà extensions que afirmin ser compatibles amb la "
|
||||
"versió en execució. Si s'activa aquesta opció, es desactivarà la comprovació "
|
||||
"i es provarà de carregar totes les extensions sense tenir en compte les "
|
||||
"versions amb què afirmin ser compatibles."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr ""
|
||||
"Llista d'identificadors de fitxers d'escriptori de les aplicacions preferides"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:8
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr ""
|
||||
"Es mostraran, a l'àrea de preferits, les aplicacions que corresponguin a "
|
||||
"aquests identificadors."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
|
||||
msgid "App Picker View"
|
||||
msgstr "Vista del seleccionador d'aplicacions"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
|
||||
msgid "Index of the currently selected view in the application picker."
|
||||
msgstr ""
|
||||
"Índex de la vista seleccionada actualment en el seleccionador d'aplicacions."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr "Historial de les ordres utilitzades en el diàleg de l'Alt+F2"
|
||||
|
||||
#. Translators: looking glass is a debugger and inspector tool, see https://live.gnome.org/GnomeShell/LookingGlass
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
||||
msgid "History for the looking glass dialog"
|
||||
msgstr "Historial del depurador del GNOME Shell"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
||||
msgid "Always show the 'Log out' menu item in the user menu."
|
||||
msgstr "Mostra sempre l'element de menú «Surt» al menú d'usuari."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||
msgid ""
|
||||
"This key overrides the automatic hiding of the 'Log out' menu item in single-"
|
||||
"user, single-session situations."
|
||||
msgstr ""
|
||||
"Aquesta clau sobreescriu l'ocultació automàtica de l'element de menú «Surt» "
|
||||
"quan només hi ha un usuari i un sol tipus de sessió."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||
msgid ""
|
||||
"Whether to remember password for mounting encrypted or remote filesystems"
|
||||
msgstr ""
|
||||
"Si s'han de recordar les contrasenyes dels punts de muntatge encriptats o "
|
||||
"els sistemes de fitxers remots"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||
msgid ""
|
||||
"The shell will request a password when an encrypted device or a remote "
|
||||
"filesystem is mounted. If the password can be saved for future use a "
|
||||
"'Remember Password' checkbox will be present. This key sets the default "
|
||||
"state of the checkbox."
|
||||
msgstr ""
|
||||
"El GNOME Shell us demanarà la contrasenya quan es munti un dispositiu "
|
||||
"encriptat o un sistema de fitxers remot. Si es pot desar la contrasenya per "
|
||||
"utilitzar-lo en el futur, es mostrarà la casella de verificació «Recorda la "
|
||||
"contrasenya». Aquesta clau estableix el valor per defecte d'aquesta casella "
|
||||
"de verificació."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||
msgid ""
|
||||
"Whether the default Bluetooth adapter had set up devices associated to it"
|
||||
msgstr ""
|
||||
"Si l'adaptador de Bluetooth predeterminat té dispositius configurats "
|
||||
"associats"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||
msgid ""
|
||||
"The shell will only show a Bluetooth menu item if a Bluetooth adapter is "
|
||||
"powered, or if there were devices set up associated with the default "
|
||||
"adapter. This will be reset if the default adapter is ever seen not to have "
|
||||
"devices associated to it."
|
||||
msgstr ""
|
||||
"El Shell només mostrà una entrada de menú Bluetooth si un adaptador Bluetooh "
|
||||
"està engegat, o si hi ha dispositius configurats associats a l'adaptador "
|
||||
"predeterminat. Això es reiniciarà si l'adaptador predeterminat té "
|
||||
"dispositius associats."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Mostra el número de la setmana al calendari"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "Si és «true» (cert) es mostra el número de la setmana al calendari."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||
msgid "Keybinding to open the application menu"
|
||||
msgstr "Vinculació per obrir el menú d'aplicació"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||
msgid "Keybinding to open the application menu."
|
||||
msgstr "La vinculació per obrir el menú d'aplicació."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||
msgid "Keybinding to open the \"Show Applications\" view"
|
||||
msgstr "Vinculació per obrir la vista «Mostra les aplicacions»"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||
msgid ""
|
||||
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||
msgstr ""
|
||||
"Vinculació per obrir la vista «Mostra les aplicacions» de les activitats de "
|
||||
"la vista general."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||
msgid "Keybinding to open the overview"
|
||||
msgstr "Vinculació per obrir la vista general"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||
msgid "Keybinding to open the Activities Overview."
|
||||
msgstr "Vinculació per obrir la vista general d'activitats."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
||||
msgid "Keybinding to toggle the visibility of the notification list"
|
||||
msgstr ""
|
||||
"La vinculació per commutar la visibilitat de la llista de notificacions"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||
msgid "Keybinding to toggle the visibility of the notification list."
|
||||
msgstr ""
|
||||
"La vinculació per commutar la visibilitat de la llista de notificacions."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||
msgid "Keybinding to focus the active notification"
|
||||
msgstr "Vinculació per posar el focus a la notificació activa"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||
msgid "Keybinding to focus the active notification."
|
||||
msgstr "Vinculació per posar el focus a la notificació activa."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
|
||||
msgid ""
|
||||
"Keybinding that pauses and resumes all running tweens, for debugging purposes"
|
||||
msgstr ""
|
||||
"Vinculació que fa una pausa i continua tots els «tweens» en execució, per "
|
||||
"motius de depuració"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
|
||||
msgid "Which keyboard to use"
|
||||
msgstr "Quin tipus de teclat s'ha d'utilitzar"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "El tipus de teclat que s'utilitzarà."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
||||
msgid "Limit switcher to current workspace."
|
||||
msgstr "Limita el canviador a l'espai de treball actual."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
|
||||
msgid ""
|
||||
"If true, only applications that have windows on the current workspace are "
|
||||
"shown in the switcher. Otherwise, all applications are included."
|
||||
msgstr ""
|
||||
"Si és «true» (cert), només les aplicacions que tinguin finestres en l'espai "
|
||||
"de treball actual es mostren en el canviador. En cas contrari es mostren "
|
||||
"totes les aplicacions."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
||||
msgid "The application icon mode."
|
||||
msgstr "El mode d'icona de les aplicacions."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
|
||||
msgid ""
|
||||
"Configures how the windows are shown in the switcher. Valid possibilities "
|
||||
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
|
||||
"only' (shows only the application icon) or 'both'."
|
||||
msgstr ""
|
||||
"Configureu com es mostren les finestres en l'intercanviador. Els valors "
|
||||
"possibles són: «thumbnail-only» (mostra una miniatura de la finestra), «app-"
|
||||
"icon-only» (mostra la icona de l'aplicació) o «both» (ambdues coses: mostra "
|
||||
"la miniatura de la finestra i la icona de l'aplicació)."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
|
||||
msgid ""
|
||||
"If true, only windows from the current workspace are shown in the switcher. "
|
||||
"Otherwise, all windows are included."
|
||||
msgstr ""
|
||||
"Si és «true» (cert), només les finestres de l'espai de treball actual es "
|
||||
"mostren en el canviador. En cas contrari, es mostren totes les finestres."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
|
||||
msgid "Attach modal dialog to the parent window"
|
||||
msgstr "Adjunta el diàleg modal a la finestra pare"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:41
|
||||
msgid ""
|
||||
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
|
||||
msgstr ""
|
||||
"Si s'executa el GNOME Shell, aquesta clau sobreescriu la clau «org.gnome."
|
||||
"mutter»."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42
|
||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||
msgstr ""
|
||||
"Habilita la tesselització a les vores en deixar anar les finestres a les "
|
||||
"vores de la pantalla"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43
|
||||
msgid "Workspaces are managed dynamically"
|
||||
msgstr "Els espais de treball es gestionen dinàmicament"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:44
|
||||
msgid "Workspaces only on primary monitor"
|
||||
msgstr "Només en el monitor principal hi ha espais de treball"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:45
|
||||
msgid "Delay focus changes in mouse mode until the pointer stops moving"
|
||||
msgstr ""
|
||||
"Retarda el canvi del focus, quan s'està en mode ratolí, fins que el punter "
|
||||
"no estigui quiet"
|
||||
|
||||
#: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1
|
||||
msgid "Network Login"
|
||||
msgstr "Inici de sessió de la xarxa"
|
||||
"X-Generator: Poedit 1.8.7.1\n"
|
||||
|
||||
#: ../js/extensionPrefs/main.js:117
|
||||
#, javascript-format
|
||||
@ -340,7 +32,7 @@ msgstr "Extensions del GNOME Shell"
|
||||
|
||||
#: ../js/gdm/authPrompt.js:147 ../js/ui/audioDeviceSelection.js:71
|
||||
#: ../js/ui/components/networkAgent.js:145
|
||||
#: ../js/ui/components/polkitAgent.js:179 ../js/ui/endSessionDialog.js:452
|
||||
#: ../js/ui/components/polkitAgent.js:179 ../js/ui/endSessionDialog.js:483
|
||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
|
||||
#: ../js/ui/status/network.js:916
|
||||
msgid "Cancel"
|
||||
@ -374,7 +66,7 @@ msgstr "No esteu llistat?"
|
||||
|
||||
#. Translators: this message is shown below the username entry field
|
||||
#. to clue the user in on how to login to the local network realm
|
||||
#: ../js/gdm/loginDialog.js:854
|
||||
#: ../js/gdm/loginDialog.js:859
|
||||
#, javascript-format
|
||||
msgid "(e.g., user or %s)"
|
||||
msgstr "(p. ex. l'usuari o %s)"
|
||||
@ -382,12 +74,12 @@ msgstr "(p. ex. l'usuari o %s)"
|
||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||
#. is not visible here since we only care about phase2 authentication
|
||||
#. (and don't even care of which one)
|
||||
#: ../js/gdm/loginDialog.js:859 ../js/ui/components/networkAgent.js:271
|
||||
#: ../js/gdm/loginDialog.js:864 ../js/ui/components/networkAgent.js:271
|
||||
#: ../js/ui/components/networkAgent.js:289
|
||||
msgid "Username: "
|
||||
msgstr "Nom d'usuari:"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1196
|
||||
#: ../js/gdm/loginDialog.js:1201
|
||||
msgid "Login Window"
|
||||
msgstr "Finestra d'entrada"
|
||||
|
||||
@ -495,6 +187,16 @@ msgstr "%d de %B de %Y, a les %l∶%M %p"
|
||||
msgid "Web Authentication Redirect"
|
||||
msgstr "Redirecció per l'autenticació web"
|
||||
|
||||
#. No support for non-modal system dialogs, so ignore the option
|
||||
#. let modal = options['modal'] || true;
|
||||
#: ../js/ui/accessDialog.js:62 ../js/ui/status/location.js:426
|
||||
msgid "Deny Access"
|
||||
msgstr "Denega l'accés"
|
||||
|
||||
#: ../js/ui/accessDialog.js:63 ../js/ui/status/location.js:429
|
||||
msgid "Grant Access"
|
||||
msgstr "Permetre l'accés"
|
||||
|
||||
#: ../js/ui/appDisplay.js:794
|
||||
msgid "Frequently used applications will appear here"
|
||||
msgstr "Les aplicacions utilitzades freqüentment apareixeran aquí"
|
||||
@ -561,7 +263,7 @@ msgstr "Canvia el fons de l'escriptori…"
|
||||
msgid "Display Settings"
|
||||
msgstr "Paràmetres de la pantalla"
|
||||
|
||||
#: ../js/ui/backgroundMenu.js:22 ../js/ui/status/system.js:366
|
||||
#: ../js/ui/backgroundMenu.js:22 ../js/ui/status/system.js:374
|
||||
msgid "Settings"
|
||||
msgstr "Paràmetres"
|
||||
|
||||
@ -617,55 +319,55 @@ msgctxt "grid saturday"
|
||||
msgid "S"
|
||||
msgstr "Ds"
|
||||
|
||||
#: ../js/ui/calendar.js:416
|
||||
#: ../js/ui/calendar.js:442
|
||||
msgid "Previous month"
|
||||
msgstr "Mes anterior"
|
||||
|
||||
#: ../js/ui/calendar.js:426
|
||||
#: ../js/ui/calendar.js:452
|
||||
msgid "Next month"
|
||||
msgstr "Mes següent"
|
||||
|
||||
#: ../js/ui/calendar.js:579
|
||||
#: ../js/ui/calendar.js:605
|
||||
#, no-javascript-format
|
||||
msgctxt "date day number format"
|
||||
msgid "%d"
|
||||
msgstr "%d"
|
||||
|
||||
#: ../js/ui/calendar.js:634
|
||||
#: ../js/ui/calendar.js:660
|
||||
msgid "Week %V"
|
||||
msgstr "Setmana %V"
|
||||
|
||||
#. Translators: Shown in calendar event list for all day events
|
||||
#. * Keep it short, best if you can use less then 10 characters
|
||||
#.
|
||||
#: ../js/ui/calendar.js:695
|
||||
#: ../js/ui/calendar.js:721
|
||||
msgctxt "event list time"
|
||||
msgid "All Day"
|
||||
msgstr "Tot el dia"
|
||||
|
||||
#: ../js/ui/calendar.js:821
|
||||
#: ../js/ui/calendar.js:836
|
||||
msgid "Events"
|
||||
msgstr "Cites"
|
||||
|
||||
#: ../js/ui/calendar.js:830
|
||||
#: ../js/ui/calendar.js:845
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A %d de %B"
|
||||
|
||||
#: ../js/ui/calendar.js:834
|
||||
#: ../js/ui/calendar.js:849
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%A %d de %B de %Y"
|
||||
|
||||
#: ../js/ui/calendar.js:919
|
||||
#: ../js/ui/calendar.js:931
|
||||
msgid "Notifications"
|
||||
msgstr "Notificacions"
|
||||
|
||||
#: ../js/ui/calendar.js:1070
|
||||
#: ../js/ui/calendar.js:1082
|
||||
msgid "No Notifications"
|
||||
msgstr "Cap notificació"
|
||||
|
||||
#: ../js/ui/calendar.js:1073
|
||||
#: ../js/ui/calendar.js:1085
|
||||
msgid "No Events"
|
||||
msgstr "Cap cita"
|
||||
|
||||
@ -803,7 +505,7 @@ msgstr "No ha funcionat. Torneu-ho a provar."
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/components/telepathyClient.js:759
|
||||
#: ../js/ui/components/telepathyClient.js:765
|
||||
#, javascript-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "En/na %s ara es diu %s"
|
||||
@ -936,7 +638,7 @@ msgstr[1] ""
|
||||
"Es reiniciarà l'ordinador automàticament i s'instal·laran les "
|
||||
"actualitzacions d'aquí %d segons."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:127
|
||||
#: ../js/ui/endSessionDialog.js:127 ../js/ui/endSessionDialog.js:147
|
||||
msgctxt "button"
|
||||
msgid "Restart & Install"
|
||||
msgstr "Reinicia i instal·la"
|
||||
@ -951,30 +653,45 @@ msgctxt "checkbox"
|
||||
msgid "Power off after updates are installed"
|
||||
msgstr "Apaga després d'instal·lar les actualitzacions"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:338
|
||||
#: ../js/ui/endSessionDialog.js:137
|
||||
msgctxt "title"
|
||||
msgid "Restart & Install Upgrade"
|
||||
msgstr "Reinicia i instal·la l'actualització"
|
||||
|
||||
#. Translators: This is the text displayed for system upgrades in the
|
||||
#. shut down dialog. First %s gets replaced with the distro name and
|
||||
#. second %s with the distro version to upgrade to
|
||||
#: ../js/ui/endSessionDialog.js:142
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"%s %s will be installed after restart. Upgrade installation can take a long "
|
||||
"time: ensure that you have backed up and that the computer is plugged in."
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:361
|
||||
msgid "Running on battery power: please plug in before installing updates."
|
||||
msgstr ""
|
||||
"S'està utilitzant la bateria: connecteu l'ordinador a la xarxa elèctrica "
|
||||
"abans d'instal·lar les actualitzacions."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:355
|
||||
#: ../js/ui/endSessionDialog.js:378
|
||||
msgid "Some applications are busy or have unsaved work."
|
||||
msgstr ""
|
||||
"Hi ha algunes aplicacions que estan ocupades o que tenen documents sense "
|
||||
"desar."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:362
|
||||
#: ../js/ui/endSessionDialog.js:385
|
||||
msgid "Other users are logged in."
|
||||
msgstr "Altres usuaris tenen la sessió oberta."
|
||||
|
||||
#. Translators: Remote here refers to a remote session, like a ssh login
|
||||
#: ../js/ui/endSessionDialog.js:640
|
||||
#: ../js/ui/endSessionDialog.js:671
|
||||
#, javascript-format
|
||||
msgid "%s (remote)"
|
||||
msgstr "%s (remot)"
|
||||
|
||||
#. Translators: Console here refers to a tty like a VT console
|
||||
#: ../js/ui/endSessionDialog.js:643
|
||||
#: ../js/ui/endSessionDialog.js:674
|
||||
#, javascript-format
|
||||
msgid "%s (console)"
|
||||
msgstr "%s (consola)"
|
||||
@ -988,7 +705,7 @@ msgstr "Instal·la"
|
||||
msgid "Download and install “%s” from extensions.gnome.org?"
|
||||
msgstr "Voleu baixar i instal·lar «%s» d'extensions.gnome.org?"
|
||||
|
||||
#: ../js/ui/keyboard.js:741 ../js/ui/status/keyboard.js:713
|
||||
#: ../js/ui/keyboard.js:742 ../js/ui/status/keyboard.js:782
|
||||
msgid "Keyboard"
|
||||
msgstr "Teclat"
|
||||
|
||||
@ -1025,7 +742,7 @@ msgstr "Habilitat"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:719 ../src/gvc/gvc-mixer-control.c:1828
|
||||
#: ../js/ui/lookingGlass.js:719 ../src/gvc/gvc-mixer-control.c:1866
|
||||
msgid "Disabled"
|
||||
msgstr "Inhabilitat"
|
||||
|
||||
@ -1073,7 +790,7 @@ msgstr "Multimèdia"
|
||||
msgid "Undo"
|
||||
msgstr "Desfés"
|
||||
|
||||
#: ../js/ui/overview.js:117
|
||||
#: ../js/ui/overview.js:113
|
||||
msgid "Overview"
|
||||
msgstr "Vista general"
|
||||
|
||||
@ -1081,7 +798,7 @@ msgstr "Vista general"
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
#. characters.
|
||||
#: ../js/ui/overview.js:244
|
||||
#: ../js/ui/overview.js:240
|
||||
msgid "Type to search…"
|
||||
msgstr "Teclegeu per cercar…"
|
||||
|
||||
@ -1145,11 +862,11 @@ msgid_plural "%d new notifications"
|
||||
msgstr[0] "%d notificació nova"
|
||||
msgstr[1] "%d notificacions noves"
|
||||
|
||||
#: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:374
|
||||
#: ../js/ui/screenShield.js:449 ../js/ui/status/system.js:382
|
||||
msgid "Lock"
|
||||
msgstr "Bloqueja"
|
||||
|
||||
#: ../js/ui/screenShield.js:684
|
||||
#: ../js/ui/screenShield.js:704
|
||||
msgid "GNOME needs to lock the screen"
|
||||
msgstr "El GNOME necessita bloquejar la pantalla"
|
||||
|
||||
@ -1160,11 +877,11 @@ msgstr "El GNOME necessita bloquejar la pantalla"
|
||||
#.
|
||||
#. XXX: another option is to kick the user into the gdm login
|
||||
#. screen, where we're not affected by grabs
|
||||
#: ../js/ui/screenShield.js:805 ../js/ui/screenShield.js:1271
|
||||
#: ../js/ui/screenShield.js:825 ../js/ui/screenShield.js:1291
|
||||
msgid "Unable to lock"
|
||||
msgstr "No es pot blocar"
|
||||
|
||||
#: ../js/ui/screenShield.js:806 ../js/ui/screenShield.js:1272
|
||||
#: ../js/ui/screenShield.js:826 ../js/ui/screenShield.js:1292
|
||||
msgid "Lock was blocked by an application"
|
||||
msgstr "Una aplicació està bloquejant el bloqueig"
|
||||
|
||||
@ -1248,7 +965,7 @@ msgstr "Text gran"
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:56
|
||||
#: ../js/ui/status/bluetooth.js:56 ../js/ui/status/network.js:624
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Paràmetres del Bluetooth"
|
||||
|
||||
@ -1283,7 +1000,7 @@ msgstr "Desactiva"
|
||||
msgid "Brightness"
|
||||
msgstr "Brillantor"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:736
|
||||
#: ../js/ui/status/keyboard.js:805
|
||||
msgid "Show Keyboard Layout"
|
||||
msgstr "Mostra la disposició del teclat"
|
||||
|
||||
@ -1311,14 +1028,6 @@ msgstr "Ubicació inhabilitada"
|
||||
msgid "Enable"
|
||||
msgstr "Habilita"
|
||||
|
||||
#: ../js/ui/status/location.js:426
|
||||
msgid "Deny Access"
|
||||
msgstr "Denega l'accés"
|
||||
|
||||
#: ../js/ui/status/location.js:429
|
||||
msgid "Grant Access"
|
||||
msgstr "Permetre l'accés"
|
||||
|
||||
#. Translators: %s is an application name
|
||||
#: ../js/ui/status/location.js:435
|
||||
#, javascript-format
|
||||
@ -1329,7 +1038,7 @@ msgstr "Voleu donar a %s accés a la vostra ubicació?"
|
||||
msgid "Location access can be changed at any time from the privacy settings."
|
||||
msgstr ""
|
||||
"Podeu canviar la configuració de l'accés a la ubicació sempre que vulgueu "
|
||||
"des del la configuració de la privacitat."
|
||||
"des de la configuració de la privacitat."
|
||||
|
||||
#: ../js/ui/status/network.js:101
|
||||
msgid "<unknown>"
|
||||
@ -1397,7 +1106,7 @@ msgstr "%s ha fallat la connexió"
|
||||
msgid "Wired Settings"
|
||||
msgstr "Paràmetres de la xarxa amb fils"
|
||||
|
||||
#: ../js/ui/status/network.js:545 ../js/ui/status/network.js:624
|
||||
#: ../js/ui/status/network.js:545
|
||||
msgid "Mobile Broadband Settings"
|
||||
msgstr "Configuració de la xarxa de banda ampla mòbil"
|
||||
|
||||
@ -1415,8 +1124,8 @@ msgid "%s Disabled"
|
||||
msgstr "%s Inhabilitat"
|
||||
|
||||
#: ../js/ui/status/network.js:632
|
||||
msgid "Use as Internet connection"
|
||||
msgstr "Utilitza com a connexió a Internet"
|
||||
msgid "Connect to Internet"
|
||||
msgstr "Connecta a l'Internet"
|
||||
|
||||
#: ../js/ui/status/network.js:813
|
||||
msgid "Airplane Mode is On"
|
||||
@ -1424,7 +1133,7 @@ msgstr "El mode d'avió és actiu"
|
||||
|
||||
#: ../js/ui/status/network.js:814
|
||||
msgid "Wi-Fi is disabled when airplane mode is on."
|
||||
msgstr "Quan el mode d'avió és actiu es desactiva la xarxa sense fils."
|
||||
msgstr "Quan el mode d'avió és actiu es desactiva la xarxa sense fil."
|
||||
|
||||
#: ../js/ui/status/network.js:815
|
||||
msgid "Turn Off Airplane Mode"
|
||||
@ -1436,11 +1145,11 @@ msgstr "La xarxa sense fil està desactivada"
|
||||
|
||||
#: ../js/ui/status/network.js:825
|
||||
msgid "Wi-Fi needs to be turned on in order to connect to a network."
|
||||
msgstr "S'ha d'activar la xarxa sense fils per poder-se connectar a una xarxa."
|
||||
msgstr "S'ha d'activar la xarxa sense fil per poder-se connectar a una xarxa."
|
||||
|
||||
#: ../js/ui/status/network.js:826
|
||||
msgid "Turn On Wi-Fi"
|
||||
msgstr "Activa la xarxa sense fils"
|
||||
msgstr "Activa la xarxa sense fil"
|
||||
|
||||
#: ../js/ui/status/network.js:851
|
||||
msgid "Wi-Fi Networks"
|
||||
@ -1553,27 +1262,27 @@ msgstr "%d %%"
|
||||
msgid "Airplane Mode On"
|
||||
msgstr "El mode d'avió és actiu"
|
||||
|
||||
#: ../js/ui/status/system.js:343
|
||||
#: ../js/ui/status/system.js:351
|
||||
msgid "Switch User"
|
||||
msgstr "Canvia d'usuari"
|
||||
|
||||
#: ../js/ui/status/system.js:348
|
||||
#: ../js/ui/status/system.js:356
|
||||
msgid "Log Out"
|
||||
msgstr "Surt"
|
||||
|
||||
#: ../js/ui/status/system.js:353
|
||||
#: ../js/ui/status/system.js:361
|
||||
msgid "Account Settings"
|
||||
msgstr "Paràmetres del compte"
|
||||
|
||||
#: ../js/ui/status/system.js:370
|
||||
#: ../js/ui/status/system.js:378
|
||||
msgid "Orientation Lock"
|
||||
msgstr "Bloqueja l'orientació"
|
||||
|
||||
#: ../js/ui/status/system.js:378
|
||||
#: ../js/ui/status/system.js:386
|
||||
msgid "Suspend"
|
||||
msgstr "Atura temporalment"
|
||||
|
||||
#: ../js/ui/status/system.js:381
|
||||
#: ../js/ui/status/system.js:389
|
||||
msgid "Power Off"
|
||||
msgstr "Apaga"
|
||||
|
||||
@ -1699,13 +1408,9 @@ msgstr "Mou a la pantalla de l'esquerra"
|
||||
msgid "Move to Monitor Right"
|
||||
msgstr "Mou a la pantalla de la dreta"
|
||||
|
||||
#: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1
|
||||
msgid "Evolution Calendar"
|
||||
msgstr "Calendari de l'Evolution"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1835
|
||||
#: ../src/gvc/gvc-mixer-control.c:1873
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
@ -1714,14 +1419,14 @@ msgstr[1] "%u sortides"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1845
|
||||
#: ../src/gvc/gvc-mixer-control.c:1883
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] "%u entrada"
|
||||
msgstr[1] "%u entrades"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:2371
|
||||
#: ../src/gvc/gvc-mixer-control.c:2738
|
||||
msgid "System Sounds"
|
||||
msgstr "Sons del sistema"
|
||||
|
||||
@ -1741,12 +1446,12 @@ msgstr "Utilitza un mode específic, p. ex. «gdm» per la pantalla d'entrada"
|
||||
msgid "List possible modes"
|
||||
msgstr "Llista els modes possibles"
|
||||
|
||||
#: ../src/shell-app.c:246
|
||||
#: ../src/shell-app.c:270
|
||||
msgctxt "program"
|
||||
msgid "Unknown"
|
||||
msgstr "Desconegut"
|
||||
|
||||
#: ../src/shell-app.c:487
|
||||
#: ../src/shell-app.c:511
|
||||
#, c-format
|
||||
msgid "Failed to launch “%s”"
|
||||
msgstr "No s'ha pogut iniciar «%s»"
|
||||
@ -1763,6 +1468,268 @@ msgstr "La contrasenya no pot ser buida"
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "L'usuari ha descartat el diàleg d'autenticació"
|
||||
|
||||
#~ msgid "System"
|
||||
#~ msgstr "Sistema"
|
||||
|
||||
#~ msgid "Show the notification list"
|
||||
#~ msgstr "Mostra la llista de notificacions"
|
||||
|
||||
#~ msgid "Focus the active notification"
|
||||
#~ msgstr "Posa el focus en la notificació activa"
|
||||
|
||||
#~ msgid "Show the overview"
|
||||
#~ msgstr "Mostra la vista general"
|
||||
|
||||
#~ msgid "Show all applications"
|
||||
#~ msgstr "Mostra totes les aplicacions"
|
||||
|
||||
#~ msgid "Open the application menu"
|
||||
#~ msgstr "Obre el menú d'aplicació"
|
||||
|
||||
#~ msgid "GNOME Shell Extension Preferences"
|
||||
#~ msgstr "Preferències de les extensions del GNOME Shell"
|
||||
|
||||
#~ msgid "Configure GNOME Shell Extensions"
|
||||
#~ msgstr "Configureu les extensions del GNOME Shell"
|
||||
|
||||
#~ msgid "GNOME Shell"
|
||||
#~ msgstr "GNOME Shell"
|
||||
|
||||
#~ msgid "Window management and application launching"
|
||||
#~ msgstr "Gestor de finestres i llançador d'aplicacions"
|
||||
|
||||
#~ msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
#~ msgstr ""
|
||||
#~ "Habilita les eines internes en el diàleg de l'Alt+F2 que són útils per "
|
||||
#~ "als desenvolupadors i provadors"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
#~ "dialog."
|
||||
#~ msgstr ""
|
||||
#~ "Permet l'accés a les eines de depuració i de seguiment internes a través "
|
||||
#~ "del diàleg de l'Alt+F2."
|
||||
|
||||
#~ msgid "UUIDs of extensions to enable"
|
||||
#~ msgstr ""
|
||||
#~ "Identificadors universals únics de les extensions que s'han d'habilitar"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "GNOME Shell extensions have a UUID property; this key lists extensions "
|
||||
#~ "which should be loaded. Any extension that wants to be loaded needs to be "
|
||||
#~ "in this list. You can also manipulate this list with the EnableExtension "
|
||||
#~ "and DisableExtension D-Bus methods on org.gnome.Shell."
|
||||
#~ msgstr ""
|
||||
#~ "Les extensions del GNOME Shell tenen un identificador universal. Aquesta "
|
||||
#~ "clau conté una llista de les extensions que s'han de carregar. Qualsevol "
|
||||
#~ "extensió que s'hagi de carregar ha de ser a la llista. Podeu modificar "
|
||||
#~ "aquesta llista amb els mètodes de D-Bus «EnableExtension» (activa una "
|
||||
#~ "extensió) i «DisableExtension» (desactiva una extensió) a org.gnome.Shell."
|
||||
|
||||
#~ msgid "Disables the validation of extension version compatibility"
|
||||
#~ msgstr "Desactiva la validació de la compatibilitat de versió d'extensions"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "GNOME Shell will only load extensions that claim to support the current "
|
||||
#~ "running version. Enabling this option will disable this check and try to "
|
||||
#~ "load all extensions regardless of the versions they claim to support."
|
||||
#~ msgstr ""
|
||||
#~ "El GNOME Shell només carregarà extensions que afirmin ser compatibles amb "
|
||||
#~ "la versió en execució. Si s'activa aquesta opció, es desactivarà la "
|
||||
#~ "comprovació i es provarà de carregar totes les extensions sense tenir en "
|
||||
#~ "compte les versions amb què afirmin ser compatibles."
|
||||
|
||||
#~ msgid "List of desktop file IDs for favorite applications"
|
||||
#~ msgstr ""
|
||||
#~ "Llista d'identificadors de fitxers d'escriptori de les aplicacions "
|
||||
#~ "preferides"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The applications corresponding to these identifiers will be displayed in "
|
||||
#~ "the favorites area."
|
||||
#~ msgstr ""
|
||||
#~ "Es mostraran, a l'àrea de preferits, les aplicacions que corresponguin a "
|
||||
#~ "aquests identificadors."
|
||||
|
||||
#~ msgid "App Picker View"
|
||||
#~ msgstr "Vista del seleccionador d'aplicacions"
|
||||
|
||||
#~ msgid "Index of the currently selected view in the application picker."
|
||||
#~ msgstr ""
|
||||
#~ "Índex de la vista seleccionada actualment en el seleccionador "
|
||||
#~ "d'aplicacions."
|
||||
|
||||
#~ msgid "History for command (Alt-F2) dialog"
|
||||
#~ msgstr "Historial de les ordres utilitzades en el diàleg de l'Alt+F2"
|
||||
|
||||
#~ msgid "History for the looking glass dialog"
|
||||
#~ msgstr "Historial del depurador del GNOME Shell"
|
||||
|
||||
#~ msgid "Always show the 'Log out' menu item in the user menu."
|
||||
#~ msgstr "Mostra sempre l'element de menú «Surt» al menú d'usuari."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "This key overrides the automatic hiding of the 'Log out' menu item in "
|
||||
#~ "single-user, single-session situations."
|
||||
#~ msgstr ""
|
||||
#~ "Aquesta clau sobreescriu l'ocultació automàtica de l'element de menú "
|
||||
#~ "«Surt» quan només hi ha un usuari i un sol tipus de sessió."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Whether to remember password for mounting encrypted or remote filesystems"
|
||||
#~ msgstr ""
|
||||
#~ "Si s'han de recordar les contrasenyes dels punts de muntatge encriptats o "
|
||||
#~ "els sistemes de fitxers remots"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The shell will request a password when an encrypted device or a remote "
|
||||
#~ "filesystem is mounted. If the password can be saved for future use a "
|
||||
#~ "'Remember Password' checkbox will be present. This key sets the default "
|
||||
#~ "state of the checkbox."
|
||||
#~ msgstr ""
|
||||
#~ "El GNOME Shell us demanarà la contrasenya quan es munti un dispositiu "
|
||||
#~ "encriptat o un sistema de fitxers remot. Si es pot desar la contrasenya "
|
||||
#~ "per utilitzar-lo en el futur, es mostrarà la casella de verificació "
|
||||
#~ "«Recorda la contrasenya». Aquesta clau estableix el valor per defecte "
|
||||
#~ "d'aquesta casella de verificació."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Whether the default Bluetooth adapter had set up devices associated to it"
|
||||
#~ msgstr ""
|
||||
#~ "Si l'adaptador de Bluetooth predeterminat té dispositius configurats "
|
||||
#~ "associats"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The shell will only show a Bluetooth menu item if a Bluetooth adapter is "
|
||||
#~ "powered, or if there were devices set up associated with the default "
|
||||
#~ "adapter. This will be reset if the default adapter is ever seen not to "
|
||||
#~ "have devices associated to it."
|
||||
#~ msgstr ""
|
||||
#~ "El Shell només mostrà una entrada de menú Bluetooth si un adaptador "
|
||||
#~ "Bluetooh està engegat, o si hi ha dispositius configurats associats a "
|
||||
#~ "l'adaptador predeterminat. Això es reiniciarà si l'adaptador "
|
||||
#~ "predeterminat té dispositius associats."
|
||||
|
||||
#~ msgid "Show the week date in the calendar"
|
||||
#~ msgstr "Mostra el número de la setmana al calendari"
|
||||
|
||||
#~ msgid "If true, display the ISO week date in the calendar."
|
||||
#~ msgstr "Si és «true» (cert) es mostra el número de la setmana al calendari."
|
||||
|
||||
#~ msgid "Keybinding to open the application menu"
|
||||
#~ msgstr "Vinculació per obrir el menú d'aplicació"
|
||||
|
||||
#~ msgid "Keybinding to open the application menu."
|
||||
#~ msgstr "La vinculació per obrir el menú d'aplicació."
|
||||
|
||||
#~ msgid "Keybinding to open the \"Show Applications\" view"
|
||||
#~ msgstr "Vinculació per obrir la vista «Mostra les aplicacions»"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Keybinding to open the \"Show Applications\" view of the Activities "
|
||||
#~ "Overview."
|
||||
#~ msgstr ""
|
||||
#~ "Vinculació per obrir la vista «Mostra les aplicacions» de les activitats "
|
||||
#~ "de la vista general."
|
||||
|
||||
#~ msgid "Keybinding to open the overview"
|
||||
#~ msgstr "Vinculació per obrir la vista general"
|
||||
|
||||
#~ msgid "Keybinding to open the Activities Overview."
|
||||
#~ msgstr "Vinculació per obrir la vista general d'activitats."
|
||||
|
||||
#~ msgid "Keybinding to toggle the visibility of the notification list"
|
||||
#~ msgstr ""
|
||||
#~ "La vinculació per commutar la visibilitat de la llista de notificacions"
|
||||
|
||||
#~ msgid "Keybinding to toggle the visibility of the notification list."
|
||||
#~ msgstr ""
|
||||
#~ "La vinculació per commutar la visibilitat de la llista de notificacions."
|
||||
|
||||
#~ msgid "Keybinding to focus the active notification"
|
||||
#~ msgstr "Vinculació per posar el focus a la notificació activa"
|
||||
|
||||
#~ msgid "Keybinding to focus the active notification."
|
||||
#~ msgstr "Vinculació per posar el focus a la notificació activa."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Keybinding that pauses and resumes all running tweens, for debugging "
|
||||
#~ "purposes"
|
||||
#~ msgstr ""
|
||||
#~ "Vinculació que fa una pausa i continua tots els «tweens» en execució, per "
|
||||
#~ "motius de depuració"
|
||||
|
||||
#~ msgid "Which keyboard to use"
|
||||
#~ msgstr "Quin tipus de teclat s'ha d'utilitzar"
|
||||
|
||||
#~ msgid "The type of keyboard to use."
|
||||
#~ msgstr "El tipus de teclat que s'utilitzarà."
|
||||
|
||||
#~ msgid "Limit switcher to current workspace."
|
||||
#~ msgstr "Limita el canviador a l'espai de treball actual."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "If true, only applications that have windows on the current workspace are "
|
||||
#~ "shown in the switcher. Otherwise, all applications are included."
|
||||
#~ msgstr ""
|
||||
#~ "Si és «true» (cert), només les aplicacions que tinguin finestres en "
|
||||
#~ "l'espai de treball actual es mostren en el canviador. En cas contrari es "
|
||||
#~ "mostren totes les aplicacions."
|
||||
|
||||
#~ msgid "The application icon mode."
|
||||
#~ msgstr "El mode d'icona de les aplicacions."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Configures how the windows are shown in the switcher. Valid possibilities "
|
||||
#~ "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
|
||||
#~ "only' (shows only the application icon) or 'both'."
|
||||
#~ msgstr ""
|
||||
#~ "Configureu com es mostren les finestres en l'intercanviador. Els valors "
|
||||
#~ "possibles són: «thumbnail-only» (mostra una miniatura de la finestra), "
|
||||
#~ "«app-icon-only» (mostra la icona de l'aplicació) o «both» (ambdues coses: "
|
||||
#~ "mostra la miniatura de la finestra i la icona de l'aplicació)."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "If true, only windows from the current workspace are shown in the "
|
||||
#~ "switcher. Otherwise, all windows are included."
|
||||
#~ msgstr ""
|
||||
#~ "Si és «true» (cert), només les finestres de l'espai de treball actual es "
|
||||
#~ "mostren en el canviador. En cas contrari, es mostren totes les finestres."
|
||||
|
||||
#~ msgid "Attach modal dialog to the parent window"
|
||||
#~ msgstr "Adjunta el diàleg modal a la finestra pare"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "This key overrides the key in org.gnome.mutter when running GNOME Shell."
|
||||
#~ msgstr ""
|
||||
#~ "Si s'executa el GNOME Shell, aquesta clau sobreescriu la clau «org.gnome."
|
||||
#~ "mutter»."
|
||||
|
||||
#~ msgid "Enable edge tiling when dropping windows on screen edges"
|
||||
#~ msgstr ""
|
||||
#~ "Habilita la tesselització a les vores en deixar anar les finestres a les "
|
||||
#~ "vores de la pantalla"
|
||||
|
||||
#~ msgid "Workspaces are managed dynamically"
|
||||
#~ msgstr "Els espais de treball es gestionen dinàmicament"
|
||||
|
||||
#~ msgid "Workspaces only on primary monitor"
|
||||
#~ msgstr "Només en el monitor principal hi ha espais de treball"
|
||||
|
||||
#~ msgid "Delay focus changes in mouse mode until the pointer stops moving"
|
||||
#~ msgstr ""
|
||||
#~ "Retarda el canvi del focus, quan s'està en mode ratolí, fins que el "
|
||||
#~ "punter no estigui quiet"
|
||||
|
||||
#~ msgid "Network Login"
|
||||
#~ msgstr "Inici de sessió de la xarxa"
|
||||
|
||||
#~ msgid "Use as Internet connection"
|
||||
#~ msgstr "Utilitza com a connexió a Internet"
|
||||
|
||||
#~ msgid "Evolution Calendar"
|
||||
#~ msgstr "Calendari de l'Evolution"
|
||||
|
||||
#~ msgid "%s is requesting access to your location."
|
||||
#~ msgstr "%s està demanant accés a la vostra ubicació."
|
||||
|
||||
|
319
po/cs.po
319
po/cs.po
@ -12,8 +12,8 @@ msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2016-08-19 21:11+0000\n"
|
||||
"PO-Revision-Date: 2016-08-19 23:17+0200\n"
|
||||
"POT-Creation-Date: 2016-11-17 23:06+0000\n"
|
||||
"PO-Revision-Date: 2016-11-18 00:42+0100\n"
|
||||
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
|
||||
"Language-Team: čeština <gnome-cs-list@gnome.org>\n"
|
||||
"Language: cs\n"
|
||||
@ -24,6 +24,30 @@ msgstr ""
|
||||
"X-Generator: Gtranslator 2.91.7\n"
|
||||
"X-Project-Style: gnome\n"
|
||||
|
||||
#: data/50-gnome-shell-system.xml:6
|
||||
msgid "System"
|
||||
msgstr "Systém"
|
||||
|
||||
#: data/50-gnome-shell-system.xml:9
|
||||
msgid "Show the notification list"
|
||||
msgstr "Zobrazit seznam upozornění"
|
||||
|
||||
#: data/50-gnome-shell-system.xml:12
|
||||
msgid "Focus the active notification"
|
||||
msgstr "Zaměřovat aktivní upozornění"
|
||||
|
||||
#: data/50-gnome-shell-system.xml:15
|
||||
msgid "Show the overview"
|
||||
msgstr "Zobrazit přehled"
|
||||
|
||||
#: data/50-gnome-shell-system.xml:18
|
||||
msgid "Show all applications"
|
||||
msgstr "Zobrazit všechny aplikace"
|
||||
|
||||
#: data/50-gnome-shell-system.xml:21
|
||||
msgid "Open the application menu"
|
||||
msgstr "Otevřít nabídku aplikací"
|
||||
|
||||
#: data/gnome-shell-extension-prefs.desktop.in.in:4
|
||||
msgid "GNOME Shell Extension Preferences"
|
||||
msgstr "Předvolby rozšíření GNOME Shell"
|
||||
@ -284,7 +308,8 @@ msgstr "Se změnou zaměření v režimu myši čekat na zastavení pohybu ukaza
|
||||
msgid "Network Login"
|
||||
msgstr "Přihlášení do sítě"
|
||||
|
||||
#: data/org.gnome.Shell.PortalHelper.desktop.in.in:8
|
||||
#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
|
||||
#: data/org.gnome.Shell.PortalHelper.desktop.in.in:9
|
||||
msgid "network-workgroup"
|
||||
msgstr "network-workgroup"
|
||||
|
||||
@ -298,23 +323,23 @@ msgstr ""
|
||||
msgid "GNOME Shell Extensions"
|
||||
msgstr "Rozšíření GNOME Shell"
|
||||
|
||||
#: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71
|
||||
#: js/gdm/authPrompt.js:149 js/ui/audioDeviceSelection.js:71
|
||||
#: js/ui/components/networkAgent.js:145 js/ui/components/polkitAgent.js:179
|
||||
#: js/ui/endSessionDialog.js:483 js/ui/extensionDownloader.js:195
|
||||
#: js/ui/shellMountOperation.js:399 js/ui/status/network.js:916
|
||||
#: js/ui/shellMountOperation.js:399 js/ui/status/network.js:928
|
||||
msgid "Cancel"
|
||||
msgstr "Zrušit"
|
||||
|
||||
#: js/gdm/authPrompt.js:169 js/gdm/authPrompt.js:216 js/gdm/authPrompt.js:448
|
||||
#: js/gdm/authPrompt.js:171 js/gdm/authPrompt.js:218 js/gdm/authPrompt.js:450
|
||||
msgid "Next"
|
||||
msgstr "Další"
|
||||
|
||||
#: js/gdm/authPrompt.js:212 js/ui/shellMountOperation.js:403
|
||||
#: js/gdm/authPrompt.js:214 js/ui/shellMountOperation.js:403
|
||||
#: js/ui/unlockDialog.js:59
|
||||
msgid "Unlock"
|
||||
msgstr "Odemknout"
|
||||
|
||||
#: js/gdm/authPrompt.js:214
|
||||
#: js/gdm/authPrompt.js:216
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Přihlásit se"
|
||||
@ -332,7 +357,7 @@ msgstr "Nejste na seznamu?"
|
||||
|
||||
#. Translators: this message is shown below the username entry field
|
||||
#. to clue the user in on how to login to the local network realm
|
||||
#: js/gdm/loginDialog.js:854
|
||||
#: js/gdm/loginDialog.js:859
|
||||
#, javascript-format
|
||||
msgid "(e.g., user or %s)"
|
||||
msgstr "(např. uživatel nebo %s)"
|
||||
@ -340,12 +365,12 @@ msgstr "(např. uživatel nebo %s)"
|
||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||
#. is not visible here since we only care about phase2 authentication
|
||||
#. (and don't even care of which one)
|
||||
#: js/gdm/loginDialog.js:859 js/ui/components/networkAgent.js:271
|
||||
#: js/gdm/loginDialog.js:864 js/ui/components/networkAgent.js:271
|
||||
#: js/ui/components/networkAgent.js:289
|
||||
msgid "Username: "
|
||||
msgstr "Uživatelské jméno: "
|
||||
|
||||
#: js/gdm/loginDialog.js:1196
|
||||
#: js/gdm/loginDialog.js:1201
|
||||
msgid "Login Window"
|
||||
msgstr "Přihlašovací okno"
|
||||
|
||||
@ -463,31 +488,35 @@ msgstr "Zamítnout přístup"
|
||||
msgid "Grant Access"
|
||||
msgstr "Schválit přístup"
|
||||
|
||||
#: js/ui/appDisplay.js:794
|
||||
#: js/ui/appDisplay.js:806
|
||||
msgid "Frequently used applications will appear here"
|
||||
msgstr "Zde se objeví často používané aplikace"
|
||||
|
||||
#: js/ui/appDisplay.js:914
|
||||
#: js/ui/appDisplay.js:926
|
||||
msgid "Frequent"
|
||||
msgstr "Časté"
|
||||
|
||||
#: js/ui/appDisplay.js:921
|
||||
#: js/ui/appDisplay.js:933
|
||||
msgid "All"
|
||||
msgstr "Všechny"
|
||||
|
||||
#: js/ui/appDisplay.js:1853
|
||||
#: js/ui/appDisplay.js:1891
|
||||
msgid "New Window"
|
||||
msgstr "Nové okno"
|
||||
|
||||
#: js/ui/appDisplay.js:1881 js/ui/dash.js:289
|
||||
#: js/ui/appDisplay.js:1905
|
||||
msgid "Launch using Dedicated Graphics Card"
|
||||
msgstr "Spustit pomocí vyhrazené grafické karty"
|
||||
|
||||
#: js/ui/appDisplay.js:1932 js/ui/dash.js:289
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Odstranit z oblíbených"
|
||||
|
||||
#: js/ui/appDisplay.js:1887
|
||||
#: js/ui/appDisplay.js:1938
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Přidat mezi oblíbené"
|
||||
|
||||
#: js/ui/appDisplay.js:1897
|
||||
#: js/ui/appDisplay.js:1948
|
||||
msgid "Show Details"
|
||||
msgstr "Zobrazit podrobnosti"
|
||||
|
||||
@ -645,7 +674,7 @@ msgstr "Externí svazek připojen"
|
||||
msgid "External drive disconnected"
|
||||
msgstr "Externí svazek odpojen"
|
||||
|
||||
#: js/ui/components/autorunManager.js:355
|
||||
#: js/ui/components/autorunManager.js:356
|
||||
#, javascript-format
|
||||
msgid "Open with %s"
|
||||
msgstr "Otevřít pomocí %s"
|
||||
@ -658,8 +687,8 @@ msgstr "Heslo:"
|
||||
msgid "Type again:"
|
||||
msgstr "Napište znovu:"
|
||||
|
||||
#: js/ui/components/networkAgent.js:140 js/ui/status/network.js:269
|
||||
#: js/ui/status/network.js:352 js/ui/status/network.js:919
|
||||
#: js/ui/components/networkAgent.js:140 js/ui/status/network.js:272
|
||||
#: js/ui/status/network.js:355 js/ui/status/network.js:931
|
||||
msgid "Connect"
|
||||
msgstr "Připojit"
|
||||
|
||||
@ -687,11 +716,11 @@ msgstr "Heslo soukromého klíče: "
|
||||
msgid "Service: "
|
||||
msgstr "Služba: "
|
||||
|
||||
#: js/ui/components/networkAgent.js:320 js/ui/components/networkAgent.js:658
|
||||
#: js/ui/components/networkAgent.js:320 js/ui/components/networkAgent.js:666
|
||||
msgid "Authentication required by wireless network"
|
||||
msgstr "K bezdrátové síti je vyžadováno ověření"
|
||||
|
||||
#: js/ui/components/networkAgent.js:321 js/ui/components/networkAgent.js:659
|
||||
#: js/ui/components/networkAgent.js:321 js/ui/components/networkAgent.js:667
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Passwords or encryption keys are required to access the wireless network "
|
||||
@ -700,7 +729,7 @@ msgstr ""
|
||||
"Pro přístup k bezdrátové síti „%s“ jsou vyžadována hesla nebo šifrovací "
|
||||
"klíče."
|
||||
|
||||
#: js/ui/components/networkAgent.js:325 js/ui/components/networkAgent.js:662
|
||||
#: js/ui/components/networkAgent.js:325 js/ui/components/networkAgent.js:670
|
||||
msgid "Wired 802.1X authentication"
|
||||
msgstr "Ověření připojení po drátu 802.1X"
|
||||
|
||||
@ -708,15 +737,15 @@ msgstr "Ověření připojení po drátu 802.1X"
|
||||
msgid "Network name: "
|
||||
msgstr "Název sítě: "
|
||||
|
||||
#: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:666
|
||||
#: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:674
|
||||
msgid "DSL authentication"
|
||||
msgstr "Ověření DSL"
|
||||
|
||||
#: js/ui/components/networkAgent.js:339 js/ui/components/networkAgent.js:672
|
||||
#: js/ui/components/networkAgent.js:339 js/ui/components/networkAgent.js:680
|
||||
msgid "PIN code required"
|
||||
msgstr "Požadován kód PIN"
|
||||
|
||||
#: js/ui/components/networkAgent.js:340 js/ui/components/networkAgent.js:673
|
||||
#: js/ui/components/networkAgent.js:340 js/ui/components/networkAgent.js:681
|
||||
msgid "PIN code is needed for the mobile broadband device"
|
||||
msgstr "Pro mobilní širokopásmové zařízení je vyžadován kód PIN"
|
||||
|
||||
@ -724,17 +753,17 @@ msgstr "Pro mobilní širokopásmové zařízení je vyžadován kód PIN"
|
||||
msgid "PIN: "
|
||||
msgstr "PIN: "
|
||||
|
||||
#: js/ui/components/networkAgent.js:348 js/ui/components/networkAgent.js:679
|
||||
#: js/ui/components/networkAgent.js:348 js/ui/components/networkAgent.js:687
|
||||
msgid "Mobile broadband network password"
|
||||
msgstr "Heslo k mobilní širokopásmové síti"
|
||||
|
||||
#: js/ui/components/networkAgent.js:349 js/ui/components/networkAgent.js:663
|
||||
#: js/ui/components/networkAgent.js:667 js/ui/components/networkAgent.js:680
|
||||
#: js/ui/components/networkAgent.js:349 js/ui/components/networkAgent.js:671
|
||||
#: js/ui/components/networkAgent.js:675 js/ui/components/networkAgent.js:688
|
||||
#, javascript-format
|
||||
msgid "A password is required to connect to “%s”."
|
||||
msgstr "Pro připojení k „%s“ je vyžadováno heslo."
|
||||
|
||||
#: js/ui/components/networkAgent.js:647 js/ui/status/network.js:1658
|
||||
#: js/ui/components/networkAgent.js:655 js/ui/status/network.js:1734
|
||||
msgid "Network Manager"
|
||||
msgstr "Network Manager"
|
||||
|
||||
@ -760,12 +789,12 @@ msgstr "Ověření bohužel nebylo úspěšné. Zkuste to prosím znovu."
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: js/ui/components/telepathyClient.js:760
|
||||
#: js/ui/components/telepathyClient.js:765
|
||||
#, javascript-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s je teď znám jako %s"
|
||||
|
||||
#: js/ui/ctrlAltTab.js:29 js/ui/viewSelector.js:155
|
||||
#: js/ui/ctrlAltTab.js:29 js/ui/viewSelector.js:178
|
||||
msgid "Windows"
|
||||
msgstr "Okna"
|
||||
|
||||
@ -1066,6 +1095,50 @@ msgstr "Přehled"
|
||||
msgid "Type to search…"
|
||||
msgstr "vyhledávejte psaním…"
|
||||
|
||||
#: js/ui/padOsd.js:37
|
||||
msgid "New shortcut…"
|
||||
msgstr "Nová klávesová zkratka…"
|
||||
|
||||
#: js/ui/padOsd.js:86
|
||||
msgid "Application defined"
|
||||
msgstr "Definováno aplikací"
|
||||
|
||||
#: js/ui/padOsd.js:87
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Zobrazit nápovědu na obrazovce"
|
||||
|
||||
#: js/ui/padOsd.js:88
|
||||
msgid "Switch monitor"
|
||||
msgstr "Přepnout monitor"
|
||||
|
||||
#: js/ui/padOsd.js:89
|
||||
msgid "Assign keystroke"
|
||||
msgstr "Přířadit klávesu"
|
||||
|
||||
#: js/ui/padOsd.js:143
|
||||
msgid "Done"
|
||||
msgstr "Hotovo"
|
||||
|
||||
#: js/ui/padOsd.js:597
|
||||
msgid "Edit…"
|
||||
msgstr "Upravit…"
|
||||
|
||||
#: js/ui/padOsd.js:610 js/ui/padOsd.js:665
|
||||
msgid "None"
|
||||
msgstr "Źádná"
|
||||
|
||||
#: js/ui/padOsd.js:648
|
||||
msgid "Press a button to configure"
|
||||
msgstr "Zmáčkněte tlačítko pro nastavení"
|
||||
|
||||
#: js/ui/padOsd.js:649
|
||||
msgid "Press Esc to exit"
|
||||
msgstr "Zmáčknutím Esc ukončíte"
|
||||
|
||||
#: js/ui/padOsd.js:652
|
||||
msgid "Press any key to exit"
|
||||
msgstr "Zmáčknutím klávesy ukončíte"
|
||||
|
||||
#: js/ui/panel.js:358
|
||||
msgid "Quit"
|
||||
msgstr "Ukončit"
|
||||
@ -1102,6 +1175,10 @@ msgstr "Zadejte příkaz:"
|
||||
msgid "Close"
|
||||
msgstr "Zavřít"
|
||||
|
||||
#: js/ui/runDialog.js:277
|
||||
msgid "Restart is not available on Wayland"
|
||||
msgstr "Restart není na Waylandu k dispozici"
|
||||
|
||||
#: js/ui/runDialog.js:282
|
||||
msgid "Restarting…"
|
||||
msgstr "Restartuje se…"
|
||||
@ -1132,7 +1209,7 @@ msgstr[2] "%d nových upozornění"
|
||||
msgid "Lock"
|
||||
msgstr "Uzamknout"
|
||||
|
||||
#: js/ui/screenShield.js:704
|
||||
#: js/ui/screenShield.js:707
|
||||
msgid "GNOME needs to lock the screen"
|
||||
msgstr "GNOME potřebuje uzamknout obrazovku"
|
||||
|
||||
@ -1143,11 +1220,11 @@ msgstr "GNOME potřebuje uzamknout obrazovku"
|
||||
#.
|
||||
#. XXX: another option is to kick the user into the gdm login
|
||||
#. screen, where we're not affected by grabs
|
||||
#: js/ui/screenShield.js:825 js/ui/screenShield.js:1291
|
||||
#: js/ui/screenShield.js:828 js/ui/screenShield.js:1295
|
||||
msgid "Unable to lock"
|
||||
msgstr "Nelze uzamknout obrazovku"
|
||||
|
||||
#: js/ui/screenShield.js:826 js/ui/screenShield.js:1292
|
||||
#: js/ui/screenShield.js:829 js/ui/screenShield.js:1296
|
||||
msgid "Lock was blocked by an application"
|
||||
msgstr "Zamknutí bylo zablokováno některou z aplikací"
|
||||
|
||||
@ -1231,7 +1308,7 @@ msgstr "Styl velkého textu"
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: js/ui/status/bluetooth.js:56 js/ui/status/network.js:624
|
||||
#: js/ui/status/bluetooth.js:56 js/ui/status/network.js:627
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Nastavení Bluetooth"
|
||||
|
||||
@ -1249,16 +1326,16 @@ msgid "Off"
|
||||
msgstr "Vypnuto"
|
||||
|
||||
#: js/ui/status/bluetooth.js:140
|
||||
msgid "Not In Use"
|
||||
msgstr "Nepoužívá se"
|
||||
msgid "On"
|
||||
msgstr "Zapnuto"
|
||||
|
||||
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:1279
|
||||
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:1291
|
||||
msgid "Turn On"
|
||||
msgstr "Zapnout"
|
||||
|
||||
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:178
|
||||
#: js/ui/status/network.js:353 js/ui/status/network.js:1279
|
||||
#: js/ui/status/network.js:1394 js/ui/status/rfkill.js:90
|
||||
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:181
|
||||
#: js/ui/status/network.js:356 js/ui/status/network.js:1291
|
||||
#: js/ui/status/network.js:1406 js/ui/status/rfkill.js:90
|
||||
#: js/ui/status/rfkill.js:117
|
||||
msgid "Turn Off"
|
||||
msgstr "Vypnout"
|
||||
@ -1307,18 +1384,18 @@ msgstr ""
|
||||
"Přístup ke službám pro určování polohy lze kdykoliv změnit v nastavení "
|
||||
"soukromí."
|
||||
|
||||
#: js/ui/status/network.js:101
|
||||
#: js/ui/status/network.js:104
|
||||
msgid "<unknown>"
|
||||
msgstr "<neznámé>"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:451 js/ui/status/network.js:1308
|
||||
#: js/ui/status/network.js:454 js/ui/status/network.js:1320
|
||||
#, javascript-format
|
||||
msgid "%s Off"
|
||||
msgstr "%s je vypnuto"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:454
|
||||
#: js/ui/status/network.js:457
|
||||
#, javascript-format
|
||||
msgid "%s Connected"
|
||||
msgstr "%s je připojeno"
|
||||
@ -1326,168 +1403,193 @@ msgstr "%s je připojeno"
|
||||
#. Translators: this is for network devices that are physically present but are not
|
||||
#. under NetworkManager's control (and thus cannot be used in the menu);
|
||||
#. %s is a network identifier
|
||||
#: js/ui/status/network.js:459
|
||||
#: js/ui/status/network.js:462
|
||||
#, javascript-format
|
||||
msgid "%s Unmanaged"
|
||||
msgstr "%s není spravováno"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:462
|
||||
#: js/ui/status/network.js:465
|
||||
#, javascript-format
|
||||
msgid "%s Disconnecting"
|
||||
msgstr "%s se odpojuje"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:469 js/ui/status/network.js:1300
|
||||
#: js/ui/status/network.js:472 js/ui/status/network.js:1312
|
||||
#, javascript-format
|
||||
msgid "%s Connecting"
|
||||
msgstr "%s se připojuje"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
|
||||
#: js/ui/status/network.js:472
|
||||
#: js/ui/status/network.js:475
|
||||
#, javascript-format
|
||||
msgid "%s Requires Authentication"
|
||||
msgstr "%s požaduje ověření"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing; %s is a network identifier
|
||||
#: js/ui/status/network.js:480
|
||||
#: js/ui/status/network.js:483
|
||||
#, javascript-format
|
||||
msgid "Firmware Missing For %s"
|
||||
msgstr "Schází firmware pro %s"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage; %s is a network identifier
|
||||
#: js/ui/status/network.js:484
|
||||
#: js/ui/status/network.js:487
|
||||
#, javascript-format
|
||||
msgid "%s Unavailable"
|
||||
msgstr "%s je nedostupné"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:487
|
||||
#: js/ui/status/network.js:490
|
||||
#, javascript-format
|
||||
msgid "%s Connection Failed"
|
||||
msgstr "%s selhalo připojení"
|
||||
|
||||
#: js/ui/status/network.js:503
|
||||
#: js/ui/status/network.js:506
|
||||
msgid "Wired Settings"
|
||||
msgstr "Nastavení připojení po drátu"
|
||||
|
||||
#: js/ui/status/network.js:545
|
||||
#: js/ui/status/network.js:548
|
||||
msgid "Mobile Broadband Settings"
|
||||
msgstr "Nastavení mobilní širokopásmové sítě"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:588 js/ui/status/network.js:1305
|
||||
#: js/ui/status/network.js:591 js/ui/status/network.js:1317
|
||||
#, javascript-format
|
||||
msgid "%s Hardware Disabled"
|
||||
msgstr "%s je hardwarově zakázáno"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated
|
||||
#. because it's disabled by rfkill (airplane mode); %s is a network identifier
|
||||
#: js/ui/status/network.js:592
|
||||
#: js/ui/status/network.js:595
|
||||
#, javascript-format
|
||||
msgid "%s Disabled"
|
||||
msgstr "%s je zakázáno"
|
||||
|
||||
#: js/ui/status/network.js:632
|
||||
#: js/ui/status/network.js:635
|
||||
msgid "Connect to Internet"
|
||||
msgstr "Připojit k Internetu"
|
||||
|
||||
#: js/ui/status/network.js:813
|
||||
#: js/ui/status/network.js:825
|
||||
msgid "Airplane Mode is On"
|
||||
msgstr "Režim „letadlo“ je zapnutý"
|
||||
|
||||
#: js/ui/status/network.js:814
|
||||
#: js/ui/status/network.js:826
|
||||
msgid "Wi-Fi is disabled when airplane mode is on."
|
||||
msgstr "Když je zapnutý režim „letadlo“, je WiFi zakázána."
|
||||
|
||||
#: js/ui/status/network.js:815
|
||||
#: js/ui/status/network.js:827
|
||||
msgid "Turn Off Airplane Mode"
|
||||
msgstr "Vypnout režim „letadlo“"
|
||||
|
||||
#: js/ui/status/network.js:824
|
||||
#: js/ui/status/network.js:836
|
||||
msgid "Wi-Fi is Off"
|
||||
msgstr "WiFi je vypnutá"
|
||||
|
||||
#: js/ui/status/network.js:825
|
||||
#: js/ui/status/network.js:837
|
||||
msgid "Wi-Fi needs to be turned on in order to connect to a network."
|
||||
msgstr "Abyste se připojili k síti, je zapotřebí zapnout WiFi."
|
||||
|
||||
#: js/ui/status/network.js:826
|
||||
#: js/ui/status/network.js:838
|
||||
msgid "Turn On Wi-Fi"
|
||||
msgstr "Zapnout WiFi"
|
||||
|
||||
#: js/ui/status/network.js:851
|
||||
#: js/ui/status/network.js:863
|
||||
msgid "Wi-Fi Networks"
|
||||
msgstr "Sítě WiFi"
|
||||
|
||||
#: js/ui/status/network.js:853
|
||||
#: js/ui/status/network.js:865
|
||||
msgid "Select a network"
|
||||
msgstr "Vyberte síť"
|
||||
|
||||
#: js/ui/status/network.js:883
|
||||
#: js/ui/status/network.js:895
|
||||
msgid "No Networks"
|
||||
msgstr "Žádné sítě"
|
||||
|
||||
#: js/ui/status/network.js:904 js/ui/status/rfkill.js:115
|
||||
#: js/ui/status/network.js:916 js/ui/status/rfkill.js:115
|
||||
msgid "Use hardware switch to turn off"
|
||||
msgstr "K vypnutí použijte fyzický vypínač"
|
||||
|
||||
#: js/ui/status/network.js:1171
|
||||
#: js/ui/status/network.js:1183
|
||||
msgid "Select Network"
|
||||
msgstr "Vybrat síť"
|
||||
|
||||
#: js/ui/status/network.js:1177
|
||||
#: js/ui/status/network.js:1189
|
||||
msgid "Wi-Fi Settings"
|
||||
msgstr "Nastavení WiFi"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:1296
|
||||
#: js/ui/status/network.js:1308
|
||||
#, javascript-format
|
||||
msgid "%s Hotspot Active"
|
||||
msgstr "%s je aktivní přístupový bod"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:1311
|
||||
#: js/ui/status/network.js:1323
|
||||
#, javascript-format
|
||||
msgid "%s Not Connected"
|
||||
msgstr "%s není připojeno"
|
||||
|
||||
#: js/ui/status/network.js:1411
|
||||
#: js/ui/status/network.js:1423
|
||||
msgid "connecting..."
|
||||
msgstr "připojuje se…"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: js/ui/status/network.js:1414
|
||||
#: js/ui/status/network.js:1426
|
||||
msgid "authentication required"
|
||||
msgstr "je požadováno ověření"
|
||||
|
||||
#: js/ui/status/network.js:1416
|
||||
#: js/ui/status/network.js:1428
|
||||
msgid "connection failed"
|
||||
msgstr "připojení selhalo"
|
||||
|
||||
#: js/ui/status/network.js:1482 js/ui/status/rfkill.js:93
|
||||
#: js/ui/status/network.js:1494 js/ui/status/network.js:1587
|
||||
#: js/ui/status/rfkill.js:93
|
||||
msgid "Network Settings"
|
||||
msgstr "Nastavení sítě"
|
||||
|
||||
#: js/ui/status/network.js:1484
|
||||
#: js/ui/status/network.js:1496
|
||||
msgid "VPN Settings"
|
||||
msgstr "Nastavení VPN"
|
||||
|
||||
#: js/ui/status/network.js:1503
|
||||
#: js/ui/status/network.js:1515
|
||||
msgid "VPN"
|
||||
msgstr "VPN"
|
||||
|
||||
#: js/ui/status/network.js:1513
|
||||
#: js/ui/status/network.js:1525
|
||||
msgid "VPN Off"
|
||||
msgstr "VPN je vypnuta"
|
||||
|
||||
#: js/ui/status/network.js:1697
|
||||
#: js/ui/status/network.js:1618
|
||||
#, javascript-format
|
||||
msgid "%s Wired Connection"
|
||||
msgid_plural "%s Wired Connections"
|
||||
msgstr[0] "%s drátové připojení"
|
||||
msgstr[1] "%s drátová připojení"
|
||||
msgstr[2] "%s drátových připojení"
|
||||
|
||||
#: js/ui/status/network.js:1622
|
||||
#, javascript-format
|
||||
msgid "%s Wi-Fi Connection"
|
||||
msgid_plural "%s Wi-Fi Connections"
|
||||
msgstr[0] "%s bezdrátové připojení"
|
||||
msgstr[1] "%s bezdrátová připojení"
|
||||
msgstr[2] "%s bezdrátových připojení"
|
||||
|
||||
#: js/ui/status/network.js:1626
|
||||
#, javascript-format
|
||||
msgid "%s Modem Connection"
|
||||
msgid_plural "%s Modem Connections"
|
||||
msgstr[0] "%s modemové připojení"
|
||||
msgstr[1] "%s modemová připojení"
|
||||
msgstr[2] "%s modemových připojení"
|
||||
|
||||
#: js/ui/status/network.js:1773
|
||||
msgid "Connection failed"
|
||||
msgstr "Připojení selhalo"
|
||||
|
||||
#: js/ui/status/network.js:1698
|
||||
#: js/ui/status/network.js:1774
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Aktivace síťového připojení selhala"
|
||||
|
||||
@ -1569,11 +1671,11 @@ msgstr "Přihlásit se jako jiný uživatel"
|
||||
msgid "Unlock Window"
|
||||
msgstr "Odemykací okno"
|
||||
|
||||
#: js/ui/viewSelector.js:159
|
||||
#: js/ui/viewSelector.js:182
|
||||
msgid "Applications"
|
||||
msgstr "Aplikace"
|
||||
|
||||
#: js/ui/viewSelector.js:163
|
||||
#: js/ui/viewSelector.js:186
|
||||
msgid "Search"
|
||||
msgstr "Hledat"
|
||||
|
||||
@ -1582,22 +1684,22 @@ msgstr "Hledat"
|
||||
msgid "“%s” is ready"
|
||||
msgstr "Připraveno „%s“"
|
||||
|
||||
#: js/ui/windowManager.js:63
|
||||
#: js/ui/windowManager.js:64
|
||||
msgid "Do you want to keep these display settings?"
|
||||
msgstr "Chcete zachovat nastavení displeje?"
|
||||
|
||||
#. Translators: this and the following message should be limited in lenght,
|
||||
#. to avoid ellipsizing the labels.
|
||||
#.
|
||||
#: js/ui/windowManager.js:82
|
||||
#: js/ui/windowManager.js:83
|
||||
msgid "Revert Settings"
|
||||
msgstr "Obnovit původní"
|
||||
|
||||
#: js/ui/windowManager.js:85
|
||||
#: js/ui/windowManager.js:86
|
||||
msgid "Keep Changes"
|
||||
msgstr "Zachovat"
|
||||
|
||||
#: js/ui/windowManager.js:103
|
||||
#: js/ui/windowManager.js:104
|
||||
#, javascript-format
|
||||
msgid "Settings changes will revert in %d second"
|
||||
msgid_plural "Settings changes will revert in %d seconds"
|
||||
@ -1607,7 +1709,7 @@ msgstr[2] "Nastavení se obnoví na původní za %d sekund"
|
||||
|
||||
#. Translators: This represents the size of a window. The first number is
|
||||
#. * the width of the window and the second is the height.
|
||||
#: js/ui/windowManager.js:658
|
||||
#: js/ui/windowManager.js:659
|
||||
#, javascript-format
|
||||
msgid "%d x %d"
|
||||
msgstr "%d × %d"
|
||||
@ -1680,7 +1782,8 @@ msgstr "Přesunout o monitor doprava"
|
||||
msgid "Evolution Calendar"
|
||||
msgstr "Kalendář Evolution"
|
||||
|
||||
#: src/calendar-server/evolution-calendar.desktop.in:5
|
||||
#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
|
||||
#: src/calendar-server/evolution-calendar.desktop.in:6
|
||||
msgid "evolution"
|
||||
msgstr "evolution"
|
||||
|
||||
@ -1708,19 +1811,19 @@ msgstr[2] "%u vstupů"
|
||||
msgid "System Sounds"
|
||||
msgstr "Systémové zvuky"
|
||||
|
||||
#: src/main.c:381
|
||||
#: src/main.c:380
|
||||
msgid "Print version"
|
||||
msgstr "Vypsat verzi"
|
||||
|
||||
#: src/main.c:387
|
||||
#: src/main.c:386
|
||||
msgid "Mode used by GDM for login screen"
|
||||
msgstr "Režim použitý GDM pro přihlašovací obrazovku"
|
||||
|
||||
#: src/main.c:393
|
||||
#: src/main.c:392
|
||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||
msgstr "Použít pro přihlašovací obrazovku zadaný režim, např. „gdm“."
|
||||
|
||||
#: src/main.c:399
|
||||
#: src/main.c:398
|
||||
msgid "List possible modes"
|
||||
msgstr "Vypsat možné režimy"
|
||||
|
||||
@ -1745,33 +1848,3 @@ msgstr "Heslo nemůže být prázdné."
|
||||
#: src/shell-polkit-authentication-agent.c:353
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "Dialogové okno ověření bylo uživatelem zrušeno"
|
||||
|
||||
#~ msgid "System"
|
||||
#~ msgstr "Systém"
|
||||
|
||||
#~ msgid "Show the notification list"
|
||||
#~ msgstr "Zobrazit seznam upozornění"
|
||||
|
||||
#~ msgid "Focus the active notification"
|
||||
#~ msgstr "Zaměřovat aktivní upozornění"
|
||||
|
||||
#~ msgid "Show the overview"
|
||||
#~ msgstr "Zobrazit přehled"
|
||||
|
||||
#~ msgid "Show all applications"
|
||||
#~ msgstr "Zobrazit všechny aplikace"
|
||||
|
||||
#~ msgid "Open the application menu"
|
||||
#~ msgstr "Otevřít nabídku aplikací"
|
||||
|
||||
#~ msgid "Show the week date in the calendar"
|
||||
#~ msgstr "Zobrazovat v kalendáři čísla týdnů"
|
||||
|
||||
#~ msgid "If true, display the ISO week date in the calendar."
|
||||
#~ msgstr "Je-li zapnuto, zobrazovat v kalendáři čísla týdnů dle ISO."
|
||||
|
||||
#~ msgid "Use as Internet connection"
|
||||
#~ msgstr "Použít jako připojení k Internetu"
|
||||
|
||||
#~ msgid "%s is requesting access to your location."
|
||||
#~ msgstr "Aplikace %s žádá o přístup k informacím o vaší poloze."
|
||||
|
847
po/en_GB.po
847
po/en_GB.po
File diff suppressed because it is too large
Load Diff
257
po/hu.po
257
po/hu.po
@ -11,16 +11,40 @@ msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2016-08-19 21:36+0000\n"
|
||||
"PO-Revision-Date: 2016-08-19 23:59+0200\n"
|
||||
"Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
|
||||
"POT-Creation-Date: 2016-11-04 15:16+0000\n"
|
||||
"PO-Revision-Date: 2016-11-05 11:21+0100\n"
|
||||
"Last-Translator: Meskó Balázs <meskobalazs@gmail.com>\n"
|
||||
"Language-Team: Hungarian <openscope at googlegroups dot com>\n"
|
||||
"Language: hu\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Lokalize 1.2\n"
|
||||
"X-Generator: Poedit 1.8.9\n"
|
||||
|
||||
#: data/50-gnome-shell-system.xml:6
|
||||
msgid "System"
|
||||
msgstr "Rendszer"
|
||||
|
||||
#: data/50-gnome-shell-system.xml:9
|
||||
msgid "Show the notification list"
|
||||
msgstr "Az értesítési lista megjelenítése"
|
||||
|
||||
#: data/50-gnome-shell-system.xml:12
|
||||
msgid "Focus the active notification"
|
||||
msgstr "Az aktív értesítés fókuszba"
|
||||
|
||||
#: data/50-gnome-shell-system.xml:15
|
||||
msgid "Show the overview"
|
||||
msgstr "Áttekintés megjelenítése"
|
||||
|
||||
#: data/50-gnome-shell-system.xml:18
|
||||
msgid "Show all applications"
|
||||
msgstr "Minden alkalmazás megjelenítése"
|
||||
|
||||
#: data/50-gnome-shell-system.xml:21
|
||||
msgid "Open the application menu"
|
||||
msgstr "Az alkalmazásmenü megnyitása"
|
||||
|
||||
#: data/gnome-shell-extension-prefs.desktop.in.in:4
|
||||
msgid "GNOME Shell Extension Preferences"
|
||||
@ -291,7 +315,6 @@ msgstr "Hálózati bejelentkezés"
|
||||
|
||||
#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
|
||||
#: data/org.gnome.Shell.PortalHelper.desktop.in.in:9
|
||||
#| msgid "Network error"
|
||||
msgid "network-workgroup"
|
||||
msgstr "network-workgroup"
|
||||
|
||||
@ -304,23 +327,23 @@ msgstr "Hiba történt a(z) %s beállításablakának betöltésekor:"
|
||||
msgid "GNOME Shell Extensions"
|
||||
msgstr "GNOME Shell kiterjesztések"
|
||||
|
||||
#: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71
|
||||
#: js/gdm/authPrompt.js:149 js/ui/audioDeviceSelection.js:71
|
||||
#: js/ui/components/networkAgent.js:145 js/ui/components/polkitAgent.js:179
|
||||
#: js/ui/endSessionDialog.js:483 js/ui/extensionDownloader.js:195
|
||||
#: js/ui/shellMountOperation.js:399 js/ui/status/network.js:916
|
||||
#: js/ui/shellMountOperation.js:399 js/ui/status/network.js:926
|
||||
msgid "Cancel"
|
||||
msgstr "Mégse"
|
||||
|
||||
#: js/gdm/authPrompt.js:169 js/gdm/authPrompt.js:216 js/gdm/authPrompt.js:448
|
||||
#: js/gdm/authPrompt.js:171 js/gdm/authPrompt.js:218 js/gdm/authPrompt.js:450
|
||||
msgid "Next"
|
||||
msgstr "Következő"
|
||||
|
||||
#: js/gdm/authPrompt.js:212 js/ui/shellMountOperation.js:403
|
||||
#: js/gdm/authPrompt.js:214 js/ui/shellMountOperation.js:403
|
||||
#: js/ui/unlockDialog.js:59
|
||||
msgid "Unlock"
|
||||
msgstr "Feloldás"
|
||||
|
||||
#: js/gdm/authPrompt.js:214
|
||||
#: js/gdm/authPrompt.js:216
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Bejelentkezés"
|
||||
@ -338,7 +361,7 @@ msgstr "Nincs a listán?"
|
||||
|
||||
#. Translators: this message is shown below the username entry field
|
||||
#. to clue the user in on how to login to the local network realm
|
||||
#: js/gdm/loginDialog.js:854
|
||||
#: js/gdm/loginDialog.js:859
|
||||
#, javascript-format
|
||||
msgid "(e.g., user or %s)"
|
||||
msgstr "(például: felhasználó vagy %s)"
|
||||
@ -346,12 +369,12 @@ msgstr "(például: felhasználó vagy %s)"
|
||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||
#. is not visible here since we only care about phase2 authentication
|
||||
#. (and don't even care of which one)
|
||||
#: js/gdm/loginDialog.js:859 js/ui/components/networkAgent.js:271
|
||||
#: js/gdm/loginDialog.js:864 js/ui/components/networkAgent.js:271
|
||||
#: js/ui/components/networkAgent.js:289
|
||||
msgid "Username: "
|
||||
msgstr "Felhasználónév: "
|
||||
|
||||
#: js/gdm/loginDialog.js:1196
|
||||
#: js/gdm/loginDialog.js:1201
|
||||
msgid "Login Window"
|
||||
msgstr "Bejelentkezési ablak"
|
||||
|
||||
@ -469,31 +492,35 @@ msgstr "Hozzáférés tiltása"
|
||||
msgid "Grant Access"
|
||||
msgstr "Hozzáférés megadása"
|
||||
|
||||
#: js/ui/appDisplay.js:794
|
||||
#: js/ui/appDisplay.js:806
|
||||
msgid "Frequently used applications will appear here"
|
||||
msgstr "Itt jelennek meg a gyakran használt alkalmazások"
|
||||
|
||||
#: js/ui/appDisplay.js:914
|
||||
#: js/ui/appDisplay.js:926
|
||||
msgid "Frequent"
|
||||
msgstr "Gyakori"
|
||||
|
||||
#: js/ui/appDisplay.js:921
|
||||
#: js/ui/appDisplay.js:933
|
||||
msgid "All"
|
||||
msgstr "Összes"
|
||||
|
||||
#: js/ui/appDisplay.js:1853
|
||||
#: js/ui/appDisplay.js:1891
|
||||
msgid "New Window"
|
||||
msgstr "Új ablak"
|
||||
|
||||
#: js/ui/appDisplay.js:1881 js/ui/dash.js:289
|
||||
#: js/ui/appDisplay.js:1905
|
||||
msgid "Launch using Dedicated Graphics Card"
|
||||
msgstr "Futtatás a dedikált videokártyával"
|
||||
|
||||
#: js/ui/appDisplay.js:1932 js/ui/dash.js:289
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Eltávolítás a Kedvencek közül"
|
||||
|
||||
#: js/ui/appDisplay.js:1887
|
||||
#: js/ui/appDisplay.js:1938
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Hozzáadás a Kedvencekhez"
|
||||
|
||||
#: js/ui/appDisplay.js:1897
|
||||
#: js/ui/appDisplay.js:1948
|
||||
msgid "Show Details"
|
||||
msgstr "Részletek megjelenítése"
|
||||
|
||||
@ -651,7 +678,7 @@ msgstr "Külső meghajtó csatlakoztatva"
|
||||
msgid "External drive disconnected"
|
||||
msgstr "Külső meghajtó leválasztva"
|
||||
|
||||
#: js/ui/components/autorunManager.js:355
|
||||
#: js/ui/components/autorunManager.js:356
|
||||
#, javascript-format
|
||||
msgid "Open with %s"
|
||||
msgstr "Megnyitás ezzel: %s"
|
||||
@ -664,8 +691,8 @@ msgstr "Jelszó:"
|
||||
msgid "Type again:"
|
||||
msgstr "Írja be újra:"
|
||||
|
||||
#: js/ui/components/networkAgent.js:140 js/ui/status/network.js:269
|
||||
#: js/ui/status/network.js:352 js/ui/status/network.js:919
|
||||
#: js/ui/components/networkAgent.js:140 js/ui/status/network.js:270
|
||||
#: js/ui/status/network.js:353 js/ui/status/network.js:929
|
||||
msgid "Connect"
|
||||
msgstr "Kapcsolódás"
|
||||
|
||||
@ -740,7 +767,7 @@ msgstr "Mobil széles sávú hálózat jelszava"
|
||||
msgid "A password is required to connect to “%s”."
|
||||
msgstr "Jelszó szükséges a kapcsolódáshoz a következőhöz: „%s”."
|
||||
|
||||
#: js/ui/components/networkAgent.js:647 js/ui/status/network.js:1658
|
||||
#: js/ui/components/networkAgent.js:647 js/ui/status/network.js:1670
|
||||
msgid "Network Manager"
|
||||
msgstr "Hálózatkezelő"
|
||||
|
||||
@ -766,7 +793,7 @@ msgstr "A hitelesítés sikertelen. Próbálja újra."
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: js/ui/components/telepathyClient.js:760
|
||||
#: js/ui/components/telepathyClient.js:765
|
||||
#, javascript-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s mostantól %s néven ismert"
|
||||
@ -1066,6 +1093,50 @@ msgstr "Áttekintés"
|
||||
msgid "Type to search…"
|
||||
msgstr "Gépeljen a kereséshez…"
|
||||
|
||||
#: js/ui/padOsd.js:37
|
||||
msgid "New shortcut…"
|
||||
msgstr "Új gyorsbillentyű…"
|
||||
|
||||
#: js/ui/padOsd.js:86
|
||||
msgid "Application defined"
|
||||
msgstr "Alkalmazás által meghatározott"
|
||||
|
||||
#: js/ui/padOsd.js:87
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Súgó megjelenítése"
|
||||
|
||||
#: js/ui/padOsd.js:88
|
||||
msgid "Switch monitor"
|
||||
msgstr "Kijelzőváltás"
|
||||
|
||||
#: js/ui/padOsd.js:89
|
||||
msgid "Assign keystroke"
|
||||
msgstr "Billentyűleütés hozzárendelése"
|
||||
|
||||
#: js/ui/padOsd.js:143
|
||||
msgid "Done"
|
||||
msgstr "Kész"
|
||||
|
||||
#: js/ui/padOsd.js:597
|
||||
msgid "Edit…"
|
||||
msgstr "Szerkesztés…"
|
||||
|
||||
#: js/ui/padOsd.js:610 js/ui/padOsd.js:665
|
||||
msgid "None"
|
||||
msgstr "Nincs"
|
||||
|
||||
#: js/ui/padOsd.js:648
|
||||
msgid "Press a button to configure"
|
||||
msgstr "Válasszon egy beállítandó gombot"
|
||||
|
||||
#: js/ui/padOsd.js:649
|
||||
msgid "Press Esc to exit"
|
||||
msgstr "Nyomja meg az Esc gombot a kilépéshez"
|
||||
|
||||
#: js/ui/padOsd.js:652
|
||||
msgid "Press any key to exit"
|
||||
msgstr "Nyomjon meg egy gombot a kilépéshez"
|
||||
|
||||
#: js/ui/panel.js:358
|
||||
msgid "Quit"
|
||||
msgstr "Kilépés"
|
||||
@ -1130,7 +1201,7 @@ msgstr[1] "%d új értesítés"
|
||||
msgid "Lock"
|
||||
msgstr "Zárolás"
|
||||
|
||||
#: js/ui/screenShield.js:704
|
||||
#: js/ui/screenShield.js:707
|
||||
msgid "GNOME needs to lock the screen"
|
||||
msgstr "A GNOME-nak zárolnia kell a képernyőt"
|
||||
|
||||
@ -1141,11 +1212,11 @@ msgstr "A GNOME-nak zárolnia kell a képernyőt"
|
||||
#.
|
||||
#. XXX: another option is to kick the user into the gdm login
|
||||
#. screen, where we're not affected by grabs
|
||||
#: js/ui/screenShield.js:825 js/ui/screenShield.js:1291
|
||||
#: js/ui/screenShield.js:828 js/ui/screenShield.js:1295
|
||||
msgid "Unable to lock"
|
||||
msgstr "Nem lehet zárolni"
|
||||
|
||||
#: js/ui/screenShield.js:826 js/ui/screenShield.js:1292
|
||||
#: js/ui/screenShield.js:829 js/ui/screenShield.js:1296
|
||||
msgid "Lock was blocked by an application"
|
||||
msgstr "A zárolást egy alkalmazás blokkolta"
|
||||
|
||||
@ -1229,7 +1300,7 @@ msgstr "Nagy szöveg"
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: js/ui/status/bluetooth.js:56 js/ui/status/network.js:624
|
||||
#: js/ui/status/bluetooth.js:56 js/ui/status/network.js:625
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Bluetooth-beállítások"
|
||||
|
||||
@ -1246,16 +1317,16 @@ msgid "Off"
|
||||
msgstr "Ki"
|
||||
|
||||
#: js/ui/status/bluetooth.js:140
|
||||
msgid "Not In Use"
|
||||
msgstr "Nincs használatban"
|
||||
msgid "On"
|
||||
msgstr "Be"
|
||||
|
||||
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:1279
|
||||
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:1289
|
||||
msgid "Turn On"
|
||||
msgstr "Bekapcsolás"
|
||||
|
||||
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:178
|
||||
#: js/ui/status/network.js:353 js/ui/status/network.js:1279
|
||||
#: js/ui/status/network.js:1394 js/ui/status/rfkill.js:90
|
||||
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:179
|
||||
#: js/ui/status/network.js:354 js/ui/status/network.js:1289
|
||||
#: js/ui/status/network.js:1404 js/ui/status/rfkill.js:90
|
||||
#: js/ui/status/rfkill.js:117
|
||||
msgid "Turn Off"
|
||||
msgstr "Kikapcsolás"
|
||||
@ -1303,18 +1374,18 @@ msgid "Location access can be changed at any time from the privacy settings."
|
||||
msgstr ""
|
||||
"A hely hozzáférése bármikor megváltoztatható az adatvédelmi beállításokban."
|
||||
|
||||
#: js/ui/status/network.js:101
|
||||
#: js/ui/status/network.js:102
|
||||
msgid "<unknown>"
|
||||
msgstr "<ismeretlen>"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:451 js/ui/status/network.js:1308
|
||||
#: js/ui/status/network.js:452 js/ui/status/network.js:1318
|
||||
#, javascript-format
|
||||
msgid "%s Off"
|
||||
msgstr "%s ki"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:454
|
||||
#: js/ui/status/network.js:455
|
||||
#, javascript-format
|
||||
msgid "%s Connected"
|
||||
msgstr "%s kapcsolódva"
|
||||
@ -1322,168 +1393,168 @@ msgstr "%s kapcsolódva"
|
||||
#. Translators: this is for network devices that are physically present but are not
|
||||
#. under NetworkManager's control (and thus cannot be used in the menu);
|
||||
#. %s is a network identifier
|
||||
#: js/ui/status/network.js:459
|
||||
#: js/ui/status/network.js:460
|
||||
#, javascript-format
|
||||
msgid "%s Unmanaged"
|
||||
msgstr "%s felügyeletlen"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:462
|
||||
#: js/ui/status/network.js:463
|
||||
#, javascript-format
|
||||
msgid "%s Disconnecting"
|
||||
msgstr "%s leválasztása"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:469 js/ui/status/network.js:1300
|
||||
#: js/ui/status/network.js:470 js/ui/status/network.js:1310
|
||||
#, javascript-format
|
||||
msgid "%s Connecting"
|
||||
msgstr "%s kapcsolódás"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
|
||||
#: js/ui/status/network.js:472
|
||||
#: js/ui/status/network.js:473
|
||||
#, javascript-format
|
||||
msgid "%s Requires Authentication"
|
||||
msgstr "%s hitelesítést igényel"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing; %s is a network identifier
|
||||
#: js/ui/status/network.js:480
|
||||
#: js/ui/status/network.js:481
|
||||
#, javascript-format
|
||||
msgid "Firmware Missing For %s"
|
||||
msgstr "Hiányzó firmware ennél: %s"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage; %s is a network identifier
|
||||
#: js/ui/status/network.js:484
|
||||
#: js/ui/status/network.js:485
|
||||
#, javascript-format
|
||||
msgid "%s Unavailable"
|
||||
msgstr "%s nem érhető el"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:487
|
||||
#: js/ui/status/network.js:488
|
||||
#, javascript-format
|
||||
msgid "%s Connection Failed"
|
||||
msgstr "%s kapcsolódás meghiúsult"
|
||||
|
||||
#: js/ui/status/network.js:503
|
||||
#: js/ui/status/network.js:504
|
||||
msgid "Wired Settings"
|
||||
msgstr "Vezetékes beállítások"
|
||||
|
||||
#: js/ui/status/network.js:545
|
||||
#: js/ui/status/network.js:546
|
||||
msgid "Mobile Broadband Settings"
|
||||
msgstr "Mobil széles sáv beállításai"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:588 js/ui/status/network.js:1305
|
||||
#: js/ui/status/network.js:589 js/ui/status/network.js:1315
|
||||
#, javascript-format
|
||||
msgid "%s Hardware Disabled"
|
||||
msgstr "%s hardver letiltva"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated
|
||||
#. because it's disabled by rfkill (airplane mode); %s is a network identifier
|
||||
#: js/ui/status/network.js:592
|
||||
#: js/ui/status/network.js:593
|
||||
#, javascript-format
|
||||
msgid "%s Disabled"
|
||||
msgstr "%s letiltva"
|
||||
|
||||
#: js/ui/status/network.js:632
|
||||
#: js/ui/status/network.js:633
|
||||
msgid "Connect to Internet"
|
||||
msgstr "Kapcsolódás az internetre"
|
||||
|
||||
#: js/ui/status/network.js:813
|
||||
#: js/ui/status/network.js:823
|
||||
msgid "Airplane Mode is On"
|
||||
msgstr "Repülőgép üzemmód be"
|
||||
|
||||
#: js/ui/status/network.js:814
|
||||
#: js/ui/status/network.js:824
|
||||
msgid "Wi-Fi is disabled when airplane mode is on."
|
||||
msgstr "A Wi-Fi ki van kapcsolva repülőgép üzemmódban."
|
||||
|
||||
#: js/ui/status/network.js:815
|
||||
#: js/ui/status/network.js:825
|
||||
msgid "Turn Off Airplane Mode"
|
||||
msgstr "Repülőgép üzemmód kikapcsolása"
|
||||
|
||||
#: js/ui/status/network.js:824
|
||||
#: js/ui/status/network.js:834
|
||||
msgid "Wi-Fi is Off"
|
||||
msgstr "Wi-Fi ki"
|
||||
|
||||
#: js/ui/status/network.js:825
|
||||
#: js/ui/status/network.js:835
|
||||
msgid "Wi-Fi needs to be turned on in order to connect to a network."
|
||||
msgstr "A Wi-Fi-t be kell kapcsolni a hálózatra kapcsolódáshoz."
|
||||
|
||||
#: js/ui/status/network.js:826
|
||||
#: js/ui/status/network.js:836
|
||||
msgid "Turn On Wi-Fi"
|
||||
msgstr "Wi-Fi bekapcsolása"
|
||||
|
||||
#: js/ui/status/network.js:851
|
||||
#: js/ui/status/network.js:861
|
||||
msgid "Wi-Fi Networks"
|
||||
msgstr "Wi-Fi hálózatok"
|
||||
|
||||
#: js/ui/status/network.js:853
|
||||
#: js/ui/status/network.js:863
|
||||
msgid "Select a network"
|
||||
msgstr "Válasszon egy hálózatot"
|
||||
|
||||
#: js/ui/status/network.js:883
|
||||
#: js/ui/status/network.js:893
|
||||
msgid "No Networks"
|
||||
msgstr "Nincs hálózat"
|
||||
|
||||
#: js/ui/status/network.js:904 js/ui/status/rfkill.js:115
|
||||
#: js/ui/status/network.js:914 js/ui/status/rfkill.js:115
|
||||
msgid "Use hardware switch to turn off"
|
||||
msgstr "A hardveres kapcsolóval kapcsolja ki"
|
||||
|
||||
#: js/ui/status/network.js:1171
|
||||
#: js/ui/status/network.js:1181
|
||||
msgid "Select Network"
|
||||
msgstr "Válasszon hálózatot"
|
||||
|
||||
#: js/ui/status/network.js:1177
|
||||
#: js/ui/status/network.js:1187
|
||||
msgid "Wi-Fi Settings"
|
||||
msgstr "Wi-Fi beállítások"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:1296
|
||||
#: js/ui/status/network.js:1306
|
||||
#, javascript-format
|
||||
msgid "%s Hotspot Active"
|
||||
msgstr "%s hotspot aktív"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:1311
|
||||
#: js/ui/status/network.js:1321
|
||||
#, javascript-format
|
||||
msgid "%s Not Connected"
|
||||
msgstr "%s nincs kapcsolódva"
|
||||
|
||||
#: js/ui/status/network.js:1411
|
||||
#: js/ui/status/network.js:1421
|
||||
msgid "connecting..."
|
||||
msgstr "kapcsolódás…"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: js/ui/status/network.js:1414
|
||||
#: js/ui/status/network.js:1424
|
||||
msgid "authentication required"
|
||||
msgstr "hitelesítés szükséges"
|
||||
|
||||
#: js/ui/status/network.js:1416
|
||||
#: js/ui/status/network.js:1426
|
||||
msgid "connection failed"
|
||||
msgstr "a kapcsolódás meghiúsult"
|
||||
|
||||
#: js/ui/status/network.js:1482 js/ui/status/rfkill.js:93
|
||||
#: js/ui/status/network.js:1492 js/ui/status/rfkill.js:93
|
||||
msgid "Network Settings"
|
||||
msgstr "Hálózati beállítások"
|
||||
|
||||
#: js/ui/status/network.js:1484
|
||||
#: js/ui/status/network.js:1494
|
||||
msgid "VPN Settings"
|
||||
msgstr "VPN beállítások"
|
||||
|
||||
#: js/ui/status/network.js:1503
|
||||
#: js/ui/status/network.js:1513
|
||||
msgid "VPN"
|
||||
msgstr "VPN"
|
||||
|
||||
#: js/ui/status/network.js:1513
|
||||
#: js/ui/status/network.js:1523
|
||||
msgid "VPN Off"
|
||||
msgstr "VPN ki"
|
||||
|
||||
#: js/ui/status/network.js:1697
|
||||
#: js/ui/status/network.js:1709
|
||||
msgid "Connection failed"
|
||||
msgstr "Kapcsolódás meghiúsult"
|
||||
|
||||
#: js/ui/status/network.js:1698
|
||||
#: js/ui/status/network.js:1710
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "A hálózati kapcsolat aktiválása meghiúsult"
|
||||
|
||||
@ -1578,22 +1649,22 @@ msgstr "Oldalsáv"
|
||||
msgid "“%s” is ready"
|
||||
msgstr "„%s” kész"
|
||||
|
||||
#: js/ui/windowManager.js:63
|
||||
#: js/ui/windowManager.js:64
|
||||
msgid "Do you want to keep these display settings?"
|
||||
msgstr "Meg szeretné tartani ezeket a kijelzőbeállításokat?"
|
||||
|
||||
#. Translators: this and the following message should be limited in lenght,
|
||||
#. to avoid ellipsizing the labels.
|
||||
#.
|
||||
#: js/ui/windowManager.js:82
|
||||
#: js/ui/windowManager.js:83
|
||||
msgid "Revert Settings"
|
||||
msgstr "Beállítások visszavonása"
|
||||
|
||||
#: js/ui/windowManager.js:85
|
||||
#: js/ui/windowManager.js:86
|
||||
msgid "Keep Changes"
|
||||
msgstr "Módosítások megtartása"
|
||||
|
||||
#: js/ui/windowManager.js:103
|
||||
#: js/ui/windowManager.js:104
|
||||
#, javascript-format
|
||||
msgid "Settings changes will revert in %d second"
|
||||
msgid_plural "Settings changes will revert in %d seconds"
|
||||
@ -1602,7 +1673,7 @@ msgstr[1] "A beállítások módosításai %d másodperc múlva visszavonásra k
|
||||
|
||||
#. Translators: This represents the size of a window. The first number is
|
||||
#. * the width of the window and the second is the height.
|
||||
#: js/ui/windowManager.js:658
|
||||
#: js/ui/windowManager.js:659
|
||||
#, javascript-format
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
@ -1702,20 +1773,20 @@ msgstr[1] "%u bemenet"
|
||||
msgid "System Sounds"
|
||||
msgstr "Rendszerhangok"
|
||||
|
||||
#: src/main.c:381
|
||||
#: src/main.c:380
|
||||
msgid "Print version"
|
||||
msgstr "Verzió kiírása"
|
||||
|
||||
#: src/main.c:387
|
||||
#: src/main.c:386
|
||||
msgid "Mode used by GDM for login screen"
|
||||
msgstr "A GDM által a bejelentkezési képernyőhöz használt mód"
|
||||
|
||||
#: src/main.c:393
|
||||
#: src/main.c:392
|
||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||
msgstr ""
|
||||
"Használjon egy adott módot, például a „gdm”-et a bejelentkező képernyőn"
|
||||
|
||||
#: src/main.c:399
|
||||
#: src/main.c:398
|
||||
msgid "List possible modes"
|
||||
msgstr "Lehetséges módok listázása"
|
||||
|
||||
@ -1741,23 +1812,8 @@ msgstr "A jelszó nem lehet üres"
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "A hitelesítési ablakot a felhasználó bezárta"
|
||||
|
||||
#~ msgid "System"
|
||||
#~ msgstr "Rendszer"
|
||||
|
||||
#~ msgid "Show the notification list"
|
||||
#~ msgstr "Az értesítési lista megjelenítése"
|
||||
|
||||
#~ msgid "Focus the active notification"
|
||||
#~ msgstr "Az aktív értesítés fókuszba"
|
||||
|
||||
#~ msgid "Show the overview"
|
||||
#~ msgstr "Áttekintés megjelenítése"
|
||||
|
||||
#~ msgid "Show all applications"
|
||||
#~ msgstr "Minden alkalmazás megjelenítése"
|
||||
|
||||
#~ msgid "Open the application menu"
|
||||
#~ msgstr "Az alkalmazásmenü megnyitása"
|
||||
#~ msgid "Not In Use"
|
||||
#~ msgstr "Nincs használatban"
|
||||
|
||||
#~ msgid "Show the week date in the calendar"
|
||||
#~ msgstr "Hetek számának megjelenítése a naptárban"
|
||||
@ -1791,9 +1847,6 @@ msgstr "A hitelesítési ablakot a felhasználó bezárta"
|
||||
#~ msgid "Airplane Mode"
|
||||
#~ msgstr "Repülőgép üzemmód"
|
||||
|
||||
#~ msgid "On"
|
||||
#~ msgstr "Be"
|
||||
|
||||
#~ msgctxt "event list time"
|
||||
#~ msgid "%H∶%M"
|
||||
#~ msgstr "%k.%M"
|
||||
|
138
po/pl.po
138
po/pl.po
@ -9,9 +9,10 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-08-20 10:20+0200\n"
|
||||
"PO-Revision-Date: 2016-08-20 10:22+0200\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2016-11-17 23:00+0000\n"
|
||||
"PO-Revision-Date: 2016-11-18 00:05+0100\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Polish <community-poland@mozilla.org>\n"
|
||||
"Language: pl\n"
|
||||
@ -334,7 +335,7 @@ msgstr "Rozszerzenia powłoki GNOME"
|
||||
#: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71
|
||||
#: js/ui/components/networkAgent.js:145 js/ui/components/polkitAgent.js:179
|
||||
#: js/ui/endSessionDialog.js:483 js/ui/extensionDownloader.js:195
|
||||
#: js/ui/shellMountOperation.js:399 js/ui/status/network.js:916
|
||||
#: js/ui/shellMountOperation.js:399 js/ui/status/network.js:926
|
||||
msgid "Cancel"
|
||||
msgstr "Anuluj"
|
||||
|
||||
@ -365,7 +366,7 @@ msgstr "Inny użytkownik?"
|
||||
|
||||
#. Translators: this message is shown below the username entry field
|
||||
#. to clue the user in on how to login to the local network realm
|
||||
#: js/gdm/loginDialog.js:854
|
||||
#: js/gdm/loginDialog.js:859
|
||||
#, javascript-format
|
||||
msgid "(e.g., user or %s)"
|
||||
msgstr "(np. użytkownik lub %s)"
|
||||
@ -373,12 +374,12 @@ msgstr "(np. użytkownik lub %s)"
|
||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||
#. is not visible here since we only care about phase2 authentication
|
||||
#. (and don't even care of which one)
|
||||
#: js/gdm/loginDialog.js:859 js/ui/components/networkAgent.js:271
|
||||
#: js/gdm/loginDialog.js:864 js/ui/components/networkAgent.js:271
|
||||
#: js/ui/components/networkAgent.js:289
|
||||
msgid "Username: "
|
||||
msgstr "Nazwa użytkownika: "
|
||||
|
||||
#: js/gdm/loginDialog.js:1196
|
||||
#: js/gdm/loginDialog.js:1201
|
||||
msgid "Login Window"
|
||||
msgstr "Okno logowania"
|
||||
|
||||
@ -691,8 +692,8 @@ msgstr "Hasło:"
|
||||
msgid "Type again:"
|
||||
msgstr "Proszę wpisać ponownie:"
|
||||
|
||||
#: js/ui/components/networkAgent.js:140 js/ui/status/network.js:269
|
||||
#: js/ui/status/network.js:352 js/ui/status/network.js:919
|
||||
#: js/ui/components/networkAgent.js:140 js/ui/status/network.js:270
|
||||
#: js/ui/status/network.js:353 js/ui/status/network.js:929
|
||||
msgid "Connect"
|
||||
msgstr "Połącz"
|
||||
|
||||
@ -720,11 +721,11 @@ msgstr "Hasło klucza prywatnego: "
|
||||
msgid "Service: "
|
||||
msgstr "Usługa: "
|
||||
|
||||
#: js/ui/components/networkAgent.js:320 js/ui/components/networkAgent.js:658
|
||||
#: js/ui/components/networkAgent.js:320 js/ui/components/networkAgent.js:666
|
||||
msgid "Authentication required by wireless network"
|
||||
msgstr "Sieć bezprzewodowa wymaga uwierzytelnienia"
|
||||
|
||||
#: js/ui/components/networkAgent.js:321 js/ui/components/networkAgent.js:659
|
||||
#: js/ui/components/networkAgent.js:321 js/ui/components/networkAgent.js:667
|
||||
#, javascript-format
|
||||
msgid ""
|
||||
"Passwords or encryption keys are required to access the wireless network "
|
||||
@ -733,7 +734,7 @@ msgstr ""
|
||||
"Do uzyskania dostępu do sieci bezprzewodowej „%s” wymagane jest hasło lub "
|
||||
"klucze szyfrowania."
|
||||
|
||||
#: js/ui/components/networkAgent.js:325 js/ui/components/networkAgent.js:662
|
||||
#: js/ui/components/networkAgent.js:325 js/ui/components/networkAgent.js:670
|
||||
msgid "Wired 802.1X authentication"
|
||||
msgstr "Uwierzytelnianie przewodowe 802.1X"
|
||||
|
||||
@ -741,15 +742,15 @@ msgstr "Uwierzytelnianie przewodowe 802.1X"
|
||||
msgid "Network name: "
|
||||
msgstr "Nazwa sieci: "
|
||||
|
||||
#: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:666
|
||||
#: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:674
|
||||
msgid "DSL authentication"
|
||||
msgstr "Uwierzytelnienie DSL"
|
||||
|
||||
#: js/ui/components/networkAgent.js:339 js/ui/components/networkAgent.js:672
|
||||
#: js/ui/components/networkAgent.js:339 js/ui/components/networkAgent.js:680
|
||||
msgid "PIN code required"
|
||||
msgstr "Wymagany jest kod PIN"
|
||||
|
||||
#: js/ui/components/networkAgent.js:340 js/ui/components/networkAgent.js:673
|
||||
#: js/ui/components/networkAgent.js:340 js/ui/components/networkAgent.js:681
|
||||
msgid "PIN code is needed for the mobile broadband device"
|
||||
msgstr "Do korzystania z urządzenia komórkowego wymagane jest podanie kodu PIN"
|
||||
|
||||
@ -757,17 +758,17 @@ msgstr "Do korzystania z urządzenia komórkowego wymagane jest podanie kodu PI
|
||||
msgid "PIN: "
|
||||
msgstr "Kod PIN: "
|
||||
|
||||
#: js/ui/components/networkAgent.js:348 js/ui/components/networkAgent.js:679
|
||||
#: js/ui/components/networkAgent.js:348 js/ui/components/networkAgent.js:687
|
||||
msgid "Mobile broadband network password"
|
||||
msgstr "Hasło sieci komórkowej"
|
||||
|
||||
#: js/ui/components/networkAgent.js:349 js/ui/components/networkAgent.js:663
|
||||
#: js/ui/components/networkAgent.js:667 js/ui/components/networkAgent.js:680
|
||||
#: js/ui/components/networkAgent.js:349 js/ui/components/networkAgent.js:671
|
||||
#: js/ui/components/networkAgent.js:675 js/ui/components/networkAgent.js:688
|
||||
#, javascript-format
|
||||
msgid "A password is required to connect to “%s”."
|
||||
msgstr "Do połączenia z siecią „%s” wymagane jest hasło."
|
||||
|
||||
#: js/ui/components/networkAgent.js:647 js/ui/status/network.js:1658
|
||||
#: js/ui/components/networkAgent.js:655 js/ui/status/network.js:1670
|
||||
msgid "Network Manager"
|
||||
msgstr "Menedżer sieci"
|
||||
|
||||
@ -793,7 +794,7 @@ msgstr "To nie zadziałało. Proszę spróbować ponownie."
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: js/ui/components/telepathyClient.js:760
|
||||
#: js/ui/components/telepathyClient.js:765
|
||||
#, javascript-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "Użytkownik %s jest teraz znany jako %s"
|
||||
@ -1132,6 +1133,10 @@ msgstr "Proszę wprowadzić polecenie:"
|
||||
msgid "Close"
|
||||
msgstr "Zamknij"
|
||||
|
||||
#: js/ui/runDialog.js:277
|
||||
msgid "Restart is not available on Wayland"
|
||||
msgstr "Ponowne uruchamianie jest niedostępne w technologii Wayland"
|
||||
|
||||
#: js/ui/runDialog.js:282
|
||||
msgid "Restarting…"
|
||||
msgstr "Ponowne uruchamianie…"
|
||||
@ -1173,11 +1178,11 @@ msgstr "Środowisko GNOME musi zablokować ekran"
|
||||
#.
|
||||
#. XXX: another option is to kick the user into the gdm login
|
||||
#. screen, where we're not affected by grabs
|
||||
#: js/ui/screenShield.js:825 js/ui/screenShield.js:1291
|
||||
#: js/ui/screenShield.js:825 js/ui/screenShield.js:1292
|
||||
msgid "Unable to lock"
|
||||
msgstr "Nie można zablokować"
|
||||
|
||||
#: js/ui/screenShield.js:826 js/ui/screenShield.js:1292
|
||||
#: js/ui/screenShield.js:826 js/ui/screenShield.js:1293
|
||||
msgid "Lock was blocked by an application"
|
||||
msgstr "Blokowanie zostało zablokowane przez program"
|
||||
|
||||
@ -1261,7 +1266,7 @@ msgstr "Duży tekst"
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: js/ui/status/bluetooth.js:56 js/ui/status/network.js:624
|
||||
#: js/ui/status/bluetooth.js:56 js/ui/status/network.js:625
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Ustawienia Bluetooth"
|
||||
|
||||
@ -1282,13 +1287,13 @@ msgstr "Wyłączono"
|
||||
msgid "Not In Use"
|
||||
msgstr "Nieużywane"
|
||||
|
||||
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:1279
|
||||
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:1289
|
||||
msgid "Turn On"
|
||||
msgstr "Włącz"
|
||||
|
||||
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:178
|
||||
#: js/ui/status/network.js:353 js/ui/status/network.js:1279
|
||||
#: js/ui/status/network.js:1394 js/ui/status/rfkill.js:90
|
||||
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:179
|
||||
#: js/ui/status/network.js:354 js/ui/status/network.js:1289
|
||||
#: js/ui/status/network.js:1404 js/ui/status/rfkill.js:90
|
||||
#: js/ui/status/rfkill.js:117
|
||||
msgid "Turn Off"
|
||||
msgstr "Wyłącz"
|
||||
@ -1336,18 +1341,18 @@ msgid "Location access can be changed at any time from the privacy settings."
|
||||
msgstr ""
|
||||
"W każdej chwili można zmienić dostęp do położenia w ustawieniach prywatności."
|
||||
|
||||
#: js/ui/status/network.js:101
|
||||
#: js/ui/status/network.js:102
|
||||
msgid "<unknown>"
|
||||
msgstr "<nieznane>"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:451 js/ui/status/network.js:1308
|
||||
#: js/ui/status/network.js:452 js/ui/status/network.js:1318
|
||||
#, javascript-format
|
||||
msgid "%s Off"
|
||||
msgstr "Wyłączono sieć %s"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:454
|
||||
#: js/ui/status/network.js:455
|
||||
#, javascript-format
|
||||
msgid "%s Connected"
|
||||
msgstr "Połączono z siecią %s"
|
||||
@ -1355,168 +1360,168 @@ msgstr "Połączono z siecią %s"
|
||||
#. Translators: this is for network devices that are physically present but are not
|
||||
#. under NetworkManager's control (and thus cannot be used in the menu);
|
||||
#. %s is a network identifier
|
||||
#: js/ui/status/network.js:459
|
||||
#: js/ui/status/network.js:460
|
||||
#, javascript-format
|
||||
msgid "%s Unmanaged"
|
||||
msgstr "Sieć %s jest niezarządzana"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:462
|
||||
#: js/ui/status/network.js:463
|
||||
#, javascript-format
|
||||
msgid "%s Disconnecting"
|
||||
msgstr "Rozłączanie z sieci %s"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:469 js/ui/status/network.js:1300
|
||||
#: js/ui/status/network.js:470 js/ui/status/network.js:1310
|
||||
#, javascript-format
|
||||
msgid "%s Connecting"
|
||||
msgstr "Łączenie z siecią %s"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
|
||||
#: js/ui/status/network.js:472
|
||||
#: js/ui/status/network.js:473
|
||||
#, javascript-format
|
||||
msgid "%s Requires Authentication"
|
||||
msgstr "Sieć %s wymaga uwierzytelnienia"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing; %s is a network identifier
|
||||
#: js/ui/status/network.js:480
|
||||
#: js/ui/status/network.js:481
|
||||
#, javascript-format
|
||||
msgid "Firmware Missing For %s"
|
||||
msgstr "Brak oprogramowania sprzętowego dla sieci %s"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage; %s is a network identifier
|
||||
#: js/ui/status/network.js:484
|
||||
#: js/ui/status/network.js:485
|
||||
#, javascript-format
|
||||
msgid "%s Unavailable"
|
||||
msgstr "Sieć %s jest niedostępna"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:487
|
||||
#: js/ui/status/network.js:488
|
||||
#, javascript-format
|
||||
msgid "%s Connection Failed"
|
||||
msgstr "Połączenie z siecią %s się nie powiodło"
|
||||
|
||||
#: js/ui/status/network.js:503
|
||||
#: js/ui/status/network.js:504
|
||||
msgid "Wired Settings"
|
||||
msgstr "Ustawienia sieci przewodowej"
|
||||
|
||||
#: js/ui/status/network.js:545
|
||||
#: js/ui/status/network.js:546
|
||||
msgid "Mobile Broadband Settings"
|
||||
msgstr "Ustawienia sieci komórkowej"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:588 js/ui/status/network.js:1305
|
||||
#: js/ui/status/network.js:589 js/ui/status/network.js:1315
|
||||
#, javascript-format
|
||||
msgid "%s Hardware Disabled"
|
||||
msgstr "Wyłączono sprzęt dla sieci %s"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated
|
||||
#. because it's disabled by rfkill (airplane mode); %s is a network identifier
|
||||
#: js/ui/status/network.js:592
|
||||
#: js/ui/status/network.js:593
|
||||
#, javascript-format
|
||||
msgid "%s Disabled"
|
||||
msgstr "Wyłączono sieć %s"
|
||||
|
||||
#: js/ui/status/network.js:632
|
||||
#: js/ui/status/network.js:633
|
||||
msgid "Connect to Internet"
|
||||
msgstr "Połącz z Internetem"
|
||||
|
||||
#: js/ui/status/network.js:813
|
||||
#: js/ui/status/network.js:823
|
||||
msgid "Airplane Mode is On"
|
||||
msgstr "Tryb samolotowy jest włączony"
|
||||
|
||||
#: js/ui/status/network.js:814
|
||||
#: js/ui/status/network.js:824
|
||||
msgid "Wi-Fi is disabled when airplane mode is on."
|
||||
msgstr "Sieć Wi-Fi jest wyłączona, kiedy tryb samolotowy jest włączony."
|
||||
|
||||
#: js/ui/status/network.js:815
|
||||
#: js/ui/status/network.js:825
|
||||
msgid "Turn Off Airplane Mode"
|
||||
msgstr "Wyłącz tryb samolotowy"
|
||||
|
||||
#: js/ui/status/network.js:824
|
||||
#: js/ui/status/network.js:834
|
||||
msgid "Wi-Fi is Off"
|
||||
msgstr "Sieć Wi-Fi jest wyłączona"
|
||||
|
||||
#: js/ui/status/network.js:825
|
||||
#: js/ui/status/network.js:835
|
||||
msgid "Wi-Fi needs to be turned on in order to connect to a network."
|
||||
msgstr "Wi-Fi musi być włączone, aby połączyć z siecią."
|
||||
|
||||
#: js/ui/status/network.js:826
|
||||
#: js/ui/status/network.js:836
|
||||
msgid "Turn On Wi-Fi"
|
||||
msgstr "Włącz sieć Wi-Fi"
|
||||
|
||||
#: js/ui/status/network.js:851
|
||||
#: js/ui/status/network.js:861
|
||||
msgid "Wi-Fi Networks"
|
||||
msgstr "Sieci Wi-Fi"
|
||||
|
||||
#: js/ui/status/network.js:853
|
||||
#: js/ui/status/network.js:863
|
||||
msgid "Select a network"
|
||||
msgstr "Wybór sieci"
|
||||
|
||||
#: js/ui/status/network.js:883
|
||||
#: js/ui/status/network.js:893
|
||||
msgid "No Networks"
|
||||
msgstr "Brak sieci"
|
||||
|
||||
#: js/ui/status/network.js:904 js/ui/status/rfkill.js:115
|
||||
#: js/ui/status/network.js:914 js/ui/status/rfkill.js:115
|
||||
msgid "Use hardware switch to turn off"
|
||||
msgstr "Należy użyć przełącznika sprzętowego, aby wyłączyć"
|
||||
|
||||
#: js/ui/status/network.js:1171
|
||||
#: js/ui/status/network.js:1181
|
||||
msgid "Select Network"
|
||||
msgstr "Wybierz sieć"
|
||||
|
||||
#: js/ui/status/network.js:1177
|
||||
#: js/ui/status/network.js:1187
|
||||
msgid "Wi-Fi Settings"
|
||||
msgstr "Ustawienia sieci Wi-Fi"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:1296
|
||||
#: js/ui/status/network.js:1306
|
||||
#, javascript-format
|
||||
msgid "%s Hotspot Active"
|
||||
msgstr "Hotspot %s jest aktywny"
|
||||
|
||||
#. Translators: %s is a network identifier
|
||||
#: js/ui/status/network.js:1311
|
||||
#: js/ui/status/network.js:1321
|
||||
#, javascript-format
|
||||
msgid "%s Not Connected"
|
||||
msgstr "Nie połączono z siecią %s"
|
||||
|
||||
#: js/ui/status/network.js:1411
|
||||
#: js/ui/status/network.js:1421
|
||||
msgid "connecting..."
|
||||
msgstr "łączenie…"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: js/ui/status/network.js:1414
|
||||
#: js/ui/status/network.js:1424
|
||||
msgid "authentication required"
|
||||
msgstr "wymagane jest uwierzytelnienie"
|
||||
|
||||
#: js/ui/status/network.js:1416
|
||||
#: js/ui/status/network.js:1426
|
||||
msgid "connection failed"
|
||||
msgstr "połączenie się nie powiodło"
|
||||
|
||||
#: js/ui/status/network.js:1482 js/ui/status/rfkill.js:93
|
||||
#: js/ui/status/network.js:1492 js/ui/status/rfkill.js:93
|
||||
msgid "Network Settings"
|
||||
msgstr "Ustawienia sieci"
|
||||
|
||||
#: js/ui/status/network.js:1484
|
||||
#: js/ui/status/network.js:1494
|
||||
msgid "VPN Settings"
|
||||
msgstr "Ustawienia sieci VPN"
|
||||
|
||||
#: js/ui/status/network.js:1503
|
||||
#: js/ui/status/network.js:1513
|
||||
msgid "VPN"
|
||||
msgstr "VPN"
|
||||
|
||||
#: js/ui/status/network.js:1513
|
||||
#: js/ui/status/network.js:1523
|
||||
msgid "VPN Off"
|
||||
msgstr "Wyłączono sieć VPN"
|
||||
|
||||
#: js/ui/status/network.js:1697
|
||||
#: js/ui/status/network.js:1709
|
||||
msgid "Connection failed"
|
||||
msgstr "Połączenie się nie powiodło"
|
||||
|
||||
#: js/ui/status/network.js:1698
|
||||
#: js/ui/status/network.js:1710
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Aktywacja połączenia sieciowego się nie powiodła"
|
||||
|
||||
@ -1775,3 +1780,6 @@ msgstr "Hasło nie może być puste"
|
||||
#: src/shell-polkit-authentication-agent.c:353
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "Okno dialogowe uwierzytelnienia zostało odrzucone przez użytkownika"
|
||||
|
||||
msgid "Launch using Dedicated Graphics Card"
|
||||
msgstr "Uruchom za pomocą dedykowanej karty graficznej"
|
||||
|
789
po/pt_BR.po
789
po/pt_BR.po
File diff suppressed because it is too large
Load Diff
838
po/sr@latin.po
838
po/sr@latin.po
File diff suppressed because it is too large
Load Diff
1981
po/uz@cyrillic.po
1981
po/uz@cyrillic.po
File diff suppressed because it is too large
Load Diff
802
po/zh_CN.po
802
po/zh_CN.po
File diff suppressed because it is too large
Load Diff
800
po/zh_TW.po
800
po/zh_TW.po
File diff suppressed because it is too large
Load Diff
@ -78,7 +78,7 @@ gnome_shell_cflags = \
|
||||
-DGNOME_SHELL_PKGLIBDIR=\"$(pkglibdir)\"
|
||||
|
||||
privlibdir = $(pkglibdir)
|
||||
privlib_LTLIBRARIES = libgnome-shell-js.la libgnome-shell-menu.la libgnome-shell.la
|
||||
privlib_LTLIBRARIES = libgnome-shell-menu.la libgnome-shell.la
|
||||
noinst_LTLIBRARIES += libgnome-shell-base.la
|
||||
|
||||
shell_built_sources = \
|
||||
@ -200,7 +200,7 @@ gnome_shell_CPPFLAGS = \
|
||||
|
||||
# Here, and after, we repeat mutter and bluetooth libraries just for the rpath
|
||||
# The dependency is already pulled in by libtool
|
||||
gnome_shell_LDADD = libgnome-shell.la libgnome-shell-js.la $(GNOME_SHELL_LIBS) $(MUTTER_LIBS)
|
||||
gnome_shell_LDADD = libgnome-shell.la $(GNOME_SHELL_LIBS) $(MUTTER_LIBS)
|
||||
gnome_shell_LDFLAGS = -rpath $(MUTTER_TYPELIB_DIR)
|
||||
gnome_shell_DEPENDENCIES = libgnome-shell.la
|
||||
|
||||
@ -212,7 +212,7 @@ nodist_gnome_shell_extension_prefs_SOURCES = \
|
||||
$(top_builddir)/js/js-resources.h \
|
||||
$(NULL)
|
||||
gnome_shell_extension_prefs_CPPFLAGS = $(gnome_shell_cflags)
|
||||
gnome_shell_extension_prefs_LDADD = libgnome-shell-js.la $(GNOME_SHELL_LIBS)
|
||||
gnome_shell_extension_prefs_LDADD = $(GNOME_SHELL_LIBS)
|
||||
gnome_shell_extension_prefs_LDFLAGS = -rpath $(MUTTER_TYPELIB_DIR)
|
||||
|
||||
if HAVE_NETWORKMANAGER
|
||||
@ -226,30 +226,13 @@ nodist_gnome_shell_portal_helper_SOURCES = \
|
||||
$(top_builddir)/js/js-resources.h \
|
||||
$(NULL)
|
||||
gnome_shell_portal_helper_CPPFLAGS = $(gnome_shell_cflags)
|
||||
gnome_shell_portal_helper_LDADD = libgnome-shell-js.la $(GNOME_SHELL_LIBS)
|
||||
gnome_shell_portal_helper_LDADD = $(GNOME_SHELL_LIBS)
|
||||
gnome_shell_portal_helper_LDFLAGS = -rpath $(MUTTER_TYPELIB_DIR)
|
||||
|
||||
endif
|
||||
|
||||
########################################
|
||||
|
||||
libgnome_shell_js_la_SOURCES = \
|
||||
shell-js.h \
|
||||
shell-js.cpp \
|
||||
$(NULL)
|
||||
|
||||
libgnome_shell_js_la_LIBADD = \
|
||||
$(GNOME_SHELL_JS_LIBS) \
|
||||
$(NULL)
|
||||
|
||||
libgnome_shell_js_la_LDFLAGS = \
|
||||
-avoid-version
|
||||
|
||||
libgnome_shell_js_la_CPPFLAGS = \
|
||||
$(GNOME_SHELL_JS_CFLAGS)
|
||||
|
||||
########################################
|
||||
|
||||
shell_recorder_sources = \
|
||||
shell-recorder.c \
|
||||
shell-recorder.h
|
||||
@ -366,13 +349,6 @@ Shell_0_1_gir_SCANNERFLAGS = \
|
||||
INTROSPECTION_GIRS += Shell-0.1.gir
|
||||
CLEANFILES += Shell-0.1.gir
|
||||
|
||||
ShellJS-0.1.gir: libgnome-shell-js.la
|
||||
ShellJS_0_1_gir_CFLAGS = $(libgnome_shell_la_CPPFLAGS) -I $(srcdir)
|
||||
ShellJS_0_1_gir_LIBS = libgnome-shell-js.la
|
||||
ShellJS_0_1_gir_FILES = $(libgnome_shell_js_la_SOURCES)
|
||||
INTROSPECTION_GIRS += ShellJS-0.1.gir
|
||||
CLEANFILES += ShellJS-0.1.gir
|
||||
|
||||
St-1.0.gir: libst-1.0.la
|
||||
St_1_0_gir_INCLUDES = Clutter-1.0 Gtk-3.0
|
||||
St_1_0_gir_CFLAGS = $(st_cflags) -DST_COMPILATION
|
||||
|
@ -6,8 +6,6 @@
|
||||
#include <gjs/gjs.h>
|
||||
#include <glib/gi18n.h>
|
||||
|
||||
#include "shell-js.h"
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
@ -51,18 +49,3 @@ main (int argc, char *argv[])
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* HACK:
|
||||
Add a dummy function that calls into libgnome-shell-js.so to ensure it's
|
||||
linked to /usr/bin/gnome-shell-extension-prefs even when linking with
|
||||
--as-needed. This function is never actually called.
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=670477
|
||||
*/
|
||||
void _shell_link_to_shell_js (void);
|
||||
|
||||
void
|
||||
_shell_link_to_shell_js (void)
|
||||
{
|
||||
shell_js_add_extension_importer (NULL, NULL, NULL, NULL);
|
||||
}
|
||||
|
@ -17,7 +17,7 @@ except ImportError:
|
||||
print('The Python simplejson module is required')
|
||||
sys.exit(1)
|
||||
|
||||
from gi.repository import Gio
|
||||
from gi.repository import Gio, GLib
|
||||
|
||||
SAMPLE_EXTENSION_FILES = {
|
||||
"extension.js": """
|
||||
@ -172,6 +172,30 @@ def disable_extension(uuid):
|
||||
settings.set_strv(ENABLED_EXTENSIONS_KEY, extensions)
|
||||
print("%r is now disabled." % (uuid,), file=sys.stderr)
|
||||
|
||||
def reload_extension(uuid):
|
||||
settings = Gio.Settings(schema='org.gnome.shell')
|
||||
extensions = settings.get_strv(ENABLED_EXTENSIONS_KEY)
|
||||
|
||||
if uuid not in extensions:
|
||||
print("%r is not enabled or installed." % (uuid,), file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
proxy = Gio.DBusProxy.new_sync(Gio.bus_get_sync(Gio.BusType.SESSION, None),
|
||||
Gio.DBusProxyFlags.NONE,
|
||||
None,
|
||||
'org.gnome.Shell',
|
||||
'/org/gnome/Shell',
|
||||
'org.gnome.Shell.Extensions',
|
||||
None)
|
||||
proxy.call_sync('ReloadExtension',
|
||||
GLib.Variant('(s)', (uuid,)),
|
||||
Gio.DBusCallFlags.NONE,
|
||||
-1,
|
||||
None)
|
||||
|
||||
print("%r reloaded." % (uuid,), file=sys.stderr)
|
||||
|
||||
|
||||
def main():
|
||||
parser = optparse.OptionParser()
|
||||
parser.add_option("-d", "--disable-extension", dest="disable",
|
||||
@ -180,6 +204,8 @@ def main():
|
||||
help="Enable a GNOME Shell extension")
|
||||
parser.add_option("-c", "--create-extension", dest="create", action="store_true",
|
||||
help="Create a new GNOME Shell extension")
|
||||
parser.add_option("-r", "--reload-extension", dest="reload",
|
||||
help="Reload a GNOME Shell extension")
|
||||
options, args = parser.parse_args()
|
||||
|
||||
if args:
|
||||
@ -195,6 +221,9 @@ def main():
|
||||
elif options.create:
|
||||
create_extension()
|
||||
|
||||
elif options.reload:
|
||||
reload_extension(options.reload)
|
||||
|
||||
else:
|
||||
parser.print_usage()
|
||||
sys.exit(1)
|
||||
|
@ -42,6 +42,8 @@ static void gnome_shell_plugin_minimize (MetaPlugin *plugin,
|
||||
MetaWindowActor *actor);
|
||||
static void gnome_shell_plugin_unminimize (MetaPlugin *plugin,
|
||||
MetaWindowActor *actor);
|
||||
static void gnome_shell_plugin_size_changed (MetaPlugin *plugin,
|
||||
MetaWindowActor *actor);
|
||||
static void gnome_shell_plugin_size_change (MetaPlugin *plugin,
|
||||
MetaWindowActor *actor,
|
||||
MetaSizeChange which_change,
|
||||
@ -127,6 +129,7 @@ gnome_shell_plugin_class_init (GnomeShellPluginClass *klass)
|
||||
plugin_class->map = gnome_shell_plugin_map;
|
||||
plugin_class->minimize = gnome_shell_plugin_minimize;
|
||||
plugin_class->unminimize = gnome_shell_plugin_unminimize;
|
||||
plugin_class->size_changed = gnome_shell_plugin_size_changed;
|
||||
plugin_class->size_change = gnome_shell_plugin_size_change;
|
||||
plugin_class->destroy = gnome_shell_plugin_destroy;
|
||||
|
||||
@ -272,6 +275,13 @@ gnome_shell_plugin_unminimize (MetaPlugin *plugin,
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_shell_plugin_size_changed (MetaPlugin *plugin,
|
||||
MetaWindowActor *actor)
|
||||
{
|
||||
_shell_wm_size_changed (get_shell_wm (), actor);
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_shell_plugin_size_change (MetaPlugin *plugin,
|
||||
MetaWindowActor *actor,
|
||||
|
15
src/main.c
15
src/main.c
@ -25,7 +25,6 @@
|
||||
|
||||
#include "shell-global.h"
|
||||
#include "shell-global-private.h"
|
||||
#include "shell-js.h"
|
||||
#include "shell-perf-log.h"
|
||||
#include "st.h"
|
||||
|
||||
@ -480,17 +479,3 @@ main (int argc, char **argv)
|
||||
|
||||
return ecode;
|
||||
}
|
||||
|
||||
/* HACK:
|
||||
Add a dummy function that calls into libgnome-shell-js.so to ensure it's
|
||||
linked to /usr/bin/gnome-shell even when linking with --as-needed.
|
||||
This function is never actually called.
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=670477
|
||||
*/
|
||||
void _shell_link_to_shell_js (void);
|
||||
|
||||
void
|
||||
_shell_link_to_shell_js (void)
|
||||
{
|
||||
shell_js_add_extension_importer (NULL, NULL, NULL, NULL);
|
||||
}
|
||||
|
@ -505,7 +505,7 @@ shell_app_activate_full (ShellApp *app,
|
||||
case SHELL_APP_STATE_STOPPED:
|
||||
{
|
||||
GError *error = NULL;
|
||||
if (!shell_app_launch (app, timestamp, workspace, &error))
|
||||
if (!shell_app_launch (app, timestamp, workspace, FALSE, &error))
|
||||
{
|
||||
char *msg;
|
||||
msg = g_strdup_printf (_("Failed to launch “%s”"), shell_app_get_name (app));
|
||||
@ -549,7 +549,7 @@ shell_app_open_new_window (ShellApp *app,
|
||||
* as say Pidgin. Ideally, we have the application express to us
|
||||
* that it supports an explicit new-window action.
|
||||
*/
|
||||
shell_app_launch (app, 0, workspace, NULL);
|
||||
shell_app_launch (app, 0, workspace, FALSE, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1200,12 +1200,14 @@ app_child_setup (gpointer user_data)
|
||||
* shell_app_launch:
|
||||
* @timestamp: Event timestamp, or 0 for current event timestamp
|
||||
* @workspace: Start on this workspace, or -1 for default
|
||||
* @discrete_gpu: Whether to start on the discrete GPU
|
||||
* @error: A #GError
|
||||
*/
|
||||
gboolean
|
||||
shell_app_launch (ShellApp *app,
|
||||
guint timestamp,
|
||||
int workspace,
|
||||
gboolean discrete_gpu,
|
||||
GError **error)
|
||||
{
|
||||
ShellGlobal *global;
|
||||
@ -1227,6 +1229,8 @@ shell_app_launch (ShellApp *app,
|
||||
|
||||
global = shell_global_get ();
|
||||
context = shell_global_create_app_launch_context (global, timestamp, workspace);
|
||||
if (discrete_gpu)
|
||||
g_app_launch_context_setenv (context, "DRI_PRIME", "1");
|
||||
|
||||
ret = g_desktop_app_info_launch_uris_as_manager (app->info, NULL,
|
||||
context,
|
||||
|
@ -54,6 +54,7 @@ gboolean shell_app_is_on_workspace (ShellApp *app, MetaWorkspace *workspace);
|
||||
gboolean shell_app_launch (ShellApp *app,
|
||||
guint timestamp,
|
||||
int workspace,
|
||||
gboolean discrete_gpu,
|
||||
GError **error);
|
||||
|
||||
void shell_app_launch_action (ShellApp *app,
|
||||
|
@ -277,6 +277,7 @@ shell_global_init (ShellGlobal *global)
|
||||
XDisplayName (NULL));
|
||||
(void) g_mkdir_with_parents (path, 0700);
|
||||
global->runtime_state_path = g_file_new_for_path (path);
|
||||
g_free (path);
|
||||
|
||||
global->settings = g_settings_new ("org.gnome.shell");
|
||||
|
||||
|
@ -1,77 +0,0 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "shell-js.h"
|
||||
|
||||
#include <gio/gio.h>
|
||||
#include <gjs/gjs.h>
|
||||
#include <gjs/gjs-module.h>
|
||||
|
||||
/**
|
||||
* shell_js_add_extension_importer:
|
||||
* @target_object_script: JavaScript code evaluating to a target object
|
||||
* @target_property: Name of property to use for importer
|
||||
* @directory: Source directory:
|
||||
* @error: A #GError
|
||||
*
|
||||
* This function sets a property named @target_property on the object
|
||||
* resulting from the evaluation of @target_object_script code, which
|
||||
* acts as a GJS importer for directory @directory.
|
||||
*
|
||||
* Returns: %TRUE on success
|
||||
*/
|
||||
gboolean
|
||||
shell_js_add_extension_importer (const char *target_object_script,
|
||||
const char *target_property,
|
||||
const char *directory,
|
||||
GError **error)
|
||||
{
|
||||
jsval target_object;
|
||||
GList *contexts;
|
||||
JSContext *context;
|
||||
char *search_path[2] = { 0, 0 };
|
||||
gboolean ret = FALSE;
|
||||
|
||||
/* Take the first GjsContext from all of them --
|
||||
* we should only ever have one context, so this
|
||||
* should be alright. */
|
||||
contexts = gjs_context_get_all ();
|
||||
context = (JSContext*) gjs_context_get_native_context ((GjsContext*)contexts->data);
|
||||
g_list_free_full (contexts, g_object_unref);
|
||||
|
||||
JS_BeginRequest (context);
|
||||
|
||||
/* This is a bit of a hack; ideally we'd be able to pass our target
|
||||
* object directly into this function, but introspection doesn't
|
||||
* support that at the moment. Instead evaluate a string to get it. */
|
||||
if (!JS_EvaluateScript(context,
|
||||
JS_GetGlobalObject(context),
|
||||
target_object_script,
|
||||
strlen (target_object_script),
|
||||
"<target_object_script>",
|
||||
0,
|
||||
&target_object))
|
||||
{
|
||||
gjs_log_exception(context);
|
||||
g_set_error(error,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_FAILED,
|
||||
"Unable to import %s", target_object_script);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!JSVAL_IS_OBJECT (target_object))
|
||||
{
|
||||
g_error ("shell_js_add_extension_importer: invalid target object");
|
||||
goto out;
|
||||
}
|
||||
|
||||
search_path[0] = (char*)directory;
|
||||
gjs_define_importer (context, JSVAL_TO_OBJECT (target_object), target_property, (const char **)search_path, FALSE);
|
||||
ret = TRUE;
|
||||
|
||||
out:
|
||||
JS_EndRequest (context);
|
||||
return ret;
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
#ifndef __SHELL_JS_H__
|
||||
#define __SHELL_JS_H__
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
gboolean shell_js_add_extension_importer (const char *target_object_script,
|
||||
const char *target_property,
|
||||
const char *directory,
|
||||
GError **error);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __SHELL_JS_H__ */
|
@ -22,6 +22,7 @@
|
||||
#include "shell-global.h"
|
||||
#include "shell-recorder-src.h"
|
||||
#include "shell-recorder.h"
|
||||
#include "shell-util.h"
|
||||
|
||||
#define A11Y_APPS_SCHEMA "org.gnome.desktop.a11y.applications"
|
||||
#define MAGNIFIER_ACTIVE_KEY "screen-magnifier-enabled"
|
||||
@ -437,17 +438,21 @@ recorder_record_frame (ShellRecorder *recorder,
|
||||
if (n_captures == 0)
|
||||
return;
|
||||
|
||||
/*
|
||||
* TODO: Deal with each capture region separately, instead of dropping
|
||||
* anything except the first one.
|
||||
*/
|
||||
if (n_captures == 1)
|
||||
image = cairo_surface_reference (captures[0].image);
|
||||
else
|
||||
image = shell_util_composite_capture_images (captures,
|
||||
n_captures,
|
||||
recorder->area.x,
|
||||
recorder->area.y,
|
||||
recorder->area.width,
|
||||
recorder->area.height);
|
||||
|
||||
image = captures[0].image;
|
||||
data = cairo_image_surface_get_data (image);
|
||||
size = captures[0].rect.width * captures[0].rect.height * 4;
|
||||
size = (cairo_image_surface_get_height (image) *
|
||||
cairo_image_surface_get_stride (image));
|
||||
|
||||
/* TODO: Capture more than the first framebuffer. */
|
||||
for (i = 1; i < n_captures; i++)
|
||||
for (i = 0; i < n_captures; i++)
|
||||
cairo_surface_destroy (captures[i].image);
|
||||
g_free (captures);
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
#include "shell-global.h"
|
||||
#include "shell-screenshot.h"
|
||||
#include "shell-util.h"
|
||||
|
||||
#define A11Y_APPS_SCHEMA "org.gnome.desktop.a11y.applications"
|
||||
#define MAGNIFIER_ACTIVE_KEY "screen-magnifier-enabled"
|
||||
@ -233,14 +234,15 @@ do_grab_screenshot (ShellScreenshot *screenshot,
|
||||
|
||||
if (n_captures == 0)
|
||||
return;
|
||||
else if (n_captures == 1)
|
||||
priv->image = cairo_surface_reference (captures[0].image);
|
||||
else
|
||||
priv->image = shell_util_composite_capture_images (captures,
|
||||
n_captures,
|
||||
x, y,
|
||||
width, height);
|
||||
|
||||
/*
|
||||
* TODO: Deal with each capture region separately, instead of dropping
|
||||
* anything except the first one.
|
||||
*/
|
||||
priv->image = captures[0].image;
|
||||
|
||||
for (i = 1; i < n_captures; i++)
|
||||
for (i = 0; i < n_captures; i++)
|
||||
cairo_surface_destroy (captures[i].image);
|
||||
|
||||
g_free (captures);
|
||||
@ -261,6 +263,10 @@ _draw_cursor_image (MetaCursorTracker *tracker,
|
||||
int x, y;
|
||||
int xhot, yhot;
|
||||
|
||||
texture = meta_cursor_tracker_get_sprite (tracker);
|
||||
if (!texture)
|
||||
return;
|
||||
|
||||
screenshot_region = cairo_region_create_rectangle (&area);
|
||||
meta_cursor_tracker_get_pointer (tracker, &x, &y, NULL);
|
||||
|
||||
@ -270,7 +276,6 @@ _draw_cursor_image (MetaCursorTracker *tracker,
|
||||
return;
|
||||
}
|
||||
|
||||
texture = meta_cursor_tracker_get_sprite (tracker);
|
||||
meta_cursor_tracker_get_hot (tracker, &xhot, &yhot);
|
||||
width = cogl_texture_get_width (texture);
|
||||
height = cogl_texture_get_height (texture);
|
||||
|
@ -204,6 +204,12 @@ shell_tray_icon_click (ShellTrayIcon *icon,
|
||||
gdk_error_trap_push ();
|
||||
|
||||
remote_window = gtk_socket_get_plug_window (GTK_SOCKET (icon->priv->socket));
|
||||
if (remote_window == NULL)
|
||||
{
|
||||
g_warning ("shell tray: plug window is gone");
|
||||
gdk_error_trap_pop_ignored ();
|
||||
return;
|
||||
}
|
||||
xwindow = GDK_WINDOW_XID (remote_window);
|
||||
xdisplay = GDK_WINDOW_XDISPLAY (remote_window);
|
||||
screen = gdk_window_get_screen (remote_window);
|
||||
|
@ -446,3 +446,49 @@ shell_util_get_content_for_window_actor (MetaWindowActor *window_actor,
|
||||
|
||||
return content;
|
||||
}
|
||||
|
||||
cairo_surface_t *
|
||||
shell_util_composite_capture_images (ClutterCapture *captures,
|
||||
int n_captures,
|
||||
int x,
|
||||
int y,
|
||||
int width,
|
||||
int height)
|
||||
{
|
||||
int i;
|
||||
cairo_format_t format;
|
||||
cairo_surface_t *image;
|
||||
cairo_t *cr;
|
||||
|
||||
format = cairo_image_surface_get_format (captures[0].image);
|
||||
image = cairo_image_surface_create (format, width, height);
|
||||
|
||||
cr = cairo_create (image);
|
||||
|
||||
for (i = 0; i < n_captures; i++)
|
||||
{
|
||||
ClutterCapture *capture = &captures[i];
|
||||
double capture_scale = 1.0;
|
||||
|
||||
/*
|
||||
* Ignore capture regions with scale other than 1 for now; mutter can't
|
||||
* produce them yet, so there is no way to test them.
|
||||
*/
|
||||
cairo_surface_get_device_scale (capture->image, &capture_scale, NULL);
|
||||
if ((int) capture_scale != 1)
|
||||
continue;
|
||||
|
||||
cairo_save (cr);
|
||||
|
||||
cairo_translate (cr,
|
||||
capture->rect.x - x,
|
||||
capture->rect.y - y);
|
||||
cairo_set_source_surface (cr, capture->image, 0, 0);
|
||||
cairo_paint (cr);
|
||||
|
||||
cairo_restore (cr);
|
||||
}
|
||||
cairo_destroy (cr);
|
||||
|
||||
return image;
|
||||
}
|
||||
|
@ -51,6 +51,13 @@ gboolean shell_util_need_background_refresh (void);
|
||||
ClutterContent * shell_util_get_content_for_window_actor (MetaWindowActor *window_actor,
|
||||
MetaRectangle *window_rect);
|
||||
|
||||
cairo_surface_t * shell_util_composite_capture_images (ClutterCapture *captures,
|
||||
int n_captures,
|
||||
int x,
|
||||
int y,
|
||||
int width,
|
||||
int height);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __SHELL_UTIL_H__ */
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user