Compare commits

..

5 Commits

Author SHA1 Message Date
Florian Müllner
253d234b50 windowManager: Use easing for window animations 2019-05-15 22:08:07 +00:00
Florian Müllner
c168bd4e01 windowManager: Use ClutterTransition to animate window dimming 2019-05-15 22:08:07 +00:00
Florian Müllner
339797dbb4 environment: Patch in some implicit animation convenience
Setting up implicit animations is more verbose than using tweener, in
particular when setting up callbacks to run on update or completion.
In order to make its use more convenient, monkey-patch ClutterActor
with an ease() method that works similarly to Tweener.addTween().

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/22
2019-05-15 22:08:07 +00:00
Florian Müllner
6c7dcd5ffd environment: Respect enable-animations setting when easing
In addition to the slow down factor, we want implicit animations to
follow GTK+'s enable-animations setting as well.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/22
2019-05-15 22:08:07 +00:00
Florian Müllner
94f12fa764 environment: Support slow down factor when easing
Being able to slow down animations is a helpful debugging tool; to not
lose it when starting to use Clutter's implicit animations, monkey-patch
the appropriate methods to support our global slow down factor.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/22
2019-05-15 21:36:57 +00:00
90 changed files with 2776 additions and 3840 deletions

View File

@@ -15,7 +15,7 @@ variables:
- merge_requests
check_commit_log:
image: registry.gitlab.gnome.org/gnome/mutter/master:v2
image: registry.gitlab.gnome.org/gnome/mutter/master:v1
stage: review
variables:
GIT_DEPTH: "100"
@@ -40,7 +40,7 @@ js_check:
when: on_failure
build:
image: registry.gitlab.gnome.org/gnome/mutter/master:v2
image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1
stage: build
before_script:
- .gitlab-ci/checkout-mutter.sh
@@ -58,7 +58,7 @@ build:
- build
test:
image: registry.gitlab.gnome.org/gnome/mutter/master:v2
image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1
stage: test
before_script:
- ninja -C mutter/build install
@@ -72,7 +72,7 @@ test:
when: on_failure
test-pot:
image: registry.gitlab.gnome.org/gnome/mutter/master:v2
image: registry.gitlab.gnome.org/gnome/gnome-shell/master:v1
stage: test
before_script:
- ninja -C mutter/build install

19
.gitlab-ci/Dockerfile Normal file
View File

@@ -0,0 +1,19 @@
FROM registry.gitlab.gnome.org/gnome/mutter/master:v1
RUN dnf -y update && dnf -y upgrade && \
dnf install -y 'dnf-command(copr)' && \
dnf copr enable -y fmuellner/gnome-shell-ci && \
dnf builddep -y gnome-shell --setopt=install_weak_deps=False && \
# bt only exports HAVE_BLUETOOTH to js, rest are outdated build-requires
dnf remove -y gnome-bluetooth-libs-devel dbus-glib-devel \
upower-devel python3-devel && \
# We'll build mutter ourselves
dnf remove -y --noautoremove mutter mutter-devel && \
# Needed for tests
dnf install -y '*/xvfb-run' gdm-lib accountsservice-libs && \
dnf clean all && \
rm -rf /var/cache/dnf

44
NEWS
View File

