Compare commits
207 Commits
2.91.0
...
overview-r
Author | SHA1 | Date | |
---|---|---|---|
9efa271888 | |||
9ed3ce9006 | |||
b400fc2837 | |||
a66af6fbac | |||
1bbc138ed2 | |||
868d4756e4 | |||
dfa3be59dc | |||
62677336a5 | |||
264a82cbfc | |||
f8cfd9f903 | |||
13f8cd3bcf | |||
e1f336374b | |||
0ba1387d19 | |||
8832ce3a2b | |||
91d7a022a9 | |||
95d15725fc | |||
bb2b7d83af | |||
0abac6f67d | |||
e00398e2ac | |||
0f19492545 | |||
9d46a6ceea | |||
6432de95cc | |||
738fc375c0 | |||
4e9a530a64 | |||
be6e189b49 | |||
1c8955b34a | |||
e5a802bf99 | |||
55f290bc96 | |||
909f2e670a | |||
fa44289dd0 | |||
deb7e7317e | |||
5f1a2e3cec | |||
8b3f05b6e3 | |||
21ac225981 | |||
0c5d87d79b | |||
c224e019fe | |||
aa91491730 | |||
7bc77a23b4 | |||
b8a5d3fd9b | |||
8734a59cd7 | |||
e90504953f | |||
d67aa39bb1 | |||
1dc559740f | |||
a3e3d61d58 | |||
f6e9ae35fd | |||
3c33cf425e | |||
141b4ffe87 | |||
35d8780186 | |||
d11ea7d6cd | |||
3138b20b11 | |||
c3fb3a98b8 | |||
32cc136563 | |||
63e89482fe | |||
e8917e2d6f | |||
a2f4e196a1 | |||
dc1e23501c | |||
0e3431ac47 | |||
af7ba00e97 | |||
8d6ab6fe84 | |||
4917c79d09 | |||
04da2a61db | |||
3ca86b2197 | |||
35400238aa | |||
439d7f036f | |||
aed6375a2d | |||
a9a8b1ec6a | |||
b0e713b775 | |||
32fc25a3ac | |||
839492f15b | |||
c98103ffc8 | |||
86f3a637f1 | |||
e381f0f492 | |||
ce72aaf008 | |||
d79cae07a4 | |||
b2495a0e25 | |||
f0c6e96e82 | |||
ac1b814851 | |||
614bcd8016 | |||
c171ea12df | |||
b856e2990b | |||
e4cf3f144d | |||
f25e6916bd | |||
ad624d546f | |||
6df21fd5ff | |||
392999bc43 | |||
013f07278b | |||
35f806df4e | |||
4f1f226828 | |||
4c6dd64e87 | |||
a381017e83 | |||
34aa46a844 | |||
dc58a4f407 | |||
0428234c67 | |||
0155226c73 | |||
9585c823d5 | |||
31df386fed | |||
11794e3da9 | |||
c6f6ac926e | |||
79a33fa7fb | |||
909ec7a709 | |||
576376a21b | |||
0c2aa1437d | |||
bff553e978 | |||
ab206ff82a | |||
75e608f039 | |||
2fe7507689 | |||
cbed9f956a | |||
6d115dd23b | |||
8bbfa913cb | |||
65a7b042ed | |||
3640a4dd1e | |||
d5f1cd667b | |||
8f307c858c | |||
f21403fd9f | |||
a19e8d58f5 | |||
08f7ecad35 | |||
548a23a969 | |||
5a83ef8325 | |||
d2b968a7df | |||
58001563d9 | |||
8872913665 | |||
d66e7dd49e | |||
f365484a5c | |||
c3e557b162 | |||
b411425e1e | |||
e18d8b2fe8 | |||
81982beef4 | |||
0cdad5ac02 | |||
1c3bddda41 | |||
5d9b109f06 | |||
4d0480bfea | |||
580e3d2b74 | |||
ec018a000e | |||
e5dd86276d | |||
9ae1238038 | |||
f8dc32c366 | |||
2b3c31a503 | |||
9d94da83d7 | |||
5661946de1 | |||
fa752110f3 | |||
86efdc906a | |||
c217377114 | |||
6064661de9 | |||
ef544f6e06 | |||
c48c80e4e9 | |||
a915af4b30 | |||
bc22109130 | |||
17055023db | |||
95ac478f87 | |||
2fa6f7ba7e | |||
6b47b78d4d | |||
3dbee0b833 | |||
8886b7433c | |||
85d3336245 | |||
33e955770c | |||
be7b9729a2 | |||
10e59c0840 | |||
fe1a9c2b4b | |||
ac470b44ef | |||
0547a582d1 | |||
a1389a0730 | |||
ee7e46fbf6 | |||
13229a6d86 | |||
3efc7bf7f1 | |||
4d18d54d9d | |||
ccaa3f4ebf | |||
8064c6c827 | |||
a5d4abda00 | |||
6df48b68fa | |||
20b10b4d16 | |||
6bdfe638c5 | |||
67543775e9 | |||
25c6acf44b | |||
83aa23b274 | |||
4333b829eb | |||
42c736614c | |||
700911ca5f | |||
627f1cb59a | |||
ba0a038247 | |||
7ce5ea4142 | |||
9bfda11f0d | |||
1facd85981 | |||
630227f6b6 | |||
bbdf88cf94 | |||
de16108dff | |||
80f23841e4 | |||
df65d3d58c | |||
66f6fff54e | |||
ad557a3515 | |||
0215a449ad | |||
bd250e188b | |||
826e9c5dbf | |||
30f628d1eb | |||
bf978c61af | |||
5ebbd72d1c | |||
47c80d4d55 | |||
4e14f18a58 | |||
4456954d30 | |||
6925a82204 | |||
64efa61dc2 | |||
3ce25296e1 | |||
b017a2187b | |||
dd155e2f87 | |||
38a69f56b4 | |||
3d2d396c09 | |||
b33ebb450a | |||
560da76387 |
1
.gitignore
vendored
1
.gitignore
vendored
@ -46,6 +46,7 @@ src/Makefile.in
|
||||
src/gnomeshell-taskpanel
|
||||
src/gnome-shell
|
||||
src/gnome-shell-clock-preferences
|
||||
src/run-js-test
|
||||
src/test-recorder
|
||||
src/test-recorder.ogg
|
||||
src/test-theme
|
||||
|
12
configure.ac
12
configure.ac
@ -1,5 +1,5 @@
|
||||
AC_PREREQ(2.63)
|
||||
AC_INIT([gnome-shell],[2.91.0],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
AC_INIT([gnome-shell],[2.91.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_SRCDIR([src/shell-global.c])
|
||||
@ -61,7 +61,7 @@ CLUTTER_MIN_VERSION=1.3.14
|
||||
GOBJECT_INTROSPECTION_MIN_VERSION=0.6.11
|
||||
GJS_MIN_VERSION=0.7
|
||||
MUTTER_MIN_VERSION=2.91.0
|
||||
GTK_MIN_VERSION=2.90.7
|
||||
GTK_MIN_VERSION=2.91.0
|
||||
GIO_MIN_VERSION=2.25.9
|
||||
|
||||
# Collect more than 20 libraries for a prize!
|
||||
@ -69,13 +69,14 @@ PKG_CHECK_MODULES(MUTTER_PLUGIN, gio-2.0 >= $GIO_MIN_VERSION
|
||||
gio-unix-2.0 dbus-glib-1
|
||||
gtk+-3.0 >= $GTK_MIN_VERSION
|
||||
mutter-plugins >= $MUTTER_MIN_VERSION
|
||||
gjs-gi-1.0 >= $GJS_MIN_VERSION
|
||||
gjs-internals-1.0 >= $GJS_MIN_VERSION
|
||||
libgnome-menu $recorder_modules gconf-2.0
|
||||
gdk-x11-3.0
|
||||
clutter-x11-1.0 >= $CLUTTER_MIN_VERSION
|
||||
clutter-glx-1.0 >= $CLUTTER_MIN_VERSION
|
||||
libstartup-notification-1.0
|
||||
gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_MIN_VERSION)
|
||||
gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_MIN_VERSION
|
||||
libcanberra)
|
||||
|
||||
saved_CFLAGS=$CFLAGS
|
||||
saved_LIBS=$LIBS
|
||||
@ -90,6 +91,9 @@ PKG_CHECK_MODULES(TIDY, clutter-1.0)
|
||||
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 gnome-desktop-3.0 >= 2.90.0)
|
||||
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)
|
||||
|
||||
MUTTER_BIN_DIR=`$PKG_CONFIG --variable=exec_prefix mutter-plugins`/bin
|
||||
# FIXME: metacity-plugins.pc should point directly to its .gir file
|
||||
|
@ -25,6 +25,7 @@ dist_theme_DATA = \
|
||||
theme/close-window.svg \
|
||||
theme/close.svg \
|
||||
theme/corner-ripple.png \
|
||||
theme/dash-placeholder.svg \
|
||||
theme/dialog-error.svg \
|
||||
theme/gnome-shell.css \
|
||||
theme/mosaic-view-active.svg \
|
||||
@ -32,6 +33,7 @@ dist_theme_DATA = \
|
||||
theme/move-window-on-new.svg \
|
||||
theme/process-working.png \
|
||||
theme/remove-workspace.svg \
|
||||
theme/running-indicator.svg \
|
||||
theme/scroll-button-down-hover.png \
|
||||
theme/scroll-button-down.png \
|
||||
theme/scroll-button-up-hover.png \
|
||||
|
@ -62,5 +62,23 @@
|
||||
</locale>
|
||||
</schema>
|
||||
|
||||
<schema>
|
||||
<key>/schemas/desktop/gnome/shell/windows/theme</key>
|
||||
<applyto>/desktop/gnome/shell/windows/theme</applyto>
|
||||
<owner>gnome-shell</owner>
|
||||
<type>string</type>
|
||||
<default>Adwaita</default>
|
||||
<locale name="C">
|
||||
<short>Current theme</short>
|
||||
<long>
|
||||
The theme determines the appearance of window borders,
|
||||
titlebar, and so forth.
|
||||
|
||||
This key overrides /apps/metacity/general/theme when
|
||||
running GNOME Shell.
|
||||
</long>
|
||||
</locale>
|
||||
</schema>
|
||||
|
||||
</schemalist>
|
||||
</gconfschemafile>
|
||||
|
@ -5,6 +5,7 @@
|
||||
<Menuname>Tools</Menuname>
|
||||
</DefaultLayout>
|
||||
<Name>Applications</Name>
|
||||
<AppDir>/usr/local/share/applications</AppDir>
|
||||
<DefaultAppDirs/>
|
||||
<Menu>
|
||||
<Name>Games</Name>
|
||||
|
@ -27,7 +27,7 @@
|
||||
</_description>
|
||||
</key>
|
||||
<key name="mouse-tracking" enum="MouseTrackingMode">
|
||||
<default>'centered'</default>
|
||||
<default>'proportional'</default>
|
||||
<_summary>Mouse Tracking Mode</_summary>
|
||||
<_description>
|
||||
Determines the position of the magnified mouse image within the
|
||||
@ -45,7 +45,7 @@
|
||||
</_description>
|
||||
</key>
|
||||
<key name="screen-position" enum="ScreenPosition">
|
||||
<default>'bottom-half'</default>
|
||||
<default>'full-screen'</default>
|
||||
<_summary>Screen position</_summary>
|
||||
<_description>
|
||||
The magnified view either fills the entire screen, or occupies the
|
||||
|
@ -41,18 +41,6 @@
|
||||
<default>[]</default>
|
||||
<_summary>History for command (Alt-F2) dialog</_summary>
|
||||
</key>
|
||||
<key name="workspaces-view" type="s">
|
||||
<default>'single'</default>
|
||||
<_summary>Overview workspace view mode</_summary>
|
||||
<_description>
|
||||
The selected workspace view mode in the overview.
|
||||
Supported values are "single" and "grid".
|
||||
</_description>
|
||||
<choices>
|
||||
<choice value="single"/>
|
||||
<choice value="grid"/>
|
||||
</choices>
|
||||
</key>
|
||||
<child name="clock" schema="org.gnome.shell.clock"/>
|
||||
<child name="calendar" schema="org.gnome.shell.calendar"/>
|
||||
<child name="recorder" schema="org.gnome.shell.recorder"/>
|
||||
|
84
data/theme/dash-placeholder.svg
Normal file
84
data/theme/dash-placeholder.svg
Normal file
@ -0,0 +1,84 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
width="76"
|
||||
height="27"
|
||||
id="svg11252"
|
||||
version="1.1">
|
||||
<defs
|
||||
id="defs11254">
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient39563-4-2"
|
||||
id="radialGradient68155-2-3"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.3486842,0,317.8421)"
|
||||
cx="49"
|
||||
cy="488"
|
||||
fx="49"
|
||||
fy="488"
|
||||
r="38" />
|
||||
<linearGradient
|
||||
id="linearGradient39563-4-2">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop39565-1-4" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop39567-7-9" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient39573-6-1"
|
||||
id="radialGradient68157-0-8"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cx="50.5"
|
||||
cy="487.5"
|
||||
fx="50.5"
|
||||
fy="487.5"
|
||||
r="10.5" />
|
||||
<linearGradient
|
||||
id="linearGradient39573-6-1">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop39575-5-6" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop39577-1-2" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g
|
||||
id="layer1"
|
||||
transform="translate(-337,-518.86218)">
|
||||
<g
|
||||
id="g99967"
|
||||
style="display:inline"
|
||||
transform="translate(326,44.862171)">
|
||||
<rect
|
||||
style="opacity:0.49375;color:#000000;fill:url(#radialGradient68155-2-3);fill-opacity:1;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="rect99969"
|
||||
width="76"
|
||||
height="2"
|
||||
x="11"
|
||||
y="487"
|
||||
rx="0"
|
||||
ry="0" />
|
||||
<path
|
||||
style="opacity:0.43125;color:#000000;fill:url(#radialGradient68157-0-8);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="path99971"
|
||||
d="M 61,487.5 C 61,493.29899 56.29899,498 50.5,498 44.70101,498 40,493.29899 40,487.5 40,481.70101 44.70101,477 50.5,477 c 5.79899,0 10.5,4.70101 10.5,10.5 z"
|
||||
transform="matrix(1.2857143,0,0,1.2857143,-14.428572,-139.28571)" />
|
||||
<path
|
||||
transform="matrix(0.43589747,0,0,0.43589747,28.487179,275)"
|
||||
d="M 61,487.5 C 61,493.29899 56.29899,498 50.5,498 44.70101,498 40,493.29899 40,487.5 40,481.70101 44.70101,477 50.5,477 c 5.79899,0 10.5,4.70101 10.5,10.5 z"
|
||||
id="path99973"
|
||||
style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
@ -92,12 +92,15 @@ StScrollBar StButton#vhandle:hover
|
||||
background-color: #292929;
|
||||
}
|
||||
|
||||
StTooltip {
|
||||
border: 1px solid rgba(79,111,173,0.9);
|
||||
StTooltip StLabel {
|
||||
border: 1px solid rgba(79,111,173,1);
|
||||
border-radius: 5px;
|
||||
padding: 4px;
|
||||
background-color: rgba(79,111,173,0.9);
|
||||
color: #ffffff;
|
||||
font-size: 0.8em;
|
||||
font-weight: normal;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* PopupMenu */
|
||||
@ -121,11 +124,12 @@ StTooltip {
|
||||
* override .popup-menu.font-size, everything else will scale with it.
|
||||
*/
|
||||
.popup-menu-content {
|
||||
padding: 1em .5em;
|
||||
padding: 1em 0em;
|
||||
}
|
||||
|
||||
.popup-menu-item {
|
||||
padding: .4em 1.25em;
|
||||
padding: .4em 1.75em;
|
||||
spacing: 1em;
|
||||
}
|
||||
|
||||
.popup-menu-item:active {
|
||||
@ -133,11 +137,6 @@ StTooltip {
|
||||
}
|
||||
|
||||
.popup-image-menu-item {
|
||||
spacing: .75em;
|
||||
}
|
||||
|
||||
.popup-switch-menu-item {
|
||||
spacing: 2em;
|
||||
}
|
||||
|
||||
.popup-separator-menu-item {
|
||||
@ -157,6 +156,14 @@ StTooltip {
|
||||
-slider-handle-radius: 0.5em;
|
||||
}
|
||||
|
||||
.popup-device-menu-item {
|
||||
spacing: .5em;
|
||||
}
|
||||
|
||||
.popup-menu-icon {
|
||||
icon-size: 1em;
|
||||
}
|
||||
|
||||
/* Switches (to be used in menus) */
|
||||
.toggle-switch {
|
||||
width: 4.5em;
|
||||
@ -235,10 +242,6 @@ StTooltip {
|
||||
spacing: 4px;
|
||||
}
|
||||
|
||||
#statusTray {
|
||||
spacing: 14px;
|
||||
}
|
||||
|
||||
#legacyTray {
|
||||
spacing: 14px;
|
||||
padding-left: 14px;
|
||||
@ -248,27 +251,15 @@ StTooltip {
|
||||
spacing: 8px;
|
||||
}
|
||||
|
||||
.system-status-icon {
|
||||
icon-size: 1em;
|
||||
}
|
||||
|
||||
/* Overview */
|
||||
|
||||
.overview {
|
||||
background-color: #111;
|
||||
}
|
||||
|
||||
.info-bar {
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
spacing: 20px;
|
||||
}
|
||||
|
||||
.info-bar-link-button {
|
||||
background-color: #2d2d2d;
|
||||
padding: 2px 14px;
|
||||
border-radius: 10px;
|
||||
border: 1px solid #181818;
|
||||
}
|
||||
|
||||
.info-bar-link-button:hover {
|
||||
border: 1px solid #666666;
|
||||
#overview {
|
||||
spacing: 12px;
|
||||
background-color: rgba(0,0,0,0.6);
|
||||
}
|
||||
|
||||
.new-workspace-area {
|
||||
@ -316,18 +307,17 @@ StTooltip {
|
||||
}
|
||||
|
||||
.workspaces-bar {
|
||||
height: 48px;
|
||||
spacing: 5px;
|
||||
}
|
||||
|
||||
.workspaces-bar {
|
||||
spacing: 5px;
|
||||
.workspace-indicator-panel {
|
||||
spacing: 8px;
|
||||
}
|
||||
|
||||
.workspace-indicator {
|
||||
width: 24px;
|
||||
height: 16px;
|
||||
background: rgba(155,155,155,0.8);
|
||||
border-spacing: 16px;
|
||||
background: rgba(255,255,255,0.2);
|
||||
}
|
||||
|
||||
.workspace-indicator.active {
|
||||
@ -352,44 +342,33 @@ StTooltip {
|
||||
}
|
||||
|
||||
.single-view-controls {
|
||||
padding: 0px 15px;
|
||||
padding: 8px 0px;
|
||||
}
|
||||
|
||||
.workspace-controls {
|
||||
width: 24px;
|
||||
height: 16px;
|
||||
width: 48px;
|
||||
font-size: 32px;
|
||||
font-weight: bold;
|
||||
color: #ffffff;
|
||||
border: 2px solid rgba(128, 128, 128, 0.4);
|
||||
border-right: 0px;
|
||||
border-radius: 9px 0px 0px 9px;
|
||||
}
|
||||
|
||||
.workspace-controls.add {
|
||||
background-image: url("add-workspace.svg");
|
||||
.add-workspace {
|
||||
background-color: rgba(128, 128, 128, 0.4);
|
||||
}
|
||||
|
||||
.workspace-controls.remove {
|
||||
background-image: url("remove-workspace.svg");
|
||||
.add-workspace:hover {
|
||||
background-color: rgba(128, 128, 128, 0.6);
|
||||
}
|
||||
|
||||
.workspace-controls.switch-single {
|
||||
background-image: url("single-view.svg");
|
||||
.remove-workspace {
|
||||
height: 48px;
|
||||
}
|
||||
|
||||
.workspace-controls.switch-mosaic {
|
||||
background-image: url("mosaic-view.svg");
|
||||
}
|
||||
|
||||
.workspace-controls.switch-single:checked {
|
||||
background-image: url("single-view-active.svg");
|
||||
}
|
||||
|
||||
.workspace-controls.switch-mosaic:checked {
|
||||
background-image: url("mosaic-view-active.svg");
|
||||
}
|
||||
|
||||
#SwitchScroll {
|
||||
height: 14px;
|
||||
}
|
||||
|
||||
#SwitchScroll #hhandle {
|
||||
border-radius: 7px;
|
||||
.remove-workspace:hover {
|
||||
background-color: rgba(128, 128, 128, 0.2);
|
||||
}
|
||||
|
||||
/* Dash */
|
||||
@ -397,115 +376,111 @@ StTooltip {
|
||||
#dash {
|
||||
color: #5f5f5f;
|
||||
font-size: 12px;
|
||||
padding: 0px 14px;
|
||||
padding: 6px 0px;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
border: 2px solid rgba(128, 128, 128, 0.4);
|
||||
border-left: 0px;
|
||||
border-radius: 0px 9px 9px 0px;
|
||||
}
|
||||
|
||||
#dashSections {
|
||||
spacing: 12px;
|
||||
.dash-placeholder {
|
||||
background-image: url("dash-placeholder.svg");
|
||||
height: 27px;
|
||||
}
|
||||
|
||||
#viewSelector {
|
||||
spacing: 16px;
|
||||
}
|
||||
|
||||
#searchArea {
|
||||
padding: 0px 12px;
|
||||
}
|
||||
|
||||
#searchEntry {
|
||||
padding: 4px;
|
||||
border-radius: 4px;
|
||||
color: #a8a8a8;
|
||||
border: 1px solid #565656;
|
||||
background-color: #404040;
|
||||
caret-color: #fff;
|
||||
padding: 4px 8px;
|
||||
border-radius: 12px;
|
||||
color: rgb(128, 128, 128);
|
||||
border: 2px solid rgba(128, 128, 128, 0.4);
|
||||
background-gradient-start: rgba(0, 0, 0, 0.2);
|
||||
background-gradient-end: rgba(128, 128, 128, 0.2);
|
||||
background-gradient-direction: vertical;
|
||||
caret-color: rgb(128, 128, 128);
|
||||
caret-size: 1px;
|
||||
height: 16px;
|
||||
width: 250px;
|
||||
transition-duration: 300;
|
||||
}
|
||||
|
||||
#searchEntry:focus {
|
||||
color: #545454;
|
||||
border: 1px solid #3a3a3a;
|
||||
background-color: #e8e8e8;
|
||||
caret-color: #545454;
|
||||
border: 2px solid #ffffff;
|
||||
background-gradient-start: rgba(0, 0, 0, 0.2);
|
||||
background-gradient-end: #ffffff;
|
||||
background-gradient-direction: vertical;
|
||||
color: rgb(64, 64, 64);
|
||||
font-weight: bold;
|
||||
-st-shadow: 0px 0px 6px 2px rgba(255,255,255,0.9);
|
||||
transition-duration: 0;
|
||||
}
|
||||
|
||||
#searchEntry:hover {
|
||||
color: #a8a8a8;
|
||||
border: 1px solid #4d4d4d;
|
||||
background-color: #e8e8e8;
|
||||
border: 2px solid #e8e8e8;
|
||||
caret-color: #545454;
|
||||
transition-duration: 500;
|
||||
}
|
||||
|
||||
.dash-section {
|
||||
.view-tab-title {
|
||||
color: #888a85;
|
||||
font-weight: bold;
|
||||
padding: 0px 12px;
|
||||
}
|
||||
|
||||
.view-tab-title:selected {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.view-tab-boxpointer {
|
||||
-arrow-border-radius: 9px;
|
||||
-arrow-background-color: rgba(0,0,0,0.5);
|
||||
-arrow-border-width: 2px;
|
||||
-arrow-border-color: rgba(255,255,255,0.5);
|
||||
-arrow-base: 30px;
|
||||
-arrow-rise: 15px;
|
||||
}
|
||||
|
||||
#searchResults {
|
||||
padding: 20px 10px 10px 10px;
|
||||
}
|
||||
|
||||
#searchResultsContent {
|
||||
padding: 0 10px;
|
||||
spacing: 8px;
|
||||
}
|
||||
|
||||
.section-header {
|
||||
}
|
||||
|
||||
.section-header-inner {
|
||||
.search-statustext,
|
||||
.search-section-header {
|
||||
padding: 4px 12px;
|
||||
spacing: 4px;
|
||||
color: #6f6f6f;
|
||||
}
|
||||
|
||||
.section-text-content {
|
||||
padding: 4px 0px;
|
||||
}
|
||||
|
||||
.dash-section-content {
|
||||
color: #ffffff;
|
||||
spacing: 8px;
|
||||
}
|
||||
|
||||
.more-link {
|
||||
}
|
||||
|
||||
.more-link-expander {
|
||||
background-image: url("section-more.svg");
|
||||
width: 9px;
|
||||
height: 9px;
|
||||
}
|
||||
|
||||
.more-link-expander.open {
|
||||
background-image: url("section-more-open.svg");
|
||||
width: 9px;
|
||||
height: 9px;
|
||||
}
|
||||
|
||||
.dash-pane {
|
||||
.search-section {
|
||||
background-color: rgba(128, 128, 128, .1);
|
||||
border: 1px solid rgba(50, 50, 50, .4);
|
||||
border-radius: 10px;
|
||||
background-color: #111111;
|
||||
border: 2px solid #868686;
|
||||
}
|
||||
|
||||
.search-section-results {
|
||||
color: #ffffff;
|
||||
padding: 30px 10px 10px 20px;
|
||||
border-radius: 10px;
|
||||
border: 1px solid rgba(50, 50, 50, .4);
|
||||
padding: 6px;
|
||||
}
|
||||
|
||||
#dashAppSearchResults {
|
||||
padding: 8px 0px;
|
||||
}
|
||||
|
||||
.dash-search-statustext,
|
||||
.dash-search-section-header {
|
||||
padding: 4px 0px;
|
||||
.search-section-list-results {
|
||||
spacing: 4px;
|
||||
}
|
||||
|
||||
.dash-search-section-results {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.dash-search-section-list-results {
|
||||
spacing: 4px;
|
||||
}
|
||||
|
||||
.dash-search-result-content {
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
.dash-search-result-content:selected {
|
||||
padding: 2px;
|
||||
border: 1px solid #5c5c5c;
|
||||
border-radius: 2px;
|
||||
background-color: #1e1e1e;
|
||||
}
|
||||
|
||||
.dash-results-container {
|
||||
.results-container {
|
||||
spacing: 4px;
|
||||
}
|
||||
|
||||
@ -557,10 +532,7 @@ StTooltip {
|
||||
}
|
||||
|
||||
.all-app {
|
||||
border-radius: 10px;
|
||||
background-color: #111111;
|
||||
border: 2px solid #868686;
|
||||
color: #ffffff;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.app-section-divider-container {
|
||||
@ -573,46 +545,48 @@ StTooltip {
|
||||
background-image: url("separator-white.png");
|
||||
}
|
||||
|
||||
.all-app-controls-panel {
|
||||
height: 30px;
|
||||
#dash > .app-well-app {
|
||||
padding: 6px 12px;
|
||||
}
|
||||
|
||||
.all-app-scroll-view {
|
||||
padding-right: 10px;
|
||||
padding-left: 10px;
|
||||
padding-bottom: 10px;
|
||||
.remove-favorite-icon {
|
||||
color: #a0a0a0;
|
||||
}
|
||||
|
||||
.app-well-app {
|
||||
border: 1px solid #181818;
|
||||
.remove-favorite-icon:hover {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.app-well-app > .overview-icon,
|
||||
.remove-favorite > .overview-icon,
|
||||
.search-result-content > .overview-icon {
|
||||
border-radius: 4px;
|
||||
padding: 4px;
|
||||
width: 70px;
|
||||
height: 70px;
|
||||
font-size: 10px;
|
||||
color: white;
|
||||
transition-duration: 100;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.app-well-app.running {
|
||||
background-gradient-direction: vertical;
|
||||
background-gradient-start: #3d3d3d;
|
||||
background-gradient-end: #181818;
|
||||
.app-well-app.running > .overview-icon {
|
||||
text-shadow: black 0px 2px 2px;
|
||||
background-image: url("running-indicator.svg");
|
||||
}
|
||||
|
||||
.app-well-app.selected {
|
||||
border: 1px solid #666666;
|
||||
.app-well-app:selected > .overview-icon,
|
||||
.search-result-content:selected > .overview-icon {
|
||||
background: rgba(255,255,255,0.33);
|
||||
}
|
||||
|
||||
.app-well-app:hover {
|
||||
border: 1px solid #666666;
|
||||
background-gradient-direction: vertical;
|
||||
background-gradient-start: rgba(61,61,61,0.8);
|
||||
background-gradient-end: rgba(24,24,24,0.2);
|
||||
.app-well-app:hover > .overview-icon,
|
||||
.remove-favorite:hover > .overview-icon,
|
||||
.search-result-content:hover > .overview-icon {
|
||||
background: rgba(255,255,255,0.33);
|
||||
text-shadow: black 0px 2px 2px;
|
||||
transition-duration: 100;
|
||||
}
|
||||
|
||||
.app-well-app:active {
|
||||
.app-well-app:active > .overview-icon {
|
||||
background-color: #1e1e1e;
|
||||
border: 1px solid #5f5f5f;
|
||||
}
|
||||
@ -863,9 +837,19 @@ StTooltip {
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
|
||||
#summary-notification-bin #notification {
|
||||
/* message-tray.height + notification.padding-bottom */
|
||||
padding-bottom: 44px;
|
||||
.summary-notification-boxpointer {
|
||||
-arrow-border-radius: 9px;
|
||||
-arrow-background-color: rgba(0,0,0,0.9);
|
||||
-arrow-border-width: 2px;
|
||||
-arrow-border-color: #5f5f5f;
|
||||
-arrow-base: 30px;
|
||||
-arrow-rise: 15px;
|
||||
}
|
||||
|
||||
.summary-notification-boxpointer #notification {
|
||||
border-radius: 9px;
|
||||
background: rgba(0,0,0,0) !important;
|
||||
padding-bottom: 12px;
|
||||
}
|
||||
|
||||
#notification-scrollview {
|
||||
@ -914,6 +898,10 @@ StTooltip {
|
||||
background: rgba(128,128,128,0.7);
|
||||
}
|
||||
|
||||
.notification-icon-button > StIcon {
|
||||
icon-size: 36px;
|
||||
}
|
||||
|
||||
.chat-received {
|
||||
background-gradient-direction: horizontal;
|
||||
background-gradient-start: rgba(255, 255, 255, 0.2);
|
||||
@ -959,6 +947,10 @@ StTooltip {
|
||||
* icons, because then the summary would be 0x0 when there were no
|
||||
* icons in it, and so you wouldn't be able to hover over it to
|
||||
* activate it.
|
||||
*
|
||||
* Also, the spacing between a summary-source's icon and title is
|
||||
* actually specified as padding-left in source-title, because we
|
||||
* want the spacing to collapse along with the title.
|
||||
*/
|
||||
#summary-mode {
|
||||
padding: 2px 0px 0px 4px;
|
||||
@ -966,7 +958,6 @@ StTooltip {
|
||||
}
|
||||
|
||||
.summary-source {
|
||||
spacing: 4px;
|
||||
}
|
||||
|
||||
.summary-source-button {
|
||||
@ -982,6 +973,7 @@ StTooltip {
|
||||
font: 12px sans-serif;
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
.calendar-calendarweek {
|
||||
@ -997,8 +989,8 @@ StTooltip {
|
||||
.switcher-list {
|
||||
background: rgba(0,0,0,0.8);
|
||||
border: 1px solid rgba(128,128,128,0.40);
|
||||
border-radius: 8px;
|
||||
padding: 18px;
|
||||
border-radius: 24px;
|
||||
padding: 20px;
|
||||
|
||||
font: 12px sans-serif;
|
||||
color: white;
|
||||
@ -1012,7 +1004,9 @@ StTooltip {
|
||||
background-gradient-direction: horizontal;
|
||||
background-gradient-start: rgba(51, 51, 51, 1.0);
|
||||
background-gradient-end: rgba(51, 51, 51, 0);
|
||||
border-radius: 8px;
|
||||
border-radius: 24px;
|
||||
border-radius-topright: 0px;
|
||||
border-radius-bottomright: 0px;
|
||||
width: 60px;
|
||||
}
|
||||
|
||||
@ -1020,13 +1014,15 @@ StTooltip {
|
||||
background-gradient-direction: horizontal;
|
||||
background-gradient-start: rgba(51, 51, 51, 0);
|
||||
background-gradient-end: rgba(51, 51, 51, 1.0);
|
||||
border-radius: 8px;
|
||||
border-radius: 24px;
|
||||
border-radius-topleft: 0px;
|
||||
border-radius-bottomleft: 0px;
|
||||
width: 60px;
|
||||
}
|
||||
|
||||
.switcher-list .item-box {
|
||||
padding: 8px;
|
||||
border-radius: 4px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.switcher-list .thumbnail-box {
|
||||
@ -1041,12 +1037,12 @@ StTooltip {
|
||||
.switcher-list .outlined-item-box {
|
||||
padding: 6px;
|
||||
border: 2px solid rgba(85,85,85,1.0);
|
||||
border-radius: 4px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.switcher-list .selected-item-box {
|
||||
padding: 8px;
|
||||
border-radius: 4px;
|
||||
border-radius: 8px;
|
||||
background: rgba(255,255,255,0.33);
|
||||
}
|
||||
|
||||
@ -1079,16 +1075,16 @@ StTooltip {
|
||||
.workspace-switcher-container {
|
||||
background: rgba(0,0,0,0.8);
|
||||
border: 1px solid rgba(128,128,128,0.40);
|
||||
border-radius: 8px;
|
||||
padding: 12px;
|
||||
border-radius: 24px;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.workspace-switcher {
|
||||
background: transparent;
|
||||
border: 0px;
|
||||
border-radius: 0px;
|
||||
padding: 4px;
|
||||
spacing: 4.5px;
|
||||
padding: 0px;
|
||||
spacing: 8px;
|
||||
}
|
||||
|
||||
.ws-switcher-active-left {
|
||||
@ -1096,7 +1092,7 @@ StTooltip {
|
||||
border: 0px;
|
||||
background: rgba(255,255,255,0.5);
|
||||
background-image: url("ws-switch-arrow-left.svg");
|
||||
border-radius: 4px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.ws-switcher-active-right {
|
||||
@ -1104,14 +1100,14 @@ StTooltip {
|
||||
border: 0px;
|
||||
background: rgba(255,255,255,0.5);
|
||||
background-image: url("ws-switch-arrow-right.svg");
|
||||
border-radius: 4px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.ws-switcher-box {
|
||||
height: 96px;
|
||||
border: 2px solid rgba(85,85,85,0.5);
|
||||
background: transparent;
|
||||
border-radius: 4px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
/* Run Dialog */
|
||||
|
89
data/theme/running-indicator.svg
Normal file
89
data/theme/running-indicator.svg
Normal file
@ -0,0 +1,89 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
width="74.01342"
|
||||
height="74.006706"
|
||||
id="svg7355"
|
||||
version="1.1">
|
||||
<defs
|
||||
id="defs7357">
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient36429"
|
||||
id="radialGradient7461"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.0525552,0,0,1.0525552,-2.5162753,-9.0000838)"
|
||||
cx="47.878681"
|
||||
cy="171.25"
|
||||
fx="47.878681"
|
||||
fy="171.25"
|
||||
r="37" />
|
||||
<linearGradient
|
||||
id="linearGradient36429">
|
||||
<stop
|
||||
id="stop36431"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop36433"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
xlink:href="#linearGradient36471"
|
||||
id="radialGradient7463"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.1891549,0,0,0.55513246,-9.281289,36.12653)"
|
||||
cx="49.067139"
|
||||
cy="242.50381"
|
||||
fx="49.067139"
|
||||
fy="242.50381"
|
||||
r="37.00671" />
|
||||
<linearGradient
|
||||
id="linearGradient36471">
|
||||
<stop
|
||||
id="stop36473"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop36475"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="37.00671"
|
||||
fy="242.50381"
|
||||
fx="49.067139"
|
||||
cy="242.50381"
|
||||
cx="49.067139"
|
||||
gradientTransform="matrix(1.1891549,0,0,0.55513246,-9.281289,36.12653)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient7488"
|
||||
xlink:href="#linearGradient36471" />
|
||||
</defs>
|
||||
<g
|
||||
id="layer1"
|
||||
transform="translate(-266.21629,-168.11809)">
|
||||
<g
|
||||
style="display:inline"
|
||||
id="g30864"
|
||||
transform="translate(255.223,70.118091)">
|
||||
<rect
|
||||
ry="3.5996203"
|
||||
rx="3.5996203"
|
||||
y="98"
|
||||
x="11"
|
||||
height="74"
|
||||
width="74"
|
||||
id="rect14000"
|
||||
style="opacity:0.371875;fill:url(#radialGradient7461);fill-opacity:1;stroke:none" />
|
||||
<path
|
||||
id="rect34520"
|
||||
d="m 84.506708,167.95508 c 6e-6,1.96759 -1.584022,3.55162 -3.551629,3.55163 l -65.910146,0 c -1.967608,-1e-5 -3.551648,-1.58402 -3.551643,-3.55164"
|
||||
style="opacity:0.2;fill:none;stroke:url(#radialGradient7488);stroke-width:1;stroke-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.6 KiB |
@ -39,12 +39,16 @@ nobase_dist_js_DATA = \
|
||||
ui/runDialog.js \
|
||||
ui/scripting.js \
|
||||
ui/search.js \
|
||||
ui/searchDisplay.js \
|
||||
ui/shellDBus.js \
|
||||
ui/statusIconDispatcher.js \
|
||||
ui/statusMenu.js \
|
||||
ui/status/accessibility.js \
|
||||
ui/status/power.js \
|
||||
ui/status/volume.js \
|
||||
ui/telepathyClient.js \
|
||||
ui/tweener.js \
|
||||
ui/viewSelector.js \
|
||||
ui/windowAttentionHandler.js \
|
||||
ui/windowManager.js \
|
||||
ui/workspace.js \
|
||||
|
@ -2,20 +2,7 @@
|
||||
|
||||
const DBus = imports.dbus;
|
||||
|
||||
// D-Bus utils; should eventually move to gjs.
|
||||
// https://bugzilla.gnome.org/show_bug.cgi?id=610859
|
||||
|
||||
function makeProxyClass(iface) {
|
||||
let constructor = function() { this._init.apply(this, arguments); };
|
||||
|
||||
constructor.prototype._init = function(bus, name, path) {
|
||||
bus.proxifyObject(this, name, path);
|
||||
};
|
||||
|
||||
DBus.proxifyPrototype(constructor.prototype, iface);
|
||||
return constructor;
|
||||
}
|
||||
|
||||
// D-Bus utils
|
||||
function nameToPath(name) {
|
||||
return '/' + name.replace(/\./g, '/');
|
||||
};
|
||||
@ -118,7 +105,7 @@ const ChannelDispatchOperationIface = {
|
||||
outSignature: '' }
|
||||
]
|
||||
};
|
||||
let ChannelDispatchOperation = makeProxyClass(ChannelDispatchOperationIface);
|
||||
let ChannelDispatchOperation = DBus.makeProxyClass(ChannelDispatchOperationIface);
|
||||
|
||||
const CONNECTION_NAME = TELEPATHY + '.Connection';
|
||||
const ConnectionIface = {
|
||||
@ -128,7 +115,7 @@ const ConnectionIface = {
|
||||
inSignature: 'uu' }
|
||||
]
|
||||
};
|
||||
let Connection = makeProxyClass(ConnectionIface);
|
||||
let Connection = DBus.makeProxyClass(ConnectionIface);
|
||||
|
||||
const ConnectionStatus = {
|
||||
CONNECTED: 0,
|
||||
@ -150,7 +137,7 @@ const ConnectionAliasingIface = {
|
||||
inSignature: 'a(us)' }
|
||||
]
|
||||
};
|
||||
let ConnectionAliasing = makeProxyClass(ConnectionAliasingIface);
|
||||
let ConnectionAliasing = DBus.makeProxyClass(ConnectionAliasingIface);
|
||||
|
||||
const CONNECTION_AVATARS_NAME = CONNECTION_NAME + '.Interface.Avatars';
|
||||
const ConnectionAvatarsIface = {
|
||||
@ -174,7 +161,7 @@ const ConnectionAvatarsIface = {
|
||||
}
|
||||
]
|
||||
};
|
||||
let ConnectionAvatars = makeProxyClass(ConnectionAvatarsIface);
|
||||
let ConnectionAvatars = DBus.makeProxyClass(ConnectionAvatarsIface);
|
||||
|
||||
const CONNECTION_CONTACTS_NAME = CONNECTION_NAME + '.Interface.Contacts';
|
||||
const ConnectionContactsIface = {
|
||||
@ -186,7 +173,7 @@ const ConnectionContactsIface = {
|
||||
}
|
||||
]
|
||||
};
|
||||
let ConnectionContacts = makeProxyClass(ConnectionContactsIface);
|
||||
let ConnectionContacts = DBus.makeProxyClass(ConnectionContactsIface);
|
||||
|
||||
const CONNECTION_REQUESTS_NAME = CONNECTION_NAME + '.Interface.Requests';
|
||||
const ConnectionRequestsIface = {
|
||||
@ -215,7 +202,7 @@ const ConnectionRequestsIface = {
|
||||
}
|
||||
]
|
||||
};
|
||||
let ConnectionRequests = makeProxyClass(ConnectionRequestsIface);
|
||||
let ConnectionRequests = DBus.makeProxyClass(ConnectionRequestsIface);
|
||||
|
||||
const CONNECTION_SIMPLE_PRESENCE_NAME = CONNECTION_NAME + '.Interface.SimplePresence';
|
||||
const ConnectionSimplePresenceIface = {
|
||||
@ -234,7 +221,7 @@ const ConnectionSimplePresenceIface = {
|
||||
inSignature: 'a{u(uss)}' }
|
||||
]
|
||||
};
|
||||
let ConnectionSimplePresence = makeProxyClass(ConnectionSimplePresenceIface);
|
||||
let ConnectionSimplePresence = DBus.makeProxyClass(ConnectionSimplePresenceIface);
|
||||
|
||||
const ConnectionPresenceType = {
|
||||
UNSET: 0,
|
||||
@ -264,7 +251,7 @@ const ChannelIface = {
|
||||
inSignature: '' }
|
||||
]
|
||||
};
|
||||
let Channel = makeProxyClass(ChannelIface);
|
||||
let Channel = DBus.makeProxyClass(ChannelIface);
|
||||
|
||||
const CHANNEL_TEXT_NAME = CHANNEL_NAME + '.Type.Text';
|
||||
const ChannelTextIface = {
|
||||
@ -285,10 +272,12 @@ const ChannelTextIface = {
|
||||
],
|
||||
signals: [
|
||||
{ name: 'Received',
|
||||
inSignature: 'uuuuus' }
|
||||
inSignature: 'uuuuus' },
|
||||
{ name: 'Sent',
|
||||
inSignature: 'uus' }
|
||||
]
|
||||
};
|
||||
let ChannelText = makeProxyClass(ChannelTextIface);
|
||||
let ChannelText = DBus.makeProxyClass(ChannelTextIface);
|
||||
|
||||
const ChannelTextMessageType = {
|
||||
NORMAL: 0,
|
||||
@ -315,7 +304,7 @@ const ChannelGroupIface = {
|
||||
inSignature: 'sauauauauuu' }
|
||||
]
|
||||
};
|
||||
let ChannelGroup = makeProxyClass(ChannelGroupIface);
|
||||
let ChannelGroup = DBus.makeProxyClass(ChannelGroupIface);
|
||||
|
||||
const ACCOUNT_MANAGER_NAME = TELEPATHY + '.AccountManager';
|
||||
const AccountManagerIface = {
|
||||
@ -330,7 +319,7 @@ const AccountManagerIface = {
|
||||
inSignature: 'ob' }
|
||||
]
|
||||
};
|
||||
let AccountManager = makeProxyClass(AccountManagerIface);
|
||||
let AccountManager = DBus.makeProxyClass(AccountManagerIface);
|
||||
|
||||
const ACCOUNT_NAME = TELEPATHY + '.Account';
|
||||
const AccountIface = {
|
||||
@ -341,7 +330,7 @@ const AccountIface = {
|
||||
access: 'read' }
|
||||
]
|
||||
};
|
||||
let Account = makeProxyClass(AccountIface);
|
||||
let Account = DBus.makeProxyClass(AccountIface);
|
||||
|
||||
const CHANNEL_DISPATCHER_NAME = TELEPATHY + '.ChannelDispatcher';
|
||||
const ChannelDispatcherIface = {
|
||||
@ -352,7 +341,7 @@ const ChannelDispatcherIface = {
|
||||
outSignature: 'o' }
|
||||
]
|
||||
};
|
||||
let ChannelDispatcher = makeProxyClass(ChannelDispatcherIface);
|
||||
let ChannelDispatcher = DBus.makeProxyClass(ChannelDispatcherIface);
|
||||
|
||||
const CHANNEL_REQUEST_NAME = TELEPATHY + '.ChannelRequest';
|
||||
const ChannelRequestIface = {
|
||||
@ -369,4 +358,4 @@ const ChannelRequestIface = {
|
||||
signature: '' }
|
||||
]
|
||||
};
|
||||
let ChannelRequest = makeProxyClass(ChannelRequestIface);
|
||||
let ChannelRequest = DBus.makeProxyClass(ChannelRequestIface);
|
||||
|
@ -102,9 +102,7 @@ AltTabPopup.prototype = {
|
||||
childBox.x1 = Math.max(primary.x + leftPadding, childBox.x1 - offset - hPadding);
|
||||
}
|
||||
|
||||
let [found, spacing] = this.actor.get_theme_node().get_length('spacing', false);
|
||||
if (!found)
|
||||
spacing = 0;
|
||||
let spacing = this.actor.get_theme_node().get_length('spacing');
|
||||
|
||||
childBox.x2 = childBox.x1 + childNaturalWidth;
|
||||
if (childBox.x2 > primary.x + primary.width - rightPadding)
|
||||
@ -501,8 +499,7 @@ SwitcherList.prototype = {
|
||||
this._list = new Shell.GenericContainer({ style_class: 'switcher-list-item-container' });
|
||||
this._list.spacing = 0;
|
||||
this._list.connect('style-changed', Lang.bind(this, function() {
|
||||
let [found, spacing] = this._list.get_theme_node().get_length('spacing', false);
|
||||
this._list.spacing = (found) ? spacing : 0;
|
||||
this._list.spacing = this._list.get_theme_node().get_length('spacing');
|
||||
}));
|
||||
|
||||
this._list.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
|
||||
@ -1035,9 +1032,7 @@ ThumbnailList.prototype = {
|
||||
let totalPadding = this._items[0].get_theme_node().get_horizontal_padding() + this._items[0].get_theme_node().get_vertical_padding();
|
||||
totalPadding += this.actor.get_theme_node().get_horizontal_padding() + this.actor.get_theme_node().get_vertical_padding();
|
||||
let [labelMinHeight, labelNaturalHeight] = this._labels[0].get_preferred_height(-1);
|
||||
let [found, spacing] = this._items[0].child.get_theme_node().get_length('spacing', false);
|
||||
if (!found)
|
||||
spacing = 0;
|
||||
let spacing = this._items[0].child.get_theme_node().get_length('spacing');
|
||||
|
||||
availHeight = Math.min(availHeight - labelNaturalHeight - totalPadding - spacing, THUMBNAIL_DEFAULT_SIZE);
|
||||
let binHeight = availHeight + this._items[0].get_theme_node().get_vertical_padding() + this.actor.get_theme_node().get_vertical_padding() - spacing;
|
||||
|
@ -21,8 +21,6 @@ const Tweener = imports.ui.tweener;
|
||||
const Workspace = imports.ui.workspace;
|
||||
const Params = imports.misc.params;
|
||||
|
||||
const WELL_MAX_COLUMNS = 16;
|
||||
const WELL_MAX_SEARCH_ROWS = 1;
|
||||
const MENU_POPUP_TIMEOUT = 600;
|
||||
|
||||
function AlphabeticalView() {
|
||||
@ -148,22 +146,14 @@ AllAppDisplay.prototype = {
|
||||
Main.queueDeferredWork(this._workId);
|
||||
}));
|
||||
|
||||
let bin = new St.BoxLayout({ style_class: 'all-app-controls-panel',
|
||||
reactive: true });
|
||||
this.actor = new St.BoxLayout({ style_class: 'all-app', vertical: true });
|
||||
this.actor.hide();
|
||||
|
||||
let view = new St.ScrollView({ x_fill: true,
|
||||
y_fill: false,
|
||||
style_class: 'all-app-scroll-view',
|
||||
vshadows: true });
|
||||
this._scrollView = view;
|
||||
this.actor.add(bin);
|
||||
this.actor.add(view, { expand: true, y_fill: false, y_align: St.Align.START });
|
||||
this._scrollView = new St.ScrollView({ x_fill: true,
|
||||
y_fill: false,
|
||||
vshadows: true });
|
||||
this.actor = new St.Bin({ style_class: 'all-app',
|
||||
y_align: St.Align.START,
|
||||
child: this._scrollView });
|
||||
|
||||
this._appView = new ViewByCategories();
|
||||
this._appView.connect('launching', Lang.bind(this, this.close));
|
||||
this._appView.connect('drag-begin', Lang.bind(this, this.close));
|
||||
this._scrollView.add_actor(this._appView.actor);
|
||||
|
||||
this._scrollView.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
||||
@ -177,101 +167,10 @@ AllAppDisplay.prototype = {
|
||||
});
|
||||
|
||||
this._appView.refresh(apps);
|
||||
},
|
||||
|
||||
toggle: function() {
|
||||
if (this.actor.visible) {
|
||||
Tweener.addTween(this.actor,
|
||||
{ opacity: 0,
|
||||
time: Overview.PANE_FADE_TIME,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: Lang.bind(this,
|
||||
function() {
|
||||
this.actor.hide();
|
||||
this.emit('open-state-changed',
|
||||
this.actor.visible);
|
||||
})
|
||||
});
|
||||
} else {
|
||||
this.actor.show();
|
||||
this.emit('open-state-changed', this.actor.visible);
|
||||
this.actor.opacity = 0;
|
||||
Tweener.addTween(this.actor,
|
||||
{ opacity: 255,
|
||||
time: Overview.PANE_FADE_TIME,
|
||||
transition: 'easeOutQuad'
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
close: function() {
|
||||
if (!this.actor.visible)
|
||||
return;
|
||||
this.toggle();
|
||||
}
|
||||
};
|
||||
|
||||
Signals.addSignalMethods(AllAppDisplay.prototype);
|
||||
|
||||
function AppSearchResultDisplay(provider) {
|
||||
this._init(provider);
|
||||
}
|
||||
|
||||
AppSearchResultDisplay.prototype = {
|
||||
__proto__: Search.SearchResultDisplay.prototype,
|
||||
|
||||
_init: function (provider) {
|
||||
Search.SearchResultDisplay.prototype._init.call(this, provider);
|
||||
this._grid = new IconGrid.IconGrid({ rowLimit: WELL_MAX_SEARCH_ROWS });
|
||||
this.actor = new St.Bin({ name: 'dashAppSearchResults',
|
||||
x_align: St.Align.START });
|
||||
this.actor.set_child(this._grid.actor);
|
||||
},
|
||||
|
||||
renderResults: function(results, terms) {
|
||||
let appSys = Shell.AppSystem.get_default();
|
||||
let maxItems = WELL_MAX_SEARCH_ROWS * WELL_MAX_COLUMNS;
|
||||
for (let i = 0; i < results.length && i < maxItems; i++) {
|
||||
let result = results[i];
|
||||
let app = appSys.get_app(result);
|
||||
let display = new AppWellIcon(app);
|
||||
this._grid.addItem(display.actor);
|
||||
}
|
||||
},
|
||||
|
||||
clear: function () {
|
||||
this._grid.removeAll();
|
||||
this.selectionIndex = -1;
|
||||
},
|
||||
|
||||
getVisibleResultCount: function() {
|
||||
return this._grid.visibleItemsCount();
|
||||
},
|
||||
|
||||
selectIndex: function (index) {
|
||||
let nVisible = this.getVisibleResultCount();
|
||||
if (this.selectionIndex >= 0) {
|
||||
let prevActor = this._grid.getItemAtIndex(this.selectionIndex);
|
||||
prevActor._delegate.setSelected(false);
|
||||
}
|
||||
this.selectionIndex = -1;
|
||||
if (index >= nVisible)
|
||||
return false;
|
||||
else if (index < 0)
|
||||
return false;
|
||||
let targetActor = this._grid.getItemAtIndex(index);
|
||||
targetActor._delegate.setSelected(true);
|
||||
this.selectionIndex = index;
|
||||
return true;
|
||||
},
|
||||
|
||||
activateSelected: function() {
|
||||
if (this.selectionIndex < 0)
|
||||
return;
|
||||
let targetActor = this._grid.getItemAtIndex(this.selectionIndex);
|
||||
this.provider.activateResult(targetActor._delegate.app.get_id());
|
||||
}
|
||||
};
|
||||
|
||||
function BaseAppSearchProvider() {
|
||||
this._init();
|
||||
@ -324,12 +223,10 @@ AppSearchProvider.prototype = {
|
||||
return this._appSys.subsearch(false, previousResults, terms);
|
||||
},
|
||||
|
||||
createResultContainerActor: function () {
|
||||
return new AppSearchResultDisplay(this);
|
||||
},
|
||||
|
||||
createResultActor: function (resultMeta, terms) {
|
||||
return new AppIcon(resultMeta.id);
|
||||
let app = this._appSys.get_app(resultMeta['id']);
|
||||
let icon = new AppWellIcon(app);
|
||||
return icon.actor;
|
||||
},
|
||||
|
||||
expandSearch: function(terms) {
|
||||
@ -375,7 +272,9 @@ AppIcon.prototype = {
|
||||
|
||||
let label = this.app.get_name();
|
||||
|
||||
IconGrid.BaseIcon.prototype._init.call(this, label);
|
||||
IconGrid.BaseIcon.prototype._init.call(this,
|
||||
label,
|
||||
{ setSizeManually: true });
|
||||
},
|
||||
|
||||
createIcon: function(iconSize) {
|
||||
@ -396,8 +295,8 @@ AppWellIcon.prototype = {
|
||||
y_fill: true });
|
||||
this.actor._delegate = this;
|
||||
|
||||
this._icon = new AppIcon(app);
|
||||
this.actor.set_child(this._icon.actor);
|
||||
this.icon = new AppIcon(app);
|
||||
this.actor.set_child(this.icon.actor);
|
||||
|
||||
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
|
||||
|
||||
@ -501,11 +400,10 @@ AppWellIcon.prototype = {
|
||||
}
|
||||
}));
|
||||
|
||||
this._menuManager.addMenu(this._menu, true);
|
||||
this._menuManager.addMenu(this._menu);
|
||||
}
|
||||
|
||||
this._menu.popup();
|
||||
this._menuManager.grab();
|
||||
|
||||
return false;
|
||||
},
|
||||
@ -527,14 +425,6 @@ AppWellIcon.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
setSelected: function (isSelected) {
|
||||
this._selected = isSelected;
|
||||
if (this._selected)
|
||||
this.actor.add_style_class_name('selected');
|
||||
else
|
||||
this.actor.remove_style_class_name('selected');
|
||||
},
|
||||
|
||||
_onMenuPoppedUp: function() {
|
||||
if (this._getRunning()) {
|
||||
Main.overview.getWorkspacesForWindow(null).setApplicationWindowSelection(this.app.get_id());
|
||||
@ -582,13 +472,13 @@ AppWellIcon.prototype = {
|
||||
},
|
||||
|
||||
getDragActor: function() {
|
||||
return this.app.create_icon_texture(this._icon.iconSize);
|
||||
return this.app.create_icon_texture(this.icon.iconSize);
|
||||
},
|
||||
|
||||
// Returns the original actor that should align with the actor
|
||||
// we show as the item is being dragged.
|
||||
getDragActorSource: function() {
|
||||
return this._icon.icon;
|
||||
return this.icon.icon;
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(AppWellIcon.prototype);
|
||||
@ -757,135 +647,3 @@ AppIconMenu.prototype = {
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(AppIconMenu.prototype);
|
||||
|
||||
function AppWell() {
|
||||
this._init();
|
||||
}
|
||||
|
||||
AppWell.prototype = {
|
||||
_init : function() {
|
||||
this._placeholderText = null;
|
||||
this._menus = [];
|
||||
this._menuDisplays = [];
|
||||
|
||||
this._favorites = [];
|
||||
|
||||
this._grid = new IconGrid.IconGrid();
|
||||
this.actor = this._grid.actor;
|
||||
this.actor._delegate = this;
|
||||
|
||||
this._workId = Main.initializeDeferredWork(this.actor, Lang.bind(this, this._redisplay));
|
||||
|
||||
this._tracker = Shell.WindowTracker.get_default();
|
||||
this._appSystem = Shell.AppSystem.get_default();
|
||||
|
||||
this._appSystem.connect('installed-changed', Lang.bind(this, this._queueRedisplay));
|
||||
AppFavorites.getAppFavorites().connect('changed', Lang.bind(this, this._queueRedisplay));
|
||||
this._tracker.connect('app-state-changed', Lang.bind(this, this._queueRedisplay));
|
||||
},
|
||||
|
||||
_appIdListToHash: function(apps) {
|
||||
let ids = {};
|
||||
for (let i = 0; i < apps.length; i++)
|
||||
ids[apps[i].get_id()] = apps[i];
|
||||
return ids;
|
||||
},
|
||||
|
||||
_queueRedisplay: function () {
|
||||
Main.queueDeferredWork(this._workId);
|
||||
},
|
||||
|
||||
_redisplay: function () {
|
||||
this._grid.removeAll();
|
||||
|
||||
let favorites = AppFavorites.getAppFavorites().getFavoriteMap();
|
||||
|
||||
/* hardcode here pending some design about how exactly desktop contexts behave */
|
||||
let contextId = '';
|
||||
|
||||
let running = this._tracker.get_running_apps(contextId);
|
||||
let runningIds = this._appIdListToHash(running);
|
||||
|
||||
let nFavorites = 0;
|
||||
for (let id in favorites) {
|
||||
let app = favorites[id];
|
||||
let display = new AppWellIcon(app);
|
||||
this._grid.addItem(display.actor);
|
||||
nFavorites++;
|
||||
}
|
||||
|
||||
for (let i = 0; i < running.length; i++) {
|
||||
let app = running[i];
|
||||
if (app.get_id() in favorites)
|
||||
continue;
|
||||
let display = new AppWellIcon(app);
|
||||
this._grid.addItem(display.actor);
|
||||
}
|
||||
if (this._placeholderText) {
|
||||
this._placeholderText.destroy();
|
||||
this._placeholderText = null;
|
||||
}
|
||||
|
||||
if (running.length == 0 && nFavorites == 0) {
|
||||
this._placeholderText = new St.Label({ text: _("Drag here to add favorites") });
|
||||
this.actor.add_actor(this._placeholderText);
|
||||
}
|
||||
},
|
||||
|
||||
handleDragOver : function(source, actor, x, y, time) {
|
||||
let app = null;
|
||||
if (source instanceof AppWellIcon)
|
||||
app = this._appSystem.get_app(source.getId());
|
||||
else if (source instanceof Workspace.WindowClone)
|
||||
app = this._tracker.get_window_app(source.metaWindow);
|
||||
|
||||
// Don't allow favoriting of transient apps
|
||||
if (app == null || app.is_transient())
|
||||
return DND.DragMotionResult.NO_DROP;
|
||||
|
||||
let id = app.get_id();
|
||||
|
||||
let favorites = AppFavorites.getAppFavorites().getFavoriteMap();
|
||||
|
||||
let srcIsFavorite = (id in favorites);
|
||||
|
||||
if (srcIsFavorite)
|
||||
return DND.DragMotionResult.NO_DROP;
|
||||
|
||||
return DND.DragMotionResult.COPY_DROP;
|
||||
},
|
||||
|
||||
// Draggable target interface
|
||||
acceptDrop : function(source, actor, x, y, time) {
|
||||
let app = null;
|
||||
if (source instanceof AppWellIcon) {
|
||||
app = this._appSystem.get_app(source.getId());
|
||||
} else if (source instanceof Workspace.WindowClone) {
|
||||
app = this._tracker.get_window_app(source.metaWindow);
|
||||
}
|
||||
|
||||
// Don't allow favoriting of transient apps
|
||||
if (app == null || app.is_transient()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let id = app.get_id();
|
||||
|
||||
let favorites = AppFavorites.getAppFavorites().getFavoriteMap();
|
||||
|
||||
let srcIsFavorite = (id in favorites);
|
||||
|
||||
if (srcIsFavorite) {
|
||||
return false;
|
||||
} else {
|
||||
Mainloop.idle_add(Lang.bind(this, function () {
|
||||
AppFavorites.getAppFavorites().addFavorite(id);
|
||||
return false;
|
||||
}));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
Signals.addSignalMethods(AppWell.prototype);
|
||||
|
@ -63,7 +63,7 @@ AppFavorites.prototype = {
|
||||
return appId in this._favorites;
|
||||
},
|
||||
|
||||
_addFavorite: function(appId) {
|
||||
_addFavorite: function(appId, pos) {
|
||||
if (appId in this._favorites)
|
||||
return false;
|
||||
|
||||
@ -73,23 +73,35 @@ AppFavorites.prototype = {
|
||||
return false;
|
||||
|
||||
let ids = this._getIds();
|
||||
ids.push(appId);
|
||||
if (pos == -1)
|
||||
ids.push(appId);
|
||||
else
|
||||
ids.splice(pos, 0, appId);
|
||||
global.settings.set_strv(this.FAVORITE_APPS_KEY, ids);
|
||||
this._favorites[appId] = app;
|
||||
return true;
|
||||
},
|
||||
|
||||
addFavorite: function(appId) {
|
||||
if (!this._addFavorite(appId))
|
||||
addFavoriteAtPos: function(appId, pos) {
|
||||
if (!this._addFavorite(appId, pos))
|
||||
return;
|
||||
|
||||
let app = Shell.AppSystem.get_default().get_app(appId);
|
||||
|
||||
Main.overview.infoBar.setMessage(_("%s has been added to your favorites.").format(app.get_name()), Lang.bind(this, function () {
|
||||
Main.overview.shellInfo.setMessage(_("%s has been added to your favorites.").format(app.get_name()), Lang.bind(this, function () {
|
||||
this._removeFavorite(appId);
|
||||
}));
|
||||
},
|
||||
|
||||
addFavorite: function(appId) {
|
||||
this.addFavoriteAtPos(appId, -1);
|
||||
},
|
||||
|
||||
moveFavoriteToPos: function(appId, pos) {
|
||||
this._removeFavorite(appId);
|
||||
this._addFavorite(appId, pos);
|
||||
},
|
||||
|
||||
_removeFavorite: function(appId) {
|
||||
if (!appId in this._favorites)
|
||||
return false;
|
||||
@ -100,13 +112,16 @@ AppFavorites.prototype = {
|
||||
},
|
||||
|
||||
removeFavorite: function(appId) {
|
||||
let ids = this._getIds();
|
||||
let pos = ids.indexOf(appId);
|
||||
|
||||
let app = this._favorites[appId];
|
||||
if (!this._removeFavorite(appId))
|
||||
return;
|
||||
|
||||
Main.overview.infoBar.setMessage(_("%s has been removed from your favorites.").format(app.get_name()),
|
||||
Main.overview.shellInfo.setMessage(_("%s has been removed from your favorites.").format(app.get_name()),
|
||||
Lang.bind(this, function () {
|
||||
this._addFavorite(appId);
|
||||
this._addFavorite(appId, pos);
|
||||
}));
|
||||
}
|
||||
};
|
||||
|
@ -5,6 +5,10 @@ const Lang = imports.lang;
|
||||
const St = imports.gi.St;
|
||||
const Shell = imports.gi.Shell;
|
||||
|
||||
const Tweener = imports.ui.tweener;
|
||||
|
||||
const POPUP_ANIMATION_TIME = 0.15;
|
||||
|
||||
/**
|
||||
* BoxPointer:
|
||||
* @side: A St.Side type; currently only St.Side.TOP is implemented
|
||||
@ -38,15 +42,84 @@ BoxPointer.prototype = {
|
||||
this.bin.raise(this._border);
|
||||
},
|
||||
|
||||
animateAppear: function(onComplete) {
|
||||
let x = this.actor.x;
|
||||
let y = this.actor.y;
|
||||
let themeNode = this.actor.get_theme_node();
|
||||
let rise = themeNode.get_length('-arrow-rise');
|
||||
|
||||
this.actor.opacity = 0;
|
||||
this.actor.show();
|
||||
|
||||
switch (this._arrowSide) {
|
||||
case St.Side.TOP:
|
||||
this.actor.y -= rise;
|
||||
break;
|
||||
case St.Side.BOTTOM:
|
||||
this.actor.y += rise;
|
||||
break;
|
||||
case St.Side.LEFT:
|
||||
this.actor.x -= rise;
|
||||
break;
|
||||
case St.Side.RIGHT:
|
||||
this.actor.x += rise;
|
||||
break;
|
||||
}
|
||||
|
||||
Tweener.addTween(this.actor, { opacity: 255,
|
||||
x: x,
|
||||
y: y,
|
||||
transition: "linear",
|
||||
onComplete: onComplete,
|
||||
time: POPUP_ANIMATION_TIME });
|
||||
},
|
||||
|
||||
animateDisappear: function(onComplete) {
|
||||
let x = this.actor.x;
|
||||
let y = this.actor.y;
|
||||
let originalX = this.actor.x;
|
||||
let originalY = this.actor.y;
|
||||
let themeNode = this.actor.get_theme_node();
|
||||
let rise = themeNode.get_length('-arrow-rise');
|
||||
|
||||
switch (this._arrowSide) {
|
||||
case St.Side.TOP:
|
||||
y += rise;
|
||||
break;
|
||||
case St.Side.BOTTOM:
|
||||
y -= rise;
|
||||
break;
|
||||
case St.Side.LEFT:
|
||||
x += rise;
|
||||
break;
|
||||
case St.Side.RIGHT:
|
||||
x -= rise;
|
||||
break;
|
||||
}
|
||||
|
||||
Tweener.addTween(this.actor, { opacity: 0,
|
||||
x: x,
|
||||
y: y,
|
||||
transition: "linear",
|
||||
time: POPUP_ANIMATION_TIME,
|
||||
onComplete: Lang.bind(this, function () {
|
||||
this.actor.hide();
|
||||
this.actor.x = originalX;
|
||||
this.actor.y = originalY;
|
||||
if (onComplete)
|
||||
onComplete();
|
||||
})
|
||||
});
|
||||
},
|
||||
|
||||
_adjustAllocationForArrow: function(isWidth, alloc) {
|
||||
let themeNode = this.actor.get_theme_node();
|
||||
let found, borderWidth, base, rise;
|
||||
[found, borderWidth] = themeNode.get_length('-arrow-border-width', false);
|
||||
let borderWidth = themeNode.get_length('-arrow-border-width');
|
||||
alloc.min_size += borderWidth * 2;
|
||||
alloc.natural_size += borderWidth * 2;
|
||||
if ((!isWidth && (this._arrowSide == St.Side.TOP || this._arrowSide == St.Side.BOTTOM))
|
||||
|| (isWidth && (this._arrowSide == St.Side.LEFT || this._arrowSide == St.Side.RIGHT))) {
|
||||
let [found, rise] = themeNode.get_length('-arrow-rise', false);
|
||||
let rise = themeNode.get_length('-arrow-rise');
|
||||
alloc.min_size += rise;
|
||||
alloc.natural_size += rise;
|
||||
}
|
||||
@ -68,9 +141,8 @@ BoxPointer.prototype = {
|
||||
|
||||
_allocate: function(actor, box, flags) {
|
||||
let themeNode = this.actor.get_theme_node();
|
||||
let found, borderWidth, borderRadius, rise, base;
|
||||
[found, borderWidth] = themeNode.get_length('-arrow-border-width', false);
|
||||
[found, rise] = themeNode.get_length('-arrow-rise', false);
|
||||
let borderWidth = themeNode.get_length('-arrow-border-width');
|
||||
let rise = themeNode.get_length('-arrow-rise');
|
||||
let childBox = new Clutter.ActorBox();
|
||||
let availWidth = box.x2 - box.x1;
|
||||
let availHeight = box.y2 - box.y1;
|
||||
@ -105,19 +177,18 @@ BoxPointer.prototype = {
|
||||
_drawBorder: function(area) {
|
||||
let themeNode = this.actor.get_theme_node();
|
||||
|
||||
let found, borderWidth, borderRadius, rise, base;
|
||||
[found, borderWidth] = themeNode.get_length('-arrow-border-width', false);
|
||||
[found, base] = themeNode.get_length('-arrow-base', false);
|
||||
[found, rise] = themeNode.get_length('-arrow-rise', false);
|
||||
[found, borderRadius] = themeNode.get_length('-arrow-border-radius', false);
|
||||
let borderWidth = themeNode.get_length('-arrow-border-width');
|
||||
let base = themeNode.get_length('-arrow-base');
|
||||
let rise = themeNode.get_length('-arrow-rise');
|
||||
let borderRadius = themeNode.get_length('-arrow-border-radius');
|
||||
|
||||
let halfBorder = borderWidth / 2;
|
||||
let halfBase = Math.floor(base/2);
|
||||
|
||||
let borderColor = new Clutter.Color();
|
||||
themeNode.get_color('-arrow-border-color', false, borderColor);
|
||||
themeNode.get_color('-arrow-border-color', borderColor);
|
||||
let backgroundColor = new Clutter.Color();
|
||||
themeNode.get_color('-arrow-background-color', false, backgroundColor);
|
||||
themeNode.get_color('-arrow-background-color', backgroundColor);
|
||||
|
||||
let [width, height] = area.get_surface_size();
|
||||
let [boxWidth, boxHeight] = [width, height];
|
||||
@ -186,6 +257,96 @@ BoxPointer.prototype = {
|
||||
cr.stroke();
|
||||
},
|
||||
|
||||
setPosition: function(sourceActor, gap, alignment) {
|
||||
// We need to show it now to force an allocation,
|
||||
// so that we can query the correct size.
|
||||
this.actor.show();
|
||||
|
||||
// Position correctly relative to the sourceActor
|
||||
let [sourceX, sourceY] = sourceActor.get_transformed_position();
|
||||
let [sourceWidth, sourceHeight] = sourceActor.get_transformed_size();
|
||||
|
||||
let [minWidth, minHeight, natWidth, natHeight] = this.actor.get_preferred_size();
|
||||
|
||||
// We also want to keep it onscreen, and separated from the
|
||||
// edge by the same distance as the main part of the box is
|
||||
// separated from its sourceActor
|
||||
let primary = global.get_primary_monitor();
|
||||
let arrowRise = this.actor.get_theme_node().get_length('-arrow-rise');
|
||||
|
||||
let resX, resY;
|
||||
|
||||
switch (this._arrowSide) {
|
||||
case St.Side.TOP:
|
||||
resY = sourceY + sourceHeight + gap;
|
||||
break;
|
||||
case St.Side.BOTTOM:
|
||||
resY = sourceY - natHeight - gap;
|
||||
break;
|
||||
case St.Side.LEFT:
|
||||
resX = sourceX + sourceWidth + gap;
|
||||
break;
|
||||
case St.Side.RIGHT:
|
||||
resX = sourceX - natWidth - gap;
|
||||
break;
|
||||
}
|
||||
|
||||
// Now align and position the pointing axis, making sure
|
||||
// it fits on screen
|
||||
switch (this._arrowSide) {
|
||||
case St.Side.TOP:
|
||||
case St.Side.BOTTOM:
|
||||
switch (alignment) {
|
||||
case St.Align.START:
|
||||
resX = sourceX;
|
||||
break;
|
||||
case St.Align.MIDDLE:
|
||||
resX = sourceX - Math.floor((natWidth - sourceWidth) / 2);
|
||||
break;
|
||||
case St.Align.END:
|
||||
resX = sourceX - (natWidth - sourceWidth);
|
||||
break;
|
||||
}
|
||||
|
||||
resX = Math.min(resX, primary.x + primary.width - natWidth - arrowRise - gap);
|
||||
resX = Math.max(resX, primary.x);
|
||||
|
||||
this.setArrowOrigin((sourceX - resX) + Math.floor(sourceWidth / 2));
|
||||
break;
|
||||
|
||||
case St.Side.LEFT:
|
||||
case St.Side.RIGHT:
|
||||
switch (alignment) {
|
||||
case St.Align.START:
|
||||
resY = sourceY;
|
||||
break;
|
||||
case St.Align.MIDDLE:
|
||||
resY = sourceY - Math.floor((natHeight - sourceHeight) / 2);
|
||||
break;
|
||||
case St.Align.END:
|
||||
resY = sourceY - (natHeight - sourceHeight);
|
||||
break;
|
||||
}
|
||||
|
||||
resY = Math.min(resY, primary.y + primary.height - natHeight - arrowRise - gap);
|
||||
resY = Math.max(resY, primary.y);
|
||||
|
||||
this.setArrowOrigin((sourceY - resY) + Math.floor(sourceHeight / 2));
|
||||
break;
|
||||
}
|
||||
|
||||
let parent = this.actor.get_parent();
|
||||
let success, x, y;
|
||||
while (!success) {
|
||||
[success, x, y] = parent.transform_stage_point(resX, resY);
|
||||
parent = parent.get_parent();
|
||||
}
|
||||
|
||||
// Actually set the position
|
||||
this.actor.x = Math.floor(x);
|
||||
this.actor.y = Math.floor(y);
|
||||
},
|
||||
|
||||
// @origin: Coordinate specifying middle of the arrow, along
|
||||
// the Y axis for St.Side.LEFT, St.Side.RIGHT from the top and X axis from
|
||||
// the left for St.Side.TOP and St.Side.BOTTOM.
|
||||
|
@ -233,7 +233,7 @@ Chrome.prototype = {
|
||||
},
|
||||
|
||||
_windowsRestacked: function() {
|
||||
let windows = global.get_windows();
|
||||
let windows = global.get_window_actors();
|
||||
let primary = global.get_primary_monitor();
|
||||
|
||||
// The chrome layer should be visible unless there is a window
|
||||
|
1148
js/ui/dash.js
1148
js/ui/dash.js
File diff suppressed because it is too large
Load Diff
22
js/ui/dnd.js
22
js/ui/dnd.js
@ -86,6 +86,9 @@ _Draggable.prototype = {
|
||||
Lang.bind(this, this._onButtonPress));
|
||||
|
||||
this.actor.connect('destroy', Lang.bind(this, function() {
|
||||
this._actorDestroyed = true;
|
||||
if (this._dragInProgress)
|
||||
this._cancelDrag(global.get_current_time());
|
||||
this.disconnectAll();
|
||||
}));
|
||||
this._onEventId = null;
|
||||
@ -264,6 +267,7 @@ _Draggable.prototype = {
|
||||
|
||||
this._dragActor.reparent(this.actor.get_stage());
|
||||
this._dragActor.raise_top();
|
||||
Shell.util_set_hidden_from_pick(this._dragActor, true);
|
||||
|
||||
this._dragOrigOpacity = this._dragActor.opacity;
|
||||
if (this._dragActorOpacity != undefined)
|
||||
@ -329,12 +333,8 @@ _Draggable.prototype = {
|
||||
this._dragActor.set_position(stageX + this._dragOffsetX,
|
||||
stageY + this._dragOffsetY);
|
||||
|
||||
// Because we want to find out what other actor is located at the current position of this._dragActor,
|
||||
// we have to temporarily hide this._dragActor.
|
||||
this._dragActor.hide();
|
||||
let target = this._dragActor.get_stage().get_actor_at_pos(Clutter.PickMode.ALL,
|
||||
stageX, stageY);
|
||||
this._dragActor.show();
|
||||
|
||||
// We call observers only once per motion with the innermost
|
||||
// target actor. If necessary, the observer can walk the
|
||||
@ -381,13 +381,9 @@ _Draggable.prototype = {
|
||||
},
|
||||
|
||||
_dragActorDropped: function(event) {
|
||||
// Find a drop target. Because we want to find out what other actor is located at
|
||||
// the current position of this._dragActor, we have to temporarily hide this._dragActor.
|
||||
this._dragActor.hide();
|
||||
let [dropX, dropY] = event.get_coords();
|
||||
let target = this._dragActor.get_stage().get_actor_at_pos(Clutter.PickMode.ALL,
|
||||
dropX, dropY);
|
||||
this._dragActor.show();
|
||||
|
||||
// We call observers only once per motion with the innermost
|
||||
// target actor. If necessary, the observer can walk the
|
||||
@ -417,6 +413,8 @@ _Draggable.prototype = {
|
||||
targX,
|
||||
targY,
|
||||
event.get_time())) {
|
||||
if (this._actorDestroyed)
|
||||
return true;
|
||||
// If it accepted the drop without taking the actor,
|
||||
// handle it ourselves.
|
||||
if (this._dragActor.get_parent() == this._dragActor.get_stage()) {
|
||||
@ -458,6 +456,12 @@ _Draggable.prototype = {
|
||||
this._dragInProgress = false;
|
||||
let [snapBackX, snapBackY] = this._getRestoreLocation();
|
||||
|
||||
if (this._actorDestroyed) {
|
||||
global.unset_cursor();
|
||||
this.emit('drag-end', eventTime, false);
|
||||
return;
|
||||
}
|
||||
|
||||
this._animationInProgress = true;
|
||||
// No target, so snap back
|
||||
Tweener.addTween(this._dragActor,
|
||||
@ -511,6 +515,8 @@ _Draggable.prototype = {
|
||||
},
|
||||
|
||||
_dragComplete: function() {
|
||||
Shell.util_set_hidden_from_pick(this._dragActor, false);
|
||||
|
||||
this._dragActor = undefined;
|
||||
currentDraggable = null;
|
||||
this._ungrabEvents();
|
||||
|
@ -83,6 +83,9 @@ function init() {
|
||||
return St.describe_actor(this);
|
||||
};
|
||||
|
||||
if (window.global === undefined) // test environment
|
||||
return;
|
||||
|
||||
_blockMethod('Clutter.Event.get_state', 'Shell.get_event_state',
|
||||
'gjs\'s handling of Clutter.ModifierType is broken. See bug 597292.');
|
||||
_blockMethod('Gdk.Display.get_device_state', 'global.get_pointer',
|
||||
|
@ -51,6 +51,12 @@ function loadExtension(dir, enabled, type) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (extensions[meta.uuid] != undefined) {
|
||||
global.logError(baseErrorString + "extension already loaded");
|
||||
return;
|
||||
}
|
||||
|
||||
// Encourage people to add this
|
||||
if (!meta['url']) {
|
||||
global.log(baseErrorString + 'Warning: Missing "url" property in metadata.json');
|
||||
|
@ -113,18 +113,14 @@ BaseIcon.prototype = {
|
||||
},
|
||||
|
||||
_onStyleChanged: function() {
|
||||
let success, len;
|
||||
let node = this.actor.get_theme_node();
|
||||
|
||||
[success, len] = node.get_length('spacing', false);
|
||||
if (success)
|
||||
this._spacing = spacing;
|
||||
this._spacing = node.get_length('spacing');
|
||||
|
||||
if (this._setSizeManually)
|
||||
return;
|
||||
|
||||
[success, len] = node.get_length('icon-size', false);
|
||||
if (success)
|
||||
let len = node.get_length('icon-size');
|
||||
if (len > 0)
|
||||
this._setIconSize(len);
|
||||
}
|
||||
};
|
||||
@ -135,9 +131,12 @@ function IconGrid(params) {
|
||||
|
||||
IconGrid.prototype = {
|
||||
_init: function(params) {
|
||||
params = Params.parse(params, { rowLimit: null, columnLimit: null });
|
||||
params = Params.parse(params, { rowLimit: null,
|
||||
columnLimit: null,
|
||||
xAlign: St.Align.MIDDLE });
|
||||
this._rowLimit = params.rowLimit;
|
||||
this._colLimit = params.columnLimit;
|
||||
this._xAlign = params.xAlign;
|
||||
|
||||
this.actor = new St.BoxLayout({ style_class: 'icon-grid',
|
||||
vertical: true });
|
||||
@ -189,9 +188,19 @@ IconGrid.prototype = {
|
||||
|
||||
let [nColumns, usedWidth] = this._computeLayout(availWidth);
|
||||
|
||||
let overallPaddingX = Math.floor((availWidth - usedWidth) / 2);
|
||||
let leftPadding;
|
||||
switch(this._xAlign) {
|
||||
case St.Align.START:
|
||||
leftPadding = 0;
|
||||
break;
|
||||
case St.Align.MIDDLE:
|
||||
leftPadding = Math.floor((availWidth - usedWidth) / 2);
|
||||
break;
|
||||
case St.Align.END:
|
||||
leftPadding = availWidth - usedWidth;
|
||||
}
|
||||
|
||||
let x = box.x1 + overallPaddingX;
|
||||
let x = box.x1 + leftPadding;
|
||||
let y = box.y1;
|
||||
let columnIndex = 0;
|
||||
let rowIndex = 0;
|
||||
@ -231,7 +240,7 @@ IconGrid.prototype = {
|
||||
|
||||
if (columnIndex == 0) {
|
||||
y += this._item_size + this._spacing;
|
||||
x = box.x1 + overallPaddingX;
|
||||
x = box.x1 + leftPadding;
|
||||
} else {
|
||||
x += this._item_size + this._spacing;
|
||||
}
|
||||
@ -256,12 +265,8 @@ IconGrid.prototype = {
|
||||
|
||||
_onStyleChanged: function() {
|
||||
let themeNode = this.actor.get_theme_node();
|
||||
let [success, len] = themeNode.get_length('spacing', false);
|
||||
if (success)
|
||||
this._spacing = len;
|
||||
[success, len] = themeNode.get_length('-shell-grid-item-size', false);
|
||||
if (success)
|
||||
this._item_size = len;
|
||||
this._spacing = themeNode.get_length('spacing');
|
||||
this._item_size = themeNode.get_length('-shell-grid-item-size');
|
||||
this._grid.queue_relayout();
|
||||
},
|
||||
|
||||
|
@ -220,7 +220,7 @@ WindowList.prototype = {
|
||||
|
||||
_updateWindowList: function() {
|
||||
this.actor.get_children().forEach(function (actor) { actor.destroy(); });
|
||||
let windows = global.get_windows();
|
||||
let windows = global.get_window_actors();
|
||||
let tracker = Shell.WindowTracker.get_default();
|
||||
for (let i = 0; i < windows.length; i++) {
|
||||
let metaWindow = windows[i].metaWindow;
|
||||
@ -678,9 +678,8 @@ LookingGlass.prototype = {
|
||||
|
||||
let toolbar = new St.BoxLayout({ name: 'Toolbar' });
|
||||
this.actor.add_actor(toolbar);
|
||||
let inspectIcon = St.TextureCache.get_default().load_icon_name('gtk-color-picker',
|
||||
St.IconType.SYMBOLIC,
|
||||
24);
|
||||
let inspectIcon = new St.Icon({ icon_name: 'gtk-color-picker',
|
||||
icon_size: 24 });
|
||||
toolbar.add_actor(inspectIcon);
|
||||
inspectIcon.reactive = true;
|
||||
inspectIcon.connect('button-press-event', Lang.bind(this, function () {
|
||||
@ -940,7 +939,9 @@ LookingGlass.prototype = {
|
||||
|
||||
global.stage.set_key_focus(this._entry);
|
||||
|
||||
Tweener.addTween(this.actor, { time: 0.5,
|
||||
// We inverse compensate for the slow-down so you can change the factor
|
||||
// through LookingGlass without long waits.
|
||||
Tweener.addTween(this.actor, { time: 0.5 / St.get_slow_down_factor(),
|
||||
transition: 'easeOutQuad',
|
||||
y: this._targetY
|
||||
});
|
||||
@ -967,7 +968,7 @@ LookingGlass.prototype = {
|
||||
|
||||
Main.popModal(this.actor);
|
||||
|
||||
Tweener.addTween(this.actor, { time: 0.5,
|
||||
Tweener.addTween(this.actor, { time: 0.5 / St.get_slow_down_factor(),
|
||||
transition: 'easeOutQuad',
|
||||
y: this._hiddenY,
|
||||
onComplete: Lang.bind(this, function () {
|
||||
|
@ -15,8 +15,8 @@ const MagnifierDBus = imports.ui.magnifierDBus;
|
||||
const MouseTrackingMode = {
|
||||
NONE: 0,
|
||||
CENTERED: 1,
|
||||
PUSH: 2,
|
||||
PROPORTIONAL: 3
|
||||
PROPORTIONAL: 2,
|
||||
PUSH: 3
|
||||
};
|
||||
|
||||
const ScreenPosition = {
|
||||
@ -681,7 +681,7 @@ ZoomRegion.prototype = {
|
||||
* @mode: One of the enum MouseTrackingMode values.
|
||||
*/
|
||||
setMouseTrackingMode: function(mode) {
|
||||
if (mode >= MouseTrackingMode.NONE && mode <= MouseTrackingMode.PROPORTIONAL)
|
||||
if (mode >= MouseTrackingMode.NONE && mode <= MouseTrackingMode.PUSH)
|
||||
this._mouseTrackingMode = mode;
|
||||
},
|
||||
|
||||
|
@ -97,10 +97,11 @@ function start() {
|
||||
Shell.WindowTracker.get_default();
|
||||
Shell.AppUsage.get_default();
|
||||
|
||||
// The background color really only matters if there is no desktop
|
||||
// window (say, nautilus) running. We set it mostly so things look good
|
||||
// when we are running inside Xephyr.
|
||||
// The stage is always covered so Clutter doesn't need to clear it; however
|
||||
// the color is used as the default contents for the Mutter root background
|
||||
// actor so set it anyways.
|
||||
global.stage.color = DEFAULT_BACKGROUND_COLOR;
|
||||
global.stage.no_clear_hint = true;
|
||||
|
||||
let themeContext = St.ThemeContext.get_for_stage (global.stage);
|
||||
let stylesheetPath = global.datadir + '/theme/gnome-shell.css';
|
||||
@ -161,10 +162,6 @@ function start() {
|
||||
}
|
||||
});
|
||||
|
||||
background = global.create_root_pixmap_actor();
|
||||
global.stage.add_actor(background);
|
||||
background.lower_bottom();
|
||||
|
||||
global.gdk_screen.connect('monitors-changed', _relayout);
|
||||
|
||||
ExtensionSystem.init();
|
||||
@ -240,8 +237,6 @@ function _relayout() {
|
||||
panel.actor.set_size(primary.width, Panel.PANEL_HEIGHT);
|
||||
overview.relayout();
|
||||
|
||||
background.set_size(global.screen_width, global.screen_height);
|
||||
|
||||
// To avoid updating the position and size of the workspaces
|
||||
// in the overview, we just hide the overview. The positions
|
||||
// will be updated when it is next shown. We do the same for
|
||||
@ -253,11 +248,11 @@ function _relayout() {
|
||||
// metacity-clutter currently uses the same prefs as plain metacity,
|
||||
// which probably means we'll be starting out with multiple workspaces;
|
||||
// remove any unused ones. (We do this from an idle handler, because
|
||||
// global.get_windows() still returns NULL at the point when start()
|
||||
// global.get_window_actors() still returns NULL at the point when start()
|
||||
// is called.)
|
||||
function _removeUnusedWorkspaces() {
|
||||
|
||||
let windows = global.get_windows();
|
||||
let windows = global.get_window_actors();
|
||||
let maxWorkspace = 0;
|
||||
for (let i = 0; i < windows.length; i++) {
|
||||
let win = windows[i];
|
||||
@ -292,13 +287,30 @@ function _removeUnusedWorkspaces() {
|
||||
function _globalKeyPressHandler(actor, event) {
|
||||
if (modalCount == 0)
|
||||
return false;
|
||||
if (event.type() != Clutter.EventType.KEY_RELEASE)
|
||||
return false;
|
||||
|
||||
let type = event.type();
|
||||
let symbol = event.get_key_symbol();
|
||||
let keyCode = event.get_key_code();
|
||||
let modifierState = Shell.get_event_state(event);
|
||||
// Check the overview key first, this isn't a Meta.KeyBindingAction yet
|
||||
if (symbol == Clutter.Super_L || symbol == Clutter.Super_R) {
|
||||
// The super key is the default for triggering the overview, and should
|
||||
// get us out of the overview when we are already in it.
|
||||
if (overview.visible)
|
||||
overview.hide();
|
||||
|
||||
if (type == Clutter.EventType.KEY_PRESS) {
|
||||
let symbol = event.get_key_symbol();
|
||||
if (symbol == Clutter.Print) {
|
||||
// We want to be able to take screenshots of the shell at all times
|
||||
return true;
|
||||
}
|
||||
|
||||
// Whitelist some of the Metacity actions
|
||||
let display = global.screen.get_display();
|
||||
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
|
||||
|
||||
// This relies on the fact that Clutter.ModifierType is the same as Gdk.ModifierType
|
||||
let action = display.get_keybinding_action(keyCode, modifierState);
|
||||
switch (action) {
|
||||
case Meta.KeyBindingAction.COMMAND_SCREENSHOT:
|
||||
let gconf = GConf.Client.get_default();
|
||||
let command = gconf.get_string('/apps/metacity/keybinding_commands/command_screenshot');
|
||||
if (command != null && command != '') {
|
||||
@ -306,41 +318,17 @@ function _globalKeyPressHandler(actor, event) {
|
||||
let p = new Shell.Process({'args' : args});
|
||||
p.run();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
} else if (type == Clutter.EventType.KEY_RELEASE) {
|
||||
let symbol = event.get_key_symbol();
|
||||
let keyCode = event.get_key_code();
|
||||
let modifierState = Shell.get_event_state(event);
|
||||
// Check the overview key first, this isn't a Meta.KeyBindingAction yet
|
||||
if (symbol == Clutter.Super_L || symbol == Clutter.Super_R) {
|
||||
// The super key is the default for triggering the overview, and should
|
||||
// get us out of the overview when we are already in it.
|
||||
if (overview.visible)
|
||||
overview.hide();
|
||||
|
||||
case Meta.KeyBindingAction.WORKSPACE_LEFT:
|
||||
wm.actionMoveWorkspaceLeft();
|
||||
return true;
|
||||
case Meta.KeyBindingAction.WORKSPACE_RIGHT:
|
||||
wm.actionMoveWorkspaceRight();
|
||||
return true;
|
||||
case Meta.KeyBindingAction.PANEL_RUN_DIALOG:
|
||||
case Meta.KeyBindingAction.COMMAND_2:
|
||||
getRunDialog().open();
|
||||
return true;
|
||||
}
|
||||
|
||||
// Whitelist some of the Metacity actions
|
||||
let display = global.screen.get_display();
|
||||
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
|
||||
|
||||
// This relies on the fact that Clutter.ModifierType is the same as Gdk.ModifierType
|
||||
let action = display.get_keybinding_action(symbol, keyCode, modifierState);
|
||||
switch (action) {
|
||||
case Meta.KeyBindingAction.WORKSPACE_LEFT:
|
||||
wm.actionMoveWorkspaceLeft();
|
||||
return true;
|
||||
case Meta.KeyBindingAction.WORKSPACE_RIGHT:
|
||||
wm.actionMoveWorkspaceRight();
|
||||
return true;
|
||||
case Meta.KeyBindingAction.PANEL_RUN_DIALOG:
|
||||
case Meta.KeyBindingAction.COMMAND_2:
|
||||
getRunDialog().open();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -397,6 +385,7 @@ function pushModal(actor) {
|
||||
}
|
||||
modalActorFocusStack.push([actor, curFocus]);
|
||||
|
||||
global.stage.set_key_focus(null);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -12,6 +12,7 @@ const St = imports.gi.St;
|
||||
const Tweener = imports.ui.tweener;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const BoxPointer = imports.ui.boxpointer;
|
||||
const Params = imports.misc.params;
|
||||
|
||||
const ANIMATION_TIME = 0.2;
|
||||
@ -21,10 +22,12 @@ const SUMMARY_TIMEOUT = 1;
|
||||
const HIDE_TIMEOUT = 0.2;
|
||||
const LONGER_HIDE_TIMEOUT = 0.6;
|
||||
|
||||
const BUTTON_ICON_SIZE = 36;
|
||||
|
||||
const MAX_SOURCE_TITLE_WIDTH = 180;
|
||||
|
||||
// We delay hiding of the tray if the mouse is within MOUSE_LEFT_ACTOR_THRESHOLD
|
||||
// range from the point where it left the tray.
|
||||
const MOUSE_LEFT_ACTOR_THRESHOLD = 20;
|
||||
|
||||
const State = {
|
||||
HIDDEN: 0,
|
||||
SHOWING: 1,
|
||||
@ -97,6 +100,7 @@ Notification.prototype = {
|
||||
this.source = source;
|
||||
this.urgent = false;
|
||||
this.expanded = false;
|
||||
this._useActionIcons = false;
|
||||
this._customContent = false;
|
||||
this._bannerBodyText = null;
|
||||
this._titleFitsInBannerMode = true;
|
||||
@ -116,11 +120,6 @@ Notification.prototype = {
|
||||
this._capturedEventId = 0;
|
||||
this._keyPressId = 0;
|
||||
|
||||
source.connect('clicked', Lang.bind(this,
|
||||
function() {
|
||||
this.emit('dismissed');
|
||||
}));
|
||||
|
||||
source.connect('destroy', Lang.bind(this, this.destroy));
|
||||
|
||||
this.actor = new St.Table({ name: 'notification',
|
||||
@ -130,7 +129,7 @@ Notification.prototype = {
|
||||
function (actor, event) {
|
||||
if (!this._actionArea ||
|
||||
!this._actionArea.contains(event.get_source()))
|
||||
this.source.clicked();
|
||||
this.emit('clicked');
|
||||
}));
|
||||
|
||||
// The first line should have the title, followed by the
|
||||
@ -309,6 +308,8 @@ Notification.prototype = {
|
||||
this._actionArea = null;
|
||||
if (this._buttonBox)
|
||||
this._buttonBox = null;
|
||||
} else {
|
||||
this._addBannerBody();
|
||||
}
|
||||
this._actionArea = actor;
|
||||
|
||||
@ -344,9 +345,9 @@ Notification.prototype = {
|
||||
|
||||
let button = new St.Button();
|
||||
|
||||
if (Gtk.IconTheme.get_default().has_icon(id)) {
|
||||
if (this._useActionIcons && Gtk.IconTheme.get_default().has_icon(id)) {
|
||||
button.add_style_class_name('notification-icon-button');
|
||||
button.child = St.TextureCache.get_default().load_icon_name(id, St.IconType.SYMBOLIC, BUTTON_ICON_SIZE);
|
||||
button.child = new St.Icon({ icon_name: id });
|
||||
} else {
|
||||
button.add_style_class_name('notification-button');
|
||||
button.label = label;
|
||||
@ -361,9 +362,12 @@ Notification.prototype = {
|
||||
this.urgent = urgent;
|
||||
},
|
||||
|
||||
setUseActionIcons: function(useIcons) {
|
||||
this._useActionIcons = useIcons;
|
||||
},
|
||||
|
||||
_styleChanged: function() {
|
||||
let [hasSpacing, spacing] = this.actor.get_theme_node().get_length('spacing-columns', false);
|
||||
this._spacing = hasSpacing ? spacing : 0;
|
||||
this._spacing = this.actor.get_theme_node().get_length('spacing-columns');
|
||||
},
|
||||
|
||||
_bannerBoxGetPreferredWidth: function(actor, forHeight, alloc) {
|
||||
@ -663,26 +667,26 @@ Source.prototype = {
|
||||
},
|
||||
|
||||
notify: function(notification) {
|
||||
if (this.notification)
|
||||
if (this.notification) {
|
||||
this.notification.disconnect(this._notificationClickedId);
|
||||
this.notification.disconnect(this._notificationDestroyedId);
|
||||
}
|
||||
|
||||
this.notification = notification;
|
||||
|
||||
this._notificationClickedId = notification.connect('clicked', Lang.bind(this, this._notificationClicked));
|
||||
this._notificationDestroyedId = notification.connect('destroy', Lang.bind(this,
|
||||
function () {
|
||||
if (this.notification == notification) {
|
||||
this.notification = null;
|
||||
this._notificationDestroyedId = 0;
|
||||
this._notificationClickedId = 0;
|
||||
}
|
||||
}));
|
||||
|
||||
this.emit('notify', notification);
|
||||
},
|
||||
|
||||
clicked: function() {
|
||||
this.emit('clicked');
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
this.emit('destroy');
|
||||
},
|
||||
@ -694,145 +698,64 @@ Source.prototype = {
|
||||
if (this._iconBin.child)
|
||||
this._iconBin.child.destroy();
|
||||
this._iconBin.child = icon;
|
||||
},
|
||||
|
||||
// Default implementation is to do nothing, but subclass can override
|
||||
_notificationClicked: function(notification) {
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(Source.prototype);
|
||||
|
||||
function SummaryItem(source, minTitleWidth) {
|
||||
this._init(source, minTitleWidth);
|
||||
function SummaryItem(source) {
|
||||
this._init(source);
|
||||
}
|
||||
|
||||
SummaryItem.prototype = {
|
||||
_init: function(source, minTitleWidth) {
|
||||
_init: function(source) {
|
||||
this.source = source;
|
||||
// The message tray items should all be the same width when expanded. Because the only variation is introduced by the width of the title,
|
||||
// we pass in the desired minimum title width, which is the maximum title width of the items which are currently in the tray. If the width
|
||||
// of the title of this item is greater (up to MAX_SOURCE_TITLE_WIDTH), then that width will be used, and the width of all the other items
|
||||
// in the message tray will be readjusted.
|
||||
this._minTitleWidth = minTitleWidth;
|
||||
this.actor = new St.Button({ style_class: 'summary-source-button',
|
||||
reactive: true,
|
||||
track_hover: true });
|
||||
|
||||
this._sourceBox = new Shell.GenericContainer({ style_class: 'summary-source',
|
||||
reactive: true });
|
||||
this._sourceBox.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
|
||||
this._sourceBox.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
|
||||
this._sourceBox.connect('allocate', Lang.bind(this, this._allocate));
|
||||
this._sourceBox = new St.BoxLayout({ style_class: 'summary-source' });
|
||||
|
||||
this._sourceIcon = source.getSummaryIcon();
|
||||
this._sourceTitleBin = new St.Bin({ y_align: St.Align.MIDDLE, x_fill: true });
|
||||
this._sourceTitleBin = new St.Bin({ y_align: St.Align.MIDDLE,
|
||||
x_fill: true,
|
||||
clip_to_allocation: true });
|
||||
this._sourceTitle = new St.Label({ style_class: 'source-title',
|
||||
text: source.title });
|
||||
this._sourceTitle.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||
this._sourceTitleBin.child = this._sourceTitle;
|
||||
this._sourceTitleBin.width = 0;
|
||||
|
||||
this._sourceBox.add_actor(this._sourceIcon);
|
||||
this._sourceBox.add_actor(this._sourceTitleBin);
|
||||
this._widthFraction = 0;
|
||||
this._sourceBox.add_actor(this._sourceTitleBin, { expand: true });
|
||||
this.actor.child = this._sourceBox;
|
||||
},
|
||||
|
||||
// getTitleNaturalWidth, getTitleWidth, and setTitleWidth include
|
||||
// the spacing between the icon and title (which is actually
|
||||
// _sourceTitle's padding-left) as part of the width.
|
||||
|
||||
getTitleNaturalWidth: function() {
|
||||
let [sourceTitleBinMinWidth, sourceTitleBinNaturalWidth] =
|
||||
this._sourceTitleBin.get_preferred_width(-1);
|
||||
return Math.min(sourceTitleBinNaturalWidth, MAX_SOURCE_TITLE_WIDTH);
|
||||
let [minWidth, naturalWidth] = this._sourceTitle.get_preferred_width(-1);
|
||||
|
||||
return Math.min(naturalWidth, MAX_SOURCE_TITLE_WIDTH);
|
||||
},
|
||||
|
||||
setMinTitleWidth: function(minTitleWidth) {
|
||||
this._minTitleWidth = minTitleWidth;
|
||||
getTitleWidth: function() {
|
||||
return this._sourceTitleBin.width;
|
||||
},
|
||||
|
||||
_getPreferredWidth: function(actor, forHeight, alloc) {
|
||||
let [found, spacing] = this._sourceBox.get_theme_node().get_length('spacing', false);
|
||||
if (!found)
|
||||
spacing = 0;
|
||||
let [sourceIconMinWidth, sourceIconNaturalWidth] = this._sourceIcon.get_preferred_width(forHeight);
|
||||
let [sourceTitleBinMinWidth, sourceTitleBinNaturalWidth] =
|
||||
this._sourceTitleBin.get_preferred_width(forHeight);
|
||||
let minWidth = sourceIconNaturalWidth +
|
||||
(this._widthFraction > 0 ? spacing : 0) +
|
||||
this._widthFraction * Math.min(Math.max(sourceTitleBinNaturalWidth, this._minTitleWidth),
|
||||
MAX_SOURCE_TITLE_WIDTH);
|
||||
alloc.min_size = minWidth;
|
||||
alloc.natural_size = minWidth;
|
||||
setTitleWidth: function(width) {
|
||||
width = Math.round(width);
|
||||
if (width != this._sourceTitleBin.width)
|
||||
this._sourceTitleBin.width = width;
|
||||
},
|
||||
|
||||
_getPreferredHeight: function(actor, forWidth, alloc) {
|
||||
let [sourceIconMinHeight, sourceIconNaturalHeight] = this._sourceIcon.get_preferred_height(forWidth);
|
||||
alloc.min_size = sourceIconNaturalHeight;
|
||||
alloc.natural_size = sourceIconNaturalHeight;
|
||||
},
|
||||
|
||||
_allocate: function (actor, box, flags) {
|
||||
let width = box.x2 - box.x1;
|
||||
let height = box.y2 - box.y1;
|
||||
|
||||
let [sourceIconMinWidth, sourceIconNaturalWidth] = this._sourceIcon.get_preferred_width(-1);
|
||||
let [sourceIconMinHeight, sourceIconNaturalHeight] = this._sourceIcon.get_preferred_height(-1);
|
||||
|
||||
let iconBox = new Clutter.ActorBox();
|
||||
iconBox.x1 = 0;
|
||||
iconBox.y1 = 0;
|
||||
iconBox.x2 = sourceIconNaturalWidth;
|
||||
iconBox.y2 = sourceIconNaturalHeight;
|
||||
|
||||
this._sourceIcon.allocate(iconBox, flags);
|
||||
|
||||
let [found, spacing] = this._sourceBox.get_theme_node().get_length('spacing', false);
|
||||
if (!found)
|
||||
spacing = 0;
|
||||
|
||||
let titleBox = new Clutter.ActorBox();
|
||||
if (width > sourceIconNaturalWidth + spacing) {
|
||||
titleBox.x1 = iconBox.x2 + spacing;
|
||||
titleBox.x2 = width;
|
||||
} else {
|
||||
titleBox.x1 = iconBox.x2;
|
||||
titleBox.x2 = iconBox.x2;
|
||||
}
|
||||
titleBox.y1 = 0;
|
||||
titleBox.y2 = height;
|
||||
|
||||
this._sourceTitleBin.allocate(titleBox, flags);
|
||||
|
||||
this._sourceTitleBin.set_clip(0, 0, titleBox.x2 - titleBox.x1, height);
|
||||
},
|
||||
|
||||
expand: function() {
|
||||
// this._adjustEllipsization replaces some text with the dots at the end of the animation,
|
||||
// and then we replace the dots with the text before we begin the animation to collapse
|
||||
// the title. These changes are not noticeable at the speed with which we do the animation,
|
||||
// while animating in the ellipsized mode does not look good.
|
||||
Tweener.addTween(this,
|
||||
{ widthFraction: 1,
|
||||
time: ANIMATION_TIME,
|
||||
transition: 'linear',
|
||||
onComplete: this._adjustEllipsization,
|
||||
onCompleteScope: this });
|
||||
},
|
||||
|
||||
collapse: function() {
|
||||
this._sourceTitle.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||
Tweener.addTween(this,
|
||||
{ widthFraction: 0,
|
||||
time: ANIMATION_TIME,
|
||||
transition: 'linear' });
|
||||
},
|
||||
|
||||
_adjustEllipsization: function() {
|
||||
let [sourceTitleBinMinWidth, sourceTitleBinNaturalWidth] = this._sourceTitleBin.get_preferred_width(-1);
|
||||
if (sourceTitleBinNaturalWidth > MAX_SOURCE_TITLE_WIDTH)
|
||||
this._sourceTitle.clutter_text.ellipsize = Pango.EllipsizeMode.END;
|
||||
},
|
||||
|
||||
set widthFraction(widthFraction) {
|
||||
this._widthFraction = widthFraction;
|
||||
this._sourceBox.queue_relayout();
|
||||
},
|
||||
|
||||
get widthFraction() {
|
||||
return this._widthFraction;
|
||||
setEllipsization: function(mode) {
|
||||
this._sourceTitle.clutter_text.ellipsize = mode;
|
||||
}
|
||||
};
|
||||
|
||||
@ -862,15 +785,27 @@ MessageTray.prototype = {
|
||||
this._summaryBin.child = this._summary;
|
||||
this._summaryBin.opacity = 0;
|
||||
|
||||
this._summaryNotificationBin = new St.Bin({ name: 'summary-notification-bin',
|
||||
anchor_gravity: Clutter.Gravity.NORTH_EAST,
|
||||
reactive: true,
|
||||
track_hover: true });
|
||||
this.actor.add_actor(this._summaryNotificationBin);
|
||||
this._summaryNotificationBin.lower_bottom();
|
||||
this._summaryNotificationBin.hide();
|
||||
this._summaryMotionId = 0;
|
||||
|
||||
this._summaryNotificationBoxPointer = new BoxPointer.BoxPointer(St.Side.BOTTOM,
|
||||
{ reactive: true,
|
||||
track_hover: true });
|
||||
this._summaryNotificationBoxPointer.actor.style_class = 'summary-notification-boxpointer';
|
||||
this.actor.add_actor(this._summaryNotificationBoxPointer.actor);
|
||||
this._summaryNotificationBoxPointer.actor.lower_bottom();
|
||||
this._summaryNotificationBoxPointer.actor.hide();
|
||||
|
||||
this._summaryNotification = null;
|
||||
this._clickedSummaryItem = null;
|
||||
this._clickedSummaryItemAllocationChangedId = 0;
|
||||
this._expandedSummaryItem = null;
|
||||
this._summaryItemTitleWidth = 0;
|
||||
|
||||
// To simplify the summary item animation code, we pretend
|
||||
// that there's an invisible SummaryItem to the left of the
|
||||
// leftmost real summary item, and that it's expanded when all
|
||||
// of the other items are collapsed.
|
||||
this._imaginarySummaryItemTitleWidth = 0;
|
||||
|
||||
this._trayState = State.HIDDEN;
|
||||
this._locked = false;
|
||||
@ -893,7 +828,7 @@ MessageTray.prototype = {
|
||||
Main.chrome.addActor(this.actor, { affectsStruts: false,
|
||||
visibleInOverview: true });
|
||||
Main.chrome.trackActor(this._notificationBin);
|
||||
Main.chrome.trackActor(this._summaryNotificationBin);
|
||||
Main.chrome.trackActor(this._summaryNotificationBoxPointer.actor);
|
||||
|
||||
global.gdk_screen.connect('monitors-changed', Lang.bind(this, this._setSizePosition));
|
||||
|
||||
@ -917,6 +852,11 @@ MessageTray.prototype = {
|
||||
}));
|
||||
|
||||
this._summaryItems = [];
|
||||
// We keep a list of new summary items that were added to the summary since the last
|
||||
// time it was shown to the user. We automatically show the summary to the user if there
|
||||
// are items in this list once the notifications are done showing or once an item gets
|
||||
// added to the summary without a notification being shown.
|
||||
this._newSummaryItems = [];
|
||||
this._longestSummaryItem = null;
|
||||
},
|
||||
|
||||
@ -930,7 +870,6 @@ MessageTray.prototype = {
|
||||
|
||||
// These work because of their anchor_gravity
|
||||
this._summaryBin.x = primary.width;
|
||||
this._summaryNotificationBin.x = primary.width;
|
||||
},
|
||||
|
||||
contains: function(source) {
|
||||
@ -951,22 +890,20 @@ MessageTray.prototype = {
|
||||
return;
|
||||
}
|
||||
|
||||
let minTitleWidth = (this._longestSummaryItem ? this._longestSummaryItem.getTitleNaturalWidth() : 0);
|
||||
let summaryItem = new SummaryItem(source, minTitleWidth);
|
||||
let summaryItem = new SummaryItem(source);
|
||||
|
||||
this._summary.insert_actor(summaryItem.actor, 0);
|
||||
this._summaryNeedsToBeShown = true;
|
||||
|
||||
let newItemTitleWidth = summaryItem.getTitleNaturalWidth();
|
||||
if (newItemTitleWidth > minTitleWidth) {
|
||||
for (let i = 0; i < this._summaryItems.length; i++) {
|
||||
this._summaryItems[i].setMinTitleWidth(newItemTitleWidth);
|
||||
}
|
||||
summaryItem.setMinTitleWidth(newItemTitleWidth);
|
||||
let titleWidth = summaryItem.getTitleNaturalWidth();
|
||||
if (titleWidth > this._summaryItemTitleWidth) {
|
||||
this._summaryItemTitleWidth = titleWidth;
|
||||
if (!this._expandedSummaryItem)
|
||||
this._imaginarySummaryItemTitleWidth = titleWidth;
|
||||
this._longestSummaryItem = summaryItem;
|
||||
}
|
||||
|
||||
this._summaryItems.push(summaryItem);
|
||||
this._newSummaryItems.push(summaryItem);
|
||||
|
||||
source.connect('notify', Lang.bind(this, this._onNotify));
|
||||
|
||||
@ -1007,21 +944,26 @@ MessageTray.prototype = {
|
||||
|
||||
this._summary.remove_actor(this._summaryItems[index].actor);
|
||||
|
||||
let newSummaryItemsIndex = this._newSummaryItems.indexOf(this._summaryItems[index]);
|
||||
if (newSummaryItemsIndex != -1)
|
||||
this._newSummaryItems.splice(newSummaryItemsIndex, 1);
|
||||
|
||||
this._summaryItems.splice(index, 1);
|
||||
if (this._longestSummaryItem.source == source) {
|
||||
|
||||
let maxTitleWidth = 0;
|
||||
let newTitleWidth = 0;
|
||||
this._longestSummaryItem = null;
|
||||
for (let i = 0; i < this._summaryItems.length; i++) {
|
||||
let summaryItem = this._summaryItems[i];
|
||||
if (summaryItem.getTitleNaturalWidth() > maxTitleWidth) {
|
||||
maxTitleWidth = summaryItem.getTitleNaturalWidth();
|
||||
let titleWidth = summaryItem.getTitleNaturalWidth();
|
||||
if (titleWidth > newTitleWidth) {
|
||||
newTitleWidth = titleWidth;
|
||||
this._longestSummaryItem = summaryItem;
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < this._summaryItems.length; i++) {
|
||||
this._summaryItems[i].setMinTitleWidth(maxTitleWidth);
|
||||
}
|
||||
|
||||
this._summaryItemTitleWidth = newTitleWidth;
|
||||
if (!this._expandedSummaryItem)
|
||||
this._imaginarySummaryItemTitleWidth = newTitleWidth;
|
||||
}
|
||||
|
||||
let needUpdate = false;
|
||||
@ -1032,7 +974,7 @@ MessageTray.prototype = {
|
||||
needUpdate = true;
|
||||
}
|
||||
if (this._clickedSummaryItem && this._clickedSummaryItem.source == source) {
|
||||
this._clickedSummaryItem = null;
|
||||
this._unsetClickedSummaryItem();
|
||||
needUpdate = true;
|
||||
}
|
||||
|
||||
@ -1061,7 +1003,7 @@ MessageTray.prototype = {
|
||||
if (!this._locked)
|
||||
return;
|
||||
this._locked = false;
|
||||
this._clickedSummaryItem = null;
|
||||
this._unsetClickedSummaryItem();
|
||||
this._updateState();
|
||||
},
|
||||
|
||||
@ -1097,17 +1039,94 @@ MessageTray.prototype = {
|
||||
},
|
||||
|
||||
_onSummaryItemHoverChanged: function(summaryItem) {
|
||||
if (summaryItem.actor.hover)
|
||||
summaryItem.expand();
|
||||
// We can't just animate individual summary items as the
|
||||
// pointer moves in and out of them, because if they don't
|
||||
// move in sync you get weird-looking wobbling. So whenever
|
||||
// there's a change, we have to re-tween the entire summary
|
||||
// area.
|
||||
|
||||
if (summaryItem.actor.hover) {
|
||||
if (summaryItem == this._expandedSummaryItem)
|
||||
return;
|
||||
|
||||
this._expandedSummaryItem = summaryItem;
|
||||
} else {
|
||||
if (summaryItem != this._expandedSummaryItem)
|
||||
return;
|
||||
|
||||
this._expandedSummaryItem = null;
|
||||
|
||||
// Turn off ellipsization while collapsing; it looks better
|
||||
summaryItem.setEllipsization(Pango.EllipsizeMode.NONE);
|
||||
}
|
||||
|
||||
// We tween on a "_expandedSummaryItemTitleWidth" pseudo-property
|
||||
// that represents the current title width of the
|
||||
// expanded/expanding item, or the width of the imaginary
|
||||
// invisible item if we're collapsing everything.
|
||||
Tweener.addTween(this,
|
||||
{ _expandedSummaryItemTitleWidth: this._summaryItemTitleWidth,
|
||||
time: ANIMATION_TIME,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: this._expandSummaryItemCompleted,
|
||||
onCompleteScope: this });
|
||||
},
|
||||
|
||||
get _expandedSummaryItemTitleWidth() {
|
||||
if (this._expandedSummaryItem)
|
||||
return this._expandedSummaryItem.getTitleWidth();
|
||||
else
|
||||
summaryItem.collapse();
|
||||
return this._imaginarySummaryItemTitleWidth;
|
||||
},
|
||||
|
||||
set _expandedSummaryItemTitleWidth(expansion) {
|
||||
// Expand the expanding item to its new width
|
||||
if (this._expandedSummaryItem)
|
||||
this._expandedSummaryItem.setTitleWidth(expansion);
|
||||
else
|
||||
this._imaginarySummaryItemTitleWidth = expansion;
|
||||
|
||||
// Figure out how much space the other items are currently
|
||||
// using, and how much they need to be shrunk to keep the
|
||||
// total width (including the width of the imaginary item)
|
||||
// constant.
|
||||
let excess = this._summaryItemTitleWidth - expansion;
|
||||
let oldExcess = 0, shrinkage;
|
||||
if (excess) {
|
||||
for (let i = 0; i < this._summaryItems.length; i++) {
|
||||
if (this._summaryItems[i] != this._expandedSummaryItem)
|
||||
oldExcess += this._summaryItems[i].getTitleWidth();
|
||||
}
|
||||
if (this._expandedSummaryItem)
|
||||
oldExcess += this._imaginarySummaryItemTitleWidth;
|
||||
}
|
||||
if (excess && oldExcess)
|
||||
shrinkage = excess / oldExcess;
|
||||
else
|
||||
shrinkage = 0;
|
||||
|
||||
// Now shrink each one proportionately
|
||||
for (let i = 0; i < this._summaryItems.length; i++) {
|
||||
if (this._summaryItems[i] == this._expandedSummaryItem)
|
||||
continue;
|
||||
|
||||
let width = this._summaryItems[i].getTitleWidth();
|
||||
this._summaryItems[i].setTitleWidth(width * shrinkage);
|
||||
}
|
||||
if (this._expandedSummaryItem)
|
||||
this._imaginarySummaryItemTitleWidth *= shrinkage;
|
||||
},
|
||||
|
||||
_expandSummaryItemCompleted: function() {
|
||||
if (this._expandedSummaryItem)
|
||||
this._expandedSummaryItem.setEllipsization(Pango.EllipsizeMode.END);
|
||||
},
|
||||
|
||||
_onSummaryItemClicked: function(summaryItem) {
|
||||
if (!this._clickedSummaryItem || this._clickedSummaryItem != summaryItem)
|
||||
this._clickedSummaryItem = summaryItem;
|
||||
else
|
||||
this._clickedSummaryItem = null;
|
||||
this._unsetClickedSummaryItem();
|
||||
|
||||
this._updateState();
|
||||
},
|
||||
@ -1134,6 +1153,8 @@ MessageTray.prototype = {
|
||||
if (this._trayLeftTimeoutId) {
|
||||
Mainloop.source_remove(this._trayLeftTimeoutId);
|
||||
this._trayLeftTimeoutId = 0;
|
||||
this._trayLeftMouseX = -1;
|
||||
this._trayLeftMouseY = -1;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1155,6 +1176,14 @@ MessageTray.prototype = {
|
||||
this._pointerInTray = true;
|
||||
this._updateState();
|
||||
} else {
|
||||
// We record the position of the mouse the moment it leaves the tray. These coordinates are used in
|
||||
// this._onTrayLeftTimeout() to determine if the mouse has moved far enough during the initial timeout for us
|
||||
// to consider that the user intended to leave the tray and therefore hide the tray. If the mouse is still
|
||||
// close to its previous position, we extend the timeout once.
|
||||
let [x, y, mods] = global.get_pointer();
|
||||
this._trayLeftMouseX = x;
|
||||
this._trayLeftMouseY = y;
|
||||
|
||||
// We wait just a little before hiding the message tray in case the user quickly moves the mouse back into it.
|
||||
// We wait for a longer period if the notification popped up where the mouse pointer was already positioned.
|
||||
// That gives the user more time to mouse away from the notification and mouse back in in order to expand it.
|
||||
@ -1164,12 +1193,25 @@ MessageTray.prototype = {
|
||||
},
|
||||
|
||||
_onTrayLeftTimeout: function() {
|
||||
this._useLongerTrayLeftTimeout = false;
|
||||
this._trayLeftTimeoutId = 0;
|
||||
this._pointerInTray = false;
|
||||
this._pointerInSummary = false;
|
||||
this._updateNotificationTimeout(0);
|
||||
this._updateState();
|
||||
let [x, y, mods] = global.get_pointer();
|
||||
// We extend the timeout once if the mouse moved no further than MOUSE_LEFT_ACTOR_THRESHOLD to either side or up.
|
||||
// We don't check how far down the mouse moved because any point above the tray, but below the exit coordinate,
|
||||
// is close to the tray.
|
||||
if (this._trayLeftMouseX > -1 &&
|
||||
y > this._trayLeftMouseY - MOUSE_LEFT_ACTOR_THRESHOLD &&
|
||||
x < this._trayLeftMouseX + MOUSE_LEFT_ACTOR_THRESHOLD &&
|
||||
x > this._trayLeftMouseX - MOUSE_LEFT_ACTOR_THRESHOLD) {
|
||||
this._trayLeftMouseX = -1;
|
||||
this._trayLeftTimeoutId = Mainloop.timeout_add(LONGER_HIDE_TIMEOUT * 1000,
|
||||
Lang.bind(this, this._onTrayLeftTimeout));
|
||||
} else {
|
||||
this._trayLeftTimeoutId = 0;
|
||||
this._useLongerTrayLeftTimeout = false;
|
||||
this._pointerInTray = false;
|
||||
this._pointerInSummary = false;
|
||||
this._updateNotificationTimeout(0);
|
||||
this._updateState();
|
||||
}
|
||||
return false;
|
||||
},
|
||||
|
||||
@ -1214,7 +1256,7 @@ MessageTray.prototype = {
|
||||
let notificationsDone = !notificationsVisible && !notificationsPending;
|
||||
|
||||
if (this._summaryState == State.HIDDEN) {
|
||||
if (notificationsDone && this._summaryNeedsToBeShown)
|
||||
if (notificationsDone && this._newSummaryItems.length > 0)
|
||||
this._showSummary(true);
|
||||
else if (summarySummoned)
|
||||
this._showSummary(false);
|
||||
@ -1438,7 +1480,7 @@ MessageTray.prototype = {
|
||||
},
|
||||
|
||||
_showSummaryCompleted: function(withTimeout) {
|
||||
this._summaryNeedsToBeShown = false;
|
||||
this._newSummaryItems = [];
|
||||
|
||||
if (withTimeout) {
|
||||
this._summaryTimeoutId =
|
||||
@ -1459,7 +1501,7 @@ MessageTray.prototype = {
|
||||
time: ANIMATION_TIME,
|
||||
transition: 'easeOutQuad'
|
||||
});
|
||||
this._summaryNeedsToBeShown = false;
|
||||
this._newSummaryItems = [];
|
||||
},
|
||||
|
||||
_showSummaryNotification: function() {
|
||||
@ -1469,25 +1511,51 @@ MessageTray.prototype = {
|
||||
if (index != -1)
|
||||
this._notificationQueue.splice(index, 1);
|
||||
|
||||
this._summaryNotificationBin.child = this._summaryNotification.actor;
|
||||
this._summaryNotificationBoxPointer.bin.child = this._summaryNotification.actor;
|
||||
this._summaryNotification.grabFocus(true);
|
||||
|
||||
this._summaryNotificationBin.opacity = 0;
|
||||
this._summaryNotificationBin.y = this.actor.height;
|
||||
this._summaryNotificationBin.show();
|
||||
|
||||
if (!this._summaryNotificationExpandedId)
|
||||
this._summaryNotificationExpandedId = this._summaryNotification.connect('expanded', Lang.bind(this, this._onSummaryNotificationExpanded));
|
||||
this._summaryNotification.expand(false);
|
||||
|
||||
this._clickedSummaryItemAllocationChangedId =
|
||||
this._clickedSummaryItem.actor.connect('allocation-changed',
|
||||
Lang.bind(this, this._adjustNotificationBoxPointerPosition));
|
||||
// _clickedSummaryItem.actor can change absolute postiion without changing allocation
|
||||
this._summaryMotionId = this._summary.connect('allocation-changed',
|
||||
Lang.bind(this, this._adjustNotificationBoxPointerPosition));
|
||||
|
||||
this._summaryNotificationBoxPointer.actor.opacity = 0;
|
||||
this._summaryNotificationBoxPointer.actor.show();
|
||||
this._adjustNotificationBoxPointerPosition();
|
||||
|
||||
this._summaryNotificationState = State.SHOWNING;
|
||||
this._summaryNotificationBoxPointer.animateAppear(Lang.bind(this, function() {
|
||||
this._summaryNotificationState = State.SHOWN;
|
||||
}));
|
||||
},
|
||||
|
||||
_adjustNotificationBoxPointerPosition: function() {
|
||||
// The position of the arrow origin should be the same as center of this._clickedSummaryItem.actor
|
||||
if (!this._clickedSummaryItem)
|
||||
return;
|
||||
|
||||
this._summaryNotificationBoxPointer.setPosition(this._clickedSummaryItem.actor, 0, St.Align.MIDDLE);
|
||||
},
|
||||
|
||||
_unsetClickedSummaryItem: function() {
|
||||
if (this._clickedSummaryItemAllocationChangedId) {
|
||||
this._clickedSummaryItem.actor.disconnect(this._clickedSummaryItemAllocationChangedId);
|
||||
this._summary.disconnect(this._summaryMotionId);
|
||||
this._clickedSummaryItemAllocationChangedId = 0;
|
||||
this._summaryMotionId = 0;
|
||||
}
|
||||
|
||||
this._clickedSummaryItem = null;
|
||||
},
|
||||
|
||||
_onSummaryNotificationExpanded: function() {
|
||||
this._tween(this._summaryNotificationBin, '_summaryNotificationState', State.SHOWN,
|
||||
{ y: this.actor.height - this._summaryNotificationBin.height,
|
||||
opacity: 255,
|
||||
time: ANIMATION_TIME,
|
||||
transition: 'easeOutQuad'
|
||||
});
|
||||
this._adjustNotificationBoxPointerPosition();
|
||||
},
|
||||
|
||||
_hideSummaryNotification: function() {
|
||||
@ -1495,25 +1563,18 @@ MessageTray.prototype = {
|
||||
this._summaryNotification.disconnect(this._summaryNotificationExpandedId);
|
||||
this._summaryNotificationExpandedId = 0;
|
||||
}
|
||||
|
||||
// Unset this._clickedSummaryItem if we are no longer showing the summary
|
||||
if (this._summaryState != State.SHOWN)
|
||||
this._clickedSummaryItem = null;
|
||||
this._summaryNotification.ungrabFocus();
|
||||
this._unsetClickedSummaryItem();
|
||||
|
||||
this._tween(this._summaryNotificationBin, '_summaryNotificationState', State.HIDDEN,
|
||||
{ y: this.actor.height,
|
||||
opacity: 0,
|
||||
time: ANIMATION_TIME,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: this._hideSummaryNotificationCompleted,
|
||||
onCompleteScope: this
|
||||
});
|
||||
this._summaryNotification.ungrabFocus();
|
||||
this._summaryNotificationState = State.HIDING;
|
||||
this._summaryNotificationBoxPointer.animateDisappear(Lang.bind(this, this._hideSummaryNotificationCompleted));
|
||||
},
|
||||
|
||||
_hideSummaryNotificationCompleted: function() {
|
||||
this._summaryNotificationBin.hide();
|
||||
this._summaryNotificationBin.child = null;
|
||||
this._summaryNotificationState = State.HIDDEN;
|
||||
this._summaryNotificationBoxPointer.bin.child = null;
|
||||
this._summaryNotification.collapseCompleted();
|
||||
let summaryNotification = this._summaryNotification;
|
||||
this._summaryNotification = null;
|
||||
|
@ -6,6 +6,8 @@ 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 Main = imports.ui.main;
|
||||
const MessageTray = imports.ui.messageTray;
|
||||
@ -148,7 +150,9 @@ NotificationDaemon.prototype = {
|
||||
let uri = GLib.filename_to_uri(icon, null);
|
||||
return textureCache.load_uri_async(uri, size, size);
|
||||
} else
|
||||
return textureCache.load_icon_name(icon, St.IconType.FULLCOLOR, size);
|
||||
return new St.Icon({ icon_name: icon,
|
||||
icon_type: St.IconType.FULLCOLOR,
|
||||
icon_size: size });
|
||||
} else if (hints.icon_data) {
|
||||
let [width, height, rowStride, hasAlpha,
|
||||
bitsPerSample, nChannels, data] = hints.icon_data;
|
||||
@ -165,7 +169,9 @@ NotificationDaemon.prototype = {
|
||||
stockIcon = 'gtk-dialog-error';
|
||||
break;
|
||||
}
|
||||
return textureCache.load_icon_name(stockIcon, St.IconType.FULLCOLOR, size);
|
||||
return new St.Icon({ icon_name: stockIcon,
|
||||
icon_type: St.IconType.FULLCOLOR,
|
||||
icon_size: size });
|
||||
}
|
||||
},
|
||||
|
||||
@ -173,10 +179,6 @@ NotificationDaemon.prototype = {
|
||||
let source = new Source(title, pid);
|
||||
this._sources[pid] = source;
|
||||
|
||||
source.connect('clicked', Lang.bind(this,
|
||||
function() {
|
||||
source.destroy();
|
||||
}));
|
||||
source.connect('destroy', Lang.bind(this,
|
||||
function() {
|
||||
delete this._sources[pid];
|
||||
@ -281,7 +283,7 @@ NotificationDaemon.prototype = {
|
||||
if (notification == null) {
|
||||
notification = new MessageTray.Notification(source, summary, body, { icon: iconActor });
|
||||
ndata.notification = notification;
|
||||
notification.connect('dismissed', Lang.bind(this,
|
||||
notification.connect('clicked', Lang.bind(this,
|
||||
function(n) {
|
||||
this._emitNotificationClosed(id, NotificationClosedReason.DISMISSED);
|
||||
}));
|
||||
@ -296,6 +298,7 @@ NotificationDaemon.prototype = {
|
||||
}
|
||||
|
||||
if (actions.length) {
|
||||
notification.setUseActionIcons(hints['action-icons'] == true);
|
||||
for (let i = 0; i < actions.length - 1; i += 2)
|
||||
notification.addButton(actions[i], actions[i + 1]);
|
||||
}
|
||||
@ -319,14 +322,15 @@ NotificationDaemon.prototype = {
|
||||
GetCapabilities: function() {
|
||||
return [
|
||||
'actions',
|
||||
'action-icons',
|
||||
'body',
|
||||
// 'body-hyperlinks',
|
||||
// 'body-images',
|
||||
'body-markup',
|
||||
// 'icon-multi',
|
||||
'icon-static',
|
||||
'persistence',
|
||||
// 'sound',
|
||||
'x-gnome-icon-buttons'
|
||||
];
|
||||
},
|
||||
|
||||
@ -347,14 +351,14 @@ NotificationDaemon.prototype = {
|
||||
for (let id in this._sources) {
|
||||
let source = this._sources[id];
|
||||
if (source.app == tracker.focus_app) {
|
||||
source.destroy();
|
||||
source.activated();
|
||||
return;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_actionInvoked: function(notification, action, source, id) {
|
||||
source.destroy();
|
||||
source.activated();
|
||||
this._emitActionInvoked(id, action);
|
||||
},
|
||||
|
||||
@ -375,7 +379,7 @@ NotificationDaemon.prototype = {
|
||||
_onTrayIconAdded: function(o, icon) {
|
||||
let source = this._sources[icon.pid];
|
||||
if (!source)
|
||||
source = this._newSource(icon.title, icon.pid);
|
||||
source = this._newSource(icon.title || icon.wm_class || _("Unknown"), icon.pid);
|
||||
source.setTrayIcon(icon);
|
||||
},
|
||||
|
||||
@ -404,6 +408,7 @@ Source.prototype = {
|
||||
this.title = this.app.get_name();
|
||||
else
|
||||
this.useNotificationIcon = true;
|
||||
this._isTrayIcon = false;
|
||||
},
|
||||
|
||||
notify: function(notification, icon) {
|
||||
@ -430,11 +435,18 @@ Source.prototype = {
|
||||
setTrayIcon: function(icon) {
|
||||
this._setSummaryIcon(icon);
|
||||
this.useNotificationIcon = false;
|
||||
this._isTrayIcon = true;
|
||||
},
|
||||
|
||||
clicked: function() {
|
||||
_notificationClicked: function(notification) {
|
||||
notification.destroy();
|
||||
this.openApp();
|
||||
MessageTray.Source.prototype.clicked.call(this);
|
||||
this.activated();
|
||||
},
|
||||
|
||||
activated: function() {
|
||||
if (!this._isTrayIcon)
|
||||
this.destroy();
|
||||
},
|
||||
|
||||
openApp: function() {
|
||||
|
@ -1,6 +1,7 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Meta = imports.gi.Meta;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Signals = imports.signals;
|
||||
const Lang = imports.lang;
|
||||
@ -8,104 +9,60 @@ const St = imports.gi.St;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const AppDisplay = imports.ui.appDisplay;
|
||||
const Dash = imports.ui.dash;
|
||||
const DocDisplay = imports.ui.docDisplay;
|
||||
const GenericDisplay = imports.ui.genericDisplay;
|
||||
const Lightbox = imports.ui.lightbox;
|
||||
const Main = imports.ui.main;
|
||||
const MessageTray = imports.ui.messageTray;
|
||||
const Panel = imports.ui.panel;
|
||||
const Dash = imports.ui.dash;
|
||||
const PlaceDisplay = imports.ui.placeDisplay;
|
||||
const Tweener = imports.ui.tweener;
|
||||
const ViewSelector = imports.ui.viewSelector;
|
||||
const WorkspacesView = imports.ui.workspacesView;
|
||||
|
||||
// Time for initial animation going into Overview mode
|
||||
const ANIMATION_TIME = 0.25;
|
||||
|
||||
// Time for pane menus to fade in/out
|
||||
const PANE_FADE_TIME = 0.1;
|
||||
// We split the screen vertically between the dash and the view selector.
|
||||
const DASH_SPLIT_FRACTION = 0.1;
|
||||
|
||||
// We divide the screen into a grid of rows and columns, which we use
|
||||
// to help us position the Overview components, such as the side panel
|
||||
// that lists applications and documents, the workspaces display, and
|
||||
// the button for adding additional workspaces.
|
||||
// In the regular mode, the side panel takes up one column on the left,
|
||||
// and the workspaces display takes up the remaining columns.
|
||||
// In the expanded side panel display mode, the side panel takes up two
|
||||
// columns, and the workspaces display slides all the way to the right,
|
||||
// being visible only in the last quarter of the right-most column.
|
||||
// In the future, this mode will have more components, such as a display
|
||||
// of documents which were recently opened with a given application, which
|
||||
// will take up the remaining sections of the display.
|
||||
const SHELL_INFO_HIDE_TIMEOUT = 10;
|
||||
|
||||
const WIDE_SCREEN_CUT_OFF_RATIO = 1.4;
|
||||
// A common netbook resolution is 1024x600, which trips the widescreen
|
||||
// ratio. However that leaves way too few pixels for the dash. So
|
||||
// just treat this as a regular screen.
|
||||
const WIDE_SCREEN_MINIMUM_HEIGHT = 768;
|
||||
|
||||
const COLUMNS_REGULAR_SCREEN = 4;
|
||||
const ROWS_REGULAR_SCREEN = 8;
|
||||
const COLUMNS_WIDE_SCREEN = 5;
|
||||
const ROWS_WIDE_SCREEN = 10;
|
||||
|
||||
const DEFAULT_PADDING = 4;
|
||||
|
||||
// Padding around workspace grid / Spacing between Dash and Workspaces
|
||||
const WORKSPACE_GRID_PADDING = 12;
|
||||
|
||||
const COLUMNS_FOR_WORKSPACES_REGULAR_SCREEN = 3;
|
||||
const ROWS_FOR_WORKSPACES_REGULAR_SCREEN = 6;
|
||||
|
||||
const COLUMNS_FOR_WORKSPACES_WIDE_SCREEN = 4;
|
||||
const ROWS_FOR_WORKSPACES_WIDE_SCREEN = 8;
|
||||
|
||||
// A multi-state; PENDING is used during animations
|
||||
const STATE_ACTIVE = true;
|
||||
const STATE_PENDING_INACTIVE = false;
|
||||
const STATE_INACTIVE = false;
|
||||
|
||||
const SHADOW_COLOR = new Clutter.Color();
|
||||
SHADOW_COLOR.from_pixel(0x00000033);
|
||||
const TRANSPARENT_COLOR = new Clutter.Color();
|
||||
TRANSPARENT_COLOR.from_pixel(0x00000000);
|
||||
|
||||
const SHADOW_WIDTH = 6;
|
||||
|
||||
const NUMBER_OF_SECTIONS_IN_SEARCH = 2;
|
||||
|
||||
const INFO_BAR_HIDE_TIMEOUT = 10;
|
||||
|
||||
let wideScreen = false;
|
||||
let displayGridColumnWidth = null;
|
||||
let displayGridRowHeight = null;
|
||||
|
||||
function InfoBar() {
|
||||
function Source() {
|
||||
this._init();
|
||||
}
|
||||
|
||||
InfoBar.prototype = {
|
||||
Source.prototype = {
|
||||
__proto__: MessageTray.Source.prototype,
|
||||
|
||||
_init: function() {
|
||||
this.actor = new St.Bin({ style_class: 'info-bar-panel',
|
||||
x_fill: true,
|
||||
y_fill: false });
|
||||
this._label = new St.Label();
|
||||
this._undo = new St.Button({ style_class: 'info-bar-link-button' });
|
||||
MessageTray.Source.prototype._init.call(this,
|
||||
"System Information");
|
||||
this._setSummaryIcon(this.createNotificationIcon());
|
||||
},
|
||||
|
||||
let bin = new St.Bin({ x_fill: false,
|
||||
y_fill: false,
|
||||
x_align: St.Align.MIDDLE,
|
||||
y_align: St.Align.MIDDLE });
|
||||
this.actor.set_child(bin);
|
||||
createNotificationIcon: function() {
|
||||
return new St.Icon({ icon_name: 'info',
|
||||
icon_type: St.IconType.FULLCOLOR,
|
||||
icon_size: this.ICON_SIZE });
|
||||
},
|
||||
|
||||
let box = new St.BoxLayout({ style_class: 'info-bar' });
|
||||
bin.set_child(box);
|
||||
_notificationClicked: function() {
|
||||
this.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
function ShellInfo() {
|
||||
this._init();
|
||||
}
|
||||
|
||||
ShellInfo.prototype = {
|
||||
_init: function() {
|
||||
this._source = null;
|
||||
this._timeoutId = 0;
|
||||
|
||||
box.add(this._label, {'y-fill' : false, 'y-align' : St.Align.MIDDLE});
|
||||
box.add(this._undo);
|
||||
|
||||
this.actor.set_opacity(0);
|
||||
|
||||
this._undoCallback = null;
|
||||
this._undo.connect('clicked', Lang.bind(this, this._onUndoClicked));
|
||||
},
|
||||
|
||||
_onUndoClicked: function() {
|
||||
@ -114,27 +71,16 @@ InfoBar.prototype = {
|
||||
|
||||
if (this._undoCallback)
|
||||
this._undoCallback();
|
||||
this.actor.set_opacity(0);
|
||||
this._undoCallback = null;
|
||||
},
|
||||
|
||||
_hideDone: function() {
|
||||
this._undoCallback = null;
|
||||
},
|
||||
|
||||
_hide: function() {
|
||||
Tweener.addTween(this.actor,
|
||||
{ opacity: 0,
|
||||
transition: 'easeOutQuad',
|
||||
time: ANIMATION_TIME,
|
||||
onComplete: this._hideDone,
|
||||
onCompleteScope: this
|
||||
});
|
||||
if (this._source)
|
||||
this._source.destroy();
|
||||
},
|
||||
|
||||
_onTimeout: function() {
|
||||
this._timeoutId = 0;
|
||||
this._hide();
|
||||
if (this._source)
|
||||
this._source.destroy();
|
||||
return false;
|
||||
},
|
||||
|
||||
@ -142,28 +88,33 @@ InfoBar.prototype = {
|
||||
if (this._timeoutId)
|
||||
Mainloop.source_remove(this._timeoutId);
|
||||
|
||||
this._timeout = false;
|
||||
this._timeoutId = Mainloop.timeout_add_seconds(SHELL_INFO_HIDE_TIMEOUT,
|
||||
Lang.bind(this, this._onTimeout));
|
||||
|
||||
this._label.text = text;
|
||||
if (this._source == null) {
|
||||
this._source = new Source();
|
||||
this._source.connect('destroy', Lang.bind(this,
|
||||
function() {
|
||||
this._source = null;
|
||||
}));
|
||||
Main.messageTray.add(this._source);
|
||||
}
|
||||
|
||||
Tweener.addTween(this.actor,
|
||||
{ opacity: 255,
|
||||
transition: 'easeOutQuad',
|
||||
time: ANIMATION_TIME
|
||||
});
|
||||
|
||||
this._timeoutId = Mainloop.timeout_add_seconds(INFO_BAR_HIDE_TIMEOUT, Lang.bind(this, this._onTimeout));
|
||||
|
||||
if (undoLabel)
|
||||
this._undo.label = undoLabel;
|
||||
let notification = this._source.notification;
|
||||
if (notification == null)
|
||||
notification = new MessageTray.Notification(this._source, text, null);
|
||||
else
|
||||
this._undo.label = _("Undo");
|
||||
notification.update(text, null, { clear: true });
|
||||
|
||||
this._undoCallback = undoCallback;
|
||||
if (undoCallback)
|
||||
this._undo.show();
|
||||
else
|
||||
this._undo.hide();
|
||||
if (undoCallback) {
|
||||
notification.addButton('system-undo',
|
||||
undoLabel ? undoLabel : _("Undo"));
|
||||
notification.connect('action-invoked',
|
||||
Lang.bind(this, this._onUndoClicked));
|
||||
}
|
||||
|
||||
this._source.notify(notification);
|
||||
}
|
||||
};
|
||||
|
||||
@ -173,30 +124,37 @@ function Overview() {
|
||||
|
||||
Overview.prototype = {
|
||||
_init : function() {
|
||||
this._group = new St.Group({ style_class: 'overview' });
|
||||
this._desktopFade = new St.Bin();
|
||||
global.overlay_group.add_actor(this._desktopFade);
|
||||
|
||||
// The actual global.background_actor is inside global.window_group,
|
||||
// which is hidden when displaying the overview, so we display a clone.
|
||||
this._background = new Clutter.Clone({ source: global.background_actor });
|
||||
this._background.hide();
|
||||
global.overlay_group.add_actor(this._background);
|
||||
|
||||
this._spacing = 0;
|
||||
|
||||
this._group = new St.Group({ name: 'overview' });
|
||||
this._group._delegate = this;
|
||||
this._group.connect('destroy', Lang.bind(this,
|
||||
function() {
|
||||
if (this._lightbox) {
|
||||
this._lightbox.destroy();
|
||||
this._lightbox = null;
|
||||
this._group.connect('style-changed',
|
||||
Lang.bind(this, function() {
|
||||
let node = this._group.get_theme_node();
|
||||
let spacing = node.get_length('spacing');
|
||||
if (spacing != this._spacing) {
|
||||
this._spacing = spacing;
|
||||
this.relayout();
|
||||
}
|
||||
}));
|
||||
|
||||
this.infoBar = new InfoBar();
|
||||
this._group.add_actor(this.infoBar.actor);
|
||||
this.shellInfo = new ShellInfo();
|
||||
|
||||
this._workspacesManager = null;
|
||||
this._lightbox = null;
|
||||
this._workspacesDisplay = null;
|
||||
|
||||
this.visible = false;
|
||||
this.animationInProgress = false;
|
||||
this._hideInProgress = false;
|
||||
|
||||
this._recalculateGridSizes();
|
||||
|
||||
this._activeDisplayPane = null;
|
||||
|
||||
// During transitions, we raise this to the top to avoid having the overview
|
||||
// area be reactive; it causes too many issues such as double clicks on
|
||||
// Dash elements, or mouseover handlers in the workspaces.
|
||||
@ -205,196 +163,87 @@ Overview.prototype = {
|
||||
this._group.add_actor(this._coverPane);
|
||||
this._coverPane.connect('event', Lang.bind(this, function (actor, event) { return true; }));
|
||||
|
||||
// Similar to the cover pane but used for dialogs ("panes"); see the comments
|
||||
// in addPane below.
|
||||
this._transparentBackground = new Clutter.Rectangle({ opacity: 0,
|
||||
reactive: true });
|
||||
this._group.add_actor(this._transparentBackground);
|
||||
|
||||
// Background color for the Overview
|
||||
this._backOver = new St.Label();
|
||||
this._group.add_actor(this._backOver);
|
||||
|
||||
this._group.hide();
|
||||
global.overlay_group.add_actor(this._group);
|
||||
|
||||
this.viewSelector = new ViewSelector.ViewSelector();
|
||||
this._group.add_actor(this.viewSelector.actor);
|
||||
|
||||
this._workspacesDisplay = new WorkspacesView.WorkspacesDisplay();
|
||||
this.viewSelector.addViewTab("Windows", this._workspacesDisplay.actor);
|
||||
|
||||
let appView = new AppDisplay.AllAppDisplay();
|
||||
this.viewSelector.addViewTab("Applications", appView.actor);
|
||||
|
||||
// Default search providers
|
||||
this.viewSelector.addSearchProvider(new AppDisplay.AppSearchProvider());
|
||||
this.viewSelector.addSearchProvider(new AppDisplay.PrefsSearchProvider());
|
||||
this.viewSelector.addSearchProvider(new PlaceDisplay.PlaceSearchProvider());
|
||||
this.viewSelector.addSearchProvider(new DocDisplay.DocSearchProvider());
|
||||
this.viewSelector.addSearchProvider(new WorkspacesView.WindowSearchProvider());
|
||||
|
||||
// TODO - recalculate everything when desktop size changes
|
||||
this._dash = new Dash.Dash();
|
||||
this._group.add_actor(this._dash.actor);
|
||||
|
||||
// Container to hold popup pane chrome.
|
||||
this._paneContainer = new St.BoxLayout({ style_class: 'overview-pane' });
|
||||
// Note here we explicitly don't set the paneContainer to be reactive yet; that's done
|
||||
// inside the notify::visible handler on panes.
|
||||
this._paneContainer.connect('button-release-event', Lang.bind(this, function(background) {
|
||||
this._activeDisplayPane.close();
|
||||
return true;
|
||||
}));
|
||||
this._group.add_actor(this._paneContainer);
|
||||
|
||||
this._transparentBackground.lower_bottom();
|
||||
this._paneContainer.hide();
|
||||
this._dash.actor.add_constraint(this.viewSelector.constrainY);
|
||||
this._dash.actor.add_constraint(this.viewSelector.constrainHeight);
|
||||
|
||||
this._coverPane.lower_bottom();
|
||||
|
||||
this.workspaces = null;
|
||||
},
|
||||
|
||||
_onViewChanged: function() {
|
||||
if (!this.visible)
|
||||
return;
|
||||
_getDesktopClone: function() {
|
||||
let windows = global.get_window_actors().filter(function(w) {
|
||||
return w.meta_window.get_window_type() == Meta.WindowType.DESKTOP;
|
||||
});
|
||||
if (windows.length == 0)
|
||||
return null;
|
||||
|
||||
this.workspaces = this._workspacesManager.workspacesView;
|
||||
|
||||
// Show new workspacesView
|
||||
this._group.add_actor(this.workspaces.actor);
|
||||
this._workspacesBar.raise(this.workspaces.actor);
|
||||
this._dash.actor.raise(this.workspaces.actor);
|
||||
},
|
||||
|
||||
_recalculateGridSizes: function () {
|
||||
let primary = global.get_primary_monitor();
|
||||
wideScreen = (primary.width/primary.height > WIDE_SCREEN_CUT_OFF_RATIO) &&
|
||||
(primary.height >= WIDE_SCREEN_MINIMUM_HEIGHT);
|
||||
|
||||
// We divide the screen into an imaginary grid which helps us determine the layout of
|
||||
// different visual components.
|
||||
if (wideScreen) {
|
||||
displayGridColumnWidth = Math.floor(primary.width / COLUMNS_WIDE_SCREEN);
|
||||
displayGridRowHeight = Math.floor(primary.height / ROWS_WIDE_SCREEN);
|
||||
} else {
|
||||
displayGridColumnWidth = Math.floor(primary.width / COLUMNS_REGULAR_SCREEN);
|
||||
displayGridRowHeight = Math.floor(primary.height / ROWS_REGULAR_SCREEN);
|
||||
}
|
||||
let clone = new Clutter.Clone({ source: windows[0].get_texture() });
|
||||
clone.source.connect('destroy', Lang.bind(this, function() {
|
||||
clone.destroy();
|
||||
}));
|
||||
return clone;
|
||||
},
|
||||
|
||||
relayout: function () {
|
||||
let primary = global.get_primary_monitor();
|
||||
let rtl = (St.Widget.get_default_direction () == St.TextDirection.RTL);
|
||||
|
||||
this._recalculateGridSizes();
|
||||
let contentY = Panel.PANEL_HEIGHT;
|
||||
let contentHeight = primary.height - contentY - Main.messageTray.actor.height;
|
||||
|
||||
this._group.set_position(primary.x, primary.y);
|
||||
this._group.set_size(primary.width, primary.height);
|
||||
|
||||
let contentY = Panel.PANEL_HEIGHT;
|
||||
let contentHeight = primary.height - contentY;
|
||||
|
||||
this._coverPane.set_position(0, contentY);
|
||||
this._coverPane.set_size(primary.width, contentHeight);
|
||||
|
||||
let workspaceColumnsUsed = wideScreen ? COLUMNS_FOR_WORKSPACES_WIDE_SCREEN : COLUMNS_FOR_WORKSPACES_REGULAR_SCREEN;
|
||||
let workspaceRowsUsed = wideScreen ? ROWS_FOR_WORKSPACES_WIDE_SCREEN : ROWS_FOR_WORKSPACES_REGULAR_SCREEN;
|
||||
|
||||
this._workspacesWidth = displayGridColumnWidth * workspaceColumnsUsed
|
||||
- WORKSPACE_GRID_PADDING * 2;
|
||||
// We scale the vertical padding by (primary.height / primary.width)
|
||||
// so that the workspace preserves its aspect ratio.
|
||||
this._workspacesHeight = Math.floor(displayGridRowHeight * workspaceRowsUsed
|
||||
- WORKSPACE_GRID_PADDING * (primary.height / primary.width) * 2);
|
||||
let viewWidth = (1.0 - DASH_SPLIT_FRACTION) * primary.width - this._spacing;
|
||||
let viewHeight = contentHeight - 2 * this._spacing;
|
||||
let viewY = contentY + this._spacing;
|
||||
let viewX = rtl ? 0
|
||||
: Math.floor(DASH_SPLIT_FRACTION * primary.width) + this._spacing;
|
||||
|
||||
// Set the dash's x position - y is handled by a constraint
|
||||
let dashX;
|
||||
if (rtl) {
|
||||
this._workspacesX = WORKSPACE_GRID_PADDING;
|
||||
this._dash.actor.set_anchor_point_from_gravity(Clutter.Gravity.NORTH_EAST);
|
||||
dashX = primary.width;
|
||||
} else {
|
||||
this._workspacesX = displayGridColumnWidth + WORKSPACE_GRID_PADDING;
|
||||
dashX = 0;
|
||||
}
|
||||
this._workspacesY = Math.floor(displayGridRowHeight + WORKSPACE_GRID_PADDING * (primary.height / primary.width));
|
||||
this._dash.actor.set_x(dashX);
|
||||
|
||||
if (rtl) {
|
||||
this._dash.actor.set_position(primary.width - displayGridColumnWidth, contentY);
|
||||
} else {
|
||||
this._dash.actor.set_position(0, contentY);
|
||||
}
|
||||
|
||||
this._dash.actor.set_size(displayGridColumnWidth, contentHeight);
|
||||
this._dash.searchArea.height = this._workspacesY - contentY;
|
||||
this._dash.sectionArea.height = this._workspacesHeight;
|
||||
this._dash.searchResults.actor.height = this._workspacesHeight;
|
||||
|
||||
this.infoBar.actor.set_position(displayGridColumnWidth, Panel.PANEL_HEIGHT);
|
||||
this.infoBar.actor.set_size(primary.width - displayGridColumnWidth, this._workspacesY - Panel.PANEL_HEIGHT);
|
||||
this.infoBar.actor.raise_top();
|
||||
|
||||
// place the 'Add Workspace' button in the bottom row of the grid
|
||||
this._workspacesBarX = this._workspacesX;
|
||||
this._workspacesBarWidth = this._workspacesWidth;
|
||||
this._workspacesBarY = primary.height - displayGridRowHeight;
|
||||
|
||||
// The parent (this._group) is positioned at the top left of the primary monitor
|
||||
// while this._backOver occupies the entire screen.
|
||||
this._backOver.set_position(- primary.x, - primary.y);
|
||||
this._backOver.set_size(global.screen_width, global.screen_height);
|
||||
|
||||
this._paneContainer.set_position(this._dash.actor.x + this._dash.actor.width + DEFAULT_PADDING,
|
||||
this._workspacesY);
|
||||
// Dynamic width
|
||||
this._paneContainer.height = this._workspacesHeight;
|
||||
if (rtl) {
|
||||
this._paneContainer.connect('notify::width', Lang.bind(this, function (paneContainer) {
|
||||
paneContainer.x = this._dash.actor.x - (DEFAULT_PADDING + paneContainer.width);
|
||||
}));
|
||||
}
|
||||
|
||||
this._transparentBackground.set_position(primary.x, primary.y);
|
||||
this._transparentBackground.set_size(primary.width, primary.height);
|
||||
|
||||
},
|
||||
|
||||
addPane: function (pane, align) {
|
||||
pane.actor.height = .9 * this._workspacesHeight;
|
||||
this._paneContainer.add(pane.actor, { expand: true,
|
||||
y_fill: false,
|
||||
y_align: align });
|
||||
// When a pane is displayed, we raise the transparent background to the top
|
||||
// and connect to button-release-event on it, then raise the pane above that.
|
||||
// The idea here is that clicking anywhere outside the pane should close it.
|
||||
// When the active pane is closed, undo the effect.
|
||||
let backgroundEventId = null;
|
||||
pane.connect('open-state-changed', Lang.bind(this, function (pane, isOpen) {
|
||||
if (isOpen) {
|
||||
this._activeDisplayPane = pane;
|
||||
this._transparentBackground.raise_top();
|
||||
this._paneContainer.raise_top();
|
||||
this._paneContainer.show();
|
||||
this._paneReady = false;
|
||||
if (backgroundEventId != null)
|
||||
this._transparentBackground.disconnect(backgroundEventId);
|
||||
backgroundEventId = this._transparentBackground.connect('captured-event', Lang.bind(this, function (actor, event) {
|
||||
if (event.get_source() != this._transparentBackground)
|
||||
return false;
|
||||
if (event.type() == Clutter.EventType.BUTTON_PRESS)
|
||||
this._paneReady = true;
|
||||
if (event.type() == Clutter.EventType.BUTTON_RELEASE
|
||||
&& this._paneReady)
|
||||
this._activeDisplayPane.close();
|
||||
return true;
|
||||
}));
|
||||
if (!this._lightbox)
|
||||
this._lightbox = new Lightbox.Lightbox(this._group,
|
||||
{ fadeTime: PANE_FADE_TIME });
|
||||
this._lightbox.show();
|
||||
this._lightbox.highlight(this._paneContainer);
|
||||
} else if (pane == this._activeDisplayPane) {
|
||||
this._activeDisplayPane = null;
|
||||
if (backgroundEventId != null) {
|
||||
this._transparentBackground.disconnect(backgroundEventId);
|
||||
backgroundEventId = null;
|
||||
}
|
||||
this._transparentBackground.lower_bottom();
|
||||
this._paneContainer.hide();
|
||||
this._lightbox.hide();
|
||||
}
|
||||
}));
|
||||
this.viewSelector.actor.set_position(viewX, viewY);
|
||||
this.viewSelector.actor.set_size(viewWidth, viewHeight);
|
||||
},
|
||||
|
||||
//// Public methods ////
|
||||
|
||||
beginItemDrag: function(source) {
|
||||
// Close any active panes if @source is a GenericDisplayItem.
|
||||
// This allows the user to place the item on any workspace.
|
||||
if (source instanceof GenericDisplay.GenericDisplayItem)
|
||||
if (this._activeDisplayPane != null)
|
||||
this._activeDisplayPane.close();
|
||||
this.emit('item-drag-begin');
|
||||
},
|
||||
|
||||
@ -402,6 +251,14 @@ Overview.prototype = {
|
||||
this.emit('item-drag-end');
|
||||
},
|
||||
|
||||
beginWindowDrag: function(source) {
|
||||
this.emit('window-drag-begin');
|
||||
},
|
||||
|
||||
endWindowDrag: function(source) {
|
||||
this.emit('window-drag-end');
|
||||
},
|
||||
|
||||
// Returns the scale the Overview has when we just start zooming out
|
||||
// to overview mode. That is, when just the active workspace is showing.
|
||||
getZoomedInScale : function() {
|
||||
@ -419,49 +276,23 @@ Overview.prototype = {
|
||||
|
||||
// Returns the current scale of the Overview.
|
||||
getScale : function() {
|
||||
return this._group.scaleX;
|
||||
return this.workspaces.actor.scaleX;
|
||||
},
|
||||
|
||||
// Returns the current position of the Overview.
|
||||
getPosition : function() {
|
||||
return [this._group.x, this._group.y];
|
||||
return [this.workspaces.actor.x, this.workspaces.actor.y];
|
||||
},
|
||||
|
||||
show : function() {
|
||||
if (this.visible)
|
||||
return;
|
||||
if (!Main.pushModal(this._dash.actor))
|
||||
if (!Main.pushModal(this.viewSelector.actor))
|
||||
return;
|
||||
|
||||
this.visible = true;
|
||||
this.animationInProgress = true;
|
||||
|
||||
this._dash.show();
|
||||
|
||||
/* TODO: make this stuff dynamic */
|
||||
this._workspacesManager =
|
||||
new WorkspacesView.WorkspacesManager(this._workspacesWidth,
|
||||
this._workspacesHeight,
|
||||
this._workspacesX,
|
||||
this._workspacesY);
|
||||
this._workspacesManager.connect('view-changed',
|
||||
Lang.bind(this, this._onViewChanged));
|
||||
this.workspaces = this._workspacesManager.workspacesView;
|
||||
this._group.add_actor(this.workspaces.actor);
|
||||
|
||||
// The workspaces actor is as big as the screen, so we have to raise the dash above it
|
||||
// for drag and drop to work. In the future we should fix the workspaces to not
|
||||
// be as big as the screen.
|
||||
this._dash.actor.raise(this.workspaces.actor);
|
||||
|
||||
this._workspacesBar = this._workspacesManager.controlsBar.actor;
|
||||
this._workspacesBar.set_position(this._workspacesBarX,
|
||||
this._workspacesBarY);
|
||||
this._workspacesBar.width = this._workspacesBarWidth;
|
||||
|
||||
this._group.add_actor(this._workspacesBar);
|
||||
this._workspacesBar.raise(this.workspaces.actor);
|
||||
|
||||
// All the the actors in the window group are completely obscured,
|
||||
// hiding the group holding them while the Overview is displayed greatly
|
||||
// increases performance of the Overview especially when there are many
|
||||
@ -471,17 +302,38 @@ Overview.prototype = {
|
||||
// clones of them, this would obviously no longer be necessary.
|
||||
global.window_group.hide();
|
||||
this._group.show();
|
||||
this._background.show();
|
||||
|
||||
// Create a zoom out effect. First scale the Overview group up and
|
||||
this.viewSelector.show();
|
||||
this._workspacesDisplay.show();
|
||||
this._dash.show();
|
||||
|
||||
this.workspaces = this._workspacesDisplay.workspacesView;
|
||||
global.overlay_group.add_actor(this.workspaces.actor);
|
||||
|
||||
if (!this._desktopFade.child)
|
||||
this._desktopFade.child = this._getDesktopClone();
|
||||
|
||||
if (!this.workspaces.getActiveWorkspace().hasMaximizedWindows()) {
|
||||
this._desktopFade.opacity = 255;
|
||||
this._desktopFade.show();
|
||||
Tweener.addTween(this._desktopFade,
|
||||
{ opacity: 0,
|
||||
time: ANIMATION_TIME,
|
||||
transition: 'easeOutQuad'
|
||||
});
|
||||
}
|
||||
|
||||
// Create a zoom out effect. First scale the workspaces view up and
|
||||
// position it so that the active workspace fills up the whole screen,
|
||||
// then transform the group to its normal dimensions and position.
|
||||
// then transform it to its normal dimensions and position.
|
||||
// The opposite transition is used in hide().
|
||||
this._group.scaleX = this._group.scaleY = this.getZoomedInScale();
|
||||
[this._group.x, this._group.y] = this.getZoomedInPosition();
|
||||
this.workspaces.actor.scaleX = this.workspaces.actor.scaleY = this.getZoomedInScale();
|
||||
[this.workspaces.actor.x, this.workspaces.actor.y] = this.getZoomedInPosition();
|
||||
let primary = global.get_primary_monitor();
|
||||
Tweener.addTween(this._group,
|
||||
{ x: primary.x,
|
||||
y: primary.y,
|
||||
Tweener.addTween(this.workspaces.actor,
|
||||
{ x: primary.x - this._group.x,
|
||||
y: primary.y - this._group.y,
|
||||
scaleX: 1,
|
||||
scaleY: 1,
|
||||
transition: 'easeOutQuad',
|
||||
@ -490,9 +342,9 @@ Overview.prototype = {
|
||||
onCompleteScope: this
|
||||
});
|
||||
|
||||
// Make Dash fade in so that it doesn't appear too big.
|
||||
this._dash.actor.opacity = 0;
|
||||
Tweener.addTween(this._dash.actor,
|
||||
// Make the other elements fade in.
|
||||
this._group.opacity = 0;
|
||||
Tweener.addTween(this._group,
|
||||
{ opacity: 255,
|
||||
transition: 'easeOutQuad',
|
||||
time: ANIMATION_TIME
|
||||
@ -508,16 +360,24 @@ Overview.prototype = {
|
||||
|
||||
this.animationInProgress = true;
|
||||
this._hideInProgress = true;
|
||||
if (this._activeDisplayPane != null)
|
||||
this._activeDisplayPane.close();
|
||||
|
||||
if (!this.workspaces.getActiveWorkspace().hasMaximizedWindows()) {
|
||||
this._desktopFade.opacity = 0;
|
||||
this._desktopFade.show();
|
||||
Tweener.addTween(this._desktopFade,
|
||||
{ opacity: 255,
|
||||
time: ANIMATION_TIME,
|
||||
transition: 'easeOutQuad' });
|
||||
}
|
||||
|
||||
this.workspaces.hide();
|
||||
|
||||
// Create a zoom in effect by transforming the Overview group so that
|
||||
// Create a zoom in effect by transforming the workspaces view so that
|
||||
// the active workspace fills up the whole screen. The opposite
|
||||
// transition is used in show().
|
||||
let scale = this.getZoomedInScale();
|
||||
let [posX, posY] = this.getZoomedInPosition();
|
||||
Tweener.addTween(this._group,
|
||||
Tweener.addTween(this.workspaces.actor,
|
||||
{ x: posX,
|
||||
y: posY,
|
||||
scaleX: scale,
|
||||
@ -528,8 +388,8 @@ Overview.prototype = {
|
||||
onCompleteScope: this
|
||||
});
|
||||
|
||||
// Make Dash fade out so that it doesn't appear to big.
|
||||
Tweener.addTween(this._dash.actor,
|
||||
// Make other elements fade out.
|
||||
Tweener.addTween(this._group,
|
||||
{ opacity: 0,
|
||||
transition: 'easeOutQuad',
|
||||
time: ANIMATION_TIME
|
||||
@ -565,6 +425,7 @@ Overview.prototype = {
|
||||
return;
|
||||
|
||||
this.animationInProgress = false;
|
||||
this._desktopFade.hide();
|
||||
this._coverPane.lower_bottom();
|
||||
|
||||
this.emit('shown');
|
||||
@ -576,12 +437,12 @@ Overview.prototype = {
|
||||
this.workspaces.destroy();
|
||||
this.workspaces = null;
|
||||
|
||||
this._workspacesBar.destroy();
|
||||
this._workspacesBar = null;
|
||||
|
||||
this._workspacesManager = null;
|
||||
|
||||
this._workspacesDisplay.hide();
|
||||
this.viewSelector.hide();
|
||||
this._dash.hide();
|
||||
|
||||
this._desktopFade.hide();
|
||||
this._background.hide();
|
||||
this._group.hide();
|
||||
|
||||
this.visible = false;
|
||||
@ -590,7 +451,7 @@ Overview.prototype = {
|
||||
|
||||
this._coverPane.lower_bottom();
|
||||
|
||||
Main.popModal(this._dash.actor);
|
||||
Main.popModal(this.viewSelector.actor);
|
||||
this.emit('hidden');
|
||||
}
|
||||
};
|
||||
|
@ -31,7 +31,9 @@ const SPINNER_SPEED = 0.02;
|
||||
|
||||
const STANDARD_TRAY_ICON_ORDER = ['a11y', 'display', 'keyboard', 'volume', 'bluetooth', 'network', 'battery'];
|
||||
const STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION = {
|
||||
'a11y': imports.ui.status.accessibility.ATIndicator
|
||||
'a11y': imports.ui.status.accessibility.ATIndicator,
|
||||
'volume': imports.ui.status.volume.Indicator,
|
||||
'battery': imports.ui.status.power.Indicator
|
||||
};
|
||||
|
||||
const CLOCK_FORMAT_KEY = 'format';
|
||||
@ -186,8 +188,9 @@ AppMenuButton.prototype = {
|
||||
_init: function() {
|
||||
PanelMenu.Button.prototype._init.call(this, St.Align.START);
|
||||
this._metaDisplay = global.screen.get_display();
|
||||
this._startingApps = [];
|
||||
|
||||
this._focusedApp = null;
|
||||
this._targetApp = null;
|
||||
|
||||
let bin = new St.Bin({ name: 'appMenu' });
|
||||
this.actor.set_child(bin);
|
||||
@ -234,6 +237,8 @@ AppMenuButton.prototype = {
|
||||
tracker.connect('notify::focus-app', Lang.bind(this, this._sync));
|
||||
tracker.connect('app-state-changed', Lang.bind(this, this._onAppStateChanged));
|
||||
|
||||
global.window_manager.connect('switch-workspace', Lang.bind(this, this._sync));
|
||||
|
||||
this._sync();
|
||||
},
|
||||
|
||||
@ -404,18 +409,19 @@ AppMenuButton.prototype = {
|
||||
},
|
||||
|
||||
_onQuit: function() {
|
||||
if (this._focusedApp == null)
|
||||
if (this._targetApp == null)
|
||||
return;
|
||||
this._focusedApp.request_quit();
|
||||
this._targetApp.request_quit();
|
||||
},
|
||||
|
||||
_onAppStateChanged: function(tracker, app) {
|
||||
let state = app.state;
|
||||
if (app == this._lastStartedApp
|
||||
&& state != Shell.AppState.STARTING) {
|
||||
this._lastStartedApp = null;
|
||||
if (state != Shell.AppState.STARTING) {
|
||||
this._startingApps = this._startingApps.filter(function(a) {
|
||||
return a != app;
|
||||
});
|
||||
} else if (state == Shell.AppState.STARTING) {
|
||||
this._lastStartedApp = app;
|
||||
this._startingApps.push(app);
|
||||
}
|
||||
// For now just resync on all running state changes; this is mainly to handle
|
||||
// cases where the focused window's application changes without the focus
|
||||
@ -426,15 +432,20 @@ AppMenuButton.prototype = {
|
||||
|
||||
_sync: function() {
|
||||
let tracker = Shell.WindowTracker.get_default();
|
||||
let lastStartedApp = null;
|
||||
let workspace = global.screen.get_active_workspace();
|
||||
for (let i = 0; i < this._startingApps.length; i++)
|
||||
if (this._startingApps[i].is_on_workspace(workspace))
|
||||
lastStartedApp = this._startingApps[i];
|
||||
|
||||
let focusedApp = tracker.focus_app;
|
||||
if (focusedApp == this._focusedApp) {
|
||||
if (focusedApp && focusedApp.get_state() != Shell.AppState.STARTING)
|
||||
let targetApp = focusedApp != null ? focusedApp : lastStartedApp;
|
||||
if (targetApp == this._targetApp) {
|
||||
if (targetApp && targetApp.get_state() != Shell.AppState.STARTING)
|
||||
this.stopAnimation();
|
||||
return;
|
||||
} else {
|
||||
this._stopAnimation();
|
||||
}
|
||||
this._stopAnimation();
|
||||
|
||||
if (!focusedApp) {
|
||||
// If the app has just lost focus to the panel, pretend
|
||||
@ -450,9 +461,7 @@ AppMenuButton.prototype = {
|
||||
this._label.setText('');
|
||||
this.actor.reactive = false;
|
||||
|
||||
this._focusedApp = focusedApp;
|
||||
|
||||
let targetApp = this._focusedApp != null ? this._focusedApp : this._lastStartedApp;
|
||||
this._targetApp = targetApp;
|
||||
if (targetApp != null) {
|
||||
let icon = targetApp.get_faded_icon(2 * PANEL_ICON_SIZE);
|
||||
|
||||
@ -735,8 +744,9 @@ Panel.prototype = {
|
||||
/* Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview". */
|
||||
let label = new St.Label({ text: _("Activities") });
|
||||
this.button = new St.Clickable({ name: 'panelActivities',
|
||||
style_class: 'panel-button',
|
||||
reactive: true });
|
||||
style_class: 'panel-button',
|
||||
reactive: true,
|
||||
can_focus: true });
|
||||
this.button.set_child(label);
|
||||
|
||||
this._leftBox.add(this.button);
|
||||
@ -894,7 +904,8 @@ Panel.prototype = {
|
||||
},
|
||||
|
||||
_onTrayIconRemoved: function(o, icon) {
|
||||
this._trayBox.remove_actor(icon);
|
||||
if (icon.get_parent() != null)
|
||||
this._trayBox.remove_actor(icon);
|
||||
},
|
||||
|
||||
_addRipple : function(delay, time, startScale, startOpacity, finalScale, finalOpacity) {
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const St = imports.gi.St;
|
||||
const Lang = imports.lang;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
@ -13,11 +14,13 @@ Button.prototype = {
|
||||
_init: function(menuAlignment) {
|
||||
this.actor = new St.Bin({ style_class: 'panel-button',
|
||||
reactive: true,
|
||||
can_focus: true,
|
||||
x_fill: true,
|
||||
y_fill: false,
|
||||
track_hover: true });
|
||||
this.actor._delegate = this;
|
||||
this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress));
|
||||
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPress));
|
||||
this.menu = new PopupMenu.PopupMenu(this.actor, menuAlignment, St.Side.TOP, /* FIXME */ 0);
|
||||
this.menu.connect('open-state-changed', Lang.bind(this, this._onOpenStateChanged));
|
||||
Main.chrome.addActor(this.menu.actor, { visibleInOverview: true,
|
||||
@ -29,10 +32,27 @@ Button.prototype = {
|
||||
this.menu.toggle();
|
||||
},
|
||||
|
||||
_onKeyPress: function(actor, event) {
|
||||
let symbol = event.get_key_symbol();
|
||||
if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) {
|
||||
this.menu.toggle();
|
||||
return true;
|
||||
} else if (symbol == Clutter.KEY_Down) {
|
||||
if (!this.menu.isOpen)
|
||||
this.menu.toggle();
|
||||
this.menu.activateFirst();
|
||||
return true;
|
||||
} else
|
||||
return false;
|
||||
},
|
||||
|
||||
_onOpenStateChanged: function(menu, open) {
|
||||
if (open)
|
||||
if (open) {
|
||||
this.actor.add_style_pseudo_class('pressed');
|
||||
else
|
||||
let focus = global.stage.get_key_focus();
|
||||
if (!focus || (focus != this.actor && !menu.contains(focus)))
|
||||
this.actor.grab_key_focus();
|
||||
} else
|
||||
this.actor.remove_style_pseudo_class('pressed');
|
||||
}
|
||||
};
|
||||
@ -52,17 +72,19 @@ SystemStatusButton.prototype = {
|
||||
|
||||
_init: function(iconName,tooltipText) {
|
||||
Button.prototype._init.call(this, St.Align.START);
|
||||
this._iconActor = null;
|
||||
this.setIcon(iconName);
|
||||
this._iconActor = new St.Icon({ icon_name: iconName,
|
||||
icon_type: St.IconType.SYMBOLIC,
|
||||
style_class: 'system-status-icon' });
|
||||
this.actor.set_child(this._iconActor);
|
||||
this.setTooltip(tooltipText);
|
||||
},
|
||||
|
||||
setIcon: function(iconName) {
|
||||
this._iconName = iconName;
|
||||
if (this._iconActor)
|
||||
this._iconActor.destroy();
|
||||
this._iconActor = St.TextureCache.get_default().load_icon_name(this._iconName, St.IconType.SYMBOLIC, 24);
|
||||
this.actor.set_child(this._iconActor);
|
||||
this._iconActor.icon_name = iconName;
|
||||
},
|
||||
|
||||
setGIcon: function(gicon) {
|
||||
this._iconActor.gicon = gicon;
|
||||
},
|
||||
|
||||
setTooltip: function(text) {
|
||||
@ -75,4 +97,4 @@ SystemStatusButton.prototype = {
|
||||
this.tooltip = null;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
@ -79,7 +79,7 @@ PlaceDeviceInfo.prototype = {
|
||||
|
||||
iconFactory: function(size) {
|
||||
let icon = this._mount.get_icon();
|
||||
return St.TextureCache.get_default().load_gicon(icon, size);
|
||||
return St.TextureCache.get_default().load_gicon(null, icon, size);
|
||||
},
|
||||
|
||||
launch: function() {
|
||||
@ -109,7 +109,7 @@ PlaceDeviceInfo.prototype = {
|
||||
this._mount.unmount_finish(res);
|
||||
} catch (e) {
|
||||
let message = _("Failed to unmount '%s'").format(o.get_name());
|
||||
Main.overview.infoBar.setMessage(message,
|
||||
Main.overview.shellInfo.setMessage(message,
|
||||
Lang.bind(this, this.remove),
|
||||
_("Retry"));
|
||||
}
|
||||
@ -137,7 +137,7 @@ PlacesManager.prototype = {
|
||||
let homeIcon = Shell.util_get_icon_for_uri (homeUri);
|
||||
this._home = new PlaceInfo('special:home', homeLabel,
|
||||
function(size) {
|
||||
return St.TextureCache.get_default().load_gicon(homeIcon, size);
|
||||
return St.TextureCache.get_default().load_gicon(null, homeIcon, size);
|
||||
},
|
||||
function() {
|
||||
Gio.app_info_launch_default_for_uri(homeUri, global.create_app_launch_context());
|
||||
@ -150,7 +150,7 @@ PlacesManager.prototype = {
|
||||
let desktopIcon = Shell.util_get_icon_for_uri (desktopUri);
|
||||
this._desktopMenu = new PlaceInfo('special:desktop', desktopLabel,
|
||||
function(size) {
|
||||
return St.TextureCache.get_default().load_gicon(desktopIcon, size);
|
||||
return St.TextureCache.get_default().load_gicon(null, desktopIcon, size);
|
||||
},
|
||||
function() {
|
||||
Gio.app_info_launch_default_for_uri(desktopUri, global.create_app_launch_context());
|
||||
@ -158,7 +158,9 @@ PlacesManager.prototype = {
|
||||
|
||||
this._connect = new PlaceInfo('special:connect', _("Connect to..."),
|
||||
function (size) {
|
||||
return St.TextureCache.get_default().load_icon_name('applications-internet', St.IconType.FULLCOLOR, size);
|
||||
return new St.Icon({ icon_name: 'applications-internet',
|
||||
icon_type: St.IconType.FULLCOLOR,
|
||||
icon_size: size });
|
||||
},
|
||||
function () {
|
||||
new Shell.Process({ args: ['nautilus-connect-server'] }).run();
|
||||
@ -325,7 +327,7 @@ PlacesManager.prototype = {
|
||||
|
||||
let item = new PlaceInfo('bookmark:' + bookmark, label,
|
||||
function(size) {
|
||||
return St.TextureCache.get_default().load_gicon(icon, size);
|
||||
return St.TextureCache.get_default().load_gicon(null, icon, size);
|
||||
},
|
||||
function() {
|
||||
Gio.app_info_launch_default_for_uri(bookmark, global.create_app_launch_context());
|
||||
@ -432,7 +434,9 @@ DashPlaceDisplayItem.prototype = {
|
||||
box.add(text, { expand: true, x_fill: true });
|
||||
|
||||
if (info.isRemovable()) {
|
||||
let removeIcon = St.TextureCache.get_default().load_icon_name ('media-eject', St.IconType.FULLCOLOR, PLACES_ICON_SIZE);
|
||||
let removeIcon = new St.Icon({ icon_name: 'media-eject',
|
||||
icon_type: St.IconType.FULLCOLOR,
|
||||
icon_size: PLACES_ICON_SIZE });
|
||||
let removeIconBox = new St.Clickable({ child: removeIcon,
|
||||
reactive: true });
|
||||
box.add(removeIconBox);
|
||||
|
@ -16,7 +16,7 @@ const Tweener = imports.ui.tweener;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const POPUP_ANIMATION_TIME = 0.1;
|
||||
const SLIDER_SCROLL_STEP = 0.05; /* Slider scrolling step in % */
|
||||
|
||||
function Switch() {
|
||||
this._init.apply(this, arguments);
|
||||
@ -56,25 +56,56 @@ PopupBaseMenuItem.prototype = {
|
||||
params = Params.parse (params, { reactive: true,
|
||||
activate: true,
|
||||
hover: true });
|
||||
this.actor = new St.Bin({ style_class: 'popup-menu-item',
|
||||
reactive: params.reactive,
|
||||
track_hover: params.reactive,
|
||||
x_fill: true,
|
||||
y_fill: true,
|
||||
x_align: St.Align.START });
|
||||
this.actor = new Shell.GenericContainer({ style_class: 'popup-menu-item',
|
||||
reactive: params.reactive,
|
||||
track_hover: params.reactive,
|
||||
can_focus: params.reactive });
|
||||
this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
|
||||
this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
|
||||
this.actor.connect('allocate', Lang.bind(this, this._allocate));
|
||||
this.actor.connect('style-changed', Lang.bind(this, this._onStyleChanged));
|
||||
this.actor._delegate = this;
|
||||
|
||||
this._children = [];
|
||||
this._dot = null;
|
||||
this._columnWidths = null;
|
||||
this._spacing = 0;
|
||||
this.active = false;
|
||||
|
||||
if (params.reactive && params.activate) {
|
||||
this.actor.connect('button-release-event', Lang.bind(this, function (actor, event) {
|
||||
this.emit('activate', event);
|
||||
}));
|
||||
this.actor.connect('button-release-event', Lang.bind(this, this._onButtonReleaseEvent));
|
||||
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
|
||||
}
|
||||
if (params.reactive && params.hover)
|
||||
this.actor.connect('notify::hover', Lang.bind(this, this._hoverChanged));
|
||||
this.actor.connect('notify::hover', Lang.bind(this, this._onHoverChanged));
|
||||
if (params.reactive)
|
||||
this.actor.connect('key-focus-in', Lang.bind(this, this._onKeyFocusIn));
|
||||
},
|
||||
|
||||
_hoverChanged: function (actor) {
|
||||
_onStyleChanged: function (actor) {
|
||||
this._spacing = actor.get_theme_node().get_length('spacing');
|
||||
},
|
||||
|
||||
_onButtonReleaseEvent: function (actor, event) {
|
||||
this.emit('activate', event);
|
||||
return true;
|
||||
},
|
||||
|
||||
_onKeyPressEvent: function (actor, event) {
|
||||
let symbol = event.get_key_symbol();
|
||||
|
||||
if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) {
|
||||
this.emit('activate', event);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
|
||||
_onKeyFocusIn: function (actor) {
|
||||
this.setActive(true);
|
||||
},
|
||||
|
||||
_onHoverChanged: function (actor) {
|
||||
this.setActive(actor.hover);
|
||||
},
|
||||
|
||||
@ -87,9 +118,10 @@ PopupBaseMenuItem.prototype = {
|
||||
|
||||
if (activeChanged) {
|
||||
this.active = active;
|
||||
if (active)
|
||||
if (active) {
|
||||
this.actor.add_style_pseudo_class('active');
|
||||
else
|
||||
this.actor.grab_key_focus();
|
||||
} else
|
||||
this.actor.remove_style_pseudo_class('active');
|
||||
this.emit('active-changed', active);
|
||||
}
|
||||
@ -100,13 +132,166 @@ PopupBaseMenuItem.prototype = {
|
||||
this.emit('destroy');
|
||||
},
|
||||
|
||||
handleKeyPress: function(event) {
|
||||
return false;
|
||||
},
|
||||
|
||||
// true if non descendant content includes @actor
|
||||
contains: function(actor) {
|
||||
return false;
|
||||
},
|
||||
|
||||
// adds an actor to the menu item; @column defaults to the next
|
||||
// open column, @span defaults to 1. If @span is -1, the actor
|
||||
// will span the width of the menu item. Children are not
|
||||
// allowed to overlap each other.
|
||||
addActor: function(child, column, span) {
|
||||
if (column == null) {
|
||||
if (this._children.length) {
|
||||
let lastChild = this._children[this._children.length - 1];
|
||||
column = lastChild.column + lastChild.span;
|
||||
} else
|
||||
column = 0;
|
||||
span = 1;
|
||||
} else if (span == null)
|
||||
span = 1;
|
||||
|
||||
this._children.push({ actor: child,
|
||||
column: column,
|
||||
span: span });
|
||||
this.actor.connect('destroy', Lang.bind(this, function () { this._removeChild(child); }));
|
||||
this.actor.add_actor(child);
|
||||
},
|
||||
|
||||
_removeChild: function(child) {
|
||||
for (let i = 0; i < this._children.length; i++) {
|
||||
if (this._children[i].actor == child) {
|
||||
this._children.splice(i, 1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
removeActor: function(child) {
|
||||
this.actor.remove_actor(child);
|
||||
this._removeChild(child);
|
||||
},
|
||||
|
||||
setShowDot: function(show) {
|
||||
if (show) {
|
||||
if (this._dot)
|
||||
return;
|
||||
|
||||
this._dot = new St.DrawingArea({ style_class: 'popup-menu-item-dot' });
|
||||
this._dot.connect('repaint', Lang.bind(this, this._onRepaintDot));
|
||||
this.actor.add_actor(this._dot);
|
||||
} else {
|
||||
if (!this._dot)
|
||||
return;
|
||||
|
||||
this._dot.destroy();
|
||||
this._dot = null;
|
||||
}
|
||||
},
|
||||
|
||||
_onRepaintDot: function(area) {
|
||||
let cr = area.get_context();
|
||||
let [width, height] = area.get_surface_size();
|
||||
let color = new Clutter.Color();
|
||||
area.get_theme_node().get_foreground_color(color);
|
||||
|
||||
cr.setSourceRGBA (
|
||||
color.red / 255,
|
||||
color.green / 255,
|
||||
color.blue / 255,
|
||||
color.alpha / 255);
|
||||
cr.arc(width / 2, height / 2, width / 3, 0, 2 * Math.PI);
|
||||
cr.fill();
|
||||
},
|
||||
|
||||
getColumnWidths: function() {
|
||||
let widths = [];
|
||||
for (let i = 0, col = 0; i < this._children.length; i++) {
|
||||
let child = this._children[i];
|
||||
let [min, natural] = child.actor.get_preferred_width(-1);
|
||||
widths[col++] = natural;
|
||||
if (child.span > 1) {
|
||||
for (let j = 1; j < child.span; j++)
|
||||
widths[col++] = 0;
|
||||
}
|
||||
}
|
||||
return widths;
|
||||
},
|
||||
|
||||
setColumnWidths: function(widths) {
|
||||
this._columnWidths = widths;
|
||||
},
|
||||
|
||||
_getPreferredWidth: function(actor, forHeight, alloc) {
|
||||
let width = 0;
|
||||
if (this._columnWidths) {
|
||||
for (let i = 0; i < this._columnWidths.length; i++) {
|
||||
if (i > 0)
|
||||
width += this._spacing;
|
||||
width += this._columnWidths[i];
|
||||
}
|
||||
} else {
|
||||
for (let i = 0; i < this._children.length; i++) {
|
||||
let child = this._children[i];
|
||||
if (i > 0)
|
||||
width += this._spacing;
|
||||
let [min, natural] = child.actor.get_preferred_width(forHeight);
|
||||
width += natural;
|
||||
}
|
||||
}
|
||||
alloc.min_size = alloc.natural_size = width;
|
||||
},
|
||||
|
||||
_getPreferredHeight: function(actor, forWidth, alloc) {
|
||||
let height = 0;
|
||||
for (let i = 0; i < this._children.length; i++) {
|
||||
let child = this._children[i];
|
||||
let [min, natural] = child.actor.get_preferred_height(-1);
|
||||
if (natural > height)
|
||||
height = natural;
|
||||
}
|
||||
alloc.min_size = alloc.natural_size = height;
|
||||
},
|
||||
|
||||
_allocate: function(actor, box, flags) {
|
||||
let height = box.y2 - box.y1;
|
||||
|
||||
if (this._dot) {
|
||||
let dotBox = new Clutter.ActorBox();
|
||||
let dotWidth = Math.round(box.x1 / 2);
|
||||
|
||||
dotBox.x1 = Math.round(box.x1 / 4);
|
||||
dotBox.x2 = dotBox.x1 + dotWidth;
|
||||
dotBox.y1 = Math.round(box.y1 + (height - dotWidth) / 2);
|
||||
dotBox.y2 = dotBox.y1 + dotWidth;
|
||||
this._dot.allocate(dotBox, flags);
|
||||
}
|
||||
|
||||
let x = box.x1;
|
||||
for (let i = 0, col = 0; i < this._children.length; i++) {
|
||||
let child = this._children[i];
|
||||
let childBox = new Clutter.ActorBox();
|
||||
childBox.x1 = x;
|
||||
if (this._columnWidths) {
|
||||
if (child.span == -1)
|
||||
childBox.x2 = box.x2;
|
||||
else {
|
||||
childBox.x2 = x;
|
||||
for (let j = 0; j < child.span; j++)
|
||||
childBox.x2 += this._columnWidths[col++];
|
||||
}
|
||||
} else {
|
||||
let [min, natural] = child.actor.get_preferred_width(-1);
|
||||
childBox.x2 = x + natural;
|
||||
}
|
||||
let [min, natural] = child.actor.get_preferred_height(-1);
|
||||
childBox.y1 = Math.round(box.y1 + (height - natural) / 2);
|
||||
childBox.y2 = childBox.y1 + natural;
|
||||
child.actor.allocate(childBox, flags);
|
||||
|
||||
x = childBox.x2 + this._spacing;
|
||||
}
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(PopupBaseMenuItem.prototype);
|
||||
@ -122,7 +307,7 @@ PopupMenuItem.prototype = {
|
||||
PopupBaseMenuItem.prototype._init.call(this);
|
||||
|
||||
this.label = new St.Label({ text: text });
|
||||
this.actor.set_child(this.label);
|
||||
this.addActor(this.label);
|
||||
}
|
||||
};
|
||||
|
||||
@ -137,7 +322,7 @@ PopupSeparatorMenuItem.prototype = {
|
||||
PopupBaseMenuItem.prototype._init.call(this, { reactive: false });
|
||||
|
||||
this._drawingArea = new St.DrawingArea({ style_class: 'popup-separator-menu-item' });
|
||||
this.actor.set_child(this._drawingArea);
|
||||
this.addActor(this._drawingArea, 0, -1);
|
||||
this._drawingArea.connect('repaint', Lang.bind(this, this._onRepaint));
|
||||
},
|
||||
|
||||
@ -145,13 +330,12 @@ PopupSeparatorMenuItem.prototype = {
|
||||
let cr = area.get_context();
|
||||
let themeNode = area.get_theme_node();
|
||||
let [width, height] = area.get_surface_size();
|
||||
let found, margin, gradientHeight;
|
||||
[found, margin] = themeNode.get_length('-margin-horizontal', false);
|
||||
[found, gradientHeight] = themeNode.get_length('-gradient-height', false);
|
||||
let margin = themeNode.get_length('-margin-horizontal');
|
||||
let gradientHeight = themeNode.get_length('-gradient-height');
|
||||
let startColor = new Clutter.Color();
|
||||
themeNode.get_color('-gradient-start', false, startColor);
|
||||
themeNode.get_color('-gradient-start', startColor);
|
||||
let endColor = new Clutter.Color();
|
||||
themeNode.get_color('-gradient-end', false, endColor);
|
||||
themeNode.get_color('-gradient-end', endColor);
|
||||
|
||||
let gradientWidth = (width - margin * 2);
|
||||
let gradientOffset = (height - gradientHeight) / 2;
|
||||
@ -175,15 +359,18 @@ PopupSliderMenuItem.prototype = {
|
||||
_init: function(value) {
|
||||
PopupBaseMenuItem.prototype._init.call(this, { activate: false });
|
||||
|
||||
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
|
||||
|
||||
if (isNaN(value))
|
||||
// Avoid spreading NaNs around
|
||||
throw TypeError('The slider value must be a number');
|
||||
this._displayValue = this._value = Math.max(Math.min(value, 1), 0);
|
||||
this._value = Math.max(Math.min(value, 1), 0);
|
||||
|
||||
this._slider = new St.DrawingArea({ style_class: 'popup-slider-menu-item', reactive: true });
|
||||
this.actor.set_child(this._slider);
|
||||
this.addActor(this._slider, 0, -1);
|
||||
this._slider.connect('repaint', Lang.bind(this, this._sliderRepaint));
|
||||
this._slider.connect('button-press-event', Lang.bind(this, this._startDragging));
|
||||
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
|
||||
|
||||
this._releaseId = this._motionId = 0;
|
||||
this._dragging = false;
|
||||
@ -193,7 +380,7 @@ PopupSliderMenuItem.prototype = {
|
||||
if (isNaN(value))
|
||||
throw TypeError('The slider value must be a number');
|
||||
|
||||
this._displayValue = this._value = Math.max(Math.min(value, 1), 0);
|
||||
this._value = Math.max(Math.min(value, 1), 0);
|
||||
this._slider.queue_repaint();
|
||||
},
|
||||
|
||||
@ -202,20 +389,17 @@ PopupSliderMenuItem.prototype = {
|
||||
let themeNode = area.get_theme_node();
|
||||
let [width, height] = area.get_surface_size();
|
||||
|
||||
let found, handleRadius;
|
||||
[found, handleRadius] = themeNode.get_length('-slider-handle-radius', false);
|
||||
let handleRadius = themeNode.get_length('-slider-handle-radius');
|
||||
|
||||
let sliderWidth = width - 2 * handleRadius;
|
||||
let sliderHeight;
|
||||
[found, sliderHeight] = themeNode.get_length('-slider-height', false);
|
||||
let sliderHeight = themeNode.get_length('-slider-height');
|
||||
|
||||
let sliderBorderWidth;
|
||||
[found, sliderBorderWidth] = themeNode.get_length('-slider-border-width', false);
|
||||
let sliderBorderWidth = themeNode.get_length('-slider-border-width');
|
||||
|
||||
let sliderBorderColor = new Clutter.Color();
|
||||
themeNode.get_color('-slider-border-color', false, sliderBorderColor);
|
||||
themeNode.get_color('-slider-border-color', sliderBorderColor);
|
||||
let sliderColor = new Clutter.Color();
|
||||
themeNode.get_color('-slider-background-color', false, sliderColor);
|
||||
themeNode.get_color('-slider-background-color', sliderColor);
|
||||
|
||||
cr.setSourceRGBA (
|
||||
sliderColor.red / 255,
|
||||
@ -233,7 +417,7 @@ PopupSliderMenuItem.prototype = {
|
||||
cr.stroke();
|
||||
|
||||
let handleY = height / 2;
|
||||
let handleX = handleRadius + (width - 2 * handleRadius) * this._displayValue;
|
||||
let handleX = handleRadius + (width - 2 * handleRadius) * this._value;
|
||||
|
||||
let color = new Clutter.Color();
|
||||
themeNode.get_foreground_color(color);
|
||||
@ -271,12 +455,25 @@ PopupSliderMenuItem.prototype = {
|
||||
Clutter.ungrab_pointer();
|
||||
this._dragging = false;
|
||||
|
||||
this._value = this._displayValue;
|
||||
this.emit('value-changed', this._value);
|
||||
this.emit('drag-end');
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
_onScrollEvent: function (actor, event) {
|
||||
let direction = event.get_scroll_direction();
|
||||
|
||||
if (direction == Clutter.ScrollDirection.DOWN) {
|
||||
this._value = Math.max(0, this._value - SLIDER_SCROLL_STEP);
|
||||
}
|
||||
else if (direction == Clutter.ScrollDirection.UP) {
|
||||
this._value = Math.min(1, this._value + SLIDER_SCROLL_STEP);
|
||||
}
|
||||
|
||||
this._slider.queue_repaint();
|
||||
this.emit('value-changed', this._value);
|
||||
},
|
||||
|
||||
_motionEvent: function(actor, event) {
|
||||
let absX, absY;
|
||||
[absX, absY] = event.get_coords();
|
||||
@ -291,8 +488,7 @@ PopupSliderMenuItem.prototype = {
|
||||
relY = absY - sliderY;
|
||||
|
||||
let width = this._slider.width;
|
||||
let found, handleRadius;
|
||||
[found, handleRadius] = this._slider.get_theme_node().get_length('-slider-handle-radius', false);
|
||||
let handleRadius = this._slider.get_theme_node().get_length('-slider-handle-radius');
|
||||
|
||||
let newvalue;
|
||||
if (relX < handleRadius)
|
||||
@ -301,21 +497,23 @@ PopupSliderMenuItem.prototype = {
|
||||
newvalue = 1;
|
||||
else
|
||||
newvalue = (relX - handleRadius) / (width - 2 * handleRadius);
|
||||
this._displayValue = newvalue;
|
||||
this._value = newvalue;
|
||||
this._slider.queue_repaint();
|
||||
this.emit('value-changed', this._value);
|
||||
},
|
||||
|
||||
get value() {
|
||||
return this._value;
|
||||
},
|
||||
|
||||
handleKeyPress: function(event) {
|
||||
_onKeyPressEvent: function (actor, event) {
|
||||
let key = event.get_key_symbol();
|
||||
if (key == Clutter.Right || key == Clutter.Left) {
|
||||
let delta = key == Clutter.Right ? 0.1 : -0.1;
|
||||
this._value = this._displayValue = Math.max(0, Math.min(this._value + delta, 1));
|
||||
if (key == Clutter.KEY_Right || key == Clutter.KEY_Left) {
|
||||
let delta = key == Clutter.KEY_Right ? 0.1 : -0.1;
|
||||
this._value = Math.max(0, Math.min(this._value + delta, 1));
|
||||
this._slider.queue_repaint();
|
||||
this.emit('value-changed', this._value);
|
||||
this.emit('drag-end');
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -332,14 +530,11 @@ PopupSwitchMenuItem.prototype = {
|
||||
_init: function(text, active) {
|
||||
PopupBaseMenuItem.prototype._init.call(this);
|
||||
|
||||
this.active = !!active;
|
||||
this.label = new St.Label({ text: text });
|
||||
this._switch = new Switch(this.active);
|
||||
this._switch = new Switch(active);
|
||||
|
||||
this._box = new St.BoxLayout({ style_class: 'popup-switch-menu-item' });
|
||||
this._box.add(this.label, { expand: true, y_fill: false });
|
||||
this._box.add(this._switch.actor, { y_fill: false });
|
||||
this.actor.set_child(this._box);
|
||||
this.addActor(this.label);
|
||||
this.addActor(this._switch.actor);
|
||||
|
||||
this.connect('activate', Lang.bind(this,function(from) {
|
||||
this.toggle();
|
||||
@ -361,64 +556,26 @@ PopupSwitchMenuItem.prototype = {
|
||||
}
|
||||
|
||||
|
||||
function PopupImageMenuItem(text, iconName, alwaysShowImage) {
|
||||
this._init(text, iconName, alwaysShowImage);
|
||||
function PopupImageMenuItem(text, iconName) {
|
||||
this._init(text, iconName);
|
||||
}
|
||||
|
||||
// We need to instantiate a GtkImageMenuItem so it
|
||||
// hooks up its properties on the GtkSettings
|
||||
var _gtkImageMenuItemCreated = false;
|
||||
|
||||
PopupImageMenuItem.prototype = {
|
||||
__proto__: PopupBaseMenuItem.prototype,
|
||||
|
||||
_init: function (text, iconName, alwaysShowImage) {
|
||||
_init: function (text, iconName) {
|
||||
PopupBaseMenuItem.prototype._init.call(this);
|
||||
|
||||
if (!_gtkImageMenuItemCreated) {
|
||||
let menuItem = new Gtk.ImageMenuItem();
|
||||
menuItem.destroy();
|
||||
_gtkImageMenuItemCreated = true;
|
||||
}
|
||||
|
||||
this._alwaysShowImage = alwaysShowImage;
|
||||
this._iconName = iconName;
|
||||
this._size = 16;
|
||||
|
||||
let box = new St.BoxLayout({ style_class: 'popup-image-menu-item' });
|
||||
this.actor.set_child(box);
|
||||
this._imageBin = new St.Bin({ width: this._size, height: this._size });
|
||||
box.add(this._imageBin, { y_fill: false });
|
||||
this.label = new St.Label({ text: text });
|
||||
box.add(this.label, { expand: true });
|
||||
this.addActor(this.label);
|
||||
this._icon = new St.Icon({ style_class: 'popup-menu-icon' });
|
||||
this.addActor(this._icon);
|
||||
|
||||
if (!alwaysShowImage) {
|
||||
let settings = Gtk.Settings.get_default();
|
||||
settings.connect('notify::gtk-menu-images', Lang.bind(this, this._onMenuImagesChanged));
|
||||
}
|
||||
this._onMenuImagesChanged();
|
||||
this.setIcon(iconName);
|
||||
},
|
||||
|
||||
_onMenuImagesChanged: function() {
|
||||
let show;
|
||||
if (this._alwaysShowImage) {
|
||||
show = true;
|
||||
} else {
|
||||
let settings = Gtk.Settings.get_default();
|
||||
show = settings.gtk_menu_images;
|
||||
}
|
||||
if (!show) {
|
||||
this._imageBin.hide();
|
||||
} else {
|
||||
let img = St.TextureCache.get_default().load_icon_name(this._iconName, St.IconType.SYMBOLIC, this._size);
|
||||
this._imageBin.set_child(img);
|
||||
this._imageBin.show();
|
||||
}
|
||||
},
|
||||
|
||||
setIcon: function(name) {
|
||||
this._iconName = name;
|
||||
this._onMenuImagesChanged();
|
||||
this._icon.icon_name = name;
|
||||
}
|
||||
};
|
||||
|
||||
@ -461,15 +618,59 @@ PopupMenu.prototype = {
|
||||
x_align: St.Align.START });
|
||||
this.actor = this._boxPointer.actor;
|
||||
this.actor.style_class = 'popup-menu-boxpointer';
|
||||
this._boxWrapper = new Shell.GenericContainer();
|
||||
this._boxWrapper.connect('get-preferred-width', Lang.bind(this, this._boxGetPreferredWidth));
|
||||
this._boxWrapper.connect('get-preferred-height', Lang.bind(this, this._boxGetPreferredHeight));
|
||||
this._boxWrapper.connect('allocate', Lang.bind(this, this._boxAllocate));
|
||||
this._boxPointer.bin.set_child(this._boxWrapper);
|
||||
|
||||
this._box = new St.BoxLayout({ style_class: 'popup-menu-content',
|
||||
vertical: true });
|
||||
this._boxPointer.bin.set_child(this._box);
|
||||
this._boxWrapper.add_actor(this._box);
|
||||
this.actor.add_style_class_name('popup-menu');
|
||||
|
||||
global.focus_manager.add_group(this.actor);
|
||||
|
||||
if (sourceActor._delegate instanceof PopupSubMenuMenuItem) {
|
||||
this._isSubMenu = true;
|
||||
this.actor.reactive = true;
|
||||
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
|
||||
}
|
||||
|
||||
this.isOpen = false;
|
||||
this._activeMenuItem = null;
|
||||
},
|
||||
|
||||
_boxGetPreferredWidth: function (actor, forHeight, alloc) {
|
||||
// Update the menuitem column widths
|
||||
let columnWidths = [];
|
||||
let items = this._box.get_children();
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
if (items[i]._delegate instanceof PopupBaseMenuItem) {
|
||||
let itemColumnWidths = items[i]._delegate.getColumnWidths();
|
||||
for (let j = 0; j < itemColumnWidths.length; j++) {
|
||||
if (j >= columnWidths.length || itemColumnWidths[j] > columnWidths[j])
|
||||
columnWidths[j] = itemColumnWidths[j];
|
||||
}
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
if (items[i]._delegate instanceof PopupBaseMenuItem)
|
||||
items[i]._delegate.setColumnWidths(columnWidths);
|
||||
}
|
||||
|
||||
// Now they will request the right sizes
|
||||
[alloc.min_size, alloc.natural_size] = this._box.get_preferred_width(forHeight);
|
||||
},
|
||||
|
||||
_boxGetPreferredHeight: function (actor, forWidth, alloc) {
|
||||
[alloc.min_size, alloc.natural_size] = this._box.get_preferred_height(forWidth);
|
||||
},
|
||||
|
||||
_boxAllocate: function (actor, box, flags) {
|
||||
this._box.allocate(box, flags);
|
||||
},
|
||||
|
||||
addAction: function(title, callback) {
|
||||
var menuItem = new PopupMenuItem(title);
|
||||
this.addMenuItem(menuItem);
|
||||
@ -478,8 +679,11 @@ PopupMenu.prototype = {
|
||||
}));
|
||||
},
|
||||
|
||||
addMenuItem: function(menuItem) {
|
||||
this._box.add(menuItem.actor);
|
||||
addMenuItem: function(menuItem, position) {
|
||||
if (position == undefined)
|
||||
this._box.add(menuItem.actor);
|
||||
else
|
||||
this._box.insert_actor(menuItem.actor, position);
|
||||
menuItem._activeChangeId = menuItem.connect('active-changed', Lang.bind(this, function (menuItem, active) {
|
||||
if (active && this._activeMenuItem != menuItem) {
|
||||
if (this._activeMenuItem)
|
||||
@ -534,12 +738,10 @@ PopupMenu.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
open: function(submenu) {
|
||||
open: function() {
|
||||
if (this.isOpen)
|
||||
return;
|
||||
|
||||
this.emit('opening');
|
||||
|
||||
let primary = global.get_primary_monitor();
|
||||
|
||||
// We need to show it now to force an allocation,
|
||||
@ -552,11 +754,10 @@ PopupMenu.prototype = {
|
||||
|
||||
let [minWidth, minHeight, natWidth, natHeight] = this.actor.get_preferred_size();
|
||||
|
||||
let menuX, menuY;
|
||||
let menuWidth = natWidth, menuHeight = natHeight;
|
||||
|
||||
// Position the non-pointing axis
|
||||
if (submenu) {
|
||||
if (this._isSubmenu) {
|
||||
if (this._arrowSide == St.Side.TOP || this._arrowSide == St.Side.BOTTOM) {
|
||||
// vertical submenu
|
||||
if (sourceY + sourceHeigth + menuHeight + this._gap < primary.y + primary.height)
|
||||
@ -575,75 +776,12 @@ PopupMenu.prototype = {
|
||||
this._boxPointer._arrowSide = this._arrowSide = St.Side.LEFT;
|
||||
}
|
||||
}
|
||||
switch (this._arrowSide) {
|
||||
case St.Side.TOP:
|
||||
menuY = sourceY + sourceHeight + this._gap;
|
||||
break;
|
||||
case St.Side.BOTTOM:
|
||||
menuY = sourceY - menuHeight - this._gap;
|
||||
break;
|
||||
case St.Side.LEFT:
|
||||
menuX = sourceX + sourceWidth + this._gap;
|
||||
break;
|
||||
case St.Side.RIGHT:
|
||||
menuX = sourceX - menuWidth - this._gap;
|
||||
break;
|
||||
}
|
||||
|
||||
// Now align and position the pointing axis, making sure
|
||||
// it fits on screen
|
||||
switch (this._arrowSide) {
|
||||
case St.Side.TOP:
|
||||
case St.Side.BOTTOM:
|
||||
switch (this._alignment) {
|
||||
case St.Align.START:
|
||||
menuX = sourceX;
|
||||
break;
|
||||
case St.Align.MIDDLE:
|
||||
menuX = sourceX - Math.floor((menuWidth - sourceWidth) / 2);
|
||||
break;
|
||||
case St.Align.END:
|
||||
menuX = sourceX - (menuWidth - sourceWidth);
|
||||
break;
|
||||
}
|
||||
|
||||
menuX = Math.min(menuX, primary.x + primary.width - menuWidth);
|
||||
menuX = Math.max(menuX, primary.x);
|
||||
|
||||
this._boxPointer.setArrowOrigin((sourceX - menuX) + Math.floor(sourceWidth / 2));
|
||||
break;
|
||||
|
||||
case St.Side.LEFT:
|
||||
case St.Side.RIGHT:
|
||||
switch (this._alignment) {
|
||||
case St.Align.START:
|
||||
menuY = sourceY;
|
||||
break;
|
||||
case St.Align.MIDDLE:
|
||||
menuY = sourceY - Math.floor((menuHeight - sourceHeight) / 2);
|
||||
break;
|
||||
case St.Align.END:
|
||||
menuY = sourceY - (menuHeight - sourceHeight);
|
||||
break;
|
||||
}
|
||||
|
||||
menuY = Math.min(menuY, primary.y + primary.height - menuHeight);
|
||||
menuY = Math.max(menuY, primary.y);
|
||||
|
||||
this._boxPointer.setArrowOrigin((sourceY - menuY) + Math.floor(sourceHeight / 2));
|
||||
break;
|
||||
}
|
||||
|
||||
// Actually set the position
|
||||
this.actor.x = Math.floor(menuX);
|
||||
this.actor.y = Math.floor(menuY);
|
||||
this._boxPointer.setPosition(this.sourceActor, this._gap, this._alignment);
|
||||
|
||||
// Now show it
|
||||
this.actor.opacity = 0;
|
||||
this.actor.reactive = true;
|
||||
Tweener.addTween(this.actor, { opacity: 255,
|
||||
transition: "easeOutQuad",
|
||||
time: POPUP_ANIMATION_TIME });
|
||||
this._boxPointer.animateAppear();
|
||||
this.isOpen = true;
|
||||
this.emit('open-state-changed', true);
|
||||
},
|
||||
@ -652,21 +790,14 @@ PopupMenu.prototype = {
|
||||
if (!this.isOpen)
|
||||
return;
|
||||
|
||||
this.emit('closing');
|
||||
|
||||
if (this._activeMenuItem)
|
||||
this._activeMenuItem.setActive(false);
|
||||
this.actor.reactive = false;
|
||||
Tweener.addTween(this.actor, { opacity: 0,
|
||||
transition: "easeOutQuad",
|
||||
time: POPUP_ANIMATION_TIME,
|
||||
onComplete: Lang.bind(this, function () { this.actor.hide(); })});
|
||||
|
||||
this._boxPointer.animateDisappear();
|
||||
this.isOpen = false;
|
||||
this.emit('open-state-changed', false);
|
||||
},
|
||||
|
||||
|
||||
toggle: function() {
|
||||
if (this.isOpen)
|
||||
this.close();
|
||||
@ -674,35 +805,15 @@ PopupMenu.prototype = {
|
||||
this.open();
|
||||
},
|
||||
|
||||
handleKeyPress: function(event, submenu) {
|
||||
if (!this.isOpen || (submenu && !this._activeMenuItem))
|
||||
return false;
|
||||
if (this._activeMenuItem && this._activeMenuItem.handleKeyPress(event))
|
||||
_onKeyPressEvent: function(actor, event) {
|
||||
// Move focus back to parent menu if the user types Left.
|
||||
// (This handler is only connected if the PopupMenu is a
|
||||
// submenu.)
|
||||
if (this.isOpen &&
|
||||
this._activeMenuItem &&
|
||||
event.get_key_symbol() == Clutter.KEY_Left) {
|
||||
this._activeMenuItem.setActive(false);
|
||||
return true;
|
||||
switch (event.get_key_symbol()) {
|
||||
case Clutter.space:
|
||||
case Clutter.Return:
|
||||
if (this._activeMenuItem)
|
||||
this._activeMenuItem.activate(event);
|
||||
return true;
|
||||
case Clutter.Down:
|
||||
case Clutter.Up:
|
||||
let items = this._box.get_children().filter(function (child) { return child.visible && child.reactive; });
|
||||
let current = this._activeMenuItem ? this._activeMenuItem.actor : null;
|
||||
let direction = event.get_key_symbol() == Clutter.Down ? 1 : -1;
|
||||
|
||||
let next = findNextInCycle(items, current, direction);
|
||||
if (next) {
|
||||
next._delegate.setActive(true);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case Clutter.Left:
|
||||
if (submenu) {
|
||||
this._activeMenuItem.setActive(false);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -737,12 +848,11 @@ PopupSubMenuMenuItem.prototype = {
|
||||
_init: function(text) {
|
||||
PopupBaseMenuItem.prototype._init.call(this, { activate: false, hover: false });
|
||||
this.actor.connect('enter-event', Lang.bind(this, this._mouseEnter));
|
||||
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
|
||||
|
||||
this.label = new St.Label({ text: text });
|
||||
this._container = new St.BoxLayout();
|
||||
this._container.add(this.label, { fill: true, expand: true });
|
||||
this._container.add(new St.Label({ text: '>' }));
|
||||
this.actor.set_child(this._container);
|
||||
this.addActor(this.label);
|
||||
this.addActor(new St.Label({ text: '>' }));
|
||||
|
||||
this.menu = new PopupMenu(this.actor, St.Align.MIDDLE, St.Side.LEFT, 0, true);
|
||||
Main.chrome.addActor(this.menu.actor, { visibleInOverview: true,
|
||||
@ -783,7 +893,7 @@ PopupSubMenuMenuItem.prototype = {
|
||||
setActive: function(active) {
|
||||
if (this.menu) {
|
||||
if (active)
|
||||
this.menu.open(true);
|
||||
this.menu.open();
|
||||
else
|
||||
this.menu.close();
|
||||
}
|
||||
@ -791,14 +901,14 @@ PopupSubMenuMenuItem.prototype = {
|
||||
PopupBaseMenuItem.prototype.setActive.call(this, active);
|
||||
},
|
||||
|
||||
handleKeyPress: function(event) {
|
||||
_onKeyPressEvent: function(actor, event) {
|
||||
if (!this.menu)
|
||||
return false;
|
||||
if (event.get_key_symbol() == Clutter.Right) {
|
||||
if (event.get_key_symbol() == Clutter.KEY_Right) {
|
||||
this.menu.activateFirst();
|
||||
return true;
|
||||
}
|
||||
return this.menu.handleKeyPress(event, true);
|
||||
return false;
|
||||
},
|
||||
|
||||
contains: function(actor) {
|
||||
@ -824,6 +934,7 @@ PopupMenuManager.prototype = {
|
||||
this.grabbed = false;
|
||||
|
||||
this._eventCaptureId = 0;
|
||||
this._keyPressEventId = 0;
|
||||
this._enterEventId = 0;
|
||||
this._leaveEventId = 0;
|
||||
this._activeMenu = null;
|
||||
@ -831,21 +942,20 @@ PopupMenuManager.prototype = {
|
||||
this._delayedMenus = [];
|
||||
},
|
||||
|
||||
addMenu: function(menu, noGrab, position) {
|
||||
addMenu: function(menu, position) {
|
||||
let menudata = {
|
||||
menu: menu,
|
||||
openStateChangeId: menu.connect('open-state-changed', Lang.bind(this, this._onMenuOpenState)),
|
||||
activateId: menu.connect('activate', Lang.bind(this, this._onMenuActivated)),
|
||||
destroyId: menu.connect('destroy', Lang.bind(this, this._onMenuDestroy)),
|
||||
enterId: 0,
|
||||
buttonPressId: 0
|
||||
focusId: 0
|
||||
};
|
||||
|
||||
let source = menu.sourceActor;
|
||||
if (source) {
|
||||
menudata.enterId = source.connect('enter-event', Lang.bind(this, this._onMenuSourceEnter, menu));
|
||||
if (!noGrab)
|
||||
menudata.buttonPressId = source.connect('button-press-event', Lang.bind(this, this._onMenuSourcePress, menu));
|
||||
menudata.enterId = source.connect('enter-event', Lang.bind(this, function() { this._onMenuSourceEnter(menu); }));
|
||||
menudata.focusId = source.connect('key-focus-in', Lang.bind(this, function() { this._onMenuSourceEnter(menu); }));
|
||||
}
|
||||
|
||||
if (position == undefined)
|
||||
@ -869,8 +979,8 @@ PopupMenuManager.prototype = {
|
||||
|
||||
if (menudata.enterId)
|
||||
menu.sourceActor.disconnect(menudata.enterId);
|
||||
if (menudata.buttonPressId)
|
||||
menu.sourceActor.disconnect(menudata.buttonPressId);
|
||||
if (menudata.focusId)
|
||||
menu.sourceActor.disconnect(menudata.focusId);
|
||||
|
||||
this._menus.splice(position, 1);
|
||||
},
|
||||
@ -879,6 +989,7 @@ PopupMenuManager.prototype = {
|
||||
Main.pushModal(this._owner.actor);
|
||||
|
||||
this._eventCaptureId = global.stage.connect('captured-event', Lang.bind(this, this._onEventCapture));
|
||||
this._keyPressEventId = global.stage.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
|
||||
// captured-event doesn't see enter/leave events
|
||||
this._enterEventId = global.stage.connect('enter-event', Lang.bind(this, this._onEventCapture));
|
||||
this._leaveEventId = global.stage.connect('leave-event', Lang.bind(this, this._onEventCapture));
|
||||
@ -889,24 +1000,30 @@ PopupMenuManager.prototype = {
|
||||
ungrab: function() {
|
||||
global.stage.disconnect(this._eventCaptureId);
|
||||
this._eventCaptureId = 0;
|
||||
global.stage.disconnect(this._keyPressEventId);
|
||||
this._keyPressEventId = 0;
|
||||
global.stage.disconnect(this._enterEventId);
|
||||
this._enterEventId = 0;
|
||||
global.stage.disconnect(this._leaveEventId);
|
||||
this._leaveEventId = 0;
|
||||
|
||||
Main.popModal(this._owner.actor);
|
||||
|
||||
this.grabbed = false;
|
||||
Main.popModal(this._owner.actor);
|
||||
},
|
||||
|
||||
_onMenuOpenState: function(menu, open) {
|
||||
if (!open && menu == this._activeMenu)
|
||||
this._activeMenu = null;
|
||||
else if (open)
|
||||
if (open) {
|
||||
this._activeMenu = menu;
|
||||
if (!this.grabbed)
|
||||
this.grab();
|
||||
} else if (menu == this._activeMenu) {
|
||||
this._activeMenu = null;
|
||||
if (this.grabbed)
|
||||
this.ungrab();
|
||||
}
|
||||
},
|
||||
|
||||
_onMenuSourceEnter: function(actor, event, menu) {
|
||||
_onMenuSourceEnter: function(menu) {
|
||||
if (!this.grabbed || menu == this._activeMenu)
|
||||
return false;
|
||||
|
||||
@ -916,13 +1033,6 @@ PopupMenuManager.prototype = {
|
||||
return false;
|
||||
},
|
||||
|
||||
_onMenuSourcePress: function(actor, event, menu) {
|
||||
if (this.grabbed)
|
||||
return false;
|
||||
this.grab();
|
||||
return false;
|
||||
},
|
||||
|
||||
_onMenuActivated: function(menu, item) {
|
||||
if (this.grabbed)
|
||||
this.ungrab();
|
||||
@ -979,23 +1089,6 @@ PopupMenuManager.prototype = {
|
||||
|| (eventType == Clutter.EventType.KEY_PRESS && event.get_key_symbol() == Clutter.Escape)) {
|
||||
this._closeMenu();
|
||||
return true;
|
||||
} else if (eventType == Clutter.EventType.KEY_PRESS
|
||||
&& this._activeMenu != null
|
||||
&& this._activeMenu.handleKeyPress(event, false)) {
|
||||
return true;
|
||||
} else if (eventType == Clutter.EventType.KEY_PRESS
|
||||
&& this._activeMenu != null
|
||||
&& (event.get_key_symbol() == Clutter.Left
|
||||
|| event.get_key_symbol() == Clutter.Right)) {
|
||||
let direction = event.get_key_symbol() == Clutter.Right ? 1 : -1;
|
||||
let pos = this._findMenu(this._activeMenu);
|
||||
let next = this._menus[mod(pos + direction, this._menus.length)].menu;
|
||||
if (next != this._activeMenu) {
|
||||
this._activeMenu.close();
|
||||
next.open(false);
|
||||
next.activateFirst();
|
||||
}
|
||||
return true;
|
||||
} else if (activeMenuContains || this._eventIsOnAnyMenuSource(event)) {
|
||||
return false;
|
||||
}
|
||||
@ -1003,9 +1096,32 @@ PopupMenuManager.prototype = {
|
||||
return true;
|
||||
},
|
||||
|
||||
_onKeyPressEvent: function(actor, event) {
|
||||
if (!this.grabbed || !this._activeMenu)
|
||||
return false;
|
||||
if (!this._eventIsOnActiveMenu(event))
|
||||
return false;
|
||||
|
||||
let symbol = event.get_key_symbol();
|
||||
if (symbol == Clutter.Left || symbol == Clutter.Right) {
|
||||
let direction = symbol == Clutter.Right ? 1 : -1;
|
||||
let pos = this._findMenu(this._activeMenu);
|
||||
let next = this._menus[mod(pos + direction, this._menus.length)].menu;
|
||||
if (next != this._activeMenu) {
|
||||
let oldMenu = this._activeMenu;
|
||||
this._activeMenu = next;
|
||||
oldMenu.close();
|
||||
next.open();
|
||||
next.activateFirst();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
_closeMenu: function() {
|
||||
if (this._activeMenu != null)
|
||||
this._activeMenu.close();
|
||||
this.ungrab();
|
||||
}
|
||||
};
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
const Signals = imports.signals;
|
||||
|
||||
const RESULT_ICON_SIZE = 24;
|
||||
const RESULT_ICON_SIZE = 48;
|
||||
|
||||
// Not currently referenced by the search API, but
|
||||
// this enumeration can be useful for provider
|
||||
@ -182,7 +182,7 @@ SearchProvider.prototype = {
|
||||
* implementation will show the icon next to the name.
|
||||
*
|
||||
* The actor should be an instance of St.Widget, with the style class
|
||||
* 'dash-search-result-content'.
|
||||
* 'search-result-content'.
|
||||
*/
|
||||
createResultActor: function(resultMeta, terms) {
|
||||
return null;
|
||||
|
332
js/ui/searchDisplay.js
Normal file
332
js/ui/searchDisplay.js
Normal file
@ -0,0 +1,332 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
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 St = imports.gi.St;
|
||||
|
||||
const DND = imports.ui.dnd;
|
||||
const IconGrid = imports.ui.iconGrid;
|
||||
const Main = imports.ui.main;
|
||||
const Search = imports.ui.search;
|
||||
|
||||
const MAX_SEARCH_RESULTS_ROWS = 2;
|
||||
|
||||
|
||||
function SearchResult(provider, metaInfo, terms) {
|
||||
this._init(provider, metaInfo, terms);
|
||||
}
|
||||
|
||||
SearchResult.prototype = {
|
||||
_init: function(provider, metaInfo, terms) {
|
||||
this.provider = provider;
|
||||
this.metaInfo = metaInfo;
|
||||
this.actor = new St.Clickable({ style_class: 'search-result',
|
||||
reactive: true,
|
||||
x_align: St.Align.START,
|
||||
y_fill: true });
|
||||
this.actor._delegate = this;
|
||||
|
||||
let content = provider.createResultActor(metaInfo, terms);
|
||||
if (content == null) {
|
||||
content = new St.Bin({ style_class: 'search-result-content',
|
||||
reactive: true,
|
||||
track_hover: true });
|
||||
let icon = new IconGrid.BaseIcon(this.metaInfo['name'],
|
||||
{ createIcon: Lang.bind(this, function(size) {
|
||||
return this.metaInfo['icon'];
|
||||
})});
|
||||
content.set_child(icon.actor);
|
||||
}
|
||||
this._content = content;
|
||||
this.actor.set_child(content);
|
||||
|
||||
this.actor.connect('clicked', Lang.bind(this, this._onResultClicked));
|
||||
|
||||
let draggable = DND.makeDraggable(this.actor);
|
||||
draggable.connect('drag-begin',
|
||||
Lang.bind(this, function() {
|
||||
Main.overview.beginItemDrag(this);
|
||||
}));
|
||||
draggable.connect('drag-end',
|
||||
Lang.bind(this, function() {
|
||||
Main.overview.endItemDrag(this);
|
||||
}));
|
||||
},
|
||||
|
||||
setSelected: function(selected) {
|
||||
if (selected)
|
||||
this._content.add_style_pseudo_class('selected');
|
||||
else
|
||||
this._content.remove_style_pseudo_class('selected');
|
||||
},
|
||||
|
||||
activate: function() {
|
||||
this.provider.activateResult(this.metaInfo.id);
|
||||
Main.overview.toggle();
|
||||
},
|
||||
|
||||
_onResultClicked: function(actor, event) {
|
||||
this.activate();
|
||||
},
|
||||
|
||||
getDragActorSource: function() {
|
||||
return this.metaInfo['icon'];
|
||||
},
|
||||
|
||||
getDragActor: function(stageX, stageY) {
|
||||
return new Clutter.Clone({ source: this.metaInfo['icon'] });
|
||||
},
|
||||
|
||||
shellWorkspaceLaunch: function() {
|
||||
if (this.provider.dragActivateResult)
|
||||
this.provider.dragActivateResult(this.metaInfo.id);
|
||||
else
|
||||
this.provider.activateResult(this.metaInfo.id);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function GridSearchResults(provider) {
|
||||
this._init(provider);
|
||||
}
|
||||
|
||||
GridSearchResults.prototype = {
|
||||
__proto__: Search.SearchResultDisplay.prototype,
|
||||
|
||||
_init: function(provider) {
|
||||
Search.SearchResultDisplay.prototype._init.call(this, provider);
|
||||
this._grid = new IconGrid.IconGrid({ rowLimit: MAX_SEARCH_RESULTS_ROWS,
|
||||
xAlign: St.Align.START });
|
||||
this.actor = new St.Bin({ x_align: St.Align.START });
|
||||
this.actor.set_child(this._grid.actor);
|
||||
this.selectionIndex = -1;
|
||||
},
|
||||
|
||||
getVisibleResultCount: function() {
|
||||
return this._grid.visibleItemsCount();
|
||||
},
|
||||
|
||||
renderResults: function(results, terms) {
|
||||
for (let i = 0; i < results.length; i++) {
|
||||
let result = results[i];
|
||||
let meta = this.provider.getResultMeta(result);
|
||||
let display = new SearchResult(this.provider, meta, terms);
|
||||
this._grid.addItem(display.actor);
|
||||
}
|
||||
},
|
||||
|
||||
clear: function () {
|
||||
this._grid.removeAll();
|
||||
this.selectionIndex = -1;
|
||||
},
|
||||
|
||||
selectIndex: function (index) {
|
||||
let nVisible = this.getVisibleResultCount();
|
||||
if (this.selectionIndex >= 0) {
|
||||
let prevActor = this._grid.getItemAtIndex(this.selectionIndex);
|
||||
prevActor._delegate.setSelected(false);
|
||||
}
|
||||
this.selectionIndex = -1;
|
||||
if (index >= nVisible)
|
||||
return false;
|
||||
else if (index < 0)
|
||||
return false;
|
||||
let targetActor = this._grid.getItemAtIndex(index);
|
||||
targetActor._delegate.setSelected(true);
|
||||
this.selectionIndex = index;
|
||||
return true;
|
||||
},
|
||||
|
||||
activateSelected: function() {
|
||||
if (this.selectionIndex < 0)
|
||||
return;
|
||||
let targetActor = this._grid.getItemAtIndex(this.selectionIndex);
|
||||
targetActor._delegate.activate();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function SearchResults(searchSystem) {
|
||||
this._init(searchSystem);
|
||||
}
|
||||
|
||||
SearchResults.prototype = {
|
||||
_init: function(searchSystem) {
|
||||
this._searchSystem = searchSystem;
|
||||
|
||||
this.actor = new St.Bin({ name: 'searchResults',
|
||||
y_align: St.Align.START,
|
||||
x_align: St.Align.START,
|
||||
x_fill: true });
|
||||
this._content = new St.BoxLayout({ name: 'searchResultsContent',
|
||||
vertical: true });
|
||||
|
||||
let scrollView = new St.ScrollView({ x_fill: true,
|
||||
y_fill: false,
|
||||
vshadows: true });
|
||||
scrollView.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
||||
scrollView.add_actor(this._content);
|
||||
|
||||
this.actor.set_child(scrollView);
|
||||
|
||||
this._statusText = new St.Label({ style_class: 'search-statustext' });
|
||||
this._content.add(this._statusText);
|
||||
this._selectedProvider = -1;
|
||||
this._providers = this._searchSystem.getProviders();
|
||||
this._providerMeta = [];
|
||||
for (let i = 0; i < this._providers.length; i++)
|
||||
this.createProviderMeta(this._providers[i]);
|
||||
},
|
||||
|
||||
createProviderMeta: function(provider) {
|
||||
let providerBox = new St.BoxLayout({ style_class: 'search-section',
|
||||
vertical: true });
|
||||
let titleButton = new St.Button({ style_class: 'search-section-header',
|
||||
reactive: true,
|
||||
x_fill: true,
|
||||
y_fill: true });
|
||||
titleButton.connect('clicked', Lang.bind(this, function () { this._onHeaderClicked(provider); }));
|
||||
providerBox.add(titleButton);
|
||||
let titleBox = new St.BoxLayout();
|
||||
titleButton.set_child(titleBox);
|
||||
let title = new St.Label({ text: provider.title });
|
||||
let count = new St.Label();
|
||||
titleBox.add(title, { expand: true });
|
||||
titleBox.add(count);
|
||||
|
||||
let resultDisplayBin = new St.Bin({ style_class: 'search-section-results',
|
||||
x_fill: true,
|
||||
y_fill: true });
|
||||
providerBox.add(resultDisplayBin, { expand: true });
|
||||
let resultDisplay = provider.createResultContainerActor();
|
||||
if (resultDisplay == null) {
|
||||
resultDisplay = new GridSearchResults(provider);
|
||||
}
|
||||
resultDisplayBin.set_child(resultDisplay.actor);
|
||||
|
||||
this._providerMeta.push({ actor: providerBox,
|
||||
resultDisplay: resultDisplay,
|
||||
count: count });
|
||||
this._content.add(providerBox);
|
||||
},
|
||||
|
||||
_clearDisplay: function() {
|
||||
this._selectedProvider = -1;
|
||||
this._visibleResultsCount = 0;
|
||||
for (let i = 0; i < this._providerMeta.length; i++) {
|
||||
let meta = this._providerMeta[i];
|
||||
meta.resultDisplay.clear();
|
||||
meta.actor.hide();
|
||||
}
|
||||
},
|
||||
|
||||
reset: function() {
|
||||
this._searchSystem.reset();
|
||||
this._statusText.hide();
|
||||
this._clearDisplay();
|
||||
},
|
||||
|
||||
startingSearch: function() {
|
||||
this.reset();
|
||||
this._statusText.set_text(_("Searching..."));
|
||||
this._statusText.show();
|
||||
},
|
||||
|
||||
_metaForProvider: function(provider) {
|
||||
return this._providerMeta[this._providers.indexOf(provider)];
|
||||
},
|
||||
|
||||
updateSearch: function (searchString) {
|
||||
let results = this._searchSystem.updateSearch(searchString);
|
||||
|
||||
this._clearDisplay();
|
||||
|
||||
if (results.length == 0) {
|
||||
this._statusText.set_text(_("No matching results."));
|
||||
this._statusText.show();
|
||||
return true;
|
||||
} else {
|
||||
this._statusText.hide();
|
||||
}
|
||||
|
||||
let terms = this._searchSystem.getTerms();
|
||||
|
||||
for (let i = 0; i < results.length; i++) {
|
||||
let [provider, providerResults] = results[i];
|
||||
let meta = this._metaForProvider(provider);
|
||||
meta.actor.show();
|
||||
meta.resultDisplay.renderResults(providerResults, terms);
|
||||
meta.count.set_text('' + providerResults.length);
|
||||
}
|
||||
|
||||
this.selectDown(false);
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
_onHeaderClicked: function(provider) {
|
||||
provider.expandSearch(this._searchSystem.getTerms());
|
||||
},
|
||||
|
||||
_modifyActorSelection: function(resultDisplay, up) {
|
||||
let success;
|
||||
let index = resultDisplay.getSelectionIndex();
|
||||
if (up && index == -1)
|
||||
index = resultDisplay.getVisibleResultCount() - 1;
|
||||
else if (up)
|
||||
index = index - 1;
|
||||
else
|
||||
index = index + 1;
|
||||
return resultDisplay.selectIndex(index);
|
||||
},
|
||||
|
||||
selectUp: function(recursing) {
|
||||
for (let i = this._selectedProvider; i >= 0; i--) {
|
||||
let meta = this._providerMeta[i];
|
||||
if (!meta.actor.visible)
|
||||
continue;
|
||||
let success = this._modifyActorSelection(meta.resultDisplay, true);
|
||||
if (success) {
|
||||
this._selectedProvider = i;
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (this._providerMeta.length > 0 && !recursing) {
|
||||
this._selectedProvider = this._providerMeta.length - 1;
|
||||
this.selectUp(true);
|
||||
}
|
||||
},
|
||||
|
||||
selectDown: function(recursing) {
|
||||
let current = this._selectedProvider;
|
||||
if (current == -1)
|
||||
current = 0;
|
||||
for (let i = current; i < this._providerMeta.length; i++) {
|
||||
let meta = this._providerMeta[i];
|
||||
if (!meta.actor.visible)
|
||||
continue;
|
||||
let success = this._modifyActorSelection(meta.resultDisplay, false);
|
||||
if (success) {
|
||||
this._selectedProvider = i;
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (this._providerMeta.length > 0 && !recursing) {
|
||||
this._selectedProvider = 0;
|
||||
this.selectDown(true);
|
||||
}
|
||||
},
|
||||
|
||||
activateSelected: function() {
|
||||
let current = this._selectedProvider;
|
||||
if (current < 0)
|
||||
return;
|
||||
let meta = this._providerMeta[current];
|
||||
let resultDisplay = meta.resultDisplay;
|
||||
resultDisplay.activateSelected();
|
||||
Main.overview.hide();
|
||||
}
|
||||
};
|
@ -17,16 +17,18 @@ const PopupMenu = imports.ui.popupMenu;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const KEY_A11Y_DIR = "/desktop/gnome/accessibility";
|
||||
const KEY_STICKY_KEYS_ENABLED = KEY_A11Y_DIR + "/keyboard/stickykeys_enable";
|
||||
const KEY_BOUNCE_KEYS_ENABLED = KEY_A11Y_DIR + "/keyboard/bouncekeys_enable";
|
||||
const KEY_SLOW_KEYS_ENABLED = KEY_A11Y_DIR + "/keyboard/slowkeys_enable";
|
||||
const KEY_MOUSE_KEYS_ENABLED = KEY_A11Y_DIR + "/keyboard/mousekeys_enable";
|
||||
const A11Y_SCHEMA = "org.gnome.desktop.a11y.keyboard";
|
||||
const KEY_STICKY_KEYS_ENABLED = "stickykeys-enable";
|
||||
const KEY_BOUNCE_KEYS_ENABLED = "bouncekeys-enable";
|
||||
const KEY_SLOW_KEYS_ENABLED = "slowkeys-enable";
|
||||
const KEY_MOUSE_KEYS_ENABLED = "mousekeys-enable";
|
||||
|
||||
const AT_SCREEN_KEYBOARD_SCHEMA = "org.gnome.desktop.default-applications.at.mobility";
|
||||
const AT_SCREEN_READER_SCHEMA = "org.gnome.desktop.default-applications.at.visual";
|
||||
|
||||
const KEY_FONT_DPI = "/desktop/gnome/font_rendering/dpi";
|
||||
const XSETTINGS_SCHEMA = "org.gnome.settings-daemon.plugins.xsettings";
|
||||
const KEY_DPI = "dpi";
|
||||
|
||||
const DPI_LOW_REASONABLE_VALUE = 50;
|
||||
const DPI_HIGH_REASONABLE_VALUE = 500;
|
||||
|
||||
@ -71,8 +73,6 @@ ATIndicator.prototype = {
|
||||
PanelMenu.SystemStatusButton.prototype._init.call(this, 'preferences-desktop-accessibility', null);
|
||||
|
||||
let client = GConf.Client.get_default();
|
||||
client.add_dir(KEY_A11Y_DIR, GConf.ClientPreloadType.PRELOAD_ONELEVEL, null);
|
||||
client.notify_add(KEY_A11Y_DIR, Lang.bind(this, this._keyChanged), null, null);
|
||||
client.add_dir(KEY_META_DIR, GConf.ClientPreloadType.PRELOAD_ONELEVEL, null);
|
||||
client.notify_add(KEY_META_DIR, Lang.bind(this, this._keyChanged), null, null);
|
||||
|
||||
@ -82,7 +82,7 @@ ATIndicator.prototype = {
|
||||
let magnifier = this._buildMagItem();
|
||||
this.menu.addMenuItem(magnifier);
|
||||
|
||||
let textZoom = this._buildFontItem(client);
|
||||
let textZoom = this._buildFontItem();
|
||||
this.menu.addMenuItem(textZoom);
|
||||
|
||||
let screenReader = this._buildItem(_("Screen Reader"), AT_SCREEN_READER_SCHEMA, 'startup');
|
||||
@ -94,16 +94,16 @@ ATIndicator.prototype = {
|
||||
let visualBell = this._buildItemGConf(_("Visual Alerts"), client, KEY_VISUAL_BELL);
|
||||
this.menu.addMenuItem(visualBell);
|
||||
|
||||
let stickyKeys = this._buildItemGConf(_("Sticky Keys"), client, KEY_STICKY_KEYS_ENABLED);
|
||||
let stickyKeys = this._buildItem(_("Sticky Keys"), A11Y_SCHEMA, KEY_STICKY_KEYS_ENABLED);
|
||||
this.menu.addMenuItem(stickyKeys);
|
||||
|
||||
let slowKeys = this._buildItemGConf(_("Slow Keys"), client, KEY_SLOW_KEYS_ENABLED);
|
||||
let slowKeys = this._buildItem(_("Slow Keys"), A11Y_SCHEMA, KEY_SLOW_KEYS_ENABLED);
|
||||
this.menu.addMenuItem(slowKeys);
|
||||
|
||||
let bounceKeys = this._buildItemGConf(_("Bounce Keys"), client, KEY_BOUNCE_KEYS_ENABLED);
|
||||
let bounceKeys = this._buildItem(_("Bounce Keys"), A11Y_SCHEMA, KEY_BOUNCE_KEYS_ENABLED);
|
||||
this.menu.addMenuItem(bounceKeys);
|
||||
|
||||
let mouseKeys = this._buildItemGConf(_("Mouse Keys"), client, KEY_MOUSE_KEYS_ENABLED);
|
||||
let mouseKeys = this._buildItem(_("Mouse Keys"), A11Y_SCHEMA, KEY_MOUSE_KEYS_ENABLED);
|
||||
this.menu.addMenuItem(mouseKeys);
|
||||
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
@ -189,31 +189,32 @@ ATIndicator.prototype = {
|
||||
return highContrast;
|
||||
},
|
||||
|
||||
_buildFontItem: function(client) {
|
||||
let first_gconf_value = client.get_without_default(KEY_FONT_DPI);
|
||||
let default_value = getDPIFromX();
|
||||
let first_value = first_gconf_value ? first_gconf_value.get_float() : default_value;
|
||||
_buildFontItem: function() {
|
||||
let settings = new Gio.Settings({ schema: XSETTINGS_SCHEMA });
|
||||
|
||||
// we assume this never changes (which is not true if resolution
|
||||
// is changed, but we would need XRandR events for that)
|
||||
let x_value = getDPIFromX();
|
||||
let user_value;
|
||||
function on_get() {
|
||||
let u_dpi = client.get_float(KEY_FONT_DPI);
|
||||
let x_dpi = getDPIFromX();
|
||||
return (u_dpi - (DPI_FACTOR_LARGE * x_dpi) > -1);
|
||||
user_value = settings.get_double(KEY_DPI);
|
||||
return (user_value - (DPI_FACTOR_LARGE * x_value) > -1);
|
||||
}
|
||||
let initial_setting = on_get();
|
||||
let default_value = initial_setting ? x_value : user_value;
|
||||
let widget = this._buildItemExtended(_("Large Text"),
|
||||
initial_setting,
|
||||
client.key_is_writable(KEY_FONT_DPI),
|
||||
settings.is_writable(KEY_DPI),
|
||||
function (enabled) {
|
||||
if (enabled)
|
||||
client.set_float(KEY_FONT_DPI, DPI_FACTOR_LARGE * getDPIFromX());
|
||||
settings.set_double(KEY_DPI, DPI_FACTOR_LARGE * default_value);
|
||||
else
|
||||
client.set_float(KEY_FONT_DPI, (first_value && !initial_setting) ? first_value : default_value);
|
||||
settings.set_double(KEY_DPI, default_value);
|
||||
});
|
||||
this.connect('gconf-changed', function() {
|
||||
settings.connect('changed::' + KEY_DPI, function() {
|
||||
let active = on_get();
|
||||
if (!active)
|
||||
// setting was modified manually, update it
|
||||
first_value = client.get_float(KEY_FONT_DPI);
|
||||
widget.setToggleState(on_get());
|
||||
default_value = active ? x_value : user_value;
|
||||
widget.setToggleState(active);
|
||||
});
|
||||
return widget;
|
||||
},
|
||||
|
226
js/ui/status/power.js
Normal file
226
js/ui/status/power.js
Normal file
@ -0,0 +1,226 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const Gio = imports.gi.Gio;
|
||||
const GLib = imports.gi.GLib;
|
||||
const DBus = imports.dbus;
|
||||
const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const BUS_NAME = 'org.gnome.PowerManager';
|
||||
const OBJECT_PATH = '/org/gnome/PowerManager';
|
||||
|
||||
const UPDeviceType = {
|
||||
UNKNOWN: 0,
|
||||
AC_POWER: 1,
|
||||
BATTERY: 2,
|
||||
UPS: 3,
|
||||
MONITOR: 4,
|
||||
MOUSE: 5,
|
||||
KEYBOARD: 6,
|
||||
PDA: 7,
|
||||
PHONE: 8
|
||||
};
|
||||
|
||||
const UPDeviceState = {
|
||||
UNKNOWN: 0,
|
||||
CHARGING: 1,
|
||||
DISCHARGING: 2,
|
||||
EMPTY: 3,
|
||||
FULLY_CHARGED: 4,
|
||||
PENDING_CHARGE: 5,
|
||||
PENDING_DISCHARGE: 6
|
||||
};
|
||||
|
||||
const PowerManagerInterface = {
|
||||
name: 'org.gnome.PowerManager',
|
||||
methods: [
|
||||
{ name: 'GetDevices', inSignature: '', outSignature: 'a(susbut)' },
|
||||
{ name: 'GetPrimaryDevice', inSignature: '', outSignature: '(susbut)' },
|
||||
],
|
||||
signals: [
|
||||
{ name: 'Changed', outSignature: '' },
|
||||
],
|
||||
properties: [
|
||||
{ name: 'Icon', signature: 's', access: 'read' },
|
||||
]
|
||||
};
|
||||
let PowerManagerProxy = DBus.makeProxyClass(PowerManagerInterface);
|
||||
|
||||
function Indicator() {
|
||||
this._init.apply(this, arguments);
|
||||
}
|
||||
|
||||
Indicator.prototype = {
|
||||
__proto__: PanelMenu.SystemStatusButton.prototype,
|
||||
|
||||
_init: function() {
|
||||
PanelMenu.SystemStatusButton.prototype._init.call(this, 'battery-missing');
|
||||
this._proxy = new PowerManagerProxy(DBus.session, BUS_NAME, OBJECT_PATH);
|
||||
|
||||
this._deviceItems = [ ];
|
||||
this._hasPrimary = false;
|
||||
this._primaryDeviceId = null;
|
||||
this._batteryItem = new PopupMenu.PopupMenuItem('');
|
||||
this.menu.addMenuItem(this._batteryItem);
|
||||
this._deviceSep = new PopupMenu.PopupSeparatorMenuItem();
|
||||
this.menu.addMenuItem(this._deviceSep);
|
||||
this._otherDevicePosition = 2;
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
this.menu.addAction(_("What's using power..."),function() {
|
||||
GLib.spawn_command_line_async('gnome-power-statistics --device wakeups');
|
||||
});
|
||||
this.menu.addAction(_("Power Settings"),function() {
|
||||
GLib.spawn_command_line_async('gnome-control-center power');
|
||||
});
|
||||
|
||||
this._proxy.connect('Changed', Lang.bind(this, this._devicesChanged));
|
||||
this._devicesChanged();
|
||||
},
|
||||
|
||||
_readPrimaryDevice: function() {
|
||||
this._proxy.GetPrimaryDeviceRemote(Lang.bind(this, function(device, error) {
|
||||
if (error) {
|
||||
this._checkError(error);
|
||||
this._hasPrimary = false;
|
||||
this._primaryDeviceId = null;
|
||||
this._batteryItem.actor.hide();
|
||||
this._deviceSep.actor.hide();
|
||||
return;
|
||||
}
|
||||
let [device_id, device_type, summary, percentage, state, time] = device;
|
||||
if (device_type == UPDeviceType.BATTERY) {
|
||||
this._hasPrimary = true;
|
||||
this._batteryItem.label.text = summary;
|
||||
this._batteryItem.actor.show();
|
||||
if (this._deviceItems.length > 0)
|
||||
this._deviceSep.actor.show();
|
||||
} else {
|
||||
this._hasPrimary = false;
|
||||
this._batteryItem.actor.hide();
|
||||
this._deviceSep.actor.hide();
|
||||
}
|
||||
|
||||
this._primaryDeviceId = device_id;
|
||||
}));
|
||||
},
|
||||
|
||||
_readOtherDevices: function() {
|
||||
this._proxy.GetDevicesRemote(Lang.bind(this, function(devices, error) {
|
||||
this._deviceItems.forEach(function(i) { i.destroy(); });
|
||||
this._deviceItems = [];
|
||||
|
||||
if (error) {
|
||||
this._checkError(error);
|
||||
this._deviceSep.actor.hide();
|
||||
return;
|
||||
}
|
||||
|
||||
let position = 0;
|
||||
for (let i = 0; i < devices.length; i++) {
|
||||
let [device_id, device_type] = devices[i];
|
||||
if (device_type == UPDeviceType.AC_POWER || device_id == this._primaryDeviceId)
|
||||
continue;
|
||||
|
||||
let item = new DeviceItem (devices[i]);
|
||||
item.connect('activate', function() {
|
||||
let p = new Shell.Process({ args: ['gnome-power-statistics', '--device', device_id] });
|
||||
p.run();
|
||||
});
|
||||
this._deviceItems.push(item);
|
||||
this.menu.addMenuItem(item, this._otherDevicePosition + position);
|
||||
position++;
|
||||
}
|
||||
|
||||
if (this._hasPrimary && position > 0)
|
||||
this._deviceSep.actor.show();
|
||||
else
|
||||
this._deviceSep.actor.hide();
|
||||
}));
|
||||
},
|
||||
|
||||
_devicesChanged: function() {
|
||||
this._proxy.GetRemote('Icon', Lang.bind(this, function(icon, error) {
|
||||
if (icon) {
|
||||
let gicon = Shell.util_icon_from_string (icon);
|
||||
this.setGIcon(gicon);
|
||||
this.actor.show();
|
||||
} else {
|
||||
this._checkError(error);
|
||||
this.menu.close();
|
||||
this.actor.hide();
|
||||
}
|
||||
}));
|
||||
this._readPrimaryDevice();
|
||||
this._readOtherDevices();
|
||||
},
|
||||
|
||||
_checkError: function(error) {
|
||||
if (!this._restarted && error && error.message.match(/org\.freedesktop\.DBus\.Error\.(UnknownMethod|InvalidArgs)/)) {
|
||||
GLib.spawn_command_line_sync('pkill -f "^gnome-power-manager$"');
|
||||
GLib.spawn_command_line_async('gnome-power-manager');
|
||||
this._restarted = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function DeviceItem() {
|
||||
this._init.apply(this, arguments);
|
||||
}
|
||||
|
||||
DeviceItem.prototype = {
|
||||
__proto__: PopupMenu.PopupBaseMenuItem.prototype,
|
||||
|
||||
_init: function(device) {
|
||||
PopupMenu.PopupBaseMenuItem.prototype._init.call(this);
|
||||
|
||||
let [device_id, device_type, summary, percentage, state, time] = device;
|
||||
|
||||
this._box = new St.BoxLayout({ style_class: 'popup-device-menu-item' });
|
||||
this._label = new St.Label({ text: summary });
|
||||
|
||||
let icon;
|
||||
switch (state) {
|
||||
case UPDeviceState.FULLY_CHARGED:
|
||||
icon = 'battery-full-charged';
|
||||
break;
|
||||
case UPDeviceState.UNKNOWN:
|
||||
icon = 'battery-missing';
|
||||
break;
|
||||
default:
|
||||
icon = this._percentageToIcon(percentage) + (state == UPDeviceState.CHARGING ? '-charging' : '');
|
||||
}
|
||||
|
||||
this._icon = new St.Icon({ icon_name: icon,
|
||||
icon_type: St.IconType.SYMBOLIC,
|
||||
style_class: 'popup-menu-icon' });
|
||||
|
||||
this._box.add_actor(this._icon);
|
||||
this._box.add_actor(this._label);
|
||||
this.addActor(this._box);
|
||||
|
||||
let percentBin = new St.Bin({ x_align: St.Align.END });
|
||||
let percentLabel = new St.Label({ text: '%d%%'.format(Math.round(percentage)) });
|
||||
percentBin.child = percentLabel;
|
||||
this.addActor(percentBin);
|
||||
},
|
||||
|
||||
_percentageToIcon: function(p) {
|
||||
if (p > 60)
|
||||
return 'battery-full';
|
||||
if (p > 30)
|
||||
return 'battery-good';
|
||||
if (p > 10)
|
||||
return 'battery-low';
|
||||
if (p > 0)
|
||||
return 'battery-caution';
|
||||
return 'battery-empty';
|
||||
}
|
||||
}
|
222
js/ui/status/volume.js
Normal file
222
js/ui/status/volume.js
Normal file
@ -0,0 +1,222 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const DBus = imports.dbus;
|
||||
const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Gvc = imports.gi.Gvc;
|
||||
const Signals = imports.signals;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const VOLUME_MAX = 65536.0; /* PA_VOLUME_NORM */
|
||||
const VOLUME_ADJUSTMENT_STEP = 0.05; /* Volume adjustment step in % */
|
||||
|
||||
function Indicator() {
|
||||
this._init.apply(this, arguments);
|
||||
}
|
||||
|
||||
Indicator.prototype = {
|
||||
__proto__: PanelMenu.SystemStatusButton.prototype,
|
||||
|
||||
_init: function() {
|
||||
PanelMenu.SystemStatusButton.prototype._init.call(this, 'audio-volume-muted', null);
|
||||
|
||||
this._control = new Gvc.MixerControl({ name: 'GNOME Shell Volume Control' });
|
||||
this._control.connect('ready', Lang.bind(this, this._onControlReady));
|
||||
this._control.connect('default-sink-changed', Lang.bind(this, this._readOutput));
|
||||
this._control.connect('default-source-changed', Lang.bind(this, this._readInput));
|
||||
this._control.connect('stream-added', Lang.bind(this, this._maybeShowInput));
|
||||
this._control.connect('stream-removed', Lang.bind(this, this._maybeShowInput));
|
||||
|
||||
this._output = null;
|
||||
this._outputVolumeId = 0;
|
||||
this._outputMutedId = 0;
|
||||
this._outputSwitch = new PopupMenu.PopupSwitchMenuItem(_("Volume: Muted"), false);
|
||||
this._outputSwitch.connect('toggled', Lang.bind(this, this._switchToggled, '_output'));
|
||||
this._outputSlider = new PopupMenu.PopupSliderMenuItem(0);
|
||||
this._outputSlider.connect('value-changed', Lang.bind(this, this._sliderChanged, '_output'));
|
||||
this._outputSlider.connect('drag-end', Lang.bind(this, this._notifyVolumeChange));
|
||||
this.menu.addMenuItem(this._outputSwitch);
|
||||
this.menu.addMenuItem(this._outputSlider);
|
||||
|
||||
this._separator = new PopupMenu.PopupSeparatorMenuItem();
|
||||
this.menu.addMenuItem(this._separator);
|
||||
|
||||
this._input = null;
|
||||
this._inputVolumeId = 0;
|
||||
this._inputMutedId = 0;
|
||||
this._inputSwitch = new PopupMenu.PopupSwitchMenuItem(_("Microphone: Muted"), false);
|
||||
this._inputSwitch.connect('toggled', Lang.bind(this, this._switchToggled, '_input'));
|
||||
this._inputSlider = new PopupMenu.PopupSliderMenuItem(0);
|
||||
this._inputSlider.connect('value-changed', Lang.bind(this, this._sliderChanged, '_input'));
|
||||
this._inputSlider.connect('drag-end', Lang.bind(this, this._notifyVolumeChange));
|
||||
this.menu.addMenuItem(this._inputSwitch);
|
||||
this.menu.addMenuItem(this._inputSlider);
|
||||
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
this.menu.addAction(_("Sound Settings"), function() {
|
||||
let p = new Shell.Process({ args: ['gnome-control-center', 'sound'] });
|
||||
p.run();
|
||||
});
|
||||
|
||||
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
|
||||
this._control.open();
|
||||
},
|
||||
|
||||
_onScrollEvent: function(actor, event) {
|
||||
let direction = event.get_scroll_direction();
|
||||
let currentVolume = this._output.volume;
|
||||
|
||||
if (direction == Clutter.ScrollDirection.DOWN) {
|
||||
this._output.volume = Math.max(0, currentVolume - VOLUME_MAX * VOLUME_ADJUSTMENT_STEP);
|
||||
this._output.push_volume();
|
||||
}
|
||||
else if (direction == Clutter.ScrollDirection.UP) {
|
||||
this._output.volume = Math.min(VOLUME_MAX, currentVolume + VOLUME_MAX * VOLUME_ADJUSTMENT_STEP);
|
||||
this._output.push_volume();
|
||||
}
|
||||
},
|
||||
|
||||
_onControlReady: function() {
|
||||
this._readOutput();
|
||||
this._readInput();
|
||||
},
|
||||
|
||||
_readOutput: function() {
|
||||
if (this._outputVolumeId) {
|
||||
this._output.disconnect(this._outputVolumeId);
|
||||
this._output.disconnect(this._outputMutedId);
|
||||
this._outputVolumeId = 0;
|
||||
this._outputMutedId = 0;
|
||||
}
|
||||
this._output = this._control.get_default_sink();
|
||||
if (this._output) {
|
||||
this._outputMutedId = this._output.connect('notify::is-muted', Lang.bind(this, this._mutedChanged, '_output'));
|
||||
this._outputVolumeId = this._output.connect('notify::volume', Lang.bind(this, this._volumeChanged, '_output'));
|
||||
this._mutedChanged (null, null, '_output');
|
||||
this._volumeChanged (null, null, '_output');
|
||||
} else {
|
||||
this._outputSwitch.label.text = _("Volume: Muted");
|
||||
this._outputSwitch.setToggleState(false);
|
||||
this.setIcon('audio-volume-muted-symbolic');
|
||||
}
|
||||
},
|
||||
|
||||
_readInput: function() {
|
||||
if (this._inputVolumeId) {
|
||||
this._input.disconnect(this._inputVolumeId);
|
||||
this._input.disconnect(this._inputMutedId);
|
||||
this._inputVolumeId = 0;
|
||||
this._inputMutedId = 0;
|
||||
}
|
||||
this._input = this._control.get_default_source();
|
||||
if (this._input) {
|
||||
this._inputMutedId = this._input.connect('notify::is-muted', Lang.bind(this, this._mutedChanged, '_input'));
|
||||
this._inputVolumeId = this._input.connect('notify::volume', Lang.bind(this, this._volumeChanged, '_input'));
|
||||
this._mutedChanged (null, null, '_input');
|
||||
this._volumeChanged (null, null, '_input');
|
||||
} else {
|
||||
this._separator.actor.hide();
|
||||
this._inputSwitch.actor.hide();
|
||||
this._inputSlider.actor.hide();
|
||||
}
|
||||
},
|
||||
|
||||
_maybeShowInput: function() {
|
||||
// only show input widgets if any application is recording audio
|
||||
let showInput = false;
|
||||
let recordingApps = this._control.get_source_outputs();
|
||||
if (this._input && recordingApps) {
|
||||
for (let i = 0; i < recordingApps.length; i++) {
|
||||
let outputStream = recordingApps[i];
|
||||
let id = outputStream.get_application_id();
|
||||
// but skip gnome-volume-control and pavucontrol
|
||||
// (that appear as recording because they show the input level)
|
||||
if (!id || (id != 'org.gnome.VolumeControl' && id != 'org.PulseAudio.pavucontrol')) {
|
||||
showInput = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (showInput) {
|
||||
this._separator.actor.show();
|
||||
this._inputSwitch.actor.show();
|
||||
this._inputSlider.actor.show();
|
||||
} else {
|
||||
this._separator.actor.hide();
|
||||
this._inputSwitch.actor.hide();
|
||||
this._inputSlider.actor.hide();
|
||||
}
|
||||
},
|
||||
|
||||
_volumeToIcon: function(volume) {
|
||||
if (volume <= 0) {
|
||||
return 'audio-volume-muted';
|
||||
} else {
|
||||
let v = volume / VOLUME_MAX;
|
||||
if (v < 0.33)
|
||||
return 'audio-volume-low';
|
||||
if (v > 0.8)
|
||||
return 'audio-volume-high';
|
||||
return 'audio-volume-medium';
|
||||
}
|
||||
},
|
||||
|
||||
_sliderChanged: function(slider, value, property) {
|
||||
if (this[property] == null) {
|
||||
log ('Volume slider changed for %s, but %s does not exist'.format(property, property));
|
||||
return;
|
||||
}
|
||||
this[property].volume = value * VOLUME_MAX;
|
||||
this[property].push_volume();
|
||||
},
|
||||
|
||||
_notifyVolumeChange: function() {
|
||||
global.play_theme_sound('audio-volume-change');
|
||||
},
|
||||
|
||||
_switchToggled: function(switchItem, state, property) {
|
||||
if (this[property] == null) {
|
||||
log ('Volume mute switch toggled for %s, but %s does not exist'.format(property, property));
|
||||
return;
|
||||
}
|
||||
this[property].change_is_muted(!state);
|
||||
this._notifyVolumeChange();
|
||||
},
|
||||
|
||||
_mutedChanged: function(object, param_spec, property) {
|
||||
let muted = this[property].is_muted;
|
||||
let toggleSwitch = this[property+'Switch'];
|
||||
toggleSwitch.setToggleState(!muted);
|
||||
this._updateLabel(property);
|
||||
if (property == '_output') {
|
||||
if (muted)
|
||||
this.setIcon('audio-volume-muted');
|
||||
else
|
||||
this.setIcon(this._volumeToIcon(this._output.volume));
|
||||
}
|
||||
},
|
||||
|
||||
_volumeChanged: function(object, param_spec, property) {
|
||||
this[property+'Slider'].setValue(this[property].volume / VOLUME_MAX);
|
||||
this._updateLabel(property);
|
||||
if (property == '_output' && !this._output.is_muted)
|
||||
this.setIcon(this._volumeToIcon(this._output.volume));
|
||||
},
|
||||
|
||||
_updateLabel: function(property) {
|
||||
let label;
|
||||
if (this[property].is_muted)
|
||||
label = (property == '_output' ? _("Volume: Muted") : _("Microphone: Muted"));
|
||||
else
|
||||
label = (property == '_output' ? _("Volume: %3.0f%%") : _("Microphone: %3.0f%%")).format(this[property].volume / VOLUME_MAX * 100);
|
||||
this[property+'Switch'].label.text = label;
|
||||
}
|
||||
};
|
@ -9,7 +9,9 @@ const NotificationDaemon = imports.ui.notificationDaemon;
|
||||
|
||||
const STANDARD_TRAY_ICON_IMPLEMENTATIONS = {
|
||||
'bluetooth-applet': 'bluetooth',
|
||||
'gnome-volume-control-applet': 'volume',
|
||||
'gnome-volume-control-applet': 'volume', // renamed to gnome-sound-applet
|
||||
// when moved to control center
|
||||
'gnome-sound-applet': 'volume',
|
||||
'nm-applet': 'network',
|
||||
'gnome-power-manager': 'battery',
|
||||
'keyboard': 'keyboard',
|
||||
@ -36,7 +38,7 @@ StatusIconDispatcher.prototype = {
|
||||
},
|
||||
|
||||
_onTrayIconAdded: function(o, icon) {
|
||||
let wmClass = icon.wm_class.toLowerCase();
|
||||
let wmClass = (icon.wm_class || 'unknown').toLowerCase();
|
||||
let role = STANDARD_TRAY_ICON_IMPLEMENTATIONS[wmClass];
|
||||
if (role)
|
||||
this.emit('status-icon-added', icon, role);
|
||||
@ -45,7 +47,7 @@ StatusIconDispatcher.prototype = {
|
||||
},
|
||||
|
||||
_onTrayIconRemoved: function(o, icon) {
|
||||
let wmClass = icon.wm_class.toLowerCase();
|
||||
let wmClass = (icon.wm_class || 'unknown').toLowerCase();
|
||||
let role = STANDARD_TRAY_ICON_IMPLEMENTATIONS[wmClass];
|
||||
if (role)
|
||||
this.emit('status-icon-removed', icon);
|
||||
|
@ -31,8 +31,11 @@ StatusMenuButton.prototype = {
|
||||
this.actor.set_child(box);
|
||||
|
||||
this._gdm = Gdm.UserManager.ref_default();
|
||||
this._gdm.queue_load()
|
||||
|
||||
this._user = this._gdm.get_user(GLib.get_user_name());
|
||||
this._presence = new GnomeSession.Presence();
|
||||
this._presenceItems = {};
|
||||
|
||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||
|
||||
@ -40,35 +43,39 @@ StatusMenuButton.prototype = {
|
||||
box.add(this._iconBox, { y_align: St.Align.MIDDLE, y_fill: false });
|
||||
|
||||
let textureCache = St.TextureCache.get_default();
|
||||
this._availableIcon = textureCache.load_icon_name('user-available', St.IconType.SYMBOLIC, 16);
|
||||
this._busyIcon = textureCache.load_icon_name('user-busy', St.IconType.SYMBOLIC, 16);
|
||||
this._invisibleIcon = textureCache.load_icon_name('user-invisible', St.IconType.SYMBOLIC, 16);
|
||||
this._idleIcon = textureCache.load_icon_name('user-idle', St.IconType.SYMBOLIC, 16);
|
||||
this._availableIcon = new St.Icon({ icon_name: 'user-available', style_class: 'popup-menu-icon' });
|
||||
this._busyIcon = new St.Icon({ icon_name: 'user-busy', style_class: 'popup-menu-icon' });
|
||||
this._invisibleIcon = new St.Icon({ icon_name: 'user-invisible', style_class: 'popup-menu-icon' });
|
||||
this._idleIcon = new St.Icon({ icon_name: 'user-idle', style_class: 'popup-menu-icon' });
|
||||
|
||||
this._presence.connect('StatusChanged', Lang.bind(this, this._updatePresenceIcon));
|
||||
this._presence.getStatus(Lang.bind(this, this._updatePresenceIcon));
|
||||
|
||||
this._name = new St.Label({ text: this._user.get_real_name() });
|
||||
this._name = new St.Label();
|
||||
box.add(this._name, { y_align: St.Align.MIDDLE, y_fill: false });
|
||||
this._userNameChangedId = this._user.connect('notify::display-name', Lang.bind(this, this._updateUserName));
|
||||
this._userLoadedId = this._user.connect('notify::is-loaded', Lang.bind(this, this._updateUserName));
|
||||
this._userChangedId = this._user.connect('changed', Lang.bind(this, this._updateUserName));
|
||||
|
||||
this._createSubMenu();
|
||||
this._gdm.connect('users-loaded', Lang.bind(this, this._updateSwitchUser));
|
||||
this._gdm.connect('notify::is-loaded', Lang.bind(this, this._updateSwitchUser));
|
||||
this._gdm.connect('user-added', Lang.bind(this, this._updateSwitchUser));
|
||||
this._gdm.connect('user-removed', Lang.bind(this, this._updateSwitchUser));
|
||||
},
|
||||
|
||||
_onDestroy: function() {
|
||||
this._user.disconnect(this._userNameChangedId);
|
||||
this._user.disconnect(this._userLoadedId);
|
||||
this._user.disconnect(this._userChangedId);
|
||||
},
|
||||
|
||||
_updateUserName: function() {
|
||||
this._name.set_text(this._user.get_real_name());
|
||||
if (this._user.is_loaded)
|
||||
this._name.set_text(this._user.get_real_name());
|
||||
else
|
||||
this._name.set_text("");
|
||||
},
|
||||
|
||||
_updateSwitchUser: function() {
|
||||
let users = this._gdm.list_users();
|
||||
if (users.length > 1)
|
||||
if (this._gdm.can_switch ())
|
||||
this._loginScreenItem.actor.show();
|
||||
else
|
||||
this._loginScreenItem.actor.hide();
|
||||
@ -83,6 +90,9 @@ StatusMenuButton.prototype = {
|
||||
this._iconBox.child = this._invisibleIcon;
|
||||
else
|
||||
this._iconBox.child = this._idleIcon;
|
||||
|
||||
for (let itemStatus in this._presenceItems)
|
||||
this._presenceItems[itemStatus].setShowDot(itemStatus == status);
|
||||
},
|
||||
|
||||
_createSubMenu: function() {
|
||||
@ -91,43 +101,48 @@ StatusMenuButton.prototype = {
|
||||
item = new PopupMenu.PopupImageMenuItem(_("Available"), 'user-available', true);
|
||||
item.connect('activate', Lang.bind(this, this._setPresenceStatus, GnomeSession.PresenceStatus.AVAILABLE));
|
||||
this.menu.addMenuItem(item);
|
||||
this._presenceItems[GnomeSession.PresenceStatus.AVAILABLE] = item;
|
||||
|
||||
item = new PopupMenu.PopupImageMenuItem(_("Busy"), 'user-busy', true);
|
||||
item.connect('activate', Lang.bind(this, this._setPresenceStatus, GnomeSession.PresenceStatus.BUSY));
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupImageMenuItem(_("Invisible"), 'user-invisible', true);
|
||||
item.connect('activate', Lang.bind(this, this._setPresenceStatus, GnomeSession.PresenceStatus.INVISIBLE));
|
||||
this.menu.addMenuItem(item);
|
||||
this._presenceItems[GnomeSession.PresenceStatus.BUSY] = item;
|
||||
|
||||
item = new PopupMenu.PopupSeparatorMenuItem();
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupImageMenuItem(_("Account Information..."), 'user-info');
|
||||
item.connect('activate', Lang.bind(this, this._onAccountInformationActivate));
|
||||
item = new PopupMenu.PopupMenuItem(_("My Account..."));
|
||||
item.connect('activate', Lang.bind(this, this._onMyAccountActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupImageMenuItem(_("System Settings..."), 'preferences-desktop');
|
||||
item = new PopupMenu.PopupMenuItem(_("System Settings..."));
|
||||
item.connect('activate', Lang.bind(this, this._onPreferencesActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupSeparatorMenuItem();
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupImageMenuItem(_("Lock Screen"), 'system-lock-screen');
|
||||
item = new PopupMenu.PopupMenuItem(_("Lock Screen"));
|
||||
item.connect('activate', Lang.bind(this, this._onLockScreenActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupImageMenuItem(_("Switch User"), 'system-users');
|
||||
item = new PopupMenu.PopupMenuItem(_("Switch User"));
|
||||
item.connect('activate', Lang.bind(this, this._onLoginScreenActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
this._loginScreenItem = item;
|
||||
|
||||
item = new PopupMenu.PopupImageMenuItem(_("Log Out..."), 'system-log-out');
|
||||
item = new PopupMenu.PopupMenuItem(_("Log Out..."));
|
||||
item.connect('activate', Lang.bind(this, this._onQuitSessionActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupImageMenuItem(_("Shut Down..."), 'system-shutdown');
|
||||
item = new PopupMenu.PopupSeparatorMenuItem();
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("Suspend"));
|
||||
item.connect('activate', Lang.bind(this, this._onShutDownActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("Shut Down..."));
|
||||
item.connect('activate', Lang.bind(this, this._onShutDownActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
},
|
||||
@ -136,7 +151,7 @@ StatusMenuButton.prototype = {
|
||||
this._presence.setStatus(status);
|
||||
},
|
||||
|
||||
_onAccountInformationActivate: function() {
|
||||
_onMyAccountActivate: function() {
|
||||
Main.overview.hide();
|
||||
this._spawn(['gnome-about-me']);
|
||||
},
|
||||
|
@ -347,7 +347,9 @@ ContactManager.prototype = {
|
||||
let uri = GLib.filename_to_uri(file, null);
|
||||
iconBox.child = textureCache.load_uri_async(uri, iconBox._size, iconBox._size);
|
||||
} else {
|
||||
iconBox.child = textureCache.load_icon_name('stock_person', St.IconType.FULLCOLOR, iconBox._size);
|
||||
iconBox.child = new St.Icon({ icon_name: 'stock_person',
|
||||
icon_type: St.IconType.FULLCOLOR,
|
||||
icon_size: iconBox._size });
|
||||
}
|
||||
},
|
||||
|
||||
@ -467,11 +469,15 @@ Source.prototype = {
|
||||
}));
|
||||
}
|
||||
|
||||
this._notification = undefined;
|
||||
this._sentMessages = [];
|
||||
|
||||
// Since we only create sources when receiving a message, this
|
||||
// is a plausible default
|
||||
this._presence = Telepathy.ConnectionPresenceType.AVAILABLE;
|
||||
|
||||
this._channelText = new Telepathy.ChannelText(DBus.session, connName, channelPath);
|
||||
this._sentId = this._channelText.connect('Sent', Lang.bind(this, this._messageSent));
|
||||
this._receivedId = this._channelText.connect('Received', Lang.bind(this, this._messageReceived));
|
||||
|
||||
this._channelText.ListPendingMessagesRemote(false, Lang.bind(this, this._gotPendingMessages));
|
||||
@ -484,7 +490,7 @@ Source.prototype = {
|
||||
this.ICON_SIZE);
|
||||
},
|
||||
|
||||
clicked: function() {
|
||||
_notificationClicked: function(notification) {
|
||||
channelDispatcher.EnsureChannelRemote(this._accountPath,
|
||||
{ 'org.freedesktop.Telepathy.Channel.ChannelType': Telepathy.CHANNEL_TEXT_NAME,
|
||||
'org.freedesktop.Telepathy.Channel.TargetHandle': this._targetHandle,
|
||||
@ -492,8 +498,6 @@ Source.prototype = {
|
||||
global.get_current_time(),
|
||||
'',
|
||||
Lang.bind(this, this._gotChannelRequest));
|
||||
|
||||
MessageTray.Source.prototype.clicked.call(this);
|
||||
},
|
||||
|
||||
_gotChannelRequest: function (chanReqPath, ex) {
|
||||
@ -517,6 +521,7 @@ Source.prototype = {
|
||||
_channelClosed: function() {
|
||||
this._channel.disconnect(this._closedId);
|
||||
this._channelText.disconnect(this._receivedId);
|
||||
this._channelText.disconnect(this._sentId);
|
||||
this.destroy();
|
||||
},
|
||||
|
||||
@ -524,17 +529,30 @@ Source.prototype = {
|
||||
if (!Main.messageTray.contains(this))
|
||||
Main.messageTray.add(this);
|
||||
|
||||
if (!this._notification)
|
||||
if (!this._notification) {
|
||||
this._notification = new Notification(this);
|
||||
for (let i = 0; i < this._sentMessages.length; i ++)
|
||||
this._notification.appendMessage(this._sentMessages[i], false, true);
|
||||
this._sentMessages = [];
|
||||
}
|
||||
},
|
||||
|
||||
_messageReceived: function(channel, id, timestamp, sender,
|
||||
type, flags, text) {
|
||||
this._ensureNotification();
|
||||
this._notification.appendMessage(text);
|
||||
this._notification.appendMessage(text, false, false);
|
||||
this.notify(this._notification);
|
||||
},
|
||||
|
||||
_messageSent: function(channel, timestamp, type, text) {
|
||||
if (this._notification) {
|
||||
this._notification.appendMessage(text, false, true);
|
||||
this.notify(this._notification);
|
||||
} else {
|
||||
this._sentMessages.push(text);
|
||||
}
|
||||
},
|
||||
|
||||
respond: function(text) {
|
||||
this._channelText.SendRemote(Telepathy.ChannelTextMessageType.NORMAL, text);
|
||||
},
|
||||
@ -565,7 +583,7 @@ Source.prototype = {
|
||||
msg += ' <i>(' + GLib.markup_escape_text(message, -1) + ')</i>';
|
||||
|
||||
this._ensureNotification();
|
||||
this._notification.appendMessage(msg, true);
|
||||
this._notification.appendMessage(msg, true, false);
|
||||
if (notify)
|
||||
this.notify(this._notification);
|
||||
}
|
||||
@ -588,12 +606,12 @@ Notification.prototype = {
|
||||
this._history = [];
|
||||
},
|
||||
|
||||
appendMessage: function(text, asTitle) {
|
||||
appendMessage: function(text, asTitle, sent) {
|
||||
if (asTitle)
|
||||
this.update(text, null, { customContent: true });
|
||||
else
|
||||
this.update(this.source.title, text, { customContent: true });
|
||||
this._append(text, 'chat-received');
|
||||
this._append(text, sent ? 'chat-sent' : 'chat-received');
|
||||
},
|
||||
|
||||
_append: function(text, style) {
|
||||
@ -635,7 +653,6 @@ Notification.prototype = {
|
||||
return;
|
||||
|
||||
this._responseEntry.set_text('');
|
||||
this._append(text, 'chat-sent');
|
||||
this.source.respond(text);
|
||||
}
|
||||
};
|
||||
|
628
js/ui/viewSelector.js
Normal file
628
js/ui/viewSelector.js
Normal file
@ -0,0 +1,628 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Meta = imports.gi.Meta;
|
||||
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;
|
||||
const SearchDisplay = imports.ui.searchDisplay;
|
||||
const Tweener = imports.ui.tweener;
|
||||
|
||||
|
||||
function SearchEntry() {
|
||||
this._init();
|
||||
}
|
||||
|
||||
SearchEntry.prototype = {
|
||||
_init : function() {
|
||||
this.actor = new St.Entry({ name: 'searchEntry',
|
||||
hint_text: _("Search your computer") });
|
||||
this.entry = this.actor.clutter_text;
|
||||
|
||||
this.actor.clutter_text.connect('text-changed', Lang.bind(this,
|
||||
function() {
|
||||
if (this.isActive())
|
||||
this.actor.set_secondary_icon_from_file(global.imagedir +
|
||||
'close-black.svg');
|
||||
else
|
||||
this.actor.set_secondary_icon_from_file(null);
|
||||
}));
|
||||
this.actor.connect('secondary-icon-clicked', Lang.bind(this,
|
||||
function() {
|
||||
this.reset();
|
||||
}));
|
||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||
|
||||
global.stage.connect('notify::key-focus', Lang.bind(this, this._updateCursorVisibility));
|
||||
|
||||
this.pane = null;
|
||||
|
||||
this._capturedEventId = 0;
|
||||
},
|
||||
|
||||
_updateCursorVisibility: function() {
|
||||
let focus = global.stage.get_key_focus();
|
||||
if (focus == global.stage || focus == this.entry)
|
||||
this.entry.set_cursor_visible(true);
|
||||
else
|
||||
this.entry.set_cursor_visible(false);
|
||||
},
|
||||
|
||||
show: function() {
|
||||
if (this._capturedEventId == 0)
|
||||
this._capturedEventId = global.stage.connect('captured-event',
|
||||
Lang.bind(this, this._onCapturedEvent));
|
||||
this.entry.set_cursor_visible(true);
|
||||
this.entry.set_selection(0, 0);
|
||||
},
|
||||
|
||||
hide: function() {
|
||||
if (this._capturedEventId > 0) {
|
||||
global.stage.disconnect(this._capturedEventId);
|
||||
this._capturedEventId = 0;
|
||||
}
|
||||
},
|
||||
|
||||
reset: function () {
|
||||
let [x, y, mask] = global.get_pointer();
|
||||
let actor = global.stage.get_actor_at_pos (Clutter.PickMode.REACTIVE,
|
||||
x, y);
|
||||
// this.actor is never hovered directly, only its clutter_text and icon
|
||||
let hovered = this.actor == actor.get_parent();
|
||||
|
||||
this.actor.set_hover(hovered);
|
||||
|
||||
this.entry.text = '';
|
||||
|
||||
// Return focus to the stage
|
||||
global.stage.set_key_focus(null);
|
||||
|
||||
this.entry.set_cursor_visible(true);
|
||||
this.entry.set_selection(0, 0);
|
||||
},
|
||||
|
||||
getText: function () {
|
||||
return this.entry.get_text().replace(/^\s+/g, '').replace(/\s+$/g, '');
|
||||
},
|
||||
|
||||
// some search term has been entered
|
||||
isActive: function() {
|
||||
return this.actor.get_text() != '';
|
||||
},
|
||||
|
||||
// the entry does not show the hint
|
||||
_isActivated: function() {
|
||||
return this.entry.text == this.actor.get_text();
|
||||
},
|
||||
|
||||
_onCapturedEvent: function(actor, event) {
|
||||
let source = event.get_source();
|
||||
let panelEvent = source && Main.panel.actor.contains(source);
|
||||
|
||||
switch (event.type()) {
|
||||
case Clutter.EventType.BUTTON_PRESS:
|
||||
// the user clicked outside after activating the entry, but
|
||||
// with no search term entered - cancel the search
|
||||
if (source != this.entry && this.entry.text == '') {
|
||||
this.reset();
|
||||
// allow only panel events to continue
|
||||
return !panelEvent;
|
||||
}
|
||||
return false;
|
||||
case Clutter.EventType.KEY_PRESS:
|
||||
// If neither the stage nor our entry have key focus, some
|
||||
// "special" actor grabbed the focus (run dialog, looking
|
||||
// glass); we don't want to interfere with that
|
||||
let focus = global.stage.get_key_focus();
|
||||
if (focus != global.stage && focus != this.entry)
|
||||
return false;
|
||||
|
||||
let sym = event.get_key_symbol();
|
||||
|
||||
// If we have an active search, Escape cancels it - if we
|
||||
// haven't, the key is ignored
|
||||
if (sym == Clutter.Escape)
|
||||
if (this._isActivated()) {
|
||||
this.reset();
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Ignore non-printable keys
|
||||
if (!Clutter.keysym_to_unicode(sym))
|
||||
return false;
|
||||
|
||||
// Search started - move the key focus to the entry and
|
||||
// "repeat" the event
|
||||
if (!this._isActivated()) {
|
||||
global.stage.set_key_focus(this.entry);
|
||||
this.entry.event(event, false);
|
||||
}
|
||||
|
||||
return false;
|
||||
default:
|
||||
// Suppress all other events outside the panel while the entry
|
||||
// is activated and no search has been entered - any click
|
||||
// outside the entry will cancel the search
|
||||
return (this.entry.text == '' && !panelEvent);
|
||||
}
|
||||
},
|
||||
|
||||
_onDestroy: function() {
|
||||
if (this._capturedEventId > 0) {
|
||||
global.stage.disconnect(this._capturedEventId);
|
||||
this._capturedEventId = 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(SearchEntry.prototype);
|
||||
|
||||
|
||||
function BaseTab(titleActor, pageActor) {
|
||||
this._init(titleActor, pageActor);
|
||||
}
|
||||
|
||||
BaseTab.prototype = {
|
||||
_init: function(titleActor, pageActor) {
|
||||
this.title = titleActor;
|
||||
this.page = new St.Bin({ child: pageActor,
|
||||
x_align: St.Align.START,
|
||||
y_align: St.Align.START,
|
||||
x_fill: true,
|
||||
y_fill: true,
|
||||
style_class: 'view-tab-page' });
|
||||
|
||||
this.visible = false;
|
||||
},
|
||||
|
||||
show: function() {
|
||||
this.visible = true;
|
||||
this.page.opacity = 0;
|
||||
this.page.show();
|
||||
|
||||
Tweener.addTween(this.page,
|
||||
{ opacity: 255,
|
||||
time: 0.1,
|
||||
transition: 'easeOutQuad' });
|
||||
},
|
||||
|
||||
hide: function() {
|
||||
this.visible = false;
|
||||
Tweener.addTween(this.page,
|
||||
{ opacity: 0,
|
||||
time: 0.1,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: Lang.bind(this,
|
||||
function() {
|
||||
this.page.hide();
|
||||
})
|
||||
});
|
||||
},
|
||||
|
||||
_activate: function() {
|
||||
this.emit('activated');
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(BaseTab.prototype);
|
||||
|
||||
|
||||
function ViewTab(label, pageActor) {
|
||||
this._init(label, pageActor);
|
||||
}
|
||||
|
||||
ViewTab.prototype = {
|
||||
__proto__: BaseTab.prototype,
|
||||
|
||||
_init: function(label, pageActor) {
|
||||
let titleActor = new St.Button({ label: label,
|
||||
style_class: 'view-tab-title' });
|
||||
titleActor.connect('clicked', Lang.bind(this, this._activate));
|
||||
|
||||
BaseTab.prototype._init.call(this, titleActor, pageActor);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function SearchTab() {
|
||||
this._init();
|
||||
}
|
||||
|
||||
SearchTab.prototype = {
|
||||
__proto__: BaseTab.prototype,
|
||||
|
||||
_init: function() {
|
||||
this._searchActive = false;
|
||||
this._searchPending = false;
|
||||
this._keyPressId = 0;
|
||||
this._searchTimeoutId = 0;
|
||||
|
||||
this._searchSystem = new Search.SearchSystem();
|
||||
|
||||
this._searchEntry = new SearchEntry();
|
||||
this._searchResults = new SearchDisplay.SearchResults(this._searchSystem);
|
||||
BaseTab.prototype._init.call(this,
|
||||
this._searchEntry.actor,
|
||||
this._searchResults.actor);
|
||||
this._searchEntry.entry.connect('text-changed',
|
||||
Lang.bind(this, this._onTextChanged));
|
||||
this._searchEntry.entry.connect('activate', Lang.bind(this, function (se) {
|
||||
if (this._searchTimeoutId > 0) {
|
||||
Mainloop.source_remove(this._searchTimeoutId);
|
||||
this._doSearch();
|
||||
}
|
||||
this._searchResults.activateSelected();
|
||||
return true;
|
||||
}));
|
||||
},
|
||||
|
||||
setFindAsYouType: function(enabled) {
|
||||
if (enabled)
|
||||
this._searchEntry.show();
|
||||
else
|
||||
this._searchEntry.hide();
|
||||
},
|
||||
|
||||
show: function() {
|
||||
BaseTab.prototype.show.call(this);
|
||||
|
||||
if (this._keyPressId == 0)
|
||||
this._keyPressId = global.stage.connect('key-press-event',
|
||||
Lang.bind(this, this._onKeyPress));
|
||||
},
|
||||
|
||||
hide: function() {
|
||||
BaseTab.prototype.hide.call(this);
|
||||
|
||||
if (this._keyPressId > 0) {
|
||||
global.stage.disconnect(this._keyPressId);
|
||||
this._keyPressId = 0;
|
||||
}
|
||||
this._searchEntry.reset();
|
||||
},
|
||||
|
||||
addSearchProvider: function(provider) {
|
||||
this._searchSystem.registerProvider(provider);
|
||||
this._searchResults.createProviderMeta(provider);
|
||||
},
|
||||
|
||||
_onTextChanged: function (se, prop) {
|
||||
let searchPreviouslyActive = this._searchActive;
|
||||
this._searchActive = this._searchEntry.isActive();
|
||||
this._searchPending = this._searchActive && !searchPreviouslyActive;
|
||||
if (this._searchPending) {
|
||||
this._searchResults.startingSearch();
|
||||
}
|
||||
if (this._searchActive) {
|
||||
this._activate();
|
||||
} else {
|
||||
this.emit('search-cancelled');
|
||||
}
|
||||
if (!this._searchActive) {
|
||||
if (this._searchTimeoutId > 0) {
|
||||
Mainloop.source_remove(this._searchTimeoutId);
|
||||
this._searchTimeoutId = 0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (this._searchTimeoutId > 0)
|
||||
return;
|
||||
this._searchTimeoutId = Mainloop.timeout_add(150, Lang.bind(this, this._doSearch));
|
||||
},
|
||||
|
||||
_onKeyPress: function(stage, event) {
|
||||
// If neither the stage nor the search entry have key focus, some
|
||||
// "special" actor grabbed the focus (run dialog, looking glass);
|
||||
// we don't want to interfere with that
|
||||
let focus = stage.get_key_focus();
|
||||
if (focus != stage && focus != this._searchEntry.entry)
|
||||
return false;
|
||||
|
||||
let symbol = event.get_key_symbol();
|
||||
if (symbol == Clutter.Up) {
|
||||
if (!this._searchActive)
|
||||
return true;
|
||||
this._searchResults.selectUp(false);
|
||||
|
||||
return true;
|
||||
} else if (symbol == Clutter.Down) {
|
||||
if (!this._searchActive)
|
||||
return true;
|
||||
|
||||
this._searchResults.selectDown(false);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
|
||||
_doSearch: function () {
|
||||
this._searchTimeoutId = 0;
|
||||
let text = this._searchEntry.getText();
|
||||
this._searchResults.updateSearch(text);
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function ViewSelector() {
|
||||
this._init();
|
||||
}
|
||||
|
||||
ViewSelector.prototype = {
|
||||
_init : function() {
|
||||
this.actor = new St.BoxLayout({ name: 'viewSelector',
|
||||
vertical: true });
|
||||
|
||||
// The tab bar is located at the top of the view selector and
|
||||
// holds both "normal" tab labels and the search entry. The former
|
||||
// is left aligned, the latter right aligned - unless the text
|
||||
// direction is RTL, in which case the order is reversed.
|
||||
this._tabBar = new Shell.GenericContainer();
|
||||
this._tabBar.connect('get-preferred-width',
|
||||
Lang.bind(this, this._getPreferredTabBarWidth));
|
||||
this._tabBar.connect('get-preferred-height',
|
||||
Lang.bind(this, this._getPreferredTabBarHeight));
|
||||
this._tabBar.connect('allocate',
|
||||
Lang.bind(this, this._allocateTabBar));
|
||||
this.actor.add(this._tabBar);
|
||||
|
||||
// Box to hold "normal" tab labels
|
||||
this._tabBox = new St.BoxLayout({ name: 'viewSelectorTabBar' });
|
||||
this._tabBar.add_actor(this._tabBox);
|
||||
|
||||
// The searchArea just holds the entry
|
||||
this._searchArea = new St.Bin({ name: 'searchArea' });
|
||||
this._tabBar.add_actor(this._searchArea);
|
||||
|
||||
// The page area holds the tab pages. Every page is given the
|
||||
// area's full allocation, so that the pages would appear on top
|
||||
// of each other if the inactive ones weren't hidden.
|
||||
this._pageArea = new Shell.Stack();
|
||||
this.actor.add(this._pageArea, { x_fill: true,
|
||||
y_fill: true,
|
||||
expand: true });
|
||||
|
||||
this._tabs = [];
|
||||
this._activeTab = null;
|
||||
|
||||
this._searchTab = new SearchTab();
|
||||
this._searchArea.set_child(this._searchTab.title);
|
||||
this._addTab(this._searchTab);
|
||||
|
||||
this._searchTab.connect('search-cancelled', Lang.bind(this,
|
||||
function() {
|
||||
this._switchTab(this._activeTab);
|
||||
}));
|
||||
|
||||
this._keyPressId = 0;
|
||||
this._itemDragBeginId = 0;
|
||||
this._overviewHidingId = 0;
|
||||
|
||||
// Public constraints which may be used to tie actors' height or
|
||||
// vertical position to the current tab's content; as the content's
|
||||
// height and position depend on the view selector's style properties
|
||||
// (e.g. font size, padding, spacing, ...) it would be extremely hard
|
||||
// and ugly to get these from the outside. While it would be possible
|
||||
// to use position and height properties directly, outside code would
|
||||
// need to ensure that the content is properly allocated before
|
||||
// accessing the properties.
|
||||
this.constrainY = new Clutter.BindConstraint({ source: this._pageArea,
|
||||
coordinate: Clutter.BindCoordinate.Y });
|
||||
this.constrainHeight = new Clutter.BindConstraint({ source: this._pageArea,
|
||||
coordinate: Clutter.BindCoordinate.HEIGHT });
|
||||
},
|
||||
|
||||
_addTab: function(tab) {
|
||||
tab.page.hide();
|
||||
this._pageArea.add_actor(tab.page);
|
||||
tab.connect('activated', Lang.bind(this, function(tab) {
|
||||
this._switchTab(tab);
|
||||
}));
|
||||
},
|
||||
|
||||
addViewTab: function(title, pageActor) {
|
||||
let viewTab = new ViewTab(title, pageActor);
|
||||
this._tabs.push(viewTab);
|
||||
this._tabBox.add(viewTab.title);
|
||||
this._addTab(viewTab);
|
||||
},
|
||||
|
||||
_switchTab: function(tab) {
|
||||
if (this._activeTab && this._activeTab.visible) {
|
||||
if (this._activeTab == tab)
|
||||
return;
|
||||
this._activeTab.title.remove_style_pseudo_class('selected');
|
||||
this._activeTab.hide();
|
||||
}
|
||||
|
||||
if (tab != this._searchTab) {
|
||||
tab.title.add_style_pseudo_class('selected');
|
||||
this._activeTab = tab;
|
||||
if (this._searchTab.visible) {
|
||||
this._searchTab.hide();
|
||||
}
|
||||
}
|
||||
|
||||
if (!tab.visible)
|
||||
tab.show();
|
||||
|
||||
// Pull a Meg Ryan:
|
||||
if (Main.overview && Main.overview.workspaces) {
|
||||
if (tab != this._tabs[0]) {
|
||||
Tweener.addTween(Main.overview.workspaces.actor,
|
||||
{ opacity: 0,
|
||||
time: 0.1,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: Lang.bind(this,
|
||||
function() {
|
||||
Main.overview.workspaces.actor.hide();
|
||||
Main.overview.workspaces.actor.opacity = 255;
|
||||
})
|
||||
});
|
||||
} else {
|
||||
Main.overview.workspaces.actor.opacity = 0;
|
||||
Main.overview.workspaces.actor.show();
|
||||
Tweener.addTween(Main.overview.workspaces.actor,
|
||||
{ opacity: 255,
|
||||
time: 0.1,
|
||||
transition: 'easeOutQuad' });
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_switchDefaultTab: function() {
|
||||
if (this._tabs.length > 0)
|
||||
this._switchTab(this._tabs[0]);
|
||||
},
|
||||
|
||||
_nextTab: function() {
|
||||
if (this._tabs.length == 0 ||
|
||||
this._tabs[this._tabs.length - 1] == this._activeTab)
|
||||
return;
|
||||
|
||||
for (let i = 0; i < this._tabs.length; i++)
|
||||
if (this._tabs[i] == this._activeTab) {
|
||||
this._switchTab(this._tabs[i + 1]);
|
||||
return;
|
||||
}
|
||||
},
|
||||
|
||||
_prevTab: function() {
|
||||
if (this._tabs.length == 0 || this._tabs[0] == this._activeTab)
|
||||
return;
|
||||
|
||||
for (let i = 0; i < this._tabs.length; i++)
|
||||
if (this._tabs[i] == this._activeTab) {
|
||||
this._switchTab(this._tabs[i - 1]);
|
||||
return;
|
||||
}
|
||||
},
|
||||
|
||||
_getPreferredTabBarWidth: function(box, forHeight, alloc) {
|
||||
let children = box.get_children();
|
||||
for (let i = 0; i < children.length; i++) {
|
||||
let [childMin, childNat] = children[i].get_preferred_width(forHeight);
|
||||
alloc.min_size += childMin;
|
||||
alloc.natural_size += childNat;
|
||||
}
|
||||
},
|
||||
|
||||
_getPreferredTabBarHeight: function(box, forWidth, alloc) {
|
||||
let children = box.get_children();
|
||||
for (let i = 0; i < children.length; i++) {
|
||||
let [childMin, childNatural] = children[i].get_preferred_height(forWidth);
|
||||
if (childMin > alloc.min_size)
|
||||
alloc.min_size = childMin;
|
||||
if (childNatural > alloc.natural_size)
|
||||
alloc.natural_size = childNatural;
|
||||
}
|
||||
},
|
||||
|
||||
_allocateTabBar: function(container, box, flags) {
|
||||
let allocWidth = box.x2 - box.x1;
|
||||
let allocHeight = box.y2 - box.y1;
|
||||
|
||||
let [searchMinWidth, searchNatWidth] = this._searchArea.get_preferred_width(-1);
|
||||
let [barMinWidth, barNatWidth] = this._tabBox.get_preferred_width(-1);
|
||||
let childBox = new Clutter.ActorBox();
|
||||
childBox.y1 = 0;
|
||||
childBox.y2 = allocHeight;
|
||||
if (this.actor.get_direction() == St.TextDirection.RTL) {
|
||||
childBox.x1 = allocWidth - barNatWidth;
|
||||
childBox.x2 = allocWidth;
|
||||
} else {
|
||||
childBox.x1 = 0;
|
||||
childBox.x2 = barNatWidth;
|
||||
}
|
||||
this._tabBox.allocate(childBox, flags);
|
||||
|
||||
if (this.actor.get_direction() == St.TextDirection.RTL) {
|
||||
childBox.x1 = 0;
|
||||
childBox.x2 = searchNatWidth;
|
||||
} else {
|
||||
childBox.x1 = allocWidth - searchNatWidth;
|
||||
childBox.x2 = allocWidth;
|
||||
}
|
||||
this._searchArea.allocate(childBox, flags);
|
||||
|
||||
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this,
|
||||
function() {
|
||||
this.constrainY.offset = this.actor.y;
|
||||
}));
|
||||
},
|
||||
|
||||
_onKeyPress: function(stage, event) {
|
||||
// Only process events if the stage has key focus - search is handled
|
||||
// by the search tab, and we do not want to interfere with "special"
|
||||
// actors grabbing focus (run dialog, looking glass, notifications).
|
||||
let focus = stage.get_key_focus();
|
||||
if (focus != stage)
|
||||
return false;
|
||||
|
||||
let modifiers = Shell.get_event_state(event);
|
||||
let symbol = event.get_key_symbol();
|
||||
if (symbol == Clutter.Escape) {
|
||||
Main.overview.hide();
|
||||
return true;
|
||||
} else if (modifiers & Clutter.ModifierType.CONTROL_MASK) {
|
||||
if (symbol == Clutter.Page_Up) {
|
||||
if (!this._searchActive)
|
||||
this._prevTab();
|
||||
return true;
|
||||
} else if (symbol == Clutter.Page_Down) {
|
||||
if (!this._searchActive)
|
||||
this._nextTab();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
},
|
||||
|
||||
addSearchProvider: function(provider) {
|
||||
this._searchTab.addSearchProvider(provider);
|
||||
},
|
||||
|
||||
show: function() {
|
||||
this._searchTab.setFindAsYouType(true);
|
||||
|
||||
if (this._itemDragBeginId == 0)
|
||||
this._itemDragBeginId = Main.overview.connect('item-drag-begin',
|
||||
Lang.bind(this, this._switchDefaultTab));
|
||||
if (this._overviewHidingId == 0)
|
||||
this._overviewHidingId = Main.overview.connect('hiding',
|
||||
Lang.bind(this, this._switchDefaultTab));
|
||||
if (this._keyPressId == 0)
|
||||
this._keyPressId = global.stage.connect('key-press-event',
|
||||
Lang.bind(this, this._onKeyPress));
|
||||
|
||||
this._switchDefaultTab();
|
||||
},
|
||||
|
||||
hide: function() {
|
||||
this._searchTab.setFindAsYouType(false);
|
||||
|
||||
if (this._keyPressId > 0) {
|
||||
global.stage.disconnect(this._keyPressId);
|
||||
this._keyPressId = 0;
|
||||
}
|
||||
|
||||
if (this._itemDragBeginId > 0) {
|
||||
Main.overview.disconnect(this._itemDragBeginId);
|
||||
this._itemDragBeginId = 0;
|
||||
}
|
||||
|
||||
if (this._overviewHidingId > 0) {
|
||||
Main.overview.disconnect(this._overviewHidingId);
|
||||
this._overviewHidingId = 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(ViewSelector.prototype);
|
@ -66,7 +66,6 @@ WindowAttentionHandler.prototype = {
|
||||
source = new Source(app, window);
|
||||
this._sources[appId] = source;
|
||||
Main.messageTray.add(source);
|
||||
source.connect('clicked', Lang.bind(this, function() { source.destroy(); }));
|
||||
source.connect('destroy', Lang.bind(this, function() { delete this._sources[appId]; }));
|
||||
}
|
||||
|
||||
@ -101,9 +100,8 @@ Source.prototype = {
|
||||
return this._app.create_icon_texture(this.ICON_SIZE);
|
||||
},
|
||||
|
||||
clicked : function() {
|
||||
_notificationClicked : function(notification) {
|
||||
Main.activateWindow(this._window);
|
||||
MessageTray.Source.prototype.clicked.call(this);
|
||||
this.destroy();
|
||||
}
|
||||
|
||||
};
|
||||
|
@ -415,7 +415,7 @@ WindowManager.prototype = {
|
||||
return;
|
||||
}
|
||||
|
||||
let windows = global.get_windows();
|
||||
let windows = global.get_window_actors();
|
||||
|
||||
/* @direction is the direction that the "camera" moves, so the
|
||||
* screen contents have to move one screen's worth in the
|
||||
|
@ -20,9 +20,6 @@ const FOCUS_ANIMATION_TIME = 0.15;
|
||||
|
||||
const WINDOW_DND_SIZE = 256;
|
||||
|
||||
const FRAME_COLOR = new Clutter.Color();
|
||||
FRAME_COLOR.from_pixel(0xffffffff);
|
||||
|
||||
const SCROLL_SCALE_AMOUNT = 100 / 5;
|
||||
|
||||
const LIGHTBOX_FADE_TIME = 0.1;
|
||||
@ -54,11 +51,6 @@ function _clamp(value, min, max) {
|
||||
return Math.max(min, Math.min(max, value));
|
||||
}
|
||||
|
||||
// Spacing between workspaces. At the moment, the same spacing is used
|
||||
// in both zoomed-in and zoomed-out views; this is slightly
|
||||
// metaphor-breaking, but the alternatives are also weird.
|
||||
const GRID_SPACING = 15;
|
||||
const FRAME_SIZE = GRID_SPACING / 3;
|
||||
|
||||
function ScaledPoint(x, y, scaleX, scaleY) {
|
||||
[this.x, this.y, this.scaleX, this.scaleY] = arguments;
|
||||
@ -289,76 +281,9 @@ WindowClone.prototype = {
|
||||
this.emit('drag-end');
|
||||
}
|
||||
};
|
||||
|
||||
Signals.addSignalMethods(WindowClone.prototype);
|
||||
|
||||
|
||||
function DesktopClone(window) {
|
||||
this._init(window);
|
||||
}
|
||||
|
||||
DesktopClone.prototype = {
|
||||
_init : function(window) {
|
||||
this.actor = new Clutter.Group({ reactive: true });
|
||||
|
||||
let background = new Clutter.Clone({ source: Main.background.source });
|
||||
this.actor.add_actor(background);
|
||||
|
||||
if (window) {
|
||||
this._desktop = new Clutter.Clone({ source: window.get_texture() });
|
||||
this.actor.add_actor(this._desktop);
|
||||
this._desktop.hide();
|
||||
} else {
|
||||
this._desktop = null;
|
||||
}
|
||||
|
||||
this.actor.connect('button-release-event',
|
||||
Lang.bind(this, this._onButtonRelease));
|
||||
},
|
||||
|
||||
zoomFromOverview: function(fadeInIcons) {
|
||||
if (this._desktop == null)
|
||||
return;
|
||||
|
||||
if (fadeInIcons) {
|
||||
this._desktop.opacity = 0;
|
||||
this._desktop.show();
|
||||
Tweener.addTween(this._desktop,
|
||||
{ opacity: 255,
|
||||
time: Overview.ANIMATION_TIME,
|
||||
transition: 'easeOutQuad' });
|
||||
}
|
||||
},
|
||||
|
||||
zoomToOverview: function(fadeOutIcons) {
|
||||
if (this._desktop == null)
|
||||
return;
|
||||
|
||||
if (fadeOutIcons) {
|
||||
this._desktop.opacity = 255;
|
||||
this._desktop.show();
|
||||
Tweener.addTween(this._desktop,
|
||||
{ opacity: 0,
|
||||
time: Overview.ANIMATION_TIME,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: Lang.bind(this,
|
||||
function() {
|
||||
this._desktop.hide();
|
||||
})
|
||||
});
|
||||
} else {
|
||||
this._desktop.hide();
|
||||
}
|
||||
},
|
||||
|
||||
_onButtonRelease : function (actor, event) {
|
||||
this.emit('selected', event.get_time());
|
||||
}
|
||||
};
|
||||
|
||||
Signals.addSignalMethods(DesktopClone.prototype);
|
||||
|
||||
|
||||
/**
|
||||
* @windowClone: Corresponding window clone
|
||||
* @parentActor: The actor which will be the parent of all overlay items
|
||||
@ -553,23 +478,14 @@ WindowOverlay.prototype = {
|
||||
|
||||
_onStyleChanged: function() {
|
||||
let titleNode = this.title.get_theme_node();
|
||||
|
||||
let [success, len] = titleNode.get_length('-shell-caption-spacing',
|
||||
false);
|
||||
if (success)
|
||||
this.title._spacing = len;
|
||||
this.title._spacing = titleNode.get_length('-shell-caption-spacing');
|
||||
|
||||
let closeNode = this.closeButton.get_theme_node();
|
||||
|
||||
[success, len] = closeNode.get_length('-shell-close-overlap',
|
||||
false);
|
||||
if (success)
|
||||
this.closeButton._overlap = len;
|
||||
this.closeButton._overlap = closeNode.get_length('-shell-close-overlap');
|
||||
|
||||
this._parentActor.queue_relayout();
|
||||
}
|
||||
};
|
||||
|
||||
Signals.addSignalMethods(WindowOverlay.prototype);
|
||||
|
||||
const WindowPositionFlags = {
|
||||
@ -593,10 +509,20 @@ Workspace.prototype = {
|
||||
// Without this the drop area will be overlapped.
|
||||
this._windowOverlaysGroup.set_size(0, 0);
|
||||
|
||||
this.actor = new Clutter.Group();
|
||||
this.actor = new Clutter.Group({ reactive: true });
|
||||
this.actor._delegate = this;
|
||||
|
||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||
this.actor.connect('button-release-event', Lang.bind(this,
|
||||
function(actor, event) {
|
||||
// Only switch to the workspace when there's no application
|
||||
// windows open. The problem is that it's too easy to miss
|
||||
// an app window and get the wrong one focused.
|
||||
if (this._windows.length == 0) {
|
||||
this.metaWorkspace.activate(event.get_time());
|
||||
Main.overview.hide();
|
||||
}
|
||||
}));
|
||||
|
||||
// Items in _windowOverlaysGroup should not be scaled, so we don't
|
||||
// add them to this.actor, but to its parent whenever it changes
|
||||
@ -610,37 +536,12 @@ Workspace.prototype = {
|
||||
this.actor.height = global.screen_height;
|
||||
this.scale = 1.0;
|
||||
|
||||
let windows = global.get_windows().filter(this._isMyWindow, this);
|
||||
|
||||
// Find the desktop window
|
||||
for (let i = 0; i < windows.length; i++) {
|
||||
if (windows[i].meta_window.get_window_type() == Meta.WindowType.DESKTOP) {
|
||||
this._desktop = new DesktopClone(windows[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
// If there wasn't one, fake it
|
||||
if (!this._desktop)
|
||||
this._desktop = new DesktopClone();
|
||||
|
||||
this._desktop.connect('selected',
|
||||
Lang.bind(this,
|
||||
function(clone, time) {
|
||||
// Only switch to the workspace when there's no application windows
|
||||
// open (we always have one window for the desktop). The problem
|
||||
// is that it's too easy to miss an app window and get the wrong
|
||||
// one focused.
|
||||
if (this._windows.length == 1) {
|
||||
this.metaWorkspace.activate(time);
|
||||
Main.overview.hide();
|
||||
}
|
||||
}));
|
||||
this.actor.add_actor(this._desktop.actor);
|
||||
let windows = global.get_window_actors().filter(this._isMyWindow, this);
|
||||
|
||||
// Create clones for remaining windows that should be
|
||||
// visible in the Overview
|
||||
this._windows = [this._desktop];
|
||||
this._windowOverlays = [ null ];
|
||||
this._windows = [];
|
||||
this._windowOverlays = [];
|
||||
for (let i = 0; i < windows.length; i++) {
|
||||
if (this._isOverviewWindow(windows[i])) {
|
||||
this._addWindowClone(windows[i]);
|
||||
@ -659,8 +560,6 @@ Workspace.prototype = {
|
||||
|
||||
this._visible = false;
|
||||
|
||||
this._frame = null;
|
||||
|
||||
this.leavingOverview = false;
|
||||
},
|
||||
|
||||
@ -722,9 +621,6 @@ Workspace.prototype = {
|
||||
this._lightbox.show();
|
||||
else
|
||||
this._lightbox.hide();
|
||||
|
||||
if (this._frame)
|
||||
this._frame.set_opacity(showLightbox ? 150 : 255);
|
||||
},
|
||||
|
||||
/**
|
||||
@ -745,32 +641,6 @@ Workspace.prototype = {
|
||||
this._lightbox.highlight(actor);
|
||||
},
|
||||
|
||||
// Mark the workspace selected/not-selected
|
||||
setSelected : function(selected) {
|
||||
// Don't draw a frame if we only have one workspace
|
||||
if (selected && global.screen.n_workspaces > 1) {
|
||||
if (this._frame)
|
||||
return;
|
||||
|
||||
// FIXME: do something cooler-looking using clutter-cairo
|
||||
this._frame = new Clutter.Rectangle({ color: FRAME_COLOR });
|
||||
this.actor.add_actor(this._frame);
|
||||
this._frame.set_position(this._desktop.actor.x - FRAME_SIZE / this.actor.scale_x,
|
||||
this._desktop.actor.y - FRAME_SIZE / this.actor.scale_y);
|
||||
this._frame.set_size(this._desktop.actor.width + 2 * FRAME_SIZE / this.actor.scale_x,
|
||||
this._desktop.actor.height + 2 * FRAME_SIZE / this.actor.scale_y);
|
||||
this._frame.lower_bottom();
|
||||
|
||||
this._framePosHandler = this.actor.connect('notify::scale-x', Lang.bind(this, this._updateFramePosition));
|
||||
} else {
|
||||
if (!this._frame)
|
||||
return;
|
||||
this.actor.disconnect(this._framePosHandler);
|
||||
this._frame.destroy();
|
||||
this._frame = null;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* setReactive:
|
||||
* @reactive: %true iff the workspace should be reactive
|
||||
@ -778,14 +648,7 @@ Workspace.prototype = {
|
||||
* Set the workspace (desktop) reactive
|
||||
**/
|
||||
setReactive: function(reactive) {
|
||||
this._desktop.actor.reactive = reactive;
|
||||
},
|
||||
|
||||
_updateFramePosition : function() {
|
||||
this._frame.set_position(this._desktop.actor.x - FRAME_SIZE / this.actor.scale_x,
|
||||
this._desktop.actor.y - FRAME_SIZE / this.actor.scale_y);
|
||||
this._frame.set_size(this._desktop.actor.width + 2 * FRAME_SIZE / this.actor.scale_x,
|
||||
this._desktop.actor.height + 2 * FRAME_SIZE / this.actor.scale_y);
|
||||
this.actor.reactive = reactive;
|
||||
},
|
||||
|
||||
_isCloneVisible: function(clone) {
|
||||
@ -796,7 +659,7 @@ Workspace.prototype = {
|
||||
* _getVisibleClones:
|
||||
*
|
||||
* Returns a list WindowClone objects where the clone isn't filtered
|
||||
* out by any application filter. The clone for the desktop is excluded.
|
||||
* out by any application filter.
|
||||
* The returned array will always be newly allocated; it is not in any
|
||||
* defined order, and thus it's convenient to call .sort() with your
|
||||
* choice of sorting function.
|
||||
@ -804,7 +667,7 @@ Workspace.prototype = {
|
||||
_getVisibleClones: function() {
|
||||
let visible = [];
|
||||
|
||||
for (let i = 1; i < this._windows.length; i++) {
|
||||
for (let i = 0; i < this._windows.length; i++) {
|
||||
let clone = this._windows[i];
|
||||
|
||||
if (!this._isCloneVisible(clone))
|
||||
@ -816,7 +679,7 @@ Workspace.prototype = {
|
||||
},
|
||||
|
||||
_resetCloneVisibility: function () {
|
||||
for (let i = 1; i < this._windows.length; i++) {
|
||||
for (let i = 0; i < this._windows.length; i++) {
|
||||
let clone = this._windows[i];
|
||||
let overlay = this._windowOverlays[i];
|
||||
|
||||
@ -1015,9 +878,9 @@ Workspace.prototype = {
|
||||
let buttonOuterHeight, captionHeight;
|
||||
let buttonOuterWidth = 0;
|
||||
|
||||
if (this._windowOverlays[1]) {
|
||||
[buttonOuterHeight, captionHeight] = this._windowOverlays[1].chromeHeights();
|
||||
buttonOuterWidth = this._windowOverlays[1].chromeWidth() / this.scale;
|
||||
if (this._windowOverlays[0]) {
|
||||
[buttonOuterHeight, captionHeight] = this._windowOverlays[0].chromeHeights();
|
||||
buttonOuterWidth = this._windowOverlays[0].chromeWidth() / this.scale;
|
||||
} else
|
||||
[buttonOuterHeight, captionHeight] = [0, 0];
|
||||
buttonOuterHeight /= this.scale;
|
||||
@ -1165,8 +1028,8 @@ Workspace.prototype = {
|
||||
// be after the workspace animation finishes.
|
||||
let [cloneX, cloneY] = clone.actor.get_position();
|
||||
let [cloneWidth, cloneHeight] = clone.actor.get_size();
|
||||
cloneX = this.gridX + this.scale * cloneX;
|
||||
cloneY = this.gridY + this.scale * cloneY;
|
||||
cloneX = this.x + this.scale * cloneX;
|
||||
cloneY = this.y + this.scale * cloneY;
|
||||
cloneWidth = this.scale * clone.actor.scale_x * cloneWidth;
|
||||
cloneHeight = this.scale * clone.actor.scale_y * cloneHeight;
|
||||
|
||||
@ -1180,7 +1043,7 @@ Workspace.prototype = {
|
||||
},
|
||||
|
||||
_fadeInAllOverlays: function() {
|
||||
for (let i = 1; i < this._windows.length; i++) {
|
||||
for (let i = 0; i < this._windows.length; i++) {
|
||||
let clone = this._windows[i];
|
||||
let overlay = this._windowOverlays[i];
|
||||
if (this._showOnlyWindows != null && !(clone.metaWindow in this._showOnlyWindows))
|
||||
@ -1190,7 +1053,7 @@ Workspace.prototype = {
|
||||
},
|
||||
|
||||
_hideAllOverlays: function() {
|
||||
for (let i = 1; i< this._windows.length; i++) {
|
||||
for (let i = 0; i < this._windows.length; i++) {
|
||||
let overlay = this._windowOverlays[i];
|
||||
overlay.hide();
|
||||
}
|
||||
@ -1205,8 +1068,8 @@ Workspace.prototype = {
|
||||
let wsHeight = this.actor.height * this.scale;
|
||||
|
||||
let pointerHasMoved = (this._cursorX != x && this._cursorY != y);
|
||||
let inWorkspace = (this.gridX < x && x < this.gridX + wsWidth &&
|
||||
this.gridY < y && y < this.gridY + wsHeight);
|
||||
let inWorkspace = (this.x < x && x < this.x + wsWidth &&
|
||||
this.y < y && y < this.y + wsHeight);
|
||||
|
||||
if (pointerHasMoved && inWorkspace) {
|
||||
// store current cursor position
|
||||
@ -1317,8 +1180,8 @@ Workspace.prototype = {
|
||||
},
|
||||
|
||||
// check for maximized windows on the workspace
|
||||
_haveMaximizedWindows: function() {
|
||||
for (let i = 1; i < this._windows.length; i++) {
|
||||
hasMaximizedWindows: function() {
|
||||
for (let i = 0; i < this._windows.length; i++) {
|
||||
let metaWindow = this._windows[i].metaWindow;
|
||||
if (metaWindow.showing_on_its_workspace() &&
|
||||
metaWindow.maximized_horizontally &&
|
||||
@ -1330,7 +1193,7 @@ Workspace.prototype = {
|
||||
|
||||
// Animate the full-screen to Overview transition.
|
||||
zoomToOverview : function() {
|
||||
this.actor.set_position(this.gridX, this.gridY);
|
||||
this.actor.set_position(this.x, this.y);
|
||||
this.actor.set_scale(this.scale, this.scale);
|
||||
|
||||
// Position and scale the windows.
|
||||
@ -1339,12 +1202,6 @@ Workspace.prototype = {
|
||||
else
|
||||
this.positionWindows(WindowPositionFlags.ZOOM);
|
||||
|
||||
let active = global.screen.get_active_workspace();
|
||||
let fadeInIcons = (Main.overview.animationInProgress &&
|
||||
active == this.metaWorkspace &&
|
||||
!this._haveMaximizedWindows());
|
||||
this._desktop.zoomToOverview(fadeInIcons);
|
||||
|
||||
this._visible = true;
|
||||
},
|
||||
|
||||
@ -1362,7 +1219,7 @@ Workspace.prototype = {
|
||||
this._doneLeavingOverview));
|
||||
|
||||
// Position and scale the windows.
|
||||
for (let i = 1; i < this._windows.length; i++) {
|
||||
for (let i = 0; i < this._windows.length; i++) {
|
||||
let clone = this._windows[i];
|
||||
|
||||
clone.zoomFromOverview();
|
||||
@ -1391,77 +1248,9 @@ Workspace.prototype = {
|
||||
}
|
||||
}
|
||||
|
||||
let active = global.screen.get_active_workspace();
|
||||
let fadeOutIcons = (active == this.metaWorkspace &&
|
||||
!this._haveMaximizedWindows());
|
||||
this._desktop.zoomFromOverview(fadeOutIcons);
|
||||
|
||||
this._visible = false;
|
||||
},
|
||||
|
||||
// Animates grid shrinking/expanding when a row or column
|
||||
// of workspaces is added or removed
|
||||
resizeToGrid : function (oldScale) {
|
||||
this._hideAllOverlays();
|
||||
Tweener.addTween(this.actor,
|
||||
{ x: this.gridX,
|
||||
y: this.gridY,
|
||||
scale_x: this.scale,
|
||||
scale_y: this.scale,
|
||||
time: Overview.ANIMATION_TIME,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: Lang.bind(this, this._fadeInAllOverlays)
|
||||
});
|
||||
},
|
||||
|
||||
// Animates the addition of a new (empty) workspace
|
||||
slideIn : function(oldScale) {
|
||||
if (this.gridCol > this.gridRow) {
|
||||
this.actor.set_position(global.screen_width, this.gridY);
|
||||
this.actor.set_scale(oldScale, oldScale);
|
||||
} else {
|
||||
this.actor.set_position(this.gridX, global.screen_height);
|
||||
this.actor.set_scale(this.scale, this.scale);
|
||||
}
|
||||
Tweener.addTween(this.actor,
|
||||
{ x: this.gridX,
|
||||
y: this.gridY,
|
||||
scale_x: this.scale,
|
||||
scale_y: this.scale,
|
||||
time: Overview.ANIMATION_TIME,
|
||||
transition: 'easeOutQuad'
|
||||
});
|
||||
|
||||
this._visible = true;
|
||||
},
|
||||
|
||||
// Animates the removal of a workspace
|
||||
slideOut : function(onComplete) {
|
||||
let destX = this.actor.x, destY = this.actor.y;
|
||||
|
||||
this._hideAllOverlays();
|
||||
|
||||
if (this.gridCol > this.gridRow)
|
||||
destX = global.screen_width;
|
||||
else
|
||||
destY = global.screen_height;
|
||||
Tweener.addTween(this.actor,
|
||||
{ x: destX,
|
||||
y: destY,
|
||||
scale_x: this.scale,
|
||||
scale_y: this.scale,
|
||||
time: Overview.ANIMATION_TIME,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: onComplete
|
||||
});
|
||||
|
||||
this._visible = false;
|
||||
|
||||
// Don't let the user try to select this workspace as it's
|
||||
// making its exit.
|
||||
this._desktop.reactive = false;
|
||||
},
|
||||
|
||||
destroy : function() {
|
||||
this.actor.destroy();
|
||||
},
|
||||
@ -1483,7 +1272,7 @@ Workspace.prototype = {
|
||||
// their parent (this.actor), but we might have a zoomed window
|
||||
// which has been reparented to the stage - _windows[0] holds
|
||||
// the desktop window, which is never reparented
|
||||
for (let w = 1; w < this._windows.length; w++)
|
||||
for (let w = 0; w < this._windows.length; w++)
|
||||
this._windows[w].destroy();
|
||||
this._windows = [];
|
||||
},
|
||||
@ -1514,12 +1303,12 @@ Workspace.prototype = {
|
||||
Lang.bind(this, this._onCloneSelected));
|
||||
clone.connect('drag-begin',
|
||||
Lang.bind(this, function(clone) {
|
||||
this.emit('window-drag-begin', clone.actor);
|
||||
Main.overview.beginWindowDrag();
|
||||
overlay.hide();
|
||||
}));
|
||||
clone.connect('drag-end',
|
||||
Lang.bind(this, function(clone) {
|
||||
this.emit('window-drag-end', clone.actor);
|
||||
Main.overview.endWindowDrag();
|
||||
overlay.show();
|
||||
}));
|
||||
clone.connect('zoom-start',
|
||||
@ -1542,7 +1331,7 @@ Workspace.prototype = {
|
||||
},
|
||||
|
||||
_onShowOverlayClose: function (windowOverlay) {
|
||||
for (let i = 1; i < this._windowOverlays.length; i++) {
|
||||
for (let i = 0; i < this._windowOverlays.length; i++) {
|
||||
let overlay = this._windowOverlays[i];
|
||||
if (overlay == windowOverlay)
|
||||
continue;
|
||||
@ -1651,11 +1440,11 @@ function _workspaceRelativeModifier(workspace) {
|
||||
}
|
||||
|
||||
return [ { name: 'x',
|
||||
parameters: { workspacePos: workspace.gridX,
|
||||
parameters: { workspacePos: workspace.x,
|
||||
overviewPos: overviewPosX,
|
||||
overviewScale: overviewScale } },
|
||||
{ name: 'y',
|
||||
parameters: { workspacePos: workspace.gridY,
|
||||
parameters: { workspacePos: workspace.y,
|
||||
overviewPos: overviewPosY,
|
||||
overviewScale: overviewScale } }
|
||||
];
|
||||
|
@ -33,8 +33,7 @@ WorkspaceSwitcherPopup.prototype = {
|
||||
this._list = new Shell.GenericContainer({ style_class: 'workspace-switcher' });
|
||||
this._itemSpacing = 0;
|
||||
this._list.connect('style-changed', Lang.bind(this, function() {
|
||||
let [found, spacing] = this._list.get_theme_node().get_length('spacing', false);
|
||||
this._itemSpacing = (found) ? spacing : 0;
|
||||
this._itemSpacing = this._list.get_theme_node().get_length('spacing');
|
||||
}));
|
||||
|
||||
this._list.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -35,6 +35,7 @@ sv
|
||||
ta
|
||||
th
|
||||
tr
|
||||
ug
|
||||
uk
|
||||
vi
|
||||
zh_CN
|
||||
|
@ -14,8 +14,11 @@ js/ui/placeDisplay.js
|
||||
js/ui/popupMenu.js
|
||||
js/ui/runDialog.js
|
||||
js/ui/statusMenu.js
|
||||
js/ui/status/accessibility.js
|
||||
js/ui/viewSelector.js
|
||||
js/ui/windowAttentionHandler.js
|
||||
js/ui/workspacesView.js
|
||||
src/gvc/gvc-mixer-control.c
|
||||
src/gdmuser/gdm-user.c
|
||||
src/shell-global.c
|
||||
src/shell-uri-util.c
|
||||
|
530
po/ar.po
530
po/ar.po
@ -6,8 +6,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: HEAD\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-05-15 23:40+0300\n"
|
||||
"PO-Revision-Date: 2010-05-15 23:40+0300\n"
|
||||
"POT-Creation-Date: 2010-10-30 13:30+0200\n"
|
||||
"PO-Revision-Date: 2010-10-30 13:30+0300\n"
|
||||
"Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n"
|
||||
"Language-Team: Arabic <doc@arabeyes.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -16,7 +16,7 @@ msgstr ""
|
||||
"Language: ar\n"
|
||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
|
||||
"X-Generator: Virtaal 0.6.0\n"
|
||||
"X-Generator: Virtaal 0.6.1\n"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||
msgid "GNOME Shell"
|
||||
@ -34,32 +34,332 @@ msgstr "الساعة"
|
||||
msgid "Customize the panel clock"
|
||||
msgstr "طوّع ساعة اللوحة"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
||||
msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
"dialog."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
msgid "Custom format of the clock"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should not be loaded."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||
msgid "Hour format"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
||||
msgid ""
|
||||
"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
|
||||
"clock, in addition to time."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid ""
|
||||
"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
|
||||
"time."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
msgid "Overview workspace view mode"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
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 "
|
||||
"the recorded video is recorded. It will normally have a unconnected source "
|
||||
"pad; output from that pad will be written into the output file. However the "
|
||||
"pipeline can also take care of its own output - this might be used to send "
|
||||
"the output to an icecast server via shout2send or similar. When unset or set "
|
||||
"to an empty value, the default pipeline will be used. This is currently "
|
||||
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show date in clock"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid "Show time with seconds"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
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 ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid ""
|
||||
"The selected workspace view mode in the overview. Supported values are "
|
||||
"\"single\" and \"grid\"."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
"The shell normally monitors active applications in order to present the most "
|
||||
"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 ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
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 strftime"
|
||||
"() to obtain a specific format. See the strftime() manual for more "
|
||||
"information."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
||||
msgid "Clip the crosshairs at the center"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
|
||||
msgid "Color of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
|
||||
msgid ""
|
||||
"Determines the length of the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
|
||||
msgid ""
|
||||
"Determines the position of the magnified mouse image within the magnified "
|
||||
"view and how it reacts to system mouse movement. The values are - none: no "
|
||||
"mouse tracking; - centered: the mouse image is displayed at the center of "
|
||||
"the zoom region (which also represents the point under the system mouse) and "
|
||||
"the magnified contents are scrolled as the system mouse moves; - "
|
||||
"proportional: the position of the magnified mouse in the zoom region is "
|
||||
"proportionally the same as the position of the system mouse on screen; - "
|
||||
"push: when the magnified mouse intersects a boundary of the zoom region, the "
|
||||
"contents are scrolled into view."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
"transparent."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"Determines whether the crosshairs intersect the magnified mouse sprite, or "
|
||||
"are clipped such that the ends of the horizontal and vertical lines surround "
|
||||
"the mouse image."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
|
||||
msgid "Enable lens mode"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"Enables/disables display of crosshairs centered on the magnified mouse "
|
||||
"sprite."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
|
||||
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 the "
|
||||
"screen edge moves into the magnified view."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
|
||||
msgid "Length of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
|
||||
msgid "Magnification factor"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
|
||||
msgid "Mouse Tracking Mode"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
|
||||
msgid "Opacity of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
|
||||
msgid "Screen position"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
|
||||
msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
|
||||
msgid "Show or hide crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
|
||||
msgid "Show or hide the magnifier"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
|
||||
msgid "Show or hide the magnifier and all of its zoom regions."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The color of the the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
|
||||
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 ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
"value of 2.0 doubles the size."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
|
||||
msgid "Thickness of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
"Whether the magnified view should be centered over the location of the "
|
||||
"system mouse and move with it."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
|
||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/clock-preferences.ui.h:1
|
||||
msgid "Clock Format"
|
||||
msgstr "تنسيق الساعة"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:2
|
||||
msgid "Clock Preferences"
|
||||
msgstr "تفضيلات الساعة"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:3
|
||||
msgid "Panel Display"
|
||||
msgstr "عرض اللوحة"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:4
|
||||
msgid "Show seco_nds"
|
||||
msgstr "أظهر ال_ثواني"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:5
|
||||
msgid "Show the _date"
|
||||
msgstr "أظهر ال_تاريخ"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:6
|
||||
msgid "_12 hour format"
|
||||
msgstr "نسق _12 ساعة"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:7
|
||||
msgid "_24 hour format"
|
||||
msgstr "نسق _24 ساعة"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:306 ../js/ui/dash.js:850
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "التطبيقات"
|
||||
|
||||
#: ../js/ui/appDisplay.js:338
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
msgid "PREFERENCES"
|
||||
msgstr "التفضيلات"
|
||||
|
||||
#: ../js/ui/appDisplay.js:705
|
||||
#: ../js/ui/appDisplay.js:647
|
||||
msgid "New Window"
|
||||
msgstr "نافذة جديدة"
|
||||
|
||||
#: ../js/ui/appDisplay.js:709
|
||||
#: ../js/ui/appDisplay.js:651
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "أزِل من المفضّلة"
|
||||
|
||||
#: ../js/ui/appDisplay.js:710
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
msgid "Add to Favorites"
|
||||
msgstr "أضِف إلى المفضّلة"
|
||||
|
||||
#: ../js/ui/appDisplay.js:1037
|
||||
#: ../js/ui/appDisplay.js:829
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "اسحب إلى هنا ليضاف إلى المفضّلة"
|
||||
|
||||
#: ../js/ui/appFavorites.js:89
|
||||
#: ../js/ui/appFavorites.js:88
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "أضيف %s إلى مفضلتك."
|
||||
@ -69,194 +369,293 @@ msgstr "أضيف %s إلى مفضلتك."
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "أزيل %s من مفضّلتك."
|
||||
|
||||
#: ../js/ui/dash.js:189
|
||||
#: ../js/ui/dash.js:142
|
||||
msgid "Find"
|
||||
msgstr "ابحث"
|
||||
|
||||
#: ../js/ui/dash.js:505
|
||||
#: ../js/ui/dash.js:473
|
||||
msgid "Searching..."
|
||||
msgstr "يبحث..."
|
||||
|
||||
#: ../js/ui/dash.js:519
|
||||
#: ../js/ui/dash.js:487
|
||||
msgid "No matching results."
|
||||
msgstr "لا نتائج مطابقة."
|
||||
|
||||
#. **** Places ****
|
||||
#. Translators: This is in the sense of locations for documents,
|
||||
#. network locations, etc.
|
||||
#: ../js/ui/dash.js:869 ../js/ui/placeDisplay.js:543
|
||||
#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:554
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "الأماكن والأجهزة"
|
||||
|
||||
#. **** Documents ****
|
||||
#: ../js/ui/dash.js:876 ../js/ui/docDisplay.js:489
|
||||
#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "العناصر الحديثة"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:354
|
||||
#: ../js/ui/lookingGlass.js:552
|
||||
msgid "No extensions installed"
|
||||
msgstr "لم تثبّت أية امتدادات"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:391
|
||||
#: ../js/ui/lookingGlass.js:589
|
||||
msgid "Enabled"
|
||||
msgstr "مفعّل"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:393
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
|
||||
msgid "Disabled"
|
||||
msgstr "معطّل"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:395
|
||||
#: ../js/ui/lookingGlass.js:593
|
||||
msgid "Error"
|
||||
msgstr "خطأ"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:397
|
||||
#: ../js/ui/lookingGlass.js:595
|
||||
msgid "Out of date"
|
||||
msgstr "غير محدث"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:422
|
||||
#: ../js/ui/lookingGlass.js:620
|
||||
msgid "View Source"
|
||||
msgstr "اعرض المصدر"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:428
|
||||
#: ../js/ui/lookingGlass.js:626
|
||||
msgid "Web Page"
|
||||
msgstr "صفحة الوب"
|
||||
|
||||
#: ../js/ui/overview.js:161
|
||||
#: ../js/ui/overview.js:160
|
||||
msgid "Undo"
|
||||
msgstr "تراجع"
|
||||
|
||||
#: ../js/ui/panel.js:535
|
||||
msgid "Quit"
|
||||
msgstr "أنهِ"
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:469
|
||||
#, 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:740
|
||||
msgid "Activities"
|
||||
msgstr "الأنشطة"
|
||||
#: ../js/ui/panel.js:494
|
||||
msgid "Preferences"
|
||||
msgstr "التفضيلات"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:955
|
||||
#: ../js/ui/panel.js:580
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%A %e %B، %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:956
|
||||
#: ../js/ui/panel.js:581
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%A %e %B، %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:960
|
||||
#: ../js/ui/panel.js:585
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%A %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:961
|
||||
#: ../js/ui/panel.js:586
|
||||
msgid "%a %R"
|
||||
msgstr "%A %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:968
|
||||
#: ../js/ui/panel.js:593
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%A %e %B، %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:969
|
||||
#: ../js/ui/panel.js:594
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%A %e %B، %l:%M %p"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:973
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%A %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:974
|
||||
#: ../js/ui/panel.js:599
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%A %Ol:%OM %p"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:108
|
||||
#. 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:744
|
||||
msgid "Activities"
|
||||
msgstr "الأنشطة"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:111
|
||||
#, c-format
|
||||
msgid "Failed to unmount '%s'"
|
||||
msgstr "فشل فصْل '%s'"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:111
|
||||
#: ../js/ui/placeDisplay.js:114
|
||||
msgid "Retry"
|
||||
msgstr "أعد المحاولة"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:156
|
||||
#: ../js/ui/placeDisplay.js:159
|
||||
msgid "Connect to..."
|
||||
msgstr "اتّصل ب..."
|
||||
|
||||
#: ../js/ui/runDialog.js:231
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:33
|
||||
msgid "toggle-switch-us"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/runDialog.js:233
|
||||
msgid "Please enter a command:"
|
||||
msgstr "من فضلك اكتب أمرا:"
|
||||
|
||||
#: ../js/ui/runDialog.js:375
|
||||
#: ../js/ui/runDialog.js:378
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "فشل تنفيذ '%s':"
|
||||
|
||||
#: ../js/ui/statusMenu.js:90
|
||||
#: ../js/ui/statusMenu.js:101
|
||||
msgid "Available"
|
||||
msgstr "متاح"
|
||||
|
||||
#: ../js/ui/statusMenu.js:94
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Busy"
|
||||
msgstr "مشغول"
|
||||
|
||||
#: ../js/ui/statusMenu.js:98
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "خفي"
|
||||
|
||||
#: ../js/ui/statusMenu.js:105
|
||||
msgid "Account Information..."
|
||||
msgstr "معلومات الحساب..."
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr "حسابي..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:109
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
msgid "System Preferences..."
|
||||
msgstr "تفضيلات النظام..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:116
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
msgid "Lock Screen"
|
||||
msgstr "أوصد الشاشة"
|
||||
|
||||
#: ../js/ui/statusMenu.js:120
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Switch User"
|
||||
msgstr "بدّل المستخدم"
|
||||
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
msgid "Log Out..."
|
||||
msgstr "اخرج..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:129
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr "علّق"
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
msgstr "أعد التشغيل..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
msgid "Shut Down..."
|
||||
msgstr "أطفئ..."
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:47
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "قارئ الشاشة"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:91
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "لوحة مفاتيح على الشاشة"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:94
|
||||
msgid "Visual Alerts"
|
||||
msgstr "تنبيهات بصرية"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:97
|
||||
msgid "Sticky Keys"
|
||||
msgstr "مفاتيح لاصقة"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:100
|
||||
msgid "Slow Keys"
|
||||
msgstr "مفاتيح بطيئة"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:103
|
||||
msgid "Bounce Keys"
|
||||
msgstr "مفاتيح لها صوت"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:106
|
||||
msgid "Mouse Keys"
|
||||
msgstr "مفاتيح الفأرة"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:110
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "إعدادات الإتاحة"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:163
|
||||
msgid "High Contrast"
|
||||
msgstr "تباين عال"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
msgid "Large Text"
|
||||
msgstr "نص كبير"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "تقريب"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
msgstr "انتهى %s من البدء"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:49
|
||||
#: ../js/ui/windowAttentionHandler.js:45
|
||||
#, c-format
|
||||
msgid "'%s' is ready"
|
||||
msgstr "'%s' جاهز"
|
||||
|
||||
#: ../js/ui/workspacesView.js:239
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
msgid ""
|
||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr "تعذّر إضافة مساحة عمل جديدة، لتجاوز أقصى عدد من مساحات العمل."
|
||||
|
||||
#: ../js/ui/workspacesView.js:256
|
||||
#: ../js/ui/workspacesView.js:246
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "لا يمكن حذف مساحة العمل الأولى."
|
||||
|
||||
#: ../src/shell-global.c:979
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
msgstr[0] "لا مخرَج"
|
||||
msgstr[1] "مخرَج واحد"
|
||||
msgstr[2] "مخرَجين"
|
||||
msgstr[3] "%u مخارج"
|
||||
msgstr[4] "%u مخرجا"
|
||||
msgstr[5] "%u مخرج"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] "لا مدخل"
|
||||
msgstr[1] "مدخل واحد"
|
||||
msgstr[2] "مدخلين"
|
||||
msgstr[3] "%u مداخل"
|
||||
msgstr[4] "%u مدخلا"
|
||||
msgstr[5] "%u مدخل"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
msgid "System Sounds"
|
||||
msgstr "أصوات النظام"
|
||||
|
||||
#: ../src/shell-global.c:1219
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "منذ أقل من دقيقة"
|
||||
|
||||
#: ../src/shell-global.c:983
|
||||
#: ../src/shell-global.c:1223
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
@ -267,7 +666,7 @@ msgstr[3] "منذ %d دقائق"
|
||||
msgstr[4] "منذ %d دقيقة"
|
||||
msgstr[5] "منذ %d دقيقة"
|
||||
|
||||
#: ../src/shell-global.c:988
|
||||
#: ../src/shell-global.c:1228
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
@ -278,7 +677,7 @@ msgstr[3] "منذ %d ساعات"
|
||||
msgstr[4] "منذ %d ساعة"
|
||||
msgstr[5] "منذ %d ساعة"
|
||||
|
||||
#: ../src/shell-global.c:993
|
||||
#: ../src/shell-global.c:1233
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
@ -289,7 +688,7 @@ msgstr[3] "منذ %d أيام"
|
||||
msgstr[4] "منذ %d يوما"
|
||||
msgstr[5] "منذ %d يوم"
|
||||
|
||||
#: ../src/shell-global.c:998
|
||||
#: ../src/shell-global.c:1238
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
@ -324,6 +723,9 @@ msgstr "ابحث"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Account Information..."
|
||||
#~ msgstr "معلومات الحساب..."
|
||||
|
||||
#~ msgid "%H:%M"
|
||||
#~ msgstr "%OH:%OM"
|
||||
|
||||
|
343
po/cs.po
343
po/cs.po
@ -7,15 +7,16 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-07-11 21:54+0200\n"
|
||||
"PO-Revision-Date: 2010-07-11 21:51+0200\n"
|
||||
"POT-Creation-Date: 2010-10-31 12:09+0100\n"
|
||||
"PO-Revision-Date: 2010-10-31 12:09+0100\n"
|
||||
"Last-Translator: Petr Kovar <pknbe@volny.cz>\n"
|
||||
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
|
||||
"Language: cs\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"X-Generator: Lokalize 1.0\n"
|
||||
"X-Generator: Lokalize 1.1\n"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||
msgid "GNOME Shell"
|
||||
@ -219,6 +220,132 @@ msgstr "Uuid rozšíření určených k vypnutí"
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Zda sbírat statistická data o používání aplikací"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
||||
msgid "Clip the crosshairs at the center"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
|
||||
msgid "Color of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
|
||||
msgid ""
|
||||
"Determines the length of the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
|
||||
msgid ""
|
||||
"Determines the position of the magnified mouse image within the magnified "
|
||||
"view and how it reacts to system mouse movement. The values are - none: no "
|
||||
"mouse tracking; - centered: the mouse image is displayed at the center of "
|
||||
"the zoom region (which also represents the point under the system mouse) and "
|
||||
"the magnified contents are scrolled as the system mouse moves; - "
|
||||
"proportional: the position of the magnified mouse in the zoom region is "
|
||||
"proportionally the same as the position of the system mouse on screen; - "
|
||||
"push: when the magnified mouse intersects a boundary of the zoom region, the "
|
||||
"contents are scrolled into view."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
"transparent."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"Determines whether the crosshairs intersect the magnified mouse sprite, or "
|
||||
"are clipped such that the ends of the horizontal and vertical lines surround "
|
||||
"the mouse image."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
|
||||
#, fuzzy
|
||||
msgid "Enable lens mode"
|
||||
msgstr "Povoleno"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"Enables/disables display of crosshairs centered on the magnified mouse "
|
||||
"sprite."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
|
||||
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 the "
|
||||
"screen edge moves into the magnified view."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
|
||||
msgid "Length of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
|
||||
msgid "Magnification factor"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
|
||||
msgid "Mouse Tracking Mode"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
|
||||
msgid "Opacity of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
|
||||
msgid "Screen position"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
|
||||
msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
|
||||
msgid "Show or hide crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
|
||||
msgid "Show or hide the magnifier"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
|
||||
msgid "Show or hide the magnifier and all of its zoom regions."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The color of the the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
|
||||
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 ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
"value of 2.0 doubles the size."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
|
||||
msgid "Thickness of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
"Whether the magnified view should be centered over the location of the "
|
||||
"system mouse and move with it."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
|
||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/clock-preferences.ui.h:1
|
||||
msgid "Clock Format"
|
||||
msgstr "Formát hodin"
|
||||
@ -248,27 +375,27 @@ msgid "_24 hour format"
|
||||
msgstr "_24hodinový formát"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:388 ../js/ui/dash.js:777
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "APLIKACE"
|
||||
|
||||
#: ../js/ui/appDisplay.js:420
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
msgid "PREFERENCES"
|
||||
msgstr "PŘEDVOLBY"
|
||||
|
||||
#: ../js/ui/appDisplay.js:725
|
||||
#: ../js/ui/appDisplay.js:647
|
||||
msgid "New Window"
|
||||
msgstr "Nové okno"
|
||||
|
||||
#: ../js/ui/appDisplay.js:729
|
||||
#: ../js/ui/appDisplay.js:651
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Odstranit z oblíbených"
|
||||
|
||||
#: ../js/ui/appDisplay.js:730
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Přidat mezi oblíbené"
|
||||
|
||||
#: ../js/ui/appDisplay.js:1037
|
||||
#: ../js/ui/appDisplay.js:829
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Oblíbené přidáte přetažením sem"
|
||||
|
||||
@ -277,209 +404,302 @@ msgstr "Oblíbené přidáte přetažením sem"
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s byl přidán mezi oblíbené."
|
||||
|
||||
#: ../js/ui/appFavorites.js:106
|
||||
#: ../js/ui/appFavorites.js:107
|
||||
#, c-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s byl odstraněn z oblíbených."
|
||||
|
||||
#: ../js/ui/dash.js:146
|
||||
#: ../js/ui/dash.js:142
|
||||
msgid "Find"
|
||||
msgstr "Najít"
|
||||
|
||||
#: ../js/ui/dash.js:475
|
||||
#: ../js/ui/dash.js:473
|
||||
msgid "Searching..."
|
||||
msgstr "Hledá se..."
|
||||
|
||||
#: ../js/ui/dash.js:489
|
||||
#: ../js/ui/dash.js:487
|
||||
msgid "No matching results."
|
||||
msgstr "Neodpovídá ani jeden z výsledků."
|
||||
|
||||
#. **** Places ****
|
||||
#. Translators: This is in the sense of locations for documents,
|
||||
#. network locations, etc.
|
||||
#: ../js/ui/dash.js:796 ../js/ui/placeDisplay.js:552
|
||||
#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:554
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "MÍSTA A ZAŘÍZENÍ"
|
||||
|
||||
#. **** Documents ****
|
||||
#: ../js/ui/dash.js:803 ../js/ui/docDisplay.js:497
|
||||
#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "NEDÁVNÉ POLOŽKY"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:471
|
||||
#: ../js/ui/lookingGlass.js:552
|
||||
msgid "No extensions installed"
|
||||
msgstr "Nejsou nainstalována žádná rozšíření"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:508
|
||||
#: ../js/ui/lookingGlass.js:589
|
||||
msgid "Enabled"
|
||||
msgstr "Povoleno"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:510
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
|
||||
msgid "Disabled"
|
||||
msgstr "Zakázáno"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:512
|
||||
#: ../js/ui/lookingGlass.js:593
|
||||
msgid "Error"
|
||||
msgstr "Chyba"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:514
|
||||
#: ../js/ui/lookingGlass.js:595
|
||||
msgid "Out of date"
|
||||
msgstr "Neaktuální"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:539
|
||||
#: ../js/ui/lookingGlass.js:620
|
||||
msgid "View Source"
|
||||
msgstr "Zobrazit zdroj"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:545
|
||||
#: ../js/ui/lookingGlass.js:626
|
||||
msgid "Web Page"
|
||||
msgstr "Webová stránka"
|
||||
|
||||
#: ../js/ui/overview.js:165
|
||||
#: ../js/ui/overview.js:160
|
||||
msgid "Undo"
|
||||
msgstr "Zpět"
|
||||
|
||||
#: ../js/ui/panel.js:517
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:469
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Ukončit %s"
|
||||
|
||||
#: ../js/ui/panel.js:494
|
||||
msgid "Preferences"
|
||||
msgstr "Předvolby"
|
||||
|
||||
# Not sure whether we've enough space for it, but anyway, looks more aesthetically with "%A".
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:603
|
||||
#: ../js/ui/panel.js:580
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%A, %e. %B, %R:%S"
|
||||
|
||||
# Not sure whether we've enough space for it, but anyway, looks more aesthetically with "%A".
|
||||
#: ../js/ui/panel.js:604
|
||||
#: ../js/ui/panel.js:581
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%A, %e. %B, %R"
|
||||
|
||||
# Not sure whether we've enough space for it, but anyway, looks more aesthetically with "%A".
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:608
|
||||
#: ../js/ui/panel.js:585
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%A, %R:%S"
|
||||
|
||||
# Not sure whether we've enough space for it, but anyway, looks more aesthetically with "%A".
|
||||
#: ../js/ui/panel.js:609
|
||||
#: ../js/ui/panel.js:586
|
||||
msgid "%a %R"
|
||||
msgstr "%A, %R"
|
||||
|
||||
# Not sure whether we've enough space for it, but anyway, looks more aesthetically with "%A".
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:616
|
||||
#: ../js/ui/panel.js:593
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%A, %e. %B, %l:%M:%S %p"
|
||||
|
||||
# Not sure whether we've enough space for it, but anyway, looks more aesthetically with "%A".
|
||||
#: ../js/ui/panel.js:617
|
||||
#: ../js/ui/panel.js:594
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%A, %e. %B, %l:%M %p"
|
||||
|
||||
# Not sure whether we've enough space for it, but anyway, looks more aesthetically with "%A".
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:621
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%A, %l:%M:%S %p"
|
||||
|
||||
# Not sure whether we've enough space for it, but anyway, looks more aesthetically with "%A".
|
||||
#: ../js/ui/panel.js:622
|
||||
#: ../js/ui/panel.js:599
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%A, %l:%M %p"
|
||||
|
||||
#. 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:760
|
||||
#: ../js/ui/panel.js:744
|
||||
msgid "Activities"
|
||||
msgstr "Činnosti"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:109
|
||||
#: ../js/ui/placeDisplay.js:111
|
||||
#, c-format
|
||||
msgid "Failed to unmount '%s'"
|
||||
msgstr "Nelze odpojit \"%s\""
|
||||
|
||||
#: ../js/ui/placeDisplay.js:112
|
||||
#: ../js/ui/placeDisplay.js:114
|
||||
msgid "Retry"
|
||||
msgstr "Opakovat"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:157
|
||||
#: ../js/ui/placeDisplay.js:159
|
||||
msgid "Connect to..."
|
||||
msgstr "Připojit se k..."
|
||||
|
||||
#: ../js/ui/runDialog.js:234
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:33
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
#: ../js/ui/runDialog.js:233
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Zadejte prosím příkaz:"
|
||||
|
||||
#: ../js/ui/runDialog.js:379
|
||||
#: ../js/ui/runDialog.js:378
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Vykonání \"%s\" selhalo:"
|
||||
|
||||
#: ../js/ui/statusMenu.js:91
|
||||
#: ../js/ui/statusMenu.js:101
|
||||
msgid "Available"
|
||||
msgstr "Přítomen"
|
||||
|
||||
#: ../js/ui/statusMenu.js:95
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Busy"
|
||||
msgstr "Zaneprázdněn"
|
||||
|
||||
#: ../js/ui/statusMenu.js:99
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "Neviditelný"
|
||||
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Account Information..."
|
||||
msgstr "Informace o účtu..."
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr "Můj účet..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:110
|
||||
msgid "System Preferences..."
|
||||
msgstr "Předvolby systému..."
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
msgid "System Settings..."
|
||||
msgstr "Nastavení systému..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:117
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
msgid "Lock Screen"
|
||||
msgstr "Uzamknout obrazovku"
|
||||
|
||||
#: ../js/ui/statusMenu.js:121
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Switch User"
|
||||
msgstr "Přepnout uživatele"
|
||||
|
||||
#: ../js/ui/statusMenu.js:126
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
msgid "Log Out..."
|
||||
msgstr "Odhlásit..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr "Uspat do paměti"
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
msgstr "Restartovat..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
msgid "Shut Down..."
|
||||
msgstr "Vypnout..."
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:47
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "Čtení obrazovky"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:91
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Klávesnice na obrazovce"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:94
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Vizuální upozornění"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:97
|
||||
msgid "Sticky Keys"
|
||||
msgstr "Lepící klávesy"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:100
|
||||
msgid "Slow Keys"
|
||||
msgstr "Pomalé klávesy"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:103
|
||||
msgid "Bounce Keys"
|
||||
msgstr "Vícenásobné stisky kláves"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:106
|
||||
msgid "Mouse Keys"
|
||||
msgstr "Myš klávesnicí"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:110
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "Nastavení zpřístupnění"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:163
|
||||
msgid "High Contrast"
|
||||
msgstr "Vysoký kontrast"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
msgid "Large Text"
|
||||
msgstr "Styl velkého textu"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "Zvětšení"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
msgstr "Spouštění %s dokončeno"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:49
|
||||
#: ../js/ui/windowAttentionHandler.js:45
|
||||
#, c-format
|
||||
msgid "'%s' is ready"
|
||||
msgstr "Připraveno \"%s\""
|
||||
|
||||
#: ../js/ui/workspacesView.js:237
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
msgid ""
|
||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr ""
|
||||
"Novou pracovní plochu nelze přidat, jelikož byl dosažen maximální počet "
|
||||
"pracovních ploch."
|
||||
|
||||
#: ../js/ui/workspacesView.js:254
|
||||
#: ../js/ui/workspacesView.js:246
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "Nelze odstranit první pracovní plochu."
|
||||
|
||||
#: ../src/shell-global.c:1039
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
msgstr[0] "%u výstup"
|
||||
msgstr[1] "%u výstupy"
|
||||
msgstr[2] "%u výstupů"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] "%u vstup"
|
||||
msgstr[1] "%u vstupy"
|
||||
msgstr[2] "%u vstupů"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
msgid "System Sounds"
|
||||
msgstr "Systémové zvuky"
|
||||
|
||||
#: ../src/shell-global.c:1219
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Před méně než minutou"
|
||||
|
||||
#: ../src/shell-global.c:1043
|
||||
#: ../src/shell-global.c:1223
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
@ -487,7 +707,7 @@ msgstr[0] "Před %d minutou"
|
||||
msgstr[1] "Před %d minutami"
|
||||
msgstr[2] "Před %d minutami"
|
||||
|
||||
#: ../src/shell-global.c:1048
|
||||
#: ../src/shell-global.c:1228
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
@ -495,7 +715,7 @@ msgstr[0] "Před %d hodinou"
|
||||
msgstr[1] "Před %d hodinami"
|
||||
msgstr[2] "Před %d hodinami"
|
||||
|
||||
#: ../src/shell-global.c:1053
|
||||
#: ../src/shell-global.c:1233
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
@ -503,7 +723,7 @@ msgstr[0] "Před %d dnem"
|
||||
msgstr[1] "Před %d dny"
|
||||
msgstr[2] "Před %d dny"
|
||||
|
||||
#: ../src/shell-global.c:1058
|
||||
#: ../src/shell-global.c:1238
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
@ -534,3 +754,6 @@ msgstr "Hledat"
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Account Information..."
|
||||
#~ msgstr "Informace o účtu..."
|
||||
|
217
po/de.po
217
po/de.po
@ -15,9 +15,9 @@ msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&component=general\n"
|
||||
"POT-Creation-Date: 2010-10-02 20:44+0000\n"
|
||||
"PO-Revision-Date: 2010-10-04 20:30+0100\n"
|
||||
"Last-Translator: Mario Blättermann <mariobl@gnome.org>\n"
|
||||
"POT-Creation-Date: 2010-10-10 03:14+0000\n"
|
||||
"PO-Revision-Date: 2010-10-10 20:23+0200\n"
|
||||
"Last-Translator: Christian Kirbach <Christian.Kirbach@googlemail.com>\n"
|
||||
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -58,7 +58,7 @@ msgstr "Interne Werkzeuge für Entwickler und Tester mit Alt+F2 aktivieren"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "Um den Screencast zu speichern, wird eine Dateiendung benötigt "
|
||||
msgstr "Die Dateiendung zum Speichern des Screencast"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid "Framerate used for recording screencasts."
|
||||
@ -69,8 +69,8 @@ msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should not be loaded."
|
||||
msgstr ""
|
||||
"Die Erweiterungen der GNOME-Shell besitzen eine UUID. Dieser Schlüssel listet "
|
||||
"Erweiterungen auf, welche nicht geladen werden sollen."
|
||||
"Die Erweiterungen der GNOME-Shell besitzen eine UUID. Dieser Schlüssel "
|
||||
"listet Erweiterungen auf, welche nicht geladen werden sollen."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
@ -128,9 +128,10 @@ msgstr ""
|
||||
"Auffüllung haben; die Ausgabe dieser Auffüllung wird in die Ausgabedatei "
|
||||
"geschrieben. Die Weiterleitung kann auch mit ihrer eigenen Ausgabe umgehen. "
|
||||
"Das kann zum Senden der Ausgabe über shout2send an einen Icecast-Server oder "
|
||||
"Ähnliches verwendet werden. Falls nicht (oder auf einen leeren Wert) gesetzt, "
|
||||
"so wird die vorgegebene Weiterleitung verwendet, welche derzeit »videorate ! "
|
||||
"theoraenc ! oggmux« lautet und die Aufnahme im Ogg-Theora-Format speichert."
|
||||
"Ähnliches verwendet werden. Falls nicht (oder auf einen leeren Wert) "
|
||||
"gesetzt, so wird die vorgegebene Weiterleitung verwendet, welche derzeit "
|
||||
"»videorate ! theoraenc ! oggmux« lautet und die Aufnahme im Ogg-Theora-Format "
|
||||
"speichert."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show date in clock"
|
||||
@ -149,8 +150,8 @@ msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr ""
|
||||
"Programme, welche auf diese Bezeichner zutreffen, werden im Favoriten-Bereich "
|
||||
"angezeigt."
|
||||
"Programme, welche auf diese Bezeichner zutreffen, werden im Favoriten-"
|
||||
"Bereich angezeigt."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
@ -168,9 +169,10 @@ msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr ""
|
||||
"Die Bildwiederholrate des Screencasts, der durch den Screencast-Recorder der "
|
||||
"GNOME-Shell aufgezeichnet werden soll, in Einzelbildern pro Sekunde."
|
||||
"Die Bildwiederholrate des Screencasts, der durch den Screencast-Aufzeichner "
|
||||
"der GNOME-Shell aufgezeichnet werden soll, in Einzelbildern pro Sekunde."
|
||||
|
||||
# hmm Enkodieren oder Kodieren?
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "Die GStreamer-Weiterleitung zur Enkodierung des Screencasts"
|
||||
@ -199,8 +201,9 @@ msgstr ""
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
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 strftime() "
|
||||
"to obtain a specific format. See the strftime() manual for more information."
|
||||
"set to \"custom\". You can use conversion specifiers understood by strftime"
|
||||
"() to obtain a specific format. See the strftime() manual for more "
|
||||
"information."
|
||||
msgstr ""
|
||||
"Dieser Schlüssel legt das Format fest, das von der Panel-Uhr verwendet wird, "
|
||||
"wenn der Format-Schlüssel auf »custom« (benutzerdefiniert) gesetzt ist. Sie "
|
||||
@ -218,8 +221,8 @@ msgid ""
|
||||
"the show_date and show_seconds keys are ignored."
|
||||
msgstr ""
|
||||
"Dieser Schlüssel legt das Stundenformat für die Anzeige der Panel-Uhr fest. "
|
||||
"Mögliche Werte sind »12-hour«, »24-hour«, »unix« und »custom«. Wenn Sie "
|
||||
"»unix« verwenden, zeigt die Uhr die Sekunden seit Epoch, dem Beginn der Unix-"
|
||||
"Mögliche Werte sind »12-hour«, »24-hour«, »unix« und »custom«. Wenn Sie »unix« "
|
||||
"verwenden, zeigt die Uhr die Sekunden seit Epoch, dem Beginn der Unix-"
|
||||
"Zeitrechnung am 1. Januar 1970 an. Wenn Sie »custom« (benutzerdefiniert) "
|
||||
"verwenden, zeigt die Uhr die Zeit gemäß dem im Schlüssel »custom_format« "
|
||||
"angegebenen Format an. Beachten Sie, dass bei »unix« oder »custom« die "
|
||||
@ -233,6 +236,164 @@ msgstr "UUIDs der zu deaktivierenden Erweiterungen"
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Legt fest, ob der Status der Anwendungsnutzung erfasst werden soll"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
||||
msgid "Clip the crosshairs at the center"
|
||||
msgstr "Fadenkreuz in der Mitte anheften"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
|
||||
msgid "Color of the crosshairs"
|
||||
msgstr "Farbe des Fadenkreuzes"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
|
||||
msgid ""
|
||||
"Determines the length of the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
"Legt die Länge der senkrechten und waagerechten Linien fest, die das "
|
||||
"Fadenkreuz bilden."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
|
||||
msgid ""
|
||||
"Determines the position of the magnified mouse image within the magnified "
|
||||
"view and how it reacts to system mouse movement. The values are - none: no "
|
||||
"mouse tracking; - centered: the mouse image is displayed at the center of "
|
||||
"the zoom region (which also represents the point under the system mouse) and "
|
||||
"the magnified contents are scrolled as the system mouse moves; - "
|
||||
"proportional: the position of the magnified mouse in the zoom region is "
|
||||
"proportionally the same as the position of the system mouse on screen; - "
|
||||
"push: when the magnified mouse intersects a boundary of the zoom region, the "
|
||||
"contents are scrolled into view."
|
||||
msgstr ""
|
||||
"Legt die Position des vergrößerten Bildes der Maus innerhalb der "
|
||||
"vergrößerten Ansicht fest, und wie die Maus auf die Mausbewegungen des "
|
||||
"Systems reagiert. Folgende Werte sind möglich: »none« - keine Mausverfolgung; "
|
||||
"»centered« - das Mausbild wird in der Mitte des vergrößerten Bereiches "
|
||||
"dargestellt (welche auch den Zeiger der Systemmaus darstellt), wobei der "
|
||||
"vergrößerte Inhalt gerollt wird, sobald die Systemmaus bewegt wird; "
|
||||
"»proportional« - die Position der vergrößerten Maus im vergrößerten Bereich "
|
||||
"ist proportional zur Position der Systemmaus auf dem Bildschirm; »push« - "
|
||||
"wenn die vergrößerte Maus einen der Ränder des vergrößerten Bereichs "
|
||||
"berührt, wird der entsprechende Inhalt in die Ansicht geschoben."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
"transparent."
|
||||
msgstr ""
|
||||
"Legt die Transparenz des Fadenkreuzes fest, von vollständig deckend bis "
|
||||
"vollständig transparent."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"Determines whether the crosshairs intersect the magnified mouse sprite, or "
|
||||
"are clipped such that the ends of the horizontal and vertical lines surround "
|
||||
"the mouse image."
|
||||
msgstr ""
|
||||
"Legt fest, ob das Fadenkreuz das Bild der vergrößerten Maus überlagern darf "
|
||||
"oder die waagerechten und senkrechten Linien vor dem Mausbild abgeschnitten "
|
||||
"werden."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
|
||||
msgid "Enable lens mode"
|
||||
msgstr "Vergrößerungsmodus aktivieren"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"Enables/disables display of crosshairs centered on the magnified mouse "
|
||||
"sprite."
|
||||
msgstr ""
|
||||
"Aktiviert oder deaktiviert die Anzeige des Fadenkreuzes zentriert im "
|
||||
"vergrößerten Mausbild."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
|
||||
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 the "
|
||||
"screen edge moves into the magnified view."
|
||||
msgstr ""
|
||||
"Bei zentrierter Mausverfolgung werden die vergrößerten Bildschirminhalte "
|
||||
"weiterhin in die vergrößerte Ansicht hineingerollt, sobald sich der "
|
||||
"Systemzeiger einem der Ränder der Arbeitsfläche nähert, so dass der "
|
||||
"Bildschirmrand in der vergrößerten Ansicht zu sehen ist."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
|
||||
msgid "Length of the crosshairs"
|
||||
msgstr "Länge der Fadenkreuzlinien"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
|
||||
msgid "Magnification factor"
|
||||
msgstr "Vergrößerungsfaktor"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
|
||||
msgid "Mouse Tracking Mode"
|
||||
msgstr "Mausverfolgungsmodus"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
|
||||
msgid "Opacity of the crosshairs"
|
||||
msgstr "Deckkraft des Fadenkreuzes"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
|
||||
msgid "Screen position"
|
||||
msgstr "Bildschirmposition"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
|
||||
msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
msgstr "Vergrößerte Inhalte über die Ränder der Arbeitsfläche hinaus rollen"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
|
||||
msgid "Show or hide crosshairs"
|
||||
msgstr "Fadenkreuz anzeigen oder verbergen"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
|
||||
msgid "Show or hide the magnifier"
|
||||
msgstr "Bildschirmlupe anzeigen oder verbergen"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
|
||||
msgid "Show or hide the magnifier and all of its zoom regions."
|
||||
msgstr ""
|
||||
"Die Bildschirmlupe und deren vergrößerte Bereiche anzeigen oder verbergen."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The color of the the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
"Die Farbe der senkrechten und waagerechten Linien, die das Fadenkreuz bilden."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
|
||||
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 ""
|
||||
"Die vergrößerte Ansicht füllt entweder den ganzen Bildschirm, die obere "
|
||||
"Hälfte, die untere Hälfte, die linke Hälfte oder die rechte Hälfte des "
|
||||
"Bildschirms."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
"value of 2.0 doubles the size."
|
||||
msgstr ""
|
||||
"Der Faktor der Vergrößerung. Ein Wert von 1.0 bedeutet hierbei keine "
|
||||
"Vergrößerung, während ein Wert von 2.0 die Ansichtsgröße verdoppelt."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
|
||||
msgid "Thickness of the crosshairs"
|
||||
msgstr "Dicke der Fadenkreuzlinien"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
"Whether the magnified view should be centered over the location of the "
|
||||
"system mouse and move with it."
|
||||
msgstr ""
|
||||
"Legt fest, ob die vergrößerte Ansicht über der Position der Systemmaus "
|
||||
"zentriert werden soll und mit dieser mitbewegt werden soll."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
|
||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
msgstr ""
|
||||
"Dicke der senkrechten und waagerechten Linien, die das Fadenkreuz bilden."
|
||||
|
||||
#: ../data/clock-preferences.ui.h:1
|
||||
msgid "Clock Format"
|
||||
msgstr "Uhr-Format"
|
||||
@ -353,58 +514,58 @@ msgid "Undo"
|
||||
msgstr "Rückgängig"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:461
|
||||
#: ../js/ui/panel.js:468
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "%s beenden"
|
||||
|
||||
#: ../js/ui/panel.js:486
|
||||
#: ../js/ui/panel.js:493
|
||||
msgid "Preferences"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:572
|
||||
#: ../js/ui/panel.js:579
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a, %e. %b, %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:573
|
||||
#: ../js/ui/panel.js:580
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%a, %e. %b, %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:577
|
||||
#: ../js/ui/panel.js:584
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:578
|
||||
#: ../js/ui/panel.js:585
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:585
|
||||
#: ../js/ui/panel.js:592
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a, %e. %b, %H:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:586
|
||||
#: ../js/ui/panel.js:593
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a, %e. %b, %H:%M"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:590
|
||||
#: ../js/ui/panel.js:597
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %H:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:591
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %H:%M"
|
||||
|
||||
#. 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:736
|
||||
#: ../js/ui/panel.js:743
|
||||
msgid "Activities"
|
||||
msgstr "Aktivitäten"
|
||||
|
||||
|
337
po/es.po
337
po/es.po
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: gnome-shell.master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&component=general\n"
|
||||
"POT-Creation-Date: 2010-09-22 15:13+0000\n"
|
||||
"PO-Revision-Date: 2010-09-25 10:43+0200\n"
|
||||
"POT-Creation-Date: 2010-10-30 17:51+0000\n"
|
||||
"PO-Revision-Date: 2010-10-31 21:36+0100\n"
|
||||
"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
|
||||
"Language-Team: Español <gnome-es-list@gnome.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -88,8 +88,8 @@ msgid ""
|
||||
"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."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
@ -115,13 +115,13 @@ msgid ""
|
||||
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
||||
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 "
|
||||
"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 ! theoraenc ! oggmux» y greba en "
|
||||
"Ogg Theora."
|
||||
|
||||
@ -211,8 +211,8 @@ msgid ""
|
||||
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 "
|
||||
"«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»."
|
||||
@ -226,6 +226,163 @@ msgid "Whether to collect stats about applications usage"
|
||||
msgstr ""
|
||||
"Indica si se deben recolectar estadísticas acerca del uso de las aplicaciones"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
||||
msgid "Clip the crosshairs at the center"
|
||||
msgstr "Fijar los cursores en el centro"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
|
||||
msgid "Color of the crosshairs"
|
||||
msgstr "Color de las cruces"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
|
||||
msgid ""
|
||||
"Determines the length of the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
"Determina la longitud de las líneas verticales y horizontales que conforman "
|
||||
"los cursores."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
|
||||
msgid ""
|
||||
"Determines the position of the magnified mouse image within the magnified "
|
||||
"view and how it reacts to system mouse movement. The values are - none: no "
|
||||
"mouse tracking; - centered: the mouse image is displayed at the center of "
|
||||
"the zoom region (which also represents the point under the system mouse) and "
|
||||
"the magnified contents are scrolled as the system mouse moves; - "
|
||||
"proportional: the position of the magnified mouse in the zoom region is "
|
||||
"proportionally the same as the position of the system mouse on screen; - "
|
||||
"push: when the magnified mouse intersects a boundary of the zoom region, the "
|
||||
"contents are scrolled into view."
|
||||
msgstr ""
|
||||
"Determina la posición de la imagen magnificada del ratón dentro de la vista "
|
||||
"magnificada y cómo reacciona al movimiento del ratón del sistema. Los "
|
||||
"valores son «none» (ninguno): sin seguimiento del ratón; "
|
||||
"«centered» (centrado): la imagen del ratón se muestra en el centro de la "
|
||||
"región ampliada (que también representa el punto bajo el ratón del sistema) "
|
||||
"y el contenido magnificado se desliza según se mueve el ratón del sistema; "
|
||||
"«proporcional»: la posición del ratón magnificado en la región de ampliación "
|
||||
"es proporcionalmente la misma que la posición del ratón del sistema en el "
|
||||
"ratón; «push» (empujar): cuando el ratón magnificado cruza un límite de la "
|
||||
"región de ampliación, el contenido se desliza en la vista."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
"transparent."
|
||||
msgstr ""
|
||||
"Determina la transparencia de los cursores, de completamente opacos a "
|
||||
"completamente transparentes."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"Determines whether the crosshairs intersect the magnified mouse sprite, or "
|
||||
"are clipped such that the ends of the horizontal and vertical lines surround "
|
||||
"the mouse image."
|
||||
msgstr ""
|
||||
"Determina si las cruces cruzan el «sprite» magnificado del ratón o se fijan "
|
||||
"de tal forma que los finales de las líneas horizontales y verticales rodean "
|
||||
"la imagen del ratón."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
|
||||
msgid "Enable lens mode"
|
||||
msgstr "Activar el modo lente"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"Enables/disables display of crosshairs centered on the magnified mouse "
|
||||
"sprite."
|
||||
msgstr ""
|
||||
"Activa/desactiva el mostrado de los cursores centrados en el «sprite» "
|
||||
"magnificado del ratón."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
|
||||
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 the "
|
||||
"screen edge moves into the magnified view."
|
||||
msgstr ""
|
||||
"Para el seguimiento del centro del ratón, cuando el puntero del sistema está "
|
||||
"cerca del borde de la pantalla, el contenido magnificado continúa "
|
||||
"desplazándose de tal forma que el borde de la pantalla se mueve dentro de la "
|
||||
"vista magnificada."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
|
||||
msgid "Length of the crosshairs"
|
||||
msgstr "Longitud de las cruces"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
|
||||
msgid "Magnification factor"
|
||||
msgstr "Factor de magnificación"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
|
||||
msgid "Mouse Tracking Mode"
|
||||
msgstr "Modo de seguimiento del ratón"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
|
||||
msgid "Opacity of the crosshairs"
|
||||
msgstr "Opacidad de las cruces"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
|
||||
msgid "Screen position"
|
||||
msgstr "Posición de la pantalla"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
|
||||
msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
msgstr ""
|
||||
"Desplazar el contenido magnificado más allá de los bordes del escritorio"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
|
||||
msgid "Show or hide crosshairs"
|
||||
msgstr "Mostrar u ocultar las cruces"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
|
||||
msgid "Show or hide the magnifier"
|
||||
msgstr "Mostrar u ocultar el magnificador"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
|
||||
msgid "Show or hide the magnifier and all of its zoom regions."
|
||||
msgstr "Mostrar u ocultar el magnificador y todas sus regiones de ampliación."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The color of the the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
"El color de las líneas verticales y horizontales que conforman las cruces."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
|
||||
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 ""
|
||||
"La vista magnificada o llena la pantalla u ocupa la mitad superior, mitad "
|
||||
"inferior, mitad izquierda o mitad derecha de la pantalla."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
"value of 2.0 doubles the size."
|
||||
msgstr ""
|
||||
"El poder de la magnificación. Un valor de 1.0 significa sin magnificación. "
|
||||
"Un valor de 2.0 duplica el tamaño."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
|
||||
msgid "Thickness of the crosshairs"
|
||||
msgstr "Grosor de las cruces"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
"Whether the magnified view should be centered over the location of the "
|
||||
"system mouse and move with it."
|
||||
msgstr ""
|
||||
"Indica si la vista magnificada se debe centrar sobre la ubicación del ratón "
|
||||
"del sistema y moverse con ella."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
|
||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
msgstr ""
|
||||
"Anchura de las líneas verticales y horizontales que conforman las cruces."
|
||||
|
||||
#: ../data/clock-preferences.ui.h:1
|
||||
msgid "Clock Format"
|
||||
msgstr "Formato del reloj"
|
||||
@ -263,19 +420,19 @@ msgstr "APLICACIONES"
|
||||
msgid "PREFERENCES"
|
||||
msgstr "PREFERENCIAS"
|
||||
|
||||
#: ../js/ui/appDisplay.js:653
|
||||
#: ../js/ui/appDisplay.js:647
|
||||
msgid "New Window"
|
||||
msgstr "Ventana nueva"
|
||||
|
||||
#: ../js/ui/appDisplay.js:657
|
||||
#: ../js/ui/appDisplay.js:651
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Quitar de los favoritos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:658
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Añadir a los favoritos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:986
|
||||
#: ../js/ui/appDisplay.js:829
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Arrastrar aquí para añadir a los favoritos"
|
||||
|
||||
@ -321,7 +478,9 @@ msgstr "No hay extensiones instaladas"
|
||||
msgid "Enabled"
|
||||
msgstr "Activado"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:591
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
|
||||
msgid "Disabled"
|
||||
msgstr "Desactivado"
|
||||
|
||||
@ -346,58 +505,58 @@ msgid "Undo"
|
||||
msgstr "Deshacer"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:467
|
||||
#: ../js/ui/panel.js:469
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Salir de %s"
|
||||
|
||||
#: ../js/ui/panel.js:492
|
||||
#: ../js/ui/panel.js:494
|
||||
msgid "Preferences"
|
||||
msgstr "Preferencias"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:578
|
||||
#: ../js/ui/panel.js:580
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %e de %b, %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:579
|
||||
#: ../js/ui/panel.js:581
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%a %e de %b, %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:583
|
||||
#: ../js/ui/panel.js:585
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:584
|
||||
#: ../js/ui/panel.js:586
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:591
|
||||
#: ../js/ui/panel.js:593
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %e de %b, %H:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:592
|
||||
#: ../js/ui/panel.js:594
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a %e de %b, %H:%M"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:596
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %H:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:597
|
||||
#: ../js/ui/panel.js:599
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %H:%M"
|
||||
|
||||
#. 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:742
|
||||
#: ../js/ui/panel.js:744
|
||||
msgid "Activities"
|
||||
msgstr "Actividades"
|
||||
|
||||
@ -419,7 +578,7 @@ msgstr "Conectar a…"
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:32
|
||||
#: ../js/ui/popupMenu.js:33
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
@ -432,42 +591,95 @@ msgstr "Introduzca un comando:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Falló la ejecución de «%s»:"
|
||||
|
||||
#: ../js/ui/statusMenu.js:91
|
||||
#: ../js/ui/statusMenu.js:101
|
||||
msgid "Available"
|
||||
msgstr "Disponible"
|
||||
|
||||
#: ../js/ui/statusMenu.js:95
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Busy"
|
||||
msgstr "Ocupado"
|
||||
|
||||
#: ../js/ui/statusMenu.js:99
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "Invisible"
|
||||
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Account Information..."
|
||||
msgstr "Información de la cuenta…"
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr "Mi cuenta…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:110
|
||||
msgid "System Preferences..."
|
||||
msgstr "Preferencias del sistema…"
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
#| msgid "System Preferences..."
|
||||
msgid "System Settings..."
|
||||
msgstr "Ajustes del sistema…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:117
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
msgid "Lock Screen"
|
||||
msgstr "Bloquear la pantalla"
|
||||
|
||||
#: ../js/ui/statusMenu.js:121
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Switch User"
|
||||
msgstr "Cambiar de usuario"
|
||||
|
||||
#: ../js/ui/statusMenu.js:126
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
msgid "Log Out..."
|
||||
msgstr "Salir…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr "Suspender"
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
msgstr "Reiniciar…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
msgid "Shut Down..."
|
||||
msgstr "Apagar…"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "Lector de pantalla"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:91
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Teclado en pantalla"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:94
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Alertas visuales"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:97
|
||||
msgid "Sticky Keys"
|
||||
msgstr "Teclas persistentes"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:100
|
||||
msgid "Slow Keys"
|
||||
msgstr "Teclas lentas"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:103
|
||||
msgid "Bounce Keys"
|
||||
msgstr "Rechazo de teclas"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:106
|
||||
msgid "Mouse Keys"
|
||||
msgstr "Teclas del ratón"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:110
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "Preferencias del acceso universal"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:163
|
||||
msgid "High Contrast"
|
||||
msgstr "Contraste alto"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
msgid "Large Text"
|
||||
msgstr "<b>Texto:</b>"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "Ampliación"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
@ -478,43 +690,65 @@ msgstr "%s finalizó su lanzamiento"
|
||||
msgid "'%s' is ready"
|
||||
msgstr "«%s» está preparado"
|
||||
|
||||
#: ../js/ui/workspacesView.js:230
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
msgid ""
|
||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr ""
|
||||
"No se puede añadir un área de trabajo nueva porque se ha llegado al límite "
|
||||
"de áreas de trabajo."
|
||||
|
||||
#: ../js/ui/workspacesView.js:247
|
||||
#: ../js/ui/workspacesView.js:246
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "No se puede quitar el primer área de trabajo."
|
||||
|
||||
#: ../src/shell-global.c:1189
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
msgstr[0] "%u salida"
|
||||
msgstr[1] "%u salidas"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] "%u entrada"
|
||||
msgstr[1] "%u entradas"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
msgid "System Sounds"
|
||||
msgstr "Sonidos del sistema"
|
||||
|
||||
#: ../src/shell-global.c:1219
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Hace menos de un minuto"
|
||||
|
||||
#: ../src/shell-global.c:1193
|
||||
#: ../src/shell-global.c:1223
|
||||
#, 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:1198
|
||||
#: ../src/shell-global.c:1228
|
||||
#, 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:1203
|
||||
#: ../src/shell-global.c:1233
|
||||
#, 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:1208
|
||||
#: ../src/shell-global.c:1238
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
@ -545,6 +779,9 @@ msgstr "Buscar"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Account Information..."
|
||||
#~ msgstr "Información de la cuenta…"
|
||||
|
||||
#~ msgid "ON"
|
||||
#~ msgstr "ENCENDIDO"
|
||||
|
||||
|
269
po/et.po
269
po/et.po
@ -1,30 +1,30 @@
|
||||
# GNOME Kesta eesti keele tõlge.
|
||||
# Estonian translation of GNOME Shell.
|
||||
#
|
||||
# Copyright (C) 2010 The GNOME Project.
|
||||
# Estonian translation for gnome-shell.
|
||||
# Copyright (C) 2010 The Gnome Project
|
||||
# This file is distributed under the same license as the gnome-shell package.
|
||||
#
|
||||
# Ivar Smolin <okul linux ee>, 2010.
|
||||
# Mattias Põldaru <mahfiaz gmail com>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&component=general\n"
|
||||
"POT-Creation-Date: 2010-09-10 02:04+0000\n"
|
||||
"PO-Revision-Date: 2010-09-10 08:29+0300\n"
|
||||
"Last-Translator: Ivar Smolin <okul@linux.ee>\n"
|
||||
"Language-Team: Estonian <et@li.org>\n"
|
||||
"POT-Creation-Date: 2010-10-16 19:24+0000\n"
|
||||
"PO-Revision-Date: 2010-10-17 17:16+0300\n"
|
||||
"Last-Translator: Mattias Põldaru <mahfiaz gmail com>\n"
|
||||
"Language-Team: Estonian <gnome-et@linux.ee>\n"
|
||||
"Language: et\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Poedit-Language: Estonian\n"
|
||||
"X-Poedit-Country: Estonia\n"
|
||||
|
||||
msgid "GNOME Shell"
|
||||
msgstr "GNOME Kest"
|
||||
msgstr "GNOME kest"
|
||||
|
||||
msgid "Window management and application launching"
|
||||
msgstr "Aknahaldus ja rakenduste käivitamine"
|
||||
msgstr "Aknahaldur ja rakenduste käivitaja"
|
||||
|
||||
msgid "Clock"
|
||||
msgstr "Kell"
|
||||
@ -36,18 +36,21 @@ msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
"dialog."
|
||||
msgstr ""
|
||||
"Lubab ligipääsu sisemistele silumise ja monitoorimise tööriistadele Alt-F2 "
|
||||
"dialoogi kaudu."
|
||||
|
||||
msgid "Custom format of the clock"
|
||||
msgstr "Kella kohandatud vorming"
|
||||
msgstr "Kellaaaja kohandatud vorming"
|
||||
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
msgstr ""
|
||||
"Arendajate ja testijate jaoks sisemiste tööriistade lubamine Alt-F2 alt"
|
||||
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr ""
|
||||
msgstr "Faililaiend, mida kasutatakse ekraanivideo salvestamisel"
|
||||
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr ""
|
||||
msgstr "Ekraanivideo lindistamisel kasutatav kaadrikiirus."
|
||||
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
@ -55,7 +58,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr ""
|
||||
msgstr "Käsudialoogi (Alt-F2) ajalugu"
|
||||
|
||||
msgid "Hour format"
|
||||
msgstr "Tundide vorming"
|
||||
@ -64,17 +67,21 @@ msgid ""
|
||||
"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
|
||||
"clock, in addition to time."
|
||||
msgstr ""
|
||||
"Kui tõene ja vorming on kas \"12-tundi\" või \"24-tundi\", kuvatakse "
|
||||
"kellaaja kõrval ka kuupäeva."
|
||||
|
||||
msgid ""
|
||||
"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
|
||||
"time."
|
||||
msgstr ""
|
||||
"Kui tõene ja vorming on kas \"12-tundi\" või \"24-tundi\", kuvatakse "
|
||||
"kellaaega koos sekunditega."
|
||||
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr ""
|
||||
msgstr "Kui tõene, kuvatakse kalendris kuupäeva ISO nädalate järgi."
|
||||
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr ""
|
||||
msgstr "Lemmikrakenduste töölauafailide ID-de loend"
|
||||
|
||||
msgid "Overview workspace view mode"
|
||||
msgstr ""
|
||||
@ -91,13 +98,13 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgid "Show date in clock"
|
||||
msgstr "Kuupäeva näitamine koos kellaajaga"
|
||||
msgstr "Kell näitab kuupäeva"
|
||||
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr ""
|
||||
msgstr "Kalendris näidatakse nädala kuupäeva"
|
||||
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Aja näitamine koos sekunditega"
|
||||
msgstr "Kellaaega näidatakse sekunditega"
|
||||
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
@ -147,80 +154,190 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr ""
|
||||
msgstr "Keelatavate laienduste UUID-d"
|
||||
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr ""
|
||||
|
||||
msgid "Clip the crosshairs at the center"
|
||||
msgstr "Niitristi keskel on auk"
|
||||
|
||||
msgid "Color of the crosshairs"
|
||||
msgstr "Niitristi värvus"
|
||||
|
||||
msgid ""
|
||||
"Determines the length of the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Determines the position of the magnified mouse image within the magnified "
|
||||
"view and how it reacts to system mouse movement. The values are - none: no "
|
||||
"mouse tracking; - centered: the mouse image is displayed at the center of "
|
||||
"the zoom region (which also represents the point under the system mouse) and "
|
||||
"the magnified contents are scrolled as the system mouse moves; - "
|
||||
"proportional: the position of the magnified mouse in the zoom region is "
|
||||
"proportionally the same as the position of the system mouse on screen; - "
|
||||
"push: when the magnified mouse intersects a boundary of the zoom region, the "
|
||||
"contents are scrolled into view."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
"transparent."
|
||||
msgstr ""
|
||||
"Määrab niitristi läbipaistvuse, alates täiesti läbipaistmatust kuni täiesti "
|
||||
"läbipaistvani."
|
||||
|
||||
msgid ""
|
||||
"Determines whether the crosshairs intersect the magnified mouse sprite, or "
|
||||
"are clipped such that the ends of the horizontal and vertical lines surround "
|
||||
"the mouse image."
|
||||
msgstr ""
|
||||
"Määrab, kas niitrist kattub suurendatud hiire pildiga või on keskelt ära "
|
||||
"lõigatud nii, et jooned ümbritsevad hiirekursori pilti."
|
||||
|
||||
msgid "Enable lens mode"
|
||||
msgstr "Läätsede režiimi lubamine"
|
||||
|
||||
msgid ""
|
||||
"Enables/disables display of crosshairs centered on the magnified mouse "
|
||||
"sprite."
|
||||
msgstr "Lubab/keelab niitristi kuvamise suurendatud hiirekursori kohal."
|
||||
|
||||
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 the "
|
||||
"screen edge moves into the magnified view."
|
||||
msgstr ""
|
||||
|
||||
msgid "Length of the crosshairs"
|
||||
msgstr "Niitristi pikkus"
|
||||
|
||||
msgid "Magnification factor"
|
||||
msgstr "Suurendustegur"
|
||||
|
||||
msgid "Mouse Tracking Mode"
|
||||
msgstr "Hiire jälitamise režiim"
|
||||
|
||||
msgid "Opacity of the crosshairs"
|
||||
msgstr "Niitristi läbipaistvus"
|
||||
|
||||
msgid "Screen position"
|
||||
msgstr "Ekraani asukoht"
|
||||
|
||||
msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
msgstr "Suurendusklaas võib liikuda töölauapiiridest väljapoole"
|
||||
|
||||
msgid "Show or hide crosshairs"
|
||||
msgstr "Niitristi kuvamine või peitmine"
|
||||
|
||||
msgid "Show or hide the magnifier"
|
||||
msgstr "Suurendusklaasi kuvamine või peitmine"
|
||||
|
||||
msgid "Show or hide the magnifier and all of its zoom regions."
|
||||
msgstr ""
|
||||
"Suurendusklaasi ja selle kõigi suurenduspiirkondade kuvamine või peitmine."
|
||||
|
||||
msgid ""
|
||||
"The color of the the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr "Niitristi püst- ja rõhtjoone värvus."
|
||||
|
||||
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 ""
|
||||
"Suurendatud vaade täidab kas kogu ekraani või täidab ülemise, alumise, "
|
||||
"vasaku või parema ekraanipoole."
|
||||
|
||||
msgid ""
|
||||
"The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
"value of 2.0 doubles the size."
|
||||
msgstr "Suurendustegur. 1,0 tähendab originaalsuurust. 2,0 muudab kaks korda."
|
||||
|
||||
msgid "Thickness of the crosshairs"
|
||||
msgstr "Niitristi paksus"
|
||||
|
||||
msgid ""
|
||||
"Whether the magnified view should be centered over the location of the "
|
||||
"system mouse and move with it."
|
||||
msgstr ""
|
||||
"Kas suurendatud vaate keskkoht peaks asetsema süsteemi hiire kohal ning "
|
||||
"liikuma sellega kaasa."
|
||||
|
||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
msgstr "Niitristi moodustavate püst- ja rõhtjoone laius"
|
||||
|
||||
msgid "Clock Format"
|
||||
msgstr "Kella vorming"
|
||||
msgstr "Kella formaat"
|
||||
|
||||
msgid "Clock Preferences"
|
||||
msgstr "Kella eelistused"
|
||||
|
||||
msgid "Panel Display"
|
||||
msgstr ""
|
||||
msgstr "Paneelikuva"
|
||||
|
||||
msgid "Show seco_nds"
|
||||
msgstr "_Sekundid on nähtaval"
|
||||
msgstr "_Sekundeid näidatakse"
|
||||
|
||||
msgid "Show the _date"
|
||||
msgstr "_Kuupäev on nähtaval"
|
||||
msgstr "_Kuupäeva näidatakse"
|
||||
|
||||
msgid "_12 hour format"
|
||||
msgstr "_12-tunnine vorming"
|
||||
msgstr "_12 tunni vorming"
|
||||
|
||||
msgid "_24 hour format"
|
||||
msgstr "_24-tunnine vorming"
|
||||
msgstr "_24 tunni vorming"
|
||||
|
||||
#. **** Applications ****
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "RAKENDUSED"
|
||||
msgstr "Rakendused"
|
||||
|
||||
msgid "PREFERENCES"
|
||||
msgstr "EELISTUSED"
|
||||
msgstr "Eelistused"
|
||||
|
||||
msgid "New Window"
|
||||
msgstr "Uus aken"
|
||||
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Eemalda lemmikute hulgast"
|
||||
msgstr "Eemalda lemmikutest"
|
||||
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Lisa lemmikute hulka"
|
||||
msgstr "Lisa lemmikutesse"
|
||||
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr ""
|
||||
msgstr "Lemmikute lisamiseks lohista need siia"
|
||||
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr ""
|
||||
msgstr "%s lisati lemmikutesse."
|
||||
|
||||
#, c-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr ""
|
||||
msgstr "%s eemaldati lemmikutest."
|
||||
|
||||
msgid "Find"
|
||||
msgstr ""
|
||||
msgstr "Otsi"
|
||||
|
||||
msgid "Searching..."
|
||||
msgstr ""
|
||||
msgstr "Otsimine..."
|
||||
|
||||
msgid "No matching results."
|
||||
msgstr "Sobivaid vasteid ei leitud."
|
||||
msgstr "Tulemused puuduvad."
|
||||
|
||||
#. **** Places ****
|
||||
#. Translators: This is in the sense of locations for documents,
|
||||
#. network locations, etc.
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "ASUKOHAD JA SEADMED"
|
||||
msgstr "Asukohad ja seadmed"
|
||||
|
||||
#. **** Documents ****
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "VIIMASED KIRJED"
|
||||
msgstr "Hiljutised dokumendid"
|
||||
|
||||
msgid "No extensions installed"
|
||||
msgstr "Laiendusi ei ole paigaldatud"
|
||||
msgstr "Ühtegi laiendust pole paigaldatud"
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr "Lubatud"
|
||||
@ -232,16 +349,16 @@ msgid "Error"
|
||||
msgstr "Viga"
|
||||
|
||||
msgid "Out of date"
|
||||
msgstr ""
|
||||
msgstr "Pole värske"
|
||||
|
||||
msgid "View Source"
|
||||
msgstr ""
|
||||
msgstr "Kuva lähtekoodi"
|
||||
|
||||
msgid "Web Page"
|
||||
msgstr "Veebileht"
|
||||
|
||||
msgid "Undo"
|
||||
msgstr "Unusta"
|
||||
msgstr "Võta tagasi"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#, c-format
|
||||
@ -254,66 +371,64 @@ msgstr "Eelistused"
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a, %e. %b %R:%S"
|
||||
msgstr "%a, %e. %b, %R:%S"
|
||||
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%a, %e. %b %R"
|
||||
msgstr "%a, %e. %b, %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
msgstr "%A %R:%S"
|
||||
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
msgstr "%A %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a, %e. %b %l:%M:%S %p"
|
||||
msgstr "%a, %e. %b, %l:%M:%S %p"
|
||||
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a, %e. %b %l:%MS %p"
|
||||
msgstr "%a, %e. %b, %l:%M %p"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l:%M:%S %p"
|
||||
msgstr "%A, %l:%M:%S %p"
|
||||
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %l:%M %p"
|
||||
msgstr "%A, %l:%M %p"
|
||||
|
||||
#. 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".
|
||||
msgid "Activities"
|
||||
msgstr "Ülevaade"
|
||||
msgstr "Tegevused"
|
||||
|
||||
#, c-format
|
||||
msgid "Failed to unmount '%s'"
|
||||
msgstr "Tõrge '%s' lahtihaakimisel"
|
||||
msgstr "'%s' lahtihaakimine nurjus"
|
||||
|
||||
msgid "Retry"
|
||||
msgstr "Proovi uuesti"
|
||||
|
||||
msgid "Connect to..."
|
||||
msgstr ""
|
||||
msgstr "Ühendumine..."
|
||||
|
||||
#. Translators: the "ON" and "OFF" strings are used in the
|
||||
#. toggle switches in the status area menus, and must be SHORT.
|
||||
#. If you don't have suitable short words, consider initials,
|
||||
#. "0"/"1", "⚪"/"⚫", etc.
|
||||
msgid "ON"
|
||||
msgstr ""
|
||||
|
||||
msgid "OFF"
|
||||
msgstr ""
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Palun sisesta käsk:"
|
||||
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr ""
|
||||
msgstr "'%s' käivitamine nurjus:"
|
||||
|
||||
msgid "Available"
|
||||
msgstr "Saadaval"
|
||||
@ -327,8 +442,8 @@ msgstr "Nähtamatu"
|
||||
msgid "Account Information..."
|
||||
msgstr "Konto andmed..."
|
||||
|
||||
msgid "System Preferences..."
|
||||
msgstr "Süsteemi eelistused..."
|
||||
msgid "System Settings..."
|
||||
msgstr "Süsteemi sätted..."
|
||||
|
||||
msgid "Lock Screen"
|
||||
msgstr "Lukusta ekraan"
|
||||
@ -340,11 +455,11 @@ msgid "Log Out..."
|
||||
msgstr "Logi välja..."
|
||||
|
||||
msgid "Shut Down..."
|
||||
msgstr "Seiska..."
|
||||
msgstr "Lülita välja..."
|
||||
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
msgstr "%s lõpetas käivitumise"
|
||||
msgstr "%s läks käima"
|
||||
|
||||
#, c-format
|
||||
msgid "'%s' is ready"
|
||||
@ -352,13 +467,13 @@ msgstr "'%s' on valmis"
|
||||
|
||||
msgid ""
|
||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr ""
|
||||
msgstr "Pole võimalik uut tööala lisada, kuna tööalade piir on saavutatud."
|
||||
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr ""
|
||||
msgstr "Esimest tööala pole võimalik eemaldada."
|
||||
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Vähem kui minut aega tagasi"
|
||||
msgstr "Vähem kui minuti eest"
|
||||
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
@ -369,14 +484,14 @@ msgstr[1] "%d minutit tagasi"
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%d tund tagasi"
|
||||
msgstr[1] "%d tundi tagasi"
|
||||
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%d päev tagasi"
|
||||
msgstr[1] "%d päeva tagasi"
|
||||
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
@ -385,7 +500,7 @@ msgstr[0] "%d nädal tagasi"
|
||||
msgstr[1] "%d nädalat tagasi"
|
||||
|
||||
msgid "Home Folder"
|
||||
msgstr "Kodukataloog"
|
||||
msgstr "Kodukaust"
|
||||
|
||||
#. Translators: this is the same string as the one found in
|
||||
#. * nautilus
|
||||
|
418
po/gl.po
418
po/gl.po
@ -10,14 +10,14 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-07-22 16:39+0200\n"
|
||||
"PO-Revision-Date: 2010-07-22 16:37+0200\n"
|
||||
"POT-Creation-Date: 2010-11-03 00:26+0100\n"
|
||||
"PO-Revision-Date: 2010-11-03 00:28+0100\n"
|
||||
"Last-Translator: Fran Diéguez <frandieguez@ubuntu.com>\n"
|
||||
"Language-Team: Galician <gnome-gl-list@gnome.org>\n"
|
||||
"Language: gl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: gl\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
|
||||
"X-Generator: Virtaal 0.4.0\n"
|
||||
|
||||
@ -43,7 +43,7 @@ msgid ""
|
||||
"dialog."
|
||||
msgstr ""
|
||||
"Permite o acceso ás ferramentas de depuración e monitorización internas "
|
||||
"usando o diálogo Alt-F2"
|
||||
"usando o diálogo Alt-F2."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
msgid "Custom format of the clock"
|
||||
@ -61,7 +61,7 @@ msgstr "Extensión de ficheiro usada para o almacenamento da screencast"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "Taxa de marcos usada para gravar as capturas de pantalla"
|
||||
msgstr "Taxa de marcos usada para gravar as capturas de pantalla."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
@ -73,7 +73,7 @@ msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr "Hitorial do diálogo de orde (Alt-F)"
|
||||
msgstr "Hitorial do diálogo de orde (Alt-F2)"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||
msgid "Hour format"
|
||||
@ -84,7 +84,7 @@ msgid ""
|
||||
"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
|
||||
"clock, in addition to time."
|
||||
msgstr ""
|
||||
"Se é verdadeiro e o formato é \"12-hour\" ou \"24-hour\" móstrase a data no "
|
||||
"Se é verdadeiro e o formato é «12-hour» ou «24-hour» móstrase a data no "
|
||||
"reloxo, ademais da hora."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
@ -92,8 +92,8 @@ msgid ""
|
||||
"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
|
||||
"time."
|
||||
msgstr ""
|
||||
"Se é verdadeiro e o formato é \"12-hour\" ou \"24-hour\" móstranse os "
|
||||
"segundos na hora."
|
||||
"Se é verdadeiro e o formato é «12-hour» ou «24-hour» móstranse os segundos "
|
||||
"na hora."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
@ -118,10 +118,15 @@ msgid ""
|
||||
"to an empty value, the default pipeline will be used. This is currently "
|
||||
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
||||
msgstr ""
|
||||
"Estabelece a tubería do GStreamer usada para codificar as gravacións. Segue "
|
||||
"a sintaxe usada por gst-launch. A tubería debe ter un desprazamento de "
|
||||
"sumideiro non conectado cando o vídeo gravado estea gravado. Normalmente "
|
||||
"terá un ......."
|
||||
"Estabelece a tubería GStreamer usada para codificar gravacións. Segue a "
|
||||
"sintaxe usada para gst-launch. A tubería debería ter un sumideiro («sink») "
|
||||
"de ensamblaxe/desensamblaxe onde o vídeo que se está gravando grávase. "
|
||||
"Xeralmente terá unha orixe de ensamblado/desensamblado; a saída dese punto "
|
||||
"escribirase no ficheiro de saída. Porén, a tubería tamén pode tomar parte na "
|
||||
"súa propia saída; isto pódese usar para enviar a saída a un servidor "
|
||||
"«icecast» a través de shout2send ou similar. Cando non está estabelecido ou "
|
||||
"está a un valor baleiro, usarase a tubería predeterminada. Actualmente é "
|
||||
"«videorate ! theoraenc ! oggmux» e grava en Ogg Theora."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show date in clock"
|
||||
@ -207,12 +212,12 @@ msgid ""
|
||||
"the show_date and show_seconds keys are ignored."
|
||||
msgstr ""
|
||||
"Esta chave especifica o formato de hora usado polo reloxo do panel. Os "
|
||||
"posíbeis valores son \"12-hour\", \"24-hour\", \"unix\"e \"custom\". Se está "
|
||||
"estabelecido a \"unix\", o reloxo mostrará a hora en segundos desde Epoch, p."
|
||||
"ex. 01-01-1970. Se está estabelecido a \"custom\", o reloxo mostrará a hora "
|
||||
"posíbeis valores son «12-hour», «24-hour», «unix» e «custom». Se está "
|
||||
"estabelecido a «unix», o reloxo mostrará a hora en segundos desde Epoch, p."
|
||||
"ex. 01-01-1970. Se está estabelecido a «custom», o reloxo mostrará a hora "
|
||||
"segundo o formato especificado na chave custom_format. Teña en conta que se "
|
||||
"está estabelecido a \"unix\" ou \"custom\", as chaves show_date e "
|
||||
"show_seconds ignoraranse."
|
||||
"está estabelecido a «unix» ou «custom», as chaves show_date e show_seconds "
|
||||
"ignoraranse."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
msgid "Uuids of extensions to disable"
|
||||
@ -220,7 +225,161 @@ msgstr "Os Uuid das extensións a desactivar"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Indica se recoller estatísticas sobre o uso dos aplicativos ou non."
|
||||
msgstr "Indica se recoller estatísticas sobre o uso dos aplicativos"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
||||
msgid "Clip the crosshairs at the center"
|
||||
msgstr "Poñer o punto de mira no centro"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
|
||||
msgid "Color of the crosshairs"
|
||||
msgstr "Cor do punto de mira"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
|
||||
msgid ""
|
||||
"Determines the length of the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
"Determina a lonxitude das liñas verticais e horizontais que contén o punto "
|
||||
"de mira."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
|
||||
msgid ""
|
||||
"Determines the position of the magnified mouse image within the magnified "
|
||||
"view and how it reacts to system mouse movement. The values are - none: no "
|
||||
"mouse tracking; - centered: the mouse image is displayed at the center of "
|
||||
"the zoom region (which also represents the point under the system mouse) and "
|
||||
"the magnified contents are scrolled as the system mouse moves; - "
|
||||
"proportional: the position of the magnified mouse in the zoom region is "
|
||||
"proportionally the same as the position of the system mouse on screen; - "
|
||||
"push: when the magnified mouse intersects a boundary of the zoom region, the "
|
||||
"contents are scrolled into view."
|
||||
msgstr ""
|
||||
"Determina a posición da imaxe magnificada do rato dentro da vista "
|
||||
"magnificada e como reacciona ao movemento do rato do sistema. Os valores son "
|
||||
"«none» (ningún): sen seguimento do rato; «centered» (centrado): a imaxe do "
|
||||
"rato móstrase no centro da rexión ampliada (que tamén representa o punto "
|
||||
"baixo o rato do sistema) e o contido magnificado deslízase segundo se move o "
|
||||
"rato do sistema; «proporcional»: a posición do rato magnificado na rexión de "
|
||||
"ampliación é proporcionalmente a mesma que a posición do rato do sistema na "
|
||||
"pantalla; «push» (empurrar): cando o rato magnificado cruza un límite da "
|
||||
"rexión de ampliación, o contido deslízase na vista."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
"transparent."
|
||||
msgstr ""
|
||||
"Determina a transparencia do punto de mira, desde a opacidade total á "
|
||||
"transparencia total."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"Determines whether the crosshairs intersect the magnified mouse sprite, or "
|
||||
"are clipped such that the ends of the horizontal and vertical lines surround "
|
||||
"the mouse image."
|
||||
msgstr ""
|
||||
"Determina se as cruces cruzan o «sprite» magnificado do rato ou fíxanse de "
|
||||
"tal forma que os finais das liñas horizontais e verticais rodean a imaxe do "
|
||||
"rato."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
|
||||
msgid "Enable lens mode"
|
||||
msgstr "Activar o modo lente"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"Enables/disables display of crosshairs centered on the magnified mouse "
|
||||
"sprite."
|
||||
msgstr ""
|
||||
"Activa/desactiva a visualización do punto de mira centrada no mapa de bits "
|
||||
"de magnificación do rato."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
|
||||
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 the "
|
||||
"screen edge moves into the magnified view."
|
||||
msgstr ""
|
||||
"Para o seguimento do centro do rato, cando o punteiro do sistema está preto "
|
||||
"do bordo da pantalla, o contido magnificado continúa desprazándose de tal "
|
||||
"forma que o bordo da pantalla móvese dentro da vista magnificada."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
|
||||
msgid "Length of the crosshairs"
|
||||
msgstr "Lonxitude do punto de mira"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
|
||||
msgid "Magnification factor"
|
||||
msgstr "Factor de magnificación"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
|
||||
msgid "Mouse Tracking Mode"
|
||||
msgstr "Modo de seguimento do rato"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
|
||||
msgid "Opacity of the crosshairs"
|
||||
msgstr "Opacidade do punto de mira"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
|
||||
msgid "Screen position"
|
||||
msgstr "Posición de pantalla"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
|
||||
msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
msgstr "Mostrar os contidos magnificados máis aló dos bordos do escritorio"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
|
||||
msgid "Show or hide crosshairs"
|
||||
msgstr "Mostrar ou agochar o punto de mira"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
|
||||
msgid "Show or hide the magnifier"
|
||||
msgstr "Mostrar ou agochar o magnificador"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
|
||||
msgid "Show or hide the magnifier and all of its zoom regions."
|
||||
msgstr ""
|
||||
"Mostrar ou agochar o magnificador e todas as súas rexións de magnificación."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The color of the the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr "A cor das liñas verticais e horizontais que contén o punto de mira."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
|
||||
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 ""
|
||||
"A vista magnificada tanto se enche a pantalla completa, ou ocupa a metade "
|
||||
"superior, metade inferior, metade da esquerda ou metade da dereita da "
|
||||
"pantalla."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
"value of 2.0 doubles the size."
|
||||
msgstr ""
|
||||
"O poder da magnificación. Un valor de 1.0 desactiva a magnificación. Un "
|
||||
"valor de 2.0 duplica o tamaño."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
|
||||
msgid "Thickness of the crosshairs"
|
||||
msgstr "Grosor do punto de mira"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
"Whether the magnified view should be centered over the location of the "
|
||||
"system mouse and move with it."
|
||||
msgstr ""
|
||||
"Indica se a visualización do punto de mira debería centrarse sobre a "
|
||||
"localización do rato do sistema ou moverse con el."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
|
||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
msgstr "Anchura das liñas verticais e horizontais que contén o punto de mira."
|
||||
|
||||
#: ../data/clock-preferences.ui.h:1
|
||||
msgid "Clock Format"
|
||||
@ -251,27 +410,27 @@ msgid "_24 hour format"
|
||||
msgstr "Formato _24 horas"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:384 ../js/ui/dash.js:773
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "APLICATIVOS"
|
||||
|
||||
#: ../js/ui/appDisplay.js:416
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
msgid "PREFERENCES"
|
||||
msgstr "PREFERENCIAS"
|
||||
|
||||
#: ../js/ui/appDisplay.js:721
|
||||
#: ../js/ui/appDisplay.js:647
|
||||
msgid "New Window"
|
||||
msgstr "Xanela nova"
|
||||
|
||||
#: ../js/ui/appDisplay.js:725
|
||||
#: ../js/ui/appDisplay.js:651
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Eliminar dos favoritos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:726
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Engadir aos favoritos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:1033
|
||||
#: ../js/ui/appDisplay.js:829
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Arrastre aquí para engadir aos favoritos"
|
||||
|
||||
@ -289,138 +448,137 @@ msgstr "%s foi eliminado dos seus favoritos."
|
||||
msgid "Find"
|
||||
msgstr "Buscar"
|
||||
|
||||
#: ../js/ui/dash.js:471
|
||||
#: ../js/ui/dash.js:473
|
||||
msgid "Searching..."
|
||||
msgstr "Buscando..."
|
||||
|
||||
#: ../js/ui/dash.js:485
|
||||
#: ../js/ui/dash.js:487
|
||||
msgid "No matching results."
|
||||
msgstr "Non hai resultados que coincidan."
|
||||
|
||||
#. **** Places ****
|
||||
#. Translators: This is in the sense of locations for documents,
|
||||
#. network locations, etc.
|
||||
#: ../js/ui/dash.js:792 ../js/ui/placeDisplay.js:550
|
||||
#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:554
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "LUGARES e DISPOSITIVOS"
|
||||
msgstr "LUGARES E DISPOSITIVOS"
|
||||
|
||||
#. **** Documents ****
|
||||
#: ../js/ui/dash.js:799 ../js/ui/docDisplay.js:494
|
||||
#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "ELEMENTOS RECENTES"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:471
|
||||
#: ../js/ui/lookingGlass.js:552
|
||||
msgid "No extensions installed"
|
||||
msgstr "Non hai ningunha extensión instalada"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:508
|
||||
#: ../js/ui/lookingGlass.js:589
|
||||
msgid "Enabled"
|
||||
msgstr "Activado"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:510
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
|
||||
msgid "Disabled"
|
||||
msgstr "Desactivado"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:512
|
||||
#: ../js/ui/lookingGlass.js:593
|
||||
msgid "Error"
|
||||
msgstr "Erro"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:514
|
||||
#: ../js/ui/lookingGlass.js:595
|
||||
msgid "Out of date"
|
||||
msgstr "Desactualizado"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:539
|
||||
#: ../js/ui/lookingGlass.js:620
|
||||
msgid "View Source"
|
||||
msgstr "Ver fonte"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:545
|
||||
#: ../js/ui/lookingGlass.js:626
|
||||
msgid "Web Page"
|
||||
msgstr "Páxina web"
|
||||
|
||||
#: ../js/ui/overview.js:159
|
||||
#: ../js/ui/overview.js:160
|
||||
msgid "Undo"
|
||||
msgstr "Desfacer"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:473
|
||||
#: ../js/ui/panel.js:469
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Saír de %s"
|
||||
|
||||
#: ../js/ui/panel.js:498
|
||||
#: ../js/ui/panel.js:494
|
||||
msgid "Preferences"
|
||||
msgstr "Preferencias"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:584
|
||||
#: ../js/ui/panel.js:580
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %e de %b, %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:585
|
||||
#: ../js/ui/panel.js:581
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%a %e de %b, %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:589
|
||||
#: ../js/ui/panel.js:585
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:590
|
||||
#: ../js/ui/panel.js:586
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:597
|
||||
#: ../js/ui/panel.js:593
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %e de %b, %H:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:598
|
||||
#: ../js/ui/panel.js:594
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a %e de %b, %H:%M"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:602
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %H:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:603
|
||||
#: ../js/ui/panel.js:599
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %l:%M %p"
|
||||
|
||||
#. 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:741
|
||||
#: ../js/ui/panel.js:744
|
||||
msgid "Activities"
|
||||
msgstr "Actividades"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:107
|
||||
#: ../js/ui/placeDisplay.js:111
|
||||
#, c-format
|
||||
msgid "Failed to unmount '%s'"
|
||||
msgstr "Produciuse un fallo ao montar «%s»"
|
||||
msgstr "Produciuse un fallo ao desmontar «%s»"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:110
|
||||
#: ../js/ui/placeDisplay.js:114
|
||||
msgid "Retry"
|
||||
msgstr "Reintentar"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:155
|
||||
#: ../js/ui/placeDisplay.js:159
|
||||
msgid "Connect to..."
|
||||
msgstr "Conectar con..."
|
||||
|
||||
#. Translators: the "ON" and "OFF" strings are used in the
|
||||
#. toggle switches in the status area menus, and must be SHORT.
|
||||
#. If you don't have suitable short words, consider initials,
|
||||
#. "0"/"1", "⚪"/"⚫", etc.
|
||||
#: ../js/ui/popupMenu.js:30 ../js/ui/popupMenu.js:40
|
||||
msgid "ON"
|
||||
msgstr "⚫"
|
||||
|
||||
#: ../js/ui/popupMenu.js:31 ../js/ui/popupMenu.js:45
|
||||
msgid "OFF"
|
||||
msgstr "⚪"
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:33
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
#: ../js/ui/runDialog.js:233
|
||||
msgid "Please enter a command:"
|
||||
@ -429,91 +587,165 @@ msgstr "Insira unha orde:"
|
||||
#: ../js/ui/runDialog.js:378
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Produciuse un fallo na execución de %s"
|
||||
msgstr "Produciuse un fallo na execución de «%s»:"
|
||||
|
||||
#: ../js/ui/statusMenu.js:91
|
||||
#: ../js/ui/statusMenu.js:101
|
||||
msgid "Available"
|
||||
msgstr "Dispoñíbel"
|
||||
|
||||
#: ../js/ui/statusMenu.js:95
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Busy"
|
||||
msgstr "Ocupado"
|
||||
|
||||
#: ../js/ui/statusMenu.js:99
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "Invisíbel"
|
||||
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Account Information..."
|
||||
msgstr "Información da conta..."
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr "A miña conta..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:110
|
||||
msgid "System Preferences..."
|
||||
msgstr "Preferencias do sistema..."
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
msgid "System Settings..."
|
||||
msgstr "Configuracións do sistema..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:117
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
msgid "Lock Screen"
|
||||
msgstr "Bloquear pantalla"
|
||||
|
||||
#: ../js/ui/statusMenu.js:121
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Switch User"
|
||||
msgstr "Cambiar de usuario"
|
||||
|
||||
#: ../js/ui/statusMenu.js:126
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
msgid "Log Out..."
|
||||
msgstr "Saír da sesión..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr "Suspender"
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
msgstr "Reiniciar..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
msgid "Shut Down..."
|
||||
msgstr "Apagar..."
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:45
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "Lector de pantalla"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:91
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Teclado en pantalla"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:94
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Alertas visuais"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:97
|
||||
msgid "Sticky Keys"
|
||||
msgstr "Teclas persistentes"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:100
|
||||
msgid "Slow Keys"
|
||||
msgstr "Teclas lentas"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:103
|
||||
msgid "Bounce Keys"
|
||||
msgstr "Rebote das teclas"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:106
|
||||
msgid "Mouse Keys"
|
||||
msgstr "Teclas do Rato"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:110
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "Configuracións de acceso universal"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:163
|
||||
msgid "High Contrast"
|
||||
msgstr "Alto contraste"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
msgid "Large Text"
|
||||
msgstr "Texto máis grande"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "Ampliación"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
msgstr "%s rematou de iniarse"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:47
|
||||
#: ../js/ui/windowAttentionHandler.js:45
|
||||
#, c-format
|
||||
msgid "'%s' is ready"
|
||||
msgstr "«%s» está preparado"
|
||||
|
||||
#: ../js/ui/workspacesView.js:230
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
msgid ""
|
||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr ""
|
||||
"Non é posíbel engadir unha área de traballo nova porque chegouse ao límite "
|
||||
"de áreas de traballo."
|
||||
|
||||
#: ../js/ui/workspacesView.js:247
|
||||
#: ../js/ui/workspacesView.js:246
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "Non é posíbel quitar a primeira área de traballo."
|
||||
|
||||
#: ../src/shell-global.c:1105
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
msgstr[0] "%u saída"
|
||||
msgstr[1] "%u saídas"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] "%u entrada"
|
||||
msgstr[1] "%u entradas"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
msgid "System Sounds"
|
||||
msgstr "Sons do sistema"
|
||||
|
||||
#: ../src/shell-global.c:1219
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Hai menos dun minuto"
|
||||
|
||||
#: ../src/shell-global.c:1109
|
||||
#: ../src/shell-global.c:1223
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "hai %d minuto"
|
||||
msgstr[1] "hai %d minutos"
|
||||
|
||||
#: ../src/shell-global.c:1114
|
||||
#: ../src/shell-global.c:1228
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "hai %d hora"
|
||||
msgstr[1] "hai %d horas"
|
||||
|
||||
#: ../src/shell-global.c:1119
|
||||
#: ../src/shell-global.c:1233
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "hai %d día"
|
||||
msgstr[1] "hai %d días"
|
||||
|
||||
#: ../src/shell-global.c:1124
|
||||
#: ../src/shell-global.c:1238
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
@ -543,3 +775,15 @@ msgstr "Buscar"
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "System Preferences..."
|
||||
#~ msgstr "Preferencias do sistema..."
|
||||
|
||||
#~ msgid "Account Information..."
|
||||
#~ msgstr "Información da conta..."
|
||||
|
||||
#~ msgid "ON"
|
||||
#~ msgstr "⚫"
|
||||
|
||||
#~ msgid "OFF"
|
||||
#~ msgstr "⚪"
|
||||
|
331
po/he.po
331
po/he.po
@ -2,19 +2,20 @@
|
||||
# Copyright (C) 2009 gnome-shell's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the gnome-shell package.
|
||||
# liel <lielft@gmail.com>, 2009.
|
||||
# Yaron Shahrabani <sh.yaron@gmail.com>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-09-27 00:00+0200\n"
|
||||
"PO-Revision-Date: 2010-09-27 00:01+0200\n"
|
||||
"POT-Creation-Date: 2010-11-01 07:47+0200\n"
|
||||
"PO-Revision-Date: 2010-11-01 07:48+0200\n"
|
||||
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
|
||||
"Language-Team: Hebrew <he@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n>2||n==0) ? 1 :2;\n"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||
msgid "GNOME Shell"
|
||||
@ -30,7 +31,7 @@ msgstr "שעון"
|
||||
|
||||
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
|
||||
msgid "Customize the panel clock"
|
||||
msgstr "התאמת פאנל השעון"
|
||||
msgstr "התאמת לוח השעון"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
||||
msgid ""
|
||||
@ -218,6 +219,161 @@ msgstr "Uuids of extensions to disable"
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Whether to collect stats about applications usage"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
||||
msgid "Clip the crosshairs at the center"
|
||||
msgstr "Clip the crosshairs at the center"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
|
||||
msgid "Color of the crosshairs"
|
||||
msgstr "Color of the crosshairs"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
|
||||
msgid ""
|
||||
"Determines the length of the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
"Determines the length of the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
|
||||
msgid ""
|
||||
"Determines the position of the magnified mouse image within the magnified "
|
||||
"view and how it reacts to system mouse movement. The values are - none: no "
|
||||
"mouse tracking; - centered: the mouse image is displayed at the center of "
|
||||
"the zoom region (which also represents the point under the system mouse) and "
|
||||
"the magnified contents are scrolled as the system mouse moves; - "
|
||||
"proportional: the position of the magnified mouse in the zoom region is "
|
||||
"proportionally the same as the position of the system mouse on screen; - "
|
||||
"push: when the magnified mouse intersects a boundary of the zoom region, the "
|
||||
"contents are scrolled into view."
|
||||
msgstr ""
|
||||
"Determines the position of the magnified mouse image within the magnified "
|
||||
"view and how it reacts to system mouse movement. The values are - none: no "
|
||||
"mouse tracking; - centered: the mouse image is displayed at the center of "
|
||||
"the zoom region (which also represents the point under the system mouse) and "
|
||||
"the magnified contents are scrolled as the system mouse moves; - "
|
||||
"proportional: the position of the magnified mouse in the zoom region is "
|
||||
"proportionally the same as the position of the system mouse on screen; - "
|
||||
"push: when the magnified mouse intersects a boundary of the zoom region, the "
|
||||
"contents are scrolled into view."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
"transparent."
|
||||
msgstr ""
|
||||
"Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
"transparent."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"Determines whether the crosshairs intersect the magnified mouse sprite, or "
|
||||
"are clipped such that the ends of the horizontal and vertical lines surround "
|
||||
"the mouse image."
|
||||
msgstr ""
|
||||
"Determines whether the crosshairs intersect the magnified mouse sprite, or "
|
||||
"are clipped such that the ends of the horizontal and vertical lines surround "
|
||||
"the mouse image."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
|
||||
msgid "Enable lens mode"
|
||||
msgstr "Enable lens mode"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"Enables/disables display of crosshairs centered on the magnified mouse "
|
||||
"sprite."
|
||||
msgstr ""
|
||||
"Enables/disables display of crosshairs centered on the magnified mouse "
|
||||
"sprite."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
|
||||
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 the "
|
||||
"screen edge moves into the magnified view."
|
||||
msgstr ""
|
||||
"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 the "
|
||||
"screen edge moves into the magnified view."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
|
||||
msgid "Length of the crosshairs"
|
||||
msgstr "Length of the crosshairs"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
|
||||
msgid "Magnification factor"
|
||||
msgstr "Magnification factor"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
|
||||
msgid "Mouse Tracking Mode"
|
||||
msgstr "Mouse Tracking Mode"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
|
||||
msgid "Opacity of the crosshairs"
|
||||
msgstr "Opacity of the crosshairs"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
|
||||
msgid "Screen position"
|
||||
msgstr "Screen position"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
|
||||
msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
msgstr "Scroll magnified contents beyond the edges of the desktop"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
|
||||
msgid "Show or hide crosshairs"
|
||||
msgstr "Show or hide crosshairs"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
|
||||
msgid "Show or hide the magnifier"
|
||||
msgstr "Show or hide the magnifier"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
|
||||
msgid "Show or hide the magnifier and all of its zoom regions."
|
||||
msgstr "Show or hide the magnifier and all of its zoom regions."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The color of the the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
"The color of the the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
|
||||
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 ""
|
||||
"The magnified view either fills the entire screen, or occupies the top-half, "
|
||||
"bottom-half, left-half, or right-half of the screen."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
"value of 2.0 doubles the size."
|
||||
msgstr ""
|
||||
"The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
"value of 2.0 doubles the size."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
|
||||
msgid "Thickness of the crosshairs"
|
||||
msgstr "Thickness of the crosshairs"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
"Whether the magnified view should be centered over the location of the "
|
||||
"system mouse and move with it."
|
||||
msgstr ""
|
||||
"Whether the magnified view should be centered over the location of the "
|
||||
"system mouse and move with it."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
|
||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
msgstr ""
|
||||
"Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
|
||||
#: ../data/clock-preferences.ui.h:1
|
||||
msgid "Clock Format"
|
||||
msgstr "מבנה השעון"
|
||||
@ -228,7 +384,7 @@ msgstr "העדפות השעון"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:3
|
||||
msgid "Panel Display"
|
||||
msgstr "תצוגת הפאנל"
|
||||
msgstr "תצוגת הלוח"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:4
|
||||
msgid "Show seco_nds"
|
||||
@ -255,19 +411,19 @@ msgstr "יישומים"
|
||||
msgid "PREFERENCES"
|
||||
msgstr "העדפות"
|
||||
|
||||
#: ../js/ui/appDisplay.js:648
|
||||
#: ../js/ui/appDisplay.js:647
|
||||
msgid "New Window"
|
||||
msgstr "חלון חדש"
|
||||
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
#: ../js/ui/appDisplay.js:651
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "הסרה מהמועדפים"
|
||||
|
||||
#: ../js/ui/appDisplay.js:653
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
msgid "Add to Favorites"
|
||||
msgstr "הוספה למועדפים"
|
||||
|
||||
#: ../js/ui/appDisplay.js:830
|
||||
#: ../js/ui/appDisplay.js:829
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "יש לגרור פריטים לכאן כדי להוסיף מועדפים"
|
||||
|
||||
@ -313,7 +469,9 @@ msgstr "לא מותקנות הרחבות"
|
||||
msgid "Enabled"
|
||||
msgstr "פעיל"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:591
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
|
||||
msgid "Disabled"
|
||||
msgstr "מנוטרל"
|
||||
|
||||
@ -338,65 +496,65 @@ msgid "Undo"
|
||||
msgstr "ביטול"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:461
|
||||
#: ../js/ui/panel.js:469
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "יציאה מ־%s"
|
||||
|
||||
#: ../js/ui/panel.js:486
|
||||
#: ../js/ui/panel.js:494
|
||||
msgid "Preferences"
|
||||
msgstr "העדפות"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:572
|
||||
#: ../js/ui/panel.js:580
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %b %e, %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:573
|
||||
#: ../js/ui/panel.js:581
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%a %b %e, %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:577
|
||||
#: ../js/ui/panel.js:585
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:578
|
||||
#: ../js/ui/panel.js:586
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:585
|
||||
#: ../js/ui/panel.js:593
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %b %e, %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:586
|
||||
#: ../js/ui/panel.js:594
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a %b %e, %l:%M %p"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:590
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:591
|
||||
#: ../js/ui/panel.js:599
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %l:%M %p"
|
||||
|
||||
#. 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:736
|
||||
#: ../js/ui/panel.js:744
|
||||
msgid "Activities"
|
||||
msgstr "פעילויות"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:111
|
||||
#, c-format
|
||||
msgid "Failed to unmount '%s'"
|
||||
msgstr "ארע כשל בניתוק '%s'"
|
||||
msgstr "אירע כשל בניתוק '%s'"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:114
|
||||
msgid "Retry"
|
||||
@ -404,14 +562,14 @@ msgstr "ניסיון חוזר"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:159
|
||||
msgid "Connect to..."
|
||||
msgstr "התחבר אל..."
|
||||
msgstr "התחברות אל..."
|
||||
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:32
|
||||
#: ../js/ui/popupMenu.js:33
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
@ -424,42 +582,94 @@ msgstr "נא להזין פקודה:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "ההרצה של '%s' נכשלה:"
|
||||
|
||||
#: ../js/ui/statusMenu.js:91
|
||||
#: ../js/ui/statusMenu.js:101
|
||||
msgid "Available"
|
||||
msgstr "זמין"
|
||||
|
||||
#: ../js/ui/statusMenu.js:95
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Busy"
|
||||
msgstr "עסוק"
|
||||
|
||||
#: ../js/ui/statusMenu.js:99
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "בלתי נראה"
|
||||
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Account Information..."
|
||||
msgstr "מידע על המשתמש..."
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr "החשבון שלי..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:110
|
||||
msgid "System Preferences..."
|
||||
msgstr "העדפות מערכת..."
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
msgid "System Settings..."
|
||||
msgstr "הגדרות המערכת..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:117
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
msgid "Lock Screen"
|
||||
msgstr "נעילת המסך"
|
||||
|
||||
#: ../js/ui/statusMenu.js:121
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Switch User"
|
||||
msgstr "החלפת משתמש"
|
||||
|
||||
#: ../js/ui/statusMenu.js:126
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
msgid "Log Out..."
|
||||
msgstr "ניתוק..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr "השהיה"
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
msgstr "הפעלה מחדש..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
msgid "Shut Down..."
|
||||
msgstr "כיבוי..."
|
||||
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "מקריא מסך"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:91
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "מקלדת מסך"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:94
|
||||
msgid "Visual Alerts"
|
||||
msgstr "התראות חזותיות"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:97
|
||||
msgid "Sticky Keys"
|
||||
msgstr "מקשים דביקים"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:100
|
||||
msgid "Slow Keys"
|
||||
msgstr "מקשים אטיים"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:103
|
||||
msgid "Bounce Keys"
|
||||
msgstr "מקשים קופצים"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:106
|
||||
msgid "Mouse Keys"
|
||||
msgstr "מקשי עכבר"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:110
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "הגדרות גישה אוניברסלית"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:163
|
||||
msgid "High Contrast"
|
||||
msgstr "ניגודיות גבוהה"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
msgid "Large Text"
|
||||
msgstr "טקסט גדול"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "תקריב"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
@ -470,46 +680,74 @@ msgstr "%s סיים את תהליך ההתחלה"
|
||||
msgid "'%s' is ready"
|
||||
msgstr "'%s' מוכן"
|
||||
|
||||
#: ../js/ui/workspacesView.js:230
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
msgid ""
|
||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr "לא ניתן להוסיף מרחבי עבודה כיוון שהם ממלאים את המכסה המרבית."
|
||||
|
||||
#: ../js/ui/workspacesView.js:247
|
||||
#: ../js/ui/workspacesView.js:246
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "לא ניתן להסיר את מרחב העבודה הראשון."
|
||||
|
||||
#: ../src/shell-global.c:1189
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
msgstr[0] "פלט אחד"
|
||||
msgstr[1] "%u פלטים"
|
||||
msgstr[2] "2 פלטים"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] "קלט אחד"
|
||||
msgstr[1] "%u קלטים"
|
||||
msgstr[2] "2 קלטים"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
msgid "System Sounds"
|
||||
msgstr "צלילי מערכת"
|
||||
|
||||
#: ../src/shell-global.c:1219
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "לפני פחות מדקה"
|
||||
|
||||
#: ../src/shell-global.c:1193
|
||||
#: ../src/shell-global.c:1223
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "לפני דקה"
|
||||
msgstr[1] "לפני %d דקות"
|
||||
msgstr[2] "לפני 2 דקות"
|
||||
|
||||
#: ../src/shell-global.c:1198
|
||||
#: ../src/shell-global.c:1228
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "לפני שעה"
|
||||
msgstr[1] "לפני %d שעות"
|
||||
msgstr[2] "לפני שעתיים"
|
||||
|
||||
#: ../src/shell-global.c:1203
|
||||
#: ../src/shell-global.c:1233
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "לפני יום"
|
||||
msgstr[1] "לפני %d ימים"
|
||||
msgstr[2] "לפני יומיים"
|
||||
|
||||
#: ../src/shell-global.c:1208
|
||||
#: ../src/shell-global.c:1238
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "לפני שבוע"
|
||||
msgstr[1] "לפני %d שבועות"
|
||||
msgstr[2] "לפני שבועיים"
|
||||
|
||||
#: ../src/shell-uri-util.c:89
|
||||
msgid "Home Folder"
|
||||
@ -523,7 +761,7 @@ msgstr "מערכת הקבצים"
|
||||
|
||||
#: ../src/shell-uri-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "חפש"
|
||||
msgstr "חיפוש"
|
||||
|
||||
#. Translators: the first string is the name of a gvfs
|
||||
#. * method, and the second string is a path. For
|
||||
@ -535,6 +773,9 @@ msgstr "חפש"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Account Information..."
|
||||
#~ msgstr "פרטי המשתמש..."
|
||||
|
||||
#~ msgid "ON"
|
||||
#~ msgstr "1"
|
||||
|
||||
|
268
po/it.po
268
po/it.po
@ -3,13 +3,14 @@
|
||||
# This file is distributed under the same license as the gnome-shell package.
|
||||
#
|
||||
# Milo Casagrande <milo@ubuntu.com>, 2009, 2010.
|
||||
# Luca Ferretti <elle.uca@infinito.it>, 2010.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-09-02 21:30+0200\n"
|
||||
"PO-Revision-Date: 2010-08-27 21:12+0200\n"
|
||||
"Last-Translator: Milo Casagrande <milo@ubuntu.com>\n"
|
||||
"POT-Creation-Date: 2010-10-18 10:54+0200\n"
|
||||
"PO-Revision-Date: 2010-10-18 11:04+0200\n"
|
||||
"Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
|
||||
"Language-Team: Italian <tp@lists.linux.it>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -225,6 +226,132 @@ msgid "Whether to collect stats about applications usage"
|
||||
msgstr ""
|
||||
"Indica se raccogliere statistiche riguardo l'utilizzo delle applicazioni"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
||||
msgid "Clip the crosshairs at the center"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
|
||||
msgid "Color of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
|
||||
msgid ""
|
||||
"Determines the length of the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
|
||||
msgid ""
|
||||
"Determines the position of the magnified mouse image within the magnified "
|
||||
"view and how it reacts to system mouse movement. The values are - none: no "
|
||||
"mouse tracking; - centered: the mouse image is displayed at the center of "
|
||||
"the zoom region (which also represents the point under the system mouse) and "
|
||||
"the magnified contents are scrolled as the system mouse moves; - "
|
||||
"proportional: the position of the magnified mouse in the zoom region is "
|
||||
"proportionally the same as the position of the system mouse on screen; - "
|
||||
"push: when the magnified mouse intersects a boundary of the zoom region, the "
|
||||
"contents are scrolled into view."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
"transparent."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"Determines whether the crosshairs intersect the magnified mouse sprite, or "
|
||||
"are clipped such that the ends of the horizontal and vertical lines surround "
|
||||
"the mouse image."
|
||||
msgstr ""
|
||||
|
||||
# (ndt) o abilitata?
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
|
||||
msgid "Enable lens mode"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"Enables/disables display of crosshairs centered on the magnified mouse "
|
||||
"sprite."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
|
||||
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 the "
|
||||
"screen edge moves into the magnified view."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
|
||||
msgid "Length of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
|
||||
msgid "Magnification factor"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
|
||||
msgid "Mouse Tracking Mode"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
|
||||
msgid "Opacity of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
|
||||
msgid "Screen position"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
|
||||
msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
|
||||
msgid "Show or hide crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
|
||||
msgid "Show or hide the magnifier"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
|
||||
msgid "Show or hide the magnifier and all of its zoom regions."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The color of the the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
|
||||
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 ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
"value of 2.0 doubles the size."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
|
||||
msgid "Thickness of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
"Whether the magnified view should be centered over the location of the "
|
||||
"system mouse and move with it."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
|
||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/clock-preferences.ui.h:1
|
||||
msgid "Clock Format"
|
||||
msgstr "Formato ora"
|
||||
@ -254,27 +381,27 @@ msgid "_24 hour format"
|
||||
msgstr "Formato _24 ore"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:384 ../js/ui/dash.js:778
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "Applicazioni"
|
||||
|
||||
#: ../js/ui/appDisplay.js:416
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
msgid "PREFERENCES"
|
||||
msgstr "Preferenze"
|
||||
|
||||
#: ../js/ui/appDisplay.js:721
|
||||
#: ../js/ui/appDisplay.js:648
|
||||
msgid "New Window"
|
||||
msgstr "Nuova finestra"
|
||||
|
||||
#: ../js/ui/appDisplay.js:725
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Rimuovi dai preferiti"
|
||||
|
||||
#: ../js/ui/appDisplay.js:726
|
||||
#: ../js/ui/appDisplay.js:653
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Aggiungi ai preferiti"
|
||||
|
||||
#: ../js/ui/appDisplay.js:1033
|
||||
#: ../js/ui/appDisplay.js:830
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Trascinare qui per aggiungere ai preferiti"
|
||||
|
||||
@ -349,59 +476,59 @@ msgid "Undo"
|
||||
msgstr "Annulla"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:473
|
||||
#: ../js/ui/panel.js:468
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Chiudi %s"
|
||||
|
||||
#: ../js/ui/panel.js:498
|
||||
#: ../js/ui/panel.js:493
|
||||
msgid "Preferences"
|
||||
msgstr "Preferenze"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:584
|
||||
#: ../js/ui/panel.js:579
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %e %b, %k.%M.%S"
|
||||
|
||||
# (ndt) proviamo col k, se non funge, sappiamo il perché...
|
||||
#: ../js/ui/panel.js:585
|
||||
#: ../js/ui/panel.js:580
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%a %e %b, %k.%M"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:589
|
||||
#: ../js/ui/panel.js:584
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %k.%M.%S"
|
||||
|
||||
#: ../js/ui/panel.js:590
|
||||
#: ../js/ui/panel.js:585
|
||||
msgid "%a %R"
|
||||
msgstr "%a %k.%M"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:597
|
||||
#: ../js/ui/panel.js:592
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %e %b, %l.%M.%S %P"
|
||||
|
||||
#: ../js/ui/panel.js:598
|
||||
#: ../js/ui/panel.js:593
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a %e %b, %l.%M %P"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:602
|
||||
#: ../js/ui/panel.js:597
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l.%M.%S %P"
|
||||
|
||||
#: ../js/ui/panel.js:603
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %l.%M %P"
|
||||
|
||||
#. 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:748
|
||||
#: ../js/ui/panel.js:743
|
||||
msgid "Activities"
|
||||
msgstr "Attività"
|
||||
|
||||
@ -419,17 +546,14 @@ msgstr "Riprova"
|
||||
msgid "Connect to..."
|
||||
msgstr "Connetti a..."
|
||||
|
||||
#. Translators: the "ON" and "OFF" strings are used in the
|
||||
#. toggle switches in the status area menus, and must be SHORT.
|
||||
#. If you don't have suitable short words, consider initials,
|
||||
#. "0"/"1", "⚪"/"⚫", etc.
|
||||
#: ../js/ui/popupMenu.js:30 ../js/ui/popupMenu.js:40
|
||||
msgid "ON"
|
||||
msgstr "On"
|
||||
|
||||
#: ../js/ui/popupMenu.js:31 ../js/ui/popupMenu.js:45
|
||||
msgid "OFF"
|
||||
msgstr "Off"
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:33
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
#: ../js/ui/runDialog.js:233
|
||||
msgid "Please enter a command:"
|
||||
@ -440,42 +564,86 @@ msgstr "Inserire un comando:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Esecuzione di «%s» non riuscita:"
|
||||
|
||||
#: ../js/ui/statusMenu.js:91
|
||||
#: ../js/ui/statusMenu.js:97
|
||||
msgid "Available"
|
||||
msgstr "Disponibile"
|
||||
|
||||
#: ../js/ui/statusMenu.js:95
|
||||
#: ../js/ui/statusMenu.js:101
|
||||
msgid "Busy"
|
||||
msgstr "Non disponibile"
|
||||
|
||||
#: ../js/ui/statusMenu.js:99
|
||||
#: ../js/ui/statusMenu.js:105
|
||||
msgid "Invisible"
|
||||
msgstr "Invisibile"
|
||||
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
#: ../js/ui/statusMenu.js:112
|
||||
msgid "Account Information..."
|
||||
msgstr "Informazioni account..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:110
|
||||
msgid "System Preferences..."
|
||||
msgstr "Preferenze di sistema..."
|
||||
#: ../js/ui/statusMenu.js:116
|
||||
msgid "System Settings..."
|
||||
msgstr "Impostazioni di sistema..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:117
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
msgid "Lock Screen"
|
||||
msgstr "Blocca schermo"
|
||||
|
||||
#: ../js/ui/statusMenu.js:121
|
||||
#: ../js/ui/statusMenu.js:127
|
||||
msgid "Switch User"
|
||||
msgstr "Cambia utente"
|
||||
|
||||
#: ../js/ui/statusMenu.js:126
|
||||
#: ../js/ui/statusMenu.js:132
|
||||
msgid "Log Out..."
|
||||
msgstr "Termina sessione..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:136
|
||||
msgid "Shut Down..."
|
||||
msgstr "Arresta..."
|
||||
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "Lettore schermo"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:91
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Tastiera a schermo"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:94
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Allerte visive"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:97
|
||||
msgid "Sticky Keys"
|
||||
msgstr "Permanenza tasti"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:100
|
||||
msgid "Slow Keys"
|
||||
msgstr "Rallentamento tasti"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:103
|
||||
msgid "Bounce Keys"
|
||||
msgstr "Pressione ravvicinata tasti"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:106
|
||||
msgid "Mouse Keys"
|
||||
msgstr "Mouse da tastiera"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:110
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "Impostazioni accesso universale"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:163
|
||||
msgid "High Contrast"
|
||||
msgstr "Contrasto elevato"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
msgid "Large Text"
|
||||
msgstr "Caratteri grandi"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "Ingrandimento"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
@ -499,32 +667,32 @@ msgstr ""
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "Impossibile rimuovere il primo spazio di lavoro."
|
||||
|
||||
#: ../src/shell-global.c:1105
|
||||
#: ../src/shell-global.c:1196
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Meno di un minuto fa"
|
||||
|
||||
#: ../src/shell-global.c:1109
|
||||
#: ../src/shell-global.c:1200
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d minuto fa"
|
||||
msgstr[1] "%d minuti fa"
|
||||
|
||||
#: ../src/shell-global.c:1114
|
||||
#: ../src/shell-global.c:1205
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d ora fa"
|
||||
msgstr[1] "%d ore fa"
|
||||
|
||||
#: ../src/shell-global.c:1119
|
||||
#: ../src/shell-global.c:1210
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d giorno fa"
|
||||
msgstr[1] "%d giorni fa"
|
||||
|
||||
#: ../src/shell-global.c:1124
|
||||
#: ../src/shell-global.c:1215
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
@ -555,3 +723,9 @@ msgstr "Cerca"
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "ON"
|
||||
#~ msgstr "On"
|
||||
|
||||
#~ msgid "OFF"
|
||||
#~ msgstr "Off"
|
||||
|
334
po/nb.po
334
po/nb.po
@ -1,15 +1,15 @@
|
||||
# Norwegian bokmål translation of gnome-shell.
|
||||
# Copyright (C) 2009 THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the gnome-shell package.
|
||||
# Kjartan Maraas <kmaraas@broadpark.no>, 2009-2010.
|
||||
# Kjartan Maraas <kmaraas@gnome.org>, 2009-2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell 2.28.x\n"
|
||||
"Project-Id-Version: gnome-shell 2.31.x\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-08-01 14:08+0200\n"
|
||||
"PO-Revision-Date: 2010-08-01 14:09+0200\n"
|
||||
"Last-Translator: Kjartan Maraas <kmaraas@broadpark.no>\n"
|
||||
"POT-Creation-Date: 2010-10-28 17:35+0200\n"
|
||||
"PO-Revision-Date: 2010-10-28 17:38+0200\n"
|
||||
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
|
||||
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -182,6 +182,131 @@ msgstr "Uuider på utvidelser som skal slås av"
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Om det skal samles statistikk om bruk av programmer"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
||||
msgid "Clip the crosshairs at the center"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
|
||||
msgid "Color of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
|
||||
msgid ""
|
||||
"Determines the length of the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
|
||||
msgid ""
|
||||
"Determines the position of the magnified mouse image within the magnified "
|
||||
"view and how it reacts to system mouse movement. The values are - none: no "
|
||||
"mouse tracking; - centered: the mouse image is displayed at the center of "
|
||||
"the zoom region (which also represents the point under the system mouse) and "
|
||||
"the magnified contents are scrolled as the system mouse moves; - "
|
||||
"proportional: the position of the magnified mouse in the zoom region is "
|
||||
"proportionally the same as the position of the system mouse on screen; - "
|
||||
"push: when the magnified mouse intersects a boundary of the zoom region, the "
|
||||
"contents are scrolled into view."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
"transparent."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"Determines whether the crosshairs intersect the magnified mouse sprite, or "
|
||||
"are clipped such that the ends of the horizontal and vertical lines surround "
|
||||
"the mouse image."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
|
||||
msgid "Enable lens mode"
|
||||
msgstr "Slå på linsemodus"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"Enables/disables display of crosshairs centered on the magnified mouse "
|
||||
"sprite."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
|
||||
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 the "
|
||||
"screen edge moves into the magnified view."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
|
||||
msgid "Length of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
|
||||
msgid "Magnification factor"
|
||||
msgstr "Forstørrelsesfaktor"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
|
||||
msgid "Mouse Tracking Mode"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
|
||||
msgid "Opacity of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
|
||||
msgid "Screen position"
|
||||
msgstr "Skjermposisjon"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
|
||||
msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
|
||||
msgid "Show or hide crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
|
||||
msgid "Show or hide the magnifier"
|
||||
msgstr "Vis eller skjul forstørrelsesglass"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
|
||||
msgid "Show or hide the magnifier and all of its zoom regions."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The color of the the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
|
||||
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 ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
"value of 2.0 doubles the size."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
|
||||
msgid "Thickness of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
"Whether the magnified view should be centered over the location of the "
|
||||
"system mouse and move with it."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
|
||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/clock-preferences.ui.h:1
|
||||
msgid "Clock Format"
|
||||
msgstr "Klokkeformat"
|
||||
@ -211,27 +336,27 @@ msgid "_24 hour format"
|
||||
msgstr "_24-timers format"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:384 ../js/ui/dash.js:776
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "PROGRAMMER"
|
||||
|
||||
#: ../js/ui/appDisplay.js:416
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
msgid "PREFERENCES"
|
||||
msgstr "BRUKERVALG"
|
||||
|
||||
#: ../js/ui/appDisplay.js:721
|
||||
#: ../js/ui/appDisplay.js:648
|
||||
msgid "New Window"
|
||||
msgstr "Nytt vindu"
|
||||
|
||||
#: ../js/ui/appDisplay.js:725
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Fjern fra favoritter"
|
||||
|
||||
#: ../js/ui/appDisplay.js:726
|
||||
#: ../js/ui/appDisplay.js:653
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Legg til i favoritter"
|
||||
|
||||
#: ../js/ui/appDisplay.js:1033
|
||||
#: ../js/ui/appDisplay.js:830
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Dra hit for å legge til favoritter"
|
||||
|
||||
@ -249,138 +374,137 @@ msgstr "%s ble fjernet fra dine favoritter."
|
||||
msgid "Find"
|
||||
msgstr "Finn"
|
||||
|
||||
#: ../js/ui/dash.js:471
|
||||
#: ../js/ui/dash.js:473
|
||||
msgid "Searching..."
|
||||
msgstr "Søker..."
|
||||
|
||||
#: ../js/ui/dash.js:485
|
||||
#: ../js/ui/dash.js:487
|
||||
msgid "No matching results."
|
||||
msgstr "Ingen treff."
|
||||
|
||||
#. **** Places ****
|
||||
#. Translators: This is in the sense of locations for documents,
|
||||
#. network locations, etc.
|
||||
#: ../js/ui/dash.js:795 ../js/ui/placeDisplay.js:550
|
||||
#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:554
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "STEDER & ENHETER"
|
||||
|
||||
#. **** Documents ****
|
||||
#: ../js/ui/dash.js:802 ../js/ui/docDisplay.js:494
|
||||
#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "SISTE OPPFØRINGER"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:471
|
||||
#: ../js/ui/lookingGlass.js:552
|
||||
msgid "No extensions installed"
|
||||
msgstr "Ingen utvidelser installert"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:508
|
||||
#: ../js/ui/lookingGlass.js:589
|
||||
msgid "Enabled"
|
||||
msgstr "Aktivert"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:510
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
|
||||
msgid "Disabled"
|
||||
msgstr "Deaktivert"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:512
|
||||
#: ../js/ui/lookingGlass.js:593
|
||||
msgid "Error"
|
||||
msgstr "Feil"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:514
|
||||
#: ../js/ui/lookingGlass.js:595
|
||||
msgid "Out of date"
|
||||
msgstr "Utdatert"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:539
|
||||
#: ../js/ui/lookingGlass.js:620
|
||||
msgid "View Source"
|
||||
msgstr "Vis kildekode"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:545
|
||||
#: ../js/ui/lookingGlass.js:626
|
||||
msgid "Web Page"
|
||||
msgstr "Nettside"
|
||||
|
||||
#: ../js/ui/overview.js:159
|
||||
#: ../js/ui/overview.js:160
|
||||
msgid "Undo"
|
||||
msgstr "Angre"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:473
|
||||
#: ../js/ui/panel.js:469
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Avslutt %s"
|
||||
|
||||
#: ../js/ui/panel.js:498
|
||||
#: ../js/ui/panel.js:494
|
||||
msgid "Preferences"
|
||||
msgstr "Brukervalg"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:584
|
||||
#: ../js/ui/panel.js:580
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %e %b, %R.%S"
|
||||
|
||||
#: ../js/ui/panel.js:585
|
||||
#: ../js/ui/panel.js:581
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%a %e %b, %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:589
|
||||
#: ../js/ui/panel.js:585
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R.%S"
|
||||
|
||||
#: ../js/ui/panel.js:590
|
||||
#: ../js/ui/panel.js:586
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:597
|
||||
#: ../js/ui/panel.js:593
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %e %b, %l.%M.%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:598
|
||||
#: ../js/ui/panel.js:594
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a %e %b, %l.%M %p"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:602
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l.%M.%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:603
|
||||
#: ../js/ui/panel.js:599
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %l.%M %p"
|
||||
|
||||
#. 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:741
|
||||
#: ../js/ui/panel.js:744
|
||||
msgid "Activities"
|
||||
msgstr "Aktiviteter"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:107
|
||||
#: ../js/ui/placeDisplay.js:111
|
||||
#, c-format
|
||||
msgid "Failed to unmount '%s'"
|
||||
msgstr "Klarte ikke å avmontere «%s»"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:110
|
||||
#: ../js/ui/placeDisplay.js:114
|
||||
msgid "Retry"
|
||||
msgstr "Prøv igjen"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:155
|
||||
#: ../js/ui/placeDisplay.js:159
|
||||
msgid "Connect to..."
|
||||
msgstr "Koble til..."
|
||||
|
||||
#. Translators: the "ON" and "OFF" strings are used in the
|
||||
#. toggle switches in the status area menus, and must be SHORT.
|
||||
#. If you don't have suitable short words, consider initials,
|
||||
#. "0"/"1", "⚪"/"⚫", etc.
|
||||
#: ../js/ui/popupMenu.js:30 ../js/ui/popupMenu.js:40
|
||||
msgid "ON"
|
||||
msgstr "PÅ"
|
||||
|
||||
#: ../js/ui/popupMenu.js:31 ../js/ui/popupMenu.js:45
|
||||
msgid "OFF"
|
||||
msgstr "AV"
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:33
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
#: ../js/ui/runDialog.js:233
|
||||
msgid "Please enter a command:"
|
||||
@ -391,89 +515,163 @@ msgstr "Oppgi en kommando:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Kjøring av «%s» feilet:"
|
||||
|
||||
#: ../js/ui/statusMenu.js:91
|
||||
#: ../js/ui/statusMenu.js:101
|
||||
msgid "Available"
|
||||
msgstr "Tilgjengelig"
|
||||
|
||||
#: ../js/ui/statusMenu.js:95
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Busy"
|
||||
msgstr "Opptatt"
|
||||
|
||||
#: ../js/ui/statusMenu.js:99
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "Usynlig"
|
||||
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Account Information..."
|
||||
msgstr "Kontoinformasjon..."
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr "Min konto..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:110
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
msgid "System Preferences..."
|
||||
msgstr "Brukervalg for systemet..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:117
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
msgid "Lock Screen"
|
||||
msgstr "Lås skjerm"
|
||||
|
||||
#: ../js/ui/statusMenu.js:121
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Switch User"
|
||||
msgstr "Bytt bruker"
|
||||
|
||||
#: ../js/ui/statusMenu.js:126
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
msgid "Log Out..."
|
||||
msgstr "Logg ut..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr "Hvilemodus"
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
msgstr "Start på nytt..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
msgid "Shut Down..."
|
||||
msgstr "Avslutt..."
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:45
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "Skjermleser"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:91
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Tastatur på skjermen"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:94
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Synlig varsling"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:97
|
||||
msgid "Sticky Keys"
|
||||
msgstr "Klebrige taster"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:100
|
||||
msgid "Slow Keys"
|
||||
msgstr "Trege taster"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:103
|
||||
msgid "Bounce Keys"
|
||||
msgstr "Spretne taster"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:106
|
||||
msgid "Mouse Keys"
|
||||
msgstr "Mustaster"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:110
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "Innstillinger for tilgjengelighet"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:163
|
||||
msgid "High Contrast"
|
||||
msgstr "Høy kontrast"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
msgid "Large Text"
|
||||
msgstr "Stor tekst"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "Zoom"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
msgstr "%s er ferdig startet"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:47
|
||||
#: ../js/ui/windowAttentionHandler.js:45
|
||||
#, c-format
|
||||
msgid "'%s' is ready"
|
||||
msgstr "«%s» er klar"
|
||||
|
||||
#: ../js/ui/workspacesView.js:230
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
msgid ""
|
||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr ""
|
||||
"Kan ikke legge til nytt arbeidsområde fordi grensen for maksimalt antall "
|
||||
"arbeidsområder er nådd."
|
||||
|
||||
#: ../js/ui/workspacesView.js:247
|
||||
#: ../js/ui/workspacesView.js:246
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "Kan ikke fjerne første arbeidsområde"
|
||||
|
||||
#: ../src/shell-global.c:1105
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
msgstr[0] "%u utgang"
|
||||
msgstr[1] "%u utganger"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] "%u inngang"
|
||||
msgstr[1] "%u innganger"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
msgid "System Sounds"
|
||||
msgstr "Systemlyder"
|
||||
|
||||
#: ../src/shell-global.c:1204
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Mindre enn ett minutt siden"
|
||||
|
||||
#: ../src/shell-global.c:1109
|
||||
#: ../src/shell-global.c:1208
|
||||
#, 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:1114
|
||||
#: ../src/shell-global.c:1213
|
||||
#, 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:1119
|
||||
#: ../src/shell-global.c:1218
|
||||
#, 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:1124
|
||||
#: ../src/shell-global.c:1223
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
|
579
po/nl.po
579
po/nl.po
@ -3,14 +3,16 @@
|
||||
# This file is distributed under the same license as the gnome-shell package.
|
||||
#
|
||||
# Sander Dijkhuis <sander.dijkhuis@gmail.com>, 2009, 2010.
|
||||
# Reinout van Schouwen <reinouts@gnome.org>, 2010
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-03-31 13:34+0200\n"
|
||||
"PO-Revision-Date: 2010-04-02 22:18+0200\n"
|
||||
"Last-Translator: Sander Dijkhuis <sander.dijkhuis@gmail.com>\n"
|
||||
"POT-Creation-Date: 2010-10-19 23:19+0200\n"
|
||||
"PO-Revision-Date: 2010-10-19 14:12+0100\n"
|
||||
"Last-Translator: Reinout van Schouwen <reinouts@gnome.org>\n"
|
||||
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
|
||||
"Language: nl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@ -24,32 +26,369 @@ msgstr "Gnome Shell"
|
||||
msgid "Window management and application launching"
|
||||
msgstr "Vensterbeheer en toepassingen starten"
|
||||
|
||||
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
|
||||
msgid "Clock"
|
||||
msgstr "Klok"
|
||||
|
||||
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
|
||||
msgid "Customize the panel clock"
|
||||
msgstr "De paneelklok aanpassen"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
||||
msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
"dialog."
|
||||
msgstr ""
|
||||
"Geeft toegang tot interne debugging- en observatieprogramma's met behulp van "
|
||||
"het Alt-F2-dialoogvenster."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
msgid "Custom format of the clock"
|
||||
msgstr "Aangepaste indeling van de klok"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
msgstr ""
|
||||
"Interne hulpprogramma's inschakelen die nuttig zijn voor gebruikers en "
|
||||
"testers van Alt-F2"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "Bestandsextensie voor het opslaan van de screencast"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "Framerate voor het opnemen van de screencasts."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should not be loaded."
|
||||
msgstr ""
|
||||
"Gnome Shell-uitbreidingen hebben een uuid-eigenschap; deze sleutel toont "
|
||||
"uitbreidingen die niet geladen mogen worden."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr "Geschiedenis voor het opdracht-dialoogvenster (Alt-F2)"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||
msgid "Hour format"
|
||||
msgstr "Uurindeling"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
||||
msgid ""
|
||||
"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
|
||||
"clock, in addition to time."
|
||||
msgstr ""
|
||||
"Indien ingeschakeld en de indeling is ofwel ‘12-uur’ of ‘24-uur’, behalve de "
|
||||
"tijd ook de datum in de klok weergeven."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid ""
|
||||
"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
|
||||
"time."
|
||||
msgstr ""
|
||||
"Indien ingeschakeld en de indeling is ofwel ‘12-uur’ of ‘24-uur’, seconden "
|
||||
"in de klok weergeven."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "Indien ingeschakeld worden weeknummers in de kalender getoond."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr "Lijst van desktopbestand-id's voor favoriete toepassingen"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
msgid "Overview workspace view mode"
|
||||
msgstr "Werkbladoverzichtsmodus"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
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 "
|
||||
"the recorded video is recorded. It will normally have a unconnected source "
|
||||
"pad; output from that pad will be written into the output file. However the "
|
||||
"pipeline can also take care of its own output - this might be used to send "
|
||||
"the output to an icecast server via shout2send or similar. When unset or set "
|
||||
"to an empty value, the default pipeline will be used. This is currently "
|
||||
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show date in clock"
|
||||
msgstr "Datum tonen in klok"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Weeknummers tonen in kalender"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Tijd tonen inclusief seconden"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
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 ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "De gstreamer-pijplijn voor het coderen van de screencast"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid ""
|
||||
"The selected workspace view mode in the overview. Supported values are "
|
||||
"\"single\" and \"grid\"."
|
||||
msgstr ""
|
||||
"De geselecteerde werkbladmodus in het overzicht. Ondersteunde waarden zijn "
|
||||
"‘single’ en ‘grid’."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
"The shell normally monitors active applications in order to present the most "
|
||||
"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 ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
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 strftime"
|
||||
"() to obtain a specific format. See the strftime() manual for more "
|
||||
"information."
|
||||
msgstr ""
|
||||
"Deze sleutel geeft aan welke weergave de paneelklok gebruikt wanneer de "
|
||||
"weergavesleutel is ingsteld op ‘custom’. U kunt opmaakcodes voor de functie "
|
||||
"‘strftime()’ gebruiken om een bepaalde weergave te verkrijgen. Zie de "
|
||||
"handleiding van strftime() voor meer informatie."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
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."
|
||||
msgstr ""
|
||||
"Deze sleutel geeft de uurindeling aan van de paneelklok. Mogelijke waarden "
|
||||
"zijn ‘12-hour’, ‘24-hour’, ‘unix’ en ’custom’. Als ingesteld op ‘unix’ geeft "
|
||||
"de klok tijd weer in seconden sinds Epoch, oftewel 01-01-1970. Als ingesteld "
|
||||
"op ‘custom’ dan geeft de klok tijd weer aan de hand van de indeling die is "
|
||||
"gespecificeerd in de sleutel custom_format. Merk op dat de sleutels "
|
||||
"show_date en show_seconds worden genegeerd als de waarde staat op ‘unix’ of "
|
||||
"‘custom’."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr "Uuid's van uit te schakelen uitbreidingen"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Of statistieken worden bijgehouden over toepassingsgebruik"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
||||
msgid "Clip the crosshairs at the center"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
|
||||
#, fuzzy
|
||||
msgid "Color of the crosshairs"
|
||||
msgstr "Intersecties (kruisjes)"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
|
||||
msgid ""
|
||||
"Determines the length of the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
|
||||
msgid ""
|
||||
"Determines the position of the magnified mouse image within the magnified "
|
||||
"view and how it reacts to system mouse movement. The values are - none: no "
|
||||
"mouse tracking; - centered: the mouse image is displayed at the center of "
|
||||
"the zoom region (which also represents the point under the system mouse) and "
|
||||
"the magnified contents are scrolled as the system mouse moves; - "
|
||||
"proportional: the position of the magnified mouse in the zoom region is "
|
||||
"proportionally the same as the position of the system mouse on screen; - "
|
||||
"push: when the magnified mouse intersects a boundary of the zoom region, the "
|
||||
"contents are scrolled into view."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
"transparent."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"Determines whether the crosshairs intersect the magnified mouse sprite, or "
|
||||
"are clipped such that the ends of the horizontal and vertical lines surround "
|
||||
"the mouse image."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
|
||||
msgid "Enable lens mode"
|
||||
msgstr "Lensmodus inschakelen"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"Enables/disables display of crosshairs centered on the magnified mouse "
|
||||
"sprite."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
|
||||
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 the "
|
||||
"screen edge moves into the magnified view."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
|
||||
#, fuzzy
|
||||
msgid "Length of the crosshairs"
|
||||
msgstr "Intersecties (kruisjes)"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
|
||||
msgid "Magnification factor"
|
||||
msgstr "Vergrotingsfactor"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
|
||||
msgid "Mouse Tracking Mode"
|
||||
msgstr "Muisvolgmodus"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
|
||||
#, fuzzy
|
||||
msgid "Opacity of the crosshairs"
|
||||
msgstr "Intersecties (kruisjes)"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
|
||||
msgid "Screen position"
|
||||
msgstr "Schermpositie"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
|
||||
msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
|
||||
#, fuzzy
|
||||
msgid "Show or hide crosshairs"
|
||||
msgstr "De statusbalk tonen of verbergen"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
|
||||
#, fuzzy
|
||||
msgid "Show or hide the magnifier"
|
||||
msgstr "De statusbalk tonen of verbergen"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
|
||||
msgid "Show or hide the magnifier and all of its zoom regions."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The color of the the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
|
||||
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 ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
"value of 2.0 doubles the size."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
|
||||
#, fuzzy
|
||||
msgid "Thickness of the crosshairs"
|
||||
msgstr "Intersecties (kruisjes)"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
"Whether the magnified view should be centered over the location of the "
|
||||
"system mouse and move with it."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
|
||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/clock-preferences.ui.h:1
|
||||
msgid "Clock Format"
|
||||
msgstr "Klokweergave"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:2
|
||||
msgid "Clock Preferences"
|
||||
msgstr "Klok-voorkeuren"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:3
|
||||
msgid "Panel Display"
|
||||
msgstr "Paneelweergave"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:4
|
||||
msgid "Show seco_nds"
|
||||
msgstr "_Seconden tonen"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:5
|
||||
msgid "Show the _date"
|
||||
msgstr "_Datum tonen"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:6
|
||||
msgid "_12 hour format"
|
||||
msgstr "_12-uursklok"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:7
|
||||
msgid "_24 hour format"
|
||||
msgstr "_24-uursklok"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:312 ../js/ui/dash.js:855
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "TOEPASSINGEN"
|
||||
|
||||
#: ../js/ui/appDisplay.js:344
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
msgid "PREFERENCES"
|
||||
msgstr "VOORKEUREN"
|
||||
|
||||
#: ../js/ui/appDisplay.js:734
|
||||
#: ../js/ui/appDisplay.js:648
|
||||
msgid "New Window"
|
||||
msgstr "Nieuw venster"
|
||||
|
||||
#: ../js/ui/appDisplay.js:738
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Uit favorieten verwijderen"
|
||||
|
||||
#: ../js/ui/appDisplay.js:739
|
||||
#: ../js/ui/appDisplay.js:653
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Aan favorieten toevoegen"
|
||||
|
||||
#: ../js/ui/appDisplay.js:1091
|
||||
#: ../js/ui/appDisplay.js:830
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Hierheen slepen om favorieten toe te voegen"
|
||||
|
||||
#: ../js/ui/appFavorites.js:89
|
||||
#: ../js/ui/appFavorites.js:88
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s is toegevoegd aan uw favorieten."
|
||||
@ -59,189 +398,275 @@ msgstr "%s is toegevoegd aan uw favorieten."
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s is verwijderd uit uw favorieten."
|
||||
|
||||
#: ../js/ui/dash.js:194
|
||||
#: ../js/ui/dash.js:142
|
||||
msgid "Find"
|
||||
msgstr "Zoeken"
|
||||
|
||||
#: ../js/ui/dash.js:510
|
||||
#: ../js/ui/dash.js:473
|
||||
msgid "Searching..."
|
||||
msgstr "Zoeken…"
|
||||
|
||||
#: ../js/ui/dash.js:524
|
||||
#: ../js/ui/dash.js:487
|
||||
msgid "No matching results."
|
||||
msgstr "Geen overeenkomende resultaten."
|
||||
|
||||
#. **** Places ****
|
||||
#. Translators: This is in the sense of locations for documents,
|
||||
#. network locations, etc.
|
||||
#: ../js/ui/dash.js:874 ../js/ui/placeDisplay.js:543
|
||||
#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:554
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "LOCATIES & APPARATEN"
|
||||
|
||||
#. **** Documents ****
|
||||
#: ../js/ui/dash.js:881 ../js/ui/docDisplay.js:489
|
||||
#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "RECENTE ITEMS"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:363
|
||||
#: ../js/ui/lookingGlass.js:552
|
||||
msgid "No extensions installed"
|
||||
msgstr "Geen uitbreidingen geïnstalleerd"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:400
|
||||
#: ../js/ui/lookingGlass.js:589
|
||||
msgid "Enabled"
|
||||
msgstr "Ingeschakeld"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:402
|
||||
#: ../js/ui/lookingGlass.js:591
|
||||
msgid "Disabled"
|
||||
msgstr "Uitgeschakeld"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:404
|
||||
#: ../js/ui/lookingGlass.js:593
|
||||
msgid "Error"
|
||||
msgstr "Fout"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:406
|
||||
#: ../js/ui/lookingGlass.js:595
|
||||
msgid "Out of date"
|
||||
msgstr "Gedateerd"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:431
|
||||
#: ../js/ui/lookingGlass.js:620
|
||||
msgid "View Source"
|
||||
msgstr "Broncode weergeven"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:437
|
||||
#: ../js/ui/lookingGlass.js:626
|
||||
msgid "Web Page"
|
||||
msgstr "Webpagina"
|
||||
|
||||
#: ../js/ui/overview.js:182
|
||||
#: ../js/ui/overview.js:160
|
||||
msgid "Undo"
|
||||
msgstr "Ongedaan maken"
|
||||
|
||||
#. 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:388
|
||||
msgid "Activities"
|
||||
msgstr "Activiteiten"
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:468
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "%s afsluiten"
|
||||
|
||||
#. Translators: This is the time format used in 24-hour mode.
|
||||
#: ../js/ui/panel.js:619
|
||||
#: ../js/ui/panel.js:493
|
||||
msgid "Preferences"
|
||||
msgstr "Voorkeuren"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:579
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %e %b, %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:580
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%a %e %b, %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:584
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:585
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format used for AM/PM.
|
||||
#: ../js/ui/panel.js:622
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %k:%M %p"
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:592
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %e %b, %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:108
|
||||
#: ../js/ui/panel.js:593
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a %e %b, %l:%M %p"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:597
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %l:%M %p"
|
||||
|
||||
#. 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:743
|
||||
msgid "Activities"
|
||||
msgstr "Activiteiten"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:111
|
||||
#, c-format
|
||||
msgid "Failed to unmount '%s'"
|
||||
msgstr "Ontkoppelen van ‘%s’ mislukt"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:111
|
||||
#: ../js/ui/placeDisplay.js:114
|
||||
msgid "Retry"
|
||||
msgstr "Opnieuw"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:156
|
||||
#: ../js/ui/placeDisplay.js:159
|
||||
msgid "Connect to..."
|
||||
msgstr "Verbinding maken met…"
|
||||
|
||||
#: ../js/ui/runDialog.js:232
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:31
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
#: ../js/ui/runDialog.js:233
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Voer een opdracht in:"
|
||||
|
||||
#: ../js/ui/runDialog.js:376
|
||||
#: ../js/ui/runDialog.js:378
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Uitvoeren van ‘%s’ mislukt:"
|
||||
|
||||
#: ../js/ui/statusMenu.js:107
|
||||
#: ../js/ui/statusMenu.js:97
|
||||
msgid "Available"
|
||||
msgstr "Beschikbaar"
|
||||
|
||||
#: ../js/ui/statusMenu.js:112
|
||||
#: ../js/ui/statusMenu.js:101
|
||||
msgid "Busy"
|
||||
msgstr "Bezig"
|
||||
|
||||
#: ../js/ui/statusMenu.js:117
|
||||
#: ../js/ui/statusMenu.js:105
|
||||
msgid "Invisible"
|
||||
msgstr "Onzichtbaar"
|
||||
|
||||
#: ../js/ui/statusMenu.js:126
|
||||
#: ../js/ui/statusMenu.js:112
|
||||
msgid "Account Information..."
|
||||
msgstr "Accountinformatie…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:132
|
||||
msgid "Sidebar"
|
||||
msgstr "Zijbalk"
|
||||
#: ../js/ui/statusMenu.js:116
|
||||
msgid "System Settings..."
|
||||
msgstr "Systeeminstellingen…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:142
|
||||
msgid "System Preferences..."
|
||||
msgstr "Systeemvoorkeuren…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:151
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
msgid "Lock Screen"
|
||||
msgstr "Scherm vergrendelen"
|
||||
|
||||
#: ../js/ui/statusMenu.js:156
|
||||
#: ../js/ui/statusMenu.js:127
|
||||
msgid "Switch User"
|
||||
msgstr "Gebruiker wisselen"
|
||||
|
||||
#: ../js/ui/statusMenu.js:162
|
||||
#: ../js/ui/statusMenu.js:132
|
||||
msgid "Log Out..."
|
||||
msgstr "Afmelden…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:167
|
||||
#: ../js/ui/statusMenu.js:136
|
||||
msgid "Shut Down..."
|
||||
msgstr "Afsluiten…"
|
||||
|
||||
#. Translators: This is a time format.
|
||||
#: ../js/ui/widget.js:163
|
||||
msgid "%H:%M"
|
||||
msgstr "%H:%M"
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "Schermlezer"
|
||||
|
||||
#: ../js/ui/widget.js:317
|
||||
msgid "Applications"
|
||||
msgstr "Toepassingen"
|
||||
#: ../js/ui/status/accessibility.js:91
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Schermtoetsenbord"
|
||||
|
||||
#: ../js/ui/widget.js:339
|
||||
msgid "Recent Documents"
|
||||
msgstr "Recente documenten"
|
||||
#: ../js/ui/status/accessibility.js:94
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Visuele attenderingen"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:47
|
||||
#: ../js/ui/status/accessibility.js:97
|
||||
msgid "Sticky Keys"
|
||||
msgstr "PlakToetsen"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:100
|
||||
msgid "Slow Keys"
|
||||
msgstr "Trage Toetsen"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:103
|
||||
msgid "Bounce Keys"
|
||||
msgstr "Springende toetsen"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:106
|
||||
msgid "Mouse Keys"
|
||||
msgstr "MuisToetsen"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:110
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "Toegankelijkheidsinstellingen"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:163
|
||||
msgid "High Contrast"
|
||||
msgstr "Hoog contrast"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
msgid "Large Text"
|
||||
msgstr "Grote tekst"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "Zoomen"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
msgstr "%s is opgestart"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:49
|
||||
#: ../js/ui/windowAttentionHandler.js:45
|
||||
#, c-format
|
||||
msgid "'%s' is ready"
|
||||
msgstr "‘%s’ is klaar"
|
||||
|
||||
#: ../src/shell-global.c:967
|
||||
#: ../js/ui/workspacesView.js:230
|
||||
msgid ""
|
||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr ""
|
||||
"Kan geen nieuw werkblad toevoegen omdat maximum aantal werkbladen is bereikt."
|
||||
|
||||
#: ../js/ui/workspacesView.js:247
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "Kan het eerste werkblad niet verwijderen"
|
||||
|
||||
#: ../src/shell-global.c:1196
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Minder dan een minuut geleden"
|
||||
|
||||
#: ../src/shell-global.c:971
|
||||
#: ../src/shell-global.c:1200
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d minuut geleden"
|
||||
msgstr[1] "%d minuten geleden"
|
||||
|
||||
#: ../src/shell-global.c:976
|
||||
#: ../src/shell-global.c:1205
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d uur geleden"
|
||||
msgstr[1] "%d uur geleden"
|
||||
|
||||
#: ../src/shell-global.c:981
|
||||
#: ../src/shell-global.c:1210
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d dag geleden"
|
||||
msgstr[1] "%d dagen geleden"
|
||||
|
||||
#: ../src/shell-global.c:986
|
||||
#: ../src/shell-global.c:1215
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
@ -271,3 +696,15 @@ msgstr "Zoeken"
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Sidebar"
|
||||
#~ msgstr "Zijbalk"
|
||||
|
||||
#~ msgid "%H:%M"
|
||||
#~ msgstr "%H:%M"
|
||||
|
||||
#~ msgid "Applications"
|
||||
#~ msgstr "Toepassingen"
|
||||
|
||||
#~ msgid "Recent Documents"
|
||||
#~ msgstr "Recente documenten"
|
||||
|
296
po/pa.po
296
po/pa.po
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
|
||||
"cgi?product=gnome-shell&component=general\n"
|
||||
"POT-Creation-Date: 2010-10-02 20:44+0000\n"
|
||||
"PO-Revision-Date: 2010-10-04 07:19+0530\n"
|
||||
"POT-Creation-Date: 2010-10-27 23:15+0000\n"
|
||||
"PO-Revision-Date: 2010-10-29 08:13+0530\n"
|
||||
"Last-Translator: A S Alam <aalam@users.sf.net>\n"
|
||||
"Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -166,9 +166,9 @@ msgid ""
|
||||
"() to obtain a specific format. See the strftime() manual for more "
|
||||
"information."
|
||||
msgstr ""
|
||||
"ਇਹ ਕੁੰਜੀ ਪੈਨਲ ਘੜੀ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਫਾਰਮੈਟ ਦਿੰਦੀ ਹੈ, ਜਦੋਂ ਕਿ ਫਾਰਮੈਟ ਕੁੰਜੀ \"ਕਸਟਮ\" ਸੈੱਟ "
|
||||
"ਕੀਤੀ ਹੋਵੇ। ਤੁਸੀਂ ਖਾਸ ਫਾਰਮੈਟ ਦੇਣ ਲਈ ਹਦਾਇਤਾਂ ਵਾਸਤੇ strftime () ਨੂੰ ਵਰਤ ਸਕਦੇ ਹੋ। "
|
||||
"ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ strftime () ਦਸਤਾਵੇਜ਼ ਵੇਖੋ।"
|
||||
"ਇਹ ਕੁੰਜੀ ਪੈਨਲ ਘੜੀ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਫਾਰਮੈਟ ਦਿੰਦੀ ਹੈ, ਜਦੋਂ ਕਿ ਫਾਰਮੈਟ ਕੁੰਜੀ \"ਕਸਟਮ\" ਸੈੱਟ ਕੀਤੀ "
|
||||
"ਹੋਵੇ। ਤੁਸੀਂ ਖਾਸ ਫਾਰਮੈਟ ਦੇਣ ਲਈ ਹਦਾਇਤਾਂ ਵਾਸਤੇ strftime () ਨੂੰ ਵਰਤ ਸਕਦੇ ਹੋ। ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ "
|
||||
"strftime () ਦਸਤਾਵੇਜ਼ ਵੇਖੋ।"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
msgid ""
|
||||
@ -179,12 +179,12 @@ msgid ""
|
||||
"in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
|
||||
"the show_date and show_seconds keys are ignored."
|
||||
msgstr ""
|
||||
"ਇਹ ਕੁੰਜੀ ਤਹਿ ਕਰਦੀ ਹੈ ਕਿ ਕਿਹੜਾ ਪੈਨਲ ਘੜੀ ਵਿੱਚ ਘੰਟਾ ਫਾਰਮੈਟ ਵਰਤਿਆ ਜਾਵੇ। ਸੰਭਵ ਮੁੱਲ ਹਨ "
|
||||
"\"12-hour\"(੧੨-ਘੰਟੇ), \"24-hour\" (੨੪-ਘੰਟੇ), \"unix\" (ਯੂਨੈਕਸ) ਅਤੇ \"custom\" "
|
||||
"(ਪਸੰਦੀਦਾ)। ਜੇ \"ਯੂਨੈਕਸ\" ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਤਾਂ ਘੜੀ ਨੂੰ ਈਪੋਚ (੦੧-ਜਨਵਰੀ-੧੯੭੦) ਤੋਂ ਵੇਖਾਇਆ\n"
|
||||
"ਜਾਵੇਗਾ। ਜੇ \"ਪਸੰਦੀਦਾ\" ਲਈ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਤਾਂ, ਘੜੀ ਨੂੰ custom_format ਕੁੰਜੀ ਵਿੱਚ ਦਿੱਤੇ "
|
||||
"ਫਾਰਮੈਟ ਮੁਤਾਬਕ ਵੇਖਾਇਆ ਜਾਵੇਗਾ। ਯਾਦ ਰੱਖੋ ਕਿ ਜੇ \"ਯੂਨੈਕਸ\" ਜਾਂ \"ਪਸੰਦੀਦਾ\" ਸੈੱਟ ਕੀਤਾ ਤਾਂ ਅੱਪਗਰੇਡ "
|
||||
"ਮਿਤੀ ਵੇਖਾਓ ਤੇ ਸਕਿੰਟ ਵੇਖਾਓ ਨੂੰ ਅਣਡਿੱਠਾ ਕੀਤਾ ਜਾਵੇਗਾ।"
|
||||
"ਇਹ ਕੁੰਜੀ ਤਹਿ ਕਰਦੀ ਹੈ ਕਿ ਕਿਹੜਾ ਪੈਨਲ ਘੜੀ ਵਿੱਚ ਘੰਟਾ ਫਾਰਮੈਟ ਵਰਤਿਆ ਜਾਵੇ। ਸੰਭਵ ਮੁੱਲ ਹਨ \"12-"
|
||||
"hour\"(੧੨-ਘੰਟੇ), \"24-hour\" (੨੪-ਘੰਟੇ), \"unix\" (ਯੂਨੈਕਸ) ਅਤੇ \"custom\" (ਪਸੰਦੀਦਾ)। "
|
||||
"ਜੇ \"ਯੂਨੈਕਸ\" ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਤਾਂ ਘੜੀ ਨੂੰ ਈਪੋਚ (੦੧-ਜਨਵਰੀ-੧੯੭੦) ਤੋਂ ਵੇਖਾਇਆ\n"
|
||||
"ਜਾਵੇਗਾ। ਜੇ \"ਪਸੰਦੀਦਾ\" ਲਈ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਤਾਂ, ਘੜੀ ਨੂੰ custom_format ਕੁੰਜੀ ਵਿੱਚ ਦਿੱਤੇ ਫਾਰਮੈਟ "
|
||||
"ਮੁਤਾਬਕ ਵੇਖਾਇਆ ਜਾਵੇਗਾ। ਯਾਦ ਰੱਖੋ ਕਿ ਜੇ \"ਯੂਨੈਕਸ\" ਜਾਂ \"ਪਸੰਦੀਦਾ\" ਸੈੱਟ ਕੀਤਾ ਤਾਂ ਅੱਪਗਰੇਡ ਮਿਤੀ "
|
||||
"ਵੇਖਾਓ ਤੇ ਸਕਿੰਟ ਵੇਖਾਓ ਨੂੰ ਅਣਡਿੱਠਾ ਕੀਤਾ ਜਾਵੇਗਾ।"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
msgid "Uuids of extensions to disable"
|
||||
@ -194,6 +194,132 @@ msgstr "ਇਕਟੈਨਸ਼ਨ ਦੀ Uuids ਬੰਦ ਹੈ"
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਵਰਤੋਂ ਬਾਰੇ ਅੰਕੜੇ ਇੱਕਠੇ ਕਰਨੇ ਹਨ"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
||||
msgid "Clip the crosshairs at the center"
|
||||
msgstr "ਸੈਂਟਰ ਉੱਤੇ ਕਰਾਂਸਹੇਅਰ ਕਲਿੱਪ ਕਰੋ"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
|
||||
msgid "Color of the crosshairs"
|
||||
msgstr "ਕਰਾਂਸਹੇਅਰ ਦਾ ਰੰਗ"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
|
||||
msgid ""
|
||||
"Determines the length of the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
|
||||
msgid ""
|
||||
"Determines the position of the magnified mouse image within the magnified "
|
||||
"view and how it reacts to system mouse movement. The values are - none: no "
|
||||
"mouse tracking; - centered: the mouse image is displayed at the center of "
|
||||
"the zoom region (which also represents the point under the system mouse) and "
|
||||
"the magnified contents are scrolled as the system mouse moves; - "
|
||||
"proportional: the position of the magnified mouse in the zoom region is "
|
||||
"proportionally the same as the position of the system mouse on screen; - "
|
||||
"push: when the magnified mouse intersects a boundary of the zoom region, the "
|
||||
"contents are scrolled into view."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
"transparent."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"Determines whether the crosshairs intersect the magnified mouse sprite, or "
|
||||
"are clipped such that the ends of the horizontal and vertical lines surround "
|
||||
"the mouse image."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
|
||||
#| msgid "Enabled"
|
||||
msgid "Enable lens mode"
|
||||
msgstr "ਲੈਨਜ਼ ਮੋਡ ਚਾਲੂ"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"Enables/disables display of crosshairs centered on the magnified mouse "
|
||||
"sprite."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
|
||||
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 the "
|
||||
"screen edge moves into the magnified view."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
|
||||
msgid "Length of the crosshairs"
|
||||
msgstr "ਕਰਾਂਸਹੇਅਰ ਦੀ ਲੰਬਾਈ"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
|
||||
msgid "Magnification factor"
|
||||
msgstr "ਵੱਡਦਰਸ਼ੀ ਗੁਣਾਂਕ"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
|
||||
msgid "Mouse Tracking Mode"
|
||||
msgstr "ਮਾਊਸ ਟਰੈਕਿੰਗ ਮੋਡ"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
|
||||
msgid "Opacity of the crosshairs"
|
||||
msgstr "ਕਰਾਂਸਹੇਅਰ ਦਾ ਧੁੰਦਲਾਪਨ"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
|
||||
msgid "Screen position"
|
||||
msgstr "ਸਕਰੀਨ ਸਥਿਤੀ"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
|
||||
msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
msgstr "ਡੈਸਕਟਾਪ ਦੇ ਕੋਨਿਆਂ ਤੋਂ ਪਾਰ ਵੱਡਦਰਸ਼ੀ ਸਮੱਗਰੀ ਸਕਰੋਲ ਕਰੋ"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
|
||||
msgid "Show or hide crosshairs"
|
||||
msgstr "ਕਰਾਂਸਹੇਅਰ ਵੇਖੋ ਜਾਂ ਓਹਲੇ ਕਰੋ"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
|
||||
msgid "Show or hide the magnifier"
|
||||
msgstr "ਵੱਡਦਰਸ਼ੀ ਵੇਖੋ ਜਾਂ ਓਹਲੇ ਕਰੋ"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
|
||||
msgid "Show or hide the magnifier and all of its zoom regions."
|
||||
msgstr "ਵੱਡਦਰਸ਼ੀ ਵੇਖੋ ਜਾਂ ਓਹਲੇ ਕਰੋ ਤੇ ਇਸ ਦੇ ਸਭ ਖੇਤਰਾਂ ਨੂੰ ਜ਼ੂਮ ਕਰੋ।"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The color of the the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr "ਵਰਟੀਕਲ ਤੇ ਹਰੀਜੱਟਲ ਲਾਈਨਾਂ ਦਾ ਰੰਗ, ਜੋ ਕਿ ਕਰਾਂਸਹੇਅਰ ਬਣਾਉਂਦੀਆਂ ਹਨ"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
|
||||
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 ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
"value of 2.0 doubles the size."
|
||||
msgstr "ਵੱਡਦਰਸ਼ੀ ਦੀ ਤਾਕਤ ਹੈ। ੧.੦ ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਕੋਈ ਵੀ ਨਹੀਂ। ੨.੦ ਦਾ ਮਤਲਬ ਹੈ ਆਕਾਰ ਦਾ ਦੋ ਗੁਣਾ।"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
|
||||
msgid "Thickness of the crosshairs"
|
||||
msgstr "ਕਰਾਂਸਹੇਅਰ ਦੀ ਮੋਟਾਈ"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
"Whether the magnified view should be centered over the location of the "
|
||||
"system mouse and move with it."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
|
||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
msgstr "ਵਰਟੀਕਲ ਤੇ ਹਰੀਜੱਟਲ ਲਾਈਨਾਂ ਦੀ ਚੌੜਾਈ, ਜੋ ਕਿ ਕਰਾਂਸਹੇਅਰ ਬਣਾਉਂਦੀਆਂ ਹਨ"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:1
|
||||
msgid "Clock Format"
|
||||
msgstr "ਘੜੀ ਫਾਰਮੈਟ"
|
||||
@ -289,7 +415,9 @@ msgstr "ਕੋਈ ਇਕਸਟੈਨਸ਼ਨ ਇੰਸਟਾਲ ਨਹੀਂ
|
||||
msgid "Enabled"
|
||||
msgstr "ਚਾਲੂ ਹੈ"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:591
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
|
||||
msgid "Disabled"
|
||||
msgstr "ਬੰਦ ਹੈ"
|
||||
|
||||
@ -314,58 +442,58 @@ msgid "Undo"
|
||||
msgstr "ਵਾਪਸ"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:461
|
||||
#: ../js/ui/panel.js:469
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "%s ਬੰਦ ਕਰੋ"
|
||||
|
||||
#: ../js/ui/panel.js:486
|
||||
#: ../js/ui/panel.js:494
|
||||
msgid "Preferences"
|
||||
msgstr "ਮੇਰੀ ਪਸੰਦ"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:572
|
||||
#: ../js/ui/panel.js:580
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a, %e %b %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:573
|
||||
#: ../js/ui/panel.js:581
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%a %e %b, %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:577
|
||||
#: ../js/ui/panel.js:585
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:578
|
||||
#: ../js/ui/panel.js:586
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:585
|
||||
#: ../js/ui/panel.js:593
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %e %b, %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:586
|
||||
#: ../js/ui/panel.js:594
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a %e %b, %l:%M %p"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:590
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:591
|
||||
#: ../js/ui/panel.js:599
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %l:%M %p"
|
||||
|
||||
#. 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:736
|
||||
#: ../js/ui/panel.js:744
|
||||
msgid "Activities"
|
||||
msgstr "ਸਰਗਰਮੀਆਂ"
|
||||
|
||||
@ -389,7 +517,7 @@ msgstr "...ਨਾਲ ਕੁਨੈਕਟ ਕਰੋ"
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:33
|
||||
msgid "toggle-switch-us"
|
||||
msgstr ""
|
||||
msgstr "toggle-switch-us"
|
||||
|
||||
#: ../js/ui/runDialog.js:233
|
||||
msgid "Please enter a command:"
|
||||
@ -400,43 +528,95 @@ msgstr "ਕਮਾਂਡ ਦਿਓ ਜੀ:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "'%s' ਚਲਾਉਣ ਲਈ ਫੇਲ੍ਹ:"
|
||||
|
||||
#: ../js/ui/statusMenu.js:91
|
||||
#: ../js/ui/statusMenu.js:101
|
||||
msgid "Available"
|
||||
msgstr "ਉਪਲੱਬਧ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:95
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Busy"
|
||||
msgstr "ਰੁਝਿਆ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:99
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "ਅਦਿੱਖ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Account Information..."
|
||||
msgstr "ਅਕਾਊਂਟ ਜਾਣਕਾਰੀ..."
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr "...ਮੇਰਾ ਅਕਾਊਂਟ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:110
|
||||
#| msgid "System Preferences..."
|
||||
msgid "System Settings..."
|
||||
msgstr "ਸਿਸਟਮ ਸੈਟਿੰਗ..."
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
#| msgid "Preferences"
|
||||
msgid "System Preferences..."
|
||||
msgstr "ਸਿਸਟਮ ਪਸੰਦ..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:117
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
msgid "Lock Screen"
|
||||
msgstr "ਸਕਰੀਨ ਲਾਕ ਕਰੋ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:121
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Switch User"
|
||||
msgstr "ਯੂਜ਼ਰ ਬਦਲੋ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:126
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
msgid "Log Out..."
|
||||
msgstr "ਲਾਗਆਉਟ..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr "ਸਸਪੈਂਡ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
msgstr "...ਮੁੜ-ਚਾਲੂ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
msgid "Shut Down..."
|
||||
msgstr "ਬੰਦ ਕਰੋ..."
|
||||
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "ਸਕਰੀਨ ਰੀਡਰ"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:91
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "ਸਕਰੀਨ ਕੀਬੋਰਡ"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:94
|
||||
msgid "Visual Alerts"
|
||||
msgstr "ਦਿੱਖ ਚੇਤਾਵਨੀ"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:97
|
||||
msgid "Sticky Keys"
|
||||
msgstr "ਸਟਿੱਕੀ ਸਵਿੱਚਾਂ"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:100
|
||||
msgid "Slow Keys"
|
||||
msgstr "ਹੌਲੀ ਸਵਿੱਚਾਂ"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:103
|
||||
msgid "Bounce Keys"
|
||||
msgstr "ਬਾਊਂਸ ਸਵਿੱਚਾਂ"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:106
|
||||
msgid "Mouse Keys"
|
||||
msgstr "ਮਾਊਸ ਸਵਿੱਚਾਂ"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:110
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "ਯੂਨੀਵਰਸਲ ਅਸੈੱਸ ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:163
|
||||
msgid "High Contrast"
|
||||
msgstr "ਵੱਧ ਕਨਟਰਾਸਟ"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
msgid "Large Text"
|
||||
msgstr "ਵੱਡੇ ਅੱਖਰ"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "ਜ਼ੂਮ"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
@ -447,40 +627,63 @@ msgstr "%s ਸ਼ੁਰੂ ਹੋਣਾ ਖਤਮ ਹੋਇਆ"
|
||||
msgid "'%s' is ready"
|
||||
msgstr "'%s' ਤਿਆਰ ਹੈ"
|
||||
|
||||
#: ../js/ui/workspacesView.js:230
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
msgid "Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr "ਨਵਾਂ ਵਰਕਸਪੇਸ ਜੋੜਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ, ਕਿਉਂਕਿ ਵਰਕਸਪੇਸਾਂ ਦੀ ਵੱਧੋ-ਵੱਧ ਗਿਣਤੀ ਪੂਰੀ ਹੋ ਚੁੱਕੀ ਹੈ।"
|
||||
|
||||
#: ../js/ui/workspacesView.js:247
|
||||
#: ../js/ui/workspacesView.js:246
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "ਪਹਿਲਾਂ ਵਰਕਸਪੇਸ ਨਹੀਂ ਹਟਾਇਆ ਜਾ ਸਕਦਾ।"
|
||||
|
||||
#: ../src/shell-global.c:1196
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
msgstr[0] "%u ਆਉਟਪੁੱਟ"
|
||||
msgstr[1] "%u ਆਉਟਪੁੱਟ"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] "%u ਇੰਪੁੱਟ"
|
||||
msgstr[1] "%u ਇੰਪੁੱਟ"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
#| msgid "System Settings..."
|
||||
msgid "System Sounds"
|
||||
msgstr "ਸਿਸਟਮ ਸਾਊਂਡ"
|
||||
|
||||
#: ../src/shell-global.c:1204
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "ਇੱਕ ਮਿੰਟ ਤੋਂ ਘੱਟ ਚਿਰ ਪਹਿਲਾਂ"
|
||||
|
||||
#: ../src/shell-global.c:1200
|
||||
#: ../src/shell-global.c:1208
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d ਮਿੰਟ ਪਹਿਲਾਂ"
|
||||
msgstr[1] "%d ਮਿੰਟ ਪਹਿਲਾਂ"
|
||||
|
||||
#: ../src/shell-global.c:1205
|
||||
#: ../src/shell-global.c:1213
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d ਘੰਟਾ ਪਹਿਲਾਂ"
|
||||
msgstr[1] "%d ਘੰਟੇ ਪਹਿਲਾਂ"
|
||||
|
||||
#: ../src/shell-global.c:1210
|
||||
#: ../src/shell-global.c:1218
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d ਦਿਨ ਪਹਿਲਾਂ"
|
||||
msgstr[1] "%d ਦਿਨ ਪਹਿਲਾਂ"
|
||||
|
||||
#: ../src/shell-global.c:1215
|
||||
#: ../src/shell-global.c:1223
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
@ -511,6 +714,9 @@ msgstr "ਖੋਜ"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Account Information..."
|
||||
#~ msgstr "ਅਕਾਊਂਟ ਜਾਣਕਾਰੀ..."
|
||||
|
||||
#~ msgid "Sidebar"
|
||||
#~ msgstr "ਬਾਹੀ"
|
||||
|
||||
|
640
po/pt_BR.po
640
po/pt_BR.po
@ -4,14 +4,16 @@
|
||||
# Og Maciel <ogmaciel@gnome.org>, 2009.
|
||||
# Rodrigo Flores <mail@rodrigoflores.org>, 2009.
|
||||
# Felipe Borges <felipe10borges@gmail.com>, 2010.
|
||||
# Henrique P. Machado <hpmachado@gnome.org>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-04-17 14:02-0300\n"
|
||||
"PO-Revision-Date: 2010-03-02 20:59-0300\n"
|
||||
"Last-Translator: Rodrigo Flores <rlmflores@gnome.org>\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&component=general\n"
|
||||
"POT-Creation-Date: 2010-10-30 17:51+0000\n"
|
||||
"PO-Revision-Date: 2010-09-02 17:36-0300\n"
|
||||
"Last-Translator: Henrique P. Machado <hpmachado@gnome.org>\n"
|
||||
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -26,32 +28,386 @@ msgstr "GNOME Shell"
|
||||
msgid "Window management and application launching"
|
||||
msgstr "Gerenciamento de janelas e lançador de aplicativos"
|
||||
|
||||
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
|
||||
msgid "Clock"
|
||||
msgstr "Relógio"
|
||||
|
||||
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
|
||||
msgid "Customize the panel clock"
|
||||
msgstr "Personalizar o relógio do painel"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
||||
msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
"dialog."
|
||||
msgstr ""
|
||||
"Permite acesso a ferramentas internas de depuração e monitoramento usando o "
|
||||
"diálogo Alt-F2."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
msgid "Custom format of the clock"
|
||||
msgstr "Padrão personalizado do relógio"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
msgstr ""
|
||||
"Habilitar ferramentas internas úteis para desenvolvedores e testadores a "
|
||||
"partir do Alt-F2"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "Extensão de arquivo usada para armazenagem do screencast"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "Taxa de quadros usada para gravar screencasts."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should not be loaded."
|
||||
msgstr ""
|
||||
"As extensões do GNOME Shell tem uma propriedade uuid; esta chave lista as "
|
||||
"extensões que não devem ser carregadas."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr "Histórico do diálogo comandos (Alt-F2)"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||
msgid "Hour format"
|
||||
msgstr "Formato de horas"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
||||
msgid ""
|
||||
"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
|
||||
"clock, in addition to time."
|
||||
msgstr ""
|
||||
"Se verdadeiro e o formato é \"12-horas\" ou \"24-horas\", mostra a data no "
|
||||
"relógio, junto com o horário."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid ""
|
||||
"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
|
||||
"time."
|
||||
msgstr ""
|
||||
"Se verdadeiro e o formato é \"12-horas\" ou \"24-horas\", mostra os segundos "
|
||||
"junto com o horário."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "Se verdadeiro, exibe o número da semana no calendário."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr ""
|
||||
"Lista dos IDs de arquivo de área de trabalho para os aplicativos favoritos"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
msgid "Overview workspace view mode"
|
||||
msgstr "Resumo do modo de visão de áreas de trabalho"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
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 "
|
||||
"the recorded video is recorded. It will normally have a unconnected source "
|
||||
"pad; output from that pad will be written into the output file. However the "
|
||||
"pipeline can also take care of its own output - this might be used to send "
|
||||
"the output to an icecast server via shout2send or similar. When unset or set "
|
||||
"to an empty value, the default pipeline will be used. This is currently "
|
||||
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
||||
msgstr ""
|
||||
"Configura a fila de processamento usada para codificar gravações. Ela segue "
|
||||
"a a sintaxe usada para gst-launch. A fila de processamento deve ter um sink "
|
||||
"pad onde o vídeo gravado é retido. Ele normalmente terá um source pad "
|
||||
"desconectado; saídas deste pad serão gravadas no arquivo de saída. Porém, a "
|
||||
"fila de processamento pode também tomar conta de sua própria saída - isto "
|
||||
"poderia ser usado para enviar a saída para um servidor icecast via "
|
||||
"shout2send oiu similar. Quando não definido ou definido para um valor vazio, "
|
||||
"o fluxo de processamento padrão será usado. Atualmente é 'videorate ! "
|
||||
"theoraenc ! oggmux' e gravação no formato Ogg Theora."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show date in clock"
|
||||
msgstr "Mostrar data no relógio"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Mostrar o número da semana no calendário"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Mostrar horário com segundos"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr ""
|
||||
"Os aplicativos correspondentes a estes identificadores serão exibidos na "
|
||||
"área de favoritos."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
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 ""
|
||||
"O nome de arquivo para screencasts gravados será um nome de arquivo único "
|
||||
"baseado na data atual e usará esta extensão. Ele deve ser alterado ao gravar "
|
||||
"para um contêiner de formato diferente."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr ""
|
||||
"A taxa de quadros do screencast resultante gravado pelo gravador de "
|
||||
"screencastsdo GNOME Shell em quadros por segundo."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "A fila de processamento gstreamer usada para codificar o screencast"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid ""
|
||||
"The selected workspace view mode in the overview. Supported values are "
|
||||
"\"single\" and \"grid\"."
|
||||
msgstr ""
|
||||
"O o modo de visão do espaço de trabalho na visão geral. Valores aceitos são: "
|
||||
"\"single\" e \"grid\"."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
"The shell normally monitors active applications in order to present the most "
|
||||
"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 ""
|
||||
"O shell normalmente monitora os aplicativos em execução para apresentar os "
|
||||
"mais usados (ex: em lançadores). Embora estes dados serão mantidos em em "
|
||||
"segurança, você pode querer desabilitá-los por razões de privacidade. Por "
|
||||
"favor, note que que ao fazer isso não removerá os dado já salvos."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
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 strftime"
|
||||
"() to obtain a specific format. See the strftime() manual for more "
|
||||
"information."
|
||||
msgstr ""
|
||||
"Esta chave especifica o formato usado pelo relógio do painel quando a chave "
|
||||
"de formato é atribuída como \"personalizado\". Você pode usar "
|
||||
"especificadores de conversão entendidos pela função strftime() para obter um "
|
||||
"formato específico. Veja o manual da strftime() para maiores informações."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
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."
|
||||
msgstr ""
|
||||
"Esta chave especifica o formato de horas utilizado pelo relógio do painel. "
|
||||
"Valores possíveis são \"12-hour\", \"24-hour\", \"unix\" e \"custom\". Se "
|
||||
"definida como \"unix\", o relógio irá exibir as horas em segundos desde seu "
|
||||
"lançamento, por exemplo 01/01/1970. Se definida como \"custom\", o relógio "
|
||||
"irá exibir as horas de acordo com o formato especificado na chave "
|
||||
"custom_format. Note que se definida tanto como \"unix\" ou \"custom\", as "
|
||||
"chaves show_date e show_seconds serão igoradas."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr "Uuids das extensões a desabilitar"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Quando coletar dados sobre uso de aplicativos"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
||||
msgid "Clip the crosshairs at the center"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
|
||||
msgid "Color of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
|
||||
msgid ""
|
||||
"Determines the length of the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
|
||||
msgid ""
|
||||
"Determines the position of the magnified mouse image within the magnified "
|
||||
"view and how it reacts to system mouse movement. The values are - none: no "
|
||||
"mouse tracking; - centered: the mouse image is displayed at the center of "
|
||||
"the zoom region (which also represents the point under the system mouse) and "
|
||||
"the magnified contents are scrolled as the system mouse moves; - "
|
||||
"proportional: the position of the magnified mouse in the zoom region is "
|
||||
"proportionally the same as the position of the system mouse on screen; - "
|
||||
"push: when the magnified mouse intersects a boundary of the zoom region, the "
|
||||
"contents are scrolled into view."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
"transparent."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"Determines whether the crosshairs intersect the magnified mouse sprite, or "
|
||||
"are clipped such that the ends of the horizontal and vertical lines surround "
|
||||
"the mouse image."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
|
||||
#, fuzzy
|
||||
#| msgid "Enabled"
|
||||
msgid "Enable lens mode"
|
||||
msgstr "Habilitado"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"Enables/disables display of crosshairs centered on the magnified mouse "
|
||||
"sprite."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
|
||||
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 the "
|
||||
"screen edge moves into the magnified view."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
|
||||
msgid "Length of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
|
||||
msgid "Magnification factor"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
|
||||
msgid "Mouse Tracking Mode"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
|
||||
msgid "Opacity of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
|
||||
msgid "Screen position"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
|
||||
msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
|
||||
msgid "Show or hide crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
|
||||
msgid "Show or hide the magnifier"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
|
||||
msgid "Show or hide the magnifier and all of its zoom regions."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The color of the the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
|
||||
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 ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
"value of 2.0 doubles the size."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
|
||||
msgid "Thickness of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
"Whether the magnified view should be centered over the location of the "
|
||||
"system mouse and move with it."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
|
||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/clock-preferences.ui.h:1
|
||||
msgid "Clock Format"
|
||||
msgstr "Formato do relógio"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:2
|
||||
msgid "Clock Preferences"
|
||||
msgstr "Preferências do Relógio"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:3
|
||||
msgid "Panel Display"
|
||||
msgstr "Mostrador do painel"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:4
|
||||
msgid "Show seco_nds"
|
||||
msgstr "Mostrar segundos"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:5
|
||||
msgid "Show the _date"
|
||||
msgstr "Mostrar a _data"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:6
|
||||
msgid "_12 hour format"
|
||||
msgstr "Formato de _12 horas"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:7
|
||||
msgid "_24 hour format"
|
||||
msgstr "Formato de _24 horas"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:306 ../js/ui/dash.js:850
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "APLICATIVOS"
|
||||
|
||||
#: ../js/ui/appDisplay.js:338
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
msgid "PREFERENCES"
|
||||
msgstr "PREFERÊNCIAS"
|
||||
|
||||
#: ../js/ui/appDisplay.js:697
|
||||
#: ../js/ui/appDisplay.js:647
|
||||
msgid "New Window"
|
||||
msgstr "Nova janela"
|
||||
|
||||
#: ../js/ui/appDisplay.js:701
|
||||
#: ../js/ui/appDisplay.js:651
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Remover dos Favoritos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:702
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Adicionar aos Favoritos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:1029
|
||||
#: ../js/ui/appDisplay.js:829
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Arraste até aqui para adicionar aos favoritos"
|
||||
|
||||
#: ../js/ui/appFavorites.js:89
|
||||
#: ../js/ui/appFavorites.js:88
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s foi adicionado aos seus favoritos."
|
||||
@ -61,177 +417,314 @@ msgstr "%s foi adicionado aos seus favoritos."
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s foi removido dos seus favoritos."
|
||||
|
||||
#: ../js/ui/dash.js:189
|
||||
#: ../js/ui/dash.js:142
|
||||
msgid "Find"
|
||||
msgstr "Localizar"
|
||||
|
||||
#: ../js/ui/dash.js:505
|
||||
#: ../js/ui/dash.js:473
|
||||
msgid "Searching..."
|
||||
msgstr "Pesquisando..."
|
||||
|
||||
#: ../js/ui/dash.js:519
|
||||
#: ../js/ui/dash.js:487
|
||||
msgid "No matching results."
|
||||
msgstr "Nenhum resultado encontrado."
|
||||
|
||||
#. **** Places ****
|
||||
#. Translators: This is in the sense of locations for documents,
|
||||
#. network locations, etc.
|
||||
#: ../js/ui/dash.js:869 ../js/ui/placeDisplay.js:543
|
||||
#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:554
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "LOCAIS & DISPOSITIVOS"
|
||||
|
||||
#. **** Documents ****
|
||||
#: ../js/ui/dash.js:876 ../js/ui/docDisplay.js:489
|
||||
#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "DOCUMENTOS RECENTES"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:362
|
||||
#: ../js/ui/lookingGlass.js:552
|
||||
msgid "No extensions installed"
|
||||
msgstr "Nenhuma extensão instalada"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:399
|
||||
#: ../js/ui/lookingGlass.js:589
|
||||
msgid "Enabled"
|
||||
msgstr "Habilitado"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:401
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
|
||||
msgid "Disabled"
|
||||
msgstr "Desabilitado"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:403
|
||||
#: ../js/ui/lookingGlass.js:593
|
||||
msgid "Error"
|
||||
msgstr "Erro"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:405
|
||||
#: ../js/ui/lookingGlass.js:595
|
||||
msgid "Out of date"
|
||||
msgstr "Expirado"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:430
|
||||
#: ../js/ui/lookingGlass.js:620
|
||||
msgid "View Source"
|
||||
msgstr "Ver fonte"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:436
|
||||
#: ../js/ui/lookingGlass.js:626
|
||||
msgid "Web Page"
|
||||
msgstr "Página Web"
|
||||
|
||||
#: ../js/ui/overview.js:181
|
||||
#: ../js/ui/overview.js:160
|
||||
msgid "Undo"
|
||||
msgstr "Desfazer"
|
||||
|
||||
#. 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:346
|
||||
msgid "Activities"
|
||||
msgstr "Atividades"
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:469
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Sair de %s"
|
||||
|
||||
#. Translators: This is the time format used in 24-hour mode.
|
||||
#: ../js/ui/panel.js:566
|
||||
#: ../js/ui/panel.js:494
|
||||
msgid "Preferences"
|
||||
msgstr "Preferências"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:580
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %b %e, %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:581
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%a %b %e, %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:585
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:586
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format used for AM/PM.
|
||||
#: ../js/ui/panel.js:569
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %l:%M %p"
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:593
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %e de %b, %H:%M:%S"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:108
|
||||
#: ../js/ui/panel.js:594
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a %e de %b, %H:%M"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %H:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:599
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %H:%M"
|
||||
|
||||
#. 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:744
|
||||
msgid "Activities"
|
||||
msgstr "Atividades"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:111
|
||||
#, c-format
|
||||
msgid "Failed to unmount '%s'"
|
||||
msgstr "Erro ao desmontar \"%s\""
|
||||
|
||||
#: ../js/ui/placeDisplay.js:111
|
||||
#: ../js/ui/placeDisplay.js:114
|
||||
msgid "Retry"
|
||||
msgstr "Tentar novamente"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:156
|
||||
#: ../js/ui/placeDisplay.js:159
|
||||
msgid "Connect to..."
|
||||
msgstr "Conectar ao..."
|
||||
|
||||
#: ../js/ui/runDialog.js:231
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:33
|
||||
msgid "toggle-switch-us"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/runDialog.js:233
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Por favor digite um comando:"
|
||||
|
||||
#: ../js/ui/runDialog.js:375
|
||||
#: ../js/ui/runDialog.js:378
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "A execução de \"%s\" falhou:"
|
||||
|
||||
#: ../js/ui/statusMenu.js:105
|
||||
#: ../js/ui/statusMenu.js:101
|
||||
msgid "Available"
|
||||
msgstr "Disponível"
|
||||
|
||||
#: ../js/ui/statusMenu.js:110
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Busy"
|
||||
msgstr "Ocupado"
|
||||
|
||||
#: ../js/ui/statusMenu.js:115
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "Invisível"
|
||||
|
||||
#: ../js/ui/statusMenu.js:124
|
||||
msgid "Account Information..."
|
||||
msgstr "Informação da conta..."
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/statusMenu.js:129
|
||||
msgid "System Preferences..."
|
||||
msgstr "Preferências do sistema..."
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
#| msgid "System Preferences..."
|
||||
msgid "System Settings..."
|
||||
msgstr "Configurações do sistema..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:138
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
msgid "Lock Screen"
|
||||
msgstr "Travar a tela"
|
||||
|
||||
#: ../js/ui/statusMenu.js:143
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Switch User"
|
||||
msgstr "Alternar usuário"
|
||||
|
||||
#: ../js/ui/statusMenu.js:149
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
msgid "Log Out..."
|
||||
msgstr "Encerrar sessão..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
msgid "Shut Down..."
|
||||
msgstr "Desligar..."
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:47
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/accessibility.js:91
|
||||
msgid "Screen Keyboard"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/accessibility.js:94
|
||||
msgid "Visual Alerts"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/accessibility.js:97
|
||||
msgid "Sticky Keys"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/accessibility.js:100
|
||||
msgid "Slow Keys"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/accessibility.js:103
|
||||
msgid "Bounce Keys"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/accessibility.js:106
|
||||
msgid "Mouse Keys"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/accessibility.js:110
|
||||
msgid "Universal Access Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/accessibility.js:163
|
||||
msgid "High Contrast"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
msgid "Large Text"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
msgstr "%s terminou sua inicialização"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:49
|
||||
#: ../js/ui/windowAttentionHandler.js:45
|
||||
#, c-format
|
||||
msgid "'%s' is ready"
|
||||
msgstr "\"%s\" está pronto"
|
||||
|
||||
#: ../src/shell-global.c:967
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Menos de um minuto atrás"
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
msgid ""
|
||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr ""
|
||||
"Não é possível adicionar um novo espaço de trabalho porque foi atingido o "
|
||||
"limite."
|
||||
|
||||
#: ../src/shell-global.c:971
|
||||
#: ../js/ui/workspacesView.js:246
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "Não é possível remover o primeiro espaço de trabalho."
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
msgid "System Sounds"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/shell-global.c:1219
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Há menos de um minuto"
|
||||
|
||||
#: ../src/shell-global.c:1223
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d minuto atrás"
|
||||
msgstr[1] "%d minutos atrás"
|
||||
msgstr[0] "Há %d minuto"
|
||||
msgstr[1] "Há %d minutos"
|
||||
|
||||
#: ../src/shell-global.c:976
|
||||
#: ../src/shell-global.c:1228
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d hora atrás"
|
||||
msgstr[1] "%d horas atrás"
|
||||
msgstr[0] "Há %d hora"
|
||||
msgstr[1] "Há %d horas"
|
||||
|
||||
#: ../src/shell-global.c:981
|
||||
#: ../src/shell-global.c:1233
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d dia atrás"
|
||||
msgstr[1] "%d dias atrás"
|
||||
msgstr[0] "Há %d dia"
|
||||
msgstr[1] "Há %d dias"
|
||||
|
||||
#: ../src/shell-global.c:986
|
||||
#: ../src/shell-global.c:1238
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d semana atrás"
|
||||
msgstr[1] "%d semanas atrás"
|
||||
msgstr[0] "Há %d semana"
|
||||
msgstr[1] "Há %d semanas"
|
||||
|
||||
#: ../src/shell-uri-util.c:89
|
||||
msgid "Home Folder"
|
||||
@ -257,6 +750,15 @@ msgstr "Pesquisar"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "ON"
|
||||
#~ msgstr "⚪"
|
||||
|
||||
#~ msgid "OFF"
|
||||
#~ msgstr "⚫"
|
||||
|
||||
#~ msgid "Account Information..."
|
||||
#~ msgstr "Informação da conta..."
|
||||
|
||||
#~ msgid "Sidebar"
|
||||
#~ msgstr "Barra lateral"
|
||||
|
||||
|
862
po/ro.po
862
po/ro.po
@ -1,20 +1,23 @@
|
||||
# Romanian translation for gnome-shell.
|
||||
# Copyright (C) 2009 gnome-shell's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the gnome-shell package.
|
||||
# Lucian Adrian Grijincu <lucian.grijincu@gmail.com>, 2009.
|
||||
# Lucian Adrian Grijincu <lucian.grijincu@gmail.com>, 2009, 2010.
|
||||
# Daniel Șerbănescu <cyber19rider@gmail.com>, 2010.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2009-10-28 22:25+0200\n"
|
||||
"PO-Revision-Date: 2009-10-28 22:33+0200\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&component=general\n"
|
||||
"POT-Creation-Date: 2010-11-15 13:50+0000\n"
|
||||
"PO-Revision-Date: 2010-11-15 22:34+0300\n"
|
||||
"Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
|
||||
"Language-Team: Romanian <gnomero-list@lists.sourceforge.net>\n"
|
||||
"Language-Team: Romanian Gnome Team <gnomero-list@lists.sourceforge.net>\n"
|
||||
"Language: ro\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
|
||||
"20)) ? 1 : 2);;\n"
|
||||
"X-Generator: Virtaal 0.6.1\n"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||
msgid "GNOME Shell"
|
||||
@ -24,199 +27,737 @@ msgstr "GNOME Shell"
|
||||
msgid "Window management and application launching"
|
||||
msgstr "Administrare de ferestre și lansare de aplicații"
|
||||
|
||||
#: ../js/ui/appDisplay.js:332
|
||||
msgid "Frequent"
|
||||
msgstr "Frecvent"
|
||||
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
|
||||
msgid "Clock"
|
||||
msgstr "Ceas"
|
||||
|
||||
#: ../js/ui/appDisplay.js:867
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Adăugați aici favorite cu mausul"
|
||||
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
|
||||
msgid "Customize the panel clock"
|
||||
msgstr "Personalizați ceasul din panou"
|
||||
|
||||
#: ../js/ui/appIcon.js:426
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
||||
msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
"dialog."
|
||||
msgstr ""
|
||||
"Permite accesul la informațiile interne utilitarelor de depanare și "
|
||||
"monitorizare folosind dialogul Alt-F2."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
msgid "Custom format of the clock"
|
||||
msgstr "Format personalizat pentru ceas"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
msgstr "Activează utilitarele interne pentru dezvoltatori și testeri din Alt-F2"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "Extensia de fișier utilizată pentru stocarea înregistrărilor de ecran"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "Frecvența de cadre utilizată pentru înregistrările de ecran."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should not be loaded."
|
||||
msgstr ""
|
||||
"Extensiile GNOME Shell au o proprietate uuid; această cheie listează "
|
||||
"extensiile care nu ar trebui încărcate."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr "Istoricul dialogului de comenzi (Alt-F2)"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||
msgid "Hour format"
|
||||
msgstr "Format oră"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
||||
msgid ""
|
||||
"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
|
||||
"clock, in addition to time."
|
||||
msgstr ""
|
||||
"Dacă este adevărat, și formatul este fie „12-hour” fie „24-hour”, pe lângă "
|
||||
"oră, în ceas se afișează și data."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid ""
|
||||
"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
|
||||
"time."
|
||||
msgstr ""
|
||||
"Dacă este adevărat, și formatul este fie „12-hour” fie „24-hour”, pe lângă "
|
||||
"oră, în ceas se afișează și secundele."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "Dacă este adevărat, se afișează săptămâna ISO în calendar."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr "Listă de identificatori de fișiere desktop pentru aplicațiile favorite"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
msgid "Overview workspace view mode"
|
||||
msgstr "Modul de vizualizare a spațiilor de lucru în prezentarea generală"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
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 "
|
||||
"the recorded video is recorded. It will normally have a unconnected source "
|
||||
"pad; output from that pad will be written into the output file. However the "
|
||||
"pipeline can also take care of its own output - this might be used to send "
|
||||
"the output to an icecast server via shout2send or similar. When unset or set "
|
||||
"to an empty value, the default pipeline will be used. This is currently "
|
||||
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
||||
msgstr ""
|
||||
"Definește linia de asamblare GStreamer utilizată pentru a codifica "
|
||||
"înregistrările. Folosiți aceeași sintaxă ca la gst-launch. Linia de "
|
||||
"asamblare ar trebui să aibă o intrare neconectată unde va fi înregistrat "
|
||||
"ecranul. În mod normal va avea o intrare neconectată și o ieșire care va fi "
|
||||
"scrisă în fișierul de ieșire. Cu toate acestea, linia de asamblare poate să "
|
||||
"aibă grijă de ieșirea proprie - aceasta ar putea fi utilizată pentru a "
|
||||
"trimite ieșirea la un server icecast, shout2send sau un alt server similar. "
|
||||
"Când este dezactivată, sau are o valoare vidă, se utilizează linia de "
|
||||
"asamblare implicită. Aceasta este acum definită ca „videorate ! theoraenc ! "
|
||||
"oggmux” și înregistrează în formatul Ogg Theora."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show date in clock"
|
||||
msgstr "Afișează data în ceas"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Afișează săptămâna în calendar"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Afișează timpul cu secunde "
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr ""
|
||||
"Aplicațiile corespunzătoare acestor identificatori vor fi afișate în zona "
|
||||
"favoritelor."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
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 ""
|
||||
"Numele de fișier ale înregistrărilor de ecran vor fi unice, bazate pe data "
|
||||
"curentă și vor folosi această extensie. Ar trebui să fie modificată când se "
|
||||
"înregistrează într-un format de container diferit."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr ""
|
||||
"Frecvența de cadre a înregistrărilor de ecran efectuare de Înregistratorul "
|
||||
"de ecran al GNOME Shell, în cadre pe secundă."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr ""
|
||||
"Linia de asamblare gstreamer folosită pentru a codifica înregistrarea de "
|
||||
"ecran"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid ""
|
||||
"The selected workspace view mode in the overview. Supported values are "
|
||||
"\"single\" and \"grid\"."
|
||||
msgstr ""
|
||||
"Modul de vizualizare a spațiilor de lucru în prezentarea generală. Valorile "
|
||||
"suportate sunt „single” și „grid”."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
"The shell normally monitors active applications in order to present the most "
|
||||
"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 ""
|
||||
"În mod normal, shell-ul monitorizează aplicațiile active pentru a le "
|
||||
"prezenta pe cele mai utilizate (de ex. în lansatoare de aplicații). Deși "
|
||||
"aceste date vor fi păstrate în mod privat, s-ar putea să doriți să "
|
||||
"dezactivați această funcționalitate din motive de intimitate. Dezactivarea "
|
||||
"nu va șterge datele deja salvate."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
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 strftime"
|
||||
"() to obtain a specific format. See the strftime() manual for more "
|
||||
"information."
|
||||
msgstr ""
|
||||
"Această cheie specifică formatul utilizat în ceasul de panou când cheia de "
|
||||
"format are valoarea „custom”. Puteți utiliza specificatorii de conversie "
|
||||
"specifici strftime() pentru a obține un anumit format. Consultați manualul "
|
||||
"strftime() pentru mai multe informații."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
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."
|
||||
msgstr ""
|
||||
"Această cheie specifică formatul orei afișate de ceasul din panou. Valorile "
|
||||
"posibile sunt „12-hour”, „24-hour”, „unix” și „custom”. Dacă valoarea este "
|
||||
"„unix”, ceasul va afișa timpul în secunde de la începutul Epocii Unix (1 "
|
||||
"ianuarie 1970). Dacă valoarea este „custom”, ceasul va afișa timpul conform "
|
||||
"formatului din cheia custom_format. Dacă valoarea este fie „unix” fie "
|
||||
"„custom” se ignoră valoarea cheilor show_date și show_seconds."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr "Uuid-urile extensiilor de dezactivat"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Dacă să se colecteze statistici despre utilizarea aplicațiilor"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
||||
msgid "Clip the crosshairs at the center"
|
||||
msgstr "Prinde reticulele în centru"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
|
||||
msgid "Color of the crosshairs"
|
||||
msgstr "Culoarea reticulelor"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
|
||||
msgid ""
|
||||
"Determines the length of the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
"Determină lungimea liniilor verticale și orizontale care alcătuiesc "
|
||||
"reticulele."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
|
||||
msgid ""
|
||||
"Determines the position of the magnified mouse image within the magnified "
|
||||
"view and how it reacts to system mouse movement. The values are - none: no "
|
||||
"mouse tracking; - centered: the mouse image is displayed at the center of "
|
||||
"the zoom region (which also represents the point under the system mouse) and "
|
||||
"the magnified contents are scrolled as the system mouse moves; - "
|
||||
"proportional: the position of the magnified mouse in the zoom region is "
|
||||
"proportionally the same as the position of the system mouse on screen; - "
|
||||
"push: when the magnified mouse intersects a boundary of the zoom region, the "
|
||||
"contents are scrolled into view."
|
||||
msgstr ""
|
||||
"Determină poziția imaginii mărite a mausului în vizualizarea mărită și cum "
|
||||
"reacționează la mișcarea mausului a sistemului. Valorile sunt - none: nu se "
|
||||
"urmărește mausul; - centered: imaginea mausului este afișată în centrul "
|
||||
"regiunii zoom (care reprezintă de asemenea punctul de sub mausul sistemului) "
|
||||
"și proportional: poziția mausului mărit în regiunea zoom este proporțională "
|
||||
"la fel ca poziția mausului sistemului de pe ecran; - push: când mausul "
|
||||
"mărit intersectează o graniță a regiunii zoom, conținutul acesteia este "
|
||||
"derulat în câmpul vizibil."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
"transparent."
|
||||
msgstr ""
|
||||
"Determină transparența reticulelor, de la complet opac la deplin "
|
||||
"transparente."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"Determines whether the crosshairs intersect the magnified mouse sprite, or "
|
||||
"are clipped such that the ends of the horizontal and vertical lines surround "
|
||||
"the mouse image."
|
||||
msgstr ""
|
||||
"Determină dacă reticulele intersectează umbra mausului mărit, sau sunt "
|
||||
"prinse astfel încât capetele liniilor orizontale și verticale înconjoară "
|
||||
"imaginea mausului."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
|
||||
msgid "Enable lens mode"
|
||||
msgstr "Activează modul cu lupă"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"Enables/disables display of crosshairs centered on the magnified mouse "
|
||||
"sprite."
|
||||
msgstr ""
|
||||
"Activează/dezactivează afișarea reticulelor centrate pe umbra mausului "
|
||||
"mărit."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
|
||||
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 the "
|
||||
"screen edge moves into the magnified view."
|
||||
msgstr ""
|
||||
"Pentru urmărirea centrată a mausului, când indicatorul sistemului este pe "
|
||||
"sau lângă marginea ecranului, conținutul mărit continuă să se deruleze "
|
||||
"astfel încât marginile ecranului se mută în modul mărit."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
|
||||
msgid "Length of the crosshairs"
|
||||
msgstr "Lungimea reticulelor"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
|
||||
msgid "Magnification factor"
|
||||
msgstr "Factorul de mărire"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
|
||||
msgid "Mouse Tracking Mode"
|
||||
msgstr "Mod urmărire maus"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
|
||||
msgid "Opacity of the crosshairs"
|
||||
msgstr "Opacitatea reticulelor"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
|
||||
msgid "Screen position"
|
||||
msgstr "Poziția ecranului"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
|
||||
msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
msgstr "Derulează conținutul mărit în afara marginilor ecranului"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
|
||||
msgid "Show or hide crosshairs"
|
||||
msgstr "Arată sau ascunde reticulele"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
|
||||
msgid "Show or hide the magnifier"
|
||||
msgstr "Arată sau ascunde lupa"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
|
||||
msgid "Show or hide the magnifier and all of its zoom regions."
|
||||
msgstr "Arată sau ascunde lupa și toate regiunile ei de zoom."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The color of the the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr "Culoarea liniilor verticale și orizontale ce compun reticul."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
|
||||
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 ""
|
||||
"Vizualizarea mărită fie se aplică întregului ecran, fie ocupă jumătatea de "
|
||||
"sus, jumătatea de jos, jumătatea din stânga, sau jumătatea din dreapta a "
|
||||
"ecranului."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
"value of 2.0 doubles the size."
|
||||
msgstr ""
|
||||
"Factor de mărire. Valoarea 1.0 înseamnă afișare fără mărire sau "
|
||||
"micșorare. Valoarea 2.0 dublează mărimea."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
|
||||
msgid "Thickness of the crosshairs"
|
||||
msgstr "Grosimea reticulelor"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
"Whether the magnified view should be centered over the location of the "
|
||||
"system mouse and move with it."
|
||||
msgstr ""
|
||||
"Dacă vizualizarea mărită ar trebui centrată asupra locației mausului "
|
||||
"sistemului și dacă ar trebui să se miște odată cu el."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
|
||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
msgstr "Lățimea liniilor verticale și orizontale ce compun reticulele."
|
||||
|
||||
#: ../data/clock-preferences.ui.h:1
|
||||
msgid "Clock Format"
|
||||
msgstr "Format ceas"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:2
|
||||
msgid "Clock Preferences"
|
||||
msgstr "Preferințe ceas"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:3
|
||||
msgid "Panel Display"
|
||||
msgstr "Afișaj panou"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:4
|
||||
msgid "Show seco_nds"
|
||||
msgstr "Afișează secu_nde"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:5
|
||||
msgid "Show the _date"
|
||||
msgstr "Afișează _data"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:6
|
||||
msgid "_12 hour format"
|
||||
msgstr "Format cu _12 ore"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:7
|
||||
msgid "_24 hour format"
|
||||
msgstr "Format cu _24 de ore"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "APPLICAȚII"
|
||||
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
msgid "PREFERENCES"
|
||||
msgstr "PREFERINȚE"
|
||||
|
||||
#: ../js/ui/appDisplay.js:647
|
||||
msgid "New Window"
|
||||
msgstr "Fereastră nouă"
|
||||
|
||||
#: ../js/ui/appIcon.js:430
|
||||
#: ../js/ui/appDisplay.js:651
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Șterge din favorite"
|
||||
msgstr "Elimină de la favorite"
|
||||
|
||||
#: ../js/ui/appIcon.js:431
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Adaugă la favorite"
|
||||
|
||||
#: ../js/ui/dash.js:283
|
||||
msgid "Find..."
|
||||
msgstr "Caută..."
|
||||
#: ../js/ui/appDisplay.js:829
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Trageți aici pentru a adăuga favorite"
|
||||
|
||||
#: ../js/ui/dash.js:400
|
||||
msgid "More"
|
||||
msgstr "Mai multe"
|
||||
#: ../js/ui/appFavorites.js:88
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s a fost adăugat la favorite."
|
||||
|
||||
#: ../js/ui/dash.js:543
|
||||
msgid "(see all)"
|
||||
msgstr "(arată tot)"
|
||||
#: ../js/ui/appFavorites.js:107
|
||||
#, c-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s a fost eliminat de la favorite."
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/dash.js:725 ../js/ui/dash.js:787
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "APPLICAȚII"
|
||||
#: ../js/ui/dash.js:142
|
||||
msgid "Find"
|
||||
msgstr "Caută"
|
||||
|
||||
#: ../js/ui/dash.js:473
|
||||
msgid "Searching..."
|
||||
msgstr "Se caută..."
|
||||
|
||||
#: ../js/ui/dash.js:487
|
||||
msgid "No matching results."
|
||||
msgstr "Niciun rezultat care să se potrivească."
|
||||
|
||||
#. **** Places ****
|
||||
#. Translators: This is in the sense of locations for documents,
|
||||
#. network locations, etc.
|
||||
#: ../js/ui/dash.js:745
|
||||
msgid "PLACES"
|
||||
msgstr "LOCAȚII"
|
||||
#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:558
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "LOCAȚII & DISPOZITIVE"
|
||||
|
||||
#. **** Documents ****
|
||||
#: ../js/ui/dash.js:752 ../js/ui/dash.js:797
|
||||
msgid "RECENT DOCUMENTS"
|
||||
msgstr "DOCUMENTE RECENTE"
|
||||
#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "ELEMENTE RECENTE"
|
||||
|
||||
#. **** Search Results ****
|
||||
#: ../js/ui/dash.js:777 ../js/ui/dash.js:961
|
||||
msgid "SEARCH RESULTS"
|
||||
msgstr "REZULTATELE CĂUTĂRII"
|
||||
#: ../js/ui/lookingGlass.js:552
|
||||
msgid "No extensions installed"
|
||||
msgstr "Nicio extensie instalată"
|
||||
|
||||
#: ../js/ui/dash.js:792
|
||||
msgid "PREFERENCES"
|
||||
msgstr "PREFERINȚE"
|
||||
#: ../js/ui/lookingGlass.js:589
|
||||
msgid "Enabled"
|
||||
msgstr "Activat"
|
||||
|
||||
#. 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:274
|
||||
msgid "Activities"
|
||||
msgstr "Activități"
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
|
||||
msgid "Disabled"
|
||||
msgstr "Dezactivat"
|
||||
|
||||
#. Translators: This is a time format.
|
||||
#: ../js/ui/panel.js:491
|
||||
#: ../js/ui/lookingGlass.js:593
|
||||
msgid "Error"
|
||||
msgstr "Eroare"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:595
|
||||
msgid "Out of date"
|
||||
msgstr "Învechit"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:620
|
||||
msgid "View Source"
|
||||
msgstr "Vezi sursa"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:626
|
||||
msgid "Web Page"
|
||||
msgstr "Pagină web"
|
||||
|
||||
#: ../js/ui/overview.js:160
|
||||
msgid "Undo"
|
||||
msgstr "Anulează"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:469
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Închide %s"
|
||||
|
||||
#: ../js/ui/panel.js:494
|
||||
msgid "Preferences"
|
||||
msgstr "Preferințe"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:580
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %e %b, %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:581
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%a %e %b, %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:585
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:586
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:593
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %e %b, %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:594
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a %e %b, %l:%M %p"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:599
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %l:%M %p"
|
||||
|
||||
#: ../js/ui/places.js:178
|
||||
#. 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:744
|
||||
msgid "Activities"
|
||||
msgstr "Activități"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:111
|
||||
#, c-format
|
||||
msgid "Failed to unmount '%s'"
|
||||
msgstr "Nu s-a putut demonta „%s”"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:114
|
||||
msgid "Retry"
|
||||
msgstr "Reîncearcă"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:159
|
||||
msgid "Connect to..."
|
||||
msgstr "Conectare la..."
|
||||
|
||||
#: ../js/ui/runDialog.js:96
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:33
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-us"
|
||||
|
||||
#: ../js/ui/runDialog.js:233
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Introduceți o comandă:"
|
||||
|
||||
#: ../js/ui/runDialog.js:173
|
||||
#: ../js/ui/runDialog.js:378
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Execuția comenzii „%s” a eșuat:"
|
||||
|
||||
#. Translators: This is a time format.
|
||||
#: ../js/ui/widget.js:163
|
||||
msgid "%H:%M"
|
||||
msgstr "%H:%M"
|
||||
#: ../js/ui/statusMenu.js:101
|
||||
msgid "Available"
|
||||
msgstr "Disponibil"
|
||||
|
||||
#: ../js/ui/widget.js:317
|
||||
msgid "Applications"
|
||||
msgstr "Aplicații"
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Busy"
|
||||
msgstr "Ocupat"
|
||||
|
||||
#: ../js/ui/widget.js:339
|
||||
msgid "Recent Documents"
|
||||
msgstr "Documente recente"
|
||||
#: ../js/ui/statusMenu.js:114
|
||||
msgid "My Account..."
|
||||
msgstr "Contul meu..."
|
||||
|
||||
#: ../src/shell-global.c:821
|
||||
#: ../js/ui/statusMenu.js:118
|
||||
msgid "System Settings..."
|
||||
msgstr "Configurări sistem..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
msgid "Lock Screen"
|
||||
msgstr "Blochează ecranul"
|
||||
|
||||
#: ../js/ui/statusMenu.js:129
|
||||
msgid "Switch User"
|
||||
msgstr "Schimbă utilizatorul"
|
||||
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Log Out..."
|
||||
msgstr "Ieși din sesiune..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
msgid "Suspend"
|
||||
msgstr "Suspendă"
|
||||
|
||||
#: ../js/ui/statusMenu.js:145
|
||||
msgid "Shut Down..."
|
||||
msgstr "Oprește..."
|
||||
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "Cititor de ecran"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:91
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Tastatură pe ecran"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:94
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Alerte vizuale"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:97
|
||||
msgid "Sticky Keys"
|
||||
msgstr "Taste lipicioase"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:100
|
||||
msgid "Slow Keys"
|
||||
msgstr "Taste încete"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:103
|
||||
msgid "Bounce Keys"
|
||||
msgstr "Taste fără repetiție"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:106
|
||||
msgid "Mouse Keys"
|
||||
msgstr "Taste maus"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:110
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "Configurări acces universal"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:163
|
||||
msgid "High Contrast"
|
||||
msgstr "Contrast puternic"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:205
|
||||
msgid "Large Text"
|
||||
msgstr "Text mare"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:224
|
||||
msgid "Zoom"
|
||||
msgstr "Zoom"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
msgstr "Pornirea %s s-a finalizat"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:45
|
||||
#, c-format
|
||||
msgid "'%s' is ready"
|
||||
msgstr "„%s” este gata"
|
||||
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
msgid ""
|
||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr ""
|
||||
"Nu se poate adăuga un nou spațiu de lucru pentru că s-a atins limita maximă "
|
||||
"a numărului de spații."
|
||||
|
||||
#: ../js/ui/workspacesView.js:246
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "Nu se poate elimina primul spațiu de lucru."
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
msgstr[0] "o ieșire"
|
||||
msgstr[1] "%u ieșiri"
|
||||
msgstr[2] "%u de ieșiri"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] "o intrare"
|
||||
msgstr[1] "%u intrări"
|
||||
msgstr[2] "%u de intrări"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
msgid "System Sounds"
|
||||
msgstr "Sunetele sistemului"
|
||||
|
||||
#: ../src/shell-global.c:1219
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "În ultimul minut"
|
||||
msgstr "Cu mai puțin de un minut în urmă"
|
||||
|
||||
#: ../src/shell-global.c:824
|
||||
#: ../src/shell-global.c:1223
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "acum un minut"
|
||||
msgstr[1] "acum %d minute"
|
||||
msgstr[2] "acum %d de minute"
|
||||
msgstr[0] "Acum un minut"
|
||||
msgstr[1] "Acum %d minute"
|
||||
msgstr[2] "Acum %d de minute"
|
||||
|
||||
#: ../src/shell-global.c:827
|
||||
#: ../src/shell-global.c:1228
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "acum o oră"
|
||||
msgstr[1] "acum %d ore"
|
||||
msgstr[2] "acum %d de ore"
|
||||
msgstr[0] "Acum o oră"
|
||||
msgstr[1] "Acum %d ore"
|
||||
msgstr[2] "Acum %d de ore"
|
||||
|
||||
#: ../src/shell-global.c:830
|
||||
#: ../src/shell-global.c:1233
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "acum o zi"
|
||||
msgstr[1] "acum %d zile"
|
||||
msgstr[2] "acum %d de zile"
|
||||
msgstr[0] "Acum o zi"
|
||||
msgstr[1] "Acum %d zile"
|
||||
msgstr[2] "Acum %d de zile"
|
||||
|
||||
#: ../src/shell-global.c:833
|
||||
#: ../src/shell-global.c:1238
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "acum o săptămână"
|
||||
msgstr[1] "acum %d săptămâni"
|
||||
msgstr[2] "acum %d de săptămâni"
|
||||
msgstr[0] "Acum o săptămână"
|
||||
msgstr[1] "Acum %d săptămâni"
|
||||
msgstr[2] "Acum %d de săptămâni"
|
||||
|
||||
#: ../src/shell-status-menu.c:156
|
||||
msgid "Unknown"
|
||||
msgstr "Necunoscut"
|
||||
|
||||
#: ../src/shell-status-menu.c:212
|
||||
#, c-format
|
||||
msgid "Can't lock screen: %s"
|
||||
msgstr "Nu s-a putut bloca ecranul: %s"
|
||||
|
||||
#: ../src/shell-status-menu.c:227
|
||||
#, c-format
|
||||
msgid "Can't temporarily set screensaver to blank screen: %s"
|
||||
msgstr "Nu s-a putut folosi temporar un ecran gol pentru economizorul de "
|
||||
"ecran: %s"
|
||||
|
||||
#: ../src/shell-status-menu.c:351
|
||||
#, c-format
|
||||
msgid "Can't logout: %s"
|
||||
msgstr "Nu se poate ieși din sesiune: %s"
|
||||
|
||||
#: ../src/shell-status-menu.c:492
|
||||
msgid "Account Information..."
|
||||
msgstr "Informații despre cont..."
|
||||
|
||||
#: ../src/shell-status-menu.c:502
|
||||
msgid "Sidebar"
|
||||
msgstr "Bară laterală"
|
||||
|
||||
#: ../src/shell-status-menu.c:510
|
||||
msgid "System Preferences..."
|
||||
msgstr "Preferințe de sistem..."
|
||||
|
||||
#: ../src/shell-status-menu.c:525
|
||||
msgid "Lock Screen"
|
||||
msgstr "Blocare ecran"
|
||||
|
||||
#: ../src/shell-status-menu.c:535
|
||||
msgid "Switch User"
|
||||
msgstr "Alt utilizator"
|
||||
|
||||
#. Only show switch user if there are other users
|
||||
#. Log Out
|
||||
#: ../src/shell-status-menu.c:546
|
||||
msgid "Log Out..."
|
||||
msgstr "Ieșire..."
|
||||
|
||||
#. Shut down
|
||||
#: ../src/shell-status-menu.c:557
|
||||
msgid "Shut Down..."
|
||||
msgstr "Oprire..."
|
||||
|
||||
#: ../src/shell-uri-util.c:87
|
||||
#: ../src/shell-uri-util.c:89
|
||||
msgid "Home Folder"
|
||||
msgstr "Dosar personal"
|
||||
|
||||
#. Translators: this is the same string as the one found in
|
||||
#. * nautilus
|
||||
#: ../src/shell-uri-util.c:102
|
||||
#: ../src/shell-uri-util.c:104
|
||||
msgid "File System"
|
||||
msgstr "Sistem de fișiere"
|
||||
|
||||
#: ../src/shell-uri-util.c:248
|
||||
#: ../src/shell-uri-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "Caută"
|
||||
|
||||
@ -225,8 +766,59 @@ msgstr "Caută"
|
||||
#. * example, "Trash: some-directory". It means that the
|
||||
#. * directory called "some-directory" is in the trash.
|
||||
#.
|
||||
#: ../src/shell-uri-util.c:298
|
||||
#: ../src/shell-uri-util.c:300
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "ON"
|
||||
#~ msgstr "Pornit"
|
||||
|
||||
#~ msgid "OFF"
|
||||
#~ msgstr "Oprit"
|
||||
|
||||
#~ msgid "Invisible"
|
||||
#~ msgstr "Invizibil"
|
||||
|
||||
#~ msgid "Account Information..."
|
||||
#~ msgstr "Informații despre cont..."
|
||||
|
||||
#~ msgid "Frequent"
|
||||
#~ msgstr "Frecvent"
|
||||
|
||||
#~ msgid "More"
|
||||
#~ msgstr "Mai multe"
|
||||
|
||||
#~ msgid "(see all)"
|
||||
#~ msgstr "(arată tot)"
|
||||
|
||||
#~ msgid "PLACES"
|
||||
#~ msgstr "LOCAȚII"
|
||||
|
||||
#~ msgid "SEARCH RESULTS"
|
||||
#~ msgstr "REZULTATELE CĂUTĂRII"
|
||||
|
||||
#~ msgid "%H:%M"
|
||||
#~ msgstr "%H:%M"
|
||||
|
||||
#~ msgid "Applications"
|
||||
#~ msgstr "Aplicații"
|
||||
|
||||
#~ msgid "Recent Documents"
|
||||
#~ msgstr "Documente recente"
|
||||
|
||||
#~ msgid "Unknown"
|
||||
#~ msgstr "Necunoscut"
|
||||
|
||||
#~ msgid "Can't lock screen: %s"
|
||||
#~ msgstr "Nu s-a putut bloca ecranul: %s"
|
||||
|
||||
#~ msgid "Can't temporarily set screensaver to blank screen: %s"
|
||||
#~ msgstr ""
|
||||
#~ "Nu s-a putut folosi temporar un ecran gol pentru economizorul de ecran: %s"
|
||||
|
||||
#~ msgid "Can't logout: %s"
|
||||
#~ msgstr "Nu se poate ieși din sesiune: %s"
|
||||
|
||||
#~ msgid "Sidebar"
|
||||
#~ msgstr "Bară laterală"
|
||||
|
236
po/sl.po
236
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&component=general\n"
|
||||
"POT-Creation-Date: 2010-10-04 01:51+0000\n"
|
||||
"PO-Revision-Date: 2010-10-04 12:30+0100\n"
|
||||
"POT-Creation-Date: 2010-10-26 14:37+0000\n"
|
||||
"PO-Revision-Date: 2010-10-26 19:29+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"
|
||||
@ -145,6 +145,102 @@ msgstr "Določila UUID razširitev za onemogočenje"
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Ali naj se beleži statistika uporabe programov"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
||||
msgid "Clip the crosshairs at the center"
|
||||
msgstr "Ali merek prekriva kazalko miške v središču"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
|
||||
msgid "Color of the crosshairs"
|
||||
msgstr "Barva merka"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
|
||||
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."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
|
||||
msgid "Determines the position of the magnified mouse image within the magnified view and how it reacts to system mouse movement. The values are - none: no mouse tracking; - centered: the mouse image is displayed at the center of the zoom region (which also represents the point under the system mouse) and the magnified contents are scrolled as the system mouse moves; - proportional: the position of the magnified mouse in the zoom region is proportionally the same as the position of the system mouse on screen; - push: when the magnified mouse intersects a boundary of the zoom region, the contents are scrolled into view."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
|
||||
msgid "Determines the transparency of the crosshairs, from fully opaque to fully transparent."
|
||||
msgstr "Določi prosojnost merka, od prekrivne to prozorne."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
|
||||
msgid "Determines whether the crosshairs intersect the magnified mouse sprite, or are clipped such that the ends of the horizontal and vertical lines surround the mouse image."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
|
||||
msgid "Enable lens mode"
|
||||
msgstr "Omogočeni način leče"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
|
||||
msgid "Enables/disables display of crosshairs centered on the magnified mouse sprite."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
|
||||
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 the screen edge moves into the magnified view."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
|
||||
msgid "Length of the crosshairs"
|
||||
msgstr "Dolžina merka"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
|
||||
msgid "Magnification factor"
|
||||
msgstr "Faktor približanja"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
|
||||
msgid "Mouse Tracking Mode"
|
||||
msgstr "Način sledenja miške"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
|
||||
msgid "Opacity of the crosshairs"
|
||||
msgstr "Prosojnost merka"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
|
||||
msgid "Screen position"
|
||||
msgstr "Položaj zaslona"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
|
||||
msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
msgstr "Zdrsni približano vsebino preko robov namizja"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
|
||||
msgid "Show or hide crosshairs"
|
||||
msgstr "Pokaži ali skrij merek"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
|
||||
msgid "Show or hide the magnifier"
|
||||
msgstr "Pokaži ali skrij približevalnik"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
|
||||
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."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
|
||||
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."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
|
||||
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 ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
|
||||
msgid "The power of the magnification. A value of 1.0 means no magnification. A value of 2.0 doubles the size."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
|
||||
msgid "Thickness of the crosshairs"
|
||||
msgstr "Debelina merka"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
|
||||
msgid "Whether the magnified view should be centered over the location of the system mouse and move with it."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
|
||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
msgstr "Širina navpične in vodoravne čete, ki določata merek."
|
||||
|
||||
#: ../data/clock-preferences.ui.h:1
|
||||
msgid "Clock Format"
|
||||
msgstr "Zapis ure"
|
||||
@ -268,58 +364,58 @@ msgid "Undo"
|
||||
msgstr "Razveljavi"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:461
|
||||
#: ../js/ui/panel.js:469
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Končaj %s"
|
||||
|
||||
#: ../js/ui/panel.js:486
|
||||
#: ../js/ui/panel.js:494
|
||||
msgid "Preferences"
|
||||
msgstr "Možnosti"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:572
|
||||
#: ../js/ui/panel.js:580
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a. %e. %b., %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:573
|
||||
#: ../js/ui/panel.js:581
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%a, %e. %b., %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:577
|
||||
#: ../js/ui/panel.js:585
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a. %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:578
|
||||
#: ../js/ui/panel.js:586
|
||||
msgid "%a %R"
|
||||
msgstr "%a. %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:585
|
||||
#: ../js/ui/panel.js:593
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a. %e. %b., %H:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:586
|
||||
#: ../js/ui/panel.js:594
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a. %e. %b., %H:%M"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:590
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a, %H:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:591
|
||||
#: ../js/ui/panel.js:599
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a, %H:%M"
|
||||
|
||||
#. 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:736
|
||||
#: ../js/ui/panel.js:744
|
||||
msgid "Activities"
|
||||
msgstr "Dejavnosti"
|
||||
|
||||
@ -354,42 +450,94 @@ msgstr "Vnos ukaza:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Izvedba '%s' je spodletela:"
|
||||
|
||||
#: ../js/ui/statusMenu.js:91
|
||||
#: ../js/ui/statusMenu.js:101
|
||||
msgid "Available"
|
||||
msgstr "Na voljo"
|
||||
|
||||
#: ../js/ui/statusMenu.js:95
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Busy"
|
||||
msgstr "Zaposleno"
|
||||
|
||||
#: ../js/ui/statusMenu.js:99
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "Nevidno"
|
||||
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Account Information..."
|
||||
msgstr "Podrobnosti računa ..."
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr "Račun ..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:110
|
||||
msgid "System Settings..."
|
||||
msgstr "Sistemske nastavitve ..."
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
msgid "System Preferences..."
|
||||
msgstr "Sistemske možnosti ..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:117
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
msgid "Lock Screen"
|
||||
msgstr "Zakleni zaslon"
|
||||
|
||||
#: ../js/ui/statusMenu.js:121
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Switch User"
|
||||
msgstr "Preklopi uporabnika"
|
||||
|
||||
#: ../js/ui/statusMenu.js:126
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
msgid "Log Out..."
|
||||
msgstr "Odjava ..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr "V mirovanje"
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
msgstr "Ponoven zagon ..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
msgid "Shut Down..."
|
||||
msgstr "Izklopi ..."
|
||||
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "Zaslonski bralnik"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:91
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Zaslonska tipkovnica"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:94
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Vidna opozorila"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:97
|
||||
msgid "Sticky Keys"
|
||||
msgstr "Lepljive tipke"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:100
|
||||
msgid "Slow Keys"
|
||||
msgstr "Počasne tipke"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:103
|
||||
msgid "Bounce Keys"
|
||||
msgstr "Odskočne tipke"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:106
|
||||
msgid "Mouse Keys"
|
||||
msgstr "Miškine tipke"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:110
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "Splošne nastavitve dostopa"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:163
|
||||
msgid "High Contrast"
|
||||
msgstr "Visok kontrast"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
msgid "Large Text"
|
||||
msgstr "Veliko besedilo"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "Približanje"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
@ -400,19 +548,19 @@ msgstr "%s je končal začenjanje"
|
||||
msgid "'%s' is ready"
|
||||
msgstr "'%s' storitev je pripravljena"
|
||||
|
||||
#: ../js/ui/workspacesView.js:230
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
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."
|
||||
|
||||
#: ../js/ui/workspacesView.js:247
|
||||
#: ../js/ui/workspacesView.js:246
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "Ni mogoče odstraniti prve delovne površine."
|
||||
|
||||
#: ../src/shell-global.c:1196
|
||||
#: ../src/shell-global.c:1204
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Pred manj kot eno minuto"
|
||||
|
||||
#: ../src/shell-global.c:1200
|
||||
#: ../src/shell-global.c:1208
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
@ -421,7 +569,7 @@ msgstr[1] "Pred %d minuto"
|
||||
msgstr[2] "Pred %d minutama"
|
||||
msgstr[3] "Pred %d minutami"
|
||||
|
||||
#: ../src/shell-global.c:1205
|
||||
#: ../src/shell-global.c:1213
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
@ -430,7 +578,7 @@ msgstr[1] "Pred %d uro"
|
||||
msgstr[2] "Pred %d urama"
|
||||
msgstr[3] "Pred %d urami"
|
||||
|
||||
#: ../src/shell-global.c:1210
|
||||
#: ../src/shell-global.c:1218
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
@ -439,7 +587,7 @@ msgstr[1] "Pred %d dnevom"
|
||||
msgstr[2] "Pred %d dnevoma"
|
||||
msgstr[3] "Pred %d dnevi"
|
||||
|
||||
#: ../src/shell-global.c:1215
|
||||
#: ../src/shell-global.c:1223
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
@ -472,51 +620,41 @@ msgstr "Poišči"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Account Information..."
|
||||
#~ msgstr "Podrobnosti računa ..."
|
||||
#~ msgid "System Settings..."
|
||||
#~ msgstr "Sistemske nastavitve ..."
|
||||
#~ msgid "ON"
|
||||
#~ msgstr "⚪"
|
||||
|
||||
#~ msgid "OFF"
|
||||
#~ msgstr "⚫"
|
||||
|
||||
#~ msgid "Sidebar"
|
||||
#~ msgstr "Stranska vrstica"
|
||||
|
||||
#~ msgid "%H:%M"
|
||||
#~ msgstr "%H:%M"
|
||||
|
||||
#~ msgid "Applications"
|
||||
#~ msgstr "Programi"
|
||||
|
||||
#~ msgid "Recent Documents"
|
||||
#~ msgstr "Nedavni dokumenti"
|
||||
|
||||
#~ msgid "PLACES"
|
||||
#~ msgstr "Mesta"
|
||||
|
||||
#~ msgid "SEARCH RESULTS"
|
||||
#~ msgstr "Rezultati iskanja"
|
||||
|
||||
#~ msgid "Unknown"
|
||||
#~ msgstr "Neznano"
|
||||
|
||||
#~ 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 "More"
|
||||
#~ msgstr "Več"
|
||||
|
||||
#~ msgid "(see all)"
|
||||
#~ msgstr "(poglej vse)"
|
||||
|
||||
#~ msgid "Browse"
|
||||
#~ msgstr "Prebrskaj"
|
||||
|
||||
|
694
po/ug.po
Normal file
694
po/ug.po
Normal file
@ -0,0 +1,694 @@
|
||||
# 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.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&component=general\n"
|
||||
"POT-Creation-Date: 2010-11-11 00:43+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Gheyret Kenji<gheyret@yahoo.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"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||
msgid "GNOME Shell"
|
||||
msgstr "GNOME چاپان"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:2
|
||||
msgid "Window management and application launching"
|
||||
msgstr "كۆزنەك باشقۇرغۇچ ۋە پروگرامما قوزغاتقۇچ"
|
||||
|
||||
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
|
||||
msgid "Clock"
|
||||
msgstr "سائەت"
|
||||
|
||||
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
|
||||
msgid "Customize the panel clock"
|
||||
msgstr "ئىختىيارىچە تاختا سائەت"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
||||
msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
"dialog."
|
||||
msgstr "ئىچكى سازلاش ۋە كۆزىتىش قورالىنى زىيارەت قىلىشتا Alt-F2 ئىشلىتىلىدۇ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
msgid "Custom format of the clock"
|
||||
msgstr "ئىختىيارىي سائەت فورماتى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
msgstr "ئىچكى قورال قوزغىتىلسا ئىجادكارلار ۋە سىنىغۇچىلارنىڭ Alt-F2 ئارقىلىق كىرىشىگە قۇلايلىق"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "ھۆججەت كېڭەيتىلگەن ئاتى ئېكران كەسمىسى (screencasts) ساقلاشقا ئىشلىتىلىدۇ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "كاندۇك نىسبىتى ئېكران كەسمىسى (screencasts) خاتىرىلەشكە ئىشلىتىلىدۇ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should not be loaded."
|
||||
msgstr "GNOME چاپان (Shell)كېڭەيتىلمىسىنىڭ uuid خاسلىقى بار؛ بۇ كۇنۇپكا يۈكلەنمەيدىغان كېڭەيتىلمىلەر تىزىملىكىنى كۆرسىتىدۇ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr "بۇيرۇق (Alt-F2) سۆزلەشكۈنىڭ تارىخى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||
msgid "Hour format"
|
||||
msgstr "سائەت فورماتى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
||||
msgid ""
|
||||
"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
|
||||
"clock, in addition to time."
|
||||
msgstr "ئەگەر راست (true) بولسا سائەتتە ۋاقىت فورماتىنى «12 سائەت» ياكى «24 سائەت» كۆرسەتكەندىن سىرت چېسلانىمۇ كۆرسىتىدۇ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid ""
|
||||
"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
|
||||
"time."
|
||||
msgstr "ئەگەر راست (true) بولسا سائەتتە ۋاقىت فورماتىنى «12 سائەت» ياكى «24 سائەت» كۆرسەتكەندىن سىرت سېكۇنتنىمۇ كۆرسىتىدۇ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "ئەگەر راست(true) بولسا يىلنامىدىكى ISO ھەپتە چېسلانى كۆرسىتىدۇ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr "ئامراق پروگراممىلارنىڭ ئۈستەل ئۈستى ھۆججەت ID تىزىملىكى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
msgid "Overview workspace view mode"
|
||||
msgstr "قىسقىچە بايان خىزمەت رايون كۆرۈنۈش ھالىتى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
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 "
|
||||
"the recorded video is recorded. It will normally have a unconnected source "
|
||||
"pad; output from that pad will be written into the output file. However the "
|
||||
"pipeline can also take care of its own output - this might be used to send "
|
||||
"the output to an icecast server via shout2send or similar. When unset or set "
|
||||
"to an empty value, the default pipeline will be used. This is currently "
|
||||
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show date in clock"
|
||||
msgstr "سائەت ئىچىدە چېسلا كۆرسەت"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "يىلنامىدە ھەپتە كۆرسەت"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid "Show time with seconds"
|
||||
msgstr "ۋاقىت ئىچىدە سېكۇنتنى بىللە كۆرسەت"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr "مۇناسىپ پروگرامما بەلگىسى يىغقۇچ رايونىدا كۆرسىتىلىدۇ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
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 "خاتىرىلەنگەن ئېكراننىڭ ھۆججەت ئاتى نۆۋەتتىكى چېسلا ئاساسىدا بىردىنبىر بولۇپ بۇ كېڭەيتىلگەن ئاتىنى ئىشلىتىدۇ. ئۇ ئۆزگەرسە ئوخشاش بولمىغان قاچا فورماتىدا خاتىرىلەيدۇ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr "GNOME Shell ئېكران خاتىرىلىگۈچ ھەر سېكۇنتتا خاتىرىلەيدىغان ئېكران كەسمىسى كاندۇك نىسبىتى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid ""
|
||||
"The selected workspace view mode in the overview. Supported values are "
|
||||
"\"single\" and \"grid\"."
|
||||
msgstr "تاللانغان قىسقىچە مەزمۇن خىزمەت رايونى كۆرۈنۈشىدە قوللايدىغان قىممەت «يەككە» ۋە «سېتكا»"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
"The shell normally monitors active applications in order to present the most "
|
||||
"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) ئادەتتىكى ئەھۋالدا كۆپ ئىشلىتىلىدىغان ئاكتىپ پروگراممىلار(مەسىلەن، ئىجرا قىلىنىۋاتقان)نى كۆزىتىدۇ. گەرچە بۇ سانلىق مەلۇماتلار مەخپىي ساقلانسىمۇ، شەخسىي سىر سەۋەبىدىن بۇنى چەكلىشىڭىز مۇمكىن. دىققەت بۇنداق قىلغاندا ئاللىبۇرۇن ساقلانغان سانلىق مەلۇماتلار چىقىرىۋېتىلمەيدۇ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
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 strftime"
|
||||
"() to obtain a specific format. See the strftime() manual for more "
|
||||
"information."
|
||||
msgstr "format (فورمات) كۇنۇپكىسى \"custom\" (ئىختىيارى) قىلىپ تەڭشەلسە بۇ كۇنۇپكا تاختا سائەت ئىشلىتىدىغان فورماتنى بەلگىلەيدۇ. سىز strftime()نىڭ فورمات بەلگىسىنى ئىشلىتىپ بەلگىلەنگەن فورماتقا ئېرىشەلەيسىز. تەپسىلاتىنى strftime() نىڭ قوللانمىسىدىن كۆرۈڭ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
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."
|
||||
msgstr "بۇ كۇنۇپكا تاختا سائەت ئىشلەتكەن سائەت فورماتىنى بەلگىلىگەن. ئىشلەتكىلى بولىدىغان قىممىتى \"12-hour\" يەنى (12 سائەت)، \"24-hour\" يەنى (24 سائەت)، \"unix\" ۋە \"custom\" (ئىختىيارى). ئەگەر \"unix\" قىلىپ تەڭشەلسە سائەت ئۆزلۈكىدىن يېڭى ئېرا (يەنى، 1970-01-01) دىن ئۆتكەن سېكۇنتنى ئاساس قىلىدۇ. ئەگەر \"custom\" قىلىپ تەڭشەلسە سائەت custom_format كۇنۇپكا قىممىتىگە ئاساسەن ۋاقىتنى كۆرسىتىدۇ. ئەگەر \"unix\" ياكى \"custom\" قىلىپ تەڭشەلسە show_date ۋە show_seconds قىممىتىگە پەرۋا قىلمايدۇ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr "كېڭەيتىلمىنىڭ Uuid چەكلەندى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "پروگراممىنىڭ ئىشلىتىلىشى ھەققىدىكى ستاتىستىكىنى توپلامدۇ يوق"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
||||
msgid "Clip the crosshairs at the center"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
|
||||
msgid "Color of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
|
||||
msgid ""
|
||||
"Determines the length of the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
|
||||
msgid ""
|
||||
"Determines the position of the magnified mouse image within the magnified "
|
||||
"view and how it reacts to system mouse movement. The values are - none: no "
|
||||
"mouse tracking; - centered: the mouse image is displayed at the center of "
|
||||
"the zoom region (which also represents the point under the system mouse) and "
|
||||
"the magnified contents are scrolled as the system mouse moves; - "
|
||||
"proportional: the position of the magnified mouse in the zoom region is "
|
||||
"proportionally the same as the position of the system mouse on screen; - "
|
||||
"push: when the magnified mouse intersects a boundary of the zoom region, the "
|
||||
"contents are scrolled into view."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
"transparent."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"Determines whether the crosshairs intersect the magnified mouse sprite, or "
|
||||
"are clipped such that the ends of the horizontal and vertical lines surround "
|
||||
"the mouse image."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
|
||||
msgid "Enable lens mode"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"Enables/disables display of crosshairs centered on the magnified mouse "
|
||||
"sprite."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
|
||||
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 the "
|
||||
"screen edge moves into the magnified view."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
|
||||
msgid "Length of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
|
||||
msgid "Magnification factor"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
|
||||
msgid "Mouse Tracking Mode"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
|
||||
msgid "Opacity of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
|
||||
msgid "Screen position"
|
||||
msgstr "ئېكران ئورنى"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
|
||||
msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
msgstr "دومىلىما چوڭايتقۇچ ئۈستەل ئۈستى گىرۋەك مەزمۇنىدىن ھالقىپ كەتتى"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
|
||||
msgid "Show or hide crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
|
||||
msgid "Show or hide the magnifier"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
|
||||
msgid "Show or hide the magnifier and all of its zoom regions."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The color of the the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
|
||||
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 ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
"value of 2.0 doubles the size."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
|
||||
msgid "Thickness of the crosshairs"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
"Whether the magnified view should be centered over the location of the "
|
||||
"system mouse and move with it."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
|
||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/clock-preferences.ui.h:1
|
||||
msgid "Clock Format"
|
||||
msgstr "سائەت فورماتى"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:2
|
||||
msgid "Clock Preferences"
|
||||
msgstr "سائەت مايىللىقى"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:3
|
||||
msgid "Panel Display"
|
||||
msgstr "تاختا كۆرسەت"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:4
|
||||
msgid "Show seco_nds"
|
||||
msgstr "سېكۇنت كۆرسەت(_N)"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:5
|
||||
msgid "Show the _date"
|
||||
msgstr "چېسلانى كۆرسەت(_D)"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:6
|
||||
msgid "_12 hour format"
|
||||
msgstr "_12 سائەت فورماتى"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:7
|
||||
msgid "_24 hour format"
|
||||
msgstr "_24 سائەت فورماتى"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "پروگراممىلار"
|
||||
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
msgid "PREFERENCES"
|
||||
msgstr "مايىللىق"
|
||||
|
||||
#: ../js/ui/appDisplay.js:647
|
||||
msgid "New Window"
|
||||
msgstr "يېڭى كۆزنەك"
|
||||
|
||||
#: ../js/ui/appDisplay.js:651
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "يىغقۇچتىن چىقىرىۋەت"
|
||||
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
msgid "Add to Favorites"
|
||||
msgstr "يىغقۇچقا قوش"
|
||||
|
||||
#: ../js/ui/appDisplay.js:829
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "بۇ جايغا سۆرەپ قىسقۇچقا قوش"
|
||||
|
||||
#: ../js/ui/appFavorites.js:88
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s يىغقۇچىڭىزغا قوشۇلىدۇ."
|
||||
|
||||
#: ../js/ui/appFavorites.js:107
|
||||
#, c-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s يىغقۇچىڭىزدىن چىقىرىۋېتىلىدۇ."
|
||||
|
||||
#: ../js/ui/dash.js:142
|
||||
msgid "Find"
|
||||
msgstr "ئىزدە"
|
||||
|
||||
#: ../js/ui/dash.js:473
|
||||
msgid "Searching..."
|
||||
msgstr "ئىزدەۋاتىدۇ…"
|
||||
|
||||
#: ../js/ui/dash.js:487
|
||||
msgid "No matching results."
|
||||
msgstr "ماس كېلىدىغان نەتىجە يوق."
|
||||
|
||||
#. **** Places ****
|
||||
#. Translators: This is in the sense of locations for documents,
|
||||
#. network locations, etc.
|
||||
#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:554
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "ئورۇن ۋە ئۈسكۈنىلەر"
|
||||
|
||||
#. **** Documents ****
|
||||
#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "يېقىنقى تۈرلەر"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:552
|
||||
msgid "No extensions installed"
|
||||
msgstr "ھېچقانداق كېڭەيتىلمە ئورنىتىلمىغان"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:589
|
||||
msgid "Enabled"
|
||||
msgstr "قوزغىتىلغان"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
|
||||
msgid "Disabled"
|
||||
msgstr "چەكلەنگەن"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:593
|
||||
msgid "Error"
|
||||
msgstr "خاتالىق"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:595
|
||||
msgid "Out of date"
|
||||
msgstr "ۋاقتى ئۆتۈپ كەتكەن"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:620
|
||||
msgid "View Source"
|
||||
msgstr "مەنبەنى كۆرسەت"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:626
|
||||
msgid "Web Page"
|
||||
msgstr "تور بەت"
|
||||
|
||||
#: ../js/ui/overview.js:160
|
||||
msgid "Undo"
|
||||
msgstr "يېنىۋال"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:469
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "%s چېكىن"
|
||||
|
||||
#: ../js/ui/panel.js:494
|
||||
msgid "Preferences"
|
||||
msgstr "مايىللىق"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:580
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %b %e، %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:581
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%a %b %e، %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:585
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:586
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:593
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %b %e, %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:594
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%a %b %e, %l:%M %p"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:599
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%p%l:%M (%a)"
|
||||
|
||||
#. 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:744
|
||||
msgid "Activities"
|
||||
msgstr "ھەرىكەتچان"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:111
|
||||
#, c-format
|
||||
msgid "Failed to unmount '%s'"
|
||||
msgstr "%s نىڭ ئېگەرنى يېشىش مەغلۇپ بولدى."
|
||||
|
||||
#: ../js/ui/placeDisplay.js:114
|
||||
msgid "Retry"
|
||||
msgstr "قايتا سىنا"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:159
|
||||
msgid "Connect to..."
|
||||
msgstr "باغلانماق..."
|
||||
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:33
|
||||
msgid "toggle-switch-us"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/runDialog.js:233
|
||||
msgid "Please enter a command:"
|
||||
msgstr "بۇيرۇق كىرگۈزۈڭ:"
|
||||
|
||||
#: ../js/ui/runDialog.js:378
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "'%s' ئىجرا قىلالمىدى:"
|
||||
|
||||
#: ../js/ui/statusMenu.js:101
|
||||
msgid "Available"
|
||||
msgstr "ئىشلىتىلىشچان"
|
||||
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Busy"
|
||||
msgstr "ئالدىراش"
|
||||
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "يوشۇرۇن"
|
||||
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
msgid "System Settings..."
|
||||
msgstr "سىستېما تەڭشەكلىرى"
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
msgid "Lock Screen"
|
||||
msgstr "ئېكراننى قۇلۇپلا"
|
||||
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Switch User"
|
||||
msgstr "ئىشلەتكۈچى ئالماشتۇر"
|
||||
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
msgid "Log Out..."
|
||||
msgstr "تىزىمدىن چىق…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr "ۋاقىتلىق توختىتىش"
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
msgid "Shut Down..."
|
||||
msgstr "تاقا…"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "ئېكران ئوقۇغۇچ"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:91
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "ئېكران ھەرپتاختىسى"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:94
|
||||
msgid "Visual Alerts"
|
||||
msgstr "كۆرۈنمە ئاگاھلاندۇرۇش"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:97
|
||||
msgid "Sticky Keys"
|
||||
msgstr "چاپلاش كۇنۇپكىسى"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:100
|
||||
msgid "Slow Keys"
|
||||
msgstr "ئاستا كۇنۇپكا"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:103
|
||||
msgid "Bounce Keys"
|
||||
msgstr "قاڭقىش كۇنۇپكىسى"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:106
|
||||
msgid "Mouse Keys"
|
||||
msgstr "چاشقىنەك كۇنۇپكا"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:110
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "ھەممىباب زىيارەت تەڭشىكى"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:163
|
||||
msgid "High Contrast"
|
||||
msgstr "يۇقىرى ئاق-قارىلىقى"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
msgid "Large Text"
|
||||
msgstr "چوڭ تېكىست"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "كېڭەيت تارايت"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
msgstr "%s باشلاشنى تاماملىدى"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:45
|
||||
#, c-format
|
||||
msgid "'%s' is ready"
|
||||
msgstr "'%s' تەييار بولدى"
|
||||
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
msgid ""
|
||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr "يېڭى خىزمەت رايونى قوشالمايدۇ چۈنكى ئەڭ كۆپ خىزمەت رايون چېكىگە يەتتى."
|
||||
|
||||
#: ../js/ui/workspacesView.js:246
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "بىرىنچى خىزمەت رايونىنى چىقىرىۋېتەلمەيدۇ."
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
msgstr[0] "%u چىقار"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] "%u كىرگۈز"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
msgid "System Sounds"
|
||||
msgstr "سىستېما ئاۋازى"
|
||||
|
||||
#: ../src/shell-global.c:1219
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "بىر مىنۇتتىنمۇ ئىلگىرى"
|
||||
|
||||
#: ../src/shell-global.c:1223
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d مىنۇت ئىلگىرى"
|
||||
|
||||
#: ../src/shell-global.c:1228
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d سائەت ئىلگىرى"
|
||||
|
||||
#: ../src/shell-global.c:1233
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d كۈن ئىلگىرى"
|
||||
|
||||
#: ../src/shell-global.c:1238
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d ھەپتە ئىلگىرى"
|
||||
|
||||
#: ../src/shell-uri-util.c:89
|
||||
msgid "Home Folder"
|
||||
msgstr "باش مۇندەرىجە"
|
||||
|
||||
#. Translators: this is the same string as the one found in
|
||||
#. * nautilus
|
||||
#: ../src/shell-uri-util.c:104
|
||||
msgid "File System"
|
||||
msgstr "ھۆججەت سىستېمىسى"
|
||||
|
||||
#: ../src/shell-uri-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "ئىزدە"
|
||||
|
||||
#. Translators: the first string is the name of a gvfs
|
||||
#. * method, and the second string is a path. For
|
||||
#. * example, "Trash: some-directory". It means that the
|
||||
#. * directory called "some-directory" is in the trash.
|
||||
#.
|
||||
#: ../src/shell-uri-util.c:300
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
356
po/zh_CN.po
356
po/zh_CN.po
@ -1,23 +1,24 @@
|
||||
# Chinese (China) translation for gnome-shell.
|
||||
# Copyright (C) 2009 gnome-shell's COPYRIGHT HOLDER
|
||||
# Copyright (C) 2009 Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the gnome-shell package.
|
||||
# Ray Wang <raywang@gnome.org>, 2009.
|
||||
# jiero <lililjlj@gmail.com>, 2010.
|
||||
# YunQiang Su <wzssyqa@gmail.com>, 2010.
|
||||
# Aron Xu <aronxu@gnome.org>, 2010.
|
||||
# Jessica Ban <bancage@gmail.com>, 2010.
|
||||
# YunQiang Su <wzssyqa@gmail.com>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&component=general\n"
|
||||
"POT-Creation-Date: 2010-07-22 17:09+0000\n"
|
||||
"PO-Revision-Date: 2010-07-23 19:29+0800\n"
|
||||
"Last-Translator: Jessica Ban <bancage@gmail.com>\n"
|
||||
"POT-Creation-Date: 2010-10-30 17:51+0000\n"
|
||||
"PO-Revision-Date: 2010-10-28 01:24+0800\n"
|
||||
"Last-Translator: YunQiang Su <wzssyqa@gmail.com>\n"
|
||||
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||
@ -204,6 +205,139 @@ msgstr "要禁用的扩展的 uuid"
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "是否收集应用程序的使用情况"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
||||
msgid "Clip the crosshairs at the center"
|
||||
msgstr "将十字夹在中间"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
|
||||
msgid "Color of the crosshairs"
|
||||
msgstr "十字的颜色"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
|
||||
msgid ""
|
||||
"Determines the length of the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr "确定组成十字的水平线和竖直线的长度。"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
|
||||
msgid ""
|
||||
"Determines the position of the magnified mouse image within the magnified "
|
||||
"view and how it reacts to system mouse movement. The values are - none: no "
|
||||
"mouse tracking; - centered: the mouse image is displayed at the center of "
|
||||
"the zoom region (which also represents the point under the system mouse) and "
|
||||
"the magnified contents are scrolled as the system mouse moves; - "
|
||||
"proportional: the position of the magnified mouse in the zoom region is "
|
||||
"proportionally the same as the position of the system mouse on screen; - "
|
||||
"push: when the magnified mouse intersects a boundary of the zoom region, the "
|
||||
"contents are scrolled into view."
|
||||
msgstr ""
|
||||
"确定放大了的鼠标图像在放大了的视图中的的位置,以及如何对系统鼠标的移动做出反"
|
||||
"馈。可用的值有 - none:鼠标不跟踪;- centered:鼠标图像显示在放大区域的中心"
|
||||
"(这也表示系统鼠标下的点),而且放大的内容也随着系统鼠标的移动而滚动;- "
|
||||
"proportional:放大区域中,放大的鼠标的位置和系统鼠标在屏幕上的位置成比例相同"
|
||||
"(数学上的“相似”);- push:当放大的鼠标与放大区域的边界相交时,将内容滚动进视"
|
||||
"图。"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
"transparent."
|
||||
msgstr "确定十字线的透明度,从全遮蔽到全透明。"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
"Determines whether the crosshairs intersect the magnified mouse sprite, or "
|
||||
"are clipped such that the ends of the horizontal and vertical lines surround "
|
||||
"the mouse image."
|
||||
msgstr "确定十字是和放大的光标精灵交叉,还是固定来让水平和竖直线环绕鼠标形象。"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
|
||||
msgid "Enable lens mode"
|
||||
msgstr "启用透镜模式"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
"Enables/disables display of crosshairs centered on the magnified mouse "
|
||||
"sprite."
|
||||
msgstr "启用或禁用穿过放大的鼠标精灵的十字。"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
|
||||
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 the "
|
||||
"screen edge moves into the magnified view."
|
||||
msgstr ""
|
||||
"对于居中的鼠标跟踪,当系统指针位于或者接近屏幕的边缘时,放大的内容继续滚动,"
|
||||
"以便让屏幕边缘移动到放大的视图。"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
|
||||
msgid "Length of the crosshairs"
|
||||
msgstr "十字长度"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
|
||||
msgid "Magnification factor"
|
||||
msgstr "放大因子"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
|
||||
msgid "Mouse Tracking Mode"
|
||||
msgstr "鼠标跟随模式"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
|
||||
msgid "Opacity of the crosshairs"
|
||||
msgstr "十字的不透明度"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
|
||||
msgid "Screen position"
|
||||
msgstr "屏幕位置"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
|
||||
msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
msgstr "在桌面边界以外滚动放大内容"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
|
||||
msgid "Show or hide crosshairs"
|
||||
msgstr "显示或隐藏十字线"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
|
||||
msgid "Show or hide the magnifier"
|
||||
msgstr "显示或隐藏放大镜"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
|
||||
msgid "Show or hide the magnifier and all of its zoom regions."
|
||||
msgstr "显示或隐藏放大镜及其全部放大区域。"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The color of the the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr "组成十字的水平线和竖直线的颜色。"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
|
||||
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 "放大的视图是充满整个屏幕还是占据屏幕的顶半部、底半部、左半部或右半部。"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
|
||||
msgid ""
|
||||
"The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
"value of 2.0 doubles the size."
|
||||
msgstr "边长的放大倍数。1.0 表示不放大,2.0 表示将长度增倍。"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
|
||||
msgid "Thickness of the crosshairs"
|
||||
msgstr "十字的厚度"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
"Whether the magnified view should be centered over the location of the "
|
||||
"system mouse and move with it."
|
||||
msgstr "放大的视图是否以系统鼠标为中心放置并且随之移动。"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
|
||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
msgstr "组成十字的水平和竖直线的宽度。"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:1
|
||||
msgid "Clock Format"
|
||||
msgstr "时钟格式"
|
||||
@ -233,27 +367,27 @@ msgid "_24 hour format"
|
||||
msgstr "_24 小时格式"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:384 ../js/ui/dash.js:773
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "应用程序"
|
||||
|
||||
#: ../js/ui/appDisplay.js:416
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
msgid "PREFERENCES"
|
||||
msgstr "首选项"
|
||||
|
||||
#: ../js/ui/appDisplay.js:721
|
||||
#: ../js/ui/appDisplay.js:647
|
||||
msgid "New Window"
|
||||
msgstr "新窗口"
|
||||
|
||||
#: ../js/ui/appDisplay.js:725
|
||||
#: ../js/ui/appDisplay.js:651
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "从收藏夹中移除"
|
||||
|
||||
#: ../js/ui/appDisplay.js:726
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
msgid "Add to Favorites"
|
||||
msgstr "添加到收藏夹"
|
||||
|
||||
#: ../js/ui/appDisplay.js:1033
|
||||
#: ../js/ui/appDisplay.js:829
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "拖到这里加入收藏夹"
|
||||
|
||||
@ -271,138 +405,137 @@ msgstr "%s 已经从您的收藏夹移除。"
|
||||
msgid "Find"
|
||||
msgstr "查找"
|
||||
|
||||
#: ../js/ui/dash.js:471
|
||||
#: ../js/ui/dash.js:473
|
||||
msgid "Searching..."
|
||||
msgstr "正在搜索..."
|
||||
|
||||
#: ../js/ui/dash.js:485
|
||||
#: ../js/ui/dash.js:487
|
||||
msgid "No matching results."
|
||||
msgstr "无匹配结果。"
|
||||
|
||||
#. **** Places ****
|
||||
#. Translators: This is in the sense of locations for documents,
|
||||
#. network locations, etc.
|
||||
#: ../js/ui/dash.js:792 ../js/ui/placeDisplay.js:550
|
||||
#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:554
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "位置和设备"
|
||||
|
||||
#. **** Documents ****
|
||||
#: ../js/ui/dash.js:799 ../js/ui/docDisplay.js:494
|
||||
#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "最近的项目"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:471
|
||||
#: ../js/ui/lookingGlass.js:552
|
||||
msgid "No extensions installed"
|
||||
msgstr "未安装扩展"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:508
|
||||
#: ../js/ui/lookingGlass.js:589
|
||||
msgid "Enabled"
|
||||
msgstr "启用"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:510
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
|
||||
msgid "Disabled"
|
||||
msgstr "禁用"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:512
|
||||
#: ../js/ui/lookingGlass.js:593
|
||||
msgid "Error"
|
||||
msgstr "错误"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:514
|
||||
#: ../js/ui/lookingGlass.js:595
|
||||
msgid "Out of date"
|
||||
msgstr "过时"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:539
|
||||
#: ../js/ui/lookingGlass.js:620
|
||||
msgid "View Source"
|
||||
msgstr "查看源"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:545
|
||||
#: ../js/ui/lookingGlass.js:626
|
||||
msgid "Web Page"
|
||||
msgstr "网页"
|
||||
|
||||
#: ../js/ui/overview.js:159
|
||||
#: ../js/ui/overview.js:160
|
||||
msgid "Undo"
|
||||
msgstr "撤销"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:473
|
||||
#: ../js/ui/panel.js:469
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "退出 %s"
|
||||
|
||||
#: ../js/ui/panel.js:498
|
||||
#: ../js/ui/panel.js:494
|
||||
msgid "Preferences"
|
||||
msgstr "首选项"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:584
|
||||
#: ../js/ui/panel.js:580
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%A %b %e, %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:585
|
||||
#: ../js/ui/panel.js:581
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%A %m月%d日 %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:589
|
||||
#: ../js/ui/panel.js:585
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%A %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:590
|
||||
#: ../js/ui/panel.js:586
|
||||
msgid "%a %R"
|
||||
msgstr "%A %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:597
|
||||
#: ../js/ui/panel.js:593
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%A %m月%d日 %p%I:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:598
|
||||
#: ../js/ui/panel.js:594
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%A %m月%d日 %p%I:%M"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:602
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%A %p%I:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:603
|
||||
#: ../js/ui/panel.js:599
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr "%a %l:%M %p"
|
||||
|
||||
#. 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:741
|
||||
#: ../js/ui/panel.js:744
|
||||
msgid "Activities"
|
||||
msgstr "活动"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:107
|
||||
#: ../js/ui/placeDisplay.js:111
|
||||
#, c-format
|
||||
msgid "Failed to unmount '%s'"
|
||||
msgstr "卸载 %s 失败"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:110
|
||||
#: ../js/ui/placeDisplay.js:114
|
||||
msgid "Retry"
|
||||
msgstr "重试"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:155
|
||||
#: ../js/ui/placeDisplay.js:159
|
||||
msgid "Connect to..."
|
||||
msgstr "连接到..."
|
||||
|
||||
#. Translators: the "ON" and "OFF" strings are used in the
|
||||
#. toggle switches in the status area menus, and must be SHORT.
|
||||
#. If you don't have suitable short words, consider initials,
|
||||
#. "0"/"1", "⚪"/"⚫", etc.
|
||||
#: ../js/ui/popupMenu.js:30 ../js/ui/popupMenu.js:40
|
||||
msgid "ON"
|
||||
msgstr "开"
|
||||
|
||||
#: ../js/ui/popupMenu.js:31 ../js/ui/popupMenu.js:45
|
||||
msgid "OFF"
|
||||
msgstr "关"
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:33
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
#: ../js/ui/runDialog.js:233
|
||||
msgid "Please enter a command:"
|
||||
@ -413,84 +546,158 @@ msgstr "请输入一个命令:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "运行“%s”失败:"
|
||||
|
||||
#: ../js/ui/statusMenu.js:91
|
||||
#: ../js/ui/statusMenu.js:101
|
||||
msgid "Available"
|
||||
msgstr "可用"
|
||||
|
||||
#: ../js/ui/statusMenu.js:95
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Busy"
|
||||
msgstr "忙碌"
|
||||
|
||||
#: ../js/ui/statusMenu.js:99
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "隐身"
|
||||
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Account Information..."
|
||||
msgstr "帐户信息..."
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr "我的帐户..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:110
|
||||
msgid "System Preferences..."
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
#, fuzzy
|
||||
#| msgid "System Preferences..."
|
||||
msgid "System Settings..."
|
||||
msgstr "系统首选项..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:117
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
msgid "Lock Screen"
|
||||
msgstr "锁住屏幕"
|
||||
|
||||
#: ../js/ui/statusMenu.js:121
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Switch User"
|
||||
msgstr "切换用户"
|
||||
|
||||
#: ../js/ui/statusMenu.js:126
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
msgid "Log Out..."
|
||||
msgstr "退出..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr "休眠"
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
msgstr "重启..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
msgid "Shut Down..."
|
||||
msgstr "关机..."
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:45
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "屏幕阅读器"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:91
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "屏幕键盘"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:94
|
||||
msgid "Visual Alerts"
|
||||
msgstr "视觉响铃"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:97
|
||||
msgid "Sticky Keys"
|
||||
msgstr "粘滞键"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:100
|
||||
msgid "Slow Keys"
|
||||
msgstr "慢速键"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:103
|
||||
msgid "Bounce Keys"
|
||||
msgstr "筛选键"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:106
|
||||
msgid "Mouse Keys"
|
||||
msgstr "鼠标按键"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:110
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "通用访问设置"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:163
|
||||
msgid "High Contrast"
|
||||
msgstr "高对比度"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
msgid "Large Text"
|
||||
msgstr "大号文本"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "缩放"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
msgstr "%s 已启动"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:47
|
||||
#: ../js/ui/windowAttentionHandler.js:45
|
||||
#, c-format
|
||||
msgid "'%s' is ready"
|
||||
msgstr "%s 已就绪"
|
||||
|
||||
#: ../js/ui/workspacesView.js:230
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
msgid ""
|
||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr "无法添加新工作区,因为已经达到了工作区数量限制。"
|
||||
|
||||
#: ../js/ui/workspacesView.js:247
|
||||
#: ../js/ui/workspacesView.js:246
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "不能移除第一个工作区。"
|
||||
|
||||
#: ../src/shell-global.c:1105
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1094
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
msgstr[0] ""
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1104
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] ""
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
msgid "System Sounds"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/shell-global.c:1219
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "少于一分钟前"
|
||||
|
||||
#: ../src/shell-global.c:1109
|
||||
#: ../src/shell-global.c:1223
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d 分钟前"
|
||||
|
||||
#: ../src/shell-global.c:1114
|
||||
#: ../src/shell-global.c:1228
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d 小时前"
|
||||
|
||||
#: ../src/shell-global.c:1119
|
||||
#: ../src/shell-global.c:1233
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d 天前"
|
||||
|
||||
#: ../src/shell-global.c:1124
|
||||
#: ../src/shell-global.c:1238
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
@ -520,6 +727,15 @@ msgstr "搜索"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "ON"
|
||||
#~ msgstr "开"
|
||||
|
||||
#~ msgid "OFF"
|
||||
#~ msgstr "关"
|
||||
|
||||
#~ msgid "Account Information..."
|
||||
#~ msgstr "帐户信息..."
|
||||
|
||||
#~ msgid "%H:%M"
|
||||
#~ msgstr "%H:%M"
|
||||
|
||||
|
@ -1,24 +1,25 @@
|
||||
gdmuser_cflags = \
|
||||
gdmuser_cflags = \
|
||||
-I$(top_srcdir)/src \
|
||||
-DPREFIX=\""$(prefix)"\" \
|
||||
-DLIBDIR=\""$(libdir)"\" \
|
||||
-DDATADIR=\""$(datadir)"\" \
|
||||
-DG_DISABLE_DEPRECATED \
|
||||
-DG_LOG_DOMAIN=\"GdmUser\" \
|
||||
-DG_LOG_DOMAIN=\"GdmUser\" \
|
||||
-DGDM_CACHE_DIR=\""$(localstatedir)/cache/gdm"\" \
|
||||
$(GDMUSER_CFLAGS) \
|
||||
$(NULL)
|
||||
|
||||
# please, keep this sorted alphabetically
|
||||
gdmuser_source_h = \
|
||||
gdmuser/gdm-user.h \
|
||||
gdmuser_source_h = \
|
||||
gdmuser/gdm-user.h \
|
||||
gdmuser/gdm-user-private.h \
|
||||
gdmuser/gdm-user-manager.h \
|
||||
$(NULL)
|
||||
|
||||
# please, keep this sorted alphabetically
|
||||
gdmuser_source_c = \
|
||||
gdmuser/gdm-user.c \
|
||||
gdmuser/gdm-user-manager.c \
|
||||
gdmuser_source_c = \
|
||||
gdmuser/gdm-user.c \
|
||||
gdmuser/gdm-user-manager.c \
|
||||
$(NULL)
|
||||
|
||||
noinst_LTLIBRARIES += libgdmuser-1.0.la
|
||||
|
69
src/Makefile-gvc.am
Normal file
69
src/Makefile-gvc.am
Normal file
@ -0,0 +1,69 @@
|
||||
noinst_LTLIBRARIES += libgvc.la
|
||||
|
||||
libgvc_la_CPPFLAGS = \
|
||||
$(WARN_CFLAGS) \
|
||||
$(GVC_CFLAGS) \
|
||||
-I$(srcdir)/gvc/ \
|
||||
-DWITH_INTROSPECTION \
|
||||
-DG_LOG_DOMAIN="\"Gvc\""
|
||||
|
||||
libgvc_la_LIBADD = \
|
||||
$(GVC_LIBS)
|
||||
|
||||
libgvc_la_LDFLAGS = -avoid-version
|
||||
|
||||
libgvc_la_gir_sources = \
|
||||
gvc/gvc-mixer-stream.h \
|
||||
gvc/gvc-mixer-stream.c \
|
||||
gvc/gvc-channel-map.h \
|
||||
gvc/gvc-channel-map.c \
|
||||
gvc/gvc-mixer-card.c \
|
||||
gvc/gvc-mixer-card.h \
|
||||
gvc/gvc-mixer-sink.h \
|
||||
gvc/gvc-mixer-sink.c \
|
||||
gvc/gvc-mixer-source.h \
|
||||
gvc/gvc-mixer-source.c \
|
||||
gvc/gvc-mixer-sink-input.h \
|
||||
gvc/gvc-mixer-sink-input.c \
|
||||
gvc/gvc-mixer-source-output.h \
|
||||
gvc/gvc-mixer-source-output.c \
|
||||
gvc/gvc-mixer-event-role.h \
|
||||
gvc/gvc-mixer-event-role.c \
|
||||
gvc/gvc-mixer-control.h \
|
||||
gvc/gvc-mixer-control.c \
|
||||
gvc/gvc-pulseaudio-fake.h
|
||||
|
||||
libgvc_la_private_sources = \
|
||||
gvc/gvc-mixer-stream-private.h \
|
||||
gvc/gvc-channel-map-private.h \
|
||||
gvc/gvc-mixer-card-private.h \
|
||||
gvc/gvc-mixer-control-private.h \
|
||||
gvc/gvc-pulseaudio-fake.h
|
||||
|
||||
libgvc_la_SOURCES = \
|
||||
$(libgvc_la_gir_sources) \
|
||||
$(libgvc_la_private_sources)
|
||||
|
||||
Gvc-1.0.gir: $(G_IR_SCANNER) libgvc.la Makefile
|
||||
$(AM_V_GEN) $(G_IR_SCANNER) \
|
||||
--namespace=Gvc \
|
||||
--nsversion=1.0 \
|
||||
--warn-all \
|
||||
--quiet \
|
||||
--libtool="$(LIBTOOL)" \
|
||||
--add-include-path=$(builddir) \
|
||||
--include=GObject-2.0 \
|
||||
--library=libgvc.la \
|
||||
--identifier-prefix=Gvc \
|
||||
--symbol-prefix=gvc_ \
|
||||
$(addprefix $(srcdir)/,$(libgvc_la_gir_sources)) \
|
||||
$(INCLUDES) \
|
||||
-I $(srcdir) \
|
||||
-I $(srcdir)/gvc \
|
||||
-DWITH_INTROSPECTION \
|
||||
-o $@
|
||||
CLEANFILES += Gvc-1.0.gir
|
||||
|
||||
Gvc-1.0.typelib: Gvc-1.0.gir
|
||||
$(AM_V_GEN) $(G_IR_COMPILER) $< -o $@
|
||||
CLEANFILES += Gvc-1.0.typelib
|
@ -1,19 +1,19 @@
|
||||
st_cflags = \
|
||||
-I$(top_srcdir)/src \
|
||||
-DPREFIX=\""$(prefix)"\" \
|
||||
-DLIBDIR=\""$(libdir)"\" \
|
||||
-DG_DISABLE_DEPRECATED \
|
||||
-DG_LOG_DOMAIN=\"St\" \
|
||||
-DST_COMPILATION \
|
||||
-DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \
|
||||
$(ST_CFLAGS) \
|
||||
$(NULL)
|
||||
-I$(top_srcdir)/src \
|
||||
-DPREFIX=\""$(prefix)"\" \
|
||||
-DLIBDIR=\""$(libdir)"\" \
|
||||
-DG_DISABLE_DEPRECATED \
|
||||
-DG_LOG_DOMAIN=\"St\" \
|
||||
-DST_COMPILATION \
|
||||
-DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \
|
||||
$(ST_CFLAGS) \
|
||||
$(NULL)
|
||||
|
||||
st_built_sources = \
|
||||
st-enum-types.h \
|
||||
st-enum-types.c \
|
||||
st-marshal.h \
|
||||
st-marshal.c
|
||||
st-enum-types.h \
|
||||
st-enum-types.c \
|
||||
st-marshal.h \
|
||||
st-marshal.c
|
||||
|
||||
BUILT_SOURCES += $(st_built_sources)
|
||||
|
||||
@ -66,37 +66,39 @@ st-enum-types.c: stamp-st-enum-types.h st/st-enum-types.c.in
|
||||
|
||||
# please, keep this sorted alphabetically
|
||||
st_source_h = \
|
||||
st/st-adjustment.h \
|
||||
st/st-bin.h \
|
||||
st/st-border-image.h \
|
||||
st/st-box-layout.h \
|
||||
st/st-box-layout-child.h \
|
||||
st/st-button.h \
|
||||
st/st-clickable.h \
|
||||
st/st-clipboard.h \
|
||||
st/st-container.h \
|
||||
st/st-drawing-area.h \
|
||||
st/st-entry.h \
|
||||
st/st-group.h \
|
||||
st/st-im-text.h \
|
||||
st/st-label.h \
|
||||
st/st-overflow-box.h \
|
||||
st/st-private.h \
|
||||
st/st-scrollable.h \
|
||||
st/st-scroll-bar.h \
|
||||
st/st-scroll-view.h \
|
||||
st/st-shadow.h \
|
||||
st/st-subtexture.h \
|
||||
st/st-table.h \
|
||||
st/st-table-child.h \
|
||||
st/st-texture-cache.h \
|
||||
st/st-theme.h \
|
||||
st/st-theme-context.h \
|
||||
st/st-theme-node.h \
|
||||
st/st-tooltip.h \
|
||||
st/st-types.h \
|
||||
st/st-widget.h \
|
||||
$(NULL)
|
||||
st/st-adjustment.h \
|
||||
st/st-bin.h \
|
||||
st/st-border-image.h \
|
||||
st/st-box-layout.h \
|
||||
st/st-box-layout-child.h \
|
||||
st/st-button.h \
|
||||
st/st-clickable.h \
|
||||
st/st-clipboard.h \
|
||||
st/st-container.h \
|
||||
st/st-drawing-area.h \
|
||||
st/st-entry.h \
|
||||
st/st-focus-manager.h \
|
||||
st/st-group.h \
|
||||
st/st-icon.h \
|
||||
st/st-icon-colors.h \
|
||||
st/st-im-text.h \
|
||||
st/st-label.h \
|
||||
st/st-overflow-box.h \
|
||||
st/st-private.h \
|
||||
st/st-scrollable.h \
|
||||
st/st-scroll-bar.h \
|
||||
st/st-scroll-view.h \
|
||||
st/st-shadow.h \
|
||||
st/st-table.h \
|
||||
st/st-table-child.h \
|
||||
st/st-texture-cache.h \
|
||||
st/st-theme.h \
|
||||
st/st-theme-context.h \
|
||||
st/st-theme-node.h \
|
||||
st/st-tooltip.h \
|
||||
st/st-types.h \
|
||||
st/st-widget.h \
|
||||
$(NULL)
|
||||
|
||||
st.h: Makefile
|
||||
$(AM_V_GEN) (echo "#define ST_H_INSIDE 1"; \
|
||||
@ -107,58 +109,60 @@ st.h: Makefile
|
||||
BUILT_SOURCES += st.h
|
||||
|
||||
st_source_private_h = \
|
||||
st/st-private.h \
|
||||
st/st-table-private.h \
|
||||
st/st-theme-private.h \
|
||||
st/st-theme-node-private.h \
|
||||
st/st-theme-node-transition.h
|
||||
st/st-private.h \
|
||||
st/st-table-private.h \
|
||||
st/st-theme-private.h \
|
||||
st/st-theme-node-private.h \
|
||||
st/st-theme-node-transition.h
|
||||
|
||||
# please, keep this sorted alphabetically
|
||||
st_source_c = \
|
||||
st/st-adjustment.c \
|
||||
st/st-bin.c \
|
||||
st/st-border-image.c \
|
||||
st/st-box-layout.c \
|
||||
st/st-box-layout-child.c \
|
||||
st/st-button.c \
|
||||
st/st-clickable.c \
|
||||
st/st-clipboard.c \
|
||||
st/st-container.c \
|
||||
st/st-drawing-area.c \
|
||||
st/st-entry.c \
|
||||
st/st-group.c \
|
||||
st/st-im-text.c \
|
||||
st/st-label.c \
|
||||
st/st-overflow-box.c \
|
||||
st/st-private.c \
|
||||
st/st-scrollable.c \
|
||||
st/st-scroll-bar.c \
|
||||
st/st-scroll-view.c \
|
||||
st/st-shadow.c \
|
||||
st/st-subtexture.c \
|
||||
st/st-table.c \
|
||||
st/st-table-child.c \
|
||||
st/st-texture-cache.c \
|
||||
st/st-theme.c \
|
||||
st/st-theme-context.c \
|
||||
st/st-theme-node.c \
|
||||
st/st-theme-node-drawing.c \
|
||||
st/st-theme-node-transition.c \
|
||||
st/st-tooltip.c \
|
||||
st/st-widget.c \
|
||||
$(NULL)
|
||||
st/st-adjustment.c \
|
||||
st/st-bin.c \
|
||||
st/st-border-image.c \
|
||||
st/st-box-layout.c \
|
||||
st/st-box-layout-child.c \
|
||||
st/st-button.c \
|
||||
st/st-clickable.c \
|
||||
st/st-clipboard.c \
|
||||
st/st-container.c \
|
||||
st/st-drawing-area.c \
|
||||
st/st-entry.c \
|
||||
st/st-focus-manager.c \
|
||||
st/st-group.c \
|
||||
st/st-icon.c \
|
||||
st/st-icon-colors.c \
|
||||
st/st-im-text.c \
|
||||
st/st-label.c \
|
||||
st/st-overflow-box.c \
|
||||
st/st-private.c \
|
||||
st/st-scrollable.c \
|
||||
st/st-scroll-bar.c \
|
||||
st/st-scroll-view.c \
|
||||
st/st-shadow.c \
|
||||
st/st-table.c \
|
||||
st/st-table-child.c \
|
||||
st/st-texture-cache.c \
|
||||
st/st-theme.c \
|
||||
st/st-theme-context.c \
|
||||
st/st-theme-node.c \
|
||||
st/st-theme-node-drawing.c \
|
||||
st/st-theme-node-transition.c \
|
||||
st/st-tooltip.c \
|
||||
st/st-widget.c \
|
||||
$(NULL)
|
||||
|
||||
noinst_LTLIBRARIES += libst-1.0.la
|
||||
|
||||
libst_1_0_la_LIBADD = -lm $(ST_LIBS)
|
||||
libst_1_0_la_SOURCES = \
|
||||
$(st_source_c) \
|
||||
$(st_source_private_h) \
|
||||
$(st_source_private_c) \
|
||||
$(st_source_h) \
|
||||
st.h \
|
||||
$(st_built_sources) \
|
||||
$(NULL)
|
||||
$(st_source_c) \
|
||||
$(st_source_private_h) \
|
||||
$(st_source_private_c) \
|
||||
$(st_source_h) \
|
||||
st.h \
|
||||
$(st_built_sources) \
|
||||
$(NULL)
|
||||
libst_1_0_la_CPPFLAGS = $(st_cflags)
|
||||
libst_1_0_la_LDFLAGS = $(LDADD)
|
||||
|
||||
|
@ -6,7 +6,7 @@ tray_cflags = \
|
||||
$(NULL)
|
||||
|
||||
tray_built_sources = \
|
||||
na-marshal.h \
|
||||
na-marshal.h \
|
||||
na-marshal.c
|
||||
|
||||
BUILT_SOURCES += $(tray_built_sources)
|
||||
@ -45,7 +45,7 @@ na-marshal.c: Makefile tray/na-marshal.list
|
||||
noinst_LTLIBRARIES += libtray.la
|
||||
|
||||
libtray_la_LIBADD = $(TRAY_LIBS)
|
||||
libtray_la_SOURCES = \
|
||||
libtray_la_SOURCES = \
|
||||
$(tray_source) \
|
||||
$(tray_built_sources) \
|
||||
$(NULL)
|
||||
|
@ -37,10 +37,11 @@ EXTRA_DIST += gnome-shell-clock-preferences.in
|
||||
include Makefile-gdmuser.am
|
||||
include Makefile-st.am
|
||||
include Makefile-tray.am
|
||||
include Makefile-gvc.am
|
||||
|
||||
gnome_shell_cflags = \
|
||||
$(MUTTER_PLUGIN_CFLAGS) \
|
||||
$(LIBGNOMEUI_CFLAGS) \
|
||||
$(LIBGNOMEUI_CFLAGS) \
|
||||
-I$(srcdir)/tray \
|
||||
-DLOCALEDIR=\"$(datadir)/locale\" \
|
||||
-DGNOME_SHELL_DATADIR=\"$(pkgdatadir)\" \
|
||||
@ -76,9 +77,9 @@ shell_public_headers_h = \
|
||||
shell-stack.h \
|
||||
shell-tray-icon.h \
|
||||
shell-tray-manager.h \
|
||||
shell-uri-util.h \
|
||||
shell-util.h \
|
||||
shell-window-tracker.h \
|
||||
shell-wm.h \
|
||||
shell-wm.h \
|
||||
shell-xfixes-cursor.h
|
||||
|
||||
libgnome_shell_la_SOURCES = \
|
||||
@ -89,7 +90,7 @@ libgnome_shell_la_SOURCES = \
|
||||
shell-global-private.h \
|
||||
shell-jsapi-compat-private.h \
|
||||
shell-window-tracker-private.h \
|
||||
shell-wm-private.h \
|
||||
shell-wm-private.h \
|
||||
gnome-shell-plugin.c \
|
||||
gtk-compat.h \
|
||||
shell-app.c \
|
||||
@ -108,14 +109,16 @@ libgnome_shell_la_SOURCES = \
|
||||
shell-stack.c \
|
||||
shell-tray-icon.c \
|
||||
shell-tray-manager.c \
|
||||
shell-uri-util.c \
|
||||
shell-util.c \
|
||||
shell-window-tracker.c \
|
||||
shell-wm.c \
|
||||
shell-wm.c \
|
||||
shell-xfixes-cursor.c
|
||||
|
||||
libgnome_shell_la_gir_sources = \
|
||||
$(filter-out %-private.h $(shell_recorder_non_gir_sources), $(shell_public_headers_h) $(libgnome_shell_la_SOURCES))
|
||||
|
||||
########################################
|
||||
|
||||
shell_recorder_sources = \
|
||||
shell-recorder.c \
|
||||
shell-recorder.h
|
||||
@ -138,6 +141,35 @@ test_recorder_SOURCES = \
|
||||
test-recorder.c
|
||||
endif BUILD_RECORDER
|
||||
|
||||
########################################
|
||||
|
||||
# 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_LDFLAGS = -export-dynamic
|
||||
|
||||
run_js_test_SOURCES = \
|
||||
run-js-test.c
|
||||
|
||||
########################################
|
||||
|
||||
shell-marshal.h: stamp-shell-marshal.h
|
||||
@true
|
||||
@ -184,16 +216,18 @@ shell-enum-types.c: shell-enum-types.c.in stamp-shell-enum-types.h
|
||||
EXTRA_DIST += shell-enum-types.c.in
|
||||
|
||||
libgnome_shell_la_LDFLAGS = -avoid-version -module
|
||||
libgnome_shell_la_LIBADD =-lm \
|
||||
libgnome_shell_la_LIBADD = \
|
||||
-lm \
|
||||
$(MUTTER_PLUGIN_LIBS) \
|
||||
$(LIBGNOMEUI_LIBS) \
|
||||
$(LIBGNOMEUI_LIBS) \
|
||||
libst-1.0.la \
|
||||
libgdmuser-1.0.la \
|
||||
libtray.la
|
||||
libtray.la \
|
||||
libgvc.la
|
||||
libgnome_shell_la_CPPFLAGS = $(gnome_shell_cflags)
|
||||
|
||||
typelibdir = $(pkglibdir)
|
||||
typelib_DATA = Shell-0.1.typelib St-1.0.typelib Gdm-1.0.typelib
|
||||
typelib_DATA = Shell-0.1.typelib St-1.0.typelib Gdm-1.0.typelib Gvc-1.0.typelib
|
||||
|
||||
Shell-0.1.gir: $(mutter) $(G_IR_SCANNER) St-1.0.gir libgnome-shell.la Makefile
|
||||
$(AM_V_GEN) $(G_IR_SCANNER) \
|
||||
@ -205,9 +239,9 @@ Shell-0.1.gir: $(mutter) $(G_IR_SCANNER) St-1.0.gir libgnome-shell.la Makefile
|
||||
--include=Clutter-1.0 \
|
||||
--include=ClutterX11-1.0 \
|
||||
--include=Meta-2.91 \
|
||||
--libtool="$(LIBTOOL)" \
|
||||
--add-include-path=$(builddir) \
|
||||
--include=St-1.0 \
|
||||
--libtool="$(LIBTOOL)" \
|
||||
--add-include-path=$(builddir) \
|
||||
--include=St-1.0 \
|
||||
--program=mutter \
|
||||
--program-arg=--mutter-plugins=$$(pwd)/libgnome-shell.la \
|
||||
$(addprefix $(srcdir)/,$(libgnome_shell_la_gir_sources)) \
|
||||
@ -215,7 +249,6 @@ Shell-0.1.gir: $(mutter) $(G_IR_SCANNER) St-1.0.gir libgnome-shell.la Makefile
|
||||
-I $(srcdir) \
|
||||
-o $@
|
||||
CLEANFILES += Shell-0.1.gir
|
||||
EXTRA_DIST += fix-meta-rectangle.py
|
||||
|
||||
# The dependency on libgnome-shell.la here is because g-ir-compiler opens it
|
||||
# (not the fake library, since we've already done the rewriting)
|
||||
@ -263,8 +296,8 @@ Gdm-1.0.gir: $(mutter) $(G_IR_SCANNER) libgdmuser-1.0.la Makefile
|
||||
--libtool="$(LIBTOOL)" \
|
||||
--library=libgdmuser-1.0.la \
|
||||
$(filter-out %-private.h, $(addprefix $(srcdir)/,$(gdmuser_source_h))) \
|
||||
$(addprefix $(srcdir)/,$(gdmuser_source_c)) \
|
||||
$(gdmuser_cflags) \
|
||||
$(addprefix $(srcdir)/,$(gdmuser_source_c)) \
|
||||
$(gdmuser_cflags) \
|
||||
-o $@
|
||||
CLEANFILES += Gdm-1.0.gir
|
||||
|
||||
|
@ -1,21 +0,0 @@
|
||||
#!/usr/bin/python
|
||||
import re
|
||||
import sys
|
||||
|
||||
# gobject-introspection currently has a bug where an alias like
|
||||
# 'typedef GdkRectangle cairo_rect_int_t' is stored un-namespaced,
|
||||
# so it is taken to apply to all *Rectangle types. Fixing this
|
||||
# requires a significant rework of g-ir-scanner, so for the moment
|
||||
# we fix up the output using this script.
|
||||
#
|
||||
# https://bugzilla.gnome.org/show_bug.cgi?id=622609
|
||||
|
||||
GDK_RECTANGLE = re.compile(r'Gdk\.Rectangle')
|
||||
META_RECTANGLE = re.compile(r'MetaRectangle')
|
||||
|
||||
i = open(sys.argv[1], 'r')
|
||||
o = open(sys.argv[2], 'w')
|
||||
for line in i:
|
||||
if GDK_RECTANGLE.search(line) and META_RECTANGLE.search(line):
|
||||
line = re.sub('Gdk.Rectangle', 'Meta.Rectangle', line)
|
||||
o.write(line)
|
File diff suppressed because it is too large
Load Diff
@ -18,8 +18,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __GDM_USER_MANAGER_H
|
||||
#define __GDM_USER_MANAGER_H
|
||||
#ifndef __GDM_USER_MANAGER_H__
|
||||
#define __GDM_USER_MANAGER_H__
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
@ -35,34 +35,35 @@ G_BEGIN_DECLS
|
||||
#define GDM_USER_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDM_TYPE_USER_MANAGER, GdmUserManagerClass))
|
||||
|
||||
typedef struct GdmUserManagerPrivate GdmUserManagerPrivate;
|
||||
typedef struct GdmUserManager GdmUserManager;
|
||||
typedef struct GdmUserManagerClass GdmUserManagerClass;
|
||||
typedef enum GdmUserManagerError GdmUserManagerError;
|
||||
|
||||
typedef struct
|
||||
struct GdmUserManager
|
||||
{
|
||||
GObject parent;
|
||||
GdmUserManagerPrivate *priv;
|
||||
} GdmUserManager;
|
||||
};
|
||||
|
||||
typedef struct
|
||||
struct GdmUserManagerClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
|
||||
void (* loading_users) (GdmUserManager *user_manager);
|
||||
void (* users_loaded) (GdmUserManager *user_manager);
|
||||
void (* user_added) (GdmUserManager *user_manager,
|
||||
GdmUser *user);
|
||||
void (* user_removed) (GdmUserManager *user_manager,
|
||||
GdmUser *user);
|
||||
void (* user_is_logged_in_changed) (GdmUserManager *user_manager,
|
||||
GdmUser *user);
|
||||
void (* user_login_frequency_changed) (GdmUserManager *user_manager,
|
||||
GdmUser *user);
|
||||
} GdmUserManagerClass;
|
||||
void (* user_changed) (GdmUserManager *user_manager,
|
||||
GdmUser *user);
|
||||
};
|
||||
|
||||
typedef enum
|
||||
enum GdmUserManagerError
|
||||
{
|
||||
GDM_USER_MANAGER_ERROR_GENERAL,
|
||||
GDM_USER_MANAGER_ERROR_KEY_NOT_FOUND
|
||||
} GdmUserManagerError;
|
||||
};
|
||||
|
||||
#define GDM_USER_MANAGER_ERROR gdm_user_manager_error_quark ()
|
||||
|
||||
@ -71,6 +72,7 @@ GType gdm_user_manager_get_type (void);
|
||||
|
||||
GdmUserManager * gdm_user_manager_ref_default (void);
|
||||
|
||||
void gdm_user_manager_queue_load (GdmUserManager *manager);
|
||||
GSList * gdm_user_manager_list_users (GdmUserManager *manager);
|
||||
GdmUser * gdm_user_manager_get_user (GdmUserManager *manager,
|
||||
const char *username);
|
||||
@ -80,6 +82,8 @@ GdmUser * gdm_user_manager_get_user_by_uid (GdmUserManager *mana
|
||||
gboolean gdm_user_manager_activate_user_session (GdmUserManager *manager,
|
||||
GdmUser *user);
|
||||
|
||||
gboolean gdm_user_manager_can_switch (GdmUserManager *manager);
|
||||
|
||||
gboolean gdm_user_manager_goto_login_session (GdmUserManager *manager);
|
||||
|
||||
G_END_DECLS
|
||||
|
@ -21,8 +21,8 @@
|
||||
* Private interfaces to the GdmUser object
|
||||
*/
|
||||
|
||||
#ifndef __GDM_USER_PRIVATE_H
|
||||
#define __GDM_USER_PRIVATE_H
|
||||
#ifndef __GDM_USER_PRIVATE_H_
|
||||
#define __GDM_USER_PRIVATE_H_
|
||||
|
||||
#include <pwd.h>
|
||||
|
||||
@ -30,15 +30,20 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
void _gdm_user_update (GdmUser *user,
|
||||
const struct passwd *pwent);
|
||||
void _gdm_user_update_from_object_path (GdmUser *user,
|
||||
const char *object_path);
|
||||
|
||||
void _gdm_user_update_from_pwent (GdmUser *user,
|
||||
const struct passwd *pwent);
|
||||
|
||||
void _gdm_user_update_login_frequency (GdmUser *user,
|
||||
guint64 login_frequency);
|
||||
|
||||
void _gdm_user_add_session (GdmUser *user,
|
||||
const char *session_id);
|
||||
void _gdm_user_remove_session (GdmUser *user,
|
||||
const char *session_id);
|
||||
|
||||
void _gdm_user_icon_changed (GdmUser *user);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* !__GDM_USER_PRIVATE_H */
|
||||
#endif /* !__GDM_USER_PRIVATE__ */
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -22,8 +22,8 @@
|
||||
* Facade object for user data, owned by GdmUserManager
|
||||
*/
|
||||
|
||||
#ifndef __GDM_USER_H
|
||||
#define __GDM_USER_H
|
||||
#ifndef __GDM_USER_H__
|
||||
#define __GDM_USER_H__
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <gtk/gtk.h>
|
||||
@ -40,20 +40,24 @@ typedef struct _GdmUserClass GdmUserClass;
|
||||
|
||||
GType gdm_user_get_type (void) G_GNUC_CONST;
|
||||
|
||||
GdmUser *gdm_user_new_from_object_path (const char *path);
|
||||
const char *gdm_user_get_object_path (GdmUser *user);
|
||||
|
||||
gulong gdm_user_get_uid (GdmUser *user);
|
||||
G_CONST_RETURN char *gdm_user_get_user_name (GdmUser *user);
|
||||
G_CONST_RETURN char *gdm_user_get_real_name (GdmUser *user);
|
||||
G_CONST_RETURN char *gdm_user_get_home_directory (GdmUser *user);
|
||||
G_CONST_RETURN char *gdm_user_get_shell (GdmUser *user);
|
||||
const char *gdm_user_get_user_name (GdmUser *user);
|
||||
const char *gdm_user_get_real_name (GdmUser *user);
|
||||
guint gdm_user_get_num_sessions (GdmUser *user);
|
||||
GList *gdm_user_get_sessions (GdmUser *user);
|
||||
gboolean gdm_user_is_logged_in (GdmUser *user);
|
||||
gulong gdm_user_get_login_frequency (GdmUser *user);
|
||||
const char *gdm_user_get_icon_file (GdmUser *user);
|
||||
const char *gdm_user_get_primary_session_id (GdmUser *user);
|
||||
|
||||
GdkPixbuf *gdm_user_render_icon (GdmUser *user,
|
||||
gint icon_size);
|
||||
|
||||
gint gdm_user_collate (GdmUser *user1,
|
||||
GdmUser *user2);
|
||||
gboolean gdm_user_is_loaded (GdmUser *user);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
@ -25,8 +25,7 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#define MUTTER_BUILDING_PLUGIN 1
|
||||
#include <mutter-plugin.h>
|
||||
#include <meta-plugin.h>
|
||||
|
||||
#include <glib/gi18n-lib.h>
|
||||
|
||||
@ -57,38 +56,40 @@
|
||||
static void gnome_shell_plugin_dispose (GObject *object);
|
||||
static void gnome_shell_plugin_finalize (GObject *object);
|
||||
|
||||
static void gnome_shell_plugin_start (MutterPlugin *plugin);
|
||||
static void gnome_shell_plugin_minimize (MutterPlugin *plugin,
|
||||
MutterWindow *actor);
|
||||
static void gnome_shell_plugin_maximize (MutterPlugin *plugin,
|
||||
MutterWindow *actor,
|
||||
gint x,
|
||||
gint y,
|
||||
gint width,
|
||||
gint height);
|
||||
static void gnome_shell_plugin_unmaximize (MutterPlugin *plugin,
|
||||
MutterWindow *actor,
|
||||
gint x,
|
||||
gint y,
|
||||
gint width,
|
||||
gint height);
|
||||
static void gnome_shell_plugin_map (MutterPlugin *plugin,
|
||||
MutterWindow *actor);
|
||||
static void gnome_shell_plugin_destroy (MutterPlugin *plugin,
|
||||
MutterWindow *actor);
|
||||
static void gnome_shell_plugin_start (MetaPlugin *plugin);
|
||||
static void gnome_shell_plugin_minimize (MetaPlugin *plugin,
|
||||
MetaWindowActor *actor);
|
||||
static void gnome_shell_plugin_maximize (MetaPlugin *plugin,
|
||||
MetaWindowActor *actor,
|
||||
gint x,
|
||||
gint y,
|
||||
gint width,
|
||||
gint height);
|
||||
static void gnome_shell_plugin_unmaximize (MetaPlugin *plugin,
|
||||
MetaWindowActor *actor,
|
||||
gint x,
|
||||
gint y,
|
||||
gint width,
|
||||
gint height);
|
||||
static void gnome_shell_plugin_map (MetaPlugin *plugin,
|
||||
MetaWindowActor *actor);
|
||||
static void gnome_shell_plugin_destroy (MetaPlugin *plugin,
|
||||
MetaWindowActor *actor);
|
||||
|
||||
static void gnome_shell_plugin_switch_workspace (MutterPlugin *plugin,
|
||||
gint from,
|
||||
gint to,
|
||||
MetaMotionDirection direction);
|
||||
static void gnome_shell_plugin_switch_workspace (MetaPlugin *plugin,
|
||||
gint from,
|
||||
gint to,
|
||||
MetaMotionDirection direction);
|
||||
|
||||
static void gnome_shell_plugin_kill_window_effects (MutterPlugin *plugin,
|
||||
MutterWindow *actor);
|
||||
static void gnome_shell_plugin_kill_switch_workspace (MutterPlugin *plugin);
|
||||
static void gnome_shell_plugin_kill_window_effects (MetaPlugin *plugin,
|
||||
MetaWindowActor *actor);
|
||||
static void gnome_shell_plugin_kill_switch_workspace (MetaPlugin *plugin);
|
||||
|
||||
|
||||
static gboolean gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
||||
XEvent *event);
|
||||
static const MetaPluginInfo *gnome_shell_plugin_plugin_info (MetaPlugin *plugin);
|
||||
|
||||
static gboolean gnome_shell_plugin_xevent_filter (MutterPlugin *plugin,
|
||||
XEvent *event);
|
||||
static const MutterPluginInfo *gnome_shell_plugin_plugin_info (MutterPlugin *plugin);
|
||||
|
||||
#define GNOME_TYPE_SHELL_PLUGIN (gnome_shell_plugin_get_type ())
|
||||
#define GNOME_SHELL_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GNOME_TYPE_SHELL_PLUGIN, GnomeShellPlugin))
|
||||
@ -102,7 +103,7 @@ typedef struct _GnomeShellPluginClass GnomeShellPluginClass;
|
||||
|
||||
struct _GnomeShellPlugin
|
||||
{
|
||||
MutterPlugin parent;
|
||||
MetaPlugin parent;
|
||||
|
||||
GjsContext *gjs_context;
|
||||
Atom panel_action;
|
||||
@ -116,20 +117,20 @@ struct _GnomeShellPlugin
|
||||
|
||||
struct _GnomeShellPluginClass
|
||||
{
|
||||
MutterPluginClass parent_class;
|
||||
MetaPluginClass parent_class;
|
||||
};
|
||||
|
||||
/*
|
||||
* Create the plugin struct; function pointers initialized in
|
||||
* g_module_check_init().
|
||||
*/
|
||||
MUTTER_PLUGIN_DECLARE(GnomeShellPlugin, gnome_shell_plugin);
|
||||
META_PLUGIN_DECLARE(GnomeShellPlugin, gnome_shell_plugin);
|
||||
|
||||
static void
|
||||
gnome_shell_plugin_class_init (GnomeShellPluginClass *klass)
|
||||
{
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||
MutterPluginClass *plugin_class = MUTTER_PLUGIN_CLASS (klass);
|
||||
MetaPluginClass *plugin_class = META_PLUGIN_CLASS (klass);
|
||||
|
||||
gobject_class->dispose = gnome_shell_plugin_dispose;
|
||||
gobject_class->finalize = gnome_shell_plugin_finalize;
|
||||
@ -160,6 +161,8 @@ gnome_shell_plugin_init (GnomeShellPlugin *shell_plugin)
|
||||
"/desktop/gnome/shell/windows/button_layout");
|
||||
meta_prefs_override_preference_location ("/apps/metacity/general/side_by_side_tiling",
|
||||
"/desktop/gnome/shell/windows/side_by_side_tiling");
|
||||
meta_prefs_override_preference_location ("/apps/metacity/general/theme",
|
||||
"/desktop/gnome/shell/windows/theme");
|
||||
}
|
||||
|
||||
static void
|
||||
@ -297,7 +300,16 @@ add_statistics (GnomeShellPlugin *shell_plugin)
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_shell_plugin_start (MutterPlugin *plugin)
|
||||
gvc_muted_debug_log_handler (const char *log_domain,
|
||||
GLogLevelFlags log_level,
|
||||
const char *message,
|
||||
gpointer data)
|
||||
{
|
||||
/* Intentionally empty to discard message */
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_shell_plugin_start (MetaPlugin *plugin)
|
||||
{
|
||||
GnomeShellPlugin *shell_plugin = GNOME_SHELL_PLUGIN (plugin);
|
||||
MetaScreen *screen;
|
||||
@ -327,7 +339,7 @@ gnome_shell_plugin_start (MutterPlugin *plugin)
|
||||
NULL);
|
||||
update_font_options (settings);
|
||||
|
||||
screen = mutter_plugin_get_screen (plugin);
|
||||
screen = meta_plugin_get_screen (plugin);
|
||||
display = meta_screen_get_display (screen);
|
||||
|
||||
xdisplay = meta_display_get_xdisplay (display);
|
||||
@ -355,10 +367,14 @@ gnome_shell_plugin_start (MutterPlugin *plugin)
|
||||
shell_plugin->gjs_context = gjs_context_new_with_search_path(search_path);
|
||||
g_strfreev(search_path);
|
||||
|
||||
/* Disable the gnome-volume-control debug */
|
||||
g_log_set_handler ("Gvc", G_LOG_LEVEL_DEBUG,
|
||||
gvc_muted_debug_log_handler, NULL);
|
||||
|
||||
/* Initialize the global object here. */
|
||||
global = shell_global_get ();
|
||||
|
||||
_shell_global_set_plugin (global, MUTTER_PLUGIN(shell_plugin));
|
||||
_shell_global_set_plugin (global, META_PLUGIN(shell_plugin));
|
||||
_shell_global_set_gjs_context (global, shell_plugin->gjs_context);
|
||||
|
||||
add_statistics (shell_plugin);
|
||||
@ -414,8 +430,8 @@ get_shell_wm (void)
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_shell_plugin_minimize (MutterPlugin *plugin,
|
||||
MutterWindow *actor)
|
||||
gnome_shell_plugin_minimize (MetaPlugin *plugin,
|
||||
MetaWindowActor *actor)
|
||||
{
|
||||
_shell_wm_minimize (get_shell_wm (),
|
||||
actor);
|
||||
@ -423,70 +439,70 @@ gnome_shell_plugin_minimize (MutterPlugin *plugin,
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_shell_plugin_maximize (MutterPlugin *plugin,
|
||||
MutterWindow *actor,
|
||||
gint x,
|
||||
gint y,
|
||||
gint width,
|
||||
gint height)
|
||||
gnome_shell_plugin_maximize (MetaPlugin *plugin,
|
||||
MetaWindowActor *actor,
|
||||
gint x,
|
||||
gint y,
|
||||
gint width,
|
||||
gint height)
|
||||
{
|
||||
_shell_wm_maximize (get_shell_wm (),
|
||||
actor, x, y, width, height);
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_shell_plugin_unmaximize (MutterPlugin *plugin,
|
||||
MutterWindow *actor,
|
||||
gint x,
|
||||
gint y,
|
||||
gint width,
|
||||
gint height)
|
||||
gnome_shell_plugin_unmaximize (MetaPlugin *plugin,
|
||||
MetaWindowActor *actor,
|
||||
gint x,
|
||||
gint y,
|
||||
gint width,
|
||||
gint height)
|
||||
{
|
||||
_shell_wm_unmaximize (get_shell_wm (),
|
||||
actor, x, y, width, height);
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_shell_plugin_map (MutterPlugin *plugin,
|
||||
MutterWindow *actor)
|
||||
gnome_shell_plugin_map (MetaPlugin *plugin,
|
||||
MetaWindowActor *actor)
|
||||
{
|
||||
_shell_wm_map (get_shell_wm (),
|
||||
actor);
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_shell_plugin_destroy (MutterPlugin *plugin,
|
||||
MutterWindow *actor)
|
||||
gnome_shell_plugin_destroy (MetaPlugin *plugin,
|
||||
MetaWindowActor *actor)
|
||||
{
|
||||
_shell_wm_destroy (get_shell_wm (),
|
||||
actor);
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_shell_plugin_switch_workspace (MutterPlugin *plugin,
|
||||
gint from,
|
||||
gint to,
|
||||
MetaMotionDirection direction)
|
||||
gnome_shell_plugin_switch_workspace (MetaPlugin *plugin,
|
||||
gint from,
|
||||
gint to,
|
||||
MetaMotionDirection direction)
|
||||
{
|
||||
_shell_wm_switch_workspace (get_shell_wm(), from, to, direction);
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_shell_plugin_kill_window_effects (MutterPlugin *plugin,
|
||||
MutterWindow *actor)
|
||||
gnome_shell_plugin_kill_window_effects (MetaPlugin *plugin,
|
||||
MetaWindowActor *actor)
|
||||
{
|
||||
_shell_wm_kill_window_effects (get_shell_wm(), actor);
|
||||
}
|
||||
|
||||
static void
|
||||
gnome_shell_plugin_kill_switch_workspace (MutterPlugin *plugin)
|
||||
gnome_shell_plugin_kill_switch_workspace (MetaPlugin *plugin)
|
||||
{
|
||||
_shell_wm_kill_switch_workspace (get_shell_wm());
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gnome_shell_plugin_xevent_filter (MutterPlugin *plugin,
|
||||
XEvent *xev)
|
||||
gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
||||
XEvent *xev)
|
||||
{
|
||||
#ifdef GLX_INTEL_swap_event
|
||||
GnomeShellPlugin *shell_plugin = GNOME_SHELL_PLUGIN (plugin);
|
||||
@ -526,9 +542,9 @@ gnome_shell_plugin_xevent_filter (MutterPlugin *plugin,
|
||||
}
|
||||
|
||||
static const
|
||||
MutterPluginInfo *gnome_shell_plugin_plugin_info (MutterPlugin *plugin)
|
||||
MetaPluginInfo *gnome_shell_plugin_plugin_info (MetaPlugin *plugin)
|
||||
{
|
||||
static const MutterPluginInfo info = {
|
||||
static const MetaPluginInfo info = {
|
||||
.name = "GNOME Shell",
|
||||
.version = "0.1",
|
||||
.author = "Various",
|
||||
|
@ -717,6 +717,7 @@ function main() {
|
||||
''')
|
||||
f.close()
|
||||
|
||||
print "Created extension in %r" % (extension_path, )
|
||||
subprocess.Popen(['gnome-open', extensionjs_path])
|
||||
sys.exit(0)
|
||||
|
||||
|
39
src/gvc/gvc-channel-map-private.h
Normal file
39
src/gvc/gvc-channel-map-private.h
Normal file
@ -0,0 +1,39 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __GVC_CHANNEL_MAP_PRIVATE_H
|
||||
#define __GVC_CHANNEL_MAP_PRIVATE_H
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <pulse/pulseaudio.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
GvcChannelMap * gvc_channel_map_new_from_pa_channel_map (const pa_channel_map *map);
|
||||
const pa_channel_map * gvc_channel_map_get_pa_channel_map (const GvcChannelMap *map);
|
||||
|
||||
void gvc_channel_map_volume_changed (GvcChannelMap *map,
|
||||
const pa_cvolume *cv,
|
||||
gboolean set);
|
||||
const pa_cvolume * gvc_channel_map_get_cvolume (const GvcChannelMap *map);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GVC_CHANNEL_MAP_PRIVATE_H */
|
254
src/gvc/gvc-channel-map.c
Normal file
254
src/gvc/gvc-channel-map.c
Normal file
@ -0,0 +1,254 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 William Jon McCann
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib/gi18n-lib.h>
|
||||
|
||||
#include <pulse/pulseaudio.h>
|
||||
|
||||
#include "gvc-channel-map.h"
|
||||
#include "gvc-channel-map-private.h"
|
||||
|
||||
#define GVC_CHANNEL_MAP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_CHANNEL_MAP, GvcChannelMapPrivate))
|
||||
|
||||
struct GvcChannelMapPrivate
|
||||
{
|
||||
pa_channel_map pa_map;
|
||||
gboolean pa_volume_is_set;
|
||||
pa_cvolume pa_volume;
|
||||
gdouble extern_volume[NUM_TYPES]; /* volume, balance, fade, lfe */
|
||||
gboolean can_balance;
|
||||
gboolean can_fade;
|
||||
};
|
||||
|
||||
enum {
|
||||
VOLUME_CHANGED,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
static guint signals [LAST_SIGNAL] = { 0, };
|
||||
|
||||
static void gvc_channel_map_class_init (GvcChannelMapClass *klass);
|
||||
static void gvc_channel_map_init (GvcChannelMap *channel_map);
|
||||
static void gvc_channel_map_finalize (GObject *object);
|
||||
|
||||
G_DEFINE_TYPE (GvcChannelMap, gvc_channel_map, G_TYPE_OBJECT)
|
||||
|
||||
guint
|
||||
gvc_channel_map_get_num_channels (const GvcChannelMap *map)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), 0);
|
||||
|
||||
if (!pa_channel_map_valid(&map->priv->pa_map))
|
||||
return 0;
|
||||
|
||||
return map->priv->pa_map.channels;
|
||||
}
|
||||
|
||||
const gdouble *
|
||||
gvc_channel_map_get_volume (GvcChannelMap *map)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), NULL);
|
||||
|
||||
if (!pa_channel_map_valid(&map->priv->pa_map))
|
||||
return NULL;
|
||||
|
||||
map->priv->extern_volume[VOLUME] = (gdouble) pa_cvolume_max (&map->priv->pa_volume);
|
||||
if (gvc_channel_map_can_balance (map))
|
||||
map->priv->extern_volume[BALANCE] = (gdouble) pa_cvolume_get_balance (&map->priv->pa_volume, &map->priv->pa_map);
|
||||
else
|
||||
map->priv->extern_volume[BALANCE] = 0;
|
||||
if (gvc_channel_map_can_fade (map))
|
||||
map->priv->extern_volume[FADE] = (gdouble) pa_cvolume_get_fade (&map->priv->pa_volume, &map->priv->pa_map);
|
||||
else
|
||||
map->priv->extern_volume[FADE] = 0;
|
||||
if (gvc_channel_map_has_lfe (map))
|
||||
map->priv->extern_volume[LFE] = (gdouble) pa_cvolume_get_position (&map->priv->pa_volume, &map->priv->pa_map, PA_CHANNEL_POSITION_LFE);
|
||||
else
|
||||
map->priv->extern_volume[LFE] = 0;
|
||||
|
||||
return map->priv->extern_volume;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_channel_map_can_balance (const GvcChannelMap *map)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), FALSE);
|
||||
|
||||
return map->priv->can_balance;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_channel_map_can_fade (const GvcChannelMap *map)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), FALSE);
|
||||
|
||||
return map->priv->can_fade;
|
||||
}
|
||||
|
||||
const char *
|
||||
gvc_channel_map_get_mapping (const GvcChannelMap *map)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), NULL);
|
||||
|
||||
if (!pa_channel_map_valid(&map->priv->pa_map))
|
||||
return NULL;
|
||||
|
||||
return pa_channel_map_to_pretty_name (&map->priv->pa_map);
|
||||
}
|
||||
|
||||
/**
|
||||
* gvc_channel_map_has_position: (skip)
|
||||
*
|
||||
* @map:
|
||||
* @position:
|
||||
*
|
||||
* Returns:
|
||||
*/
|
||||
gboolean
|
||||
gvc_channel_map_has_position (const GvcChannelMap *map,
|
||||
pa_channel_position_t position)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), FALSE);
|
||||
|
||||
return pa_channel_map_has_position (&(map->priv->pa_map), position);
|
||||
}
|
||||
|
||||
const pa_channel_map *
|
||||
gvc_channel_map_get_pa_channel_map (const GvcChannelMap *map)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), NULL);
|
||||
|
||||
if (!pa_channel_map_valid(&map->priv->pa_map))
|
||||
return NULL;
|
||||
|
||||
return &map->priv->pa_map;
|
||||
}
|
||||
|
||||
const pa_cvolume *
|
||||
gvc_channel_map_get_cvolume (const GvcChannelMap *map)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), NULL);
|
||||
|
||||
if (!pa_channel_map_valid(&map->priv->pa_map))
|
||||
return NULL;
|
||||
|
||||
return &map->priv->pa_volume;
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_channel_map_class_init (GvcChannelMapClass *klass)
|
||||
{
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
gobject_class->finalize = gvc_channel_map_finalize;
|
||||
|
||||
signals [VOLUME_CHANGED] =
|
||||
g_signal_new ("volume-changed",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (GvcChannelMapClass, volume_changed),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__BOOLEAN,
|
||||
G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
|
||||
|
||||
g_type_class_add_private (klass, sizeof (GvcChannelMapPrivate));
|
||||
}
|
||||
|
||||
void
|
||||
gvc_channel_map_volume_changed (GvcChannelMap *map,
|
||||
const pa_cvolume *cv,
|
||||
gboolean set)
|
||||
{
|
||||
g_return_if_fail (GVC_IS_CHANNEL_MAP (map));
|
||||
g_return_if_fail (cv != NULL);
|
||||
g_return_if_fail (pa_cvolume_compatible_with_channel_map(cv, &map->priv->pa_map));
|
||||
|
||||
if (pa_cvolume_equal(cv, &map->priv->pa_volume))
|
||||
return;
|
||||
|
||||
map->priv->pa_volume = *cv;
|
||||
|
||||
if (map->priv->pa_volume_is_set == FALSE) {
|
||||
map->priv->pa_volume_is_set = TRUE;
|
||||
return;
|
||||
}
|
||||
g_signal_emit (map, signals[VOLUME_CHANGED], 0, set);
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_channel_map_init (GvcChannelMap *map)
|
||||
{
|
||||
map->priv = GVC_CHANNEL_MAP_GET_PRIVATE (map);
|
||||
map->priv->pa_volume_is_set = FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_channel_map_finalize (GObject *object)
|
||||
{
|
||||
GvcChannelMap *channel_map;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (GVC_IS_CHANNEL_MAP (object));
|
||||
|
||||
channel_map = GVC_CHANNEL_MAP (object);
|
||||
|
||||
g_return_if_fail (channel_map->priv != NULL);
|
||||
|
||||
G_OBJECT_CLASS (gvc_channel_map_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
GvcChannelMap *
|
||||
gvc_channel_map_new (void)
|
||||
{
|
||||
GObject *map;
|
||||
map = g_object_new (GVC_TYPE_CHANNEL_MAP, NULL);
|
||||
return GVC_CHANNEL_MAP (map);
|
||||
}
|
||||
|
||||
static void
|
||||
set_from_pa_map (GvcChannelMap *map,
|
||||
const pa_channel_map *pa_map)
|
||||
{
|
||||
g_assert (pa_channel_map_valid(pa_map));
|
||||
|
||||
map->priv->can_balance = pa_channel_map_can_balance (pa_map);
|
||||
map->priv->can_fade = pa_channel_map_can_fade (pa_map);
|
||||
|
||||
map->priv->pa_map = *pa_map;
|
||||
pa_cvolume_set(&map->priv->pa_volume, pa_map->channels, PA_VOLUME_NORM);
|
||||
}
|
||||
|
||||
GvcChannelMap *
|
||||
gvc_channel_map_new_from_pa_channel_map (const pa_channel_map *pa_map)
|
||||
{
|
||||
GObject *map;
|
||||
map = g_object_new (GVC_TYPE_CHANNEL_MAP, NULL);
|
||||
|
||||
set_from_pa_map (GVC_CHANNEL_MAP (map), pa_map);
|
||||
|
||||
return GVC_CHANNEL_MAP (map);
|
||||
}
|
73
src/gvc/gvc-channel-map.h
Normal file
73
src/gvc/gvc-channel-map.h
Normal file
@ -0,0 +1,73 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __GVC_CHANNEL_MAP_H
|
||||
#define __GVC_CHANNEL_MAP_H
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <gvc-pulseaudio-fake.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GVC_TYPE_CHANNEL_MAP (gvc_channel_map_get_type ())
|
||||
#define GVC_CHANNEL_MAP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_CHANNEL_MAP, GvcChannelMap))
|
||||
#define GVC_CHANNEL_MAP_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_CHANNEL_MAP, GvcChannelMapClass))
|
||||
#define GVC_IS_CHANNEL_MAP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_CHANNEL_MAP))
|
||||
#define GVC_IS_CHANNEL_MAP_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_CHANNEL_MAP))
|
||||
#define GVC_CHANNEL_MAP_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_CHANNEL_MAP, GvcChannelMapClass))
|
||||
|
||||
typedef struct GvcChannelMapPrivate GvcChannelMapPrivate;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GObject parent;
|
||||
GvcChannelMapPrivate *priv;
|
||||
} GvcChannelMap;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
void (*volume_changed) (GvcChannelMap *channel_map, gboolean set);
|
||||
} GvcChannelMapClass;
|
||||
|
||||
enum {
|
||||
VOLUME,
|
||||
BALANCE,
|
||||
FADE,
|
||||
LFE,
|
||||
NUM_TYPES
|
||||
};
|
||||
|
||||
GType gvc_channel_map_get_type (void);
|
||||
|
||||
GvcChannelMap * gvc_channel_map_new (void);
|
||||
guint gvc_channel_map_get_num_channels (const GvcChannelMap *map);
|
||||
const gdouble * gvc_channel_map_get_volume (GvcChannelMap *map);
|
||||
gboolean gvc_channel_map_can_balance (const GvcChannelMap *map);
|
||||
gboolean gvc_channel_map_can_fade (const GvcChannelMap *map);
|
||||
gboolean gvc_channel_map_has_position (const GvcChannelMap *map,
|
||||
pa_channel_position_t position);
|
||||
#define gvc_channel_map_has_lfe(x) gvc_channel_map_has_position (x, PA_CHANNEL_POSITION_LFE)
|
||||
|
||||
const char * gvc_channel_map_get_mapping (const GvcChannelMap *map);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GVC_CHANNEL_MAP_H */
|
35
src/gvc/gvc-mixer-card-private.h
Normal file
35
src/gvc/gvc-mixer-card-private.h
Normal file
@ -0,0 +1,35 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008-2009 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __GVC_MIXER_CARD_PRIVATE_H
|
||||
#define __GVC_MIXER_CARD_PRIVATE_H
|
||||
|
||||
#include <pulse/pulseaudio.h>
|
||||
#include "gvc-mixer-card.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
GvcMixerCard * gvc_mixer_card_new (pa_context *context,
|
||||
guint index);
|
||||
pa_context * gvc_mixer_card_get_pa_context (GvcMixerCard *card);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GVC_MIXER_CARD_PRIVATE_H */
|
506
src/gvc/gvc-mixer-card.c
Normal file
506
src/gvc/gvc-mixer-card.c
Normal file
@ -0,0 +1,506 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 William Jon McCann
|
||||
* Copyright (C) 2009 Bastien Nocera
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib/gi18n-lib.h>
|
||||
|
||||
#include <pulse/pulseaudio.h>
|
||||
|
||||
#include "gvc-mixer-card.h"
|
||||
#include "gvc-mixer-card-private.h"
|
||||
|
||||
#define GVC_MIXER_CARD_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_CARD, GvcMixerCardPrivate))
|
||||
|
||||
static guint32 card_serial = 1;
|
||||
|
||||
struct GvcMixerCardPrivate
|
||||
{
|
||||
pa_context *pa_context;
|
||||
guint id;
|
||||
guint index;
|
||||
char *name;
|
||||
char *icon_name;
|
||||
char *profile;
|
||||
char *target_profile;
|
||||
char *human_profile;
|
||||
GList *profiles;
|
||||
pa_operation *profile_op;
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
PROP_ID,
|
||||
PROP_PA_CONTEXT,
|
||||
PROP_INDEX,
|
||||
PROP_NAME,
|
||||
PROP_ICON_NAME,
|
||||
PROP_PROFILE,
|
||||
PROP_HUMAN_PROFILE,
|
||||
};
|
||||
|
||||
static void gvc_mixer_card_class_init (GvcMixerCardClass *klass);
|
||||
static void gvc_mixer_card_init (GvcMixerCard *mixer_card);
|
||||
static void gvc_mixer_card_finalize (GObject *object);
|
||||
|
||||
G_DEFINE_TYPE (GvcMixerCard, gvc_mixer_card, G_TYPE_OBJECT)
|
||||
|
||||
static guint32
|
||||
get_next_card_serial (void)
|
||||
{
|
||||
guint32 serial;
|
||||
|
||||
serial = card_serial++;
|
||||
|
||||
if ((gint32)card_serial < 0) {
|
||||
card_serial = 1;
|
||||
}
|
||||
|
||||
return serial;
|
||||
}
|
||||
|
||||
pa_context *
|
||||
gvc_mixer_card_get_pa_context (GvcMixerCard *card)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_CARD (card), 0);
|
||||
return card->priv->pa_context;
|
||||
}
|
||||
|
||||
guint
|
||||
gvc_mixer_card_get_index (GvcMixerCard *card)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_CARD (card), 0);
|
||||
return card->priv->index;
|
||||
}
|
||||
|
||||
guint
|
||||
gvc_mixer_card_get_id (GvcMixerCard *card)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_CARD (card), 0);
|
||||
return card->priv->id;
|
||||
}
|
||||
|
||||
const char *
|
||||
gvc_mixer_card_get_name (GvcMixerCard *card)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_CARD (card), NULL);
|
||||
return card->priv->name;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_card_set_name (GvcMixerCard *card,
|
||||
const char *name)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
|
||||
|
||||
g_free (card->priv->name);
|
||||
card->priv->name = g_strdup (name);
|
||||
g_object_notify (G_OBJECT (card), "name");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
const char *
|
||||
gvc_mixer_card_get_icon_name (GvcMixerCard *card)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_CARD (card), NULL);
|
||||
return card->priv->icon_name;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_card_set_icon_name (GvcMixerCard *card,
|
||||
const char *icon_name)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
|
||||
|
||||
g_free (card->priv->icon_name);
|
||||
card->priv->icon_name = g_strdup (icon_name);
|
||||
g_object_notify (G_OBJECT (card), "icon-name");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* gvc_mixer_card_get_profile: (skip)
|
||||
*
|
||||
* @card:
|
||||
*
|
||||
* Returns:
|
||||
*/
|
||||
GvcMixerCardProfile *
|
||||
gvc_mixer_card_get_profile (GvcMixerCard *card)
|
||||
{
|
||||
GList *l;
|
||||
|
||||
g_return_val_if_fail (GVC_IS_MIXER_CARD (card), NULL);
|
||||
g_return_val_if_fail (card->priv->profiles != NULL, FALSE);
|
||||
|
||||
for (l = card->priv->profiles; l != NULL; l = l->next) {
|
||||
GvcMixerCardProfile *p = l->data;
|
||||
if (g_str_equal (card->priv->profile, p->profile)) {
|
||||
return p;
|
||||
}
|
||||
}
|
||||
|
||||
g_assert_not_reached ();
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_card_set_profile (GvcMixerCard *card,
|
||||
const char *profile)
|
||||
{
|
||||
GList *l;
|
||||
|
||||
g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
|
||||
g_return_val_if_fail (card->priv->profiles != NULL, FALSE);
|
||||
|
||||
g_free (card->priv->profile);
|
||||
card->priv->profile = g_strdup (profile);
|
||||
|
||||
g_free (card->priv->human_profile);
|
||||
card->priv->human_profile = NULL;
|
||||
|
||||
for (l = card->priv->profiles; l != NULL; l = l->next) {
|
||||
GvcMixerCardProfile *p = l->data;
|
||||
if (g_str_equal (card->priv->profile, p->profile)) {
|
||||
card->priv->human_profile = g_strdup (p->human_profile);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_object_notify (G_OBJECT (card), "profile");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
_pa_context_set_card_profile_by_index_cb (pa_context *context,
|
||||
int success,
|
||||
void *userdata)
|
||||
{
|
||||
GvcMixerCard *card = GVC_MIXER_CARD (userdata);
|
||||
|
||||
g_assert (card->priv->target_profile);
|
||||
|
||||
if (success > 0) {
|
||||
gvc_mixer_card_set_profile (card, card->priv->target_profile);
|
||||
} else {
|
||||
g_debug ("Failed to switch profile on '%s' from '%s' to '%s'",
|
||||
card->priv->name,
|
||||
card->priv->profile,
|
||||
card->priv->target_profile);
|
||||
}
|
||||
g_free (card->priv->target_profile);
|
||||
card->priv->target_profile = NULL;
|
||||
|
||||
pa_operation_unref (card->priv->profile_op);
|
||||
card->priv->profile_op = NULL;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_card_change_profile (GvcMixerCard *card,
|
||||
const char *profile)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
|
||||
g_return_val_if_fail (card->priv->profiles != NULL, FALSE);
|
||||
|
||||
/* Same profile, or already requested? */
|
||||
if (g_strcmp0 (card->priv->profile, profile) == 0)
|
||||
return TRUE;
|
||||
if (g_strcmp0 (profile, card->priv->target_profile) == 0)
|
||||
return TRUE;
|
||||
if (card->priv->profile_op != NULL) {
|
||||
pa_operation_cancel (card->priv->profile_op);
|
||||
pa_operation_unref (card->priv->profile_op);
|
||||
card->priv->profile_op = NULL;
|
||||
}
|
||||
|
||||
if (card->priv->profile != NULL) {
|
||||
g_free (card->priv->target_profile);
|
||||
card->priv->target_profile = g_strdup (profile);
|
||||
|
||||
card->priv->profile_op = pa_context_set_card_profile_by_index (card->priv->pa_context,
|
||||
card->priv->index,
|
||||
card->priv->target_profile,
|
||||
_pa_context_set_card_profile_by_index_cb,
|
||||
card);
|
||||
|
||||
if (card->priv->profile_op == NULL) {
|
||||
g_warning ("pa_context_set_card_profile_by_index() failed");
|
||||
return FALSE;
|
||||
}
|
||||
} else {
|
||||
g_assert (card->priv->human_profile == NULL);
|
||||
card->priv->profile = g_strdup (profile);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
const GList *
|
||||
gvc_mixer_card_get_profiles (GvcMixerCard *card)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
|
||||
return card->priv->profiles;
|
||||
}
|
||||
|
||||
static int
|
||||
sort_profiles (GvcMixerCardProfile *a,
|
||||
GvcMixerCardProfile *b)
|
||||
{
|
||||
if (a->priority == b->priority)
|
||||
return 0;
|
||||
if (a->priority > b->priority)
|
||||
return 1;
|
||||
return -1;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_card_set_profiles (GvcMixerCard *card,
|
||||
GList *profiles)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_CARD (card), FALSE);
|
||||
g_return_val_if_fail (card->priv->profiles == NULL, FALSE);
|
||||
|
||||
card->priv->profiles = g_list_sort (profiles, (GCompareFunc) sort_profiles);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_card_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
GvcMixerCard *self = GVC_MIXER_CARD (object);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_PA_CONTEXT:
|
||||
self->priv->pa_context = g_value_get_pointer (value);
|
||||
break;
|
||||
case PROP_INDEX:
|
||||
self->priv->index = g_value_get_ulong (value);
|
||||
break;
|
||||
case PROP_ID:
|
||||
self->priv->id = g_value_get_ulong (value);
|
||||
break;
|
||||
case PROP_NAME:
|
||||
gvc_mixer_card_set_name (self, g_value_get_string (value));
|
||||
break;
|
||||
case PROP_ICON_NAME:
|
||||
gvc_mixer_card_set_icon_name (self, g_value_get_string (value));
|
||||
break;
|
||||
case PROP_PROFILE:
|
||||
gvc_mixer_card_set_profile (self, g_value_get_string (value));
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_card_get_property (GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
GvcMixerCard *self = GVC_MIXER_CARD (object);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_PA_CONTEXT:
|
||||
g_value_set_pointer (value, self->priv->pa_context);
|
||||
break;
|
||||
case PROP_INDEX:
|
||||
g_value_set_ulong (value, self->priv->index);
|
||||
break;
|
||||
case PROP_ID:
|
||||
g_value_set_ulong (value, self->priv->id);
|
||||
break;
|
||||
case PROP_NAME:
|
||||
g_value_set_string (value, self->priv->name);
|
||||
break;
|
||||
case PROP_ICON_NAME:
|
||||
g_value_set_string (value, self->priv->icon_name);
|
||||
break;
|
||||
case PROP_PROFILE:
|
||||
g_value_set_string (value, self->priv->profile);
|
||||
break;
|
||||
case PROP_HUMAN_PROFILE:
|
||||
g_value_set_string (value, self->priv->human_profile);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static GObject *
|
||||
gvc_mixer_card_constructor (GType type,
|
||||
guint n_construct_properties,
|
||||
GObjectConstructParam *construct_params)
|
||||
{
|
||||
GObject *object;
|
||||
GvcMixerCard *self;
|
||||
|
||||
object = G_OBJECT_CLASS (gvc_mixer_card_parent_class)->constructor (type, n_construct_properties, construct_params);
|
||||
|
||||
self = GVC_MIXER_CARD (object);
|
||||
|
||||
self->priv->id = get_next_card_serial ();
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_card_class_init (GvcMixerCardClass *klass)
|
||||
{
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
gobject_class->constructor = gvc_mixer_card_constructor;
|
||||
gobject_class->finalize = gvc_mixer_card_finalize;
|
||||
|
||||
gobject_class->set_property = gvc_mixer_card_set_property;
|
||||
gobject_class->get_property = gvc_mixer_card_get_property;
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_INDEX,
|
||||
g_param_spec_ulong ("index",
|
||||
"Index",
|
||||
"The index for this card",
|
||||
0, G_MAXULONG, 0,
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_ID,
|
||||
g_param_spec_ulong ("id",
|
||||
"id",
|
||||
"The id for this card",
|
||||
0, G_MAXULONG, 0,
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_PA_CONTEXT,
|
||||
g_param_spec_pointer ("pa-context",
|
||||
"PulseAudio context",
|
||||
"The PulseAudio context for this card",
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_NAME,
|
||||
g_param_spec_string ("name",
|
||||
"Name",
|
||||
"Name to display for this card",
|
||||
NULL,
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_ICON_NAME,
|
||||
g_param_spec_string ("icon-name",
|
||||
"Icon Name",
|
||||
"Name of icon to display for this card",
|
||||
NULL,
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_PROFILE,
|
||||
g_param_spec_string ("profile",
|
||||
"Profile",
|
||||
"Name of current profile for this card",
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_HUMAN_PROFILE,
|
||||
g_param_spec_string ("human-profile",
|
||||
"Profile (Human readable)",
|
||||
"Name of current profile for this card in human readable form",
|
||||
NULL,
|
||||
G_PARAM_READABLE));
|
||||
|
||||
g_type_class_add_private (klass, sizeof (GvcMixerCardPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_card_init (GvcMixerCard *card)
|
||||
{
|
||||
card->priv = GVC_MIXER_CARD_GET_PRIVATE (card);
|
||||
}
|
||||
|
||||
GvcMixerCard *
|
||||
gvc_mixer_card_new (pa_context *context,
|
||||
guint index)
|
||||
{
|
||||
GObject *object;
|
||||
|
||||
object = g_object_new (GVC_TYPE_MIXER_CARD,
|
||||
"index", index,
|
||||
"pa-context", context,
|
||||
NULL);
|
||||
return GVC_MIXER_CARD (object);
|
||||
}
|
||||
|
||||
static void
|
||||
free_profile (GvcMixerCardProfile *p)
|
||||
{
|
||||
g_free (p->profile);
|
||||
g_free (p->human_profile);
|
||||
g_free (p->status);
|
||||
g_free (p);
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_card_finalize (GObject *object)
|
||||
{
|
||||
GvcMixerCard *mixer_card;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (GVC_IS_MIXER_CARD (object));
|
||||
|
||||
mixer_card = GVC_MIXER_CARD (object);
|
||||
|
||||
g_return_if_fail (mixer_card->priv != NULL);
|
||||
|
||||
g_free (mixer_card->priv->name);
|
||||
mixer_card->priv->name = NULL;
|
||||
|
||||
g_free (mixer_card->priv->icon_name);
|
||||
mixer_card->priv->icon_name = NULL;
|
||||
|
||||
g_free (mixer_card->priv->target_profile);
|
||||
mixer_card->priv->target_profile = NULL;
|
||||
|
||||
g_free (mixer_card->priv->profile);
|
||||
mixer_card->priv->profile = NULL;
|
||||
|
||||
g_free (mixer_card->priv->human_profile);
|
||||
mixer_card->priv->human_profile = NULL;
|
||||
|
||||
g_list_foreach (mixer_card->priv->profiles, (GFunc) free_profile, NULL);
|
||||
g_list_free (mixer_card->priv->profiles);
|
||||
mixer_card->priv->profiles = NULL;
|
||||
|
||||
G_OBJECT_CLASS (gvc_mixer_card_parent_class)->finalize (object);
|
||||
}
|
||||
|
83
src/gvc/gvc-mixer-card.h
Normal file
83
src/gvc/gvc-mixer-card.h
Normal file
@ -0,0 +1,83 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008-2009 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __GVC_MIXER_CARD_H
|
||||
#define __GVC_MIXER_CARD_H
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GVC_TYPE_MIXER_CARD (gvc_mixer_card_get_type ())
|
||||
#define GVC_MIXER_CARD(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_CARD, GvcMixerCard))
|
||||
#define GVC_MIXER_CARD_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_CARD, GvcMixerCardClass))
|
||||
#define GVC_IS_MIXER_CARD(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_CARD))
|
||||
#define GVC_IS_MIXER_CARD_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_CARD))
|
||||
#define GVC_MIXER_CARD_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_CARD, GvcMixerCardClass))
|
||||
|
||||
typedef struct GvcMixerCardPrivate GvcMixerCardPrivate;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GObject parent;
|
||||
GvcMixerCardPrivate *priv;
|
||||
} GvcMixerCard;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
|
||||
/* vtable */
|
||||
} GvcMixerCardClass;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char *profile;
|
||||
char *human_profile;
|
||||
char *status;
|
||||
guint priority;
|
||||
guint n_sinks, n_sources;
|
||||
} GvcMixerCardProfile;
|
||||
|
||||
GType gvc_mixer_card_get_type (void);
|
||||
|
||||
guint gvc_mixer_card_get_id (GvcMixerCard *card);
|
||||
guint gvc_mixer_card_get_index (GvcMixerCard *card);
|
||||
const char * gvc_mixer_card_get_name (GvcMixerCard *card);
|
||||
const char * gvc_mixer_card_get_icon_name (GvcMixerCard *card);
|
||||
GvcMixerCardProfile * gvc_mixer_card_get_profile (GvcMixerCard *card);
|
||||
const GList * gvc_mixer_card_get_profiles (GvcMixerCard *card);
|
||||
|
||||
gboolean gvc_mixer_card_change_profile (GvcMixerCard *card,
|
||||
const char *profile);
|
||||
|
||||
/* private */
|
||||
gboolean gvc_mixer_card_set_name (GvcMixerCard *card,
|
||||
const char *name);
|
||||
gboolean gvc_mixer_card_set_icon_name (GvcMixerCard *card,
|
||||
const char *name);
|
||||
gboolean gvc_mixer_card_set_profile (GvcMixerCard *card,
|
||||
const char *profile);
|
||||
gboolean gvc_mixer_card_set_profiles (GvcMixerCard *card,
|
||||
GList *profiles);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GVC_MIXER_CARD_H */
|
35
src/gvc/gvc-mixer-control-private.h
Normal file
35
src/gvc/gvc-mixer-control-private.h
Normal file
@ -0,0 +1,35 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __GVC_MIXER_CONTROL_PRIVATE_H
|
||||
#define __GVC_MIXER_CONTROL_PRIVATE_H
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <pulse/pulseaudio.h>
|
||||
#include "gvc-mixer-stream.h"
|
||||
#include "gvc-mixer-card.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
pa_context * gvc_mixer_control_get_pa_context (GvcMixerControl *control);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GVC_MIXER_CONTROL_PRIVATE_H */
|
2232
src/gvc/gvc-mixer-control.c
Normal file
2232
src/gvc/gvc-mixer-control.c
Normal file
File diff suppressed because it is too large
Load Diff
96
src/gvc/gvc-mixer-control.h
Normal file
96
src/gvc/gvc-mixer-control.h
Normal file
@ -0,0 +1,96 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __GVC_MIXER_CONTROL_H
|
||||
#define __GVC_MIXER_CONTROL_H
|
||||
|
||||
#include <glib-object.h>
|
||||
#include "gvc-mixer-stream.h"
|
||||
#include "gvc-mixer-card.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GVC_TYPE_MIXER_CONTROL (gvc_mixer_control_get_type ())
|
||||
#define GVC_MIXER_CONTROL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_CONTROL, GvcMixerControl))
|
||||
#define GVC_MIXER_CONTROL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_CONTROL, GvcMixerControlClass))
|
||||
#define GVC_IS_MIXER_CONTROL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_CONTROL))
|
||||
#define GVC_IS_MIXER_CONTROL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_CONTROL))
|
||||
#define GVC_MIXER_CONTROL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_CONTROL, GvcMixerControlClass))
|
||||
|
||||
typedef struct GvcMixerControlPrivate GvcMixerControlPrivate;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GObject parent;
|
||||
GvcMixerControlPrivate *priv;
|
||||
} GvcMixerControl;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
|
||||
void (*connecting) (GvcMixerControl *control);
|
||||
void (*ready) (GvcMixerControl *control);
|
||||
void (*stream_added) (GvcMixerControl *control,
|
||||
guint id);
|
||||
void (*stream_removed) (GvcMixerControl *control,
|
||||
guint id);
|
||||
void (*card_added) (GvcMixerControl *control,
|
||||
guint id);
|
||||
void (*card_removed) (GvcMixerControl *control,
|
||||
guint id);
|
||||
void (*default_sink_changed) (GvcMixerControl *control,
|
||||
guint id);
|
||||
void (*default_source_changed) (GvcMixerControl *control,
|
||||
guint id);
|
||||
} GvcMixerControlClass;
|
||||
|
||||
GType gvc_mixer_control_get_type (void);
|
||||
|
||||
GvcMixerControl * gvc_mixer_control_new (const char *name);
|
||||
|
||||
gboolean gvc_mixer_control_open (GvcMixerControl *control);
|
||||
gboolean gvc_mixer_control_close (GvcMixerControl *control);
|
||||
gboolean gvc_mixer_control_is_ready (GvcMixerControl *control);
|
||||
|
||||
GSList * gvc_mixer_control_get_cards (GvcMixerControl *control);
|
||||
GSList * gvc_mixer_control_get_streams (GvcMixerControl *control);
|
||||
GSList * gvc_mixer_control_get_sinks (GvcMixerControl *control);
|
||||
GSList * gvc_mixer_control_get_sources (GvcMixerControl *control);
|
||||
GSList * gvc_mixer_control_get_sink_inputs (GvcMixerControl *control);
|
||||
GSList * gvc_mixer_control_get_source_outputs (GvcMixerControl *control);
|
||||
|
||||
GvcMixerStream * gvc_mixer_control_lookup_stream_id (GvcMixerControl *control,
|
||||
guint id);
|
||||
GvcMixerCard * gvc_mixer_control_lookup_card_id (GvcMixerControl *control,
|
||||
guint id);
|
||||
|
||||
GvcMixerStream * gvc_mixer_control_get_default_sink (GvcMixerControl *control);
|
||||
GvcMixerStream * gvc_mixer_control_get_default_source (GvcMixerControl *control);
|
||||
GvcMixerStream * gvc_mixer_control_get_event_sink_input (GvcMixerControl *control);
|
||||
|
||||
gboolean gvc_mixer_control_set_default_sink (GvcMixerControl *control,
|
||||
GvcMixerStream *stream);
|
||||
gboolean gvc_mixer_control_set_default_source (GvcMixerControl *control,
|
||||
GvcMixerStream *stream);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GVC_MIXER_CONTROL_H */
|
250
src/gvc/gvc-mixer-event-role.c
Normal file
250
src/gvc/gvc-mixer-event-role.c
Normal file
@ -0,0 +1,250 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 William Jon McCann
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib/gi18n-lib.h>
|
||||
|
||||
#include <pulse/pulseaudio.h>
|
||||
#include <pulse/ext-stream-restore.h>
|
||||
|
||||
#include "gvc-mixer-event-role.h"
|
||||
#include "gvc-mixer-stream-private.h"
|
||||
#include "gvc-channel-map-private.h"
|
||||
|
||||
#define GVC_MIXER_EVENT_ROLE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_EVENT_ROLE, GvcMixerEventRolePrivate))
|
||||
|
||||
struct GvcMixerEventRolePrivate
|
||||
{
|
||||
char *device;
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
PROP_DEVICE
|
||||
};
|
||||
|
||||
static void gvc_mixer_event_role_class_init (GvcMixerEventRoleClass *klass);
|
||||
static void gvc_mixer_event_role_init (GvcMixerEventRole *mixer_event_role);
|
||||
static void gvc_mixer_event_role_finalize (GObject *object);
|
||||
|
||||
G_DEFINE_TYPE (GvcMixerEventRole, gvc_mixer_event_role, GVC_TYPE_MIXER_STREAM)
|
||||
|
||||
static gboolean
|
||||
update_settings (GvcMixerEventRole *role,
|
||||
gboolean is_muted,
|
||||
gpointer *op)
|
||||
{
|
||||
pa_operation *o;
|
||||
guint index;
|
||||
const GvcChannelMap *map;
|
||||
pa_context *context;
|
||||
pa_ext_stream_restore_info info;
|
||||
|
||||
index = gvc_mixer_stream_get_index (GVC_MIXER_STREAM (role));
|
||||
|
||||
map = gvc_mixer_stream_get_channel_map (GVC_MIXER_STREAM(role));
|
||||
|
||||
info.volume = *gvc_channel_map_get_cvolume(map);
|
||||
info.name = "sink-input-by-media-role:event";
|
||||
info.channel_map = *gvc_channel_map_get_pa_channel_map(map);
|
||||
info.device = role->priv->device;
|
||||
info.mute = is_muted;
|
||||
|
||||
context = gvc_mixer_stream_get_pa_context (GVC_MIXER_STREAM (role));
|
||||
|
||||
o = pa_ext_stream_restore_write (context,
|
||||
PA_UPDATE_REPLACE,
|
||||
&info,
|
||||
1,
|
||||
TRUE,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
if (o == NULL) {
|
||||
g_warning ("pa_ext_stream_restore_write() failed");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (op != NULL)
|
||||
*op = o;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gvc_mixer_event_role_push_volume (GvcMixerStream *stream, gpointer *op)
|
||||
{
|
||||
return update_settings (GVC_MIXER_EVENT_ROLE (stream),
|
||||
gvc_mixer_stream_get_is_muted (stream), op);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gvc_mixer_event_role_change_is_muted (GvcMixerStream *stream,
|
||||
gboolean is_muted)
|
||||
{
|
||||
return update_settings (GVC_MIXER_EVENT_ROLE (stream),
|
||||
is_muted, NULL);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gvc_mixer_event_role_set_device (GvcMixerEventRole *role,
|
||||
const char *device)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_EVENT_ROLE (role), FALSE);
|
||||
|
||||
g_free (role->priv->device);
|
||||
role->priv->device = g_strdup (device);
|
||||
g_object_notify (G_OBJECT (role), "device");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_event_role_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
GvcMixerEventRole *self = GVC_MIXER_EVENT_ROLE (object);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_DEVICE:
|
||||
gvc_mixer_event_role_set_device (self, g_value_get_string (value));
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_event_role_get_property (GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
GvcMixerEventRole *self = GVC_MIXER_EVENT_ROLE (object);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_DEVICE:
|
||||
g_value_set_string (value, self->priv->device);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static GObject *
|
||||
gvc_mixer_event_role_constructor (GType type,
|
||||
guint n_construct_properties,
|
||||
GObjectConstructParam *construct_params)
|
||||
{
|
||||
GObject *object;
|
||||
GvcMixerEventRole *self;
|
||||
|
||||
object = G_OBJECT_CLASS (gvc_mixer_event_role_parent_class)->constructor (type, n_construct_properties, construct_params);
|
||||
|
||||
self = GVC_MIXER_EVENT_ROLE (object);
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_event_role_class_init (GvcMixerEventRoleClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
|
||||
|
||||
object_class->constructor = gvc_mixer_event_role_constructor;
|
||||
object_class->finalize = gvc_mixer_event_role_finalize;
|
||||
object_class->set_property = gvc_mixer_event_role_set_property;
|
||||
object_class->get_property = gvc_mixer_event_role_get_property;
|
||||
|
||||
stream_class->push_volume = gvc_mixer_event_role_push_volume;
|
||||
stream_class->change_is_muted = gvc_mixer_event_role_change_is_muted;
|
||||
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_DEVICE,
|
||||
g_param_spec_string ("device",
|
||||
"Device",
|
||||
"Device",
|
||||
NULL,
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
|
||||
|
||||
g_type_class_add_private (klass, sizeof (GvcMixerEventRolePrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_event_role_init (GvcMixerEventRole *event_role)
|
||||
{
|
||||
event_role->priv = GVC_MIXER_EVENT_ROLE_GET_PRIVATE (event_role);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_event_role_finalize (GObject *object)
|
||||
{
|
||||
GvcMixerEventRole *mixer_event_role;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (GVC_IS_MIXER_EVENT_ROLE (object));
|
||||
|
||||
mixer_event_role = GVC_MIXER_EVENT_ROLE (object);
|
||||
|
||||
g_return_if_fail (mixer_event_role->priv != NULL);
|
||||
|
||||
g_free (mixer_event_role->priv->device);
|
||||
|
||||
G_OBJECT_CLASS (gvc_mixer_event_role_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
/**
|
||||
* gvc_mixer_event_role_new: (skip)
|
||||
*
|
||||
* @context:
|
||||
* @index:
|
||||
* @channel_map:
|
||||
*
|
||||
* Returns:
|
||||
*/
|
||||
GvcMixerStream *
|
||||
gvc_mixer_event_role_new (pa_context *context,
|
||||
const char *device,
|
||||
GvcChannelMap *channel_map)
|
||||
{
|
||||
GObject *object;
|
||||
|
||||
object = g_object_new (GVC_TYPE_MIXER_EVENT_ROLE,
|
||||
"pa-context", context,
|
||||
"index", 0,
|
||||
"device", device,
|
||||
"channel-map", channel_map,
|
||||
NULL);
|
||||
|
||||
return GVC_MIXER_STREAM (object);
|
||||
}
|
57
src/gvc/gvc-mixer-event-role.h
Normal file
57
src/gvc/gvc-mixer-event-role.h
Normal file
@ -0,0 +1,57 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __GVC_MIXER_EVENT_ROLE_H
|
||||
#define __GVC_MIXER_EVENT_ROLE_H
|
||||
|
||||
#include <glib-object.h>
|
||||
#include "gvc-mixer-stream.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GVC_TYPE_MIXER_EVENT_ROLE (gvc_mixer_event_role_get_type ())
|
||||
#define GVC_MIXER_EVENT_ROLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_EVENT_ROLE, GvcMixerEventRole))
|
||||
#define GVC_MIXER_EVENT_ROLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_EVENT_ROLE, GvcMixerEventRoleClass))
|
||||
#define GVC_IS_MIXER_EVENT_ROLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_EVENT_ROLE))
|
||||
#define GVC_IS_MIXER_EVENT_ROLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_EVENT_ROLE))
|
||||
#define GVC_MIXER_EVENT_ROLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_EVENT_ROLE, GvcMixerEventRoleClass))
|
||||
|
||||
typedef struct GvcMixerEventRolePrivate GvcMixerEventRolePrivate;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GvcMixerStream parent;
|
||||
GvcMixerEventRolePrivate *priv;
|
||||
} GvcMixerEventRole;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GvcMixerStreamClass parent_class;
|
||||
} GvcMixerEventRoleClass;
|
||||
|
||||
GType gvc_mixer_event_role_get_type (void);
|
||||
|
||||
GvcMixerStream * gvc_mixer_event_role_new (pa_context *context,
|
||||
const char *device,
|
||||
GvcChannelMap *channel_map);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GVC_MIXER_EVENT_ROLE_H */
|
199
src/gvc/gvc-mixer-sink-input.c
Normal file
199
src/gvc/gvc-mixer-sink-input.c
Normal file
@ -0,0 +1,199 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 William Jon McCann
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib/gi18n-lib.h>
|
||||
|
||||
#include <pulse/pulseaudio.h>
|
||||
|
||||
#include "gvc-mixer-sink-input.h"
|
||||
#include "gvc-mixer-stream-private.h"
|
||||
#include "gvc-channel-map-private.h"
|
||||
|
||||
#define GVC_MIXER_SINK_INPUT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_SINK_INPUT, GvcMixerSinkInputPrivate))
|
||||
|
||||
struct GvcMixerSinkInputPrivate
|
||||
{
|
||||
gpointer dummy;
|
||||
};
|
||||
|
||||
static void gvc_mixer_sink_input_class_init (GvcMixerSinkInputClass *klass);
|
||||
static void gvc_mixer_sink_input_init (GvcMixerSinkInput *mixer_sink_input);
|
||||
static void gvc_mixer_sink_input_finalize (GObject *object);
|
||||
static void gvc_mixer_sink_input_dispose (GObject *object);
|
||||
|
||||
G_DEFINE_TYPE (GvcMixerSinkInput, gvc_mixer_sink_input, GVC_TYPE_MIXER_STREAM)
|
||||
|
||||
static gboolean
|
||||
gvc_mixer_sink_input_push_volume (GvcMixerStream *stream, gpointer *op)
|
||||
{
|
||||
pa_operation *o;
|
||||
guint index;
|
||||
const GvcChannelMap *map;
|
||||
pa_context *context;
|
||||
const pa_cvolume *cv;
|
||||
guint num_channels;
|
||||
|
||||
index = gvc_mixer_stream_get_index (stream);
|
||||
|
||||
map = gvc_mixer_stream_get_channel_map (stream);
|
||||
num_channels = gvc_channel_map_get_num_channels (map);
|
||||
|
||||
cv = gvc_channel_map_get_cvolume(map);
|
||||
|
||||
context = gvc_mixer_stream_get_pa_context (stream);
|
||||
|
||||
o = pa_context_set_sink_input_volume (context,
|
||||
index,
|
||||
cv,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
if (o == NULL) {
|
||||
g_warning ("pa_context_set_sink_input_volume() failed");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
*op = o;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gvc_mixer_sink_input_change_is_muted (GvcMixerStream *stream,
|
||||
gboolean is_muted)
|
||||
{
|
||||
pa_operation *o;
|
||||
guint index;
|
||||
pa_context *context;
|
||||
|
||||
index = gvc_mixer_stream_get_index (stream);
|
||||
context = gvc_mixer_stream_get_pa_context (stream);
|
||||
|
||||
o = pa_context_set_sink_input_mute (context,
|
||||
index,
|
||||
is_muted,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
if (o == NULL) {
|
||||
g_warning ("pa_context_set_sink_input_mute_by_index() failed");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
pa_operation_unref(o);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static GObject *
|
||||
gvc_mixer_sink_input_constructor (GType type,
|
||||
guint n_construct_properties,
|
||||
GObjectConstructParam *construct_params)
|
||||
{
|
||||
GObject *object;
|
||||
GvcMixerSinkInput *self;
|
||||
|
||||
object = G_OBJECT_CLASS (gvc_mixer_sink_input_parent_class)->constructor (type, n_construct_properties, construct_params);
|
||||
|
||||
self = GVC_MIXER_SINK_INPUT (object);
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_sink_input_class_init (GvcMixerSinkInputClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
|
||||
|
||||
object_class->constructor = gvc_mixer_sink_input_constructor;
|
||||
object_class->dispose = gvc_mixer_sink_input_dispose;
|
||||
object_class->finalize = gvc_mixer_sink_input_finalize;
|
||||
|
||||
stream_class->push_volume = gvc_mixer_sink_input_push_volume;
|
||||
stream_class->change_is_muted = gvc_mixer_sink_input_change_is_muted;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (GvcMixerSinkInputPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_sink_input_init (GvcMixerSinkInput *sink_input)
|
||||
{
|
||||
sink_input->priv = GVC_MIXER_SINK_INPUT_GET_PRIVATE (sink_input);
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_sink_input_dispose (GObject *object)
|
||||
{
|
||||
GvcMixerSinkInput *mixer_sink_input;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (GVC_IS_MIXER_SINK_INPUT (object));
|
||||
|
||||
mixer_sink_input = GVC_MIXER_SINK_INPUT (object);
|
||||
|
||||
G_OBJECT_CLASS (gvc_mixer_sink_input_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_sink_input_finalize (GObject *object)
|
||||
{
|
||||
GvcMixerSinkInput *mixer_sink_input;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (GVC_IS_MIXER_SINK_INPUT (object));
|
||||
|
||||
mixer_sink_input = GVC_MIXER_SINK_INPUT (object);
|
||||
|
||||
g_return_if_fail (mixer_sink_input->priv != NULL);
|
||||
G_OBJECT_CLASS (gvc_mixer_sink_input_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
/**
|
||||
* gvc_mixer_sink_input_new: (skip)
|
||||
*
|
||||
* @context:
|
||||
* @index:
|
||||
* @channel_map:
|
||||
*
|
||||
* Returns:
|
||||
*/
|
||||
GvcMixerStream *
|
||||
gvc_mixer_sink_input_new (pa_context *context,
|
||||
guint index,
|
||||
GvcChannelMap *channel_map)
|
||||
{
|
||||
GObject *object;
|
||||
|
||||
object = g_object_new (GVC_TYPE_MIXER_SINK_INPUT,
|
||||
"pa-context", context,
|
||||
"index", index,
|
||||
"channel-map", channel_map,
|
||||
NULL);
|
||||
|
||||
return GVC_MIXER_STREAM (object);
|
||||
}
|
57
src/gvc/gvc-mixer-sink-input.h
Normal file
57
src/gvc/gvc-mixer-sink-input.h
Normal file
@ -0,0 +1,57 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __GVC_MIXER_SINK_INPUT_H
|
||||
#define __GVC_MIXER_SINK_INPUT_H
|
||||
|
||||
#include <glib-object.h>
|
||||
#include "gvc-mixer-stream.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GVC_TYPE_MIXER_SINK_INPUT (gvc_mixer_sink_input_get_type ())
|
||||
#define GVC_MIXER_SINK_INPUT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_SINK_INPUT, GvcMixerSinkInput))
|
||||
#define GVC_MIXER_SINK_INPUT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_SINK_INPUT, GvcMixerSinkInputClass))
|
||||
#define GVC_IS_MIXER_SINK_INPUT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_SINK_INPUT))
|
||||
#define GVC_IS_MIXER_SINK_INPUT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_SINK_INPUT))
|
||||
#define GVC_MIXER_SINK_INPUT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_SINK_INPUT, GvcMixerSinkInputClass))
|
||||
|
||||
typedef struct GvcMixerSinkInputPrivate GvcMixerSinkInputPrivate;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GvcMixerStream parent;
|
||||
GvcMixerSinkInputPrivate *priv;
|
||||
} GvcMixerSinkInput;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GvcMixerStreamClass parent_class;
|
||||
} GvcMixerSinkInputClass;
|
||||
|
||||
GType gvc_mixer_sink_input_get_type (void);
|
||||
|
||||
GvcMixerStream * gvc_mixer_sink_input_new (pa_context *context,
|
||||
guint index,
|
||||
GvcChannelMap *map);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GVC_MIXER_SINK_INPUT_H */
|
231
src/gvc/gvc-mixer-sink.c
Normal file
231
src/gvc/gvc-mixer-sink.c
Normal file
@ -0,0 +1,231 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 William Jon McCann
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib/gi18n-lib.h>
|
||||
|
||||
#include <pulse/pulseaudio.h>
|
||||
|
||||
#include "gvc-mixer-sink.h"
|
||||
#include "gvc-mixer-stream-private.h"
|
||||
#include "gvc-channel-map-private.h"
|
||||
|
||||
#define GVC_MIXER_SINK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_SINK, GvcMixerSinkPrivate))
|
||||
|
||||
struct GvcMixerSinkPrivate
|
||||
{
|
||||
gpointer dummy;
|
||||
};
|
||||
|
||||
static void gvc_mixer_sink_class_init (GvcMixerSinkClass *klass);
|
||||
static void gvc_mixer_sink_init (GvcMixerSink *mixer_sink);
|
||||
static void gvc_mixer_sink_finalize (GObject *object);
|
||||
static void gvc_mixer_sink_dispose (GObject *object);
|
||||
|
||||
G_DEFINE_TYPE (GvcMixerSink, gvc_mixer_sink, GVC_TYPE_MIXER_STREAM)
|
||||
|
||||
static gboolean
|
||||
gvc_mixer_sink_push_volume (GvcMixerStream *stream, gpointer *op)
|
||||
{
|
||||
pa_operation *o;
|
||||
guint index;
|
||||
const GvcChannelMap *map;
|
||||
pa_context *context;
|
||||
const pa_cvolume *cv;
|
||||
|
||||
index = gvc_mixer_stream_get_index (stream);
|
||||
|
||||
map = gvc_mixer_stream_get_channel_map (stream);
|
||||
|
||||
/* set the volume */
|
||||
cv = gvc_channel_map_get_cvolume(map);
|
||||
|
||||
context = gvc_mixer_stream_get_pa_context (stream);
|
||||
|
||||
o = pa_context_set_sink_volume_by_index (context,
|
||||
index,
|
||||
cv,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
if (o == NULL) {
|
||||
g_warning ("pa_context_set_sink_volume_by_index() failed: %s", pa_strerror(pa_context_errno(context)));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
*op = o;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gvc_mixer_sink_change_is_muted (GvcMixerStream *stream,
|
||||
gboolean is_muted)
|
||||
{
|
||||
pa_operation *o;
|
||||
guint index;
|
||||
pa_context *context;
|
||||
|
||||
index = gvc_mixer_stream_get_index (stream);
|
||||
context = gvc_mixer_stream_get_pa_context (stream);
|
||||
|
||||
o = pa_context_set_sink_mute_by_index (context,
|
||||
index,
|
||||
is_muted,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
if (o == NULL) {
|
||||
g_warning ("pa_context_set_sink_mute_by_index() failed: %s", pa_strerror(pa_context_errno(context)));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
pa_operation_unref(o);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gvc_mixer_sink_change_port (GvcMixerStream *stream,
|
||||
const char *port)
|
||||
{
|
||||
#if PA_MICRO > 15
|
||||
pa_operation *o;
|
||||
guint index;
|
||||
pa_context *context;
|
||||
|
||||
index = gvc_mixer_stream_get_index (stream);
|
||||
context = gvc_mixer_stream_get_pa_context (stream);
|
||||
|
||||
o = pa_context_set_sink_port_by_index (context,
|
||||
index,
|
||||
port,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
if (o == NULL) {
|
||||
g_warning ("pa_context_set_sink_port_by_index() failed: %s", pa_strerror(pa_context_errno(context)));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
pa_operation_unref(o);
|
||||
|
||||
return TRUE;
|
||||
#else
|
||||
return FALSE;
|
||||
#endif /* PA_MICRO > 15 */
|
||||
}
|
||||
|
||||
static GObject *
|
||||
gvc_mixer_sink_constructor (GType type,
|
||||
guint n_construct_properties,
|
||||
GObjectConstructParam *construct_params)
|
||||
{
|
||||
GObject *object;
|
||||
GvcMixerSink *self;
|
||||
|
||||
object = G_OBJECT_CLASS (gvc_mixer_sink_parent_class)->constructor (type, n_construct_properties, construct_params);
|
||||
|
||||
self = GVC_MIXER_SINK (object);
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_sink_class_init (GvcMixerSinkClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
|
||||
|
||||
object_class->constructor = gvc_mixer_sink_constructor;
|
||||
object_class->dispose = gvc_mixer_sink_dispose;
|
||||
object_class->finalize = gvc_mixer_sink_finalize;
|
||||
|
||||
stream_class->push_volume = gvc_mixer_sink_push_volume;
|
||||
stream_class->change_port = gvc_mixer_sink_change_port;
|
||||
stream_class->change_is_muted = gvc_mixer_sink_change_is_muted;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (GvcMixerSinkPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_sink_init (GvcMixerSink *sink)
|
||||
{
|
||||
sink->priv = GVC_MIXER_SINK_GET_PRIVATE (sink);
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_sink_dispose (GObject *object)
|
||||
{
|
||||
GvcMixerSink *mixer_sink;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (GVC_IS_MIXER_SINK (object));
|
||||
|
||||
mixer_sink = GVC_MIXER_SINK (object);
|
||||
|
||||
G_OBJECT_CLASS (gvc_mixer_sink_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_sink_finalize (GObject *object)
|
||||
{
|
||||
GvcMixerSink *mixer_sink;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (GVC_IS_MIXER_SINK (object));
|
||||
|
||||
mixer_sink = GVC_MIXER_SINK (object);
|
||||
|
||||
g_return_if_fail (mixer_sink->priv != NULL);
|
||||
G_OBJECT_CLASS (gvc_mixer_sink_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
/**
|
||||
* gvc_mixer_sink_new: (skip)
|
||||
*
|
||||
* @context:
|
||||
* @index:
|
||||
* @channel_map:
|
||||
*
|
||||
* Returns:
|
||||
*/
|
||||
GvcMixerStream *
|
||||
gvc_mixer_sink_new (pa_context *context,
|
||||
guint index,
|
||||
GvcChannelMap *channel_map)
|
||||
|
||||
{
|
||||
GObject *object;
|
||||
|
||||
object = g_object_new (GVC_TYPE_MIXER_SINK,
|
||||
"pa-context", context,
|
||||
"index", index,
|
||||
"channel-map", channel_map,
|
||||
NULL);
|
||||
|
||||
return GVC_MIXER_STREAM (object);
|
||||
}
|
57
src/gvc/gvc-mixer-sink.h
Normal file
57
src/gvc/gvc-mixer-sink.h
Normal file
@ -0,0 +1,57 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __GVC_MIXER_SINK_H
|
||||
#define __GVC_MIXER_SINK_H
|
||||
|
||||
#include <glib-object.h>
|
||||
#include "gvc-mixer-stream.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GVC_TYPE_MIXER_SINK (gvc_mixer_sink_get_type ())
|
||||
#define GVC_MIXER_SINK(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_SINK, GvcMixerSink))
|
||||
#define GVC_MIXER_SINK_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_SINK, GvcMixerSinkClass))
|
||||
#define GVC_IS_MIXER_SINK(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_SINK))
|
||||
#define GVC_IS_MIXER_SINK_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_SINK))
|
||||
#define GVC_MIXER_SINK_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_SINK, GvcMixerSinkClass))
|
||||
|
||||
typedef struct GvcMixerSinkPrivate GvcMixerSinkPrivate;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GvcMixerStream parent;
|
||||
GvcMixerSinkPrivate *priv;
|
||||
} GvcMixerSink;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GvcMixerStreamClass parent_class;
|
||||
} GvcMixerSinkClass;
|
||||
|
||||
GType gvc_mixer_sink_get_type (void);
|
||||
|
||||
GvcMixerStream * gvc_mixer_sink_new (pa_context *context,
|
||||
guint index,
|
||||
GvcChannelMap *map);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GVC_MIXER_SINK_H */
|
137
src/gvc/gvc-mixer-source-output.c
Normal file
137
src/gvc/gvc-mixer-source-output.c
Normal file
@ -0,0 +1,137 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 William Jon McCann
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib/gi18n-lib.h>
|
||||
|
||||
#include <pulse/pulseaudio.h>
|
||||
|
||||
#include "gvc-mixer-source-output.h"
|
||||
|
||||
#define GVC_MIXER_SOURCE_OUTPUT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_SOURCE_OUTPUT, GvcMixerSourceOutputPrivate))
|
||||
|
||||
struct GvcMixerSourceOutputPrivate
|
||||
{
|
||||
gpointer dummy;
|
||||
};
|
||||
|
||||
static void gvc_mixer_source_output_class_init (GvcMixerSourceOutputClass *klass);
|
||||
static void gvc_mixer_source_output_init (GvcMixerSourceOutput *mixer_source_output);
|
||||
static void gvc_mixer_source_output_finalize (GObject *object);
|
||||
|
||||
G_DEFINE_TYPE (GvcMixerSourceOutput, gvc_mixer_source_output, GVC_TYPE_MIXER_STREAM)
|
||||
|
||||
static gboolean
|
||||
gvc_mixer_source_output_push_volume (GvcMixerStream *stream, gpointer *op)
|
||||
{
|
||||
/* FIXME: */
|
||||
*op = NULL;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gvc_mixer_source_output_change_is_muted (GvcMixerStream *stream,
|
||||
gboolean is_muted)
|
||||
{
|
||||
/* FIXME: */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static GObject *
|
||||
gvc_mixer_source_output_constructor (GType type,
|
||||
guint n_construct_properties,
|
||||
GObjectConstructParam *construct_params)
|
||||
{
|
||||
GObject *object;
|
||||
GvcMixerSourceOutput *self;
|
||||
|
||||
object = G_OBJECT_CLASS (gvc_mixer_source_output_parent_class)->constructor (type, n_construct_properties, construct_params);
|
||||
|
||||
self = GVC_MIXER_SOURCE_OUTPUT (object);
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_source_output_class_init (GvcMixerSourceOutputClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
|
||||
|
||||
object_class->constructor = gvc_mixer_source_output_constructor;
|
||||
object_class->finalize = gvc_mixer_source_output_finalize;
|
||||
|
||||
stream_class->push_volume = gvc_mixer_source_output_push_volume;
|
||||
stream_class->change_is_muted = gvc_mixer_source_output_change_is_muted;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (GvcMixerSourceOutputPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_source_output_init (GvcMixerSourceOutput *source_output)
|
||||
{
|
||||
source_output->priv = GVC_MIXER_SOURCE_OUTPUT_GET_PRIVATE (source_output);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_source_output_finalize (GObject *object)
|
||||
{
|
||||
GvcMixerSourceOutput *mixer_source_output;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (GVC_IS_MIXER_SOURCE_OUTPUT (object));
|
||||
|
||||
mixer_source_output = GVC_MIXER_SOURCE_OUTPUT (object);
|
||||
|
||||
g_return_if_fail (mixer_source_output->priv != NULL);
|
||||
G_OBJECT_CLASS (gvc_mixer_source_output_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
/**
|
||||
* gvc_mixer_source_output_new: (skip)
|
||||
*
|
||||
* @context:
|
||||
* @index:
|
||||
* @channel_map:
|
||||
*
|
||||
* Returns:
|
||||
*/
|
||||
GvcMixerStream *
|
||||
gvc_mixer_source_output_new (pa_context *context,
|
||||
guint index,
|
||||
GvcChannelMap *channel_map)
|
||||
{
|
||||
GObject *object;
|
||||
|
||||
object = g_object_new (GVC_TYPE_MIXER_SOURCE_OUTPUT,
|
||||
"pa-context", context,
|
||||
"index", index,
|
||||
"channel-map", channel_map,
|
||||
NULL);
|
||||
|
||||
return GVC_MIXER_STREAM (object);
|
||||
}
|
57
src/gvc/gvc-mixer-source-output.h
Normal file
57
src/gvc/gvc-mixer-source-output.h
Normal file
@ -0,0 +1,57 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __GVC_MIXER_SOURCE_OUTPUT_H
|
||||
#define __GVC_MIXER_SOURCE_OUTPUT_H
|
||||
|
||||
#include <glib-object.h>
|
||||
#include "gvc-mixer-stream.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GVC_TYPE_MIXER_SOURCE_OUTPUT (gvc_mixer_source_output_get_type ())
|
||||
#define GVC_MIXER_SOURCE_OUTPUT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_SOURCE_OUTPUT, GvcMixerSourceOutput))
|
||||
#define GVC_MIXER_SOURCE_OUTPUT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_SOURCE_OUTPUT, GvcMixerSourceOutputClass))
|
||||
#define GVC_IS_MIXER_SOURCE_OUTPUT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_SOURCE_OUTPUT))
|
||||
#define GVC_IS_MIXER_SOURCE_OUTPUT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_SOURCE_OUTPUT))
|
||||
#define GVC_MIXER_SOURCE_OUTPUT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_SOURCE_OUTPUT, GvcMixerSourceOutputClass))
|
||||
|
||||
typedef struct GvcMixerSourceOutputPrivate GvcMixerSourceOutputPrivate;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GvcMixerStream parent;
|
||||
GvcMixerSourceOutputPrivate *priv;
|
||||
} GvcMixerSourceOutput;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GvcMixerStreamClass parent_class;
|
||||
} GvcMixerSourceOutputClass;
|
||||
|
||||
GType gvc_mixer_source_output_get_type (void);
|
||||
|
||||
GvcMixerStream * gvc_mixer_source_output_new (pa_context *context,
|
||||
guint index,
|
||||
GvcChannelMap *map);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GVC_MIXER_SOURCE_OUTPUT_H */
|
231
src/gvc/gvc-mixer-source.c
Normal file
231
src/gvc/gvc-mixer-source.c
Normal file
@ -0,0 +1,231 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 William Jon McCann
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib/gi18n-lib.h>
|
||||
|
||||
#include <pulse/pulseaudio.h>
|
||||
|
||||
#include "gvc-mixer-source.h"
|
||||
#include "gvc-mixer-stream-private.h"
|
||||
#include "gvc-channel-map-private.h"
|
||||
|
||||
#define GVC_MIXER_SOURCE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_SOURCE, GvcMixerSourcePrivate))
|
||||
|
||||
struct GvcMixerSourcePrivate
|
||||
{
|
||||
gpointer dummy;
|
||||
};
|
||||
|
||||
static void gvc_mixer_source_class_init (GvcMixerSourceClass *klass);
|
||||
static void gvc_mixer_source_init (GvcMixerSource *mixer_source);
|
||||
static void gvc_mixer_source_finalize (GObject *object);
|
||||
static void gvc_mixer_source_dispose (GObject *object);
|
||||
|
||||
G_DEFINE_TYPE (GvcMixerSource, gvc_mixer_source, GVC_TYPE_MIXER_STREAM)
|
||||
|
||||
static gboolean
|
||||
gvc_mixer_source_push_volume (GvcMixerStream *stream, gpointer *op)
|
||||
{
|
||||
pa_operation *o;
|
||||
guint index;
|
||||
const GvcChannelMap *map;
|
||||
pa_context *context;
|
||||
const pa_cvolume *cv;
|
||||
|
||||
index = gvc_mixer_stream_get_index (stream);
|
||||
|
||||
map = gvc_mixer_stream_get_channel_map (stream);
|
||||
|
||||
/* set the volume */
|
||||
cv = gvc_channel_map_get_cvolume (map);
|
||||
|
||||
context = gvc_mixer_stream_get_pa_context (stream);
|
||||
|
||||
o = pa_context_set_source_volume_by_index (context,
|
||||
index,
|
||||
cv,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
if (o == NULL) {
|
||||
g_warning ("pa_context_set_source_volume_by_index() failed: %s", pa_strerror(pa_context_errno(context)));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
*op = o;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gvc_mixer_source_change_is_muted (GvcMixerStream *stream,
|
||||
gboolean is_muted)
|
||||
{
|
||||
pa_operation *o;
|
||||
guint index;
|
||||
pa_context *context;
|
||||
|
||||
index = gvc_mixer_stream_get_index (stream);
|
||||
context = gvc_mixer_stream_get_pa_context (stream);
|
||||
|
||||
o = pa_context_set_source_mute_by_index (context,
|
||||
index,
|
||||
is_muted,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
if (o == NULL) {
|
||||
g_warning ("pa_context_set_source_mute_by_index() failed: %s", pa_strerror(pa_context_errno(context)));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
pa_operation_unref(o);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gvc_mixer_source_change_port (GvcMixerStream *stream,
|
||||
const char *port)
|
||||
{
|
||||
#if PA_MICRO > 15
|
||||
pa_operation *o;
|
||||
guint index;
|
||||
pa_context *context;
|
||||
|
||||
index = gvc_mixer_stream_get_index (stream);
|
||||
context = gvc_mixer_stream_get_pa_context (stream);
|
||||
|
||||
o = pa_context_set_source_port_by_index (context,
|
||||
index,
|
||||
port,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
if (o == NULL) {
|
||||
g_warning ("pa_context_set_source_port_by_index() failed: %s", pa_strerror(pa_context_errno(context)));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
pa_operation_unref(o);
|
||||
|
||||
return TRUE;
|
||||
#else
|
||||
return FALSE;
|
||||
#endif /* PA_MICRO > 15 */
|
||||
}
|
||||
|
||||
static GObject *
|
||||
gvc_mixer_source_constructor (GType type,
|
||||
guint n_construct_properties,
|
||||
GObjectConstructParam *construct_params)
|
||||
{
|
||||
GObject *object;
|
||||
GvcMixerSource *self;
|
||||
|
||||
object = G_OBJECT_CLASS (gvc_mixer_source_parent_class)->constructor (type, n_construct_properties, construct_params);
|
||||
|
||||
self = GVC_MIXER_SOURCE (object);
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_source_class_init (GvcMixerSourceClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GvcMixerStreamClass *stream_class = GVC_MIXER_STREAM_CLASS (klass);
|
||||
|
||||
object_class->constructor = gvc_mixer_source_constructor;
|
||||
object_class->dispose = gvc_mixer_source_dispose;
|
||||
object_class->finalize = gvc_mixer_source_finalize;
|
||||
|
||||
stream_class->push_volume = gvc_mixer_source_push_volume;
|
||||
stream_class->change_is_muted = gvc_mixer_source_change_is_muted;
|
||||
stream_class->change_port = gvc_mixer_source_change_port;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (GvcMixerSourcePrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_source_init (GvcMixerSource *source)
|
||||
{
|
||||
source->priv = GVC_MIXER_SOURCE_GET_PRIVATE (source);
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_source_dispose (GObject *object)
|
||||
{
|
||||
GvcMixerSource *mixer_source;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (GVC_IS_MIXER_SOURCE (object));
|
||||
|
||||
mixer_source = GVC_MIXER_SOURCE (object);
|
||||
|
||||
G_OBJECT_CLASS (gvc_mixer_source_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_source_finalize (GObject *object)
|
||||
{
|
||||
GvcMixerSource *mixer_source;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (GVC_IS_MIXER_SOURCE (object));
|
||||
|
||||
mixer_source = GVC_MIXER_SOURCE (object);
|
||||
|
||||
g_return_if_fail (mixer_source->priv != NULL);
|
||||
G_OBJECT_CLASS (gvc_mixer_source_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
/**
|
||||
* gvc_mixer_source_new: (skip)
|
||||
*
|
||||
* @context:
|
||||
* @index:
|
||||
* @channel_map:
|
||||
*
|
||||
* Returns:
|
||||
*/
|
||||
GvcMixerStream *
|
||||
gvc_mixer_source_new (pa_context *context,
|
||||
guint index,
|
||||
GvcChannelMap *channel_map)
|
||||
|
||||
{
|
||||
GObject *object;
|
||||
|
||||
object = g_object_new (GVC_TYPE_MIXER_SOURCE,
|
||||
"pa-context", context,
|
||||
"index", index,
|
||||
"channel-map", channel_map,
|
||||
NULL);
|
||||
|
||||
return GVC_MIXER_STREAM (object);
|
||||
}
|
57
src/gvc/gvc-mixer-source.h
Normal file
57
src/gvc/gvc-mixer-source.h
Normal file
@ -0,0 +1,57 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __GVC_MIXER_SOURCE_H
|
||||
#define __GVC_MIXER_SOURCE_H
|
||||
|
||||
#include <glib-object.h>
|
||||
#include "gvc-mixer-stream.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GVC_TYPE_MIXER_SOURCE (gvc_mixer_source_get_type ())
|
||||
#define GVC_MIXER_SOURCE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_SOURCE, GvcMixerSource))
|
||||
#define GVC_MIXER_SOURCE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_SOURCE, GvcMixerSourceClass))
|
||||
#define GVC_IS_MIXER_SOURCE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_SOURCE))
|
||||
#define GVC_IS_MIXER_SOURCE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_SOURCE))
|
||||
#define GVC_MIXER_SOURCE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_SOURCE, GvcMixerSourceClass))
|
||||
|
||||
typedef struct GvcMixerSourcePrivate GvcMixerSourcePrivate;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GvcMixerStream parent;
|
||||
GvcMixerSourcePrivate *priv;
|
||||
} GvcMixerSource;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GvcMixerStreamClass parent_class;
|
||||
} GvcMixerSourceClass;
|
||||
|
||||
GType gvc_mixer_source_get_type (void);
|
||||
|
||||
GvcMixerStream * gvc_mixer_source_new (pa_context *context,
|
||||
guint index,
|
||||
GvcChannelMap *map);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GVC_MIXER_SOURCE_H */
|
34
src/gvc/gvc-mixer-stream-private.h
Normal file
34
src/gvc/gvc-mixer-stream-private.h
Normal file
@ -0,0 +1,34 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __GVC_MIXER_STREAM_PRIVATE_H
|
||||
#define __GVC_MIXER_STREAM_PRIVATE_H
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
#include "gvc-channel-map.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
pa_context * gvc_mixer_stream_get_pa_context (GvcMixerStream *stream);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GVC_MIXER_STREAM_PRIVATE_H */
|
944
src/gvc/gvc-mixer-stream.c
Normal file
944
src/gvc/gvc-mixer-stream.c
Normal file
@ -0,0 +1,944 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 William Jon McCann
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <glib.h>
|
||||
#include <glib/gi18n-lib.h>
|
||||
|
||||
#include <pulse/pulseaudio.h>
|
||||
|
||||
#include "gvc-mixer-stream.h"
|
||||
#include "gvc-mixer-stream-private.h"
|
||||
#include "gvc-channel-map-private.h"
|
||||
|
||||
#define GVC_MIXER_STREAM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_MIXER_STREAM, GvcMixerStreamPrivate))
|
||||
|
||||
static guint32 stream_serial = 1;
|
||||
|
||||
struct GvcMixerStreamPrivate
|
||||
{
|
||||
pa_context *pa_context;
|
||||
guint id;
|
||||
guint index;
|
||||
gint card_index;
|
||||
GvcChannelMap *channel_map;
|
||||
char *name;
|
||||
char *description;
|
||||
char *application_id;
|
||||
char *icon_name;
|
||||
gboolean is_muted;
|
||||
gboolean can_decibel;
|
||||
gboolean is_event_stream;
|
||||
gboolean is_virtual;
|
||||
pa_volume_t base_volume;
|
||||
pa_operation *change_volume_op;
|
||||
char *port;
|
||||
char *human_port;
|
||||
GList *ports;
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
PROP_ID,
|
||||
PROP_PA_CONTEXT,
|
||||
PROP_CHANNEL_MAP,
|
||||
PROP_INDEX,
|
||||
PROP_NAME,
|
||||
PROP_DESCRIPTION,
|
||||
PROP_APPLICATION_ID,
|
||||
PROP_ICON_NAME,
|
||||
PROP_VOLUME,
|
||||
PROP_DECIBEL,
|
||||
PROP_IS_MUTED,
|
||||
PROP_CAN_DECIBEL,
|
||||
PROP_IS_EVENT_STREAM,
|
||||
PROP_IS_VIRTUAL,
|
||||
PROP_CARD_INDEX,
|
||||
PROP_PORT,
|
||||
};
|
||||
|
||||
static void gvc_mixer_stream_class_init (GvcMixerStreamClass *klass);
|
||||
static void gvc_mixer_stream_init (GvcMixerStream *mixer_stream);
|
||||
static void gvc_mixer_stream_finalize (GObject *object);
|
||||
|
||||
G_DEFINE_ABSTRACT_TYPE (GvcMixerStream, gvc_mixer_stream, G_TYPE_OBJECT)
|
||||
|
||||
static guint32
|
||||
get_next_stream_serial (void)
|
||||
{
|
||||
guint32 serial;
|
||||
|
||||
serial = stream_serial++;
|
||||
|
||||
if ((gint32)stream_serial < 0) {
|
||||
stream_serial = 1;
|
||||
}
|
||||
|
||||
return serial;
|
||||
}
|
||||
|
||||
pa_context *
|
||||
gvc_mixer_stream_get_pa_context (GvcMixerStream *stream)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
|
||||
return stream->priv->pa_context;
|
||||
}
|
||||
|
||||
guint
|
||||
gvc_mixer_stream_get_index (GvcMixerStream *stream)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
|
||||
return stream->priv->index;
|
||||
}
|
||||
|
||||
guint
|
||||
gvc_mixer_stream_get_id (GvcMixerStream *stream)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
|
||||
return stream->priv->id;
|
||||
}
|
||||
|
||||
const GvcChannelMap *
|
||||
gvc_mixer_stream_get_channel_map (GvcMixerStream *stream)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
|
||||
return stream->priv->channel_map;
|
||||
}
|
||||
|
||||
/**
|
||||
* gvc_mixer_stream_get_volume:
|
||||
*
|
||||
* @stream:
|
||||
*
|
||||
* Returns: (type guint32) (transfer none):
|
||||
*/
|
||||
pa_volume_t
|
||||
gvc_mixer_stream_get_volume (GvcMixerStream *stream)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
|
||||
|
||||
return (pa_volume_t) gvc_channel_map_get_volume(stream->priv->channel_map)[VOLUME];
|
||||
}
|
||||
|
||||
gdouble
|
||||
gvc_mixer_stream_get_decibel (GvcMixerStream *stream)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
|
||||
|
||||
return pa_sw_volume_to_dB(
|
||||
(pa_volume_t) gvc_channel_map_get_volume(stream->priv->channel_map)[VOLUME]);
|
||||
}
|
||||
|
||||
/**
|
||||
* gvc_mixer_stream_set_volume:
|
||||
*
|
||||
* @stream:
|
||||
* @volume: (type guint32):
|
||||
*
|
||||
* Returns:
|
||||
*/
|
||||
gboolean
|
||||
gvc_mixer_stream_set_volume (GvcMixerStream *stream,
|
||||
pa_volume_t volume)
|
||||
{
|
||||
pa_cvolume cv;
|
||||
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
|
||||
cv = *gvc_channel_map_get_cvolume(stream->priv->channel_map);
|
||||
pa_cvolume_scale(&cv, volume);
|
||||
|
||||
if (!pa_cvolume_equal(gvc_channel_map_get_cvolume(stream->priv->channel_map), &cv)) {
|
||||
gvc_channel_map_volume_changed(stream->priv->channel_map, &cv, FALSE);
|
||||
g_object_notify (G_OBJECT (stream), "volume");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_set_decibel (GvcMixerStream *stream,
|
||||
gdouble db)
|
||||
{
|
||||
pa_cvolume cv;
|
||||
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
|
||||
cv = *gvc_channel_map_get_cvolume(stream->priv->channel_map);
|
||||
pa_cvolume_scale(&cv, pa_sw_volume_from_dB(db));
|
||||
|
||||
if (!pa_cvolume_equal(gvc_channel_map_get_cvolume(stream->priv->channel_map), &cv)) {
|
||||
gvc_channel_map_volume_changed(stream->priv->channel_map, &cv, FALSE);
|
||||
g_object_notify (G_OBJECT (stream), "volume");
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_get_is_muted (GvcMixerStream *stream)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
return stream->priv->is_muted;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_get_can_decibel (GvcMixerStream *stream)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
return stream->priv->can_decibel;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_set_is_muted (GvcMixerStream *stream,
|
||||
gboolean is_muted)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
|
||||
if (is_muted != stream->priv->is_muted) {
|
||||
stream->priv->is_muted = is_muted;
|
||||
g_object_notify (G_OBJECT (stream), "is-muted");
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_set_can_decibel (GvcMixerStream *stream,
|
||||
gboolean can_decibel)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
|
||||
if (can_decibel != stream->priv->can_decibel) {
|
||||
stream->priv->can_decibel = can_decibel;
|
||||
g_object_notify (G_OBJECT (stream), "can-decibel");
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
const char *
|
||||
gvc_mixer_stream_get_name (GvcMixerStream *stream)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
|
||||
return stream->priv->name;
|
||||
}
|
||||
|
||||
const char *
|
||||
gvc_mixer_stream_get_description (GvcMixerStream *stream)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
|
||||
return stream->priv->description;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_set_name (GvcMixerStream *stream,
|
||||
const char *name)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
|
||||
g_free (stream->priv->name);
|
||||
stream->priv->name = g_strdup (name);
|
||||
g_object_notify (G_OBJECT (stream), "name");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_set_description (GvcMixerStream *stream,
|
||||
const char *description)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
|
||||
g_free (stream->priv->description);
|
||||
stream->priv->description = g_strdup (description);
|
||||
g_object_notify (G_OBJECT (stream), "description");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_is_event_stream (GvcMixerStream *stream)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
|
||||
return stream->priv->is_event_stream;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_set_is_event_stream (GvcMixerStream *stream,
|
||||
gboolean is_event_stream)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
|
||||
stream->priv->is_event_stream = is_event_stream;
|
||||
g_object_notify (G_OBJECT (stream), "is-event-stream");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_is_virtual (GvcMixerStream *stream)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
|
||||
return stream->priv->is_virtual;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_set_is_virtual (GvcMixerStream *stream,
|
||||
gboolean is_virtual)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
|
||||
stream->priv->is_virtual = is_virtual;
|
||||
g_object_notify (G_OBJECT (stream), "is-virtual");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
const char *
|
||||
gvc_mixer_stream_get_application_id (GvcMixerStream *stream)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
|
||||
return stream->priv->application_id;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_set_application_id (GvcMixerStream *stream,
|
||||
const char *application_id)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
|
||||
g_free (stream->priv->application_id);
|
||||
stream->priv->application_id = g_strdup (application_id);
|
||||
g_object_notify (G_OBJECT (stream), "application-id");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
on_channel_map_volume_changed (GvcChannelMap *channel_map,
|
||||
gboolean set,
|
||||
GvcMixerStream *stream)
|
||||
{
|
||||
if (set == TRUE)
|
||||
gvc_mixer_stream_push_volume (stream);
|
||||
|
||||
g_object_notify (G_OBJECT (stream), "volume");
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gvc_mixer_stream_set_channel_map (GvcMixerStream *stream,
|
||||
GvcChannelMap *channel_map)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
|
||||
if (channel_map != NULL) {
|
||||
g_object_ref (channel_map);
|
||||
}
|
||||
|
||||
if (stream->priv->channel_map != NULL) {
|
||||
g_signal_handlers_disconnect_by_func (stream->priv->channel_map,
|
||||
on_channel_map_volume_changed,
|
||||
stream);
|
||||
g_object_unref (stream->priv->channel_map);
|
||||
}
|
||||
|
||||
stream->priv->channel_map = channel_map;
|
||||
|
||||
if (stream->priv->channel_map != NULL) {
|
||||
g_signal_connect (stream->priv->channel_map,
|
||||
"volume-changed",
|
||||
G_CALLBACK (on_channel_map_volume_changed),
|
||||
stream);
|
||||
|
||||
g_object_notify (G_OBJECT (stream), "channel-map");
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
const char *
|
||||
gvc_mixer_stream_get_icon_name (GvcMixerStream *stream)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
|
||||
return stream->priv->icon_name;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_set_icon_name (GvcMixerStream *stream,
|
||||
const char *icon_name)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
|
||||
g_free (stream->priv->icon_name);
|
||||
stream->priv->icon_name = g_strdup (icon_name);
|
||||
g_object_notify (G_OBJECT (stream), "icon-name");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* gvc_mixer_stream_get_base_volume:
|
||||
*
|
||||
* @stream:
|
||||
*
|
||||
* Returns: (type guint32) (transfer none):
|
||||
*/
|
||||
pa_volume_t
|
||||
gvc_mixer_stream_get_base_volume (GvcMixerStream *stream)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
|
||||
|
||||
return stream->priv->base_volume;
|
||||
}
|
||||
|
||||
/**
|
||||
* gvc_mixer_stream_set_base_volume:
|
||||
*
|
||||
* @stream:
|
||||
* @base_volume: (type guint32):
|
||||
*
|
||||
* Returns:
|
||||
*/
|
||||
gboolean
|
||||
gvc_mixer_stream_set_base_volume (GvcMixerStream *stream,
|
||||
pa_volume_t base_volume)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
|
||||
stream->priv->base_volume = base_volume;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
const GvcMixerStreamPort *
|
||||
gvc_mixer_stream_get_port (GvcMixerStream *stream)
|
||||
{
|
||||
GList *l;
|
||||
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL);
|
||||
g_return_val_if_fail (stream->priv->ports != NULL, NULL);
|
||||
|
||||
for (l = stream->priv->ports; l != NULL; l = l->next) {
|
||||
GvcMixerStreamPort *p = l->data;
|
||||
if (g_strcmp0 (stream->priv->port, p->port) == 0) {
|
||||
return p;
|
||||
}
|
||||
}
|
||||
|
||||
g_assert_not_reached ();
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_set_port (GvcMixerStream *stream,
|
||||
const char *port)
|
||||
{
|
||||
GList *l;
|
||||
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
g_return_val_if_fail (stream->priv->ports != NULL, FALSE);
|
||||
|
||||
g_free (stream->priv->port);
|
||||
stream->priv->port = g_strdup (port);
|
||||
|
||||
g_free (stream->priv->human_port);
|
||||
stream->priv->human_port = NULL;
|
||||
|
||||
for (l = stream->priv->ports; l != NULL; l = l->next) {
|
||||
GvcMixerStreamPort *p = l->data;
|
||||
if (g_str_equal (stream->priv->port, p->port)) {
|
||||
stream->priv->human_port = g_strdup (p->human_port);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_object_notify (G_OBJECT (stream), "port");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_change_port (GvcMixerStream *stream,
|
||||
const char *port)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
return GVC_MIXER_STREAM_GET_CLASS (stream)->change_port (stream, port);
|
||||
}
|
||||
|
||||
const GList *
|
||||
gvc_mixer_stream_get_ports (GvcMixerStream *stream)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
return stream->priv->ports;
|
||||
}
|
||||
|
||||
static int
|
||||
sort_ports (GvcMixerStreamPort *a,
|
||||
GvcMixerStreamPort *b)
|
||||
{
|
||||
if (a->priority == b->priority)
|
||||
return 0;
|
||||
if (a->priority > b->priority)
|
||||
return 1;
|
||||
return -1;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_set_ports (GvcMixerStream *stream,
|
||||
GList *ports)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
g_return_val_if_fail (stream->priv->ports == NULL, FALSE);
|
||||
|
||||
stream->priv->ports = g_list_sort (ports, (GCompareFunc) sort_ports);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gint
|
||||
gvc_mixer_stream_get_card_index (GvcMixerStream *stream)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), PA_INVALID_INDEX);
|
||||
return stream->priv->card_index;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_set_card_index (GvcMixerStream *stream,
|
||||
gint card_index)
|
||||
{
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
|
||||
stream->priv->card_index = card_index;
|
||||
g_object_notify (G_OBJECT (stream), "card-index");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_stream_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
GvcMixerStream *self = GVC_MIXER_STREAM (object);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_PA_CONTEXT:
|
||||
self->priv->pa_context = g_value_get_pointer (value);
|
||||
break;
|
||||
case PROP_INDEX:
|
||||
self->priv->index = g_value_get_ulong (value);
|
||||
break;
|
||||
case PROP_ID:
|
||||
self->priv->id = g_value_get_ulong (value);
|
||||
break;
|
||||
case PROP_CHANNEL_MAP:
|
||||
gvc_mixer_stream_set_channel_map (self, g_value_get_object (value));
|
||||
break;
|
||||
case PROP_NAME:
|
||||
gvc_mixer_stream_set_name (self, g_value_get_string (value));
|
||||
break;
|
||||
case PROP_DESCRIPTION:
|
||||
gvc_mixer_stream_set_description (self, g_value_get_string (value));
|
||||
break;
|
||||
case PROP_APPLICATION_ID:
|
||||
gvc_mixer_stream_set_application_id (self, g_value_get_string (value));
|
||||
break;
|
||||
case PROP_ICON_NAME:
|
||||
gvc_mixer_stream_set_icon_name (self, g_value_get_string (value));
|
||||
break;
|
||||
case PROP_VOLUME:
|
||||
gvc_mixer_stream_set_volume (self, g_value_get_ulong (value));
|
||||
break;
|
||||
case PROP_DECIBEL:
|
||||
gvc_mixer_stream_set_decibel (self, g_value_get_double (value));
|
||||
break;
|
||||
case PROP_IS_MUTED:
|
||||
gvc_mixer_stream_set_is_muted (self, g_value_get_boolean (value));
|
||||
break;
|
||||
case PROP_IS_EVENT_STREAM:
|
||||
gvc_mixer_stream_set_is_event_stream (self, g_value_get_boolean (value));
|
||||
break;
|
||||
case PROP_IS_VIRTUAL:
|
||||
gvc_mixer_stream_set_is_virtual (self, g_value_get_boolean (value));
|
||||
break;
|
||||
case PROP_CAN_DECIBEL:
|
||||
gvc_mixer_stream_set_can_decibel (self, g_value_get_boolean (value));
|
||||
break;
|
||||
case PROP_PORT:
|
||||
gvc_mixer_stream_set_port (self, g_value_get_string (value));
|
||||
break;
|
||||
case PROP_CARD_INDEX:
|
||||
self->priv->card_index = g_value_get_long (value);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_stream_get_property (GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
GvcMixerStream *self = GVC_MIXER_STREAM (object);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_PA_CONTEXT:
|
||||
g_value_set_pointer (value, self->priv->pa_context);
|
||||
break;
|
||||
case PROP_INDEX:
|
||||
g_value_set_ulong (value, self->priv->index);
|
||||
break;
|
||||
case PROP_ID:
|
||||
g_value_set_ulong (value, self->priv->id);
|
||||
break;
|
||||
case PROP_CHANNEL_MAP:
|
||||
g_value_set_object (value, self->priv->channel_map);
|
||||
break;
|
||||
case PROP_NAME:
|
||||
g_value_set_string (value, self->priv->name);
|
||||
break;
|
||||
case PROP_DESCRIPTION:
|
||||
g_value_set_string (value, self->priv->description);
|
||||
break;
|
||||
case PROP_APPLICATION_ID:
|
||||
g_value_set_string (value, self->priv->application_id);
|
||||
break;
|
||||
case PROP_ICON_NAME:
|
||||
g_value_set_string (value, self->priv->icon_name);
|
||||
break;
|
||||
case PROP_VOLUME:
|
||||
g_value_set_ulong (value,
|
||||
pa_cvolume_max(gvc_channel_map_get_cvolume(self->priv->channel_map)));
|
||||
break;
|
||||
case PROP_DECIBEL:
|
||||
g_value_set_double (value,
|
||||
pa_sw_volume_to_dB(pa_cvolume_max(gvc_channel_map_get_cvolume(self->priv->channel_map))));
|
||||
break;
|
||||
case PROP_IS_MUTED:
|
||||
g_value_set_boolean (value, self->priv->is_muted);
|
||||
break;
|
||||
case PROP_IS_EVENT_STREAM:
|
||||
g_value_set_boolean (value, self->priv->is_event_stream);
|
||||
break;
|
||||
case PROP_IS_VIRTUAL:
|
||||
g_value_set_boolean (value, self->priv->is_virtual);
|
||||
break;
|
||||
case PROP_CAN_DECIBEL:
|
||||
g_value_set_boolean (value, self->priv->can_decibel);
|
||||
break;
|
||||
case PROP_PORT:
|
||||
g_value_set_string (value, self->priv->port);
|
||||
break;
|
||||
case PROP_CARD_INDEX:
|
||||
g_value_set_long (value, self->priv->card_index);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static GObject *
|
||||
gvc_mixer_stream_constructor (GType type,
|
||||
guint n_construct_properties,
|
||||
GObjectConstructParam *construct_params)
|
||||
{
|
||||
GObject *object;
|
||||
GvcMixerStream *self;
|
||||
|
||||
object = G_OBJECT_CLASS (gvc_mixer_stream_parent_class)->constructor (type, n_construct_properties, construct_params);
|
||||
|
||||
self = GVC_MIXER_STREAM (object);
|
||||
|
||||
self->priv->id = get_next_stream_serial ();
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gvc_mixer_stream_real_change_port (GvcMixerStream *stream,
|
||||
const char *port)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gvc_mixer_stream_real_push_volume (GvcMixerStream *stream, gpointer *op)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gvc_mixer_stream_real_change_is_muted (GvcMixerStream *stream,
|
||||
gboolean is_muted)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_push_volume (GvcMixerStream *stream)
|
||||
{
|
||||
pa_operation *op;
|
||||
gboolean ret;
|
||||
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
|
||||
if (stream->priv->is_event_stream != FALSE)
|
||||
return TRUE;
|
||||
|
||||
g_debug ("Pushing new volume to stream '%s' (%s)",
|
||||
stream->priv->description, stream->priv->name);
|
||||
|
||||
ret = GVC_MIXER_STREAM_GET_CLASS (stream)->push_volume (stream, (gpointer *) &op);
|
||||
if (ret) {
|
||||
if (stream->priv->change_volume_op != NULL)
|
||||
pa_operation_unref (stream->priv->change_volume_op);
|
||||
stream->priv->change_volume_op = op;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_change_is_muted (GvcMixerStream *stream,
|
||||
gboolean is_muted)
|
||||
{
|
||||
gboolean ret;
|
||||
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
|
||||
ret = GVC_MIXER_STREAM_GET_CLASS (stream)->change_is_muted (stream, is_muted);
|
||||
return ret;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gvc_mixer_stream_is_running (GvcMixerStream *stream)
|
||||
{
|
||||
if (stream->priv->change_volume_op == NULL)
|
||||
return FALSE;
|
||||
|
||||
if ((pa_operation_get_state(stream->priv->change_volume_op) == PA_OPERATION_RUNNING))
|
||||
return TRUE;
|
||||
|
||||
pa_operation_unref(stream->priv->change_volume_op);
|
||||
stream->priv->change_volume_op = NULL;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_stream_class_init (GvcMixerStreamClass *klass)
|
||||
{
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
gobject_class->constructor = gvc_mixer_stream_constructor;
|
||||
gobject_class->finalize = gvc_mixer_stream_finalize;
|
||||
gobject_class->set_property = gvc_mixer_stream_set_property;
|
||||
gobject_class->get_property = gvc_mixer_stream_get_property;
|
||||
|
||||
klass->push_volume = gvc_mixer_stream_real_push_volume;
|
||||
klass->change_port = gvc_mixer_stream_real_change_port;
|
||||
klass->change_is_muted = gvc_mixer_stream_real_change_is_muted;
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_INDEX,
|
||||
g_param_spec_ulong ("index",
|
||||
"Index",
|
||||
"The index for this stream",
|
||||
0, G_MAXULONG, 0,
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_ID,
|
||||
g_param_spec_ulong ("id",
|
||||
"id",
|
||||
"The id for this stream",
|
||||
0, G_MAXULONG, 0,
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_CHANNEL_MAP,
|
||||
g_param_spec_object ("channel-map",
|
||||
"channel map",
|
||||
"The channel map for this stream",
|
||||
GVC_TYPE_CHANNEL_MAP,
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_PA_CONTEXT,
|
||||
g_param_spec_pointer ("pa-context",
|
||||
"PulseAudio context",
|
||||
"The PulseAudio context for this stream",
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_VOLUME,
|
||||
g_param_spec_ulong ("volume",
|
||||
"Volume",
|
||||
"The volume for this stream",
|
||||
0, G_MAXULONG, 0,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_DECIBEL,
|
||||
g_param_spec_double ("decibel",
|
||||
"Decibel",
|
||||
"The decibel level for this stream",
|
||||
-G_MAXDOUBLE, G_MAXDOUBLE, 0,
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_NAME,
|
||||
g_param_spec_string ("name",
|
||||
"Name",
|
||||
"Name to display for this stream",
|
||||
NULL,
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_DESCRIPTION,
|
||||
g_param_spec_string ("description",
|
||||
"Description",
|
||||
"Description to display for this stream",
|
||||
NULL,
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_APPLICATION_ID,
|
||||
g_param_spec_string ("application-id",
|
||||
"Application identifier",
|
||||
"Application identifier for this stream",
|
||||
NULL,
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_ICON_NAME,
|
||||
g_param_spec_string ("icon-name",
|
||||
"Icon Name",
|
||||
"Name of icon to display for this stream",
|
||||
NULL,
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_IS_MUTED,
|
||||
g_param_spec_boolean ("is-muted",
|
||||
"is muted",
|
||||
"Whether stream is muted",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_CAN_DECIBEL,
|
||||
g_param_spec_boolean ("can-decibel",
|
||||
"can decibel",
|
||||
"Whether stream volume can be converted to decibel units",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_IS_EVENT_STREAM,
|
||||
g_param_spec_boolean ("is-event-stream",
|
||||
"is event stream",
|
||||
"Whether stream's role is to play an event",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_IS_VIRTUAL,
|
||||
g_param_spec_boolean ("is-virtual",
|
||||
"is virtual stream",
|
||||
"Whether the stream is virtual",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_PORT,
|
||||
g_param_spec_string ("port",
|
||||
"Port",
|
||||
"The name of the current port for this stream",
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_CARD_INDEX,
|
||||
g_param_spec_long ("card-index",
|
||||
"Card index",
|
||||
"The index of the card for this stream",
|
||||
PA_INVALID_INDEX, G_MAXLONG, PA_INVALID_INDEX,
|
||||
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
|
||||
g_type_class_add_private (klass, sizeof (GvcMixerStreamPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_stream_init (GvcMixerStream *stream)
|
||||
{
|
||||
stream->priv = GVC_MIXER_STREAM_GET_PRIVATE (stream);
|
||||
}
|
||||
|
||||
static void
|
||||
free_port (GvcMixerStreamPort *p)
|
||||
{
|
||||
g_free (p->port);
|
||||
g_free (p->human_port);
|
||||
g_free (p);
|
||||
}
|
||||
|
||||
static void
|
||||
gvc_mixer_stream_finalize (GObject *object)
|
||||
{
|
||||
GvcMixerStream *mixer_stream;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (GVC_IS_MIXER_STREAM (object));
|
||||
|
||||
mixer_stream = GVC_MIXER_STREAM (object);
|
||||
|
||||
g_return_if_fail (mixer_stream->priv != NULL);
|
||||
|
||||
g_object_unref (mixer_stream->priv->channel_map);
|
||||
mixer_stream->priv->channel_map = NULL;
|
||||
|
||||
g_free (mixer_stream->priv->name);
|
||||
mixer_stream->priv->name = NULL;
|
||||
|
||||
g_free (mixer_stream->priv->description);
|
||||
mixer_stream->priv->description = NULL;
|
||||
|
||||
g_free (mixer_stream->priv->application_id);
|
||||
mixer_stream->priv->application_id = NULL;
|
||||
|
||||
g_free (mixer_stream->priv->icon_name);
|
||||
mixer_stream->priv->icon_name = NULL;
|
||||
|
||||
g_free (mixer_stream->priv->port);
|
||||
mixer_stream->priv->port = NULL;
|
||||
|
||||
g_free (mixer_stream->priv->human_port);
|
||||
mixer_stream->priv->human_port = NULL;
|
||||
|
||||
g_list_foreach (mixer_stream->priv->ports, (GFunc) free_port, NULL);
|
||||
g_list_free (mixer_stream->priv->ports);
|
||||
mixer_stream->priv->ports = NULL;
|
||||
|
||||
if (mixer_stream->priv->change_volume_op) {
|
||||
pa_operation_unref(mixer_stream->priv->change_volume_op);
|
||||
mixer_stream->priv->change_volume_op = NULL;
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS (gvc_mixer_stream_parent_class)->finalize (object);
|
||||
}
|
125
src/gvc/gvc-mixer-stream.h
Normal file
125
src/gvc/gvc-mixer-stream.h
Normal file
@ -0,0 +1,125 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __GVC_MIXER_STREAM_H
|
||||
#define __GVC_MIXER_STREAM_H
|
||||
|
||||
#include <glib-object.h>
|
||||
#include "gvc-pulseaudio-fake.h"
|
||||
#include "gvc-channel-map.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GVC_TYPE_MIXER_STREAM (gvc_mixer_stream_get_type ())
|
||||
#define GVC_MIXER_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GVC_TYPE_MIXER_STREAM, GvcMixerStream))
|
||||
#define GVC_MIXER_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GVC_TYPE_MIXER_STREAM, GvcMixerStreamClass))
|
||||
#define GVC_IS_MIXER_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GVC_TYPE_MIXER_STREAM))
|
||||
#define GVC_IS_MIXER_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GVC_TYPE_MIXER_STREAM))
|
||||
#define GVC_MIXER_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GVC_TYPE_MIXER_STREAM, GvcMixerStreamClass))
|
||||
|
||||
typedef struct GvcMixerStreamPrivate GvcMixerStreamPrivate;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GObject parent;
|
||||
GvcMixerStreamPrivate *priv;
|
||||
} GvcMixerStream;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
|
||||
/* vtable */
|
||||
gboolean (*push_volume) (GvcMixerStream *stream,
|
||||
gpointer *operation);
|
||||
gboolean (*change_is_muted) (GvcMixerStream *stream,
|
||||
gboolean is_muted);
|
||||
gboolean (*change_port) (GvcMixerStream *stream,
|
||||
const char *port);
|
||||
} GvcMixerStreamClass;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char *port;
|
||||
char *human_port;
|
||||
guint priority;
|
||||
} GvcMixerStreamPort;
|
||||
|
||||
GType gvc_mixer_stream_get_type (void);
|
||||
|
||||
guint gvc_mixer_stream_get_index (GvcMixerStream *stream);
|
||||
guint gvc_mixer_stream_get_id (GvcMixerStream *stream);
|
||||
const GvcChannelMap *gvc_mixer_stream_get_channel_map(GvcMixerStream *stream);
|
||||
const GvcMixerStreamPort *gvc_mixer_stream_get_port (GvcMixerStream *stream);
|
||||
const GList * gvc_mixer_stream_get_ports (GvcMixerStream *stream);
|
||||
gboolean gvc_mixer_stream_change_port (GvcMixerStream *stream,
|
||||
const char *port);
|
||||
|
||||
pa_volume_t gvc_mixer_stream_get_volume (GvcMixerStream *stream);
|
||||
gdouble gvc_mixer_stream_get_decibel (GvcMixerStream *stream);
|
||||
gboolean gvc_mixer_stream_push_volume (GvcMixerStream *stream);
|
||||
pa_volume_t gvc_mixer_stream_get_base_volume (GvcMixerStream *stream);
|
||||
|
||||
gboolean gvc_mixer_stream_get_is_muted (GvcMixerStream *stream);
|
||||
gboolean gvc_mixer_stream_get_can_decibel (GvcMixerStream *stream);
|
||||
gboolean gvc_mixer_stream_change_is_muted (GvcMixerStream *stream,
|
||||
gboolean is_muted);
|
||||
gboolean gvc_mixer_stream_is_running (GvcMixerStream *stream);
|
||||
const char * gvc_mixer_stream_get_name (GvcMixerStream *stream);
|
||||
const char * gvc_mixer_stream_get_icon_name (GvcMixerStream *stream);
|
||||
const char * gvc_mixer_stream_get_description (GvcMixerStream *stream);
|
||||
const char * gvc_mixer_stream_get_application_id (GvcMixerStream *stream);
|
||||
gboolean gvc_mixer_stream_is_event_stream (GvcMixerStream *stream);
|
||||
gboolean gvc_mixer_stream_is_virtual (GvcMixerStream *stream);
|
||||
gint gvc_mixer_stream_get_card_index (GvcMixerStream *stream);
|
||||
|
||||
/* private */
|
||||
gboolean gvc_mixer_stream_set_volume (GvcMixerStream *stream,
|
||||
pa_volume_t volume);
|
||||
gboolean gvc_mixer_stream_set_decibel (GvcMixerStream *stream,
|
||||
gdouble db);
|
||||
gboolean gvc_mixer_stream_set_is_muted (GvcMixerStream *stream,
|
||||
gboolean is_muted);
|
||||
gboolean gvc_mixer_stream_set_can_decibel (GvcMixerStream *stream,
|
||||
gboolean can_decibel);
|
||||
gboolean gvc_mixer_stream_set_name (GvcMixerStream *stream,
|
||||
const char *name);
|
||||
gboolean gvc_mixer_stream_set_description (GvcMixerStream *stream,
|
||||
const char *description);
|
||||
gboolean gvc_mixer_stream_set_icon_name (GvcMixerStream *stream,
|
||||
const char *name);
|
||||
gboolean gvc_mixer_stream_set_is_event_stream (GvcMixerStream *stream,
|
||||
gboolean is_event_stream);
|
||||
gboolean gvc_mixer_stream_set_is_virtual (GvcMixerStream *stream,
|
||||
gboolean is_event_stream);
|
||||
gboolean gvc_mixer_stream_set_application_id (GvcMixerStream *stream,
|
||||
const char *application_id);
|
||||
gboolean gvc_mixer_stream_set_base_volume (GvcMixerStream *stream,
|
||||
pa_volume_t base_volume);
|
||||
gboolean gvc_mixer_stream_set_port (GvcMixerStream *stream,
|
||||
const char *port);
|
||||
gboolean gvc_mixer_stream_set_ports (GvcMixerStream *stream,
|
||||
GList *ports);
|
||||
gboolean gvc_mixer_stream_set_card_index (GvcMixerStream *stream,
|
||||
gint card_index);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GVC_MIXER_STREAM_H */
|
34
src/gvc/gvc-pulseaudio-fake.h
Normal file
34
src/gvc/gvc-pulseaudio-fake.h
Normal file
@ -0,0 +1,34 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
||||
*
|
||||
* Copyright (C) 2008 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __GVC_PULSEAUDIO_FAKE_H
|
||||
#define __GVC_PULSEAUDIO_FAKE_H
|
||||
|
||||
#ifdef WITH_INTROSPECTION
|
||||
|
||||
#ifndef PA_API_VERSION
|
||||
typedef int pa_channel_position_t;
|
||||
typedef guint32 pa_volume_t;
|
||||
typedef gpointer pa_context;
|
||||
#endif /* PA_API_VERSION */
|
||||
|
||||
#endif /* WITH_INTROSPECTION */
|
||||
|
||||
#endif /* __GVC_PULSEAUDIO_FAKE_H */
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user