Compare commits
69 Commits
3.0.1
...
goa-client
Author | SHA1 | Date | |
---|---|---|---|
a69e45b5eb | |||
a355398b0f | |||
4bfc3bafcb | |||
898b2b903d | |||
7921954a31 | |||
0e42de9149 | |||
8e4a5f1ac5 | |||
61577e176e | |||
4b008b1ada | |||
bee37b5bc4 | |||
b5ab8b6ed5 | |||
4d6bd91d16 | |||
5428db5385 | |||
6e6b1e6052 | |||
bc2b47974d | |||
2244b6ff1b | |||
fb384fc291 | |||
73cae8ce9a | |||
dcd07eb23f | |||
fa24448489 | |||
c975740f92 | |||
1e0187fa57 | |||
cbdf060bca | |||
19a8dff975 | |||
72f9f482d6 | |||
88de26138a | |||
57bd964cb3 | |||
74a39ae57c | |||
5090a4ccce | |||
ae0652d13f | |||
101a07a3d7 | |||
b012e93121 | |||
c31109800b | |||
c0dc363a3d | |||
739bb28220 | |||
aab2794e05 | |||
75c8c1bfb6 | |||
6f8bd96195 | |||
25f0d098bd | |||
56d584b7c6 | |||
20bf53add1 | |||
0d440bb0a2 | |||
8ec62ce46b | |||
79927faaec | |||
e4c7f1f3c4 | |||
68710c4647 | |||
7d7cbde1f3 | |||
bafd9c777a | |||
42a5531f15 | |||
227da25776 | |||
2028f33e38 | |||
145bf19636 | |||
d1675c44e2 | |||
6934e4db26 | |||
cae3414854 | |||
90d061edaf | |||
2e02918323 | |||
e77a1fd33b | |||
dd01c24c34 | |||
f88fbee80d | |||
fe08edbe2b | |||
d2a16bca10 | |||
a87f51487e | |||
76fce94b66 | |||
d104f9210a | |||
d0780d1622 | |||
9d5906dae3 | |||
07a0960265 | |||
72bee6d7ca |
@ -100,7 +100,7 @@ AC_SUBST([GJS_VERSION], ["$GJS_VERSION"])
|
||||
GOBJECT_INTROSPECTION_CHECK([$GOBJECT_INTROSPECTION_MIN_VERSION])
|
||||
JHBUILD_TYPELIBDIR="$INTROSPECTION_TYPELIBDIR"
|
||||
# NM is the only typelib we use that we don't jhbuild
|
||||
PKG_CHECK_EXISTS([libnm-glib >= 0.8.995],
|
||||
PKG_CHECK_EXISTS([libnm-glib >= 0.8.999],
|
||||
[NM_TYPELIBDIR=`$PKG_CONFIG --variable=libdir libnm-glib`/girepository-1.0
|
||||
if test "$INTROSPECTION_TYPELIBDIR" != "$NM_TYPELIBDIR"; then
|
||||
JHBUILD_TYPELIBDIR="$JHBUILD_TYPELIBDIR:$NM_TYPELIBDIR"
|
||||
@ -116,11 +116,10 @@ AC_CHECK_FUNCS(JS_NewGlobalObject sn_startup_sequence_get_application_id XFixesC
|
||||
CFLAGS=$saved_CFLAGS
|
||||
LIBS=$saved_LIBS
|
||||
|
||||
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 gnome-desktop-3.0 >= 2.90.0 x11)
|
||||
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.2 gnome-desktop-3.0 >= 2.90.0 x11)
|
||||
PKG_CHECK_MODULES(GDMUSER, dbus-glib-1 gtk+-3.0)
|
||||
PKG_CHECK_MODULES(TRAY, gtk+-3.0)
|
||||
PKG_CHECK_MODULES(GVC, libpulse libpulse-mainloop-glib gobject-2.0)
|
||||
PKG_CHECK_MODULES(JS_TEST, clutter-x11-1.0 gjs-1.0 gobject-introspection-1.0 gtk+-3.0)
|
||||
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 0.1.7)
|
||||
|
||||
AC_MSG_CHECKING([for bluetooth support])
|
||||
|
@ -30,26 +30,14 @@ dist_theme_DATA = \
|
||||
theme/filter-selected-ltr.svg \
|
||||
theme/filter-selected-rtl.svg \
|
||||
theme/gnome-shell.css \
|
||||
theme/mosaic-view-active.svg \
|
||||
theme/mosaic-view.svg \
|
||||
theme/move-window-on-new.svg \
|
||||
theme/panel-border.svg \
|
||||
theme/panel-button-border.svg \
|
||||
theme/panel-button-highlight-narrow.svg \
|
||||
theme/panel-button-highlight-wide.svg \
|
||||
theme/process-working.svg \
|
||||
theme/running-indicator.svg \
|
||||
theme/scroll-button-down-hover.png \
|
||||
theme/scroll-button-down.png \
|
||||
theme/scroll-button-up-hover.png \
|
||||
theme/scroll-button-up.png \
|
||||
theme/scroll-hhandle.svg \
|
||||
theme/scroll-vhandle.svg \
|
||||
theme/section-more.svg \
|
||||
theme/section-more-open.svg \
|
||||
theme/separator-white.png \
|
||||
theme/single-view-active.svg \
|
||||
theme/single-view.svg \
|
||||
theme/source-button-border.svg \
|
||||
theme/toggle-off-us.svg \
|
||||
theme/toggle-off-intl.svg \
|
||||
|
@ -1655,3 +1655,49 @@ StTooltip StLabel {
|
||||
.magnifier-zoom-region.full-screen {
|
||||
border-width: 0px;
|
||||
}
|
||||
|
||||
|
||||
/* goa message popup */
|
||||
|
||||
.goa-message-table {
|
||||
}
|
||||
|
||||
.goa-message-base {
|
||||
font-size: 9pt;
|
||||
}
|
||||
|
||||
.goa-message-from-header {
|
||||
color: #666666;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.goa-message-subject-header {
|
||||
color: #666666;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.goa-message-date-header {
|
||||
color: #666666;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.goa-message-from {
|
||||
font-weight: bold;
|
||||
min-width: 125px;
|
||||
}
|
||||
|
||||
.goa-message-hbox {
|
||||
spacing: 0.25em;
|
||||
min-width: 300px;
|
||||
}
|
||||
|
||||
.goa-message-subject {
|
||||
}
|
||||
|
||||
.goa-message-excerpt {
|
||||
color: rgba(153, 153, 153, 1.0);
|
||||
}
|
||||
|
||||
.goa-message-date {
|
||||
min-width: 80px;
|
||||
}
|
||||
|
@ -1,113 +0,0 @@
|
||||
<?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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="24"
|
||||
height="16"
|
||||
id="svg6503"
|
||||
version="1.1"
|
||||
inkscape:version="0.47pre4 r22446"
|
||||
sodipodi:docname="mosaic-view-active.svg">
|
||||
<defs
|
||||
id="defs6505">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 16 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="32 : 16 : 1"
|
||||
inkscape:persp3d-origin="16 : 10.666667 : 1"
|
||||
id="perspective6511" />
|
||||
<inkscape:perspective
|
||||
id="perspective6494"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="11.197802"
|
||||
inkscape:cx="-15.97056"
|
||||
inkscape:cy="16"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="997"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata6508">
|
||||
<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 />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(0,-16)">
|
||||
<g
|
||||
style="display:inline;fill:#cbcbcb;fill-opacity:1"
|
||||
transform="translate(-449.85476,-685.85869)"
|
||||
id="g5306">
|
||||
<rect
|
||||
style="fill:#cbcbcb;fill-opacity:1;stroke:#000000;stroke-width:0.99999970000000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.44262299999999999;stroke-dasharray:none"
|
||||
id="rect5308"
|
||||
width="11"
|
||||
height="7"
|
||||
x="450.5"
|
||||
y="710.5"
|
||||
rx="0.99999958"
|
||||
ry="1" />
|
||||
<rect
|
||||
style="fill:#cbcbcb;fill-opacity:1;stroke:#000000;stroke-width:0.99999970000000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.44262299999999999;stroke-dasharray:none;display:inline"
|
||||
id="rect5310"
|
||||
width="11"
|
||||
height="7"
|
||||
x="462.5"
|
||||
y="702.5"
|
||||
rx="0.99999958"
|
||||
ry="1" />
|
||||
<rect
|
||||
style="fill:#cbcbcb;fill-opacity:1;stroke:#000000;stroke-width:0.99999976000000002;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.44262299999999999;stroke-dasharray:none;display:inline"
|
||||
id="rect5312"
|
||||
width="11"
|
||||
height="7"
|
||||
x="450.5"
|
||||
y="702.5"
|
||||
rx="0.99999958"
|
||||
ry="1" />
|
||||
<rect
|
||||
style="fill:#cbcbcb;fill-opacity:1;stroke:#000000;stroke-width:0.99999970000000005;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.44262299999999999;stroke-dasharray:none;display:inline"
|
||||
id="rect5314"
|
||||
width="11"
|
||||
height="7"
|
||||
x="462.5"
|
||||
y="710.5"
|
||||
rx="0.99999958"
|
||||
ry="1" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 3.7 KiB |
@ -1,113 +0,0 @@
|
||||
<?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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="24"
|
||||
height="16"
|
||||
id="svg6503"
|
||||
version="1.1"
|
||||
inkscape:version="0.47pre4 r22446"
|
||||
sodipodi:docname="New document 19">
|
||||
<defs
|
||||
id="defs6505">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 16 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="32 : 16 : 1"
|
||||
inkscape:persp3d-origin="16 : 10.666667 : 1"
|
||||
id="perspective6511" />
|
||||
<inkscape:perspective
|
||||
id="perspective6494"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="11.197802"
|
||||
inkscape:cx="16"
|
||||
inkscape:cy="16"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="997"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata6508">
|
||||
<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
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(0,-16)">
|
||||
<g
|
||||
style="display:inline"
|
||||
transform="translate(-449.85476,-685.85869)"
|
||||
id="g5306">
|
||||
<rect
|
||||
style="fill:#666666;fill-opacity:1;stroke:#000000;stroke-width:0.9999997;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.442623;stroke-dasharray:none"
|
||||
id="rect5308"
|
||||
width="11"
|
||||
height="7"
|
||||
x="450.5"
|
||||
y="710.5"
|
||||
rx="0.99999958"
|
||||
ry="1" />
|
||||
<rect
|
||||
style="fill:#666666;fill-opacity:1;stroke:#000000;stroke-width:0.9999997;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.442623;stroke-dasharray:none;display:inline"
|
||||
id="rect5310"
|
||||
width="11"
|
||||
height="7"
|
||||
x="462.5"
|
||||
y="702.5"
|
||||
rx="0.99999958"
|
||||
ry="1" />
|
||||
<rect
|
||||
style="fill:#666666;fill-opacity:1;stroke:#000000;stroke-width:0.99999976;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.442623;stroke-dasharray:none;display:inline"
|
||||
id="rect5312"
|
||||
width="11"
|
||||
height="7"
|
||||
x="450.5"
|
||||
y="702.5"
|
||||
rx="0.99999958"
|
||||
ry="1" />
|
||||
<rect
|
||||
style="fill:#666666;fill-opacity:1;stroke:#000000;stroke-width:0.9999997;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.442623;stroke-dasharray:none;display:inline"
|
||||
id="rect5314"
|
||||
width="11"
|
||||
height="7"
|
||||
x="462.5"
|
||||
y="710.5"
|
||||
rx="0.99999958"
|
||||
ry="1" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 3.6 KiB |
@ -1,89 +0,0 @@
|
||||
<?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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="98"
|
||||
height="98"
|
||||
id="svg6375"
|
||||
version="1.1"
|
||||
inkscape:version="0.47 r22583"
|
||||
sodipodi:docname="add-workspace.svg">
|
||||
<defs
|
||||
id="defs6377">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 16 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="32 : 16 : 1"
|
||||
inkscape:persp3d-origin="16 : 10.666667 : 1"
|
||||
id="perspective6383" />
|
||||
<inkscape:perspective
|
||||
id="perspective6366"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="3.9590209"
|
||||
inkscape:cx="56.650687"
|
||||
inkscape:cy="20.635343"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="997"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata6380">
|
||||
<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
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(0,66)">
|
||||
<g
|
||||
id="g2824"
|
||||
transform="matrix(11.568551,0,0,11.698271,-78.828159,-304.81518)">
|
||||
<path
|
||||
style="fill:none;stroke:#666666;stroke-width:1.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 11.07363,21.36834 0,6.43903"
|
||||
id="path5322" />
|
||||
<path
|
||||
style="fill:none;stroke:#666666;stroke-width:1.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||
d="m 14.29314,24.58786 -6.43902,0"
|
||||
id="path5324" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:0.98823529"
|
||||
d="m 48.239516,97.908047 c -0.41677,-0.05102 -1.269253,-0.222408 -1.894408,-0.380859 -4.088493,-1.036262 -7.520781,-4.753234 -8.330163,-9.021094 -0.154947,-0.817026 -0.257819,-6.68112 -0.257819,-14.696556 l 0,-13.337088 -13.829177,-0.08909 C 10.802042,60.298796 10.026884,60.268266 8.6851548,59.783022 3.6288503,57.954375 0.62673331,53.828648 0.62673331,48.708554 c 0,-5.625522 4.25936019,-10.425065 9.97721469,-11.242548 0.987903,-0.141242 7.368912,-0.254994 14.460646,-0.257791 l 12.692532,-0.005 0,-13.586668 c 0,-14.6441583 0.03287,-15.0698926 1.364686,-17.6753047 2.185477,-4.2754229 6.938193,-6.75739913 11.687647,-6.10355607 3.382776,0.46569661 6.737962,2.72496967 8.414081,5.66577137 1.480816,2.5981315 1.519067,3.0522448 1.519067,18.0333334 l 0,13.666424 12.692533,0.005 c 7.091733,0.0028 13.472742,0.116549 14.460646,0.257791 6.395303,0.914337 10.804785,6.623716 9.941157,12.871766 -0.698243,5.051565 -4.792685,9.104635 -9.941157,9.840713 -0.987904,0.141242 -7.368913,0.254995 -14.460646,0.257791 l -12.692533,0.005 0,13.801945 c 0,13.031417 -0.02798,13.895893 -0.501177,15.484801 -1.526902,5.127058 -6.919246,8.802262 -12.001914,8.18002 z"
|
||||
id="path2828"
|
||||
transform="translate(0,-66)" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 225 B |
Before Width: | Height: | Size: 225 B |
Before Width: | Height: | Size: 211 B |
Before Width: | Height: | Size: 211 B |
@ -1,87 +0,0 @@
|
||||
<?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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="5.8600588"
|
||||
height="9"
|
||||
id="svg3647"
|
||||
version="1.1"
|
||||
inkscape:version="0.47 r22583"
|
||||
sodipodi:docname="section-more.svg">
|
||||
<defs
|
||||
id="defs3649">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 526.18109 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||
id="perspective3655" />
|
||||
<inkscape:perspective
|
||||
id="perspective3603"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="82.777778"
|
||||
inkscape:cx="2.9300294"
|
||||
inkscape:cy="5.466443"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="997"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata3652">
|
||||
<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(-262.78425,-490.71933)">
|
||||
<path
|
||||
transform="matrix(0,-0.98149546,0.71467449,0,25.404986,578.15569)"
|
||||
d="M 88.830127,340 80.169873,340 84.5,332.5 88.830127,340 z"
|
||||
inkscape:randomized="0"
|
||||
inkscape:rounded="0"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:arg2="1.5707963"
|
||||
sodipodi:arg1="0.52359878"
|
||||
sodipodi:r2="2.5"
|
||||
sodipodi:r1="5"
|
||||
sodipodi:cy="337.5"
|
||||
sodipodi:cx="84.5"
|
||||
sodipodi:sides="3"
|
||||
id="path5497-5"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.59699643;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||
sodipodi:type="star" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.8 KiB |
@ -1,87 +0,0 @@
|
||||
<?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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="5.8600588"
|
||||
height="9"
|
||||
id="svg3647"
|
||||
version="1.1"
|
||||
inkscape:version="0.46+devel"
|
||||
sodipodi:docname="New document 6">
|
||||
<defs
|
||||
id="defs3649">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 526.18109 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||
id="perspective3655" />
|
||||
<inkscape:perspective
|
||||
id="perspective3603"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.35"
|
||||
inkscape:cx="112.21575"
|
||||
inkscape:cy="-32.642856"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="609"
|
||||
inkscape:window-height="501"
|
||||
inkscape:window-x="164"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="0" />
|
||||
<metadata
|
||||
id="metadata3652">
|
||||
<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(-262.78425,-490.71933)">
|
||||
<path
|
||||
transform="matrix(0,0.98149546,-0.71467449,0,506.02358,412.28296)"
|
||||
d="M 88.830127,340 80.169873,340 84.5,332.5 88.830127,340 z"
|
||||
inkscape:randomized="0"
|
||||
inkscape:rounded="0"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:arg2="1.5707963"
|
||||
sodipodi:arg1="0.52359878"
|
||||
sodipodi:r2="2.5"
|
||||
sodipodi:r1="5"
|
||||
sodipodi:cy="337.5"
|
||||
sodipodi:cx="84.5"
|
||||
sodipodi:sides="3"
|
||||
id="path5497-5"
|
||||
style="fill:#5f5f5f;fill-opacity:1;stroke:#5f5f5f;stroke-width:0.59699643;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||
sodipodi:type="star" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 531 B |
@ -1,81 +0,0 @@
|
||||
<?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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="24"
|
||||
height="16"
|
||||
id="svg6446"
|
||||
version="1.1"
|
||||
inkscape:version="0.47pre4 r22446"
|
||||
sodipodi:docname="single-view-active.svg">
|
||||
<defs
|
||||
id="defs6448">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 16 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="32 : 16 : 1"
|
||||
inkscape:persp3d-origin="16 : 10.666667 : 1"
|
||||
id="perspective6454" />
|
||||
<inkscape:perspective
|
||||
id="perspective6441"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="11.197802"
|
||||
inkscape:cx="0.014720032"
|
||||
inkscape:cy="16"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="997"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata6451">
|
||||
<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 />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(0,-17)">
|
||||
<rect
|
||||
ry="0.5"
|
||||
rx="0.49999979"
|
||||
y="17.483809"
|
||||
x="0.53483802"
|
||||
height="15"
|
||||
width="23"
|
||||
id="rect5304"
|
||||
style="fill:#cccccc;fill-opacity:1;stroke:#cccccc;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,81 +0,0 @@
|
||||
<?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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="24"
|
||||
height="16"
|
||||
id="svg6446"
|
||||
version="1.1"
|
||||
inkscape:version="0.47pre4 r22446"
|
||||
sodipodi:docname="single-view.svg">
|
||||
<defs
|
||||
id="defs6448">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 16 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="32 : 16 : 1"
|
||||
inkscape:persp3d-origin="16 : 10.666667 : 1"
|
||||
id="perspective6454" />
|
||||
<inkscape:perspective
|
||||
id="perspective6441"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="11.197802"
|
||||
inkscape:cx="0.014720032"
|
||||
inkscape:cy="16"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="997"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata6451">
|
||||
<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 />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(0,-17)">
|
||||
<rect
|
||||
ry="0.5"
|
||||
rx="0.49999979"
|
||||
y="17.483809"
|
||||
x="0.53483802"
|
||||
height="15"
|
||||
width="23"
|
||||
id="rect5304"
|
||||
style="fill:#626262;fill-opacity:1;stroke:#cccccc;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.4 KiB |
@ -26,6 +26,7 @@ nobase_dist_js_DATA = \
|
||||
ui/endSessionDialog.js \
|
||||
ui/environment.js \
|
||||
ui/extensionSystem.js \
|
||||
ui/goaClient.js \
|
||||
ui/iconGrid.js \
|
||||
ui/lightbox.js \
|
||||
ui/link.js \
|
||||
|
@ -77,9 +77,9 @@ HistoryManager.prototype = {
|
||||
this._history[this._history.length - 1] != input) {
|
||||
|
||||
this._history.push(input);
|
||||
this._historyIndex = this._history.length;
|
||||
this._save();
|
||||
}
|
||||
}
|
||||
this._historyIndex = this._history.length;
|
||||
},
|
||||
|
||||
_onEntryKeyPress: function(entry, event) {
|
||||
|
@ -7,9 +7,6 @@ const Shell = imports.gi.Shell;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
/* http://daringfireball.net/2010/07/improved_regex_for_matching_urls */
|
||||
const _urlRegexp = new RegExp('\\b(([a-z][\\w-]+:(/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)([^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:\'\\".,<>?«»“”‘’]))', 'gi');
|
||||
|
||||
|
@ -87,7 +87,7 @@ AltTabPopup.prototype = {
|
||||
let [childMinHeight, childNaturalHeight] = this._appSwitcher.actor.get_preferred_height(primary.width - hPadding);
|
||||
let [childMinWidth, childNaturalWidth] = this._appSwitcher.actor.get_preferred_width(childNaturalHeight);
|
||||
childBox.x1 = Math.max(primary.x + leftPadding, primary.x + Math.floor((primary.width - childNaturalWidth) / 2));
|
||||
childBox.x2 = Math.min(primary.x + primary.width - hPadding, childBox.x1 + childNaturalWidth);
|
||||
childBox.x2 = Math.min(primary.x + primary.width - rightPadding, childBox.x1 + childNaturalWidth);
|
||||
childBox.y1 = primary.y + Math.floor((primary.height - childNaturalHeight) / 2);
|
||||
childBox.y2 = childBox.y1 + childNaturalHeight;
|
||||
this._appSwitcher.actor.allocate(childBox, flags);
|
||||
@ -145,6 +145,12 @@ AltTabPopup.prototype = {
|
||||
|
||||
this._appIcons = this._appSwitcher.icons;
|
||||
|
||||
// Need to force an allocation so we can figure out whether we
|
||||
// need to scroll when selecting
|
||||
this.actor.opacity = 0;
|
||||
this.actor.show();
|
||||
this.actor.get_allocation_box();
|
||||
|
||||
// Make the initial selection
|
||||
if (switch_group) {
|
||||
if (backward) {
|
||||
@ -174,8 +180,6 @@ AltTabPopup.prototype = {
|
||||
return false;
|
||||
}
|
||||
|
||||
this.actor.opacity = 0;
|
||||
this.actor.show();
|
||||
Tweener.addTween(this.actor,
|
||||
{ opacity: 255,
|
||||
time: POPUP_FADE_TIME,
|
||||
@ -583,7 +587,7 @@ SwitcherList.prototype = {
|
||||
this._rightArrow.opacity = this._rightGradient.opacity;
|
||||
},
|
||||
|
||||
addItem : function(item) {
|
||||
addItem : function(item, label) {
|
||||
let bbox = new St.Button({ style_class: 'item-box',
|
||||
reactive: true });
|
||||
|
||||
@ -594,6 +598,8 @@ SwitcherList.prototype = {
|
||||
bbox.connect('clicked', Lang.bind(this, function() { this._onItemClicked(n); }));
|
||||
bbox.connect('enter-event', Lang.bind(this, function() { this._onItemEnter(n); }));
|
||||
|
||||
bbox.label_actor = label;
|
||||
|
||||
this._items.push(bbox);
|
||||
},
|
||||
|
||||
@ -979,7 +985,7 @@ AppSwitcher.prototype = {
|
||||
|
||||
_addIcon : function(appIcon) {
|
||||
this.icons.push(appIcon);
|
||||
this.addItem(appIcon.actor);
|
||||
this.addItem(appIcon.actor, appIcon.label);
|
||||
|
||||
let n = this._arrows.length;
|
||||
let arrow = new St.DrawingArea({ style_class: 'switcher-arrow' });
|
||||
@ -1049,9 +1055,12 @@ ThumbnailList.prototype = {
|
||||
this._labels.push(bin);
|
||||
bin.add_actor(name);
|
||||
box.add_actor(bin);
|
||||
|
||||
this.addItem(box, name);
|
||||
} else {
|
||||
this.addItem(box, null);
|
||||
}
|
||||
|
||||
this.addItem(box);
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -9,8 +9,6 @@ const Signals = imports.signals;
|
||||
const Meta = imports.gi.Meta;
|
||||
const St = imports.gi.St;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const AppFavorites = imports.ui.appFavorites;
|
||||
const DND = imports.ui.dnd;
|
||||
@ -126,7 +124,7 @@ AlphabeticalView.prototype = {
|
||||
if (currentTimeMillis - startTimeMillis > MAX_APPLICATION_WORK_MILLIS)
|
||||
break;
|
||||
}
|
||||
this._pendingAppIds.splice(0, i);
|
||||
this._pendingAppIds.splice(0, i + 1);
|
||||
if (this._pendingAppIds.length > 0) {
|
||||
return true;
|
||||
} else {
|
||||
@ -434,6 +432,8 @@ AppWellIcon.prototype = {
|
||||
this.icon = new AppIcon(app, iconParams);
|
||||
this.actor.set_child(this.icon.actor);
|
||||
|
||||
this.actor.label_actor = this.icon.label;
|
||||
|
||||
this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress));
|
||||
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
|
||||
this.actor.connect('popup-menu', Lang.bind(this, this._onKeyboardPopupMenu));
|
||||
|
@ -3,8 +3,6 @@
|
||||
const Shell = imports.gi.Shell;
|
||||
const Lang = imports.lang;
|
||||
const Signals = imports.signals;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
|
||||
|
@ -8,9 +8,6 @@ const St = imports.gi.St;
|
||||
const Signals = imports.signals;
|
||||
const Pango = imports.gi.Pango;
|
||||
const Gettext_gtk30 = imports.gettext.domain('gtk30');
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
const C_ = Gettext.pgettext;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Shell = imports.gi.Shell;
|
||||
|
||||
|
@ -323,6 +323,6 @@ CtrlAltTabSwitcher.prototype = {
|
||||
let text = new St.Label({ text: item.name });
|
||||
box.add(text, { x_fill: false });
|
||||
|
||||
this.addItem(box);
|
||||
this.addItem(box, text);
|
||||
}
|
||||
};
|
||||
|
@ -6,8 +6,6 @@ const Lang = imports.lang;
|
||||
const Meta = imports.gi.Meta;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const AppDisplay = imports.ui.appDisplay;
|
||||
const AppFavorites = imports.ui.appFavorites;
|
||||
|
@ -8,8 +8,6 @@ const Cairo = imports.cairo;
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Util = imports.misc.util;
|
||||
const Main = imports.ui.main;
|
||||
|
@ -1,8 +1,5 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const DocInfo = imports.misc.docInfo;
|
||||
const Params = imports.misc.params;
|
||||
const Search = imports.ui.search;
|
||||
|
@ -22,9 +22,6 @@ const DBus = imports.dbus;
|
||||
const Lang = imports.lang;
|
||||
const Signals = imports.signals;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gdm = imports.gi.Gdm;
|
||||
const GLib = imports.gi.GLib;
|
||||
|
@ -1,14 +1,22 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
imports.gi.versions.Clutter = '1.0';
|
||||
imports.gi.versions.Gio = '2.0';
|
||||
imports.gi.versions.Gdk = '3.0';
|
||||
imports.gi.versions.GdkPixbuf = '2.0';
|
||||
imports.gi.versions.Gtk = '3.0';
|
||||
|
||||
const Clutter = imports.gi.Clutter;;
|
||||
const Gettext = imports.gettext;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Gettext_gtk30 = imports.gettext.domain('gtk30');
|
||||
|
||||
const Tweener = imports.ui.tweener;
|
||||
// We can't import shell JS modules yet, because they may have
|
||||
// variable initializations, etc, that depend on init() already having
|
||||
// been run.
|
||||
|
||||
const Format = imports.misc.format;
|
||||
|
||||
// "monkey patch" in some varargs ClutterContainer methods; we need
|
||||
// to do this per-container class since there is no representation
|
||||
@ -61,26 +69,20 @@ function _blockMethod(method, replacement, reason) {
|
||||
}
|
||||
|
||||
function init() {
|
||||
Tweener.init();
|
||||
String.prototype.format = Format.format;
|
||||
// Add some bindings to the global JS namespace; (gjs keeps the web
|
||||
// browser convention of having that namespace be called 'window'.)
|
||||
window.global = Shell.Global.get();
|
||||
|
||||
// Work around https://bugzilla.mozilla.org/show_bug.cgi?id=508783
|
||||
Date.prototype.toLocaleFormat = function(format) {
|
||||
return Shell.util_format_date(format, this.getTime());
|
||||
};
|
||||
window._ = Gettext.gettext;
|
||||
window.C_ = Gettext.pgettext;
|
||||
window.ngettext = Gettext.ngettext;
|
||||
|
||||
// Set the default direction for St widgets (this needs to be done before any use of St)
|
||||
if (Gettext_gtk30.gettext('default:LTR') == 'default:RTL') {
|
||||
if (Gtk.Widget.get_default_direction() == Gtk.TextDirection.RTL) {
|
||||
St.Widget.set_default_direction(St.TextDirection.RTL);
|
||||
}
|
||||
|
||||
let slowdownEnv = GLib.getenv('GNOME_SHELL_SLOWDOWN_FACTOR');
|
||||
if (slowdownEnv) {
|
||||
let factor = parseFloat(slowdownEnv);
|
||||
if (!isNaN(factor) && factor > 0.0)
|
||||
St.set_slow_down_factor(factor);
|
||||
}
|
||||
|
||||
// Miscellaneous monkeypatching
|
||||
_patchContainerClass(St.BoxLayout);
|
||||
_patchContainerClass(St.Table);
|
||||
|
||||
@ -88,8 +90,14 @@ function init() {
|
||||
return St.describe_actor(this);
|
||||
};
|
||||
|
||||
if (window.global === undefined) // test environment
|
||||
return;
|
||||
let origToString = Object.prototype.toString;
|
||||
Object.prototype.toString = function() {
|
||||
let base = origToString.call(this);
|
||||
if ('actor' in this && this.actor instanceof Clutter.Actor)
|
||||
return base.replace(/\]$/, ' delegate for ' + this.actor.toString().substring(1));
|
||||
else
|
||||
return base;
|
||||
};
|
||||
|
||||
_blockMethod('Clutter.Event.get_state', 'Shell.get_event_state',
|
||||
'gjs\'s handling of Clutter.ModifierType is broken. See bug 597292.');
|
||||
@ -101,4 +109,23 @@ function init() {
|
||||
// Shell.Global.prototype itself is read-only.
|
||||
global.set_property_mutable('imports.gi.Shell.Global.prototype', 'set_property_mutable', true);
|
||||
Shell.Global.prototype.set_property_mutable = undefined;
|
||||
|
||||
// Work around https://bugzilla.mozilla.org/show_bug.cgi?id=508783
|
||||
Date.prototype.toLocaleFormat = function(format) {
|
||||
return Shell.util_format_date(format, this.getTime());
|
||||
};
|
||||
|
||||
let slowdownEnv = GLib.getenv('GNOME_SHELL_SLOWDOWN_FACTOR');
|
||||
if (slowdownEnv) {
|
||||
let factor = parseFloat(slowdownEnv);
|
||||
if (!isNaN(factor) && factor > 0.0)
|
||||
St.set_slow_down_factor(factor);
|
||||
}
|
||||
|
||||
// OK, now things are initialized enough that we can import shell JS
|
||||
const Format = imports.misc.format;
|
||||
const Tweener = imports.ui.tweener;
|
||||
|
||||
Tweener.init();
|
||||
String.prototype.format = Format.format;
|
||||
}
|
||||
|
500
js/ui/goaClient.js
Normal file
@ -0,0 +1,500 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const GLib = imports.gi.GLib;
|
||||
const Gio = imports.gi.Gio;
|
||||
const Goa = imports.gi.Goa;
|
||||
const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Signals = imports.signals;
|
||||
const St = imports.gi.St;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
const C_ = Gettext.pgettext;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Pango = imports.gi.Pango;
|
||||
|
||||
const History = imports.misc.history;
|
||||
const Main = imports.ui.main;
|
||||
const MessageTray = imports.ui.messageTray;
|
||||
|
||||
// ----------------------------------------------------------------------------------------------------
|
||||
|
||||
function Client() {
|
||||
this._init();
|
||||
}
|
||||
|
||||
Client.prototype = {
|
||||
_init : function() {
|
||||
this._client = null;
|
||||
|
||||
this._accountIdToMailMonitor = {}
|
||||
this._mailSource = null;
|
||||
|
||||
// TODO: need to call refreshAllMonitors() when network-connectivity changes
|
||||
|
||||
Goa.Client.new(null, /* cancellable */
|
||||
Lang.bind(this, this._onClientConstructed));
|
||||
},
|
||||
|
||||
_onClientConstructed : function(object, asyncRes) {
|
||||
this._client = object.new_finish(asyncRes);
|
||||
this._updateAccounts();
|
||||
this._client.connect('account-added', Lang.bind(this, this._updateAccounts));
|
||||
this._client.connect('account-removed', Lang.bind(this, this._updateAccounts));
|
||||
this._client.connect('account-changed', Lang.bind(this, this._updateAccounts));
|
||||
},
|
||||
|
||||
_updateAccounts : function () {
|
||||
|
||||
let objects = this._client.get_accounts();
|
||||
let mailIds = {};
|
||||
|
||||
// Add monitors for accounts that now exist
|
||||
for (let n = 0; n < objects.length; n++) {
|
||||
let object = objects[n];
|
||||
let id = object.account.id;
|
||||
|
||||
if (object.mail) {
|
||||
mailIds[id] = true;
|
||||
if (!(id in this._accountIdToMailMonitor)) {
|
||||
let monitor = new MailMonitor(this, object);
|
||||
this._accountIdToMailMonitor[id] = monitor;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Nuke monitors for accounts that are now non-existant
|
||||
let monitorsToRemove = []
|
||||
for (let existingMonitorId in this._accountIdToMailMonitor) {
|
||||
if (!(existingMonitorId in mailIds)) {
|
||||
monitorsToRemove.push(existingMonitorId);
|
||||
}
|
||||
}
|
||||
for (let n = 0; n < monitorsToRemove.length; n++) {
|
||||
let id = monitorsToRemove[n];
|
||||
let monitor = this._accountIdToMailMonitor[id];
|
||||
delete this._accountIdToMailMonitor[id]
|
||||
monitor.destroy();
|
||||
}
|
||||
},
|
||||
|
||||
_ensureMailSource: function() {
|
||||
if (!this._mailSource) {
|
||||
this._mailSource = new MailSource(this);
|
||||
this._mailSource.connect('destroy', Lang.bind(this,
|
||||
function () {
|
||||
this._mailSource = null;
|
||||
}));
|
||||
Main.messageTray.add(this._mailSource);
|
||||
}
|
||||
},
|
||||
|
||||
addPendingMessage: function(message) {
|
||||
this._ensureMailSource();
|
||||
this._mailSource.addMessage(message);
|
||||
},
|
||||
|
||||
refreshAllMonitors: function() {
|
||||
log('Refreshing all mail monitors');
|
||||
for (let id in this._accountIdToMailMonitor) {
|
||||
let monitor = this._accountIdToMailMonitor[id];
|
||||
monitor.refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------------------------
|
||||
|
||||
function Message(uid, from, subject, excerpt, uri, can_be_marked_as_spam, can_be_starred) {
|
||||
this._init(uid, from, subject, excerpt, uri, can_be_marked_as_spam, can_be_starred);
|
||||
}
|
||||
|
||||
Message.prototype = {
|
||||
_init: function(uid, from, subject, excerpt, uri, can_be_marked_as_spam, can_be_starred) {
|
||||
this.uid = uid;
|
||||
this.from = from;
|
||||
this.subject = subject;
|
||||
this.excerpt = excerpt;
|
||||
this.uri = uri;
|
||||
this.can_be_marked_as_spam = can_be_marked_as_spam;
|
||||
this.can_be_starred = can_be_starred;
|
||||
this.receivedAt = new Date();
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------------------------
|
||||
|
||||
function MailMonitor(client, accountObject) {
|
||||
this._init(client, accountObject);
|
||||
}
|
||||
|
||||
MailMonitor.prototype = {
|
||||
_init : function(client, accountObject) {
|
||||
this._client = client;
|
||||
this._accountObject = accountObject;
|
||||
this._account = this._accountObject.get_account();
|
||||
this._mail = this._accountObject.get_mail();
|
||||
|
||||
// Create the remote monitor object
|
||||
this._proxy = null;
|
||||
this._cancellable = new Gio.Cancellable();
|
||||
this._mail.call_create_monitor(this._cancellable, Lang.bind(this, this._onMonitorCreated));
|
||||
},
|
||||
|
||||
destroy : function() {
|
||||
this._cancellable.cancel();
|
||||
if (this._proxy) {
|
||||
// We don't really care if this fails or not
|
||||
this._proxy.call_close(null, Lang.bind(this, function() { }));
|
||||
this._proxy.disconnect(this._messageReceivedId);
|
||||
this._proxy = null;
|
||||
}
|
||||
},
|
||||
|
||||
refresh : function() {
|
||||
if (this._proxy) {
|
||||
// We don't really care if this fails or not
|
||||
log('Refreshing mail monitor for account ' + this._account.name);
|
||||
this._proxy.call_refresh(null, Lang.bind(this, function() { }));
|
||||
}
|
||||
},
|
||||
|
||||
_onMonitorCreated : function(mail, asyncRes) {
|
||||
// TODO: a (gboolean, object_path) tuple is returned here
|
||||
// See https://bugzilla.gnome.org/show_bug.cgi?id=649657
|
||||
let ret = mail.call_create_monitor_finish(asyncRes);
|
||||
let object_path = ret[1];
|
||||
Goa.MailMonitorProxy.new_for_bus(Gio.BusType.SESSION,
|
||||
Gio.DBusProxyFlags.NONE,
|
||||
'org.gnome.OnlineAccounts',
|
||||
object_path,
|
||||
null, /* cancellable */
|
||||
Lang.bind(this, this._onMonitorProxyConstructed));
|
||||
},
|
||||
|
||||
_onMonitorProxyConstructed : function(monitor, asyncRes) {
|
||||
this._proxy = monitor.new_for_bus_finish(asyncRes);
|
||||
|
||||
// Now listen for changes on the mail monitor proxy
|
||||
this._messageReceivedId = this._proxy.connect('message-received',
|
||||
Lang.bind(this, this._onMessageReceived));
|
||||
},
|
||||
|
||||
_onMessageReceived : function(monitor, uid, from, subject, excerpt, uri, can_be_marked_as_spam, can_be_starred) {
|
||||
let message = new Message(uid, from, subject, excerpt, uri, can_be_marked_as_spam, can_be_starred);
|
||||
if (!Main.messageTray.getBusy()) {
|
||||
let source = new Source(this._client, message);
|
||||
let notification = new Notification(source, this._client, this, message);
|
||||
// If the user is not marked as busy, present the notification to the user
|
||||
Main.messageTray.add(source);
|
||||
source.notify(notification);
|
||||
} else {
|
||||
// ... otherwise, if the user is busy, just add it to the MailSource's list
|
||||
// of pending messages
|
||||
this._client.addPendingMessage(message);
|
||||
}
|
||||
},
|
||||
|
||||
MessageAddStar: function (message) {
|
||||
this._proxy.call_add_star(message.uid,
|
||||
null, /* cancellable */
|
||||
Lang.bind(this,
|
||||
function(object, asyncRes) {
|
||||
this._proxy.call_add_star_finish(asyncRes);
|
||||
}));
|
||||
},
|
||||
|
||||
MessageMarkAsSpam: function (message) {
|
||||
this._proxy.call_mark_as_spam(message.uid,
|
||||
null, /* cancellable */
|
||||
Lang.bind(this,
|
||||
function(object, asyncRes) {
|
||||
this._proxy.call_add_star_finish(asyncRes);
|
||||
}));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------------------------
|
||||
|
||||
function Source(client, message) {
|
||||
this._init(client, message);
|
||||
}
|
||||
|
||||
Source.prototype = {
|
||||
__proto__: MessageTray.Source.prototype,
|
||||
|
||||
_init : function(client, message) {
|
||||
this._client = client;
|
||||
this._message = message;
|
||||
|
||||
// Init super class and add ourselves to the message tray
|
||||
MessageTray.Source.prototype._init.call(this, 'Message from ' + _stripEmailAddress(this._message.from));
|
||||
this.setTransient(true);
|
||||
this.isChat = true;
|
||||
this._setSummaryIcon(this.createNotificationIcon());
|
||||
},
|
||||
|
||||
createNotificationIcon : function() {
|
||||
// TODO: use account icon
|
||||
let icon = new St.Icon({ icon_type: St.IconType.FULLCOLOR,
|
||||
icon_size: this.ICON_SIZE,
|
||||
icon_name: 'mail-send'});
|
||||
return icon;
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------------------------
|
||||
|
||||
function _stripEmailAddress(name_and_addr) {
|
||||
let bracketStartPos = name_and_addr.indexOf(' <');
|
||||
if (bracketStartPos == -1) {
|
||||
return name_and_addr;
|
||||
} else {
|
||||
return name_and_addr.slice(0, bracketStartPos);
|
||||
}
|
||||
}
|
||||
|
||||
function Notification(source, client, monitor, message) {
|
||||
this._init(source, client, monitor, message);
|
||||
}
|
||||
|
||||
Notification.prototype = {
|
||||
__proto__: MessageTray.Notification.prototype,
|
||||
|
||||
_init : function(source, client, monitor, message) {
|
||||
this._client = client;
|
||||
this._monitor = monitor
|
||||
this._message = message;
|
||||
this._ignore = false;
|
||||
this._alreadyExpanded = false;
|
||||
|
||||
this._strippedFrom = _stripEmailAddress(this._message.from);
|
||||
|
||||
let title = this._strippedFrom;
|
||||
let banner = this._message.subject + ' \u2014 ' + this._message.excerpt; // — U+2014 EM DASH
|
||||
|
||||
// Init super class
|
||||
MessageTray.Notification.prototype._init.call(this, source, title, banner);
|
||||
|
||||
// Change the contents once expanded
|
||||
this.connect('expanded', Lang.bind (this, this._onExpanded));
|
||||
|
||||
this.update(title, banner);
|
||||
this.setUrgency(MessageTray.Urgency.NORMAL);
|
||||
this.setTransient(true);
|
||||
|
||||
this.addButton('ignore', 'Ignore');
|
||||
if (message.can_be_starred)
|
||||
this.addButton('star', 'Star');
|
||||
if (message.can_be_marked_as_spam)
|
||||
this.addButton('spam', 'Junk');
|
||||
if (this._message.uri.length > 0) {
|
||||
this.addButton('open', 'Open');
|
||||
}
|
||||
this.connect('action-invoked', Lang.bind(this,
|
||||
function(notification, id) {
|
||||
if (id == 'ignore') {
|
||||
this._actionIgnore();
|
||||
} else if (id == 'star') {
|
||||
this._actionStar();
|
||||
} else if (id == 'spam') {
|
||||
this._actionSpam();
|
||||
} else if (id == 'open') {
|
||||
this._actionOpen();
|
||||
}
|
||||
}));
|
||||
this.connect('clicked', Lang.bind(this,
|
||||
function() {
|
||||
if (this._message.uri.length > 0) {
|
||||
this._actionOpen();
|
||||
}
|
||||
}));
|
||||
// Hmm, should be ::done-displaying instead?
|
||||
this.connect('destroy', Lang.bind(this, this._onDestroyed));
|
||||
},
|
||||
|
||||
_onExpanded : function() {
|
||||
if (this._alreadyExpanded)
|
||||
return;
|
||||
this._alreadyExpanded = true;
|
||||
let escapedExcerpt = GLib.markup_escape_text(this._message.excerpt, -1);
|
||||
let bannerMarkup = '<b>Subject:</b> ' + this._message.subject + '\n';
|
||||
// TODO: if available, insert other headers such as Cc
|
||||
bannerMarkup += '\n' + escapedExcerpt;
|
||||
this.update(this._strippedFrom, bannerMarkup, {bannerMarkup: true});
|
||||
},
|
||||
|
||||
_onDestroyed : function(reason) {
|
||||
// If not ignoring the message, push it onto the Mail source
|
||||
if (!this._ignore) {
|
||||
this._client.addPendingMessage(this._message);
|
||||
}
|
||||
},
|
||||
|
||||
_actionIgnore : function() {
|
||||
this._ignore = true;
|
||||
},
|
||||
|
||||
_actionStar : function() {
|
||||
this._ignore = true;
|
||||
this._monitor.MessageAddStar(this._message);
|
||||
},
|
||||
|
||||
_actionSpam : function() {
|
||||
this._ignore = true;
|
||||
this._monitor.MessageMarkAsSpam(this._message);
|
||||
},
|
||||
|
||||
_actionOpen : function() {
|
||||
this._ignore = true;
|
||||
Gio.app_info_launch_default_for_uri(this._message.uri,
|
||||
global.create_app_launch_context());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------------------------
|
||||
|
||||
function _sameDay(dateA, dateB) {
|
||||
return (dateA.getDate() == dateB.getDate() &&
|
||||
dateA.getMonth() == dateB.getMonth() &&
|
||||
dateA.getYear() == dateB.getYear());
|
||||
}
|
||||
|
||||
function _sameYear(dateA, dateB) {
|
||||
return (dateA.getYear() == dateB.getYear());
|
||||
}
|
||||
|
||||
function _formatRelativeDate(date) {
|
||||
let ret = ''
|
||||
let now = new Date();
|
||||
if (_sameDay(date, now)) {
|
||||
ret = date.toLocaleFormat("%l:%M %p");
|
||||
} else {
|
||||
if (_sameYear(date, now)) {
|
||||
ret = date.toLocaleFormat("%B %e");
|
||||
} else {
|
||||
ret = date.toLocaleFormat("%B %e, %Y");
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
function _addMessageToTable(table, message) {
|
||||
let formattedExcerpt = message.excerpt.replace(/\r/g, '').replace(/\n/g, ' ');
|
||||
let formattedDate = _formatRelativeDate(message.receivedAt);
|
||||
|
||||
let fromLabel = new St.Label({ style_class: 'goa-message-base goa-message-from',
|
||||
text: _stripEmailAddress(message.from)});
|
||||
let hbox = new St.BoxLayout({ style_class: 'goa-message-hbox', vertical: false });
|
||||
let subjectLabel = new St.Label({ style_class: 'goa-message-base goa-message-subject',
|
||||
text: message.subject });
|
||||
let excerptLabel = new St.Label({ style_class: 'goa-message-base goa-message-excerpt',
|
||||
text: formattedExcerpt });
|
||||
let dateLabel = new St.Label({ style_class: 'goa-message-base goa-message-date',
|
||||
text: formattedDate });
|
||||
|
||||
excerptLabel.clutter_text.line_wrap = false;
|
||||
excerptLabel.clutter_text.ellipsize = Pango.EllipsizeMode.END;
|
||||
|
||||
hbox.add(subjectLabel, { x_fill: true,
|
||||
y_fill: false,
|
||||
x_align: St.Align.END,
|
||||
y_align: St.Align.START });
|
||||
hbox.add(excerptLabel, { x_fill: true,
|
||||
y_fill: false,
|
||||
x_align: St.Align.END,
|
||||
y_align: St.Align.START });
|
||||
|
||||
let n = table.get_row_count();
|
||||
table.add(fromLabel, { x_fill: true, x_expand: true, row: n, col: 0 });
|
||||
table.add(hbox, { row: n, col: 1 });
|
||||
table.add(dateLabel, { row: n, col: 2 });
|
||||
}
|
||||
|
||||
function MailSource(client) {
|
||||
this._init(client);
|
||||
}
|
||||
|
||||
MailSource.prototype = {
|
||||
__proto__: MessageTray.Source.prototype,
|
||||
|
||||
_init : function(client) {
|
||||
this._client = client;
|
||||
this._pendingMessages = [];
|
||||
|
||||
// Init super class and add ourselves to the message tray
|
||||
MessageTray.Source.prototype._init.call(this, 'Mail');
|
||||
|
||||
// Create the notification
|
||||
this._notification = new MessageTray.Notification(this)
|
||||
this._notification.setUrgency(MessageTray.Urgency.NORMAL);
|
||||
this._notification.setResident(true);
|
||||
this._updateNotification();
|
||||
this.pushNotification(this._notification);
|
||||
// Refresh all monitors everytime the "Mail" notification is displayed
|
||||
this._notification.connect('expanded', Lang.bind(this,
|
||||
function() {
|
||||
this._client.refreshAllMonitors();
|
||||
}));
|
||||
},
|
||||
|
||||
createNotificationIcon : function() {
|
||||
let numPending = this._pendingMessages.length;
|
||||
let baseIcon = new Gio.ThemedIcon({ name: 'mail-mark-unread'});
|
||||
let numerableIcon = new Gtk.NumerableIcon({ gicon: baseIcon });
|
||||
numerableIcon.set_count(numPending);
|
||||
let icon = new St.Icon({ icon_type: St.IconType.FULLCOLOR,
|
||||
icon_size: this.ICON_SIZE });
|
||||
icon.set_gicon(numerableIcon);
|
||||
return icon;
|
||||
},
|
||||
|
||||
_updateNotification: function() {
|
||||
if (!this._notification)
|
||||
return
|
||||
|
||||
let title = 'Mail';
|
||||
let banner = ''
|
||||
let table = new St.Table({ homogeneous: false,
|
||||
style_class: 'goa-message-table',
|
||||
reactive: true });
|
||||
|
||||
for (let n = 0; n < this._pendingMessages.length; n++)
|
||||
_addMessageToTable (table, this._pendingMessages[n]);
|
||||
|
||||
this._notification.update(title, banner, { clear: true,
|
||||
icon: this.createNotificationIcon() });
|
||||
this._notification.addActor(table);
|
||||
this._notification.addButton('close', 'Close');
|
||||
this._notification.addButton('ignore-all', 'Ignore All');
|
||||
this._notification.connect('action-invoked', Lang.bind(this,
|
||||
function(notification, id) {
|
||||
if (id == 'close') {
|
||||
// TODO: Can't find another way hide it
|
||||
notification._onClicked();
|
||||
} else if (id == 'ignore-all') {
|
||||
this.clearMessages();
|
||||
}
|
||||
}));
|
||||
},
|
||||
|
||||
addMessage: function(message) {
|
||||
this._pendingMessages.push(message);
|
||||
// Update notification
|
||||
this._updateNotification();
|
||||
// Update icon with latest pending count
|
||||
this._setSummaryIcon(this.createNotificationIcon());
|
||||
},
|
||||
|
||||
clearMessages: function() {
|
||||
let notification = this._notification;
|
||||
this._notification = null;
|
||||
if (notification)
|
||||
notification.destroy();
|
||||
this.destroy();
|
||||
},
|
||||
}
|
||||
|
@ -42,10 +42,10 @@ BaseIcon.prototype = {
|
||||
box.add_actor(this._iconBin);
|
||||
|
||||
if (params.showLabel) {
|
||||
this._name = new St.Label({ text: label });
|
||||
box.add_actor(this._name);
|
||||
this.label = new St.Label({ text: label });
|
||||
box.add_actor(this.label);
|
||||
} else {
|
||||
this._name = null;
|
||||
this.label = null;
|
||||
}
|
||||
|
||||
if (params.createIcon)
|
||||
@ -67,8 +67,8 @@ BaseIcon.prototype = {
|
||||
|
||||
let childBox = new Clutter.ActorBox();
|
||||
|
||||
if (this._name) {
|
||||
let [labelMinHeight, labelNatHeight] = this._name.get_preferred_height(-1);
|
||||
if (this.label) {
|
||||
let [labelMinHeight, labelNatHeight] = this.label.get_preferred_height(-1);
|
||||
preferredHeight += this._spacing + labelNatHeight;
|
||||
|
||||
let labelHeight = availHeight >= preferredHeight ? labelNatHeight
|
||||
@ -79,7 +79,7 @@ BaseIcon.prototype = {
|
||||
childBox.x2 = availWidth;
|
||||
childBox.y1 = iconSize + this._spacing;
|
||||
childBox.y2 = childBox.y1 + labelHeight;
|
||||
this._name.allocate(childBox, flags);
|
||||
this.label.allocate(childBox, flags);
|
||||
}
|
||||
|
||||
childBox.x1 = Math.floor((availWidth - iconNatWidth) / 2);
|
||||
@ -98,8 +98,8 @@ BaseIcon.prototype = {
|
||||
alloc.min_size = iconMinHeight;
|
||||
alloc.natural_size = iconNatHeight;
|
||||
|
||||
if (this._name) {
|
||||
let [labelMinHeight, labelNatHeight] = this._name.get_preferred_height(forWidth);
|
||||
if (this.label) {
|
||||
let [labelMinHeight, labelNatHeight] = this.label.get_preferred_height(forWidth);
|
||||
alloc.min_size += this._spacing + labelMinHeight;
|
||||
alloc.natural_size += this._spacing + labelNatHeight;
|
||||
}
|
||||
|
@ -5,14 +5,13 @@ const Cogl = imports.gi.Cogl;
|
||||
const GConf = imports.gi.GConf;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Gio = imports.gi.Gio;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Pango = imports.gi.Pango;
|
||||
const St = imports.gi.St;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Signals = imports.signals;
|
||||
const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const History = imports.misc.history;
|
||||
const ExtensionSystem = imports.ui.extensionSystem;
|
||||
@ -100,12 +99,19 @@ Notebook.prototype = {
|
||||
selectIndex: function(index) {
|
||||
if (index == this._selectedIndex)
|
||||
return;
|
||||
this._unselect();
|
||||
if (index < 0) {
|
||||
this._unselect();
|
||||
this.emit('selection', null);
|
||||
return;
|
||||
}
|
||||
|
||||
// Focus the new tab before unmapping the old one
|
||||
let tabData = this._tabs[index];
|
||||
if (!tabData.scrollView.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false))
|
||||
this.actor.grab_key_focus();
|
||||
|
||||
this._unselect();
|
||||
|
||||
tabData.labelBox.add_style_pseudo_class('selected');
|
||||
tabData.scrollView.show();
|
||||
this._selectedIndex = index;
|
||||
@ -745,12 +751,7 @@ LookingGlass.prototype = {
|
||||
let label = new St.Label({ text: 'js>>> ' });
|
||||
entryArea.add(label);
|
||||
|
||||
this._entry = new St.Entry();
|
||||
/* unmapping the edit box will un-focus it, undo that */
|
||||
notebook.connect('selection', Lang.bind(this, function (nb, child) {
|
||||
if (child == this._evalBox)
|
||||
global.stage.set_key_focus(this._entry);
|
||||
}));
|
||||
this._entry = new St.Entry({ can_focus: true });
|
||||
entryArea.add(this._entry, { expand: true });
|
||||
|
||||
this._windowList = new WindowList();
|
||||
@ -909,6 +910,7 @@ LookingGlass.prototype = {
|
||||
if (!Main.pushModal(this._entry))
|
||||
return;
|
||||
|
||||
this._notebook.selectIndex(0);
|
||||
this.actor.show();
|
||||
this.actor.lower(Main.chrome.actor);
|
||||
this._open = true;
|
||||
|
@ -1,11 +1,5 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
imports.gi.versions.Clutter = '1.0';
|
||||
imports.gi.versions.Gio = '2.0';
|
||||
imports.gi.versions.Gdk = '3.0';
|
||||
imports.gi.versions.GdkPixbuf = '2.0';
|
||||
imports.gi.versions.Gtk = '3.0';
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const DBus = imports.dbus;
|
||||
const Gdk = imports.gi.Gdk;
|
||||
@ -17,8 +11,6 @@ const Mainloop = imports.mainloop;
|
||||
const Meta = imports.gi.Meta;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Chrome = imports.ui.chrome;
|
||||
const CtrlAltTab = imports.ui.ctrlAltTab;
|
||||
@ -37,6 +29,7 @@ const WindowAttentionHandler = imports.ui.windowAttentionHandler;
|
||||
const Scripting = imports.ui.scripting;
|
||||
const ShellDBus = imports.ui.shellDBus;
|
||||
const TelepathyClient = imports.ui.telepathyClient;
|
||||
const GoaClient = imports.ui.goaClient;
|
||||
const WindowManager = imports.ui.windowManager;
|
||||
const Magnifier = imports.ui.magnifier;
|
||||
const XdndHandler = imports.ui.xdndHandler;
|
||||
@ -58,6 +51,7 @@ let messageTray = null;
|
||||
let notificationDaemon = null;
|
||||
let windowAttentionHandler = null;
|
||||
let telepathyClient = null;
|
||||
let goaClient = null;
|
||||
let ctrlAltTabManager = null;
|
||||
let recorder = null;
|
||||
let shellDBusService = null;
|
||||
@ -75,12 +69,7 @@ let _cssStylesheet = null;
|
||||
let background = null;
|
||||
|
||||
function start() {
|
||||
// Add a binding for 'global' in the global JS namespace; (gjs
|
||||
// keeps the web browser convention of having that namespace be
|
||||
// called 'window'.)
|
||||
window.global = Shell.Global.get();
|
||||
|
||||
// Now monkey patch utility functions into the global proxy;
|
||||
// Monkey patch utility functions into the global proxy;
|
||||
// This is easier and faster than indirecting down into global
|
||||
// if we want to call back up into JS.
|
||||
global.logError = _logError;
|
||||
@ -102,8 +91,6 @@ function start() {
|
||||
// not loading any events until the user presses the clock
|
||||
global.launch_calendar_server();
|
||||
|
||||
Environment.init();
|
||||
|
||||
// Ensure ShellWindowTracker and ShellAppUsage are initialized; this will
|
||||
// also initialize ShellAppSystem first. ShellAppSystem
|
||||
// needs to load all the .desktop files, and ShellWindowTracker
|
||||
@ -154,6 +141,7 @@ function start() {
|
||||
notificationDaemon = new NotificationDaemon.NotificationDaemon();
|
||||
windowAttentionHandler = new WindowAttentionHandler.WindowAttentionHandler();
|
||||
telepathyClient = new TelepathyClient.Client();
|
||||
goaClient = new GoaClient.Client();
|
||||
|
||||
overview.init();
|
||||
statusIconDispatcher.start(messageTray.actor);
|
||||
|
@ -20,9 +20,6 @@ const Params = imports.misc.params;
|
||||
const Tweener = imports.ui.tweener;
|
||||
const Util = imports.misc.util;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const ANIMATION_TIME = 0.2;
|
||||
const NOTIFICATION_TIMEOUT = 4;
|
||||
const SUMMARY_TIMEOUT = 1;
|
||||
@ -1304,6 +1301,10 @@ MessageTray.prototype = {
|
||||
|
||||
},
|
||||
|
||||
getBusy: function(source) {
|
||||
return this._busy;
|
||||
},
|
||||
|
||||
contains: function(source) {
|
||||
return this._getIndexOfSummaryItemForSource(source) >= 0;
|
||||
},
|
||||
|
@ -10,8 +10,6 @@ const Pango = imports.gi.Pango;
|
||||
const St = imports.gi.St;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Signals = imports.signals;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Params = imports.misc.params;
|
||||
|
||||
|
@ -7,8 +7,6 @@ const Lang = imports.lang;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Mainloop = imports.mainloop;
|
||||
const St = imports.gi.St;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Config = imports.misc.config;
|
||||
const Main = imports.ui.main;
|
||||
|
@ -8,8 +8,6 @@ const Signals = imports.signals;
|
||||
const Lang = imports.lang;
|
||||
const St = imports.gi.St;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
const Gdk = imports.gi.Gdk;
|
||||
|
||||
const AppDisplay = imports.ui.appDisplay;
|
||||
|
@ -9,8 +9,6 @@ const Pango = imports.gi.Pango;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Signals = imports.signals;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Config = imports.misc.config;
|
||||
const CtrlAltTab = imports.ui.ctrlAltTab;
|
||||
@ -817,6 +815,8 @@ Panel.prototype = {
|
||||
reactive: true });
|
||||
this.actor._delegate = this;
|
||||
|
||||
this._statusArea = {};
|
||||
|
||||
Main.overview.connect('shown', Lang.bind(this, function () {
|
||||
this.actor.add_style_class_name('in-overview');
|
||||
}));
|
||||
@ -913,6 +913,7 @@ Panel.prototype = {
|
||||
style_class: 'panel-button',
|
||||
reactive: true,
|
||||
can_focus: true });
|
||||
this._activities = this.button;
|
||||
this.button.set_child(label);
|
||||
this.button._delegate = this.button;
|
||||
this.button._xdndTimeOut = 0;
|
||||
@ -941,10 +942,10 @@ Panel.prototype = {
|
||||
|
||||
this._hotCorner = null;
|
||||
|
||||
let appMenuButton = new AppMenuButton();
|
||||
this._leftBox.add(appMenuButton.actor);
|
||||
this._appMenu = new AppMenuButton();
|
||||
this._leftBox.add(this._appMenu.actor);
|
||||
|
||||
this._menus.addMenu(appMenuButton.menu);
|
||||
this._menus.addMenu(this._appMenu.menu);
|
||||
|
||||
/* center */
|
||||
this._dateMenu = new DateMenu.DateMenuButton();
|
||||
@ -963,12 +964,12 @@ Panel.prototype = {
|
||||
this._rightBox.add(this._trayBox);
|
||||
this._rightBox.add(this._statusBox);
|
||||
|
||||
this._statusmenu = new StatusMenu.StatusMenuButton();
|
||||
this._statusmenu.actor.name = 'panelStatus';
|
||||
this._rightBox.add(this._statusmenu.actor);
|
||||
this._userMenu = new StatusMenu.StatusMenuButton();
|
||||
this._userMenu.actor.name = 'panelStatus';
|
||||
this._rightBox.add(this._userMenu.actor);
|
||||
|
||||
// Synchronize the buttons pseudo classes with its corner
|
||||
this._statusmenu.actor.connect('style-changed', Lang.bind(this,
|
||||
this._userMenu.actor.connect('style-changed', Lang.bind(this,
|
||||
function(actor) {
|
||||
let rtl = actor.get_direction() == St.TextDirection.RTL;
|
||||
let corner = rtl ? this._leftCorner : this._rightCorner;
|
||||
@ -1051,11 +1052,13 @@ Panel.prototype = {
|
||||
let indicator = new constructor();
|
||||
this._statusBox.add(indicator.actor);
|
||||
this._menus.addMenu(indicator.menu);
|
||||
|
||||
this._statusArea[role] = indicator;
|
||||
}
|
||||
|
||||
// PopupMenuManager depends on menus being added in order for
|
||||
// keyboard navigation
|
||||
this._menus.addMenu(this._statusmenu.menu);
|
||||
this._menus.addMenu(this._userMenu.menu);
|
||||
},
|
||||
|
||||
startupAnimation: function() {
|
||||
|
@ -7,8 +7,6 @@ const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Signals = imports.signals;
|
||||
const St = imports.gi.St;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const DND = imports.ui.dnd;
|
||||
const Main = imports.ui.main;
|
||||
|
@ -22,8 +22,6 @@
|
||||
|
||||
const Lang = imports.lang;
|
||||
const Signals = imports.signals;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const St = imports.gi.St;
|
||||
|
@ -13,9 +13,6 @@ const Main = imports.ui.main;
|
||||
const Params = imports.misc.params;
|
||||
const Tweener = imports.ui.tweener;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const SLIDER_SCROLL_STEP = 0.05; /* Slider scrolling step in % */
|
||||
|
||||
function PopupBaseMenuItem(params) {
|
||||
@ -498,7 +495,7 @@ PopupSliderMenuItem.prototype = {
|
||||
this._slider = new St.DrawingArea({ style_class: 'popup-slider-menu-item', reactive: true });
|
||||
this.addActor(this._slider, { span: -1, expand: true });
|
||||
this._slider.connect('repaint', Lang.bind(this, this._sliderRepaint));
|
||||
this._slider.connect('button-press-event', Lang.bind(this, this._startDragging));
|
||||
this.actor.connect('button-press-event', Lang.bind(this, this._startDragging));
|
||||
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
|
||||
|
||||
this._releaseId = this._motionId = 0;
|
||||
|
@ -8,8 +8,6 @@ const Meta = imports.gi.Meta;
|
||||
const St = imports.gi.St;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Signals = imports.signals;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const FileUtils = imports.misc.fileUtils;
|
||||
const Main = imports.ui.main;
|
||||
|
@ -7,9 +7,6 @@ const Signals = imports.signals;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Util = imports.misc.util;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const FileUtils = imports.misc.fileUtils;
|
||||
const Main = imports.ui.main;
|
||||
|
||||
@ -276,7 +273,7 @@ OpenSearchSystem.prototype = {
|
||||
_addProvider: function(fileName) {
|
||||
let path = global.datadir + '/search_providers/' + fileName;
|
||||
let source = Shell.get_file_contents_utf8_sync(path);
|
||||
let [success, name, url, langs, icon_uri] = global.parse_search_provider(source);
|
||||
let [success, name, url, langs, icon_uri] = Shell.parse_search_provider(source);
|
||||
let provider ={ name: name,
|
||||
url: url,
|
||||
id: this._providers.length,
|
||||
|
@ -2,8 +2,6 @@
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Lang = imports.lang;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Meta = imports.gi.Meta;
|
||||
const St = imports.gi.St;
|
||||
@ -39,6 +37,7 @@ SearchResult.prototype = {
|
||||
let icon = new IconGrid.BaseIcon(this.metaInfo['name'],
|
||||
{ createIcon: this.metaInfo['createIcon'] });
|
||||
content.set_child(icon.actor);
|
||||
this.actor.label_actor = icon.label;
|
||||
}
|
||||
this._content = content;
|
||||
this.actor.set_child(content);
|
||||
@ -259,6 +258,7 @@ SearchResults.prototype = {
|
||||
let title = new St.Label({ text: provider.name,
|
||||
style_class: 'dash-search-button-label' });
|
||||
|
||||
button.label_actor = title;
|
||||
bin.set_child(title);
|
||||
button.set_child(bin);
|
||||
provider.actor = button;
|
||||
|
@ -14,9 +14,6 @@ const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
const Util = imports.misc.util;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const A11Y_SCHEMA = 'org.gnome.desktop.a11y.keyboard';
|
||||
const KEY_STICKY_KEYS_ENABLED = 'stickykeys-enable';
|
||||
const KEY_BOUNCE_KEYS_ENABLED = 'bouncekeys-enable';
|
||||
|
@ -16,9 +16,6 @@ const MessageTray = imports.ui.messageTray;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const ConnectionState = {
|
||||
DISCONNECTED: 0,
|
||||
CONNECTED: 1,
|
||||
@ -67,7 +64,7 @@ Indicator.prototype = {
|
||||
|
||||
this._fullMenuItems = [new PopupMenu.PopupSeparatorMenuItem(),
|
||||
new PopupMenu.PopupMenuItem(_("Send Files to Device...")),
|
||||
new PopupMenu.PopupMenuItem(_("Setup a New Device...")),
|
||||
new PopupMenu.PopupMenuItem(_("Set up a New Device...")),
|
||||
new PopupMenu.PopupSeparatorMenuItem()];
|
||||
this._hasDevices = false;
|
||||
this._deviceSep = this._fullMenuItems[0]; // hidden if no device exists
|
||||
@ -127,13 +124,6 @@ Indicator.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
_deviceCompare: function(d1, d2) {
|
||||
return d1.device_path == d2.device_path &&
|
||||
d1.bdaddr == d2.bdaddr &&
|
||||
d1.can_connect == d2.can_connect &&
|
||||
d1.capabilities == d2.capabilities;
|
||||
},
|
||||
|
||||
_updateDevices: function() {
|
||||
let devices = this._applet.get_devices();
|
||||
|
||||
@ -142,12 +132,8 @@ Indicator.prototype = {
|
||||
let item = this._deviceItems[i];
|
||||
let destroy = true;
|
||||
for (let j = 0; j < devices.length; j++) {
|
||||
// we need to deep compare because BluetoothSimpleDevice is a boxed type
|
||||
// (but we take advantage of that, because _skip will disappear the next
|
||||
// time get_devices() is called)
|
||||
if (this._deviceCompare(item._device, devices[j])) {
|
||||
item.label.text = devices[j].alias;
|
||||
devices[j]._skip = true;
|
||||
if (item._device.device_path == devices[j].device_path) {
|
||||
this._updateDeviceItem(item, devices[j]);
|
||||
destroy = false;
|
||||
break;
|
||||
}
|
||||
@ -162,7 +148,7 @@ Indicator.prototype = {
|
||||
this._hasDevices = newlist.length > 0;
|
||||
for (let i = 0; i < devices.length; i++) {
|
||||
let d = devices[i];
|
||||
if (d._skip)
|
||||
if (d._item)
|
||||
continue;
|
||||
let item = this._createDeviceItem(d);
|
||||
if (item) {
|
||||
@ -177,17 +163,55 @@ Indicator.prototype = {
|
||||
this._deviceSep.actor.hide();
|
||||
},
|
||||
|
||||
_updateDeviceItem: function(item, device) {
|
||||
if (!device.can_connect && device.capabilities == GnomeBluetoothApplet.Capabilities.NONE) {
|
||||
item.destroy();
|
||||
return;
|
||||
}
|
||||
|
||||
let prevDevice = item._device;
|
||||
let prevCapabilities = prevDevice.capabilities;
|
||||
let prevCanConnect = prevDevice.can_connect;
|
||||
|
||||
// adopt the new device object
|
||||
item._device = device;
|
||||
device._item = item;
|
||||
|
||||
// update properties
|
||||
item.label.text = device.alias;
|
||||
|
||||
if (prevCapabilities != device.capabilities ||
|
||||
prevCanConnect != device.can_connect) {
|
||||
// need to rebuild the submenu
|
||||
item.menu.removeAll();
|
||||
this._buildDeviceSubMenu(item, device);
|
||||
}
|
||||
|
||||
// update connected property
|
||||
if (device.can_connect)
|
||||
item._connectedMenuitem.setToggleState(device.connected);
|
||||
},
|
||||
|
||||
_createDeviceItem: function(device) {
|
||||
if (!device.can_connect && device.capabilities == GnomeBluetoothApplet.Capabilities.NONE)
|
||||
return null;
|
||||
let item = new PopupMenu.PopupSubMenuMenuItem(device.alias);
|
||||
item._device = device;
|
||||
|
||||
// adopt the device object, and add a back link
|
||||
item._device = device;
|
||||
device._item = item;
|
||||
|
||||
this._buildDeviceSubMenu(item, device);
|
||||
|
||||
return item;
|
||||
},
|
||||
|
||||
_buildDeviceSubMenu: function(item, device) {
|
||||
if (device.can_connect) {
|
||||
item._connected = device.connected;
|
||||
let menuitem = new PopupMenu.PopupSwitchMenuItem(_("Connection"), device.connected);
|
||||
item._connectedMenuitem = new PopupMenu.PopupSwitchMenuItem(_("Connection"), device.connected);
|
||||
|
||||
menuitem.connect('toggled', Lang.bind(this, function() {
|
||||
item._connectedMenuitem.connect('toggled', Lang.bind(this, function() {
|
||||
if (item._connected > ConnectionState.CONNECTED) {
|
||||
// operation already in progress, revert
|
||||
menuitem.setToggleState(menuitem.state);
|
||||
@ -217,7 +241,7 @@ Indicator.prototype = {
|
||||
}
|
||||
}));
|
||||
|
||||
item.menu.addMenuItem(menuitem);
|
||||
item.menu.addMenuItem(item._connectedMenuitem);
|
||||
}
|
||||
|
||||
if (device.capabilities & GnomeBluetoothApplet.Capabilities.OBEX_PUSH) {
|
||||
@ -263,8 +287,6 @@ Indicator.prototype = {
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return item;
|
||||
},
|
||||
|
||||
_updateFullMenu: function() {
|
||||
|
@ -13,9 +13,6 @@ const PopupMenu = imports.ui.popupMenu;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const Util = imports.misc.util;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
function LayoutMenuItem() {
|
||||
this._init.apply(this, arguments);
|
||||
}
|
||||
|
@ -18,9 +18,6 @@ const MessageTray = imports.ui.messageTray;
|
||||
const ModemManager = imports.misc.modemManager;
|
||||
const Util = imports.misc.util;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const NMConnectionCategory = {
|
||||
INVALID: 'invalid',
|
||||
WIRED: 'wired',
|
||||
@ -33,8 +30,10 @@ const NMAccessPointSecurity = {
|
||||
UNKNOWN: 0,
|
||||
NONE: 1,
|
||||
WEP: 2,
|
||||
WPA: 3,
|
||||
WPA2: 4
|
||||
WPA_PSK: 3,
|
||||
WPA2_PSK: 4,
|
||||
WPA_ENT: 5,
|
||||
WPA2_ENT: 6
|
||||
};
|
||||
|
||||
// small optimization, to avoid using [] all the time
|
||||
@ -42,6 +41,21 @@ const NM80211Mode = NetworkManager['80211Mode'];
|
||||
const NM80211ApFlags = NetworkManager['80211ApFlags'];
|
||||
const NM80211ApSecurityFlags = NetworkManager['80211ApSecurityFlags'];
|
||||
|
||||
// number of wireless networks that should be visible
|
||||
// (the remaining are placed into More...)
|
||||
const NUM_VISIBLE_NETWORKS = 5;
|
||||
|
||||
const NMAppletHelperInterface = {
|
||||
name: 'org.gnome.network_manager_applet',
|
||||
methods: [
|
||||
{ name: 'ConnectToHiddenNetwork', inSignature: '', outSignature: '' },
|
||||
{ name: 'CreateWifiNetwork', inSignature: '', outSignature: '' },
|
||||
{ name: 'ConnectTo8021xNetwork', inSignature: 'oo', outSignature: '' },
|
||||
{ name: 'ConnectTo3gNetwork', inSignature: 'o', outSignature: '' }
|
||||
],
|
||||
};
|
||||
const NMAppletProxy = DBus.makeProxyClass(NMAppletHelperInterface);
|
||||
|
||||
function macToArray(string) {
|
||||
return string.split(':').map(function(el) {
|
||||
return parseInt(el, 16);
|
||||
@ -424,7 +438,8 @@ NMDevice.prototype = {
|
||||
this._client.activate_connection(this._connections[0].connection, this.device, null, null);
|
||||
} else if (this._autoConnectionName) {
|
||||
let connection = this._createAutomaticConnection();
|
||||
this._client.add_and_activate_connection(connection, this.device, null, null);
|
||||
if (connection)
|
||||
this._client.add_and_activate_connection(connection, this.device, null, null);
|
||||
}
|
||||
},
|
||||
|
||||
@ -501,7 +516,7 @@ NMDevice.prototype = {
|
||||
},
|
||||
|
||||
connectionValid: function(connection) {
|
||||
throw new TypeError('Invoking pure virtual function NMDevice.connectionValid');
|
||||
return this.device.connection_valid(connection);
|
||||
},
|
||||
|
||||
setEnabled: function(enabled) {
|
||||
@ -604,7 +619,8 @@ NMDevice.prototype = {
|
||||
this._autoConnectionItem = new PopupMenu.PopupMenuItem(this._autoConnectionName);
|
||||
this._autoConnectionItem.connect('activate', Lang.bind(this, function() {
|
||||
let connection = this._createAutomaticConnection();
|
||||
this._client.add_and_activate_connection(connection, this.device, null, null);
|
||||
if (connection)
|
||||
this._client.add_and_activate_connection(connection, this.device, null, null);
|
||||
}));
|
||||
this.section.addMenuItem(this._autoConnectionItem);
|
||||
}
|
||||
@ -719,17 +735,6 @@ NMDeviceWired.prototype = {
|
||||
NMDevice.prototype._init.call(this, client, device, connections);
|
||||
},
|
||||
|
||||
connectionValid: function(connection) {
|
||||
if (connection._type != NetworkManager.SETTING_WIRED_SETTING_NAME)
|
||||
return false;
|
||||
|
||||
let ethernetSettings = connection.get_setting_by_name(NetworkManager.SETTING_WIRED_SETTING_NAME);
|
||||
let fixedMac = ethernetSettings.get_mac_address();
|
||||
if (fixedMac)
|
||||
return macCompare(fixedMac, macToArray(this.device.perm_hw_address));
|
||||
return true;
|
||||
},
|
||||
|
||||
_createSection: function() {
|
||||
NMDevice.prototype._createSection.call(this);
|
||||
|
||||
@ -772,6 +777,10 @@ NMDeviceModem.prototype = {
|
||||
this.mobileDevice = null;
|
||||
this._connectionType = 'ppp';
|
||||
|
||||
this._applet_proxy = new NMAppletProxy(DBus.session,
|
||||
'org.gnome.network_manager_applet',
|
||||
'/org/gnome/network_manager_applet');
|
||||
|
||||
this._capabilities = device.current_capabilities;
|
||||
if (this._capabilities & NetworkManager.DeviceModemCapabilities.GSM_UMTS) {
|
||||
is_wwan = true;
|
||||
@ -872,24 +881,14 @@ NMDeviceModem.prototype = {
|
||||
NMDevice.prototype._clearSection.call(this);
|
||||
},
|
||||
|
||||
connectionValid: function(connection) {
|
||||
return connection._type == this._connectionType;
|
||||
},
|
||||
|
||||
_createAutomaticConnection: function() {
|
||||
// FIXME: we need to summon the mobile wizard here
|
||||
// or NM will not have the necessary parameters to complete the connection
|
||||
// pending a DBus method on nm-applet
|
||||
|
||||
let connection = new NetworkManager.Connection;
|
||||
connection._uuid = NetworkManager.utils_uuid_generate();
|
||||
connection.add_setting(new NetworkManager.SettingConnection({
|
||||
uuid: connection._uuid,
|
||||
id: this._autoConnectionName,
|
||||
type: this._connectionType,
|
||||
autoconnect: false
|
||||
}));
|
||||
return connection;
|
||||
// Mobile wizard is handled by nm-applet for now...
|
||||
this._applet_proxy.ConnectTo3gNetworkRemote(this.device.get_path(),
|
||||
Lang.bind(this, function(results, err) {
|
||||
if (err)
|
||||
log(err);
|
||||
}));
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
@ -909,18 +908,6 @@ NMDeviceBluetooth.prototype = {
|
||||
NMDevice.prototype._init.call(this, client, device, connections);
|
||||
},
|
||||
|
||||
connectionValid: function(connection) {
|
||||
if (connection._type != NetworkManager.SETTING_BLUETOOTH_SETTING_NAME)
|
||||
return false;
|
||||
|
||||
let bluetoothSettings = connection.get_setting_by_name(NetworkManager.SETTING_BLUETOOTH_SETTING_NAME);
|
||||
let fixedBdaddr = bluetoothSettings.get_bdaddr();
|
||||
if (fixedBdaddr)
|
||||
return macCompare(fixedBdaddr, macToArray(this.device.hw_address));
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
_createAutomaticConnection: function() {
|
||||
let connection = new NetworkManager.Connection;
|
||||
connection._uuid = NetworkManager.utils_uuid_generate();
|
||||
@ -1012,6 +999,10 @@ NMDeviceWireless.prototype = {
|
||||
this._overflowItem = null;
|
||||
this._networks = [ ];
|
||||
|
||||
this._applet_proxy = new NMAppletProxy(DBus.session,
|
||||
'org.gnome.network_manager_applet',
|
||||
'/org/gnome/network_manager_applet');
|
||||
|
||||
// breaking the layers with this, but cannot call
|
||||
// this.connectionValid until I have a device
|
||||
this.device = device;
|
||||
@ -1036,18 +1027,27 @@ NMDeviceWireless.prototype = {
|
||||
item: null,
|
||||
accessPoints: [ ap ]
|
||||
};
|
||||
obj.ssidText = NetworkManager.utils_ssid_to_utf8(obj.ssid);
|
||||
this._networks.push(obj);
|
||||
}
|
||||
|
||||
// Check if some connection is valid for this AP
|
||||
for (let j = 0; j < validConnections.length; j++) {
|
||||
let connection = validConnections[j];
|
||||
if (this._connectionValidForAP(connection, ap) &&
|
||||
if (ap.connection_valid(connection) &&
|
||||
obj.connections.indexOf(connection) == -1) {
|
||||
obj.connections.push(connection);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (this.device.active_access_point) {
|
||||
this._activeNetwork = this._networks[this._findNetwork(this.device.active_access_point)];
|
||||
} else {
|
||||
this._activeNetwork = null;
|
||||
}
|
||||
this._networks.sort(this._networkSortFunction);
|
||||
|
||||
this._apChangedId = device.connect('notify::active-access-point', Lang.bind(this, this._activeApChanged));
|
||||
this._apAddedId = device.connect('access-point-added', Lang.bind(this, this._accessPointAdded));
|
||||
this._apRemovedId = device.connect('access-point-removed', Lang.bind(this, this._accessPointRemoved));
|
||||
|
||||
@ -1055,8 +1055,13 @@ NMDeviceWireless.prototype = {
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
if (this._apAddedId) {
|
||||
if (this._apChangedId) {
|
||||
// see above for this HACK
|
||||
GObject.Object.prototype.disconnect.call(this.device, this._apChangedId);
|
||||
this._apChangedId = 0;
|
||||
}
|
||||
|
||||
if (this._apAddedId) {
|
||||
GObject.Object.prototype.disconnect.call(this.device, this._apAddedId);
|
||||
this._apAddedId = 0;
|
||||
}
|
||||
@ -1103,7 +1108,7 @@ NMDeviceWireless.prototype = {
|
||||
if (best) {
|
||||
for (let i = 0; i < bestApObj.accessPoints.length; i++) {
|
||||
let ap = bestApObj.accessPoints[i];
|
||||
if (this._connectionValidForAP(best, ap)) {
|
||||
if (ap.connection_valid(best)) {
|
||||
this._client.activate_connection(best, this.device, ap.dbus_path, null);
|
||||
break;
|
||||
}
|
||||
@ -1122,35 +1127,76 @@ NMDeviceWireless.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
_activeApChanged: function() {
|
||||
this._activeNetwork = null;
|
||||
|
||||
let activeAp = this.device.active_access_point;
|
||||
|
||||
if (activeAp) {
|
||||
let pos = this._findNetwork(activeAp);
|
||||
this._activeNetwork = this._networks[pos];
|
||||
}
|
||||
|
||||
// we don't refresh the view here, setActiveConnection will
|
||||
},
|
||||
|
||||
_getApSecurityType: function(accessPoint) {
|
||||
if (accessPoint._secType)
|
||||
return accessPoint._secType;
|
||||
// XXX: have this checked by someone familiar with IEEE 802.1x
|
||||
|
||||
let flags = accessPoint.flags;
|
||||
let wpa_flags = accessPoint.wpa_flags;
|
||||
let rsn_flags = accessPoint.rsn_flags;
|
||||
let type;
|
||||
if ( !(flags & NM80211ApFlags.PRIVACY)
|
||||
&& (wpa_flags == NM80211ApSecurityFlags.NONE)
|
||||
&& (rsn_flags == NM80211ApSecurityFlags.NONE))
|
||||
type = NMAccessPointSecurity.NONE;
|
||||
else if ( (flags & NM80211ApFlags.PRIVACY)
|
||||
&& (wpa_flags == NM80211ApSecurityFlags.NONE)
|
||||
&& (rsn_flags == NM80211ApSecurityFlags.NONE))
|
||||
type = NMAccessPointSecurity.WEP;
|
||||
else if ( !(flags & NM80211ApFlags.PRIVACY)
|
||||
&& (wpa_flags != NM80211ApSecurity.NONE)
|
||||
&& (rsn_flags != NM80211ApSecurity.NONE))
|
||||
type = NMAccessPointSecurity.WPA;
|
||||
else
|
||||
type = NMAccessPointSecurity.WPA2;
|
||||
if (rsn_flags != NM80211ApSecurityFlags.NONE) {
|
||||
/* RSN check first so that WPA+WPA2 APs are treated as RSN/WPA2 */
|
||||
if (rsn_flags & NM80211ApSecurityFlags.KEY_MGMT_802_1X)
|
||||
type = NMAccessPointSecurity.WPA2_ENT;
|
||||
else if (rsn_flags & NM80211ApSecurityFlags.KEY_MGMT_PSK)
|
||||
type = NMAccessPointSecurity.WPA2_PSK;
|
||||
} else if (wpa_flags != NM80211ApSecurityFlags.NONE) {
|
||||
if (wpa_flags & NM80211ApSecurityFlags.KEY_MGMT_802_1X)
|
||||
type = NMAccessPointSecurity.WPA_ENT;
|
||||
else if (wpa_flags & NM80211ApSecurityFlags.KEY_MGMT_PSK)
|
||||
type = NMAccessPointSecurity.WPA_PSK;
|
||||
} else {
|
||||
if (flags & NM80211ApFlags.PRIVACY)
|
||||
type = NMAccessPointSecurity.WEP;
|
||||
else
|
||||
type = NMAccessPointSecurity.NONE;
|
||||
}
|
||||
|
||||
// cache the found value to avoid checking flags all the time
|
||||
accessPoint._secType = type;
|
||||
return type;
|
||||
},
|
||||
|
||||
_networkSortFunction: function(one, two) {
|
||||
let oneHasConnection = one.connections.length != 0;
|
||||
let twoHasConnection = two.connections.length != 0;
|
||||
|
||||
// place known connections first
|
||||
// (-1 = good order, 1 = wrong order)
|
||||
if (oneHasConnection && !twoHasConnection)
|
||||
return -1;
|
||||
else if (!oneHasConnection && twoHasConnection)
|
||||
return 1;
|
||||
|
||||
let oneHasSecurity = one.security != NMAccessPointSecurity.NONE;
|
||||
let twoHasSecurity = two.security != NMAccessPointSecurity.NONE;
|
||||
|
||||
// place secure connections first
|
||||
// (we treat WEP/WPA/WPA2 the same as there is no way to
|
||||
// take them apart from the UI)
|
||||
if (oneHasSecurity && !twoHasSecurity)
|
||||
return -1;
|
||||
else if (!oneHasSecurity && twoHasSecurity)
|
||||
return 1;
|
||||
|
||||
// sort alphabetically
|
||||
return GLib.utf8_collate(one.ssidText, two.ssidText);
|
||||
},
|
||||
|
||||
_networkCompare: function(network, accessPoint) {
|
||||
if (!ssidCompare(network.ssid, accessPoint.get_ssid()))
|
||||
return false;
|
||||
@ -1173,6 +1219,8 @@ NMDeviceWireless.prototype = {
|
||||
_accessPointAdded: function(device, accessPoint) {
|
||||
let pos = this._findNetwork(accessPoint);
|
||||
let apObj;
|
||||
let needsupdate = false;
|
||||
|
||||
if (pos != -1) {
|
||||
apObj = this._networks[pos];
|
||||
if (apObj.accessPoints.indexOf(accessPoint) != -1) {
|
||||
@ -1181,6 +1229,8 @@ NMDeviceWireless.prototype = {
|
||||
}
|
||||
|
||||
apObj.accessPoints.push(accessPoint);
|
||||
if (apObj.item)
|
||||
apObj.item.updateAccessPoints(apObj.accessPoints);
|
||||
} else {
|
||||
apObj = { ssid: accessPoint.get_ssid(),
|
||||
mode: accessPoint.mode,
|
||||
@ -1189,21 +1239,54 @@ NMDeviceWireless.prototype = {
|
||||
item: null,
|
||||
accessPoints: [ accessPoint ]
|
||||
};
|
||||
this._networks.push(apObj);
|
||||
apObj.ssidText = NetworkManager.utils_ssid_to_utf8(apObj.ssid);
|
||||
needsupdate = true;
|
||||
}
|
||||
|
||||
// check if this enables new connections for this group
|
||||
for (let i = 0; i < this._connections.length; i++) {
|
||||
let connection = this._connections[i].connection;
|
||||
if (this._connectionValidForAP(connection, accessPoint) &&
|
||||
if (accessPoint.connection_valid(connection) &&
|
||||
apObj.connections.indexOf(connection) == -1) {
|
||||
apObj.connections.push(connection);
|
||||
|
||||
// this potentially changes the order
|
||||
needsupdate = true;
|
||||
}
|
||||
}
|
||||
|
||||
// update everything
|
||||
this._clearSection();
|
||||
this._createSection();
|
||||
if (needsupdate) {
|
||||
if (apObj.item)
|
||||
apObj.item.destroy();
|
||||
|
||||
if (pos != -1)
|
||||
this._networks.splice(pos, 1);
|
||||
|
||||
if (this._networks.length == 0) {
|
||||
// only network in the list
|
||||
this._networks.push(apObj);
|
||||
this._clearSection();
|
||||
this._createSection();
|
||||
return;
|
||||
}
|
||||
|
||||
// skip networks that should appear earlier
|
||||
let menuPos = 0;
|
||||
for (pos = 0;
|
||||
pos < this._networks.length &&
|
||||
this._networkSortFunction(this._networks[pos], apObj) < 0; ++pos) {
|
||||
if (this._networks[pos] != this._activeNetwork)
|
||||
menuPos++;
|
||||
}
|
||||
|
||||
// (re-)add the network
|
||||
this._networks.splice(pos, 0, apObj);
|
||||
|
||||
if (this._shouldShowConnectionList()) {
|
||||
menuPos += (this._activeConnectionItem ? 1 : 0);
|
||||
this._createNetworkItem(apObj, menuPos);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_accessPointRemoved: function(device, accessPoint) {
|
||||
@ -1243,7 +1326,7 @@ NMDeviceWireless.prototype = {
|
||||
item.connect('activate', Lang.bind(this, function() {
|
||||
let accessPoints = sortAccessPoints(accessPointObj.accessPoints);
|
||||
for (let i = 0; i < accessPoints.length; i++) {
|
||||
if (this._connectionValidForAP(connection, accessPoints[i])) {
|
||||
if (accessPoints[i].connection_valid(connection)) {
|
||||
this._client.activate_connection(connection, this.device, accessPoints[i].dbus_path, null);
|
||||
break;
|
||||
}
|
||||
@ -1252,40 +1335,6 @@ NMDeviceWireless.prototype = {
|
||||
return item;
|
||||
},
|
||||
|
||||
connectionValid: function(connection) {
|
||||
if (connection._type != NetworkManager.SETTING_WIRELESS_SETTING_NAME)
|
||||
return false;
|
||||
|
||||
let wirelessSettings = connection.get_setting_by_name(NetworkManager.SETTING_WIRELESS_SETTING_NAME);
|
||||
let wirelessSecuritySettings = connection.get_setting_by_name(NetworkManager.SETTING_WIRELESS_SECURITY_SETTING_NAME);
|
||||
|
||||
let fixedMac = wirelessSettings.get_mac_address();
|
||||
if (fixedMac && !macCompare(fixedMac, macToArray(this.device.perm_hw_address)))
|
||||
return false;
|
||||
|
||||
if (wirelessSecuritySettings &&
|
||||
wirelessSecuritySettings.key_mgmt != 'none' &&
|
||||
wirelessSecuritySettings.key_mgmt != 'ieee8021x') {
|
||||
let capabilities = this.device.wireless_capabilities;
|
||||
if (!(capabilities & NetworkManager.DeviceWifiCapabilities.WPA) ||
|
||||
!(capabilities & NetworkManager.DeviceWifiCapabilities.CIPHER_TKIP))
|
||||
return false;
|
||||
if (wirelessSecuritySettings.get_num_protos() == 1 &&
|
||||
wirelessSecuritySettings.get_proto(0) == 'rsn' &&
|
||||
!(capabilities & NetworkManager.DeviceWifiCapabilities.RSN))
|
||||
return false;
|
||||
if (wirelessSecuritySettings.get_num_pairwise() == 1 &&
|
||||
wirelessSecuritySettings.get_pairwise(0) == 'ccmp' &&
|
||||
!(capabilities & NetworkManager.DeviceWifiCapabilities.CIPHER_CCMP))
|
||||
return false;
|
||||
if (wirelessSecuritySettings.get_num_groups() == 1 &&
|
||||
wirelessSecuritySettings.get_group(0) == 'ccmp' &&
|
||||
!(capabilities & NetworkManager.DeviceWifiCapabilities.CIPHER_CCMP))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
_clearSection: function() {
|
||||
NMDevice.prototype._clearSection.call(this);
|
||||
|
||||
@ -1315,6 +1364,12 @@ NMDeviceWireless.prototype = {
|
||||
// remove the connection from the access point group
|
||||
connections.splice(k);
|
||||
anyauto = connections.length == 0;
|
||||
|
||||
if (anyauto) {
|
||||
// this potentially changes the sorting order
|
||||
forceupdate = true;
|
||||
break;
|
||||
}
|
||||
if (apObj.item) {
|
||||
if (apObj.item instanceof PopupMenu.PopupSubMenuMenuItem) {
|
||||
let items = apObj.item.menu.getMenuItems();
|
||||
@ -1340,6 +1395,7 @@ NMDeviceWireless.prototype = {
|
||||
}
|
||||
|
||||
if (forceupdate || anyauto) {
|
||||
this._networks.sort(this._networkSortFunction);
|
||||
this._clearSection();
|
||||
this._createSection();
|
||||
}
|
||||
@ -1355,78 +1411,29 @@ NMDeviceWireless.prototype = {
|
||||
this._connections.push(obj);
|
||||
|
||||
// find an appropriate access point
|
||||
let any = false, forceupdate = false;
|
||||
let forceupdate = false;
|
||||
for (let i = 0; i < this._networks.length; i++) {
|
||||
let apObj = this._networks[i];
|
||||
|
||||
// Check if connection is valid for any of these access points
|
||||
let any = false;
|
||||
for (let k = 0; k < apObj.accessPoints.length; k++) {
|
||||
let ap = apObj.accessPoints[k];
|
||||
if (this._connectionValidForAP(connection, ap)) {
|
||||
if (ap.connection_valid(connection)) {
|
||||
apObj.connections.push(connection);
|
||||
any = true;
|
||||
// this potentially changes the sorting order
|
||||
forceupdate = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (any && this._shouldShowConnectionList()) {
|
||||
// we need to show this connection
|
||||
if (apObj.item && apObj.item.menu) {
|
||||
// We're already showing the submenu for this access point
|
||||
apObj.item.menu.addMenuItem(this._createAPItem(connection, apObj, true));
|
||||
} else {
|
||||
if (apObj.item)
|
||||
apObj.item.destroy();
|
||||
if (apObj.connections.length == 1) {
|
||||
apObj.item = this._createAPItem(connection, apObj, false);
|
||||
this.section.addMenuItem(apObj.item);
|
||||
} else {
|
||||
apObj.item = null;
|
||||
// we need to force an update to create the submenu
|
||||
forceupdate = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (forceupdate) {
|
||||
this._networks.sort(this._networkSortFunction);
|
||||
this._clearSection();
|
||||
this._createSection();
|
||||
}
|
||||
},
|
||||
|
||||
_connectionValidForAP: function(connection, ap) {
|
||||
// copied and adapted from nm-applet
|
||||
let wirelessSettings = connection.get_setting_by_name(NetworkManager.SETTING_WIRELESS_SETTING_NAME);
|
||||
if (!ssidCompare(wirelessSettings.get_ssid(), ap.get_ssid()))
|
||||
return false;
|
||||
|
||||
let wirelessSecuritySettings = connection.get_setting_by_name(NetworkManager.SETTING_WIRELESS_SECURITY_SETTING_NAME);
|
||||
|
||||
let fixedBssid = wirelessSettings.get_bssid();
|
||||
if (fixedBssid && !macCompare(fixedBssid, macToArray(ap.hw_address)))
|
||||
return false;
|
||||
|
||||
let fixedBand = wirelessSettings.band;
|
||||
if (fixedBand) {
|
||||
let freq = ap.frequency;
|
||||
if (fixedBand == 'a' && (freq < 4915 || freq > 5825))
|
||||
return false;
|
||||
if (fixedBand == 'bg' && (freq < 2412 || freq > 2484))
|
||||
return false;
|
||||
}
|
||||
|
||||
let fixedChannel = wirelessSettings.channel;
|
||||
if (fixedChannel && fixedChannel != NetworkManager.utils_wifi_freq_to_channel(ap.frequency))
|
||||
return false;
|
||||
|
||||
if (!wirelessSecuritySettings)
|
||||
return true;
|
||||
|
||||
return wirelessSettings.ap_security_compatible(wirelessSecuritySettings, ap.flags, ap.wpa_flags, ap.rsn_flags, ap.mode);
|
||||
},
|
||||
|
||||
_createActiveConnectionItem: function() {
|
||||
let activeAp = this.device.active_access_point;
|
||||
let icon, title;
|
||||
@ -1473,6 +1480,48 @@ NMDeviceWireless.prototype = {
|
||||
return connection;
|
||||
},
|
||||
|
||||
_createNetworkItem: function(apObj, position) {
|
||||
if(apObj.connections.length > 0) {
|
||||
if (apObj.connections.length == 1)
|
||||
apObj.item = this._createAPItem(apObj.connections[0], apObj, false);
|
||||
else {
|
||||
let title = apObj.ssidText;
|
||||
apObj.item = new PopupMenu.PopupSubMenuMenuItem(title);
|
||||
apObj.item._apObj = apObj;
|
||||
for (let i = 0; i < apObj.connections.length; i++)
|
||||
apObj.item.menu.addMenuItem(this._createAPItem(apObj.connections[i], apObj, true));
|
||||
}
|
||||
} else {
|
||||
apObj.item = new NMNetworkMenuItem(apObj.accessPoints);
|
||||
apObj.item._apObj = apObj;
|
||||
apObj.item.connect('activate', Lang.bind(this, function() {
|
||||
let accessPoints = sortAccessPoints(apObj.accessPoints);
|
||||
if ( (accessPoints[0]._secType == NMAccessPointSecurity.WPA2_ENT)
|
||||
|| (accessPoints[0]._secType == NMAccessPointSecurity.WPA_ENT)) {
|
||||
// 802.1x-enabled APs get handled by nm-applet for now...
|
||||
this._applet_proxy.ConnectTo8021xNetworkRemote(this.device.get_path(),
|
||||
accessPoints[0].dbus_path,
|
||||
Lang.bind(this, function(results, err) {
|
||||
if (err)
|
||||
log(err);
|
||||
}));
|
||||
} else {
|
||||
let connection = this._createAutomaticConnection(apObj);
|
||||
this._client.add_and_activate_connection(connection, this.device, accessPoints[0].dbus_path, null)
|
||||
}
|
||||
}));
|
||||
}
|
||||
if (position < NUM_VISIBLE_NETWORKS)
|
||||
this.section.addMenuItem(apObj.item);
|
||||
else {
|
||||
if (!this._overflowItem) {
|
||||
this._overflowItem = new PopupMenu.PopupSubMenuMenuItem(_("More..."));
|
||||
this.section.addMenuItem(this._overflowItem);
|
||||
}
|
||||
this._overflowItem.menu.addMenuItem(apObj.item, position - NUM_VISIBLE_NETWORKS);
|
||||
}
|
||||
},
|
||||
|
||||
_createSection: function() {
|
||||
if (!this._shouldShowConnectionList())
|
||||
return;
|
||||
@ -1482,47 +1531,14 @@ NMDeviceWireless.prototype = {
|
||||
this.section.addMenuItem(this._activeConnectionItem);
|
||||
}
|
||||
|
||||
let activeAp = this.device.active_access_point;
|
||||
let activeApSsid = activeAp ? activeAp.get_ssid() : null;
|
||||
|
||||
// we want five access points in the menu, including the active one
|
||||
let numItems = this._activeConnection ? 4 : 5;
|
||||
let activeOffset = this._activeConnectionItem ? 1 : 0;
|
||||
|
||||
for(let j = 0; j < this._networks.length; j++) {
|
||||
let apObj = this._networks[j];
|
||||
if(activeAp && ssidCompare(apObj.ssid, activeApSsid))
|
||||
if (apObj == this._activeNetwork)
|
||||
continue;
|
||||
|
||||
let menuItem;
|
||||
if(apObj.connections.length > 0) {
|
||||
if (apObj.connections.length == 1)
|
||||
apObj.item = this._createAPItem(apObj.connections[0], apObj, false);
|
||||
else {
|
||||
let title = NetworkManager.utils_ssid_to_utf8(apObj.ssid) || _("<unknown>");
|
||||
apObj.item = new PopupMenu.PopupSubMenuMenuItem(title);
|
||||
apObj.item._apObj = apObj;
|
||||
for (let i = 0; i < apObj.connections.length; i++)
|
||||
apObj.item.menu.addMenuItem(this._createAPItem(apObj.connections[i], apObj, true));
|
||||
}
|
||||
} else {
|
||||
apObj.item = new NMNetworkMenuItem(apObj.accessPoints);
|
||||
apObj.item._apObj = apObj;
|
||||
apObj.item.connect('activate', Lang.bind(this, function() {
|
||||
let connection = this._createAutomaticConnection(apObj);
|
||||
let accessPoints = sortAccessPoints(apObj.accessPoints);
|
||||
this._client.add_and_activate_connection(connection, this.device, accessPoints[0].dbus_path, null)
|
||||
}));
|
||||
}
|
||||
|
||||
if (j < numItems)
|
||||
this.section.addMenuItem(apObj.item);
|
||||
else {
|
||||
if (!this._overflowItem) {
|
||||
this._overflowItem = new PopupMenu.PopupSubMenuMenuItem(_("More..."));
|
||||
this.section.addMenuItem(this._overflowItem);
|
||||
}
|
||||
this._overflowItem.menu.addMenuItem(apObj.item);
|
||||
}
|
||||
this._createNetworkItem(apObj, j + activeOffset);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
@ -11,9 +11,6 @@ const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
const Util = imports.misc.util;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const BUS_NAME = 'org.gnome.PowerManager';
|
||||
const OBJECT_PATH = '/org/gnome/PowerManager';
|
||||
|
||||
@ -115,15 +112,15 @@ Indicator.prototype = {
|
||||
let timestring;
|
||||
if (time > 60) {
|
||||
if (minutes == 0) {
|
||||
timestring = Gettext.ngettext("%d hour remaining", "%d hours remaining", hours).format(hours);
|
||||
timestring = ngettext("%d hour remaining", "%d hours remaining", hours).format(hours);
|
||||
} else {
|
||||
/* TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining" */
|
||||
let template = _("%d %s %d %s remaining");
|
||||
|
||||
timestring = template.format (hours, Gettext.ngettext("hour", "hours", hours), minutes, Gettext.ngettext("minute", "minutes", minutes));
|
||||
timestring = template.format (hours, ngettext("hour", "hours", hours), minutes, ngettext("minute", "minutes", minutes));
|
||||
}
|
||||
} else
|
||||
timestring = Gettext.ngettext("%d minute remaining", "%d minutes remaining", minutes).format(minutes);
|
||||
timestring = ngettext("%d minute remaining", "%d minutes remaining", minutes).format(minutes);
|
||||
this._batteryItem.label.text = timestring;
|
||||
}
|
||||
this._primaryPercentage.text = Math.round(percentage) + '%';
|
||||
|
@ -13,9 +13,6 @@ const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
const Util = imports.misc.util;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const VOLUME_ADJUSTMENT_STEP = 0.05; /* Volume adjustment step in % */
|
||||
|
||||
const VOLUME_NOTIFY_ID = 1;
|
||||
|
@ -9,8 +9,6 @@ const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Tp = imports.gi.TelepathyGLib;
|
||||
const UPowerGlib = imports.gi.UPowerGlib;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const GnomeSession = imports.misc.gnomeSession;
|
||||
const Main = imports.ui.main;
|
||||
|
@ -9,9 +9,6 @@ const Signals = imports.signals;
|
||||
const St = imports.gi.St;
|
||||
const Tpl = imports.gi.TelepathyLogger;
|
||||
const Tp = imports.gi.TelepathyGLib;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
const C_ = Gettext.pgettext;
|
||||
|
||||
const History = imports.misc.history;
|
||||
const Main = imports.ui.main;
|
||||
@ -80,14 +77,9 @@ Client.prototype = {
|
||||
// The second argument, recover, means _observeChannels will be run
|
||||
// for any existing channel as well.
|
||||
let dbus = Tp.DBusDaemon.dup();
|
||||
this._observer = Tp.SimpleObserver.new(dbus, true, 'GnomeShell', true,
|
||||
Lang.bind(this, this._observeChannels));
|
||||
|
||||
// We only care about single-user text-based chats
|
||||
let props = {};
|
||||
props[Tp.PROP_CHANNEL_CHANNEL_TYPE] = Tp.IFACE_CHANNEL_TYPE_TEXT;
|
||||
props[Tp.PROP_CHANNEL_TARGET_HANDLE_TYPE] = Tp.HandleType.CONTACT;
|
||||
this._observer.add_observer_filter(props);
|
||||
this._observer = Shell.TpClient.new(dbus);
|
||||
this._observer.set_observe_channels_func(
|
||||
Lang.bind(this, this._observeChannels));
|
||||
|
||||
try {
|
||||
this._observer.register();
|
||||
@ -294,6 +286,9 @@ Source.prototype = {
|
||||
},
|
||||
|
||||
_messageReceived: function(channel, message) {
|
||||
if (message.get_message_type() == Tp.ChannelTextMessageType.DELIVERY_REPORT)
|
||||
return;
|
||||
|
||||
message = makeMessageFromTpMessage(message, NotificationDirection.RECEIVED);
|
||||
this._notification.appendMessage(message);
|
||||
this.notify();
|
||||
@ -521,18 +516,16 @@ Notification.prototype = {
|
||||
},
|
||||
|
||||
appendAliasChange: function(oldAlias, newAlias) {
|
||||
// FIXME: uncomment this after 3.0 string freeze ends
|
||||
oldAlias = GLib.markup_escape_text(oldAlias, -1);
|
||||
newAlias = GLib.markup_escape_text(newAlias, -1);
|
||||
|
||||
// oldAlias = GLib.markup_escape_text(oldAlias, -1);
|
||||
// newAlias = GLib.markup_escape_text(newAlias, -1);
|
||||
|
||||
// /* Translators: this is the other person changing their old IM name to their new
|
||||
// IM name. */
|
||||
// let message = '<i>' + _("%s is now known as %s").format(oldAlias, newAlias) + '</i>';
|
||||
// let label = this.addBody(message, true);
|
||||
// label.add_style_class_name('chat-meta-message');
|
||||
// this._history.unshift({ actor: label, time: (Date.now() / 1000), realMessage: false });
|
||||
// this.update(newAlias, null, { customContent: true });
|
||||
/* Translators: this is the other person changing their old IM name to their new
|
||||
IM name. */
|
||||
let message = '<i>' + _("%s is now known as %s").format(oldAlias, newAlias) + '</i>';
|
||||
let label = this.addBody(message, true);
|
||||
label.add_style_class_name('chat-meta-message');
|
||||
this._history.unshift({ actor: label, time: (Date.now() / 1000), realMessage: false });
|
||||
this.update(newAlias, null, { customContent: true });
|
||||
},
|
||||
|
||||
_onEntryActivated: function() {
|
||||
|
@ -8,8 +8,6 @@ const Signals = imports.signals;
|
||||
const Lang = imports.lang;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const Search = imports.ui.search;
|
||||
|
@ -2,8 +2,6 @@
|
||||
|
||||
const Lang = imports.lang;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const MessageTray = imports.ui.messageTray;
|
||||
|
@ -237,7 +237,7 @@ WindowClone.prototype = {
|
||||
this.emit('zoom-start');
|
||||
|
||||
if (!this._zoomLightbox)
|
||||
this._zoomLightbox = new Lightbox.Lightbox(global.stage,
|
||||
this._zoomLightbox = new Lightbox.Lightbox(Main.uiGroup,
|
||||
{ fadeTime: LIGHTBOX_FADE_TIME });
|
||||
this._zoomLightbox.show();
|
||||
|
||||
@ -248,7 +248,7 @@ WindowClone.prototype = {
|
||||
this._zoomGlobalOrig.setPosition.apply(this._zoomGlobalOrig, this.actor.get_transformed_position());
|
||||
this._zoomGlobalOrig.setScale(width / this.actor.width, height / this.actor.height);
|
||||
|
||||
this.actor.reparent(global.stage);
|
||||
this.actor.reparent(Main.uiGroup);
|
||||
this._zoomLightbox.highlight(this.actor);
|
||||
|
||||
[this.actor.x, this.actor.y] = this._zoomGlobalOrig.getPosition();
|
||||
@ -296,6 +296,9 @@ WindowClone.prototype = {
|
||||
},
|
||||
|
||||
_onDragBegin : function (draggable, time) {
|
||||
if (this._zooming)
|
||||
this._zoomEnd();
|
||||
|
||||
[this.dragOrigX, this.dragOrigY] = this.actor.get_position();
|
||||
this.dragOrigScale = this.actor.scale_x;
|
||||
this.inDrag = true;
|
||||
@ -394,6 +397,8 @@ WindowOverlay.prototype = {
|
||||
|
||||
show: function() {
|
||||
this._hidden = false;
|
||||
if (this._windowClone.actor.has_pointer)
|
||||
this.closeButton.show();
|
||||
this.title.show();
|
||||
},
|
||||
|
||||
|
@ -7,8 +7,6 @@ const Meta = imports.gi.Meta;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Signals = imports.signals;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const DND = imports.ui.dnd;
|
||||
const Main = imports.ui.main;
|
||||
@ -201,12 +199,10 @@ WorkspacesView.prototype = {
|
||||
|
||||
Tweener.removeTweens(workspace.actor);
|
||||
|
||||
let opacity = (this._inDrag && w != active) ? 200 : 255;
|
||||
let y = (w - active) * (this._height + this._spacing + this._workspaceRatioSpacing);
|
||||
|
||||
if (showAnimation) {
|
||||
let params = { y: y,
|
||||
opacity: opacity,
|
||||
time: WORKSPACE_SWITCH_TIME,
|
||||
transition: 'easeOutQuad'
|
||||
};
|
||||
@ -224,7 +220,6 @@ WorkspacesView.prototype = {
|
||||
Tweener.addTween(workspace.actor, params);
|
||||
} else {
|
||||
workspace.actor.set_position(0, y);
|
||||
workspace.actor.opacity = opacity;
|
||||
if (w == 0)
|
||||
this._updateVisibility();
|
||||
}
|
||||
@ -439,20 +434,14 @@ WorkspacesView.prototype = {
|
||||
if (topWorkspace) {
|
||||
if (topWorkspace.actor.contains(dragEvent.targetActor)) {
|
||||
hoverWorkspace = topWorkspace;
|
||||
topWorkspace.opacity = topWorkspace.actor.opacity = 255;
|
||||
result = topWorkspace.handleDragOver(dragEvent.source, dragEvent.dragActor);
|
||||
} else {
|
||||
topWorkspace.opacity = topWorkspace.actor.opacity = 200;
|
||||
}
|
||||
}
|
||||
|
||||
if (bottomWorkspace) {
|
||||
if (bottomWorkspace.actor.contains(dragEvent.targetActor)) {
|
||||
hoverWorkspace = bottomWorkspace;
|
||||
bottomWorkspace.opacity = bottomWorkspace.actor.opacity = 255;
|
||||
result = bottomWorkspace.handleDragOver(dragEvent.source, dragEvent.dragActor);
|
||||
} else {
|
||||
bottomWorkspace.opacity = bottomWorkspace.actor.opacity = 200;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
af
|
||||
an
|
||||
ar
|
||||
bg
|
||||
bn
|
||||
@ -9,6 +10,7 @@ da
|
||||
de
|
||||
el
|
||||
en_GB
|
||||
eo
|
||||
es
|
||||
et
|
||||
eu
|
||||
@ -38,6 +40,7 @@ pt
|
||||
pt_BR
|
||||
ro
|
||||
ru
|
||||
sk
|
||||
sl
|
||||
sr
|
||||
sr@latin
|
||||
|
285
po/es.po
@ -2,17 +2,17 @@
|
||||
# Copyright (C) 2009 gnome-shell's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the gnome-shell package.
|
||||
# Benjamín Valero Espinosa <benjavalero@gmail.com>, 2011.
|
||||
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2010, 2011.
|
||||
# Jorge González <jorgegonz@svn.gnome.org>, 2009, 2010, 2011.
|
||||
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2010, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell.master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-03-25 20:20+0000\n"
|
||||
"PO-Revision-Date: 2011-04-21 18:47+0200\n"
|
||||
"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
|
||||
"POT-Creation-Date: 2011-04-28 21:32+0000\n"
|
||||
"PO-Revision-Date: 2011-04-29 11:09+0200\n"
|
||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||
"Language-Team: Español <gnome-es-list@gnome.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -96,16 +96,16 @@ msgid ""
|
||||
"at the optimal thread count on the system."
|
||||
msgstr ""
|
||||
"Establece la tubería GStreamer usada para codificar grabaciones. Sigue la "
|
||||
"sintaxis usada para gst-launch. La tubería debería tener un sumidero "
|
||||
"(«sink») de ensamblaje/sesensamblaje donde el vídeo que se está grabando se "
|
||||
"graba. Generalmente tendrá un origen de ensamblado/desensamblado; la salida "
|
||||
"de ese punto se escibirá en el archivo de salida. No obstante la tubería "
|
||||
"también puede tomar parte en su propia salida; esto se puede usar para "
|
||||
"enviar la salida a un servidor «icecast» a través de shout2send o similar. "
|
||||
"Cuando no está establecido o lo está a un valor vacío, se usará la tubería "
|
||||
"predeterminada. Actualmente es «videorate ! vp8enc quality=10 speed=2 "
|
||||
"threads=%T ! queue ! webmmux» y greba en WEBM usando el códec VP8. Se usa %T "
|
||||
"como suposición para el número de hilos óptimos en el sistema."
|
||||
"sintaxis usada para gst-launch. La tubería debería tener un sumidero («sink») "
|
||||
"de ensamblaje/sesensamblaje donde el vídeo que se está grabando se graba. "
|
||||
"Generalmente tendrá un origen de ensamblado/desensamblado; la salida de ese "
|
||||
"punto se escibirá en el archivo de salida. No obstante la tubería también "
|
||||
"puede tomar parte en su propia salida; esto se puede usar para enviar la "
|
||||
"salida a un servidor «icecast» a través de shout2send o similar. Cuando no "
|
||||
"está establecido o lo está a un valor vacío, se usará la tubería "
|
||||
"predeterminada. Actualmente es «videorate ! vp8enc quality=10 speed=2 threads="
|
||||
"%T ! queue ! webmmux» y greba en WEBM usando el códec VP8. Se usa %T como "
|
||||
"suposición para el número de hilos óptimos en el sistema."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
@ -190,27 +190,27 @@ msgid "Execution of '%s' failed:"
|
||||
msgstr "Falló la ejecución de «%s»:"
|
||||
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:230
|
||||
#: ../js/ui/appDisplay.js:260
|
||||
msgid "All"
|
||||
msgstr "Todas"
|
||||
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
#: ../js/ui/appDisplay.js:359
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "APLICACIONES"
|
||||
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
#: ../js/ui/appDisplay.js:385
|
||||
msgid "SETTINGS"
|
||||
msgstr "CONFIGURACIÓN"
|
||||
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
#: ../js/ui/appDisplay.js:658
|
||||
msgid "New Window"
|
||||
msgstr "Ventana nueva"
|
||||
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
#: ../js/ui/appDisplay.js:661
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Quitar de los favoritos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
#: ../js/ui/appDisplay.js:662
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Añadir a los favoritos"
|
||||
|
||||
@ -343,13 +343,13 @@ msgid "Nothing Scheduled"
|
||||
msgstr "Nada programado"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||
#: ../js/ui/calendar.js:720
|
||||
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:487
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %d de %B"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||
#: ../js/ui/calendar.js:723
|
||||
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:490
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%A, %d de %B de %Y"
|
||||
@ -370,7 +370,7 @@ msgstr "Esta semana"
|
||||
msgid "Next week"
|
||||
msgstr "La semana que viene"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:994
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1037
|
||||
msgid "Remove"
|
||||
msgstr "Quitar"
|
||||
|
||||
@ -498,8 +498,8 @@ msgstr "El sistema se reiniciará automáticamente en %d segundos."
|
||||
msgid "Restarting the system."
|
||||
msgstr "Reiniciando el sistema."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
#: ../js/ui/endSessionDialog.js:413 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:491
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
@ -533,11 +533,11 @@ msgstr "Ver fuente"
|
||||
msgid "Web Page"
|
||||
msgstr "Página web"
|
||||
|
||||
#: ../js/ui/messageTray.js:987
|
||||
#: ../js/ui/messageTray.js:1030
|
||||
msgid "Open"
|
||||
msgstr "Abrir"
|
||||
|
||||
#: ../js/ui/messageTray.js:2145
|
||||
#: ../js/ui/messageTray.js:2194
|
||||
msgid "System Information"
|
||||
msgstr "Información del sistema"
|
||||
|
||||
@ -560,18 +560,18 @@ msgid "Dash"
|
||||
msgstr "Tablero"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:515
|
||||
#: ../js/ui/panel.js:533
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Salir de %s"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:878
|
||||
#: ../js/ui/panel.js:913
|
||||
msgid "Activities"
|
||||
msgstr "Actividades"
|
||||
|
||||
#: ../js/ui/panel.js:979
|
||||
#: ../js/ui/panel.js:1015
|
||||
msgid "Top Bar"
|
||||
msgstr "Barra superior"
|
||||
|
||||
@ -604,11 +604,15 @@ msgstr "Administrador"
|
||||
msgid "Authenticate"
|
||||
msgstr "Autenticar"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:260
|
||||
#. 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/polkitAuthenticationAgent.js:264
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr "Inténtelo de nuevo,"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:272
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:276
|
||||
msgid "Password:"
|
||||
msgstr "Contraseña:"
|
||||
|
||||
@ -625,11 +629,11 @@ msgstr "toggle-switch-intl"
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Introduzca un comando:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:310
|
||||
#: ../js/ui/searchDisplay.js:313
|
||||
msgid "Searching..."
|
||||
msgstr "Buscando…"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:324
|
||||
#: ../js/ui/searchDisplay.js:327
|
||||
msgid "No matching results."
|
||||
msgstr "No se encontró ningún resultado coincidente."
|
||||
|
||||
@ -712,9 +716,9 @@ msgstr "Contraste alto"
|
||||
msgid "Large Text"
|
||||
msgstr "Texto grande"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:264
|
||||
#: ../js/ui/status/bluetooth.js:358 ../js/ui/status/bluetooth.js:392
|
||||
#: ../js/ui/status/bluetooth.js:432 ../js/ui/status/bluetooth.js:465
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -727,101 +731,102 @@ msgid "Send Files to Device..."
|
||||
msgstr "Enviar archivos al dispositivo…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:70
|
||||
msgid "Setup a New Device..."
|
||||
#| msgid "Setup a New Device..."
|
||||
msgid "Set up a New Device..."
|
||||
msgstr "Configurar un dispositivo nuevo…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:95
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Configuración de Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:188
|
||||
#: ../js/ui/status/bluetooth.js:215
|
||||
msgid "Connection"
|
||||
msgstr "Conexión"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:224
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
msgid "Send Files..."
|
||||
msgstr "Enviar archivos…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:229
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
msgid "Browse Files..."
|
||||
msgstr "Examinar archivos…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:238
|
||||
#: ../js/ui/status/bluetooth.js:265
|
||||
msgid "Error browsing device"
|
||||
msgstr "Error al examinar el dispositivo"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:239
|
||||
#: ../js/ui/status/bluetooth.js:266
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "No se puede examinar el dispositivo solicitado, el error es «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
#: ../js/ui/status/bluetooth.js:274
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Configuración del teclado"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:252
|
||||
#: ../js/ui/status/bluetooth.js:279
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Ajustes del ratón…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
|
||||
#: ../js/ui/status/bluetooth.js:286 ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "Configuración del sonido"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#: ../js/ui/status/bluetooth.js:393
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Solicitud de autorización de %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:374
|
||||
#: ../js/ui/status/bluetooth.js:399
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "El dispositivo %s quiere acceder al servicio «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:376
|
||||
#: ../js/ui/status/bluetooth.js:401
|
||||
msgid "Always grant access"
|
||||
msgstr "Conceder acceso siempre"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
#: ../js/ui/status/bluetooth.js:402
|
||||
msgid "Grant this time only"
|
||||
msgstr "Conceder sólo esta vez"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:403
|
||||
msgid "Reject"
|
||||
msgstr "Rechazar"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#: ../js/ui/status/bluetooth.js:433
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Confirmación de emparejamiento para «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
|
||||
#: ../js/ui/status/bluetooth.js:439 ../js/ui/status/bluetooth.js:473
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "El dispositivo «%s» quiere emparejarse con este equipo"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#: ../js/ui/status/bluetooth.js:440
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Confirme que el PIN mostrado en «%s» coincide con el del dispositivo."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
#: ../js/ui/status/bluetooth.js:442
|
||||
msgid "Matches"
|
||||
msgstr "Coincide"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
#: ../js/ui/status/bluetooth.js:443
|
||||
msgid "Does not match"
|
||||
msgstr "No coincide"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:441
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Solicitud de emparejamiento para «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:449
|
||||
#: ../js/ui/status/bluetooth.js:474
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Introduzca el PIN mencionado en el dispositivo."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:465
|
||||
#: ../js/ui/status/bluetooth.js:490
|
||||
msgid "OK"
|
||||
msgstr "Aceptar"
|
||||
|
||||
@ -833,139 +838,139 @@ msgstr "Mostrar la distribución del teclado…"
|
||||
msgid "Localization Settings"
|
||||
msgstr "Configuración regional"
|
||||
|
||||
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1437
|
||||
#: ../js/ui/status/network.js:113
|
||||
msgid "<unknown>"
|
||||
msgstr "<desconocido>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:295
|
||||
#: ../js/ui/status/network.js:330
|
||||
msgid "disabled"
|
||||
msgstr "desactivada"
|
||||
|
||||
#: ../js/ui/status/network.js:478
|
||||
#: ../js/ui/status/network.js:528
|
||||
msgid "connecting..."
|
||||
msgstr "conectando…"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:481
|
||||
#: ../js/ui/status/network.js:531
|
||||
msgid "authentication required"
|
||||
msgstr "se necesita autenticación"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:491
|
||||
#: ../js/ui/status/network.js:541
|
||||
msgid "firmware missing"
|
||||
msgstr "falta el «firmware»"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:498
|
||||
#: ../js/ui/status/network.js:548
|
||||
msgid "cable unplugged"
|
||||
msgstr "cable desconectado"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:503
|
||||
#: ../js/ui/status/network.js:553
|
||||
msgid "unavailable"
|
||||
msgstr "no disponible"
|
||||
|
||||
#: ../js/ui/status/network.js:505
|
||||
#: ../js/ui/status/network.js:555
|
||||
msgid "connection failed"
|
||||
msgstr "falló la conexión"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:585 ../js/ui/status/network.js:1385
|
||||
#: ../js/ui/status/network.js:635 ../js/ui/status/network.js:1532
|
||||
msgid "Connected (private)"
|
||||
msgstr "Conectada (privada)"
|
||||
|
||||
#: ../js/ui/status/network.js:666
|
||||
#: ../js/ui/status/network.js:720
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Ethernet automática"
|
||||
|
||||
#: ../js/ui/status/network.js:741
|
||||
#: ../js/ui/status/network.js:795
|
||||
msgid "Auto broadband"
|
||||
msgstr "Banda ancha automática"
|
||||
|
||||
#: ../js/ui/status/network.js:744
|
||||
#: ../js/ui/status/network.js:798
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Marcado automático"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:887 ../js/ui/status/network.js:1397
|
||||
#: ../js/ui/status/network.js:944 ../js/ui/status/network.js:1544
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "%s automática"
|
||||
|
||||
#: ../js/ui/status/network.js:889
|
||||
#: ../js/ui/status/network.js:946
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Bluetooth automático"
|
||||
|
||||
#: ../js/ui/status/network.js:1399
|
||||
#: ../js/ui/status/network.js:1546
|
||||
msgid "Auto wireless"
|
||||
msgstr "Inalámbrica automática"
|
||||
|
||||
#: ../js/ui/status/network.js:1457
|
||||
#: ../js/ui/status/network.js:1583
|
||||
msgid "More..."
|
||||
msgstr "Más…"
|
||||
|
||||
#: ../js/ui/status/network.js:1480
|
||||
#: ../js/ui/status/network.js:1625
|
||||
msgid "Enable networking"
|
||||
msgstr "Activar red"
|
||||
|
||||
#: ../js/ui/status/network.js:1492
|
||||
#: ../js/ui/status/network.js:1637
|
||||
msgid "Wired"
|
||||
msgstr "Cableada"
|
||||
|
||||
#: ../js/ui/status/network.js:1503
|
||||
#: ../js/ui/status/network.js:1648
|
||||
msgid "Wireless"
|
||||
msgstr "Inalámbrica"
|
||||
|
||||
#: ../js/ui/status/network.js:1513
|
||||
#: ../js/ui/status/network.js:1658
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Banda ancha móvil"
|
||||
|
||||
#: ../js/ui/status/network.js:1523
|
||||
#: ../js/ui/status/network.js:1668
|
||||
msgid "VPN Connections"
|
||||
msgstr "Conexiones VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1532
|
||||
#: ../js/ui/status/network.js:1680
|
||||
msgid "Network Settings"
|
||||
msgstr "Configuración de la red"
|
||||
|
||||
#: ../js/ui/status/network.js:1827
|
||||
#: ../js/ui/status/network.js:1974
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "Ahora está conectado a la red de banda ancha móvil «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1831
|
||||
#: ../js/ui/status/network.js:1978
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "Ahora está conectado a la red inalámbrica «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1835
|
||||
#: ../js/ui/status/network.js:1982
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "Ahora está conectado a la red cableada «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1839
|
||||
#: ../js/ui/status/network.js:1986
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "Ahora está conectado a la VPN «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1844
|
||||
#: ../js/ui/status/network.js:1991
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "Ahora está conectado a «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1852
|
||||
#: ../js/ui/status/network.js:1999
|
||||
msgid "Connection established"
|
||||
msgstr "Conexión establecida"
|
||||
|
||||
#: ../js/ui/status/network.js:1974
|
||||
#: ../js/ui/status/network.js:2125
|
||||
msgid "Networking is disabled"
|
||||
msgstr "La red está desactivada"
|
||||
|
||||
#: ../js/ui/status/network.js:2099
|
||||
#: ../js/ui/status/network.js:2250
|
||||
msgid "Network Manager"
|
||||
msgstr "Gestor de la red"
|
||||
|
||||
@ -1067,22 +1072,22 @@ msgstr "Volumen"
|
||||
msgid "Microphone"
|
||||
msgstr "Micrófono"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:332
|
||||
#: ../js/ui/telepathyClient.js:330
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s está conectado/a."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:337
|
||||
#: ../js/ui/telepathyClient.js:335
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s está desconectado/a."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#: ../js/ui/telepathyClient.js:338
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s está ausente."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#: ../js/ui/telepathyClient.js:341
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s está ocupado/a."
|
||||
@ -1090,11 +1095,18 @@ msgstr "%s está ocupado/a."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:474
|
||||
#: ../js/ui/telepathyClient.js:479
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Enviado a las %X el %A"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:524
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "Ahora %s se llama %s"
|
||||
|
||||
#. Translators: this is the text displayed
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
@ -1139,7 +1151,7 @@ msgstr[1] "%u entradas"
|
||||
msgid "System Sounds"
|
||||
msgstr "Sonidos del sistema"
|
||||
|
||||
#: ../src/main.c:446
|
||||
#: ../src/main.c:445
|
||||
msgid "Print version"
|
||||
msgstr "Imprimir versión"
|
||||
|
||||
@ -1148,38 +1160,6 @@ msgstr "Imprimir versión"
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Falló al lanzar «%s»"
|
||||
|
||||
#: ../src/shell-global.c:1395
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Hace menos de un minuto"
|
||||
|
||||
#: ../src/shell-global.c:1399
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "Hace %d minuto"
|
||||
msgstr[1] "Hace %d minutos"
|
||||
|
||||
#: ../src/shell-global.c:1404
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "Hace %d hora"
|
||||
msgstr[1] "Hace %d horas"
|
||||
|
||||
#: ../src/shell-global.c:1409
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "Hace %d día"
|
||||
msgstr[1] "Hace %d días"
|
||||
|
||||
#: ../src/shell-global.c:1414
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "Hace %d semana"
|
||||
msgstr[1] "Hace %d semanas"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:80
|
||||
msgid "United Kingdom"
|
||||
msgstr "Reino Unido"
|
||||
@ -1212,6 +1192,29 @@ msgstr "Sistema de archivos"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Less than a minute ago"
|
||||
#~ msgstr "Hace menos de un minuto"
|
||||
|
||||
#~ msgid "%d minute ago"
|
||||
#~ msgid_plural "%d minutes ago"
|
||||
#~ msgstr[0] "Hace %d minuto"
|
||||
#~ msgstr[1] "Hace %d minutos"
|
||||
|
||||
#~ msgid "%d hour ago"
|
||||
#~ msgid_plural "%d hours ago"
|
||||
#~ msgstr[0] "Hace %d hora"
|
||||
#~ msgstr[1] "Hace %d horas"
|
||||
|
||||
#~ msgid "%d day ago"
|
||||
#~ msgid_plural "%d days ago"
|
||||
#~ msgstr[0] "Hace %d día"
|
||||
#~ msgstr[1] "Hace %d días"
|
||||
|
||||
#~ msgid "%d week ago"
|
||||
#~ msgid_plural "%d weeks ago"
|
||||
#~ msgstr[0] "Hace %d semana"
|
||||
#~ msgstr[1] "Hace %d semanas"
|
||||
|
||||
#~ msgid "Shut Down"
|
||||
#~ msgstr "Apagar"
|
||||
|
||||
@ -1239,9 +1242,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "Screen Keyboard"
|
||||
#~ msgstr "Teclado en pantalla"
|
||||
|
||||
#~ msgid "%s is now known as %s"
|
||||
#~ msgstr "Ahora %s se llama %s"
|
||||
|
||||
#~ msgid "PREFERENCES"
|
||||
#~ msgstr "PREFERENCIAS"
|
||||
|
||||
@ -1416,8 +1416,8 @@ msgstr "%1$s: %2$s"
|
||||
#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
|
||||
#~ "in time."
|
||||
#~ msgstr ""
|
||||
#~ "Si es cierta y el formato es «12-horas» o «24-horas», muestra los "
|
||||
#~ "segundos en la hora."
|
||||
#~ "Si es cierta y el formato es «12-horas» o «24-horas», muestra los segundos "
|
||||
#~ "en la hora."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "This key specifies the format used by the panel clock when the format key "
|
||||
@ -1434,19 +1434,18 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid ""
|
||||
#~ "This key specifies the hour format used by the panel clock. Possible "
|
||||
#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
|
||||
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. "
|
||||
#~ "1970-01-01. If set to \"custom\", the clock will display time according "
|
||||
#~ "to the format specified in the custom_format key. Note that if set to "
|
||||
#~ "either \"unix\" or \"custom\", the show_date and show_seconds keys are "
|
||||
#~ "ignored."
|
||||
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. 1970-"
|
||||
#~ "01-01. If set to \"custom\", the clock will display time according to the "
|
||||
#~ "format specified in the custom_format key. Note that if set to either "
|
||||
#~ "\"unix\" or \"custom\", the show_date and show_seconds keys are ignored."
|
||||
#~ msgstr ""
|
||||
#~ "Esta clave especifica el formato de la hora especificado por el reloj del "
|
||||
#~ "panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 "
|
||||
#~ "horas), «unix» y «custom» (personalizado).Si se establece a «unix» el "
|
||||
#~ "reloj mostrará la hora en segundos desde la época (1 de enero de 1970). "
|
||||
#~ "Si se establece a «custom» el reloj mostrará la hora según el formato "
|
||||
#~ "especificado en la clave «custom_format». Note que si se establece a "
|
||||
#~ "«unix» o «custom» se ignoran las claves «show_date» y «show_seconds»."
|
||||
#~ "panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 horas), "
|
||||
#~ "«unix» y «custom» (personalizado).Si se establece a «unix» el reloj mostrará "
|
||||
#~ "la hora en segundos desde la época (1 de enero de 1970). Si se establece "
|
||||
#~ "a «custom» el reloj mostrará la hora según el formato especificado en la "
|
||||
#~ "clave «custom_format». Note que si se establece a «unix» o «custom» se "
|
||||
#~ "ignoran las claves «show_date» y «show_seconds»."
|
||||
|
||||
#~ msgid "Clock Format"
|
||||
#~ msgstr "Formato del reloj"
|
||||
|
56
po/fi.po
@ -2,13 +2,26 @@
|
||||
# Copyright (C) 2009-2011 Timo Jyrinki
|
||||
# This file is distributed under the same license as the gnome-shell package.
|
||||
# Timo Jyrinki <timo.jyrinki@iki.fi>, 2009-2011.
|
||||
# Marko Myllynen <myllynen@redhat.com>, 2011.
|
||||
#
|
||||
# IMPORTANT NOTICE!
|
||||
#
|
||||
# Some date / time strings are currently non-optimal. The optimal CLDR
|
||||
# compliant versions are included as comments in the respective strings.
|
||||
#
|
||||
# CLDR: http://kotoistus.fi/suositukset/vahv_kalenterit_cldr1_4.htm
|
||||
#
|
||||
# They should be taken into use as soon as the related bugs are fixed:
|
||||
#
|
||||
# https://bugzilla.gnome.org/show_bug.cgi?id=647320
|
||||
# https://bugzilla.gnome.org/show_bug.cgi?id=648678
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-04-06 12:55+0300\n"
|
||||
"PO-Revision-Date: 2011-04-06 12:55+0300\n"
|
||||
"PO-Revision-Date: 2011-05-05 18:01+0300\n"
|
||||
"Last-Translator: Timo Jyrinki <timo.jyrinki@iki.fi>\n"
|
||||
"Language-Team: Finnish <gnome-fi-laatu@lists.sourceforge.net>\n"
|
||||
"Language: fi\n"
|
||||
@ -199,7 +212,7 @@ msgstr "%s on poistettu suosikeista."
|
||||
#: ../js/ui/calendar.js:66
|
||||
msgctxt "event list time"
|
||||
msgid "All Day"
|
||||
msgstr ""
|
||||
msgstr "Koko päivä"
|
||||
|
||||
#. Translators: Shown in calendar event list, if 24h format
|
||||
#: ../js/ui/calendar.js:71
|
||||
@ -309,19 +322,21 @@ msgstr "la"
|
||||
#. Translators: Text to show if there are no events
|
||||
#: ../js/ui/calendar.js:704
|
||||
msgid "Nothing Scheduled"
|
||||
msgstr ""
|
||||
msgstr "Ei merkintöjä"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:490
|
||||
#msgstr "%A, %-d. %Bta"
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr ""
|
||||
msgstr "%A, %d. %Bta"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:493
|
||||
#msgstr "%A, %-d. %Bta %Y"
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr ""
|
||||
msgstr "%A, %d. %Bta %Y"
|
||||
|
||||
#: ../js/ui/calendar.js:733
|
||||
msgid "Today"
|
||||
@ -329,15 +344,15 @@ msgstr "Tänään"
|
||||
|
||||
#: ../js/ui/calendar.js:737
|
||||
msgid "Tomorrow"
|
||||
msgstr ""
|
||||
msgstr "Huomenna"
|
||||
|
||||
#: ../js/ui/calendar.js:746
|
||||
msgid "This week"
|
||||
msgstr ""
|
||||
msgstr "Tällä viikolla"
|
||||
|
||||
#: ../js/ui/calendar.js:754
|
||||
msgid "Next week"
|
||||
msgstr ""
|
||||
msgstr "Ensi viikolla"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1007
|
||||
msgid "Remove"
|
||||
@ -354,49 +369,58 @@ msgstr "Avaa kalenteri"
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/dateMenu.js:164
|
||||
#msgstr "%a %-d.%-m., %-H.%M.%S"
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %b %e., %h.%M.%S"
|
||||
msgstr "%a %d.%m., %H.%M.%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:165
|
||||
#msgstr "%a %-d.%-m., %-H.%M"
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%a %b %e., %H.%M"
|
||||
msgstr "%a %d.%m., %H.%M"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/dateMenu.js:169
|
||||
#msgstr "%a %-H.%M.%S"
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %H.%M"
|
||||
msgstr "%a %H.%M.%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:170
|
||||
#msgstr "%a %-H.%M"
|
||||
msgid "%a %R"
|
||||
msgstr "%a %H.%M"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/dateMenu.js:177
|
||||
#msgstr "%a %-d.%-m., %-I.%M.%S %p"
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %b %e., %l.%M.%S %p"
|
||||
msgstr "%a %d.%m., %I.%M.%S %p"
|
||||
|
||||
#: ../js/ui/dateMenu.js:178
|
||||
#msgstr "%a %-d.%-m., %-I.%M %p"
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a %b %e.,.%l:%M %p"
|
||||
msgstr "%a %d.%m., %I.%M %p"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/dateMenu.js:182
|
||||
#msgstr "%a %-I.%M.%S %p"
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l.%M.%S %p"
|
||||
msgstr "%a %I.%M.%S %p"
|
||||
|
||||
#: ../js/ui/dateMenu.js:183
|
||||
#msgstr "%a %-I.%M %p"
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %l.%M %p"
|
||||
msgstr "%a %I.%M %p"
|
||||
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
#.
|
||||
#: ../js/ui/dateMenu.js:194
|
||||
#msgstr "%A, %-d. %Bta %Y"
|
||||
msgid "%A %B %e, %Y"
|
||||
msgstr "+%Ana %d. %Bta, %Y"
|
||||
msgstr "%A, %d. %Bta %Y"
|
||||
|
||||
#: ../js/ui/docDisplay.js:19
|
||||
msgid "RECENT ITEMS"
|
||||
|
265
po/he.po
@ -8,10 +8,11 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-03-26 00:54+0200\n"
|
||||
"PO-Revision-Date: 2011-03-26 00:55+0200\n"
|
||||
"POT-Creation-Date: 2011-05-13 13:23+0300\n"
|
||||
"PO-Revision-Date: 2011-05-13 13:23+0200\n"
|
||||
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
|
||||
"Language-Team: Hebrew <sh.yaron@gmail.com>\n"
|
||||
"Language: he\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@ -62,7 +63,7 @@ msgstr "History for command (Alt-F2) dialog"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
msgid "History for the looking glass dialog"
|
||||
msgstr "היסטוריית תיבת הדו־שיח של זכוכית המגדלת"
|
||||
msgstr "History for the looking glass dialog"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||
msgid "If true, display date in the clock, in addition to time."
|
||||
@ -187,27 +188,27 @@ msgid "Execution of '%s' failed:"
|
||||
msgstr "ההרצה של '%s' נכשלה:"
|
||||
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:230
|
||||
#: ../js/ui/appDisplay.js:260
|
||||
msgid "All"
|
||||
msgstr "הכול"
|
||||
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
#: ../js/ui/appDisplay.js:359
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "יישומים"
|
||||
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
#: ../js/ui/appDisplay.js:385
|
||||
msgid "SETTINGS"
|
||||
msgstr "הגדרות"
|
||||
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
#: ../js/ui/appDisplay.js:658
|
||||
msgid "New Window"
|
||||
msgstr "חלון חדש"
|
||||
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
#: ../js/ui/appDisplay.js:661
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "הסרה מהמועדפים"
|
||||
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
#: ../js/ui/appDisplay.js:662
|
||||
msgid "Add to Favorites"
|
||||
msgstr "הוספה למועדפים"
|
||||
|
||||
@ -340,13 +341,13 @@ msgid "Nothing Scheduled"
|
||||
msgstr "היומן ריק"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||
#: ../js/ui/calendar.js:720
|
||||
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:490
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, ה־%e ב%B"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||
#: ../js/ui/calendar.js:723
|
||||
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:493
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%A, ה־%e ב%B, %Y"
|
||||
@ -367,7 +368,7 @@ msgstr "השבוע"
|
||||
msgid "Next week"
|
||||
msgstr "בשבוע הבא"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1000
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1037
|
||||
msgid "Remove"
|
||||
msgstr "הסרה"
|
||||
|
||||
@ -492,8 +493,8 @@ msgstr "המערכת תופעל מחדש בעוד %d שניות."
|
||||
msgid "Restarting the system."
|
||||
msgstr "המערכת מופעלת מחדש"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
#: ../js/ui/endSessionDialog.js:413 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:491
|
||||
msgid "Cancel"
|
||||
msgstr "ביטול"
|
||||
|
||||
@ -527,11 +528,11 @@ msgstr "צפייה במקור"
|
||||
msgid "Web Page"
|
||||
msgstr "דף אינטרנט"
|
||||
|
||||
#: ../js/ui/messageTray.js:993
|
||||
#: ../js/ui/messageTray.js:1030
|
||||
msgid "Open"
|
||||
msgstr "פתיחה"
|
||||
|
||||
#: ../js/ui/messageTray.js:2151
|
||||
#: ../js/ui/messageTray.js:2194
|
||||
msgid "System Information"
|
||||
msgstr "פרטי המערכת"
|
||||
|
||||
@ -554,18 +555,18 @@ msgid "Dash"
|
||||
msgstr "חלונית"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:515
|
||||
#: ../js/ui/panel.js:533
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "יציאה מ־%s"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:878
|
||||
#: ../js/ui/panel.js:913
|
||||
msgid "Activities"
|
||||
msgstr "פעילויות"
|
||||
|
||||
#: ../js/ui/panel.js:979
|
||||
#: ../js/ui/panel.js:1015
|
||||
msgid "Top Bar"
|
||||
msgstr "הסרגל העליון"
|
||||
|
||||
@ -598,11 +599,15 @@ msgstr "מנהל"
|
||||
msgid "Authenticate"
|
||||
msgstr "אימות"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:260
|
||||
#. 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/polkitAuthenticationAgent.js:264
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr "פעולה זו לא הצליחה, נא לנסות שוב. עמך הסליחה."
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:272
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:276
|
||||
msgid "Password:"
|
||||
msgstr "ססמה:"
|
||||
|
||||
@ -619,11 +624,11 @@ msgstr "toggle-switch-intl"
|
||||
msgid "Please enter a command:"
|
||||
msgstr "נא להזין פקודה:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:310
|
||||
#: ../js/ui/searchDisplay.js:313
|
||||
msgid "Searching..."
|
||||
msgstr "בחיפוש..."
|
||||
|
||||
#: ../js/ui/searchDisplay.js:324
|
||||
#: ../js/ui/searchDisplay.js:327
|
||||
msgid "No matching results."
|
||||
msgstr "אין תוצאות תואמות."
|
||||
|
||||
@ -638,7 +643,7 @@ msgstr "השהיה"
|
||||
|
||||
#: ../js/ui/statusMenu.js:184
|
||||
msgid "Available"
|
||||
msgstr "זמין"
|
||||
msgstr "פנוי"
|
||||
|
||||
#: ../js/ui/statusMenu.js:189
|
||||
msgid "Busy"
|
||||
@ -706,9 +711,9 @@ msgstr "ניגודיות גבוהה"
|
||||
msgid "Large Text"
|
||||
msgstr "טקסט גדול"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:264
|
||||
#: ../js/ui/status/bluetooth.js:358 ../js/ui/status/bluetooth.js:392
|
||||
#: ../js/ui/status/bluetooth.js:432 ../js/ui/status/bluetooth.js:465
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -721,101 +726,101 @@ msgid "Send Files to Device..."
|
||||
msgstr "שליחת קובץ להתקן..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:70
|
||||
msgid "Setup a New Device..."
|
||||
msgid "Set up a New Device..."
|
||||
msgstr "הגדרת התקן חדש..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:95
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "הגדרות Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:188
|
||||
#: ../js/ui/status/bluetooth.js:215
|
||||
msgid "Connection"
|
||||
msgstr "חיבור"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:224
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
msgid "Send Files..."
|
||||
msgstr "שליחת קבצים..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:229
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
msgid "Browse Files..."
|
||||
msgstr "עיון בקבצים..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:238
|
||||
#: ../js/ui/status/bluetooth.js:265
|
||||
msgid "Error browsing device"
|
||||
msgstr "שגיאה בעיון בהתקן"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:239
|
||||
#: ../js/ui/status/bluetooth.js:266
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "לא ניתן לעיין בהתקן הנבחר, השגיאה היא '%s'"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
#: ../js/ui/status/bluetooth.js:274
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "הגדרות מקלדת"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:252
|
||||
#: ../js/ui/status/bluetooth.js:279
|
||||
msgid "Mouse Settings"
|
||||
msgstr "הגדרות עכבר"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
|
||||
#: ../js/ui/status/bluetooth.js:286 ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "הגדרות שמע"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#: ../js/ui/status/bluetooth.js:393
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "בקשת אישור מאת %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:374
|
||||
#: ../js/ui/status/bluetooth.js:399
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "ההתקן %s מעוניין לגשת אל השירות '%s'"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:376
|
||||
#: ../js/ui/status/bluetooth.js:401
|
||||
msgid "Always grant access"
|
||||
msgstr "תמיד להעניק גישה"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
#: ../js/ui/status/bluetooth.js:402
|
||||
msgid "Grant this time only"
|
||||
msgstr "הענקת גישה הפעם בלבד"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:403
|
||||
msgid "Reject"
|
||||
msgstr "סירוב"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#: ../js/ui/status/bluetooth.js:433
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "אישור צימוד עבור %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
|
||||
#: ../js/ui/status/bluetooth.js:439 ../js/ui/status/bluetooth.js:473
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "ההתקן %s מעוניין בצימוד עם מחשב זה"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#: ../js/ui/status/bluetooth.js:440
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "נא לאשר האם קוד ה־PIN '%s' תואם את זה שמופיע בהתקן."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
#: ../js/ui/status/bluetooth.js:442
|
||||
msgid "Matches"
|
||||
msgstr "התאמות"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
#: ../js/ui/status/bluetooth.js:443
|
||||
msgid "Does not match"
|
||||
msgstr "אינו תואם"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:441
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "בקשת צימוד עבור %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:449
|
||||
#: ../js/ui/status/bluetooth.js:474
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "נא להזין את קוד ה־PIN המוזכר בהתקן."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:465
|
||||
#: ../js/ui/status/bluetooth.js:490
|
||||
msgid "OK"
|
||||
msgstr "אישור"
|
||||
|
||||
@ -827,139 +832,139 @@ msgstr "הצגת פריסת המקלדת..."
|
||||
msgid "Localization Settings"
|
||||
msgstr "הגדרות אזוריות"
|
||||
|
||||
#: ../js/ui/status/network.js:104 ../js/ui/status/network.js:1453
|
||||
#: ../js/ui/status/network.js:126
|
||||
msgid "<unknown>"
|
||||
msgstr "<לא ידוע>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:311
|
||||
#: ../js/ui/status/network.js:343
|
||||
msgid "disabled"
|
||||
msgstr "מנוטרל"
|
||||
|
||||
#: ../js/ui/status/network.js:494
|
||||
#: ../js/ui/status/network.js:542
|
||||
msgid "connecting..."
|
||||
msgstr "בהתחברות..."
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:497
|
||||
#: ../js/ui/status/network.js:545
|
||||
msgid "authentication required"
|
||||
msgstr "נדרש אימות"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:507
|
||||
#: ../js/ui/status/network.js:555
|
||||
msgid "firmware missing"
|
||||
msgstr "הקושחה חסרה"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:514
|
||||
#: ../js/ui/status/network.js:562
|
||||
msgid "cable unplugged"
|
||||
msgstr "הכבל מנותק"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:519
|
||||
#: ../js/ui/status/network.js:567
|
||||
msgid "unavailable"
|
||||
msgstr "לא זמין"
|
||||
|
||||
#: ../js/ui/status/network.js:521
|
||||
#: ../js/ui/status/network.js:569
|
||||
msgid "connection failed"
|
||||
msgstr "החיבור נכשל"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:601 ../js/ui/status/network.js:1401
|
||||
#: ../js/ui/status/network.js:650 ../js/ui/status/network.js:1459
|
||||
msgid "Connected (private)"
|
||||
msgstr "מחובר (פרטי)"
|
||||
|
||||
#: ../js/ui/status/network.js:682
|
||||
#: ../js/ui/status/network.js:735
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "אתרנט אוטומטי"
|
||||
|
||||
#: ../js/ui/status/network.js:757
|
||||
#: ../js/ui/status/network.js:803
|
||||
msgid "Auto broadband"
|
||||
msgstr "פס רחב אוטומטי"
|
||||
|
||||
#: ../js/ui/status/network.js:760
|
||||
#: ../js/ui/status/network.js:806
|
||||
msgid "Auto dial-up"
|
||||
msgstr "חיוג אוטומטי"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:903 ../js/ui/status/network.js:1413
|
||||
#: ../js/ui/status/network.js:930 ../js/ui/status/network.js:1471
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "%s אוטומטי"
|
||||
|
||||
#: ../js/ui/status/network.js:905
|
||||
#: ../js/ui/status/network.js:932
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Bluetooth אוטומטי"
|
||||
|
||||
#: ../js/ui/status/network.js:1415
|
||||
#: ../js/ui/status/network.js:1473
|
||||
msgid "Auto wireless"
|
||||
msgstr "אלחוטי אוטומטי"
|
||||
|
||||
#: ../js/ui/status/network.js:1473
|
||||
#: ../js/ui/status/network.js:1521
|
||||
msgid "More..."
|
||||
msgstr "עוד..."
|
||||
|
||||
#: ../js/ui/status/network.js:1496
|
||||
#: ../js/ui/status/network.js:1563
|
||||
msgid "Enable networking"
|
||||
msgstr "הפעלת תכונת הרשת"
|
||||
|
||||
#: ../js/ui/status/network.js:1508
|
||||
#: ../js/ui/status/network.js:1575
|
||||
msgid "Wired"
|
||||
msgstr "קווי"
|
||||
|
||||
#: ../js/ui/status/network.js:1519
|
||||
#: ../js/ui/status/network.js:1586
|
||||
msgid "Wireless"
|
||||
msgstr "אלחוטי"
|
||||
|
||||
#: ../js/ui/status/network.js:1529
|
||||
#: ../js/ui/status/network.js:1596
|
||||
msgid "Mobile broadband"
|
||||
msgstr "פס־רחב נייד"
|
||||
|
||||
#: ../js/ui/status/network.js:1539
|
||||
#: ../js/ui/status/network.js:1606
|
||||
msgid "VPN Connections"
|
||||
msgstr "חיבורי VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1548
|
||||
#: ../js/ui/status/network.js:1618
|
||||
msgid "Network Settings"
|
||||
msgstr "הגדרות הרשת"
|
||||
|
||||
#: ../js/ui/status/network.js:1843
|
||||
#: ../js/ui/status/network.js:1912
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "כרגע ישנו חיבור בינך ובין רשת הפס הרחב הניידת '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1847
|
||||
#: ../js/ui/status/network.js:1916
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "כרגע ישנו חיבור בינך ובין הרשת האלחוטית '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1851
|
||||
#: ../js/ui/status/network.js:1920
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "כרגע ישנו חיבור בינך ובין הרשת הקווית '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1855
|
||||
#: ../js/ui/status/network.js:1924
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "כרגע ישנו חיבור בינך ובין רשת ה־VPN '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1860
|
||||
#: ../js/ui/status/network.js:1929
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "כעת ישנו חיבור בינך ובין '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1868
|
||||
#: ../js/ui/status/network.js:1937
|
||||
msgid "Connection established"
|
||||
msgstr "ההתחברות הצליחה"
|
||||
|
||||
#: ../js/ui/status/network.js:1990
|
||||
#: ../js/ui/status/network.js:2063
|
||||
msgid "Networking is disabled"
|
||||
msgstr "תכונת הרשת מנוטרלת"
|
||||
|
||||
#: ../js/ui/status/network.js:2115
|
||||
#: ../js/ui/status/network.js:2188
|
||||
msgid "Network Manager"
|
||||
msgstr "מנהל הרשתות"
|
||||
|
||||
@ -1065,22 +1070,22 @@ msgstr "עצמה"
|
||||
msgid "Microphone"
|
||||
msgstr "מיקרופון"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:331
|
||||
#: ../js/ui/telepathyClient.js:333
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s התחבר/ה."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:336
|
||||
#: ../js/ui/telepathyClient.js:338
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s התנתק/ה."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:339
|
||||
#: ../js/ui/telepathyClient.js:341
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "'%s' מרוחק/ת."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:342
|
||||
#: ../js/ui/telepathyClient.js:344
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s עסוק/ה."
|
||||
@ -1088,11 +1093,18 @@ msgstr "%s עסוק/ה."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:473
|
||||
#: ../js/ui/telepathyClient.js:482
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "נשלח ב־%X בשעה %A"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:527
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "השם של %s הוחלף ל־%s"
|
||||
|
||||
#. Translators: this is the text displayed
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
@ -1139,51 +1151,15 @@ msgstr[2] "2 קלטים"
|
||||
msgid "System Sounds"
|
||||
msgstr "צלילי מערכת"
|
||||
|
||||
#: ../src/main.c:446
|
||||
#: ../src/main.c:445
|
||||
msgid "Print version"
|
||||
msgstr "Print version"
|
||||
|
||||
#: ../src/shell-app.c:454
|
||||
#: ../src/shell-app.c:464
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "אירע כשל בטעינת '%s'"
|
||||
|
||||
#: ../src/shell-global.c:1395
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "לפני פחות מדקה"
|
||||
|
||||
#: ../src/shell-global.c:1399
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "לפני דקה"
|
||||
msgstr[1] "לפני %d דקות"
|
||||
msgstr[2] "לפני 2 דקות"
|
||||
|
||||
#: ../src/shell-global.c:1404
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "לפני שעה"
|
||||
msgstr[1] "לפני %d שעות"
|
||||
msgstr[2] "לפני שעתיים"
|
||||
|
||||
#: ../src/shell-global.c:1409
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "לפני יום"
|
||||
msgstr[1] "לפני %d ימים"
|
||||
msgstr[2] "לפני יומיים"
|
||||
|
||||
#: ../src/shell-global.c:1414
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "לפני שבוע"
|
||||
msgstr[1] "לפני %d שבועות"
|
||||
msgstr[2] "לפני שבועיים"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:80
|
||||
msgid "United Kingdom"
|
||||
msgstr "בריטניה"
|
||||
@ -1216,6 +1192,33 @@ msgstr "מערכת הקבצים"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Less than a minute ago"
|
||||
#~ msgstr "לפני פחות מדקה"
|
||||
|
||||
#~ msgid "%d minute ago"
|
||||
#~ msgid_plural "%d minutes ago"
|
||||
#~ msgstr[0] "לפני דקה"
|
||||
#~ msgstr[1] "לפני %d דקות"
|
||||
#~ msgstr[2] "לפני 2 דקות"
|
||||
|
||||
#~ msgid "%d hour ago"
|
||||
#~ msgid_plural "%d hours ago"
|
||||
#~ msgstr[0] "לפני שעה"
|
||||
#~ msgstr[1] "לפני %d שעות"
|
||||
#~ msgstr[2] "לפני שעתיים"
|
||||
|
||||
#~ msgid "%d day ago"
|
||||
#~ msgid_plural "%d days ago"
|
||||
#~ msgstr[0] "לפני יום"
|
||||
#~ msgstr[1] "לפני %d ימים"
|
||||
#~ msgstr[2] "לפני יומיים"
|
||||
|
||||
#~ msgid "%d week ago"
|
||||
#~ msgid_plural "%d weeks ago"
|
||||
#~ msgstr[0] "לפני שבוע"
|
||||
#~ msgstr[1] "לפני %d שבועות"
|
||||
#~ msgstr[2] "לפני שבועיים"
|
||||
|
||||
#~ msgid "Shut Down"
|
||||
#~ msgstr "כיבוי"
|
||||
|
||||
@ -1428,17 +1431,19 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid ""
|
||||
#~ "This key specifies the hour format used by the panel clock. Possible "
|
||||
#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
|
||||
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. 1970-"
|
||||
#~ "01-01. If set to \"custom\", the clock will display time according to the "
|
||||
#~ "format specified in the custom_format key. Note that if set to either "
|
||||
#~ "\"unix\" or \"custom\", the show_date and show_seconds keys are ignored."
|
||||
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. "
|
||||
#~ "1970-01-01. If set to \"custom\", the clock will display time according "
|
||||
#~ "to the format specified in the custom_format key. Note that if set to "
|
||||
#~ "either \"unix\" or \"custom\", the show_date and show_seconds keys are "
|
||||
#~ "ignored."
|
||||
#~ msgstr ""
|
||||
#~ "This key specifies the hour format used by the panel clock. Possible "
|
||||
#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
|
||||
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. 1970-"
|
||||
#~ "01-01. If set to \"custom\", the clock will display time according to the "
|
||||
#~ "format specified in the custom_format key. Note that if set to either "
|
||||
#~ "\"unix\" or \"custom\", the show_date and show_seconds keys are ignored."
|
||||
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. "
|
||||
#~ "1970-01-01. If set to \"custom\", the clock will display time according "
|
||||
#~ "to the format specified in the custom_format key. Note that if set to "
|
||||
#~ "either \"unix\" or \"custom\", the show_date and show_seconds keys are "
|
||||
#~ "ignored."
|
||||
|
||||
#~ msgid "Clock Format"
|
||||
#~ msgstr "מבנה השעון"
|
||||
|
254
po/nb.po
@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell 2.91.x\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-04-01 09:43+0200\n"
|
||||
"PO-Revision-Date: 2011-04-01 09:45+0200\n"
|
||||
"POT-Creation-Date: 2011-05-11 00:12+0200\n"
|
||||
"PO-Revision-Date: 2011-05-11 21:20+0200\n"
|
||||
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
|
||||
"Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.uio.no>\n"
|
||||
"Language: \n"
|
||||
@ -32,26 +32,28 @@ msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
"dialog."
|
||||
msgstr ""
|
||||
"Tillat tilgang til interne feilsøkings og overvåkingsverktøy ved å bruke Alt-"
|
||||
"F2-dialogen."
|
||||
"Tillat tilgang til interne feilsøkings- og overvåkingsverktøy ved å bruke "
|
||||
"Alt-F2-dialogen."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
msgstr ""
|
||||
msgstr "Aktiver interne verktøy for utviklere og testere fra Alt-F2"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr ""
|
||||
msgstr "Filendelse i bruk ved lagring av skjermvideo"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr ""
|
||||
msgstr "Bildefrekvens i bruk ved lagring av skjermvideoer."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should not be loaded."
|
||||
msgstr ""
|
||||
"GNOME Shell-utvidelser har en uuid-egenskap. Denne nøkkelen lister "
|
||||
"utvidelser som ikke bør lastes."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
@ -59,11 +61,11 @@ msgstr "Historikk for kommandodialog (Alt-F2)"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
msgid "History for the looking glass dialog"
|
||||
msgstr ""
|
||||
msgstr "Historikk for forstørrelsesglass-dialogen"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||
msgid "If true, display date in the clock, in addition to time."
|
||||
msgstr ""
|
||||
msgstr "Viser dato i tillegg til tid i klokken hvis «true»."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
||||
msgid "If true, display seconds in time."
|
||||
@ -71,14 +73,14 @@ msgstr "Viser sekunder i klokken hvis «true»."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr ""
|
||||
msgstr "Viser ISO-ukedato i kalenderen hvis «true»."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr ""
|
||||
msgstr "Liste av skrivebordfil-ider for favorittprogrammer"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
#, no-c-format
|
||||
#, no-c-format, fuzzy
|
||||
msgid ""
|
||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||
"used for gst-launch. The pipeline should have an unconnected sink pad where "
|
||||
@ -90,7 +92,7 @@ msgid ""
|
||||
"'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux' and "
|
||||
"records to WEBM using the VP8 codec. %T is used as a placeholder for a guess "
|
||||
"at the optimal thread count on the system."
|
||||
msgstr ""
|
||||
msgstr "Setter GStreamer-rør som brukes til å kode opptak. Den følger syntaksen som brukes for gst-launch."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
@ -109,6 +111,8 @@ msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr ""
|
||||
"Programmene som passer til disse identifikatorene vil bli vist i "
|
||||
"favorittområdet."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
@ -116,16 +120,21 @@ msgid ""
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
"a different container format."
|
||||
msgstr ""
|
||||
"Filnavnet for skjermvideoopptak vil være unikt og bestå av gjeldende dato, "
|
||||
"og bruke denne filendelsen. Den bør endres når du gjør opptak til et nytt "
|
||||
"oppbevaringsformat."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr ""
|
||||
"Bildefrekvensen i den ferdige skjermvideoen tatt opp med GNOME Shells "
|
||||
"skjermvideoopptaker i bilder per sekund."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr ""
|
||||
msgstr "Gstreamer-kommandokø brukt til å kode skjermvideoen"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
@ -134,6 +143,10 @@ msgid ""
|
||||
"want to disable this for privacy reasons. Please note that doing so won't "
|
||||
"remove already saved data."
|
||||
msgstr ""
|
||||
"GNOME Shell vil normalt holde øye med åpne programmer for å kunne vise de "
|
||||
"mest bruke (for eksempel i oppstartsmenyer). Denne informasjonen vil bli "
|
||||
"holdt privat, men du kan deaktivere denne lagringen av personvernårsaker. "
|
||||
"Hvis du slår det av, vil det ikke fjerne allerede lagret informasjon."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid "Uuids of extensions to disable"
|
||||
@ -163,27 +176,27 @@ msgid "Execution of '%s' failed:"
|
||||
msgstr "Kjøring av «%s» feilet:"
|
||||
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:230
|
||||
#: ../js/ui/appDisplay.js:260
|
||||
msgid "All"
|
||||
msgstr "Alle"
|
||||
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
#: ../js/ui/appDisplay.js:359
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "PROGRAMMER"
|
||||
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
#: ../js/ui/appDisplay.js:385
|
||||
msgid "SETTINGS"
|
||||
msgstr "INNSTILLINGER"
|
||||
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
#: ../js/ui/appDisplay.js:658
|
||||
msgid "New Window"
|
||||
msgstr "Nytt vindu"
|
||||
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
#: ../js/ui/appDisplay.js:661
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Fjern fra favoritter"
|
||||
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
#: ../js/ui/appDisplay.js:662
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Legg til i favoritter"
|
||||
|
||||
@ -261,7 +274,7 @@ msgstr "F"
|
||||
#: ../js/ui/calendar.js:130
|
||||
msgctxt "grid saturday"
|
||||
msgid "S"
|
||||
msgstr "S"
|
||||
msgstr "L"
|
||||
|
||||
#. Translators: Event list abbreviation for Sunday.
|
||||
#. *
|
||||
@ -278,19 +291,19 @@ msgstr "Sø"
|
||||
#: ../js/ui/calendar.js:145
|
||||
msgctxt "list monday"
|
||||
msgid "M"
|
||||
msgstr "M"
|
||||
msgstr "Ma"
|
||||
|
||||
#. Translators: Event list abbreviation for Tuesday
|
||||
#: ../js/ui/calendar.js:147
|
||||
msgctxt "list tuesday"
|
||||
msgid "T"
|
||||
msgstr "T"
|
||||
msgstr "Ti"
|
||||
|
||||
#. Translators: Event list abbreviation for Wednesday
|
||||
#: ../js/ui/calendar.js:149
|
||||
msgctxt "list wednesday"
|
||||
msgid "W"
|
||||
msgstr "O"
|
||||
msgstr "On"
|
||||
|
||||
#. Translators: Event list abbreviation for Thursday
|
||||
#: ../js/ui/calendar.js:151
|
||||
@ -302,13 +315,13 @@ msgstr "To"
|
||||
#: ../js/ui/calendar.js:153
|
||||
msgctxt "list friday"
|
||||
msgid "F"
|
||||
msgstr "F"
|
||||
msgstr "Fr"
|
||||
|
||||
#. Translators: Event list abbreviation for Saturday
|
||||
#: ../js/ui/calendar.js:155
|
||||
msgctxt "list saturday"
|
||||
msgid "S"
|
||||
msgstr "S"
|
||||
msgstr "Lø"
|
||||
|
||||
#. Translators: Text to show if there are no events
|
||||
#: ../js/ui/calendar.js:704
|
||||
@ -316,13 +329,13 @@ msgid "Nothing Scheduled"
|
||||
msgstr "Ingenting planlagt"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:490
|
||||
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:487
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A %B %d"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:493
|
||||
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:490
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%A %B %d, %Y"
|
||||
@ -343,7 +356,7 @@ msgstr "Denne uken"
|
||||
msgid "Next week"
|
||||
msgstr "Neste uke"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1007
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1037
|
||||
msgid "Remove"
|
||||
msgstr "Fjern"
|
||||
|
||||
@ -472,8 +485,8 @@ msgstr "Systemet vil starte på nytt automatisk om %d sekunder."
|
||||
msgid "Restarting the system."
|
||||
msgstr "Starter systemet på nytt."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
#: ../js/ui/endSessionDialog.js:413 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:491
|
||||
msgid "Cancel"
|
||||
msgstr "Avbryt"
|
||||
|
||||
@ -507,11 +520,11 @@ msgstr "Vis kildekode"
|
||||
msgid "Web Page"
|
||||
msgstr "Nettside"
|
||||
|
||||
#: ../js/ui/messageTray.js:1000
|
||||
#: ../js/ui/messageTray.js:1030
|
||||
msgid "Open"
|
||||
msgstr "Åpne"
|
||||
|
||||
#: ../js/ui/messageTray.js:2164
|
||||
#: ../js/ui/messageTray.js:2194
|
||||
msgid "System Information"
|
||||
msgstr "Systeminformasjon"
|
||||
|
||||
@ -534,18 +547,18 @@ msgid "Dash"
|
||||
msgstr "Favoritter"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:524
|
||||
#: ../js/ui/panel.js:533
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Avslutt %s"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:902
|
||||
#: ../js/ui/panel.js:913
|
||||
msgid "Activities"
|
||||
msgstr "Aktiviteter"
|
||||
|
||||
#: ../js/ui/panel.js:1003
|
||||
#: ../js/ui/panel.js:1015
|
||||
msgid "Top Bar"
|
||||
msgstr "Topp-panel"
|
||||
|
||||
@ -603,11 +616,11 @@ msgstr "toggle-switch-intl"
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Oppgi en kommando:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:310
|
||||
#: ../js/ui/searchDisplay.js:313
|
||||
msgid "Searching..."
|
||||
msgstr "Søker …"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:324
|
||||
#: ../js/ui/searchDisplay.js:327
|
||||
msgid "No matching results."
|
||||
msgstr "Ingen treff."
|
||||
|
||||
@ -690,9 +703,9 @@ msgstr "Høy kontrast"
|
||||
msgid "Large Text"
|
||||
msgstr "Stor tekst"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:264
|
||||
#: ../js/ui/status/bluetooth.js:358 ../js/ui/status/bluetooth.js:392
|
||||
#: ../js/ui/status/bluetooth.js:432 ../js/ui/status/bluetooth.js:465
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -705,101 +718,101 @@ msgid "Send Files to Device..."
|
||||
msgstr "Send filer til enhet …"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:70
|
||||
msgid "Setup a New Device..."
|
||||
msgid "Set up a New Device..."
|
||||
msgstr "Sett opp en ny enhet …"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:95
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Innstillinger for Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:188
|
||||
#: ../js/ui/status/bluetooth.js:215
|
||||
msgid "Connection"
|
||||
msgstr "Tilkobling"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:224
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
msgid "Send Files..."
|
||||
msgstr "Send filer …"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:229
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
msgid "Browse Files..."
|
||||
msgstr "Bla gjennom filer …"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:238
|
||||
#: ../js/ui/status/bluetooth.js:265
|
||||
msgid "Error browsing device"
|
||||
msgstr "Feil under lesing av enhet"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:239
|
||||
#: ../js/ui/status/bluetooth.js:266
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "Kan ikke bla gjennom forespurt enhet. Feilen er «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
#: ../js/ui/status/bluetooth.js:274
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Innstillinger for tastatur"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:252
|
||||
#: ../js/ui/status/bluetooth.js:279
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Innstillinger for mus"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
|
||||
#: ../js/ui/status/bluetooth.js:286 ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "Innstillinger for lyd"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#: ../js/ui/status/bluetooth.js:393
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Forespørsel om autorisering fra %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:374
|
||||
#: ../js/ui/status/bluetooth.js:399
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "Enhet %s vil ha tilgang til tjenesten «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:376
|
||||
#: ../js/ui/status/bluetooth.js:401
|
||||
msgid "Always grant access"
|
||||
msgstr "Alltid gi tilgang"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
#: ../js/ui/status/bluetooth.js:402
|
||||
msgid "Grant this time only"
|
||||
msgstr "Gi tilgang kun denne ene gangen"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:403
|
||||
msgid "Reject"
|
||||
msgstr "Avvis"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#: ../js/ui/status/bluetooth.js:433
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Bekreftelse for tilkobling for %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
|
||||
#: ../js/ui/status/bluetooth.js:439 ../js/ui/status/bluetooth.js:473
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "Enhet %s vil koble seg sammen med denne datamaskinen"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#: ../js/ui/status/bluetooth.js:440
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Vennligst bekreft om PIN «%s» er lik den som brukes på enheten."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
#: ../js/ui/status/bluetooth.js:442
|
||||
msgid "Matches"
|
||||
msgstr "Stemmer overens"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
#: ../js/ui/status/bluetooth.js:443
|
||||
msgid "Does not match"
|
||||
msgstr "Stemmer ikke overens"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:441
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Forespørsel om tilkobling for %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:449
|
||||
#: ../js/ui/status/bluetooth.js:474
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Vennligst oppgi PIN som oppgitt på enheten."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:465
|
||||
#: ../js/ui/status/bluetooth.js:490
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
@ -811,139 +824,139 @@ msgstr "Vis tastaturutforming …"
|
||||
msgid "Localization Settings"
|
||||
msgstr "Innstillinger for lokalisering"
|
||||
|
||||
#: ../js/ui/status/network.js:104 ../js/ui/status/network.js:1454
|
||||
#: ../js/ui/status/network.js:126
|
||||
msgid "<unknown>"
|
||||
msgstr "<ukjent>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:311
|
||||
#: ../js/ui/status/network.js:343
|
||||
msgid "disabled"
|
||||
msgstr "slått av"
|
||||
|
||||
#: ../js/ui/status/network.js:494
|
||||
#: ../js/ui/status/network.js:542
|
||||
msgid "connecting..."
|
||||
msgstr "kobler til …"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:497
|
||||
#: ../js/ui/status/network.js:545
|
||||
msgid "authentication required"
|
||||
msgstr "autentisering kreves"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:507
|
||||
#: ../js/ui/status/network.js:555
|
||||
msgid "firmware missing"
|
||||
msgstr "fastvare mangler"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:514
|
||||
#: ../js/ui/status/network.js:562
|
||||
msgid "cable unplugged"
|
||||
msgstr "kabel koblet fra"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:519
|
||||
#: ../js/ui/status/network.js:567
|
||||
msgid "unavailable"
|
||||
msgstr "ikke tilgjengelig"
|
||||
|
||||
#: ../js/ui/status/network.js:521
|
||||
#: ../js/ui/status/network.js:569
|
||||
msgid "connection failed"
|
||||
msgstr "tilkobling feilet"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:602 ../js/ui/status/network.js:1402
|
||||
#: ../js/ui/status/network.js:650 ../js/ui/status/network.js:1459
|
||||
msgid "Connected (private)"
|
||||
msgstr "Tilkoblet (privat)"
|
||||
|
||||
#: ../js/ui/status/network.js:683
|
||||
#: ../js/ui/status/network.js:735
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Automatisk Ethernet"
|
||||
|
||||
#: ../js/ui/status/network.js:758
|
||||
#: ../js/ui/status/network.js:803
|
||||
msgid "Auto broadband"
|
||||
msgstr "Automatisk bredbånd"
|
||||
|
||||
#: ../js/ui/status/network.js:761
|
||||
#: ../js/ui/status/network.js:806
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Automatisk oppringt"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:904 ../js/ui/status/network.js:1414
|
||||
#: ../js/ui/status/network.js:930 ../js/ui/status/network.js:1471
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "Automatisk %s"
|
||||
|
||||
#: ../js/ui/status/network.js:906
|
||||
#: ../js/ui/status/network.js:932
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Automatisk Bluetooth"
|
||||
|
||||
#: ../js/ui/status/network.js:1416
|
||||
#: ../js/ui/status/network.js:1473
|
||||
msgid "Auto wireless"
|
||||
msgstr "Automatisk trådløst"
|
||||
|
||||
#: ../js/ui/status/network.js:1474
|
||||
#: ../js/ui/status/network.js:1521
|
||||
msgid "More..."
|
||||
msgstr "Mer …"
|
||||
|
||||
#: ../js/ui/status/network.js:1497
|
||||
#: ../js/ui/status/network.js:1563
|
||||
msgid "Enable networking"
|
||||
msgstr "Slå på nettverk"
|
||||
|
||||
#: ../js/ui/status/network.js:1509
|
||||
#: ../js/ui/status/network.js:1575
|
||||
msgid "Wired"
|
||||
msgstr "Kablet"
|
||||
|
||||
#: ../js/ui/status/network.js:1520
|
||||
#: ../js/ui/status/network.js:1586
|
||||
msgid "Wireless"
|
||||
msgstr "Trådløst"
|
||||
|
||||
#: ../js/ui/status/network.js:1530
|
||||
#: ../js/ui/status/network.js:1596
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Mobilt bredbånd"
|
||||
|
||||
#: ../js/ui/status/network.js:1540
|
||||
#: ../js/ui/status/network.js:1606
|
||||
msgid "VPN Connections"
|
||||
msgstr "VPN-tilkoblinger"
|
||||
|
||||
#: ../js/ui/status/network.js:1549
|
||||
#: ../js/ui/status/network.js:1618
|
||||
msgid "Network Settings"
|
||||
msgstr "Innstillinger for nettverk"
|
||||
|
||||
#: ../js/ui/status/network.js:1844
|
||||
#: ../js/ui/status/network.js:1912
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "Du er nå koblet til mobil bredbåndstilkobling «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1848
|
||||
#: ../js/ui/status/network.js:1916
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "Du er nå koblet til trådløst nettverk «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1852
|
||||
#: ../js/ui/status/network.js:1920
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "Du er nå koblet til kablet nettverk «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1856
|
||||
#: ../js/ui/status/network.js:1924
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "Du er nå koblet til virtuelt privat nettverk «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1861
|
||||
#: ../js/ui/status/network.js:1929
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "Du er nå koblet til «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1869
|
||||
#: ../js/ui/status/network.js:1937
|
||||
msgid "Connection established"
|
||||
msgstr "Tilkobling etablert"
|
||||
|
||||
#: ../js/ui/status/network.js:1991
|
||||
#: ../js/ui/status/network.js:2063
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Nettverk er slått av"
|
||||
|
||||
#: ../js/ui/status/network.js:2116
|
||||
#: ../js/ui/status/network.js:2188
|
||||
msgid "Network Manager"
|
||||
msgstr "Nettverkshåndtering"
|
||||
|
||||
@ -1045,22 +1058,22 @@ msgstr "Volum"
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofon"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:335
|
||||
#: ../js/ui/telepathyClient.js:330
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s er tilkoblet."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#: ../js/ui/telepathyClient.js:335
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s er frakoblet."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#: ../js/ui/telepathyClient.js:338
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "«%s» er borte."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:346
|
||||
#: ../js/ui/telepathyClient.js:341
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s er opptatt."
|
||||
@ -1068,11 +1081,18 @@ msgstr "%s er opptatt."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:482
|
||||
#: ../js/ui/telepathyClient.js:479
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Sendt %X på %A"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:524
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s er nå kjent som %s"
|
||||
|
||||
#. Translators: this is the text displayed
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
@ -1117,50 +1137,18 @@ msgstr[1] "%u innganger"
|
||||
msgid "System Sounds"
|
||||
msgstr "Systemlyder"
|
||||
|
||||
#: ../src/main.c:446
|
||||
#: ../src/main.c:445
|
||||
msgid "Print version"
|
||||
msgstr "Skriv ut versjon"
|
||||
|
||||
#: ../src/shell-app.c:454
|
||||
#: ../src/shell-app.c:464
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Klarte ikke å starte «%s»"
|
||||
|
||||
#: ../src/shell-global.c:1395
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Mindre enn ett minutt siden"
|
||||
|
||||
#: ../src/shell-global.c:1399
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d minutt siden"
|
||||
msgstr[1] "%d minutter siden"
|
||||
|
||||
#: ../src/shell-global.c:1404
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d time siden"
|
||||
msgstr[1] "%d timer siden"
|
||||
|
||||
#: ../src/shell-global.c:1409
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d dag siden"
|
||||
msgstr[1] "%d dager siden"
|
||||
|
||||
#: ../src/shell-global.c:1414
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d uke siden"
|
||||
msgstr[1] "%d uker siden"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:80
|
||||
msgid "United Kingdom"
|
||||
msgstr "England"
|
||||
msgstr "Storbritannia"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:526
|
||||
msgid "Default"
|
||||
|
347
po/sl.po
@ -8,14 +8,14 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-03-26 15:31+0000\n"
|
||||
"PO-Revision-Date: 2011-03-26 20:24+0100\n"
|
||||
"POT-Creation-Date: 2011-05-09 08:37+0000\n"
|
||||
"PO-Revision-Date: 2011-05-09 12:27+0100\n"
|
||||
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
|
||||
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
|
||||
"Language: Slovenian\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: Slovenian\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n"
|
||||
"X-Poedit-Language: Slovenian\n"
|
||||
"X-Poedit-Country: SLOVENIA\n"
|
||||
@ -138,27 +138,27 @@ msgid "Execution of '%s' failed:"
|
||||
msgstr "Izvedba '%s' je spodletela:"
|
||||
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:230
|
||||
#: ../js/ui/appDisplay.js:260
|
||||
msgid "All"
|
||||
msgstr "Vse"
|
||||
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
#: ../js/ui/appDisplay.js:359
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "Programi"
|
||||
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
#: ../js/ui/appDisplay.js:385
|
||||
msgid "SETTINGS"
|
||||
msgstr "NASTAVITVE"
|
||||
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
#: ../js/ui/appDisplay.js:658
|
||||
msgid "New Window"
|
||||
msgstr "Novo okno"
|
||||
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
#: ../js/ui/appDisplay.js:661
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Odstrani iz priljubljenih"
|
||||
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
#: ../js/ui/appDisplay.js:662
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Dodaj med priljubljene"
|
||||
|
||||
@ -292,12 +292,14 @@ msgstr "Nič ni razporejeno"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||
#: ../js/ui/calendar.js:720
|
||||
#: ../js/ui/telepathyClient.js:487
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %d. %m."
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||
#: ../js/ui/calendar.js:723
|
||||
#: ../js/ui/telepathyClient.js:490
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%A, %d %B %Y"
|
||||
@ -319,7 +321,7 @@ msgid "Next week"
|
||||
msgstr "Naslednji teden"
|
||||
|
||||
#: ../js/ui/dash.js:174
|
||||
#: ../js/ui/messageTray.js:1000
|
||||
#: ../js/ui/messageTray.js:1037
|
||||
msgid "Remove"
|
||||
msgstr "Odstrani"
|
||||
|
||||
@ -447,9 +449,9 @@ msgstr "Sistem se bo samodejno ponovno zagnal čez %d sekund."
|
||||
msgid "Restarting the system."
|
||||
msgstr "Ponoven zagon sistema."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:415
|
||||
#: ../js/ui/endSessionDialog.js:413
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
#: ../js/ui/status/bluetooth.js:491
|
||||
msgid "Cancel"
|
||||
msgstr "Prekliči"
|
||||
|
||||
@ -484,11 +486,11 @@ msgstr "Poglej vir"
|
||||
msgid "Web Page"
|
||||
msgstr "Spletna stran"
|
||||
|
||||
#: ../js/ui/messageTray.js:993
|
||||
#: ../js/ui/messageTray.js:1030
|
||||
msgid "Open"
|
||||
msgstr "Odpri"
|
||||
|
||||
#: ../js/ui/messageTray.js:2151
|
||||
#: ../js/ui/messageTray.js:2194
|
||||
msgid "System Information"
|
||||
msgstr "Podrobnosti sistema"
|
||||
|
||||
@ -511,18 +513,18 @@ msgid "Dash"
|
||||
msgstr "Armaturna plošča"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:515
|
||||
#: ../js/ui/panel.js:533
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Končaj %s"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:878
|
||||
#: ../js/ui/panel.js:913
|
||||
msgid "Activities"
|
||||
msgstr "Dejavnosti"
|
||||
|
||||
#: ../js/ui/panel.js:979
|
||||
#: ../js/ui/panel.js:1015
|
||||
msgid "Top Bar"
|
||||
msgstr "Vrhnja vrstica"
|
||||
|
||||
@ -555,11 +557,15 @@ msgstr "Skrbnik"
|
||||
msgid "Authenticate"
|
||||
msgstr "Overi"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:260
|
||||
#. 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/polkitAuthenticationAgent.js:264
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr "Dejanje je spodletelo. Poskusite znova."
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:272
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:276
|
||||
msgid "Password:"
|
||||
msgstr "Geslo:"
|
||||
|
||||
@ -576,11 +582,11 @@ msgstr "toggle-switch-intl"
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Vnos ukaza:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:310
|
||||
#: ../js/ui/searchDisplay.js:313
|
||||
msgid "Searching..."
|
||||
msgstr "Iskanje ..."
|
||||
|
||||
#: ../js/ui/searchDisplay.js:324
|
||||
#: ../js/ui/searchDisplay.js:327
|
||||
msgid "No matching results."
|
||||
msgstr "Ni zadetkov iskanja"
|
||||
|
||||
@ -666,11 +672,11 @@ msgid "Large Text"
|
||||
msgstr "Veliko besedilo"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42
|
||||
#: ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333
|
||||
#: ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407
|
||||
#: ../js/ui/status/bluetooth.js:440
|
||||
#: ../js/ui/status/bluetooth.js:264
|
||||
#: ../js/ui/status/bluetooth.js:358
|
||||
#: ../js/ui/status/bluetooth.js:392
|
||||
#: ../js/ui/status/bluetooth.js:432
|
||||
#: ../js/ui/status/bluetooth.js:465
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -683,103 +689,103 @@ msgid "Send Files to Device..."
|
||||
msgstr "Pošilji datoteke na napravo ..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:70
|
||||
msgid "Setup a New Device..."
|
||||
msgstr "Namestitev nove naprave ..."
|
||||
msgid "Set up a New Device..."
|
||||
msgstr "Nastavitev nove naprave ..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:95
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Nastavitve za Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:188
|
||||
#: ../js/ui/status/bluetooth.js:215
|
||||
msgid "Connection"
|
||||
msgstr "Povezava"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:224
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
msgid "Send Files..."
|
||||
msgstr "Pošlji datoteke ..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:229
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
msgid "Browse Files..."
|
||||
msgstr "Brskanje datotek ..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:238
|
||||
#: ../js/ui/status/bluetooth.js:265
|
||||
msgid "Error browsing device"
|
||||
msgstr "Napaka med brskanjem po napravi"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:239
|
||||
#: ../js/ui/status/bluetooth.js:266
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "Po zahtevani naprave ni mogoče brskati, napaka je '%s'"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
#: ../js/ui/status/bluetooth.js:274
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Nastavitve tipkovnice"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:252
|
||||
#: ../js/ui/status/bluetooth.js:279
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Nastavitve miške"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:259
|
||||
#: ../js/ui/status/bluetooth.js:286
|
||||
#: ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "Nastavitve zvoka"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#: ../js/ui/status/bluetooth.js:393
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Zahteva za pooblastitev od %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:374
|
||||
#: ../js/ui/status/bluetooth.js:399
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "Naprava %s želi dostop do storitve '%s'."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:376
|
||||
#: ../js/ui/status/bluetooth.js:401
|
||||
msgid "Always grant access"
|
||||
msgstr "Vedno odobri dostop"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
#: ../js/ui/status/bluetooth.js:402
|
||||
msgid "Grant this time only"
|
||||
msgstr "Odobri le tokrat"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:403
|
||||
msgid "Reject"
|
||||
msgstr "Zavrni"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#: ../js/ui/status/bluetooth.js:433
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Potrditev razčlenjevanja za %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:414
|
||||
#: ../js/ui/status/bluetooth.js:448
|
||||
#: ../js/ui/status/bluetooth.js:439
|
||||
#: ../js/ui/status/bluetooth.js:473
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "Naprava %s se skuša povezati s tem računalnikom"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#: ../js/ui/status/bluetooth.js:440
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Potrdite, ali se PIN '%s' ujema s tistim na napravi."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
#: ../js/ui/status/bluetooth.js:442
|
||||
msgid "Matches"
|
||||
msgstr "Ujemanja"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
#: ../js/ui/status/bluetooth.js:443
|
||||
msgid "Does not match"
|
||||
msgstr "Se ne ujema"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:441
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Zahteva razčlenjevanja za %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:449
|
||||
#: ../js/ui/status/bluetooth.js:474
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Vnesite PIN, ki je naveden na napravi."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:465
|
||||
#: ../js/ui/status/bluetooth.js:490
|
||||
msgid "OK"
|
||||
msgstr "V redu"
|
||||
|
||||
@ -791,142 +797,141 @@ msgstr "Pokaži razporeditev tipkovnice ..."
|
||||
msgid "Localization Settings"
|
||||
msgstr "Krajevne nastavitve"
|
||||
|
||||
#: ../js/ui/status/network.js:104
|
||||
#: ../js/ui/status/network.js:1454
|
||||
#: ../js/ui/status/network.js:126
|
||||
msgid "<unknown>"
|
||||
msgstr "<neznano>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:311
|
||||
#: ../js/ui/status/network.js:343
|
||||
msgid "disabled"
|
||||
msgstr "onemogočeno"
|
||||
|
||||
#: ../js/ui/status/network.js:494
|
||||
#: ../js/ui/status/network.js:542
|
||||
msgid "connecting..."
|
||||
msgstr "povezovanje ..."
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:497
|
||||
#: ../js/ui/status/network.js:545
|
||||
msgid "authentication required"
|
||||
msgstr "zahtevana je overitev"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:507
|
||||
#: ../js/ui/status/network.js:555
|
||||
msgid "firmware missing"
|
||||
msgstr "manjka strojna programska oprema"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:514
|
||||
#: ../js/ui/status/network.js:562
|
||||
msgid "cable unplugged"
|
||||
msgstr "kabel ni priklopljen"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:519
|
||||
#: ../js/ui/status/network.js:567
|
||||
msgid "unavailable"
|
||||
msgstr "ni na voljo"
|
||||
|
||||
#: ../js/ui/status/network.js:521
|
||||
#: ../js/ui/status/network.js:569
|
||||
msgid "connection failed"
|
||||
msgstr "povezovanje je spodletelo"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:602
|
||||
#: ../js/ui/status/network.js:1402
|
||||
#: ../js/ui/status/network.js:650
|
||||
#: ../js/ui/status/network.js:1459
|
||||
msgid "Connected (private)"
|
||||
msgstr "Povezano (zasebna povezava)"
|
||||
|
||||
#: ../js/ui/status/network.js:683
|
||||
#: ../js/ui/status/network.js:735
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Samodejni eternet"
|
||||
|
||||
#: ../js/ui/status/network.js:758
|
||||
#: ../js/ui/status/network.js:803
|
||||
msgid "Auto broadband"
|
||||
msgstr "Samodejni širokopasovni dostop"
|
||||
|
||||
#: ../js/ui/status/network.js:761
|
||||
#: ../js/ui/status/network.js:806
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Samodejni klicni dostop"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:904
|
||||
#: ../js/ui/status/network.js:1414
|
||||
#: ../js/ui/status/network.js:930
|
||||
#: ../js/ui/status/network.js:1471
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "Samodejna povezava z %s"
|
||||
|
||||
#: ../js/ui/status/network.js:906
|
||||
#: ../js/ui/status/network.js:932
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Samodejna povezava z Bluetooth"
|
||||
|
||||
#: ../js/ui/status/network.js:1416
|
||||
#: ../js/ui/status/network.js:1473
|
||||
msgid "Auto wireless"
|
||||
msgstr "Samodejni brezžični dostop"
|
||||
|
||||
#: ../js/ui/status/network.js:1474
|
||||
#: ../js/ui/status/network.js:1521
|
||||
msgid "More..."
|
||||
msgstr "Več ..."
|
||||
|
||||
#: ../js/ui/status/network.js:1497
|
||||
#: ../js/ui/status/network.js:1563
|
||||
msgid "Enable networking"
|
||||
msgstr "Omogoči omrežje"
|
||||
|
||||
#: ../js/ui/status/network.js:1509
|
||||
#: ../js/ui/status/network.js:1575
|
||||
msgid "Wired"
|
||||
msgstr "Žično"
|
||||
|
||||
#: ../js/ui/status/network.js:1520
|
||||
#: ../js/ui/status/network.js:1586
|
||||
msgid "Wireless"
|
||||
msgstr "Brezžično"
|
||||
|
||||
#: ../js/ui/status/network.js:1530
|
||||
#: ../js/ui/status/network.js:1596
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Mobilni širokopasovni dostop"
|
||||
|
||||
#: ../js/ui/status/network.js:1540
|
||||
#: ../js/ui/status/network.js:1606
|
||||
msgid "VPN Connections"
|
||||
msgstr "Povezave VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1549
|
||||
#: ../js/ui/status/network.js:1618
|
||||
msgid "Network Settings"
|
||||
msgstr "Omrežne nastavitve"
|
||||
|
||||
#: ../js/ui/status/network.js:1844
|
||||
#: ../js/ui/status/network.js:1912
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "Vzpostavljena je povezava z mobilnim širokopasovnim omrežjem '%s'."
|
||||
|
||||
#: ../js/ui/status/network.js:1848
|
||||
#: ../js/ui/status/network.js:1916
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "Vzpostavljena je povezava z brezžičnim omrežjem '%s'."
|
||||
|
||||
#: ../js/ui/status/network.js:1852
|
||||
#: ../js/ui/status/network.js:1920
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "Vzpostavljena je povezava z žičnim omrežjem '%s'."
|
||||
|
||||
#: ../js/ui/status/network.js:1856
|
||||
#: ../js/ui/status/network.js:1924
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "Vzpostavljena je povezava z omrežjem VPN '%s'"
|
||||
|
||||
#: ../js/ui/status/network.js:1861
|
||||
#: ../js/ui/status/network.js:1929
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "Vzpostavljena je povezava z '%s'."
|
||||
|
||||
#: ../js/ui/status/network.js:1869
|
||||
#: ../js/ui/status/network.js:1937
|
||||
msgid "Connection established"
|
||||
msgstr "Povezava je vzpostavljena"
|
||||
|
||||
#: ../js/ui/status/network.js:1991
|
||||
#: ../js/ui/status/network.js:2063
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Omrežje je onemogočeno"
|
||||
|
||||
#: ../js/ui/status/network.js:2116
|
||||
#: ../js/ui/status/network.js:2188
|
||||
msgid "Network Manager"
|
||||
msgstr "Upravljalnik omrežij"
|
||||
|
||||
@ -1037,22 +1042,22 @@ msgstr "Glasnost"
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofon"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:331
|
||||
#: ../js/ui/telepathyClient.js:330
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s je povezan."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:336
|
||||
#: ../js/ui/telepathyClient.js:335
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s ni povezan."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:339
|
||||
#: ../js/ui/telepathyClient.js:338
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s je odsoten."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:342
|
||||
#: ../js/ui/telepathyClient.js:341
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s je zaposlen."
|
||||
@ -1060,11 +1065,18 @@ msgstr "%s je zaposlen."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:473
|
||||
#: ../js/ui/telepathyClient.js:479
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Poslano na %X ob %A"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:524
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s je sedaj znan kot v %s"
|
||||
|
||||
#. Translators: this is the text displayed
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
@ -1114,55 +1126,15 @@ msgstr[3] "%u dovodi naprave"
|
||||
msgid "System Sounds"
|
||||
msgstr "Sistemski zvoki"
|
||||
|
||||
#: ../src/main.c:446
|
||||
#: ../src/main.c:445
|
||||
msgid "Print version"
|
||||
msgstr "Izpiši različico"
|
||||
|
||||
#: ../src/shell-app.c:454
|
||||
#: ../src/shell-app.c:464
|
||||
#, c-format
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Zaganjanje '%s' je spodletelo"
|
||||
|
||||
#: ../src/shell-global.c:1395
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Pred manj kot eno minuto"
|
||||
|
||||
#: ../src/shell-global.c:1399
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "Pred %d minutami"
|
||||
msgstr[1] "Pred %d minuto"
|
||||
msgstr[2] "Pred %d minutama"
|
||||
msgstr[3] "Pred %d minutami"
|
||||
|
||||
#: ../src/shell-global.c:1404
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "Pred %d urami"
|
||||
msgstr[1] "Pred %d uro"
|
||||
msgstr[2] "Pred %d urama"
|
||||
msgstr[3] "Pred %d urami"
|
||||
|
||||
#: ../src/shell-global.c:1409
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "Pred %d dnevi"
|
||||
msgstr[1] "Pred %d dnevom"
|
||||
msgstr[2] "Pred %d dnevoma"
|
||||
msgstr[3] "Pred %d dnevi"
|
||||
|
||||
#: ../src/shell-global.c:1414
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "Pred %d tedni"
|
||||
msgstr[1] "Pred %d tednom"
|
||||
msgstr[2] "Pred %d tednoma"
|
||||
msgstr[3] "Pred %d tedni"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:80
|
||||
msgid "United Kingdom"
|
||||
msgstr "Velika Britanija"
|
||||
@ -1195,46 +1167,96 @@ msgstr "Datotečni sistem"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Less than a minute ago"
|
||||
#~ msgstr "Pred manj kot eno minuto"
|
||||
|
||||
#~ msgid "%d minute ago"
|
||||
|
||||
#~ msgid_plural "%d minutes ago"
|
||||
#~ msgstr[0] "Pred %d minutami"
|
||||
#~ msgstr[1] "Pred %d minuto"
|
||||
#~ msgstr[2] "Pred %d minutama"
|
||||
#~ msgstr[3] "Pred %d minutami"
|
||||
|
||||
#~ msgid "%d hour ago"
|
||||
|
||||
#~ msgid_plural "%d hours ago"
|
||||
#~ msgstr[0] "Pred %d urami"
|
||||
#~ msgstr[1] "Pred %d uro"
|
||||
#~ msgstr[2] "Pred %d urama"
|
||||
#~ msgstr[3] "Pred %d urami"
|
||||
|
||||
#~ msgid "%d day ago"
|
||||
|
||||
#~ msgid_plural "%d days ago"
|
||||
#~ msgstr[0] "Pred %d dnevi"
|
||||
#~ msgstr[1] "Pred %d dnevom"
|
||||
#~ msgstr[2] "Pred %d dnevoma"
|
||||
#~ msgstr[3] "Pred %d dnevi"
|
||||
|
||||
#~ msgid "%d week ago"
|
||||
|
||||
#~ msgid_plural "%d weeks ago"
|
||||
#~ msgstr[0] "Pred %d tedni"
|
||||
#~ msgstr[1] "Pred %d tednom"
|
||||
#~ msgstr[2] "Pred %d tednoma"
|
||||
#~ msgstr[3] "Pred %d tedni"
|
||||
|
||||
#~ msgid "Shut Down"
|
||||
#~ msgstr "Izklopi"
|
||||
|
||||
#~ msgid "Click Shut Down to quit these applications and shut down the system."
|
||||
#~ msgstr "Kliknite Izklop za končanje teh programov in izklop sistema."
|
||||
|
||||
#~ msgid "The system will shut down automatically in %d seconds."
|
||||
#~ msgstr "Sistem se bo samodejno izklopil čez %d sekund."
|
||||
|
||||
#~ msgid "Shutting down the system."
|
||||
#~ msgstr "Izklapljanje sistema."
|
||||
|
||||
#~ msgid "Confirm"
|
||||
#~ msgstr "Potrdi"
|
||||
|
||||
#~ msgid "Panel"
|
||||
#~ msgstr "Pult"
|
||||
|
||||
#~ msgid "No such application"
|
||||
#~ msgstr "Ni takšnega programa"
|
||||
|
||||
#~ msgid "Screen Reader"
|
||||
#~ msgstr "Zaslonski bralnik"
|
||||
|
||||
#~ msgid "Screen Keyboard"
|
||||
#~ msgstr "Zaslonska tipkovnica"
|
||||
#~ msgid "%s is now known as %s"
|
||||
#~ msgstr "%s je sedaj znan kot v %s"
|
||||
|
||||
#~ msgid "PREFERENCES"
|
||||
#~ msgstr "Možnosti"
|
||||
|
||||
#~ msgid "Shut Down..."
|
||||
#~ msgstr "Izklopi ..."
|
||||
|
||||
#~ msgid "Search your computer"
|
||||
#~ msgstr "Iskanje po računalniku"
|
||||
|
||||
#~ msgid "Clip the crosshairs at the center"
|
||||
#~ msgstr "Ali merek prekriva kazalko miške v središču"
|
||||
|
||||
#~ msgid "Color of the crosshairs"
|
||||
#~ msgstr "Barva merka"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Determines the length of the vertical and horizontal lines that make up "
|
||||
#~ "the crosshairs."
|
||||
#~ msgstr "Določi dolžino navpične in vodoravne črte, ki določata merek."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
#~ "transparent."
|
||||
#~ msgstr "Določi prosojnost merka, od prekrivne to prozorne."
|
||||
|
||||
#~ msgid "Enable lens mode"
|
||||
#~ msgstr "Omogočeni način leče"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "For centered mouse tracking, when the system pointer is at or near the "
|
||||
#~ "edge of the screen, the magnified contents continue to scroll such that "
|
||||
@ -1243,48 +1265,63 @@ msgstr "%1$s: %2$s"
|
||||
#~ "Pri usredinjenem sledenju miški, ko je sistemski kazalnik ob robu "
|
||||
#~ "zaslona, približanje vsebine drsi naprej tako, da je rob zaslona v "
|
||||
#~ "približanem pogledu."
|
||||
|
||||
#~ msgid "Length of the crosshairs"
|
||||
#~ msgstr "Dolžina merka"
|
||||
|
||||
#~ msgid "Magnification factor"
|
||||
#~ msgstr "Faktor približanja"
|
||||
|
||||
#~ msgid "Mouse Tracking Mode"
|
||||
#~ msgstr "Način sledenja miške"
|
||||
|
||||
#~ msgid "Opacity of the crosshairs"
|
||||
#~ msgstr "Prosojnost merka"
|
||||
|
||||
#~ msgid "Screen position"
|
||||
#~ msgstr "Položaj zaslona"
|
||||
|
||||
#~ msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
#~ msgstr "Zdrsni približano vsebino preko robov namizja"
|
||||
|
||||
#~ msgid "Show or hide crosshairs"
|
||||
#~ msgstr "Pokaži ali skrij merek"
|
||||
|
||||
#~ msgid "Show or hide the magnifier"
|
||||
#~ msgstr "Pokaži ali skrij približevalnik"
|
||||
|
||||
#~ msgid "Show or hide the magnifier and all of its zoom regions."
|
||||
#~ msgstr "Pokaže ali skrije povečevalo in vsa njegova območja približevanja."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The color of the the vertical and horizontal lines that make up the "
|
||||
#~ "crosshairs."
|
||||
#~ msgstr "Barva navpične in vodoravne črte, ki določata merek."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The magnified view either fills the entire screen, or occupies the top-"
|
||||
#~ "half, bottom-half, left-half, or right-half of the screen."
|
||||
#~ msgstr ""
|
||||
#~ "Približan pogled lahko zapolni celoten zaslon, lahko pa zasede zgornjo, "
|
||||
#~ "spodnjo, levo ali pa desno polovico zaslona."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
#~ "value of 2.0 doubles the size."
|
||||
#~ msgstr ""
|
||||
#~ "Vrednost približanja. Vrednost 1.0 pomeni brez približanja, vrednost 2.0 "
|
||||
#~ "pa podvoji učinek približanja."
|
||||
|
||||
#~ msgid "Thickness of the crosshairs"
|
||||
#~ msgstr "Debelina merka"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Whether the magnified view should be centered over the location of the "
|
||||
#~ "system mouse and move with it."
|
||||
#~ msgstr ""
|
||||
#~ "Ali naj bo približan pogled usredinjen na mesto sistemske miške in se z "
|
||||
#~ "njo premika."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
#~ msgstr "Širina navpične in vodoravne čete, ki določata merek."
|
||||
@ -1292,28 +1329,36 @@ msgstr "%1$s: %2$s"
|
||||
#, fuzzy
|
||||
#~ msgid "Bluetooth Agent"
|
||||
#~ msgstr "Agent KAOS"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Can't add a new workspace because maximum workspaces limit has been "
|
||||
#~ "reached."
|
||||
#~ msgstr ""
|
||||
#~ "Ni mogoče dodati nove delovne površine, ker je doseženo njihovo največje "
|
||||
#~ "dovoljeno število."
|
||||
|
||||
#~ msgid "Can't remove the first workspace."
|
||||
#~ msgstr "Ni mogoče odstraniti prve delovne površine."
|
||||
|
||||
#~ msgid "Clock"
|
||||
#~ msgstr "Ura"
|
||||
|
||||
#~ msgid "Customize the panel clock"
|
||||
#~ msgstr "Prilagodi uro pladnja"
|
||||
|
||||
#~ msgid "Custom format of the clock"
|
||||
#~ msgstr "Zapis ure po meri"
|
||||
|
||||
#~ msgid "Hour format"
|
||||
#~ msgstr "Urni zapis"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
|
||||
#~ "in time."
|
||||
#~ msgstr ""
|
||||
#~ "Izbrana možnost določa ali \"12-urni\" ali pa \"24-urni\" zapis časa s "
|
||||
#~ "prikazanimi sekundami."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "This key specifies the format used by the panel clock when the format key "
|
||||
#~ "is set to \"custom\". You can use conversion specifiers understood by "
|
||||
@ -1324,77 +1369,103 @@ msgstr "%1$s: %2$s"
|
||||
#~ "zapisa nastavljen kot \"prikrojen\". Za določitev zapisa lahko uporabite "
|
||||
#~ "tudi oznake funkcije strftime(), ki so podrobneje zapisane v priročniku "
|
||||
#~ "funkcije."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "This key specifies the hour format used by the panel clock. Possible "
|
||||
#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
|
||||
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. "
|
||||
#~ "1970-01-01. If set to \"custom\", the clock will display time according "
|
||||
#~ "to the format specified in the custom_format key. Note that if set to "
|
||||
#~ "either \"unix\" or \"custom\", the show_date and show_seconds keys are "
|
||||
#~ "ignored."
|
||||
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. 1970-"
|
||||
#~ "01-01. If set to \"custom\", the clock will display time according to the "
|
||||
#~ "format specified in the custom_format key. Note that if set to either "
|
||||
#~ "\"unix\" or \"custom\", the show_date and show_seconds keys are ignored."
|
||||
#~ msgstr ""
|
||||
#~ "Ključ določa zapis ure. Mogoče vrednosti so \"12-urni\", \"24-urni\", "
|
||||
#~ "\"unix\" in \"po meri\". Možnost \"unix\" prikazuje čas v sekundah od "
|
||||
#~ "začetka ere, torej od 01.01.1970, možnost \"po meri\" pa omogoča "
|
||||
#~ "prikrojen zapis. Pri izbiri zapisa \"unix\" ali \"po meri\" sta izbiri "
|
||||
#~ "pokaži datum in pokaži sekunde, prezrti."
|
||||
|
||||
#~ msgid "Clock Format"
|
||||
#~ msgstr "Zapis ure"
|
||||
|
||||
#~ msgid "Clock Preferences"
|
||||
#~ msgstr "Možnosti ure"
|
||||
|
||||
#~ msgid "Panel Display"
|
||||
#~ msgstr "Prikazovanje pladnja"
|
||||
|
||||
#~ msgid "Show seco_nds"
|
||||
#~ msgstr "Pokaži _sekunde"
|
||||
|
||||
#~ msgid "Show the _date"
|
||||
#~ msgstr "Pokaži _datum"
|
||||
|
||||
#~ msgid "_12 hour format"
|
||||
#~ msgstr "_12-urni zapis časa"
|
||||
|
||||
#~ msgid "_24 hour format"
|
||||
#~ msgstr "_24-urni zapis časa"
|
||||
|
||||
#~ msgid "Preferences"
|
||||
#~ msgstr "Možnosti"
|
||||
|
||||
#~ msgid "What's using power..."
|
||||
#~ msgstr "Kaj porablja napetost ..."
|
||||
|
||||
#~ msgid "Overview workspace view mode"
|
||||
#~ msgstr "Način pregleda predogleda delovnih površin"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The selected workspace view mode in the overview. Supported values are "
|
||||
#~ "\"single\" and \"grid\"."
|
||||
#~ msgstr ""
|
||||
#~ "Izbrani pogled delovnih površin v predogledu. Podprte vrednosti sta "
|
||||
#~ "\"enojno\" in \"mrežno\"."
|
||||
|
||||
#~ msgid "Drag here to add favorites"
|
||||
#~ msgstr "S potegom na to mesto se izbor doda med priljubljene"
|
||||
|
||||
#~ msgid "Find"
|
||||
#~ msgstr "Najdi"
|
||||
|
||||
#~ msgid "Invisible"
|
||||
#~ msgstr "Nevidno"
|
||||
|
||||
#~ msgid "System Preferences..."
|
||||
#~ msgstr "Sistemske možnosti ..."
|
||||
|
||||
#~ msgid "ON"
|
||||
#~ msgstr "⚪"
|
||||
|
||||
#~ msgid "OFF"
|
||||
#~ msgstr "⚫"
|
||||
|
||||
#~ msgid "Sidebar"
|
||||
#~ msgstr "Stranska vrstica"
|
||||
|
||||
#~ msgid "Recent Documents"
|
||||
#~ msgstr "Nedavni dokumenti"
|
||||
|
||||
#~ msgid "PLACES"
|
||||
#~ msgstr "Mesta"
|
||||
|
||||
#~ msgid "SEARCH RESULTS"
|
||||
#~ msgstr "Rezultati iskanja"
|
||||
|
||||
#~ msgid "Can't lock screen: %s"
|
||||
#~ msgstr "Ni mogoče zakleniti zaslona: %s"
|
||||
|
||||
#~ msgid "Can't temporarily set screensaver to blank screen: %s"
|
||||
#~ msgstr ""
|
||||
#~ "Ni mogoče začasno nastaviti črnega zaslona za ohranjevalnik zaslona: %s"
|
||||
|
||||
#~ msgid "Can't logout: %s"
|
||||
#~ msgstr "Ni se mogoče odjaviti: %s"
|
||||
|
||||
#~ msgid "Frequent"
|
||||
#~ msgstr "Pogosto"
|
||||
|
||||
#~ msgid "(see all)"
|
||||
#~ msgstr "(poglej vse)"
|
||||
|
||||
#~ msgid "Browse"
|
||||
#~ msgstr "Prebrskaj"
|
||||
|
||||
|
271
po/sv.po
@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-04-22 08:46+0200\n"
|
||||
"PO-Revision-Date: 2011-04-22 08:50+0100\n"
|
||||
"POT-Creation-Date: 2011-05-01 09:53+0200\n"
|
||||
"PO-Revision-Date: 2011-05-01 09:53+0100\n"
|
||||
"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
|
||||
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
|
||||
"Language: sv\n"
|
||||
@ -134,27 +134,27 @@ msgid "Execution of '%s' failed:"
|
||||
msgstr "Körning av \"%s\" misslyckades:"
|
||||
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:230
|
||||
#: ../js/ui/appDisplay.js:260
|
||||
msgid "All"
|
||||
msgstr "Alla"
|
||||
|
||||
#: ../js/ui/appDisplay.js:329
|
||||
#: ../js/ui/appDisplay.js:359
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "PROGRAM"
|
||||
|
||||
#: ../js/ui/appDisplay.js:355
|
||||
#: ../js/ui/appDisplay.js:385
|
||||
msgid "SETTINGS"
|
||||
msgstr "INSTÄLLNINGAR"
|
||||
|
||||
#: ../js/ui/appDisplay.js:626
|
||||
#: ../js/ui/appDisplay.js:658
|
||||
msgid "New Window"
|
||||
msgstr "Nytt fönster"
|
||||
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
#: ../js/ui/appDisplay.js:661
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Ta bort från favoriter"
|
||||
|
||||
#: ../js/ui/appDisplay.js:630
|
||||
#: ../js/ui/appDisplay.js:662
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Lägg till som favorit"
|
||||
|
||||
@ -288,14 +288,14 @@ msgstr "Ingenting i schemat"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||
#: ../js/ui/calendar.js:720
|
||||
#: ../js/ui/telepathyClient.js:492
|
||||
#: ../js/ui/telepathyClient.js:487
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %d %B"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||
#: ../js/ui/calendar.js:723
|
||||
#: ../js/ui/telepathyClient.js:495
|
||||
#: ../js/ui/telepathyClient.js:490
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%A, %d %B, %Y"
|
||||
@ -306,7 +306,7 @@ msgstr "Idag"
|
||||
|
||||
#: ../js/ui/calendar.js:737
|
||||
msgid "Tomorrow"
|
||||
msgstr "Igår"
|
||||
msgstr "Imorgon"
|
||||
|
||||
#: ../js/ui/calendar.js:746
|
||||
msgid "This week"
|
||||
@ -447,7 +447,7 @@ msgstr "Starta om systemet."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:413
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
#: ../js/ui/status/bluetooth.js:491
|
||||
msgid "Cancel"
|
||||
msgstr "Avbryt"
|
||||
|
||||
@ -509,18 +509,18 @@ msgid "Dash"
|
||||
msgstr "Favoriter"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:524
|
||||
#: ../js/ui/panel.js:533
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Avsluta %s"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:902
|
||||
#: ../js/ui/panel.js:913
|
||||
msgid "Activities"
|
||||
msgstr "Aktiviteter"
|
||||
|
||||
#: ../js/ui/panel.js:1003
|
||||
#: ../js/ui/panel.js:1015
|
||||
msgid "Top Bar"
|
||||
msgstr "Övre rad"
|
||||
|
||||
@ -578,11 +578,11 @@ msgstr "toggle-switch-intl"
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Ange ett kommando:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:311
|
||||
#: ../js/ui/searchDisplay.js:313
|
||||
msgid "Searching..."
|
||||
msgstr "Söker..."
|
||||
|
||||
#: ../js/ui/searchDisplay.js:325
|
||||
#: ../js/ui/searchDisplay.js:327
|
||||
msgid "No matching results."
|
||||
msgstr "Inga sökträffar."
|
||||
|
||||
@ -668,11 +668,11 @@ msgid "Large Text"
|
||||
msgstr "Stor text"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42
|
||||
#: ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333
|
||||
#: ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407
|
||||
#: ../js/ui/status/bluetooth.js:440
|
||||
#: ../js/ui/status/bluetooth.js:264
|
||||
#: ../js/ui/status/bluetooth.js:358
|
||||
#: ../js/ui/status/bluetooth.js:392
|
||||
#: ../js/ui/status/bluetooth.js:432
|
||||
#: ../js/ui/status/bluetooth.js:465
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -685,103 +685,103 @@ msgid "Send Files to Device..."
|
||||
msgstr "Skicka filer till enhet..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:70
|
||||
msgid "Setup a New Device..."
|
||||
msgid "Set up a New Device..."
|
||||
msgstr "Konfigurera en ny enhet..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:95
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Inställningar för Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:188
|
||||
#: ../js/ui/status/bluetooth.js:215
|
||||
msgid "Connection"
|
||||
msgstr "Anslutning"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:224
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
msgid "Send Files..."
|
||||
msgstr "Skicka filer..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:229
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
msgid "Browse Files..."
|
||||
msgstr "Bläddra efter filer..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:238
|
||||
#: ../js/ui/status/bluetooth.js:265
|
||||
msgid "Error browsing device"
|
||||
msgstr "Fel vid bläddring i enheten"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:239
|
||||
#: ../js/ui/status/bluetooth.js:266
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "Den begärda enheten kan inte bläddras. Felet är \"%s\""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
#: ../js/ui/status/bluetooth.js:274
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Tangentbordsinställningar"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:252
|
||||
#: ../js/ui/status/bluetooth.js:279
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Musinställningar"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:259
|
||||
#: ../js/ui/status/bluetooth.js:286
|
||||
#: ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "Ljudinställningar"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#: ../js/ui/status/bluetooth.js:393
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Auktoriseringsbegäran från %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:374
|
||||
#: ../js/ui/status/bluetooth.js:399
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "Enheten %s vill ha åtkomst till tjänsten \"%s\""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:376
|
||||
#: ../js/ui/status/bluetooth.js:401
|
||||
msgid "Always grant access"
|
||||
msgstr "Tillåt alltid åtkomst"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
#: ../js/ui/status/bluetooth.js:402
|
||||
msgid "Grant this time only"
|
||||
msgstr "Tillåt för denna gång"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:403
|
||||
msgid "Reject"
|
||||
msgstr "Neka"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#: ../js/ui/status/bluetooth.js:433
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Bekräftelse av ihopparning för %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:414
|
||||
#: ../js/ui/status/bluetooth.js:448
|
||||
#: ../js/ui/status/bluetooth.js:439
|
||||
#: ../js/ui/status/bluetooth.js:473
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "Enheten %s vill paras ihop med denna dator"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#: ../js/ui/status/bluetooth.js:440
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Bekräfta huruvida PIN-koden \"%s\" stämmer med den på enheten."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
#: ../js/ui/status/bluetooth.js:442
|
||||
msgid "Matches"
|
||||
msgstr "Stämmer"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
#: ../js/ui/status/bluetooth.js:443
|
||||
msgid "Does not match"
|
||||
msgstr "Stämmer inte"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:441
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Ihopparningsbegäran för %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:449
|
||||
#: ../js/ui/status/bluetooth.js:474
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Ange PIN-koden som anges på enheten."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:465
|
||||
#: ../js/ui/status/bluetooth.js:490
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
@ -793,142 +793,141 @@ msgstr "Visa tangentbordslayout..."
|
||||
msgid "Localization Settings"
|
||||
msgstr "Språkinställningar"
|
||||
|
||||
#: ../js/ui/status/network.js:109
|
||||
#: ../js/ui/status/network.js:1498
|
||||
#: ../js/ui/status/network.js:113
|
||||
msgid "<unknown>"
|
||||
msgstr "<okänd>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:326
|
||||
#: ../js/ui/status/network.js:330
|
||||
msgid "disabled"
|
||||
msgstr "inaktiverad"
|
||||
|
||||
#: ../js/ui/status/network.js:521
|
||||
#: ../js/ui/status/network.js:528
|
||||
msgid "connecting..."
|
||||
msgstr "ansluter..."
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:524
|
||||
#: ../js/ui/status/network.js:531
|
||||
msgid "authentication required"
|
||||
msgstr "autentisering krävs"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:534
|
||||
#: ../js/ui/status/network.js:541
|
||||
msgid "firmware missing"
|
||||
msgstr "fast programvara saknas"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:541
|
||||
#: ../js/ui/status/network.js:548
|
||||
msgid "cable unplugged"
|
||||
msgstr "kabeln är inte ansluten"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:546
|
||||
#: ../js/ui/status/network.js:553
|
||||
msgid "unavailable"
|
||||
msgstr "inte tillgänglig"
|
||||
|
||||
#: ../js/ui/status/network.js:548
|
||||
#: ../js/ui/status/network.js:555
|
||||
msgid "connection failed"
|
||||
msgstr "anslutningen misslyckades"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:628
|
||||
#: ../js/ui/status/network.js:1446
|
||||
#: ../js/ui/status/network.js:635
|
||||
#: ../js/ui/status/network.js:1532
|
||||
msgid "Connected (private)"
|
||||
msgstr "Ansluten (privat)"
|
||||
|
||||
#: ../js/ui/status/network.js:713
|
||||
#: ../js/ui/status/network.js:720
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Automatiskt ethernet"
|
||||
|
||||
#: ../js/ui/status/network.js:788
|
||||
#: ../js/ui/status/network.js:795
|
||||
msgid "Auto broadband"
|
||||
msgstr "Automatiskt bredband"
|
||||
|
||||
#: ../js/ui/status/network.js:791
|
||||
#: ../js/ui/status/network.js:798
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Automatiskt uppringt nätverk"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:937
|
||||
#: ../js/ui/status/network.js:1458
|
||||
#: ../js/ui/status/network.js:944
|
||||
#: ../js/ui/status/network.js:1544
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "Automatiskt %s"
|
||||
|
||||
#: ../js/ui/status/network.js:939
|
||||
#: ../js/ui/status/network.js:946
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Automatisk Bluetooth"
|
||||
|
||||
#: ../js/ui/status/network.js:1460
|
||||
#: ../js/ui/status/network.js:1546
|
||||
msgid "Auto wireless"
|
||||
msgstr "Automatiskt trådlöst nätverk"
|
||||
|
||||
#: ../js/ui/status/network.js:1518
|
||||
#: ../js/ui/status/network.js:1583
|
||||
msgid "More..."
|
||||
msgstr "Mer..."
|
||||
|
||||
#: ../js/ui/status/network.js:1541
|
||||
#: ../js/ui/status/network.js:1625
|
||||
msgid "Enable networking"
|
||||
msgstr "Aktivera nätverk"
|
||||
|
||||
#: ../js/ui/status/network.js:1553
|
||||
#: ../js/ui/status/network.js:1637
|
||||
msgid "Wired"
|
||||
msgstr "Trådbundet"
|
||||
|
||||
#: ../js/ui/status/network.js:1564
|
||||
#: ../js/ui/status/network.js:1648
|
||||
msgid "Wireless"
|
||||
msgstr "Trådlöst"
|
||||
|
||||
#: ../js/ui/status/network.js:1574
|
||||
#: ../js/ui/status/network.js:1658
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Mobilt bredband"
|
||||
|
||||
#: ../js/ui/status/network.js:1584
|
||||
#: ../js/ui/status/network.js:1668
|
||||
msgid "VPN Connections"
|
||||
msgstr "VPN-anslutningar"
|
||||
|
||||
#: ../js/ui/status/network.js:1596
|
||||
#: ../js/ui/status/network.js:1680
|
||||
msgid "Network Settings"
|
||||
msgstr "Nätverksinställningar"
|
||||
|
||||
#: ../js/ui/status/network.js:1890
|
||||
#: ../js/ui/status/network.js:1974
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "Du är nu ansluten till mobila bredbandsanslutningen \"%s\""
|
||||
|
||||
#: ../js/ui/status/network.js:1894
|
||||
#: ../js/ui/status/network.js:1978
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "Du är nu ansluten till trådlösa nätverket \"%s\""
|
||||
|
||||
#: ../js/ui/status/network.js:1898
|
||||
#: ../js/ui/status/network.js:1982
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "Du är nu ansluten till trådbundna nätverket \"%s\""
|
||||
|
||||
#: ../js/ui/status/network.js:1902
|
||||
#: ../js/ui/status/network.js:1986
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "Du är nu ansluten till VPN-nätverket \"%s\""
|
||||
|
||||
#: ../js/ui/status/network.js:1907
|
||||
#: ../js/ui/status/network.js:1991
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "Du är nu ansluten till \"%s\""
|
||||
|
||||
#: ../js/ui/status/network.js:1915
|
||||
#: ../js/ui/status/network.js:1999
|
||||
msgid "Connection established"
|
||||
msgstr "Anslutningen etablerad"
|
||||
|
||||
#: ../js/ui/status/network.js:2041
|
||||
#: ../js/ui/status/network.js:2125
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Nätverk är inaktiverat"
|
||||
|
||||
#: ../js/ui/status/network.js:2166
|
||||
#: ../js/ui/status/network.js:2250
|
||||
msgid "Network Manager"
|
||||
msgstr "Nätverkshanterare"
|
||||
|
||||
@ -1031,22 +1030,22 @@ msgstr "Volym"
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofon"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:335
|
||||
#: ../js/ui/telepathyClient.js:330
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s är ansluten."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#: ../js/ui/telepathyClient.js:335
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s är frånkopplad."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#: ../js/ui/telepathyClient.js:338
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s är frånvarande."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:346
|
||||
#: ../js/ui/telepathyClient.js:341
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s är upptagen."
|
||||
@ -1054,11 +1053,18 @@ msgstr "%s är upptagen."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:484
|
||||
#: ../js/ui/telepathyClient.js:479
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Skickades klockan %X på %A"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:524
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s är nu känd som %s"
|
||||
|
||||
#. Translators: this is the text displayed
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
@ -1113,38 +1119,6 @@ msgstr "Skriv ut version"
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Misslyckades med att starta \"%s\""
|
||||
|
||||
#: ../src/shell-global.c:1395
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Mindre än en minut sedan"
|
||||
|
||||
#: ../src/shell-global.c:1399
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d minut sedan"
|
||||
msgstr[1] "%d minuter sedan"
|
||||
|
||||
#: ../src/shell-global.c:1404
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d timme sedan"
|
||||
msgstr[1] "%d timmar sedan"
|
||||
|
||||
#: ../src/shell-global.c:1409
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d dag sedan"
|
||||
msgstr[1] "%d dagar sedan"
|
||||
|
||||
#: ../src/shell-global.c:1414
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d vecka sedan"
|
||||
msgstr[1] "%d veckor sedan"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:80
|
||||
msgid "United Kingdom"
|
||||
msgstr "Storbritannien"
|
||||
@ -1177,6 +1151,33 @@ msgstr "Filsystem"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Less than a minute ago"
|
||||
#~ msgstr "Mindre än en minut sedan"
|
||||
|
||||
#~ msgid "%d minute ago"
|
||||
|
||||
#~ msgid_plural "%d minutes ago"
|
||||
#~ msgstr[0] "%d minut sedan"
|
||||
#~ msgstr[1] "%d minuter sedan"
|
||||
|
||||
#~ msgid "%d hour ago"
|
||||
|
||||
#~ msgid_plural "%d hours ago"
|
||||
#~ msgstr[0] "%d timme sedan"
|
||||
#~ msgstr[1] "%d timmar sedan"
|
||||
|
||||
#~ msgid "%d day ago"
|
||||
|
||||
#~ msgid_plural "%d days ago"
|
||||
#~ msgstr[0] "%d dag sedan"
|
||||
#~ msgstr[1] "%d dagar sedan"
|
||||
|
||||
#~ msgid "%d week ago"
|
||||
|
||||
#~ msgid_plural "%d weeks ago"
|
||||
#~ msgstr[0] "%d vecka sedan"
|
||||
#~ msgstr[1] "%d veckor sedan"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "No such application"
|
||||
#~ msgstr "Program"
|
||||
@ -1184,90 +1185,128 @@ msgstr "%1$s: %2$s"
|
||||
#, fuzzy
|
||||
#~ msgid "Shut Down"
|
||||
#~ msgstr "Stäng av..."
|
||||
|
||||
#~ msgid "Screen Reader"
|
||||
#~ msgstr "Skärmläsare"
|
||||
|
||||
#~ msgid "Screen Keyboard"
|
||||
#~ msgstr "Skärmtangentbord"
|
||||
|
||||
#~ msgid "Clock"
|
||||
#~ msgstr "Klocka"
|
||||
|
||||
#~ msgid "Customize the panel clock"
|
||||
#~ msgstr "Anpassa panelklockan"
|
||||
|
||||
#~ msgid "Custom format of the clock"
|
||||
#~ msgstr "Anpassat format för klockan"
|
||||
|
||||
#~ msgid "Hour format"
|
||||
#~ msgstr "Timmesformat"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
|
||||
#~ "in time."
|
||||
#~ msgstr ""
|
||||
#~ "Om true och formatet antingen är \"12-hour\" eller \"24-hour\", visa "
|
||||
#~ "sekunder i tiden."
|
||||
|
||||
#~ msgid "Enable lens mode"
|
||||
#~ msgstr "Aktivera linsläge"
|
||||
|
||||
#~ msgid "Magnification factor"
|
||||
#~ msgstr "Förstoringsfaktor"
|
||||
|
||||
#~ msgid "Screen position"
|
||||
#~ msgstr "Skärmposition"
|
||||
|
||||
#~ msgid "Clock Format"
|
||||
#~ msgstr "Klockformat"
|
||||
|
||||
#~ msgid "Clock Preferences"
|
||||
#~ msgstr "Klockinställningar"
|
||||
|
||||
#~ msgid "Panel Display"
|
||||
#~ msgstr "Panelvisning"
|
||||
|
||||
#~ msgid "Show seco_nds"
|
||||
#~ msgstr "Visa seku_nder"
|
||||
|
||||
#~ msgid "Show the _date"
|
||||
#~ msgstr "Visa _datum"
|
||||
|
||||
#~ msgid "_12 hour format"
|
||||
#~ msgstr "_12-timmarsformat"
|
||||
|
||||
#~ msgid "_24 hour format"
|
||||
#~ msgstr "_24-timmarsformat"
|
||||
|
||||
#~ msgid "PREFERENCES"
|
||||
#~ msgstr "INSTÄLLNINGAR"
|
||||
|
||||
#~ msgid "Preferences"
|
||||
#~ msgstr "Inställningar"
|
||||
|
||||
#~ msgid "Search your computer"
|
||||
#~ msgstr "Sök i din dator"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Can't add a new workspace because maximum workspaces limit has been "
|
||||
#~ "reached."
|
||||
#~ msgstr ""
|
||||
#~ "Kan inte lägga till en ny arbetsyta eftersom maximalt antal arbetsytor "
|
||||
#~ "har uppnåtts."
|
||||
|
||||
#~ msgid "Can't remove the first workspace."
|
||||
#~ msgstr "Kan inte ta bort första arbetsytan."
|
||||
|
||||
#~ msgid "Drag here to add favorites"
|
||||
#~ msgstr "Dra hit för att lägga till favorit"
|
||||
|
||||
#~ msgid "Find"
|
||||
#~ msgstr "Sök"
|
||||
|
||||
#~ msgid "ON"
|
||||
#~ msgstr "PÅ"
|
||||
|
||||
#~ msgid "OFF"
|
||||
#~ msgstr "AV"
|
||||
|
||||
#~ msgid "Invisible"
|
||||
#~ msgstr "Osynlig"
|
||||
|
||||
#~ msgid "PLACES"
|
||||
#~ msgstr "PLATSER"
|
||||
|
||||
#~ msgid "SEARCH RESULTS"
|
||||
#~ msgstr "SÖKRESULTAT"
|
||||
|
||||
#~ msgid "Recent Documents"
|
||||
#~ msgstr "Senaste dokument"
|
||||
|
||||
#~ msgid "(see all)"
|
||||
#~ msgstr "(se alla)"
|
||||
|
||||
#~ msgid "Can't lock screen: %s"
|
||||
#~ msgstr "Kan inte låsa skärmen: %s"
|
||||
|
||||
#~ msgid "Can't temporarily set screensaver to blank screen: %s"
|
||||
#~ msgstr "Kan inte temporärt ställa in skärmsläckaren till blank skärm: %s"
|
||||
|
||||
#~ msgid "Can't logout: %s"
|
||||
#~ msgstr "Kan inte logga ut: %s"
|
||||
|
||||
#~ msgid "Sidebar"
|
||||
#~ msgstr "Sidopanel"
|
||||
|
||||
#~ msgid "Browse"
|
||||
#~ msgstr "Bläddra"
|
||||
|
||||
#~ msgid "Find apps or documents"
|
||||
#~ msgstr "Hitta program eller dokument"
|
||||
|
||||
#~ msgid "DOCUMENTS"
|
||||
#~ msgstr "DOKUMENT"
|
||||
|
||||
#~ msgid "The user manager object this user is controlled by."
|
||||
#~ msgstr "Användarhanteringsobjektet som denna användare styrs av."
|
||||
|
||||
|
309
po/ug.po
@ -1,19 +1,20 @@
|
||||
# Uyghur translation for gnome-shell.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Gheyret Kenji<gheyret@yahoo.com>,2010.
|
||||
# Sahran <sahran.ug@gmail.com>, 2010.
|
||||
# Zeper <zeper@msn.com>, 2010.
|
||||
# Bakhtiyar<bakhtiyar108@gmail.com>, 2011
|
||||
# Oghlan Temkin <temkin119@gmail.com>,2011
|
||||
#
|
||||
# Uyghur translation for gnome-shell.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Gheyret Kenji<gheyret@yahoo.com>,2010.
|
||||
# Sahran <sahran.ug@gmail.com>, 2010.
|
||||
# Zeper <zeper@msn.com>, 2010.
|
||||
# Bakhtiyar<bakhtiyar108@gmail.com>, 2011
|
||||
# Oghlan Temkin <temkin119@gmail.com>,2011
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-03-24 08:03+0000\n"
|
||||
"PO-Revision-Date: 2010-11-25 14:28+0600\n"
|
||||
"Last-Translator: Oghlan Temkin <temkin119@gmail.com>\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2011-05-02 05:27+0000\n"
|
||||
"PO-Revision-Date: 2011-04-27 11:38+0600\n"
|
||||
"Last-Translator: Sahran <sahran.ug@gmail.com>\n"
|
||||
"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -32,34 +33,41 @@ msgstr "كۆزنەك باشقۇرۇش ۋە پروگرامما ئىجرا قىل
|
||||
msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
"dialog."
|
||||
msgstr "ئىچكى سازلاش ۋە كۆزىتىش قورالىنى زىيارەت قىلىشتا Alt-F2 ئىشلىتىشكە ئىجازەت."
|
||||
msgstr ""
|
||||
"ئىچكى سازلاش ۋە كۆزىتىش قورالىنى زىيارەت قىلىشتا Alt-F2 ئىشلىتىشكە ئىجازەت."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
msgstr "ئىچكى قورال قوزغىتىلسا ئىجادكارلار ۋە سىنىغۇچىلارنىڭ Alt-F2 ئارقىلىق كىرىشىگە قۇلايلىق"
|
||||
msgstr ""
|
||||
"ئىچكى قورال قوزغىتىلسا ئىجادكارلار ۋە سىنىغۇچىلارنىڭ Alt-F2 ئارقىلىق "
|
||||
"كىرىشىگە قۇلايلىق"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "ئېكران كەسمىسى (screencasts) ساقلاشتا ئىشلىتىلىدىغان ھۆججەتنىڭ كېڭەيتىلگەن ئاتى"
|
||||
msgstr ""
|
||||
"ئېكران كەسمىسى (screencasts) ساقلاشتا ئىشلىتىلىدىغان ھۆججەتنىڭ كېڭەيتىلگەن "
|
||||
"ئاتى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "ئېكران كەسمىسى (screencasts) خاتىرىلەشتە ئىشلىتىلىدىغان كاندۇك تېزلىكى."
|
||||
msgstr ""
|
||||
"ئېكران كەسمىسى (screencasts) خاتىرىلەشتە ئىشلىتىلىدىغان كاندۇك تېزلىكى."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should not be loaded."
|
||||
msgstr "GNOME Shell كېڭەيتىلمىسىنىڭ uuid خاسلىقى بار؛ بۇ كۇنۇپكا يۈكلەنمەيدىغان كېڭەيتىلمىلەر تىزىملىكىنى كۆرسىتىدۇ."
|
||||
msgstr ""
|
||||
"GNOME Shell كېڭەيتىلمىسىنىڭ uuid خاسلىقى بار؛ بۇ كۇنۇپكا يۈكلەنمەيدىغان "
|
||||
"كېڭەيتىلمىلەر تىزىمىنى كۆرسىتىدۇ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr "بۇيرۇق (Alt-F2) سۆزلەشكۈنىڭ تارىخى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
#| msgid "History for command (Alt-F2) dialog"
|
||||
msgid "History for the looking glass dialog"
|
||||
msgstr ""
|
||||
msgstr "looking glass سۆزلەشكۈنىڭ تارىخى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||
msgid "If true, display date in the clock, in addition to time."
|
||||
@ -75,7 +83,7 @@ msgstr "ئەگەر راست(true) بولسا يىلنامىدىكى ISO ھەپت
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr "ئامراق پروگراممىلارنىڭ ئۈستەلئۈستى ھۆججەت ID تىزىملىكى"
|
||||
msgstr "ئامراق پروگراممىلارنىڭ ئۈستەلئۈستى ھۆججەت ID تىزىمى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
#, no-c-format
|
||||
@ -90,7 +98,18 @@ msgid ""
|
||||
"'videorate ! vp8enc quality=10 speed=2 threads=%T ! queue ! webmmux' and "
|
||||
"records to WEBM using the VP8 codec. %T is used as a placeholder for a guess "
|
||||
"at the optimal thread count on the system."
|
||||
msgstr "ئۈن ئېلىشنى كودلاشتا ئىشلىتىلىدىغان GStreamer ئاقما لىنىيىنى تەڭشەيدۇ. ئۇ gst-launch گرامماتىكىسىغا بوي سۇنىدۇ. بۇ ئاقما لىنىيىدە ئۇلانمىغان sink pad بولۇشى لازىم، خاتىرىلىنىدىغان سىن مۇشۇ جايدا خاتىرىلىنىدۇ. بۇ لىنىيىدە ئادەتتە يەنە بىر ئۇلانمىغان مەنبە pad بولىدۇ؛ بۇ pad چىقارغان ئۇچۇرلار ھۆججەتكە يېزىلىدۇ. ئەمما ئاقما لىنىيە ئۆزىنىڭ چىقىرىشىنى بىر تەرەپ قىلالايدۇ، بۇنداق بولغاندا shout2send ئارقىلىق ياكى شۇنىڭغا ئوخشاش ئۇسۇلدا چىقىرىشنى icecast مۇلازىمېتىرىغا يوللايدۇ. ئاقما لىنىيە تەڭشەلمىگەن ياكى بوش قىممەتكە تەڭشەلگەندە كۆڭۈلدىكى ئاقما لىنىيە قوزغىتىلىدۇ. ئۇنىڭ نۆۋەتتىكى قىممىتى 'videorate ! vp8enc سۈپەت=10 سۈرەت=2 سىزىقلار=%T ! قاتار! webmmux' ۋە WEBM گە خاتىرىلەنگەنلەر VP8 كودىنى ئىشلىتىدۇ. T% بولسا سىستېمىنىڭ ئەڭ ياخشى سىزىق ئېلىپبەسىنى ھېسابلايدىغان ئورۇن بەلگىسى"
|
||||
msgstr ""
|
||||
"ئۈن ئېلىشنى كودلاشتا ئىشلىتىلىدىغان GStreamer ئاقما لىنىيىنى تەڭشەيدۇ. ئۇ "
|
||||
"gst-launch گرامماتىكىسىغا بوي سۇنىدۇ. بۇ ئاقما لىنىيىدە ئۇلانمىغان sink pad "
|
||||
"بولۇشى لازىم، خاتىرىلىنىدىغان سىن مۇشۇ جايدا خاتىرىلىنىدۇ. بۇ لىنىيىدە "
|
||||
"ئادەتتە يەنە بىر ئۇلانمىغان مەنبە pad بولىدۇ؛ بۇ pad چىقارغان ئۇچۇرلار "
|
||||
"ھۆججەتكە يېزىلىدۇ. ئەمما ئاقما لىنىيە ئۆزىنىڭ چىقىرىشىنى بىر تەرەپ "
|
||||
"قىلالايدۇ، بۇنداق بولغاندا shout2send ئارقىلىق ياكى شۇنىڭغا ئوخشاش ئۇسۇلدا "
|
||||
"چىقىرىشنى icecast مۇلازىمېتىرىغا يوللايدۇ. ئاقما لىنىيە تەڭشەلمىگەن ياكى بوش "
|
||||
"قىممەتكە تەڭشەلگەندە كۆڭۈلدىكى ئاقما لىنىيە قوزغىتىلىدۇ. ئۇنىڭ نۆۋەتتىكى "
|
||||
"قىممىتى 'videorate ! vp8enc سۈپەت=10 سۈرەت=2 سىزىقلار=%T ! قاتار! webmmux' "
|
||||
"ۋە WEBM گە خاتىرىلەنگەنلەر VP8 كودىنى ئىشلىتىدۇ. T% بولسا سىستېمىنىڭ ئەڭ "
|
||||
"ياخشى سىزىق ئېلىپبەسىنى ھېسابلايدىغان ئورۇن بەلگىسى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
@ -115,13 +134,18 @@ msgid ""
|
||||
"The filename for recorded screencasts will be a unique filename based on the "
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
"a different container format."
|
||||
msgstr "خاتىرىلەنگەن ئېكراننىڭ ھۆججەت ئاتى نۆۋەتتىكى چېسلا ئاساسىدا بىردىنبىر بولۇپ بۇ كېڭەيتىلگەن ئاتىنى ئىشلىتىدۇ. ئۇ ئۆزگەرسە ئوخشاش بولمىغان قاچا فورماتىدا خاتىرىلەيدۇ."
|
||||
msgstr ""
|
||||
"خاتىرىلەنگەن ئېكراننىڭ ھۆججەت ئاتى نۆۋەتتىكى چېسلا ئاساسىدا بىردىنبىر بولۇپ "
|
||||
"بۇ كېڭەيتىلگەن ئاتىنى ئىشلىتىدۇ. ئۇ ئۆزگەرسە ئوخشاش بولمىغان قاچا فورماتىدا "
|
||||
"خاتىرىلەيدۇ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr "GNOME Shell ئېكران خاتىرىلىگۈچ ھەر سېكۇنتتا خاتىرىلەيدىغان ئېكران كەسمىسى كاندۇك سۈرىتى(ھەر سېكۇنتتىكى كاندۇك سانى)."
|
||||
msgstr ""
|
||||
"GNOME Shell ئېكران خاتىرىلىگۈچ ھەر سېكۇنتتا خاتىرىلەيدىغان ئېكران كەسمىسى "
|
||||
"كاندۇك سۈرىتى(ھەر سېكۇنتتىكى كاندۇك سانى)."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
@ -133,7 +157,11 @@ msgid ""
|
||||
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
||||
"want to disable this for privacy reasons. Please note that doing so won't "
|
||||
"remove already saved data."
|
||||
msgstr "چاپان (shell) ئادەتتىكى ئەھۋالدا كۆپ ئىشلىتىلىدىغان ئاكتىپ پروگراممىلار(مەسىلەن، ئىجرا قىلىنىۋاتقان)نى كۆزىتىدۇ. گەرچە بۇ سانلىق مەلۇماتلار مەخپىي ساقلانسىمۇ، شەخسىي سىر سەۋەبىدىن بۇنى چەكلىشىڭىز مۇمكىن. دىققەت بۇنداق قىلغاندا ئاللىبۇرۇن ساقلانغان سانلىق مەلۇماتلار چىقىرىۋېتىلمەيدۇ."
|
||||
msgstr ""
|
||||
"چاپان (shell) ئادەتتىكى ئەھۋالدا كۆپ ئىشلىتىلىدىغان ئاكتىپ پروگراممىلار"
|
||||
"(مەسىلەن، ئىجرا قىلىنىۋاتقان)نى كۆزىتىدۇ. گەرچە بۇ سانلىق مەلۇماتلار مەخپىي "
|
||||
"ساقلانسىمۇ، شەخسىي سىر سەۋەبىدىن بۇنى چەكلىشىڭىز مۇمكىن. دىققەت بۇنداق "
|
||||
"قىلغاندا ئاللىبۇرۇن ساقلانغان سانلىق مەلۇماتلار چىقىرىۋېتىلمەيدۇ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid "Uuids of extensions to disable"
|
||||
@ -163,27 +191,27 @@ msgid "Execution of '%s' failed:"
|
||||
msgstr "«%s» ئىجرا قىلىش مەغلۇپ بولدى:"
|
||||
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:230
|
||||
#: ../js/ui/appDisplay.js:260
|
||||
msgid "All"
|
||||
msgstr "ھەممىسى"
|
||||
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
#: ../js/ui/appDisplay.js:359
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "پروگراممىلار"
|
||||
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
#: ../js/ui/appDisplay.js:385
|
||||
msgid "SETTINGS"
|
||||
msgstr ""
|
||||
msgstr "تەڭشەكلەر"
|
||||
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
#: ../js/ui/appDisplay.js:656
|
||||
msgid "New Window"
|
||||
msgstr "يېڭى كۆزنەك"
|
||||
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
#: ../js/ui/appDisplay.js:659
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "يىغقۇچتىن چىقىرىۋەت"
|
||||
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
#: ../js/ui/appDisplay.js:660
|
||||
msgid "Add to Favorites"
|
||||
msgstr "يىغقۇچقا قوش"
|
||||
|
||||
@ -316,13 +344,13 @@ msgid "Nothing Scheduled"
|
||||
msgstr "ھېچنېمە پىلانلانمىدى"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||
#: ../js/ui/calendar.js:720
|
||||
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:492
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A، %B %d"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||
#: ../js/ui/calendar.js:723
|
||||
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:495
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%A، %B %d، %Y"
|
||||
@ -343,7 +371,7 @@ msgstr "بۇ ھەپتە"
|
||||
msgid "Next week"
|
||||
msgstr "كېيىنكى ھەپتە"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:994
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1037
|
||||
msgid "Remove"
|
||||
msgstr "چىقىرىۋەت"
|
||||
|
||||
@ -393,7 +421,7 @@ msgstr "%a %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/dateMenu.js:183
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%p%l:%M (%a)"
|
||||
msgstr "%a %l:%M"
|
||||
|
||||
#. Translators: This is the date format to use when the calendar popup is
|
||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||
@ -417,7 +445,9 @@ msgstr "تىزىمدىن چىق"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:65
|
||||
msgid "Click Log Out to quit these applications and log out of the system."
|
||||
msgstr "تىزىمدىن چىقىش (Log Out) نى بېسىپ پروگراممىدىن چېكىنىش ۋە سىستېما تىزىمىدىن چىقىش."
|
||||
msgstr ""
|
||||
"تىزىمدىن چىقىش (Log Out) نى بېسىپ پروگراممىدىن چېكىنىش ۋە سىستېما تىزىمىدىن "
|
||||
"چىقىش."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:66
|
||||
#, c-format
|
||||
@ -435,23 +465,21 @@ msgstr "سىستېما تىزىمدىن چىقىۋاتىدۇ"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:75 ../js/ui/endSessionDialog.js:82
|
||||
msgid "Power Off"
|
||||
msgstr ""
|
||||
msgstr "توكنى ئۈز"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:76
|
||||
#| msgid "Click Log Out to quit these applications and log out of the system."
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr ""
|
||||
"تۈكنى ئۈز چېكىلسە قوللىنىشچان پروگراممىلاردىن چېكىنىپ سىستېمىنى تاقايدۇ."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:77
|
||||
#, c-format
|
||||
#| msgid "The system will restart automatically in %d seconds."
|
||||
msgid "The system will power off automatically in %d seconds."
|
||||
msgstr ""
|
||||
msgstr "بۇ سىستېما %d سېكۇنتتىن كېيىن ئۆزلۈكىدىن تاقىلىدۇ."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:78
|
||||
#| msgid "Logging out of the system."
|
||||
msgid "Powering off the system."
|
||||
msgstr ""
|
||||
msgstr "سىستېمىنى تاقاۋاتىدۇ."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:88
|
||||
#: ../js/ui/endSessionDialog.js:93
|
||||
@ -460,7 +488,9 @@ msgstr "قايتا قوزغات"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:89
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr "قايتا قوزغىتىش (restart) نى بېسىپ پروگراممىدىن چېكىنىش ۋە سىستېمىنى قايتا قوزغىتىش."
|
||||
msgstr ""
|
||||
"قايتا قوزغات (restart) چېكىلسە پروگراممىدىن چېكىنىپ ۋە سىستېمىنى قايتا "
|
||||
"قوزغىتىدۇ."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:90
|
||||
#, c-format
|
||||
@ -471,7 +501,7 @@ msgstr "بۇ سىستېما %d سېكۇنتتىن كېيىن ئۆزلۈكىدى
|
||||
msgid "Restarting the system."
|
||||
msgstr "سىستېما قايتا قوزغىلىۋاتىدۇ."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/endSessionDialog.js:413 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
msgid "Cancel"
|
||||
msgstr "ۋاز كەچ"
|
||||
@ -506,11 +536,11 @@ msgstr "مەنبەنى كۆرسەت"
|
||||
msgid "Web Page"
|
||||
msgstr "توربەت"
|
||||
|
||||
#: ../js/ui/messageTray.js:987
|
||||
#: ../js/ui/messageTray.js:1030
|
||||
msgid "Open"
|
||||
msgstr "ئاچ"
|
||||
|
||||
#: ../js/ui/messageTray.js:2145
|
||||
#: ../js/ui/messageTray.js:2194
|
||||
msgid "System Information"
|
||||
msgstr "سىستېما ئۇچۇرى"
|
||||
|
||||
@ -530,23 +560,23 @@ msgstr "پروگراممىلار"
|
||||
#. the left of the overview
|
||||
#: ../js/ui/overview.js:205
|
||||
msgid "Dash"
|
||||
msgstr ""
|
||||
msgstr "سىزىقچە"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:515
|
||||
#: ../js/ui/panel.js:533
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "%s چېكىن"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:878
|
||||
#: ../js/ui/panel.js:911
|
||||
msgid "Activities"
|
||||
msgstr "پائالىيەتلەر"
|
||||
|
||||
#: ../js/ui/panel.js:979
|
||||
#: ../js/ui/panel.js:1012
|
||||
msgid "Top Bar"
|
||||
msgstr ""
|
||||
msgstr "ئۈستى بالداق"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:122
|
||||
#, c-format
|
||||
@ -575,13 +605,17 @@ msgstr "باشقۇرغۇچى"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:176
|
||||
msgid "Authenticate"
|
||||
msgstr ""
|
||||
msgstr "سالاھىيەت دەلىللەش"
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:260
|
||||
#. 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/polkitAuthenticationAgent.js:264
|
||||
msgid "Sorry, that didn't work. Please try again."
|
||||
msgstr ""
|
||||
msgstr "كەچۈرۈڭ، خىزمەت قىلالمايدۇ. قايتا سىناڭ."
|
||||
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:272
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:276
|
||||
msgid "Password:"
|
||||
msgstr "ئىم:"
|
||||
|
||||
@ -598,17 +632,18 @@ msgstr "toggle-switch-us"
|
||||
msgid "Please enter a command:"
|
||||
msgstr "بۇيرۇق كىرگۈزۈڭ:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:310
|
||||
#: ../js/ui/searchDisplay.js:311
|
||||
msgid "Searching..."
|
||||
msgstr "ئىزدەۋاتىدۇ..."
|
||||
msgstr "ئىزدەۋاتىدۇ…"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:324
|
||||
#: ../js/ui/searchDisplay.js:325
|
||||
msgid "No matching results."
|
||||
msgstr "ماس كېلىدىغان نەتىجە يوق."
|
||||
|
||||
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:228
|
||||
#: ../js/ui/statusMenu.js:161 ../js/ui/statusMenu.js:163
|
||||
#: ../js/ui/statusMenu.js:228
|
||||
msgid "Power Off..."
|
||||
msgstr ""
|
||||
msgstr "توكنى ئۈز…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:163 ../js/ui/statusMenu.js:227
|
||||
msgid "Suspend"
|
||||
@ -658,7 +693,7 @@ msgstr "كۆرۈنمە ئاگاھلاندۇرۇش"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:80
|
||||
msgid "Sticky Keys"
|
||||
msgstr "Sticky Keys"
|
||||
msgstr "چاپلاش كۇنۇپكىسى"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:83
|
||||
msgid "Slow Keys"
|
||||
@ -666,11 +701,11 @@ msgstr "Slow Keys"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:86
|
||||
msgid "Bounce Keys"
|
||||
msgstr "Bounce Keys"
|
||||
msgstr "قاڭقىش كۇنۇپكىسى"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:89
|
||||
msgid "Mouse Keys"
|
||||
msgstr "Mouse Keys"
|
||||
msgstr "چاشقىنەك كۇنۇپكا"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:93
|
||||
msgid "Universal Access Settings"
|
||||
@ -774,7 +809,8 @@ msgstr "ئۈسكۈنە'%s' كومپيۇتېر بىلەن جۈپلەنمەكچى"
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "سىز كىرگۈزگەن PIN '%s' نومۇرى ئۈسكىنىدىكىگە ئوخشايدىغانلىقىنى جەزملەڭ."
|
||||
msgstr ""
|
||||
"سىز كىرگۈزگەن PIN '%s' نومۇرى ئۈسكىنىدىكىگە ئوخشايدىغانلىقىنى جەزملەڭ."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
msgid "Matches"
|
||||
@ -799,149 +835,145 @@ msgstr "جەزملە"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:73
|
||||
msgid "Show Keyboard Layout..."
|
||||
msgstr ""
|
||||
msgstr "كۇنۇپكا تاختا ئورۇنلاشتۇرۇلۇشىنى كۆرسەت…"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:76
|
||||
msgid "Localization Settings"
|
||||
msgstr "يەرلىكلەشتۈرۈش تەڭشىكى"
|
||||
|
||||
#: ../js/ui/status/network.js:102 ../js/ui/status/network.js:1393
|
||||
#| msgid "Unknown"
|
||||
#: ../js/ui/status/network.js:109 ../js/ui/status/network.js:1501
|
||||
msgid "<unknown>"
|
||||
msgstr ""
|
||||
msgstr "<يوچۇن>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:295
|
||||
#| msgid "Disabled"
|
||||
#: ../js/ui/status/network.js:326
|
||||
msgid "disabled"
|
||||
msgstr ""
|
||||
msgstr "چەكلەنگەن"
|
||||
|
||||
#: ../js/ui/status/network.js:476
|
||||
#| msgid "Connection"
|
||||
#: ../js/ui/status/network.js:524
|
||||
msgid "connecting..."
|
||||
msgstr ""
|
||||
msgstr "باغلىنىۋاتىدۇ…"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:479
|
||||
#: ../js/ui/status/network.js:527
|
||||
msgid "authentication required"
|
||||
msgstr ""
|
||||
msgstr "سالاھىيەت دەلىللەش زۆرۈر"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:537
|
||||
msgid "firmware missing"
|
||||
msgstr "مۇقىم دېتال كەم"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:485
|
||||
#: ../js/ui/status/network.js:544
|
||||
msgid "cable unplugged"
|
||||
msgstr ""
|
||||
msgstr "كابېل چېتىلمىدى"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:489
|
||||
#| msgid "Available"
|
||||
#: ../js/ui/status/network.js:549
|
||||
msgid "unavailable"
|
||||
msgstr ""
|
||||
msgstr "ئىشلەتكىلى بولمايدۇ"
|
||||
|
||||
#: ../js/ui/status/network.js:491
|
||||
#| msgid "Connection"
|
||||
#: ../js/ui/status/network.js:551
|
||||
msgid "connection failed"
|
||||
msgstr ""
|
||||
msgstr "باغلىنىش مەغلۇپ بولدى"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:571 ../js/ui/status/network.js:1341
|
||||
#: ../js/ui/status/network.js:631 ../js/ui/status/network.js:1449
|
||||
msgid "Connected (private)"
|
||||
msgstr ""
|
||||
msgstr "باغلاندى (شەخسىي)"
|
||||
|
||||
#: ../js/ui/status/network.js:636
|
||||
#: ../js/ui/status/network.js:716
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "ئاپتوماتىك Ethernet"
|
||||
|
||||
#: ../js/ui/status/network.js:697
|
||||
#: ../js/ui/status/network.js:791
|
||||
msgid "Auto broadband"
|
||||
msgstr ""
|
||||
msgstr "ئاپتوماتىك كۆچمە كەڭ بەلۋاغ"
|
||||
|
||||
#: ../js/ui/status/network.js:700
|
||||
#: ../js/ui/status/network.js:794
|
||||
msgid "Auto dial-up"
|
||||
msgstr ""
|
||||
msgstr "ئاپتوماتىك نومۇر بۇرا"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:843 ../js/ui/status/network.js:1353
|
||||
#: ../js/ui/status/network.js:940 ../js/ui/status/network.js:1461
|
||||
#, c-format
|
||||
#| msgid "Quit %s"
|
||||
msgid "Auto %s"
|
||||
msgstr ""
|
||||
msgstr "ئاپتوماتىك %s"
|
||||
|
||||
#: ../js/ui/status/network.js:845
|
||||
#| msgid "Bluetooth"
|
||||
#: ../js/ui/status/network.js:942
|
||||
msgid "Auto bluetooth"
|
||||
msgstr ""
|
||||
msgstr "ئاپتوماتىك كۆكچىش"
|
||||
|
||||
#: ../js/ui/status/network.js:1355
|
||||
#: ../js/ui/status/network.js:1463
|
||||
msgid "Auto wireless"
|
||||
msgstr ""
|
||||
msgstr "ئاپتوماتىك سىمسىز تور"
|
||||
|
||||
#: ../js/ui/status/network.js:1413
|
||||
#: ../js/ui/status/network.js:1521
|
||||
msgid "More..."
|
||||
msgstr "تېخىمۇ كۆپ..."
|
||||
msgstr "تېخىمۇ كۆپ…"
|
||||
|
||||
#: ../js/ui/status/network.js:1436
|
||||
#: ../js/ui/status/network.js:1544
|
||||
msgid "Enable networking"
|
||||
msgstr ""
|
||||
msgstr "تور ئۇلاشنى قوزغات"
|
||||
|
||||
#: ../js/ui/status/network.js:1448
|
||||
#: ../js/ui/status/network.js:1556
|
||||
msgid "Wired"
|
||||
msgstr "سىملىق"
|
||||
|
||||
#: ../js/ui/status/network.js:1459
|
||||
#: ../js/ui/status/network.js:1567
|
||||
msgid "Wireless"
|
||||
msgstr "سىمسىز"
|
||||
|
||||
#: ../js/ui/status/network.js:1469
|
||||
#: ../js/ui/status/network.js:1577
|
||||
msgid "Mobile broadband"
|
||||
msgstr "كۆچمە كەڭ بەلۋاغ"
|
||||
|
||||
#: ../js/ui/status/network.js:1479
|
||||
#| msgid "Connection"
|
||||
#: ../js/ui/status/network.js:1587
|
||||
msgid "VPN Connections"
|
||||
msgstr ""
|
||||
msgstr "VPN باغلىنىشلىرى"
|
||||
|
||||
#: ../js/ui/status/network.js:1488
|
||||
#| msgid "Power Settings"
|
||||
#: ../js/ui/status/network.js:1599
|
||||
msgid "Network Settings"
|
||||
msgstr "تور تەڭشەكلىرى"
|
||||
|
||||
#: ../js/ui/status/network.js:1783
|
||||
#: ../js/ui/status/network.js:1893
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr ""
|
||||
msgstr "ھازىر كۆچمە كەڭ بەلۋاغ '%s' غا باغلاندىڭىز"
|
||||
|
||||
#: ../js/ui/status/network.js:1787
|
||||
#: ../js/ui/status/network.js:1897
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr ""
|
||||
msgstr "ھازىر سىمسىز تور '%s' غا باغلاندىڭىز"
|
||||
|
||||
#: ../js/ui/status/network.js:1791
|
||||
#: ../js/ui/status/network.js:1901
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr ""
|
||||
msgstr "ھازىر سىملىق تور '%s' غا باغلاندىڭىز"
|
||||
|
||||
#: ../js/ui/status/network.js:1795
|
||||
#: ../js/ui/status/network.js:1905
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr ""
|
||||
msgstr "ھازىر VPN تور '%s' غا باغلاندىڭىز"
|
||||
|
||||
#: ../js/ui/status/network.js:1800
|
||||
#: ../js/ui/status/network.js:1910
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr ""
|
||||
msgstr "ھازىر '%s' غا باغلاندىڭىز"
|
||||
|
||||
#: ../js/ui/status/network.js:1808
|
||||
#| msgid "Connection"
|
||||
#: ../js/ui/status/network.js:1918
|
||||
msgid "Connection established"
|
||||
msgstr ""
|
||||
msgstr "باغلىنىش تۇرغۇزۇلدى"
|
||||
|
||||
#: ../js/ui/status/network.js:1930
|
||||
#: ../js/ui/status/network.js:2044
|
||||
msgid "Networking is disabled"
|
||||
msgstr ""
|
||||
msgstr "تورغا باغلىنىش چەكلەنگەن"
|
||||
|
||||
#: ../js/ui/status/network.js:2055
|
||||
#: ../js/ui/status/network.js:2169
|
||||
msgid "Network Manager"
|
||||
msgstr "تور باشقۇرغۇچ"
|
||||
|
||||
@ -953,7 +985,7 @@ msgstr "توك مەنبە تەڭشىكى"
|
||||
#. to estimate battery life
|
||||
#: ../js/ui/status/power.js:111
|
||||
msgid "Estimating..."
|
||||
msgstr ""
|
||||
msgstr "مۆلچەرلەۋاتىدۇ…"
|
||||
|
||||
#: ../js/ui/status/power.js:118
|
||||
#, c-format
|
||||
@ -1039,22 +1071,22 @@ msgstr "دىسكا"
|
||||
msgid "Microphone"
|
||||
msgstr "مىكروفون"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:332
|
||||
#: ../js/ui/telepathyClient.js:335
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s توردا."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:337
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s توردا يوق."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:340
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s يوق."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:343
|
||||
#: ../js/ui/telepathyClient.js:346
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s ئالدىراش."
|
||||
@ -1062,7 +1094,7 @@ msgstr "%s ئالدىراش."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:474
|
||||
#: ../js/ui/telepathyClient.js:484
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "سائەت %X %A غا ئەۋەتتى"
|
||||
@ -1073,7 +1105,7 @@ msgstr "سائەت %X %A غا ئەۋەتتى"
|
||||
#. characters.
|
||||
#: ../js/ui/viewSelector.js:122
|
||||
msgid "Type to search..."
|
||||
msgstr ""
|
||||
msgstr "كىرگۈزسە ئىزدە…"
|
||||
|
||||
#: ../js/ui/viewSelector.js:142 ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
@ -1109,15 +1141,14 @@ msgstr[0] "%u كىرگۈزۈلمە"
|
||||
msgid "System Sounds"
|
||||
msgstr "سىستېما ئاۋازى"
|
||||
|
||||
#: ../src/main.c:446
|
||||
#: ../src/main.c:445
|
||||
msgid "Print version"
|
||||
msgstr "نەشرىنى باس"
|
||||
|
||||
#: ../src/shell-app.c:454
|
||||
#, c-format
|
||||
#| msgid "Failed to unmount '%s'"
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr ""
|
||||
msgstr "'%s' نى قوزغىتالمىدى"
|
||||
|
||||
#: ../src/shell-global.c:1395
|
||||
msgid "Less than a minute ago"
|
||||
@ -1157,7 +1188,7 @@ msgstr "كۆڭۈلدىكى"
|
||||
|
||||
#: ../src/shell-polkit-authentication-agent.c:334
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr ""
|
||||
msgstr "سالاھىيەت دەلىللەش سۆزلەشكۈنى ئىشلەتكۈچى رەت قىلدى"
|
||||
|
||||
#: ../src/shell-util.c:89
|
||||
msgid "Home Folder"
|
||||
|
234
po/uk.po
@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-03-27 18:25+0300\n"
|
||||
"PO-Revision-Date: 2011-03-27 18:27+0300\n"
|
||||
"POT-Creation-Date: 2011-05-02 02:44+0300\n"
|
||||
"PO-Revision-Date: 2011-05-02 02:46+0300\n"
|
||||
"Last-Translator: Korostil Daniel <ted.korostiled@gmail.com>\n"
|
||||
"Language-Team: translation@linux.org.ua\n"
|
||||
"Language: uk\n"
|
||||
@ -98,7 +98,7 @@ msgstr ""
|
||||
"Вказує канал даних GStreamer для кодування запису. Звідси відповідний "
|
||||
"синтаксис для gst-launch. Канал даних повинен мати нез'єднаний приймальний "
|
||||
"буфер, де відео записано. Зазвичай воно має нез'єднане джерело буфера; вивід "
|
||||
"з цього буфера буде записано в вихідний файл. Однак канал даних також "
|
||||
"з цього буфера буде записано в вихідний файл. Однак канал даних також "
|
||||
"відповідати за власний вивід — це може бути використано для відправлення "
|
||||
"виводу до сервера через протокол shout2send чи будь-який інший. Коли не "
|
||||
"вказано або вказано порожнє значення, буде використано типовий канал даних. "
|
||||
@ -189,27 +189,27 @@ msgid "Execution of '%s' failed:"
|
||||
msgstr "Не вдалось виконати «%s»:"
|
||||
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:230
|
||||
#: ../js/ui/appDisplay.js:260
|
||||
msgid "All"
|
||||
msgstr "Всі"
|
||||
|
||||
#: ../js/ui/appDisplay.js:328
|
||||
#: ../js/ui/appDisplay.js:359
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "ПРОГРАМИ"
|
||||
|
||||
#: ../js/ui/appDisplay.js:354
|
||||
#: ../js/ui/appDisplay.js:385
|
||||
msgid "SETTINGS"
|
||||
msgstr "ПАРАМЕТРИ"
|
||||
|
||||
#: ../js/ui/appDisplay.js:625
|
||||
#: ../js/ui/appDisplay.js:658
|
||||
msgid "New Window"
|
||||
msgstr "Нове вікно"
|
||||
|
||||
#: ../js/ui/appDisplay.js:628
|
||||
#: ../js/ui/appDisplay.js:661
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Вилучити з улюбленого"
|
||||
|
||||
#: ../js/ui/appDisplay.js:629
|
||||
#: ../js/ui/appDisplay.js:662
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Додати до улюбленого"
|
||||
|
||||
@ -342,13 +342,13 @@ msgid "Nothing Scheduled"
|
||||
msgstr "Нічого не заплановано"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||
#: ../js/ui/calendar.js:720
|
||||
#: ../js/ui/calendar.js:720 ../js/ui/telepathyClient.js:487
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %B %d"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||
#: ../js/ui/calendar.js:723
|
||||
#: ../js/ui/calendar.js:723 ../js/ui/telepathyClient.js:490
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%A, %B %d, %Y"
|
||||
@ -369,7 +369,7 @@ msgstr "Цей тиждень"
|
||||
msgid "Next week"
|
||||
msgstr "Наступний тиждень"
|
||||
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1000
|
||||
#: ../js/ui/dash.js:174 ../js/ui/messageTray.js:1037
|
||||
msgid "Remove"
|
||||
msgstr "Вилучити"
|
||||
|
||||
@ -495,8 +495,8 @@ msgstr "Система автоматично перезапуститься ч
|
||||
msgid "Restarting the system."
|
||||
msgstr "Перезапуск системи."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:415 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
#: ../js/ui/endSessionDialog.js:413 ../js/ui/polkitAuthenticationAgent.js:172
|
||||
#: ../js/ui/status/bluetooth.js:491
|
||||
msgid "Cancel"
|
||||
msgstr "Скасувати"
|
||||
|
||||
@ -530,11 +530,11 @@ msgstr "Переглянути джерело"
|
||||
msgid "Web Page"
|
||||
msgstr "Веб-сторінка"
|
||||
|
||||
#: ../js/ui/messageTray.js:993
|
||||
#: ../js/ui/messageTray.js:1030
|
||||
msgid "Open"
|
||||
msgstr "Відкрити"
|
||||
|
||||
#: ../js/ui/messageTray.js:2151
|
||||
#: ../js/ui/messageTray.js:2194
|
||||
msgid "System Information"
|
||||
msgstr "Інформація про систему"
|
||||
|
||||
@ -557,18 +557,18 @@ msgid "Dash"
|
||||
msgstr "Риска"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:515
|
||||
#: ../js/ui/panel.js:533
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Вийти з %s"
|
||||
|
||||
#. Button on the left side of the panel.
|
||||
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||
#: ../js/ui/panel.js:878
|
||||
#: ../js/ui/panel.js:913
|
||||
msgid "Activities"
|
||||
msgstr "Діяльність"
|
||||
|
||||
#: ../js/ui/panel.js:979
|
||||
#: ../js/ui/panel.js:1015
|
||||
msgid "Top Bar"
|
||||
msgstr "Верхня панель"
|
||||
|
||||
@ -626,11 +626,11 @@ msgstr "toggle-switch-intl"
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Будь ласка, введіть команду:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:310
|
||||
#: ../js/ui/searchDisplay.js:313
|
||||
msgid "Searching..."
|
||||
msgstr "Пошук…"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:324
|
||||
#: ../js/ui/searchDisplay.js:327
|
||||
msgid "No matching results."
|
||||
msgstr "Нема збігів."
|
||||
|
||||
@ -713,9 +713,9 @@ msgstr "Висока контрастність"
|
||||
msgid "Large Text"
|
||||
msgstr "Більший текст"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:237
|
||||
#: ../js/ui/status/bluetooth.js:333 ../js/ui/status/bluetooth.js:367
|
||||
#: ../js/ui/status/bluetooth.js:407 ../js/ui/status/bluetooth.js:440
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:264
|
||||
#: ../js/ui/status/bluetooth.js:358 ../js/ui/status/bluetooth.js:392
|
||||
#: ../js/ui/status/bluetooth.js:432 ../js/ui/status/bluetooth.js:465
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -728,101 +728,101 @@ msgid "Send Files to Device..."
|
||||
msgstr "Відправити файли до пристрою…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:70
|
||||
msgid "Setup a New Device..."
|
||||
msgid "Set up a New Device..."
|
||||
msgstr "Встановити новий пристрій…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:95
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Параметри Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:188
|
||||
#: ../js/ui/status/bluetooth.js:215
|
||||
msgid "Connection"
|
||||
msgstr "З'єднання"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:224
|
||||
#: ../js/ui/status/bluetooth.js:251
|
||||
msgid "Send Files..."
|
||||
msgstr "Відправити файли…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:229
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
msgid "Browse Files..."
|
||||
msgstr "Огляд файлів…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:238
|
||||
#: ../js/ui/status/bluetooth.js:265
|
||||
msgid "Error browsing device"
|
||||
msgstr "Помилка перегляду пристрою…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:239
|
||||
#: ../js/ui/status/bluetooth.js:266
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "Потрібний пристрій неможливо переглянути, помилка — «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
#: ../js/ui/status/bluetooth.js:274
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Параметри клавіатури"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:252
|
||||
#: ../js/ui/status/bluetooth.js:279
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Параметри миші"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:259 ../js/ui/status/volume.js:66
|
||||
#: ../js/ui/status/bluetooth.js:286 ../js/ui/status/volume.js:66
|
||||
msgid "Sound Settings"
|
||||
msgstr "Параметри звуку"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#: ../js/ui/status/bluetooth.js:393
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Запит про авторизацію від %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:374
|
||||
#: ../js/ui/status/bluetooth.js:399
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "Пристрій %s потребує доступ до служби «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:376
|
||||
#: ../js/ui/status/bluetooth.js:401
|
||||
msgid "Always grant access"
|
||||
msgstr "Завжди надавати доступ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
#: ../js/ui/status/bluetooth.js:402
|
||||
msgid "Grant this time only"
|
||||
msgstr "Надати лише цього разу"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:403
|
||||
msgid "Reject"
|
||||
msgstr "Відмовити"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#: ../js/ui/status/bluetooth.js:433
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Сполучення підтвердження для %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:448
|
||||
#: ../js/ui/status/bluetooth.js:439 ../js/ui/status/bluetooth.js:473
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "Пристрій %s потребує прив'язання до цього комп'ютера"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#: ../js/ui/status/bluetooth.js:440
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Будь ласка, підвердьте, чи «%s» збігається з PIN на пристрої."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
#: ../js/ui/status/bluetooth.js:442
|
||||
msgid "Matches"
|
||||
msgstr "Збігається"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
#: ../js/ui/status/bluetooth.js:443
|
||||
msgid "Does not match"
|
||||
msgstr "Не збігається"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:441
|
||||
#: ../js/ui/status/bluetooth.js:466
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Запит на сполучення для %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:449
|
||||
#: ../js/ui/status/bluetooth.js:474
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Будь ласка, введіть PIN, згаданий на пристрої."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:465
|
||||
#: ../js/ui/status/bluetooth.js:490
|
||||
msgid "OK"
|
||||
msgstr "Гаразд"
|
||||
|
||||
@ -834,139 +834,139 @@ msgstr "Показувати розкладку клавіатури…"
|
||||
msgid "Localization Settings"
|
||||
msgstr "Параметри локалізації"
|
||||
|
||||
#: ../js/ui/status/network.js:104 ../js/ui/status/network.js:1454
|
||||
#: ../js/ui/status/network.js:113
|
||||
msgid "<unknown>"
|
||||
msgstr "<невідомо>"
|
||||
|
||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||
#: ../js/ui/status/network.js:311
|
||||
#: ../js/ui/status/network.js:330
|
||||
msgid "disabled"
|
||||
msgstr "вимкнено"
|
||||
|
||||
#: ../js/ui/status/network.js:494
|
||||
#: ../js/ui/status/network.js:528
|
||||
msgid "connecting..."
|
||||
msgstr "з'єднання…"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:497
|
||||
#: ../js/ui/status/network.js:531
|
||||
msgid "authentication required"
|
||||
msgstr "Потрібна аутентифікація"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:507
|
||||
#: ../js/ui/status/network.js:541
|
||||
msgid "firmware missing"
|
||||
msgstr "Бракує мікропрограми"
|
||||
|
||||
#. Translators: this is for wired network devices that are physically disconnected
|
||||
#: ../js/ui/status/network.js:514
|
||||
#: ../js/ui/status/network.js:548
|
||||
msgid "cable unplugged"
|
||||
msgstr "кабель від'єднано"
|
||||
|
||||
#. Translators: this is for a network device that cannot be activated (for example it
|
||||
#. is disabled by rfkill, or it has no coverage
|
||||
#: ../js/ui/status/network.js:519
|
||||
#: ../js/ui/status/network.js:553
|
||||
msgid "unavailable"
|
||||
msgstr "недоступний"
|
||||
|
||||
#: ../js/ui/status/network.js:521
|
||||
#: ../js/ui/status/network.js:555
|
||||
msgid "connection failed"
|
||||
msgstr "не вдалось з'єднатись"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:602 ../js/ui/status/network.js:1402
|
||||
#: ../js/ui/status/network.js:635 ../js/ui/status/network.js:1532
|
||||
msgid "Connected (private)"
|
||||
msgstr "З'єднано (приватно)"
|
||||
|
||||
#: ../js/ui/status/network.js:683
|
||||
#: ../js/ui/status/network.js:720
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Автоматично Ethernet"
|
||||
|
||||
#: ../js/ui/status/network.js:758
|
||||
#: ../js/ui/status/network.js:795
|
||||
msgid "Auto broadband"
|
||||
msgstr "Автоматично радіомережа"
|
||||
|
||||
#: ../js/ui/status/network.js:761
|
||||
#: ../js/ui/status/network.js:798
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Автоматично додзвін"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:904 ../js/ui/status/network.js:1414
|
||||
#: ../js/ui/status/network.js:944 ../js/ui/status/network.js:1544
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "Автоматично %s"
|
||||
|
||||
#: ../js/ui/status/network.js:906
|
||||
#: ../js/ui/status/network.js:946
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Автоматично Bluetooth"
|
||||
|
||||
#: ../js/ui/status/network.js:1416
|
||||
#: ../js/ui/status/network.js:1546
|
||||
msgid "Auto wireless"
|
||||
msgstr "Автоматично бездротова мережа"
|
||||
|
||||
#: ../js/ui/status/network.js:1474
|
||||
#: ../js/ui/status/network.js:1583
|
||||
msgid "More..."
|
||||
msgstr "Більше…"
|
||||
|
||||
#: ../js/ui/status/network.js:1497
|
||||
#: ../js/ui/status/network.js:1625
|
||||
msgid "Enable networking"
|
||||
msgstr "Увімкнути мережу"
|
||||
|
||||
#: ../js/ui/status/network.js:1509
|
||||
#: ../js/ui/status/network.js:1637
|
||||
msgid "Wired"
|
||||
msgstr "Дротова"
|
||||
|
||||
#: ../js/ui/status/network.js:1520
|
||||
#: ../js/ui/status/network.js:1648
|
||||
msgid "Wireless"
|
||||
msgstr "Бездротова"
|
||||
|
||||
#: ../js/ui/status/network.js:1530
|
||||
#: ../js/ui/status/network.js:1658
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Мобільна радіомережа"
|
||||
|
||||
#: ../js/ui/status/network.js:1540
|
||||
#: ../js/ui/status/network.js:1668
|
||||
msgid "VPN Connections"
|
||||
msgstr "З'єднання VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1549
|
||||
#: ../js/ui/status/network.js:1680
|
||||
msgid "Network Settings"
|
||||
msgstr "Налаштування мережі"
|
||||
|
||||
#: ../js/ui/status/network.js:1844
|
||||
#: ../js/ui/status/network.js:1974
|
||||
#, c-format
|
||||
msgid "You're now connected to mobile broadband connection '%s'"
|
||||
msgstr "Зараз ви з'єднані через мобільну радіомережу «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1848
|
||||
#: ../js/ui/status/network.js:1978
|
||||
#, c-format
|
||||
msgid "You're now connected to wireless network '%s'"
|
||||
msgstr "Зараз ви з'єднані через бездротову мережу «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1852
|
||||
#: ../js/ui/status/network.js:1982
|
||||
#, c-format
|
||||
msgid "You're now connected to wired network '%s'"
|
||||
msgstr "Зараз ви з'єднані через дротову мережу «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1856
|
||||
#: ../js/ui/status/network.js:1986
|
||||
#, c-format
|
||||
msgid "You're now connected to VPN network '%s'"
|
||||
msgstr "Зараз ви з'єднані через мережу VPN «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1861
|
||||
#: ../js/ui/status/network.js:1991
|
||||
#, c-format
|
||||
msgid "You're now connected to '%s'"
|
||||
msgstr "Зараз ви з'єднані через «%s»"
|
||||
|
||||
#: ../js/ui/status/network.js:1869
|
||||
#: ../js/ui/status/network.js:1999
|
||||
msgid "Connection established"
|
||||
msgstr "З'єднання встановлено"
|
||||
|
||||
#: ../js/ui/status/network.js:1991
|
||||
#: ../js/ui/status/network.js:2125
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Мережу вимкнено"
|
||||
|
||||
#: ../js/ui/status/network.js:2116
|
||||
#: ../js/ui/status/network.js:2250
|
||||
msgid "Network Manager"
|
||||
msgstr "Керування мережею"
|
||||
|
||||
@ -1072,22 +1072,22 @@ msgstr "Гучність"
|
||||
msgid "Microphone"
|
||||
msgstr "Мікрофон"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:331
|
||||
#: ../js/ui/telepathyClient.js:330
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s в мережі."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:336
|
||||
#: ../js/ui/telepathyClient.js:335
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s поза мережею."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:339
|
||||
#: ../js/ui/telepathyClient.js:338
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s відійшов."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:342
|
||||
#: ../js/ui/telepathyClient.js:341
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s зайнятий."
|
||||
@ -1095,11 +1095,18 @@ msgstr "%s зайнятий."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:473
|
||||
#: ../js/ui/telepathyClient.js:479
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Відправити на %X в %A"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:524
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s тепер відомий як %s"
|
||||
|
||||
#. Translators: this is the text displayed
|
||||
#. in the search entry when no search is
|
||||
#. active; it should not exceed ~30
|
||||
@ -1146,7 +1153,7 @@ msgstr[2] "%u входів"
|
||||
msgid "System Sounds"
|
||||
msgstr "Системні звуки"
|
||||
|
||||
#: ../src/main.c:446
|
||||
#: ../src/main.c:445
|
||||
msgid "Print version"
|
||||
msgstr "Показати версію"
|
||||
|
||||
@ -1155,42 +1162,6 @@ msgstr "Показати версію"
|
||||
msgid "Failed to launch '%s'"
|
||||
msgstr "Не вдалось запустити «%s»"
|
||||
|
||||
#: ../src/shell-global.c:1395
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Менше хвилини тому"
|
||||
|
||||
#: ../src/shell-global.c:1399
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d хвилина тому"
|
||||
msgstr[1] "%d хвилини тому"
|
||||
msgstr[2] "%d хвилин тому"
|
||||
|
||||
#: ../src/shell-global.c:1404
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d година тому"
|
||||
msgstr[1] "%d години тому"
|
||||
msgstr[2] "%d годин тому"
|
||||
|
||||
#: ../src/shell-global.c:1409
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d день тому"
|
||||
msgstr[1] "%d дні тому"
|
||||
msgstr[2] "%d днів тому"
|
||||
|
||||
#: ../src/shell-global.c:1414
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d тиждень тому"
|
||||
msgstr[1] "%d тижні тому"
|
||||
msgstr[2] "%d тижнів тому"
|
||||
|
||||
#: ../src/shell-mobile-providers.c:80
|
||||
msgid "United Kingdom"
|
||||
msgstr "Великобританія"
|
||||
@ -1223,6 +1194,33 @@ msgstr "Файлова система"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Less than a minute ago"
|
||||
#~ msgstr "Менше хвилини тому"
|
||||
|
||||
#~ msgid "%d minute ago"
|
||||
#~ msgid_plural "%d minutes ago"
|
||||
#~ msgstr[0] "%d хвилина тому"
|
||||
#~ msgstr[1] "%d хвилини тому"
|
||||
#~ msgstr[2] "%d хвилин тому"
|
||||
|
||||
#~ msgid "%d hour ago"
|
||||
#~ msgid_plural "%d hours ago"
|
||||
#~ msgstr[0] "%d година тому"
|
||||
#~ msgstr[1] "%d години тому"
|
||||
#~ msgstr[2] "%d годин тому"
|
||||
|
||||
#~ msgid "%d day ago"
|
||||
#~ msgid_plural "%d days ago"
|
||||
#~ msgstr[0] "%d день тому"
|
||||
#~ msgstr[1] "%d дні тому"
|
||||
#~ msgstr[2] "%d днів тому"
|
||||
|
||||
#~ msgid "%d week ago"
|
||||
#~ msgid_plural "%d weeks ago"
|
||||
#~ msgstr[0] "%d тиждень тому"
|
||||
#~ msgstr[1] "%d тижні тому"
|
||||
#~ msgstr[2] "%d тижнів тому"
|
||||
|
||||
#~ msgid "Shut Down"
|
||||
#~ msgstr "Вимкнути"
|
||||
|
||||
|
@ -100,6 +100,7 @@ shell_public_headers_h = \
|
||||
shell-perf-log.h \
|
||||
shell-slicer.h \
|
||||
shell-stack.h \
|
||||
shell-tp-client.h \
|
||||
shell-tray-icon.h \
|
||||
shell-tray-manager.h \
|
||||
shell-util.h \
|
||||
@ -134,6 +135,7 @@ libgnome_shell_la_SOURCES = \
|
||||
shell-polkit-authentication-agent.c \
|
||||
shell-slicer.c \
|
||||
shell-stack.c \
|
||||
shell-tp-client.c \
|
||||
shell-tray-icon.c \
|
||||
shell-tray-manager.c \
|
||||
shell-util.c \
|
||||
@ -184,27 +186,10 @@ gnome_shell_perf_helper_LDADD = $(SHELL_PERF_HELPER_LIBS)
|
||||
|
||||
########################################
|
||||
|
||||
# In order to run the interactive tests for GUI components, we need to have
|
||||
# an executable that exports the St components. Libtool doesn't have a way
|
||||
# to include all the symbols from a convenience library into a executable
|
||||
# so what we do is build a small uninstalled library that pulls in the
|
||||
# St convenience library and link the test running program to that.
|
||||
|
||||
noinst_LTLIBRARIES += libjs-test.la
|
||||
|
||||
libjs_test_la_LDFLAGS = -rpath $(libdir)
|
||||
libjs_test_la_CPPFLAGS = $(JS_TEST_CFLAGS)
|
||||
libjs_test_la_LIBADD = $(JS_TEST_LIBS) libst-1.0.la
|
||||
|
||||
# The tests use or reference a couple of Shell classes
|
||||
libjs_test_la_SOURCES = \
|
||||
shell-generic-container.c \
|
||||
shell-perf-log.c
|
||||
|
||||
noinst_PROGRAMS += run-js-test
|
||||
|
||||
run_js_test_CPPFLAGS = $(JS_TEST_CFLAGS)
|
||||
run_js_test_LDADD = $(JS_TEST_LIBS) libjs-test.la
|
||||
run_js_test_CPPFLAGS = $(gnome_shell_cflags)
|
||||
run_js_test_LDADD = libgnome-shell.la $(libgnome_shell_la_LIBADD)
|
||||
run_js_test_LDFLAGS = -export-dynamic
|
||||
|
||||
run_js_test_SOURCES = \
|
||||
|
@ -178,7 +178,8 @@ gnome_shell_plugin_start (MetaPlugin *plugin)
|
||||
gjs_context = _shell_global_get_gjs_context (shell_plugin->global);
|
||||
|
||||
if (!gjs_context_eval (gjs_context,
|
||||
"const Main = imports.ui.main; Main.start();",
|
||||
"imports.ui.environment.init();"
|
||||
"imports.ui.main.start();",
|
||||
-1,
|
||||
"<main>",
|
||||
&status,
|
||||
|
@ -458,6 +458,7 @@ main (int argc, char **argv)
|
||||
|
||||
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
|
||||
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
|
||||
textdomain (GETTEXT_PACKAGE);
|
||||
|
||||
ctx = meta_get_option_context ();
|
||||
g_option_context_add_main_entries (ctx, gnome_shell_options, GETTEXT_PACKAGE);
|
||||
|
@ -24,15 +24,19 @@
|
||||
* IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <gdk/gdkx.h>
|
||||
#include <clutter/x11/clutter-x11.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <locale.h>
|
||||
#include "config.h"
|
||||
|
||||
#include <locale.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <clutter/x11/clutter-x11.h>
|
||||
#include <gdk/gdkx.h>
|
||||
#include <gjs/gjs.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "shell-global.h"
|
||||
#include "shell-global-private.h"
|
||||
|
||||
static char **include_path = NULL;
|
||||
static char *command = NULL;
|
||||
@ -59,10 +63,10 @@ event_filter (GdkXEvent *xevent,
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
char *command_line;
|
||||
GOptionContext *context;
|
||||
ClutterActor *stage;
|
||||
GError *error = NULL;
|
||||
ShellGlobal *global;
|
||||
GjsContext *js_context;
|
||||
char *script;
|
||||
const char *filename;
|
||||
@ -94,12 +98,8 @@ main(int argc, char **argv)
|
||||
setlocale (LC_ALL, "");
|
||||
g_type_init ();
|
||||
|
||||
command_line = g_strjoinv (" ", argv);
|
||||
g_debug ("Command line: %s", command_line);
|
||||
g_free (command_line);
|
||||
|
||||
g_debug ("Creating new context to eval console script");
|
||||
js_context = gjs_context_new_with_search_path (include_path);
|
||||
global = shell_global_get ();
|
||||
js_context = _shell_global_get_gjs_context (global);
|
||||
|
||||
/* prepare command line arguments */
|
||||
if (!gjs_context_define_string_array (js_context, "ARGV",
|
||||
|
@ -415,6 +415,16 @@ shell_app_activate_window (ShellApp *app,
|
||||
meta_window_get_user_time (most_recent_transient)))
|
||||
window = most_recent_transient;
|
||||
|
||||
|
||||
if (!shell_window_tracker_is_window_interesting (window))
|
||||
{
|
||||
/* We won't get notify::user-time signals for uninteresting windows,
|
||||
* which means that an app's last_user_time won't get updated.
|
||||
* Update it here instead.
|
||||
*/
|
||||
app->running_state->last_user_time = timestamp;
|
||||
}
|
||||
|
||||
if (active != workspace)
|
||||
meta_workspace_activate_with_focus (workspace, window, timestamp);
|
||||
else
|
||||
|
@ -22,9 +22,6 @@
|
||||
#include <gio/gio.h>
|
||||
#include <gjs/gjs-module.h>
|
||||
#include <girepository.h>
|
||||
#include <libxml/parser.h>
|
||||
#include <libxml/tree.h>
|
||||
#include <libxml/xmlmemory.h>
|
||||
#include <meta/display.h>
|
||||
#include <meta/util.h>
|
||||
|
||||
@ -417,31 +414,6 @@ shell_global_class_init (ShellGlobalClass *klass)
|
||||
G_PARAM_READABLE));
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_clutter_texture_set_from_pixbuf:
|
||||
* texture: #ClutterTexture to be modified
|
||||
* pixbuf: #GdkPixbuf to set as an image for #ClutterTexture
|
||||
*
|
||||
* Convenience function for setting an image for #ClutterTexture based on #GdkPixbuf.
|
||||
* Copied from an example posted by hp in this thread http://mail.gnome.org/archives/gtk-devel-list/2008-September/msg00218.html
|
||||
*
|
||||
* Return value: %TRUE on success, %FALSE on failure
|
||||
*/
|
||||
gboolean
|
||||
shell_clutter_texture_set_from_pixbuf (ClutterTexture *texture,
|
||||
GdkPixbuf *pixbuf)
|
||||
{
|
||||
return clutter_texture_set_from_rgb_data (texture,
|
||||
gdk_pixbuf_get_pixels (pixbuf),
|
||||
gdk_pixbuf_get_has_alpha (pixbuf),
|
||||
gdk_pixbuf_get_width (pixbuf),
|
||||
gdk_pixbuf_get_height (pixbuf),
|
||||
gdk_pixbuf_get_rowstride (pixbuf),
|
||||
gdk_pixbuf_get_has_alpha (pixbuf)
|
||||
? 4 : 3,
|
||||
0, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_get:
|
||||
*
|
||||
@ -860,30 +832,6 @@ shell_global_end_modal (ShellGlobal *global,
|
||||
meta_plugin_end_modal (global->plugin, timestamp);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_display_is_grabbed
|
||||
* @global: a #ShellGlobal
|
||||
*
|
||||
* Determines whether Mutter currently has a grab (keyboard or mouse or
|
||||
* both) on the display. This could be the result of a current window
|
||||
* management operation like a window move, or could be from
|
||||
* shell_global_begin_modal().
|
||||
*
|
||||
* This function is useful to for ad-hoc checks to avoid over-grabbing
|
||||
* the Mutter grab a grab from GTK+. Longer-term we might instead want a
|
||||
* mechanism to make Mutter use GDK grabs instead of raw XGrabPointer().
|
||||
*
|
||||
* Return value: %TRUE if Mutter has a grab on the display
|
||||
*/
|
||||
gboolean
|
||||
shell_global_display_is_grabbed (ShellGlobal *global)
|
||||
{
|
||||
MetaScreen *screen = meta_plugin_get_screen (global->plugin);
|
||||
MetaDisplay *display = meta_screen_get_display (screen);
|
||||
|
||||
return meta_display_get_grab_op (display) != META_GRAB_OP_NONE;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_create_pointer_barrier
|
||||
* @global: a #ShellGlobal
|
||||
@ -1134,149 +1082,6 @@ shell_global_reexec_self (ShellGlobal *global)
|
||||
g_ptr_array_free (arr, TRUE);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_breakpoint:
|
||||
* @global: A #ShellGlobal
|
||||
*
|
||||
* Using G_BREAKPOINT(), interrupt the current process. This is useful
|
||||
* in conjunction with a debugger such as gdb.
|
||||
*/
|
||||
void
|
||||
shell_global_breakpoint (ShellGlobal *global)
|
||||
{
|
||||
G_BREAKPOINT ();
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_parse_search_provider:
|
||||
* @global: A #ShellGlobal
|
||||
* @data: description of provider
|
||||
* @name: (out): location to store a display name
|
||||
* @url: (out): location to store template of url
|
||||
* @langs: (out) (transfer full) (element-type utf8): list of supported languages
|
||||
* @icon_data_uri: (out): location to store uri
|
||||
* @error: location to store GError
|
||||
*
|
||||
* Returns: %TRUE on success
|
||||
*/
|
||||
gboolean
|
||||
shell_global_parse_search_provider (ShellGlobal *global,
|
||||
const char *data,
|
||||
char **name,
|
||||
char **url,
|
||||
GList **langs,
|
||||
char **icon_data_uri,
|
||||
GError **error)
|
||||
{
|
||||
xmlDocPtr doc = xmlParseMemory (data, strlen(data));
|
||||
xmlNode *root;
|
||||
|
||||
*name = NULL;
|
||||
*url = NULL;
|
||||
*icon_data_uri = NULL;
|
||||
*langs = NULL;
|
||||
|
||||
if (!doc)
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Malformed xml");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
root = xmlDocGetRootElement (doc);
|
||||
if (root && root->name && xmlStrcmp (root->name, (const xmlChar *)"OpenSearchDescription") == 0)
|
||||
{
|
||||
xmlNode *child;
|
||||
for (child = root->children; child; child = child->next)
|
||||
{
|
||||
if (!child->name)
|
||||
continue;
|
||||
if (xmlStrcmp (child->name, (const xmlChar *)"Language") == 0)
|
||||
{
|
||||
xmlChar *val = xmlNodeListGetString(doc, child->xmlChildrenNode, 1);
|
||||
if (!val)
|
||||
continue;
|
||||
*langs = g_list_append (*langs, g_strdup ((char *)val));
|
||||
xmlFree (val);
|
||||
}
|
||||
if (!*name && xmlStrcmp (child->name, (const xmlChar *)"ShortName") == 0)
|
||||
{
|
||||
xmlChar *val = xmlNodeListGetString(doc, child->xmlChildrenNode, 1);
|
||||
*name = g_strdup ((char *)val);
|
||||
xmlFree (val);
|
||||
}
|
||||
if (!*icon_data_uri && xmlStrcmp (child->name, (const xmlChar *)"Image") == 0)
|
||||
{
|
||||
xmlChar *val = xmlNodeListGetString(doc, child->xmlChildrenNode, 1);
|
||||
if (val)
|
||||
*icon_data_uri = g_strdup ((char *)val);
|
||||
xmlFree (val);
|
||||
}
|
||||
if (!*url && xmlStrcmp (child->name, (const xmlChar *)"Url") == 0)
|
||||
{
|
||||
xmlChar *template;
|
||||
xmlChar *type;
|
||||
|
||||
type = xmlGetProp(child, (const xmlChar *)"type");
|
||||
if (!type)
|
||||
continue;
|
||||
|
||||
if (xmlStrcmp (type, (const xmlChar *)"text/html") != 0)
|
||||
{
|
||||
xmlFree (type);
|
||||
continue;
|
||||
}
|
||||
xmlFree (type);
|
||||
|
||||
template = xmlGetProp(child, (const xmlChar *)"template");
|
||||
if (!template)
|
||||
continue;
|
||||
*url = g_strdup ((char *)template);
|
||||
xmlFree (template);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Invalid OpenSearch document");
|
||||
xmlFreeDoc (doc);
|
||||
return FALSE;
|
||||
}
|
||||
xmlFreeDoc (doc);
|
||||
if (*icon_data_uri && *name && *url)
|
||||
return TRUE;
|
||||
|
||||
if (*icon_data_uri)
|
||||
g_free (*icon_data_uri);
|
||||
else
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"search provider doesn't have icon");
|
||||
|
||||
if (*name)
|
||||
g_free (*name);
|
||||
else if (error && !*error)
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"search provider doesn't have ShortName");
|
||||
|
||||
if (*url)
|
||||
g_free (*url);
|
||||
else if (error && !*error)
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"search provider doesn't have template for url");
|
||||
|
||||
if (*langs)
|
||||
{
|
||||
g_list_foreach (*langs, (GFunc)g_free, NULL);
|
||||
g_list_free (*langs);
|
||||
}
|
||||
|
||||
*url = NULL;
|
||||
*name = NULL;
|
||||
*icon_data_uri = NULL;
|
||||
*langs = NULL;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_gc:
|
||||
* @global: A #ShellGlobal
|
||||
@ -1369,54 +1174,6 @@ void shell_global_init_xdnd (ShellGlobal *global)
|
||||
32, PropModeReplace, (const unsigned char *)&stage_win, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_format_time_relative_pretty:
|
||||
* @global:
|
||||
* @delta: Time in seconds since the current time
|
||||
* @text: (out): Relative human-consumption-only time string
|
||||
* @next_update: (out): Time in seconds until we should redisplay the time
|
||||
*
|
||||
* Format a time value for human consumption only. The passed time
|
||||
* value is a delta in terms of seconds from the current time.
|
||||
* This function needs to be in C because of its use of ngettext() which
|
||||
* is not accessible from JavaScript.
|
||||
*/
|
||||
void
|
||||
shell_global_format_time_relative_pretty (ShellGlobal *global,
|
||||
guint delta,
|
||||
char **text,
|
||||
guint *next_update)
|
||||
{
|
||||
#define MINUTE (60)
|
||||
#define HOUR (MINUTE*60)
|
||||
#define DAY (HOUR*24)
|
||||
#define WEEK (DAY*7)
|
||||
if (delta < MINUTE) {
|
||||
*text = g_strdup (_("Less than a minute ago"));
|
||||
*next_update = MINUTE - delta;
|
||||
} else if (delta < HOUR) {
|
||||
*text = g_strdup_printf (dngettext (GETTEXT_PACKAGE,
|
||||
"%d minute ago", "%d minutes ago",
|
||||
delta / MINUTE), delta / MINUTE);
|
||||
*next_update = MINUTE - (delta % MINUTE);
|
||||
} else if (delta < DAY) {
|
||||
*text = g_strdup_printf (dngettext (GETTEXT_PACKAGE,
|
||||
"%d hour ago", "%d hours ago",
|
||||
delta / HOUR), delta / HOUR);
|
||||
*next_update = HOUR - (delta % HOUR);
|
||||
} else if (delta < WEEK) {
|
||||
*text = g_strdup_printf (dngettext (GETTEXT_PACKAGE,
|
||||
"%d day ago", "%d days ago",
|
||||
delta / DAY), delta / DAY);
|
||||
*next_update = DAY - (delta % DAY);
|
||||
} else {
|
||||
*text = g_strdup_printf (dngettext (GETTEXT_PACKAGE,
|
||||
"%d week ago", "%d weeks ago",
|
||||
delta / WEEK), delta / WEEK);
|
||||
*next_update = WEEK - (delta % WEEK);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_get_monitors:
|
||||
* @global: the #ShellGlobal
|
||||
@ -1517,8 +1274,7 @@ shell_global_get_focus_monitor (ShellGlobal *global)
|
||||
}
|
||||
}
|
||||
|
||||
meta_screen_get_monitor_geometry (screen, 0, &rect);
|
||||
return meta_rectangle_copy (&rect);
|
||||
return shell_global_get_primary_monitor (global);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1587,25 +1343,6 @@ shell_global_sync_pointer (ShellGlobal *global)
|
||||
clutter_event_put ((ClutterEvent *)&event);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_get_event_state:
|
||||
* @event: a #ClutterEvent
|
||||
*
|
||||
* Gets the current state of the event (the set of modifier keys that
|
||||
* are pressed down). Thhis is a wrapper around
|
||||
* clutter_event_get_state() that strips out any un-declared modifier
|
||||
* flags, to make gjs happy; see
|
||||
* https://bugzilla.gnome.org/show_bug.cgi?id=597292.
|
||||
*
|
||||
* Return value: the state from the event
|
||||
*/
|
||||
ClutterModifierType
|
||||
shell_get_event_state (ClutterEvent *event)
|
||||
{
|
||||
ClutterModifierType state = clutter_event_get_state (event);
|
||||
return state & CLUTTER_MODIFIER_MASK;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_get_settings:
|
||||
* @global: A #ShellGlobal
|
||||
@ -1620,59 +1357,6 @@ shell_global_get_settings (ShellGlobal *global)
|
||||
return global->settings;
|
||||
}
|
||||
|
||||
static void
|
||||
shell_popup_menu_position_func (GtkMenu *menu,
|
||||
int *x,
|
||||
int *y,
|
||||
gboolean *push_in,
|
||||
gpointer user_data)
|
||||
{
|
||||
*x = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menu), "shell-menu-x"));
|
||||
*y = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menu), "shell-menu-y"));
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_popup_menu:
|
||||
* @menu: a #GtkMenu
|
||||
* @button: mouse button that triggered the menu
|
||||
* @time: timestamp of event that triggered the menu
|
||||
* @menu_x: x coordinate to display the menu at
|
||||
* @menu_y: y coordinate to display the menu at
|
||||
*
|
||||
* Wraps gtk_menu_popup(), but using @menu_x, @menu_y for the location
|
||||
* rather than needing a callback.
|
||||
**/
|
||||
void
|
||||
shell_popup_menu (GtkMenu *menu, int button, guint32 time,
|
||||
int menu_x, int menu_y)
|
||||
{
|
||||
g_object_set_data (G_OBJECT (menu), "shell-menu-x", GINT_TO_POINTER (menu_x));
|
||||
g_object_set_data (G_OBJECT (menu), "shell-menu-y", GINT_TO_POINTER (menu_y));
|
||||
|
||||
gtk_menu_popup (menu, NULL, NULL, shell_popup_menu_position_func, NULL,
|
||||
button, time);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_write_string_to_stream:
|
||||
* @stream: a #GOutputStream
|
||||
* @str: a UTF-8 string to write to @stream
|
||||
* @error: location to store GError
|
||||
*
|
||||
* Write a string to a GOutputStream as UTF-8. This is a workaround
|
||||
* for not having binary buffers in GJS.
|
||||
*
|
||||
* Return value: %TRUE if write succeeded
|
||||
*/
|
||||
gboolean
|
||||
shell_write_string_to_stream (GOutputStream *stream,
|
||||
const char *str,
|
||||
GError **error)
|
||||
{
|
||||
return g_output_stream_write_all (stream, str, strlen (str),
|
||||
NULL, NULL, error);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_get_current_time:
|
||||
* @global: A #ShellGlobal
|
||||
@ -2049,66 +1733,6 @@ gboolean _shell_global_check_xdnd_event (ShellGlobal *global,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* ShellGetTpContactCb:
|
||||
* @connection: The connection
|
||||
* @contacts: (element-type TelepathyGLib.Contact): List of contacts
|
||||
* @failed: Array of failed contacts
|
||||
*/
|
||||
|
||||
static void
|
||||
shell_global_get_tp_contacts_cb (TpConnection *self,
|
||||
guint n_contacts,
|
||||
TpContact * const *contacts,
|
||||
guint n_failed,
|
||||
const TpHandle *failed,
|
||||
const GError *error,
|
||||
gpointer user_data,
|
||||
GObject *weak_object)
|
||||
{
|
||||
int i;
|
||||
GList *contact_list = NULL;
|
||||
for (i = 0; i < n_contacts; i++) {
|
||||
contact_list = g_list_append(contact_list, contacts[i]);
|
||||
}
|
||||
|
||||
TpHandle *failed_list = g_new0 (TpHandle, n_failed + 1);
|
||||
memcpy(failed_list, failed, n_failed);
|
||||
|
||||
((ShellGetTpContactCb)user_data)(self, contact_list, failed_list);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* shell_get_tp_contacts:
|
||||
* @self: A connection, which must be ready
|
||||
* @n_handles: Number of handles in handles
|
||||
* @handles: (array length=n_handles) (element-type uint): Array of handles
|
||||
* @n_features: Number of features in features
|
||||
* @features: (array length=n_features) (allow-none) (element-type uint):
|
||||
* Array of features
|
||||
* @callback: (scope async): User callback to run when the contacts are ready
|
||||
*
|
||||
* Wrap tp_connection_get_contacts_by_handle so we can transform the array
|
||||
* into a null-terminated one, which gjs can handle.
|
||||
* We send the original callback to tp_connection_get_contacts_by_handle as
|
||||
* user_data, and we have our own function as callback, which does the
|
||||
* transforming.
|
||||
*/
|
||||
void
|
||||
shell_get_tp_contacts (TpConnection *self,
|
||||
guint n_handles,
|
||||
const TpHandle *handles,
|
||||
guint n_features,
|
||||
const TpContactFeature *features,
|
||||
ShellGetTpContactCb callback)
|
||||
{
|
||||
tp_connection_get_contacts_by_handle(self, n_handles, handles,
|
||||
n_features, features,
|
||||
shell_global_get_tp_contacts_cb,
|
||||
callback, NULL, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_launch_calendar_server:
|
||||
* @global: The #ShellGlobal.
|
||||
@ -2162,103 +1786,3 @@ shell_global_launch_calendar_server (ShellGlobal *global)
|
||||
|
||||
g_free (calendar_server_exe);
|
||||
}
|
||||
|
||||
static void
|
||||
shell_global_get_self_contact_features_cb (TpConnection *connection,
|
||||
guint n_contacts,
|
||||
TpContact * const *contacts,
|
||||
const GError *error,
|
||||
gpointer user_data,
|
||||
GObject *weak_object)
|
||||
{
|
||||
if (error != NULL) {
|
||||
g_print ("Failed to upgrade self contact: %s", error->message);
|
||||
return;
|
||||
}
|
||||
((ShellGetSelfContactFeaturesCb)user_data)(connection, *contacts);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_get_self_contact_features:
|
||||
* @self: A connection, which must be ready
|
||||
* @n_features: Number of features in features
|
||||
* @features: (array length=n_features) (allow-none) (element-type uint):
|
||||
* Array of features
|
||||
* @callback: (scope async): User callback to run when the contact is ready
|
||||
*
|
||||
* Wrap tp_connection_upgrade_contacts due to the lack of support for
|
||||
* proper arrays arguments in GJS.
|
||||
*/
|
||||
void
|
||||
shell_get_self_contact_features (TpConnection *self,
|
||||
guint n_features,
|
||||
const TpContactFeature *features,
|
||||
ShellGetSelfContactFeaturesCb callback)
|
||||
{
|
||||
TpContact *self_contact = tp_connection_get_self_contact (self);
|
||||
|
||||
tp_connection_upgrade_contacts (self, 1, &self_contact,
|
||||
n_features, features,
|
||||
shell_global_get_self_contact_features_cb,
|
||||
callback, NULL, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_get_contact_events:
|
||||
* @log_manager: A #TplLogManager
|
||||
* @account: A #TpAccount
|
||||
* @entity: A #TplEntity
|
||||
* @num_events: The number of events to retrieve
|
||||
* @callback: (scope async): User callback to run when the contact is ready
|
||||
*
|
||||
* Wrap tpl_log_manager_get_filtered_events_async because gjs cannot support
|
||||
* multiple callbacks in the same function call.
|
||||
*/
|
||||
void
|
||||
shell_get_contact_events (TplLogManager *log_manager,
|
||||
TpAccount *account,
|
||||
TplEntity *entity,
|
||||
guint num_events,
|
||||
GAsyncReadyCallback callback)
|
||||
{
|
||||
tpl_log_manager_get_filtered_events_async (log_manager,
|
||||
account,
|
||||
entity,
|
||||
TPL_EVENT_MASK_TEXT,
|
||||
num_events,
|
||||
NULL, NULL,
|
||||
callback, NULL);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* shell_get_file_contents_utf8_sync:
|
||||
* @path: UTF-8 encoded filename path
|
||||
* @error: a #GError
|
||||
*
|
||||
* Synchronously load the contents of a file as a NUL terminated
|
||||
* string, validating it as UTF-8. Embedded NUL characters count as
|
||||
* invalid content.
|
||||
*
|
||||
* Returns: (transfer full): File contents
|
||||
*/
|
||||
char *
|
||||
shell_get_file_contents_utf8_sync (const char *path,
|
||||
GError **error)
|
||||
{
|
||||
char *contents;
|
||||
gsize len;
|
||||
if (!g_file_get_contents (path, &contents, &len, error))
|
||||
return NULL;
|
||||
if (!g_utf8_validate (contents, len, NULL))
|
||||
{
|
||||
g_free (contents);
|
||||
g_set_error (error,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_FAILED,
|
||||
"File %s contains invalid UTF-8",
|
||||
path);
|
||||
return NULL;
|
||||
}
|
||||
return contents;
|
||||
}
|
||||
|
@ -7,8 +7,6 @@
|
||||
#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <meta/meta-plugin.h>
|
||||
#include <telepathy-glib/telepathy-glib.h>
|
||||
#include <telepathy-logger/telepathy-logger.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
@ -22,42 +20,31 @@ typedef struct _ShellGlobalClass ShellGlobalClass;
|
||||
#define SHELL_IS_GLOBAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_GLOBAL))
|
||||
#define SHELL_GLOBAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_GLOBAL, ShellGlobalClass))
|
||||
|
||||
#define SHELL_GCONF_DIR "/desktop/gnome/shell"
|
||||
|
||||
struct _ShellGlobalClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
GType shell_global_get_type (void) G_GNUC_CONST;
|
||||
GType shell_global_get_type (void) G_GNUC_CONST;
|
||||
|
||||
gboolean shell_clutter_texture_set_from_pixbuf (ClutterTexture *texture,
|
||||
GdkPixbuf *pixbuf);
|
||||
ShellGlobal *shell_global_get (void);
|
||||
|
||||
ShellGlobal *shell_global_get (void);
|
||||
MetaScreen *shell_global_get_screen (ShellGlobal *global);
|
||||
GdkScreen *shell_global_get_gdk_screen (ShellGlobal *global);
|
||||
GList *shell_global_get_window_actors (ShellGlobal *global);
|
||||
GSList *shell_global_get_monitors (ShellGlobal *global);
|
||||
MetaRectangle *shell_global_get_primary_monitor (ShellGlobal *global);
|
||||
int shell_global_get_primary_monitor_index (ShellGlobal *global);
|
||||
MetaRectangle *shell_global_get_focus_monitor (ShellGlobal *global);
|
||||
GSettings *shell_global_get_settings (ShellGlobal *global);
|
||||
guint32 shell_global_get_current_time (ShellGlobal *global);
|
||||
|
||||
typedef enum {
|
||||
SHELL_CURSOR_DND_IN_DRAG,
|
||||
SHELL_CURSOR_DND_UNSUPPORTED_TARGET,
|
||||
SHELL_CURSOR_DND_MOVE,
|
||||
SHELL_CURSOR_DND_COPY,
|
||||
SHELL_CURSOR_POINTING_HAND
|
||||
} ShellCursor;
|
||||
|
||||
void shell_global_set_cursor (ShellGlobal *global,
|
||||
ShellCursor type);
|
||||
|
||||
void shell_global_unset_cursor (ShellGlobal *global);
|
||||
|
||||
MetaScreen *shell_global_get_screen (ShellGlobal *global);
|
||||
|
||||
GdkScreen *shell_global_get_gdk_screen (ShellGlobal *global);
|
||||
|
||||
gboolean shell_global_add_extension_importer (ShellGlobal *global,
|
||||
const char *target_object_script,
|
||||
const char *target_property,
|
||||
const char *directory,
|
||||
GError **error);
|
||||
/* Input/event handling */
|
||||
gboolean shell_global_begin_modal (ShellGlobal *global,
|
||||
guint32 timestamp);
|
||||
void shell_global_end_modal (ShellGlobal *global,
|
||||
guint32 timestamp);
|
||||
|
||||
typedef enum {
|
||||
SHELL_STAGE_INPUT_MODE_NONREACTIVE,
|
||||
@ -66,127 +53,88 @@ typedef enum {
|
||||
SHELL_STAGE_INPUT_MODE_FULLSCREEN
|
||||
} ShellStageInputMode;
|
||||
|
||||
void shell_global_set_stage_input_mode (ShellGlobal *global,
|
||||
ShellStageInputMode mode);
|
||||
void shell_global_set_stage_input_region (ShellGlobal *global,
|
||||
GSList *rectangles);
|
||||
void shell_global_set_stage_input_mode (ShellGlobal *global,
|
||||
ShellStageInputMode mode);
|
||||
void shell_global_set_stage_input_region (ShellGlobal *global,
|
||||
GSList *rectangles);
|
||||
|
||||
GList *shell_global_get_window_actors (ShellGlobal *global);
|
||||
/* X utilities */
|
||||
typedef enum {
|
||||
SHELL_CURSOR_DND_IN_DRAG,
|
||||
SHELL_CURSOR_DND_UNSUPPORTED_TARGET,
|
||||
SHELL_CURSOR_DND_MOVE,
|
||||
SHELL_CURSOR_DND_COPY,
|
||||
SHELL_CURSOR_POINTING_HAND
|
||||
} ShellCursor;
|
||||
|
||||
gboolean shell_global_begin_modal (ShellGlobal *global,
|
||||
guint32 timestamp);
|
||||
void shell_global_end_modal (ShellGlobal *global,
|
||||
guint32 timestamp);
|
||||
void shell_global_set_cursor (ShellGlobal *global,
|
||||
ShellCursor type);
|
||||
void shell_global_unset_cursor (ShellGlobal *global);
|
||||
|
||||
gboolean shell_global_display_is_grabbed (ShellGlobal *global);
|
||||
guint32 shell_global_create_pointer_barrier (ShellGlobal *global,
|
||||
int x1,
|
||||
int y1,
|
||||
int x2,
|
||||
int y2,
|
||||
int directions);
|
||||
void shell_global_destroy_pointer_barrier (ShellGlobal *global,
|
||||
guint32 barrier);
|
||||
|
||||
void shell_global_reexec_self (ShellGlobal *global);
|
||||
void shell_global_get_pointer (ShellGlobal *global,
|
||||
int *x,
|
||||
int *y,
|
||||
ClutterModifierType *mods);
|
||||
|
||||
void shell_global_breakpoint (ShellGlobal *global);
|
||||
|
||||
gboolean shell_global_parse_search_provider (ShellGlobal *global,
|
||||
const char *data,
|
||||
char **name,
|
||||
char **url,
|
||||
GList **langs,
|
||||
char **icon_data_uri,
|
||||
GError **error);
|
||||
|
||||
void shell_global_gc (ShellGlobal *global);
|
||||
|
||||
void shell_global_maybe_gc (ShellGlobal *global);
|
||||
|
||||
void shell_global_format_time_relative_pretty (ShellGlobal *global, guint delta, char **text, guint *next_update);
|
||||
|
||||
GSList *shell_global_get_monitors (ShellGlobal *global);
|
||||
MetaRectangle *shell_global_get_primary_monitor (ShellGlobal *global);
|
||||
int shell_global_get_primary_monitor_index (ShellGlobal *global);
|
||||
MetaRectangle *shell_global_get_focus_monitor (ShellGlobal *global);
|
||||
|
||||
guint32 shell_global_create_pointer_barrier (ShellGlobal *global,
|
||||
int x1, int y1, int x2, int y2,
|
||||
int directions);
|
||||
void shell_global_destroy_pointer_barrier (ShellGlobal *global,
|
||||
guint32 barrier);
|
||||
|
||||
void shell_global_get_pointer (ShellGlobal *global,
|
||||
int *x,
|
||||
int *y,
|
||||
ClutterModifierType *mods);
|
||||
void shell_global_sync_pointer (ShellGlobal *global);
|
||||
|
||||
GSettings *shell_global_get_settings (ShellGlobal *global);
|
||||
|
||||
ClutterModifierType shell_get_event_state (ClutterEvent *event);
|
||||
|
||||
void shell_popup_menu (GtkMenu *menu, int button, guint32 time,
|
||||
int menu_x, int menu_y);
|
||||
|
||||
gboolean shell_write_string_to_stream (GOutputStream *stream,
|
||||
const char *str,
|
||||
GError **error);
|
||||
|
||||
guint32 shell_global_get_current_time (ShellGlobal *global);
|
||||
|
||||
GAppLaunchContext *shell_global_create_app_launch_context (ShellGlobal *global);
|
||||
/* JavaScript utilities */
|
||||
void shell_global_gc (ShellGlobal *global);
|
||||
void shell_global_maybe_gc (ShellGlobal *global);
|
||||
|
||||
gboolean shell_global_set_property_mutable (ShellGlobal *global,
|
||||
const char *object,
|
||||
const char *property,
|
||||
gboolean mutable);
|
||||
|
||||
void shell_global_begin_work (ShellGlobal *global);
|
||||
void shell_global_end_work (ShellGlobal *global);
|
||||
|
||||
/* Run-at-leisure API */
|
||||
void shell_global_begin_work (ShellGlobal *global);
|
||||
void shell_global_end_work (ShellGlobal *global);
|
||||
|
||||
typedef void (*ShellLeisureFunction) (gpointer data);
|
||||
|
||||
void shell_global_run_at_leisure (ShellGlobal *global,
|
||||
ShellLeisureFunction func,
|
||||
gpointer user_data,
|
||||
GDestroyNotify notify);
|
||||
|
||||
void shell_global_play_theme_sound (ShellGlobal *global,
|
||||
guint id,
|
||||
const char *name);
|
||||
void shell_global_cancel_theme_sound (ShellGlobal *global,
|
||||
guint id);
|
||||
void shell_global_run_at_leisure (ShellGlobal *global,
|
||||
ShellLeisureFunction func,
|
||||
gpointer user_data,
|
||||
GDestroyNotify notify);
|
||||
|
||||
|
||||
void shell_global_notify_error (ShellGlobal *global,
|
||||
const char *msg,
|
||||
const char *details);
|
||||
/* Misc utilities / Shell API */
|
||||
gboolean shell_global_add_extension_importer (ShellGlobal *global,
|
||||
const char *target_object_script,
|
||||
const char *target_property,
|
||||
const char *directory,
|
||||
GError **error);
|
||||
|
||||
void shell_global_init_xdnd (ShellGlobal *global);
|
||||
void shell_global_sync_pointer (ShellGlobal *global);
|
||||
|
||||
typedef void (*ShellGetTpContactCb) (TpConnection *connection,
|
||||
GList *contacts,
|
||||
TpHandle *failed);
|
||||
GAppLaunchContext *
|
||||
shell_global_create_app_launch_context (ShellGlobal *global);
|
||||
|
||||
void shell_get_tp_contacts (TpConnection *self,
|
||||
guint n_handles,
|
||||
const TpHandle *handles,
|
||||
guint n_features,
|
||||
const TpContactFeature *features,
|
||||
ShellGetTpContactCb callback);
|
||||
void shell_global_play_theme_sound (ShellGlobal *global,
|
||||
guint id,
|
||||
const char *name);
|
||||
void shell_global_cancel_theme_sound (ShellGlobal *global,
|
||||
guint id);
|
||||
|
||||
void shell_global_launch_calendar_server (ShellGlobal *global);
|
||||
void shell_global_notify_error (ShellGlobal *global,
|
||||
const char *msg,
|
||||
const char *details);
|
||||
|
||||
typedef void (*ShellGetSelfContactFeaturesCb) (TpConnection *connection,
|
||||
TpContact *contact);
|
||||
void shell_global_init_xdnd (ShellGlobal *global);
|
||||
|
||||
void shell_get_self_contact_features (TpConnection *self,
|
||||
guint n_features,
|
||||
const TpContactFeature *features,
|
||||
ShellGetSelfContactFeaturesCb callback);
|
||||
void shell_global_reexec_self (ShellGlobal *global);
|
||||
|
||||
void shell_get_contact_events (TplLogManager *log_manager,
|
||||
TpAccount *account,
|
||||
TplEntity *entity,
|
||||
guint num_events,
|
||||
GAsyncReadyCallback callback);
|
||||
|
||||
char *shell_get_file_contents_utf8_sync (const char *path,
|
||||
GError **error);
|
||||
void shell_global_launch_calendar_server (ShellGlobal *global);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
256
src/shell-tp-client.c
Normal file
@ -0,0 +1,256 @@
|
||||
#include "shell-tp-client.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <telepathy-glib/telepathy-glib.h>
|
||||
|
||||
G_DEFINE_TYPE(ShellTpClient, shell_tp_client, TP_TYPE_BASE_CLIENT)
|
||||
|
||||
struct _ShellTpClientPrivate
|
||||
{
|
||||
ShellTpClientObserveChannelsImpl observe_impl;
|
||||
gpointer user_data_obs;
|
||||
GDestroyNotify destroy_obs;
|
||||
};
|
||||
|
||||
/**
|
||||
* ShellTpClientObserveChannelsImpl:
|
||||
* @client: a #ShellTpClient instance
|
||||
* @account: a #TpAccount having %TP_ACCOUNT_FEATURE_CORE prepared if possible
|
||||
* @connection: a #TpConnection having %TP_CONNECTION_FEATURE_CORE prepared
|
||||
* if possible
|
||||
* @channels: (element-type TelepathyGLib.Channel): a #GList of #TpChannel,
|
||||
* all having %TP_CHANNEL_FEATURE_CORE prepared if possible
|
||||
* @dispatch_operation: (allow-none): a #TpChannelDispatchOperation or %NULL;
|
||||
* the dispatch_operation is not guaranteed to be prepared
|
||||
* @requests: (element-type TelepathyGLib.ChannelRequest): a #GList of
|
||||
* #TpChannelRequest, all having their object-path defined but are not
|
||||
* guaranteed to be prepared.
|
||||
* @context: a #TpObserveChannelsContext representing the context of this
|
||||
* D-Bus call
|
||||
*
|
||||
* Signature of the implementation of the ObserveChannels method.
|
||||
*/
|
||||
|
||||
static void
|
||||
shell_tp_client_init (ShellTpClient *self)
|
||||
{
|
||||
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, SHELL_TYPE_TP_CLIENT,
|
||||
ShellTpClientPrivate);
|
||||
|
||||
/* Observer */
|
||||
tp_base_client_set_observer_recover (TP_BASE_CLIENT (self), TRUE);
|
||||
|
||||
/* We only care about single-user text-based chats */
|
||||
tp_base_client_take_observer_filter (TP_BASE_CLIENT (self),
|
||||
tp_asv_new (
|
||||
TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
|
||||
TP_IFACE_CHANNEL_TYPE_TEXT,
|
||||
TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT,
|
||||
TP_HANDLE_TYPE_CONTACT,
|
||||
NULL));
|
||||
}
|
||||
|
||||
static void
|
||||
observe_channels (TpBaseClient *client,
|
||||
TpAccount *account,
|
||||
TpConnection *connection,
|
||||
GList *channels,
|
||||
TpChannelDispatchOperation *dispatch_operation,
|
||||
GList *requests,
|
||||
TpObserveChannelsContext *context)
|
||||
{
|
||||
ShellTpClient *self = (ShellTpClient *) client;
|
||||
|
||||
g_assert (self->priv->observe_impl != NULL);
|
||||
|
||||
self->priv->observe_impl (self, account, connection, channels,
|
||||
dispatch_operation, requests, context, self->priv->user_data_obs);
|
||||
}
|
||||
|
||||
static void
|
||||
shell_tp_client_dispose (GObject *object)
|
||||
{
|
||||
ShellTpClient *self = SHELL_TP_CLIENT (object);
|
||||
void (*dispose) (GObject *) =
|
||||
G_OBJECT_CLASS (shell_tp_client_parent_class)->dispose;
|
||||
|
||||
if (self->priv->destroy_obs != NULL)
|
||||
{
|
||||
self->priv->destroy_obs (self->priv->user_data_obs);
|
||||
self->priv->destroy_obs = NULL;
|
||||
}
|
||||
|
||||
if (dispose != NULL)
|
||||
dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
shell_tp_client_class_init (ShellTpClientClass *cls)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (cls);
|
||||
TpBaseClientClass *base_clt_cls = TP_BASE_CLIENT_CLASS (cls);
|
||||
|
||||
g_type_class_add_private (cls, sizeof (ShellTpClientPrivate));
|
||||
|
||||
object_class->dispose = shell_tp_client_dispose;
|
||||
|
||||
base_clt_cls->observe_channels = observe_channels;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_tp_client_new:
|
||||
* @dbus: a #TpDBusDaemon object, may not be %NULL
|
||||
*
|
||||
* Returns: a new #ShellTpClient
|
||||
*/
|
||||
ShellTpClient *
|
||||
shell_tp_client_new (TpDBusDaemon *dbus)
|
||||
{
|
||||
return g_object_new (SHELL_TYPE_TP_CLIENT,
|
||||
"dbus-daemon", dbus,
|
||||
"name", "GnomeShell",
|
||||
"uniquify-name", TRUE,
|
||||
NULL);
|
||||
}
|
||||
|
||||
void
|
||||
shell_tp_client_set_observe_channels_func (ShellTpClient *self,
|
||||
ShellTpClientObserveChannelsImpl observe_impl,
|
||||
gpointer user_data,
|
||||
GDestroyNotify destroy)
|
||||
{
|
||||
g_assert (self->priv->observe_impl == NULL);
|
||||
|
||||
self->priv->observe_impl = observe_impl;
|
||||
self->priv->user_data_obs = user_data;
|
||||
self->priv->destroy_obs = destroy;
|
||||
}
|
||||
|
||||
/* Telepathy utility functions */
|
||||
|
||||
/**
|
||||
* ShellGetTpContactCb:
|
||||
* @connection: The connection
|
||||
* @contacts: (element-type TelepathyGLib.Contact): List of contacts
|
||||
* @failed: Array of failed contacts
|
||||
*/
|
||||
|
||||
static void
|
||||
shell_global_get_tp_contacts_cb (TpConnection *self,
|
||||
guint n_contacts,
|
||||
TpContact * const *contacts,
|
||||
guint n_failed,
|
||||
const TpHandle *failed,
|
||||
const GError *error,
|
||||
gpointer user_data,
|
||||
GObject *weak_object)
|
||||
{
|
||||
int i;
|
||||
GList *contact_list = NULL;
|
||||
for (i = 0; i < n_contacts; i++) {
|
||||
contact_list = g_list_append(contact_list, contacts[i]);
|
||||
}
|
||||
|
||||
TpHandle *failed_list = g_new0 (TpHandle, n_failed + 1);
|
||||
memcpy(failed_list, failed, n_failed);
|
||||
|
||||
((ShellGetTpContactCb)user_data)(self, contact_list, failed_list);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_get_tp_contacts:
|
||||
* @self: A connection, which must be ready
|
||||
* @n_handles: Number of handles in handles
|
||||
* @handles: (array length=n_handles) (element-type uint): Array of handles
|
||||
* @n_features: Number of features in features
|
||||
* @features: (array length=n_features) (allow-none) (element-type uint):
|
||||
* Array of features
|
||||
* @callback: (scope async): User callback to run when the contacts are ready
|
||||
*
|
||||
* Wrap tp_connection_get_contacts_by_handle so we can transform the array
|
||||
* into a null-terminated one, which gjs can handle.
|
||||
* We send the original callback to tp_connection_get_contacts_by_handle as
|
||||
* user_data, and we have our own function as callback, which does the
|
||||
* transforming.
|
||||
*/
|
||||
void
|
||||
shell_get_tp_contacts (TpConnection *self,
|
||||
guint n_handles,
|
||||
const TpHandle *handles,
|
||||
guint n_features,
|
||||
const TpContactFeature *features,
|
||||
ShellGetTpContactCb callback)
|
||||
{
|
||||
tp_connection_get_contacts_by_handle(self, n_handles, handles,
|
||||
n_features, features,
|
||||
shell_global_get_tp_contacts_cb,
|
||||
callback, NULL, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
shell_global_get_self_contact_features_cb (TpConnection *connection,
|
||||
guint n_contacts,
|
||||
TpContact * const *contacts,
|
||||
const GError *error,
|
||||
gpointer user_data,
|
||||
GObject *weak_object)
|
||||
{
|
||||
if (error != NULL) {
|
||||
g_print ("Failed to upgrade self contact: %s", error->message);
|
||||
return;
|
||||
}
|
||||
((ShellGetSelfContactFeaturesCb)user_data)(connection, *contacts);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_get_self_contact_features:
|
||||
* @self: A connection, which must be ready
|
||||
* @n_features: Number of features in features
|
||||
* @features: (array length=n_features) (allow-none) (element-type uint):
|
||||
* Array of features
|
||||
* @callback: (scope async): User callback to run when the contact is ready
|
||||
*
|
||||
* Wrap tp_connection_upgrade_contacts due to the lack of support for
|
||||
* proper arrays arguments in GJS.
|
||||
*/
|
||||
void
|
||||
shell_get_self_contact_features (TpConnection *self,
|
||||
guint n_features,
|
||||
const TpContactFeature *features,
|
||||
ShellGetSelfContactFeaturesCb callback)
|
||||
{
|
||||
TpContact *self_contact = tp_connection_get_self_contact (self);
|
||||
|
||||
tp_connection_upgrade_contacts (self, 1, &self_contact,
|
||||
n_features, features,
|
||||
shell_global_get_self_contact_features_cb,
|
||||
callback, NULL, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_get_contact_events:
|
||||
* @log_manager: A #TplLogManager
|
||||
* @account: A #TpAccount
|
||||
* @entity: A #TplEntity
|
||||
* @num_events: The number of events to retrieve
|
||||
* @callback: (scope async): User callback to run when the contact is ready
|
||||
*
|
||||
* Wrap tpl_log_manager_get_filtered_events_async because gjs cannot support
|
||||
* multiple callbacks in the same function call.
|
||||
*/
|
||||
void
|
||||
shell_get_contact_events (TplLogManager *log_manager,
|
||||
TpAccount *account,
|
||||
TplEntity *entity,
|
||||
guint num_events,
|
||||
GAsyncReadyCallback callback)
|
||||
{
|
||||
tpl_log_manager_get_filtered_events_async (log_manager,
|
||||
account,
|
||||
entity,
|
||||
TPL_EVENT_MASK_TEXT,
|
||||
num_events,
|
||||
NULL, NULL,
|
||||
callback, NULL);
|
||||
}
|
88
src/shell-tp-client.h
Normal file
@ -0,0 +1,88 @@
|
||||
#ifndef __SHELL_TP_CLIENT_H__
|
||||
#define __SHELL_TP_CLIENT_H__
|
||||
|
||||
#include <dbus/dbus-glib.h>
|
||||
#include <glib-object.h>
|
||||
|
||||
#include <telepathy-glib/telepathy-glib.h>
|
||||
#include <telepathy-logger/telepathy-logger.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
typedef struct _ShellTpClient ShellTpClient;
|
||||
typedef struct _ShellTpClientClass ShellTpClientClass;
|
||||
typedef struct _ShellTpClientPrivate ShellTpClientPrivate;
|
||||
|
||||
struct _ShellTpClientClass {
|
||||
/*<private>*/
|
||||
TpBaseClientClass parent_class;
|
||||
};
|
||||
|
||||
struct _ShellTpClient {
|
||||
/*<private>*/
|
||||
TpBaseClient parent;
|
||||
ShellTpClientPrivate *priv;
|
||||
};
|
||||
|
||||
GType shell_tp_client_get_type (void);
|
||||
|
||||
#define SHELL_TYPE_TP_CLIENT \
|
||||
(shell_tp_client_get_type ())
|
||||
#define SHELL_TP_CLIENT(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_TP_CLIENT, \
|
||||
ShellTpClient))
|
||||
#define SHELL_TP_CLIENT_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_TP_CLIENT, \
|
||||
ShellTpClientClass))
|
||||
#define SHELL_IS_TP_CLIENT(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_TP_CLIENT))
|
||||
#define SHELL_IS_TP_CLIENT_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_TP_CLIENT))
|
||||
#define SHELL_TP_CLIENT_GET_CLASS(obj) \
|
||||
(G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_TP_CLIENT, \
|
||||
ShellTpClientClass))
|
||||
|
||||
typedef void (*ShellTpClientObserveChannelsImpl) (ShellTpClient *client,
|
||||
TpAccount *account,
|
||||
TpConnection *connection,
|
||||
GList *channels,
|
||||
TpChannelDispatchOperation *dispatch_operation,
|
||||
GList *requests,
|
||||
TpObserveChannelsContext *context,
|
||||
gpointer user_data);
|
||||
|
||||
ShellTpClient * shell_tp_client_new (TpDBusDaemon *dbus);
|
||||
|
||||
void shell_tp_client_set_observe_channels_func (ShellTpClient *self,
|
||||
ShellTpClientObserveChannelsImpl observe_impl,
|
||||
gpointer user_data,
|
||||
GDestroyNotify destroy);
|
||||
|
||||
/* Telepathy utility functions */
|
||||
typedef void (*ShellGetTpContactCb) (TpConnection *connection,
|
||||
GList *contacts,
|
||||
TpHandle *failed);
|
||||
|
||||
void shell_get_tp_contacts (TpConnection *self,
|
||||
guint n_handles,
|
||||
const TpHandle *handles,
|
||||
guint n_features,
|
||||
const TpContactFeature *features,
|
||||
ShellGetTpContactCb callback);
|
||||
|
||||
typedef void (*ShellGetSelfContactFeaturesCb) (TpConnection *connection,
|
||||
TpContact *contact);
|
||||
|
||||
void shell_get_self_contact_features (TpConnection *self,
|
||||
guint n_features,
|
||||
const TpContactFeature *features,
|
||||
ShellGetSelfContactFeaturesCb callback);
|
||||
|
||||
void shell_get_contact_events (TplLogManager *log_manager,
|
||||
TpAccount *account,
|
||||
TplEntity *entity,
|
||||
guint num_events,
|
||||
GAsyncReadyCallback callback);
|
||||
|
||||
G_END_DECLS
|
||||
#endif /* __SHELL_TP_CLIENT_H__ */
|
217
src/shell-util.c
@ -7,7 +7,11 @@
|
||||
#include <gconf/gconf-client.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
/* The code in this file adapted under the GPLv2+ from:
|
||||
#include <libxml/parser.h>
|
||||
#include <libxml/tree.h>
|
||||
#include <libxml/xmlmemory.h>
|
||||
|
||||
/* Some code in this file adapted under the GPLv2+ from:
|
||||
*
|
||||
* GNOME panel utils: gnome-panel/gnome-panel/panel-util.c
|
||||
* (C) 1997, 1998, 1999, 2000 The Free Software Foundation
|
||||
@ -533,3 +537,214 @@ shell_util_format_date (const char *format,
|
||||
g_date_time_unref (datetime);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_get_event_state:
|
||||
* @event: a #ClutterEvent
|
||||
*
|
||||
* Gets the current state of the event (the set of modifier keys that
|
||||
* are pressed down). Thhis is a wrapper around
|
||||
* clutter_event_get_state() that strips out any un-declared modifier
|
||||
* flags, to make gjs happy; see
|
||||
* https://bugzilla.gnome.org/show_bug.cgi?id=597292.
|
||||
*
|
||||
* Return value: the state from the event
|
||||
*/
|
||||
ClutterModifierType
|
||||
shell_get_event_state (ClutterEvent *event)
|
||||
{
|
||||
ClutterModifierType state = clutter_event_get_state (event);
|
||||
return state & CLUTTER_MODIFIER_MASK;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_write_string_to_stream:
|
||||
* @stream: a #GOutputStream
|
||||
* @str: a UTF-8 string to write to @stream
|
||||
* @error: location to store GError
|
||||
*
|
||||
* Write a string to a GOutputStream as UTF-8. This is a workaround
|
||||
* for not having binary buffers in GJS.
|
||||
*
|
||||
* Return value: %TRUE if write succeeded
|
||||
*/
|
||||
gboolean
|
||||
shell_write_string_to_stream (GOutputStream *stream,
|
||||
const char *str,
|
||||
GError **error)
|
||||
{
|
||||
return g_output_stream_write_all (stream, str, strlen (str),
|
||||
NULL, NULL, error);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_get_file_contents_utf8_sync:
|
||||
* @path: UTF-8 encoded filename path
|
||||
* @error: a #GError
|
||||
*
|
||||
* Synchronously load the contents of a file as a NUL terminated
|
||||
* string, validating it as UTF-8. Embedded NUL characters count as
|
||||
* invalid content.
|
||||
*
|
||||
* Returns: (transfer full): File contents
|
||||
*/
|
||||
char *
|
||||
shell_get_file_contents_utf8_sync (const char *path,
|
||||
GError **error)
|
||||
{
|
||||
char *contents;
|
||||
gsize len;
|
||||
if (!g_file_get_contents (path, &contents, &len, error))
|
||||
return NULL;
|
||||
if (!g_utf8_validate (contents, len, NULL))
|
||||
{
|
||||
g_free (contents);
|
||||
g_set_error (error,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_FAILED,
|
||||
"File %s contains invalid UTF-8",
|
||||
path);
|
||||
return NULL;
|
||||
}
|
||||
return contents;
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_breakpoint:
|
||||
*
|
||||
* Using G_BREAKPOINT(), interrupt the current process. This is useful
|
||||
* in conjunction with a debugger such as gdb.
|
||||
*/
|
||||
void
|
||||
shell_breakpoint (void)
|
||||
{
|
||||
G_BREAKPOINT ();
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_parse_search_provider:
|
||||
* @data: description of provider
|
||||
* @name: (out): location to store a display name
|
||||
* @url: (out): location to store template of url
|
||||
* @langs: (out) (transfer full) (element-type utf8): list of supported languages
|
||||
* @icon_data_uri: (out): location to store uri
|
||||
* @error: location to store GError
|
||||
*
|
||||
* Returns: %TRUE on success
|
||||
*/
|
||||
gboolean
|
||||
shell_parse_search_provider (const char *data,
|
||||
char **name,
|
||||
char **url,
|
||||
GList **langs,
|
||||
char **icon_data_uri,
|
||||
GError **error)
|
||||
{
|
||||
xmlDocPtr doc = xmlParseMemory (data, strlen (data));
|
||||
xmlNode *root;
|
||||
|
||||
*name = NULL;
|
||||
*url = NULL;
|
||||
*icon_data_uri = NULL;
|
||||
*langs = NULL;
|
||||
|
||||
if (!doc)
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Malformed xml");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
root = xmlDocGetRootElement (doc);
|
||||
if (root && root->name && xmlStrcmp (root->name, (const xmlChar *)"OpenSearchDescription") == 0)
|
||||
{
|
||||
xmlNode *child;
|
||||
for (child = root->children; child; child = child->next)
|
||||
{
|
||||
if (!child->name)
|
||||
continue;
|
||||
if (xmlStrcmp (child->name, (const xmlChar *)"Language") == 0)
|
||||
{
|
||||
xmlChar *val = xmlNodeListGetString(doc, child->xmlChildrenNode, 1);
|
||||
if (!val)
|
||||
continue;
|
||||
*langs = g_list_append (*langs, g_strdup ((char *)val));
|
||||
xmlFree (val);
|
||||
}
|
||||
if (!*name && xmlStrcmp (child->name, (const xmlChar *)"ShortName") == 0)
|
||||
{
|
||||
xmlChar *val = xmlNodeListGetString(doc, child->xmlChildrenNode, 1);
|
||||
*name = g_strdup ((char *)val);
|
||||
xmlFree (val);
|
||||
}
|
||||
if (!*icon_data_uri && xmlStrcmp (child->name, (const xmlChar *)"Image") == 0)
|
||||
{
|
||||
xmlChar *val = xmlNodeListGetString(doc, child->xmlChildrenNode, 1);
|
||||
if (val)
|
||||
*icon_data_uri = g_strdup ((char *)val);
|
||||
xmlFree (val);
|
||||
}
|
||||
if (!*url && xmlStrcmp (child->name, (const xmlChar *)"Url") == 0)
|
||||
{
|
||||
xmlChar *template;
|
||||
xmlChar *type;
|
||||
|
||||
type = xmlGetProp(child, (const xmlChar *)"type");
|
||||
if (!type)
|
||||
continue;
|
||||
|
||||
if (xmlStrcmp (type, (const xmlChar *)"text/html") != 0)
|
||||
{
|
||||
xmlFree (type);
|
||||
continue;
|
||||
}
|
||||
xmlFree (type);
|
||||
|
||||
template = xmlGetProp(child, (const xmlChar *)"template");
|
||||
if (!template)
|
||||
continue;
|
||||
*url = g_strdup ((char *)template);
|
||||
xmlFree (template);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Invalid OpenSearch document");
|
||||
xmlFreeDoc (doc);
|
||||
return FALSE;
|
||||
}
|
||||
xmlFreeDoc (doc);
|
||||
if (*icon_data_uri && *name && *url)
|
||||
return TRUE;
|
||||
|
||||
if (*icon_data_uri)
|
||||
g_free (*icon_data_uri);
|
||||
else
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"search provider doesn't have icon");
|
||||
|
||||
if (*name)
|
||||
g_free (*name);
|
||||
else if (error && !*error)
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"search provider doesn't have ShortName");
|
||||
|
||||
if (*url)
|
||||
g_free (*url);
|
||||
else if (error && !*error)
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"search provider doesn't have template for url");
|
||||
|
||||
if (*langs)
|
||||
{
|
||||
g_list_foreach (*langs, (GFunc)g_free, NULL);
|
||||
g_list_free (*langs);
|
||||
}
|
||||
|
||||
*url = NULL;
|
||||
*name = NULL;
|
||||
*icon_data_uri = NULL;
|
||||
*langs = NULL;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -8,16 +8,38 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
char *shell_util_get_label_for_uri (const char *text_uri);
|
||||
GIcon *shell_util_get_icon_for_uri (const char *text_uri);
|
||||
GIcon *shell_util_icon_from_string (const char *string, GError **error);
|
||||
void shell_util_set_hidden_from_pick (ClutterActor *actor, gboolean hidden);
|
||||
char *shell_util_get_label_for_uri (const char *text_uri);
|
||||
GIcon *shell_util_get_icon_for_uri (const char *text_uri);
|
||||
GIcon *shell_util_icon_from_string (const char *string,
|
||||
GError **error);
|
||||
|
||||
void shell_util_get_transformed_allocation (ClutterActor *actor,
|
||||
ClutterActorBox *box);
|
||||
void shell_util_set_hidden_from_pick (ClutterActor *actor,
|
||||
gboolean hidden);
|
||||
|
||||
char *shell_util_format_date (const char *format,
|
||||
gint64 time_ms);
|
||||
void shell_util_get_transformed_allocation (ClutterActor *actor,
|
||||
ClutterActorBox *box);
|
||||
|
||||
char *shell_util_format_date (const char *format,
|
||||
gint64 time_ms);
|
||||
|
||||
ClutterModifierType
|
||||
shell_get_event_state (ClutterEvent *event);
|
||||
|
||||
gboolean shell_write_string_to_stream (GOutputStream *stream,
|
||||
const char *str,
|
||||
GError **error);
|
||||
|
||||
char *shell_get_file_contents_utf8_sync (const char *path,
|
||||
GError **error);
|
||||
|
||||
void shell_breakpoint (void);
|
||||
|
||||
gboolean shell_parse_search_provider (const char *data,
|
||||
char **name,
|
||||
char **url,
|
||||
GList **langs,
|
||||
char **icon_data_uri,
|
||||
GError **error);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
@ -254,6 +254,7 @@ xfixes_cursor_reset_image (ShellXFixesCursor *xfixes_cursor)
|
||||
xfixes_cursor->cursor_hot_y = cursor_image->yhot;
|
||||
g_signal_emit (xfixes_cursor, signals[CURSOR_CHANGED], 0);
|
||||
}
|
||||
XFree (cursor_image);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -667,6 +667,7 @@ cairo_pattern_t *
|
||||
_st_create_shadow_cairo_pattern (StShadow *shadow_spec,
|
||||
cairo_pattern_t *src_pattern)
|
||||
{
|
||||
static cairo_user_data_key_t shadow_pattern_user_data;
|
||||
cairo_t *cr;
|
||||
cairo_surface_t *src_surface;
|
||||
cairo_surface_t *surface_in;
|
||||
@ -728,6 +729,8 @@ _st_create_shadow_cairo_pattern (StShadow *shadow_spec,
|
||||
width_out,
|
||||
height_out,
|
||||
rowstride_out);
|
||||
cairo_surface_set_user_data (surface_out, &shadow_pattern_user_data,
|
||||
pixels_out, (cairo_destroy_func_t) g_free);
|
||||
|
||||
dst_pattern = cairo_pattern_create_for_surface (surface_out);
|
||||
cairo_surface_destroy (surface_out);
|
||||
@ -745,7 +748,6 @@ _st_create_shadow_cairo_pattern (StShadow *shadow_spec,
|
||||
(width_out - width_in) / 2.0,
|
||||
(height_out - height_in) / 2.0);
|
||||
cairo_pattern_set_matrix (dst_pattern, &shadow_matrix);
|
||||
|
||||
return dst_pattern;
|
||||
}
|
||||
|
||||
|
@ -422,8 +422,6 @@ st_scroll_view_get_preferred_height (ClutterActor *actor,
|
||||
clutter_actor_get_preferred_width (priv->child, -1,
|
||||
&child_min_width, NULL);
|
||||
|
||||
natural_height = child_natural_height;
|
||||
|
||||
if (min_height_p)
|
||||
*min_height_p = 0;
|
||||
|
||||
|
@ -1174,17 +1174,17 @@ load_gicon_with_colors (StTextureCache *cache,
|
||||
{
|
||||
AsyncTextureLoadData *request;
|
||||
ClutterActor *texture;
|
||||
char *gicon_string;
|
||||
guint gicon_hash;
|
||||
char *key;
|
||||
GtkIconTheme *theme;
|
||||
GtkIconInfo *info;
|
||||
|
||||
gicon_string = g_icon_to_string (icon);
|
||||
gicon_hash = g_icon_hash (icon);
|
||||
if (colors)
|
||||
{
|
||||
/* This raises some doubts about the practice of using string keys */
|
||||
key = g_strdup_printf (CACHE_PREFIX_GICON "icon=%s,size=%d,colors=%2x%2x%2x%2x,%2x%2x%2x%2x,%2x%2x%2x%2x,%2x%2x%2x%2x",
|
||||
gicon_string, size,
|
||||
key = g_strdup_printf (CACHE_PREFIX_GICON "icon_hash=%u,size=%d,colors=%2x%2x%2x%2x,%2x%2x%2x%2x,%2x%2x%2x%2x,%2x%2x%2x%2x",
|
||||
gicon_hash, size,
|
||||
colors->foreground.red, colors->foreground.blue, colors->foreground.green, colors->foreground.alpha,
|
||||
colors->warning.red, colors->warning.blue, colors->warning.green, colors->warning.alpha,
|
||||
colors->error.red, colors->error.blue, colors->error.green, colors->error.alpha,
|
||||
@ -1192,10 +1192,9 @@ load_gicon_with_colors (StTextureCache *cache,
|
||||
}
|
||||
else
|
||||
{
|
||||
key = g_strdup_printf (CACHE_PREFIX_GICON "icon=%s,size=%d",
|
||||
gicon_string, size);
|
||||
key = g_strdup_printf (CACHE_PREFIX_GICON "icon_hash=%u,size=%d",
|
||||
gicon_hash, size);
|
||||
}
|
||||
g_free (gicon_string);
|
||||
|
||||
if (create_texture_and_ensure_request (cache, key, size, &request, &texture))
|
||||
{
|
||||
@ -1223,10 +1222,11 @@ load_gicon_with_colors (StTextureCache *cache,
|
||||
else
|
||||
{
|
||||
/* Blah; we failed to find the icon, but we've added our texture to the outstanding
|
||||
* requests. In that case, just undo what create_texture_lookup_status did.
|
||||
* requests. In that case, just undo what create_texture_and_ensure_request() did.
|
||||
*/
|
||||
g_slist_foreach (request->textures, (GFunc) g_object_unref, NULL);
|
||||
g_slist_free (request->textures);
|
||||
g_free (request->key);
|
||||
g_free (request);
|
||||
g_hash_table_remove (cache->priv->outstanding_requests, key);
|
||||
g_object_unref (texture);
|
||||
|
@ -483,21 +483,12 @@ get_color_from_term (StThemeNode *node,
|
||||
/* rgba () colors - a CSS3 addition, are not supported by libcroco,
|
||||
* but they are parsed as a "function", so we can emulate the
|
||||
* functionality.
|
||||
*
|
||||
* libcroco < 0.6.2 has a bug where functions starting with 'r' are
|
||||
* misparsed. We workaround this by pre-converting 'rgba' to 'RGBA'
|
||||
* before parsing the stylesheet. Since libcroco isn't
|
||||
* case-insensitive (a bug), it's fine with functions starting with
|
||||
* 'R'. (In theory, we should be doing a case-insensitive compare
|
||||
* everywhere, not just here, but that doesn't make much sense when
|
||||
* the built-in parsing of libcroco is case-sensitive and things
|
||||
* like 10PX don't work.)
|
||||
*/
|
||||
else if (term->type == TERM_FUNCTION &&
|
||||
term->content.str &&
|
||||
term->content.str->stryng &&
|
||||
term->content.str->stryng->str &&
|
||||
g_ascii_strcasecmp (term->content.str->stryng->str, "rgba") == 0)
|
||||
strcmp (term->content.str->stryng->str, "rgba") == 0)
|
||||
{
|
||||
return get_color_from_rgba_term (term, color);
|
||||
}
|
||||
|
@ -155,90 +155,6 @@ st_theme_class_init (StThemeClass *klass)
|
||||
|
||||
}
|
||||
|
||||
/* This is a workaround for a bug in libcroco < 0.6.2 where
|
||||
* function starting with 'r' (and 'u') are misparsed. We work
|
||||
* around this by exploiting the fact that libcroco is incomformant
|
||||
* with the CSS-spec and case sensitive and pre-convert all
|
||||
* occurrences of rgba to RGBA. Then we make our own parsing
|
||||
* code check for RGBA as well.
|
||||
*/
|
||||
#if LIBCROCO_VERSION_NUMBER < 602
|
||||
static gboolean
|
||||
is_identifier_character (char c)
|
||||
{
|
||||
/* Actual CSS rules allow for unicode > 0x00a1 and escaped
|
||||
* characters, but we'll assume we won't do that in our stylesheets
|
||||
* or at least not next to the string 'rgba'.
|
||||
*/
|
||||
return g_ascii_isalnum(c) || c == '-' || c == '_';
|
||||
}
|
||||
|
||||
static void
|
||||
convert_rgba_RGBA (char *buf)
|
||||
{
|
||||
char *p;
|
||||
|
||||
p = strstr (buf, "rgba");
|
||||
while (p)
|
||||
{
|
||||
/* Check if this looks like a complete token; this is to
|
||||
* avoiding mangling, say, a selector '.rgba-entry' */
|
||||
if (!((p > buf && is_identifier_character (*(p - 1))) ||
|
||||
(is_identifier_character (*(p + 4)))))
|
||||
memcpy(p, "RGBA", 4);
|
||||
p += 4;
|
||||
p = strstr (p, "rgba");
|
||||
}
|
||||
}
|
||||
|
||||
static CRStyleSheet *
|
||||
parse_stylesheet (const char *filename,
|
||||
GError **error)
|
||||
{
|
||||
enum CRStatus status;
|
||||
char *contents;
|
||||
gsize length;
|
||||
CRStyleSheet *stylesheet = NULL;
|
||||
|
||||
if (filename == NULL)
|
||||
return NULL;
|
||||
|
||||
if (!g_file_get_contents (filename, &contents, &length, error))
|
||||
return NULL;
|
||||
|
||||
convert_rgba_RGBA (contents);
|
||||
|
||||
status = cr_om_parser_simply_parse_buf ((const guchar *) contents,
|
||||
length,
|
||||
CR_UTF_8,
|
||||
&stylesheet);
|
||||
g_free (contents);
|
||||
|
||||
if (status != CR_OK)
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"Error parsing stylesheet '%s'; errcode:%d", filename, status);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return stylesheet;
|
||||
}
|
||||
|
||||
CRDeclaration *
|
||||
_st_theme_parse_declaration_list (const char *str)
|
||||
{
|
||||
char *copy = g_strdup (str);
|
||||
CRDeclaration *result;
|
||||
|
||||
convert_rgba_RGBA (copy);
|
||||
|
||||
result = cr_declaration_parse_list_from_buf ((const guchar *)copy,
|
||||
CR_UTF_8);
|
||||
g_free (copy);
|
||||
|
||||
return result;
|
||||
}
|
||||
#else /* LIBCROCO_VERSION_NUMBER >= 602 */
|
||||
static CRStyleSheet *
|
||||
parse_stylesheet (const char *filename,
|
||||
GError **error)
|
||||
@ -269,7 +185,6 @@ _st_theme_parse_declaration_list (const char *str)
|
||||
return cr_declaration_parse_list_from_buf ((const guchar *)str,
|
||||
CR_UTF_8);
|
||||
}
|
||||
#endif /* LIBCROCO_VERSION_NUMBER < 602 */
|
||||
|
||||
/* Just g_warning for now until we have something nicer to do */
|
||||
static CRStyleSheet *
|
||||
|
@ -91,6 +91,7 @@ st_tooltip_set_property (GObject *gobject,
|
||||
|
||||
case PROP_TIP_AREA:
|
||||
st_tooltip_set_tip_area (tooltip, g_value_get_boxed (value));
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
|
||||
|
@ -75,6 +75,8 @@ struct _StWidgetPrivate
|
||||
StTextDirection direction;
|
||||
|
||||
AtkObject *accessible;
|
||||
|
||||
ClutterActor *label_actor;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -101,7 +103,8 @@ enum
|
||||
PROP_TOOLTIP_TEXT,
|
||||
PROP_TRACK_HOVER,
|
||||
PROP_HOVER,
|
||||
PROP_CAN_FOCUS
|
||||
PROP_CAN_FOCUS,
|
||||
PROP_LABEL_ACTOR
|
||||
};
|
||||
|
||||
enum
|
||||
@ -186,6 +189,10 @@ st_widget_set_property (GObject *gobject,
|
||||
st_widget_set_can_focus (actor, g_value_get_boolean (value));
|
||||
break;
|
||||
|
||||
case PROP_LABEL_ACTOR:
|
||||
st_widget_set_label_actor (actor, g_value_get_object (value));
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
|
||||
break;
|
||||
@ -243,6 +250,10 @@ st_widget_get_property (GObject *gobject,
|
||||
g_value_set_boolean (value, priv->can_focus);
|
||||
break;
|
||||
|
||||
case PROP_LABEL_ACTOR:
|
||||
g_value_set_object (value, priv->label_actor);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
|
||||
break;
|
||||
@ -300,6 +311,12 @@ st_widget_dispose (GObject *gobject)
|
||||
if (priv->accessible)
|
||||
priv->accessible = NULL;
|
||||
|
||||
if (priv->label_actor)
|
||||
{
|
||||
g_object_unref (priv->label_actor);
|
||||
priv->label_actor = NULL;
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS (st_widget_parent_class)->dispose (gobject);
|
||||
}
|
||||
|
||||
@ -953,6 +970,19 @@ st_widget_class_init (StWidgetClass *klass)
|
||||
PROP_CAN_FOCUS,
|
||||
pspec);
|
||||
|
||||
/**
|
||||
* ClutterActor:label-actor:
|
||||
*
|
||||
* An actor that labels this widget.
|
||||
*/
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_LABEL_ACTOR,
|
||||
g_param_spec_object ("label-actor",
|
||||
"Label",
|
||||
"Label that identifies this widget",
|
||||
CLUTTER_TYPE_ACTOR,
|
||||
ST_PARAM_READWRITE));
|
||||
|
||||
/**
|
||||
* StWidget::style-changed:
|
||||
* @widget: the #StWidget
|
||||
@ -2125,6 +2155,53 @@ st_get_slow_down_factor ()
|
||||
return st_slow_down_factor;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* st_widget_get_label_actor:
|
||||
* @widget: a #StWidget
|
||||
*
|
||||
* Gets the label that identifies @widget if it is defined
|
||||
*
|
||||
* Return value: (transfer none): the label that identifies the widget
|
||||
*/
|
||||
ClutterActor *
|
||||
st_widget_get_label_actor (StWidget *widget)
|
||||
{
|
||||
g_return_val_if_fail (ST_IS_WIDGET (widget), NULL);
|
||||
|
||||
return widget->priv->label_actor;
|
||||
}
|
||||
|
||||
/**
|
||||
* st_widget_set_label_actor:
|
||||
* @widget: a #StWidget
|
||||
* @label: a #ClutterActor
|
||||
*
|
||||
* Sets @label as the #ClutterActor that identifies (labels)
|
||||
* @widget. @label can be %NULL to indicate that @widget is not
|
||||
* labelled any more
|
||||
*/
|
||||
|
||||
void
|
||||
st_widget_set_label_actor (StWidget *widget,
|
||||
ClutterActor *label)
|
||||
{
|
||||
g_return_if_fail (ST_IS_WIDGET (widget));
|
||||
|
||||
if (widget->priv->label_actor != label)
|
||||
{
|
||||
if (widget->priv->label_actor)
|
||||
g_object_unref (widget->priv->label_actor);
|
||||
|
||||
if (label != NULL)
|
||||
widget->priv->label_actor = g_object_ref (label);
|
||||
else
|
||||
widget->priv->label_actor = NULL;
|
||||
|
||||
g_object_notify (G_OBJECT (widget), "label-actor");
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/*************************** ACCESSIBILITY SUPPORT ****************************/
|
||||
/******************************************************************************/
|
||||
@ -2133,6 +2210,7 @@ st_get_slow_down_factor ()
|
||||
|
||||
static void st_widget_accessible_class_init (StWidgetAccessibleClass *klass);
|
||||
static void st_widget_accessible_init (StWidgetAccessible *widget);
|
||||
static void st_widget_accessible_dispose (GObject *gobject);
|
||||
|
||||
/* AtkObject */
|
||||
static AtkStateSet *st_widget_accessible_ref_state_set (AtkObject *obj);
|
||||
@ -2146,8 +2224,13 @@ static void on_pseudo_class_notify (GObject *gobject,
|
||||
static void on_can_focus_notify (GObject *gobject,
|
||||
GParamSpec *pspec,
|
||||
gpointer data);
|
||||
static void on_label_notify (GObject *gobject,
|
||||
GParamSpec *pspec,
|
||||
gpointer data);
|
||||
static void check_selected (StWidgetAccessible *self,
|
||||
StWidget *widget);
|
||||
static void check_labels (StWidgetAccessible *self,
|
||||
StWidget *widget);
|
||||
|
||||
G_DEFINE_TYPE (StWidgetAccessible, st_widget_accessible, CALLY_TYPE_ACTOR)
|
||||
|
||||
@ -2159,6 +2242,11 @@ struct _StWidgetAccessiblePrivate
|
||||
{
|
||||
/* Cached values (used to avoid extra notifications) */
|
||||
gboolean selected;
|
||||
|
||||
/* The current_label. Right now there are the proper atk
|
||||
* relationships between this object and the label
|
||||
*/
|
||||
AtkObject *current_label;
|
||||
};
|
||||
|
||||
|
||||
@ -2190,6 +2278,8 @@ st_widget_accessible_class_init (StWidgetAccessibleClass *klass)
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||
AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass);
|
||||
|
||||
gobject_class->dispose = st_widget_accessible_dispose;
|
||||
|
||||
atk_class->ref_state_set = st_widget_accessible_ref_state_set;
|
||||
atk_class->initialize = st_widget_accessible_initialize;
|
||||
|
||||
@ -2204,6 +2294,19 @@ st_widget_accessible_init (StWidgetAccessible *self)
|
||||
self->priv = priv;
|
||||
}
|
||||
|
||||
static void
|
||||
st_widget_accessible_dispose (GObject *gobject)
|
||||
{
|
||||
StWidgetAccessible *self = ST_WIDGET_ACCESSIBLE (gobject);
|
||||
|
||||
if (self->priv->current_label)
|
||||
{
|
||||
g_object_unref (self->priv->current_label);
|
||||
self->priv->current_label = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
st_widget_accessible_initialize (AtkObject *obj,
|
||||
gpointer data)
|
||||
@ -2218,11 +2321,16 @@ st_widget_accessible_initialize (AtkObject *obj,
|
||||
G_CALLBACK (on_can_focus_notify),
|
||||
obj);
|
||||
|
||||
g_signal_connect (data, "notify::label-actor",
|
||||
G_CALLBACK (on_label_notify),
|
||||
obj);
|
||||
|
||||
/* Check the cached selected state and notify the first selection.
|
||||
* Ie: it is required to ensure a first notification when Alt+Tab
|
||||
* popup appears
|
||||
*/
|
||||
check_selected (ST_WIDGET_ACCESSIBLE (obj), ST_WIDGET (data));
|
||||
check_labels (ST_WIDGET_ACCESSIBLE (obj), ST_WIDGET (data));
|
||||
}
|
||||
|
||||
static AtkStateSet *
|
||||
@ -2382,3 +2490,57 @@ st_get_ui_root (ClutterStage *stage)
|
||||
else
|
||||
return CLUTTER_CONTAINER (stage);
|
||||
}
|
||||
|
||||
static void
|
||||
on_label_notify (GObject *gobject,
|
||||
GParamSpec *pspec,
|
||||
gpointer data)
|
||||
{
|
||||
check_labels (ST_WIDGET_ACCESSIBLE (data), ST_WIDGET (gobject));
|
||||
}
|
||||
|
||||
static void
|
||||
check_labels (StWidgetAccessible *widget_accessible,
|
||||
StWidget *widget)
|
||||
{
|
||||
ClutterActor *label = NULL;
|
||||
AtkObject *label_accessible = NULL;
|
||||
|
||||
/* We only call this method at startup, and when the label changes,
|
||||
* so it is fine to remove the previous relationships if we have the
|
||||
* current_label by default
|
||||
*/
|
||||
if (widget_accessible->priv->current_label != NULL)
|
||||
{
|
||||
AtkObject *previous_label = widget_accessible->priv->current_label;
|
||||
|
||||
atk_object_remove_relationship (ATK_OBJECT (widget_accessible),
|
||||
ATK_RELATION_LABELLED_BY,
|
||||
previous_label);
|
||||
|
||||
atk_object_remove_relationship (previous_label,
|
||||
ATK_RELATION_LABEL_FOR,
|
||||
ATK_OBJECT (widget_accessible));
|
||||
|
||||
g_object_unref (previous_label);
|
||||
}
|
||||
|
||||
label = st_widget_get_label_actor (widget);
|
||||
if (label == NULL)
|
||||
{
|
||||
widget_accessible->priv->current_label = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
label_accessible = clutter_actor_get_accessible (label);
|
||||
widget_accessible->priv->current_label = g_object_ref (label_accessible);
|
||||
|
||||
atk_object_add_relationship (ATK_OBJECT (widget_accessible),
|
||||
ATK_RELATION_LABELLED_BY,
|
||||
label_accessible);
|
||||
|
||||
atk_object_add_relationship (label_accessible,
|
||||
ATK_RELATION_LABEL_FOR,
|
||||
ATK_OBJECT (widget_accessible));
|
||||
}
|
||||
}
|
||||
|
@ -152,6 +152,10 @@ gboolean st_widget_navigate_focus (StWidget *widg
|
||||
GtkDirectionType direction,
|
||||
gboolean wrap_around);
|
||||
|
||||
ClutterActor * st_widget_get_label_actor (StWidget *widget);
|
||||
void st_widget_set_label_actor (StWidget *widget,
|
||||
ClutterActor *label);
|
||||
|
||||
/* Only to be used by sub-classes of StWidget */
|
||||
void st_widget_style_changed (StWidget *widget);
|
||||
StThemeNode * st_widget_get_theme_node (StWidget *widget);
|
||||
|