@@ -1,47 +1,3 @@
3.33.3
======
* Prepare for optional X11 [Carlos; !378]
* Fix opening window menu [Marco; !557]
* Reload search providers when installed applications change [Cosimo; !562]
* Implement locate-pointer accessibility feature [Olivier; #981]
* Allow to disable window menus via session mode [Cosimo; !569]
* Implement mouse accessibility [Olivier; !474]
* Call GDM's RegisterSession() after startup [Iain; !570]
* Fix extended keys popups being hidden by on-screen keyboard [Marco; !583]
* Fix top bar being hidden by lock screen [Jonas; !571]
* Update theme to better match GTK's Adwaita [Frederik; #841]
* Set up GJS profiler when GJS_TRACE_FD is set [Christian; !573]
* Misc. bug fixes and cleanups [Jonas, Cosimo, Robert, Florian, Marco, Simon,
Laurent, Niels, Will; !551, !555, !464, #1333, !565, !572, !568, !558, #1205,
#1336, !579, !576, #1392, !582, !586, #1406, #1351]
Contributors:
Laurent Bigonville, Cosimo Cecchi, Piotr Drąg, Jonas Dreßler,
Frederik Feichtmeier, Olivier Fourdan, Carlos Garnacho, Niels De Graef,
Christian Hergert, Iain Lane, Robert Mader, Florian Müllner, Simon Schampijer,
Jakub Steiner, Will Thompson, Marco Trevisan (Treviño)
Translators:
Kukuh Syafaat [id], Balázs Meskó [hu], Daniel Mustieles [es],
Fabio Tomat [fur], Nathan Follens [nl], Goran Vidović [hr], Jordi Mas [ca]
3.33.2
======
* Fix keeping actors visible in scrollviews [Marco; #1061]
* Move some chrome above popup windows [Jonas D.; !358]
* Include 'sandboxed-app-id' in winodw introspection info [Florian; #1289]
* Port to libecal-2.0 [Milan; !501]
* Support TCRYPT in mount password dialog [segfault; !126]
* Misc. bug fixes and cleanups [Florian, Marco, Veerasamy; !517, #745, !499,
!510, !515, !546, !549]
Contributors:
Cosimo Cecchi, Milan Crha, Jonas Dreßler, Florian Müllner, segfault,
Veerasamy Sevagen, Marco Trevisan (Treviño)
Translators:
Daniel Mustieles [es]
3.33.1
======
* Refine the app menu [Florian; #968]

View File

@@ -20,16 +20,10 @@
<file>no-notifications.svg</file>
<file>noise-texture.png</file>
<file>pad-osd.css</file>
<file alias="icons/pointer-double-click-symbolic.svg">pointer-double-click-symbolic.svg</file>
<file alias="icons/pointer-drag-symbolic.svg">pointer-drag-symbolic.svg</file>
<file alias="icons/pointer-primary-click-symbolic.svg">pointer-primary-click-symbolic.svg</file>
<file alias="icons/pointer-secondary-click-symbolic.svg">pointer-secondary-click-symbolic.svg</file>
<file>process-working.svg</file>
<file>toggle-off.svg</file>
<file>toggle-off-dark.svg</file>
<file>toggle-off-intl.svg</file>
<file>toggle-off-hc.svg</file>
<file>toggle-on.svg</file>
<file>toggle-on-dark.svg</file>
<file>toggle-on-intl.svg</file>
<file>toggle-on-hc.svg</file>
</gresource>
</gresources>

View File

@@ -1,5 +1,3 @@
$variant: 'light';
@import "gnome-shell-sass/_high-contrast-colors"; //use gtk colors
@import "gnome-shell-sass/_drawing";
@import "gnome-shell-sass/_common";

View File

@@ -3,11 +3,11 @@
$base_color: if($variant == 'light', #ffffff, lighten(desaturate(#241f31, 20%), 2%));
$bg_color: if($variant == 'light', #f6f5f4, darken(desaturate(#3d3846, 100%), 4%));
$bg_color: if($variant == 'light', #f6f5f4, desaturate(#3d3846, 10%));
$fg_color: if($variant == 'light', #2e3436, #eeeeec);
$selected_fg_color: #ffffff;
$selected_bg_color: if($variant == 'light', #3584e4, darken(#3584e4, 10%));
$selected_bg_color: if($variant == 'light', #3584e4, darken(#3584e4, 20%));
$selected_borders_color: if($variant== 'light', darken($selected_bg_color, 15%), darken($selected_bg_color, 30%));
$borders_color: if($variant == 'light', darken($bg_color, 18%), darken($bg_color, 10%));
$borders_edge: if($variant == 'light', transparentize(white, 0.2), transparentize($fg_color, 0.93));
@@ -21,15 +21,11 @@ $success_color: if($variant == 'light', #33d17a, darken(#33d17a, 10%));
$destructive_color: if($variant == 'light', #e01b24, darken(#e01b24, 10%));
$osd_fg_color: #eeeeec;
$osd_text_color: white;
$osd_bg_color: transparentize(darken(desaturate(#3d3846, 100%), 12%),0.04);
$osd_insensitive_bg_color: transparentize(mix($osd_fg_color, opacify($osd_bg_color, 1), 10%), 0.5);
$osd_insensitive_fg_color: mix($osd_fg_color, opacify($osd_bg_color, 1), 50%);
$osd_bg_color: #2e3436;
$osd_borders_color: transparentize(black, 0.3);
$osd_outer_borders_color: transparentize(white, 0.84);
$osd_outer_borders_color: transparentize(white, 0.9);
$tooltip_borders_color: $osd_outer_borders_color;
$shadow_color: transparentize(black, 0.9);
//insensitive state derived colors
$insensitive_fg_color: mix($fg_color, $bg_color, 50%);

File diff suppressed because it is too large Load Diff

View File

@@ -37,13 +37,16 @@
// possible $t values:
// normal, focus, insensitive
//
$_inner_shadows: inset 0 2px 4px transparentize(black, 0.6);
@if $t==normal {
background-color: $base_color;
border-color: $borders_color;
@include _shadows($_inner_shadows);
}
@if $t==focus {
@include _shadows($_inner_shadows);
border-color: if($fc==$selected_bg_color,
$selected_borders_color,
darken($fc,35%));
@@ -108,7 +111,7 @@
}
}
@mixin button($t, $c:$bg_color, $tc:$fg_color, $edge: $borders_edge) {
@mixin button($t, $c:$osd_bg_color, $tc:$fg_color, $edge: $borders_edge) {
//
// Button drawing function
//
@@ -127,39 +130,46 @@
$_hilight_color: _button_hilight_color($c);
$_button_edge: if($edge == none, none, _widget_edge($edge));
$_blank_edge: if($edge == none, none, _widget_edge(transparentize($edge,1)));
$_button_shadow: 0 1px 2px transparentize($shadow_color, 0.03);
@if $t==normal {
//
// normal button
//
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.5),
$osd_bg_color);
color: $tc;
background-color: $c;
border-color: $borders_color;
box-shadow: $_button_shadow;
color: $osd_fg_color;
background-color: $_bg;
border-color: $osd_borders_color;
box-shadow: inset 0 1px lighten($osd_bg_color,10%);
text-shadow: 0 1px black;
icon-shadow: 0 1px black;
}
@if $t==focus {
//
// focused button
//
color: $tc;
//
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.3),
lighten($osd_bg_color,3%));
color: $osd_fg_color;
text-shadow: 0 1px black;
icon-shadow: 0 1px black;
box-shadow: inset 0px 0px 0px 2px $selected_bg_color;
//border-color: $selected_bg_color;
box-shadow: inset 0px 0px 0px 1px $selected_bg_color;
}
@else if $t==hover {
//
// active osd button
//
color: $tc;
border-color: $borders_color;
background-color: $c;
box-shadow: $_button_shadow;
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.3),
lighten($osd_bg_color,3%));
color: white;
border-color: $osd_borders_color;
background-color: $_bg;
box-shadow: inset 0 1px lighten($osd_bg_color,20%);
text-shadow: 0 1px black;
icon-shadow: 0 1px black;
@@ -168,18 +178,27 @@
//
// active osd button
//
color: $tc;
border-color: $borders_color;
background-color: $c;
$_bg: if($c!=$bg_color, $c, $osd_borders_color);
color: white;
border-color: $osd_borders_color;
background-color: $selected_bg_color;
// This should be none, but it's creating some issues with borders, so to
// workaround it for now, use inset wich goes through a different code path.
// see https://bugzilla.gnome.org/show_bug.cgi?id=752934
box-shadow: inset 0 0 black;
text-shadow: none;
icon-shadow: none;
box-shadow: none;
}
@else if $t==insensitive {
//
// insensitive osd button
//
$_bg: transparentize(mix($insensitive_fg_color,$osd_bg_color,20%),0.3);
color: $insensitive_fg_color;
border-color: $insensitive_borders_color;
background-color: $insensitive_bg_color;
border-color: $osd_borders_color;
background-color: $_bg;
box-shadow: none;
text-shadow: none;
icon-shadow: none;

View File

@@ -26,7 +26,6 @@ $osd_borders_color: transparentize(black, 0.3);
$osd_outer_borders_color: transparentize(white, 0.9);
$tooltip_borders_color: $osd_outer_borders_color;
$shadow_color: transparentize(black, 0.9);
//insensitive state derived colors
$insensitive_fg_color: mix($fg_color, $bg_color, 50%);

View File

@@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="20"
height="20"
id="svg2">
<g
id="layer1"
style="display:inline">
<g
id="id1"
transform="translate(-19,-0.75)">
<path
style="color:#000000;shape-padding:0;clip-rule:nonzero;display:block;overflow:visible;visibility:visible;opacity:1;solid-color:#000000;solid-opacity:1;fill:#464646;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 19.855469,0.45507812 c 0,6.69466128 0,13.38932288 0,20.08398388 1.414713,-1.38151 2.829427,-2.763021 4.24414,-4.144531 0.5882,1.18866 1.158389,2.386561 1.758464,3.569127 1.108631,1.640259 4.157538,0.465128 3.89799,-1.495859 0.01057,-0.470226 -0.405577,-0.908445 -0.434651,-1.313638 0.259401,-0.25321 0.518802,-0.50642 0.778203,-0.75963 0.5882,1.18866 1.158389,2.386561 1.758464,3.569127 1.108631,1.640259 4.157538,0.465128 3.89799,-1.495859 -0.192325,-0.904303 -0.717854,-1.698026 -1.068629,-2.548967 -0.238908,-0.512658 -0.477817,-1.025315 -0.716725,-1.537973 1.755859,0 3.511719,0 5.267578,0 C 34.777352,9.738932 30.31641,5.0970051 25.855469,0.45507812 c 0,2.08138018 0,4.16276048 0,6.24414068 -2,-2.0813802 -4,-4.1627605 -6,-6.24414068 z m 1.5,3.72656248 c 2,2.0813801 4,4.1627603 6,6.2441404 0,-2.0813801 0,-4.1627603 0,-6.2441404 2.786458,2.8997395 5.572917,5.7994789 8.359375,8.6992184 -1.366537,0 -2.733073,0 -4.09961,0 0.883468,1.903435 1.781983,3.800273 2.656081,5.707817 0.0065,0.622781 -1.227555,0.980575 -1.325116,0.207118 -0.80433,-1.640251 -1.608661,-3.280501 -2.412991,-4.920752 -1.020182,0.995443 -2.040365,1.990885 -3.060547,2.986328 0.263642,0.608048 0.596803,1.192457 0.814693,1.816134 -0.182662,0.601037 -1.26833,0.8373 -1.365856,0.06795 -0.796094,-1.623456 -1.592189,-3.246912 -2.388284,-4.870368 -1.059245,1.033854 -2.118489,2.067708 -3.177734,3.101562 -4e-6,-4.265002 -7e-6,-8.5300036 -1.1e-5,-12.7950054 z"
id="path5565" />
</g>
<g
id="id2"
transform="translate(-25,-0.75)" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -1,20 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="20"
height="20"
id="svg2">
<g
id="g835">
<path
style="color:#000000;shape-padding:0;clip-rule:nonzero;display:block;overflow:visible;visibility:visible;opacity:1;solid-color:#000000;solid-opacity:1;fill:#464646;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="M 10.705078 1.671875 C 9.8685536 1.7465699 8.886927 1.5353073 8.2578125 2.2480469 C 8.0785627 2.7511513 7.8667422 2.9777446 7.3125 2.8652344 C 6.5186841 2.8141575 5.6105879 2.9190179 5.125 3.6386719 C 4.5700923 4.4696324 4.8113194 5.4949043 4.7578125 6.4316406 L 4.7578125 7.9335938 C 4.2480917 7.6156216 3.6258927 7.8015358 3.0585938 7.7519531 C 2.6157606 7.7312277 2.1774807 7.7771069 1.7402344 7.84375 C 1.7971654 10.529678 1.813967 13.217089 1.8613281 15.902344 C 1.9550191 17.204635 3.0933719 18.307155 4.40625 18.326172 C 5.0391993 18.341272 5.8885801 18.332951 6.6308594 18.337891 C 9.8526764 18.325821 13.076973 18.38774 16.296875 18.28125 C 17.459088 18.161027 18.510143 17.092798 18.367188 15.884766 L 18.367188 6.4042969 C 17.660379 5.4636119 16.551912 4.623434 15.308594 4.8339844 C 15.009045 4.3804158 14.822476 3.3608651 14.082031 3.0351562 C 13.727176 2.744118 13.242443 2.9253873 12.822266 2.8730469 C 12.524824 2.8003648 11.966366 3.0655864 11.953125 2.6210938 C 11.795774 2.0995736 11.23789 1.7125276 10.705078 1.671875 z M 10.599609 3.1757812 C 10.764131 3.4472414 10.782382 3.9294982 10.818359 4.3007812 C 10.824915 4.3076775 10.838155 4.3066925 10.845703 4.3125 C 10.836598 4.3123268 10.827465 4.3126732 10.818359 4.3125 L 11.3125 10.212891 L 11.976562 4.3710938 L 13.322266 4.375 C 13.858345 4.7645492 13.735252 5.5154752 13.876953 6.0976562 C 13.865826 6.1651282 13.88335 6.1937019 13.892578 6.234375 C 13.891928 6.2343667 13.891276 6.2343833 13.890625 6.234375 L 13.902344 6.3203125 L 14.384766 10.185547 L 15.048828 6.265625 C 15.622863 6.228498 16.206517 6.3041365 16.607422 6.7675781 C 17.017062 6.9844433 16.823063 7.4565491 16.867188 7.8261719 L 16.867188 16.167969 C 16.530129 17.131654 15.267211 16.71624 14.492188 16.828125 C 11.121671 16.841205 7.7500508 16.861953 4.3808594 16.814453 C 3.4051926 16.786173 3.2389196 15.744474 3.3398438 14.972656 C 3.3282027 13.065594 3.2950998 11.158732 3.2617188 9.2519531 C 3.5880829 9.2584131 3.9376766 9.2391948 4.25 9.2617188 C 4.7438842 10.17694 4.7346154 11.262903 4.7578125 12.277344 C 5.2504494 12.270544 5.8011939 12.317174 6.2578125 12.277344 C 6.2669593 9.7577406 6.2393741 7.2373172 6.2714844 4.71875 C 6.3763823 4.198849 7.0022289 4.409587 7.3828125 4.3652344 L 8.0585938 4.3652344 L 8.546875 10.212891 L 9.2167969 4.3359375 L 9.2128906 4.3359375 C 9.2438386 3.9531035 9.0622615 3.4401006 9.4609375 3.2167969 L 10.599609 3.1757812 z "
id="path5630" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="20"
height="20"
id="svg2"
version="1.1">
<g
id="layer1"
style="display:inline">
<g
id="id1"
transform="translate(-22.25,-0.75)">
<path
style="color:#000000;shape-padding:0;clip-rule:nonzero;display:block;overflow:visible;visibility:visible;opacity:1;solid-color:#000000;solid-opacity:1;fill:#464646;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 25.855469,0.45507812 c 0,6.69466128 0,13.38932288 0,20.08398388 1.414713,-1.380859 2.829427,-2.761719 4.24414,-4.142578 0.612408,1.215372 1.173049,2.460221 1.819709,3.656095 1.141947,1.476279 3.975266,0.389006 3.846009,-1.473608 -0.09413,-0.822519 -0.594755,-1.521423 -0.899969,-2.277599 -0.298869,-0.640171 -0.597739,-1.280342 -0.896608,-1.920513 1.75651,0 3.513021,0 5.269531,0 C 34.777344,9.738932 30.316406,5.0970051 25.855469,0.45507812 Z m 1.5,3.72656248 c 2.786458,2.8997395 5.572917,5.7994789 8.359375,8.6992184 -1.367188,0 -2.734375,0 -4.101563,0 0.885072,1.903196 1.781799,3.80152 2.659622,5.707744 0.0349,0.566084 -1.149057,0.988823 -1.282093,0.297971 -0.818567,-1.671162 -1.637133,-3.342323 -2.455699,-5.013485 -1.059896,1.034505 -2.119791,2.06901 -3.179687,3.103515 1.5e-5,-4.264988 3e-5,-8.5299756 4.5e-5,-12.7949634 z"
id="path5565" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="20"
height="20"
id="svg2">
<g
id="layer1"
style="display:inline;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none;stroke:#000000;stroke-opacity:1">
<g
transform="matrix(-1,0,0,1,42,-0.75)"
id="g5847"
style="stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none;stroke:#000000;stroke-opacity:1">
<path
style="color:#000000;shape-padding:0;clip-rule:nonzero;display:block;overflow:visible;visibility:visible;opacity:1;solid-color:#000000;solid-opacity:1;fill:#464646;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 25.855469,0.45507812 c 0,6.69466128 0,13.38932288 0,20.08398388 1.414713,-1.380859 2.829427,-2.761719 4.24414,-4.142578 0.612408,1.215372 1.173049,2.460221 1.819709,3.656095 1.141947,1.476279 3.975266,0.389006 3.846009,-1.473608 -0.09413,-0.822519 -0.594755,-1.521423 -0.899969,-2.277599 -0.298869,-0.640171 -0.597739,-1.280342 -0.896608,-1.920513 1.75651,0 3.513021,0 5.269531,0 C 34.777344,9.738932 30.316406,5.0970051 25.855469,0.45507812 Z m 1.5,3.72656248 c 2.786458,2.8997395 5.572917,5.7994789 8.359375,8.6992184 -1.367188,0 -2.734375,0 -4.101563,0 0.885072,1.903196 1.781799,3.80152 2.659622,5.707744 0.0349,0.566084 -1.149057,0.988823 -1.282093,0.297971 -0.818567,-1.671162 -1.637133,-3.342323 -2.455699,-5.013485 -1.059896,1.034505 -2.119791,2.06901 -3.179687,3.103515 1.5e-5,-4.264988 3e-5,-8.5299756 4.5e-5,-12.7949634 z"
id="path5851" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="46" height="22"><defs><linearGradient id="a"><stop offset="0" stop-color="#39393a"/><stop offset="1" stop-color="#302f30"/></linearGradient><linearGradient xlink:href="#a" id="b" x1="53" y1="294.429" x2="53" y2="309.804" gradientUnits="userSpaceOnUse" gradientTransform="translate(-42.76)"/></defs><g transform="translate(0 -291.18)" stroke-width="1.085"><rect style="marker:none" width="44.446" height="20.911" x=".625" y="291.715" rx="10.455" ry="10.073" fill="#323233" stroke="#272728"/><rect ry="10.455" rx="10.455" y="291.715" x=".543" height="20.911" width="21.143" style="marker:none" fill="url(#b)" stroke="#151515"/></g></svg>

Before

Width:  |  Height:  |  Size: 725 B

View File

@@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="46"
height="22"
viewBox="0 0 46 22"
version="1.1"
id="svg2751"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
sodipodi:docname="toggle-off-intl.svg">
<defs
id="defs2745">
<linearGradient
inkscape:collect="always"
id="linearGradient3329">
<stop
style="stop-color:#39393a;stop-opacity:1;"
offset="0"
id="stop3325" />
<stop
style="stop-color:#302f30;stop-opacity:1"
offset="1"
id="stop3327" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3329"
id="linearGradient3331"
x1="53"
y1="294.42917"
x2="53"
y2="309.80417"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-42.760724)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#535353"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="-19.436775"
inkscape:cy="-13.499723"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
borderlayer="true"
inkscape:showpageshadow="false"
showborder="false">
<inkscape:grid
type="xygrid"
id="grid3298" />
</sodipodi:namedview>
<metadata
id="metadata2748">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-291.17916)">
<rect
style="opacity:1;vector-effect:none;fill:#323233;fill-opacity:1;stroke:#272728;stroke-width:1.08532763;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
id="rect3296"
width="44.446434"
height="20.910645"
x="0.625"
y="291.71494"
rx="10.455324"
ry="10.073335" />
<rect
ry="10.455322"
rx="10.455322"
y="291.71494"
x="0.5428465"
height="20.910645"
width="21.142862"
id="rect3300"
style="opacity:1;vector-effect:none;fill:url(#linearGradient3331);fill-opacity:1;stroke:#151515;stroke-width:1.08532763;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="46" height="22"><g transform="translate(0 -291.18)"><rect style="marker:none;font-variant-east_asian:normal" width="44.446" height="20.911" x=".625" y="291.715" rx="10.455" ry="10.073" fill="#e1dedb" stroke="#cdc7c2" stroke-linecap="round" stroke-linejoin="round"/><rect ry="10.455" rx="10.455" y="291.715" x=".543" height="20.911" width="21.143" style="marker:none;font-variant-east_asian:normal" fill="#f8f7f7" stroke="#aa9f98" stroke-linecap="round" stroke-linejoin="round"/><g transform="matrix(.97148 0 0 1 1658.914 -2552.91)" stroke-width="1.015" stroke-linecap="round" stroke-linejoin="round"><rect ry="13.17" rx="13.556" y="1234.681" x="-1242.732" height="26" width="49.409" style="marker:none" fill="#e1dedb" stroke="#cdc7c2"/><rect style="marker:none" width="26.763" height="26" x="-1242.732" y="1234.769" rx="13.511" ry="13.126" fill="#f8f7f7" stroke="#aa9f98"/></g><g transform="matrix(.97148 0 0 1 1658.914 -2512.91)" stroke-width="1.015" stroke="#2b73cc"><rect style="marker:none" width="49.409" height="26" x="-1242.732" y="1234.681" rx="13.556" ry="13.17" fill="#3081e3"/><rect ry="13.126" rx="13.511" y="1234.769" x="-1220.086" height="26" width="26.763" style="marker:none" fill="#f8f7f7" stroke-linecap="round" stroke-linejoin="round"/></g></g></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="46" height="22"><defs><linearGradient id="a"><stop offset="0" stop-color="#39393a"/><stop offset="1" stop-color="#302f30"/></linearGradient><linearGradient xlink:href="#a" id="b" x1="53" y1="294.429" x2="53" y2="309.804" gradientUnits="userSpaceOnUse" gradientTransform="translate(-19)"/></defs><g transform="translate(0 -291.18)" stroke="#030e1b" stroke-width="1.085"><rect style="marker:none" width="44.446" height="20.911" x=".625" y="291.715" rx="10.455" ry="10.073" fill="#15539e"/><rect ry="10.455" rx="10.455" y="291.715" x="24.304" height="20.911" width="21.143" style="marker:none" fill="url(#b)"/></g></svg>

Before

Width:  |  Height:  |  Size: 707 B

View File

@@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="46"
height="22"
viewBox="0 0 46 22"
version="1.1"
id="svg2751"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
sodipodi:docname="toggle-on-intl.svg">
<defs
id="defs2745">
<linearGradient
inkscape:collect="always"
id="linearGradient3329">
<stop
style="stop-color:#39393a;stop-opacity:1;"
offset="0"
id="stop3325" />
<stop
style="stop-color:#302f30;stop-opacity:1"
offset="1"
id="stop3327" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3329"
id="linearGradient3331"
x1="53"
y1="294.42917"
x2="53"
y2="309.80417"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-19)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#535353"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="13.588971"
inkscape:cy="14.124546"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:pagecheckerboard="true"
borderlayer="true"
inkscape:showpageshadow="false"
showborder="false">
<inkscape:grid
type="xygrid"
id="grid3298" />
</sodipodi:namedview>
<metadata
id="metadata2748">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-291.17916)">
<rect
style="opacity:1;vector-effect:none;fill:#15539e;fill-opacity:1;stroke:#030e1b;stroke-width:1.08532763;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
id="rect3296"
width="44.446434"
height="20.910645"
x="0.625"
y="291.71494"
rx="10.455324"
ry="10.073335" />
<rect
ry="10.455322"
rx="10.455322"
y="291.71494"
x="24.30357"
height="20.910645"
width="21.142862"
id="rect3300"
style="opacity:1;vector-effect:none;fill:url(#linearGradient3331);fill-opacity:1;stroke:#030e1b;stroke-width:1.08532763;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="46" height="22"><g transform="translate(0 -291.18)" stroke="#2b73cc"><rect style="marker:none;font-variant-east_asian:normal" width="44.446" height="20.911" x=".625" y="291.715" rx="10.455" ry="10.073" fill="#3081e3"/><rect ry="10.455" rx="10.455" y="291.715" x="24.304" height="20.911" width="21.143" style="marker:none;font-variant-east_asian:normal" fill="#f8f7f7" stroke-linecap="round" stroke-linejoin="round"/></g></svg>

Before

Width:  |  Height:  |  Size: 473 B

View File

@@ -124,7 +124,7 @@ var Batch = class extends Task {
}
process() {
throw new GObject.NotImplementedError(`process in ${this.constructor.name}`);
throw new Error('Not implemented');
}
runTask() {

View File

@@ -64,7 +64,6 @@
<file>ui/keyboard.js</file>
<file>ui/layout.js</file>
<file>ui/lightbox.js</file>
<file>ui/locatePointer.js</file>
<file>ui/lookingGlass.js</file>
<file>ui/magnifier.js</file>
<file>ui/magnifierDBus.js</file>
@@ -82,11 +81,9 @@
<file>ui/pageIndicators.js</file>
<file>ui/panel.js</file>
<file>ui/panelMenu.js</file>
<file>ui/pointerA11yTimeout.js</file>
<file>ui/pointerWatcher.js</file>
<file>ui/popupMenu.js</file>
<file>ui/remoteSearch.js</file>
<file>ui/ripples.js</file>
<file>ui/runDialog.js</file>
<file>ui/screenShield.js</file>
<file>ui/screencast.js</file>
@@ -123,7 +120,6 @@
<file>ui/status/accessibility.js</file>
<file>ui/status/brightness.js</file>
<file>ui/status/dwellClick.js</file>
<file>ui/status/location.js</file>
<file>ui/status/keyboard.js</file>
<file>ui/status/nightLight.js</file>

View File

@@ -42,6 +42,8 @@ var IntrospectService = class {
}
_isStandaloneApp(app) {
let windows = app.get_windows();
return app.get_windows().some(w => w.transient_for == null);
}
@@ -53,11 +55,6 @@ var IntrospectService = class {
return APP_WHITELIST.includes(sender);
}
_getSandboxedAppId(app) {
let ids = app.get_windows().map(w => w.get_sandboxed_app_id());
return ids.find(id => id != null);
}
_syncRunningApplications() {
let tracker = Shell.WindowTracker.get_default();
let apps = this._appSystem.get_running();
@@ -79,10 +76,6 @@ var IntrospectService = class {
newActiveApplication = app.get_id();
}
let sandboxedAppId = this._getSandboxedAppId(app);
if (sandboxedAppId)
appInfo['sandboxed-app-id'] = new GLib.Variant('s', sandboxedAppId);
newRunningApplications[app.get_id()] = appInfo;
}
@@ -144,7 +137,6 @@ var IntrospectService = class {
let frameRect = window.get_frame_rect();
let title = window.get_title();
let wmClass = window.get_wm_class();
let sandboxedAppId = window.get_sandboxed_app_id();
windowsList[windowId] = {
'app-id': GLib.Variant.new('s', app.get_id()),
@@ -161,10 +153,6 @@ var IntrospectService = class {
if (wmClass != null)
windowsList[windowId]['wm-class'] = GLib.Variant.new('s', wmClass);
if (sandboxedAppId != null)
windowsList[windowId]['sandboxed-app-id'] =
GLib.Variant.new('s', sandboxedAppId);
}
}
invocation.return_value(new GLib.Variant('(a{ta{sv}})', [windowsList]));

View File

@@ -48,28 +48,6 @@ function canLock() {
}
}
function registerSessionWithGDM() {
log("Registering session with GDM");
Gio.DBus.system.call('org.gnome.DisplayManager',
'/org/gnome/DisplayManager/Manager',
'org.gnome.DisplayManager.Manager',
'RegisterSession',
GLib.Variant.new('(a{sv})', [{}]), null,
Gio.DBusCallFlags.NONE, -1, null,
(source, result) => {
try {
source.call_finish(result);
} catch (e) {
if (!e.matches(Gio.DBusError, Gio.DBusError.UNKNOWN_METHOD))
log(`Error registering session with GDM: ${e.message}`);
else
log("Not calling RegisterSession(): method not exported, GDM too old?");
}
}
);
}
let _loginManager = null;
/**

View File

@@ -71,7 +71,7 @@ function _findProviderForMccMnc(operator_name, operator_code) {
// Tries to find the operator name corresponding to the given SID
//
function _findProviderForSid(sid) {
if (!sid)
if (sid == 0)
return null;
let mpd = _getMobileProvidersDatabase();

View File

@@ -1,4 +1,4 @@
const { Clutter, Gio, GLib, GObject, Shell } = imports.gi;
const { Clutter, Gio, GLib, Shell } = imports.gi;
const CheckBox = imports.ui.checkBox;
const Dialog = imports.ui.dialog;
@@ -15,10 +15,9 @@ var DialogResponse = {
CLOSED: 2
};
var AccessDialog = GObject.registerClass(
class AccessDialog extends ModalDialog.ModalDialog {
_init(invocation, handle, title, subtitle, body, options) {
super._init({ styleClass: 'access-dialog' });
var AccessDialog = class extends ModalDialog.ModalDialog {
constructor(invocation, handle, title, subtitle, body, options) {
super({ styleClass: 'access-dialog' });
this._invocation = invocation;
this._handle = handle;
@@ -110,7 +109,7 @@ class AccessDialog extends ModalDialog.ModalDialog {
});
this.close();
}
});
};
var AccessDialogDBus = class {
constructor() {

View File

@@ -632,9 +632,9 @@ var AllView = class AllView extends BaseAppView {
this._scrollView.get_effect('fade').fade_edges = true;
if (this._availWidth != availWidth || this._availHeight != availHeight || oldNPages != this._grid.nPages()) {
this._adjustment.value = 0;
this._grid.currentPage = 0;
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
this._adjustment.value = 0;
this._grid.currentPage = 0;
this._pageIndicators.setNPages(this._grid.nPages());
this._pageIndicators.setCurrentPage(0);
});

View File

@@ -1,4 +1,4 @@
const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
const { Clutter, Gio, GLib, Meta, Shell, St } = imports.gi;
const Main = imports.ui.main;
const ModalDialog = imports.ui.modalDialog;
@@ -13,11 +13,10 @@ var AudioDevice = {
const AudioDeviceSelectionIface = loadInterfaceXML('org.gnome.Shell.AudioDeviceSelection');
var AudioDeviceSelectionDialog = GObject.registerClass({
Signals: { 'device-selected': { param_types: [GObject.TYPE_UINT] } }
}, class AudioDeviceSelectionDialog extends ModalDialog.ModalDialog {
_init(devices) {
super._init({ styleClass: 'audio-device-selection-dialog' });
var AudioDeviceSelectionDialog =
class AudioDeviceSelectionDialog extends ModalDialog.ModalDialog {
constructor(devices) {
super({ styleClass: 'audio-device-selection-dialog' });
this._deviceItems = {};
@@ -34,6 +33,10 @@ var AudioDeviceSelectionDialog = GObject.registerClass({
throw new Error('Too few devices for a selection');
}
destroy() {
super.destroy();
}
_buildLayout(devices) {
let title = new St.Label({ style_class: 'audio-selection-title',
text: _("Select Audio Device"),
@@ -122,7 +125,7 @@ var AudioDeviceSelectionDialog = GObject.registerClass({
Main.overview.hide();
app.activate();
}
});
};
var AudioDeviceSelectionDBus = class AudioDeviceSelectionDBus {
constructor() {

View File

@@ -257,15 +257,14 @@ var Background = class Background {
this._refreshAnimation();
});
this._settingsChangedSignalId =
this._settings.connect('changed', this._emitChangedSignal.bind(this));
this._settingsChangedSignalId = this._settings.connect('changed', () => {
this.emit('changed');
});
this._load();
}
destroy() {
this.background = null;
this._cancellable.cancel();
this._removeAnimationTimeout();
@@ -289,22 +288,6 @@ var Background = class Background {
if (this._settingsChangedSignalId != 0)
this._settings.disconnect(this._settingsChangedSignalId);
this._settingsChangedSignalId = 0;
if (this._changedIdleId) {
GLib.source_remove(this._changedIdleId);
this._changedIdleId = 0;
}
}
_emitChangedSignal() {
if (this._changedIdleId)
return;
this._changedIdleId = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
this._changedIdleId = 0;
this.emit('changed');
return GLib.SOURCE_REMOVE;
});
}
updateResolution() {
@@ -360,7 +343,7 @@ var Background = class Background {
if (changedFile.equal(file)) {
let imageCache = Meta.BackgroundImageCache.get_default();
imageCache.purge(changedFile);
this._emitChangedSignal();
this.emit('changed');
}
});
this._fileWatches[key] = signalId;
@@ -716,6 +699,7 @@ var BackgroundManager = class BackgroundManager {
time: FADE_ANIMATION_TIME,
transition: 'easeOutQuad',
onComplete() {
oldBackgroundActor.background.run_dispose();
oldBackgroundActor.destroy();
}
});

View File

@@ -48,15 +48,6 @@ var BoxPointer = GObject.registerClass({
this._sourceAlignment = 0.5;
this._capturedEventId = 0;
this._muteInput();
this.connect('destroy', this._onDestroy.bind(this));
}
_onDestroy() {
if (this._sourceActorDestroyId) {
this._sourceActor.disconnect(this._sourceActorDestroyId);
delete this._sourceActorDestroyId;
}
}
get arrowSide() {
@@ -76,6 +67,36 @@ var BoxPointer = GObject.registerClass({
}
}
// BoxPointer.show() and BoxPointer.hide() are here for only compatibility
// purposes, and will be removed in 3.32.
show(animate, onComplete) {
if (animate !== undefined) {
try {
throw new Error('BoxPointer.show() has been moved to BoxPointer.open(), this code will break in the future.');
} catch(e) {
logError(e);
this.open(animate, onComplete);
return;
}
}
this.visible = true;
}
hide(animate, onComplete) {
if (animate !== undefined) {
try {
throw new Error('BoxPointer.hide() has been moved to BoxPointer.close(), this code will break in the future.');
} catch(e) {
logError(e);
this.close(animate, onComplete);
return;
}
}
this.visible = false;
}
open(animate, onComplete) {
let themeNode = this.get_theme_node();
let rise = themeNode.get_length('-arrow-rise');
@@ -204,10 +225,13 @@ var BoxPointer = GObject.registerClass({
this.set_allocation(box, flags);
let themeNode = this.get_theme_node();
box = themeNode.get_content_box(box);
let borderWidth = themeNode.get_length('-arrow-border-width');
let rise = themeNode.get_length('-arrow-rise');
let childBox = new Clutter.ActorBox();
let [availWidth, availHeight] = themeNode.get_content_box(box).get_size();
let availWidth = box.x2 - box.x1;
let availHeight = box.y2 - box.y1;
childBox.x1 = 0;
childBox.y1 = 0;
@@ -236,9 +260,8 @@ var BoxPointer = GObject.registerClass({
this.bin.allocate(childBox, flags);
if (this._sourceActor && this._sourceActor.mapped) {
this._reposition(box);
this._updateFlip(box);
this.set_allocation(box, flags);
this._reposition();
this._updateFlip();
}
}
@@ -425,25 +448,15 @@ var BoxPointer = GObject.registerClass({
}
setPosition(sourceActor, alignment) {
if (!this._sourceActor || sourceActor != this._sourceActor) {
if (this._sourceActorDestroyId) {
this._sourceActor.disconnect(this._sourceActorDestroyId);
delete this._sourceActorDestroyId;
}
this._sourceActor = sourceActor;
if (this._sourceActor) {
this._sourceActorDestroyId = this._sourceActor.connect('destroy', () => {
this._sourceActor = null;
delete this._sourceActorDestroyId;
})
}
}
// We need to show it now to force an allocation,
// so that we can query the correct size.
this.show();
this._sourceActor = sourceActor;
this._arrowAlignment = alignment;
this.queue_relayout();
this._reposition();
this._updateFlip();
}
setSourceAlignment(alignment) {
@@ -455,7 +468,7 @@ var BoxPointer = GObject.registerClass({
this.setPosition(this._sourceActor, this._arrowAlignment);
}
_reposition(allocationBox) {
_reposition() {
let sourceActor = this._sourceActor;
let alignment = this._arrowAlignment;
let monitorIndex = Main.layoutManager.findIndexForActor(sourceActor);
@@ -569,7 +582,8 @@ var BoxPointer = GObject.registerClass({
}
// Actually set the position
allocationBox.set_origin(Math.floor(x), Math.floor(y));
this.x = Math.floor(x);
this.y = Math.floor(y);
}
// @origin: Coordinate specifying middle of the arrow, along
@@ -623,11 +637,15 @@ var BoxPointer = GObject.registerClass({
return arrowSide;
}
_updateFlip(allocationBox) {
_updateFlip() {
let arrowSide = this._calculateArrowSide(this._userArrowSide);
if (this._arrowSide != arrowSide) {
this._arrowSide = arrowSide;
this._reposition(allocationBox);
this._reposition();
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
this.queue_relayout();
return false;
});
this.emit('arrow-side-changed');
}

View File

@@ -5,7 +5,6 @@ const Mainloop = imports.mainloop;
const Params = imports.misc.params;
const GnomeSession = imports.misc.gnomeSession;
const Main = imports.ui.main;
const ShellMountOperation = imports.ui.shellMountOperation;
var GNOME_SESSION_AUTOMOUNT_INHIBIT = 16;
@@ -200,20 +199,12 @@ var AutomountManager = class {
// error strings are not unique for the cases in the comments below.
if (e.message.includes('No key available with this passphrase') || // cryptsetup
e.message.includes('No key available to unlock device') || // udisks (no password)
// libblockdev wrong password opening LUKS device
e.message.includes('Failed to activate device: Incorrect passphrase') ||
// cryptsetup returns EINVAL in many cases, including wrong TCRYPT password/parameters
e.message.includes('Failed to load device\'s parameters: Invalid argument')) {
e.message.includes('Error unlocking')) { // udisks (wrong password)
this._reaskPassword(volume);
} else {
if (e.message.includes('Compiled against a version of libcryptsetup that does not support the VeraCrypt PIM setting')) {
Main.notifyError(_("Unable to unlock volume"),
_("The installed udisks version does not support the PIM setting"));
}
if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.FAILED_HANDLED))
log('Unable to mount volume ' + volume.get_name() + ': ' + e.toString());
this._closeOperation(volume);
}
}

View File

@@ -10,10 +10,9 @@ const CheckBox = imports.ui.checkBox;
var WORK_SPINNER_ICON_SIZE = 16;
var KeyringDialog = GObject.registerClass(
class KeyringDialog extends ModalDialog.ModalDialog {
_init() {
super._init({ styleClass: 'prompt-dialog' });
var KeyringDialog = class extends ModalDialog.ModalDialog {
constructor() {
super({ styleClass: 'prompt-dialog' });
this.prompt = new Shell.KeyringPrompt();
this.prompt.connect('show-password', this._onShowPassword.bind(this));
@@ -213,7 +212,7 @@ class KeyringDialog extends ModalDialog.ModalDialog {
_onCancelButton() {
this.prompt.cancel();
}
});
};
var KeyringDummyDialog = class {
constructor() {

View File

@@ -1,6 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const { Clutter, Gio, GLib, GObject, NM, Pango, Shell, St } = imports.gi;
const { Clutter, Gio, GLib, NM, Pango, Shell, St } = imports.gi;
const Signals = imports.signals;
const Config = imports.misc.config;
@@ -12,10 +12,9 @@ const ShellEntry = imports.ui.shellEntry;
const VPN_UI_GROUP = 'VPN Plugin UI';
var NetworkSecretDialog = GObject.registerClass(
class NetworkSecretDialog extends ModalDialog.ModalDialog {
_init(agent, requestId, connection, settingName, hints, flags, contentOverride) {
super._init({ styleClass: 'prompt-dialog' });
var NetworkSecretDialog = class extends ModalDialog.ModalDialog {
constructor(agent, requestId, connection, settingName, hints, flags, contentOverride) {
super({ styleClass: 'prompt-dialog' });
this._agent = agent;
this._requestId = requestId;
@@ -348,7 +347,7 @@ class NetworkSecretDialog extends ModalDialog.ModalDialog {
return content;
}
});
};
var VPNRequestHandler = class {
constructor(agent, requestId, authHelper, serviceType, connection, hints, flags) {

View File

@@ -1,7 +1,7 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const { AccountsService, Clutter, Gio, GLib,
GObject, Pango, PolkitAgent, Polkit, Shell, St } = imports.gi;
Pango, PolkitAgent, Polkit, Shell, St } = imports.gi;
const Signals = imports.signals;
const Animation = imports.ui.animation;
@@ -15,11 +15,9 @@ var DIALOG_ICON_SIZE = 48;
var WORK_SPINNER_ICON_SIZE = 16;
var AuthenticationDialog = GObject.registerClass({
Signals: { 'done': { param_types: [GObject.TYPE_BOOLEAN] } }
}, class AuthenticationDialog extends ModalDialog.ModalDialog {
_init(actionId, body, cookie, userNames) {
super._init({ styleClass: 'prompt-dialog' });
var AuthenticationDialog = class extends ModalDialog.ModalDialog {
constructor(actionId, body, cookie, userNames) {
super({ styleClass: 'prompt-dialog' });
this.actionId = actionId;
this.message = body;
@@ -27,7 +25,7 @@ var AuthenticationDialog = GObject.registerClass({
this._wasDismissed = false;
this._sessionUpdatedId = Main.sessionMode.connect('updated', () => {
this.visible = !Main.sessionMode.isLocked;
this._group.visible = !Main.sessionMode.isLocked;
});
this.connect('closed', this._onDialogClosed.bind(this));
@@ -328,7 +326,8 @@ var AuthenticationDialog = GObject.registerClass({
this._destroySession();
}
});
};
Signals.addSignalMethods(AuthenticationDialog.prototype);
var AuthenticationAgent = class {
constructor() {

View File

@@ -19,7 +19,7 @@
const Mainloop = imports.mainloop;
const { AccountsService, Clutter, Gio,
GLib, GObject, Pango, Polkit, Shell, St } = imports.gi;
GLib, Pango, Polkit, Shell, St } = imports.gi;
const CheckBox = imports.ui.checkBox;
const GnomeSession = imports.misc.gnomeSession;
@@ -226,11 +226,10 @@ function init() {
_endSessionDialog = new EndSessionDialog();
}
var EndSessionDialog = GObject.registerClass(
class EndSessionDialog extends ModalDialog.ModalDialog {
_init() {
super._init({ styleClass: 'end-session-dialog',
destroyOnClose: false });
var EndSessionDialog = class EndSessionDialog extends ModalDialog.ModalDialog {
constructor() {
super({ styleClass: 'end-session-dialog',
destroyOnClose: false });
this._loginManager = LoginManager.getLoginManager();
this._userManager = AccountsService.UserManager.get_default();
@@ -748,4 +747,4 @@ class EndSessionDialog extends ModalDialog.ModalDialog {
Close(parameters, invocation) {
this.close();
}
});
};

View File

@@ -57,6 +57,60 @@ function _patchLayoutClass(layoutClass, styleProps) {
};
}
function _adjustEasingTime(msecs) {
if (!St.Settings.get().enable_animations)
return 1;
return St.get_slow_down_factor() * msecs;
}
function _easeActor(actor, props, easingParams) {
let { duration, delay, mode,
onStopped, onUpdate, onComplete } = easingParams;
let animatedProps = Object.keys(props).map(p => p.replace('_', '-', 'g'));
actor.save_easing_state();
if (duration)
actor.set_easing_duration(duration);
if (delay)
actor.set_easing_delay(delay);
if (mode)
actor.set_easing_mode(mode);
actor.set(props);
if (onUpdate || onComplete || onStopped) {
let transition = actor.get_transition(animatedProps[0]);
if (transition) {
let updateId = 0;
if (onUpdate)
updateId = transition.connect('new-frame', onUpdate);
let id = transition.connect('stopped', isFinished => {
if (updateId != 0)
transition.disconnect(updateId);
transition.disconnect(id);
if (onComplete)
onComplete();
if (onStopped)
onStopped(isFinished);
});
} else {
if (onComplete)
onComplete();
if (onStopped)
onStopped(true);
}
}
actor.restore_easing_state();
}
function _loggingFunc() {
let fields = {'MESSAGE': [].join.call(arguments, ', ')};
let domain = "GNOME Shell";
@@ -93,6 +147,19 @@ function init() {
column_spacing: 'spacing-columns' });
_patchLayoutClass(Clutter.BoxLayout, { spacing: 'spacing' });
let origSetEasingDuration = Clutter.Actor.prototype.set_easing_duration;
Clutter.Actor.prototype.set_easing_duration = function(msecs) {
origSetEasingDuration.call(this, _adjustEasingTime(msecs));
};
let origSetEasingDelay = Clutter.Actor.prototype.set_easing_delay;
Clutter.Actor.prototype.set_easing_delay = function(msecs) {
origSetEasingDelay.call(this, _adjustEasingTime(msecs));
};
Clutter.Actor.prototype.ease = function(props, easingParams) {
_easeActor(this, props, easingParams);
};
Clutter.Actor.prototype.toString = function() {
return St.describe_actor(this);
};

View File

@@ -1,6 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const { Clutter, Gio, GLib, GObject, Soup, St } = imports.gi;
const { Clutter, Gio, GLib, Soup, St } = imports.gi;
const Config = imports.misc.config;
const ExtensionUtils = imports.misc.extensionUtils;
@@ -176,10 +176,10 @@ function checkForUpdates() {
});
}
var InstallExtensionDialog = GObject.registerClass(
var InstallExtensionDialog =
class InstallExtensionDialog extends ModalDialog.ModalDialog {
_init(uuid, info, invocation) {
super._init({ styleClass: 'extension-dialog' });
constructor(uuid, info, invocation) {
super({ styleClass: 'extension-dialog' });
this._uuid = uuid;
this._info = info;
@@ -255,7 +255,7 @@ class InstallExtensionDialog extends ModalDialog.ModalDialog {
this.close();
}
});
};
function init() {
_httpSession = new Soup.SessionAsync({ ssl_use_system_ca_file: true });

View File

@@ -43,9 +43,6 @@ function _popGrabHelper(grabHelper) {
// call grab().
var GrabHelper = class GrabHelper {
constructor(owner, params) {
if (!(owner instanceof Clutter.Actor))
throw new Error('GrabHelper owner must be a Clutter.Actor');
this._owner = owner;
this._modalParams = params;

View File

@@ -79,7 +79,7 @@ class BaseIcon extends St.Bin {
// This can be overridden by a subclass, or by the createIcon
// parameter to _init()
createIcon(size) {
throw new GObject.NotImplementedError(`createIcon in ${this.constructor.name}`);
throw new Error('no implementation of createIcon in ' + this);
}
setIconSize(size) {
@@ -322,7 +322,6 @@ var IconGrid = GObject.registerClass({
leftEmptySpace = availWidth - usedWidth;
}
let animating = this._clonesAnimating.length > 0;
let x = box.x1 + leftEmptySpace + this.leftPadding;
let y = box.y1 + this.topPadding;
let columnIndex = 0;
@@ -332,11 +331,10 @@ var IconGrid = GObject.registerClass({
if (this._rowLimit && rowIndex >= this._rowLimit ||
this._fillParent && childBox.y2 > availHeight - this.bottomPadding) {
children[i].opacity = 0;
children[i].hide();
} else {
if (!animating)
children[i].opacity = 255;
children[i].allocate(childBox, flags);
children[i].show();
}
columnIndex++;
@@ -380,7 +378,7 @@ var IconGrid = GObject.registerClass({
child != null;
child = child.get_next_sibling()) {
if (!child.visible || !child.opacity)
if (!child.visible)
continue;
let childVolume = child.get_transformed_paint_volume(this);
@@ -418,8 +416,7 @@ var IconGrid = GObject.registerClass({
animatePulse(animationDirection) {
if (animationDirection != AnimationDirection.IN)
throw new GObject.NotImplementedError("Pulse animation only implements " +
"'in' animation direction");
throw new Error("Pulse animation only implements 'in' animation direction");
this._cancelAnimation();

View File

@@ -282,7 +282,7 @@ var Key = class Key {
y_fill: true,
x_align: St.Align.START });
this._boxPointer.hide();
Main.layoutManager.addTopChrome(this._boxPointer);
Main.layoutManager.addChrome(this._boxPointer);
this._boxPointer.setPosition(this.keyButton, 0.5);
// Adds style to existing keyboard style to avoid repetition
@@ -1306,7 +1306,7 @@ var Keyboard = class Keyboard {
this._languagePopup.destroy();
this._languagePopup = new LanguageSelectionPopup(keyActor);
Main.layoutManager.addTopChrome(this._languagePopup.actor);
Main.layoutManager.addChrome(this._languagePopup.actor);
this._languagePopup.open(true);
}

View File

@@ -11,7 +11,6 @@ const DND = imports.ui.dnd;
const Main = imports.ui.main;
const Params = imports.misc.params;
const Tweener = imports.ui.tweener;
const Ripples = imports.ui.ripples;
var STARTUP_ANIMATION_TIME = 0.5;
var KEYBOARD_ANIMATION_TIME = 0.15;
@@ -217,17 +216,10 @@ var LayoutManager = GObject.registerClass({
this.uiGroup = new UiActor({ name: 'uiGroup' });
this.uiGroup.set_flags(Clutter.ActorFlags.NO_LAYOUT);
global.stage.add_child(this.uiGroup);
global.stage.remove_actor(global.window_group);
this.uiGroup.add_actor(global.window_group);
// Using addChrome() to add actors to uiGroup will position actors
// underneath the top_window_group.
// To insert actors at the top of uiGroup, we use addTopChrome() or
// add the actor directly using uiGroup.add_actor().
global.stage.remove_actor(global.top_window_group);
this.uiGroup.add_actor(global.top_window_group);
global.stage.add_child(this.uiGroup);
this.overviewGroup = new St.Widget({ name: 'overviewGroup',
visible: false,
@@ -255,7 +247,7 @@ var LayoutManager = GObject.registerClass({
this.keyboardBox = new St.BoxLayout({ name: 'keyboardBox',
reactive: true,
track_hover: true });
this.addTopChrome(this.keyboardBox);
this.addChrome(this.keyboardBox);
this._keyboardHeightNotifyId = 0;
// A dummy actor that tracks the mouse or text cursor, based on the
@@ -263,6 +255,9 @@ var LayoutManager = GObject.registerClass({
this.dummyCursor = new St.Widget({ width: 0, height: 0, opacity: 0 });
this.uiGroup.add_actor(this.dummyCursor);
global.stage.remove_actor(global.top_window_group);
this.uiGroup.add_actor(global.top_window_group);
let feedbackGroup = Meta.get_feedback_group_for_display(global.display);
global.stage.remove_actor(feedbackGroup);
this.uiGroup.add_actor(feedbackGroup);
@@ -807,16 +802,6 @@ var LayoutManager = GObject.registerClass({
this._trackActor(actor, params);
}
// addTopChrome:
// @actor: an actor to add to the chrome
// @params: (optional) additional params
//
// Like addChrome(), but adds @actor above all windows, including popups.
addTopChrome(actor, params) {
this.uiGroup.add_actor(actor);
this._trackActor(actor, params);
}
// trackChrome:
// @actor: a descendant of the chrome to begin tracking
// @params: parameters describing how to track @actor
@@ -1073,7 +1058,8 @@ var LayoutManager = GObject.registerClass({
}
}
global.set_stage_input_region(rects);
if (!Meta.is_wayland_compositor())
global.set_stage_input_region(rects);
this._isPopupWindowVisible = isPopupMenuVisible;
let workspaceManager = global.workspace_manager;
@@ -1118,15 +1104,14 @@ var HotCorner = class HotCorner {
Shell.ActionMode.OVERVIEW);
this._pressureBarrier.connect('trigger', this._toggleOverview.bind(this));
let px = 0.0;
let py = 0.0;
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) {
px = 1.0;
py = 0.0;
}
// Cache the three ripples instead of dynamically creating and destroying them.
this._ripple1 = new St.BoxLayout({ style_class: 'ripple-box', opacity: 0, visible: false });
this._ripple2 = new St.BoxLayout({ style_class: 'ripple-box', opacity: 0, visible: false });
this._ripple3 = new St.BoxLayout({ style_class: 'ripple-box', opacity: 0, visible: false });
this._ripples = new Ripples.Ripples(px, py, 'ripple-box');
this._ripples.addTo(layoutManager.uiGroup);
layoutManager.uiGroup.add_actor(this._ripple1);
layoutManager.uiGroup.add_actor(this._ripple2);
layoutManager.uiGroup.add_actor(this._ripple3);
}
setBarrierSize(size) {
@@ -1208,12 +1193,53 @@ var HotCorner = class HotCorner {
this.actor.destroy();
}
_animRipple(ripple, delay, time, startScale, startOpacity, finalScale) {
// We draw a ripple by using a source image and animating it scaling
// outwards and fading away. We want the ripples to move linearly
// or it looks unrealistic, but if the opacity of the ripple goes
// linearly to zero it fades away too quickly, so we use Tweener's
// 'onUpdate' to give a non-linear curve to the fade-away and make
// it more visible in the middle section.
ripple._opacity = startOpacity;
if (ripple.get_text_direction() == Clutter.TextDirection.RTL)
ripple.set_anchor_point_from_gravity(Clutter.Gravity.NORTH_EAST);
ripple.visible = true;
ripple.opacity = 255 * Math.sqrt(startOpacity);
ripple.scale_x = ripple.scale_y = startScale;
ripple.x = this._x;
ripple.y = this._y;
Tweener.addTween(ripple, { _opacity: 0,
scale_x: finalScale,
scale_y: finalScale,
delay: delay,
time: time,
transition: 'linear',
onUpdate() { ripple.opacity = 255 * Math.sqrt(ripple._opacity); },
onComplete() { ripple.visible = false; } });
}
_rippleAnimation() {
// Show three concentric ripples expanding outwards; the exact
// parameters were found by trial and error, so don't look
// for them to make perfect sense mathematically
// delay time scale opacity => scale
this._animRipple(this._ripple1, 0.0, 0.83, 0.25, 1.0, 1.5);
this._animRipple(this._ripple2, 0.05, 1.0, 0.0, 0.7, 1.25);
this._animRipple(this._ripple3, 0.35, 1.0, 0.0, 0.3, 1);
}
_toggleOverview() {
if (this._monitor.inFullscreen && !Main.overview.visible)
return;
if (Main.overview.shouldToggleByCornerOrButton()) {
this._ripples.playAnimation(this._x, this._y);
this._rippleAnimation();
Main.overview.toggle();
}
}

View File

@@ -7,7 +7,7 @@ const Params = imports.misc.params;
const Tweener = imports.ui.tweener;
var DEFAULT_FADE_FACTOR = 0.4;
var VIGNETTE_BRIGHTNESS = 0.2;
var VIGNETTE_BRIGHTNESS = 0.8;
var VIGNETTE_SHARPNESS = 0.7;
const VIGNETTE_DECLARATIONS = '\

View File

@@ -1,24 +0,0 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const { Clutter, Gio, GLib, St } = imports.gi;
const Ripples = imports.ui.ripples;
const Main = imports.ui.main;
const LOCATE_POINTER_KEY = "locate-pointer";
const LOCATE_POINTER_SCHEMA = "org.gnome.desktop.interface"
var locatePointer = class {
constructor() {
this._settings = new Gio.Settings({schema_id: LOCATE_POINTER_SCHEMA});
this._ripples = new Ripples.Ripples(0.5, 0.5, 'ripple-pointer-location');
this._ripples.addTo(Main.uiGroup);
}
show() {
if (!this._settings.get_boolean("locate-pointer"))
return;
let [x, y, mods] = global.get_pointer();
this._ripples.playAnimation(x, y);
}
};

View File

@@ -1,6 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
const { Clutter, Gio, GLib, Meta, Shell, St } = imports.gi;
const Mainloop = imports.mainloop;
const AccessDialog = imports.ui.accessDialog;
@@ -37,12 +37,9 @@ const WindowManager = imports.ui.windowManager;
const Magnifier = imports.ui.magnifier;
const XdndHandler = imports.ui.xdndHandler;
const KbdA11yDialog = imports.ui.kbdA11yDialog;
const LocatePointer = imports.ui.locatePointer;
const PointerA11yTimeout = imports.ui.pointerA11yTimeout;
const A11Y_SCHEMA = 'org.gnome.desktop.a11y.keyboard';
const STICKY_KEYS_ENABLE = 'stickykeys-enable';
const LOG_DOMAIN = 'GNOME Shell';
const GNOMESHELL_STARTED_MESSAGE_ID = 'f3ea493c22934e26811cd62abe8e203a';
var componentManager = null;
@@ -77,14 +74,12 @@ var layoutManager = null;
var kbdA11yDialog = null;
var inputMethod = null;
var introspectService = null;
var locatePointer = null;
let _startDate;
let _defaultCssStylesheet = null;
let _cssStylesheet = null;
let _a11ySettings = null;
let _themeResource = null;
let _oskResource = null;
let pointerA11yTimeout = null;
function _sessionUpdated() {
if (sessionMode.isPrimary)
@@ -97,8 +92,6 @@ function _sessionUpdated() {
wm.allowKeybinding('overlay-key', Shell.ActionMode.NORMAL |
Shell.ActionMode.OVERVIEW);
wm.allowKeybinding('locate-pointer-key', Shell.ActionMode.ALL);
wm.setCustomKeybindingHandler('panel-run-dialog',
Shell.ActionMode.NORMAL |
Shell.ActionMode.OVERVIEW,
@@ -172,8 +165,6 @@ function _initializeUI() {
kbdA11yDialog = new KbdA11yDialog.KbdA11yDialog();
wm = new WindowManager.WindowManager();
magnifier = new Magnifier.Magnifier();
locatePointer = new LocatePointer.locatePointer();
if (LoginManager.canLock())
screenShield = new ScreenShield.ScreenShield();
@@ -192,8 +183,6 @@ function _initializeUI() {
layoutManager.init();
overview.init();
pointerA11yTimeout = new PointerA11yTimeout.PointerA11yTimeout();
_a11ySettings = new Gio.Settings({ schema_id: A11Y_SCHEMA });
global.display.connect('overlay-key', () => {
@@ -201,10 +190,6 @@ function _initializeUI() {
overview.toggle();
});
global.connect('locate-pointer', () => {
locatePointer.show();
});
global.display.connect('show-restart-message', (display, message) => {
showRestartMessage(message);
return true;
@@ -244,14 +229,10 @@ function _initializeUI() {
}
if (sessionMode.currentMode != 'gdm' &&
sessionMode.currentMode != 'initial-setup') {
GLib.log_structured(LOG_DOMAIN, GLib.LogLevelFlags.LEVEL_MESSAGE, {
'MESSAGE': `GNOME Shell started at ${_startDate}`,
'MESSAGE_ID': GNOMESHELL_STARTED_MESSAGE_ID
});
Shell.Global.log_structured('GNOME Shell started at ' + _startDate,
['MESSAGE_ID=' + GNOMESHELL_STARTED_MESSAGE_ID]);
}
LoginManager.registerSessionWithGDM();
let perfModuleName = GLib.getenv("SHELL_PERF_MODULE");
if (perfModuleName) {
let perfOutput = GLib.getenv("SHELL_PERF_OUTPUT");
@@ -708,13 +689,12 @@ function queueDeferredWork(workId) {
}
}
var RestartMessage = GObject.registerClass(
class RestartMessage extends ModalDialog.ModalDialog {
_init(message) {
super._init({ shellReactive: true,
styleClass: 'restart-message headline',
shouldFadeIn: false,
destroyOnClose: true });
var RestartMessage = class extends ModalDialog.ModalDialog {
constructor(message) {
super({ shellReactive: true,
styleClass: 'restart-message headline',
shouldFadeIn: false,
destroyOnClose: true });
let label = new St.Label({ text: message });
@@ -724,7 +704,7 @@ class RestartMessage extends ModalDialog.ModalDialog {
y_align: St.Align.MIDDLE });
this.buttonLayout.hide();
}
});
};
function showRestartMessage(message) {
let restartMessage = new RestartMessage(message);

View File

@@ -1,6 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const { Atk, Clutter, GObject, Shell, St } = imports.gi;
const { Atk, Clutter, Shell, St } = imports.gi;
const Signals = imports.signals;
const Dialog = imports.ui.dialog;
@@ -21,20 +21,8 @@ var State = {
FADED_OUT: 4
};
var ModalDialog = GObject.registerClass({
Properties: { 'state': GObject.ParamSpec.int('state', 'Dialog state', 'state',
GObject.ParamFlags.READABLE,
Math.min(...Object.values(State)),
Math.max(...Object.values(State)),
State.CLOSED) },
Signals: { 'opened': {}, 'closed': {} }
}, class ModalDialog extends St.Widget {
_init(params) {
super._init({ visible: false,
x: 0,
y: 0,
accessible_role: Atk.Role.DIALOG });
var ModalDialog = class {
constructor(params) {
params = Params.parse(params, { shellReactive: false,
styleClass: null,
actionMode: Shell.ActionMode.SYSTEM_MODAL,
@@ -42,7 +30,7 @@ var ModalDialog = GObject.registerClass({
shouldFadeOut: true,
destroyOnClose: true });
this._state = State.CLOSED;
this.state = State.CLOSED;
this._hasModal = false;
this._actionMode = params.actionMode;
this._shellReactive = params.shellReactive;
@@ -50,25 +38,31 @@ var ModalDialog = GObject.registerClass({
this._shouldFadeOut = params.shouldFadeOut;
this._destroyOnClose = params.destroyOnClose;
Main.layoutManager.modalDialogGroup.add_actor(this);
this._group = new St.Widget({ visible: false,
x: 0,
y: 0,
accessible_role: Atk.Role.DIALOG });
Main.layoutManager.modalDialogGroup.add_actor(this._group);
let constraint = new Clutter.BindConstraint({ source: global.stage,
coordinate: Clutter.BindCoordinate.ALL });
this.add_constraint(constraint);
this._group.add_constraint(constraint);
this._group.connect('destroy', this._onGroupDestroy.bind(this));
this.backgroundStack = new St.Widget({ layout_manager: new Clutter.BinLayout() });
this._backgroundBin = new St.Bin({ child: this.backgroundStack,
x_fill: true, y_fill: true });
this._monitorConstraint = new Layout.MonitorConstraint();
this._backgroundBin.add_constraint(this._monitorConstraint);
this.add_actor(this._backgroundBin);
this._group.add_actor(this._backgroundBin);
this.dialogLayout = new Dialog.Dialog(this.backgroundStack, params.styleClass);
this.contentLayout = this.dialogLayout.contentLayout;
this.buttonLayout = this.dialogLayout.buttonLayout;
if (!this._shellReactive) {
this._lightbox = new Lightbox.Lightbox(this,
this._lightbox = new Lightbox.Lightbox(this._group,
{ inhibitEvents: true,
radialEffect: true });
this._lightbox.highlight(this._backgroundBin);
@@ -83,16 +77,8 @@ var ModalDialog = GObject.registerClass({
this._savedKeyFocus = null;
}
get state() {
return this._state;
}
_setState(state) {
if (this._state == state)
return;
this._state = state;
this.notify('state');
destroy() {
this._group.destroy();
}
clearButtons() {
@@ -110,25 +96,29 @@ var ModalDialog = GObject.registerClass({
return this.dialogLayout.addButton(buttonInfo);
}
_onGroupDestroy() {
this.emit('destroy');
}
_fadeOpen(onPrimary) {
if (onPrimary)
this._monitorConstraint.primary = true;
else
this._monitorConstraint.index = global.display.get_current_monitor();
this._setState(State.OPENING);
this.state = State.OPENING;
this.dialogLayout.opacity = 255;
if (this._lightbox)
this._lightbox.show();
this.opacity = 0;
this.show();
Tweener.addTween(this,
this._group.opacity = 0;
this._group.show();
Tweener.addTween(this._group,
{ opacity: 255,
time: this._shouldFadeIn ? OPEN_AND_CLOSE_TIME : 0,
transition: 'easeOutQuad',
onComplete: () => {
this._setState(State.OPENED);
this.state = State.OPENED;
this.emit('opened');
}
});
@@ -158,8 +148,8 @@ var ModalDialog = GObject.registerClass({
}
_closeComplete() {
this._setState(State.CLOSED);
this.hide();
this.state = State.CLOSED;
this._group.hide();
this.emit('closed');
if (this._destroyOnClose)
@@ -170,12 +160,12 @@ var ModalDialog = GObject.registerClass({
if (this.state == State.CLOSED || this.state == State.CLOSING)
return;
this._setState(State.CLOSING);
this.state = State.CLOSING;
this.popModal(timestamp);
this._savedKeyFocus = null;
if (this._shouldFadeOut)
Tweener.addTween(this,
Tweener.addTween(this._group,
{ opacity: 0,
time: OPEN_AND_CLOSE_TIME,
transition: 'easeOutQuad',
@@ -193,11 +183,11 @@ var ModalDialog = GObject.registerClass({
return;
let focus = global.stage.key_focus;
if (focus && this.contains(focus))
if (focus && this._group.contains(focus))
this._savedKeyFocus = focus;
else
this._savedKeyFocus = null;
Main.popModal(this, timestamp);
Main.popModal(this._group, timestamp);
this._hasModal = false;
if (!this._shellReactive)
@@ -211,7 +201,7 @@ var ModalDialog = GObject.registerClass({
let params = { actionMode: this._actionMode };
if (timestamp)
params['timestamp'] = timestamp;
if (!Main.pushModal(this, params))
if (!Main.pushModal(this._group, params))
return false;
this._hasModal = true;
@@ -252,8 +242,9 @@ var ModalDialog = GObject.registerClass({
time: FADE_OUT_DIALOG_TIME,
transition: 'easeOutQuad',
onComplete: () => {
this._setState(State.FADED_OUT);
this.state = State.FADED_OUT;
}
});
}
});
};
Signals.addSignalMethods(ModalDialog.prototype);

View File

@@ -122,7 +122,7 @@ var SlidingControl = class {
}
_getSlide() {
throw new GObject.NotImplementedError(`_getSlide in ${this.constructor.name}`);
throw new Error('getSlide() must be overridden');
}
_updateSlide() {

View File

@@ -66,7 +66,7 @@ function _unpremultiply(color) {
class AppMenu extends PopupMenu.PopupMenu {
constructor(sourceActor) {
super(sourceActor, 0.5, St.Side.TOP);
super(sourceActor, 0.0, St.Side.TOP);
this.actor.add_style_class_name('app-menu');
@@ -817,7 +817,6 @@ const PANEL_ITEM_IMPLEMENTATIONS = {
'dateMenu': imports.ui.dateMenu.DateMenuButton,
'a11y': imports.ui.status.accessibility.ATIndicator,
'keyboard': imports.ui.status.keyboard.InputSourceIndicator,
'dwellClick': imports.ui.status.dwellClick.DwellClickIndicator,
};
var Panel = GObject.registerClass(

View File

@@ -1,104 +0,0 @@
const { Clutter, GLib, GObject, Meta, St } = imports.gi;
const Tweener = imports.ui.tweener;
const Main = imports.ui.main;
const Cairo = imports.cairo;
const ANIMATION_STEPS = 36.;
var PieTimer = GObject.registerClass(
class PieTimer extends St.DrawingArea {
_init() {
this._x = 0;
this._y = 0;
this._startTime = 0;
this._duration = 0;
super._init( { style_class: 'pie-timer',
visible: false,
can_focus: false,
reactive: false });
}
vfunc_repaint() {
let node = this.get_theme_node();
let backgroundColor = node.get_color('-pie-background-color');
let borderColor = node.get_color('-pie-border-color');
let borderWidth = node.get_length('-pie-border-width');
let [width, height] = this.get_surface_size();
let radius = Math.min(width / 2, height / 2);
let currentTime = GLib.get_monotonic_time() / 1000.0;
let ellapsed = currentTime - this._startTime;
let angle = (ellapsed / this._duration) * 2 * Math.PI;
let startAngle = 3 * Math.PI / 2;
let endAngle = startAngle + angle;
let cr = this.get_context();
cr.setLineCap(Cairo.LineCap.ROUND);
cr.setLineJoin(Cairo.LineJoin.ROUND);
cr.translate(width / 2, height / 2);
cr.moveTo(0, 0);
cr.arc(0, 0, radius - borderWidth, startAngle, endAngle);
cr.lineTo(0, 0);
cr.closePath();
cr.setLineWidth(0);
Clutter.cairo_set_source_color(cr, backgroundColor);
cr.fillPreserve();
cr.setLineWidth(borderWidth);
Clutter.cairo_set_source_color(cr, borderColor);
cr.stroke();
cr.$dispose();
}
start(x, y, duration) {
Tweener.removeTweens(this);
this.x = x - this.width / 2;
this.y = y - this.height / 2;
this.show();
Main.uiGroup.set_child_above_sibling(this, null);
this._startTime = GLib.get_monotonic_time() / 1000.0;
this._duration = duration;
Tweener.addTween(this,
{ opacity: 255,
time: duration / 1000,
transition: 'easeOutQuad',
onUpdateScope: this,
onUpdate() { this.queue_repaint() },
onCompleteScope: this,
onComplete() { this.stop(); }
});
}
stop() {
Tweener.removeTweens(this);
this.hide();
}
});
var PointerA11yTimeout = class PointerA11yTimeout {
constructor() {
let manager = Clutter.DeviceManager.get_default();
let pieTimer = new PieTimer();
Main.uiGroup.add_actor(pieTimer);
manager.connect('ptr-a11y-timeout-started', (manager, device, type, timeout) => {
let [x, y, mods] = global.get_pointer();
pieTimer.start(x, y, timeout);
if (type == Clutter.PointerA11yTimeoutType.GESTURE)
global.display.set_cursor(Meta.Cursor.CROSSHAIR);
});
manager.connect('ptr-a11y-timeout-stopped', (manager, device, type) => {
pieTimer.stop();
if (type == Clutter.PointerA11yTimeoutType.GESTURE)
global.display.set_cursor(Meta.Cursor.DEFAULT);
});
}
};

View File

@@ -572,7 +572,7 @@ var PopupMenuBase = class {
menuItem.actor.grab_key_focus();
}
});
menuItem._activateId = menuItem.connect_after('activate', (menuItem, event) => {
menuItem._activateId = menuItem.connect('activate', (menuItem, event) => {
this.emit('activate', menuItem);
this.itemActivated(BoxPointer.PopupAnimation.FULL);
});
@@ -1215,6 +1215,7 @@ var PopupMenuManager = class {
constructor(owner, grabParams) {
grabParams = Params.parse(grabParams,
{ actionMode: Shell.ActionMode.POPUP });
this._owner = owner;
this._grabHelper = new GrabHelper.GrabHelper(owner, grabParams);
this._menus = [];
}

View File

@@ -89,8 +89,6 @@ function loadRemoteSearchProviders(searchSettings, callback) {
try {
let desktopId = keyfile.get_string(group, 'DesktopId');
appInfo = Gio.DesktopAppInfo.new(desktopId);
if (!appInfo.should_show())
return;
} catch (e) {
log('Ignoring search provider ' + path + ': missing DesktopId');
return;

View File

@@ -1,97 +0,0 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const { Clutter, St } = imports.gi;
const Tweener = imports.ui.tweener;
// Shamelessly copied from the layout "hotcorner" ripples implementation
var Ripples = class Ripples {
constructor(px, py, styleClass) {
this._x = 0;
this._y = 0;
this._px = px;
this._py = py;
this._ripple1 = new St.BoxLayout({ style_class: styleClass,
opacity: 0,
can_focus: false,
reactive: false,
visible: false });
this._ripple1.set_pivot_point(px, py);
this._ripple2 = new St.BoxLayout({ style_class: styleClass,
opacity: 0,
can_focus: false,
reactive: false,
visible: false });
this._ripple2.set_pivot_point(px, py);
this._ripple3 = new St.BoxLayout({ style_class: styleClass,
opacity: 0,
can_focus: false,
reactive: false,
visible: false });
this._ripple3.set_pivot_point(px, py);
}
_animRipple(ripple, delay, time, startScale, startOpacity, finalScale) {
// We draw a ripple by using a source image and animating it scaling
// outwards and fading away. We want the ripples to move linearly
// or it looks unrealistic, but if the opacity of the ripple goes
// linearly to zero it fades away too quickly, so we use Tweener's
// 'onUpdate' to give a non-linear curve to the fade-away and make
// it more visible in the middle section.
ripple.x = this._x;
ripple.y = this._y;
ripple._opacity = startOpacity;
ripple.visible = true;
ripple.opacity = 255 * Math.sqrt(startOpacity);
ripple.scale_x = ripple.scale_y = startScale;
ripple.set_translation( - this._px * ripple.width, - this._py * ripple.height, 0.0);
Tweener.addTween(ripple, { _opacity: 0,
scale_x: finalScale,
scale_y: finalScale,
delay: delay,
time: time,
transition: 'linear',
onUpdate() { ripple.opacity = 255 * Math.sqrt(ripple._opacity); },
onComplete() { ripple.visible = false; } });
}
addTo(stage) {
if (this._stage !== undefined) {
throw new Error('Ripples already added');
return;
}
this._stage = stage;
this._stage.add_actor(this._ripple1);
this._stage.add_actor(this._ripple2);
this._stage.add_actor(this._ripple3);
}
playAnimation(x, y) {
if (this._stage === undefined) {
throw new Error('Ripples not added');
return;
}
this._x = x;
this._y = y;
this._stage.set_child_above_sibling(this._ripple1, null);
this._stage.set_child_above_sibling(this._ripple2, this._ripple1);
this._stage.set_child_above_sibling(this._ripple3, this._ripple2);
// Show three concentric ripples expanding outwards; the exact
// parameters were found by trial and error, so don't look
// for them to make perfect sense mathematically
// delay time scale opacity => scale
this._animRipple(this._ripple1, 0.0, 0.83, 0.25, 1.0, 1.5);
this._animRipple(this._ripple2, 0.05, 1.0, 0.0, 0.7, 1.25);
this._animRipple(this._ripple3, 0.35, 1.0, 0.0, 0.3, 1);
}
};

View File

@@ -1,6 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
const { Clutter, Gio, GLib, Meta, Shell, St } = imports.gi;
const Signals = imports.signals;
const Main = imports.ui.main;
@@ -23,11 +23,10 @@ const EXEC_ARG_KEY = 'exec-arg';
var DIALOG_GROW_TIME = 0.1;
var RunDialog = GObject.registerClass(
class RunDialog extends ModalDialog.ModalDialog {
_init() {
super._init({ styleClass: 'run-dialog',
destroyOnClose: false });
var RunDialog = class extends ModalDialog.ModalDialog {
constructor() {
super({ styleClass: 'run-dialog',
destroyOnClose: false });
this._lockdownSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA });
this._terminalSettings = new Gio.Settings({ schema_id: TERMINAL_SCHEMA });
@@ -283,4 +282,5 @@ class RunDialog extends ModalDialog.ModalDialog {
super.open();
}
});
};
Signals.addSignalMethods(RunDialog.prototype);

View File

@@ -431,9 +431,6 @@ var SearchResults = class {
this._cancellable = new Gio.Cancellable();
this._registerProvider(new AppDisplay.AppSearchProvider());
let appSystem = Shell.AppSystem.get_default();
appSystem.connect('installed-changed', this._reloadRemoteProviders.bind(this));
this._reloadRemoteProviders();
}

View File

@@ -25,7 +25,6 @@ const _modes = {
hasWorkspaces: false,
hasWindows: false,
hasNotifications: false,
hasWmMenus: false,
isLocked: false,
isGreeter: false,
isPrimary: false,
@@ -48,7 +47,7 @@ const _modes = {
panel: {
left: [],
center: ['dateMenu'],
right: ['dwellClick', 'a11y', 'keyboard', 'aggregateMenu']
right: ['a11y', 'keyboard', 'aggregateMenu']
},
panelStyle: 'login-screen'
},
@@ -73,7 +72,7 @@ const _modes = {
panel: {
left: [],
center: [],
right: ['dwellClick', 'a11y', 'keyboard', 'aggregateMenu']
right: ['a11y', 'keyboard', 'aggregateMenu']
},
panelStyle: 'unlock-screen'
},
@@ -87,7 +86,6 @@ const _modes = {
hasRunDialog: true,
hasWorkspaces: true,
hasWindows: true,
hasWmMenus: true,
hasNotifications: true,
isLocked: false,
isPrimary: true,
@@ -101,7 +99,7 @@ const _modes = {
panel: {
left: ['activities', 'appMenu'],
center: ['dateMenu'],
right: ['dwellClick', 'a11y', 'keyboard', 'aggregateMenu']
right: ['a11y', 'keyboard', 'aggregateMenu']
}
}
};

View File

@@ -1,9 +1,8 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const { Clutter, Gio, GLib, GObject, Pango, Shell, St } = imports.gi;
const { Clutter, Gio, GLib, Pango, Shell, St } = imports.gi;
const Signals = imports.signals;
const Animation = imports.ui.animation;
const CheckBox = imports.ui.checkBox;
const Dialog = imports.ui.dialog;
const Main = imports.ui.main;
@@ -15,7 +14,6 @@ const ShellEntry = imports.ui.shellEntry;
const { loadInterfaceXML } = imports.misc.fileUtils;
var LIST_ITEM_ICON_SIZE = 48;
var WORK_SPINNER_ICON_SIZE = 16;
const REMEMBER_MOUNT_PASSWORD_KEY = 'remember-mount-password';
@@ -150,7 +148,7 @@ var ShellMountOperation = class {
}
this._dialogId = this._dialog.connect('response',
(object, choice, password, remember, hiddenVolume, systemVolume, pim) => {
(object, choice, password, remember) => {
if (choice == -1) {
this.mountOp.reply(Gio.MountOperationResult.ABORTED);
} else {
@@ -160,9 +158,6 @@ var ShellMountOperation = class {
this.mountOp.set_password_save(Gio.PasswordSave.NEVER);
this.mountOp.set_password(password);
this.mountOp.set_is_tcrypt_hidden_volume(hiddenVolume);
this.mountOp.set_is_tcrypt_system_volume(systemVolume);
this.mountOp.set_pim(pim);
this.mountOp.reply(Gio.MountOperationResult.HANDLED);
}
});
@@ -269,11 +264,9 @@ var ShellUnmountNotifier = class extends MessageTray.Source {
}
};
var ShellMountQuestionDialog = GObject.registerClass({
Signals: { 'response': { param_types: [GObject.TYPE_INT] } }
}, class ShellMountQuestionDialog extends ModalDialog.ModalDialog {
_init(icon) {
super._init({ styleClass: 'mount-dialog' });
var ShellMountQuestionDialog = class extends ModalDialog.ModalDialog {
constructor(icon) {
super({ styleClass: 'mount-dialog' });
this._content = new Dialog.MessageDialogContent({ icon });
this.contentLayout.add(this._content, { x_fill: true, y_fill: false });
@@ -283,107 +276,34 @@ var ShellMountQuestionDialog = GObject.registerClass({
_setLabelsForMessage(this._content, message);
_setButtonsForChoices(this, choices);
}
});
};
Signals.addSignalMethods(ShellMountQuestionDialog.prototype);
var ShellMountPasswordDialog = GObject.registerClass({
Signals: { 'response': { param_types: [GObject.TYPE_INT,
GObject.TYPE_STRING,
GObject.TYPE_BOOLEAN,
GObject.TYPE_BOOLEAN,
GObject.TYPE_BOOLEAN,
GObject.TYPE_UINT] } }
}, class ShellMountPasswordDialog extends ModalDialog.ModalDialog {
_init(message, icon, flags) {
var ShellMountPasswordDialog = class extends ModalDialog.ModalDialog {
constructor(message, icon, flags) {
let strings = message.split('\n');
let title = strings.shift() || null;
let body = strings.shift() || null;
super._init({ styleClass: 'prompt-dialog' });
let disksApp = Shell.AppSystem.get_default().lookup_app('org.gnome.DiskUtility.desktop');
super({ styleClass: 'prompt-dialog' });
let content = new Dialog.MessageDialogContent({ icon, title, body });
this.contentLayout.add_actor(content);
content._body.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
let layout = new Clutter.GridLayout({ orientation: Clutter.Orientation.VERTICAL });
let grid = new St.Widget({ style_class: 'prompt-dialog-grid',
layout_manager: layout });
layout.hookup_style(grid);
let rtl = grid.get_text_direction() === Clutter.TextDirection.RTL;
this._passwordBox = new St.BoxLayout({ vertical: false, style_class: 'prompt-dialog-password-box' });
content.messageBox.add(this._passwordBox);
if (flags & Gio.AskPasswordFlags.TCRYPT) {
this._keyfilesLabel = new St.Label(({ style_class: 'prompt-dialog-keyfiles-label',
visible: false }));
this._passwordLabel = new St.Label(({ style_class: 'prompt-dialog-password-label',
text: _("Password") }));
this._passwordBox.add(this._passwordLabel, { y_fill: false, y_align: St.Align.MIDDLE });
this._hiddenVolume = new CheckBox.CheckBox(_("Hidden Volume"));
content.messageBox.add(this._hiddenVolume.actor);
this._systemVolume = new CheckBox.CheckBox(_("Windows System Volume"));
content.messageBox.add(this._systemVolume.actor);
this._keyfilesCheckbox = new CheckBox.CheckBox(_("Uses Keyfiles"));
this._keyfilesCheckbox.actor.connect("clicked", this._onKeyfilesCheckboxClicked.bind(this));
content.messageBox.add(this._keyfilesCheckbox.actor);
this._keyfilesLabel.clutter_text.set_markup(
/* Translators: %s is the Disks application */
_("To unlock a volume that uses keyfiles, use the <i>%s</i> utility instead.").format(disksApp.get_name())
);
this._keyfilesLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
this._keyfilesLabel.clutter_text.line_wrap = true;
content.messageBox.add(this._keyfilesLabel, { y_fill: false, y_align: St.Align.MIDDLE, expand: true });
this._pimLabel = new St.Label({ style_class: 'prompt-dialog-password-label',
text: _("PIM Number"),
y_align: Clutter.ActorAlign.CENTER });
this._pimEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry',
can_focus: true,
x_expand: true });
this._pimEntry.clutter_text.connect('activate', this._onEntryActivate.bind(this));
this._pimEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE
ShellEntry.addContextMenu(this._pimEntry, { isPassword: true });
if (rtl) {
layout.attach(this._pimEntry, 0, 0, 1, 1);
layout.attach(this._pimLabel, 1, 0, 1, 1);
} else {
layout.attach(this._pimLabel, 0, 0, 1, 1);
layout.attach(this._pimEntry, 1, 0, 1, 1);
}
this._pimErrorMessageLabel = new St.Label({ style_class: 'prompt-dialog-password-entry',
text: _("The PIM must be a number or empty."),
visible: false });
layout.attach(this._pimErrorMessageLabel, 0, 2, 2, 1);
} else {
this._hiddenVolume = null;
this._systemVolume = null;
this._pimEntry = null;
this._pimErrorMessageLabel = null;
}
this._passwordLabel = new St.Label({ style_class: 'prompt-dialog-password-label',
text: _("Password"),
y_align: Clutter.ActorAlign.CENTER });
this._passwordEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry',
can_focus: true,
x_expand: true });
text: "",
can_focus: true});
ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
this._passwordEntry.clutter_text.connect('activate', this._onEntryActivate.bind(this));
this._passwordEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE
ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
this._passwordBox.add(this._passwordEntry, {expand: true });
this.setInitialKeyFocus(this._passwordEntry);
this._workSpinner = new Animation.Spinner(WORK_SPINNER_ICON_SIZE, true);
this._passwordEntry.secondary_icon = this._workSpinner.actor;
if (rtl) {
layout.attach(this._passwordEntry, 0, 1, 1, 1);
layout.attach(this._passwordLabel, 1, 1, 1, 1);
} else {
layout.attach(this._passwordLabel, 0, 1, 1, 1);
layout.attach(this._passwordEntry, 1, 1, 1, 1);
}
content.messageBox.add(grid);
this._errorMessageLabel = new St.Label({ style_class: 'prompt-dialog-error-label',
text: _("Sorry, that didnt work. Please try again.") });
@@ -393,7 +313,8 @@ var ShellMountPasswordDialog = GObject.registerClass({
content.messageBox.add(this._errorMessageLabel);
if (flags & Gio.AskPasswordFlags.SAVING_SUPPORTED) {
this._rememberChoice = new CheckBox.CheckBox(_("Remember Password"));
this._rememberChoice = new CheckBox.CheckBox();
this._rememberChoice.getLabelActor().text = _("Remember Password");
this._rememberChoice.actor.checked =
global.settings.get_boolean(REMEMBER_MOUNT_PASSWORD_KEY);
content.messageBox.add(this._rememberChoice.actor);
@@ -401,36 +322,25 @@ var ShellMountPasswordDialog = GObject.registerClass({
this._rememberChoice = null;
}
this._defaultButtons = [{ label: _("Cancel"),
action: this._onCancelButton.bind(this),
key: Clutter.Escape
},
{ label: _("Unlock"),
action: this._onUnlockButton.bind(this),
default: true
}];
let buttons = [{ label: _("Cancel"),
action: this._onCancelButton.bind(this),
key: Clutter.Escape
},
{ label: _("Unlock"),
action: this._onUnlockButton.bind(this),
default: true
}];
this._usesKeyfilesButtons = [{ label: _("Cancel"),
action: this._onCancelButton.bind(this),
key: Clutter.Escape
},
{ /* Translators: %s is the Disks application */
label: _("Open %s").format(disksApp.get_name()),
action: this._onOpenDisksButton.bind(this),
default: true
}];
this.setButtons(this._defaultButtons);
this.setButtons(buttons);
}
reaskPassword() {
this._passwordEntry.set_text('');
this._errorMessageLabel.show();
this._workSpinner.stop();
}
_onCancelButton() {
this.emit('response', -1, '', false, false, false, 0);
this.emit('response', -1, '', false);
}
_onUnlockButton() {
@@ -438,68 +348,18 @@ var ShellMountPasswordDialog = GObject.registerClass({
}
_onEntryActivate() {
let pim = 0;
if (this._pimEntry !== null)
pim = this._pimEntry.get_text();
if (isNaN(pim)) {
this._pimEntry.set_text('');
this._pimErrorMessageLabel.show();
return;
} else if (this._pimErrorMessageLabel !== null) {
this._pimErrorMessageLabel.hide();
}
global.settings.set_boolean(REMEMBER_MOUNT_PASSWORD_KEY,
this._rememberChoice && this._rememberChoice.actor.checked);
this._workSpinner.play();
this.emit('response', 1,
this._passwordEntry.get_text(),
this._rememberChoice &&
this._rememberChoice.actor.checked,
this._hiddenVolume &&
this._hiddenVolume.actor.checked,
this._systemVolume &&
this._systemVolume.actor.checked,
parseInt(pim));
this._rememberChoice.actor.checked);
}
};
_onKeyfilesCheckboxClicked() {
let useKeyfiles = this._keyfilesCheckbox.actor.checked;
this._passwordEntry.reactive = !useKeyfiles;
this._passwordEntry.can_focus = !useKeyfiles;
this._passwordEntry.clutter_text.editable = !useKeyfiles;
this._passwordEntry.clutter_text.selectable = !useKeyfiles;
this._pimEntry.reactive = !useKeyfiles;
this._pimEntry.can_focus = !useKeyfiles;
this._pimEntry.clutter_text.editable = !useKeyfiles;
this._pimEntry.clutter_text.selectable = !useKeyfiles;
this._rememberChoice.actor.reactive = !useKeyfiles;
this._rememberChoice.actor.can_focus = !useKeyfiles;
this._keyfilesLabel.visible = useKeyfiles;
this.setButtons(useKeyfiles ? this._usesKeyfilesButtons : this._defaultButtons);
}
_onOpenDisksButton() {
let app = Shell.AppSystem.get_default().lookup_app('org.gnome.DiskUtility.desktop');
if (app)
app.activate();
else
Main.notifyError(
/* Translators: %s is the Disks application */
_("Unable to start %s").format(app.get_name()),
/* Translators: %s is the Disks application */
_("Couldnt find the %s application").format(app.get_name())
);
this._onCancelButton();
}
});
var ShellProcessesDialog = GObject.registerClass({
Signals: { 'response': { param_types: [GObject.TYPE_INT] } }
}, class ShellProcessesDialog extends ModalDialog.ModalDialog {
_init(icon) {
super._init({ styleClass: 'mount-dialog' });
var ShellProcessesDialog = class extends ModalDialog.ModalDialog {
constructor(icon) {
super({ styleClass: 'mount-dialog' });
this._content = new Dialog.MessageDialogContent({ icon });
this.contentLayout.add(this._content, { x_fill: true, y_fill: false });
@@ -552,7 +412,8 @@ var ShellProcessesDialog = GObject.registerClass({
_setLabelsForMessage(this._content, message);
_setButtonsForChoices(this, choices);
}
});
};
Signals.addSignalMethods(ShellProcessesDialog.prototype);
const GnomeShellMountOpIface = loadInterfaceXML('org.Gtk.MountOperationHandler');
@@ -654,7 +515,7 @@ var GnomeShellMountOpHandler = class {
this._dialog = new ShellMountPasswordDialog(message, this._createGIcon(iconName), flags);
this._dialog.connect('response',
(object, choice, password, remember, hiddenVolume, systemVolume, pim) => {
(object, choice, password, remember) => {
let details = {};
let response;
@@ -666,9 +527,6 @@ var GnomeShellMountOpHandler = class {
let passSave = remember ? Gio.PasswordSave.PERMANENTLY : Gio.PasswordSave.NEVER;
details['password_save'] = GLib.Variant.new('u', passSave);
details['password'] = GLib.Variant.new('s', password);
details['hidden_volume'] = GLib.Variant.new('b', hiddenVolume);
details['system_volume'] = GLib.Variant.new('b', systemVolume);
details['pim'] = GLib.Variant.new('u', pim);
}
this._clearCurrentRequest(response, details);

View File

@@ -32,7 +32,7 @@ const HIGH_CONTRAST_THEME = 'HighContrast';
var ATIndicator = GObject.registerClass(
class ATIndicator extends PanelMenu.Button {
_init() {
super._init(0.5, _("Accessibility"));
super._init(0.0, _("Accessibility"));
this._hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' });
this._hbox.add_child(new St.Icon({ style_class: 'system-status-icon',

View File

@@ -1,86 +0,0 @@
const { Clutter, Gio, GLib, GObject, St } = imports.gi;
const Mainloop = imports.mainloop;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const MOUSE_A11Y_SCHEMA = 'org.gnome.desktop.a11y.mouse';
const KEY_DWELL_CLICK_ENABLED = 'dwell-click-enabled';
const KEY_DWELL_MODE = 'dwell-mode';
const DWELL_MODE_WINDOW = 'window';
const DWELL_CLICK_MODES = {
primary: {
name: _("Single Click"),
icon: 'pointer-primary-click-symbolic',
type: Clutter.PointerA11yDwellClickType.PRIMARY
},
double: {
name: _("Double Click"),
icon: 'pointer-double-click-symbolic',
type: Clutter.PointerA11yDwellClickType.DOUBLE
},
drag: {
name: _("Drag"),
icon: 'pointer-drag-symbolic',
type: Clutter.PointerA11yDwellClickType.DRAG
},
secondary: {
name: _("Secondary Click"),
icon: 'pointer-secondary-click-symbolic',
type: Clutter.PointerA11yDwellClickType.SECONDARY
},
};
var DwellClickIndicator = GObject.registerClass(
class DwellClickIndicator extends PanelMenu.Button {
_init() {
super._init(0.5, _("Dwell Click"));
this._hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' });
this._icon = new St.Icon({ style_class: 'system-status-icon',
icon_name: 'pointer-primary-click-symbolic' });
this._hbox.add_child(this._icon);
this._hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM));
this.add_child(this._hbox);
this._a11ySettings = new Gio.Settings({ schema_id: MOUSE_A11Y_SCHEMA });
this._a11ySettings.connect('changed::' + KEY_DWELL_CLICK_ENABLED, this._syncMenuVisibility.bind(this));
this._a11ySettings.connect('changed::' + KEY_DWELL_MODE, this._syncMenuVisibility.bind(this));
this._deviceManager = Clutter.DeviceManager.get_default();
this._deviceManager.connect('ptr-a11y-dwell-click-type-changed', this._updateClickType.bind(this));
this._addDwellAction(DWELL_CLICK_MODES.primary);
this._addDwellAction(DWELL_CLICK_MODES.double);
this._addDwellAction(DWELL_CLICK_MODES.drag);
this._addDwellAction(DWELL_CLICK_MODES.secondary);
this._setClickType(DWELL_CLICK_MODES.primary);
this._syncMenuVisibility();
}
_syncMenuVisibility() {
this.visible =
(this._a11ySettings.get_boolean(KEY_DWELL_CLICK_ENABLED) &&
this._a11ySettings.get_string(KEY_DWELL_MODE) == DWELL_MODE_WINDOW);
return GLib.SOURCE_REMOVE;
}
_addDwellAction(mode) {
this.menu.addAction(mode.name, this._setClickType.bind(this, mode), mode.icon);
}
_updateClickType(manager, click_type) {
for (let mode in DWELL_CLICK_MODES) {
if (DWELL_CLICK_MODES[mode].type == click_type)
this._icon.icon_name = DWELL_CLICK_MODES[mode].icon;
}
}
_setClickType(mode) {
this._deviceManager.set_pointer_a11y_dwell_click_type(mode.type);
this._icon.icon_name = mode.icon;
}
});

View File

@@ -810,7 +810,7 @@ class InputSourceIndicatorContainer extends St.Widget {
var InputSourceIndicator = GObject.registerClass(
class InputSourceIndicator extends PanelMenu.Button {
_init() {
super._init(0.5, _("Keyboard"));
super._init(0.0, _("Keyboard"));
this.connect('destroy', this._onDestroy.bind(this));

View File

@@ -1,6 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const { Clutter, Gio, GLib, GObject, Shell } = imports.gi;
const { Clutter, Gio, GLib, Shell } = imports.gi;
const Dialog = imports.ui.dialog;
const Main = imports.ui.main;
@@ -342,11 +342,9 @@ var AppAuthorizer = class {
}
};
var GeolocationDialog = GObject.registerClass({
Signals: { 'response': { param_types: [GObject.TYPE_UINT] } }
}, class GeolocationDialog extends ModalDialog.ModalDialog {
_init(name, subtitle, reqAccuracyLevel) {
super._init({ styleClass: 'geolocation-dialog' });
var GeolocationDialog = class extends ModalDialog.ModalDialog {
constructor(name, subtitle, reqAccuracyLevel) {
super({ styleClass: 'geolocation-dialog' });
this.reqAccuracyLevel = reqAccuracyLevel;
let icon = new Gio.ThemedIcon({ name: 'find-location-symbolic' });
@@ -377,4 +375,5 @@ var GeolocationDialog = GObject.registerClass({
this.emit('response', GeoclueAccuracyLevel.NONE);
this.close();
}
});
};
Signals.addSignalMethods(GeolocationDialog.prototype);

View File

@@ -69,12 +69,9 @@ function ssidToLabel(ssid) {
function ensureActiveConnectionProps(active, client) {
if (!active._primaryDevice) {
let devices = active.get_devices();
if (devices.length > 0) {
// This list is guaranteed to have at most one device in it.
let device = devices[0]._delegate;
active._primaryDevice = device;
}
// This list is guaranteed to have only one device in it.
let device = active.get_devices()[0]._delegate;
active._primaryDevice = device;
}
}
@@ -616,36 +613,31 @@ var NMDeviceBluetooth = class extends NMConnectionDevice {
}
};
var NMWirelessDialogItem = GObject.registerClass({
Signals: {
'selected': {},
}
}, class NMWirelessDialogItem extends St.BoxLayout {
_init(network) {
var NMWirelessDialogItem = class {
constructor(network) {
this._network = network;
this._ap = network.accessPoints[0];
super._init({ style_class: 'nm-dialog-item',
can_focus: true,
reactive: true });
this.connect('key-focus-in', () => { this.emit('selected'); });
this.actor = new St.BoxLayout({ style_class: 'nm-dialog-item',
can_focus: true,
reactive: true });
this.actor.connect('key-focus-in', () => { this.emit('selected'); });
let action = new Clutter.ClickAction();
action.connect('clicked', () => { this.grab_key_focus(); });
this.add_action(action);
action.connect('clicked', () => { this.actor.grab_key_focus(); });
this.actor.add_action(action);
let title = ssidToLabel(this._ap.get_ssid());
this._label = new St.Label({ text: title });
this.label_actor = this._label;
this.add(this._label, { x_align: St.Align.START });
this.actor.label_actor = this._label;
this.actor.add(this._label, { x_align: St.Align.START });
this._selectedIcon = new St.Icon({ style_class: 'nm-dialog-icon',
icon_name: 'object-select-symbolic' });
this.add(this._selectedIcon);
this.actor.add(this._selectedIcon);
this._icons = new St.BoxLayout({ style_class: 'nm-dialog-icons' });
this.add(this._icons, { expand: true, x_fill: false, x_align: St.Align.END });
this.actor.add(this._icons, { expand: true, x_fill: false, x_align: St.Align.END });
this._secureIcon = new St.Icon({ style_class: 'nm-dialog-icon' });
if (this._ap._secType != NMAccessPointSecurity.NONE)
@@ -677,12 +669,12 @@ var NMWirelessDialogItem = GObject.registerClass({
else
return 'network-wireless-signal-' + signalToIcon(this._ap.strength) + '-symbolic';
}
});
};
Signals.addSignalMethods(NMWirelessDialogItem.prototype);
var NMWirelessDialog = GObject.registerClass(
class NMWirelessDialog extends ModalDialog.ModalDialog {
_init(client, device) {
super._init({ styleClass: 'nm-dialog' });
var NMWirelessDialog = class extends ModalDialog.ModalDialog {
constructor(client, device) {
super({ styleClass: 'nm-dialog' });
this._client = client;
this._device = device;
@@ -728,11 +720,9 @@ class NMWirelessDialog extends ModalDialog.ModalDialog {
Main.sessionMode.disconnect(id);
this.close();
});
this.connect('destroy', this._onDestroy.bind(this));
}
_onDestroy() {
destroy() {
if (this._apAddedId) {
GObject.Object.prototype.disconnect.call(this._device, this._apAddedId);
this._apAddedId = 0;
@@ -758,6 +748,8 @@ class NMWirelessDialog extends ModalDialog.ModalDialog {
Mainloop.source_remove(this._scanTimeoutId);
this._scanTimeoutId = 0;
}
super.destroy();
}
_onScanTimeout() {
@@ -1148,7 +1140,7 @@ class NMWirelessDialog extends ModalDialog.ModalDialog {
this._itemBox.grab_key_focus();
});
}
});
};
var NMDeviceWireless = class {
constructor(client, device) {

View File

@@ -162,7 +162,7 @@ var SwitcherPopup = GObject.registerClass({
}
_keyPressHandler(keysym, action) {
throw new GObject.NotImplementedError(`_keyPressHandler in ${this.constructor.name}`);
throw new Error('Not implemented');
}
_keyPressEvent(actor, event) {

View File

@@ -69,6 +69,8 @@ var Source = class WindowAttentionSource extends MessageTray.Source {
() => { this.destroy(); }));
this.signalIDs.push(this._window.connect('unmanaged',
() => { this.destroy(); }));
this.connect('destroy', this._onDestroy.bind(this));
}
_sync() {
@@ -77,6 +79,13 @@ var Source = class WindowAttentionSource extends MessageTray.Source {
this.destroy();
}
_onDestroy() {
for(let i = 0; i < this.signalIDs.length; i++) {
this._window.disconnect(this.signalIDs[i]);
}
this.signalIDs = [];
}
_createPolicy() {
if (this._app && this._app.get_app_info()) {
let id = this._app.get_id().replace(/\.desktop$/,'');
@@ -90,14 +99,6 @@ var Source = class WindowAttentionSource extends MessageTray.Source {
return this._app.create_icon_texture(size);
}
destroy(params) {
for (let i = 0; i < this.signalIDs.length; i++)
this._window.disconnect(this.signalIDs[i]);
this.signalIDs = [];
super.destroy(params);
}
open() {
Main.activateWindow(this._window);
}

View File

@@ -11,7 +11,6 @@ const WorkspaceSwitcherPopup = imports.ui.workspaceSwitcherPopup;
const InhibitShortcutsDialog = imports.ui.inhibitShortcutsDialog;
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 EdgeDragAction = imports.ui.edgeDragAction;
@@ -21,15 +20,15 @@ const SwitchMonitor = imports.ui.switchMonitor;
const { loadInterfaceXML } = imports.misc.fileUtils;
var SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
var MINIMIZE_WINDOW_ANIMATION_TIME = 0.2;
var SHOW_WINDOW_ANIMATION_TIME = 0.15;
var DIALOG_SHOW_WINDOW_ANIMATION_TIME = 0.1;
var DESTROY_WINDOW_ANIMATION_TIME = 0.15;
var DIALOG_DESTROY_WINDOW_ANIMATION_TIME = 0.1;
var WINDOW_ANIMATION_TIME = 0.25;
var MINIMIZE_WINDOW_ANIMATION_TIME = 200; // ms
var SHOW_WINDOW_ANIMATION_TIME = 150; // ms
var DIALOG_SHOW_WINDOW_ANIMATION_TIME = 100; // ms
var DESTROY_WINDOW_ANIMATION_TIME = 150; // ms
var DIALOG_DESTROY_WINDOW_ANIMATION_TIME = 100; // ms
var WINDOW_ANIMATION_TIME = 250; // ms
var DIM_BRIGHTNESS = -0.3;
var DIM_TIME = 0.500;
var UNDIM_TIME = 0.250;
var DIM_TIME = 500; // ms
var UNDIM_TIME = 250; // ms
var MOTION_THRESHOLD = 100;
var ONE_SECOND = 1000; // in ms
@@ -40,10 +39,9 @@ const GSD_WACOM_OBJECT_PATH = '/org/gnome/SettingsDaemon/Wacom';
const GsdWacomIface = loadInterfaceXML('org.gnome.SettingsDaemon.Wacom');
const GsdWacomProxy = Gio.DBusProxy.makeProxyWrapper(GsdWacomIface);
var DisplayChangeDialog = GObject.registerClass(
class DisplayChangeDialog extends ModalDialog.ModalDialog {
_init(wm) {
super._init({ styleClass: 'prompt-dialog' });
var DisplayChangeDialog = class extends ModalDialog.ModalDialog {
constructor(wm) {
super({ styleClass: 'prompt-dialog' });
this._wm = wm;
@@ -112,20 +110,43 @@ class DisplayChangeDialog extends ModalDialog.ModalDialog {
this._wm.complete_display_change(true);
this.close();
}
});
};
var WindowDimmer = class {
constructor(actor) {
this._brightnessEffect = new Clutter.BrightnessContrastEffect();
this._brightnessEffect = new Clutter.BrightnessContrastEffect({
name: 'dim',
enabled: false
});
actor.add_effect(this._brightnessEffect);
this.actor = actor;
this._enabled = true;
this._dimFactor = 0.0;
this._syncEnabled();
this._dimmed = false;
}
_syncEnabled() {
this._brightnessEffect.enabled = (this._enabled && this._dimFactor > 0);
this._brightnessEffect.enabled =
(this._enabled && (this._dimmed || this._transition != null));
}
get _transition() {
return this.actor.get_transition('dim');
}
_ensureTransition() {
if (this._transition)
return;
let params = {
propertyName: '@effects.dim.brightness',
progressMode: Clutter.AnimationMode.LINEAR,
duration: (this._dimmed ? DIM_TIME : UNDIM_TIME),
removeOnComplete: true
};
this.actor.add_transition('dim',
new Clutter.PropertyTransition(params));
this._transition.connect('completed', this._syncEnabled.bind(this));
}
setEnabled(enabled) {
@@ -133,14 +154,20 @@ var WindowDimmer = class {
this._syncEnabled();
}
set dimFactor(factor) {
this._dimFactor = factor;
this._brightnessEffect.set_brightness(factor * DIM_BRIGHTNESS);
this._syncEnabled();
}
setDimmed(dimmed, animate) {
this._dimmed = dimmed;
get dimFactor() {
return this._dimFactor;
let val = 127 * (1 + dimmed * DIM_BRIGHTNESS);
let color = Clutter.Color.new(val, val, val, 255);
if (animate) {
this._ensureTransition();
this._transition.set_to(color);
} else {
this._effect.brightness = color;
}
this._syncEnabled();
}
};
@@ -413,15 +440,16 @@ var TilePreview = class {
this._showing = true;
this.actor.show();
Tweener.addTween(this.actor,
{ x: tileRect.x,
y: tileRect.y,
width: tileRect.width,
height: tileRect.height,
opacity: 255,
time: WINDOW_ANIMATION_TIME,
transition: 'easeOutQuad'
});
this.actor.ease({
x: tileRect.x,
y: tileRect.y,
width: tileRect.width,
height: tileRect.height,
opacity: 255
}, {
duration: WINDOW_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD
});
}
hide() {
@@ -429,12 +457,13 @@ var TilePreview = class {
return;
this._showing = false;
Tweener.addTween(this.actor,
{ opacity: 0,
time: WINDOW_ANIMATION_TIME,
transition: 'easeOutQuad',
onComplete: this._reset.bind(this)
});
this.actor.ease({
opacity: 0
}, {
duration: WINDOW_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => this._reset()
});
}
_reset() {
@@ -1136,15 +1165,16 @@ var WindowManager = class {
return;
let switchData = this._switchData;
this._switchData = null;
Tweener.addTween(switchData.container,
{ x: 0,
y: 0,
time: WINDOW_ANIMATION_TIME,
transition: 'easeOutQuad',
onComplete: this._finishWorkspaceSwitch,
onCompleteScope: this,
onCompleteParams: [switchData],
});
switchData.container.ease({
x: 0,
y: 0
}, {
time: WINDOW_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => {
this._finishWorkspaceSwitch(switchData);
}
});
}
_actionSwitchWorkspace(action, direction) {
@@ -1314,17 +1344,18 @@ var WindowManager = class {
this._minimizing.push(actor);
if (actor.meta_window.is_monitor_sized()) {
Tweener.addTween(actor,
{ opacity: 0,
time: MINIMIZE_WINDOW_ANIMATION_TIME,
transition: 'easeOutQuad',
onComplete: this._minimizeWindowDone,
onCompleteScope: this,
onCompleteParams: [shellwm, actor],
onOverwrite: this._minimizeWindowOverwritten,
onOverwriteScope: this,
onOverwriteParams: [shellwm, actor]
});
actor.ease({
opacity: 0
}, {
duration: MINIMIZE_WINDOW_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onStopped: isFinished => {
if (isFinished)
this._minimizeWindowDone(shellwm, actor);
else
this._minimizeWindowOverwritten(shellwm, actor);
},
});
} else {
let xDest, yDest, xScale, yScale;
let [success, geom] = actor.meta_window.get_icon_geometry();
@@ -1347,26 +1378,27 @@ var WindowManager = class {
yScale = 0;
}
Tweener.addTween(actor,
{ scale_x: xScale,
scale_y: yScale,
x: xDest,
y: yDest,
time: MINIMIZE_WINDOW_ANIMATION_TIME,
transition: 'easeInExpo',
onComplete: this._minimizeWindowDone,
onCompleteScope: this,
onCompleteParams: [shellwm, actor],
onOverwrite: this._minimizeWindowOverwritten,
onOverwriteScope: this,
onOverwriteParams: [shellwm, actor]
});
actor.ease({
scale_x: xScale,
scale_y: yScale,
x: xDest,
y: yDest
}, {
duration: MINIMIZE_WINDOW_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_IN_EXPO,
onStopped: isFinished => {
if (isFinished)
this._minimizeWindowDone(shellwm, actor);
else
this._minimizeWindowOverwritten(shellwm, actor);
}
});
}
}
_minimizeWindowDone(shellwm, actor) {
if (this._removeEffect(this._minimizing, actor)) {
Tweener.removeTweens(actor);
actor.remove_all_transitions();
actor.set_scale(1.0, 1.0);
actor.set_opacity(255);
actor.set_pivot_point(0, 0);
@@ -1395,17 +1427,18 @@ var WindowManager = class {
if (actor.meta_window.is_monitor_sized()) {
actor.opacity = 0;
actor.set_scale(1.0, 1.0);
Tweener.addTween(actor,
{ opacity: 255,
time: MINIMIZE_WINDOW_ANIMATION_TIME,
transition: 'easeOutQuad',
onComplete: this._unminimizeWindowDone,
onCompleteScope: this,
onCompleteParams: [shellwm, actor],
onOverwrite: this._unminimizeWindowOverwritten,
onOverwriteScope: this,
onOverwriteParams: [shellwm, actor]
});
actor.ease({
opacity: 255
}, {
duration: MINIMIZE_WINDOW_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onStopped: isFinished => {
if (isFinished)
this._unminimizeWindowDone(shellwm, actor);
else
this._unminimizeWindowOverwritten(shellwm, actor);
}
});
} else {
let [success, geom] = actor.meta_window.get_icon_geometry();
if (success) {
@@ -1429,26 +1462,27 @@ var WindowManager = class {
let [xDest, yDest] = [rect.x, rect.y];
actor.show();
Tweener.addTween(actor,
{ scale_x: 1.0,
scale_y: 1.0,
x: xDest,
y: yDest,
time: MINIMIZE_WINDOW_ANIMATION_TIME,
transition: 'easeInExpo',
onComplete: this._unminimizeWindowDone,
onCompleteScope: this,
onCompleteParams: [shellwm, actor],
onOverwrite: this._unminimizeWindowOverwritten,
onOverwriteScope: this,
onOverwriteParams: [shellwm, actor]
});
actor.ease({
scale_x: 1,
scale_y: 1,
x: xDest,
y: yDest
}, {
duration: MINIMIZE_WINDOW_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_IN_EXPO,
onStopped: isFinished => {
if (isFinished)
this._unminimizeWindowDone(shellwm, actor);
else
this._unminimizeWindowOverwritten(shellwm, actor);
}
});
}
}
_unminimizeWindowDone(shellwm, actor) {
if (this._removeEffect(this._unminimizing, actor)) {
Tweener.removeTweens(actor);
actor.remove_all_transitions();
actor.set_scale(1.0, 1.0);
actor.set_opacity(255);
actor.set_pivot_point(0, 0);
@@ -1514,15 +1548,16 @@ var WindowManager = class {
this._resizing.push(actor);
// Now scale and fade out the clone
Tweener.addTween(actorClone,
{ x: targetRect.x,
y: targetRect.y,
scale_x: scaleX,
scale_y: scaleY,
opacity: 0,
time: WINDOW_ANIMATION_TIME,
transition: 'easeOutQuad'
});
actorClone.ease({
x: targetRect.x,
y: targetRect.y,
scale_x: scaleX,
scale_y: scaleY,
opacity: 0
}, {
duration: WINDOW_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD
});
actor.translation_x = -targetRect.x + sourceRect.x;
actor.translation_y = -targetRect.y + sourceRect.y;
@@ -1532,20 +1567,21 @@ var WindowManager = class {
actor.scale_y = 1 / scaleY;
// Scale it to its actual new size
Tweener.addTween(actor,
{ scale_x: 1.0,
scale_y: 1.0,
translation_x: 0,
translation_y: 0,
time: WINDOW_ANIMATION_TIME,
transition: 'easeOutQuad',
onComplete: this._sizeChangeWindowDone,
onCompleteScope: this,
onCompleteParams: [shellwm, actor],
onOverwrite: this._sizeChangeWindowOverwritten,
onOverwriteScope: this,
onOverwriteParams: [shellwm, actor]
});
actor.ease({
scale_x: 1,
scale_y: 1,
translation_x: 0,
translation_y: 0
}, {
duration: WINDOW_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onStopped: isFinished => {
if (isFinished)
this._sizeChangeWindowDone(shellwm, actor);
else
this._sizeChangeWindowOverwritten(shellwm, actor);
}
});
// Now unfreeze actor updates, to get it to the new size.
// It's important that we don't wait until the animation is completed to
@@ -1565,7 +1601,7 @@ var WindowManager = class {
_sizeChangeWindowDone(shellwm, actor) {
if (this._removeEffect(this._resizing, actor)) {
Tweener.removeTweens(actor);
actor.remove_all_transitions();
actor.scale_x = 1.0;
actor.scale_y = 1.0;
actor.translation_x = 0;
@@ -1615,14 +1651,7 @@ var WindowManager = class {
let dimmer = getWindowDimmer(actor);
if (!dimmer)
return;
if (this._shouldAnimate())
Tweener.addTween(dimmer,
{ dimFactor: 1.0,
time: DIM_TIME,
transition: 'linear'
});
else
dimmer.dimFactor = 1.0;
dimmer.setDimmed(true, this._shouldAnimate());
}
_undimWindow(window) {
@@ -1632,13 +1661,7 @@ var WindowManager = class {
let dimmer = getWindowDimmer(actor);
if (!dimmer)
return;
if (this._shouldAnimate())
Tweener.addTween(dimmer,
{ dimFactor: 0.0,
time: UNDIM_TIME,
transition: 'linear' });
else
dimmer.dimFactor = 0.0;
dimmer.setDimmed(false, this._shouldAnimate());
}
_mapWindow(shellwm, actor) {
@@ -1683,19 +1706,20 @@ var WindowManager = class {
actor.show();
this._mapping.push(actor);
Tweener.addTween(actor,
{ opacity: 255,
scale_x: 1,
scale_y: 1,
time: SHOW_WINDOW_ANIMATION_TIME,
transition: 'easeOutExpo',
onComplete: this._mapWindowDone,
onCompleteScope: this,
onCompleteParams: [shellwm, actor],
onOverwrite: this._mapWindowOverwrite,
onOverwriteScope: this,
onOverwriteParams: [shellwm, actor]
});
actor.ease({
opacity: 255,
scale_x: 1,
scale_y: 1
}, {
duration: SHOW_WINDOW_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_EXPO,
onStopped: isFinished => {
if (isFinished)
this._mapWindowDone(shellwm, actor);
else
this._mapWindowOverwrite(shellwm, actor);
}
});
break;
case Meta.WindowType.MODAL_DIALOG:
case Meta.WindowType.DIALOG:
@@ -1705,19 +1729,20 @@ var WindowManager = class {
actor.show();
this._mapping.push(actor);
Tweener.addTween(actor,
{ opacity: 255,
scale_x: 1,
scale_y: 1,
time: DIALOG_SHOW_WINDOW_ANIMATION_TIME,
transition: 'easeOutQuad',
onComplete: this._mapWindowDone,
onCompleteScope: this,
onCompleteParams: [shellwm, actor],
onOverwrite: this._mapWindowOverwrite,
onOverwriteScope: this,
onOverwriteParams: [shellwm, actor]
});
actor.ease({
opacity: 255,
scale_x: 1,
scale_y: 1
}, {
duration: DIALOG_SHOW_WINDOW_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onStopped: isFinished => {
if (isFinished)
this._mapWindowDone(shellwm, actor);
else
this._mapWindowOverwrite(shellwm, actor);
}
});
break;
default:
shellwm.completed_map(actor);
@@ -1727,7 +1752,7 @@ var WindowManager = class {
_mapWindowDone(shellwm, actor) {
if (this._removeEffect(this._mapping, actor)) {
Tweener.removeTweens(actor);
actor.remove_all_transitions();
actor.opacity = 255;
actor.set_pivot_point(0, 0);
actor.scale_y = 1;
@@ -1771,19 +1796,17 @@ var WindowManager = class {
actor.set_pivot_point(0.5, 0.5);
this._destroying.push(actor);
Tweener.addTween(actor,
{ opacity: 0,
scale_x: 0.8,
scale_y: 0.8,
time: DESTROY_WINDOW_ANIMATION_TIME,
transition: 'easeOutQuad',
onComplete: this._destroyWindowDone,
onCompleteScope: this,
onCompleteParams: [shellwm, actor],
onOverwrite: this._destroyWindowDone,
onOverwriteScope: this,
onOverwriteParams: [shellwm, actor]
});
actor.ease({
opacity: 0,
scale_x: 0.8,
scale_y: 0.8
}, {
duration: DESTROY_WINDOW_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onStopped: () => {
this._destroyWindowDone(shellwm, actor);
}
});
break;
case Meta.WindowType.MODAL_DIALOG:
case Meta.WindowType.DIALOG:
@@ -1793,22 +1816,20 @@ var WindowManager = class {
if (window.is_attached_dialog()) {
let parent = window.get_transient_for();
actor._parentDestroyId = parent.connect('unmanaged', () => {
Tweener.removeTweens(actor);
actor.remove_all_transitions();
this._destroyWindowDone(shellwm, actor);
});
}
Tweener.addTween(actor,
{ scale_y: 0,
time: DIALOG_DESTROY_WINDOW_ANIMATION_TIME,
transition: 'easeOutQuad',
onComplete: this._destroyWindowDone,
onCompleteScope: this,
onCompleteParams: [shellwm, actor],
onOverwrite: this._destroyWindowDone,
onOverwriteScope: this,
onOverwriteParams: [shellwm, actor]
});
actor.ease({
scale_y: 0
}, {
duration: DIALOG_DESTROY_WINDOW_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onStopped: () => {
this._destroyWindowDone(shellwm, actor);
}
});
break;
default:
shellwm.completed_destroy(actor);
@@ -2046,15 +2067,16 @@ var WindowManager = class {
xDest = -xDest;
yDest = -yDest;
Tweener.addTween(this._switchData.container,
{ x: xDest,
y: yDest,
time: WINDOW_ANIMATION_TIME,
transition: 'easeOutQuad',
onComplete: this._switchWorkspaceDone,
onCompleteScope: this,
onCompleteParams: [shellwm]
});
this._switchData.container.ease({
x: xDest,
y: yDest
}, {
time: WINDOW_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => {
this._switchWorkspaceDone(shellwm);
}
});
}
_switchWorkspaceDone(shellwm) {
@@ -2121,14 +2143,7 @@ var WindowManager = class {
Main.ctrlAltTabManager.popup(binding.is_reversed(), binding.get_name(), binding.get_mask());
}
_allowFavoriteShortcuts() {
return Main.sessionMode.hasOverview;
}
_switchToApplication(display, window, binding) {
if (!this._allowFavoriteShortcuts())
return;
let [,,,target] = binding.get_name().split('-');
let apps = AppFavorites.getAppFavorites().getFavorites();
let app = apps[target - 1];

View File

@@ -1,6 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*
const { GLib, Meta, St } = imports.gi;
const { Meta, St } = imports.gi;
const BoxPointer = imports.ui.boxpointer;
const Main = imports.ui.main;
@@ -42,13 +42,13 @@ var WindowMenu = class extends PopupMenu.PopupMenu {
item.setSensitive(false);
item = this.addAction(_("Move"), event => {
this._grabAction(window, Meta.GrabOp.KEYBOARD_MOVING, event.get_time());
window.begin_grab_op(Meta.GrabOp.KEYBOARD_MOVING, true, event.get_time());
});
if (!window.allows_move())
item.setSensitive(false);
item = this.addAction(_("Resize"), event => {
this._grabAction(window, Meta.GrabOp.KEYBOARD_RESIZING_UNKNOWN, event.get_time());
window.begin_grab_op(Meta.GrabOp.KEYBOARD_RESIZING_UNKNOWN, true, event.get_time());
});
if (!window.allows_resize())
item.setSensitive(false);
@@ -169,26 +169,6 @@ var WindowMenu = class extends PopupMenu.PopupMenu {
if (!window.can_close())
item.setSensitive(false);
}
_grabAction(window, grabOp, time) {
if (global.display.get_grab_op() == Meta.GrabOp.NONE) {
window.begin_grab_op(grabOp, true, time);
return;
}
let waitId = 0;
let id = global.display.connect('grab-op-end', (display) => {
display.disconnect(id);
GLib.source_remove(waitId);
window.begin_grab_op(grabOp, true, time);
});
waitId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 100, () => {
global.display.disconnect(id);
return GLib.SOURCE_REMOVE;
});
}
};
var WindowMenuManager = class {
@@ -203,9 +183,6 @@ var WindowMenuManager = class {
}
showWindowMenuForWindow(window, type, rect) {
if (!Main.sessionMode.hasWmMenus)
return;
if (type != Meta.WindowMenuType.WM)
throw new Error('Unsupported window menu type');
let menu = new WindowMenu(window, this._sourceActor);

View File

@@ -835,7 +835,7 @@ var LayoutStrategy = class {
// (optionally) for each row in @layout.rows. This method is
// intended to be called by subclasses.
_computeRowSizes(layout) {
throw new GObject.NotImplementedError(`_computeRowSizes in ${this.constructor.name}`);
throw new Error('_computeRowSizes not implemented');
}
// Compute strategy-specific window slots for each window in
@@ -848,7 +848,7 @@ var LayoutStrategy = class {
// * gridHeight - The totial height used by the grid, unscaled, unspaced.
// * rows - A list of rows, which should be instantiated by _newRow.
computeLayout(windows, layout) {
throw new GObject.NotImplementedError(`computeLayout in ${this.constructor.name}`);
throw new Error('computeLayout not implemented');
}
// Given @layout, compute the overall scale and space of the layout.

View File

@@ -483,6 +483,7 @@ var WorkspacesDisplay = class {
this._primaryIndex = Main.layoutManager.primaryIndex;
this._workspacesViews = [];
this._primaryScrollAdjustment = null;
switchGesture.enabled = this.actor.mapped;
this._settings = new Gio.Settings({ schema_id: MUTTER_SCHEMA });
@@ -490,6 +491,8 @@ var WorkspacesDisplay = class {
this._workspacesOnlyOnPrimaryChanged.bind(this));
this._workspacesOnlyOnPrimaryChanged();
this._switchWorkspaceNotifyId = 0;
this._notifyOpacityId = 0;
this._restackedNotifyId = 0;
this._scrollEventId = 0;

View File

@@ -1,5 +1,5 @@
project('gnome-shell', 'c',
version: '3.33.3',
version: '3.33.1',
meson_version: '>= 0.47.0',
license: 'GPLv2+'
)
@@ -14,16 +14,16 @@ cogl_pango_pc = 'mutter-cogl-pango-' + mutter_api_version
libmutter_pc = 'libmutter-' + mutter_api_version
croco_req = '>= 0.6.8'
ecal_req = '>= 3.33.1'
ecal_req = '>= 3.5.3'
eds_req = '>= 3.17.2'
gcr_req = '>= 3.7.5'
gdesktop_req = '>= 3.7.90'
gio_req = '>= 2.56.0'
gi_req = '>= 1.49.1'
gjs_req = '>= 1.57.3'
gjs_req = '>= 1.54.0'
gtk_req = '>= 3.15.0'
json_glib_req = '>= 0.13.2'
mutter_req = '>= 3.33.3'
mutter_req = '>= 3.33.1'
polkit_req = '>= 0.100'
schemas_req = '>= 3.27.90'
startup_req = '>= 0.11'
@@ -73,7 +73,7 @@ else
endif
atk_bridge_dep = dependency('atk-bridge-2.0')
ecal_dep = dependency('libecal-2.0', version: ecal_req)
ecal_dep = dependency('libecal-1.2', version: ecal_req)
eds_dep = dependency('libedataserver-1.2', version: eds_req)
gcr_dep = dependency('gcr-base-3', version: gcr_req)
gdk_x11_dep = dependency('gdk-x11-3.0')
@@ -167,57 +167,47 @@ cdata.set('HAVE_FDWALK',
cc.has_function('fdwalk')
)
buildtype = get_option('buildtype')
if buildtype != 'plain'
all_warnings = [
'-fno-strict-aliasing',
'-Wpointer-arith',
'-Wmissing-declarations',
'-Wimplicit-function-declaration',
'-Wformat=2',
'-Wformat-nonliteral',
'-Wformat-security',
'-Wstrict-prototypes',
'-Wmissing-prototypes',
'-Wnested-externs',
'-Wold-style-definition',
'-Wundef',
'-Wunused',
'-Wcast-align',
'-Wmissing-noreturn',
'-Wmissing-format-attribute',
'-Wmissing-include-dirs',
'-Wlogical-op',
'-Wignored-qualifiers',
'-Werror=redundant-decls',
'-Werror=implicit',
'-Werror=nonnull',
'-Werror=init-self',
'-Werror=main',
'-Werror=missing-braces',
'-Werror=sequence-point',
'-Werror=return-type',
'-Werror=trigraphs',
'-Werror=array-bounds',
'-Werror=write-strings',
'-Werror=address',
'-Werror=int-to-pointer-cast',
'-Werror=pointer-to-int-cast',
'-Werror=empty-body',
'-Werror=write-strings',
]
supported_warnings = cc.get_supported_arguments(all_warnings)
add_project_arguments(supported_warnings, language: 'c')
endif
all_warnings = [
'-fno-strict-aliasing',
'-Wpointer-arith',
'-Wmissing-declarations',
'-Wimplicit-function-declaration',
'-Wformat=2',
'-Wformat-nonliteral',
'-Wformat-security',
'-Wstrict-prototypes',
'-Wmissing-prototypes',
'-Wnested-externs',
'-Wold-style-definition',
'-Wundef',
'-Wunused',
'-Wcast-align',
'-Wmissing-noreturn',
'-Wmissing-format-attribute',
'-Wmissing-include-dirs',
'-Wlogical-op',
'-Wignored-qualifiers',
'-Werror=redundant-decls',
'-Werror=implicit',
'-Werror=nonnull',
'-Werror=init-self',
'-Werror=main',
'-Werror=missing-braces',
'-Werror=sequence-point',
'-Werror=return-type',
'-Werror=trigraphs',
'-Werror=array-bounds',
'-Werror=write-strings',
'-Werror=address',
'-Werror=int-to-pointer-cast',
'-Werror=pointer-to-int-cast',
'-Werror=empty-body',
'-Werror=write-strings',
]
if get_option('debug')
debug_c_args = [
'-DG_ENABLE_DEBUG',
'-fno-omit-frame-pointer'
]
supported_debug_c_args = cc.get_supported_arguments(debug_c_args)
add_project_arguments(supported_debug_c_args, language: 'c')
endif
supported_warnings = cc.get_supported_arguments(all_warnings)
add_project_arguments(supported_warnings, language: 'c')
config_h = configure_file(
input: 'config.h.meson',

View File

@@ -54,7 +54,6 @@ js/ui/shellMountOperation.js
js/ui/status/accessibility.js
js/ui/status/bluetooth.js
js/ui/status/brightness.js
js/ui/status/dwellClick.js
js/ui/status/keyboard.js
js/ui/status/location.js
js/ui/status/network.js

1031
po/ca.po

File diff suppressed because it is too large Load Diff

322
po/es.po
View File

@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell.master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2019-06-06 11:42+0000\n"
"PO-Revision-Date: 2019-06-10 12:04+0200\n"
"POT-Creation-Date: 2019-04-17 19:29+0000\n"
"PO-Revision-Date: 2019-04-23 10:15+0200\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: es <gnome-es-list@gnome.org>\n"
"Language: es\n"
@@ -428,11 +428,10 @@ msgstr ""
msgid "Browse in Software"
msgstr "Buscar en Software"
#: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:52
#: js/ui/components/networkAgent.js:118 js/ui/components/polkitAgent.js:138
#: js/ui/endSessionDialog.js:431 js/ui/extensionDownloader.js:188
#: js/ui/shellMountOperation.js:404 js/ui/shellMountOperation.js:413
#: js/ui/status/network.js:894
#: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:55
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:136
#: js/ui/endSessionDialog.js:430 js/ui/extensionDownloader.js:188
#: js/ui/shellMountOperation.js:325 js/ui/status/network.js:888
msgid "Cancel"
msgstr "Cancelar"
@@ -440,7 +439,7 @@ msgstr "Cancelar"
msgid "Next"
msgstr "Siguiente"
#: js/gdm/authPrompt.js:198 js/ui/shellMountOperation.js:408
#: js/gdm/authPrompt.js:198 js/ui/shellMountOperation.js:329
#: js/ui/unlockDialog.js:41
msgid "Unlock"
msgstr "Desbloquear"
@@ -471,8 +470,8 @@ msgstr "(ej., usuario 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:889 js/ui/components/networkAgent.js:244
#: js/ui/components/networkAgent.js:264 js/ui/components/networkAgent.js:282
#: js/gdm/loginDialog.js:889 js/ui/components/networkAgent.js:243
#: js/ui/components/networkAgent.js:263 js/ui/components/networkAgent.js:281
msgid "Username: "
msgstr "Nombre de usuario:"
@@ -523,7 +522,7 @@ msgstr "Cerrar la sesión"
#. Translators: A list of keywords that match the logout action, separated by semicolons
#: js/misc/systemActions.js:105
msgid "logout;log out;sign off"
msgid "logout;sign off"
msgstr "cerrar;sesión;salir"
#. Translators: The name of the suspend action in search
@@ -709,11 +708,11 @@ msgstr ""
#. No support for non-modal system dialogs, so ignore the option
#. let modal = options['modal'] || true;
#: js/ui/accessDialog.js:38 js/ui/status/location.js:362
#: js/ui/accessDialog.js:37 js/ui/status/location.js:360
msgid "Deny Access"
msgstr "Denegar acceso"
#: js/ui/accessDialog.js:39 js/ui/status/location.js:365
#: js/ui/accessDialog.js:38 js/ui/status/location.js:363
msgid "Grant Access"
msgstr "Conceder acceso"
@@ -731,6 +730,7 @@ msgstr "Todas"
#. Translators: This is the heading of a list of open windows
#: js/ui/appDisplay.js:1713 js/ui/panel.js:79
#| msgid "Windows"
msgid "Open Windows"
msgstr "Ventanas abiertas"
@@ -764,23 +764,23 @@ msgstr "Se ha añadido %s a sus favoritos."
msgid "%s has been removed from your favorites."
msgstr "Se ha quitado %s de sus favoritos."
#: js/ui/audioDeviceSelection.js:39
#: js/ui/audioDeviceSelection.js:42
msgid "Select Audio Device"
msgstr "Seleccionar dispositivo de sonido"
#: js/ui/audioDeviceSelection.js:50
#: js/ui/audioDeviceSelection.js:53
msgid "Sound Settings"
msgstr "Configuración de sonido"
#: js/ui/audioDeviceSelection.js:59
#: js/ui/audioDeviceSelection.js:62
msgid "Headphones"
msgstr "Auriculares"
#: js/ui/audioDeviceSelection.js:61
#: js/ui/audioDeviceSelection.js:64
msgid "Headset"
msgstr "Manos libres"
#: js/ui/audioDeviceSelection.js:63 js/ui/status/volume.js:247
#: js/ui/audioDeviceSelection.js:66 js/ui/status/volume.js:247
msgid "Microphone"
msgstr "Micrófono"
@@ -941,75 +941,67 @@ msgstr "Forzar la salida"
msgid "Wait"
msgstr "Esperar"
#: js/ui/components/automountManager.js:87
#: js/ui/components/automountManager.js:86
msgid "External drive connected"
msgstr "Dispositivo externo conectado"
#: js/ui/components/automountManager.js:99
#: js/ui/components/automountManager.js:98
msgid "External drive disconnected"
msgstr "Dispositivo externo desconectado"
#: js/ui/components/automountManager.js:211
msgid "Unable to unlock volume"
msgstr "No se puede desbloquear el volumen"
#: js/ui/components/automountManager.js:212
msgid "The installed udisks version does not support the PIM setting"
msgstr "La versión de udisks instalada no soporta la configuración PIM"
#: js/ui/components/autorunManager.js:334
#, javascript-format
msgid "Open with %s"
msgstr "Abrir con %s"
#: js/ui/components/keyring.js:66 js/ui/components/polkitAgent.js:257
#: js/ui/components/keyring.js:77 js/ui/components/polkitAgent.js:255
msgid "Password:"
msgstr "Contraseña:"
#: js/ui/components/keyring.js:97
#: js/ui/components/keyring.js:108
msgid "Type again:"
msgstr "Escriba de nuevo:"
#: js/ui/components/networkAgent.js:103
#: js/ui/components/networkAgent.js:102
msgid ""
"Alternatively you can connect by pushing the “WPS” button on your router."
msgstr ""
"Alternativamente puede conectarse pulsando el botón «WPS» de su router."
#: js/ui/components/networkAgent.js:113 js/ui/status/network.js:219
#: js/ui/status/network.js:310 js/ui/status/network.js:897
#: js/ui/components/networkAgent.js:112 js/ui/status/network.js:219
#: js/ui/status/network.js:309 js/ui/status/network.js:891
msgid "Connect"
msgstr "Conectar"
#. Cisco LEAP
#: js/ui/components/networkAgent.js:212 js/ui/components/networkAgent.js:224
#: js/ui/components/networkAgent.js:247 js/ui/components/networkAgent.js:266
#: js/ui/components/networkAgent.js:286 js/ui/components/networkAgent.js:296
#: js/ui/components/networkAgent.js:211 js/ui/components/networkAgent.js:223
#: js/ui/components/networkAgent.js:246 js/ui/components/networkAgent.js:265
#: js/ui/components/networkAgent.js:285 js/ui/components/networkAgent.js:295
msgid "Password: "
msgstr "Contraseña: "
#. static WEP
#: js/ui/components/networkAgent.js:217
#: js/ui/components/networkAgent.js:216
msgid "Key: "
msgstr "Clave:"
#: js/ui/components/networkAgent.js:250 js/ui/components/networkAgent.js:272
#: js/ui/components/networkAgent.js:249 js/ui/components/networkAgent.js:271
msgid "Private key password: "
msgstr "Contraseña de la clave privada:"
#: js/ui/components/networkAgent.js:270
#: js/ui/components/networkAgent.js:269
msgid "Identity: "
msgstr "Identidad:"
#: js/ui/components/networkAgent.js:284
#: js/ui/components/networkAgent.js:283
msgid "Service: "
msgstr "Servicio:"
#: js/ui/components/networkAgent.js:313 js/ui/components/networkAgent.js:686
#: js/ui/components/networkAgent.js:312 js/ui/components/networkAgent.js:685
msgid "Authentication required by wireless network"
msgstr "La red inalámbrica requiere autenticación"
#: js/ui/components/networkAgent.js:314 js/ui/components/networkAgent.js:687
#: js/ui/components/networkAgent.js:313 js/ui/components/networkAgent.js:686
#, javascript-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
@@ -1018,53 +1010,53 @@ msgstr ""
"Se necesitan contraseñas o claves de cifrado para acceder a la red "
"inalámbrica «%s»."
#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:690
#: js/ui/components/networkAgent.js:317 js/ui/components/networkAgent.js:689
msgid "Wired 802.1X authentication"
msgstr "Autenticación 802.1X cableada"
#: js/ui/components/networkAgent.js:320
#: js/ui/components/networkAgent.js:319
msgid "Network name: "
msgstr "Nombre de la red: "
#: js/ui/components/networkAgent.js:325 js/ui/components/networkAgent.js:694
#: js/ui/components/networkAgent.js:324 js/ui/components/networkAgent.js:693
msgid "DSL authentication"
msgstr "Autenticación DSL"
#: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:700
#: js/ui/components/networkAgent.js:331 js/ui/components/networkAgent.js:699
msgid "PIN code required"
msgstr "Código PIN requerido"
#: js/ui/components/networkAgent.js:333 js/ui/components/networkAgent.js:701
#: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:700
msgid "PIN code is needed for the mobile broadband device"
msgstr "Se necesita un código PIN para el dispositivo de banda ancha móvil"
#: js/ui/components/networkAgent.js:334
#: js/ui/components/networkAgent.js:333
msgid "PIN: "
msgstr "PIN: "
#: js/ui/components/networkAgent.js:341 js/ui/components/networkAgent.js:707
#: js/ui/components/networkAgent.js:340 js/ui/components/networkAgent.js:706
msgid "Mobile broadband network password"
msgstr "Contraseña de la red de banda ancha móvil"
#: js/ui/components/networkAgent.js:342 js/ui/components/networkAgent.js:691
#: js/ui/components/networkAgent.js:695 js/ui/components/networkAgent.js:708
#: js/ui/components/networkAgent.js:341 js/ui/components/networkAgent.js:690
#: js/ui/components/networkAgent.js:694 js/ui/components/networkAgent.js:707
#, javascript-format
msgid "A password is required to connect to “%s”."
msgstr "Se requiere una contraseña para conectarse a «%s»."
#: js/ui/components/networkAgent.js:675 js/ui/status/network.js:1670
#: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1664
msgid "Network Manager"
msgstr "Gestor de la red"
#: js/ui/components/polkitAgent.js:36
#: js/ui/components/polkitAgent.js:34
msgid "Authentication Required"
msgstr "Se necesita autenticación"
#: js/ui/components/polkitAgent.js:64
#: js/ui/components/polkitAgent.js:62
msgid "Administrator"
msgstr "Administrador"
#: js/ui/components/polkitAgent.js:141
#: js/ui/components/polkitAgent.js:139
msgid "Authenticate"
msgstr "Autenticar"
@@ -1072,7 +1064,7 @@ msgstr "Autenticar"
#. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password),
#. * for instance.
#: js/ui/components/polkitAgent.js:243 js/ui/shellMountOperation.js:389
#: js/ui/components/polkitAgent.js:241 js/ui/shellMountOperation.js:309
msgid "Sorry, that didnt work. Please try again."
msgstr "Eso no ha funcionado. Inténtelo de nuevo."
@@ -1266,27 +1258,27 @@ msgstr ""
"puede tardar mucho tiempo: asegúrese de que tiene una copia de respaldo y de "
"que el equipo está enchufado."
#: js/ui/endSessionDialog.js:310
#: js/ui/endSessionDialog.js:309
msgid "Running on battery power: please plug in before installing updates."
msgstr ""
"Funcionando con batería: conéctese antes de instalar las actualizaciones."
#: js/ui/endSessionDialog.js:327
#: js/ui/endSessionDialog.js:326
msgid "Some applications are busy or have unsaved work."
msgstr "Algunas aplicaciones están ocupadas o tienen trabajo sin guardar."
#: js/ui/endSessionDialog.js:334
#: js/ui/endSessionDialog.js:333
msgid "Other users are logged in."
msgstr "Hay otros usuarios con la sesión iniciada."
#. Translators: Remote here refers to a remote session, like a ssh login
#: js/ui/endSessionDialog.js:615
#: js/ui/endSessionDialog.js:614
#, javascript-format
msgid "%s (remote)"
msgstr "%s (remoto)"
#. Translators: Console here refers to a tty like a VT console
#: js/ui/endSessionDialog.js:618
#: js/ui/endSessionDialog.js:617
#, javascript-format
msgid "%s (console)"
msgstr "%s (consola)"
@@ -1373,13 +1365,13 @@ msgid "Leave On"
msgstr "Dejar activada"
#: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133
#: js/ui/status/network.js:1269
#: js/ui/status/network.js:1263
msgid "Turn On"
msgstr "Encender"
#: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133
#: js/ui/status/network.js:128 js/ui/status/network.js:311
#: js/ui/status/network.js:1269 js/ui/status/network.js:1381
#: js/ui/status/network.js:128 js/ui/status/network.js:310
#: js/ui/status/network.js:1263 js/ui/status/network.js:1375
#: js/ui/status/nightLight.js:39 js/ui/status/rfkill.js:79
#: js/ui/status/rfkill.js:106
msgid "Turn Off"
@@ -1441,7 +1433,7 @@ msgstr "Ver fuente"
msgid "Web Page"
msgstr "Página web"
#: js/ui/messageTray.js:1479
#: js/ui/messageTray.js:1480
msgid "System Information"
msgstr "Información del sistema"
@@ -1534,23 +1526,23 @@ msgctxt "System menu in the top bar"
msgid "System"
msgstr "Sistema"
#: js/ui/panel.js:862
#: js/ui/panel.js:864
msgid "Top Bar"
msgstr "Barra superior"
#: js/ui/runDialog.js:65
#: js/ui/runDialog.js:64
msgid "Enter a Command"
msgstr "Introducir un comando"
#: js/ui/runDialog.js:105 js/ui/windowMenu.js:166
#: js/ui/runDialog.js:104 js/ui/windowMenu.js:166
msgid "Close"
msgstr "Cerrar"
#: js/ui/runDialog.js:267
#: js/ui/runDialog.js:266
msgid "Restart is not available on Wayland"
msgstr "Reiniciar no está disponible en Wayland"
#: js/ui/runDialog.js:272
#: js/ui/runDialog.js:271
msgid "Restarting…"
msgstr "Reiniciando…"
@@ -1597,15 +1589,15 @@ msgstr "No se pudo bloquear"
msgid "Lock was blocked by an application"
msgstr "Una aplicación impidió el bloqueo"
#: js/ui/search.js:638
#: js/ui/search.js:635
msgid "Searching…"
msgstr "Buscando…"
#: js/ui/search.js:640
#: js/ui/search.js:637
msgid "No results."
msgstr "No se encontraron resultados."
#: js/ui/search.js:764
#: js/ui/search.js:761
#, javascript-format
msgid "%d more"
msgid_plural "%d more"
@@ -1628,61 +1620,14 @@ msgstr "Mostrar texto"
msgid "Hide Text"
msgstr "Ocultar texto"
#: js/ui/shellMountOperation.js:318
msgid "Hidden Volume"
msgstr "Ocultar volumen"
#: js/ui/shellMountOperation.js:321
msgid "Windows System Volume"
msgstr "Volumen de sistema Windows"
#: js/ui/shellMountOperation.js:324
msgid "Uses Keyfiles"
msgstr "Usa archivos de claves"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:330
#, javascript-format
msgid ""
"To unlock a volume that uses keyfiles, use the <i>%s</i> utility instead."
msgstr ""
"Para desbloquear un volumen que usa archivos de claves use la herramienta <i>"
"%s</i> en su lugar."
#: js/ui/shellMountOperation.js:337
msgid "PIM Number"
msgstr "Número PIM"
#: js/ui/shellMountOperation.js:355
msgid "The PIM must be a number or empty."
msgstr "El PIM debe ser un número o estar vacío."
#: js/ui/shellMountOperation.js:366
#: js/ui/shellMountOperation.js:296
msgid "Password"
msgstr "Contraseña"
#: js/ui/shellMountOperation.js:396
#: js/ui/shellMountOperation.js:317
msgid "Remember Password"
msgstr "Recordar contraseña"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:418
#, javascript-format
msgid "Open %s"
msgstr "Abrir %s"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:490
#, javascript-format
msgid "Unable to start %s"
msgstr "No se puede iniciar %s"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:492
#, javascript-format
msgid "Couldnt find the %s application"
msgstr "No se pudo encontrar la aplicación %s"
#: js/ui/status/accessibility.js:35
msgid "Accessibility"
msgstr "Accesibilidad"
@@ -1719,11 +1664,11 @@ msgstr "Rechazo de teclas"
msgid "Mouse Keys"
msgstr "Teclas del ratón"
#: js/ui/status/accessibility.js:135
#: js/ui/status/accessibility.js:151
msgid "High Contrast"
msgstr "Contraste alto"
#: js/ui/status/accessibility.js:177
#: js/ui/status/accessibility.js:182
msgid "Large Text"
msgstr "Texto grande"
@@ -1731,7 +1676,7 @@ msgstr "Texto grande"
msgid "Bluetooth"
msgstr "Bluetooth"
#: js/ui/status/bluetooth.js:47 js/ui/status/network.js:586
#: js/ui/status/bluetooth.js:47 js/ui/status/network.js:585
msgid "Bluetooth Settings"
msgstr "Configuración de Bluetooth"
@@ -1755,31 +1700,11 @@ msgstr "Encendido"
msgid "Brightness"
msgstr "Brillo"
#: js/ui/status/dwellClick.js:13
msgid "Single Click"
msgstr "Una sola pulsación"
#: js/ui/status/dwellClick.js:18
msgid "Double Click"
msgstr "Doble pulsación"
#: js/ui/status/dwellClick.js:23
msgid "Drag"
msgstr "Arrastrar"
#: js/ui/status/dwellClick.js:28
msgid "Secondary Click"
msgstr "Pulsación secundaria"
#: js/ui/status/dwellClick.js:37
msgid "Dwell Click"
msgstr "Pulsación al posarse"
#: js/ui/status/keyboard.js:813
#: js/ui/status/keyboard.js:812
msgid "Keyboard"
msgstr "Teclado"
#: js/ui/status/keyboard.js:835
#: js/ui/status/keyboard.js:834
msgid "Show Keyboard Layout"
msgstr "Mostrar la distribución del teclado"
@@ -1808,12 +1733,12 @@ msgid "Enable"
msgstr "Activar"
#. Translators: %s is an application name
#: js/ui/status/location.js:355
#: js/ui/status/location.js:353
#, javascript-format
msgid "Give %s access to your location?"
msgstr "¿Conceder acceso a %s a su ubicación?"
#: js/ui/status/location.js:356
#: js/ui/status/location.js:354
msgid "Location access can be changed at any time from the privacy settings."
msgstr ""
"Los servicios de ubicación se pueden cambiar en cualquier momento desde la "
@@ -1824,13 +1749,13 @@ msgid "<unknown>"
msgstr "<desconocido>"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:417 js/ui/status/network.js:1298
#: js/ui/status/network.js:416 js/ui/status/network.js:1292
#, javascript-format
msgid "%s Off"
msgstr "%s apagada"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:420
#: js/ui/status/network.js:419
#, javascript-format
msgid "%s Connected"
msgstr "%s conectada"
@@ -1838,189 +1763,189 @@ msgstr "%s conectada"
#. 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:425
#: js/ui/status/network.js:424
#, javascript-format
msgid "%s Unmanaged"
msgstr "%s sin gestionar"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:428
#: js/ui/status/network.js:427
#, javascript-format
msgid "%s Disconnecting"
msgstr "Desconectando %s"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:435 js/ui/status/network.js:1290
#: js/ui/status/network.js:434 js/ui/status/network.js:1284
#, javascript-format
msgid "%s Connecting"
msgstr "Conectando %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:438
#: js/ui/status/network.js:437
#, javascript-format
msgid "%s Requires Authentication"
msgstr "%s requiere autenticación"
#. 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:446
#: js/ui/status/network.js:445
#, javascript-format
msgid "Firmware Missing For %s"
msgstr "Falta el «firmware» para %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:450
#: js/ui/status/network.js:449
#, javascript-format
msgid "%s Unavailable"
msgstr "%s no disponible"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:453
#: js/ui/status/network.js:452
#, javascript-format
msgid "%s Connection Failed"
msgstr "Falló la conexión %s"
#: js/ui/status/network.js:465
#: js/ui/status/network.js:464
msgid "Wired Settings"
msgstr "Configuración de red cableada"
#: js/ui/status/network.js:507
#: js/ui/status/network.js:506
msgid "Mobile Broadband Settings"
msgstr "Configuración de banda ancha móvil"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:554 js/ui/status/network.js:1295
#: js/ui/status/network.js:553 js/ui/status/network.js:1289
#, javascript-format
msgid "%s Hardware Disabled"
msgstr "Hardware %s desactivado"
#. 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:558
#: js/ui/status/network.js:557
#, javascript-format
msgid "%s Disabled"
msgstr "%s desactivado"
#: js/ui/status/network.js:598
#: js/ui/status/network.js:597
msgid "Connect to Internet"
msgstr "Conectar a Internet"
#: js/ui/status/network.js:792
#: js/ui/status/network.js:786
msgid "Airplane Mode is On"
msgstr "El modo avión está activado"
#: js/ui/status/network.js:793
#: js/ui/status/network.js:787
msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "La Wi-Fi se desactiva cuando se activa el modo avión."
#: js/ui/status/network.js:794
#: js/ui/status/network.js:788
msgid "Turn Off Airplane Mode"
msgstr "Apagar el modo avión"
#: js/ui/status/network.js:803
#: js/ui/status/network.js:797
msgid "Wi-Fi is Off"
msgstr "La Wi-Fi está desactivada"
#: js/ui/status/network.js:804
#: js/ui/status/network.js:798
msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "Se debe activar la Wi-Fi para poder conectarse a la red."
#: js/ui/status/network.js:805
#: js/ui/status/network.js:799
msgid "Turn On Wi-Fi"
msgstr "Activar la Wi-Fi"
#: js/ui/status/network.js:830
#: js/ui/status/network.js:824
msgid "Wi-Fi Networks"
msgstr "Redes Wi-Fi"
#: js/ui/status/network.js:832
#: js/ui/status/network.js:826
msgid "Select a network"
msgstr "Seleccionar una red"
#: js/ui/status/network.js:861
#: js/ui/status/network.js:855
msgid "No Networks"
msgstr "No hay redes"
#: js/ui/status/network.js:882 js/ui/status/rfkill.js:104
#: js/ui/status/network.js:876 js/ui/status/rfkill.js:104
msgid "Use hardware switch to turn off"
msgstr "Usar el interruptor hardware para apagar"
#: js/ui/status/network.js:1158
#: js/ui/status/network.js:1152
msgid "Select Network"
msgstr "Seleccionar red"
#: js/ui/status/network.js:1164
#: js/ui/status/network.js:1158
msgid "Wi-Fi Settings"
msgstr "Configuración de Wi-Fi"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1286
#: js/ui/status/network.js:1280
#, javascript-format
msgid "%s Hotspot Active"
msgstr "Punto de acceso %s activo"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1301
#: js/ui/status/network.js:1295
#, javascript-format
msgid "%s Not Connected"
msgstr "%s no conectado"
#: js/ui/status/network.js:1398
#: js/ui/status/network.js:1392
msgid "connecting…"
msgstr "conectando…"
#. Translators: this is for network connections that require some kind of key or password
#: js/ui/status/network.js:1401
#: js/ui/status/network.js:1395
msgid "authentication required"
msgstr "se necesita autenticación"
#: js/ui/status/network.js:1403
#: js/ui/status/network.js:1397
msgid "connection failed"
msgstr "falló la conexión"
#: js/ui/status/network.js:1453
#: js/ui/status/network.js:1447
msgid "VPN Settings"
msgstr "Configuración de VPN"
#: js/ui/status/network.js:1470
#: js/ui/status/network.js:1464
msgid "VPN"
msgstr "VPN"
#: js/ui/status/network.js:1480
#: js/ui/status/network.js:1474
msgid "VPN Off"
msgstr "VPN apagada"
#: js/ui/status/network.js:1541 js/ui/status/rfkill.js:82
#: js/ui/status/network.js:1535 js/ui/status/rfkill.js:82
msgid "Network Settings"
msgstr "Configuración de la red"
#: js/ui/status/network.js:1570
#: js/ui/status/network.js:1564
#, javascript-format
msgid "%s Wired Connection"
msgid_plural "%s Wired Connections"
msgstr[0] "%s conexión cableada"
msgstr[1] "%s conexiones cableadas"
#: js/ui/status/network.js:1574
#: js/ui/status/network.js:1568
#, javascript-format
msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections"
msgstr[0] "%s conexión inalámbrica"
msgstr[1] "%s conexiones inalámbricas"
#: js/ui/status/network.js:1578
#: js/ui/status/network.js:1572
#, javascript-format
msgid "%s Modem Connection"
msgid_plural "%s Modem Connections"
msgstr[0] "%s conexión por módem"
msgstr[1] "%s conexiones por módem"
#: js/ui/status/network.js:1711
#: js/ui/status/network.js:1705
msgid "Connection failed"
msgstr "Falló la conexión"
#: js/ui/status/network.js:1712
#: js/ui/status/network.js:1706
msgid "Activation of network connection failed"
msgstr "Falló la activación de la conexión de red"
@@ -2202,22 +2127,22 @@ msgstr "Buscar"
msgid "“%s” is ready"
msgstr "«%s» está preparado"
#: js/ui/windowManager.js:54
#: js/ui/windowManager.js:53
msgid "Do you want to keep these display settings?"
msgstr "¿Quiere mantener esta configuración de la pantalla?"
#. Translators: this and the following message should be limited in length,
#. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels.
#.
#: js/ui/windowManager.js:66
#: js/ui/windowManager.js:65
msgid "Revert Settings"
msgstr "Revertir configuración"
#: js/ui/windowManager.js:69
#: js/ui/windowManager.js:68
msgid "Keep Changes"
msgstr "Mantener cambios"
#: js/ui/windowManager.js:87
#: js/ui/windowManager.js:86
#, javascript-format
msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds"
@@ -2226,7 +2151,7 @@ msgstr[1] "La configuración se revertirá en %d segundos"
#. 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:678
#: js/ui/windowManager.js:677
#, javascript-format
msgid "%d × %d"
msgstr "%d × %d"
@@ -2327,11 +2252,11 @@ msgstr "Desconocido"
msgid "Failed to launch “%s”"
msgstr "Falló al lanzar «%s»"
#: src/shell-keyring-prompt.c:731
#: src/shell-keyring-prompt.c:730
msgid "Passwords do not match."
msgstr "Las contraseñas no coinciden."
#: src/shell-keyring-prompt.c:739
#: src/shell-keyring-prompt.c:738
msgid "Password cannot be blank"
msgstr "La contraseña no puede estar vacía"
@@ -2587,6 +2512,9 @@ msgstr "Sonidos del sistema"
#~ msgid "Internal error"
#~ msgstr "Error interno"
#~ msgid "Unable to connect to %s"
#~ msgstr "No se pudo conectar a %s"
#~ msgid "View account"
#~ msgstr "Ver cuenta"

336
po/fur.po
View File

@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: video-subtitles master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2019-06-06 11:42+0000\n"
"PO-Revision-Date: 2019-06-11 11:25+0200\n"
"POT-Creation-Date: 2019-04-17 19:29+0000\n"
"PO-Revision-Date: 2019-04-26 16:10+0200\n"
"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
"Language-Team: Friulian <fur@li.org>\n"
"Language: fur\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.2.3\n"
"X-Generator: Poedit 2.2.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: data/50-gnome-shell-system.xml:6
@@ -419,11 +419,10 @@ msgstr ""
msgid "Browse in Software"
msgstr "Esplore in Software"
#: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:52
#: js/ui/components/networkAgent.js:118 js/ui/components/polkitAgent.js:138
#: js/ui/endSessionDialog.js:431 js/ui/extensionDownloader.js:188
#: js/ui/shellMountOperation.js:404 js/ui/shellMountOperation.js:413
#: js/ui/status/network.js:894
#: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:55
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:136
#: js/ui/endSessionDialog.js:430 js/ui/extensionDownloader.js:188
#: js/ui/shellMountOperation.js:325 js/ui/status/network.js:888
msgid "Cancel"
msgstr "Anule"
@@ -431,7 +430,7 @@ msgstr "Anule"
msgid "Next"
msgstr "Indenant"
#: js/gdm/authPrompt.js:198 js/ui/shellMountOperation.js:408
#: js/gdm/authPrompt.js:198 js/ui/shellMountOperation.js:329
#: js/ui/unlockDialog.js:41
msgid "Unlock"
msgstr "Sbloche"
@@ -462,10 +461,10 @@ msgstr "(p.e., utent 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:889 js/ui/components/networkAgent.js:244
#: js/ui/components/networkAgent.js:264 js/ui/components/networkAgent.js:282
#: js/gdm/loginDialog.js:889 js/ui/components/networkAgent.js:243
#: js/ui/components/networkAgent.js:263 js/ui/components/networkAgent.js:281
msgid "Username: "
msgstr "Non utent: "
msgstr "Non utent:"
#: js/gdm/loginDialog.js:1227
msgid "Login Window"
@@ -514,8 +513,8 @@ msgstr "Jessî"
#. Translators: A list of keywords that match the logout action, separated by semicolons
#: js/misc/systemActions.js:105
msgid "logout;log out;sign off"
msgstr "jessî;sierâ session;disconeti"
msgid "logout;sign off"
msgstr "jessî;sierâ session"
#. Translators: The name of the suspend action in search
#: js/misc/systemActions.js:109
@@ -701,11 +700,11 @@ msgstr ""
#. No support for non-modal system dialogs, so ignore the option
#. let modal = options['modal'] || true;
#: js/ui/accessDialog.js:38 js/ui/status/location.js:362
#: js/ui/accessDialog.js:37 js/ui/status/location.js:360
msgid "Deny Access"
msgstr "Dinee acès"
#: js/ui/accessDialog.js:39 js/ui/status/location.js:365
#: js/ui/accessDialog.js:38 js/ui/status/location.js:363
msgid "Grant Access"
msgstr "Garantìs l'acès"
@@ -756,23 +755,23 @@ msgstr "%s al è stât zontât tai tiei preferîts."
msgid "%s has been removed from your favorites."
msgstr "%s al è stât gjavât dai tiei preferîts."
#: js/ui/audioDeviceSelection.js:39
#: js/ui/audioDeviceSelection.js:42
msgid "Select Audio Device"
msgstr "Selezione dispositîf sonôr"
#: js/ui/audioDeviceSelection.js:50
#: js/ui/audioDeviceSelection.js:53
msgid "Sound Settings"
msgstr "Impostazions suns"
#: js/ui/audioDeviceSelection.js:59
#: js/ui/audioDeviceSelection.js:62
msgid "Headphones"
msgstr "Cufis"
#: js/ui/audioDeviceSelection.js:61
#: js/ui/audioDeviceSelection.js:64
msgid "Headset"
msgstr "Cufis cun microfon"
#: js/ui/audioDeviceSelection.js:63 js/ui/status/volume.js:247
#: js/ui/audioDeviceSelection.js:66 js/ui/status/volume.js:247
msgid "Microphone"
msgstr "Microfon"
@@ -933,75 +932,67 @@ msgstr "Sfuarce jessude"
msgid "Wait"
msgstr "Spiete"
#: js/ui/components/automountManager.js:87
#: js/ui/components/automountManager.js:86
msgid "External drive connected"
msgstr "Dispositîf esterni tacât"
#: js/ui/components/automountManager.js:99
#: js/ui/components/automountManager.js:98
msgid "External drive disconnected"
msgstr "Dispositîf esterni distacât"
#: js/ui/components/automountManager.js:211
msgid "Unable to unlock volume"
msgstr "Impussibil sblocâ il volum"
#: js/ui/components/automountManager.js:212
msgid "The installed udisks version does not support the PIM setting"
msgstr "La version di udisks instalade no supuarte la impostazion PIM"
#: js/ui/components/autorunManager.js:334
#, javascript-format
msgid "Open with %s"
msgstr "Vierç cun %s"
#: js/ui/components/keyring.js:66 js/ui/components/polkitAgent.js:257
#: js/ui/components/keyring.js:77 js/ui/components/polkitAgent.js:255
msgid "Password:"
msgstr "Password:"
#: js/ui/components/keyring.js:97
#: js/ui/components/keyring.js:108
msgid "Type again:"
msgstr "Scîf di gnûf:"
#: js/ui/components/networkAgent.js:103
#: js/ui/components/networkAgent.js:102
msgid ""
"Alternatively you can connect by pushing the “WPS” button on your router."
msgstr ""
"In alternative al è pussibil conetisi fracant il boton “WPS” sul router."
#: js/ui/components/networkAgent.js:113 js/ui/status/network.js:219
#: js/ui/status/network.js:310 js/ui/status/network.js:897
#: js/ui/components/networkAgent.js:112 js/ui/status/network.js:219
#: js/ui/status/network.js:309 js/ui/status/network.js:891
msgid "Connect"
msgstr "Conet"
#. Cisco LEAP
#: js/ui/components/networkAgent.js:212 js/ui/components/networkAgent.js:224
#: js/ui/components/networkAgent.js:247 js/ui/components/networkAgent.js:266
#: js/ui/components/networkAgent.js:286 js/ui/components/networkAgent.js:296
#: js/ui/components/networkAgent.js:211 js/ui/components/networkAgent.js:223
#: js/ui/components/networkAgent.js:246 js/ui/components/networkAgent.js:265
#: js/ui/components/networkAgent.js:285 js/ui/components/networkAgent.js:295
msgid "Password: "
msgstr "Password: "
#. static WEP
#: js/ui/components/networkAgent.js:217
#: js/ui/components/networkAgent.js:216
msgid "Key: "
msgstr "Clâf: "
msgstr "Clâf:"
#: js/ui/components/networkAgent.js:250 js/ui/components/networkAgent.js:272
#: js/ui/components/networkAgent.js:249 js/ui/components/networkAgent.js:271
msgid "Private key password: "
msgstr "Password di clâf privade: "
msgstr "Password di clâf privade:"
#: js/ui/components/networkAgent.js:270
#: js/ui/components/networkAgent.js:269
msgid "Identity: "
msgstr "Identitât: "
msgstr "Identitât:"
#: js/ui/components/networkAgent.js:284
#: js/ui/components/networkAgent.js:283
msgid "Service: "
msgstr "Servizi: "
msgstr "Servizi:"
#: js/ui/components/networkAgent.js:313 js/ui/components/networkAgent.js:686
#: js/ui/components/networkAgent.js:312 js/ui/components/networkAgent.js:685
msgid "Authentication required by wireless network"
msgstr "La rêt cence fîl e domande autenticazion"
#: js/ui/components/networkAgent.js:314 js/ui/components/networkAgent.js:687
#: js/ui/components/networkAgent.js:313 js/ui/components/networkAgent.js:686
#, javascript-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
@@ -1010,53 +1001,53 @@ msgstr ""
"Si scugne meti une password o une clâf di cifradure par jentrâ te rêt cence "
"fîl \"%s\"."
#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:690
#: js/ui/components/networkAgent.js:317 js/ui/components/networkAgent.js:689
msgid "Wired 802.1X authentication"
msgstr "Autenticazion vie fîl 802.1X"
#: js/ui/components/networkAgent.js:320
#: js/ui/components/networkAgent.js:319
msgid "Network name: "
msgstr "Non rêt: "
msgstr "Non rêt:"
#: js/ui/components/networkAgent.js:325 js/ui/components/networkAgent.js:694
#: js/ui/components/networkAgent.js:324 js/ui/components/networkAgent.js:693
msgid "DSL authentication"
msgstr "Autenticazion DSL"
#: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:700
#: js/ui/components/networkAgent.js:331 js/ui/components/networkAgent.js:699
msgid "PIN code required"
msgstr "Si pretint un codiç PIN"
#: js/ui/components/networkAgent.js:333 js/ui/components/networkAgent.js:701
#: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:700
msgid "PIN code is needed for the mobile broadband device"
msgstr "Si scugne meti un codiç PIN pal dispositîf a bande largje mobil"
#: js/ui/components/networkAgent.js:334
#: js/ui/components/networkAgent.js:333
msgid "PIN: "
msgstr "PIN: "
#: js/ui/components/networkAgent.js:341 js/ui/components/networkAgent.js:707
#: js/ui/components/networkAgent.js:340 js/ui/components/networkAgent.js:706
msgid "Mobile broadband network password"
msgstr "Passowrd rêt mobil a bande largje"
#: js/ui/components/networkAgent.js:342 js/ui/components/networkAgent.js:691
#: js/ui/components/networkAgent.js:695 js/ui/components/networkAgent.js:708
#: js/ui/components/networkAgent.js:341 js/ui/components/networkAgent.js:690
#: js/ui/components/networkAgent.js:694 js/ui/components/networkAgent.js:707
#, javascript-format
msgid "A password is required to connect to “%s”."
msgstr "A covente une password par tacâsi a '%s'."
#: js/ui/components/networkAgent.js:675 js/ui/status/network.js:1670
#: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1664
msgid "Network Manager"
msgstr "Ministradôr di rêt"
#: js/ui/components/polkitAgent.js:36
#: js/ui/components/polkitAgent.js:34
msgid "Authentication Required"
msgstr "Autenticazion Necessarie"
#: js/ui/components/polkitAgent.js:64
#: js/ui/components/polkitAgent.js:62
msgid "Administrator"
msgstr "Aministradôr"
#: js/ui/components/polkitAgent.js:141
#: js/ui/components/polkitAgent.js:139
msgid "Authenticate"
msgstr "Autentiche"
@@ -1064,7 +1055,7 @@ msgstr "Autentiche"
#. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password),
#. * for instance.
#: js/ui/components/polkitAgent.js:243 js/ui/shellMountOperation.js:389
#: js/ui/components/polkitAgent.js:241 js/ui/shellMountOperation.js:309
msgid "Sorry, that didnt work. Please try again."
msgstr "Mi displâs, no je lade drete. Prove di gnûf."
@@ -1258,28 +1249,28 @@ msgstr ""
"dal avanzament e pues tirâ a dilunc: siguriti di vê fat i backup e che il to "
"computer al sedi tacât."
#: js/ui/endSessionDialog.js:310
#: js/ui/endSessionDialog.js:309
msgid "Running on battery power: please plug in before installing updates."
msgstr ""
"Funzionament su batarie: par plasê tache la spine prime di instalâ i "
"inzornaments."
#: js/ui/endSessionDialog.js:327
#: js/ui/endSessionDialog.js:326
msgid "Some applications are busy or have unsaved work."
msgstr "Cualchi aplicazion e je impegnade opûr e à lavôrs no salvâts."
#: js/ui/endSessionDialog.js:334
#: js/ui/endSessionDialog.js:333
msgid "Other users are logged in."
msgstr "Altris utents a son jentrâts."
#. Translators: Remote here refers to a remote session, like a ssh login
#: js/ui/endSessionDialog.js:615
#: js/ui/endSessionDialog.js:614
#, javascript-format
msgid "%s (remote)"
msgstr "%s (rimot)"
#. Translators: Console here refers to a tty like a VT console
#: js/ui/endSessionDialog.js:618
#: js/ui/endSessionDialog.js:617
#, javascript-format
msgid "%s (console)"
msgstr "%s (locâl vie tastiere)"
@@ -1365,13 +1356,13 @@ msgid "Leave On"
msgstr "Lasse ativât"
#: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133
#: js/ui/status/network.js:1269
#: js/ui/status/network.js:1263
msgid "Turn On"
msgstr "Impie"
#: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133
#: js/ui/status/network.js:128 js/ui/status/network.js:311
#: js/ui/status/network.js:1269 js/ui/status/network.js:1381
#: js/ui/status/network.js:128 js/ui/status/network.js:310
#: js/ui/status/network.js:1263 js/ui/status/network.js:1375
#: js/ui/status/nightLight.js:39 js/ui/status/rfkill.js:79
#: js/ui/status/rfkill.js:106
msgid "Turn Off"
@@ -1433,7 +1424,7 @@ msgstr "Viôt sorzint"
msgid "Web Page"
msgstr "Pagjine Web"
#: js/ui/messageTray.js:1479
#: js/ui/messageTray.js:1480
msgid "System Information"
msgstr "Informazion di sisteme"
@@ -1527,24 +1518,24 @@ msgctxt "System menu in the top bar"
msgid "System"
msgstr "Sisteme"
#: js/ui/panel.js:862
#: js/ui/panel.js:864
msgid "Top Bar"
msgstr "Sbare parsore"
#: js/ui/runDialog.js:65
#: js/ui/runDialog.js:64
msgid "Enter a Command"
msgstr "Scrîf un comant"
#: js/ui/runDialog.js:105 js/ui/windowMenu.js:166
#: js/ui/runDialog.js:104 js/ui/windowMenu.js:166
msgid "Close"
msgstr "Siere"
# torne invie o torne tache
#: js/ui/runDialog.js:267
#: js/ui/runDialog.js:266
msgid "Restart is not available on Wayland"
msgstr "Il tornâ a tacâ nol è disponibil in Wayland"
#: js/ui/runDialog.js:272
#: js/ui/runDialog.js:271
msgid "Restarting…"
msgstr "Daûr a tornâ a inviâ…"
@@ -1591,16 +1582,16 @@ msgstr "Impussibil blocâ"
msgid "Lock was blocked by an application"
msgstr "Il bloc al è stât dineât di une aplicazion"
#: js/ui/search.js:638
#: js/ui/search.js:635
msgid "Searching…"
msgstr "Daûr a cirî…"
#: js/ui/search.js:640
#: js/ui/search.js:637
msgid "No results."
msgstr "Nissun risultât."
# o ancjemò %d
#: js/ui/search.js:764
#: js/ui/search.js:761
#, javascript-format
msgid "%d more"
msgid_plural "%d more"
@@ -1623,61 +1614,14 @@ msgstr "Mostre Test"
msgid "Hide Text"
msgstr "Plate Test"
#: js/ui/shellMountOperation.js:318
msgid "Hidden Volume"
msgstr "Volum platât"
#: js/ui/shellMountOperation.js:321
msgid "Windows System Volume"
msgstr "Volum di sisteme Windows"
#: js/ui/shellMountOperation.js:324
msgid "Uses Keyfiles"
msgstr "Al dopre i File-clâf"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:330
#, javascript-format
msgid ""
"To unlock a volume that uses keyfiles, use the <i>%s</i> utility instead."
msgstr ""
"Par sblocâ un volum che al dopre i file-clâf dopre invezit il program di "
"utilitât <i>%s</i>."
#: js/ui/shellMountOperation.js:337
msgid "PIM Number"
msgstr "Numar PIM"
#: js/ui/shellMountOperation.js:355
msgid "The PIM must be a number or empty."
msgstr "Il PIM al scugne jessi un numar o vueit."
#: js/ui/shellMountOperation.js:366
#: js/ui/shellMountOperation.js:296
msgid "Password"
msgstr "Password"
#: js/ui/shellMountOperation.js:396
#: js/ui/shellMountOperation.js:317
msgid "Remember Password"
msgstr "Visâsi Password"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:418
#, javascript-format
msgid "Open %s"
msgstr "Vierç %s"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:490
#, javascript-format
msgid "Unable to start %s"
msgstr "Impussibil inviâ %s"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:492
#, javascript-format
msgid "Couldnt find the %s application"
msgstr "Impussibil cjatâ la aplicazion %s"
#: js/ui/status/accessibility.js:35
msgid "Accessibility"
msgstr "Acessibilitât"
@@ -1714,11 +1658,11 @@ msgstr "Tascj che si sbalcin"
msgid "Mouse Keys"
msgstr "Mouse di tastiere"
#: js/ui/status/accessibility.js:135
#: js/ui/status/accessibility.js:151
msgid "High Contrast"
msgstr "Contrast elevât"
#: js/ui/status/accessibility.js:177
#: js/ui/status/accessibility.js:182
msgid "Large Text"
msgstr "Test Larc"
@@ -1726,7 +1670,7 @@ msgstr "Test Larc"
msgid "Bluetooth"
msgstr "Bluetooth"
#: js/ui/status/bluetooth.js:47 js/ui/status/network.js:586
#: js/ui/status/bluetooth.js:47 js/ui/status/network.js:585
msgid "Bluetooth Settings"
msgstr "Impostazions Bluetooth"
@@ -1750,31 +1694,11 @@ msgstr "Impiât"
msgid "Brightness"
msgstr "Luminositât"
#: js/ui/status/dwellClick.js:13
msgid "Single Click"
msgstr "Clic singul"
#: js/ui/status/dwellClick.js:18
msgid "Double Click"
msgstr "Dopli clic"
#: js/ui/status/dwellClick.js:23
msgid "Drag"
msgstr "Strissinâ"
#: js/ui/status/dwellClick.js:28
msgid "Secondary Click"
msgstr "Clic secondari"
#: js/ui/status/dwellClick.js:37
msgid "Dwell Click"
msgstr "Clic in polse"
#: js/ui/status/keyboard.js:813
#: js/ui/status/keyboard.js:812
msgid "Keyboard"
msgstr "Tastiere"
#: js/ui/status/keyboard.js:835
#: js/ui/status/keyboard.js:834
msgid "Show Keyboard Layout"
msgstr "Mostre la disposizion de tastiere"
@@ -1803,12 +1727,12 @@ msgid "Enable"
msgstr "Abilite"
#. Translators: %s is an application name
#: js/ui/status/location.js:355
#: js/ui/status/location.js:353
#, javascript-format
msgid "Give %s access to your location?"
msgstr "Permeti a %s di cognossi la tô posizion?"
#: js/ui/status/location.js:356
#: js/ui/status/location.js:354
msgid "Location access can be changed at any time from the privacy settings."
msgstr ""
"L'acès ae posizion al pues jessi cambiât cuant che tu vuelis su impostazions "
@@ -1819,13 +1743,13 @@ msgid "<unknown>"
msgstr "<no cognossût>"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:417 js/ui/status/network.js:1298
#: js/ui/status/network.js:416 js/ui/status/network.js:1292
#, javascript-format
msgid "%s Off"
msgstr "%s distudât"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:420
#: js/ui/status/network.js:419
#, javascript-format
msgid "%s Connected"
msgstr "%s tacât"
@@ -1833,189 +1757,189 @@ msgstr "%s tacât"
#. 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:425
#: js/ui/status/network.js:424
#, javascript-format
msgid "%s Unmanaged"
msgstr "%s no ministrât"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:428
#: js/ui/status/network.js:427
#, javascript-format
msgid "%s Disconnecting"
msgstr "%s daûr a disconeti"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:435 js/ui/status/network.js:1290
#: js/ui/status/network.js:434 js/ui/status/network.js:1284
#, javascript-format
msgid "%s Connecting"
msgstr "%s in conession"
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
#: js/ui/status/network.js:438
#: js/ui/status/network.js:437
#, javascript-format
msgid "%s Requires Authentication"
msgstr "%s al à dibisugne di autenticazion"
#. 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:446
#: js/ui/status/network.js:445
#, javascript-format
msgid "Firmware Missing For %s"
msgstr "Al mancje il firmware par %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:450
#: js/ui/status/network.js:449
#, javascript-format
msgid "%s Unavailable"
msgstr "%s no disponibil"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:453
#: js/ui/status/network.js:452
#, javascript-format
msgid "%s Connection Failed"
msgstr "Conession falide su %s"
#: js/ui/status/network.js:465
#: js/ui/status/network.js:464
msgid "Wired Settings"
msgstr "Impostazions rêt vie fîl"
#: js/ui/status/network.js:507
#: js/ui/status/network.js:506
msgid "Mobile Broadband Settings"
msgstr "Impostazions bande largje mobil"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:554 js/ui/status/network.js:1295
#: js/ui/status/network.js:553 js/ui/status/network.js:1289
#, javascript-format
msgid "%s Hardware Disabled"
msgstr "%s disabilitât vie hardware"
msgstr "%s disabilitât vie hardware "
#. 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:558
#: js/ui/status/network.js:557
#, javascript-format
msgid "%s Disabled"
msgstr "%s disabilitât"
#: js/ui/status/network.js:598
#: js/ui/status/network.js:597
msgid "Connect to Internet"
msgstr "Conet a internet"
#: js/ui/status/network.js:792
#: js/ui/status/network.js:786
msgid "Airplane Mode is On"
msgstr "Modalitât avion piade"
#: js/ui/status/network.js:793
#: js/ui/status/network.js:787
msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "Il Wi-Fi al è disabilitât cuant che la modalitât avion e je impiade."
#: js/ui/status/network.js:794
#: js/ui/status/network.js:788
msgid "Turn Off Airplane Mode"
msgstr "Distude modalitât avion"
#: js/ui/status/network.js:803
#: js/ui/status/network.js:797
msgid "Wi-Fi is Off"
msgstr "Il Wi-Fi al è distudât"
#: js/ui/status/network.js:804
#: js/ui/status/network.js:798
msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "Il Wi-Fi al scugne jessi impiât par podêsi tacâ a une rêt."
#: js/ui/status/network.js:805
#: js/ui/status/network.js:799
msgid "Turn On Wi-Fi"
msgstr "Impie il Wi-Fi"
#: js/ui/status/network.js:830
#: js/ui/status/network.js:824
msgid "Wi-Fi Networks"
msgstr "Rêts Wi-Fi"
#: js/ui/status/network.js:832
#: js/ui/status/network.js:826
msgid "Select a network"
msgstr "Selezione une rêt"
#: js/ui/status/network.js:861
#: js/ui/status/network.js:855
msgid "No Networks"
msgstr "Nissune rêt"
#: js/ui/status/network.js:882 js/ui/status/rfkill.js:104
#: js/ui/status/network.js:876 js/ui/status/rfkill.js:104
msgid "Use hardware switch to turn off"
msgstr "Dopre interutôr fisic par distudâ"
#: js/ui/status/network.js:1158
#: js/ui/status/network.js:1152
msgid "Select Network"
msgstr "Selezione rêt"
#: js/ui/status/network.js:1164
#: js/ui/status/network.js:1158
msgid "Wi-Fi Settings"
msgstr "Impostazions Wi-Fi"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1286
#: js/ui/status/network.js:1280
#, javascript-format
msgid "%s Hotspot Active"
msgstr "Hotspot %s atîf"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1301
#: js/ui/status/network.js:1295
#, javascript-format
msgid "%s Not Connected"
msgstr "%s distacât"
#: js/ui/status/network.js:1398
#: js/ui/status/network.js:1392
msgid "connecting…"
msgstr "daûr a coneti…"
#. Translators: this is for network connections that require some kind of key or password
#: js/ui/status/network.js:1401
#: js/ui/status/network.js:1395
msgid "authentication required"
msgstr "autenticazion necessarie"
#: js/ui/status/network.js:1403
#: js/ui/status/network.js:1397
msgid "connection failed"
msgstr "conession falide"
#: js/ui/status/network.js:1453
#: js/ui/status/network.js:1447
msgid "VPN Settings"
msgstr "Impostazions VPN"
#: js/ui/status/network.js:1470
#: js/ui/status/network.js:1464
msgid "VPN"
msgstr "VPN"
#: js/ui/status/network.js:1480
#: js/ui/status/network.js:1474
msgid "VPN Off"
msgstr "VPN distudât"
#: js/ui/status/network.js:1541 js/ui/status/rfkill.js:82
#: js/ui/status/network.js:1535 js/ui/status/rfkill.js:82
msgid "Network Settings"
msgstr "Impostazions rêt"
#: js/ui/status/network.js:1570
#: js/ui/status/network.js:1564
#, javascript-format
msgid "%s Wired Connection"
msgid_plural "%s Wired Connections"
msgstr[0] "%s conession cablade"
msgstr[1] "%s conessions cabladis"
#: js/ui/status/network.js:1574
#: js/ui/status/network.js:1568
#, javascript-format
msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections"
msgstr[0] "%s conession cence fîi"
msgstr[1] "%s conessions cence fîi"
#: js/ui/status/network.js:1578
#: js/ui/status/network.js:1572
#, javascript-format
msgid "%s Modem Connection"
msgid_plural "%s Modem Connections"
msgstr[0] "%s conession modem"
msgstr[1] "%s conessions modem"
#: js/ui/status/network.js:1711
#: js/ui/status/network.js:1705
msgid "Connection failed"
msgstr "Conession falide"
#: js/ui/status/network.js:1712
#: js/ui/status/network.js:1706
msgid "Activation of network connection failed"
msgstr "Ativazion de conession di rêt falide"
@@ -2198,22 +2122,22 @@ msgstr "Cîr"
msgid "“%s” is ready"
msgstr "“%s” al è pront"
#: js/ui/windowManager.js:54
#: js/ui/windowManager.js:53
msgid "Do you want to keep these display settings?"
msgstr "Vûstu tignî chestis impostazions di visôr?"
#. Translators: this and the following message should be limited in length,
#. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels.
#.
#: js/ui/windowManager.js:66
#: js/ui/windowManager.js:65
msgid "Revert Settings"
msgstr "Ripristine impostazions"
#: js/ui/windowManager.js:69
#: js/ui/windowManager.js:68
msgid "Keep Changes"
msgstr "Ten lis modifichis"
#: js/ui/windowManager.js:87
#: js/ui/windowManager.js:86
#, javascript-format
msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds"
@@ -2224,7 +2148,7 @@ msgstr[1] ""
#. 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:678
#: js/ui/windowManager.js:677
#, javascript-format
msgid "%d × %d"
msgstr "%d × %d"
@@ -2323,11 +2247,11 @@ msgstr "No cognossût"
msgid "Failed to launch “%s”"
msgstr "No soi rivât a eseguî '%s'"
#: src/shell-keyring-prompt.c:731
#: src/shell-keyring-prompt.c:730
msgid "Passwords do not match."
msgstr "Lis password no corispuindin."
#: src/shell-keyring-prompt.c:739
#: src/shell-keyring-prompt.c:738
msgid "Password cannot be blank"
msgstr "La password no pues jessi vueide"

371
po/hr.po
View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2019-06-15 10:38+0000\n"
"PO-Revision-Date: 2019-06-22 01:55+0200\n"
"POT-Creation-Date: 2019-03-24 17:37+0000\n"
"PO-Revision-Date: 2019-03-26 12:33+0100\n"
"Last-Translator: gogo <trebelnik2@gmail.com>\n"
"Language-Team: Croatian <hr@li.org>\n"
"Language: hr\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 2.2.1\n"
"X-Generator: Poedit 2.0.6\n"
#: data/50-gnome-shell-system.xml:6
msgid "System"
@@ -418,11 +418,10 @@ msgstr ""
msgid "Browse in Software"
msgstr "Pregledaj u Softveru"
#: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:52
#: js/ui/components/networkAgent.js:118 js/ui/components/polkitAgent.js:138
#: js/ui/endSessionDialog.js:431 js/ui/extensionDownloader.js:188
#: js/ui/shellMountOperation.js:404 js/ui/shellMountOperation.js:413
#: js/ui/status/network.js:894
#: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:55
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:136
#: js/ui/endSessionDialog.js:430 js/ui/extensionDownloader.js:188
#: js/ui/shellMountOperation.js:325 js/ui/status/network.js:888
msgid "Cancel"
msgstr "Odustani"
@@ -430,7 +429,7 @@ msgstr "Odustani"
msgid "Next"
msgstr "Sljedeće"
#: js/gdm/authPrompt.js:198 js/ui/shellMountOperation.js:408
#: js/gdm/authPrompt.js:198 js/ui/shellMountOperation.js:329
#: js/ui/unlockDialog.js:41
msgid "Unlock"
msgstr "Otključaj"
@@ -461,8 +460,8 @@ msgstr "(npr., korisnik ili %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:889 js/ui/components/networkAgent.js:244
#: js/ui/components/networkAgent.js:264 js/ui/components/networkAgent.js:282
#: js/gdm/loginDialog.js:889 js/ui/components/networkAgent.js:243
#: js/ui/components/networkAgent.js:263 js/ui/components/networkAgent.js:281
msgid "Username: "
msgstr "Korisničko ime: "
@@ -513,8 +512,8 @@ msgstr "Odjava"
#. Translators: A list of keywords that match the logout action, separated by semicolons
#: js/misc/systemActions.js:105
msgid "logout;log out;sign off"
msgstr "odjava;odjavljivanje"
msgid "logout;sign off"
msgstr "odjava:odjavljivanje"
#. Translators: The name of the suspend action in search
#: js/misc/systemActions.js:109
@@ -706,11 +705,11 @@ msgstr ""
#. No support for non-modal system dialogs, so ignore the option
#. let modal = options['modal'] || true;
#: js/ui/accessDialog.js:38 js/ui/status/location.js:362
#: js/ui/accessDialog.js:37 js/ui/status/location.js:360
msgid "Deny Access"
msgstr "Zabrani pristup"
#: js/ui/accessDialog.js:39 js/ui/status/location.js:365
#: js/ui/accessDialog.js:38 js/ui/status/location.js:363
msgid "Grant Access"
msgstr "Dopusti pristup"
@@ -726,58 +725,53 @@ msgstr "Najčešće"
msgid "All"
msgstr "Sve"
#. Translators: This is the heading of a list of open windows
#: js/ui/appDisplay.js:1713 js/ui/panel.js:79
msgid "Open Windows"
msgstr "Otvaranje prozora"
#: js/ui/appDisplay.js:1732 js/ui/panel.js:86
#: js/ui/appDisplay.js:1737 js/ui/panel.js:83
msgid "New Window"
msgstr "Novi prozor"
#: js/ui/appDisplay.js:1746
#: js/ui/appDisplay.js:1751
msgid "Launch using Dedicated Graphics Card"
msgstr "Pokreni pomoću namjenske grafičke kartice"
#: js/ui/appDisplay.js:1773 js/ui/dash.js:239
#: js/ui/appDisplay.js:1778 js/ui/dash.js:239
msgid "Remove from Favorites"
msgstr "Ukloni iz omiljenih"
#: js/ui/appDisplay.js:1779
#: js/ui/appDisplay.js:1784
msgid "Add to Favorites"
msgstr "Dodaj u omiljene"
#: js/ui/appDisplay.js:1789 js/ui/panel.js:97
#: js/ui/appDisplay.js:1794 js/ui/panel.js:94
msgid "Show Details"
msgstr "Prikaži pojedinosti"
#: js/ui/appFavorites.js:149
#: js/ui/appFavorites.js:141
#, javascript-format
msgid "%s has been added to your favorites."
msgstr "%s je dodan u omiljene."
#: js/ui/appFavorites.js:183
#: js/ui/appFavorites.js:175
#, javascript-format
msgid "%s has been removed from your favorites."
msgstr "%s je uklonjen iz omiljenih."
#: js/ui/audioDeviceSelection.js:39
#: js/ui/audioDeviceSelection.js:42
msgid "Select Audio Device"
msgstr "Odaberi zvučni uređaj"
#: js/ui/audioDeviceSelection.js:50
#: js/ui/audioDeviceSelection.js:53
msgid "Sound Settings"
msgstr "Postavke zvuka"
#: js/ui/audioDeviceSelection.js:59
#: js/ui/audioDeviceSelection.js:62
msgid "Headphones"
msgstr "Slušalice"
#: js/ui/audioDeviceSelection.js:61
#: js/ui/audioDeviceSelection.js:64
msgid "Headset"
msgstr "Slušalice s mikrofonom"
#: js/ui/audioDeviceSelection.js:63 js/ui/status/volume.js:247
#: js/ui/audioDeviceSelection.js:66 js/ui/status/volume.js:247
msgid "Microphone"
msgstr "Mikrofon"
@@ -938,75 +932,67 @@ msgstr "Prisilno zatvori"
msgid "Wait"
msgstr "Čekaj"
#: js/ui/components/automountManager.js:87
#: js/ui/components/automountManager.js:86
msgid "External drive connected"
msgstr "Vanjski uređaj povezan"
#: js/ui/components/automountManager.js:99
#: js/ui/components/automountManager.js:98
msgid "External drive disconnected"
msgstr "Vanjski uređaj odspojen"
#: js/ui/components/automountManager.js:211
msgid "Unable to unlock volume"
msgstr "Nemoguće otključavanje uređaja"
#: js/ui/components/automountManager.js:212
msgid "The installed udisks version does not support the PIM setting"
msgstr "Instalirana udisks inačica ne podržava PIM postavku"
#: js/ui/components/autorunManager.js:334
#, javascript-format
msgid "Open with %s"
msgstr "Otvori s(a) %s"
#: js/ui/components/keyring.js:66 js/ui/components/polkitAgent.js:257
#: js/ui/components/keyring.js:77 js/ui/components/polkitAgent.js:255
msgid "Password:"
msgstr "Lozinka:"
#: js/ui/components/keyring.js:97
#: js/ui/components/keyring.js:108
msgid "Type again:"
msgstr "Pokušaj ponovno:"
#: js/ui/components/networkAgent.js:103
#: js/ui/components/networkAgent.js:102
msgid ""
"Alternatively you can connect by pushing the “WPS” button on your router."
msgstr ""
"Alternativno se možete povezati pritiskom na “WPS” tipku vašeg usmjernika."
#: js/ui/components/networkAgent.js:113 js/ui/status/network.js:219
#: js/ui/status/network.js:310 js/ui/status/network.js:897
#: js/ui/components/networkAgent.js:112 js/ui/status/network.js:219
#: js/ui/status/network.js:309 js/ui/status/network.js:891
msgid "Connect"
msgstr "Povezivanje"
#. Cisco LEAP
#: js/ui/components/networkAgent.js:212 js/ui/components/networkAgent.js:224
#: js/ui/components/networkAgent.js:247 js/ui/components/networkAgent.js:266
#: js/ui/components/networkAgent.js:286 js/ui/components/networkAgent.js:296
#: js/ui/components/networkAgent.js:211 js/ui/components/networkAgent.js:223
#: js/ui/components/networkAgent.js:246 js/ui/components/networkAgent.js:265
#: js/ui/components/networkAgent.js:285 js/ui/components/networkAgent.js:295
msgid "Password: "
msgstr "Lozinka: "
#. static WEP
#: js/ui/components/networkAgent.js:217
#: js/ui/components/networkAgent.js:216
msgid "Key: "
msgstr "Ključ: "
#: js/ui/components/networkAgent.js:250 js/ui/components/networkAgent.js:272
#: js/ui/components/networkAgent.js:249 js/ui/components/networkAgent.js:271
msgid "Private key password: "
msgstr "Lozinka privatnog ključa: "
#: js/ui/components/networkAgent.js:270
#: js/ui/components/networkAgent.js:269
msgid "Identity: "
msgstr "Identitet: "
#: js/ui/components/networkAgent.js:284
#: js/ui/components/networkAgent.js:283
msgid "Service: "
msgstr "Usluga: "
#: js/ui/components/networkAgent.js:313 js/ui/components/networkAgent.js:686
#: js/ui/components/networkAgent.js:312 js/ui/components/networkAgent.js:685
msgid "Authentication required by wireless network"
msgstr "Potrebna je ovjera za bežičnu mrežu"
#: js/ui/components/networkAgent.js:314 js/ui/components/networkAgent.js:687
#: js/ui/components/networkAgent.js:313 js/ui/components/networkAgent.js:686
#, javascript-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
@@ -1014,53 +1000,53 @@ msgid ""
msgstr ""
"Lozinka ili ključevi šifriranja su potrebni za pristup bežičnoj mreži “%s”."
#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:690
#: js/ui/components/networkAgent.js:317 js/ui/components/networkAgent.js:689
msgid "Wired 802.1X authentication"
msgstr "Wired 802.1X ovjera"
#: js/ui/components/networkAgent.js:320
#: js/ui/components/networkAgent.js:319
msgid "Network name: "
msgstr "Naziv mreže: "
#: js/ui/components/networkAgent.js:325 js/ui/components/networkAgent.js:694
#: js/ui/components/networkAgent.js:324 js/ui/components/networkAgent.js:693
msgid "DSL authentication"
msgstr "DSL ovjera"
#: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:700
#: js/ui/components/networkAgent.js:331 js/ui/components/networkAgent.js:699
msgid "PIN code required"
msgstr "PIN kôd je potreban"
#: js/ui/components/networkAgent.js:333 js/ui/components/networkAgent.js:701
#: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:700
msgid "PIN code is needed for the mobile broadband device"
msgstr "PIN kôd je potreban za uređaj mobilnog interneta"
#: js/ui/components/networkAgent.js:334
#: js/ui/components/networkAgent.js:333
msgid "PIN: "
msgstr "PIN: "
#: js/ui/components/networkAgent.js:341 js/ui/components/networkAgent.js:707
#: js/ui/components/networkAgent.js:340 js/ui/components/networkAgent.js:706
msgid "Mobile broadband network password"
msgstr "Lozinka mreže mobilnog interneta"
#: js/ui/components/networkAgent.js:342 js/ui/components/networkAgent.js:691
#: js/ui/components/networkAgent.js:695 js/ui/components/networkAgent.js:708
#: js/ui/components/networkAgent.js:341 js/ui/components/networkAgent.js:690
#: js/ui/components/networkAgent.js:694 js/ui/components/networkAgent.js:707
#, javascript-format
msgid "A password is required to connect to “%s”."
msgstr "Potrebna je lozinka za povezivanje s “%s”."
#: js/ui/components/networkAgent.js:675 js/ui/status/network.js:1670
#: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1664
msgid "Network Manager"
msgstr "Mrežni upravitelj"
#: js/ui/components/polkitAgent.js:36
#: js/ui/components/polkitAgent.js:34
msgid "Authentication Required"
msgstr "Potrebna je ovjera"
#: js/ui/components/polkitAgent.js:64
#: js/ui/components/polkitAgent.js:62
msgid "Administrator"
msgstr "Administrator"
#: js/ui/components/polkitAgent.js:141
#: js/ui/components/polkitAgent.js:139
msgid "Authenticate"
msgstr "Ovjeri"
@@ -1068,7 +1054,7 @@ msgstr "Ovjeri"
#. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password),
#. * for instance.
#: js/ui/components/polkitAgent.js:243 js/ui/shellMountOperation.js:389
#: js/ui/components/polkitAgent.js:241 js/ui/shellMountOperation.js:309
msgid "Sorry, that didnt work. Please try again."
msgstr "Nažalost, to ne radi. Pokušajte ponovno."
@@ -1118,23 +1104,23 @@ msgstr "Dodaj satove iz svijeta…"
msgid "World Clocks"
msgstr "Svjetski satovi"
#: js/ui/dateMenu.js:228
#: js/ui/dateMenu.js:222
msgid "Weather"
msgstr "Vrijeme"
#: js/ui/dateMenu.js:311
#: js/ui/dateMenu.js:305
msgid "Select a location…"
msgstr "Odaberi lokaciju…"
#: js/ui/dateMenu.js:319
#: js/ui/dateMenu.js:313
msgid "Loading…"
msgstr "Pretraživanje…"
#: js/ui/dateMenu.js:329
#: js/ui/dateMenu.js:323
msgid "Go online for weather information"
msgstr "Posjetite za opširnije vremenske informacije"
#: js/ui/dateMenu.js:331
#: js/ui/dateMenu.js:325
msgid "Weather information is currently unavailable"
msgstr "Vremenske informacije su trenutno nedostupne"
@@ -1269,28 +1255,28 @@ msgstr ""
"može potrajati duže vrijeme: pobrinite se da ste spremili svoj rad i "
"računalo je priključeno na izvor napajanja."
#: js/ui/endSessionDialog.js:310
#: js/ui/endSessionDialog.js:309
msgid "Running on battery power: please plug in before installing updates."
msgstr ""
"Koristi se energija baterije: računalo priključite na izvor napajanja prije "
"instalacije nadopuna."
#: js/ui/endSessionDialog.js:327
#: js/ui/endSessionDialog.js:326
msgid "Some applications are busy or have unsaved work."
msgstr "Neke aplikacije su zauzete ili imaju nespremljeni rad."
#: js/ui/endSessionDialog.js:334
#: js/ui/endSessionDialog.js:333
msgid "Other users are logged in."
msgstr "Drugi korisnici su prijavljeni."
#. Translators: Remote here refers to a remote session, like a ssh login
#: js/ui/endSessionDialog.js:615
#: js/ui/endSessionDialog.js:614
#, javascript-format
msgid "%s (remote)"
msgstr "%s (udaljeno)"
#. Translators: Console here refers to a tty like a VT console
#: js/ui/endSessionDialog.js:618
#: js/ui/endSessionDialog.js:617
#, javascript-format
msgid "%s (console)"
msgstr "%s (konzola)"
@@ -1375,13 +1361,13 @@ msgid "Leave On"
msgstr "Ostavi"
#: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133
#: js/ui/status/network.js:1269
#: js/ui/status/network.js:1263
msgid "Turn On"
msgstr "Uključi"
#: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133
#: js/ui/status/network.js:128 js/ui/status/network.js:311
#: js/ui/status/network.js:1269 js/ui/status/network.js:1381
#: js/ui/status/network.js:128 js/ui/status/network.js:310
#: js/ui/status/network.js:1263 js/ui/status/network.js:1375
#: js/ui/status/nightLight.js:39 js/ui/status/rfkill.js:79
#: js/ui/status/rfkill.js:106
msgid "Turn Off"
@@ -1443,7 +1429,7 @@ msgstr "Pogledaj izvor"
msgid "Web Page"
msgstr "Web stranica"
#: js/ui/messageTray.js:1479
#: js/ui/messageTray.js:1480
msgid "System Information"
msgstr "Informacije sustava"
@@ -1521,38 +1507,47 @@ msgstr "Pritisni Esc za prekidanje"
msgid "Press any key to exit"
msgstr "Pritisni bilo koju tipku za prekidanje"
#: js/ui/panel.js:113
#: js/ui/panel.js:108
msgid "Quit"
msgstr "Zatvori"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: js/ui/panel.js:468
#: js/ui/panel.js:471
msgid "Activities"
msgstr "Aktivnosti"
#: js/ui/panel.js:743
#: js/ui/panel.js:746
msgctxt "System menu in the top bar"
msgid "System"
msgstr "Sustav"
#: js/ui/panel.js:862
#: js/ui/panel.js:867
msgid "Top Bar"
msgstr "Gornja traka"
#: js/ui/runDialog.js:65
#. Translators: this MUST be either "toggle-switch-us"
#. (for toggle switches containing the English words
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: js/ui/popupMenu.js:285
msgid "toggle-switch-us"
msgstr "toggle-switch-us"
#: js/ui/runDialog.js:64
msgid "Enter a Command"
msgstr "Upiši naredbu"
#: js/ui/runDialog.js:105 js/ui/windowMenu.js:166
#: js/ui/runDialog.js:104 js/ui/windowMenu.js:166
msgid "Close"
msgstr "Zatvori"
#: js/ui/runDialog.js:267
#: js/ui/runDialog.js:266
msgid "Restart is not available on Wayland"
msgstr "Ponovno pokretanje nije dostupno na Waylandu"
#: js/ui/runDialog.js:272
#: js/ui/runDialog.js:271
msgid "Restarting…"
msgstr "Ponovno pokretanje…"
@@ -1599,17 +1594,17 @@ msgstr "Nemoguće zaključavanje"
#: js/ui/screenShield.js:827 js/ui/screenShield.js:1300
msgid "Lock was blocked by an application"
msgstr "Zaključavanje je blokirala aplikacija"
msgstr "Zaključavanje je blokirala apliakcija"
#: js/ui/search.js:638
#: js/ui/search.js:635
msgid "Searching…"
msgstr "Pretraživanje…"
#: js/ui/search.js:640
#: js/ui/search.js:637
msgid "No results."
msgstr "Nema rezultata."
#: js/ui/search.js:764
#: js/ui/search.js:761
#, javascript-format
msgid "%d more"
msgid_plural "%d more"
@@ -1633,61 +1628,14 @@ msgstr "Prikaži tekst"
msgid "Hide Text"
msgstr "Sakrij tekst"
#: js/ui/shellMountOperation.js:318
msgid "Hidden Volume"
msgstr "Skriveni uređaj"
#: js/ui/shellMountOperation.js:321
msgid "Windows System Volume"
msgstr "Uređaj Windows sustava"
#: js/ui/shellMountOperation.js:324
msgid "Uses Keyfiles"
msgstr "Koristi datoteke ključa"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:330
#, javascript-format
msgid ""
"To unlock a volume that uses keyfiles, use the <i>%s</i> utility instead."
msgstr ""
"Za otključavanje uređaja koji koristi datoteke ključa, koristite <i>%s</i> "
"pomagalo."
#: js/ui/shellMountOperation.js:337
msgid "PIM Number"
msgstr "PIM broj"
#: js/ui/shellMountOperation.js:355
msgid "The PIM must be a number or empty."
msgstr "PIM mora biti broj ili prazan."
#: js/ui/shellMountOperation.js:366
#: js/ui/shellMountOperation.js:296
msgid "Password"
msgstr "Lozinka"
#: js/ui/shellMountOperation.js:396
#: js/ui/shellMountOperation.js:317
msgid "Remember Password"
msgstr "Zapamti lozinku"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:418
#, javascript-format
msgid "Open %s"
msgstr "Otvori %s"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:490
#, javascript-format
msgid "Unable to start %s"
msgstr "Nemoguće pokretanje %s"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:492
#, javascript-format
msgid "Couldnt find the %s application"
msgstr "Nemoguć pronalazak %s aplikacije"
#: js/ui/status/accessibility.js:35
msgid "Accessibility"
msgstr "Pristupačnost"
@@ -1724,11 +1672,11 @@ msgstr "Odbijanje tipki"
msgid "Mouse Keys"
msgstr "Tipke miša"
#: js/ui/status/accessibility.js:135
#: js/ui/status/accessibility.js:151
msgid "High Contrast"
msgstr "Visok kontrast"
#: js/ui/status/accessibility.js:177
#: js/ui/status/accessibility.js:182
msgid "Large Text"
msgstr "Velik tekst"
@@ -1736,7 +1684,7 @@ msgstr "Velik tekst"
msgid "Bluetooth"
msgstr "Bluetooth"
#: js/ui/status/bluetooth.js:47 js/ui/status/network.js:586
#: js/ui/status/bluetooth.js:47 js/ui/status/network.js:585
msgid "Bluetooth Settings"
msgstr "Bluetooth postavke"
@@ -1761,31 +1709,11 @@ msgstr "Uključeno"
msgid "Brightness"
msgstr "Svjetlina"
#: js/ui/status/dwellClick.js:13
msgid "Single Click"
msgstr "Jednostruki klik"
#: js/ui/status/dwellClick.js:18
msgid "Double Click"
msgstr "Dvostruki klik"
#: js/ui/status/dwellClick.js:23
msgid "Drag"
msgstr "Povlačenje"
#: js/ui/status/dwellClick.js:28
msgid "Secondary Click"
msgstr "Pomoćni klik"
#: js/ui/status/dwellClick.js:37
msgid "Dwell Click"
msgstr "Zadržani klik"
#: js/ui/status/keyboard.js:813
#: js/ui/status/keyboard.js:812
msgid "Keyboard"
msgstr "Tipkovnica"
#: js/ui/status/keyboard.js:835
#: js/ui/status/keyboard.js:834
msgid "Show Keyboard Layout"
msgstr "Prikaži raspored tipkovnice"
@@ -1814,12 +1742,12 @@ msgid "Enable"
msgstr "Omogući"
#. Translators: %s is an application name
#: js/ui/status/location.js:355
#: js/ui/status/location.js:353
#, javascript-format
msgid "Give %s access to your location?"
msgstr "Dopustite %s pristup vašoj lokaciji?"
#: js/ui/status/location.js:356
#: js/ui/status/location.js:354
msgid "Location access can be changed at any time from the privacy settings."
msgstr ""
"Pristup lokaciji može se promijeniti u svako vrijeme iz postavka privatnosti."
@@ -1829,13 +1757,13 @@ msgid "<unknown>"
msgstr "<nepoznato>"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:417 js/ui/status/network.js:1298
#: js/ui/status/network.js:416 js/ui/status/network.js:1292
#, javascript-format
msgid "%s Off"
msgstr "%s isključena"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:420
#: js/ui/status/network.js:419
#, javascript-format
msgid "%s Connected"
msgstr "%s povezana"
@@ -1843,164 +1771,164 @@ msgstr "%s povezana"
#. 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:425
#: js/ui/status/network.js:424
#, javascript-format
msgid "%s Unmanaged"
msgstr "%s neupravljana"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:428
#: js/ui/status/network.js:427
#, javascript-format
msgid "%s Disconnecting"
msgstr "%s prekidanje povezivanja"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:435 js/ui/status/network.js:1290
#: js/ui/status/network.js:434 js/ui/status/network.js:1284
#, javascript-format
msgid "%s Connecting"
msgstr "%s povezivanje"
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
#: js/ui/status/network.js:438
#: js/ui/status/network.js:437
#, javascript-format
msgid "%s Requires Authentication"
msgstr "%s zahtijeva ovjeru"
#. 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:446
#: js/ui/status/network.js:445
#, javascript-format
msgid "Firmware Missing For %s"
msgstr "Nedostaje firmver za %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:450
#: js/ui/status/network.js:449
#, javascript-format
msgid "%s Unavailable"
msgstr "%s nedostupna"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:453
#: js/ui/status/network.js:452
#, javascript-format
msgid "%s Connection Failed"
msgstr "%s neuspješno povezivanje"
#: js/ui/status/network.js:465
#: js/ui/status/network.js:464
msgid "Wired Settings"
msgstr "Postavke žične mreže"
#: js/ui/status/network.js:507
#: js/ui/status/network.js:506
msgid "Mobile Broadband Settings"
msgstr "Mobilni internet"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:554 js/ui/status/network.js:1295
#: js/ui/status/network.js:553 js/ui/status/network.js:1289
#, javascript-format
msgid "%s Hardware Disabled"
msgstr "%s hardverski onemogućena"
#. 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:558
#: js/ui/status/network.js:557
#, javascript-format
msgid "%s Disabled"
msgstr "%s onemogućeno"
#: js/ui/status/network.js:598
#: js/ui/status/network.js:597
msgid "Connect to Internet"
msgstr "Povežite se na internet"
#: js/ui/status/network.js:792
#: js/ui/status/network.js:786
msgid "Airplane Mode is On"
msgstr "Zrakoplovni način rada je omogućen"
#: js/ui/status/network.js:793
#: js/ui/status/network.js:787
msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "Bežična mreža je onemogućena u zrakoplovnom načinu rada."
#: js/ui/status/network.js:794
#: js/ui/status/network.js:788
msgid "Turn Off Airplane Mode"
msgstr "Isključi zrakoplovni način rada"
#: js/ui/status/network.js:803
#: js/ui/status/network.js:797
msgid "Wi-Fi is Off"
msgstr "Bežična mreža isključena"
#: js/ui/status/network.js:804
#: js/ui/status/network.js:798
msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "Bežična mreža se mora uključiti kako bi se povezala s internetom."
#: js/ui/status/network.js:805
#: js/ui/status/network.js:799
msgid "Turn On Wi-Fi"
msgstr "Uključi bežičnu mrežu"
#: js/ui/status/network.js:830
#: js/ui/status/network.js:824
msgid "Wi-Fi Networks"
msgstr "Bežične mreže"
#: js/ui/status/network.js:832
#: js/ui/status/network.js:826
msgid "Select a network"
msgstr "Odaberi mrežu"
#: js/ui/status/network.js:861
#: js/ui/status/network.js:855
msgid "No Networks"
msgstr "Nema mreža"
#: js/ui/status/network.js:882 js/ui/status/rfkill.js:104
#: js/ui/status/network.js:876 js/ui/status/rfkill.js:104
msgid "Use hardware switch to turn off"
msgstr "Koristi hardverski prekidač za isključivanje"
#: js/ui/status/network.js:1158
#: js/ui/status/network.js:1152
msgid "Select Network"
msgstr "Odaberi mrežu"
#: js/ui/status/network.js:1164
#: js/ui/status/network.js:1158
msgid "Wi-Fi Settings"
msgstr "Postavke bežične mreže"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1286
#: js/ui/status/network.js:1280
#, javascript-format
msgid "%s Hotspot Active"
msgstr "%s pristupna točka aktivna"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1301
#: js/ui/status/network.js:1295
#, javascript-format
msgid "%s Not Connected"
msgstr "%s nije povezana"
#: js/ui/status/network.js:1398
#: js/ui/status/network.js:1392
msgid "connecting…"
msgstr "povezivanje…"
#. Translators: this is for network connections that require some kind of key or password
#: js/ui/status/network.js:1401
#: js/ui/status/network.js:1395
msgid "authentication required"
msgstr "potrebna je ovjera"
#: js/ui/status/network.js:1403
#: js/ui/status/network.js:1397
msgid "connection failed"
msgstr "neuspješno povezivanje"
#: js/ui/status/network.js:1453
#: js/ui/status/network.js:1447
msgid "VPN Settings"
msgstr "VPN postavke"
#: js/ui/status/network.js:1470
#: js/ui/status/network.js:1464
msgid "VPN"
msgstr "VPN"
#: js/ui/status/network.js:1480
#: js/ui/status/network.js:1474
msgid "VPN Off"
msgstr "VPN isključen"
#: js/ui/status/network.js:1541 js/ui/status/rfkill.js:82
#: js/ui/status/network.js:1535 js/ui/status/rfkill.js:82
msgid "Network Settings"
msgstr "Mrežne postavke"
#: js/ui/status/network.js:1570
#: js/ui/status/network.js:1564
#, javascript-format
msgid "%s Wired Connection"
msgid_plural "%s Wired Connections"
@@ -2008,7 +1936,7 @@ msgstr[0] "%s žično povezivanje"
msgstr[1] "%s žična povezivanja"
msgstr[2] "%s žičnih povezivanja"
#: js/ui/status/network.js:1574
#: js/ui/status/network.js:1568
#, javascript-format
msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections"
@@ -2016,7 +1944,7 @@ msgstr[0] "%s bežično povezivanje"
msgstr[1] "%s bežična povezivanja"
msgstr[2] "%s bežičnih povezivanja"
#: js/ui/status/network.js:1578
#: js/ui/status/network.js:1572
#, javascript-format
msgid "%s Modem Connection"
msgid_plural "%s Modem Connections"
@@ -2024,11 +1952,11 @@ msgstr[0] "%s modemsko povezivanje"
msgstr[1] "%s modemska povezivanja"
msgstr[2] "%s modemskih povezivanja"
#: js/ui/status/network.js:1711
#: js/ui/status/network.js:1701
msgid "Connection failed"
msgstr "Neuspješno povezivanje"
#: js/ui/status/network.js:1712
#: js/ui/status/network.js:1702
msgid "Activation of network connection failed"
msgstr "Aktiviranje mrežnog povezivanja je neuspjelo"
@@ -2209,22 +2137,22 @@ msgstr "Pretraži"
msgid "“%s” is ready"
msgstr "“%s” je spreman"
#: js/ui/windowManager.js:54
#: js/ui/windowManager.js:53
msgid "Do you want to keep these display settings?"
msgstr "Želite li zadržati ove postavke zaslona?"
#. Translators: this and the following message should be limited in length,
#. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels.
#.
#: js/ui/windowManager.js:66
#: js/ui/windowManager.js:65
msgid "Revert Settings"
msgstr "Vrati postavke"
#: js/ui/windowManager.js:69
#: js/ui/windowManager.js:68
msgid "Keep Changes"
msgstr "Zadrži promjene"
#: js/ui/windowManager.js:87
#: js/ui/windowManager.js:86
#, javascript-format
msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds"
@@ -2234,7 +2162,7 @@ msgstr[2] "Promjene postavka će se vratiti za %d sekundi"
#. 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:678
#: js/ui/windowManager.js:662
#, javascript-format
msgid "%d × %d"
msgstr "%d × %d"
@@ -2333,11 +2261,11 @@ msgstr "Nepoznat"
msgid "Failed to launch “%s”"
msgstr "Neuspješno pokretanje “%s”"
#: src/shell-keyring-prompt.c:731
#: src/shell-keyring-prompt.c:730
msgid "Passwords do not match."
msgstr "Lozinke se ne podudaraju."
#: src/shell-keyring-prompt.c:739
#: src/shell-keyring-prompt.c:738
msgid "Password cannot be blank"
msgstr "Lozinka ne može biti prazna"
@@ -2369,9 +2297,6 @@ msgstr[2] "%u ulaza"
msgid "System Sounds"
msgstr "Zvukovi sustava"
#~ msgid "toggle-switch-us"
#~ msgstr "toggle-switch-us"
#~ msgid "network-workgroup"
#~ msgstr "network-workgroup"

386
po/hu.po
View File

@@ -4,22 +4,22 @@
#
# Gabor Kelemen <kelemeng at gnome dot hu>, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016.
# Lukács Bence <lukacs.bence1 at gmail dot com>, 2012.
# Balázs Meskó <meskobalazs at gmail dot com>, 2014, 2019.
# Balázs Úr <ur.balazs at fsf dot hu>, 2012, 2014, 2015, 2016, 2017, 2018, 2019.
# Balázs Meskó <meskobalazs at gmail dot com>, 2014.
# Balázs Úr <urbalazs at gmail dot com>, 2012, 2014, 2015, 2016, 2017, 2018, 2019.
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2019-05-28 17:15+0000\n"
"PO-Revision-Date: 2019-06-01 13:15+0200\n"
"Last-Translator: Balázs Úr <ur.balazs at fsf dot hu>\n"
"POT-Creation-Date: 2019-03-03 10:16+0000\n"
"PO-Revision-Date: 2019-02-05 21:05+0100\n"
"Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
"Language-Team: Hungarian <gnome-hu-list at gnome dot org>\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 18.12.3\n"
"X-Generator: Lokalize 1.2\n"
#: data/50-gnome-shell-system.xml:6
msgid "System"
@@ -373,6 +373,11 @@ msgstr ""
msgid "Network Login"
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-workgroup"
msgstr "network-workgroup"
#: js/extensionPrefs/main.js:116
msgid "Somethings gone wrong"
msgstr "Valami elromlott"
@@ -418,11 +423,10 @@ msgstr ""
msgid "Browse in Software"
msgstr "Tallózás a Szoftverekben"
#: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:52
#: js/ui/components/networkAgent.js:118 js/ui/components/polkitAgent.js:138
#: js/ui/endSessionDialog.js:431 js/ui/extensionDownloader.js:188
#: js/ui/shellMountOperation.js:404 js/ui/shellMountOperation.js:413
#: js/ui/status/network.js:894
#: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:55
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:136
#: js/ui/endSessionDialog.js:430 js/ui/extensionDownloader.js:188
#: js/ui/shellMountOperation.js:325 js/ui/status/network.js:888
msgid "Cancel"
msgstr "Mégse"
@@ -430,7 +434,7 @@ msgstr "Mégse"
msgid "Next"
msgstr "Következő"
#: js/gdm/authPrompt.js:198 js/ui/shellMountOperation.js:408
#: js/gdm/authPrompt.js:198 js/ui/shellMountOperation.js:329
#: js/ui/unlockDialog.js:41
msgid "Unlock"
msgstr "Feloldás"
@@ -461,8 +465,8 @@ 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:889 js/ui/components/networkAgent.js:244
#: js/ui/components/networkAgent.js:264 js/ui/components/networkAgent.js:282
#: js/gdm/loginDialog.js:889 js/ui/components/networkAgent.js:243
#: js/ui/components/networkAgent.js:263 js/ui/components/networkAgent.js:281
msgid "Username: "
msgstr "Felhasználónév: "
@@ -513,7 +517,7 @@ msgstr "Kijelentkezés"
#. Translators: A list of keywords that match the logout action, separated by semicolons
#: js/misc/systemActions.js:105
msgid "logout;log out;sign off"
msgid "logout;sign off"
msgstr "kijelentkezés;kilépés"
#. Translators: The name of the suspend action in search
@@ -700,11 +704,11 @@ msgstr ""
#. No support for non-modal system dialogs, so ignore the option
#. let modal = options['modal'] || true;
#: js/ui/accessDialog.js:38 js/ui/status/location.js:362
#: js/ui/accessDialog.js:37 js/ui/status/location.js:360
msgid "Deny Access"
msgstr "Hozzáférés tiltása"
#: js/ui/accessDialog.js:39 js/ui/status/location.js:365
#: js/ui/accessDialog.js:38 js/ui/status/location.js:363
msgid "Grant Access"
msgstr "Hozzáférés megadása"
@@ -720,58 +724,53 @@ msgstr "Gyakori"
msgid "All"
msgstr "Összes"
#. Translators: This is the heading of a list of open windows
#: js/ui/appDisplay.js:1713 js/ui/panel.js:79
msgid "Open Windows"
msgstr "Ablakok megnyitása"
#: js/ui/appDisplay.js:1732 js/ui/panel.js:86
#: js/ui/appDisplay.js:1737 js/ui/panel.js:83
msgid "New Window"
msgstr "Új ablak"
#: js/ui/appDisplay.js:1746
#: js/ui/appDisplay.js:1751
msgid "Launch using Dedicated Graphics Card"
msgstr "Futtatás a dedikált videokártyával"
#: js/ui/appDisplay.js:1773 js/ui/dash.js:239
#: js/ui/appDisplay.js:1778 js/ui/dash.js:239
msgid "Remove from Favorites"
msgstr "Eltávolítás a Kedvencek közül"
#: js/ui/appDisplay.js:1779
#: js/ui/appDisplay.js:1784
msgid "Add to Favorites"
msgstr "Hozzáadás a Kedvencekhez"
#: js/ui/appDisplay.js:1789 js/ui/panel.js:97
#: js/ui/appDisplay.js:1794 js/ui/panel.js:94
msgid "Show Details"
msgstr "Részletek megjelenítése"
#: js/ui/appFavorites.js:149
#: js/ui/appFavorites.js:141
#, javascript-format
msgid "%s has been added to your favorites."
msgstr "%s felvéve a Kedvencek közé."
#: js/ui/appFavorites.js:183
#: js/ui/appFavorites.js:175
#, javascript-format
msgid "%s has been removed from your favorites."
msgstr "%s eltávolítva a Kedvencek közül."
msgstr "%s eltávolítva a Kedvencek közül"
#: js/ui/audioDeviceSelection.js:39
#: js/ui/audioDeviceSelection.js:42
msgid "Select Audio Device"
msgstr "Válasszon hangeszközt"
#: js/ui/audioDeviceSelection.js:50
#: js/ui/audioDeviceSelection.js:53
msgid "Sound Settings"
msgstr "Hangbeállítások"
#: js/ui/audioDeviceSelection.js:59
#: js/ui/audioDeviceSelection.js:62
msgid "Headphones"
msgstr "Fülhallgatók"
#: js/ui/audioDeviceSelection.js:61
#: js/ui/audioDeviceSelection.js:64
msgid "Headset"
msgstr "Fejhallgató"
#: js/ui/audioDeviceSelection.js:63 js/ui/status/volume.js:247
#: js/ui/audioDeviceSelection.js:66 js/ui/status/volume.js:247
msgid "Microphone"
msgstr "Mikrofon"
@@ -932,74 +931,66 @@ msgstr "Erőltetett kilépés"
msgid "Wait"
msgstr "Várakozás"
#: js/ui/components/automountManager.js:87
#: js/ui/components/automountManager.js:86
msgid "External drive connected"
msgstr "Külső meghajtó csatlakoztatva"
#: js/ui/components/automountManager.js:99
#: js/ui/components/automountManager.js:98
msgid "External drive disconnected"
msgstr "Külső meghajtó leválasztva"
#: js/ui/components/automountManager.js:211
msgid "Unable to unlock volume"
msgstr "Nem lehet feloldani a kötetet"
#: js/ui/components/automountManager.js:212
msgid "The installed udisks version does not support the PIM setting"
msgstr "A telepített udisks verzió nem támogatja a PIM beállítást"
#: js/ui/components/autorunManager.js:334
#, javascript-format
msgid "Open with %s"
msgstr "Megnyitás ezzel: %s"
#: js/ui/components/keyring.js:66 js/ui/components/polkitAgent.js:257
#: js/ui/components/keyring.js:77 js/ui/components/polkitAgent.js:255
msgid "Password:"
msgstr "Jelszó:"
#: js/ui/components/keyring.js:97
#: js/ui/components/keyring.js:108
msgid "Type again:"
msgstr "Írja be újra:"
#: js/ui/components/networkAgent.js:103
#: js/ui/components/networkAgent.js:102
msgid ""
"Alternatively you can connect by pushing the “WPS” button on your router."
msgstr "Alternatívaként kapcsolódhat a „WPS” gomb megnyomásával az eszközön."
#: js/ui/components/networkAgent.js:113 js/ui/status/network.js:219
#: js/ui/status/network.js:310 js/ui/status/network.js:897
#: js/ui/components/networkAgent.js:112 js/ui/status/network.js:219
#: js/ui/status/network.js:309 js/ui/status/network.js:891
msgid "Connect"
msgstr "Kapcsolódás"
#. Cisco LEAP
#: js/ui/components/networkAgent.js:212 js/ui/components/networkAgent.js:224
#: js/ui/components/networkAgent.js:247 js/ui/components/networkAgent.js:266
#: js/ui/components/networkAgent.js:286 js/ui/components/networkAgent.js:296
#: js/ui/components/networkAgent.js:211 js/ui/components/networkAgent.js:223
#: js/ui/components/networkAgent.js:246 js/ui/components/networkAgent.js:265
#: js/ui/components/networkAgent.js:285 js/ui/components/networkAgent.js:295
msgid "Password: "
msgstr "Jelszó: "
#. static WEP
#: js/ui/components/networkAgent.js:217
#: js/ui/components/networkAgent.js:216
msgid "Key: "
msgstr "Kulcs: "
#: js/ui/components/networkAgent.js:250 js/ui/components/networkAgent.js:272
#: js/ui/components/networkAgent.js:249 js/ui/components/networkAgent.js:271
msgid "Private key password: "
msgstr "Személyes kulcs jelszava: "
#: js/ui/components/networkAgent.js:270
#: js/ui/components/networkAgent.js:269
msgid "Identity: "
msgstr "Személyazonosság: "
#: js/ui/components/networkAgent.js:284
#: js/ui/components/networkAgent.js:283
msgid "Service: "
msgstr "Szolgáltatás: "
#: js/ui/components/networkAgent.js:313 js/ui/components/networkAgent.js:686
#: js/ui/components/networkAgent.js:312 js/ui/components/networkAgent.js:685
msgid "Authentication required by wireless network"
msgstr "A vezeték nélküli hálózat hitelesítést igényel"
#: js/ui/components/networkAgent.js:314 js/ui/components/networkAgent.js:687
#: js/ui/components/networkAgent.js:313 js/ui/components/networkAgent.js:686
#, javascript-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
@@ -1008,53 +999,53 @@ msgstr ""
"Jelszavak vagy titkosítási kulcsok szükségesek a(z) „%s” vezeték nélküli "
"hálózat eléréséhez."
#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:690
#: js/ui/components/networkAgent.js:317 js/ui/components/networkAgent.js:689
msgid "Wired 802.1X authentication"
msgstr "Vezetékes 802.1X hitelesítés"
#: js/ui/components/networkAgent.js:320
#: js/ui/components/networkAgent.js:319
msgid "Network name: "
msgstr "Hálózat neve: "
#: js/ui/components/networkAgent.js:325 js/ui/components/networkAgent.js:694
#: js/ui/components/networkAgent.js:324 js/ui/components/networkAgent.js:693
msgid "DSL authentication"
msgstr "DSL hitelesítés"
#: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:700
#: js/ui/components/networkAgent.js:331 js/ui/components/networkAgent.js:699
msgid "PIN code required"
msgstr "PIN kód szükséges"
#: js/ui/components/networkAgent.js:333 js/ui/components/networkAgent.js:701
#: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:700
msgid "PIN code is needed for the mobile broadband device"
msgstr "PIN kód szükséges a mobil széles sávú eszközhöz"
#: js/ui/components/networkAgent.js:334
#: js/ui/components/networkAgent.js:333
msgid "PIN: "
msgstr "PIN: "
#: js/ui/components/networkAgent.js:341 js/ui/components/networkAgent.js:707
#: js/ui/components/networkAgent.js:340 js/ui/components/networkAgent.js:706
msgid "Mobile broadband network password"
msgstr "Mobil széles sávú hálózat jelszava"
#: js/ui/components/networkAgent.js:342 js/ui/components/networkAgent.js:691
#: js/ui/components/networkAgent.js:695 js/ui/components/networkAgent.js:708
#: js/ui/components/networkAgent.js:341 js/ui/components/networkAgent.js:690
#: js/ui/components/networkAgent.js:694 js/ui/components/networkAgent.js:707
#, javascript-format
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:675 js/ui/status/network.js:1670
#: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1664
msgid "Network Manager"
msgstr "Hálózatkezelő"
#: js/ui/components/polkitAgent.js:36
#: js/ui/components/polkitAgent.js:34
msgid "Authentication Required"
msgstr "Hitelesítés szükséges"
#: js/ui/components/polkitAgent.js:64
#: js/ui/components/polkitAgent.js:62
msgid "Administrator"
msgstr "Rendszergazda"
#: js/ui/components/polkitAgent.js:141
#: js/ui/components/polkitAgent.js:139
msgid "Authenticate"
msgstr "Hitelesítés"
@@ -1062,7 +1053,7 @@ msgstr "Hitelesítés"
#. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password),
#. * for instance.
#: js/ui/components/polkitAgent.js:243 js/ui/shellMountOperation.js:389
#: js/ui/components/polkitAgent.js:241 js/ui/shellMountOperation.js:309
msgid "Sorry, that didnt work. Please try again."
msgstr "Elnézést, ez nem sikerült. Próbálja újra."
@@ -1113,23 +1104,23 @@ msgstr "Világórák hozzáadása…"
msgid "World Clocks"
msgstr "Világórák"
#: js/ui/dateMenu.js:228
#: js/ui/dateMenu.js:222
msgid "Weather"
msgstr "Időjárás"
#: js/ui/dateMenu.js:311
#: js/ui/dateMenu.js:305
msgid "Select a location…"
msgstr "Válasszon egy helyet…"
#: js/ui/dateMenu.js:319
#: js/ui/dateMenu.js:313
msgid "Loading…"
msgstr "Betöltés…"
#: js/ui/dateMenu.js:329
#: js/ui/dateMenu.js:323
msgid "Go online for weather information"
msgstr "Időjárás-információkért kapcsolódjon az internetre"
#: js/ui/dateMenu.js:331
#: js/ui/dateMenu.js:325
msgid "Weather information is currently unavailable"
msgstr "Az időjárás-információk jelenleg nem érhetőek el"
@@ -1257,28 +1248,28 @@ msgstr ""
"eltarthat egy ideig: győződjön meg arról, hogy készített-e biztonsági "
"mentést, valamint a számítógép be van-e dugva."
#: js/ui/endSessionDialog.js:310
#: js/ui/endSessionDialog.js:309
msgid "Running on battery power: please plug in before installing updates."
msgstr ""
"Akkumulátoros működés: a frissítések telepítése előtt dugja be eszközét a "
"konnektorba."
#: js/ui/endSessionDialog.js:327
#: js/ui/endSessionDialog.js:326
msgid "Some applications are busy or have unsaved work."
msgstr "Egyes alkalmazások elfoglaltak, vagy mentetlen munkát tartalmaznak."
#: js/ui/endSessionDialog.js:334
#: js/ui/endSessionDialog.js:333
msgid "Other users are logged in."
msgstr "Más felhasználók vannak bejelentkezve."
#. Translators: Remote here refers to a remote session, like a ssh login
#: js/ui/endSessionDialog.js:615
#: js/ui/endSessionDialog.js:614
#, javascript-format
msgid "%s (remote)"
msgstr "%s (távoli)"
#. Translators: Console here refers to a tty like a VT console
#: js/ui/endSessionDialog.js:618
#: js/ui/endSessionDialog.js:617
#, javascript-format
msgid "%s (console)"
msgstr "%s (konzol)"
@@ -1294,26 +1285,26 @@ msgstr ""
"Letölti és telepíti a következőt az extensions.gnome.org webhelyről: „%s”?"
#. Translators: %s is an application name like "Settings"
#: js/ui/inhibitShortcutsDialog.js:78
#: js/ui/inhibitShortcutsDialog.js:50
#, javascript-format
msgid "%s wants to inhibit shortcuts"
msgstr "A(z) %s meg akarja gátolni a gyorsbillentyűk használatát"
#: js/ui/inhibitShortcutsDialog.js:79
#: js/ui/inhibitShortcutsDialog.js:51
msgid "Application wants to inhibit shortcuts"
msgstr "Az alkalmazás meg akarja gátolni a gyorsbillentyűk használatát"
#. Translators: %s is a keyboard shortcut like "Super+x"
#: js/ui/inhibitShortcutsDialog.js:88
#: js/ui/inhibitShortcutsDialog.js:60
#, javascript-format
msgid "You can restore shortcuts by pressing %s."
msgstr "A(z) %s megnyomásával visszaállíthatja a gyorsbillentyűket."
#: js/ui/inhibitShortcutsDialog.js:93
#: js/ui/inhibitShortcutsDialog.js:65
msgid "Deny"
msgstr "Tiltás"
#: js/ui/inhibitShortcutsDialog.js:100
#: js/ui/inhibitShortcutsDialog.js:71
msgid "Allow"
msgstr "Engedélyezés"
@@ -1364,13 +1355,13 @@ msgid "Leave On"
msgstr "Bekapcsolva hagyás"
#: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133
#: js/ui/status/network.js:1269
#: js/ui/status/network.js:1263
msgid "Turn On"
msgstr "Bekapcsolás"
#: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133
#: js/ui/status/network.js:128 js/ui/status/network.js:311
#: js/ui/status/network.js:1269 js/ui/status/network.js:1381
#: js/ui/status/network.js:128 js/ui/status/network.js:310
#: js/ui/status/network.js:1263 js/ui/status/network.js:1375
#: js/ui/status/nightLight.js:39 js/ui/status/rfkill.js:79
#: js/ui/status/rfkill.js:106
msgid "Turn Off"
@@ -1380,7 +1371,7 @@ msgstr "Kikapcsolás"
msgid "Leave Off"
msgstr "Kikapcsolva hagyás"
#: js/ui/keyboard.js:200
#: js/ui/keyboard.js:203
msgid "Region & Language Settings"
msgstr "Területi és nyelvi beállítások"
@@ -1432,7 +1423,7 @@ msgstr "Forrás megtekintése"
msgid "Web Page"
msgstr "Weblap"
#: js/ui/messageTray.js:1479
#: js/ui/messageTray.js:1480
msgid "System Information"
msgstr "Rendszerinformációk"
@@ -1510,38 +1501,47 @@ msgstr "Nyomja meg az Esc gombot a kilépéshez"
msgid "Press any key to exit"
msgstr "Nyomjon meg egy gombot a kilépéshez"
#: js/ui/panel.js:113
#: js/ui/panel.js:108
msgid "Quit"
msgstr "Kilépés"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: js/ui/panel.js:468
#: js/ui/panel.js:471
msgid "Activities"
msgstr "Tevékenységek"
#: js/ui/panel.js:743
#: js/ui/panel.js:746
msgctxt "System menu in the top bar"
msgid "System"
msgstr "Rendszer"
#: js/ui/panel.js:861
#: js/ui/panel.js:866
msgid "Top Bar"
msgstr "Felső sáv"
#: js/ui/runDialog.js:65
#. Translators: this MUST be either "toggle-switch-us"
#. (for toggle switches containing the English words
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: js/ui/popupMenu.js:285
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
#: js/ui/runDialog.js:64
msgid "Enter a Command"
msgstr "Adjon meg egy parancsot"
#: js/ui/runDialog.js:105 js/ui/windowMenu.js:166
#: js/ui/runDialog.js:104 js/ui/windowMenu.js:166
msgid "Close"
msgstr "Bezárás"
#: js/ui/runDialog.js:267
#: js/ui/runDialog.js:266
msgid "Restart is not available on Wayland"
msgstr "Az újraindítás nem érhető el Wayland alatt"
#: js/ui/runDialog.js:272
#: js/ui/runDialog.js:271
msgid "Restarting…"
msgstr "Újraindítás…"
@@ -1565,7 +1565,7 @@ msgid_plural "%d new notifications"
msgstr[0] "%d új értesítés"
msgstr[1] "%d új értesítés"
#: js/ui/screenShield.js:449 js/ui/status/system.js:271
#: js/ui/screenShield.js:449 js/ui/status/system.js:270
msgid "Lock"
msgstr "Zárolás"
@@ -1580,11 +1580,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:826 js/ui/screenShield.js:1299
#: js/ui/screenShield.js:834 js/ui/screenShield.js:1307
msgid "Unable to lock"
msgstr "Nem lehet zárolni"
#: js/ui/screenShield.js:827 js/ui/screenShield.js:1300
#: js/ui/screenShield.js:835 js/ui/screenShield.js:1308
msgid "Lock was blocked by an application"
msgstr "A zárolást egy alkalmazás blokkolta"
@@ -1619,61 +1619,14 @@ msgstr "Szöveg megjelenítése"
msgid "Hide Text"
msgstr "Szöveg elrejtése"
#: js/ui/shellMountOperation.js:318
msgid "Hidden Volume"
msgstr "Rejtett kötet"
#: js/ui/shellMountOperation.js:321
msgid "Windows System Volume"
msgstr "Windows rendszerkötet"
#: js/ui/shellMountOperation.js:324
msgid "Uses Keyfiles"
msgstr "Kulcsfájlokat használ"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:330
#, javascript-format
msgid ""
"To unlock a volume that uses keyfiles, use the <i>%s</i> utility instead."
msgstr ""
"A kulcsfájlokat használó kötetek feloldásához használja inkább a(z) <i>%s</i> "
"segédprogramot."
#: js/ui/shellMountOperation.js:337
msgid "PIM Number"
msgstr "PIM-szám"
#: js/ui/shellMountOperation.js:355
msgid "The PIM must be a number or empty."
msgstr "A PIM-nek számnak vagy üresnek kell lennie."
#: js/ui/shellMountOperation.js:366
#: js/ui/shellMountOperation.js:296
msgid "Password"
msgstr "Jelszó"
#: js/ui/shellMountOperation.js:396
#: js/ui/shellMountOperation.js:317
msgid "Remember Password"
msgstr "Jelszó megjegyzése"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:418
#, javascript-format
msgid "Open %s"
msgstr "%s megnyitása"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:490
#, javascript-format
msgid "Unable to start %s"
msgstr "A(z) %s nem indítható el"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:492
#, javascript-format
msgid "Couldnt find the %s application"
msgstr "Nem sikerült megtalálni a(z) %s alkalmazást"
#: js/ui/status/accessibility.js:35
msgid "Accessibility"
msgstr "Akadálymentesítés"
@@ -1710,11 +1663,11 @@ msgstr "Billentyűszűrés"
msgid "Mouse Keys"
msgstr "Egérbillentyűk"
#: js/ui/status/accessibility.js:135
#: js/ui/status/accessibility.js:151
msgid "High Contrast"
msgstr "Nagy kontraszt"
#: js/ui/status/accessibility.js:177
#: js/ui/status/accessibility.js:182
msgid "Large Text"
msgstr "Nagy szöveg"
@@ -1722,7 +1675,7 @@ msgstr "Nagy szöveg"
msgid "Bluetooth"
msgstr "Bluetooth"
#: js/ui/status/bluetooth.js:47 js/ui/status/network.js:586
#: js/ui/status/bluetooth.js:47 js/ui/status/network.js:585
msgid "Bluetooth Settings"
msgstr "Bluetooth-beállítások"
@@ -1746,11 +1699,11 @@ msgstr "Be"
msgid "Brightness"
msgstr "Fényerő"
#: js/ui/status/keyboard.js:813
#: js/ui/status/keyboard.js:812
msgid "Keyboard"
msgstr "Billentyűzet"
#: js/ui/status/keyboard.js:835
#: js/ui/status/keyboard.js:834
msgid "Show Keyboard Layout"
msgstr "Billentyűzetkiosztás megjelenítése"
@@ -1779,12 +1732,12 @@ msgid "Enable"
msgstr "Engedélyezés"
#. Translators: %s is an application name
#: js/ui/status/location.js:355
#: js/ui/status/location.js:353
#, javascript-format
msgid "Give %s access to your location?"
msgstr "Elérheti a(z) %s a földrajzi hely adatait?"
#: js/ui/status/location.js:356
#: js/ui/status/location.js:354
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."
@@ -1794,13 +1747,13 @@ msgid "<unknown>"
msgstr "<ismeretlen>"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:417 js/ui/status/network.js:1298
#: js/ui/status/network.js:416 js/ui/status/network.js:1292
#, javascript-format
msgid "%s Off"
msgstr "%s ki"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:420
#: js/ui/status/network.js:419
#, javascript-format
msgid "%s Connected"
msgstr "%s kapcsolódva"
@@ -1808,189 +1761,189 @@ 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:425
#: js/ui/status/network.js:424
#, javascript-format
msgid "%s Unmanaged"
msgstr "%s felügyeletlen"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:428
#: js/ui/status/network.js:427
#, javascript-format
msgid "%s Disconnecting"
msgstr "%s leválasztása"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:435 js/ui/status/network.js:1290
#: js/ui/status/network.js:434 js/ui/status/network.js:1284
#, 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:438
#: js/ui/status/network.js:437
#, 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:446
#: js/ui/status/network.js:445
#, 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:450
#: js/ui/status/network.js:449
#, javascript-format
msgid "%s Unavailable"
msgstr "%s nem érhető el"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:453
#: js/ui/status/network.js:452
#, javascript-format
msgid "%s Connection Failed"
msgstr "%s kapcsolódás meghiúsult"
#: js/ui/status/network.js:465
#: js/ui/status/network.js:464
msgid "Wired Settings"
msgstr "Vezetékes beállítások"
#: js/ui/status/network.js:507
#: js/ui/status/network.js:506
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:554 js/ui/status/network.js:1295
#: js/ui/status/network.js:553 js/ui/status/network.js:1289
#, 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:558
#: js/ui/status/network.js:557
#, javascript-format
msgid "%s Disabled"
msgstr "%s letiltva"
#: js/ui/status/network.js:598
#: js/ui/status/network.js:597
msgid "Connect to Internet"
msgstr "Kapcsolódás az internetre"
#: js/ui/status/network.js:792
#: js/ui/status/network.js:786
msgid "Airplane Mode is On"
msgstr "Repülőgép mód be"
#: js/ui/status/network.js:793
#: js/ui/status/network.js:787
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:794
#: js/ui/status/network.js:788
msgid "Turn Off Airplane Mode"
msgstr "Repülőgép mód ki"
#: js/ui/status/network.js:803
#: js/ui/status/network.js:797
msgid "Wi-Fi is Off"
msgstr "Wi-Fi ki"
#: js/ui/status/network.js:804
#: js/ui/status/network.js:798
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:805
#: js/ui/status/network.js:799
msgid "Turn On Wi-Fi"
msgstr "Wi-Fi bekapcsolása"
#: js/ui/status/network.js:830
#: js/ui/status/network.js:824
msgid "Wi-Fi Networks"
msgstr "Wi-Fi hálózatok"
#: js/ui/status/network.js:832
#: js/ui/status/network.js:826
msgid "Select a network"
msgstr "Válasszon egy hálózatot"
#: js/ui/status/network.js:861
#: js/ui/status/network.js:855
msgid "No Networks"
msgstr "Nincs hálózat"
#: js/ui/status/network.js:882 js/ui/status/rfkill.js:104
#: js/ui/status/network.js:876 js/ui/status/rfkill.js:104
msgid "Use hardware switch to turn off"
msgstr "A hardveres kapcsolóval kapcsolja ki"
#: js/ui/status/network.js:1158
#: js/ui/status/network.js:1152
msgid "Select Network"
msgstr "Válasszon hálózatot"
#: js/ui/status/network.js:1164
#: js/ui/status/network.js:1158
msgid "Wi-Fi Settings"
msgstr "Wi-Fi beállítások"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1286
#: js/ui/status/network.js:1280
#, javascript-format
msgid "%s Hotspot Active"
msgstr "%s hotspot aktív"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1301
#: js/ui/status/network.js:1295
#, javascript-format
msgid "%s Not Connected"
msgstr "%s nincs kapcsolódva"
#: js/ui/status/network.js:1398
#: js/ui/status/network.js:1392
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:1401
#: js/ui/status/network.js:1395
msgid "authentication required"
msgstr "hitelesítés szükséges"
#: js/ui/status/network.js:1403
#: js/ui/status/network.js:1397
msgid "connection failed"
msgstr "a kapcsolódás meghiúsult"
#: js/ui/status/network.js:1453
#: js/ui/status/network.js:1447
msgid "VPN Settings"
msgstr "VPN beállítások"
#: js/ui/status/network.js:1470
#: js/ui/status/network.js:1464
msgid "VPN"
msgstr "VPN"
#: js/ui/status/network.js:1480
#: js/ui/status/network.js:1474
msgid "VPN Off"
msgstr "VPN ki"
#: js/ui/status/network.js:1541 js/ui/status/rfkill.js:82
#: js/ui/status/network.js:1535 js/ui/status/rfkill.js:82
msgid "Network Settings"
msgstr "Hálózati beállítások"
#: js/ui/status/network.js:1570
#: js/ui/status/network.js:1564
#, javascript-format
msgid "%s Wired Connection"
msgid_plural "%s Wired Connections"
msgstr[0] "%s vezetékes kapcsolat"
msgstr[1] "%s vezetékes kapcsolat"
#: js/ui/status/network.js:1574
#: js/ui/status/network.js:1568
#, javascript-format
msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections"
msgstr[0] "%s Wi-Fi kapcsolat"
msgstr[1] "%s Wi-Fi kapcsolat"
#: js/ui/status/network.js:1578
#: js/ui/status/network.js:1572
#, javascript-format
msgid "%s Modem Connection"
msgid_plural "%s Modem Connections"
msgstr[0] "%s modemes kapcsolat"
msgstr[1] "%s modemes kapcsolat"
#: js/ui/status/network.js:1711
#: js/ui/status/network.js:1701
msgid "Connection failed"
msgstr "Kapcsolódás meghiúsult"
#: js/ui/status/network.js:1712
#: js/ui/status/network.js:1702
msgid "Activation of network connection failed"
msgstr "A hálózati kapcsolat aktiválása meghiúsult"
@@ -2037,7 +1990,7 @@ msgstr "%d%02d van hátra (%d%%)"
#. Translators: this is <hours>:<minutes> Until Full (<percentage>)
#: js/ui/status/power.js:89
#, javascript-format
msgid "%d%02d Until Full (%d%%)"
msgid "%d%02d Until Full (%d%%)"
msgstr "Töltésidő: %d%02d (%d%%)"
#: js/ui/status/power.js:117 js/ui/status/power.js:119
@@ -2072,15 +2025,15 @@ msgstr "Kijelentkezés"
msgid "Account Settings"
msgstr "Fiókbeállítások"
#: js/ui/status/system.js:256
#: js/ui/status/system.js:255
msgid "Orientation Lock"
msgstr "Tájolás zárolása"
#: js/ui/status/system.js:282
#: js/ui/status/system.js:281
msgid "Suspend"
msgstr "Felfüggesztés"
#: js/ui/status/system.js:292
#: js/ui/status/system.js:291
msgid "Power Off"
msgstr "Kikapcsolás"
@@ -2172,22 +2125,22 @@ msgstr "Oldalsáv"
msgid "“%s” is ready"
msgstr "„%s” kész"
#: js/ui/windowManager.js:54
#: js/ui/windowManager.js:53
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 length,
#. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels.
#.
#: js/ui/windowManager.js:66
#: js/ui/windowManager.js:65
msgid "Revert Settings"
msgstr "Beállítások visszavonása"
#: js/ui/windowManager.js:69
#: js/ui/windowManager.js:68
msgid "Keep Changes"
msgstr "Módosítások megtartása"
#: js/ui/windowManager.js:87
#: js/ui/windowManager.js:86
#, javascript-format
msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds"
@@ -2196,7 +2149,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:678
#: js/ui/windowManager.js:662
#, javascript-format
msgid "%d × %d"
msgstr "%d × %d"
@@ -2269,6 +2222,11 @@ msgstr "Áthelyezés a jobb oldali kijelzőre"
msgid "Evolution Calendar"
msgstr "Evolution naptár"
#. 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"
#: src/main.c:408
msgid "Print version"
msgstr "Verzió kiírása"
@@ -2286,21 +2244,21 @@ msgstr ""
msgid "List possible modes"
msgstr "Lehetséges módok listázása"
#: src/shell-app.c:264
#: src/shell-app.c:260
msgctxt "program"
msgid "Unknown"
msgstr "Ismeretlen"
#: src/shell-app.c:515
#: src/shell-app.c:511
#, c-format
msgid "Failed to launch “%s”"
msgstr "„%s” indítása meghiúsult"
#: src/shell-keyring-prompt.c:731
#: src/shell-keyring-prompt.c:730
msgid "Passwords do not match."
msgstr "A jelszavak nem egyeznek."
#: src/shell-keyring-prompt.c:739
#: src/shell-keyring-prompt.c:738
msgid "Password cannot be blank"
msgstr "A jelszó nem lehet üres"

334
po/id.po
View File

@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2019-06-06 11:42+0000\n"
"PO-Revision-Date: 2019-06-14 17:35+0700\n"
"POT-Creation-Date: 2019-04-17 19:29+0000\n"
"PO-Revision-Date: 2019-04-25 14:54+0700\n"
"Last-Translator: Kukuh Syafaat <kukuhsyafaat@gnome.org>\n"
"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n"
"Language: id\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural= n!=1;\n"
"X-Generator: Poedit 2.2.3\n"
"X-Generator: Poedit 2.2.1\n"
"X-DamnedLies-Scope: partial\n"
"X-Poedit-SourceCharset: UTF-8\n"
@@ -423,11 +423,10 @@ msgstr ""
msgid "Browse in Software"
msgstr "Ramban di Perangkat Lunak"
#: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:52
#: js/ui/components/networkAgent.js:118 js/ui/components/polkitAgent.js:138
#: js/ui/endSessionDialog.js:431 js/ui/extensionDownloader.js:188
#: js/ui/shellMountOperation.js:404 js/ui/shellMountOperation.js:413
#: js/ui/status/network.js:894
#: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:55
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:136
#: js/ui/endSessionDialog.js:430 js/ui/extensionDownloader.js:188
#: js/ui/shellMountOperation.js:325 js/ui/status/network.js:888
msgid "Cancel"
msgstr "Batal"
@@ -435,7 +434,7 @@ msgstr "Batal"
msgid "Next"
msgstr "Selanjutnya"
#: js/gdm/authPrompt.js:198 js/ui/shellMountOperation.js:408
#: js/gdm/authPrompt.js:198 js/ui/shellMountOperation.js:329
#: js/ui/unlockDialog.js:41
msgid "Unlock"
msgstr "Buka Kunci"
@@ -466,8 +465,8 @@ msgstr "(cth., pengguna dari %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:889 js/ui/components/networkAgent.js:244
#: js/ui/components/networkAgent.js:264 js/ui/components/networkAgent.js:282
#: js/gdm/loginDialog.js:889 js/ui/components/networkAgent.js:243
#: js/ui/components/networkAgent.js:263 js/ui/components/networkAgent.js:281
msgid "Username: "
msgstr "Nama pengguna: "
@@ -518,8 +517,8 @@ msgstr "Keluar"
#. Translators: A list of keywords that match the logout action, separated by semicolons
#: js/misc/systemActions.js:105
msgid "logout;log out;sign off"
msgstr "keluar;logout;log out;sign off"
msgid "logout;sign off"
msgstr "keluar"
#. Translators: The name of the suspend action in search
#: js/misc/systemActions.js:109
@@ -705,11 +704,11 @@ msgstr ""
#. No support for non-modal system dialogs, so ignore the option
#. let modal = options['modal'] || true;
#: js/ui/accessDialog.js:38 js/ui/status/location.js:362
#: js/ui/accessDialog.js:37 js/ui/status/location.js:360
msgid "Deny Access"
msgstr "Tolak Akses"
#: js/ui/accessDialog.js:39 js/ui/status/location.js:365
#: js/ui/accessDialog.js:38 js/ui/status/location.js:363
msgid "Grant Access"
msgstr "Beri Akses"
@@ -760,23 +759,23 @@ msgstr "%s telah ditambahkan ke favorit Anda."
msgid "%s has been removed from your favorites."
msgstr "%s telah dihapus dari favorit Anda."
#: js/ui/audioDeviceSelection.js:39
#: js/ui/audioDeviceSelection.js:42
msgid "Select Audio Device"
msgstr "Pilih Perangkat Audio"
#: js/ui/audioDeviceSelection.js:50
#: js/ui/audioDeviceSelection.js:53
msgid "Sound Settings"
msgstr "Pengaturan Suara"
#: js/ui/audioDeviceSelection.js:59
#: js/ui/audioDeviceSelection.js:62
msgid "Headphones"
msgstr "Headphone"
#: js/ui/audioDeviceSelection.js:61
#: js/ui/audioDeviceSelection.js:64
msgid "Headset"
msgstr "Headset"
#: js/ui/audioDeviceSelection.js:63 js/ui/status/volume.js:247
#: js/ui/audioDeviceSelection.js:66 js/ui/status/volume.js:247
msgid "Microphone"
msgstr "Mikrofon"
@@ -937,76 +936,68 @@ msgstr "Tutup Paksa"
msgid "Wait"
msgstr "Tunggu"
#: js/ui/components/automountManager.js:87
#: js/ui/components/automountManager.js:86
msgid "External drive connected"
msgstr "Drive eksternal tersambung"
#: js/ui/components/automountManager.js:99
#: js/ui/components/automountManager.js:98
msgid "External drive disconnected"
msgstr "Drive eksternal terputus"
#: js/ui/components/automountManager.js:211
msgid "Unable to unlock volume"
msgstr "Tak bisa membuka kunci volume"
#: js/ui/components/automountManager.js:212
msgid "The installed udisks version does not support the PIM setting"
msgstr "Versi udisks yang dipasang tidak mendukung pengaturan PIM"
#: js/ui/components/autorunManager.js:334
#, javascript-format
msgid "Open with %s"
msgstr "Buka dengan %s"
#: js/ui/components/keyring.js:66 js/ui/components/polkitAgent.js:257
#: js/ui/components/keyring.js:77 js/ui/components/polkitAgent.js:255
msgid "Password:"
msgstr "Sandi:"
#: js/ui/components/keyring.js:97
#: js/ui/components/keyring.js:108
msgid "Type again:"
msgstr "Ketik lagi:"
#: js/ui/components/networkAgent.js:103
#: js/ui/components/networkAgent.js:102
msgid ""
"Alternatively you can connect by pushing the “WPS” button on your router."
msgstr ""
"Sebagai alternatif Anda dapat terhubung dengan menekan tombol \"WPS\" pada "
"router Anda."
#: js/ui/components/networkAgent.js:113 js/ui/status/network.js:219
#: js/ui/status/network.js:310 js/ui/status/network.js:897
#: js/ui/components/networkAgent.js:112 js/ui/status/network.js:219
#: js/ui/status/network.js:309 js/ui/status/network.js:891
msgid "Connect"
msgstr "Sambung"
#. Cisco LEAP
#: js/ui/components/networkAgent.js:212 js/ui/components/networkAgent.js:224
#: js/ui/components/networkAgent.js:247 js/ui/components/networkAgent.js:266
#: js/ui/components/networkAgent.js:286 js/ui/components/networkAgent.js:296
#: js/ui/components/networkAgent.js:211 js/ui/components/networkAgent.js:223
#: js/ui/components/networkAgent.js:246 js/ui/components/networkAgent.js:265
#: js/ui/components/networkAgent.js:285 js/ui/components/networkAgent.js:295
msgid "Password: "
msgstr "Sandi: "
#. static WEP
#: js/ui/components/networkAgent.js:217
#: js/ui/components/networkAgent.js:216
msgid "Key: "
msgstr "Tombol: "
#: js/ui/components/networkAgent.js:250 js/ui/components/networkAgent.js:272
#: js/ui/components/networkAgent.js:249 js/ui/components/networkAgent.js:271
msgid "Private key password: "
msgstr "Sandi kunci privat: "
#: js/ui/components/networkAgent.js:270
#: js/ui/components/networkAgent.js:269
msgid "Identity: "
msgstr "Identitas: "
#: js/ui/components/networkAgent.js:284
#: js/ui/components/networkAgent.js:283
msgid "Service: "
msgstr "Layanan: "
#: js/ui/components/networkAgent.js:313 js/ui/components/networkAgent.js:686
#: js/ui/components/networkAgent.js:312 js/ui/components/networkAgent.js:685
msgid "Authentication required by wireless network"
msgstr "Autentikasi diperlukan oleh jaringan nirkabel"
msgstr "Otentikasi diperlukan oleh jaringan nirkabel"
#: js/ui/components/networkAgent.js:314 js/ui/components/networkAgent.js:687
#: js/ui/components/networkAgent.js:313 js/ui/components/networkAgent.js:686
#, javascript-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
@@ -1015,61 +1006,61 @@ msgstr ""
"Sandi atau kunci enkripsi diperlukan untuk mengakses jaringan nirkabel \"%s"
"\"."
#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:690
#: js/ui/components/networkAgent.js:317 js/ui/components/networkAgent.js:689
msgid "Wired 802.1X authentication"
msgstr "Autentikasi 802.1X kabel"
msgstr "Otentikasi 802.1X kabel"
#: js/ui/components/networkAgent.js:320
#: js/ui/components/networkAgent.js:319
msgid "Network name: "
msgstr "Nama jaringan: "
#: js/ui/components/networkAgent.js:325 js/ui/components/networkAgent.js:694
#: js/ui/components/networkAgent.js:324 js/ui/components/networkAgent.js:693
msgid "DSL authentication"
msgstr "Autentikasi DSL"
msgstr "Otentikasi DSL"
#: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:700
#: js/ui/components/networkAgent.js:331 js/ui/components/networkAgent.js:699
msgid "PIN code required"
msgstr "Perlu kode PIN"
#: js/ui/components/networkAgent.js:333 js/ui/components/networkAgent.js:701
#: js/ui/components/networkAgent.js:332 js/ui/components/networkAgent.js:700
msgid "PIN code is needed for the mobile broadband device"
msgstr "Kode PIN diperlukan untuk perangkat data seluler"
#: js/ui/components/networkAgent.js:334
#: js/ui/components/networkAgent.js:333
msgid "PIN: "
msgstr "PIN: "
#: js/ui/components/networkAgent.js:341 js/ui/components/networkAgent.js:707
#: js/ui/components/networkAgent.js:340 js/ui/components/networkAgent.js:706
msgid "Mobile broadband network password"
msgstr "Sandi jaringan data seluler"
#: js/ui/components/networkAgent.js:342 js/ui/components/networkAgent.js:691
#: js/ui/components/networkAgent.js:695 js/ui/components/networkAgent.js:708
#: js/ui/components/networkAgent.js:341 js/ui/components/networkAgent.js:690
#: js/ui/components/networkAgent.js:694 js/ui/components/networkAgent.js:707
#, javascript-format
msgid "A password is required to connect to “%s”."
msgstr "Perlu suatu sandi untuk menyambung ke \"%s\"."
#: js/ui/components/networkAgent.js:675 js/ui/status/network.js:1670
#: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1664
msgid "Network Manager"
msgstr "Manajer Jaringan"
#: js/ui/components/polkitAgent.js:36
#: js/ui/components/polkitAgent.js:34
msgid "Authentication Required"
msgstr "Diperlukan Autentikasi"
#: js/ui/components/polkitAgent.js:64
#: js/ui/components/polkitAgent.js:62
msgid "Administrator"
msgstr "Administrator"
#: js/ui/components/polkitAgent.js:141
#: js/ui/components/polkitAgent.js:139
msgid "Authenticate"
msgstr "Autentikasi"
msgstr "Otentikasi"
#. Translators: "that didn't work" refers to the fact that the
#. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password),
#. * for instance.
#: js/ui/components/polkitAgent.js:243 js/ui/shellMountOperation.js:389
#: js/ui/components/polkitAgent.js:241 js/ui/shellMountOperation.js:309
msgid "Sorry, that didnt work. Please try again."
msgstr "Maaf, tidak berhasil. Silakan coba lagi."
@@ -1263,27 +1254,27 @@ msgstr ""
"waktu lama: pastikan bahwa Anda telah melakukan back up dan komputer "
"tersambung ke listrik."
#: js/ui/endSessionDialog.js:310
#: js/ui/endSessionDialog.js:309
msgid "Running on battery power: please plug in before installing updates."
msgstr ""
"Berjalan memakai daya baterai: harap tancapkan sebelum memasang pemutakhiran."
#: js/ui/endSessionDialog.js:327
#: js/ui/endSessionDialog.js:326
msgid "Some applications are busy or have unsaved work."
msgstr "Beberapa aplikasi sedang sibuk atau belum disimpan perubahannya."
#: js/ui/endSessionDialog.js:334
#: js/ui/endSessionDialog.js:333
msgid "Other users are logged in."
msgstr "Pengguna lain sedang log masuk."
#. Translators: Remote here refers to a remote session, like a ssh login
#: js/ui/endSessionDialog.js:615
#: js/ui/endSessionDialog.js:614
#, javascript-format
msgid "%s (remote)"
msgstr "%s (jarak jauh)"
#. Translators: Console here refers to a tty like a VT console
#: js/ui/endSessionDialog.js:618
#: js/ui/endSessionDialog.js:617
#, javascript-format
msgid "%s (console)"
msgstr "%s (konsol)"
@@ -1368,13 +1359,13 @@ msgid "Leave On"
msgstr "Biarkan Menyala"
#: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133
#: js/ui/status/network.js:1269
#: js/ui/status/network.js:1263
msgid "Turn On"
msgstr "Nyalakan"
#: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133
#: js/ui/status/network.js:128 js/ui/status/network.js:311
#: js/ui/status/network.js:1269 js/ui/status/network.js:1381
#: js/ui/status/network.js:128 js/ui/status/network.js:310
#: js/ui/status/network.js:1263 js/ui/status/network.js:1375
#: js/ui/status/nightLight.js:39 js/ui/status/rfkill.js:79
#: js/ui/status/rfkill.js:106
msgid "Turn Off"
@@ -1436,7 +1427,7 @@ msgstr "Tilik Sumber"
msgid "Web Page"
msgstr "Halaman Web"
#: js/ui/messageTray.js:1479
#: js/ui/messageTray.js:1480
msgid "System Information"
msgstr "Informasi Sistem"
@@ -1529,23 +1520,23 @@ msgctxt "System menu in the top bar"
msgid "System"
msgstr "Sistem"
#: js/ui/panel.js:862
#: js/ui/panel.js:864
msgid "Top Bar"
msgstr "Bar Atas"
#: js/ui/runDialog.js:65
#: js/ui/runDialog.js:64
msgid "Enter a Command"
msgstr "Ketikkan Perintah"
#: js/ui/runDialog.js:105 js/ui/windowMenu.js:166
#: js/ui/runDialog.js:104 js/ui/windowMenu.js:166
msgid "Close"
msgstr "Tutup"
#: js/ui/runDialog.js:267
#: js/ui/runDialog.js:266
msgid "Restart is not available on Wayland"
msgstr "Memulai ulang tidak tersedia di Wayland"
#: js/ui/runDialog.js:272
#: js/ui/runDialog.js:271
msgid "Restarting…"
msgstr "Memulai ulang…"
@@ -1592,15 +1583,15 @@ msgstr "Tak bisa mengunci"
msgid "Lock was blocked by an application"
msgstr "Kunci diblokir oleh suatu aplikasi"
#: js/ui/search.js:638
#: js/ui/search.js:635
msgid "Searching…"
msgstr "Mencari…"
#: js/ui/search.js:640
#: js/ui/search.js:637
msgid "No results."
msgstr "Tak ada yang cocok."
#: js/ui/search.js:764
#: js/ui/search.js:761
#, javascript-format
msgid "%d more"
msgid_plural "%d more"
@@ -1623,61 +1614,14 @@ msgstr "Tampilkan Teks"
msgid "Hide Text"
msgstr "Sembunyikan Teks"
#: js/ui/shellMountOperation.js:318
msgid "Hidden Volume"
msgstr "Volume Tersembunyi"
#: js/ui/shellMountOperation.js:321
msgid "Windows System Volume"
msgstr "Volume Sistem Windows"
#: js/ui/shellMountOperation.js:324
msgid "Uses Keyfiles"
msgstr "Gunakan Berkas Kunci"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:330
#, javascript-format
msgid ""
"To unlock a volume that uses keyfiles, use the <i>%s</i> utility instead."
msgstr ""
"Untuk membuka kunci volume yang menggunakan berkas kunci, gunakan utilitas "
"<i>%s</i>."
#: js/ui/shellMountOperation.js:337
msgid "PIM Number"
msgstr "Nomor PIM"
#: js/ui/shellMountOperation.js:355
msgid "The PIM must be a number or empty."
msgstr "PIM harus berupa angka atau kosong."
#: js/ui/shellMountOperation.js:366
#: js/ui/shellMountOperation.js:296
msgid "Password"
msgstr "Sandi"
#: js/ui/shellMountOperation.js:396
#: js/ui/shellMountOperation.js:317
msgid "Remember Password"
msgstr "Ingat Sandi"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:418
#, javascript-format
msgid "Open %s"
msgstr "Buka %s"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:490
#, javascript-format
msgid "Unable to start %s"
msgstr "Tak bisa memulai %s"
#. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:492
#, javascript-format
msgid "Couldnt find the %s application"
msgstr "Tak bisa menemukan aplikasi %s"
#: js/ui/status/accessibility.js:35
msgid "Accessibility"
msgstr "Aksesibilitas"
@@ -1714,11 +1658,11 @@ msgstr "Tombol Pantul"
msgid "Mouse Keys"
msgstr "Tombol Tetikus"
#: js/ui/status/accessibility.js:135
#: js/ui/status/accessibility.js:151
msgid "High Contrast"
msgstr "Kontras Tinggi"
#: js/ui/status/accessibility.js:177
#: js/ui/status/accessibility.js:182
msgid "Large Text"
msgstr "Teks Besar"
@@ -1726,7 +1670,7 @@ msgstr "Teks Besar"
msgid "Bluetooth"
msgstr "Bluetooth"
#: js/ui/status/bluetooth.js:47 js/ui/status/network.js:586
#: js/ui/status/bluetooth.js:47 js/ui/status/network.js:585
msgid "Bluetooth Settings"
msgstr "Pengaturan Bluetooth"
@@ -1750,31 +1694,11 @@ msgstr "Hidup"
msgid "Brightness"
msgstr "Kecerahan"
#: js/ui/status/dwellClick.js:13
msgid "Single Click"
msgstr "Klik Tunggal"
#: js/ui/status/dwellClick.js:18
msgid "Double Click"
msgstr "Klik Ganda"
#: js/ui/status/dwellClick.js:23
msgid "Drag"
msgstr "Seret"
#: js/ui/status/dwellClick.js:28
msgid "Secondary Click"
msgstr "Klik Sekunder"
#: js/ui/status/dwellClick.js:37
msgid "Dwell Click"
msgstr "Klik Menetap"
#: js/ui/status/keyboard.js:813
#: js/ui/status/keyboard.js:812
msgid "Keyboard"
msgstr "Papan Ketik"
#: js/ui/status/keyboard.js:835
#: js/ui/status/keyboard.js:834
msgid "Show Keyboard Layout"
msgstr "Tampilkan Tata Letak Papan Tik"
@@ -1803,12 +1727,12 @@ msgid "Enable"
msgstr "Fungsikan"
#. Translators: %s is an application name
#: js/ui/status/location.js:355
#: js/ui/status/location.js:353
#, javascript-format
msgid "Give %s access to your location?"
msgstr "Beri %s akses ke lokasi Anda?"
#: js/ui/status/location.js:356
#: js/ui/status/location.js:354
msgid "Location access can be changed at any time from the privacy settings."
msgstr "Akses lokasi dapat diubah setiap saat dari pengaturan privasi."
@@ -1817,13 +1741,13 @@ msgid "<unknown>"
msgstr "<tak dikenal>"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:417 js/ui/status/network.js:1298
#: js/ui/status/network.js:416 js/ui/status/network.js:1292
#, javascript-format
msgid "%s Off"
msgstr "%s Mati"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:420
#: js/ui/status/network.js:419
#, javascript-format
msgid "%s Connected"
msgstr "%s Tersambung"
@@ -1831,189 +1755,189 @@ msgstr "%s Tersambung"
#. 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:425
#: js/ui/status/network.js:424
#, javascript-format
msgid "%s Unmanaged"
msgstr "%s Tak Dikelola"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:428
#: js/ui/status/network.js:427
#, javascript-format
msgid "%s Disconnecting"
msgstr "%s Memutus"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:435 js/ui/status/network.js:1290
#: js/ui/status/network.js:434 js/ui/status/network.js:1284
#, javascript-format
msgid "%s Connecting"
msgstr "%s Menyambung"
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
#: js/ui/status/network.js:438
#: js/ui/status/network.js:437
#, javascript-format
msgid "%s Requires Authentication"
msgstr "%s Memerlukan Autentikasi"
msgstr "%s Memerlukan Otentikasi"
#. 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:446
#: js/ui/status/network.js:445
#, javascript-format
msgid "Firmware Missing For %s"
msgstr "Firmware Hilang Untuk %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:450
#: js/ui/status/network.js:449
#, javascript-format
msgid "%s Unavailable"
msgstr "%s Tak tersedia"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:453
#: js/ui/status/network.js:452
#, javascript-format
msgid "%s Connection Failed"
msgstr "Koneksi %s Gagal"
#: js/ui/status/network.js:465
#: js/ui/status/network.js:464
msgid "Wired Settings"
msgstr "Pengaturan Kabel"
#: js/ui/status/network.js:507
#: js/ui/status/network.js:506
msgid "Mobile Broadband Settings"
msgstr "Pengaturan Data Seluler"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:554 js/ui/status/network.js:1295
#: js/ui/status/network.js:553 js/ui/status/network.js:1289
#, javascript-format
msgid "%s Hardware Disabled"
msgstr "%s Perangkat Keras Dinonaktifkan"
#. 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:558
#: js/ui/status/network.js:557
#, javascript-format
msgid "%s Disabled"
msgstr "%s Dinonaktifkan"
#: js/ui/status/network.js:598
#: js/ui/status/network.js:597
msgid "Connect to Internet"
msgstr "Sambungkan ke Internet"
#: js/ui/status/network.js:792
#: js/ui/status/network.js:786
msgid "Airplane Mode is On"
msgstr "Mode Pesawat Terbang Menyala"
#: js/ui/status/network.js:793
#: js/ui/status/network.js:787
msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "Wi-Fi dinonaktifkan ketika mode pesawat terbang menyala."
#: js/ui/status/network.js:794
#: js/ui/status/network.js:788
msgid "Turn Off Airplane Mode"
msgstr "Matikan Mode Pesawat Terbang"
#: js/ui/status/network.js:803
#: js/ui/status/network.js:797
msgid "Wi-Fi is Off"
msgstr "Wi-Fi Mati"
#: js/ui/status/network.js:804
#: js/ui/status/network.js:798
msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "Wi-Fi perlu dinyalakan untuk menyambung ke suatu jaringan."
#: js/ui/status/network.js:805
#: js/ui/status/network.js:799
msgid "Turn On Wi-Fi"
msgstr "Nyalakan Wi-Fi"
#: js/ui/status/network.js:830
#: js/ui/status/network.js:824
msgid "Wi-Fi Networks"
msgstr "Jaringan Wi-Fi"
#: js/ui/status/network.js:832
#: js/ui/status/network.js:826
msgid "Select a network"
msgstr "Pilih jaringan"
#: js/ui/status/network.js:861
#: js/ui/status/network.js:855
msgid "No Networks"
msgstr "Tiada Jaringan"
#: js/ui/status/network.js:882 js/ui/status/rfkill.js:104
#: js/ui/status/network.js:876 js/ui/status/rfkill.js:104
msgid "Use hardware switch to turn off"
msgstr "Pakai saklar perangkat keras untuk mematikan"
#: js/ui/status/network.js:1158
#: js/ui/status/network.js:1152
msgid "Select Network"
msgstr "Pilih Jaringan"
#: js/ui/status/network.js:1164
#: js/ui/status/network.js:1158
msgid "Wi-Fi Settings"
msgstr "Pengaturan Wi-Fi"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1286
#: js/ui/status/network.js:1280
#, javascript-format
msgid "%s Hotspot Active"
msgstr "%s Hotspot Aktif"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1301
#: js/ui/status/network.js:1295
#, javascript-format
msgid "%s Not Connected"
msgstr "%s Tak Tersambung"
#: js/ui/status/network.js:1398
#: js/ui/status/network.js:1392
msgid "connecting…"
msgstr "menyambung…"
#. Translators: this is for network connections that require some kind of key or password
#: js/ui/status/network.js:1401
#: js/ui/status/network.js:1395
msgid "authentication required"
msgstr "diperlukan autentikasi"
msgstr "diperlukan otentikasi"
#: js/ui/status/network.js:1403
#: js/ui/status/network.js:1397
msgid "connection failed"
msgstr "koneksi gagal"
#: js/ui/status/network.js:1453
#: js/ui/status/network.js:1447
msgid "VPN Settings"
msgstr "Pengaturan VPN"
#: js/ui/status/network.js:1470
#: js/ui/status/network.js:1464
msgid "VPN"
msgstr "VPN"
#: js/ui/status/network.js:1480
#: js/ui/status/network.js:1474
msgid "VPN Off"
msgstr "VPN Mati"
#: js/ui/status/network.js:1541 js/ui/status/rfkill.js:82
#: js/ui/status/network.js:1535 js/ui/status/rfkill.js:82
msgid "Network Settings"
msgstr "Pengaturan Jaringan"
#: js/ui/status/network.js:1570
#: js/ui/status/network.js:1564
#, javascript-format
msgid "%s Wired Connection"
msgid_plural "%s Wired Connections"
msgstr[0] "%s Koneksi Kabel"
msgstr[1] "%s Koneksi Kabel"
#: js/ui/status/network.js:1574
#: js/ui/status/network.js:1568
#, javascript-format
msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections"
msgstr[0] "%s Koneksi Wi-Fi"
msgstr[1] "%s Koneksi Wi-Fi"
#: js/ui/status/network.js:1578
#: js/ui/status/network.js:1572
#, javascript-format
msgid "%s Modem Connection"
msgid_plural "%s Modem Connections"
msgstr[0] "%s Koneksi Modem"
msgstr[1] "%s Koneksi Modem"
#: js/ui/status/network.js:1711
#: js/ui/status/network.js:1705
msgid "Connection failed"
msgstr "Koneksi gagal"
#: js/ui/status/network.js:1712
#: js/ui/status/network.js:1706
msgid "Activation of network connection failed"
msgstr "Aktivasi koneksi jaringan gagal"
@@ -2195,22 +2119,22 @@ msgstr "Cari"
msgid "“%s” is ready"
msgstr "'%s' siap"
#: js/ui/windowManager.js:54
#: js/ui/windowManager.js:53
msgid "Do you want to keep these display settings?"
msgstr "Apakah Anda ingin mempertahankan pengaturan tampilan ini?"
#. Translators: this and the following message should be limited in length,
#. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels.
#.
#: js/ui/windowManager.js:66
#: js/ui/windowManager.js:65
msgid "Revert Settings"
msgstr "Balikkan Tatanan"
#: js/ui/windowManager.js:69
#: js/ui/windowManager.js:68
msgid "Keep Changes"
msgstr "Simpan Perubahan"
#: js/ui/windowManager.js:87
#: js/ui/windowManager.js:86
#, javascript-format
msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds"
@@ -2219,7 +2143,7 @@ msgstr[1] "Perubahan tatanan akan dikembalikan dalam %d detik"
#. 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:678
#: js/ui/windowManager.js:677
#, javascript-format
msgid "%d × %d"
msgstr "%d × %d"
@@ -2318,11 +2242,11 @@ msgstr "Tak dikenal"
msgid "Failed to launch “%s”"
msgstr "Gagal meluncurkan \"%s\""
#: src/shell-keyring-prompt.c:731
#: src/shell-keyring-prompt.c:730
msgid "Passwords do not match."
msgstr "Sandi tidak cocok."
#: src/shell-keyring-prompt.c:739
#: src/shell-keyring-prompt.c:738
msgid "Password cannot be blank"
msgstr "Sandi tidak boleh kosong"

487
po/nl.po

File diff suppressed because it is too large Load Diff

View File

@@ -295,13 +295,13 @@ create_client_for_source (ESource *source,
CalendarSourceData *source_data)
{
ClientData *data;
EClient *client;
ECalClient *client;
GError *error = NULL;
client = g_hash_table_lookup (source_data->clients, source);
g_return_if_fail (client == NULL);
client = e_cal_client_connect_sync (source, source_type, -1, NULL, &error);
client = e_cal_client_new (source, source_type, &error);
if (!client)
{
g_warning ("Could not load source '%s': %s",
@@ -312,7 +312,7 @@ create_client_for_source (ESource *source,
}
data = g_slice_new0 (ClientData);
data->client = E_CAL_CLIENT (client); /* takes ownership */
data->client = client; /* takes ownership */
data->backend_died_id = g_signal_connect (client,
"backend-died",
G_CALLBACK (backend_died_cb),

View File

@@ -102,120 +102,97 @@ typedef struct
} CollectAppointmentsData;
static time_t
get_time_from_property (ICalComponent *icomp,
ICalPropertyKind prop_kind,
ICalTime * (* get_prop_func) (ICalProperty *prop),
ICalTimezone *default_zone)
get_time_from_property (icalcomponent *ical,
icalproperty_kind prop_kind,
struct icaltimetype (* get_prop_func) (const icalproperty *prop),
icaltimezone *default_zone)
{
ICalProperty *prop;
ICalTime *itt;
ICalParameter *param;
ICalTimezone *timezone = NULL;
time_t retval;
icalproperty *prop;
struct icaltimetype ical_time;
icalparameter *param;
icaltimezone *timezone = NULL;
prop = i_cal_component_get_first_property (icomp, prop_kind);
prop = icalcomponent_get_first_property (ical, prop_kind);
if (!prop)
return 0;
itt = get_prop_func (prop);
ical_time = get_prop_func (prop);
param = i_cal_property_get_first_parameter (prop, I_CAL_TZID_PARAMETER);
param = icalproperty_get_first_parameter (prop, ICAL_TZID_PARAMETER);
if (param)
timezone = i_cal_timezone_get_builtin_timezone_from_tzid (i_cal_parameter_get_tzid (param));
else if (i_cal_time_is_utc (itt))
timezone = i_cal_timezone_get_utc_timezone ();
timezone = icaltimezone_get_builtin_timezone_from_tzid (icalparameter_get_tzid (param));
else if (icaltime_is_utc (ical_time))
timezone = icaltimezone_get_utc_timezone ();
else
timezone = default_zone;
retval = i_cal_time_as_timet_with_zone (itt, timezone);
g_clear_object (&param);
g_clear_object (&prop);
g_clear_object (&itt);
return retval;
return icaltime_as_timet_with_zone (ical_time, timezone);
}
static char *
get_ical_uid (ICalComponent *icomp)
get_ical_uid (icalcomponent *ical)
{
return g_strdup (i_cal_component_get_uid (icomp));
return g_strdup (icalcomponent_get_uid (ical));
}
static char *
get_ical_summary (ICalComponent *icomp)
get_ical_summary (icalcomponent *ical)
{
ICalProperty *prop;
char *retval;
icalproperty *prop;
prop = i_cal_component_get_first_property (icomp, I_CAL_SUMMARY_PROPERTY);
prop = icalcomponent_get_first_property (ical, ICAL_SUMMARY_PROPERTY);
if (!prop)
return NULL;
retval = g_strdup (i_cal_property_get_summary (prop));
g_object_unref (prop);
return retval;
return g_strdup (icalproperty_get_summary (prop));
}
static char *
get_ical_description (ICalComponent *icomp)
get_ical_description (icalcomponent *ical)
{
ICalProperty *prop;
char *retval;
icalproperty *prop;
prop = i_cal_component_get_first_property (icomp, I_CAL_DESCRIPTION_PROPERTY);
prop = icalcomponent_get_first_property (ical, ICAL_DESCRIPTION_PROPERTY);
if (!prop)
return NULL;
retval = g_strdup (i_cal_property_get_description (prop));
g_object_unref (prop);
return retval;
return g_strdup (icalproperty_get_description (prop));
}
static inline time_t
get_ical_start_time (ICalComponent *icomp,
ICalTimezone *default_zone)
get_ical_start_time (icalcomponent *ical,
icaltimezone *default_zone)
{
return get_time_from_property (icomp,
I_CAL_DTSTART_PROPERTY,
i_cal_property_get_dtstart,
return get_time_from_property (ical,
ICAL_DTSTART_PROPERTY,
icalproperty_get_dtstart,
default_zone);
}
static inline time_t
get_ical_end_time (ICalComponent *icomp,
ICalTimezone *default_zone)
get_ical_end_time (icalcomponent *ical,
icaltimezone *default_zone)
{
return get_time_from_property (icomp,
I_CAL_DTEND_PROPERTY,
i_cal_property_get_dtend,
return get_time_from_property (ical,
ICAL_DTEND_PROPERTY,
icalproperty_get_dtend,
default_zone);
}
static gboolean
get_ical_is_all_day (ICalComponent *icomp,
get_ical_is_all_day (icalcomponent *ical,
time_t start_time,
ICalTimezone *default_zone)
icaltimezone *default_zone)
{
ICalProperty *prop;
ICalDuration *duration;
ICalTime *dtstart;
struct tm *start_tm;
time_t end_time;
gboolean retval;
icalproperty *prop;
struct tm *start_tm;
time_t end_time;
struct icaldurationtype duration;
struct icaltimetype start_icaltime;
dtstart = i_cal_component_get_dtstart (icomp);
if (dtstart && i_cal_time_is_date (dtstart))
{
g_clear_object (&dtstart);
return TRUE;
}
g_clear_object (&dtstart);
start_icaltime = icalcomponent_get_dtstart (ical);
if (start_icaltime.is_date)
return TRUE;
start_tm = gmtime (&start_time);
if (start_tm->tm_sec != 0 ||
@@ -223,40 +200,35 @@ get_ical_is_all_day (ICalComponent *icomp,
start_tm->tm_hour != 0)
return FALSE;
if ((end_time = get_ical_end_time (icomp, default_zone)))
if ((end_time = get_ical_end_time (ical, default_zone)))
return (end_time - start_time) % 86400 == 0;
prop = i_cal_component_get_first_property (icomp, I_CAL_DURATION_PROPERTY);
prop = icalcomponent_get_first_property (ical, ICAL_DURATION_PROPERTY);
if (!prop)
return FALSE;
duration = i_cal_property_get_duration (prop);
duration = icalproperty_get_duration (prop);
retval = duration && (i_cal_duration_as_int (duration) % 86400) == 0;
g_clear_object (&duration);
g_clear_object (&prop);
return retval;
return icaldurationtype_as_int (duration) % 86400 == 0;
}
static inline time_t
get_ical_due_time (ICalComponent *icomp,
ICalTimezone *default_zone)
get_ical_due_time (icalcomponent *ical,
icaltimezone *default_zone)
{
return get_time_from_property (icomp,
I_CAL_DUE_PROPERTY,
i_cal_property_get_due,
return get_time_from_property (ical,
ICAL_DUE_PROPERTY,
icalproperty_get_due,
default_zone);
}
static inline time_t
get_ical_completed_time (ICalComponent *icomp,
ICalTimezone *default_zone)
get_ical_completed_time (icalcomponent *ical,
icaltimezone *default_zone)
{
return get_time_from_property (icomp,
I_CAL_COMPLETED_PROPERTY,
i_cal_property_get_completed,
return get_time_from_property (ical,
ICAL_COMPLETED_PROPERTY,
icalproperty_get_completed,
default_zone);
}
@@ -393,69 +365,67 @@ calendar_appointment_free (CalendarAppointment *appointment)
static void
calendar_appointment_init (CalendarAppointment *appointment,
ICalComponent *icomp,
icalcomponent *ical,
ECalClient *cal)
{
ICalTimezone *default_zone;
icaltimezone *default_zone;
const char *source_id;
source_id = e_source_get_uid (e_client_get_source (E_CLIENT (cal)));
default_zone = e_cal_client_get_default_timezone (cal);
appointment->uid = get_ical_uid (icomp);
appointment->uid = get_ical_uid (ical);
appointment->source_id = g_strdup (source_id);
appointment->backend_name = get_source_backend_name (cal);
appointment->summary = get_ical_summary (icomp);
appointment->description = get_ical_description (icomp);
appointment->summary = get_ical_summary (ical);
appointment->description = get_ical_description (ical);
appointment->color_string = get_source_color (cal);
appointment->start_time = get_ical_start_time (icomp, default_zone);
appointment->end_time = get_ical_end_time (icomp, default_zone);
appointment->is_all_day = get_ical_is_all_day (icomp,
appointment->start_time = get_ical_start_time (ical, default_zone);
appointment->end_time = get_ical_end_time (ical, default_zone);
appointment->is_all_day = get_ical_is_all_day (ical,
appointment->start_time,
default_zone);
}
static CalendarAppointment *
calendar_appointment_new (ICalComponent *icomp,
calendar_appointment_new (icalcomponent *ical,
ECalClient *cal)
{
CalendarAppointment *appointment;
appointment = g_new0 (CalendarAppointment, 1);
calendar_appointment_init (appointment, icomp, cal);
calendar_appointment_init (appointment, ical, cal);
return appointment;
}
static gboolean
generate_instances_cb (ICalComponent *icomp,
ICalTime *instance_start,
ICalTime *instance_end,
gpointer user_data,
GCancellable *cancellable,
GError **error)
generate_instances_cb (ECalComponent *comp,
time_t start,
time_t end,
gpointer data)
{
ECalClient *cal = ((CollectAppointmentsData *)user_data)->client;
GHashTable *appointments = ((CollectAppointmentsData *)user_data)->appointments;
ECalClient *cal = ((CollectAppointmentsData *)data)->client;
GHashTable *appointments = ((CollectAppointmentsData *)data)->appointments;
CalendarAppointment *appointment;
CalendarOccurrence *occurrence;
ICalTimezone *default_zone;
const gchar *uid;
const char *uid;
default_zone = e_cal_client_get_default_timezone (cal);
uid = i_cal_component_get_uid (icomp);
e_cal_component_get_uid (comp, &uid);
appointment = g_hash_table_lookup (appointments, uid);
if (appointment == NULL)
{
appointment = calendar_appointment_new (icomp, cal);
icalcomponent *ical = e_cal_component_get_icalcomponent (comp);
appointment = calendar_appointment_new (ical, cal);
g_hash_table_insert (appointments, g_strdup (uid), appointment);
}
occurrence = g_new0 (CalendarOccurrence, 1);
occurrence->start_time = i_cal_time_as_timet_with_zone (instance_start, default_zone);
occurrence->end_time = i_cal_time_as_timet_with_zone (instance_end, default_zone);
occurrence->rid = e_cal_util_component_get_recurid_as_string (icomp);
occurrence->start_time = start;
occurrence->end_time = end;
occurrence->rid = e_cal_component_get_recurid_as_string (comp);
appointment->occurrences = g_slist_append (appointment->occurrences, occurrence);
@@ -472,7 +442,7 @@ struct _App
time_t since;
time_t until;
ICalTimezone *zone;
icaltimezone *zone;
CalendarSources *sources;
gulong sources_signal_id;
@@ -498,9 +468,9 @@ app_update_timezone (App *app)
if (g_strcmp0 (location, app->timezone_location) != 0)
{
if (location == NULL)
app->zone = i_cal_timezone_get_utc_timezone ();
app->zone = icaltimezone_get_utc_timezone ();
else
app->zone = i_cal_timezone_get_builtin_timezone (location);
app->zone = icaltimezone_get_builtin_timezone (location);
g_free (app->timezone_location);
app->timezone_location = location;
print_debug ("Using timezone %s", app->timezone_location);
@@ -558,10 +528,10 @@ on_objects_added (ECalClientView *view,
for (l = objects; l != NULL; l = l->next)
{
ICalComponent *icomp = l->data;
icalcomponent *ical = l->data;
const char *uid;
uid = i_cal_component_get_uid (icomp);
uid = icalcomponent_get_uid (ical);
if (g_hash_table_lookup (app->appointments, uid) == NULL)
{
@@ -630,7 +600,7 @@ app_load_events (App *app)
since_iso8601 = isodate_from_time_t (app->since);
until_iso8601 = isodate_from_time_t (app->until);
tz_location = i_cal_timezone_get_location (app->zone);
tz_location = icaltimezone_get_location (app->zone);
print_debug ("Loading events since %s until %s",
since_iso8601,
@@ -652,12 +622,21 @@ app_load_events (App *app)
e_cal_client_set_default_timezone (cal, app->zone);
error = NULL;
if (!e_client_open_sync (E_CLIENT (cal), TRUE, NULL, &error))
{
ESource *source = e_client_get_source (E_CLIENT (cal));
g_warning ("Error opening calendar %s: %s\n",
e_source_get_uid (source), error->message);
g_error_free (error);
continue;
}
data.client = cal;
data.appointments = app->appointments;
e_cal_client_generate_instances_sync (cal,
app->since,
app->until,
NULL,
generate_instances_cb,
&data);

View File

@@ -346,13 +346,6 @@ gnome_shell_plugin_create_inhibit_shortcuts_dialog (MetaPlugin *plugin,
return _shell_wm_create_inhibit_shortcuts_dialog (get_shell_wm (), window);
}
static void
gnome_shell_plugin_locate_pointer (MetaPlugin *plugin)
{
GnomeShellPlugin *shell_plugin = GNOME_SHELL_PLUGIN (plugin);
_shell_global_locate_pointer (shell_plugin->global);
}
static void
gnome_shell_plugin_class_init (GnomeShellPluginClass *klass)
{
@@ -385,8 +378,6 @@ gnome_shell_plugin_class_init (GnomeShellPluginClass *klass)
plugin_class->create_close_dialog = gnome_shell_plugin_create_close_dialog;
plugin_class->create_inhibit_shortcuts_dialog = gnome_shell_plugin_create_inhibit_shortcuts_dialog;
plugin_class->locate_pointer = gnome_shell_plugin_locate_pointer;
}
static void

View File

@@ -198,62 +198,6 @@ shell_fonts_init (void)
cogl_pango_font_map_set_use_mipmapping (fontmap, FALSE);
}
static void
shell_profiler_init (void)
{
ShellGlobal *global;
GjsProfiler *profiler;
GjsContext *context;
const char *enabled;
const char *fd_str;
int fd = -1;
/* Sysprof uses the "GJS_TRACE_FD=N" environment variable to connect GJS
* profiler data to the combined Sysprof capture. Since we are in control of
* the GjsContext, we need to proxy this FD across to the GJS profiler.
*/
fd_str = g_getenv ("GJS_TRACE_FD");
enabled = g_getenv ("GJS_ENABLE_PROFILER");
if (fd_str == NULL || enabled == NULL)
return;
global = shell_global_get ();
g_return_if_fail (global);
context = _shell_global_get_gjs_context (global);
g_return_if_fail (context);
profiler = gjs_context_get_profiler (context);
g_return_if_fail (profiler);
if (fd_str)
{
fd = atoi (fd_str);
if (fd > 2)
{
gjs_profiler_set_fd (profiler, fd);
gjs_profiler_start (profiler);
}
}
}
static void
shell_profiler_shutdown (void)
{
ShellGlobal *global;
GjsProfiler *profiler;
GjsContext *context;
global = shell_global_get ();
context = _shell_global_get_gjs_context (global);
profiler = gjs_context_get_profiler (context);
if (profiler)
gjs_profiler_stop (profiler);
}
static void
malloc_statistics_callback (ShellPerfLog *perf_log,
gpointer data)
@@ -552,9 +496,7 @@ main (int argc, char **argv)
dump_gjs_stack_on_signal (SIGSEGV);
}
shell_profiler_init ();
ecode = meta_run ();
shell_profiler_shutdown ();
g_debug ("Doing final cleanup");
_shell_global_destroy_gjs_context (shell_global_get ());

View File

@@ -1114,7 +1114,7 @@ _shell_app_remove_window (ShellApp *app,
* shell_app_get_pids:
* @app: a #ShellApp
*
* Returns: (transfer container) (element-type int): An unordered list of process identifiers associated with this application.
* Returns: (transfer container) (element-type int): An unordered list of process identifers associated with this application.
*/
GSList *
shell_app_get_pids (ShellApp *app)
@@ -1151,10 +1151,11 @@ _shell_app_handle_startup_sequence (ShellApp *app,
if (starting && shell_app_get_state (app) == SHELL_APP_STATE_STOPPED)
{
MetaDisplay *display = shell_global_get_display (shell_global_get ());
MetaX11Display *x11_display = meta_display_get_x11_display (display);
shell_app_state_transition (app, SHELL_APP_STATE_STARTING);
meta_display_unset_input_focus (display,
meta_startup_sequence_get_timestamp (sequence));
meta_x11_display_focus_the_no_focus_window (x11_display,
meta_startup_sequence_get_timestamp (sequence));
app->started_on_workspace = meta_startup_sequence_get_workspace (sequence);
}

View File

@@ -18,6 +18,4 @@ GjsContext *_shell_global_get_gjs_context (ShellGlobal *global);
gboolean _shell_global_check_xdnd_event (ShellGlobal *global,
XEvent *xev);
void _shell_global_locate_pointer (ShellGlobal *global);
#endif /* __SHELL_GLOBAL_PRIVATE_H__ */

View File

@@ -29,6 +29,12 @@
#include <meta/meta-workspace-manager.h>
#include <meta/meta-x11-display.h>
#ifdef HAVE_SYSTEMD
#include <systemd/sd-journal.h>
#include <errno.h>
#include <unistd.h>
#endif
/* Memory report bits */
#ifdef HAVE_MALLINFO
#include <malloc.h>
@@ -55,6 +61,8 @@ struct _ShellGlobal {
MetaDisplay *meta_display;
MetaWorkspaceManager *workspace_manager;
GdkDisplay *gdk_display;
MetaX11Display *x11_display;
Display *xdisplay;
char *session_mode;
@@ -109,7 +117,6 @@ enum {
enum
{
NOTIFY_ERROR,
LOCATE_POINTER,
LAST_SIGNAL
};
@@ -352,13 +359,6 @@ shell_global_class_init (ShellGlobalClass *klass)
G_TYPE_NONE, 2,
G_TYPE_STRING,
G_TYPE_STRING);
shell_global_signals[LOCATE_POINTER] =
g_signal_new ("locate-pointer",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 0);
g_object_class_install_property (gobject_class,
PROP_SESSION_MODE,
@@ -642,9 +642,6 @@ shell_global_set_stage_input_region (ShellGlobal *global,
g_return_if_fail (SHELL_IS_GLOBAL (global));
if (meta_is_wayland_compositor ())
return;
nrects = g_slist_length (rectangles);
rects = g_new (XRectangle, nrects);
for (r = rectangles, i = 0; r; r = r->next, i++)
@@ -849,6 +846,10 @@ _shell_global_set_plugin (ShellGlobal *global,
display = meta_plugin_get_display (plugin);
global->meta_display = display;
global->workspace_manager = meta_display_get_workspace_manager (display);
global->x11_display = meta_display_get_x11_display (display);
global->xdisplay = meta_x11_display_get_xdisplay (global->x11_display);
global->gdk_display = gdk_x11_lookup_xdisplay (global->xdisplay);
global->stage = CLUTTER_STAGE (meta_get_stage_for_display (display));
@@ -858,8 +859,6 @@ _shell_global_set_plugin (ShellGlobal *global,
}
else
{
MetaX11Display *x11_display = meta_display_get_x11_display (display);
global->xdisplay = meta_x11_display_get_xdisplay (x11_display);
global->stage_xwindow = clutter_x11_get_stage_window (global->stage);
}
@@ -1165,6 +1164,52 @@ shell_global_reexec_self (ShellGlobal *global)
#endif
}
/**
* shell_global_log_structured:
* @message: A message to print
* @keys: (allow-none) (array zero-terminated=1) (element-type utf8): Optional structured data
*
* Log structured data in an operating-system specific fashion. The
* parameter @opts should be an array of UTF-8 KEY=VALUE strings.
* This function does not support binary data. See
* http://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html
* or more information about fields that can be used on a systemd
* system.
*
*/
void
shell_global_log_structured (const char *message,
const char *const *keys)
{
#ifdef HAVE_SYSTEMD
const char *const*iter;
char *msgkey;
guint i, n_opts;
struct iovec *iovs;
for (n_opts = 0, iter = keys; *iter; iter++, n_opts++)
;
n_opts++; /* Add one for MESSAGE= */
iovs = g_alloca (sizeof (struct iovec) * n_opts);
for (i = 0, iter = keys; *iter; iter++, i++) {
iovs[i].iov_base = (char*)keys[i];
iovs[i].iov_len = strlen (keys[i]);
}
g_assert(i == n_opts-1);
msgkey = g_strconcat ("MESSAGE=", message, NULL);
iovs[i].iov_base = msgkey;
iovs[i].iov_len = strlen (msgkey);
// The code location isn't useful since we're wrapping
sd_journal_sendv (iovs, n_opts);
g_free (msgkey);
#else
g_print ("%s\n", message);
#endif
}
/**
* shell_global_notify_error:
* @global: a #ShellGlobal
@@ -1516,8 +1561,7 @@ delete_variant_cb (GObject *object,
if (!g_file_delete_finish (G_FILE (object), result, &error))
{
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED) &&
!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
{
g_warning ("Could not delete runtime/persistent state file: %s\n",
error->message);
@@ -1688,9 +1732,3 @@ shell_global_get_persistent_state (ShellGlobal *global,
{
return load_variant (global->userdatadir_path, property_type, property_name);
}
void
_shell_global_locate_pointer (ShellGlobal *global)
{
g_signal_emit (global, shell_global_signals[LOCATE_POINTER], 0);
}

View File

@@ -79,6 +79,9 @@ void shell_global_init_xdnd (ShellGlobal *global);
void shell_global_reexec_self (ShellGlobal *global);
void shell_global_log_structured (const char *message,
const char *const *keys);
const char * shell_global_get_session_mode (ShellGlobal *global);
void shell_global_set_runtime_state (ShellGlobal *global,

View File

@@ -280,7 +280,7 @@ shell_gtk_embed_allocate (ClutterActor *actor,
{
ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
float wx, wy;
float wx = 0.0, wy = 0.0, x, y, ax, ay;
CLUTTER_ACTOR_CLASS (shell_gtk_embed_parent_class)->
allocate (actor, box, flags);
@@ -288,7 +288,16 @@ shell_gtk_embed_allocate (ClutterActor *actor,
/* Find the actor's new coordinates in terms of the stage (which is
* priv->window's parent window.
*/
clutter_actor_get_transformed_position (actor, &wx, &wy);
while (actor)
{
clutter_actor_get_position (actor, &x, &y);
clutter_actor_get_anchor_point (actor, &ax, &ay);
wx += x - ax;
wy += y - ay;
actor = clutter_actor_get_parent (actor);
}
_shell_embedded_window_allocate (priv->window,
(int)(0.5 + wx), (int)(0.5 + wy),

View File

@@ -115,8 +115,7 @@ remove_mnemonics (const GValue *value)
g_return_val_if_fail (G_VALUE_HOLDS_STRING (value), NULL);
label = g_value_get_string (value);
if (!label)
return NULL;
g_return_val_if_fail (label != NULL, NULL);
/* Stripped label will have the original label length at most */
stripped_label = temp = g_new (gchar, strlen(label) + 1);

View File

@@ -18,7 +18,6 @@ st_headers = [
'st-scrollable.h',
'st-scroll-bar.h',
'st-scroll-view.h',
'st-scroll-view-fade.h',
'st-settings.h',
'st-shadow.h',
'st-texture-cache.h',
@@ -74,7 +73,6 @@ st_sources = [
'st-scrollable.c',
'st-scroll-bar.c',
'st-scroll-view.c',
'st-scroll-view-fade.c',
'st-settings.c',
'st-shadow.c',
'st-texture-cache.c',
@@ -96,6 +94,11 @@ st_enums = gnome.mkenums_simple('st-enum-types',
st_gir_sources = st_sources + st_private_headers + st_headers + st_enums
st_non_gir_sources = [
'st-scroll-view-fade.c',
'st-scroll-view-fade.h'
]
data_to_c = find_program(meson.source_root() + '/src/data-to-c.pl')
custom_target('scroll-view-fade-glsl',
@@ -120,7 +123,7 @@ st_cflags = [
# Currently meson requires a shared library for building girs
libst = shared_library('st-1.0',
sources: st_gir_sources,
sources: st_gir_sources + st_non_gir_sources,
c_args: st_cflags,
dependencies: [clutter_dep, gtk_dep, croco_dep, mutter_dep, m_dep],
build_rpath: mutter_typelibdir,

View File

@@ -53,12 +53,7 @@ struct _StAdjustmentPrivate
gdouble page_size;
};
static void animatable_iface_init (ClutterAnimatableInterface *iface);
G_DEFINE_TYPE_WITH_CODE (StAdjustment, st_adjustment, G_TYPE_OBJECT,
G_ADD_PRIVATE (StAdjustment)
G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_ANIMATABLE,
animatable_iface_init));
G_DEFINE_TYPE_WITH_PRIVATE (StAdjustment, st_adjustment, G_TYPE_OBJECT)
enum
{
@@ -92,11 +87,6 @@ static gboolean st_adjustment_set_page_increment (StAdjustment *adjustment,
static gboolean st_adjustment_set_page_size (StAdjustment *adjustment,
gdouble size);
static void
animatable_iface_init (ClutterAnimatableInterface *iface)
{
}
static void
st_adjustment_constructed (GObject *object)
{

View File

@@ -362,7 +362,7 @@ _st_create_shadow_pipeline (StShadow *shadow_spec,
{
ClutterBackend *backend = clutter_get_default_backend ();
CoglContext *ctx = clutter_backend_get_cogl_context (backend);
GError *error = NULL;
CoglError *error = NULL;
static CoglPipeline *shadow_pipeline_template = NULL;
@@ -398,7 +398,7 @@ _st_create_shadow_pipeline (StShadow *shadow_spec,
if (error)
{
g_warning ("Failed to allocate texture: %s", error->message);
g_error_free (error);
cogl_error_free (error);
}
g_free (pixels_out);
@@ -466,7 +466,7 @@ _st_create_shadow_pipeline_from_actor (StShadow *shadow_spec,
CoglFramebuffer *fb;
CoglContext *ctx;
CoglColor clear_color;
GError *catch_error = NULL;
CoglError *catch_error = NULL;
float x, y;
ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
@@ -480,7 +480,7 @@ _st_create_shadow_pipeline_from_actor (StShadow *shadow_spec,
if (!cogl_framebuffer_allocate (fb, &catch_error))
{
g_error_free (catch_error);
cogl_error_free (catch_error);
cogl_object_unref (offscreen);
cogl_object_unref (buffer);
return NULL;

View File

@@ -64,7 +64,7 @@ struct _StScrollBarPrivate
guint paging_source_id;
guint paging_event_no;
ClutterTransition *paging_animation;
ClutterAnimation *paging_animation;
guint vertical : 1;
};
@@ -669,11 +669,11 @@ handle_button_press_event_cb (ClutterActor *actor,
}
static void
animation_completed_cb (ClutterTransition *animation,
gboolean is_finished,
animation_completed_cb (ClutterAnimation *animation,
StScrollBarPrivate *priv)
{
g_clear_object (&priv->paging_animation);
g_object_unref (priv->paging_animation);
priv->paging_animation = NULL;
}
static gboolean
@@ -681,11 +681,14 @@ trough_paging_cb (StScrollBar *self)
{
StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (self);
gfloat handle_pos, event_pos, tx, ty;
gdouble value, new_value;
gdouble value;
gdouble page_increment;
gboolean ret;
gulong mode;
ClutterAnimation *a;
GValue v = { 0, };
ClutterTimeline *t;
if (priv->paging_event_no == 0)
{
@@ -751,7 +754,7 @@ trough_paging_cb (StScrollBar *self)
/* Scrolled far enough. */
return FALSE;
}
new_value = value + page_increment;
value += page_increment;
}
else
{
@@ -765,26 +768,27 @@ trough_paging_cb (StScrollBar *self)
/* Scrolled far enough. */
return FALSE;
}
new_value = value - page_increment;
value -= page_increment;
}
if (priv->paging_animation)
{
clutter_timeline_stop (CLUTTER_TIMELINE (priv->paging_animation));
clutter_animation_completed (priv->paging_animation);
}
/* FIXME: Creating a new transition for each scroll is probably not the best
* idea, but it's a lot less involved than extending the current animation */
priv->paging_animation = g_object_new (CLUTTER_TYPE_PROPERTY_TRANSITION,
"animatable", priv->adjustment,
"property-name", "value",
"interval", clutter_interval_new (G_TYPE_DOUBLE, value, new_value),
"duration", (guint)(PAGING_SUBSEQUENT_REPEAT_TIMEOUT * st_slow_down_factor),
"progress-mode", mode,
NULL);
g_signal_connect (priv->paging_animation, "stopped",
G_CALLBACK (animation_completed_cb), priv);
clutter_timeline_start (CLUTTER_TIMELINE (priv->paging_animation));
/* FIXME: Creating a new animation for each scroll is probably not the best
* idea, but it's a lot less involved than extenind the current animation */
a = priv->paging_animation = g_object_new (CLUTTER_TYPE_ANIMATION,
"object", priv->adjustment,
"duration", (guint)(PAGING_SUBSEQUENT_REPEAT_TIMEOUT * st_slow_down_factor),
"mode", mode,
NULL);
g_value_init (&v, G_TYPE_DOUBLE);
g_value_set_double (&v, value);
clutter_animation_bind (priv->paging_animation, "value", &v);
t = clutter_animation_get_timeline (priv->paging_animation);
g_signal_connect (a, "completed", G_CALLBACK (animation_completed_cb), priv);
clutter_timeline_start (t);
return ret;
}

View File

@@ -72,7 +72,7 @@ create_corner_material (StCornerSpec *corner)
{
ClutterBackend *backend = clutter_get_default_backend ();
CoglContext *ctx = clutter_backend_get_cogl_context (backend);
GError *error = NULL;
CoglError *error = NULL;
CoglTexture *texture;
cairo_t *cr;
cairo_surface_t *surface;
@@ -184,7 +184,7 @@ create_corner_material (StCornerSpec *corner)
if (error)
{
g_warning ("Failed to allocate texture: %s", error->message);
g_error_free (error);
cogl_error_free (error);
}
g_free (data);
@@ -1007,7 +1007,7 @@ st_theme_node_prerender_background (StThemeNode *node,
{
ClutterBackend *backend = clutter_get_default_backend ();
CoglContext *ctx = clutter_backend_get_cogl_context (backend);
GError *error = NULL;
CoglError *error = NULL;
StBorderImage *border_image;
CoglTexture *texture;
guint radius[4];
@@ -1344,7 +1344,7 @@ st_theme_node_prerender_background (StThemeNode *node,
if (error)
{
g_warning ("Failed to allocate texture: %s", error->message);
g_error_free (error);
cogl_error_free (error);
}
cairo_destroy (cr);
@@ -2288,7 +2288,7 @@ st_theme_node_prerender_shadow (StThemeNodePaintState *state)
int fb_width, fb_height;
CoglTexture *buffer;
CoglFramebuffer *offscreen = NULL;
GError *error = NULL;
CoglError *error = NULL;
ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
@@ -2351,8 +2351,11 @@ st_theme_node_prerender_shadow (StThemeNodePaintState *state)
state->box_shadow_pipeline = _st_create_shadow_pipeline (st_theme_node_get_box_shadow (node),
buffer, state->resource_scale);
}
else
{
cogl_error_free (error);
}
g_clear_error (&error);
cogl_clear_object (&offscreen);
cogl_clear_object (&buffer);
}

View File

@@ -249,7 +249,7 @@ setup_framebuffers (StThemeNodeTransition *transition,
StThemeNodeTransitionPrivate *priv = transition->priv;
CoglContext *ctx;
guint width, height;
GError *catch_error = NULL;
CoglError *catch_error = NULL;
/* template material to avoid unnecessary shader compilation */
static CoglPipeline *material_template = NULL;
@@ -277,7 +277,7 @@ setup_framebuffers (StThemeNodeTransition *transition,
priv->old_offscreen = COGL_FRAMEBUFFER (cogl_offscreen_new_with_texture (priv->old_texture));
if (!cogl_framebuffer_allocate (priv->old_offscreen, &catch_error))
{
g_error_free (catch_error);
cogl_error_free (catch_error);
cogl_clear_object (&priv->old_offscreen);
return FALSE;
}
@@ -286,7 +286,7 @@ setup_framebuffers (StThemeNodeTransition *transition,
priv->new_offscreen = COGL_FRAMEBUFFER (cogl_offscreen_new_with_texture (priv->new_texture));
if (!cogl_framebuffer_allocate (priv->new_offscreen, &catch_error))
{
g_error_free (catch_error);
cogl_error_free (catch_error);
cogl_clear_object (&priv->new_offscreen);
return FALSE;
}