Compare commits
202 Commits
overview-r
...
2.91.5
Author | SHA1 | Date | |
---|---|---|---|
d7a19fdd1b | |||
428d2fdb76 | |||
d77409876c | |||
81714ce1a3 | |||
6bae9ed20d | |||
44f70646d3 | |||
ed83b5494c | |||
84bac4414c | |||
4c4a703e63 | |||
c08021d91f | |||
df5ec16842 | |||
055a34877e | |||
a538027fe7 | |||
77289737c5 | |||
512798f9c6 | |||
5322e9a643 | |||
34f8568547 | |||
66e0e5b370 | |||
960af783f7 | |||
1a884535ad | |||
b2bb0bf10f | |||
4de15b2b57 | |||
493844d005 | |||
046308c582 | |||
cedcbc5fcf | |||
a46baeed0b | |||
cff503922c | |||
ce2efc6a67 | |||
778aa6be09 | |||
0052657a22 | |||
f60b995236 | |||
ceedc7e32c | |||
62507c9759 | |||
7beb7e0f65 | |||
ad67225bf8 | |||
dd0f721694 | |||
24f1e87813 | |||
68a0d7897f | |||
d9d56b7492 | |||
96a0b9d416 | |||
d48f064636 | |||
4e0a1c1152 | |||
272cbc1485 | |||
0ba7188625 | |||
6a2f038515 | |||
9f04009f80 | |||
2763d8dcc1 | |||
f8eb881728 | |||
0406b91bd5 | |||
e6678dadd8 | |||
a2fb8a8dce | |||
5f212b1ae2 | |||
23432e616d | |||
7d44c666ff | |||
ca09595350 | |||
b1dc2d967e | |||
c546ad9720 | |||
53f53c5a91 | |||
d2f675e41c | |||
d66370aecb | |||
1694148bdb | |||
7d0eeef90a | |||
23f3af832c | |||
52a87a22ec | |||
ea63f7562f | |||
d3de4e3fbd | |||
f326595202 | |||
4dd4c9f99f | |||
69bed929af | |||
db457db060 | |||
12c113a7a7 | |||
be96cb9291 | |||
bfc7b98e1d | |||
054f498201 | |||
6024b87d27 | |||
59b1aa26bb | |||
f96bc5c052 | |||
67c05e07b1 | |||
dafaab66b1 | |||
4fd24da4e4 | |||
bdfc516715 | |||
94da2531e7 | |||
9e99a8c25a | |||
bc83890c39 | |||
2d55eab62e | |||
d66207bc68 | |||
9f39ce5d27 | |||
eef194c3aa | |||
22f4aabadf | |||
2a19d5f143 | |||
7279cc1db8 | |||
e41b0bc16d | |||
e3aab2a90f | |||
7eec8a899a | |||
3262b63325 | |||
be59876c60 | |||
26f395bb84 | |||
7653cf6ad0 | |||
3203dc549c | |||
4ae9c978ce | |||
cb5c18c783 | |||
cb2babb1a0 | |||
c648a5f117 | |||
e562c863f7 | |||
cdaf8f3d19 | |||
a33aab07e6 | |||
26a5197d33 | |||
8be2800486 | |||
a2528a7a98 | |||
2332e2b0c5 | |||
a70f1f449b | |||
e425a183f7 | |||
0bbeb733a2 | |||
ff77994204 | |||
563951b789 | |||
ea65f5e795 | |||
670048e555 | |||
35b5cb9860 | |||
978cf9d3ab | |||
96fb6d8f16 | |||
c5c66ceb98 | |||
1efb0213c5 | |||
1a466cfce4 | |||
46ba718ab2 | |||
b40cc2c294 | |||
c86da9afbd | |||
d00933f044 | |||
172f78daad | |||
d7cc82909a | |||
7ce65e421b | |||
0c8941715d | |||
5ba9bb7a67 | |||
7b73df78c6 | |||
43d479c786 | |||
b9eca84d34 | |||
aef005f451 | |||
24669e3ba7 | |||
e99eefbb00 | |||
08b84b1449 | |||
7c980f42c9 | |||
42366e4be4 | |||
991a0c642b | |||
6aac51a2a7 | |||
6adc12368c | |||
eb2ee3f259 | |||
8b5cd4ef0f | |||
4517f60630 | |||
b25bad9995 | |||
c9b178b193 | |||
6b0fe1b0b0 | |||
c908a060b8 | |||
063fc8e29c | |||
d870fef122 | |||
6b723ed72a | |||
56fb7e2c58 | |||
41a5282b7e | |||
6f9ede569e | |||
e2e11b1a29 | |||
b59daac6f3 | |||
5fef9188c9 | |||
2c5d825c87 | |||
d5d7d8a391 | |||
7811632e6f | |||
6c5c3bedbe | |||
0942f50781 | |||
1eb6dfe1b8 | |||
1a77acfda6 | |||
ffd7eaede5 | |||
688a315cbf | |||
48fff0e96b | |||
e6bb06a7cc | |||
26225f0bfb | |||
3e4f744e56 | |||
2d2ac5b3f6 | |||
e06b608b10 | |||
f24e567dc4 | |||
1ea488bb3d | |||
8d47a150df | |||
dc24252e82 | |||
2167be053d | |||
926ddc2bdf | |||
4f7a28863c | |||
6e902f5fec | |||
01e7d6f30e | |||
d6f1c10b1b | |||
65f0b483f8 | |||
6a52deec7d | |||
3d468c26b0 | |||
a5e61e27c7 | |||
59ba112959 | |||
4800f63c3a | |||
1fce237538 | |||
71685a3b48 | |||
c0b9ce16a7 | |||
d1407d0026 | |||
d5bfc503fe | |||
de50cf80a8 | |||
5086bfedac | |||
f67ad23033 | |||
b7c1400eb3 | |||
b956c6f093 | |||
bfc850a94d |
6
.gitignore
vendored
6
.gitignore
vendored
@ -18,13 +18,12 @@ config
|
||||
configure
|
||||
data/gnome-shell.desktop
|
||||
data/gnome-shell.desktop.in
|
||||
data/gnome-shell-clock-preferences.desktop
|
||||
data/gnome-shell-clock-preferences.desktop.in
|
||||
data/gschemas.compiled
|
||||
data/org.gnome.shell.gschema.xml
|
||||
data/org.gnome.shell.gschema.valid
|
||||
data/org.gnome.accessibility.magnifier.gschema.xml
|
||||
data/org.gnome.accessibility.magnifier.gschema.valid
|
||||
js/misc/config.js
|
||||
intltool-extract.in
|
||||
intltool-merge.in
|
||||
intltool-update.in
|
||||
@ -45,12 +44,13 @@ src/Makefile
|
||||
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
|
||||
src/st.h
|
||||
src/stamp-st.h
|
||||
src/stamp-st.h.tmp
|
||||
stamp-h1
|
||||
tests/run-test.sh
|
||||
xmldocs.make
|
||||
|
35
configure.ac
35
configure.ac
@ -1,5 +1,5 @@
|
||||
AC_PREREQ(2.63)
|
||||
AC_INIT([gnome-shell],[2.91.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
AC_INIT([gnome-shell],[2.91.5],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_SRCDIR([src/shell-global.c])
|
||||
@ -57,11 +57,11 @@ fi
|
||||
|
||||
AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
|
||||
|
||||
CLUTTER_MIN_VERSION=1.3.14
|
||||
CLUTTER_MIN_VERSION=1.5.8
|
||||
GOBJECT_INTROSPECTION_MIN_VERSION=0.6.11
|
||||
GJS_MIN_VERSION=0.7
|
||||
MUTTER_MIN_VERSION=2.91.0
|
||||
GTK_MIN_VERSION=2.91.0
|
||||
MUTTER_MIN_VERSION=2.91.4
|
||||
GTK_MIN_VERSION=2.91.7
|
||||
GIO_MIN_VERSION=2.25.9
|
||||
|
||||
# Collect more than 20 libraries for a prize!
|
||||
@ -92,9 +92,21 @@ PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 gnome-desktop-3.0 >= 2.9
|
||||
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)
|
||||
|
||||
AC_MSG_CHECKING([for bluetooth support])
|
||||
PKG_CHECK_EXISTS([gnome-bluetooth-1.0 >= 2.90.0],
|
||||
[BLUETOOTH_DIR=`$PKG_CONFIG --variable=libdir gnome-bluetooth-1.0`/gnome-bluetooth
|
||||
BLUETOOTH_LIBS="-L'$BLUETOOTH_DIR' -lgnome-bluetooth-applet"
|
||||
AC_SUBST([BLUETOOTH_LIBS],["$BLUETOOTH_LIBS"])
|
||||
AC_DEFINE_UNQUOTED([BLUETOOTH_DIR],["$BLUETOOTH_DIR"],[Path to installed GnomeBluetooth typelib and library])
|
||||
AC_DEFINE([HAVE_BLUETOOTH],[1],[Define if you have libgnome-bluetooth-applet])
|
||||
AC_SUBST([HAVE_BLUETOOTH],[1])
|
||||
AC_MSG_RESULT([yes])],
|
||||
[AC_DEFINE([HAVE_BLUETOOTH],[0])
|
||||
AC_SUBST([HAVE_BLUETOOTH],[0])
|
||||
AC_MSG_RESULT([no])])
|
||||
|
||||
MUTTER_BIN_DIR=`$PKG_CONFIG --variable=exec_prefix mutter-plugins`/bin
|
||||
# FIXME: metacity-plugins.pc should point directly to its .gir file
|
||||
MUTTER_LIB_DIR=`$PKG_CONFIG --variable=libdir mutter-plugins`
|
||||
@ -103,11 +115,7 @@ AC_SUBST(MUTTER_BIN_DIR)
|
||||
AC_SUBST(MUTTER_LIB_DIR)
|
||||
AC_SUBST(MUTTER_PLUGIN_DIR)
|
||||
|
||||
GJS_JS_DIR=`$PKG_CONFIG --variable=jsdir gjs-1.0`
|
||||
GJS_JS_NATIVE_DIR=`$PKG_CONFIG --variable=jsnativedir gjs-1.0`
|
||||
GJS_CONSOLE=`$PKG_CONFIG --variable=gjs_console gjs-1.0`
|
||||
AC_SUBST(GJS_JS_DIR)
|
||||
AC_SUBST(GJS_JS_NATIVE_DIR)
|
||||
AC_SUBST(GJS_CONSOLE)
|
||||
|
||||
AC_CHECK_FUNCS(fdwalk)
|
||||
@ -157,18 +165,11 @@ changequote([,])dnl
|
||||
AC_PATH_PROG(mutter, [mutter])
|
||||
AC_SUBST(mutter)
|
||||
|
||||
AC_MSG_CHECKING([if mutter was compiled with GTK+-3.0])
|
||||
if $PKG_CONFIG --libs libmutter-private | grep gtk-x11-3 >/dev/null; then
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_ERROR([GNOME Shell requires Mutter to be compiled against GTK+-3.0])
|
||||
fi
|
||||
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
data/Makefile
|
||||
js/Makefile
|
||||
js/misc/config.js
|
||||
src/Makefile
|
||||
tests/Makefile
|
||||
po/Makefile.in
|
||||
|
@ -1,5 +1,5 @@
|
||||
desktopdir=$(datadir)/applications
|
||||
desktop_DATA = gnome-shell.desktop gnome-shell-clock-preferences.desktop
|
||||
desktop_DATA = gnome-shell.desktop
|
||||
|
||||
# We substitute in bindir so it works as an autostart
|
||||
# file when built in a non-system prefix
|
||||
@ -12,8 +12,6 @@ desktop_DATA = gnome-shell.desktop gnome-shell-clock-preferences.desktop
|
||||
%.desktop:%.desktop.in
|
||||
$(AM_V_GEN) sed s/^_// < $< > $@ || rm $@
|
||||
|
||||
dist_pkgdata_DATA = clock-preferences.ui
|
||||
|
||||
imagesdir = $(pkgdatadir)/images
|
||||
dist_images_DATA = \
|
||||
close-black.svg \
|
||||
@ -27,6 +25,7 @@ dist_theme_DATA = \
|
||||
theme/corner-ripple.png \
|
||||
theme/dash-placeholder.svg \
|
||||
theme/dialog-error.svg \
|
||||
theme/filter-selected.svg \
|
||||
theme/gnome-shell.css \
|
||||
theme/mosaic-view-active.svg \
|
||||
theme/mosaic-view.svg \
|
||||
@ -87,7 +86,6 @@ install-data-local:
|
||||
|
||||
EXTRA_DIST = \
|
||||
gnome-shell.desktop.in.in \
|
||||
gnome-shell-clock-preferences.desktop.in.in \
|
||||
$(menu_DATA) \
|
||||
$(gconfschema_DATA) \
|
||||
$(shaders_DATA) \
|
||||
@ -96,7 +94,6 @@ EXTRA_DIST = \
|
||||
|
||||
CLEANFILES = \
|
||||
gnome-shell.desktop.in \
|
||||
gnome-shell-clock-preferences.desktop.in \
|
||||
$(desktop_DATA) \
|
||||
$(gsettings_SCHEMAS) \
|
||||
gschemas.compiled
|
||||
|
@ -1,188 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<interface domain="gnome-shell">
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy project-wide -->
|
||||
<object class="GtkDialog" id="prefs-dialog">
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Clock Preferences</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="type_hint">normal</property>
|
||||
<property name="has_separator">False</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkVBox" id="dialog-vbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">2</property>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">18</property>
|
||||
<child>
|
||||
<object class="GtkFrame" id="frame1">
|
||||
<property name="visible">True</property>
|
||||
<property name="label_xalign">0</property>
|
||||
<property name="shadow_type">none</property>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment1">
|
||||
<property name="visible">True</property>
|
||||
<property name="top_padding">6</property>
|
||||
<property name="left_padding">12</property>
|
||||
<property name="right_padding">6</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="12hr_radio">
|
||||
<property name="label" translatable="yes">_12 hour format</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="24hr_radio">
|
||||
<property name="label" translatable="yes">_24 hour format</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<property name="group">12hr_radio</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="label">
|
||||
<object class="GtkLabel" id="label_format">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Clock Format</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFrame" id="frame2">
|
||||
<property name="visible">True</property>
|
||||
<property name="label_xalign">0</property>
|
||||
<property name="shadow_type">none</property>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="alignment2">
|
||||
<property name="visible">True</property>
|
||||
<property name="top_padding">6</property>
|
||||
<property name="left_padding">12</property>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox2">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="date_check">
|
||||
<property name="label" translatable="yes">Show the _date</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="seconds_check">
|
||||
<property name="label" translatable="yes">Show seco_nds</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="label">
|
||||
<object class="GtkLabel" id="label_display">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Panel Display</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="padding">6</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkHButtonBox" id="dialog-action_area1">
|
||||
<property name="visible">True</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="prefs_close_button">
|
||||
<property name="label">gtk-close</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="0">prefs_close_button</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
</interface>
|
@ -1,15 +0,0 @@
|
||||
[Desktop Entry]
|
||||
_Name=Clock
|
||||
_Comment=Customize the panel clock
|
||||
Exec=@bindir@/gnome-shell-clock-preferences
|
||||
Icon=gnome-panel-clock
|
||||
Terminal=false
|
||||
Type=Application
|
||||
StartupNotify=true
|
||||
Categories=GNOME;GTK;Settings;DesktopSettings;
|
||||
OnlyShowIn=GNOME;
|
||||
X-GNOME-ShellOnly=true
|
||||
X-GNOME-Bugzilla-Bugzilla=GNOME
|
||||
X-GNOME-Bugzilla-Product=gnome-shell
|
||||
X-GNOME-Bugzilla-Component=general
|
||||
X-GNOME-Bugzilla-Version=@VERSION@
|
@ -44,19 +44,20 @@
|
||||
</schema>
|
||||
|
||||
<schema>
|
||||
<key>/schemas/desktop/gnome/shell/windows/side_by_side_tiling</key>
|
||||
<applyto>/desktop/gnome/shell/windows/side_by_side_tiling</applyto>
|
||||
<key>/schemas/desktop/gnome/shell/windows/edge_tiling</key>
|
||||
<applyto>/desktop/gnome/shell/windows/edge_tiling</applyto>
|
||||
<owner>gnome-shell</owner>
|
||||
<type>bool</type>
|
||||
<default>true</default>
|
||||
<locale name="C">
|
||||
<short>enable side-by-side tiling when dropping windows on screen edges</short>
|
||||
<short>enable edge tiling when dropping windows on screen edges</short>
|
||||
<long>
|
||||
If enabled, dropping windows on screen edges maximizes them
|
||||
If enabled, dropping windows on vertical screen edges maximizes them
|
||||
vertically and resizes them horizontally to cover half of the
|
||||
available area.
|
||||
available area. Dropping windows on the top screen edge maximizes them
|
||||
completely.
|
||||
|
||||
This key overrides /apps/metacity/general/side_by_side_tiling when
|
||||
This key overrides /apps/metacity/general/edge_tiling when
|
||||
running GNOME Shell.
|
||||
</long>
|
||||
</locale>
|
||||
|
@ -1,12 +1,30 @@
|
||||
<Menu>
|
||||
<DefaultLayout>
|
||||
<Menuname>Apps</Menuname>
|
||||
<Menuname>Games</Menuname>
|
||||
<Menuname>Tools</Menuname>
|
||||
</DefaultLayout>
|
||||
<DefaultLayout>
|
||||
<Menuname>Accessories</Menuname>
|
||||
<Menuname>Games</Menuname>
|
||||
<Menuname>Graphics</Menuname>
|
||||
<Menuname>Internet</Menuname>
|
||||
<Menuname>Multimedia</Menuname>
|
||||
<Menuname>Office</Menuname>
|
||||
<Menuname>Other</Menuname>
|
||||
</DefaultLayout>
|
||||
|
||||
<Name>Applications</Name>
|
||||
<AppDir>/usr/local/share/applications</AppDir>
|
||||
<DefaultAppDirs/>
|
||||
|
||||
<Menu>
|
||||
<Name>Accessories</Name>
|
||||
<Include>
|
||||
<And>
|
||||
<Category>Utility</Category>
|
||||
<Not>
|
||||
<Category>System</Category>
|
||||
</Not>
|
||||
</And>
|
||||
</Include>
|
||||
</Menu>
|
||||
|
||||
<Menu>
|
||||
<Name>Games</Name>
|
||||
<Include>
|
||||
@ -15,21 +33,47 @@
|
||||
</And>
|
||||
</Include>
|
||||
</Menu>
|
||||
|
||||
<Menu>
|
||||
<Name>Tools</Name>
|
||||
<Name>Graphics</Name>
|
||||
<Include>
|
||||
<Category>Development</Category>
|
||||
<And>
|
||||
<Category>System</Category>
|
||||
<Not>
|
||||
<Category>Settings</Category>
|
||||
</Not>
|
||||
<Category>Graphics</Category>
|
||||
</And>
|
||||
<Category>Utility</Category>
|
||||
</Include>
|
||||
</Menu>
|
||||
|
||||
<Menu>
|
||||
<Name>Apps</Name>
|
||||
<Name>Internet</Name>
|
||||
<Include>
|
||||
<And>
|
||||
<Category>Network</Category>
|
||||
<Not><Category>Settings</Category></Not>
|
||||
</And>
|
||||
</Include>
|
||||
</Menu>
|
||||
|
||||
<Menu>
|
||||
<Name>Multimedia</Name>
|
||||
<Include>
|
||||
<And>
|
||||
<Category>AudioVideo</Category>
|
||||
<Not><Category>Settings</Category></Not>
|
||||
</And>
|
||||
</Include>
|
||||
</Menu>
|
||||
|
||||
<Menu>
|
||||
<Name>Office</Name>
|
||||
<Include>
|
||||
<And>
|
||||
<Category>Office</Category>
|
||||
</And>
|
||||
</Include>
|
||||
</Menu>
|
||||
|
||||
<Menu>
|
||||
<Name>Other</Name>
|
||||
<OnlyUnallocated/>
|
||||
<Include>
|
||||
<And>
|
||||
|
@ -30,7 +30,7 @@
|
||||
</_description>
|
||||
</key>
|
||||
<key name="favorite-apps" type="as">
|
||||
<default>[ 'mozilla-firefox.desktop', 'evolution.desktop', 'openoffice.org-writer.desktop' ]</default>
|
||||
<default>[ 'mozilla-firefox.desktop', 'evolution.desktop', 'empathy.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'openoffice.org-writer.desktop', 'nautilus.desktop' ]</default>
|
||||
<_summary>List of desktop file IDs for favorite applications</_summary>
|
||||
<_description>
|
||||
The applications corresponding to these identifiers
|
||||
@ -59,51 +59,18 @@
|
||||
|
||||
<schema id="org.gnome.shell.clock" path="/apps/gnome-shell/clock/"
|
||||
gettext-domain="@GETTEXT_PACKAGE@">
|
||||
<key name="format" type="s">
|
||||
<default l10n="messages" context="hour_format">
|
||||
<!-- TRANSLATORS: This is the default hour format, choose ONLY '12-hour' or '24-hour'. -->
|
||||
"12-hour"
|
||||
</default>
|
||||
<_summary>Hour format</_summary>
|
||||
<_description>
|
||||
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.
|
||||
</_description>
|
||||
<choices>
|
||||
<choice value="12-hour"/>
|
||||
<choice value="24-hour"/>
|
||||
<choice value="unix"/>
|
||||
<choice value="custom"/>
|
||||
</choices>
|
||||
</key>
|
||||
<key name="custom-format" type="s">
|
||||
<default>''</default>
|
||||
<_summary>Custom format of the clock</_summary>
|
||||
<_description>
|
||||
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.
|
||||
</_description>
|
||||
</key>
|
||||
<key name="show-seconds" type="b">
|
||||
<default>false</default>
|
||||
<_summary>Show time with seconds</_summary>
|
||||
<_description>
|
||||
If true and format is either "12-hour" or "24-hour", display seconds in time.
|
||||
If true, display seconds in time.
|
||||
</_description>
|
||||
</key>
|
||||
<key name="show-date" type="b">
|
||||
<default>false</default>
|
||||
<_summary>Show date in clock</_summary>
|
||||
<_description>
|
||||
If true and format is either "12-hour" or "24-hour",
|
||||
display date in the clock, in addition to time.
|
||||
If true, display date in the clock, in addition to time.
|
||||
</_description>
|
||||
</key>
|
||||
</schema>
|
||||
|
81
data/theme/filter-selected.svg
Normal file
81
data/theme/filter-selected.svg
Normal file
@ -0,0 +1,81 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="10"
|
||||
height="20"
|
||||
id="svg10003"
|
||||
version="1.1"
|
||||
inkscape:version="0.47 r22583"
|
||||
sodipodi:docname="filter-selected.svg">
|
||||
<defs
|
||||
id="defs10005">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 32 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="64 : 32 : 1"
|
||||
inkscape:persp3d-origin="32 : 21.333333 : 1"
|
||||
id="perspective10011" />
|
||||
<inkscape:perspective
|
||||
id="perspective9998"
|
||||
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||
inkscape:vp_z="1 : 0.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_x="0 : 0.5 : 1"
|
||||
sodipodi:type="inkscape:persp3d" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="5.5"
|
||||
inkscape:cx="32"
|
||||
inkscape:cy="10.181818"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="994"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata10008">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(0,-44)">
|
||||
<path
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-filename="/home/jimmac/src/cvs/gnome/gnome-shell-design/mockups/app-picker.png"
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="rect34320"
|
||||
d="m -0.18726572,54.181804 10.55634072,10.55636 10e-6,-21.11269 z"
|
||||
style="opacity:0.21000001;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.99999988;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.6 KiB |
@ -48,21 +48,6 @@ StScrollView StScrollBar
|
||||
min-height: 16px;
|
||||
}
|
||||
|
||||
StScrollView > .top-shadow
|
||||
{
|
||||
background-gradient-direction: vertical;
|
||||
background-gradient-start: #111111;
|
||||
background-gradient-end: rgba(17, 17, 17, 0);
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
StScrollView > .bottom-shadow
|
||||
{
|
||||
background-gradient-direction: vertical;
|
||||
background-gradient-start: rgba(17, 17, 17, 0);
|
||||
background-gradient-end: #111111;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
StScrollBar StBin#trough {
|
||||
background-color: #080808;
|
||||
@ -120,6 +105,10 @@ StTooltip StLabel {
|
||||
min-width: 200px;
|
||||
}
|
||||
|
||||
.popup-sub-menu {
|
||||
background-color: #606060;
|
||||
}
|
||||
|
||||
/* The remaining popup-menu sizing is all done in ems, so that if you
|
||||
* override .popup-menu.font-size, everything else will scale with it.
|
||||
*/
|
||||
@ -149,6 +138,7 @@ StTooltip StLabel {
|
||||
|
||||
.popup-slider-menu-item {
|
||||
height: 1em;
|
||||
min-width: 15em;
|
||||
-slider-height: 0.3em;
|
||||
-slider-background-color: #333333;
|
||||
-slider-border-color: #5f5f5f;
|
||||
@ -224,7 +214,7 @@ StTooltip StLabel {
|
||||
transition-duration: 100;
|
||||
}
|
||||
|
||||
.panel-button:active, .panel-button:checked, .panel-button:pressed {
|
||||
.panel-button:active, .panel-button:checked, .panel-button:pressed, .panel-button:focus {
|
||||
background-gradient-direction: vertical;
|
||||
background-gradient-start: #3c3c3c;
|
||||
background-gradient-end: #131313;
|
||||
@ -262,54 +252,11 @@ StTooltip StLabel {
|
||||
background-color: rgba(0,0,0,0.6);
|
||||
}
|
||||
|
||||
.new-workspace-area {
|
||||
border: 2px solid rgba(255, 255, 255, 0.8);
|
||||
border-radius: 10px;
|
||||
background-color: #111;
|
||||
}
|
||||
|
||||
.new-workspace-area-internal {
|
||||
background-gradient-direction: horizontal;
|
||||
background-gradient-start: rgba(16, 16, 16, 0);
|
||||
background-gradient-end: rgba(16, 16, 16, 1.0);
|
||||
background-image: url("move-window-on-new.svg");
|
||||
}
|
||||
|
||||
.new-workspace-area:hover {
|
||||
border: 2px solid rgba(255, 255, 255, 1.0);
|
||||
background-gradient-direction: horizontal;
|
||||
background-gradient-start: rgba(130, 130, 130, 0.9);
|
||||
background-gradient-end: rgba(16, 16, 16, 0.9);
|
||||
}
|
||||
|
||||
.left-workspaces-shadow {
|
||||
background-gradient-direction: horizontal;
|
||||
background-gradient-start: rgba(16, 16, 16, 1.0);
|
||||
background-gradient-end: rgba(16, 16, 16, 0.0);
|
||||
}
|
||||
|
||||
.right-workspaces-shadow {
|
||||
background-gradient-direction: horizontal;
|
||||
background-gradient-end: rgba(16, 16, 16, 1.0);
|
||||
background-gradient-start: rgba(16, 16, 16, 0);
|
||||
}
|
||||
|
||||
.workspaces {
|
||||
.workspaces-view {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.workspaces.single {
|
||||
spacing: 25px;
|
||||
}
|
||||
|
||||
.workspaces.mosaic {
|
||||
spacing: 15px;
|
||||
}
|
||||
|
||||
.workspaces-bar {
|
||||
spacing: 5px;
|
||||
}
|
||||
|
||||
.workspace-indicator-panel {
|
||||
spacing: 8px;
|
||||
}
|
||||
@ -324,27 +271,6 @@ StTooltip StLabel {
|
||||
background: rgba(255,255,255,0.8);
|
||||
}
|
||||
|
||||
.window-caption {
|
||||
background: rgba(0,0,0,0.8);
|
||||
border: 1px solid rgba(128,128,128,0.40);
|
||||
border-radius: 10px;
|
||||
font-size: 12px;
|
||||
padding: 2px 8px;
|
||||
-shell-caption-spacing: 4px;
|
||||
}
|
||||
|
||||
.window-close {
|
||||
background-image: url("close-window.svg");
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
-st-shadow: -2px 2px 6px rgba(0,0,0,0.5);
|
||||
-shell-close-overlap: 16px;
|
||||
}
|
||||
|
||||
.single-view-controls {
|
||||
padding: 8px 0px;
|
||||
}
|
||||
|
||||
.workspace-controls {
|
||||
width: 48px;
|
||||
font-size: 32px;
|
||||
@ -371,6 +297,23 @@ StTooltip StLabel {
|
||||
background-color: rgba(128, 128, 128, 0.2);
|
||||
}
|
||||
|
||||
.window-caption {
|
||||
background: rgba(0,0,0,0.8);
|
||||
border: 1px solid rgba(128,128,128,0.40);
|
||||
border-radius: 10px;
|
||||
font-size: 12px;
|
||||
padding: 2px 8px;
|
||||
-shell-caption-spacing: 4px;
|
||||
}
|
||||
|
||||
.window-close {
|
||||
background-image: url("close-window.svg");
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
-st-shadow: -2px 2px 6px rgba(0,0,0,0.5);
|
||||
-shell-close-overlap: 16px;
|
||||
}
|
||||
|
||||
/* Dash */
|
||||
|
||||
#dash {
|
||||
@ -383,6 +326,11 @@ StTooltip StLabel {
|
||||
border-radius: 0px 9px 9px 0px;
|
||||
}
|
||||
|
||||
#dash:empty {
|
||||
height: 100px;
|
||||
width: 60px;
|
||||
}
|
||||
|
||||
.dash-placeholder {
|
||||
background-image: url("dash-placeholder.svg");
|
||||
height: 27px;
|
||||
@ -390,10 +338,15 @@ StTooltip StLabel {
|
||||
|
||||
#viewSelector {
|
||||
spacing: 16px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
#viewSelectorTabBar {
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
#searchArea {
|
||||
padding: 0px 12px;
|
||||
padding: 0px 24px;
|
||||
}
|
||||
|
||||
#searchEntry {
|
||||
@ -432,10 +385,14 @@ StTooltip StLabel {
|
||||
color: #888a85;
|
||||
font-weight: bold;
|
||||
padding: 0px 12px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.view-tab-title:selected {
|
||||
color: white;
|
||||
color: #000000;
|
||||
background-color: #c2c7cd;
|
||||
border-radius: 4px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.view-tab-boxpointer {
|
||||
@ -522,27 +479,28 @@ StTooltip StLabel {
|
||||
|
||||
/* Apps */
|
||||
|
||||
.overview-pane {
|
||||
width: 440px;
|
||||
}
|
||||
|
||||
.icon-grid {
|
||||
spacing: 6px;
|
||||
spacing: 36px;
|
||||
-shell-grid-item-size: 70px;
|
||||
}
|
||||
|
||||
.all-app {
|
||||
padding: 10px;
|
||||
padding: 16px 25px 16px 16px;
|
||||
spacing: 20px;
|
||||
}
|
||||
|
||||
.app-section-divider-container {
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
.app-filter {
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
height: 40px;
|
||||
color: #aaa;
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.app-section-divider {
|
||||
height: 2px;
|
||||
background-image: url("separator-white.png");
|
||||
.app-filter:selected {
|
||||
color: #ffffff;
|
||||
background-image: url("filter-selected.svg");
|
||||
background-position: 190px 10px;
|
||||
}
|
||||
|
||||
#dash > .app-well-app {
|
||||
@ -555,6 +513,7 @@ StTooltip StLabel {
|
||||
|
||||
.remove-favorite-icon:hover {
|
||||
color: white;
|
||||
-st-shadow: black 0px 2px 2px;
|
||||
}
|
||||
|
||||
.app-well-app > .overview-icon,
|
||||
@ -814,6 +773,10 @@ StTooltip StLabel {
|
||||
color: #cccccc;
|
||||
}
|
||||
|
||||
.url-highlighter {
|
||||
link-color: #ccccff;
|
||||
}
|
||||
|
||||
/* Message Tray */
|
||||
#message-tray {
|
||||
background-gradient-direction: vertical;
|
||||
@ -860,6 +823,10 @@ StTooltip StLabel {
|
||||
height: 1em;
|
||||
}
|
||||
|
||||
#notification-scrollview > StScrollBar {
|
||||
padding-left: 6px;
|
||||
}
|
||||
|
||||
#notification-body {
|
||||
spacing: 5px;
|
||||
}
|
||||
@ -920,7 +887,14 @@ StTooltip StLabel {
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.chat-response {
|
||||
.chat-meta-message {
|
||||
padding-left: 4px;
|
||||
border-radius: 4px;
|
||||
font-size: 14px;
|
||||
color: #bbbbbb;
|
||||
}
|
||||
|
||||
#notification StEntry {
|
||||
padding: 4px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #565656;
|
||||
@ -928,10 +902,9 @@ StTooltip StLabel {
|
||||
background-color: #404040;
|
||||
caret-color: #ffffff;
|
||||
caret-size: 1px;
|
||||
height: 18px;
|
||||
}
|
||||
|
||||
.chat-response:focus {
|
||||
#notification StEntry:focus {
|
||||
border: 1px solid #3a3a3a;
|
||||
color: #545454;
|
||||
background-color: #e8e8e8;
|
||||
@ -958,6 +931,7 @@ StTooltip StLabel {
|
||||
}
|
||||
|
||||
.summary-source {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.summary-source-button {
|
||||
@ -972,7 +946,6 @@ StTooltip StLabel {
|
||||
.source-title {
|
||||
font: 12px sans-serif;
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
@ -1025,6 +998,15 @@ StTooltip StLabel {
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.switcher-list .item-box:outlined {
|
||||
padding: 6px;
|
||||
border: 2px solid rgba(85,85,85,1.0);
|
||||
}
|
||||
|
||||
.switcher-list .item-box:selected {
|
||||
background: rgba(255,255,255,0.33);
|
||||
}
|
||||
|
||||
.switcher-list .thumbnail-box {
|
||||
padding: 2px;
|
||||
spacing: 4px;
|
||||
@ -1034,18 +1016,6 @@ StTooltip StLabel {
|
||||
width: 256px;
|
||||
}
|
||||
|
||||
.switcher-list .outlined-item-box {
|
||||
padding: 6px;
|
||||
border: 2px solid rgba(85,85,85,1.0);
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.switcher-list .selected-item-box {
|
||||
padding: 8px;
|
||||
border-radius: 8px;
|
||||
background: rgba(255,255,255,0.33);
|
||||
}
|
||||
|
||||
.switcher-list .separator {
|
||||
width: 1px;
|
||||
background: rgba(255,255,255,0.33);
|
||||
|
@ -2,20 +2,22 @@
|
||||
jsdir = $(pkgdatadir)/js
|
||||
|
||||
nobase_dist_js_DATA = \
|
||||
misc/config.js \
|
||||
misc/docInfo.js \
|
||||
misc/fileUtils.js \
|
||||
misc/format.js \
|
||||
misc/gnomeSession.js \
|
||||
misc/params.js \
|
||||
misc/telepathy.js \
|
||||
misc/utils.js \
|
||||
perf/core.js \
|
||||
prefs/clockPreferences.js \
|
||||
ui/altTab.js \
|
||||
ui/appDisplay.js \
|
||||
ui/appFavorites.js \
|
||||
ui/boxpointer.js \
|
||||
ui/calendar.js \
|
||||
ui/chrome.js \
|
||||
ui/ctrlAltTab.js \
|
||||
ui/dash.js \
|
||||
ui/dnd.js \
|
||||
ui/docDisplay.js \
|
||||
@ -46,6 +48,7 @@ nobase_dist_js_DATA = \
|
||||
ui/status/accessibility.js \
|
||||
ui/status/power.js \
|
||||
ui/status/volume.js \
|
||||
ui/status/bluetooth.js \
|
||||
ui/telepathyClient.js \
|
||||
ui/tweener.js \
|
||||
ui/viewSelector.js \
|
||||
@ -53,4 +56,5 @@ nobase_dist_js_DATA = \
|
||||
ui/windowManager.js \
|
||||
ui/workspace.js \
|
||||
ui/workspacesView.js \
|
||||
ui/workspaceSwitcherPopup.js
|
||||
ui/workspaceSwitcherPopup.js \
|
||||
ui/xdndHandler.js
|
||||
|
3
js/misc/config.js.in
Normal file
3
js/misc/config.js.in
Normal file
@ -0,0 +1,3 @@
|
||||
/* mode: js2; indent-tabs-mode: nil; tab-size: 4 */
|
||||
const HAVE_BLUETOOTH = @HAVE_BLUETOOTH@;
|
||||
|
19
js/misc/utils.js
Normal file
19
js/misc/utils.js
Normal file
@ -0,0 +1,19 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
/* http://daringfireball.net/2010/07/improved_regex_for_matching_urls */
|
||||
const _urlRegexp = /\b(([a-z][\w-]+:(\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)([^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))/gi;
|
||||
|
||||
// findUrls:
|
||||
// @str: string to find URLs in
|
||||
//
|
||||
// Searches @str for URLs and returns an array of objects with %url
|
||||
// properties showing the matched URL string, and %pos properties indicating
|
||||
// the position within @str where the URL was found.
|
||||
//
|
||||
// Return value: the list of match objects, as described above
|
||||
function findUrls(str) {
|
||||
let res = [], match;
|
||||
while ((match = _urlRegexp.exec(str)))
|
||||
res.push({ url: match[0], pos: match.index });
|
||||
return res;
|
||||
}
|
@ -1,97 +0,0 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const Gio = imports.gi.Gio;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
|
||||
const Lang = imports.lang;
|
||||
const Signals = imports.signals;
|
||||
|
||||
const Gettext = imports.gettext;
|
||||
|
||||
const FORMAT_KEY = 'format';
|
||||
const SHOW_DATE_KEY = 'show-date';
|
||||
const SHOW_SECONDS_KEY = 'show-seconds';
|
||||
|
||||
|
||||
function ClockPreferences(uiFile) {
|
||||
this._init(uiFile);
|
||||
};
|
||||
|
||||
ClockPreferences.prototype = {
|
||||
_init: function(uiFile) {
|
||||
let builder = new Gtk.Builder();
|
||||
builder.add_from_file(uiFile);
|
||||
|
||||
this._dialog = builder.get_object('prefs-dialog');
|
||||
this._dialog.connect('response', Lang.bind(this, this._onResponse));
|
||||
|
||||
this._12hrRadio = builder.get_object('12hr_radio');
|
||||
this._24hrRadio = builder.get_object('24hr_radio');
|
||||
this._dateCheck = builder.get_object('date_check');
|
||||
this._secondsCheck = builder.get_object('seconds_check');
|
||||
|
||||
delete builder;
|
||||
|
||||
this._settings = new Gio.Settings({ schema: 'org.gnome.shell.clock' });
|
||||
this._notifyId = this._settings.connect('changed',
|
||||
Lang.bind(this,
|
||||
this._updateDialog));
|
||||
|
||||
this._12hrRadio.connect('toggled', Lang.bind(this,
|
||||
function() {
|
||||
let format = this._12hrRadio.active ? '12-hour' : '24-hour';
|
||||
this._settings.set_string(FORMAT_KEY, format);
|
||||
}));
|
||||
this._dateCheck.connect('toggled', Lang.bind(this,
|
||||
function() {
|
||||
this._settings.set_boolean(SHOW_DATE_KEY,
|
||||
this._dateCheck.active);
|
||||
}));
|
||||
this._secondsCheck.connect('toggled', Lang.bind(this,
|
||||
function() {
|
||||
this._settings.set_boolean(SHOW_SECONDS_KEY,
|
||||
this._secondsCheck.active);
|
||||
}));
|
||||
|
||||
this._updateDialog();
|
||||
},
|
||||
|
||||
show: function() {
|
||||
this._dialog.show_all();
|
||||
},
|
||||
|
||||
_updateDialog: function() {
|
||||
let format = this._settings.get_string(FORMAT_KEY);
|
||||
this._12hrRadio.active = (format == "12-hour");
|
||||
this._24hrRadio.active = (format == "24-hour");
|
||||
|
||||
this._dateCheck.active = this._settings.get_boolean(SHOW_DATE_KEY);
|
||||
this._secondsCheck.active = this._settings.get_boolean(SHOW_SECONDS_KEY);
|
||||
},
|
||||
|
||||
_onResponse: function() {
|
||||
this._dialog.destroy();
|
||||
this._settings.disconnect(this._notifyId);
|
||||
this.emit('destroy');
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(ClockPreferences.prototype);
|
||||
|
||||
function main(params) {
|
||||
if ('progName' in params)
|
||||
GLib.set_prgname(params['progName']);
|
||||
if ('localeDir' in params)
|
||||
Gettext.bindtextdomain('gnome-shell', params['localeDir']);
|
||||
|
||||
Gtk.init(null, null);
|
||||
|
||||
let clockPrefs = new ClockPreferences(params['uiFile']);
|
||||
clockPrefs.connect('destroy',
|
||||
function() {
|
||||
Gtk.main_quit();
|
||||
});
|
||||
clockPrefs.show();
|
||||
|
||||
Gtk.main();
|
||||
}
|
@ -34,7 +34,8 @@ function AltTabPopup() {
|
||||
AltTabPopup.prototype = {
|
||||
_init : function() {
|
||||
this.actor = new Shell.GenericContainer({ name: 'altTabPopup',
|
||||
reactive: true });
|
||||
reactive: true,
|
||||
visible: false });
|
||||
|
||||
this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
|
||||
this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
|
||||
@ -126,8 +127,8 @@ AltTabPopup.prototype = {
|
||||
return false;
|
||||
this._haveModal = true;
|
||||
|
||||
this._keyPressEventId = global.stage.connect('key-press-event', Lang.bind(this, this._keyPressEvent));
|
||||
this._keyReleaseEventId = global.stage.connect('key-release-event', Lang.bind(this, this._keyReleaseEvent));
|
||||
this.actor.connect('key-press-event', Lang.bind(this, this._keyPressEvent));
|
||||
this.actor.connect('key-release-event', Lang.bind(this, this._keyReleaseEvent));
|
||||
|
||||
this.actor.connect('button-press-event', Lang.bind(this, this._clickedOutside));
|
||||
this.actor.connect('scroll-event', Lang.bind(this, this._onScroll));
|
||||
@ -365,15 +366,18 @@ AltTabPopup.prototype = {
|
||||
},
|
||||
|
||||
destroy : function() {
|
||||
Tweener.addTween(this.actor,
|
||||
{ opacity: 0,
|
||||
time: POPUP_FADE_TIME,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: Lang.bind(this,
|
||||
function() {
|
||||
this.actor.destroy();
|
||||
})
|
||||
});
|
||||
if (this.actor.visible) {
|
||||
Tweener.addTween(this.actor,
|
||||
{ opacity: 0,
|
||||
time: POPUP_FADE_TIME,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: Lang.bind(this,
|
||||
function() {
|
||||
this.actor.destroy();
|
||||
})
|
||||
});
|
||||
} else
|
||||
this.actor.destroy();
|
||||
},
|
||||
|
||||
_onDestroy : function() {
|
||||
@ -383,11 +387,6 @@ AltTabPopup.prototype = {
|
||||
if (this._thumbnails)
|
||||
this._destroyThumbnails();
|
||||
|
||||
if (this._keyPressEventId)
|
||||
global.stage.disconnect(this._keyPressEventId);
|
||||
if (this._keyReleaseEventId)
|
||||
global.stage.disconnect(this._keyReleaseEventId);
|
||||
|
||||
if (this._motionTimeoutId != 0)
|
||||
Mainloop.source_remove(this._motionTimeoutId);
|
||||
if (this._thumbnailTimeoutId != 0)
|
||||
@ -609,16 +608,18 @@ SwitcherList.prototype = {
|
||||
},
|
||||
|
||||
highlight: function(index, justOutline) {
|
||||
if (this._highlighted != -1)
|
||||
this._items[this._highlighted].style_class = 'item-box';
|
||||
if (this._highlighted != -1) {
|
||||
this._items[this._highlighted].remove_style_pseudo_class('outlined');
|
||||
this._items[this._highlighted].remove_style_pseudo_class('selected');
|
||||
}
|
||||
|
||||
this._highlighted = index;
|
||||
|
||||
if (this._highlighted != -1) {
|
||||
if (justOutline)
|
||||
this._items[this._highlighted].style_class = 'outlined-item-box';
|
||||
this._items[this._highlighted].add_style_pseudo_class('outlined');
|
||||
else
|
||||
this._items[this._highlighted].style_class = 'selected-item-box';
|
||||
this._items[this._highlighted].add_style_pseudo_class('selected');
|
||||
}
|
||||
|
||||
let monitor = global.get_primary_monitor();
|
||||
@ -864,9 +865,11 @@ AppSwitcher.prototype = {
|
||||
while(this._items.length > 1 && this._items[j].style_class != 'item-box') {
|
||||
j++;
|
||||
}
|
||||
let iconPadding = this._items[j].get_theme_node().get_horizontal_padding();
|
||||
let themeNode = this._items[j].get_theme_node();
|
||||
let iconPadding = themeNode.get_horizontal_padding();
|
||||
let iconBorder = themeNode.get_border_width(St.Side.LEFT) + themeNode.get_border_width(St.Side.RIGHT);
|
||||
let [iconMinHeight, iconNaturalHeight] = this.icons[j].label.get_preferred_height(-1);
|
||||
let iconSpacing = iconNaturalHeight + iconPadding;
|
||||
let iconSpacing = iconNaturalHeight + iconPadding + iconBorder;
|
||||
let totalSpacing = this._list.spacing * (this._items.length - 1);
|
||||
if (this._separator)
|
||||
totalSpacing += this._separator.width + this._list.spacing;
|
||||
|
@ -29,10 +29,20 @@ function AlphabeticalView() {
|
||||
|
||||
AlphabeticalView.prototype = {
|
||||
_init: function() {
|
||||
this.actor = new St.BoxLayout({ vertical: true });
|
||||
this._grid = new IconGrid.IconGrid();
|
||||
this._grid = new IconGrid.IconGrid({ xAlign: St.Align.START });
|
||||
this._appSystem = Shell.AppSystem.get_default();
|
||||
this.actor.add(this._grid.actor, { y_align: St.Align.START, expand: true });
|
||||
|
||||
this._filterApp = null;
|
||||
|
||||
let box = new St.BoxLayout({ vertical: true });
|
||||
box.add(this._grid.actor, { y_align: St.Align.START, expand: true });
|
||||
|
||||
this.actor = new St.ScrollView({ x_fill: true,
|
||||
y_fill: false,
|
||||
y_align: St.Align.START,
|
||||
vshadows: true });
|
||||
this.actor.add_actor(box);
|
||||
this.actor.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
||||
},
|
||||
|
||||
_removeAll: function() {
|
||||
@ -40,20 +50,24 @@ AlphabeticalView.prototype = {
|
||||
this._apps = [];
|
||||
},
|
||||
|
||||
_addApp: function(app) {
|
||||
let appIcon = new AppWellIcon(this._appSystem.get_app(app.get_id()));
|
||||
appIcon.connect('launching', Lang.bind(this, function() {
|
||||
this.emit('launching');
|
||||
}));
|
||||
appIcon._draggable.connect('drag-begin', Lang.bind(this, function() {
|
||||
this.emit('drag-begin');
|
||||
}));
|
||||
_addApp: function(appInfo) {
|
||||
let appIcon = new AppWellIcon(this._appSystem.get_app(appInfo.get_id()));
|
||||
|
||||
this._grid.addItem(appIcon.actor);
|
||||
|
||||
appIcon._appInfo = appInfo;
|
||||
if (this._filterApp && !this._filterApp(appInfo))
|
||||
appIcon.actor.hide();
|
||||
|
||||
this._apps.push(appIcon);
|
||||
},
|
||||
|
||||
setFilter: function(filter) {
|
||||
this._filterApp = filter;
|
||||
for (let i = 0; i < this._apps.length; i++)
|
||||
this._apps[i].actor.visible = filter(this._apps[i]._appInfo);
|
||||
},
|
||||
|
||||
refresh: function(apps) {
|
||||
let ids = [];
|
||||
for (let i in apps)
|
||||
@ -70,8 +84,6 @@ AlphabeticalView.prototype = {
|
||||
}
|
||||
};
|
||||
|
||||
Signals.addSignalMethods(AlphabeticalView.prototype);
|
||||
|
||||
function ViewByCategories() {
|
||||
this._init();
|
||||
}
|
||||
@ -79,59 +91,79 @@ function ViewByCategories() {
|
||||
ViewByCategories.prototype = {
|
||||
_init: function() {
|
||||
this._appSystem = Shell.AppSystem.get_default();
|
||||
this.actor = new St.BoxLayout({ vertical: true });
|
||||
this.actor = new St.BoxLayout({ style_class: 'all-app' });
|
||||
this.actor._delegate = this;
|
||||
|
||||
this._view = new AlphabeticalView();
|
||||
|
||||
this._filters = new St.BoxLayout({ vertical: true });
|
||||
this.actor.add(this._view.actor, { expand: true, x_fill: true, y_fill: true });
|
||||
this.actor.add(this._filters, { expand: false, y_fill: false, y_align: St.Align.START });
|
||||
|
||||
this._sections = [];
|
||||
},
|
||||
|
||||
_updateSections: function(apps) {
|
||||
this._removeAll();
|
||||
_selectCategory: function(num) {
|
||||
if (num != -1)
|
||||
this._allFilter.remove_style_pseudo_class('selected');
|
||||
else
|
||||
this._allFilter.add_style_pseudo_class('selected');
|
||||
|
||||
let sections = this._appSystem.get_sections();
|
||||
if (!sections)
|
||||
return;
|
||||
for (let i = 0; i < sections.length; i++) {
|
||||
if (i) {
|
||||
let actor = new St.Bin({ style_class: 'app-section-divider' });
|
||||
let divider = new St.Bin({ style_class: 'app-section-divider-container',
|
||||
child: actor,
|
||||
x_fill: true });
|
||||
this._view.setFilter(Lang.bind(this, function(app) {
|
||||
if (num == -1)
|
||||
return true;
|
||||
return this._sections[num].name == app.get_section();
|
||||
}));
|
||||
|
||||
this.actor.add(divider, { y_fill: false, expand: true });
|
||||
}
|
||||
let _apps = apps.filter(function(app) {
|
||||
return app.get_section() == sections[i];
|
||||
});
|
||||
this._sections[i] = { view: new AlphabeticalView(),
|
||||
apps: _apps,
|
||||
name: sections[i] };
|
||||
this._sections[i].view.connect('launching', Lang.bind(this, function() {
|
||||
this.emit('launching');
|
||||
}));
|
||||
this._sections[i].view.connect('drag-begin', Lang.bind(this, function() {
|
||||
this.emit('drag-begin');
|
||||
}));
|
||||
this.actor.add(this._sections[i].view.actor, { y_align: St.Align.START, expand: true });
|
||||
for (let i = 0; i < this._sections.length; i++) {
|
||||
if (i == num)
|
||||
this._sections[i].filterActor.add_style_pseudo_class('selected');
|
||||
else
|
||||
this._sections[i].filterActor.remove_style_pseudo_class('selected');
|
||||
}
|
||||
},
|
||||
|
||||
_addFilter: function(name, num) {
|
||||
let button = new St.Button({ label: name,
|
||||
style_class: 'app-filter',
|
||||
x_align: St.Align.START });
|
||||
this._filters.add(button, { expand: true, x_fill: true, y_fill: false });
|
||||
button.connect('clicked', Lang.bind(this, function() {
|
||||
this._selectCategory(num);
|
||||
}));
|
||||
|
||||
if (num != -1)
|
||||
this._sections[num] = { filterActor: button,
|
||||
name: name };
|
||||
else
|
||||
this._allFilter = button;
|
||||
},
|
||||
|
||||
_removeAll: function() {
|
||||
this.actor.destroy_children();
|
||||
this._sections.forEach(function (section) { section.view.disconnectAll(); });
|
||||
|
||||
this._sections = [];
|
||||
this._filters.destroy_children();
|
||||
},
|
||||
|
||||
refresh: function(apps) {
|
||||
this._updateSections(apps);
|
||||
for (let i = 0; i < this._sections.length; i++) {
|
||||
this._sections[i].view.refresh(this._sections[i].apps);
|
||||
}
|
||||
this._removeAll();
|
||||
|
||||
let sections = this._appSystem.get_sections();
|
||||
this._apps = apps;
|
||||
this._view.refresh(apps);
|
||||
|
||||
/* Translators: Filter to display all applications */
|
||||
this._addFilter(_("All"), -1);
|
||||
|
||||
if (!sections)
|
||||
return;
|
||||
|
||||
for (let i = 0; i < sections.length; i++)
|
||||
this._addFilter(sections[i], i);
|
||||
|
||||
this._selectCategory(-1);
|
||||
}
|
||||
};
|
||||
|
||||
Signals.addSignalMethods(ViewByCategories.prototype);
|
||||
|
||||
/* This class represents a display containing a collection of application items.
|
||||
* The applications are sorted based on their name.
|
||||
*/
|
||||
@ -146,17 +178,8 @@ AllAppDisplay.prototype = {
|
||||
Main.queueDeferredWork(this._workId);
|
||||
}));
|
||||
|
||||
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._scrollView.add_actor(this._appView.actor);
|
||||
|
||||
this._scrollView.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
||||
this.actor = new St.Bin({ child: this._appView.actor, x_fill: true, y_fill: true });
|
||||
|
||||
this._workId = Main.initializeDeferredWork(this.actor, Lang.bind(this, this._redisplay));
|
||||
},
|
||||
@ -169,8 +192,6 @@ AllAppDisplay.prototype = {
|
||||
this._appView.refresh(apps);
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(AllAppDisplay.prototype);
|
||||
|
||||
|
||||
function BaseAppSearchProvider() {
|
||||
this._init();
|
||||
@ -491,7 +512,11 @@ AppIconMenu.prototype = {
|
||||
__proto__: PopupMenu.PopupMenu.prototype,
|
||||
|
||||
_init: function(source) {
|
||||
PopupMenu.PopupMenu.prototype._init.call(this, source.actor, St.Align.MIDDLE, St.Side.LEFT, 0);
|
||||
let side = St.Side.LEFT;
|
||||
if (St.Widget.get_default_direction() == St.TextDirection.RTL)
|
||||
side = St.Side.RIGHT;
|
||||
|
||||
PopupMenu.PopupMenu.prototype._init.call(this, source.actor, St.Align.MIDDLE, side, 0);
|
||||
|
||||
this._source = source;
|
||||
|
||||
|
@ -11,7 +11,7 @@ const POPUP_ANIMATION_TIME = 0.15;
|
||||
|
||||
/**
|
||||
* BoxPointer:
|
||||
* @side: A St.Side type; currently only St.Side.TOP is implemented
|
||||
* @side: side to draw the arrow on
|
||||
* @binProperties: Properties to set on contained bin
|
||||
*
|
||||
* An actor which displays a triangle "arrow" pointing to a given
|
||||
@ -42,7 +42,7 @@ BoxPointer.prototype = {
|
||||
this.bin.raise(this._border);
|
||||
},
|
||||
|
||||
animateAppear: function(onComplete) {
|
||||
show: function(animate, onComplete) {
|
||||
let x = this.actor.x;
|
||||
let y = this.actor.y;
|
||||
let themeNode = this.actor.get_theme_node();
|
||||
@ -51,19 +51,21 @@ BoxPointer.prototype = {
|
||||
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;
|
||||
if (animate) {
|
||||
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,
|
||||
@ -74,7 +76,7 @@ BoxPointer.prototype = {
|
||||
time: POPUP_ANIMATION_TIME });
|
||||
},
|
||||
|
||||
animateDisappear: function(onComplete) {
|
||||
hide: function(animate, onComplete) {
|
||||
let x = this.actor.x;
|
||||
let y = this.actor.y;
|
||||
let originalX = this.actor.x;
|
||||
@ -82,19 +84,21 @@ BoxPointer.prototype = {
|
||||
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;
|
||||
if (animate) {
|
||||
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,
|
||||
@ -272,7 +276,9 @@ BoxPointer.prototype = {
|
||||
// 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 themeNode = this.actor.get_theme_node();
|
||||
let arrowRise = themeNode.get_length('-arrow-rise');
|
||||
let borderRadius = themeNode.get_length('-arrow-border-radius');
|
||||
|
||||
let resX, resY;
|
||||
|
||||
@ -298,13 +304,13 @@ BoxPointer.prototype = {
|
||||
case St.Side.BOTTOM:
|
||||
switch (alignment) {
|
||||
case St.Align.START:
|
||||
resX = sourceX;
|
||||
resX = sourceX - 2 * borderRadius;
|
||||
break;
|
||||
case St.Align.MIDDLE:
|
||||
resX = sourceX - Math.floor((natWidth - sourceWidth) / 2);
|
||||
break;
|
||||
case St.Align.END:
|
||||
resX = sourceX - (natWidth - sourceWidth);
|
||||
resX = sourceX - (natWidth - sourceWidth) + 2 * borderRadius;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -318,13 +324,13 @@ BoxPointer.prototype = {
|
||||
case St.Side.RIGHT:
|
||||
switch (alignment) {
|
||||
case St.Align.START:
|
||||
resY = sourceY;
|
||||
resY = sourceY - 2 * borderRadius;
|
||||
break;
|
||||
case St.Align.MIDDLE:
|
||||
resY = sourceY - Math.floor((natHeight - sourceHeight) / 2);
|
||||
break;
|
||||
case St.Align.END:
|
||||
resY = sourceY - (natHeight - sourceHeight);
|
||||
resY = sourceY - (natHeight - sourceHeight) + 2 * borderRadius;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,7 @@ const Gio = imports.gi.Gio;
|
||||
const Lang = imports.lang;
|
||||
const St = imports.gi.St;
|
||||
const Pango = imports.gi.Pango;
|
||||
const Gettext_gtk20 = imports.gettext.domain('gtk20');
|
||||
const Gettext_gtk30 = imports.gettext.domain('gtk30');
|
||||
|
||||
const MSECS_IN_DAY = 24 * 60 * 60 * 1000;
|
||||
const WEEKDATE_HEADER_WIDTH_DIGITS = 3;
|
||||
@ -60,7 +60,7 @@ Calendar.prototype = {
|
||||
this._settings.connect('changed::' + SHOW_WEEKDATE_KEY, Lang.bind(this, this._onSettingsChange));
|
||||
this._useWeekdate = this._settings.get_boolean(SHOW_WEEKDATE_KEY);
|
||||
|
||||
let weekStartString = Gettext_gtk20.gettext('calendar:week_start:0');
|
||||
let weekStartString = Gettext_gtk30.gettext('calendar:week_start:0');
|
||||
if (weekStartString.indexOf('calendar:week_start:') == 0) {
|
||||
this._weekStart = parseInt(weekStartString.substring(20));
|
||||
}
|
||||
@ -71,7 +71,7 @@ Calendar.prototype = {
|
||||
}
|
||||
|
||||
// Find the ordering for month/year in the calendar heading
|
||||
switch (Gettext_gtk20.gettext('calendar:MY')) {
|
||||
switch (Gettext_gtk30.gettext('calendar:MY')) {
|
||||
case 'calendar:MY':
|
||||
this._headerFormat = '%B %Y';
|
||||
break;
|
||||
|
254
js/ui/ctrlAltTab.js
Normal file
254
js/ui/ctrlAltTab.js
Normal file
@ -0,0 +1,254 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gdk = imports.gi.Gdk;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Lang = imports.lang;
|
||||
const Meta = imports.gi.Meta;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const AltTab = imports.ui.altTab;
|
||||
const Main = imports.ui.main;
|
||||
const Tweener = imports.ui.tweener;
|
||||
|
||||
const POPUP_APPICON_SIZE = 96;
|
||||
const POPUP_FADE_TIME = 0.1; // seconds
|
||||
|
||||
function CtrlAltTabManager() {
|
||||
this._init();
|
||||
}
|
||||
|
||||
CtrlAltTabManager.prototype = {
|
||||
_init: function() {
|
||||
this._items = [];
|
||||
this._focusManager = St.FocusManager.get_for_stage(global.stage);
|
||||
Main.wm.setKeybindingHandler('switch_panels', Lang.bind(this,
|
||||
function (shellwm, binding, window, backwards) {
|
||||
this.popup(backwards);
|
||||
}));
|
||||
},
|
||||
|
||||
addGroup: function(root, name, icon) {
|
||||
this._items.push({ root: root, name: name, iconName: icon });
|
||||
root.connect('destroy', Lang.bind(this, function() { this.removeGroup(root); }));
|
||||
this._focusManager.add_group(root);
|
||||
},
|
||||
|
||||
removeGroup: function(root) {
|
||||
this._focusManager.remove_group(root);
|
||||
for (let i = 0; i < this._items.length; i++) {
|
||||
if (this._items[i].root == root) {
|
||||
this._items.splice(i, 1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
focusGroup: function(root) {
|
||||
if (global.stage_input_mode == Shell.StageInputMode.NONREACTIVE ||
|
||||
global.stage_input_mode == Shell.StageInputMode.NORMAL)
|
||||
global.set_stage_input_mode(Shell.StageInputMode.FOCUSED);
|
||||
root.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
|
||||
},
|
||||
|
||||
popup: function(backwards) {
|
||||
// Start with the set of focus groups that are currently mapped
|
||||
let items = this._items.filter(function (item) { return item.root.mapped; });
|
||||
|
||||
// And add the windows metacity would show in its Ctrl-Alt-Tab list
|
||||
let screen = global.screen;
|
||||
let display = screen.get_display();
|
||||
let windows = display.get_tab_list(Meta.TabList.DOCKS, screen, screen.get_active_workspace ());
|
||||
let windowTracker = Shell.WindowTracker.get_default();
|
||||
let textureCache = St.TextureCache.get_default();
|
||||
for (let i = 0; i < windows.length; i++) {
|
||||
let icon;
|
||||
let app = windowTracker.get_window_app(windows[i]);
|
||||
if (app)
|
||||
icon = app.create_icon_texture(POPUP_APPICON_SIZE);
|
||||
else
|
||||
icon = textureCache.bind_pixbuf_property(windows[i], 'icon');
|
||||
items.push({ window: windows[i],
|
||||
name: windows[i].title,
|
||||
iconActor: icon });
|
||||
}
|
||||
|
||||
if (!items.length)
|
||||
return;
|
||||
|
||||
new CtrlAltTabPopup().show(items, backwards);
|
||||
}
|
||||
};
|
||||
|
||||
function mod(a, b) {
|
||||
return (a + b) % b;
|
||||
}
|
||||
|
||||
function CtrlAltTabPopup() {
|
||||
this._init();
|
||||
}
|
||||
|
||||
CtrlAltTabPopup.prototype = {
|
||||
_init : function() {
|
||||
let primary = global.get_primary_monitor();
|
||||
this.actor = new St.BoxLayout({ name: 'ctrlAltTabPopup',
|
||||
reactive: true,
|
||||
x: primary.x + primary.width / 2,
|
||||
y: primary.y + primary.height / 2,
|
||||
anchor_gravity: Clutter.Gravity.CENTER });
|
||||
|
||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||
|
||||
this._haveModal = false;
|
||||
this._selection = 0;
|
||||
|
||||
Main.uiGroup.add_actor(this.actor);
|
||||
},
|
||||
|
||||
show : function(items, startBackwards) {
|
||||
if (!Main.pushModal(this.actor))
|
||||
return false;
|
||||
this._haveModal = true;
|
||||
|
||||
this._keyPressEventId = this.actor.connect('key-press-event', Lang.bind(this, this._keyPressEvent));
|
||||
this._keyReleaseEventId = this.actor.connect('key-release-event', Lang.bind(this, this._keyReleaseEvent));
|
||||
|
||||
this._items = items;
|
||||
this._switcher = new CtrlAltTabSwitcher(items);
|
||||
this.actor.add_actor(this._switcher.actor);
|
||||
|
||||
if (startBackwards)
|
||||
this._selection = this._items.length - 1;
|
||||
this._select(this._selection);
|
||||
|
||||
let [x, y, mods] = global.get_pointer();
|
||||
if (!(mods & Gdk.ModifierType.MOD1_MASK)) {
|
||||
this._finish();
|
||||
return false;
|
||||
}
|
||||
|
||||
this.actor.opacity = 0;
|
||||
this.actor.show();
|
||||
Tweener.addTween(this.actor,
|
||||
{ opacity: 255,
|
||||
time: POPUP_FADE_TIME,
|
||||
transition: 'easeOutQuad'
|
||||
});
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
_next : function() {
|
||||
return mod(this._selection + 1, this._items.length);
|
||||
},
|
||||
|
||||
_previous : function() {
|
||||
return mod(this._selection - 1, this._items.length);
|
||||
},
|
||||
|
||||
_keyPressEvent : function(actor, event) {
|
||||
let keysym = event.get_key_symbol();
|
||||
let shift = (Shell.get_event_state(event) & Clutter.ModifierType.SHIFT_MASK);
|
||||
if (shift && keysym == Clutter.KEY_Tab)
|
||||
keysym = Clutter.ISO_Left_Tab;
|
||||
|
||||
if (keysym == Clutter.KEY_Escape)
|
||||
this.destroy();
|
||||
else if (keysym == Clutter.KEY_Tab)
|
||||
this._select(this._next());
|
||||
else if (keysym == Clutter.KEY_ISO_Left_Tab)
|
||||
this._select(this._previous());
|
||||
else if (keysym == Clutter.KEY_Left)
|
||||
this._select(this._previous());
|
||||
else if (keysym == Clutter.KEY_Right)
|
||||
this._select(this._next());
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
_keyReleaseEvent : function(actor, event) {
|
||||
let [x, y, mods] = global.get_pointer();
|
||||
let state = mods & Clutter.ModifierType.MOD1_MASK;
|
||||
|
||||
if (state == 0)
|
||||
this._finish();
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
_finish : function() {
|
||||
this.destroy();
|
||||
|
||||
let item = this._items[this._selection];
|
||||
if (item.root)
|
||||
Main.ctrlAltTabManager.focusGroup(item.root);
|
||||
else
|
||||
Main.activateWindow(item.window);
|
||||
},
|
||||
|
||||
_popModal: function() {
|
||||
if (this._haveModal) {
|
||||
Main.popModal(this.actor);
|
||||
this._haveModal = false;
|
||||
}
|
||||
},
|
||||
|
||||
destroy : function() {
|
||||
this._popModal();
|
||||
Tweener.addTween(this.actor,
|
||||
{ opacity: 0,
|
||||
time: POPUP_FADE_TIME,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: Lang.bind(this,
|
||||
function() {
|
||||
this.actor.destroy();
|
||||
})
|
||||
});
|
||||
},
|
||||
|
||||
_onDestroy : function() {
|
||||
if (this._keyPressEventId)
|
||||
this.actor.disconnect(this._keyPressEventId);
|
||||
if (this._keyReleaseEventId)
|
||||
this.actor.disconnect(this._keyReleaseEventId);
|
||||
},
|
||||
|
||||
_select : function(num) {
|
||||
this._selection = num;
|
||||
this._switcher.highlight(num);
|
||||
}
|
||||
};
|
||||
|
||||
function CtrlAltTabSwitcher(items) {
|
||||
this._init(items);
|
||||
}
|
||||
|
||||
CtrlAltTabSwitcher.prototype = {
|
||||
__proto__ : AltTab.SwitcherList.prototype,
|
||||
|
||||
_init : function(items) {
|
||||
AltTab.SwitcherList.prototype._init.call(this, true);
|
||||
|
||||
for (let i = 0; i < items.length; i++)
|
||||
this._addIcon(items[i]);
|
||||
},
|
||||
|
||||
_addIcon : function(item) {
|
||||
let box = new St.BoxLayout({ style_class: 'alt-tab-app',
|
||||
vertical: true });
|
||||
|
||||
let icon = item.iconActor;
|
||||
if (!icon) {
|
||||
icon = new St.Icon({ icon_name: item.iconName,
|
||||
icon_type: St.IconType.SYMBOLIC,
|
||||
icon_size: POPUP_APPICON_SIZE });
|
||||
}
|
||||
box.add(icon, { x_fill: false, y_fill: false } );
|
||||
|
||||
let text = new St.Label({ text: item.name });
|
||||
box.add(text, { x_fill: false });
|
||||
|
||||
this.addItem(box);
|
||||
}
|
||||
};
|
@ -78,7 +78,6 @@ function Dash() {
|
||||
|
||||
Dash.prototype = {
|
||||
_init : function() {
|
||||
this._placeholderText = null;
|
||||
this._menus = [];
|
||||
this._menuDisplays = [];
|
||||
this._maxHeight = -1;
|
||||
@ -216,7 +215,6 @@ Dash.prototype = {
|
||||
let contextId = '';
|
||||
|
||||
let running = this._tracker.get_running_apps(contextId);
|
||||
let runningIds = this._appIdListToHash(running);
|
||||
|
||||
for (let id in favorites) {
|
||||
let app = favorites[id];
|
||||
@ -229,29 +227,28 @@ Dash.prototype = {
|
||||
continue;
|
||||
this._addApp(app);
|
||||
}
|
||||
if (this._placeholderText) {
|
||||
this._placeholderText.destroy();
|
||||
this._placeholderText = null;
|
||||
}
|
||||
|
||||
let children = this._box.get_children();
|
||||
if (children.length == 0) {
|
||||
this._placeholderText = new St.Label({ text: _("Drag here to add favorites") });
|
||||
this._box.add_actor(this._placeholderText);
|
||||
} else if (this._maxHeight > -1) {
|
||||
let iconSizes = [ 48, 32, 24, 22, 16 ];
|
||||
this._box.add_style_pseudo_class('empty');
|
||||
} else {
|
||||
this._box.remove_style_pseudo_class('empty');
|
||||
|
||||
for (let i = 0; i < iconSizes.length; i++) {
|
||||
let minHeight, natHeight;
|
||||
if (this._maxHeight > -1) {
|
||||
let iconSizes = [ 48, 32, 24, 22, 16 ];
|
||||
|
||||
this._iconSize = iconSizes[i];
|
||||
for (let j = 0; j < children.length; j++)
|
||||
children[j]._delegate.icon.setIconSize(this._iconSize);
|
||||
for (let i = 0; i < iconSizes.length; i++) {
|
||||
let minHeight, natHeight;
|
||||
|
||||
[minHeight, natHeight] = this.actor.get_preferred_height(-1);
|
||||
this._iconSize = iconSizes[i];
|
||||
for (let j = 0; j < children.length; j++)
|
||||
children[j]._delegate.icon.setIconSize(this._iconSize);
|
||||
|
||||
if (natHeight <= this._maxHeight)
|
||||
break;
|
||||
[minHeight, natHeight] = this.actor.get_preferred_height(-1);
|
||||
|
||||
if (natHeight <= this._maxHeight)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
this._box.show();
|
||||
@ -276,7 +273,11 @@ Dash.prototype = {
|
||||
if (app == null || app.is_transient())
|
||||
return DND.DragMotionResult.NO_DROP;
|
||||
|
||||
let numFavorites = AppFavorites.getAppFavorites().getFavorites().length;
|
||||
let favorites = AppFavorites.getAppFavorites().getFavorites();
|
||||
let numFavorites = favorites.length;
|
||||
|
||||
let favPos = favorites.indexOf(app);
|
||||
|
||||
let numChildren = this._box.get_children().length;
|
||||
let boxHeight = this._box.height;
|
||||
|
||||
@ -294,15 +295,16 @@ Dash.prototype = {
|
||||
this._dragPlaceholderPos = pos;
|
||||
if (this._dragPlaceholder)
|
||||
this._dragPlaceholder.destroy();
|
||||
|
||||
// Don't allow positioning before or after self
|
||||
if (favPos != -1 && (pos == favPos || pos == favPos + 1))
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
|
||||
this._dragPlaceholder = new St.Bin({ style_class: 'dash-placeholder' });
|
||||
this._box.insert_actor(this._dragPlaceholder, pos);
|
||||
}
|
||||
|
||||
let id = app.get_id();
|
||||
|
||||
let favorites = AppFavorites.getAppFavorites().getFavoriteMap();
|
||||
|
||||
let srcIsFavorite = (id in favorites);
|
||||
let srcIsFavorite = (favPos != -1);
|
||||
|
||||
if (srcIsFavorite)
|
||||
return DND.DragMotionResult.MOVE_DROP;
|
||||
|
72
js/ui/dnd.js
72
js/ui/dnd.js
@ -26,9 +26,9 @@ const DragMotionResult = {
|
||||
};
|
||||
|
||||
const DRAG_CURSOR_MAP = {
|
||||
0: Shell.Cursor.UNSUPPORTED_TARGET,
|
||||
1: Shell.Cursor.COPY,
|
||||
2: Shell.Cursor.MOVE
|
||||
0: Shell.Cursor.DND_UNSUPPORTED_TARGET,
|
||||
1: Shell.Cursor.DND_COPY,
|
||||
2: Shell.Cursor.DND_MOVE
|
||||
};
|
||||
|
||||
const DragDropResult = {
|
||||
@ -100,6 +100,8 @@ _Draggable.prototype = {
|
||||
this._buttonDown = false; // The mouse button has been pressed and has not yet been released.
|
||||
this._dragInProgress = false; // The drag has been started, and has not been dropped or cancelled yet.
|
||||
this._animationInProgress = false; // The drag is over and the item is in the process of animating to its original position (snapping back or reverting).
|
||||
|
||||
this._eventsGrabbed = false;
|
||||
},
|
||||
|
||||
_onButtonPress : function (actor, event) {
|
||||
@ -147,13 +149,19 @@ _Draggable.prototype = {
|
||||
},
|
||||
|
||||
_grabEvents: function() {
|
||||
Clutter.grab_pointer(_getEventHandlerActor());
|
||||
Clutter.grab_keyboard(_getEventHandlerActor());
|
||||
if (!this._eventsGrabbed) {
|
||||
Clutter.grab_pointer(_getEventHandlerActor());
|
||||
Clutter.grab_keyboard(_getEventHandlerActor());
|
||||
this._eventsGrabbed = true;
|
||||
}
|
||||
},
|
||||
|
||||
_ungrabEvents: function() {
|
||||
Clutter.ungrab_pointer();
|
||||
Clutter.ungrab_keyboard();
|
||||
if (this._eventsGrabbed) {
|
||||
Clutter.ungrab_pointer();
|
||||
Clutter.ungrab_keyboard();
|
||||
this._eventsGrabbed = false;
|
||||
}
|
||||
},
|
||||
|
||||
_onEvent: function(actor, event) {
|
||||
@ -213,7 +221,7 @@ _Draggable.prototype = {
|
||||
if (this._onEventId)
|
||||
this._ungrabActor();
|
||||
this._grabEvents();
|
||||
global.set_cursor(Shell.Cursor.IN_DRAG);
|
||||
global.set_cursor(Shell.Cursor.DND_IN_DRAG);
|
||||
|
||||
this._dragX = this._dragStartX = stageX;
|
||||
this._dragY = this._dragStartY = stageY;
|
||||
@ -374,7 +382,7 @@ _Draggable.prototype = {
|
||||
}
|
||||
target = target.get_parent();
|
||||
}
|
||||
global.set_cursor(Shell.Cursor.IN_DRAG);
|
||||
global.set_cursor(Shell.Cursor.DND_IN_DRAG);
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -440,24 +448,44 @@ _Draggable.prototype = {
|
||||
return true;
|
||||
},
|
||||
|
||||
// Get position of the drag actor's source if the source is still around,
|
||||
// or return the original location if the actor itself was being dragged
|
||||
// or the source is no longer around.
|
||||
_getRestoreLocation: function() {
|
||||
let locX = this._snapBackX;
|
||||
let locY = this._snapBackY;
|
||||
let x, y, scale;
|
||||
|
||||
if (this._dragActorSource && this._dragActorSource.visible)
|
||||
[locX, locY] = this._dragActorSource.get_transformed_position();
|
||||
return [locX, locY];
|
||||
if (this._dragActorSource && this._dragActorSource.visible) {
|
||||
// Snap the clone back to its source
|
||||
[x, y] = this._dragActorSource.get_transformed_position();
|
||||
let [sourceScaledWidth, sourceScaledHeight] = this._dragActorSource.get_transformed_size();
|
||||
scale = this._dragActor.width / sourceScaledWidth;
|
||||
} else if (this._dragOrigParent) {
|
||||
// Snap the actor back to its original position within
|
||||
// its parent, adjusting for the fact that the parent
|
||||
// may have been moved or scaled
|
||||
let [parentX, parentY] = this._dragOrigParent.get_transformed_position();
|
||||
x = parentX + this._dragOrigParent.scale_x * this._dragOrigX;
|
||||
y = parentY + this._dragOrigParent.scale_y * this._dragOrigY;
|
||||
|
||||
let [parentWidth, parentHeight] = this._dragOrigParent.get_size();
|
||||
let [parentScaledWidth, parentScaledHeight] = this._dragOrigParent.get_transformed_size();
|
||||
let parentScale = parentScaledWidth / parentWidth;
|
||||
scale = this._dragOrigScale * parentScale;
|
||||
} else {
|
||||
// Snap back actor to its original stage position
|
||||
x = this._snapBackX;
|
||||
y = this._snapBackY;
|
||||
scale = this._snapBackScale;
|
||||
}
|
||||
|
||||
return [x, y, scale];
|
||||
},
|
||||
|
||||
_cancelDrag: function(eventTime) {
|
||||
this._dragInProgress = false;
|
||||
let [snapBackX, snapBackY] = this._getRestoreLocation();
|
||||
let [snapBackX, snapBackY, snapBackScale] = this._getRestoreLocation();
|
||||
|
||||
if (this._actorDestroyed) {
|
||||
global.unset_cursor();
|
||||
if (!this._buttonDown)
|
||||
this._ungrabEvents();
|
||||
this.emit('drag-end', eventTime, false);
|
||||
return;
|
||||
}
|
||||
@ -467,8 +495,8 @@ _Draggable.prototype = {
|
||||
Tweener.addTween(this._dragActor,
|
||||
{ x: snapBackX,
|
||||
y: snapBackY,
|
||||
scale_x: this._snapBackScale,
|
||||
scale_y: this._snapBackScale,
|
||||
scale_x: snapBackScale,
|
||||
scale_y: snapBackScale,
|
||||
opacity: this._dragOrigOpacity,
|
||||
time: SNAP_BACK_ANIMATION_TIME,
|
||||
transition: 'easeOutQuad',
|
||||
@ -480,11 +508,11 @@ _Draggable.prototype = {
|
||||
|
||||
_restoreDragActor: function(eventTime) {
|
||||
this._dragInProgress = false;
|
||||
[restoreX, restoreY] = this._getRestoreLocation();
|
||||
[restoreX, restoreY, restoreScale] = this._getRestoreLocation();
|
||||
|
||||
// fade the actor back in at its original location
|
||||
this._dragActor.set_position(restoreX, restoreY);
|
||||
this._dragActor.set_scale(this._snapBackScale, this._snapBackScale);
|
||||
this._dragActor.set_scale(restoreScale, restoreScale);
|
||||
this._dragActor.opacity = 0;
|
||||
|
||||
this._animationInProgress = true;
|
||||
|
@ -4,7 +4,7 @@ const Clutter = imports.gi.Clutter;;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Gettext_gtk20 = imports.gettext.domain('gtk20');
|
||||
const Gettext_gtk30 = imports.gettext.domain('gtk30');
|
||||
|
||||
const Tweener = imports.ui.tweener;
|
||||
|
||||
@ -65,7 +65,7 @@ function init() {
|
||||
String.prototype.format = Format.format;
|
||||
|
||||
// Set the default direction for St widgets (this needs to be done before any use of St)
|
||||
if (Gettext_gtk20.gettext('default:LTR') == 'default:RTL') {
|
||||
if (Gettext_gtk30.gettext('default:LTR') == 'default:RTL') {
|
||||
St.Widget.set_default_direction(St.TextDirection.RTL);
|
||||
}
|
||||
|
||||
@ -88,7 +88,7 @@ function init() {
|
||||
|
||||
_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',
|
||||
_blockMethod('Gdk.Device.get_state', 'global.get_pointer',
|
||||
'gjs\'s handling of Gdk.ModifierType is broken. See bug 597292.');
|
||||
_blockMethod('Gdk.Window.get_device_position', 'global.get_pointer',
|
||||
'gjs\'s handling of Gdk.ModifierType is broken. See bug 597292.');
|
||||
|
@ -165,8 +165,16 @@ IconGrid.prototype = {
|
||||
alloc.natural_size = nColumns * this._item_size + totalSpacing;
|
||||
},
|
||||
|
||||
_getPreferredHeight: function (grid, forWidth, alloc) {
|
||||
_getVisibleChildren: function() {
|
||||
let children = this._grid.get_children();
|
||||
children = children.filter(function(actor) {
|
||||
return actor.visible;
|
||||
});
|
||||
return children;
|
||||
},
|
||||
|
||||
_getPreferredHeight: function (grid, forWidth, alloc) {
|
||||
let children = this._getVisibleChildren();
|
||||
let [nColumns, usedWidth] = this._computeLayout(forWidth);
|
||||
let nRows;
|
||||
if (nColumns > 0)
|
||||
@ -182,7 +190,7 @@ IconGrid.prototype = {
|
||||
},
|
||||
|
||||
_allocate: function (grid, box, flags) {
|
||||
let children = this._grid.get_children();
|
||||
let children = this._getVisibleChildren();
|
||||
let availWidth = box.x2 - box.x1;
|
||||
let availHeight = box.y2 - box.y1;
|
||||
|
||||
|
@ -663,11 +663,11 @@ LookingGlass.prototype = {
|
||||
style_class: 'lg-dialog',
|
||||
vertical: true,
|
||||
visible: false });
|
||||
this.actor.connect('key-press-event', Lang.bind(this, this._globalKeyPressEvent));
|
||||
|
||||
let gconf = GConf.Client.get_default();
|
||||
gconf.add_dir('/desktop/gnome/interface', GConf.ClientPreloadType.PRELOAD_NONE);
|
||||
gconf.notify_add('/desktop/gnome/interface/monospace_font_name',
|
||||
Lang.bind(this, this._updateFont));
|
||||
this._interfaceSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
|
||||
this._interfaceSettings.connect('changed::monospace-font-name',
|
||||
Lang.bind(this, this._updateFont));
|
||||
this._updateFont();
|
||||
|
||||
Main.uiGroup.add_actor(this.actor);
|
||||
@ -778,8 +778,7 @@ LookingGlass.prototype = {
|
||||
},
|
||||
|
||||
_updateFont: function() {
|
||||
let gconf = GConf.Client.get_default();
|
||||
let fontName = gconf.get_string('/desktop/gnome/interface/monospace_font_name');
|
||||
let fontName = this._interfaceSettings.get_string('monospace-font-name');
|
||||
// This is mishandled by the scanner - should by Pango.FontDescription_from_string(fontName);
|
||||
// https://bugzilla.gnome.org/show_bug.cgi?id=595889
|
||||
let fontDesc = Pango.font_description_from_string(fontName);
|
||||
@ -925,20 +924,15 @@ LookingGlass.prototype = {
|
||||
if (this._open)
|
||||
return;
|
||||
|
||||
if (!Main.pushModal(this.actor))
|
||||
if (!Main.pushModal(this._entry))
|
||||
return;
|
||||
|
||||
this._keyPressEventId = global.stage.connect('key-press-event',
|
||||
Lang.bind(this, this._globalKeyPressEvent));
|
||||
|
||||
this.actor.show();
|
||||
this.actor.lower(Main.chrome.actor);
|
||||
this._open = true;
|
||||
|
||||
Tweener.removeTweens(this.actor);
|
||||
|
||||
global.stage.set_key_focus(this._entry);
|
||||
|
||||
// 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(),
|
||||
@ -951,9 +945,6 @@ LookingGlass.prototype = {
|
||||
if (!this._open)
|
||||
return;
|
||||
|
||||
if (this._keyPressEventId)
|
||||
global.stage.disconnect(this._keyPressEventId);
|
||||
|
||||
this._objInspector.actor.hide();
|
||||
|
||||
this._historyNavIndex = -1;
|
||||
@ -966,7 +957,7 @@ LookingGlass.prototype = {
|
||||
this._borderPaintTarget = null;
|
||||
}
|
||||
|
||||
Main.popModal(this.actor);
|
||||
Main.popModal(this._entry);
|
||||
|
||||
Tweener.addTween(this.actor, { time: 0.5 / St.get_slow_down_factor(),
|
||||
transition: 'easeOutQuad',
|
||||
|
@ -10,6 +10,7 @@ const Signals = imports.signals;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const MagnifierDBus = imports.ui.magnifierDBus;
|
||||
const Params = imports.misc.params;
|
||||
|
||||
// Keep enums in sync with GSettings schemas
|
||||
const MouseTrackingMode = {
|
||||
@ -65,11 +66,14 @@ Magnifier.prototype = {
|
||||
|
||||
// Create the first ZoomRegion and initialize it according to the
|
||||
// magnification settings.
|
||||
let [xMouse, yMouse, mask] = global.get_pointer();
|
||||
|
||||
let mask;
|
||||
[this.xMouse, this.yMouse, mask] = global.get_pointer();
|
||||
|
||||
let aZoomRegion = new ZoomRegion(this, this._cursorRoot);
|
||||
this._zoomRegions.push(aZoomRegion);
|
||||
let showAtLaunch = this._settingsInit(aZoomRegion);
|
||||
aZoomRegion.scrollContentsTo(xMouse, yMouse);
|
||||
aZoomRegion.scrollContentsTo(this.xMouse, this.yMouse);
|
||||
|
||||
xfixesCursor.connect('cursor-change', Lang.bind(this, this._updateMouseSprite));
|
||||
this._xfixesCursor = xfixesCursor;
|
||||
@ -137,12 +141,10 @@ Magnifier.prototype = {
|
||||
* Turn on mouse tracking, if not already doing so.
|
||||
*/
|
||||
startTrackingMouse: function() {
|
||||
// initialize previous mouse coord to undefined.
|
||||
let prevCoord = { x: NaN, y: NaN };
|
||||
if (!this._mouseTrackingId)
|
||||
this._mouseTrackingId = Mainloop.timeout_add(
|
||||
MOUSE_POLL_FREQUENCY,
|
||||
Lang.bind(this, this.scrollToMousePos, prevCoord)
|
||||
Lang.bind(this, this.scrollToMousePos)
|
||||
);
|
||||
},
|
||||
|
||||
@ -169,14 +171,15 @@ Magnifier.prototype = {
|
||||
* scrollToMousePos:
|
||||
* Position all zoom regions' ROI relative to the current location of the
|
||||
* system pointer.
|
||||
* @prevCoord: The previous mouse coordinates. Used to stop scrolling if
|
||||
* the new position is the same as the last one (optional).
|
||||
* @return true.
|
||||
*/
|
||||
scrollToMousePos: function(prevCoord) {
|
||||
scrollToMousePos: function() {
|
||||
let [xMouse, yMouse, mask] = global.get_pointer();
|
||||
|
||||
if (!prevCoord || prevCoord.x != xMouse || prevCoord.y != yMouse) {
|
||||
if (xMouse != this.xMouse || yMouse != this.yMouse) {
|
||||
this.xMouse = xMouse;
|
||||
this.yMouse = yMouse;
|
||||
|
||||
let sysMouseOverAny = false;
|
||||
this._zoomRegions.forEach(function(zoomRegion, index, array) {
|
||||
if (zoomRegion.scrollToMousePos())
|
||||
@ -186,11 +189,6 @@ Magnifier.prototype = {
|
||||
this.hideSystemCursor();
|
||||
else
|
||||
this.showSystemCursor();
|
||||
|
||||
if (prevCoord) {
|
||||
prevCoord.x = xMouse;
|
||||
prevCoord.y = yMouse;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
@ -212,9 +210,14 @@ Magnifier.prototype = {
|
||||
*/
|
||||
createZoomRegion: function(xMagFactor, yMagFactor, roi, viewPort) {
|
||||
let zoomRegion = new ZoomRegion(this, this._cursorRoot);
|
||||
zoomRegion.setMagFactor(xMagFactor, yMagFactor);
|
||||
zoomRegion.setViewPort(viewPort);
|
||||
zoomRegion.setROI(roi);
|
||||
|
||||
// We ignore the redundant width/height on the ROI
|
||||
let fixedROI = new Object(roi);
|
||||
fixedROI.width = viewPort.width / xMagFactor;
|
||||
fixedROI.height = viewPort.height / yMagFactor;
|
||||
zoomRegion.setROI(fixedROI);
|
||||
|
||||
zoomRegion.addCrosshairs(this._crossHairs);
|
||||
return zoomRegion;
|
||||
},
|
||||
@ -247,22 +250,9 @@ Magnifier.prototype = {
|
||||
* Remove all the zoom regions from this Magnfier's ZoomRegion list.
|
||||
*/
|
||||
clearAllZoomRegions: function() {
|
||||
// First ZoomRegion is special since its magnified mouse and crosshairs
|
||||
// are the original -- all the others are Clutter.Clone's. Deal with
|
||||
// all but first zoom region.
|
||||
for (let i = 1; i < this._zoomRegions.length; i++) {
|
||||
for (let i = 0; i < this._zoomRegions.length; i++)
|
||||
this._zoomRegions[i].setActive(false);
|
||||
this._zoomRegions[i].removeFromStage();
|
||||
}
|
||||
this._zoomRegions[0].setActive(false);
|
||||
|
||||
// Detach the (original) magnified mouse and cross hair for later reuse
|
||||
// before removing ZoomRegion from the stage.
|
||||
this._cursorRoot.get_parent().remove_actor(this._cursorRoot);
|
||||
if (this._crossHairs)
|
||||
this._crossHairs.removeFromParent();
|
||||
|
||||
this._zoomRegions[0].removeFromStage();
|
||||
this._zoomRegions.length = 0;
|
||||
this.stopTrackingMouse();
|
||||
this.showSystemCursor();
|
||||
@ -567,44 +557,35 @@ Magnifier.prototype = {
|
||||
};
|
||||
Signals.addSignalMethods(Magnifier.prototype);
|
||||
|
||||
function ZoomRegion(magnifier, mouseRoot) {
|
||||
this._init(magnifier, mouseRoot);
|
||||
function ZoomRegion(magnifier, mouseSourceActor) {
|
||||
this._init(magnifier, mouseSourceActor);
|
||||
}
|
||||
|
||||
ZoomRegion.prototype = {
|
||||
_init: function(magnifier, mouseRoot) {
|
||||
_init: function(magnifier, mouseSourceActor) {
|
||||
this._magnifier = magnifier;
|
||||
|
||||
// The root actor for the zoom region
|
||||
this._magView = new St.Bin({ style_class: 'magnifier-zoom-region', x_fill: true, y_fill: true });
|
||||
global.stage.add_actor(this._magView);
|
||||
this._magView.hide();
|
||||
this._mouseTrackingMode = MouseTrackingMode.NONE;
|
||||
this._clampScrollingAtEdges = false;
|
||||
this._lensMode = false;
|
||||
this._screenPosition = ScreenPosition.FULL_SCREEN;
|
||||
|
||||
// Append a Clutter.Group to clip the contents of the magnified view.
|
||||
this._mainGroup = new Clutter.Group({ clip_to_allocation: true });
|
||||
this._magView.set_child(this._mainGroup);
|
||||
|
||||
// Add a background for when the magnified uiGroup is scrolled
|
||||
// out of view (don't want to see desktop showing through).
|
||||
let background = new Clutter.Rectangle({ color: Main.DEFAULT_BACKGROUND_COLOR });
|
||||
this._mainGroup.add_actor(background);
|
||||
|
||||
// Clone the group that contains all of UI on the screen. This is the
|
||||
// chrome, the windows, etc.
|
||||
this._uiGroupClone = new Clutter.Clone({ source: Main.uiGroup });
|
||||
this._mainGroup.add_actor(this._uiGroupClone);
|
||||
Main.uiGroup.set_size(global.screen_width, global.screen_height);
|
||||
background.set_size(global.screen_width, global.screen_height);
|
||||
this._uiGroupClone.set_size(global.screen_width, global.screen_height);
|
||||
|
||||
// Add either the given mouseRoot to the ZoomRegion, or a clone of
|
||||
// it.
|
||||
if (mouseRoot.get_parent() != null)
|
||||
this._mouseRoot = new Clutter.Clone({ source: mouseRoot });
|
||||
else
|
||||
this._mouseRoot = mouseRoot;
|
||||
this._mainGroup.add_actor(this._mouseRoot);
|
||||
this._magView = null;
|
||||
this._uiGroupClone = null;
|
||||
this._mouseSourceActor = mouseSourceActor;
|
||||
this._mouseActor = null;
|
||||
this._crossHairs = null;
|
||||
this._crossHairsActor = null;
|
||||
|
||||
this._viewPortX = 0;
|
||||
this._viewPortY = 0;
|
||||
this._viewPortWidth = global.screen_width;
|
||||
this._viewPortWidth = global.screen_height;
|
||||
this._xCenter = this._viewPortWidth / 2;
|
||||
this._yCenter = this._viewPortHeight / 2;
|
||||
this._xMagFactor = 1;
|
||||
this._yMagFactor = 1;
|
||||
this._followingCursor = false;
|
||||
},
|
||||
|
||||
/**
|
||||
@ -612,14 +593,16 @@ ZoomRegion.prototype = {
|
||||
* @activate: Boolean to show/hide the ZoomRegion.
|
||||
*/
|
||||
setActive: function(activate) {
|
||||
if (activate) {
|
||||
this._magView.show();
|
||||
if (this.isMouseOverRegion())
|
||||
if (activate && !this.isActive()) {
|
||||
this._createActors();
|
||||
if (this._isMouseOverRegion())
|
||||
this._magnifier.hideSystemCursor();
|
||||
this._updateMousePosition(false /* mouse didn't move */);
|
||||
this._updateMagViewGeometry();
|
||||
this._updateCloneGeometry();
|
||||
this._updateMousePosition();
|
||||
} else if (!activate && this.isActive()) {
|
||||
this._destroyActors();
|
||||
}
|
||||
else
|
||||
this._magView.hide();
|
||||
},
|
||||
|
||||
/**
|
||||
@ -627,18 +610,7 @@ ZoomRegion.prototype = {
|
||||
* @return Whether this ZoomRegion is active (boolean).
|
||||
*/
|
||||
isActive: function() {
|
||||
return this._magView.visible;
|
||||
},
|
||||
|
||||
/**
|
||||
* removeFromStage:
|
||||
* Remove the magnified view from the stage.
|
||||
*/
|
||||
removeFromStage: function() {
|
||||
global.stage.remove_actor(this._magView);
|
||||
this._mouseRoot = null;
|
||||
this._uiGroupClone = null;
|
||||
this._magView = null;
|
||||
return this._magView != null;
|
||||
},
|
||||
|
||||
/**
|
||||
@ -650,19 +622,9 @@ ZoomRegion.prototype = {
|
||||
* of the magnified view.
|
||||
*/
|
||||
setMagFactor: function(xMagFactor, yMagFactor) {
|
||||
if (xMagFactor > 0 && yMagFactor > 0) {
|
||||
// Changing the mag factor moves the pixels along the axes of
|
||||
// magnification. Set the view back to the point that was at the centre
|
||||
// of the region of interest.
|
||||
let [x, y, width, height] = this.getROI();
|
||||
let xCentre = x + width / 2;
|
||||
let yCentre = y + height / 2;
|
||||
this._uiGroupClone.set_scale(xMagFactor, yMagFactor);
|
||||
this._mouseRoot.set_scale(xMagFactor, yMagFactor);
|
||||
this._calcRightBottomStops();
|
||||
this._scrollToPosition(xCentre, yCentre);
|
||||
this._updateMousePosition(false /* mouse didn't move */);
|
||||
}
|
||||
this._changeROI({ xMagFactor: xMagFactor,
|
||||
yMagFactor: yMagFactor,
|
||||
redoCursorTracking: this._followingCursor });
|
||||
},
|
||||
|
||||
/**
|
||||
@ -673,7 +635,7 @@ ZoomRegion.prototype = {
|
||||
* in size, and so on.
|
||||
*/
|
||||
getMagFactor: function() {
|
||||
return this._uiGroupClone.get_scale();
|
||||
return [this._xMagFactor, this._yMagFactor];
|
||||
},
|
||||
|
||||
/**
|
||||
@ -696,29 +658,12 @@ ZoomRegion.prototype = {
|
||||
/**
|
||||
* setViewPort
|
||||
* Sets the position and size of the ZoomRegion on screen.
|
||||
* @viewPort: Object defining the position and size of the view port. It
|
||||
* has the form { x, y, width, height }. The values are in
|
||||
* @viewPort: Object defining the position and size of the view port.
|
||||
* It has members x, y, width, height. The values are in
|
||||
* stage coordinate space.
|
||||
*/
|
||||
setViewPort: function(viewPort) {
|
||||
let [xRoi, yRoi, wRoi, hRoi] = this.getROI();
|
||||
|
||||
// Remove border if the view port is the entire screen. Otherwise,
|
||||
// ensure that the border is there.
|
||||
if (viewPort.x == 0 && viewPort.y == 0 && viewPort.width == global.screen_width && viewPort.height == global.screen_height)
|
||||
this._magView.add_style_class_name('full-screen');
|
||||
else
|
||||
this._magView.remove_style_class_name('full-screen');
|
||||
|
||||
this.setSize(viewPort.width, viewPort.height);
|
||||
this.setPosition(viewPort.x, viewPort.y);
|
||||
if (this._crossHairs)
|
||||
this._crossHairs.reCenter();
|
||||
|
||||
this.scrollContentsTo(xRoi + wRoi / 2, yRoi + hRoi / 2);
|
||||
if (this.isMouseOverRegion())
|
||||
this._magnifier.hideSystemCursor();
|
||||
|
||||
this._setViewPort(viewPort);
|
||||
this._screenPosition = ScreenPosition.NONE;
|
||||
},
|
||||
|
||||
@ -726,88 +671,18 @@ ZoomRegion.prototype = {
|
||||
* setROI
|
||||
* Sets the "region of interest" that the ZoomRegion is magnifying.
|
||||
* @roi: Object that defines the region of the screen to magnify. It
|
||||
* has the form { x, y, width, height }. The values are in
|
||||
* has members x, y, width, height. The values are in
|
||||
* screen (unmagnified) coordinate space.
|
||||
*/
|
||||
setROI: function(roi) {
|
||||
let xRoiCenter = roi.x + roi.width / 2;
|
||||
let yRoiCenter = roi.y + roi.height / 2;
|
||||
this.scrollContentsTo(xRoiCenter, yRoiCenter);
|
||||
},
|
||||
if (roi.width <= 0 || roi.height <= 0)
|
||||
return;
|
||||
|
||||
/**
|
||||
* setSize:
|
||||
* @width: The width to set the magnified view to.
|
||||
* @height: The height to set the magnified view to.
|
||||
*/
|
||||
setSize: function(width, height) {
|
||||
this._magView.set_size(width, height);
|
||||
this._calcRightBottomStops();
|
||||
},
|
||||
|
||||
/**
|
||||
* getSize:
|
||||
* @return an array, [width, height], that specifies the size of the
|
||||
* magnified view.
|
||||
*/
|
||||
getSize: function() {
|
||||
return this._magView.get_size();
|
||||
},
|
||||
|
||||
/**
|
||||
* setPosition:
|
||||
* Position the magnified view at the given coordinates.
|
||||
* @x: The x-coord of the new position.
|
||||
* @y: The y-coord of the new position.
|
||||
*/
|
||||
setPosition: function(x, y) {
|
||||
let [width, height] = this._magView.get_size();
|
||||
if (this._clampScrollingAtEdges) {
|
||||
// Restrict positioning so view doesn't go beyond any edge of the
|
||||
// screen.
|
||||
if (x < 0)
|
||||
x = 0;
|
||||
if (x + width > global.screen_width)
|
||||
x = global.screen_width - width;
|
||||
if (y < 0)
|
||||
y = 0;
|
||||
if (y + height > global.screen_height)
|
||||
y = global.screen_height - height;
|
||||
}
|
||||
this._magView.set_position(x, y);
|
||||
},
|
||||
|
||||
/**
|
||||
* getPosition:
|
||||
* @return an array, [x, y], that gives the position of the
|
||||
* magnified view on screen.
|
||||
*/
|
||||
getPosition: function() {
|
||||
return this._magView.get_position();
|
||||
},
|
||||
|
||||
/**
|
||||
* getCenter:
|
||||
* @return an array, [x, y], that is half the width and height of the
|
||||
* magnified view (the center of the magnified view).
|
||||
*/
|
||||
getCenter: function() {
|
||||
let [width, height] = this._magView.get_size();
|
||||
return [width / 2, height / 2];
|
||||
},
|
||||
|
||||
/**
|
||||
* isFullScreenMode:
|
||||
* Does the magnified view occupy the whole screen?
|
||||
*/
|
||||
isFullScreenMode: function() {
|
||||
let [x, y] = this._magView.get_position();
|
||||
if (x != 0 || y != 0)
|
||||
return false;
|
||||
[width, height] = this._magView.get_size();
|
||||
if (width != global.screen_width || height != global.screen_height)
|
||||
return false;
|
||||
return true;
|
||||
this._followingCursor = false;
|
||||
this._changeROI({ xMagFactor: this._viewPortWidth / roi.width,
|
||||
yMagFactor: this._viewPortHeight / roi.height,
|
||||
xCenter: roi.x + roi.width / 2,
|
||||
yCenter: roi.y + roi.height / 2 });
|
||||
},
|
||||
|
||||
/**
|
||||
@ -819,24 +694,23 @@ ZoomRegion.prototype = {
|
||||
* rectangle of what is shown in the magnified view.
|
||||
*/
|
||||
getROI: function() {
|
||||
let [xMagnified, yMagnified] = this._uiGroupClone.get_position();
|
||||
let [xMagFactor, yMagFactor] = this.getMagFactor();
|
||||
let [width, height] = this.getSize();
|
||||
let x = (0 - xMagnified) / xMagFactor;
|
||||
let y = (0 - yMagnified) / yMagFactor;
|
||||
return [x, y, width / xMagFactor, height / yMagFactor];
|
||||
let roiWidth = this._viewPortWidth / this._xMagFactor;
|
||||
let roiHeight = this._viewPortHeight / this._yMagFactor;
|
||||
|
||||
return [this._xCenter - roiWidth / 2,
|
||||
this._yCenter - roiHeight / 2,
|
||||
roiWidth, roiHeight];
|
||||
},
|
||||
|
||||
/**
|
||||
* setLensMode:
|
||||
* Turn lens mode on/off. In full screen mode, lens mode is alway off since
|
||||
* Turn lens mode on/off. In full screen mode, lens mode does nothing since
|
||||
* a lens the size of the screen is pointless.
|
||||
* @lensMode: A boolean to set the sense of lens mode.
|
||||
*/
|
||||
setLensMode: function(lensMode) {
|
||||
let fullScreen = this.isFullScreenMode();
|
||||
this._lensMode = (lensMode && !fullScreen);
|
||||
if (!this._lensMode && !fullScreen)
|
||||
this._lensMode = lensMode;
|
||||
if (!this._lensMode)
|
||||
this.setScreenPosition (this._screenPosition);
|
||||
},
|
||||
|
||||
@ -857,6 +731,8 @@ ZoomRegion.prototype = {
|
||||
*/
|
||||
setClampScrollingAtEdges: function(clamp) {
|
||||
this._clampScrollingAtEdges = clamp;
|
||||
if (clamp)
|
||||
this._changeROI();
|
||||
},
|
||||
|
||||
/**
|
||||
@ -869,7 +745,7 @@ ZoomRegion.prototype = {
|
||||
viewPort.y = 0;
|
||||
viewPort.width = global.screen_width;
|
||||
viewPort.height = global.screen_height/2;
|
||||
this.setViewPort(viewPort);
|
||||
this._setViewPort(viewPort);
|
||||
this._screenPosition = ScreenPosition.TOP_HALF;
|
||||
},
|
||||
|
||||
@ -883,7 +759,7 @@ ZoomRegion.prototype = {
|
||||
viewPort.y = global.screen_height/2;
|
||||
viewPort.width = global.screen_width;
|
||||
viewPort.height = global.screen_height/2;
|
||||
this.setViewPort(viewPort);
|
||||
this._setViewPort(viewPort);
|
||||
this._screenPosition = ScreenPosition.BOTTOM_HALF;
|
||||
},
|
||||
|
||||
@ -897,7 +773,7 @@ ZoomRegion.prototype = {
|
||||
viewPort.y = 0;
|
||||
viewPort.width = global.screen_width/2;
|
||||
viewPort.height = global.screen_height;
|
||||
this.setViewPort(viewPort);
|
||||
this._setViewPort(viewPort);
|
||||
this._screenPosition = ScreenPosition.LEFT_HALF;
|
||||
},
|
||||
|
||||
@ -911,62 +787,24 @@ ZoomRegion.prototype = {
|
||||
viewPort.y = 0;
|
||||
viewPort.width = global.screen_width/2;
|
||||
viewPort.height = global.screen_height;
|
||||
this.setViewPort(viewPort);
|
||||
this._setViewPort(viewPort);
|
||||
this._screenPosition = ScreenPosition.RIGHT_HALF;
|
||||
},
|
||||
|
||||
/**
|
||||
* getScreenPosition:
|
||||
* Tell the outside world what the current mode is -- magnifiying the
|
||||
* top half, bottom half, etc.
|
||||
* @return: the current mode.
|
||||
*/
|
||||
getScreenPosition: function() {
|
||||
return this._screenPosition;
|
||||
},
|
||||
|
||||
/**
|
||||
* scrollToMousePos:
|
||||
* Set the region of interest based on the position of the system pointer.
|
||||
* @return: Whether the system mouse pointer is over the magnified view.
|
||||
*/
|
||||
scrollToMousePos: function() {
|
||||
let [xMouse, yMouse, mask] = global.get_pointer();
|
||||
|
||||
if (this._mouseTrackingMode == MouseTrackingMode.PROPORTIONAL) {
|
||||
this._setROIProportional(xMouse, yMouse);
|
||||
}
|
||||
else if (this._mouseTrackingMode == MouseTrackingMode.PUSH) {
|
||||
this._setROIPush(xMouse, yMouse);
|
||||
}
|
||||
else if (this._mouseTrackingMode == MouseTrackingMode.CENTERED) {
|
||||
this._setROICentered(xMouse, yMouse);
|
||||
}
|
||||
this._updateMousePosition(true);
|
||||
|
||||
// Determine whether the system mouse pointer is over this zoom region.
|
||||
return this.isMouseOverRegion(xMouse, yMouse);
|
||||
},
|
||||
|
||||
/**
|
||||
* setFullScreenMode:
|
||||
* Set the ZoomRegion to full-screen mode.
|
||||
* Note: disallows lens mode.
|
||||
*/
|
||||
setFullScreenMode: function() {
|
||||
if (!this.isFullScreenMode()) {
|
||||
let viewPort = {};
|
||||
viewPort.x = 0;
|
||||
viewPort.y = 0;
|
||||
viewPort.width = global.screen_width;
|
||||
viewPort.height = global.screen_height;
|
||||
this.setViewPort(viewPort);
|
||||
this.setLensMode(false);
|
||||
if (this.isActive())
|
||||
this._magnifier.hideSystemCursor();
|
||||
let viewPort = {};
|
||||
viewPort.x = 0;
|
||||
viewPort.y = 0;
|
||||
viewPort.width = global.screen_width;
|
||||
viewPort.height = global.screen_height;
|
||||
this.setViewPort(viewPort);
|
||||
|
||||
this._screenPosition = ScreenPosition.FULL_SCREEN;
|
||||
}
|
||||
this._screenPosition = ScreenPosition.FULL_SCREEN;
|
||||
},
|
||||
|
||||
/**
|
||||
@ -997,111 +835,241 @@ ZoomRegion.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* getScreenPosition:
|
||||
* Tell the outside world what the current mode is -- magnifiying the
|
||||
* top half, bottom half, etc.
|
||||
* @return: the current mode.
|
||||
*/
|
||||
getScreenPosition: function() {
|
||||
return this._screenPosition;
|
||||
},
|
||||
|
||||
/**
|
||||
* scrollToMousePos:
|
||||
* Set the region of interest based on the position of the system pointer.
|
||||
* @return: Whether the system mouse pointer is over the magnified view.
|
||||
*/
|
||||
scrollToMousePos: function() {
|
||||
this._followingCursor = true;
|
||||
if (this._mouseTrackingMode != MouseTrackingMode.NONE)
|
||||
this._changeROI({ redoCursorTracking: true });
|
||||
else
|
||||
this._updateMousePosition();
|
||||
|
||||
// Determine whether the system mouse pointer is over this zoom region.
|
||||
return this._isMouseOverRegion();
|
||||
},
|
||||
|
||||
/**
|
||||
* scrollContentsTo:
|
||||
* Shift the contents of the magnified view such it is centered on the given
|
||||
* coordinate. Also, update the position of the magnified mouse image after
|
||||
* the shift.
|
||||
* coordinate.
|
||||
* @x: The x-coord of the point to center on.
|
||||
* @y: The y-coord of the point to center on.
|
||||
*/
|
||||
scrollContentsTo: function(x, y) {
|
||||
this._scrollToPosition(x, y);
|
||||
this._updateMousePosition(false /* mouse didn't move */);
|
||||
},
|
||||
|
||||
/**
|
||||
* isMouseOverRegion:
|
||||
* Return whether the system mouse sprite is over this ZoomRegion. If the
|
||||
* mouse's position is not given, then it is fetched.
|
||||
* @xMouse: The system mouse's x-coord. Optional.
|
||||
* @yMouse: The system mouse's y-coord. Optional.
|
||||
* @return: Boolean: true if the mouse is over the zoom region; false
|
||||
* otherwise.
|
||||
*/
|
||||
isMouseOverRegion: function(xMouse, yMouse) {
|
||||
let mouseIsOver = false;
|
||||
if (this.isActive()) {
|
||||
if (!xMouse || !yMouse) {
|
||||
let [x, y, mask] = global.get_pointer();
|
||||
xMouse = x;
|
||||
yMouse = y;
|
||||
}
|
||||
let [x, y] = this.getPosition();
|
||||
let [width, height] = this.getSize();
|
||||
mouseIsOver = (
|
||||
xMouse >= x && xMouse < (x + width) &&
|
||||
yMouse >= y && yMouse < (y + height)
|
||||
);
|
||||
}
|
||||
return mouseIsOver;
|
||||
this._followingCursor = false;
|
||||
this._changeROI({ xCenter: x,
|
||||
yCenter: y });
|
||||
},
|
||||
|
||||
/**
|
||||
* addCrosshairs:
|
||||
* Add crosshairs centered on the magnified mouse.
|
||||
* @crossHairs Clutter.Group that contains the actors for the crosshairs.
|
||||
* @crossHairs: Crosshairs instance
|
||||
*/
|
||||
addCrosshairs: function(crossHairs) {
|
||||
this._crossHairs = crossHairs;
|
||||
|
||||
// If the crossHairs is not already within a larger container, add it
|
||||
// to this zoom region. Otherwise, add a clone.
|
||||
if (crossHairs) {
|
||||
this._crosshairsActor = crossHairs.addToZoomRegion(this, this._mouseRoot);
|
||||
this._crossHairs = crossHairs;
|
||||
if (crossHairs && this.isActive()) {
|
||||
this._crossHairsActor = crossHairs.addToZoomRegion(this, this._mouseActor);
|
||||
}
|
||||
},
|
||||
|
||||
//// Private methods ////
|
||||
|
||||
_scrollToPosition: function(x, y) {
|
||||
// Given the point (x, y) in non-magnified coordinates, scroll the
|
||||
// magnified contenst such that the point is at the centre of the
|
||||
// magnified view.
|
||||
let [xMagFactor, yMagFactor] = this.getMagFactor();
|
||||
let xMagnified = x * xMagFactor;
|
||||
let yMagnified = y * yMagFactor;
|
||||
_createActors: function() {
|
||||
// The root actor for the zoom region
|
||||
this._magView = new St.Bin({ style_class: 'magnifier-zoom-region', x_fill: true, y_fill: true });
|
||||
global.stage.add_actor(this._magView);
|
||||
|
||||
let [xCenterMagView, yCenterMagView] = this.getCenter();
|
||||
let newX = xCenterMagView - xMagnified;
|
||||
let newY = yCenterMagView - yMagnified;
|
||||
// hide the magnified region from CLUTTER_PICK_ALL
|
||||
Shell.util_set_hidden_from_pick (this._magView, true);
|
||||
|
||||
// Append a Clutter.Group to clip the contents of the magnified view.
|
||||
let mainGroup = new Clutter.Group({ clip_to_allocation: true });
|
||||
this._magView.set_child(mainGroup);
|
||||
|
||||
// Add a background for when the magnified uiGroup is scrolled
|
||||
// out of view (don't want to see desktop showing through).
|
||||
let background = new Clutter.Rectangle({ color: Main.DEFAULT_BACKGROUND_COLOR });
|
||||
mainGroup.add_actor(background);
|
||||
|
||||
// Clone the group that contains all of UI on the screen. This is the
|
||||
// chrome, the windows, etc.
|
||||
this._uiGroupClone = new Clutter.Clone({ source: Main.uiGroup });
|
||||
mainGroup.add_actor(this._uiGroupClone);
|
||||
Main.uiGroup.set_size(global.screen_width, global.screen_height);
|
||||
background.set_size(global.screen_width, global.screen_height);
|
||||
|
||||
// Add either the given mouseSourceActor to the ZoomRegion, or a clone of
|
||||
// it.
|
||||
if (this._mouseSourceActor.get_parent() != null)
|
||||
this._mouseActor = new Clutter.Clone({ source: this._mouseSourceActor });
|
||||
else
|
||||
this._mouseActor = this._mouseSourceActor;
|
||||
mainGroup.add_actor(this._mouseActor);
|
||||
|
||||
if (this._crossHairs)
|
||||
this._crossHairsActor = this._crossHairs.addToZoomRegion(this, this._mouseActor);
|
||||
else
|
||||
this._crossHairsActor = null;
|
||||
},
|
||||
|
||||
_destroyActors: function() {
|
||||
if (this._mouseActor == this._mouseSourceActor)
|
||||
this._mouseActor.get_parent().remove_actor (this._mouseActor);
|
||||
if (this._crossHairs)
|
||||
this._crossHairs.removeFromParent(this._crossHairsActor);
|
||||
|
||||
this._magView.destroy();
|
||||
this._magView = null;
|
||||
this._uiGroupClone = null;
|
||||
this._mouseActor = null;
|
||||
this._crossHairsActor = null;
|
||||
},
|
||||
|
||||
_setViewPort: function(viewPort, fromROIUpdate) {
|
||||
// Sets the position of the zoom region on the screen
|
||||
|
||||
let width = Math.round(Math.min(viewPort.width, global.screen_width));
|
||||
let height = Math.round(Math.min(viewPort.height, global.screen_height));
|
||||
let x = Math.max(viewPort.x, 0);
|
||||
let y = Math.max(viewPort.y, 0);
|
||||
|
||||
x = Math.round(Math.min(x, global.screen_width - width));
|
||||
y = Math.round(Math.min(y, global.screen_height - height));
|
||||
|
||||
this._viewPortX = x;
|
||||
this._viewPortY = y;
|
||||
this._viewPortWidth = width;
|
||||
this._viewPortHeight = height;
|
||||
|
||||
this._updateMagViewGeometry();
|
||||
|
||||
if (!fromROIUpdate)
|
||||
this._changeROI({ redoCursorTracking: this._followingCursor }); // will update mouse
|
||||
|
||||
if (this.isActive() && this._isMouseOverRegion())
|
||||
this._magnifier.hideSystemCursor();
|
||||
},
|
||||
|
||||
_changeROI: function(params) {
|
||||
// Updates the area we are viewing; the magnification factors
|
||||
// and center can be set explicitly, or we can recompute
|
||||
// the position based on the mouse cursor position
|
||||
|
||||
params = Params.parse(params, { xMagFactor: this._xMagFactor,
|
||||
yMagFactor: this._yMagFactor,
|
||||
xCenter: this._xCenter,
|
||||
yCenter: this._yCenter,
|
||||
redoCursorTracking: false });
|
||||
|
||||
if (params.xMagFactor <= 0)
|
||||
params.xMagFactor = this._xMagFactor;
|
||||
if (params.yMagFactor <= 0)
|
||||
params.yMagFactor = this._yMagFactor;
|
||||
|
||||
this._xMagFactor = params.xMagFactor;
|
||||
this._yMagFactor = params.yMagFactor;
|
||||
|
||||
if (params.redoCursorTracking &&
|
||||
this._mouseTrackingMode != MouseTrackingMode.NONE) {
|
||||
// This depends on this.xMagFactor/yMagFactor already being updated
|
||||
[params.xCenter, params.yCenter] = this._centerFromMousePosition();
|
||||
}
|
||||
|
||||
if (this._clampScrollingAtEdges) {
|
||||
if (newX > 0)
|
||||
newX = 0;
|
||||
else if (newX < this._rightStop)
|
||||
newX = this._rightStop;
|
||||
if (newY > 0)
|
||||
newY = 0;
|
||||
else if (newY < this._bottomStop)
|
||||
newY = this._bottomStop;
|
||||
this._uiGroupClone.set_position(newX, newY);
|
||||
let roiWidth = this._viewPortWidth / this._xMagFactor;
|
||||
let roiHeight = this._viewPortHeight / this._yMagFactor;
|
||||
|
||||
params.xCenter = Math.min(params.xCenter, global.screen_width - roiWidth / 2);
|
||||
params.xCenter = Math.max(params.xCenter, roiWidth / 2);
|
||||
params.yCenter = Math.min(params.yCenter, global.screen_height - roiHeight / 2);
|
||||
params.yCenter = Math.max(params.yCenter, roiHeight / 2);
|
||||
}
|
||||
else
|
||||
this._uiGroupClone.set_position(newX, newY);
|
||||
|
||||
this._xCenter = params.xCenter;
|
||||
this._yCenter = params.yCenter;
|
||||
|
||||
// If in lens mode, move the magnified view such that it is centered
|
||||
// over the actual mouse. However, in full screen mode, the "lens" is
|
||||
// the size of the screen -- pointless to move such a large lens around.
|
||||
if (this._lensMode && !this.isFullScreenMode())
|
||||
this.setPosition(x - xCenterMagView, y - yCenterMagView);
|
||||
if (this._lensMode && !this._isFullScreen())
|
||||
this._setViewPort({ x: this._xCenter - this._viewPortWidth / 2,
|
||||
y: this._yCenter - this._viewPortHeight / 2,
|
||||
width: this._viewPortWidth,
|
||||
height: this._viewPortHeight }, true);
|
||||
|
||||
this._updateCloneGeometry();
|
||||
this._updateMousePosition();
|
||||
},
|
||||
|
||||
_calcRightBottomStops: function() {
|
||||
// Calculate the location of the top-left corner of _uiGroupClone
|
||||
// when its right and bottom edges are coincident with the right and
|
||||
// bottom edges of the _magView.
|
||||
let [contentWidth, contentHeight] = this._uiGroupClone.get_size();
|
||||
let [viewWidth, viewHeight] = this.getSize();
|
||||
let [xMagFactor, yMagFactor] = this.getMagFactor();
|
||||
let rightStop = viewWidth - (contentWidth * xMagFactor);
|
||||
let bottomStop = viewHeight - (contentHeight * yMagFactor);
|
||||
this._rightStop = parseInt(rightStop.toFixed(1));
|
||||
this._bottomStop = parseInt(bottomStop.toFixed(1));
|
||||
_isMouseOverRegion: function() {
|
||||
// Return whether the system mouse sprite is over this ZoomRegion. If the
|
||||
// mouse's position is not given, then it is fetched.
|
||||
let mouseIsOver = false;
|
||||
if (this.isActive()) {
|
||||
let xMouse = this._magnifier.xMouse;
|
||||
let yMouse = this._magnifier.yMouse;
|
||||
|
||||
mouseIsOver = (
|
||||
xMouse >= this._viewPortX && xMouse < (this._viewPortX + this._viewPortWidth) &&
|
||||
yMouse >= this._viewPortY && yMouse < (this._viewPortY + this._viewPortHeight)
|
||||
);
|
||||
}
|
||||
return mouseIsOver;
|
||||
},
|
||||
|
||||
_setROIPush: function(xMouse, yMouse) {
|
||||
_isFullScreen: function() {
|
||||
// Does the magnified view occupy the whole screen? Note that this
|
||||
// doesn't necessarily imply
|
||||
// this._screenPosition = ScreenPosition.FULL_SCREEN;
|
||||
|
||||
if (this._viewPortX != 0 || this._viewPortY != 0)
|
||||
return false;
|
||||
if (this._viewPortWidth != global.screen_width ||
|
||||
this._viewPortHeight != global.screen_height)
|
||||
return false;
|
||||
return true;
|
||||
},
|
||||
|
||||
_centerFromMousePosition: function() {
|
||||
// Determines where the center should be given the current cursor
|
||||
// position and mouse tracking mode
|
||||
|
||||
let xMouse = this._magnifier.xMouse;
|
||||
let yMouse = this._magnifier.yMouse;
|
||||
|
||||
if (this._mouseTrackingMode == MouseTrackingMode.PROPORTIONAL) {
|
||||
return this._centerFromMouseProportional(xMouse, yMouse);
|
||||
}
|
||||
else if (this._mouseTrackingMode == MouseTrackingMode.PUSH) {
|
||||
return this._centerFromMousePush(xMouse, yMouse);
|
||||
}
|
||||
else if (this._mouseTrackingMode == MouseTrackingMode.CENTERED) {
|
||||
return this._centerFromMouseCentered(xMouse, yMouse);
|
||||
}
|
||||
|
||||
return null; // Should never be hit
|
||||
},
|
||||
|
||||
_centerFromMousePush: function(xMouse, yMouse) {
|
||||
let [xRoi, yRoi, widthRoi, heightRoi] = this.getROI();
|
||||
let [cursorWidth, cursorHeight] = this._mouseRoot.get_size();
|
||||
let [cursorWidth, cursorHeight] = this._mouseSourceActor.get_size();
|
||||
let xPos = xRoi + widthRoi / 2;
|
||||
let yPos = yRoi + heightRoi / 2;
|
||||
let xRoiRight = xRoi + widthRoi - cursorWidth;
|
||||
@ -1117,58 +1085,79 @@ ZoomRegion.prototype = {
|
||||
else if (yMouse > yRoiBottom)
|
||||
yPos += (yMouse - yRoiBottom);
|
||||
|
||||
this._scrollToPosition(xPos, yPos);
|
||||
return [xPos, yPos];
|
||||
},
|
||||
|
||||
_setROIProportional: function(xMouse, yMouse) {
|
||||
_centerFromMouseProportional: function(xMouse, yMouse) {
|
||||
let [xRoi, yRoi, widthRoi, heightRoi] = this.getROI();
|
||||
let halfScreenWidth = global.screen_width / 2;
|
||||
let halfScreenHeight = global.screen_height / 2;
|
||||
let xProportion = (halfScreenWidth - xMouse) / halfScreenWidth;
|
||||
let yProportion = (halfScreenHeight - yMouse) / halfScreenHeight;
|
||||
let xPos = xMouse + xProportion * widthRoi / 2;
|
||||
let yPos = yMouse + yProportion * heightRoi / 2;
|
||||
// We want to pad with a constant distance after zooming, so divide
|
||||
// by the magnification factor.
|
||||
let unscaledPadding = Math.min(this._viewPortWidth, this._viewPortHeight) / 5;
|
||||
let xPadding = unscaledPadding / this._xMagFactor;
|
||||
let yPadding = unscaledPadding / this._yMagFactor;
|
||||
let xProportion = (xMouse - halfScreenWidth) / halfScreenWidth; // -1 ... 1
|
||||
let yProportion = (yMouse - halfScreenHeight) / halfScreenHeight; // -1 ... 1
|
||||
let xPos = xMouse - xProportion * (widthRoi / 2 - xPadding);
|
||||
let yPos = yMouse - yProportion * (heightRoi /2 - yPadding);
|
||||
|
||||
this._scrollToPosition(xPos, yPos);
|
||||
return [xPos, yPos];
|
||||
},
|
||||
|
||||
_setROICentered: function(xMouse, yMouse) {
|
||||
this._scrollToPosition(xMouse, yMouse);
|
||||
_centerFromMouseCentered: function(xMouse, yMouse) {
|
||||
return [xMouse, yMouse];
|
||||
},
|
||||
|
||||
_updateMousePosition: function(mouseMoved) {
|
||||
let [x, y] = this._uiGroupClone.get_position();
|
||||
x = parseInt(x.toFixed(1));
|
||||
y = parseInt(y.toFixed(1));
|
||||
let [xCenterMagView, yCenterMagView] = this.getCenter();
|
||||
let [xMouse, yMouse, mask] = global.get_pointer();
|
||||
let [xMagFactor, yMagFactor] = this.getMagFactor();
|
||||
|
||||
let xMagMouse = xMouse * xMagFactor + x;
|
||||
let yMagMouse = yMouse * yMagFactor + y;
|
||||
if (mouseMoved) {
|
||||
if (x == 0)
|
||||
xMagMouse = xMouse * xMagFactor;
|
||||
else if (x == this._rightStop)
|
||||
xMagMouse = (xMouse * xMagFactor) + this._rightStop;
|
||||
else if (this._mouseTrackingMode == MouseTrackingMode.CENTERED)
|
||||
xMagMouse = xCenterMagView;
|
||||
|
||||
if (y == 0)
|
||||
yMagMouse = yMouse * yMagFactor;
|
||||
else if (y == this._bottomStop)
|
||||
yMagMouse = (yMouse * yMagFactor) + this._bottomStop;
|
||||
else if (this._mouseTrackingMode == MouseTrackingMode.CENTERED)
|
||||
yMagMouse = yCenterMagView;
|
||||
}
|
||||
this._mouseRoot.set_position(xMagMouse, yMagMouse);
|
||||
this._updateCrosshairsPosition(xMagMouse, yMagMouse);
|
||||
_screenToViewPort: function(screenX, screenY) {
|
||||
// Converts coordinates relative to the (unmagnified) screen to coordinates
|
||||
// relative to the origin of this._magView
|
||||
return [this._viewPortWidth / 2 + (screenX - this._xCenter) * this._xMagFactor,
|
||||
this._viewPortHeight / 2 + (screenY - this._yCenter) * this._yMagFactor];
|
||||
},
|
||||
|
||||
_updateCrosshairsPosition: function(x, y) {
|
||||
if (this._crosshairsActor) {
|
||||
let [groupWidth, groupHeight] = this._crosshairsActor.get_size();
|
||||
this._crosshairsActor.set_position(x - groupWidth / 2, y - groupHeight / 2);
|
||||
_updateMagViewGeometry: function() {
|
||||
if (!this.isActive())
|
||||
return;
|
||||
|
||||
if (this._isFullScreen())
|
||||
this._magView.add_style_class_name('full-screen');
|
||||
else
|
||||
this._magView.remove_style_class_name('full-screen');
|
||||
|
||||
this._magView.set_size(this._viewPortWidth, this._viewPortHeight);
|
||||
this._magView.set_position(this._viewPortX, this._viewPortY);
|
||||
},
|
||||
|
||||
_updateCloneGeometry: function() {
|
||||
if (!this.isActive())
|
||||
return;
|
||||
|
||||
this._uiGroupClone.set_scale(this._xMagFactor, this._yMagFactor);
|
||||
this._mouseActor.set_scale(this._xMagFactor, this._yMagFactor);
|
||||
|
||||
let [x, y] = this._screenToViewPort(0, 0);
|
||||
this._uiGroupClone.set_position(x, y);
|
||||
|
||||
this._updateMousePosition();
|
||||
},
|
||||
|
||||
_updateMousePosition: function() {
|
||||
if (!this.isActive())
|
||||
return;
|
||||
|
||||
let [xMagMouse, yMagMouse] = this._screenToViewPort(this._magnifier.xMouse,
|
||||
this._magnifier.yMouse);
|
||||
|
||||
xMagMouse = Math.round(xMagMouse);
|
||||
yMagMouse = Math.round(yMagMouse);
|
||||
|
||||
this._mouseActor.set_position(xMagMouse, yMagMouse);
|
||||
|
||||
if (this._crossHairsActor) {
|
||||
let [groupWidth, groupHeight] = this._crossHairsActor.get_size();
|
||||
this._crossHairsActor.set_position(xMagMouse - groupWidth / 2,
|
||||
yMagMouse - groupHeight / 2);
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -1243,10 +1232,15 @@ Crosshairs.prototype = {
|
||||
|
||||
/**
|
||||
* removeFromParent:
|
||||
* Remove the crosshairs actor from its parent container.
|
||||
* @childActor: the actor returned from addToZoomRegion
|
||||
* Remove the crosshairs actor from its parent container, or destroy the
|
||||
* child actor if it was just a clone of the crosshairs actor.
|
||||
*/
|
||||
removeFromParent: function() {
|
||||
this._actor.get_parent().remove_actor(this._actor);
|
||||
removeFromParent: function(childActor) {
|
||||
if (childActor == this._actor)
|
||||
childActor.get_parent().remove_actor(childActor);
|
||||
else
|
||||
childActor.destroy();
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -112,6 +112,11 @@ ShellMagnifier.prototype = {
|
||||
* [left, top, right, bottom].
|
||||
* @viewPort Array of integers, [left, top, right, bottom] that defines
|
||||
* the position of the ZoomRegion on screen.
|
||||
*
|
||||
* FIXME: The arguments here are redundant, since the width and height of
|
||||
* the ROI are determined by the viewport and magnification factors.
|
||||
* We ignore the passed in width and height.
|
||||
*
|
||||
* @return The newly created ZoomRegion.
|
||||
*/
|
||||
createZoomRegion: function(xMagFactor, yMagFactor, roi, viewPort) {
|
||||
|
101
js/ui/main.js
101
js/ui/main.js
@ -17,8 +17,11 @@ const Mainloop = imports.mainloop;
|
||||
const Meta = imports.gi.Meta;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Chrome = imports.ui.chrome;
|
||||
const CtrlAltTab = imports.ui.ctrlAltTab;
|
||||
const Environment = imports.ui.environment;
|
||||
const ExtensionSystem = imports.ui.extensionSystem;
|
||||
const MessageTray = imports.ui.messageTray;
|
||||
@ -34,6 +37,7 @@ const ShellDBus = imports.ui.shellDBus;
|
||||
const TelepathyClient = imports.ui.telepathyClient;
|
||||
const WindowManager = imports.ui.windowManager;
|
||||
const Magnifier = imports.ui.magnifier;
|
||||
const XdndHandler = imports.ui.xdndHandler;
|
||||
const StatusIconDispatcher = imports.ui.statusIconDispatcher;
|
||||
|
||||
const DEFAULT_BACKGROUND_COLOR = new Clutter.Color();
|
||||
@ -50,12 +54,14 @@ let messageTray = null;
|
||||
let notificationDaemon = null;
|
||||
let windowAttentionHandler = null;
|
||||
let telepathyClient = null;
|
||||
let ctrlAltTabManager = null;
|
||||
let recorder = null;
|
||||
let shellDBusService = null;
|
||||
let modalCount = 0;
|
||||
let modalActorFocusStack = [];
|
||||
let uiGroup = null;
|
||||
let magnifier = null;
|
||||
let xdndHandler = null;
|
||||
let statusIconDispatcher = null;
|
||||
let _errorLogStack = [];
|
||||
let _startDate;
|
||||
@ -103,10 +109,7 @@ function start() {
|
||||
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';
|
||||
let theme = new St.Theme ({ application_stylesheet: stylesheetPath });
|
||||
themeContext.set_theme (theme);
|
||||
loadTheme();
|
||||
|
||||
let shellwm = global.window_manager;
|
||||
shellwm.takeover_keybinding('panel_main_menu');
|
||||
@ -125,6 +128,7 @@ function start() {
|
||||
global.stage.add_actor(uiGroup);
|
||||
|
||||
placesManager = new PlaceDisplay.PlacesManager();
|
||||
xdndHandler = new XdndHandler.XdndHandler();
|
||||
overview = new Overview.Overview();
|
||||
chrome = new Chrome.Chrome();
|
||||
magnifier = new Magnifier.Magnifier();
|
||||
@ -135,6 +139,10 @@ function start() {
|
||||
notificationDaemon = new NotificationDaemon.NotificationDaemon();
|
||||
windowAttentionHandler = new WindowAttentionHandler.WindowAttentionHandler();
|
||||
telepathyClient = new TelepathyClient.Client();
|
||||
panel.startStatusArea();
|
||||
|
||||
ctrlAltTabManager = new CtrlAltTab.CtrlAltTabManager();
|
||||
ctrlAltTabManager.addGroup(panel.actor, _("Panel"), 'gnome-panel');
|
||||
|
||||
_startDate = new Date();
|
||||
|
||||
@ -190,6 +198,18 @@ function start() {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* loadTheme:
|
||||
*
|
||||
* Reloads the theme CSS file from the default theme.
|
||||
*/
|
||||
function loadTheme() {
|
||||
let themeContext = St.ThemeContext.get_for_stage (global.stage);
|
||||
let stylesheetPath = global.datadir + '/theme/gnome-shell.css';
|
||||
let theme = new St.Theme ({ application_stylesheet: stylesheetPath });
|
||||
themeContext.set_theme (theme);
|
||||
}
|
||||
|
||||
/**
|
||||
* _log:
|
||||
* @category: string message type ('info', 'error')
|
||||
@ -278,47 +298,45 @@ function _removeUnusedWorkspaces() {
|
||||
// are disabled with a global grab. (When there is a global grab, then
|
||||
// all key events will be delivered to the stage, so ::captured-event
|
||||
// on the stage can be used for global keybindings.)
|
||||
//
|
||||
// We expect to need to conditionally enable just a few keybindings
|
||||
// depending on circumstance; the main hackiness here is that we are
|
||||
// assuming that keybindings have their default values; really we
|
||||
// should be asking Mutter to resolve the key into an action and then
|
||||
// base our handling based on the action.
|
||||
function _globalKeyPressHandler(actor, event) {
|
||||
if (modalCount == 0)
|
||||
return false;
|
||||
if (event.type() != Clutter.EventType.KEY_RELEASE)
|
||||
if (event.type() != Clutter.EventType.KEY_PRESS)
|
||||
return false;
|
||||
|
||||
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();
|
||||
|
||||
let display = global.screen.get_display();
|
||||
// This relies on the fact that Clutter.ModifierType is the same as Gdk.ModifierType
|
||||
let action = display.get_keybinding_action(keyCode, modifierState);
|
||||
|
||||
// The screenshot action should always be available (even if a
|
||||
// modal dialog is present)
|
||||
if (action == 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 != '') {
|
||||
let [ok, len, args] = GLib.shell_parse_argv(command);
|
||||
let p = new Shell.Process({'args' : args});
|
||||
p.run();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Whitelist some of the Metacity actions
|
||||
let display = global.screen.get_display();
|
||||
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
|
||||
// Other bindings are only available when the overview is up and
|
||||
// no modal dialog is present.
|
||||
if (!overview.visible || modalCount > 1)
|
||||
return false;
|
||||
|
||||
// This isn't a Meta.KeyBindingAction yet
|
||||
if (symbol == Clutter.Super_L || symbol == Clutter.Super_R) {
|
||||
overview.hide();
|
||||
return true;
|
||||
}
|
||||
|
||||
// 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 != '') {
|
||||
let [ok, len, args] = GLib.shell_parse_argv(command);
|
||||
let p = new Shell.Process({'args' : args});
|
||||
p.run();
|
||||
}
|
||||
return true;
|
||||
case Meta.KeyBindingAction.WORKSPACE_LEFT:
|
||||
wm.actionMoveWorkspaceLeft();
|
||||
return true;
|
||||
@ -329,6 +347,12 @@ function _globalKeyPressHandler(actor, event) {
|
||||
case Meta.KeyBindingAction.COMMAND_2:
|
||||
getRunDialog().open();
|
||||
return true;
|
||||
case Meta.KeyBindingAction.PANEL_MAIN_MENU:
|
||||
overview.hide();
|
||||
return true;
|
||||
case Meta.KeyBindingAction.SWITCH_PANELS:
|
||||
ctrlAltTabManager.popup(modifierState & Clutter.ModifierType.SHIFT_MASK);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -349,13 +373,13 @@ function _findModal(actor) {
|
||||
* @actor: #ClutterActor which will be given keyboard focus
|
||||
*
|
||||
* Ensure we are in a mode where all keyboard and mouse input goes to
|
||||
* the stage. Multiple calls to this function act in a stacking fashion;
|
||||
* the effect will be undone when an equal number of popModal() invocations
|
||||
* have been made.
|
||||
* the stage, and focus @actor. Multiple calls to this function act in
|
||||
* a stacking fashion; the effect will be undone when an equal number
|
||||
* of popModal() invocations have been made.
|
||||
*
|
||||
* Next, record the current Clutter keyboard focus on a stack. If the modal stack
|
||||
* returns to this actor, reset the focus to the actor which was focused
|
||||
* at the time pushModal() was invoked.
|
||||
* Next, record the current Clutter keyboard focus on a stack. If the
|
||||
* modal stack returns to this actor, reset the focus to the actor
|
||||
* which was focused at the time pushModal() was invoked.
|
||||
*
|
||||
* Returns: true iff we successfully acquired a grab or already had one
|
||||
*/
|
||||
@ -385,7 +409,7 @@ function pushModal(actor) {
|
||||
}
|
||||
modalActorFocusStack.push([actor, curFocus]);
|
||||
|
||||
global.stage.set_key_focus(null);
|
||||
global.stage.set_key_focus(actor);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -415,6 +439,7 @@ function popModal(actor) {
|
||||
if (modalCount > 0)
|
||||
return;
|
||||
|
||||
global.stage.set_key_focus(null);
|
||||
global.end_modal(global.get_current_time());
|
||||
global.set_stage_input_mode(Shell.StageInputMode.NORMAL);
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Gio = imports.gi.Gio;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
@ -14,6 +16,7 @@ const Tweener = imports.ui.tweener;
|
||||
const Main = imports.ui.main;
|
||||
const BoxPointer = imports.ui.boxpointer;
|
||||
const Params = imports.misc.params;
|
||||
const Utils = imports.misc.utils;
|
||||
|
||||
const ANIMATION_TIME = 0.2;
|
||||
const NOTIFICATION_TIMEOUT = 4;
|
||||
@ -35,15 +38,143 @@ const State = {
|
||||
HIDING: 3
|
||||
};
|
||||
|
||||
function _cleanMarkup(text) {
|
||||
// Support &, ", ', < and >, escape all other
|
||||
// occurrences of '&'.
|
||||
let _text = text.replace(/&(?!amp;|quot;|apos;|lt;|gt;)/g, '&');
|
||||
// Support <b>, <i>, and <u>, escape anything else
|
||||
// so it displays as raw markup.
|
||||
return _text.replace(/<(\/?[^biu]>|[^>\/][^>])/g, '<$1');
|
||||
// Message tray has its custom Urgency enumeration. LOW, NORMAL and CRITICAL
|
||||
// urgency values map to the corresponding values for the notifications received
|
||||
// through the notification daemon. HIGH urgency value is used for chats received
|
||||
// through the Telepathy client.
|
||||
const Urgency = {
|
||||
LOW: 0,
|
||||
NORMAL: 1,
|
||||
HIGH: 2,
|
||||
CRITICAL: 3
|
||||
}
|
||||
|
||||
function _fixMarkup(text, allowMarkup) {
|
||||
if (allowMarkup) {
|
||||
// Support &, ", ', < and >, escape all other
|
||||
// occurrences of '&'.
|
||||
let _text = text.replace(/&(?!amp;|quot;|apos;|lt;|gt;)/g, '&');
|
||||
// Support <b>, <i>, and <u>, escape anything else
|
||||
// so it displays as raw markup.
|
||||
return _text.replace(/<(\/?[^biu]>|[^>\/][^>])/g, '<$1');
|
||||
} else {
|
||||
// Escape everything
|
||||
let _text = text.replace(/&/g, '&');
|
||||
return _text.replace(/</g, '<');
|
||||
}
|
||||
}
|
||||
|
||||
function URLHighlighter(text, lineWrap, allowMarkup) {
|
||||
this._init(text, lineWrap, allowMarkup);
|
||||
}
|
||||
|
||||
URLHighlighter.prototype = {
|
||||
_init: function(text, lineWrap, allowMarkup) {
|
||||
if (!text)
|
||||
text = '';
|
||||
this.actor = new St.Label({ reactive: true, style_class: 'url-highlighter' });
|
||||
this._linkColor = '#ccccff';
|
||||
this.actor.connect('style-changed', Lang.bind(this, function() {
|
||||
let color = new Clutter.Color();
|
||||
let hasColor = this.actor.get_theme_node().get_color('link-color', color);
|
||||
if (hasColor) {
|
||||
let linkColor = color.to_string().substr(0, 7);
|
||||
if (linkColor != this._linkColor) {
|
||||
this._linkColor = linkColor;
|
||||
this._highlightUrls();
|
||||
}
|
||||
}
|
||||
}));
|
||||
if (lineWrap) {
|
||||
this.actor.clutter_text.line_wrap = true;
|
||||
this.actor.clutter_text.line_wrap_mode = Pango.WrapMode.WORD_CHAR;
|
||||
this.actor.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||
}
|
||||
|
||||
this.setMarkup(text, allowMarkup);
|
||||
this.actor.connect('button-release-event', Lang.bind(this, function (actor, event) {
|
||||
let urlId = this._findUrlAtPos(event);
|
||||
if (urlId != -1) {
|
||||
let url = this._urls[urlId].url;
|
||||
if (url.indexOf(':') == -1)
|
||||
url = 'http://' + url;
|
||||
try {
|
||||
Gio.app_info_launch_default_for_uri(url, global.create_app_launch_context());
|
||||
return true;
|
||||
} catch (e) {
|
||||
// TODO: remove this after gnome 3 release
|
||||
let p = new Shell.Process({ 'args' : ['gvfs-open', url] });
|
||||
p.run();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}));
|
||||
this.actor.connect('motion-event', Lang.bind(this, function(actor, event) {
|
||||
let urlId = this._findUrlAtPos(event);
|
||||
if (urlId != -1 && !this._cursorChanged) {
|
||||
global.set_cursor(Shell.Cursor.POINTING_HAND);
|
||||
this._cursorChanged = true;
|
||||
} else if (urlId == -1) {
|
||||
global.unset_cursor();
|
||||
this._cursorChanged = false;
|
||||
}
|
||||
return false;
|
||||
}));
|
||||
this.actor.connect('leave-event', Lang.bind(this, function() {
|
||||
if (this._cursorChanged) {
|
||||
this._cursorChanged = false;
|
||||
global.unset_cursor();
|
||||
}
|
||||
}));
|
||||
},
|
||||
|
||||
setMarkup: function(text, allowMarkup) {
|
||||
text = text ? _fixMarkup(text, allowMarkup) : '';
|
||||
this._text = text;
|
||||
|
||||
this.actor.clutter_text.set_markup(text);
|
||||
/* clutter_text.text contain text without markup */
|
||||
this._urls = Utils.findUrls(this.actor.clutter_text.text);
|
||||
this._highlightUrls();
|
||||
},
|
||||
|
||||
_highlightUrls: function() {
|
||||
// text here contain markup
|
||||
let urls = Utils.findUrls(this._text);
|
||||
let markup = '';
|
||||
let pos = 0;
|
||||
for (let i = 0; i < urls.length; i++) {
|
||||
let url = urls[i];
|
||||
let str = this._text.substr(pos, url.pos - pos);
|
||||
markup += str + '<span foreground="' + this._linkColor + '"><u>' + url.url + '</u></span>';
|
||||
pos = url.pos + url.url.length;
|
||||
}
|
||||
markup += this._text.substr(pos);
|
||||
this.actor.clutter_text.set_markup(markup);
|
||||
},
|
||||
|
||||
_findUrlAtPos: function(event) {
|
||||
let success;
|
||||
let [x, y] = event.get_coords();
|
||||
[success, x, y] = this.actor.transform_stage_point(x, y);
|
||||
let find_pos = -1;
|
||||
for (let i = 0; i < this.actor.clutter_text.text.length; i++) {
|
||||
let [success, px, py, line_height] = this.actor.clutter_text.position_to_coords(i);
|
||||
if (py > y || py + line_height < y || x < px)
|
||||
continue;
|
||||
find_pos = i;
|
||||
}
|
||||
if (find_pos != -1) {
|
||||
for (let i = 0; i < this._urls.length; i++)
|
||||
if (find_pos >= this._urls[i].pos &&
|
||||
this._urls[i].pos + this._urls[i].url.length > find_pos)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
};
|
||||
|
||||
// Notification:
|
||||
// @source: the notification's Source
|
||||
// @title: the title
|
||||
@ -73,7 +204,8 @@ function _cleanMarkup(text) {
|
||||
// area.
|
||||
//
|
||||
// @params can contain values for 'customContent', 'body', 'icon',
|
||||
// and 'clear' parameters.
|
||||
// 'titleMarkup', 'bannerMarkup', 'bodyMarkup', and 'clear'
|
||||
// parameters.
|
||||
//
|
||||
// If @params contains a 'customContent' parameter with the value %true,
|
||||
// then @banner will not be shown in the body of the notification when the
|
||||
@ -87,6 +219,12 @@ function _cleanMarkup(text) {
|
||||
// source.createNotificationIcon(). However, if @params contains an 'icon'
|
||||
// parameter, the passed in icon will be used.
|
||||
//
|
||||
// If @params contains a 'titleMarkup', 'bannerMarkup', or
|
||||
// 'bodyMarkup' parameter with the value %true, then the corresponding
|
||||
// element is assumed to use pango markup. If the parameter is not
|
||||
// present for an element, then anything that looks like markup in
|
||||
// that element will appear literally in the output.
|
||||
//
|
||||
// If @params contains a 'clear' parameter with the value %true, then
|
||||
// the content and the action area of the notification will be cleared.
|
||||
// The content area is also always cleared if 'customContent' is false
|
||||
@ -98,11 +236,15 @@ function Notification(source, title, banner, params) {
|
||||
Notification.prototype = {
|
||||
_init: function(source, title, banner, params) {
|
||||
this.source = source;
|
||||
this.urgent = false;
|
||||
this.urgency = Urgency.NORMAL;
|
||||
this.resident = false;
|
||||
// 'transient' is a reserved keyword in JS, so we have to use an alternate variable name
|
||||
this.isTransient = false;
|
||||
this.expanded = false;
|
||||
this._useActionIcons = false;
|
||||
this._customContent = false;
|
||||
this._bannerBodyText = null;
|
||||
this._bannerBodyMarkup = false;
|
||||
this._titleFitsInBannerMode = true;
|
||||
this._spacing = 0;
|
||||
|
||||
@ -114,7 +256,6 @@ Notification.prototype = {
|
||||
this._prevFocusedWindow = null;
|
||||
this._prevKeyFocusActor = null;
|
||||
|
||||
this._focusWindowChangedId = 0;
|
||||
this._focusActorChangedId = 0;
|
||||
this._stageInputModeChangedId = 0;
|
||||
this._capturedEventId = 0;
|
||||
@ -129,7 +270,7 @@ Notification.prototype = {
|
||||
function (actor, event) {
|
||||
if (!this._actionArea ||
|
||||
!this._actionArea.contains(event.get_source()))
|
||||
this.emit('clicked');
|
||||
this._onClicked();
|
||||
}));
|
||||
|
||||
// The first line should have the title, followed by the
|
||||
@ -148,7 +289,8 @@ Notification.prototype = {
|
||||
|
||||
this._titleLabel = new St.Label();
|
||||
this._bannerBox.add_actor(this._titleLabel);
|
||||
this._bannerLabel = new St.Label();
|
||||
this._bannerUrlHighlighter = new URLHighlighter();
|
||||
this._bannerLabel = this._bannerUrlHighlighter.actor;
|
||||
this._bannerBox.add_actor(this._bannerLabel);
|
||||
|
||||
this.update(title, banner, params);
|
||||
@ -175,6 +317,9 @@ Notification.prototype = {
|
||||
params = Params.parse(params, { customContent: false,
|
||||
body: null,
|
||||
icon: null,
|
||||
titleMarkup: false,
|
||||
bannerMarkup: false,
|
||||
bodyMarkup: false,
|
||||
clear: false });
|
||||
|
||||
this._customContent = params.customContent;
|
||||
@ -205,7 +350,7 @@ Notification.prototype = {
|
||||
y_fill: false,
|
||||
y_align: St.Align.START });
|
||||
|
||||
title = title ? _cleanMarkup(title.replace(/\n/g, ' ')) : '';
|
||||
title = title ? _fixMarkup(title.replace(/\n/g, ' '), params.titleMarkup) : '';
|
||||
this._titleLabel.clutter_text.set_markup('<b>' + title + '</b>');
|
||||
|
||||
// Unless the notification has custom content, we save this._bannerBodyText
|
||||
@ -213,9 +358,11 @@ Notification.prototype = {
|
||||
// expandable due to other elements in its content area or due to the banner
|
||||
// not fitting fully in the single-line mode.
|
||||
this._bannerBodyText = this._customContent ? null : banner;
|
||||
this._bannerBodyMarkup = params.bannerMarkup;
|
||||
|
||||
banner = banner ? _cleanMarkup(banner.replace(/\n/g, ' ')) : '';
|
||||
this._bannerLabel.clutter_text.set_markup(banner);
|
||||
banner = banner ? banner.replace(/\n/g, ' ') : '';
|
||||
|
||||
this._bannerUrlHighlighter.setMarkup(banner, params.bannerMarkup);
|
||||
this._bannerLabel.queue_relayout();
|
||||
|
||||
// Add the bannerBody now if we know for sure we'll need it
|
||||
@ -223,7 +370,7 @@ Notification.prototype = {
|
||||
this._addBannerBody();
|
||||
|
||||
if (params.body)
|
||||
this.addBody(params.body);
|
||||
this.addBody(params.body, params.bodyMarkup);
|
||||
this._updated();
|
||||
},
|
||||
|
||||
@ -231,7 +378,7 @@ Notification.prototype = {
|
||||
// @actor: actor to add to the body of the notification
|
||||
//
|
||||
// Appends @actor to the notification's body
|
||||
addActor: function(actor) {
|
||||
addActor: function(actor, style) {
|
||||
if (!this._scrollArea) {
|
||||
this.actor.add_style_class_name('multi-line-notification');
|
||||
this._scrollArea = new St.ScrollView({ name: 'notification-scrollview',
|
||||
@ -248,34 +395,30 @@ Notification.prototype = {
|
||||
this._addBannerBody();
|
||||
}
|
||||
|
||||
this._contentArea.add(actor);
|
||||
this._contentArea.add(actor, style ? style : {});
|
||||
this._updated();
|
||||
},
|
||||
|
||||
// addBody:
|
||||
// @text: the text
|
||||
// @markup: %true if @text contains pango markup
|
||||
// @style: style to use when adding the actor containing the text
|
||||
//
|
||||
// Adds a multi-line label containing @text to the notification.
|
||||
//
|
||||
// Return value: the newly-added label
|
||||
addBody: function(text) {
|
||||
let body = new St.Label();
|
||||
body.clutter_text.line_wrap = true;
|
||||
body.clutter_text.line_wrap_mode = Pango.WrapMode.WORD_CHAR;
|
||||
body.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||
addBody: function(text, markup, style) {
|
||||
let label = new URLHighlighter(text, true, markup);
|
||||
|
||||
text = text ? _cleanMarkup(text) : '';
|
||||
body.clutter_text.set_markup(text);
|
||||
|
||||
this.addActor(body);
|
||||
return body;
|
||||
this.addActor(label.actor, style);
|
||||
return label.actor;
|
||||
},
|
||||
|
||||
_addBannerBody: function() {
|
||||
if (this._bannerBodyText) {
|
||||
let text = this._bannerBodyText;
|
||||
this._bannerBodyText = null;
|
||||
this.addBody(text);
|
||||
this.addBody(text, this._bannerBodyMarkup);
|
||||
}
|
||||
},
|
||||
|
||||
@ -354,12 +497,20 @@ Notification.prototype = {
|
||||
}
|
||||
|
||||
this._buttonBox.add(button);
|
||||
button.connect('clicked', Lang.bind(this, function() { this.emit('action-invoked', id); }));
|
||||
button.connect('clicked', Lang.bind(this, this._onActionInvoked, id));
|
||||
this._updated();
|
||||
},
|
||||
|
||||
setUrgent: function(urgent) {
|
||||
this.urgent = urgent;
|
||||
setUrgency: function(urgency) {
|
||||
this.urgency = urgency;
|
||||
},
|
||||
|
||||
setResident: function(resident) {
|
||||
this.resident = resident;
|
||||
},
|
||||
|
||||
setTransient: function(isTransient) {
|
||||
this.isTransient = isTransient;
|
||||
},
|
||||
|
||||
setUseActionIcons: function(useIcons) {
|
||||
@ -483,29 +634,16 @@ Notification.prototype = {
|
||||
let metaDisplay = global.screen.get_display();
|
||||
|
||||
this._prevFocusedWindow = metaDisplay.focus_window;
|
||||
this._prevKeyFocus = global.stage.get_key_focus();
|
||||
this._prevKeyFocusActor = global.stage.get_key_focus();
|
||||
|
||||
// We need to use the captured event in the overview, because we don't want to change the stage input mode to
|
||||
// FOCUSED there. On the other hand, using the captured event doesn't work correctly in the main view because
|
||||
// it doesn't allow focusing the windows again correctly. So we are using the FOCUSED stage input mode in the
|
||||
// main view.
|
||||
if (Main.overview.visible) {
|
||||
if (!Main.pushModal(this.actor))
|
||||
return;
|
||||
this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this, this._onCapturedEvent));
|
||||
} else {
|
||||
if (!Main.overview.visible)
|
||||
global.set_stage_input_mode(Shell.StageInputMode.FOCUSED);
|
||||
|
||||
this._focusWindowChangedId = metaDisplay.connect('notify::focus-window', Lang.bind(this, this._focusWindowChanged));
|
||||
this._stageInputModeChangedId = global.connect('notify::stage-input-mode', Lang.bind(this, this._stageInputModeChanged));
|
||||
// Use captured-event to notice clicks outside the notification
|
||||
// without consuming them.
|
||||
this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this, this._onCapturedEvent));
|
||||
|
||||
this._keyPressId = global.stage.connect('key-press-event', Lang.bind(this, this._onKeyPress));
|
||||
}
|
||||
|
||||
// We need to listen to this signal in the overview, as well as in the main view, to make the key bindings such as
|
||||
// Alt+F2 work. When a notification has key focus, which is the case with chat notifications, all captured KEY_PRESS
|
||||
// events have the actor with the key focus as their source. This makes it impossible to distinguish between the chat
|
||||
// window input and the key bindings based solely on the KEY_PRESS event.
|
||||
this._stageInputModeChangedId = global.connect('notify::stage-input-mode', Lang.bind(this, this._stageInputModeChanged));
|
||||
this._focusActorChangedId = global.stage.connect('notify::key-focus', Lang.bind(this, this._focusActorChanged));
|
||||
|
||||
this._hasFocus = true;
|
||||
@ -513,19 +651,6 @@ Notification.prototype = {
|
||||
Main.messageTray.lock();
|
||||
},
|
||||
|
||||
_focusWindowChanged: function() {
|
||||
let metaDisplay = global.screen.get_display();
|
||||
// this._focusWindowChanged() will be called when we call
|
||||
// global.set_stage_input_mode(Shell.StageInputMode.FOCUSED) ,
|
||||
// however metaDisplay.focus_window will be null in that case. We only
|
||||
// want to ungrab focus if the focus has been moved to an application
|
||||
// window.
|
||||
if (metaDisplay.focus_window) {
|
||||
this._prevFocusedWindow = null;
|
||||
this.ungrabFocus();
|
||||
}
|
||||
},
|
||||
|
||||
_focusActorChanged: function() {
|
||||
let focusedActor = global.stage.get_key_focus();
|
||||
if (!focusedActor || !this.actor.contains(focusedActor)) {
|
||||
@ -535,15 +660,6 @@ Notification.prototype = {
|
||||
},
|
||||
|
||||
_stageInputModeChanged: function() {
|
||||
let focusedActor = global.stage.get_key_focus();
|
||||
// TODO: We need to set this._prevFocusedWindow to null in order to
|
||||
// get the cursor in the run dialog. However, that also means it's
|
||||
// set to null when the application menu is activated, which defeats
|
||||
// the point of keeping the name of the previously focused application
|
||||
// in the panel. It'd be good to be able to distinguish between these
|
||||
// two cases.
|
||||
this._prevFocusedWindow = null;
|
||||
this._prevKeyFocusActor = null;
|
||||
this.ungrabFocus();
|
||||
},
|
||||
|
||||
@ -566,6 +682,28 @@ Notification.prototype = {
|
||||
return false;
|
||||
},
|
||||
|
||||
_onActionInvoked: function(actor, id) {
|
||||
this.emit('action-invoked', id);
|
||||
if (!this.resident) {
|
||||
// We don't hide a resident notification when the user invokes one of its actions,
|
||||
// because it is common for such notifications to update themselves with new
|
||||
// information based on the action. We'd like to display the updated information
|
||||
// in place, rather than pop-up a new notification.
|
||||
this.emit('done-displaying');
|
||||
this.destroy();
|
||||
}
|
||||
},
|
||||
|
||||
_onClicked: function() {
|
||||
this.emit('clicked');
|
||||
// We hide all types of notifications once the user clicks on them because the common
|
||||
// outcome of clicking should be the relevant window being brought forward and the user's
|
||||
// attention switching to the window.
|
||||
this.emit('done-displaying');
|
||||
if (!this.resident)
|
||||
this.destroy();
|
||||
},
|
||||
|
||||
_onKeyPress: function(actor, event) {
|
||||
let symbol = event.get_key_symbol();
|
||||
if (symbol == Clutter.Escape) {
|
||||
@ -580,10 +718,6 @@ Notification.prototype = {
|
||||
return;
|
||||
|
||||
let metaDisplay = global.screen.get_display();
|
||||
if (this._focusWindowChangedId > 0) {
|
||||
metaDisplay.disconnect(this._focusWindowChangedId);
|
||||
this._focusWindowChangedId = 0;
|
||||
}
|
||||
|
||||
if (this._focusActorChangedId > 0) {
|
||||
global.stage.disconnect(this._focusActorChangedId);
|
||||
@ -596,20 +730,14 @@ Notification.prototype = {
|
||||
}
|
||||
|
||||
if (this._capturedEventId > 0) {
|
||||
Main.popModal(this.actor);
|
||||
global.stage.disconnect(this._capturedEventId);
|
||||
this._capturedEventId = 0;
|
||||
}
|
||||
|
||||
if (this._keyPressId > 0) {
|
||||
global.stage.disconnect(this._keyPressId);
|
||||
this._keyPressId = 0;
|
||||
}
|
||||
|
||||
this._hasFocus = false;
|
||||
Main.messageTray.unlock();
|
||||
|
||||
if (this._prevFocusedWindow) {
|
||||
if (this._prevFocusedWindow && !metaDisplay.focus_window) {
|
||||
metaDisplay.set_input_focus_window(this._prevFocusedWindow, false, global.get_current_time());
|
||||
this._prevFocusedWindow = null;
|
||||
}
|
||||
@ -651,6 +779,11 @@ Source.prototype = {
|
||||
this.title = title;
|
||||
this._iconBin = new St.Bin({ width: this.ICON_SIZE,
|
||||
height: this.ICON_SIZE });
|
||||
this.isTransient = false;
|
||||
},
|
||||
|
||||
setTransient: function(isTransient) {
|
||||
this.isTransient = isTransient;
|
||||
},
|
||||
|
||||
// Called to create a new icon actor (of size this.ICON_SIZE).
|
||||
@ -681,6 +814,7 @@ Source.prototype = {
|
||||
this.notification = null;
|
||||
this._notificationDestroyedId = 0;
|
||||
this._notificationClickedId = 0;
|
||||
this._notificationRemoved();
|
||||
}
|
||||
}));
|
||||
|
||||
@ -700,8 +834,13 @@ Source.prototype = {
|
||||
this._iconBin.child = icon;
|
||||
},
|
||||
|
||||
// Default implementation is to do nothing, but subclass can override
|
||||
// Default implementation is to do nothing, but subclasses can override
|
||||
_notificationClicked: function(notification) {
|
||||
},
|
||||
|
||||
// Default implementation is to destroy this source, but subclasses can override
|
||||
_notificationRemoved: function() {
|
||||
this.destroy();
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(Source.prototype);
|
||||
@ -775,8 +914,9 @@ MessageTray.prototype = {
|
||||
this._notificationBin.hide();
|
||||
this._notificationQueue = [];
|
||||
this._notification = null;
|
||||
this._notificationClickedId = 0;
|
||||
|
||||
this._summaryBin = new St.Bin({ anchor_gravity: Clutter.Gravity.NORTH_EAST });
|
||||
this._summaryBin = new St.Bin({ x_align: St.Align.END });
|
||||
this.actor.add_actor(this._summaryBin);
|
||||
this._summary = new St.BoxLayout({ name: 'summary-mode',
|
||||
reactive: true,
|
||||
@ -796,6 +936,7 @@ MessageTray.prototype = {
|
||||
this._summaryNotificationBoxPointer.actor.hide();
|
||||
|
||||
this._summaryNotification = null;
|
||||
this._summaryNotificationClickedId = 0;
|
||||
this._clickedSummaryItem = null;
|
||||
this._clickedSummaryItemAllocationChangedId = 0;
|
||||
this._expandedSummaryItem = null;
|
||||
@ -867,9 +1008,8 @@ MessageTray.prototype = {
|
||||
this.actor.width = primary.width;
|
||||
this._notificationBin.x = 0;
|
||||
this._notificationBin.width = primary.width;
|
||||
|
||||
// These work because of their anchor_gravity
|
||||
this._summaryBin.x = primary.width;
|
||||
this._summaryBin.x = 0;
|
||||
this._summaryBin.width = primary.width;
|
||||
},
|
||||
|
||||
contains: function(source) {
|
||||
@ -903,7 +1043,15 @@ MessageTray.prototype = {
|
||||
}
|
||||
|
||||
this._summaryItems.push(summaryItem);
|
||||
this._newSummaryItems.push(summaryItem);
|
||||
|
||||
// We keep this._newSummaryItems to track any new sources that were added to the
|
||||
// summary and show the summary with them to the user for a short period of time
|
||||
// after notifications are done showing. However, we don't want that to happen for
|
||||
// transient sources, which are removed after the notification is shown, but are
|
||||
// not removed fast enough because of the callbacks to avoid the summary popping up.
|
||||
// So we just don't add transient sources to this._newSummaryItems .
|
||||
if (!source.isTransient)
|
||||
this._newSummaryItems.push(summaryItem);
|
||||
|
||||
source.connect('notify', Lang.bind(this, this._onNotify));
|
||||
|
||||
@ -1028,13 +1176,11 @@ MessageTray.prototype = {
|
||||
} else if (this._notificationQueue.indexOf(notification) < 0) {
|
||||
notification.connect('destroy',
|
||||
Lang.bind(this, this.removeNotification));
|
||||
|
||||
if (notification.urgent)
|
||||
this._notificationQueue.unshift(notification);
|
||||
else
|
||||
this._notificationQueue.push(notification);
|
||||
this._notificationQueue.push(notification);
|
||||
this._notificationQueue.sort(function(notification1, notification2) {
|
||||
return (notification2.urgency - notification1.urgency);
|
||||
});
|
||||
}
|
||||
|
||||
this._updateState();
|
||||
},
|
||||
|
||||
@ -1233,7 +1379,7 @@ MessageTray.prototype = {
|
||||
let notificationsPending = this._notificationQueue.length > 0;
|
||||
let notificationPinned = this._pointerInTray && !this._pointerInSummary && !this._notificationRemoved;
|
||||
let notificationExpanded = this._notificationBin.y < 0;
|
||||
let notificationExpired = (this._notificationTimeoutId == 0 && !this._pointerInTray && !this._locked) || this._notificationRemoved;
|
||||
let notificationExpired = (this._notificationTimeoutId == 0 && !(this._notification && this._notification.urgency == Urgency.CRITICAL) && !this._pointerInTray && !this._locked) || this._notificationRemoved;
|
||||
|
||||
if (this._notificationState == State.HIDDEN) {
|
||||
if (notificationsPending)
|
||||
@ -1335,6 +1481,8 @@ MessageTray.prototype = {
|
||||
|
||||
_showNotification: function() {
|
||||
this._notification = this._notificationQueue.shift();
|
||||
this._notificationClickedId = this._notification.connect('done-displaying',
|
||||
Lang.bind(this, this.escapeTray));
|
||||
this._notificationBin.child = this._notification.actor;
|
||||
|
||||
this._notificationBin.opacity = 0;
|
||||
@ -1368,18 +1516,19 @@ MessageTray.prototype = {
|
||||
onCompleteScope: this
|
||||
});
|
||||
|
||||
// We auto-expand urgent notifications.
|
||||
// We auto-expand notifications with CRITICAL urgency.
|
||||
// We call _expandNotification() again on the notifications that
|
||||
// are expanded in case they were in the process of hiding and need
|
||||
// to re-expand.
|
||||
if (this._notification.urgent || this._notification.expanded)
|
||||
if (this._notification.urgency == Urgency.CRITICAL || this._notification.expanded)
|
||||
// This will overwrite the y tween, but leave the opacity
|
||||
// tween, and so the onComplete will remain as well.
|
||||
this._expandNotification(true);
|
||||
},
|
||||
|
||||
_showNotificationCompleted: function() {
|
||||
this._updateNotificationTimeout(NOTIFICATION_TIMEOUT * 1000);
|
||||
if (this._notification.urgency != Urgency.CRITICAL)
|
||||
this._updateNotificationTimeout(NOTIFICATION_TIMEOUT * 1000);
|
||||
},
|
||||
|
||||
_updateNotificationTimeout: function(timeout) {
|
||||
@ -1432,7 +1581,12 @@ MessageTray.prototype = {
|
||||
this._notificationBin.hide();
|
||||
this._notificationBin.child = null;
|
||||
this._notification.collapseCompleted();
|
||||
this._notification.disconnect(this._notificationClickedId);
|
||||
this._notificationClickedId = 0;
|
||||
let notification = this._notification;
|
||||
this._notification = null;
|
||||
if (notification.isTransient)
|
||||
notification.destroy();
|
||||
},
|
||||
|
||||
_expandNotification: function(autoExpanding) {
|
||||
@ -1459,7 +1613,7 @@ MessageTray.prototype = {
|
||||
},
|
||||
|
||||
// We use this function to grab focus when the user moves the pointer
|
||||
// to an urgent notification that was already auto-expanded.
|
||||
// to a notification with CRITICAL urgency that was already auto-expanded.
|
||||
_ensureNotificationFocused: function() {
|
||||
this._notification.grabFocus(false);
|
||||
},
|
||||
@ -1506,7 +1660,8 @@ MessageTray.prototype = {
|
||||
|
||||
_showSummaryNotification: function() {
|
||||
this._summaryNotification = this._clickedSummaryItem.source.notification;
|
||||
|
||||
this._summaryNotificationClickedId = this._summaryNotification.connect('done-displaying',
|
||||
Lang.bind(this, this.escapeTray));
|
||||
let index = this._notificationQueue.indexOf(this._summaryNotification);
|
||||
if (index != -1)
|
||||
this._notificationQueue.splice(index, 1);
|
||||
@ -1529,8 +1684,8 @@ MessageTray.prototype = {
|
||||
this._summaryNotificationBoxPointer.actor.show();
|
||||
this._adjustNotificationBoxPointerPosition();
|
||||
|
||||
this._summaryNotificationState = State.SHOWNING;
|
||||
this._summaryNotificationBoxPointer.animateAppear(Lang.bind(this, function() {
|
||||
this._summaryNotificationState = State.SHOWING;
|
||||
this._summaryNotificationBoxPointer.show(true, Lang.bind(this, function() {
|
||||
this._summaryNotificationState = State.SHOWN;
|
||||
}));
|
||||
},
|
||||
@ -1569,15 +1724,19 @@ MessageTray.prototype = {
|
||||
|
||||
this._summaryNotification.ungrabFocus();
|
||||
this._summaryNotificationState = State.HIDING;
|
||||
this._summaryNotificationBoxPointer.animateDisappear(Lang.bind(this, this._hideSummaryNotificationCompleted));
|
||||
this._summaryNotificationBoxPointer.hide(true, Lang.bind(this, this._hideSummaryNotificationCompleted));
|
||||
},
|
||||
|
||||
_hideSummaryNotificationCompleted: function() {
|
||||
this._summaryNotificationState = State.HIDDEN;
|
||||
this._summaryNotificationBoxPointer.bin.child = null;
|
||||
this._summaryNotification.collapseCompleted();
|
||||
this._summaryNotification.disconnect(this._summaryNotificationClickedId);
|
||||
this._summaryNotificationClickedId = 0;
|
||||
let summaryNotification = this._summaryNotification;
|
||||
this._summaryNotification = null;
|
||||
if (summaryNotification.isTransient && !this._reNotifyWithSummaryNotificationAfterHide)
|
||||
summaryNotification.destroy();
|
||||
if (this._reNotifyWithSummaryNotificationAfterHide) {
|
||||
this._onNotify(summaryNotification.source, summaryNotification);
|
||||
this._reNotifyWithSummaryNotificationAfterHide = false;
|
||||
|
@ -75,11 +75,11 @@ const Urgency = {
|
||||
const rewriteRules = {
|
||||
'XChat': [
|
||||
{ pattern: /^XChat: Private message from: (\S*) \(.*\)$/,
|
||||
replacement: '<$1>' },
|
||||
replacement: '<$1>' },
|
||||
{ pattern: /^XChat: New public message from: (\S*) \((.*)\)$/,
|
||||
replacement: '$2 <$1>' },
|
||||
replacement: '$2 <$1>' },
|
||||
{ pattern: /^XChat: Highlighted message from: (\S*) \((.*)\)$/,
|
||||
replacement: '$2 <$1>' }
|
||||
replacement: '$2 <$1>' }
|
||||
]
|
||||
};
|
||||
|
||||
@ -175,14 +175,43 @@ NotificationDaemon.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
_newSource: function(title, pid) {
|
||||
let source = new Source(title, pid);
|
||||
this._sources[pid] = source;
|
||||
// Returns the source associated with ndata.notification if it is set.
|
||||
// Otherwise, returns the source associated with the pid if one is
|
||||
// stored in this._sources and the notification is not transient.
|
||||
// Otherwise, creates a new source as long as pid is provided.
|
||||
//
|
||||
// Either a pid or ndata.notification is needed to retrieve or
|
||||
// create a source.
|
||||
_getSource: function(title, pid, ndata) {
|
||||
if (!pid && !(ndata && ndata.notification))
|
||||
return null;
|
||||
|
||||
source.connect('destroy', Lang.bind(this,
|
||||
function() {
|
||||
delete this._sources[pid];
|
||||
}));
|
||||
// We use notification's source for the notifications we still have
|
||||
// around that are getting replaced because we don't keep sources
|
||||
// for transient notifications in this._sources, but we still want
|
||||
// the notification associated with them to get replaced correctly.
|
||||
if (ndata && ndata.notification)
|
||||
return ndata.notification.source;
|
||||
|
||||
let isForTransientNotification = (ndata && ndata.hints['transient'] == true);
|
||||
|
||||
// We don't want to override a persistent notification
|
||||
// with a transient one from the same sender, so we
|
||||
// always create a new source object for new transient notifications
|
||||
// and never add it to this._sources .
|
||||
if (!isForTransientNotification && this._sources[pid])
|
||||
return this._sources[pid];
|
||||
|
||||
let source = new Source(title, pid);
|
||||
source.setTransient(isForTransientNotification);
|
||||
|
||||
if (!isForTransientNotification) {
|
||||
this._sources[pid] = source;
|
||||
source.connect('destroy', Lang.bind(this,
|
||||
function() {
|
||||
delete this._sources[pid];
|
||||
}));
|
||||
}
|
||||
|
||||
Main.messageTray.add(source);
|
||||
return source;
|
||||
@ -205,8 +234,6 @@ NotificationDaemon.prototype = {
|
||||
return id;
|
||||
}
|
||||
|
||||
summary = GLib.markup_escape_text(summary, -1);
|
||||
|
||||
let rewrites = rewriteRules[appName];
|
||||
if (rewrites) {
|
||||
for (let i = 0; i < rewrites.length; i++) {
|
||||
@ -236,7 +263,8 @@ NotificationDaemon.prototype = {
|
||||
|
||||
let sender = DBus.getCurrentMessageContext().sender;
|
||||
let pid = this._senderToPid[sender];
|
||||
let source = pid ? this._sources[pid] : null;
|
||||
|
||||
let source = this._getSource(appName, pid, ndata);
|
||||
|
||||
if (source) {
|
||||
this._notifyForSource(source, ndata);
|
||||
@ -257,16 +285,23 @@ NotificationDaemon.prototype = {
|
||||
if (!ndata)
|
||||
return;
|
||||
|
||||
this._senderToPid[sender] = pid;
|
||||
source = this._sources[pid];
|
||||
|
||||
if (!source)
|
||||
source = this._newSource(appName, pid);
|
||||
source.connect('destroy', Lang.bind(this,
|
||||
function() {
|
||||
delete this._senderToPid[sender];
|
||||
}));
|
||||
source = this._getSource(appName, pid, ndata);
|
||||
|
||||
// We only store sender-pid entries for persistent sources.
|
||||
// Removing the entries once the source is destroyed
|
||||
// would result in the entries associated with transient
|
||||
// sources removed once the notification is shown anyway.
|
||||
// However, keeping these pairs would mean that we would
|
||||
// possibly remove an entry associated with a persistent
|
||||
// source when a transient source for the same sender is
|
||||
// distroyed.
|
||||
if (!source.isTransient) {
|
||||
this._senderToPid[sender] = pid;
|
||||
source.connect('destroy', Lang.bind(this,
|
||||
function() {
|
||||
delete this._senderToPid[sender];
|
||||
}));
|
||||
}
|
||||
this._notifyForSource(source, ndata);
|
||||
}));
|
||||
|
||||
@ -281,7 +316,9 @@ NotificationDaemon.prototype = {
|
||||
let iconActor = this._iconForNotificationData(icon, hints, source.ICON_SIZE);
|
||||
|
||||
if (notification == null) {
|
||||
notification = new MessageTray.Notification(source, summary, body, { icon: iconActor });
|
||||
notification = new MessageTray.Notification(source, summary, body,
|
||||
{ icon: iconActor,
|
||||
bannerMarkup: true });
|
||||
ndata.notification = notification;
|
||||
notification.connect('clicked', Lang.bind(this,
|
||||
function(n) {
|
||||
@ -291,9 +328,13 @@ NotificationDaemon.prototype = {
|
||||
function(n) {
|
||||
delete this._notifications[id];
|
||||
}));
|
||||
notification.connect('action-invoked', Lang.bind(this, this._actionInvoked, source, id));
|
||||
notification.connect('action-invoked', Lang.bind(this,
|
||||
function(n, actionId) {
|
||||
this._emitActionInvoked(id, actionId);
|
||||
}));
|
||||
} else {
|
||||
notification.update(summary, body, { icon: iconActor,
|
||||
bannerMarkup: true,
|
||||
clear: true });
|
||||
}
|
||||
|
||||
@ -302,8 +343,21 @@ NotificationDaemon.prototype = {
|
||||
for (let i = 0; i < actions.length - 1; i += 2)
|
||||
notification.addButton(actions[i], actions[i + 1]);
|
||||
}
|
||||
|
||||
notification.setUrgent(hints.urgency == Urgency.CRITICAL);
|
||||
switch (hints.urgency) {
|
||||
case Urgency.LOW:
|
||||
notification.setUrgency(MessageTray.Urgency.LOW);
|
||||
break;
|
||||
case Urgency.NORMAL:
|
||||
notification.setUrgency(MessageTray.Urgency.NORMAL);
|
||||
break;
|
||||
case Urgency.CRITICAL:
|
||||
notification.setUrgency(MessageTray.Urgency.CRITICAL);
|
||||
break;
|
||||
}
|
||||
notification.setResident(hints.resident == true);
|
||||
// 'transient' is a reserved keyword in JS, so we have to retrieve the value
|
||||
// of the 'transient' hint with hints['transient'] rather than hints.transient
|
||||
notification.setTransient(hints['transient'] == true);
|
||||
|
||||
let sourceIconActor = source.useNotificationIcon ? this._iconForNotificationData(icon, hints, source.ICON_SIZE) : null;
|
||||
source.notify(notification, sourceIconActor);
|
||||
@ -351,17 +405,13 @@ NotificationDaemon.prototype = {
|
||||
for (let id in this._sources) {
|
||||
let source = this._sources[id];
|
||||
if (source.app == tracker.focus_app) {
|
||||
source.activated();
|
||||
if (source.notification && !source.notification.resident)
|
||||
source.notification.destroy();
|
||||
return;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_actionInvoked: function(notification, action, source, id) {
|
||||
source.activated();
|
||||
this._emitActionInvoked(id, action);
|
||||
},
|
||||
|
||||
_emitNotificationClosed: function(id, reason) {
|
||||
DBus.session.emit_signal('/org/freedesktop/Notifications',
|
||||
'org.freedesktop.Notifications',
|
||||
@ -377,9 +427,7 @@ NotificationDaemon.prototype = {
|
||||
},
|
||||
|
||||
_onTrayIconAdded: function(o, icon) {
|
||||
let source = this._sources[icon.pid];
|
||||
if (!source)
|
||||
source = this._newSource(icon.title || icon.wm_class || _("Unknown"), icon.pid);
|
||||
let source = this._getSource(icon.title || icon.wm_class || _("Unknown"), icon.pid, null);
|
||||
source.setTrayIcon(icon);
|
||||
},
|
||||
|
||||
@ -420,13 +468,16 @@ Source.prototype = {
|
||||
},
|
||||
|
||||
_setApp: function() {
|
||||
if (this.app)
|
||||
return;
|
||||
|
||||
this.app = Shell.WindowTracker.get_default().get_app_from_pid(this._pid);
|
||||
if (!this.app)
|
||||
return;
|
||||
|
||||
// Only override the icon if we were previously using
|
||||
// notification-based icons (ie, not a trayicon)
|
||||
if (this.useNotificationIcon) {
|
||||
// notification-based icons (ie, not a trayicon) or if it was unset before
|
||||
if (!this._isTrayIcon) {
|
||||
this.useNotificationIcon = false;
|
||||
this._setSummaryIcon(this.app.create_icon_texture (this.ICON_SIZE));
|
||||
}
|
||||
@ -439,12 +490,10 @@ Source.prototype = {
|
||||
},
|
||||
|
||||
_notificationClicked: function(notification) {
|
||||
notification.destroy();
|
||||
this.openApp();
|
||||
this.activated();
|
||||
},
|
||||
|
||||
activated: function() {
|
||||
_notificationRemoved: function() {
|
||||
if (!this._isTrayIcon)
|
||||
this.destroy();
|
||||
},
|
||||
|
@ -6,11 +6,14 @@ const Mainloop = imports.mainloop;
|
||||
const Signals = imports.signals;
|
||||
const Lang = imports.lang;
|
||||
const St = imports.gi.St;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
const Gdk = imports.gi.Gdk;
|
||||
|
||||
const AppDisplay = imports.ui.appDisplay;
|
||||
const Dash = imports.ui.dash;
|
||||
const DND = imports.ui.dnd;
|
||||
const DocDisplay = imports.ui.docDisplay;
|
||||
const GenericDisplay = imports.ui.genericDisplay;
|
||||
const Lightbox = imports.ui.lightbox;
|
||||
@ -28,7 +31,8 @@ const ANIMATION_TIME = 0.25;
|
||||
// We split the screen vertically between the dash and the view selector.
|
||||
const DASH_SPLIT_FRACTION = 0.1;
|
||||
|
||||
const SHELL_INFO_HIDE_TIMEOUT = 10;
|
||||
|
||||
const DND_WINDOW_SWITCH_TIMEOUT = 1250;
|
||||
|
||||
function Source() {
|
||||
this._init();
|
||||
@ -44,8 +48,8 @@ Source.prototype = {
|
||||
},
|
||||
|
||||
createNotificationIcon: function() {
|
||||
return new St.Icon({ icon_name: 'info',
|
||||
icon_type: St.IconType.FULLCOLOR,
|
||||
return new St.Icon({ icon_name: 'dialog-information',
|
||||
icon_type: St.IconType.SYMBOLIC,
|
||||
icon_size: this.ICON_SIZE });
|
||||
},
|
||||
|
||||
@ -61,14 +65,10 @@ function ShellInfo() {
|
||||
ShellInfo.prototype = {
|
||||
_init: function() {
|
||||
this._source = null;
|
||||
this._timeoutId = 0;
|
||||
this._undoCallback = null;
|
||||
},
|
||||
|
||||
_onUndoClicked: function() {
|
||||
Mainloop.source_remove(this._timeoutId);
|
||||
this._timeoutId = 0;
|
||||
|
||||
if (this._undoCallback)
|
||||
this._undoCallback();
|
||||
this._undoCallback = null;
|
||||
@ -77,20 +77,7 @@ ShellInfo.prototype = {
|
||||
this._source.destroy();
|
||||
},
|
||||
|
||||
_onTimeout: function() {
|
||||
this._timeoutId = 0;
|
||||
if (this._source)
|
||||
this._source.destroy();
|
||||
return false;
|
||||
},
|
||||
|
||||
setMessage: function(text, undoCallback, undoLabel) {
|
||||
if (this._timeoutId)
|
||||
Mainloop.source_remove(this._timeoutId);
|
||||
|
||||
this._timeoutId = Mainloop.timeout_add_seconds(SHELL_INFO_HIDE_TIMEOUT,
|
||||
Lang.bind(this, this._onTimeout));
|
||||
|
||||
if (this._source == null) {
|
||||
this._source = new Source();
|
||||
this._source.connect('destroy', Lang.bind(this,
|
||||
@ -106,6 +93,8 @@ ShellInfo.prototype = {
|
||||
else
|
||||
notification.update(text, null, { clear: true });
|
||||
|
||||
notification.setTransient(true);
|
||||
|
||||
this._undoCallback = undoCallback;
|
||||
if (undoCallback) {
|
||||
notification.addButton('system-undo',
|
||||
@ -124,15 +113,15 @@ function Overview() {
|
||||
|
||||
Overview.prototype = {
|
||||
_init : function() {
|
||||
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._desktopFade = new St.Bin();
|
||||
global.overlay_group.add_actor(this._desktopFade);
|
||||
|
||||
this._spacing = 0;
|
||||
|
||||
this._group = new St.Group({ name: 'overview' });
|
||||
@ -151,7 +140,10 @@ Overview.prototype = {
|
||||
|
||||
this._workspacesDisplay = null;
|
||||
|
||||
this.visible = false;
|
||||
this.visible = false; // animating to overview, in overview, animating out
|
||||
this._shown = false; // show() and not hide()
|
||||
this._shownTemporarily = false; // showTemporarily() and not hideTemporarily()
|
||||
this._modal = false; // have a modal grab
|
||||
this.animationInProgress = false;
|
||||
this._hideInProgress = false;
|
||||
|
||||
@ -171,17 +163,16 @@ Overview.prototype = {
|
||||
this._group.add_actor(this.viewSelector.actor);
|
||||
|
||||
this._workspacesDisplay = new WorkspacesView.WorkspacesDisplay();
|
||||
this.viewSelector.addViewTab("Windows", this._workspacesDisplay.actor);
|
||||
this.viewSelector.addViewTab(_("Windows"), this._workspacesDisplay.actor);
|
||||
|
||||
let appView = new AppDisplay.AllAppDisplay();
|
||||
this.viewSelector.addViewTab("Applications", appView.actor);
|
||||
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();
|
||||
@ -191,9 +182,72 @@ Overview.prototype = {
|
||||
|
||||
this._coverPane.lower_bottom();
|
||||
|
||||
// XDND
|
||||
this._dragMonitor = {
|
||||
dragMotion: Lang.bind(this, this._onDragMotion)
|
||||
};
|
||||
|
||||
Main.xdndHandler.connect('drag-begin', Lang.bind(this, this._onDragBegin));
|
||||
Main.xdndHandler.connect('drag-end', Lang.bind(this, this._onDragEnd));
|
||||
|
||||
this._windowSwitchTimeoutId = 0;
|
||||
this._windowSwitchTimestamp = 0;
|
||||
this._lastActiveWorkspaceIndex = -1;
|
||||
this._needsFakePointerEvent = false;
|
||||
|
||||
this.workspaces = null;
|
||||
},
|
||||
|
||||
_onDragBegin: function() {
|
||||
DND.addDragMonitor(this._dragMonitor);
|
||||
// Remember the workspace we started from
|
||||
this._lastActiveWorkspaceIndex = global.screen.get_active_workspace_index();
|
||||
},
|
||||
|
||||
_onDragEnd: function(time) {
|
||||
// In case the drag was canceled while in the overview
|
||||
// we have to go back to where we started and hide
|
||||
// the overview
|
||||
if (this._shownTemporarily) {
|
||||
global.screen.get_workspace_by_index(this._lastActiveWorkspaceIndex).activate(time);
|
||||
this.hideTemporarily();
|
||||
}
|
||||
|
||||
DND.removeMonitor(this._dragMonitor);
|
||||
},
|
||||
|
||||
_fakePointerEvent: function() {
|
||||
let display = Gdk.Display.get_default();
|
||||
let deviceManager = display.get_device_manager();
|
||||
let pointer = deviceManager.get_client_pointer();
|
||||
let [screen, pointerX, pointerY] = pointer.get_position();
|
||||
|
||||
pointer.warp(screen, pointerX, pointerY);
|
||||
},
|
||||
|
||||
_onDragMotion: function(dragEvent) {
|
||||
if (this._windowSwitchTimeoutId != 0) {
|
||||
Mainloop.source_remove(this._windowSwitchTimeoutId);
|
||||
this._windowSwitchTimeoutId = 0;
|
||||
this._needsFakePointerEvent = false;
|
||||
}
|
||||
|
||||
if (dragEvent.targetActor &&
|
||||
dragEvent.targetActor._delegate &&
|
||||
dragEvent.targetActor._delegate.metaWindow) {
|
||||
this._windowSwitchTimestamp = global.get_current_time();
|
||||
this._windowSwitchTimeoutId = Mainloop.timeout_add(DND_WINDOW_SWITCH_TIMEOUT,
|
||||
Lang.bind(this, function() {
|
||||
this._needsFakePointerEvent = true;
|
||||
Main.activateWindow(dragEvent.targetActor._delegate.metaWindow,
|
||||
this._windowSwitchTimestamp);
|
||||
this.hideTemporarily();
|
||||
}));
|
||||
}
|
||||
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
},
|
||||
|
||||
_getDesktopClone: function() {
|
||||
let windows = global.get_window_actors().filter(function(w) {
|
||||
return w.meta_window.get_window_type() == Meta.WindowType.DESKTOP;
|
||||
@ -284,11 +338,23 @@ Overview.prototype = {
|
||||
return [this.workspaces.actor.x, this.workspaces.actor.y];
|
||||
},
|
||||
|
||||
// show:
|
||||
//
|
||||
// Animates the overview visible and grabs mouse and keyboard input
|
||||
show : function() {
|
||||
if (this.visible)
|
||||
if (this._shown)
|
||||
return;
|
||||
// Do this manually instead of using _syncInputMode, to handle failure
|
||||
if (!Main.pushModal(this.viewSelector.actor))
|
||||
return;
|
||||
this._modal = true;
|
||||
this._animateVisible();
|
||||
this._shown = true;
|
||||
},
|
||||
|
||||
_animateVisible: function() {
|
||||
if (this.visible || this.animationInProgress)
|
||||
return;
|
||||
|
||||
this.visible = true;
|
||||
this.animationInProgress = true;
|
||||
@ -354,8 +420,102 @@ Overview.prototype = {
|
||||
this.emit('showing');
|
||||
},
|
||||
|
||||
// showTemporarily:
|
||||
//
|
||||
// Animates the overview visible without grabbing mouse and keyboard input;
|
||||
// if show() has already been called, this has no immediate effect, but
|
||||
// will result in the overview not being hidden until hideTemporarily() is
|
||||
// called.
|
||||
showTemporarily: function() {
|
||||
if (this._shownTemporarily)
|
||||
return;
|
||||
|
||||
this._syncInputMode();
|
||||
this._animateVisible();
|
||||
this._shownTemporarily = true;
|
||||
},
|
||||
|
||||
// hide:
|
||||
//
|
||||
// Reverses the effect of show()
|
||||
hide: function() {
|
||||
if (!this.visible || this._hideInProgress)
|
||||
if (!this._shown)
|
||||
return;
|
||||
|
||||
if (!this._shownTemporarily)
|
||||
this._animateNotVisible();
|
||||
|
||||
this._shown = false;
|
||||
this._syncInputMode();
|
||||
},
|
||||
|
||||
// hideTemporarily:
|
||||
//
|
||||
// Reverses the effect of showTemporarily()
|
||||
hideTemporarily: function() {
|
||||
if (!this._shownTemporarily)
|
||||
return;
|
||||
|
||||
if (!this._shown)
|
||||
this._animateNotVisible();
|
||||
|
||||
this._shownTemporarily = false;
|
||||
this._syncInputMode();
|
||||
},
|
||||
|
||||
toggle: function() {
|
||||
if (this._shown)
|
||||
this.hide();
|
||||
else
|
||||
this.show();
|
||||
},
|
||||
|
||||
/**
|
||||
* getWorkspacesForWindow:
|
||||
* @metaWindow: A #MetaWindow
|
||||
*
|
||||
* Returns the Workspaces object associated with the given window.
|
||||
* This method is not be accessible if the overview is not open
|
||||
* and will return %null.
|
||||
*/
|
||||
getWorkspacesForWindow: function(metaWindow) {
|
||||
return this.workspaces;
|
||||
},
|
||||
|
||||
//// Private methods ////
|
||||
|
||||
_syncInputMode: function() {
|
||||
// We delay input mode changes during animation so that when removing the
|
||||
// overview we don't have a problem with the release of a press/release
|
||||
// going to an application.
|
||||
if (this.animationInProgress)
|
||||
return;
|
||||
|
||||
if (this._shown) {
|
||||
if (!this._modal) {
|
||||
if (Main.pushModal(this._dash.actor))
|
||||
this._modal = true;
|
||||
else
|
||||
this.hide();
|
||||
}
|
||||
} else if (this._shownTemporarily) {
|
||||
if (this._modal) {
|
||||
Main.popModal(this._dash.actor);
|
||||
this._modal = false;
|
||||
}
|
||||
global.stage_input_mode = Shell.StageInputMode.FULLSCREEN;
|
||||
} else {
|
||||
if (this._modal) {
|
||||
Main.popModal(this._dash.actor);
|
||||
this._modal = false;
|
||||
}
|
||||
else if (global.stage_input_mode == Shell.StageInputMode.FULLSCREEN)
|
||||
global.stage_input_mode = Shell.StageInputMode.NORMAL;
|
||||
}
|
||||
},
|
||||
|
||||
_animateNotVisible: function() {
|
||||
if (!this.visible || this.animationInProgress)
|
||||
return;
|
||||
|
||||
this.animationInProgress = true;
|
||||
@ -399,36 +559,17 @@ Overview.prototype = {
|
||||
this.emit('hiding');
|
||||
},
|
||||
|
||||
toggle: function() {
|
||||
if (this.visible)
|
||||
this.hide();
|
||||
else
|
||||
this.show();
|
||||
},
|
||||
|
||||
/**
|
||||
* getWorkspacesForWindow:
|
||||
* @metaWindow: A #MetaWindow
|
||||
*
|
||||
* Returns the Workspaces object associated with the given window.
|
||||
* This method is not be accessible if the overview is not open
|
||||
* and will return %null.
|
||||
*/
|
||||
getWorkspacesForWindow: function(metaWindow) {
|
||||
return this.workspaces;
|
||||
},
|
||||
|
||||
//// Private methods ////
|
||||
|
||||
_showDone: function() {
|
||||
if (this._hideInProgress)
|
||||
return;
|
||||
|
||||
this.animationInProgress = false;
|
||||
this._desktopFade.hide();
|
||||
this._coverPane.lower_bottom();
|
||||
|
||||
this.emit('shown');
|
||||
// Handle any calls to hide* while we were showing
|
||||
if (!this._shown && !this._shownTemporarily)
|
||||
this._animateNotVisible();
|
||||
|
||||
this._syncInputMode();
|
||||
},
|
||||
|
||||
_hideDone: function() {
|
||||
@ -451,8 +592,18 @@ Overview.prototype = {
|
||||
|
||||
this._coverPane.lower_bottom();
|
||||
|
||||
Main.popModal(this.viewSelector.actor);
|
||||
this.emit('hidden');
|
||||
// Handle any calls to show* while we were hiding
|
||||
if (this._shown || this._shownTemporarily)
|
||||
this._animateVisible();
|
||||
|
||||
this._syncInputMode();
|
||||
|
||||
// Fake a pointer event if requested
|
||||
if (this._needsFakePointerEvent) {
|
||||
this._fakePointerEvent();
|
||||
this._needsFakePointerEvent = false;
|
||||
}
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(Overview.prototype);
|
||||
|
181
js/ui/panel.js
181
js/ui/panel.js
@ -12,6 +12,7 @@ const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Calendar = imports.ui.calendar;
|
||||
const Config = imports.misc.config;
|
||||
const Overview = imports.ui.overview;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
@ -25,6 +26,8 @@ const PANEL_ICON_SIZE = 24;
|
||||
|
||||
const HOT_CORNER_ACTIVATION_TIMEOUT = 0.5;
|
||||
|
||||
const BUTTON_DND_ACTIVATION_TIMEOUT = 250;
|
||||
|
||||
const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
|
||||
const SPINNER_UPDATE_TIMEOUT = 130;
|
||||
const SPINNER_SPEED = 0.02;
|
||||
@ -36,8 +39,13 @@ const STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION = {
|
||||
'battery': imports.ui.status.power.Indicator
|
||||
};
|
||||
|
||||
const CLOCK_FORMAT_KEY = 'format';
|
||||
const CLOCK_CUSTOM_FORMAT_KEY = 'custom-format';
|
||||
if (Config.HAVE_BLUETOOTH)
|
||||
STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['bluetooth'] = imports.ui.status.bluetooth.Indicator;
|
||||
|
||||
// in org.gnome.desktop.interface
|
||||
const CLOCK_FORMAT_KEY = 'clock-format';
|
||||
|
||||
// in org.gnome.shell.clock
|
||||
const CLOCK_SHOW_DATE_KEY = 'show-date';
|
||||
const CLOCK_SHOW_SECONDS_KEY = 'show-seconds';
|
||||
|
||||
@ -488,69 +496,53 @@ function ClockButton() {
|
||||
}
|
||||
|
||||
ClockButton.prototype = {
|
||||
__proto__: PanelMenu.Button.prototype,
|
||||
|
||||
_init: function() {
|
||||
PanelMenu.Button.prototype._init.call(this, St.Align.START);
|
||||
this.menu.addAction(_("Preferences"), Lang.bind(this, this._onPrefs));
|
||||
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._toggleCalendar));
|
||||
|
||||
this._clock = new St.Label();
|
||||
this.actor.set_child(this._clock);
|
||||
|
||||
this._calendarPopup = null;
|
||||
|
||||
this._desktopSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
|
||||
this._clockSettings = new Gio.Settings({ schema: 'org.gnome.shell.clock' });
|
||||
|
||||
this._desktopSettings.connect('changed', Lang.bind(this, this._updateClock));
|
||||
this._clockSettings.connect('changed', Lang.bind(this, this._updateClock));
|
||||
|
||||
// Start the clock
|
||||
this._updateClock();
|
||||
},
|
||||
|
||||
_onButtonPress: function(actor, event) {
|
||||
let button = event.get_button();
|
||||
if (button == 3 &&
|
||||
(!this._calendarPopup || !this._calendarPopup.isOpen))
|
||||
this.menu.toggle();
|
||||
else
|
||||
this._toggleCalendar();
|
||||
},
|
||||
|
||||
closeCalendar: function() {
|
||||
if (!this._calendarPopup || !this._calendarPopup.isOpen)
|
||||
return;
|
||||
|
||||
this._calendarPopup.hide();
|
||||
|
||||
this.menu.isOpen = false;
|
||||
this.actor.remove_style_pseudo_class('pressed');
|
||||
},
|
||||
|
||||
openCalendar: function() {
|
||||
this._calendarPopup.show();
|
||||
|
||||
// simulate an open menu, so it won't appear beneath the calendar
|
||||
this.menu.isOpen = true;
|
||||
this.actor.add_style_pseudo_class('pressed');
|
||||
},
|
||||
|
||||
_onPrefs: function() {
|
||||
let args = ['gnome-shell-clock-preferences'];
|
||||
let p = new Shell.Process({ args: args });
|
||||
|
||||
p.run();
|
||||
},
|
||||
|
||||
_toggleCalendar: function() {
|
||||
if (this._calendarPopup == null) {
|
||||
this._calendarPopup = new CalendarPopup();
|
||||
this._calendarPopup.actor.hide();
|
||||
}
|
||||
|
||||
if (this.menu.isOpen && !this._calendarPopup.isOpen) {
|
||||
this.menu.close();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this._calendarPopup.isOpen)
|
||||
this.openCalendar();
|
||||
else
|
||||
@ -558,23 +550,13 @@ ClockButton.prototype = {
|
||||
},
|
||||
|
||||
_updateClock: function() {
|
||||
let format = this._clockSettings.get_string(CLOCK_FORMAT_KEY);
|
||||
let format = this._desktopSettings.get_string(CLOCK_FORMAT_KEY);
|
||||
let showDate = this._clockSettings.get_boolean(CLOCK_SHOW_DATE_KEY);
|
||||
let showSeconds = this._clockSettings.get_boolean(CLOCK_SHOW_SECONDS_KEY);
|
||||
|
||||
let clockFormat;
|
||||
switch (format) {
|
||||
case 'unix':
|
||||
// force updates every second
|
||||
showSeconds = true;
|
||||
clockFormat = '%s';
|
||||
break;
|
||||
case 'custom':
|
||||
// force updates every second
|
||||
showSeconds = true;
|
||||
clockFormat = this._clockSettings.get_string(CLOCK_CUSTOM_FORMAT_KEY);
|
||||
break;
|
||||
case '24-hour':
|
||||
case '24h':
|
||||
if (showDate)
|
||||
/* Translators: This is the time format with date used
|
||||
in 24-hour mode. */
|
||||
@ -586,7 +568,7 @@ ClockButton.prototype = {
|
||||
clockFormat = showSeconds ? _("%a %R:%S")
|
||||
: _("%a %R");
|
||||
break;
|
||||
case '12-hour':
|
||||
case '12h':
|
||||
default:
|
||||
if (showDate)
|
||||
/* Translators: This is a time format with date used
|
||||
@ -748,7 +730,20 @@ Panel.prototype = {
|
||||
reactive: true,
|
||||
can_focus: true });
|
||||
this.button.set_child(label);
|
||||
|
||||
this.button._delegate = this.button;
|
||||
this.button._xdndTimeOut = 0;
|
||||
this.button.handleDragOver = Lang.bind(this,
|
||||
function(source, actor, x, y, time) {
|
||||
if (source == Main.xdndHandler) {
|
||||
if (this.button._xdndTimeOut != 0)
|
||||
Mainloop.source_remove(this.button._xdndTimeOut);
|
||||
this.button._xdndTimeOut = Mainloop.timeout_add(BUTTON_DND_ACTIVATION_TIMEOUT,
|
||||
Lang.bind(this,
|
||||
function() {
|
||||
this._xdndShowOverview(actor);
|
||||
}));
|
||||
}
|
||||
});
|
||||
this._leftBox.add(this.button);
|
||||
|
||||
// We use this flag to mark the case where the user has entered the
|
||||
@ -786,6 +781,18 @@ Panel.prototype = {
|
||||
this._hotCorner.connect('leave-event',
|
||||
Lang.bind(this, this._onHotCornerLeft));
|
||||
|
||||
this._hotCorner._delegate = this._hotCorner;
|
||||
this._hotCorner.handleDragOver = Lang.bind(this,
|
||||
function(source, actor, x, y, time) {
|
||||
if (source == Main.xdndHandler) {
|
||||
if(!Main.overview.visible && !Main.overview.animationInProgress) {
|
||||
this.rippleAnimation();
|
||||
Main.overview.showTemporarily();
|
||||
Main.overview.beginItemDrag(actor);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this._boxContainer.add_actor(this._hotCornerEnvirons);
|
||||
this._boxContainer.add_actor(this._hotCorner);
|
||||
|
||||
@ -799,8 +806,6 @@ Panel.prototype = {
|
||||
this._clockButton = new ClockButton();
|
||||
this._centerBox.add(this._clockButton.actor, { y_fill: true });
|
||||
|
||||
this._menus.addMenu(this._clockButton.menu);
|
||||
|
||||
/* right */
|
||||
|
||||
// System status applets live in statusBox, while legacy tray icons
|
||||
@ -815,25 +820,9 @@ Panel.prototype = {
|
||||
this._rightBox.add(trayBox);
|
||||
this._rightBox.add(statusBox);
|
||||
|
||||
for (let i = 0; i < STANDARD_TRAY_ICON_ORDER.length; i++) {
|
||||
let role = STANDARD_TRAY_ICON_ORDER[i];
|
||||
let constructor = STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION[role];
|
||||
if (!constructor) {
|
||||
// This icon is not implemented (this is a bug)
|
||||
continue;
|
||||
}
|
||||
let indicator = new constructor();
|
||||
statusBox.add(indicator.actor);
|
||||
this._menus.addMenu(indicator.menu);
|
||||
}
|
||||
|
||||
Main.statusIconDispatcher.connect('status-icon-added', Lang.bind(this, this._onTrayIconAdded));
|
||||
Main.statusIconDispatcher.connect('status-icon-removed', Lang.bind(this, this._onTrayIconRemoved));
|
||||
|
||||
this._statusmenu = new StatusMenu.StatusMenuButton();
|
||||
this._menus.addMenu(this._statusmenu.menu);
|
||||
this._rightBox.add(this._statusmenu.actor);
|
||||
|
||||
// TODO: decide what to do with the rest of the panel in the Overview mode (make it fade-out, become non-reactive, etc.)
|
||||
// We get into the Overview mode on button-press-event as opposed to button-release-event because eventually we'll probably
|
||||
// have the Overview act like a menu that allows the user to release the mouse on the activity the user wants
|
||||
@ -859,6 +848,43 @@ Panel.prototype = {
|
||||
Main.chrome.addActor(this.actor, { visibleInOverview: true });
|
||||
},
|
||||
|
||||
_xdndShowOverview: function (actor) {
|
||||
let [x, y, mask] = global.get_pointer();
|
||||
let pickedActor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y);
|
||||
|
||||
if (pickedActor != this.button) {
|
||||
Mainloop.source_remove(this.button._xdndTimeOut);
|
||||
this.button._xdndTimeOut = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if(!Main.overview.visible && !Main.overview.animationInProgress) {
|
||||
Main.overview.showTemporarily();
|
||||
Main.overview.beginItemDrag(actor);
|
||||
}
|
||||
|
||||
Mainloop.source_remove(this.button._xdndTimeOut);
|
||||
this.button._xdndTimeOut = 0;
|
||||
},
|
||||
|
||||
startStatusArea: function() {
|
||||
for (let i = 0; i < STANDARD_TRAY_ICON_ORDER.length; i++) {
|
||||
let role = STANDARD_TRAY_ICON_ORDER[i];
|
||||
let constructor = STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION[role];
|
||||
if (!constructor) {
|
||||
// This icon is not implemented (this is a bug)
|
||||
continue;
|
||||
}
|
||||
let indicator = new constructor();
|
||||
this._statusBox.add(indicator.actor);
|
||||
this._menus.addMenu(indicator.menu);
|
||||
}
|
||||
|
||||
this._statusmenu = new StatusMenu.StatusMenuButton();
|
||||
this._menus.addMenu(this._statusmenu.menu);
|
||||
this._rightBox.add(this._statusmenu.actor);
|
||||
},
|
||||
|
||||
hideCalendar: function() {
|
||||
this._clockButton.closeCalendar();
|
||||
},
|
||||
@ -935,6 +961,17 @@ Panel.prototype = {
|
||||
Main.uiGroup.add_actor(ripple);
|
||||
},
|
||||
|
||||
rippleAnimation: function() {
|
||||
// Show three concentric ripples expanding outwards; the exact
|
||||
// parameters were found by trial and error, so don't look
|
||||
// for them to make perfect sense mathematically
|
||||
|
||||
// delay time scale opacity => scale opacity
|
||||
this._addRipple(0.0, 0.83, 0.25, 1.0, 1.5, 0.0);
|
||||
this._addRipple(0.05, 1.0, 0.0, 0.7, 1.25, 0.0);
|
||||
this._addRipple(0.35, 1.0, 0.0, 0.3, 1, 0.0);
|
||||
},
|
||||
|
||||
_onHotCornerEntered : function() {
|
||||
if (this._menus.grabbed)
|
||||
return false;
|
||||
@ -943,14 +980,7 @@ Panel.prototype = {
|
||||
if (!Main.overview.animationInProgress) {
|
||||
this._hotCornerActivationTime = Date.now() / 1000;
|
||||
|
||||
// Show three concentric ripples expanding outwards; the exact
|
||||
// parameters were found by trial and error, so don't look
|
||||
// for them to make perfect sense mathematically
|
||||
|
||||
// delay time scale opacity => scale opacity
|
||||
this._addRipple(0.0, 0.83, 0.25, 1.0, 1.5, 0.0);
|
||||
this._addRipple(0.05, 1.0, 0.0, 0.7, 1.25, 0.0);
|
||||
this._addRipple(0.35, 1.0, 0.0, 0.3, 1, 0.0);
|
||||
this.rippleAnimation();
|
||||
Main.overview.toggle();
|
||||
}
|
||||
}
|
||||
@ -997,6 +1027,9 @@ function CalendarPopup() {
|
||||
CalendarPopup.prototype = {
|
||||
_init: function() {
|
||||
let panelActor = Main.panel.actor;
|
||||
let alignConstraint = new Clutter.AlignConstraint({ source: panelActor,
|
||||
align_axis: Clutter.AlignAxis.X_AXIS,
|
||||
factor: 0.5 });
|
||||
|
||||
this.actor = new St.Bin({ name: 'calendarPopup' });
|
||||
|
||||
@ -1008,7 +1041,7 @@ CalendarPopup.prototype = {
|
||||
Main.chrome.addActor(this.actor, { visibleInOverview: true,
|
||||
affectsStruts: false });
|
||||
this.actor.y = (panelActor.y + panelActor.height - this.actor.height);
|
||||
this.calendar.actor.connect('notify::width', Lang.bind(this, this._centerPopup));
|
||||
this.actor.add_constraint(alignConstraint);
|
||||
},
|
||||
|
||||
show: function() {
|
||||
@ -1021,7 +1054,6 @@ CalendarPopup.prototype = {
|
||||
// Reset the calendar to today's date
|
||||
this.calendar.setDate(new Date());
|
||||
|
||||
this._centerPopup();
|
||||
this.actor.lower(panelActor);
|
||||
this.actor.show();
|
||||
Tweener.addTween(this.actor,
|
||||
@ -1045,10 +1077,5 @@ CalendarPopup.prototype = {
|
||||
onComplete: function() { this.actor.hide(); },
|
||||
onCompleteScope: this
|
||||
});
|
||||
},
|
||||
|
||||
_centerPopup: function() {
|
||||
let panelActor = Main.panel.actor;
|
||||
this.actor.x = Math.round(panelActor.x + (panelActor.width - this.actor.width) / 2);
|
||||
}
|
||||
};
|
||||
|
@ -47,12 +47,9 @@ Button.prototype = {
|
||||
},
|
||||
|
||||
_onOpenStateChanged: function(menu, open) {
|
||||
if (open) {
|
||||
if (open)
|
||||
this.actor.add_style_pseudo_class('pressed');
|
||||
let focus = global.stage.get_key_focus();
|
||||
if (!focus || (focus != this.actor && !menu.contains(focus)))
|
||||
this.actor.grab_key_focus();
|
||||
} else
|
||||
else
|
||||
this.actor.remove_style_pseudo_class('pressed');
|
||||
}
|
||||
};
|
||||
|
@ -87,7 +87,7 @@ PopupBaseMenuItem.prototype = {
|
||||
},
|
||||
|
||||
_onButtonReleaseEvent: function (actor, event) {
|
||||
this.emit('activate', event);
|
||||
this.activate(event);
|
||||
return true;
|
||||
},
|
||||
|
||||
@ -95,7 +95,7 @@ PopupBaseMenuItem.prototype = {
|
||||
let symbol = event.get_key_symbol();
|
||||
|
||||
if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) {
|
||||
this.emit('activate', event);
|
||||
this.activate(event);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -132,29 +132,16 @@ PopupBaseMenuItem.prototype = {
|
||||
this.emit('destroy');
|
||||
},
|
||||
|
||||
// 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 });
|
||||
// adds an actor to the menu item; @params can contain %span
|
||||
// (column span; defaults to 1, -1 means "all the remaining width"),
|
||||
// %expand (defaults to #false), and %align (defaults to
|
||||
// #St.Align.START)
|
||||
addActor: function(child, params) {
|
||||
params = Params.parse(params, { span: 1,
|
||||
expand: false,
|
||||
align: St.Align.START });
|
||||
params.actor = child;
|
||||
this._children.push(params);
|
||||
this.actor.connect('destroy', Lang.bind(this, function () { this._removeChild(child); }));
|
||||
this.actor.add_actor(child);
|
||||
},
|
||||
@ -272,39 +259,58 @@ PopupBaseMenuItem.prototype = {
|
||||
for (let i = 0, col = 0; i < this._children.length; i++) {
|
||||
let child = this._children[i];
|
||||
let childBox = new Clutter.ActorBox();
|
||||
childBox.x1 = x;
|
||||
|
||||
let [minWidth, naturalWidth] = child.actor.get_preferred_width(-1);
|
||||
let availWidth, extraWidth;
|
||||
if (this._columnWidths) {
|
||||
if (child.span == -1)
|
||||
childBox.x2 = box.x2;
|
||||
availWidth = box.x2 - x;
|
||||
else {
|
||||
childBox.x2 = x;
|
||||
availWidth = 0;
|
||||
for (let j = 0; j < child.span; j++)
|
||||
childBox.x2 += this._columnWidths[col++];
|
||||
availWidth += this._columnWidths[col++];
|
||||
}
|
||||
extraWidth = availWidth - naturalWidth;
|
||||
} else {
|
||||
let [min, natural] = child.actor.get_preferred_width(-1);
|
||||
childBox.x2 = x + natural;
|
||||
availWidth = naturalWidth;
|
||||
extraWidth = 0;
|
||||
}
|
||||
let [min, natural] = child.actor.get_preferred_height(-1);
|
||||
childBox.y1 = Math.round(box.y1 + (height - natural) / 2);
|
||||
childBox.y2 = childBox.y1 + natural;
|
||||
|
||||
if (child.expand) {
|
||||
childBox.x1 = x;
|
||||
childBox.x2 = x + availWidth;
|
||||
} else if (child.align === St.Align.CENTER) {
|
||||
childBox.x1 = x + Math.round(extraWidth / 2);
|
||||
childBox.x2 = childBox.x1 + naturalWidth;
|
||||
} else if (child.align === St.Align.END) {
|
||||
childBox.x2 = x + availWidth;
|
||||
childBox.x1 = childBox.x2 - naturalWidth;
|
||||
} else {
|
||||
childBox.x1 = x;
|
||||
childBox.x2 = x + naturalWidth;
|
||||
}
|
||||
|
||||
let [minHeight, naturalHeight] = child.actor.get_preferred_height(-1);
|
||||
childBox.y1 = Math.round(box.y1 + (height - naturalHeight) / 2);
|
||||
childBox.y2 = childBox.y1 + naturalHeight;
|
||||
|
||||
child.actor.allocate(childBox, flags);
|
||||
|
||||
x = childBox.x2 + this._spacing;
|
||||
x += availWidth + this._spacing;
|
||||
}
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(PopupBaseMenuItem.prototype);
|
||||
|
||||
function PopupMenuItem(text) {
|
||||
this._init(text);
|
||||
function PopupMenuItem() {
|
||||
this._init.apply(this, arguments);
|
||||
}
|
||||
|
||||
PopupMenuItem.prototype = {
|
||||
__proto__: PopupBaseMenuItem.prototype,
|
||||
|
||||
_init: function (text) {
|
||||
PopupBaseMenuItem.prototype._init.call(this);
|
||||
_init: function (text, params) {
|
||||
PopupBaseMenuItem.prototype._init.call(this, params);
|
||||
|
||||
this.label = new St.Label({ text: text });
|
||||
this.addActor(this.label);
|
||||
@ -322,7 +328,7 @@ PopupSeparatorMenuItem.prototype = {
|
||||
PopupBaseMenuItem.prototype._init.call(this, { reactive: false });
|
||||
|
||||
this._drawingArea = new St.DrawingArea({ style_class: 'popup-separator-menu-item' });
|
||||
this.addActor(this._drawingArea, 0, -1);
|
||||
this.addActor(this._drawingArea, { span: -1, expand: true });
|
||||
this._drawingArea.connect('repaint', Lang.bind(this, this._onRepaint));
|
||||
},
|
||||
|
||||
@ -367,7 +373,7 @@ PopupSliderMenuItem.prototype = {
|
||||
this._value = Math.max(Math.min(value, 1), 0);
|
||||
|
||||
this._slider = new St.DrawingArea({ style_class: 'popup-slider-menu-item', reactive: true });
|
||||
this.addActor(this._slider, 0, -1);
|
||||
this.addActor(this._slider, { span: -1, expand: true });
|
||||
this._slider.connect('repaint', Lang.bind(this, this._sliderRepaint));
|
||||
this._slider.connect('button-press-event', Lang.bind(this, this._startDragging));
|
||||
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
|
||||
@ -534,7 +540,7 @@ PopupSwitchMenuItem.prototype = {
|
||||
this._switch = new Switch(active);
|
||||
|
||||
this.addActor(this.label);
|
||||
this.addActor(this._switch.actor);
|
||||
this.addActor(this._switch.actor, { align: St.Align.END });
|
||||
|
||||
this.connect('activate', Lang.bind(this,function(from) {
|
||||
this.toggle();
|
||||
@ -569,7 +575,7 @@ PopupImageMenuItem.prototype = {
|
||||
this.label = new St.Label({ text: text });
|
||||
this.addActor(this.label);
|
||||
this._icon = new St.Icon({ style_class: 'popup-menu-icon' });
|
||||
this.addActor(this._icon);
|
||||
this.addActor(this._icon, { align: St.Align.END });
|
||||
|
||||
this.setIcon(iconName);
|
||||
},
|
||||
@ -601,76 +607,21 @@ function findNextInCycle(items, current, direction) {
|
||||
return items[mod(cur + direction, items.length)];
|
||||
}
|
||||
|
||||
function PopupMenu() {
|
||||
this._init.apply(this, arguments);
|
||||
function PopupMenuBase() {
|
||||
throw new TypeError('Trying to instantiate abstract class PopupMenuBase');
|
||||
}
|
||||
|
||||
PopupMenu.prototype = {
|
||||
_init: function(sourceActor, alignment, arrowSide, gap) {
|
||||
PopupMenuBase.prototype = {
|
||||
_init: function(sourceActor, styleClass) {
|
||||
this.sourceActor = sourceActor;
|
||||
this._alignment = alignment;
|
||||
this._arrowSide = arrowSide;
|
||||
this._gap = gap;
|
||||
|
||||
this._boxPointer = new BoxPointer.BoxPointer(arrowSide,
|
||||
{ x_fill: true,
|
||||
y_fill: true,
|
||||
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._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.box = new St.BoxLayout({ style_class: styleClass,
|
||||
vertical: true });
|
||||
|
||||
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);
|
||||
@ -680,10 +631,37 @@ PopupMenu.prototype = {
|
||||
},
|
||||
|
||||
addMenuItem: function(menuItem, position) {
|
||||
if (position == undefined)
|
||||
this._box.add(menuItem.actor);
|
||||
else
|
||||
this._box.insert_actor(menuItem.actor, position);
|
||||
let before_item = null;
|
||||
if (position == undefined) {
|
||||
this.box.add(menuItem.actor);
|
||||
} else {
|
||||
let items = this.getMenuItems();
|
||||
if (position < items.length) {
|
||||
before_item = items[position].actor;
|
||||
this.box.insert_before(menuItem.actor, before_item);
|
||||
} else
|
||||
this.box.add(menuItem.actor);
|
||||
}
|
||||
if (menuItem instanceof PopupSubMenuMenuItem) {
|
||||
if (before_item == null)
|
||||
this.box.add(menuItem.menu.actor);
|
||||
else
|
||||
this.box.insert_before(menuItem.menu.actor, before_item);
|
||||
menuItem._subMenuActivateId = menuItem.menu.connect('activate', Lang.bind(this, function() {
|
||||
this.emit('activate');
|
||||
this.close(true);
|
||||
}));
|
||||
menuItem._subMenuActiveChangeId = menuItem.menu.connect('active-changed', Lang.bind(this, function(submenu, submenuItem) {
|
||||
if (this._activeMenuItem && this._activeMenuItem != submenuItem)
|
||||
this._activeMenuItem.setActive(false);
|
||||
this._activeMenuItem = submenuItem;
|
||||
this.emit('active-changed', submenuItem);
|
||||
}));
|
||||
menuItem._closingId = this.connect('open-state-changed', function(self, open) {
|
||||
if (!open)
|
||||
menuItem.menu.close(false);
|
||||
});
|
||||
}
|
||||
menuItem._activeChangeId = menuItem.connect('active-changed', Lang.bind(this, function (menuItem, active) {
|
||||
if (active && this._activeMenuItem != menuItem) {
|
||||
if (this._activeMenuItem)
|
||||
@ -697,22 +675,50 @@ PopupMenu.prototype = {
|
||||
}));
|
||||
menuItem._activateId = menuItem.connect('activate', Lang.bind(this, function (menuItem, event) {
|
||||
this.emit('activate', menuItem);
|
||||
this.close();
|
||||
this.close(true);
|
||||
}));
|
||||
menuItem.connect('destroy', Lang.bind(this, function(emitter) {
|
||||
menuItem.disconnect(menuItem._activateId);
|
||||
menuItem.disconnect(menuItem._activeChangeId);
|
||||
if (menuItem.menu) {
|
||||
menuItem.menu.disconnect(menuItem._subMenuActivateId);
|
||||
menuItem.menu.disconnect(menuItem._subMenuActiveChangeId);
|
||||
this.disconnect(menuItem._closingId);
|
||||
}
|
||||
if (menuItem == this._activeMenuItem)
|
||||
this._activeMenuItem = null;
|
||||
}));
|
||||
},
|
||||
|
||||
getColumnWidths: function() {
|
||||
let columnWidths = [];
|
||||
let items = this.box.get_children();
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
if (items[i]._delegate instanceof PopupBaseMenuItem || items[i]._delegate instanceof PopupMenuBase) {
|
||||
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];
|
||||
}
|
||||
}
|
||||
}
|
||||
return columnWidths;
|
||||
},
|
||||
|
||||
setColumnWidths: function(widths) {
|
||||
let items = this.box.get_children();
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
if (items[i]._delegate instanceof PopupBaseMenuItem || items[i]._delegate instanceof PopupMenuBase)
|
||||
items[i]._delegate.setColumnWidths(widths);
|
||||
}
|
||||
},
|
||||
|
||||
addActor: function(actor) {
|
||||
this._box.add(actor);
|
||||
this.box.add(actor);
|
||||
},
|
||||
|
||||
getMenuItems: function() {
|
||||
return this._box.get_children().map(function (actor) { return actor._delegate; });
|
||||
return this.box.get_children().map(function (actor) { return actor._delegate; }).filter(function(item) { return item instanceof PopupBaseMenuItem; });
|
||||
},
|
||||
|
||||
removeAll: function() {
|
||||
@ -723,110 +729,22 @@ PopupMenu.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
setArrowOrigin: function(origin) {
|
||||
this._boxPointer.setArrowOrigin(origin);
|
||||
},
|
||||
|
||||
activateFirst: function() {
|
||||
let children = this._box.get_children();
|
||||
let children = this.box.get_children();
|
||||
for (let i = 0; i < children.length; i++) {
|
||||
let actor = children[i];
|
||||
if (actor._delegate && actor.visible && actor.reactive) {
|
||||
if (actor._delegate && actor._delegate instanceof PopupBaseMenuItem && actor.visible && actor.reactive) {
|
||||
actor._delegate.setActive(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
open: function() {
|
||||
if (this.isOpen)
|
||||
return;
|
||||
|
||||
let primary = global.get_primary_monitor();
|
||||
|
||||
// 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] = this.sourceActor.get_transformed_position();
|
||||
let [sourceWidth, sourceHeight] = this.sourceActor.get_transformed_size();
|
||||
|
||||
let [minWidth, minHeight, natWidth, natHeight] = this.actor.get_preferred_size();
|
||||
|
||||
let menuWidth = natWidth, menuHeight = natHeight;
|
||||
|
||||
// Position the non-pointing axis
|
||||
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)
|
||||
this._boxPointer._arrowSide = this._arrowSide = St.Side.TOP;
|
||||
else if (primary.y + menuHeight + this._gap < sourceY)
|
||||
this._boxPointer._arrowSide = this._arrowSide = St.Side.BOTTOM;
|
||||
else
|
||||
this._boxPointer._arrowSide = this._arrowSide = St.Side.TOP;
|
||||
} else {
|
||||
// horizontal submenu
|
||||
if (sourceX + sourceWidth + menuWidth + this._gap < primary.x + primary.width)
|
||||
this._boxPointer._arrowSide = this._arrowSide = St.Side.LEFT;
|
||||
else if (primary.x + menuWidth + this._gap < sourceX)
|
||||
this._boxPointer._arrowSide = this._arrowSide = St.Side.RIGHT;
|
||||
else
|
||||
this._boxPointer._arrowSide = this._arrowSide = St.Side.LEFT;
|
||||
}
|
||||
}
|
||||
|
||||
this._boxPointer.setPosition(this.sourceActor, this._gap, this._alignment);
|
||||
|
||||
// Now show it
|
||||
this.actor.reactive = true;
|
||||
this._boxPointer.animateAppear();
|
||||
this.isOpen = true;
|
||||
this.emit('open-state-changed', true);
|
||||
},
|
||||
|
||||
close: function() {
|
||||
if (!this.isOpen)
|
||||
return;
|
||||
|
||||
if (this._activeMenuItem)
|
||||
this._activeMenuItem.setActive(false);
|
||||
this.actor.reactive = false;
|
||||
this._boxPointer.animateDisappear();
|
||||
this.isOpen = false;
|
||||
this.emit('open-state-changed', false);
|
||||
},
|
||||
|
||||
toggle: function() {
|
||||
if (this.isOpen)
|
||||
this.close();
|
||||
this.close(true);
|
||||
else
|
||||
this.open();
|
||||
},
|
||||
|
||||
_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;
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
// return true if the actor is inside the menu or
|
||||
// any actor related to the active submenu
|
||||
contains: function(actor) {
|
||||
if (this.actor.contains(actor))
|
||||
return true;
|
||||
if (this._activeMenuItem)
|
||||
return this._activeMenuItem.contains(actor);
|
||||
return false;
|
||||
this.open(true);
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
@ -836,7 +754,184 @@ PopupMenu.prototype = {
|
||||
this.emit('destroy');
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(PopupMenu.prototype);
|
||||
Signals.addSignalMethods(PopupMenuBase.prototype);
|
||||
|
||||
function PopupMenu() {
|
||||
this._init.apply(this, arguments);
|
||||
}
|
||||
|
||||
PopupMenu.prototype = {
|
||||
__proto__: PopupMenuBase.prototype,
|
||||
|
||||
_init: function(sourceActor, alignment, arrowSide, gap) {
|
||||
PopupMenuBase.prototype._init.call (this, sourceActor, 'popup-menu-content');
|
||||
|
||||
this._alignment = alignment;
|
||||
this._arrowSide = arrowSide;
|
||||
this._gap = gap;
|
||||
|
||||
this._boxPointer = new BoxPointer.BoxPointer(arrowSide,
|
||||
{ x_fill: true,
|
||||
y_fill: true,
|
||||
x_align: St.Align.START });
|
||||
this.actor = this._boxPointer.actor;
|
||||
this.actor._delegate = this;
|
||||
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._boxWrapper.add_actor(this.box);
|
||||
this.actor.add_style_class_name('popup-menu');
|
||||
|
||||
global.focus_manager.add_group(this.actor);
|
||||
this.actor.reactive = true;
|
||||
},
|
||||
|
||||
_boxGetPreferredWidth: function (actor, forHeight, alloc) {
|
||||
let columnWidths = this.getColumnWidths();
|
||||
this.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);
|
||||
},
|
||||
|
||||
setArrowOrigin: function(origin) {
|
||||
this._boxPointer.setArrowOrigin(origin);
|
||||
},
|
||||
|
||||
open: function(animate) {
|
||||
if (this.isOpen)
|
||||
return;
|
||||
|
||||
this.isOpen = true;
|
||||
|
||||
this._boxPointer.setPosition(this.sourceActor, this._gap, this._alignment);
|
||||
this._boxPointer.show(animate);
|
||||
|
||||
this.emit('open-state-changed', true);
|
||||
},
|
||||
|
||||
close: function(animate) {
|
||||
if (!this.isOpen)
|
||||
return;
|
||||
|
||||
if (this._activeMenuItem)
|
||||
this._activeMenuItem.setActive(false);
|
||||
|
||||
this._boxPointer.hide(animate);
|
||||
|
||||
this.isOpen = false;
|
||||
this.emit('open-state-changed', false);
|
||||
}
|
||||
};
|
||||
|
||||
function PopupSubMenu() {
|
||||
this._init.apply(this, arguments);
|
||||
}
|
||||
|
||||
PopupSubMenu.prototype = {
|
||||
__proto__: PopupMenuBase.prototype,
|
||||
|
||||
_init: function(sourceActor, sourceArrow) {
|
||||
PopupMenuBase.prototype._init.call(this, sourceActor, 'popup-sub-menu');
|
||||
|
||||
this._arrow = sourceArrow;
|
||||
this._arrow.rotation_center_z_gravity = Clutter.Gravity.CENTER;
|
||||
|
||||
this.actor = this.box;
|
||||
this.actor._delegate = this;
|
||||
this.actor.clip_to_allocation = true;
|
||||
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
|
||||
this.actor.hide();
|
||||
},
|
||||
|
||||
open: function(animate) {
|
||||
if (this.isOpen)
|
||||
return;
|
||||
|
||||
this.isOpen = true;
|
||||
|
||||
// we don't implement the !animate case because that doesn't
|
||||
// currently get used...
|
||||
|
||||
let [naturalHeight, minHeight] = this.actor.get_preferred_height(-1);
|
||||
this.actor.height = 0;
|
||||
this.actor.show();
|
||||
this.actor._arrow_rotation = this._arrow.rotation_angle_z;
|
||||
Tweener.addTween(this.actor,
|
||||
{ _arrow_rotation: 90,
|
||||
height: naturalHeight,
|
||||
time: 0.25,
|
||||
onUpdateScope: this,
|
||||
onUpdate: function() {
|
||||
this._arrow.rotation_angle_z = this.actor._arrow_rotation;
|
||||
},
|
||||
onCompleteScope: this,
|
||||
onComplete: function() {
|
||||
this.actor.set_height(-1);
|
||||
this.emit('open-state-changed', true);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
close: function(animate) {
|
||||
if (!this.isOpen)
|
||||
return;
|
||||
|
||||
this.isOpen = false;
|
||||
|
||||
if (this._activeMenuItem)
|
||||
this._activeMenuItem.setActive(false);
|
||||
|
||||
if (animate) {
|
||||
this.actor._arrow_rotation = this._arrow.rotation_angle_z;
|
||||
Tweener.addTween(this.actor,
|
||||
{ _arrow_rotation: 0,
|
||||
height: 0,
|
||||
time: 0.25,
|
||||
onCompleteScope: this,
|
||||
onComplete: function() {
|
||||
this.actor.hide();
|
||||
this.actor.set_height(-1);
|
||||
|
||||
this.emit('open-state-changed', false);
|
||||
},
|
||||
onUpdateScope: this,
|
||||
onUpdate: function() {
|
||||
this._arrow.rotation_angle_z = this.actor._arrow_rotation;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
this._arrow.rotation_angle_z = 0;
|
||||
this.actor.hide();
|
||||
|
||||
this.isOpen = false;
|
||||
this.emit('open-state-changed', false);
|
||||
}
|
||||
},
|
||||
|
||||
_onKeyPressEvent: function(actor, event) {
|
||||
// Move focus back to parent menu if the user types Left.
|
||||
|
||||
if (this.isOpen && event.get_key_symbol() == Clutter.KEY_Left) {
|
||||
this.close(true);
|
||||
this.sourceActor._delegate.setActive(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
function PopupSubMenuMenuItem() {
|
||||
this._init.apply(this, arguments);
|
||||
@ -846,77 +941,46 @@ PopupSubMenuMenuItem.prototype = {
|
||||
__proto__: PopupBaseMenuItem.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));
|
||||
PopupBaseMenuItem.prototype._init.call(this);
|
||||
|
||||
this.actor.add_style_class_name('popup-submenu-menu-item');
|
||||
|
||||
this.label = new St.Label({ text: text });
|
||||
this.addActor(this.label);
|
||||
this.addActor(new St.Label({ text: '>' }));
|
||||
this._triangle = new St.Label({ text: '\u25B8' });
|
||||
this.addActor(this._triangle, { align: St.Align.END });
|
||||
|
||||
this.menu = new PopupMenu(this.actor, St.Align.MIDDLE, St.Side.LEFT, 0, true);
|
||||
Main.chrome.addActor(this.menu.actor, { visibleInOverview: true,
|
||||
affectsStruts: false });
|
||||
this.menu.actor.hide();
|
||||
|
||||
this._openStateChangedId = this.menu.connect('open-state-changed', Lang.bind(this, this._subMenuOpenStateChanged));
|
||||
this._activateId = this.menu.connect('activate', Lang.bind(this, this._subMenuActivate));
|
||||
this.menu = new PopupSubMenu(this.actor, this._triangle);
|
||||
this.menu.connect('open-state-changed', Lang.bind(this, this._subMenuOpenStateChanged));
|
||||
},
|
||||
|
||||
_subMenuOpenStateChanged: function(menu, open) {
|
||||
PopupBaseMenuItem.prototype.setActive.call(this, open);
|
||||
},
|
||||
|
||||
_subMenuActivate: function(menu, menuItem) {
|
||||
this.emit('activate', null);
|
||||
},
|
||||
|
||||
setMenu: function(newmenu) {
|
||||
if (this.menu) {
|
||||
this.menu.close();
|
||||
this.menu.disconnect(this._openStateChangedId);
|
||||
this.menu.disconnect(this._activateId);
|
||||
}
|
||||
if (newmenu) {
|
||||
this._openStateChangedId = newmenu.connect('open-state-changed', Lang.bind(this, this._subMenuOpenStateChanged));
|
||||
this._activateId = newmenu.connect('activate', Lang.bind(this, this._subMenuActivate));
|
||||
}
|
||||
this.menu = newmenu;
|
||||
if (open)
|
||||
this.actor.add_style_pseudo_class('open');
|
||||
else
|
||||
this.actor.remove_style_pseudo_class('open');
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
if (this.menu)
|
||||
this.menu.destroy();
|
||||
this.menu.destroy();
|
||||
PopupBaseMenuItem.prototype.destroy.call(this);
|
||||
},
|
||||
|
||||
setActive: function(active) {
|
||||
if (this.menu) {
|
||||
if (active)
|
||||
this.menu.open();
|
||||
else
|
||||
this.menu.close();
|
||||
}
|
||||
|
||||
PopupBaseMenuItem.prototype.setActive.call(this, active);
|
||||
},
|
||||
|
||||
_onKeyPressEvent: function(actor, event) {
|
||||
if (!this.menu)
|
||||
return false;
|
||||
if (event.get_key_symbol() == Clutter.KEY_Right) {
|
||||
this.menu.open(true);
|
||||
this.menu.activateFirst();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return PopupBaseMenuItem.prototype._onKeyPressEvent.call(this, actor, event);
|
||||
},
|
||||
|
||||
contains: function(actor) {
|
||||
return this.menu && this.menu.contains(actor);
|
||||
activate: function(event) {
|
||||
this.menu.open(true);
|
||||
},
|
||||
|
||||
_mouseEnter: function(event) {
|
||||
this.setActive(true);
|
||||
_onButtonReleaseEvent: function(actor) {
|
||||
this.menu.toggle();
|
||||
}
|
||||
};
|
||||
|
||||
@ -939,23 +1003,24 @@ PopupMenuManager.prototype = {
|
||||
this._leaveEventId = 0;
|
||||
this._activeMenu = null;
|
||||
this._menus = [];
|
||||
this._delayedMenus = [];
|
||||
this._preGrabInputMode = null;
|
||||
},
|
||||
|
||||
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,
|
||||
focusId: 0
|
||||
focusInId: 0,
|
||||
focusOutId: 0
|
||||
};
|
||||
|
||||
let source = menu.sourceActor;
|
||||
if (source) {
|
||||
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); }));
|
||||
menudata.focusInId = source.connect('key-focus-in', Lang.bind(this, function() { this._onMenuSourceEnter(menu); }));
|
||||
menudata.focusOutId = source.connect('key-focus-out', Lang.bind(this, function() { this._onKeyFocusOut(menu); }));
|
||||
}
|
||||
|
||||
if (position == undefined)
|
||||
@ -974,18 +1039,19 @@ PopupMenuManager.prototype = {
|
||||
|
||||
let menudata = this._menus[position];
|
||||
menu.disconnect(menudata.openStateChangeId);
|
||||
menu.disconnect(menudata.activateId);
|
||||
menu.disconnect(menudata.destroyId);
|
||||
|
||||
if (menudata.enterId)
|
||||
menu.sourceActor.disconnect(menudata.enterId);
|
||||
if (menudata.focusId)
|
||||
menu.sourceActor.disconnect(menudata.focusId);
|
||||
if (menudata.focusInId)
|
||||
menu.sourceActor.disconnect(menudata.focusInId);
|
||||
if (menudata.focusOutId)
|
||||
menu.sourceActor.disconnect(menudata.focusOutId);
|
||||
|
||||
this._menus.splice(position, 1);
|
||||
},
|
||||
|
||||
grab: function() {
|
||||
_grab: function() {
|
||||
Main.pushModal(this._owner.actor);
|
||||
|
||||
this._eventCaptureId = global.stage.connect('captured-event', Lang.bind(this, this._onEventCapture));
|
||||
@ -997,7 +1063,7 @@ PopupMenuManager.prototype = {
|
||||
this.grabbed = true;
|
||||
},
|
||||
|
||||
ungrab: function() {
|
||||
_ungrab: function() {
|
||||
global.stage.disconnect(this._eventCaptureId);
|
||||
this._eventCaptureId = 0;
|
||||
global.stage.disconnect(this._keyPressEventId);
|
||||
@ -1013,40 +1079,100 @@ PopupMenuManager.prototype = {
|
||||
|
||||
_onMenuOpenState: function(menu, open) {
|
||||
if (open) {
|
||||
if (!this.grabbed) {
|
||||
this._preGrabInputMode = global.stage_input_mode;
|
||||
this._grab();
|
||||
}
|
||||
this._activeMenu = menu;
|
||||
if (!this.grabbed)
|
||||
this.grab();
|
||||
|
||||
// if the focus is not already associated with the menu,
|
||||
// then focus the menu
|
||||
let focus = global.stage.key_focus;
|
||||
if (!this._activeMenuContains(focus))
|
||||
menu.sourceActor.grab_key_focus();
|
||||
} else if (menu == this._activeMenu) {
|
||||
this._activeMenu = null;
|
||||
let focus = global.stage.key_focus;
|
||||
let fromActive = this._activeMenuContains(focus);
|
||||
|
||||
if (this.grabbed)
|
||||
this.ungrab();
|
||||
this._ungrab();
|
||||
this._activeMenu = null;
|
||||
|
||||
// If keynav was in effect before we grabbed, then we need
|
||||
// to properly re-establish it after we ungrab. (popModal
|
||||
// will have unset the focus.) If some part of the menu
|
||||
// was focused at the time of the ungrab then focus its
|
||||
// sourceActor. Otherwise just reset the focus to where it
|
||||
// was right before the ungrab.
|
||||
if (this._preGrabInputMode == Shell.StageInputMode.FOCUSED) {
|
||||
global.stage_input_mode = Shell.StageInputMode.FOCUSED;
|
||||
if (fromActive)
|
||||
menu.sourceActor.grab_key_focus();
|
||||
else
|
||||
focus.grab_key_focus();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// change the currently-open menu without dropping grab
|
||||
_changeMenu: function(newMenu) {
|
||||
if (this._activeMenu) {
|
||||
// _onOpenMenuState will drop the grab if it sees
|
||||
// this._activeMenu being closed; so clear _activeMenu
|
||||
// before closing it to keep that from happening
|
||||
let oldMenu = this._activeMenu;
|
||||
this._activeMenu = null;
|
||||
oldMenu.close(false);
|
||||
newMenu.open(false);
|
||||
} else
|
||||
newMenu.open(true);
|
||||
},
|
||||
|
||||
_onMenuSourceEnter: function(menu) {
|
||||
if (!this.grabbed || menu == this._activeMenu)
|
||||
return false;
|
||||
|
||||
if (this._activeMenu != null)
|
||||
this._activeMenu.close();
|
||||
menu.open();
|
||||
this._changeMenu(menu);
|
||||
return false;
|
||||
},
|
||||
|
||||
_onMenuActivated: function(menu, item) {
|
||||
if (this.grabbed)
|
||||
this.ungrab();
|
||||
_onKeyFocusOut: function(menu) {
|
||||
if (!this.grabbed || menu != this._activeMenu)
|
||||
return;
|
||||
|
||||
// We want to close the menu if the focus has moved somewhere
|
||||
// other than inside the menu or to another menu's sourceActor.
|
||||
// Unfortunately, when key-focus-out is emitted,
|
||||
// stage.key_focus will be null. So we have to wait until
|
||||
// after it emits the key-focus-in as well.
|
||||
let id = global.stage.connect('notify::key-focus', Lang.bind(this,
|
||||
function () {
|
||||
global.stage.disconnect(id);
|
||||
|
||||
if (menu != this._activeMenu)
|
||||
return;
|
||||
|
||||
let focus = global.stage.key_focus;
|
||||
if (!focus || this._activeMenuContains(focus))
|
||||
return;
|
||||
if (focus._delegate && this._findMenu(focus._delegate.menu) != -1)
|
||||
return;
|
||||
menu.close(true);
|
||||
}));
|
||||
},
|
||||
|
||||
_onMenuDestroy: function(menu) {
|
||||
this.removeMenu(menu);
|
||||
},
|
||||
|
||||
_eventIsOnActiveMenu: function(event) {
|
||||
let src = event.get_source();
|
||||
_activeMenuContains: function(actor) {
|
||||
return this._activeMenu != null
|
||||
&& (this._activeMenu.contains(src) ||
|
||||
(this._activeMenu.sourceActor && this._activeMenu.sourceActor.contains(src)));
|
||||
&& (this._activeMenu.actor.contains(actor) ||
|
||||
(this._activeMenu.sourceActor && this._activeMenu.sourceActor.contains(actor)));
|
||||
},
|
||||
|
||||
_eventIsOnActiveMenu: function(event) {
|
||||
return this._activeMenuContains(event.get_source());
|
||||
},
|
||||
|
||||
_eventIsOnAnyMenuSource: function(event) {
|
||||
@ -1068,6 +1194,18 @@ PopupMenuManager.prototype = {
|
||||
return -1;
|
||||
},
|
||||
|
||||
_nextMenu: function(pos, direction) {
|
||||
for (let i = 1; i < this._menus.length; i++) {
|
||||
let candidate = mod(pos + i * direction, this._menus.length);
|
||||
let menu = this._menus[candidate].menu;
|
||||
if (!menu.sourceActor || menu.sourceActor.visible)
|
||||
return menu;
|
||||
}
|
||||
// no menu is found? this should not happen
|
||||
// anyway stay on current menu
|
||||
return this._menus[pos];
|
||||
},
|
||||
|
||||
_onEventCapture: function(actor, event) {
|
||||
if (!this.grabbed)
|
||||
return false;
|
||||
@ -1106,12 +1244,9 @@ PopupMenuManager.prototype = {
|
||||
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;
|
||||
let next = this._nextMenu(pos, direction);
|
||||
if (next != this._activeMenu) {
|
||||
let oldMenu = this._activeMenu;
|
||||
this._activeMenu = next;
|
||||
oldMenu.close();
|
||||
next.open();
|
||||
this._changeMenu(next);
|
||||
next.activateFirst();
|
||||
}
|
||||
return true;
|
||||
@ -1122,6 +1257,6 @@ PopupMenuManager.prototype = {
|
||||
|
||||
_closeMenu: function() {
|
||||
if (this._activeMenu != null)
|
||||
this._activeMenu.close();
|
||||
this._activeMenu.close(true);
|
||||
}
|
||||
};
|
||||
|
@ -207,6 +207,11 @@ RunDialog.prototype = {
|
||||
|
||||
'debugexit': Lang.bind(this, function() {
|
||||
Meta.exit(Meta.ExitCode.ERROR);
|
||||
}),
|
||||
|
||||
// rt is short for "reload theme"
|
||||
'rt': Lang.bind(this, function() {
|
||||
Main.loadTheme();
|
||||
})
|
||||
};
|
||||
|
||||
|
@ -10,24 +10,24 @@ const Shell = imports.gi.Shell;
|
||||
const Signals = imports.signals;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const A11Y_SCHEMA = "org.gnome.desktop.a11y.keyboard";
|
||||
const KEY_STICKY_KEYS_ENABLED = "stickykeys-enable";
|
||||
const KEY_BOUNCE_KEYS_ENABLED = "bouncekeys-enable";
|
||||
const KEY_SLOW_KEYS_ENABLED = "slowkeys-enable";
|
||||
const KEY_MOUSE_KEYS_ENABLED = "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 MAGNIFIER_SCHEMA = 'org.gnome.accessibility.magnifier';
|
||||
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 XSETTINGS_SCHEMA = "org.gnome.settings-daemon.plugins.xsettings";
|
||||
const KEY_DPI = "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;
|
||||
@ -37,14 +37,14 @@ const DPI_FACTOR_LARGER = 1.5;
|
||||
const DPI_FACTOR_LARGEST = 2.0;
|
||||
const DPI_DEFAULT = 96;
|
||||
|
||||
const KEY_META_DIR = "/apps/metacity/general";
|
||||
const KEY_VISUAL_BELL = KEY_META_DIR + "/visual_bell";
|
||||
const KEY_META_DIR = '/apps/metacity/general';
|
||||
const KEY_VISUAL_BELL = KEY_META_DIR + '/visual_bell';
|
||||
|
||||
const DESKTOP_INTERFACE_SCHEMA = "org.gnome.desktop.interface";
|
||||
const KEY_GTK_THEME = "gtk-theme";
|
||||
const KEY_ICON_THEME = "icon-theme";
|
||||
const DESKTOP_INTERFACE_SCHEMA = 'org.gnome.desktop.interface';
|
||||
const KEY_GTK_THEME = 'gtk-theme';
|
||||
const KEY_ICON_THEME = 'icon-theme';
|
||||
|
||||
const HIGH_CONTRAST_THEME = "HighContrast";
|
||||
const HIGH_CONTRAST_THEME = 'HighContrast';
|
||||
|
||||
function getDPIFromX() {
|
||||
let screen = global.get_gdk_screen();
|
||||
@ -79,7 +79,7 @@ ATIndicator.prototype = {
|
||||
let highContrast = this._buildHCItem();
|
||||
this.menu.addMenuItem(highContrast);
|
||||
|
||||
let magnifier = this._buildMagItem();
|
||||
let magnifier = this._buildItem(_("Zoom"), MAGNIFIER_SCHEMA, 'show-magnifier');
|
||||
this.menu.addMenuItem(magnifier);
|
||||
|
||||
let textZoom = this._buildFontItem();
|
||||
@ -219,18 +219,6 @@ ATIndicator.prototype = {
|
||||
return widget;
|
||||
},
|
||||
|
||||
_buildMagItem: function() {
|
||||
let mag = Main.magnifier;
|
||||
let widget = this._buildItemExtended(_("Zoom"),
|
||||
mag.isActive(),
|
||||
true,
|
||||
Lang.bind(mag, mag.setActive));
|
||||
mag.connect('active-changed', function(magnifier, active) {
|
||||
widget.setToggleState(active);
|
||||
});
|
||||
return widget;
|
||||
},
|
||||
|
||||
_keyChanged: function() {
|
||||
this.emit('gconf-changed');
|
||||
}
|
||||
|
491
js/ui/status/bluetooth.js
Normal file
491
js/ui/status/bluetooth.js
Normal file
@ -0,0 +1,491 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gdk = imports.gi.Gdk;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Gio = imports.gi.Gio;
|
||||
const GnomeBluetoothApplet = imports.gi.GnomeBluetoothApplet;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
const St = imports.gi.St;
|
||||
const Shell = imports.gi.Shell;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const MessageTray = imports.ui.messageTray;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const ConnectionState = {
|
||||
DISCONNECTED: 0,
|
||||
CONNECTED: 1,
|
||||
DISCONNECTING: 2,
|
||||
CONNECTING: 3
|
||||
}
|
||||
|
||||
function Indicator() {
|
||||
this._init.apply(this, arguments);
|
||||
}
|
||||
|
||||
Indicator.prototype = {
|
||||
__proto__: PanelMenu.SystemStatusButton.prototype,
|
||||
|
||||
_init: function() {
|
||||
PanelMenu.SystemStatusButton.prototype._init.call(this, 'bluetooth-disabled', null);
|
||||
|
||||
GLib.spawn_command_line_sync ('pkill -f "^bluetooth-applet$"');
|
||||
this._applet = new GnomeBluetoothApplet.Applet();
|
||||
|
||||
this._killswitch = new PopupMenu.PopupSwitchMenuItem(_("Bluetooth"), false);
|
||||
this._applet.connect('notify::killswitch-state', Lang.bind(this, this._updateKillswitch));
|
||||
this._killswitch.connect('toggled', Lang.bind(this, function() {
|
||||
let current_state = this._applet.killswitch_state;
|
||||
if (current_state != GnomeBluetoothApplet.KillswitchState.HARD_BLOCKED &&
|
||||
current_state != GnomeBluetoothApplet.KillswitchState.NO_ADAPTER) {
|
||||
this._applet.killswitch_state = this._killswitch.state ?
|
||||
GnomeBluetoothApplet.KillswitchState.UNBLOCKED:
|
||||
GnomeBluetoothApplet.KillswitchState.SOFT_BLOCKED;
|
||||
} else
|
||||
this._killswitch.setToggleState(false);
|
||||
}));
|
||||
|
||||
this._discoverable = new PopupMenu.PopupSwitchMenuItem(_("Visibility"), this._applet.discoverable);
|
||||
this._applet.connect('notify::discoverable', Lang.bind(this, function() {
|
||||
this._discoverable.setToggleState(this._applet.discoverable);
|
||||
}));
|
||||
this._discoverable.connect('toggled', Lang.bind(this, function() {
|
||||
this._applet.discoverable = this._discoverable.state;
|
||||
}));
|
||||
|
||||
this._updateKillswitch();
|
||||
this.menu.addMenuItem(this._killswitch);
|
||||
this.menu.addMenuItem(this._discoverable);
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
|
||||
this._fullMenuItems = [new PopupMenu.PopupSeparatorMenuItem(),
|
||||
new PopupMenu.PopupMenuItem(_("Send Files to Device...")),
|
||||
new PopupMenu.PopupMenuItem(_("Setup a New Device..."))];
|
||||
this._hasDevices = false;
|
||||
this._deviceSep = this._fullMenuItems[0]; // hidden if no device exists
|
||||
|
||||
this._fullMenuItems[1].connect('activate', function() {
|
||||
GLib.spawn_command_line_async('bluetooth-sendto');
|
||||
});
|
||||
this._fullMenuItems[2].connect('activate', function() {
|
||||
GLib.spawn_command_line_async('bluetooth-wizard');
|
||||
});
|
||||
|
||||
for (let i = 0; i < this._fullMenuItems.length; i++) {
|
||||
let item = this._fullMenuItems[i];
|
||||
this.menu.addMenuItem(item);
|
||||
}
|
||||
|
||||
this._deviceItemPosition = 3;
|
||||
this._deviceItems = [];
|
||||
this._applet.connect('devices-changed', Lang.bind(this, this._updateDevices));
|
||||
this._updateDevices();
|
||||
|
||||
this._applet.connect('notify::show-full-menu', Lang.bind(this, this._updateFullMenu));
|
||||
this._updateFullMenu();
|
||||
|
||||
this.menu.addAction(_("Bluetooth Settings"), function() {
|
||||
GLib.spawn_command_line_async('gnome-control-center bluetooth');
|
||||
});
|
||||
|
||||
this._applet.connect('pincode-request', Lang.bind(this, this._pinRequest));
|
||||
this._applet.connect('confirm-request', Lang.bind(this, this._confirmRequest));
|
||||
this._applet.connect('auth-request', Lang.bind(this, this._authRequest));
|
||||
this._applet.connect('cancel-request', Lang.bind(this, this._cancelRequest));
|
||||
},
|
||||
|
||||
_updateKillswitch: function() {
|
||||
let current_state = this._applet.killswitch_state;
|
||||
let on = current_state == GnomeBluetoothApplet.KillswitchState.UNBLOCKED;
|
||||
let has_adapter = current_state != GnomeBluetoothApplet.KillswitchState.NO_ADAPTER;
|
||||
let can_toggle = current_state != GnomeBluetoothApplet.KillswitchState.NO_ADAPTER &&
|
||||
current_state != GnomeBluetoothApplet.KillswitchState.HARD_BLOCKED;
|
||||
|
||||
this._killswitch.setToggleState(on);
|
||||
this._killswitch.actor.reactive = can_toggle;
|
||||
|
||||
if (has_adapter)
|
||||
this.actor.show();
|
||||
else
|
||||
this.actor.hide();
|
||||
|
||||
if (on) {
|
||||
this._discoverable.actor.show();
|
||||
this.setIcon('bluetooth-active');
|
||||
} else {
|
||||
this._discoverable.actor.hide();
|
||||
this.setIcon('bluetooth-disabled');
|
||||
}
|
||||
},
|
||||
|
||||
_deviceCompare: function(d1, d2) {
|
||||
return d1.device_path == d2.device_path &&
|
||||
d1.bdaddr == d2.bdaddr &&
|
||||
d1.can_connect == d2.can_connect &&
|
||||
d1.capabilities == d2.capabilities;
|
||||
},
|
||||
|
||||
_updateDevices: function() {
|
||||
let devices = this._applet.get_devices();
|
||||
|
||||
for (let i = 0; i < this._deviceItems.length; i++) {
|
||||
let item = this._deviceItems[i];
|
||||
let destroy = true;
|
||||
for (let j = 0; j < devices.length; j++) {
|
||||
// we need to deep compare because BluetoothSimpleDevice is a boxed type
|
||||
// (but we take advantage of that, because _skip will disappear the next
|
||||
// time get_devices() is called)
|
||||
if (this._deviceCompare(item._device, devices[i])) {
|
||||
item.label.text = devices[i].alias;
|
||||
devices[i]._skip = true;
|
||||
destroy = false;
|
||||
}
|
||||
}
|
||||
if (destroy) {
|
||||
item.destroy();
|
||||
item._destroyed = true;
|
||||
}
|
||||
}
|
||||
|
||||
let newlist = [ ];
|
||||
for (let i = 0; i < this._deviceItems.length; i++) {
|
||||
let item = this._deviceItems[i];
|
||||
if (!item._destroyed)
|
||||
newlist.push(item);
|
||||
}
|
||||
this._deviceItems = newlist;
|
||||
|
||||
this._hasDevices = newlist.length > 0;
|
||||
for (let i = 0; i < devices.length; i++) {
|
||||
let d = devices[i];
|
||||
if (d._skip)
|
||||
continue;
|
||||
let item = this._createDeviceItem(d);
|
||||
if (item) {
|
||||
this.menu.addMenuItem(item, this._deviceItemPosition + this._deviceItems.length);
|
||||
this._deviceItems.push(item);
|
||||
this._hasDevices = true;
|
||||
}
|
||||
}
|
||||
if (this._hasDevices)
|
||||
this._deviceSep.actor.show();
|
||||
else
|
||||
this._deviceSep.actor.hide();
|
||||
},
|
||||
|
||||
_createDeviceItem: function(device) {
|
||||
if (!device.can_connect && device.capabilities == GnomeBluetoothApplet.Capabilities.NONE)
|
||||
return null;
|
||||
let item = new PopupMenu.PopupSubMenuMenuItem(device.alias);
|
||||
item._device = device;
|
||||
|
||||
if (device.can_connect) {
|
||||
item._connected = device.connected;
|
||||
let menuitem = new PopupMenu.PopupSwitchMenuItem(_("Connection"), device.connected);
|
||||
|
||||
menuitem.connect('toggled', Lang.bind(this, function() {
|
||||
if (item._connected > ConnectionState.CONNECTED) {
|
||||
// operation already in progress, revert
|
||||
menuitem.setToggleState(menuitem.state);
|
||||
}
|
||||
if (item._connected) {
|
||||
item._connected = ConnectionState.DISCONNECTING;
|
||||
this._applet.disconnect_device(item._device.device_path, function(applet, success) {
|
||||
if (success) { // apply
|
||||
item._connected = ConnectionState.DISCONNECTED;
|
||||
menuitem.setToggleState(false);
|
||||
} else { // revert
|
||||
item._connected = ConnectionState.CONNECTED;
|
||||
menuitem.setToggleState(true);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
item._connected = ConnectionState.CONNECTING;
|
||||
this._applet.connect_device(item._device.device_path, function(applet, success) {
|
||||
if (success) { // apply
|
||||
item._connected = ConnectionState.CONNECTED;
|
||||
menuitem.setToggleState(true);
|
||||
} else { // revert
|
||||
item._connected = ConnectionState.DISCONNECTED;
|
||||
menuitem.setToggleState(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
}));
|
||||
|
||||
item.menu.addMenuItem(menuitem);
|
||||
}
|
||||
|
||||
if (device.capabilities & GnomeBluetoothApplet.Capabilities.OBEX_PUSH) {
|
||||
item.menu.addAction(_("Send Files..."), Lang.bind(this, function() {
|
||||
this._applet.send_to_address(device.bdaddr, device.alias);
|
||||
}));
|
||||
}
|
||||
if (device.capabilities & GnomeBluetoothApplet.Capabilities.OBEX_FILE_TRANSFER) {
|
||||
item.menu.addAction(_("Browse Files..."), Lang.bind(this, function(event) {
|
||||
this._applet.browse_address(device.bdaddr, event.get_time(),
|
||||
Lang.bind(this, function(applet, result) {
|
||||
try {
|
||||
applet.browse_address_finish(result);
|
||||
} catch (e) {
|
||||
this._ensureSource();
|
||||
this._source.notify(new MessageTray.Notification(this._source,
|
||||
_("Bluetooth"),
|
||||
_("Error browsing device"),
|
||||
{ body: _("The requested device cannot be browsed, error is '%s'").format(e) }));
|
||||
}
|
||||
}));
|
||||
}));
|
||||
}
|
||||
|
||||
switch (device.type) {
|
||||
case GnomeBluetoothApplet.Type.KEYBOARD:
|
||||
item.menu.addAction(_("Keyboard Settings"), function() {
|
||||
GLib.spawn_command_line_async('gnome-control-center keyboard');
|
||||
});
|
||||
break;
|
||||
case GnomeBluetoothApplet.Type.MOUSE:
|
||||
item.menu.addAction(_("Mouse Settings"), function() {
|
||||
GLib.spawn_command_line_async('gnome-control-center mouse');
|
||||
});
|
||||
break;
|
||||
case GnomeBluetoothApplet.Type.HEADSET:
|
||||
case GnomeBluetoothApplet.Type.HEADPHONES:
|
||||
case GnomeBluetoothApplet.Type.OTHER_AUDIO:
|
||||
item.menu.addAction(_("Sound Settings"), function() {
|
||||
GLib.spawn_command_line_async('gnome-control-center sound');
|
||||
});
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return item;
|
||||
},
|
||||
|
||||
_updateFullMenu: function() {
|
||||
if (this._applet.show_full_menu) {
|
||||
this._showAll(this._fullMenuItems);
|
||||
if (this._hasDevices)
|
||||
this._showAll(this._deviceItems);
|
||||
else
|
||||
this._deviceSep.actor.hide();
|
||||
} else {
|
||||
this._hideAll(this._fullMenuItems);
|
||||
this._hideAll(this._deviceItems);
|
||||
}
|
||||
},
|
||||
|
||||
_showAll: function(items) {
|
||||
for (let i = 0; i < items.length; i++)
|
||||
items[i].actor.show();
|
||||
},
|
||||
|
||||
_hideAll: function(items) {
|
||||
for (let i = 0; i < items.length; i++)
|
||||
items[i].actor.hide();
|
||||
},
|
||||
|
||||
_destroyAll: function(items) {
|
||||
for (let i = 0; i < items.length; i++)
|
||||
items[i].destroy();
|
||||
},
|
||||
|
||||
_ensureSource: function() {
|
||||
if (!this._source) {
|
||||
this._source = new Source();
|
||||
Main.messageTray.add(this._source);
|
||||
}
|
||||
},
|
||||
|
||||
_authRequest: function(applet, device_path, name, long_name, uuid) {
|
||||
this._ensureSource();
|
||||
this._source.notify(new AuthNotification(this._source, this._applet, device_path, name, long_name, uuid));
|
||||
},
|
||||
|
||||
_confirmRequest: function(applet, device_path, name, long_name, pin) {
|
||||
this._ensureSource();
|
||||
this._source.notify(new ConfirmNotification(this._source, this._applet, device_path, name, long_name, pin));
|
||||
},
|
||||
|
||||
_pinRequest: function(applet, device_path, name, long_name, numeric) {
|
||||
this._ensureSource();
|
||||
this._source.notify(new PinNotification(this._source, this._applet, device_path, name, long_name, numeric));
|
||||
},
|
||||
|
||||
_cancelRequest: function() {
|
||||
this._source.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
function Source() {
|
||||
this._init.apply(this, arguments);
|
||||
}
|
||||
|
||||
Source.prototype = {
|
||||
__proto__: MessageTray.Source.prototype,
|
||||
|
||||
_init: function() {
|
||||
MessageTray.Source.prototype._init.call(this, _("Bluetooth Agent"));
|
||||
|
||||
this._setSummaryIcon(this.createNotificationIcon());
|
||||
},
|
||||
|
||||
notify: function(notification) {
|
||||
this._private_destroyId = notification.connect('destroy', Lang.bind(this, function(notification) {
|
||||
if (this.notification == notification) {
|
||||
// the destroyed notification is the last for this source
|
||||
this.notification.disconnect(this._private_destroyId);
|
||||
this.destroy();
|
||||
}
|
||||
}));
|
||||
|
||||
MessageTray.Source.prototype.notify.call(this, notification);
|
||||
},
|
||||
|
||||
createNotificationIcon: function() {
|
||||
return new St.Icon({ icon_name: 'bluetooth-active',
|
||||
icon_type: St.IconType.SYMBOLIC,
|
||||
icon_size: this.ICON_SIZE });
|
||||
}
|
||||
}
|
||||
|
||||
function AuthNotification() {
|
||||
this._init.apply(this, arguments);
|
||||
}
|
||||
|
||||
AuthNotification.prototype = {
|
||||
__proto__: MessageTray.Notification.prototype,
|
||||
|
||||
_init: function(source, applet, device_path, name, long_name, uuid) {
|
||||
MessageTray.Notification.prototype._init.call(this,
|
||||
source,
|
||||
_("Bluetooth Agent"),
|
||||
_("Authorization request from %s").format(name),
|
||||
{ customContent: true });
|
||||
this.setResident(true);
|
||||
|
||||
this._applet = applet;
|
||||
this._devicePath = device_path;
|
||||
this.addBody(_("Device %s wants access to the service '%s'").format(long_name, uuid));
|
||||
|
||||
this.addButton('always-grant', _("Always grant access"));
|
||||
this.addButton('grant', _("Grant this time only"));
|
||||
this.addButton('reject', _("Reject"));
|
||||
|
||||
this.connect('action-invoked', Lang.bind(this, function(self, action) {
|
||||
switch (action) {
|
||||
case 'always-grant':
|
||||
this._applet.agent_reply_auth(this._devicePath, true, true);
|
||||
break;
|
||||
case 'grant':
|
||||
this._applet.agent_reply_auth(this._devicePath, true, false);
|
||||
break;
|
||||
case 'reject':
|
||||
default:
|
||||
this._applet.agent_reply_auth(this._devicePath, false, false);
|
||||
}
|
||||
this.destroy();
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
function ConfirmNotification() {
|
||||
this._init.apply(this, arguments);
|
||||
}
|
||||
|
||||
ConfirmNotification.prototype = {
|
||||
__proto__: MessageTray.Notification.prototype,
|
||||
|
||||
_init: function(source, applet, device_path, name, long_name, pin) {
|
||||
MessageTray.Notification.prototype._init.call(this,
|
||||
source,
|
||||
_("Bluetooth Agent"),
|
||||
_("Pairing confirmation for %s").format(name),
|
||||
{ customContent: true });
|
||||
this.setResident(true);
|
||||
|
||||
this._applet = applet;
|
||||
this._devicePath = device_path;
|
||||
this.addBody(_("Device %s wants to pair with this computer").format(long_name));
|
||||
this.addBody(_("Please confirm whether the PIN '%s' matches the one on the device.").format(pin));
|
||||
|
||||
this.addButton('matches', _("Matches"));
|
||||
this.addButton('does-not-match', _("Does not match"));
|
||||
|
||||
this.connect('action-invoked', Lang.bind(this, function(self, action) {
|
||||
if (action == 'matches')
|
||||
this._applet.agent_reply_confirm(this._devicePath, true);
|
||||
else
|
||||
this._applet.agent_reply_confirm(this._devicePath, false);
|
||||
this.destroy();
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
function PinNotification() {
|
||||
this._init.apply(this, arguments);
|
||||
}
|
||||
|
||||
PinNotification.prototype = {
|
||||
__proto__: MessageTray.Notification.prototype,
|
||||
|
||||
_init: function(source, applet, device_path, name, long_name, numeric) {
|
||||
MessageTray.Notification.prototype._init.call(this,
|
||||
source,
|
||||
_("Bluetooth Agent"),
|
||||
_("Pairing request for %s").format(name),
|
||||
{ customContent: true });
|
||||
this.setResident(true);
|
||||
|
||||
this._applet = applet;
|
||||
this._devicePath = device_path;
|
||||
this._numeric = numeric;
|
||||
this.addBody(_("Device %s wants to pair with this computer").format(long_name));
|
||||
this.addBody(_("Please enter the PIN mentioned on the device."));
|
||||
|
||||
this._entry = new St.Entry();
|
||||
this._entry.connect('key-release-event', Lang.bind(this, function(entry, event) {
|
||||
let key = event.get_key_symbol();
|
||||
if (key == Clutter.KEY_Return) {
|
||||
this.emit('action-invoked', 'ok');
|
||||
return true;
|
||||
} else if (key == Clutter.KEY_Escape) {
|
||||
this.emit('action-invoked', 'cancel');
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}));
|
||||
this.addActor(this._entry);
|
||||
|
||||
this.addButton('ok', _("OK"));
|
||||
this.addButton('cancel', _("Cancel"));
|
||||
|
||||
this.connect('action-invoked', Lang.bind(this, function(self, action) {
|
||||
if (action == 'ok') {
|
||||
if (this._numeric)
|
||||
this._applet.agent_reply_passkey(this._devicePath, parseInt(this._entry.text));
|
||||
else
|
||||
this._applet.agent_reply_pincode(this._devicePath, this._entry.text);
|
||||
} else {
|
||||
if (this._numeric)
|
||||
this._applet.agent_reply_passkey(this._devicePath, -1);
|
||||
else
|
||||
this._applet.agent_reply_pincode(this._devicePath, null);
|
||||
}
|
||||
this.destroy();
|
||||
}));
|
||||
},
|
||||
|
||||
grabFocus: function(lockTray) {
|
||||
MessageTray.Notification.prototype.grabFocus.call(this, lockTray);
|
||||
global.stage.set_key_focus(this._entry);
|
||||
}
|
||||
}
|
@ -26,7 +26,10 @@ const UPDeviceType = {
|
||||
MOUSE: 5,
|
||||
KEYBOARD: 6,
|
||||
PDA: 7,
|
||||
PHONE: 8
|
||||
PHONE: 8,
|
||||
MEDIA_PLAYER: 9,
|
||||
TABLET: 10,
|
||||
COMPUTER: 11
|
||||
};
|
||||
|
||||
const UPDeviceState = {
|
||||
@ -68,15 +71,17 @@ Indicator.prototype = {
|
||||
this._deviceItems = [ ];
|
||||
this._hasPrimary = false;
|
||||
this._primaryDeviceId = null;
|
||||
|
||||
this._batteryItem = new PopupMenu.PopupMenuItem('');
|
||||
this._primaryPercentage = new St.Label();
|
||||
this._batteryItem.addActor(this._primaryPercentage, { align: St.Align.END });
|
||||
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');
|
||||
});
|
||||
@ -95,10 +100,26 @@ Indicator.prototype = {
|
||||
this._deviceSep.actor.hide();
|
||||
return;
|
||||
}
|
||||
let [device_id, device_type, summary, percentage, state, time] = device;
|
||||
let [device_id, device_type, icon, percentage, state, seconds] = device;
|
||||
if (device_type == UPDeviceType.BATTERY) {
|
||||
this._hasPrimary = true;
|
||||
this._batteryItem.label.text = summary;
|
||||
let time = Math.round(seconds / 60);
|
||||
let minutes = time % 60;
|
||||
let hours = Math.floor(time / 60);
|
||||
let timestring;
|
||||
if (time > 60) {
|
||||
if (minutes == 0) {
|
||||
timestring = Gettext.ngettext("%d hour remaining", "%d hours remaining", hours).format(hours);
|
||||
} else {
|
||||
/* TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining" */
|
||||
let template = _("%d %s %d %s remaining");
|
||||
|
||||
timestring = template.format (hours, Gettext.ngettext("hour", "hours", hours), minutes, Gettext.ngettext("minute", "minutes", minutes));
|
||||
}
|
||||
} else
|
||||
timestring = Gettext.ngettext("%d minute remaining", "%d minutes remaining", minutes).format(minutes);
|
||||
this._batteryItem.label.text = timestring;
|
||||
this._primaryPercentage.text = Math.round(percentage) + '%';
|
||||
this._batteryItem.actor.show();
|
||||
if (this._deviceItems.length > 0)
|
||||
this._deviceSep.actor.show();
|
||||
@ -109,6 +130,18 @@ Indicator.prototype = {
|
||||
}
|
||||
|
||||
this._primaryDeviceId = device_id;
|
||||
if (this._primaryDeviceId) {
|
||||
this._batteryItem.actor.reactive = true;
|
||||
this._batteryItem.actor.can_focus = true;
|
||||
this._batteryItem.connect('activate', function(item) {
|
||||
let p = new Shell.Process({ args: ['gnome-power-statistics', '--device', device_id] });
|
||||
p.run();
|
||||
});
|
||||
} else {
|
||||
// virtual device
|
||||
this._batteryItem.actor.reactive = false;
|
||||
this._batteryItem.actor.can_focus = false;
|
||||
}
|
||||
}));
|
||||
},
|
||||
|
||||
@ -181,24 +214,12 @@ DeviceItem.prototype = {
|
||||
_init: function(device) {
|
||||
PopupMenu.PopupBaseMenuItem.prototype._init.call(this);
|
||||
|
||||
let [device_id, device_type, summary, percentage, state, time] = device;
|
||||
let [device_id, device_type, icon, percentage, state, time] = device;
|
||||
|
||||
this._box = new St.BoxLayout({ style_class: 'popup-device-menu-item' });
|
||||
this._label = new St.Label({ text: summary });
|
||||
this._label = new St.Label({ text: this._deviceTypeToString(device_type) });
|
||||
|
||||
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,
|
||||
this._icon = new St.Icon({ gicon: Shell.util_icon_from_string(icon),
|
||||
icon_type: St.IconType.SYMBOLIC,
|
||||
style_class: 'popup-menu-icon' });
|
||||
|
||||
@ -206,21 +227,36 @@ DeviceItem.prototype = {
|
||||
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);
|
||||
this.addActor(percentLabel, { align: St.Align.END });
|
||||
},
|
||||
|
||||
_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';
|
||||
_deviceTypeToString: function(type) {
|
||||
switch (type) {
|
||||
case UPDeviceType.AC_POWER:
|
||||
return _("AC adapter");
|
||||
case UPDeviceType.BATTERY:
|
||||
return _("Laptop battery");
|
||||
case UPDeviceType.UPS:
|
||||
return _("UPS");
|
||||
case UPDeviceType.MONITOR:
|
||||
return _("Monitor");
|
||||
case UPDeviceType.MOUSE:
|
||||
return _("Mouse");
|
||||
case UPDeviceType.KEYBOARD:
|
||||
return _("Keyboard");
|
||||
case UPDeviceType.PDA:
|
||||
return _("PDA");
|
||||
case UPDeviceType.PHONE:
|
||||
return _("Cell phone");
|
||||
case UPDeviceType.MEDIA_PLAYER:
|
||||
return _("Media player");
|
||||
case UPDeviceType.TABLET:
|
||||
return _("Tablet");
|
||||
case UPDeviceType.COMPUTER:
|
||||
return _("Computer");
|
||||
default:
|
||||
return _("Unknown");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -38,12 +38,11 @@ Indicator.prototype = {
|
||||
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._outputTitle = new PopupMenu.PopupMenuItem(_("Volume"), { reactive: false });
|
||||
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._outputTitle);
|
||||
this.menu.addMenuItem(this._outputSlider);
|
||||
|
||||
this._separator = new PopupMenu.PopupSeparatorMenuItem();
|
||||
@ -52,12 +51,11 @@ Indicator.prototype = {
|
||||
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._inputTitle = new PopupMenu.PopupMenuItem(_("Microphone"), { reactive: false });
|
||||
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._inputTitle);
|
||||
this.menu.addMenuItem(this._inputSlider);
|
||||
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
@ -75,11 +73,18 @@ Indicator.prototype = {
|
||||
let currentVolume = this._output.volume;
|
||||
|
||||
if (direction == Clutter.ScrollDirection.DOWN) {
|
||||
let prev_muted = this._output.is_muted;
|
||||
this._output.volume = Math.max(0, currentVolume - VOLUME_MAX * VOLUME_ADJUSTMENT_STEP);
|
||||
if (this._output.volume < 1) {
|
||||
this._output.volume = 0;
|
||||
if (!prev_muted)
|
||||
this._output.change_is_muted(true);
|
||||
}
|
||||
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.change_is_muted(false);
|
||||
this._output.push_volume();
|
||||
}
|
||||
},
|
||||
@ -103,8 +108,7 @@ Indicator.prototype = {
|
||||
this._mutedChanged (null, null, '_output');
|
||||
this._volumeChanged (null, null, '_output');
|
||||
} else {
|
||||
this._outputSwitch.label.text = _("Volume: Muted");
|
||||
this._outputSwitch.setToggleState(false);
|
||||
this._outputSlider.setValue(0);
|
||||
this.setIcon('audio-volume-muted-symbolic');
|
||||
}
|
||||
},
|
||||
@ -124,7 +128,7 @@ Indicator.prototype = {
|
||||
this._volumeChanged (null, null, '_input');
|
||||
} else {
|
||||
this._separator.actor.hide();
|
||||
this._inputSwitch.actor.hide();
|
||||
this._inputTitle.actor.hide();
|
||||
this._inputSlider.actor.hide();
|
||||
}
|
||||
},
|
||||
@ -147,11 +151,11 @@ Indicator.prototype = {
|
||||
}
|
||||
if (showInput) {
|
||||
this._separator.actor.show();
|
||||
this._inputSwitch.actor.show();
|
||||
this._inputTitle.actor.show();
|
||||
this._inputSlider.actor.show();
|
||||
} else {
|
||||
this._separator.actor.hide();
|
||||
this._inputSwitch.actor.hide();
|
||||
this._inputTitle.actor.hide();
|
||||
this._inputSlider.actor.hide();
|
||||
}
|
||||
},
|
||||
@ -174,7 +178,17 @@ Indicator.prototype = {
|
||||
log ('Volume slider changed for %s, but %s does not exist'.format(property, property));
|
||||
return;
|
||||
}
|
||||
this[property].volume = value * VOLUME_MAX;
|
||||
let volume = value * VOLUME_MAX;
|
||||
let prev_muted = this[property].is_muted;
|
||||
if (volume < 1) {
|
||||
this[property].volume = 0;
|
||||
if (!prev_muted)
|
||||
this[property].change_is_muted(true);
|
||||
} else {
|
||||
this[property].volume = volume;
|
||||
if (prev_muted)
|
||||
this[property].change_is_muted(false);
|
||||
}
|
||||
this[property].push_volume();
|
||||
},
|
||||
|
||||
@ -182,20 +196,10 @@ Indicator.prototype = {
|
||||
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);
|
||||
let slider = this[property+'Slider'];
|
||||
slider.setValue(muted ? 0 : (this[property].volume / VOLUME_MAX));
|
||||
if (property == '_output') {
|
||||
if (muted)
|
||||
this.setIcon('audio-volume-muted');
|
||||
@ -206,17 +210,7 @@ Indicator.prototype = {
|
||||
|
||||
_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;
|
||||
}
|
||||
};
|
||||
|
@ -111,11 +111,11 @@ StatusMenuButton.prototype = {
|
||||
item = new PopupMenu.PopupSeparatorMenuItem();
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("My Account..."));
|
||||
item = new PopupMenu.PopupMenuItem(_("My Account"));
|
||||
item.connect('activate', Lang.bind(this, this._onMyAccountActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("System Settings..."));
|
||||
item = new PopupMenu.PopupMenuItem(_("System Settings"));
|
||||
item.connect('activate', Lang.bind(this, this._onPreferencesActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
@ -138,7 +138,7 @@ StatusMenuButton.prototype = {
|
||||
item = new PopupMenu.PopupSeparatorMenuItem();
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("Suspend"));
|
||||
item = new PopupMenu.PopupMenuItem(_("Suspend..."));
|
||||
item.connect('activate', Lang.bind(this, this._onShutDownActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
@ -153,12 +153,12 @@ StatusMenuButton.prototype = {
|
||||
|
||||
_onMyAccountActivate: function() {
|
||||
Main.overview.hide();
|
||||
this._spawn(['gnome-about-me']);
|
||||
this._spawn(['gnome-control-center', 'user-accounts']);
|
||||
},
|
||||
|
||||
_onPreferencesActivate: function() {
|
||||
Main.overview.hide();
|
||||
this._spawn(['gnome-control-center']);
|
||||
this._spawn(['gnome-control-center', '-o']);
|
||||
},
|
||||
|
||||
_onLockScreenActivate: function() {
|
||||
|
@ -3,6 +3,7 @@
|
||||
const DBus = imports.dbus;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Signals = imports.signals;
|
||||
const St = imports.gi.St;
|
||||
const Gettext = imports.gettext.domain('gnome-shell');
|
||||
@ -16,6 +17,7 @@ let contactManager;
|
||||
let channelDispatcher;
|
||||
|
||||
// See Notification.appendMessage
|
||||
const SCROLLBACK_IMMEDIATE_TIME = 60; // 1 minute
|
||||
const SCROLLBACK_RECENT_TIME = 15 * 60; // 15 minutes
|
||||
const SCROLLBACK_RECENT_LENGTH = 20;
|
||||
const SCROLLBACK_IDLE_LENGTH = 5;
|
||||
@ -42,6 +44,10 @@ subscribedContactsChannel[Telepathy.CHANNEL_NAME + '.ChannelType'] = Telepathy.C
|
||||
subscribedContactsChannel[Telepathy.CHANNEL_NAME + '.TargetHandleType'] = Telepathy.HandleType.LIST;
|
||||
subscribedContactsChannel[Telepathy.CHANNEL_NAME + '.TargetID'] = 'subscribe';
|
||||
|
||||
const NotificationDirection = {
|
||||
SENT: 'chat-sent',
|
||||
RECEIVED: 'chat-received'
|
||||
};
|
||||
|
||||
// This is GNOME Shell's implementation of the Telepathy 'Client'
|
||||
// interface. Specifically, the shell is a Telepathy 'Observer', which
|
||||
@ -469,8 +475,8 @@ Source.prototype = {
|
||||
}));
|
||||
}
|
||||
|
||||
this._notification = undefined;
|
||||
this._sentMessages = [];
|
||||
this._notification = new Notification(this);
|
||||
this._notification.setUrgency(MessageTray.Urgency.HIGH);
|
||||
|
||||
// Since we only create sources when receiving a message, this
|
||||
// is a plausible default
|
||||
@ -525,32 +531,23 @@ Source.prototype = {
|
||||
this.destroy();
|
||||
},
|
||||
|
||||
_ensureNotification: function() {
|
||||
_messageReceived: function(channel, id, timestamp, sender,
|
||||
type, flags, text) {
|
||||
this._notification.appendMessage(text, timestamp, NotificationDirection.RECEIVED);
|
||||
this.notify();
|
||||
},
|
||||
|
||||
// This is called for both messages we send from
|
||||
// our client and other clients as well.
|
||||
_messageSent: function(channel, timestamp, type, text) {
|
||||
this._notification.appendMessage(text, timestamp, NotificationDirection.SENT);
|
||||
},
|
||||
|
||||
notify: function() {
|
||||
if (!Main.messageTray.contains(this))
|
||||
Main.messageTray.add(this);
|
||||
|
||||
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, 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);
|
||||
}
|
||||
MessageTray.Source.prototype.notify.call(this, this._notification);
|
||||
},
|
||||
|
||||
respond: function(text) {
|
||||
@ -558,22 +555,22 @@ Source.prototype = {
|
||||
},
|
||||
|
||||
setPresence: function(presence, message) {
|
||||
let msg, notify;
|
||||
let msg, shouldNotify;
|
||||
|
||||
if (presence == Telepathy.ConnectionPresenceType.AVAILABLE) {
|
||||
msg = _("%s is online.").format(this.title);
|
||||
notify = (this._presence == Telepathy.ConnectionPresenceType.OFFLINE);
|
||||
shouldNotify = (this._presence == Telepathy.ConnectionPresenceType.OFFLINE);
|
||||
} else if (presence == Telepathy.ConnectionPresenceType.OFFLINE ||
|
||||
presence == Telepathy.ConnectionPresenceType.EXTENDED_AWAY) {
|
||||
presence = Telepathy.ConnectionPresenceType.OFFLINE;
|
||||
msg = _("%s is offline.").format(this.title);
|
||||
notify = (this._presence != Telepathy.ConnectionPresenceType.OFFLINE);
|
||||
shouldNotify = (this._presence != Telepathy.ConnectionPresenceType.OFFLINE);
|
||||
} else if (presence == Telepathy.ConnectionPresenceType.AWAY) {
|
||||
msg = _("%s is away.").format(this.title);
|
||||
notify = false;
|
||||
shouldNotify = false;
|
||||
} else if (presence == Telepathy.ConnectionPresenceType.BUSY) {
|
||||
msg = _("%s is busy.").format(this.title);
|
||||
notify = false;
|
||||
shouldNotify = false;
|
||||
} else
|
||||
return;
|
||||
|
||||
@ -582,10 +579,9 @@ Source.prototype = {
|
||||
if (message)
|
||||
msg += ' <i>(' + GLib.markup_escape_text(message, -1) + ')</i>';
|
||||
|
||||
this._ensureNotification();
|
||||
this._notification.appendMessage(msg, true, false);
|
||||
if (notify)
|
||||
this.notify(this._notification);
|
||||
this._notification.appendPresence(msg, shouldNotify);
|
||||
if (shouldNotify)
|
||||
this.notify();
|
||||
}
|
||||
};
|
||||
|
||||
@ -598,29 +594,47 @@ Notification.prototype = {
|
||||
|
||||
_init: function(source) {
|
||||
MessageTray.Notification.prototype._init.call(this, source, source.title, null, { customContent: true });
|
||||
this.setResident(true);
|
||||
|
||||
this._responseEntry = new St.Entry({ style_class: 'chat-response' });
|
||||
this._responseEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivated));
|
||||
this.setActionArea(this._responseEntry);
|
||||
|
||||
this._history = [];
|
||||
this._timestampTimeoutId = 0;
|
||||
},
|
||||
|
||||
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, sent ? 'chat-sent' : 'chat-received');
|
||||
appendMessage: function(text, timestamp, direction) {
|
||||
this.update(this.source.title, text, { customContent: true });
|
||||
this._append(text, direction, timestamp);
|
||||
},
|
||||
|
||||
_append: function(text, style) {
|
||||
_append: function(text, style, timestamp) {
|
||||
let currentTime = (Date.now() / 1000);
|
||||
if (!timestamp)
|
||||
timestamp = currentTime;
|
||||
let lastMessageTime = -1;
|
||||
if (this._history.length > 0)
|
||||
lastMessageTime = this._history[0].time;
|
||||
|
||||
// Reset the old message timeout
|
||||
if (this._timestampTimeoutId)
|
||||
Mainloop.source_remove(this._timestampTimeoutId);
|
||||
|
||||
let body = this.addBody(text);
|
||||
body.add_style_class_name(style);
|
||||
this.scrollTo(St.Side.BOTTOM);
|
||||
|
||||
let now = new Date().getTime() / 1000;
|
||||
this._history.unshift({ actor: body, time: now });
|
||||
this._history.unshift({ actor: body, time: timestamp, realMessage: true });
|
||||
|
||||
if (timestamp < currentTime - SCROLLBACK_IMMEDIATE_TIME)
|
||||
this._appendTimestamp();
|
||||
else
|
||||
// Schedule a new timestamp in SCROLLBACK_IMMEDIATE_TIME
|
||||
// from the timestamp of the message.
|
||||
this._timestampTimeoutId = Mainloop.timeout_add_seconds(
|
||||
SCROLLBACK_IMMEDIATE_TIME - (currentTime - timestamp),
|
||||
Lang.bind(this, this._appendTimestamp));
|
||||
|
||||
if (this._history.length > 1) {
|
||||
// Keep the scrollback from growing too long. If the most
|
||||
@ -629,17 +643,44 @@ Notification.prototype = {
|
||||
// SCROLLBACK_RECENT_LENGTH previous messages. Otherwise
|
||||
// we'll keep SCROLLBACK_IDLE_LENGTH messages.
|
||||
|
||||
let lastMessageTime = this._history[1].time;
|
||||
let maxLength = (lastMessageTime < now - SCROLLBACK_RECENT_TIME) ?
|
||||
let maxLength = (lastMessageTime < currentTime - SCROLLBACK_RECENT_TIME) ?
|
||||
SCROLLBACK_IDLE_LENGTH : SCROLLBACK_RECENT_LENGTH;
|
||||
if (this._history.length > maxLength) {
|
||||
let expired = this._history.splice(maxLength);
|
||||
let filteredHistory = this._history.filter(function(item) { return item.realMessage });
|
||||
if (filteredHistory.length > maxLength) {
|
||||
let lastMessageToKeep = filteredHistory[maxLength];
|
||||
let expired = this._history.splice(this._history.indexOf(lastMessageToKeep));
|
||||
for (let i = 0; i < expired.length; i++)
|
||||
expired[i].actor.destroy();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_appendTimestamp: function() {
|
||||
let lastMessageTime = this._history[0].time;
|
||||
let lastMessageDate = new Date(lastMessageTime * 1000);
|
||||
|
||||
/* Translators: this is a time format string followed by a date.
|
||||
If applicable, replace %X with a strftime format valid for your
|
||||
locale, without seconds. */
|
||||
// xgettext:no-c-format
|
||||
let timeLabel = this.addBody(lastMessageDate.toLocaleFormat(_("Sent at %X on %A")), false, { expand: true, x_fill: false, x_align: St.Align.END });
|
||||
timeLabel.add_style_class_name('chat-meta-message');
|
||||
this._history.unshift({ actor: timeLabel, time: lastMessageTime, realMessage: false });
|
||||
|
||||
this._timestampTimeoutId = 0;
|
||||
return false;
|
||||
},
|
||||
|
||||
appendPresence: function(text, asTitle) {
|
||||
if (asTitle)
|
||||
this.update(text, null, { customContent: true });
|
||||
else
|
||||
this.update(this.source.title, null, { customContent: true });
|
||||
let label = this.addBody(text);
|
||||
label.add_style_class_name('chat-meta-message');
|
||||
this._history.unshift({ actor: label, time: (Date.now() / 1000), realMessage: false});
|
||||
},
|
||||
|
||||
grabFocus: function(lockTray) {
|
||||
// Need to call the base class function first so that
|
||||
// it saves where the key focus was before.
|
||||
@ -652,6 +693,8 @@ Notification.prototype = {
|
||||
if (text == '')
|
||||
return;
|
||||
|
||||
// Telepathy sends out the Sent signal for us.
|
||||
// see Source._messageSent
|
||||
this._responseEntry.set_text('');
|
||||
this.source.respond(text);
|
||||
}
|
||||
|
@ -16,12 +16,12 @@ const SearchDisplay = imports.ui.searchDisplay;
|
||||
const Tweener = imports.ui.tweener;
|
||||
|
||||
|
||||
function SearchEntry() {
|
||||
this._init();
|
||||
function SearchEntry(focusBase) {
|
||||
this._init(focusBase);
|
||||
}
|
||||
|
||||
SearchEntry.prototype = {
|
||||
_init : function() {
|
||||
_init : function(focusBase) {
|
||||
this.actor = new St.Entry({ name: 'searchEntry',
|
||||
hint_text: _("Search your computer") });
|
||||
this.entry = this.actor.clutter_text;
|
||||
@ -45,11 +45,12 @@ SearchEntry.prototype = {
|
||||
this.pane = null;
|
||||
|
||||
this._capturedEventId = 0;
|
||||
this._focusBase = focusBase;
|
||||
},
|
||||
|
||||
_updateCursorVisibility: function() {
|
||||
let focus = global.stage.get_key_focus();
|
||||
if (focus == global.stage || focus == this.entry)
|
||||
if (focus == this._focusBase || focus == this.entry)
|
||||
this.entry.set_cursor_visible(true);
|
||||
else
|
||||
this.entry.set_cursor_visible(false);
|
||||
@ -81,8 +82,8 @@ SearchEntry.prototype = {
|
||||
|
||||
this.entry.text = '';
|
||||
|
||||
// Return focus to the stage
|
||||
global.stage.set_key_focus(null);
|
||||
// Return focus to the viewSelector
|
||||
global.stage.set_key_focus(this._focusBase);
|
||||
|
||||
this.entry.set_cursor_visible(true);
|
||||
this.entry.set_selection(0, 0);
|
||||
@ -117,11 +118,11 @@ SearchEntry.prototype = {
|
||||
}
|
||||
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
|
||||
// If 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)
|
||||
if (focus != this._focusBase && focus != this.entry)
|
||||
return false;
|
||||
|
||||
let sym = event.get_key_symbol();
|
||||
@ -231,22 +232,23 @@ ViewTab.prototype = {
|
||||
};
|
||||
|
||||
|
||||
function SearchTab() {
|
||||
this._init();
|
||||
function SearchTab(focusBase) {
|
||||
this._init(focusBase);
|
||||
}
|
||||
|
||||
SearchTab.prototype = {
|
||||
__proto__: BaseTab.prototype,
|
||||
|
||||
_init: function() {
|
||||
_init: function(focusBase) {
|
||||
this._searchActive = false;
|
||||
this._searchPending = false;
|
||||
this._keyPressId = 0;
|
||||
this._searchTimeoutId = 0;
|
||||
this._focusBase = focusBase;
|
||||
|
||||
this._searchSystem = new Search.SearchSystem();
|
||||
|
||||
this._searchEntry = new SearchEntry();
|
||||
this._searchEntry = new SearchEntry(focusBase);
|
||||
this._searchResults = new SearchDisplay.SearchResults(this._searchSystem);
|
||||
BaseTab.prototype._init.call(this,
|
||||
this._searchEntry.actor,
|
||||
@ -274,15 +276,15 @@ SearchTab.prototype = {
|
||||
BaseTab.prototype.show.call(this);
|
||||
|
||||
if (this._keyPressId == 0)
|
||||
this._keyPressId = global.stage.connect('key-press-event',
|
||||
Lang.bind(this, this._onKeyPress));
|
||||
this._keyPressId = this._searchEntry.entry.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._searchEntry.entry.disconnect(this._keyPressId);
|
||||
this._keyPressId = 0;
|
||||
}
|
||||
this._searchEntry.reset();
|
||||
@ -317,14 +319,7 @@ SearchTab.prototype = {
|
||||
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;
|
||||
|
||||
_onKeyPress: function(entry, event) {
|
||||
let symbol = event.get_key_symbol();
|
||||
if (symbol == Clutter.Up) {
|
||||
if (!this._searchActive)
|
||||
@ -393,7 +388,7 @@ ViewSelector.prototype = {
|
||||
this._tabs = [];
|
||||
this._activeTab = null;
|
||||
|
||||
this._searchTab = new SearchTab();
|
||||
this._searchTab = new SearchTab(this.actor);
|
||||
this._searchArea.set_child(this._searchTab.title);
|
||||
this._addTab(this._searchTab);
|
||||
|
||||
@ -559,14 +554,7 @@ ViewSelector.prototype = {
|
||||
}));
|
||||
},
|
||||
|
||||
_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;
|
||||
|
||||
_onKeyPress: function(actor, event) {
|
||||
let modifiers = Shell.get_event_state(event);
|
||||
let symbol = event.get_key_symbol();
|
||||
if (symbol == Clutter.Escape) {
|
||||
@ -600,8 +588,8 @@ ViewSelector.prototype = {
|
||||
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._keyPressId = this.actor.connect('key-press-event',
|
||||
Lang.bind(this, this._onKeyPress));
|
||||
|
||||
this._switchDefaultTab();
|
||||
},
|
||||
@ -610,7 +598,7 @@ ViewSelector.prototype = {
|
||||
this._searchTab.setFindAsYouType(false);
|
||||
|
||||
if (this._keyPressId > 0) {
|
||||
global.stage.disconnect(this._keyPressId);
|
||||
this.actor.disconnect(this._keyPressId);
|
||||
this._keyPressId = 0;
|
||||
}
|
||||
|
||||
|
@ -543,24 +543,34 @@ WindowManager.prototype = {
|
||||
},
|
||||
|
||||
actionMoveWorkspaceLeft: function() {
|
||||
let rtl = (St.Widget.get_default_direction() == St.TextDirection.RTL);
|
||||
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
|
||||
if (activeWorkspaceIndex > 0) {
|
||||
global.screen.get_workspace_by_index(activeWorkspaceIndex - 1).activate(global.get_current_time());
|
||||
if (!Main.overview.visible)
|
||||
this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.LEFT, activeWorkspaceIndex - 1);
|
||||
} else if (!Main.overview.visible) {
|
||||
this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.LEFT, activeWorkspaceIndex);
|
||||
}
|
||||
let indexToActivate = activeWorkspaceIndex;
|
||||
if (rtl && activeWorkspaceIndex < global.screen.n_workspaces - 1)
|
||||
indexToActivate++;
|
||||
else if (!rtl && activeWorkspaceIndex > 0)
|
||||
indexToActivate--;
|
||||
|
||||
if (indexToActivate != activeWorkspaceIndex)
|
||||
global.screen.get_workspace_by_index(indexToActivate).activate(global.get_current_time());
|
||||
|
||||
if (!Main.overview.visible)
|
||||
this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.LEFT, indexToActivate);
|
||||
},
|
||||
|
||||
actionMoveWorkspaceRight: function() {
|
||||
let rtl = (St.Widget.get_default_direction() == St.TextDirection.RTL);
|
||||
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
|
||||
if (activeWorkspaceIndex < global.screen.n_workspaces - 1) {
|
||||
global.screen.get_workspace_by_index(activeWorkspaceIndex + 1).activate(global.get_current_time());
|
||||
if (!Main.overview.visible)
|
||||
this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.RIGHT, activeWorkspaceIndex + 1);
|
||||
} else if (!Main.overview.visible) {
|
||||
this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.RIGHT, activeWorkspaceIndex);
|
||||
}
|
||||
let indexToActivate = activeWorkspaceIndex;
|
||||
if (rtl && activeWorkspaceIndex > 0)
|
||||
indexToActivate--;
|
||||
else if (!rtl && activeWorkspaceIndex < global.screen.n_workspaces - 1)
|
||||
indexToActivate++;
|
||||
|
||||
if (indexToActivate != activeWorkspaceIndex)
|
||||
global.screen.get_workspace_by_index(indexToActivate).activate(global.get_current_time());
|
||||
|
||||
if (!Main.overview.visible)
|
||||
this._workspaceSwitcherPopup.display(WorkspaceSwitcherPopup.RIGHT, indexToActivate);
|
||||
}
|
||||
};
|
||||
|
@ -132,7 +132,10 @@ WindowClone.prototype = {
|
||||
if (this.inDrag || this._zooming)
|
||||
// We'll fix up the stack after the drag/zooming
|
||||
return;
|
||||
this.actor.raise(this._stackAbove);
|
||||
if (this._stackAbove == null)
|
||||
this.actor.lower_bottom();
|
||||
else
|
||||
this.actor.raise(this._stackAbove);
|
||||
},
|
||||
|
||||
destroy: function () {
|
||||
@ -239,11 +242,13 @@ WindowClone.prototype = {
|
||||
this.emit('zoom-end');
|
||||
|
||||
this.actor.reparent(this._origParent);
|
||||
if (this._stackAbove == null)
|
||||
this.actor.lower_bottom();
|
||||
// If the workspace has been destroyed while we were reparented to
|
||||
// the stage, _stackAbove will be unparented and we can't raise our
|
||||
// actor above it - as we are bound to be destroyed anyway in that
|
||||
// case, we can skip that step
|
||||
if (this._stackAbove && this._stackAbove.get_parent())
|
||||
else if (this._stackAbove.get_parent())
|
||||
this.actor.raise(this._stackAbove);
|
||||
|
||||
[this.actor.x, this.actor.y] = this._zoomLocalOrig.getPosition();
|
||||
@ -275,8 +280,13 @@ WindowClone.prototype = {
|
||||
// We may not have a parent if DnD completed successfully, in
|
||||
// which case our clone will shortly be destroyed and replaced
|
||||
// with a new one on the target workspace.
|
||||
if (this.actor.get_parent() != null)
|
||||
this.actor.raise(this._stackAbove);
|
||||
if (this.actor.get_parent() != null) {
|
||||
if (this._stackAbove == null)
|
||||
this.actor.lower_bottom();
|
||||
else
|
||||
this.actor.raise(this._stackAbove);
|
||||
}
|
||||
|
||||
|
||||
this.emit('drag-end');
|
||||
}
|
||||
@ -386,7 +396,7 @@ WindowOverlay.prototype = {
|
||||
// These parameters are not the values retrieved with
|
||||
// get_transformed_position() and get_transformed_size(),
|
||||
// as windowClone might be moving.
|
||||
// See Workspace._fadeInWindowOverlay
|
||||
// See Workspace._showWindowOverlay
|
||||
updatePositions: function(cloneX, cloneY, cloneWidth, cloneHeight) {
|
||||
let button = this.closeButton;
|
||||
let title = this.title;
|
||||
@ -459,12 +469,10 @@ WindowOverlay.prototype = {
|
||||
|
||||
_idleToggleCloseButton: function() {
|
||||
this._idleToggleCloseId = 0;
|
||||
let [x, y, mask] = global.get_pointer();
|
||||
let actor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE,
|
||||
x, y);
|
||||
if (actor != this._windowClone.actor && actor != this.closeButton) {
|
||||
if (!this._windowClone.actor.has_pointer &&
|
||||
!this.closeButton.has_pointer)
|
||||
this.closeButton.hide();
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
@ -558,8 +566,6 @@ Workspace.prototype = {
|
||||
Lang.bind(this, this._windowRemoved));
|
||||
this._repositionWindowsId = 0;
|
||||
|
||||
this._visible = false;
|
||||
|
||||
this.leavingOverview = false;
|
||||
},
|
||||
|
||||
@ -873,8 +879,7 @@ Workspace.prototype = {
|
||||
|
||||
xCenter = xCenter * global.screen_width;
|
||||
|
||||
let rect = new Meta.Rectangle();
|
||||
metaWindow.get_outer_rect(rect);
|
||||
let rect = metaWindow.get_outer_rect();
|
||||
let buttonOuterHeight, captionHeight;
|
||||
let buttonOuterWidth = 0;
|
||||
|
||||
@ -941,6 +946,9 @@ Workspace.prototype = {
|
||||
let slots = this._computeAllWindowSlots(visibleClones.length);
|
||||
visibleClones = this._orderWindowsByMotionAndStartup(visibleClones, slots);
|
||||
|
||||
let currentWorkspace = global.screen.get_active_workspace();
|
||||
let isOnCurrentWorkspace = this.metaWorkspace == currentWorkspace;
|
||||
|
||||
for (let i = 0; i < visibleClones.length; i++) {
|
||||
let slot = slots[i];
|
||||
let clone = visibleClones[i];
|
||||
@ -957,7 +965,7 @@ Workspace.prototype = {
|
||||
|
||||
if (overlay)
|
||||
overlay.hide();
|
||||
if (animate) {
|
||||
if (animate && isOnCurrentWorkspace) {
|
||||
if (!metaWindow.showing_on_its_workspace()) {
|
||||
/* Hidden windows should fade in and grow
|
||||
* therefore we need to resize them now so they
|
||||
@ -987,20 +995,18 @@ Workspace.prototype = {
|
||||
time: Overview.ANIMATION_TIME,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: Lang.bind(this, function() {
|
||||
this._fadeInWindowOverlay(clone, overlay);
|
||||
this._showWindowOverlay(clone, overlay, true);
|
||||
})
|
||||
});
|
||||
} else {
|
||||
clone.actor.set_position(x, y);
|
||||
clone.actor.set_scale(scale, scale);
|
||||
this._fadeInWindowOverlay(clone, overlay);
|
||||
this._showWindowOverlay(clone, overlay, isOnCurrentWorkspace);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
syncStacking: function(stackIndices) {
|
||||
let desktopClone = this._windows[0];
|
||||
|
||||
let visibleClones = this._getVisibleClones();
|
||||
visibleClones.sort(function (a, b) { return stackIndices[a.metaWindow.get_stable_sequence()] - stackIndices[b.metaWindow.get_stable_sequence()]; });
|
||||
|
||||
@ -1008,7 +1014,7 @@ Workspace.prototype = {
|
||||
let clone = visibleClones[i];
|
||||
let metaWindow = clone.metaWindow;
|
||||
if (i == 0) {
|
||||
clone.setStackAbove(desktopClone.actor);
|
||||
clone.setStackAbove(null);
|
||||
} else {
|
||||
let previousClone = visibleClones[i - 1];
|
||||
clone.setStackAbove(previousClone.actor);
|
||||
@ -1016,7 +1022,7 @@ Workspace.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
_fadeInWindowOverlay: function(clone, overlay) {
|
||||
_showWindowOverlay: function(clone, overlay, fade) {
|
||||
if (clone.inDrag)
|
||||
return;
|
||||
|
||||
@ -1038,17 +1044,21 @@ Workspace.prototype = {
|
||||
|
||||
if (overlay) {
|
||||
overlay.updatePositions(cloneX, cloneY, cloneWidth, cloneHeight);
|
||||
overlay.fadeIn();
|
||||
if (fade)
|
||||
overlay.fadeIn();
|
||||
else
|
||||
overlay.show();
|
||||
}
|
||||
},
|
||||
|
||||
_fadeInAllOverlays: function() {
|
||||
_showAllOverlays: function() {
|
||||
let currentWorkspace = global.screen.get_active_workspace();
|
||||
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))
|
||||
continue;
|
||||
this._fadeInWindowOverlay(clone, overlay);
|
||||
this._showWindowOverlay(clone, overlay, this.metaWorkspace == currentWorkspace);
|
||||
}
|
||||
},
|
||||
|
||||
@ -1084,7 +1094,7 @@ Workspace.prototype = {
|
||||
|
||||
showWindowsOverlays: function() {
|
||||
this._windowOverlaysGroup.show();
|
||||
this._fadeInAllOverlays();
|
||||
this._showAllOverlays();
|
||||
},
|
||||
|
||||
hideWindowsOverlays: function() {
|
||||
@ -1201,12 +1211,12 @@ Workspace.prototype = {
|
||||
this.positionWindows(WindowPositionFlags.ANIMATE | WindowPositionFlags.ZOOM);
|
||||
else
|
||||
this.positionWindows(WindowPositionFlags.ZOOM);
|
||||
|
||||
this._visible = true;
|
||||
},
|
||||
|
||||
// Animates the return from Overview mode
|
||||
zoomFromOverview : function() {
|
||||
let currentWorkspace = global.screen.get_active_workspace();
|
||||
|
||||
this.leavingOverview = true;
|
||||
|
||||
this._hideAllOverlays();
|
||||
@ -1218,6 +1228,9 @@ Workspace.prototype = {
|
||||
this._overviewHiddenId = Main.overview.connect('hidden', Lang.bind(this,
|
||||
this._doneLeavingOverview));
|
||||
|
||||
if (this._metaWorkspace == currentWorkspace)
|
||||
return;
|
||||
|
||||
// Position and scale the windows.
|
||||
for (let i = 0; i < this._windows.length; i++) {
|
||||
let clone = this._windows[i];
|
||||
@ -1248,7 +1261,6 @@ Workspace.prototype = {
|
||||
}
|
||||
}
|
||||
|
||||
this._visible = false;
|
||||
},
|
||||
|
||||
destroy : function() {
|
||||
|
@ -89,6 +89,7 @@ WorkspaceSwitcherPopup.prototype = {
|
||||
let children = this._list.get_children();
|
||||
let childBox = new Clutter.ActorBox();
|
||||
|
||||
let rtl = (St.Widget.get_default_direction() == St.TextDirection.RTL);
|
||||
let x = box.x1;
|
||||
let prevChildBoxX2 = box.x1 - this._itemSpacing;
|
||||
for (let i = 0; i < children.length; i++) {
|
||||
@ -98,6 +99,11 @@ WorkspaceSwitcherPopup.prototype = {
|
||||
childBox.y2 = box.y1 + this._childHeight;
|
||||
x += this._childWidth + this._itemSpacing;
|
||||
prevChildBoxX2 = childBox.x2;
|
||||
if (rtl) {
|
||||
let ltrChildBoxX1 = childBox.x1;
|
||||
childBox.x1 = box.x2 - (childBox.x2 - box.x1);
|
||||
childBox.x2 = box.x2 - (ltrChildBoxX1 - box.x1);
|
||||
}
|
||||
children[i].allocate(childBox, flags);
|
||||
}
|
||||
},
|
||||
|
@ -14,7 +14,6 @@ const Main = imports.ui.main;
|
||||
const Overview = imports.ui.overview;
|
||||
const Tweener = imports.ui.tweener;
|
||||
const Workspace = imports.ui.workspace;
|
||||
const Search = imports.ui.search;
|
||||
|
||||
const WORKSPACE_SWITCH_TIME = 0.25;
|
||||
// Note that mutter has a compile-time limit of 36
|
||||
@ -35,7 +34,7 @@ function WorkspacesView(width, height, x, y, workspaces) {
|
||||
|
||||
WorkspacesView.prototype = {
|
||||
_init: function(width, height, x, y, workspaces) {
|
||||
this.actor = new St.Group({ style_class: 'workspaces single' });
|
||||
this.actor = new St.Group({ style_class: 'workspaces-view' });
|
||||
this.actor.set_clip(x, y, width, height);
|
||||
|
||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||
@ -645,6 +644,9 @@ WorkspacesView.prototype = {
|
||||
},
|
||||
|
||||
_onDragMotion: function(dragEvent) {
|
||||
if (Main.overview.animationInProgress)
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
|
||||
let primary = global.get_primary_monitor();
|
||||
|
||||
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
|
||||
@ -803,13 +805,15 @@ WorkspaceIndicatorPanel.prototype = {
|
||||
this._workspaces = null;
|
||||
},
|
||||
|
||||
// Allocate the box centered to the available area like StBin would do,
|
||||
// except that the full height is used even if the box is not actually
|
||||
// shown. This is a workaround, as the size of the workspace area is
|
||||
// determined once when entering the overview, so if it would take up
|
||||
// the indicator space in that case, it would overlap it later when
|
||||
// additional workspaces were added.
|
||||
_allocate: function(actor, box, flags) {
|
||||
let children = this._box.get_children();
|
||||
|
||||
// Don't display a single indicator
|
||||
if (children.length == 1)
|
||||
return;
|
||||
|
||||
let availWidth = box.x2 - box.x1;
|
||||
let availHeight = box.y2 - box.y1;
|
||||
let [minWidth, natWidth] = this._box.get_preferred_width(-1);
|
||||
@ -839,6 +843,12 @@ WorkspaceIndicatorPanel.prototype = {
|
||||
updateWorkspaces: function(workspaces) {
|
||||
this._workspaces = workspaces;
|
||||
|
||||
// Do not display a single indicator
|
||||
if (this._workspaces.length == 1)
|
||||
this.actor.set_skip_paint(this._box, true);
|
||||
else
|
||||
this.actor.set_skip_paint(this._box, false);
|
||||
|
||||
this._box.remove_all();
|
||||
for (let i = 0; i < this._workspaces.length; i++) {
|
||||
let actor = new St.Button({ style_class: 'workspace-indicator',
|
||||
@ -937,18 +947,45 @@ WorkspaceControlsContainer.prototype = {
|
||||
this._controls.connect('notify::hover',
|
||||
Lang.bind(this, this._onHoverChanged));
|
||||
|
||||
let workId = Main.initializeDeferredWork(this.actor,
|
||||
Lang.bind(this, function() {
|
||||
Main.overview.connect('item-drag-begin',
|
||||
Lang.bind(this, this.popOut));
|
||||
Main.overview.connect('item-drag-end',
|
||||
Lang.bind(this, this.popIn));
|
||||
Main.overview.connect('window-drag-begin',
|
||||
Lang.bind(this, this.popOut));
|
||||
Main.overview.connect('window-drag-end',
|
||||
Lang.bind(this, this.popIn));
|
||||
this._controls.x = this._poppedInX();
|
||||
}));
|
||||
this._itemDragBeginId = 0;
|
||||
this._itemDragEndId = 0;
|
||||
this._windowDragBeginId = 0;
|
||||
this._windowDragEndId = 0;
|
||||
},
|
||||
|
||||
show: function() {
|
||||
if (this._itemDragBeginId == 0)
|
||||
this._itemDragBeginId = Main.overview.connect('item-drag-begin',
|
||||
Lang.bind(this, this.popOut));
|
||||
if (this._itemDragEndId == 0)
|
||||
this._itemDragEndId = Main.overview.connect('item-drag-end',
|
||||
Lang.bind(this, this.popIn));
|
||||
if (this._windowDragBeginId == 0)
|
||||
this._windowDragBeginId = Main.overview.connect('window-drag-begin',
|
||||
Lang.bind(this, this.popOut));
|
||||
if (this._windowDragEndId == 0)
|
||||
this._windowDragEndId = Main.overview.connect('window-drag-end',
|
||||
Lang.bind(this, this.popIn));
|
||||
this._controls.x = this._poppedInX();
|
||||
},
|
||||
|
||||
hide: function() {
|
||||
if (this._itemDragBeginId > 0) {
|
||||
Main.overview.disconnect(this._itemDragBeginId);
|
||||
this._itemDragBeginId = 0;
|
||||
}
|
||||
if (this._itemEndBeginId > 0) {
|
||||
Main.overview.disconnect(this._itemDragEndId);
|
||||
this._itemDragEndId = 0;
|
||||
}
|
||||
if (this._windowDragBeginId > 0) {
|
||||
Main.overview.disconnect(this._windowDragBeginId);
|
||||
this._windowDragBeginId = 0;
|
||||
}
|
||||
if (this._windowDragEndId > 0) {
|
||||
Main.overview.disconnect(this._windowDragEndId);
|
||||
this._windowDragEndId = 0;
|
||||
}
|
||||
},
|
||||
|
||||
_getPreferredWidth: function(actor, forHeight, alloc) {
|
||||
@ -957,12 +994,19 @@ WorkspaceControlsContainer.prototype = {
|
||||
alloc.natural_size = natWidth;
|
||||
},
|
||||
|
||||
// Always request the full width ...
|
||||
_getPreferredHeight: function(actor, forWidth, alloc) {
|
||||
let [minHeight, natHeight] = this._controls.get_preferred_height(-1);
|
||||
alloc.min_size = minHeight;
|
||||
alloc.natural_size = natHeight;
|
||||
},
|
||||
|
||||
// ... even when the controls are popped in, to keep the width constant.
|
||||
// This is necessary as the workspace size is determined once before
|
||||
// entering the overview, when the controls are popped in - if the width
|
||||
// varied, the workspaces would be given too much width, and the controls
|
||||
// would be overlapped by the workspaces when popped out, rendering them
|
||||
// useless.
|
||||
_allocate: function(actor, box, flags) {
|
||||
let childBox = new Clutter.ActorBox();
|
||||
childBox.x1 = this._controls.x;
|
||||
@ -1052,7 +1096,9 @@ WorkspacesDisplay.prototype = {
|
||||
this._nWorkspacesNotifyId = 0;
|
||||
},
|
||||
|
||||
show: function() {
|
||||
show: function() {
|
||||
this._controlsContainer.show();
|
||||
|
||||
this._workspaces = [];
|
||||
for (let i = 0; i < global.screen.n_workspaces; i++) {
|
||||
let metaWorkspace = global.screen.get_workspace_by_index(i);
|
||||
@ -1099,6 +1145,8 @@ WorkspacesDisplay.prototype = {
|
||||
},
|
||||
|
||||
hide: function() {
|
||||
this._controlsContainer.hide();
|
||||
|
||||
if (this._nWorkspacesNotifyId > 0)
|
||||
global.screen.disconnect(this._nWorkspacesNotifyId);
|
||||
this.workspacesView.destroy();
|
||||
@ -1153,77 +1201,3 @@ WorkspacesDisplay.prototype = {
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(WorkspacesDisplay.prototype);
|
||||
|
||||
|
||||
function WindowSearchProvider() {
|
||||
this._init();
|
||||
}
|
||||
|
||||
WindowSearchProvider.prototype = {
|
||||
__proto__: Search.SearchProvider.prototype,
|
||||
|
||||
_init: function() {
|
||||
Search.SearchProvider.prototype._init.call(this, _("WINDOWS"));
|
||||
this._tracker = Shell.WindowTracker.get_default();
|
||||
},
|
||||
|
||||
_matchWindow: function(window, terms) {
|
||||
let title = window.get_title().toLowerCase();
|
||||
let mtype = Search.MatchType.NONE;
|
||||
for (let i = 0; i < terms.length; i ++) {
|
||||
let idx = title.indexOf(terms[i]);
|
||||
|
||||
if (idx < 0)
|
||||
return Search.MatchType.NONE;
|
||||
if (idx == 0)
|
||||
return Search.MatchType.PREFIX;
|
||||
}
|
||||
return Search.MatchType.SUBSTRING;
|
||||
},
|
||||
|
||||
_search: function(items, terms) {
|
||||
let prefixMatches = [];
|
||||
let substringMatches = [];
|
||||
for (let i = 0; i < items.length; i ++) {
|
||||
let item = items[i];
|
||||
let match = this._matchWindow(item, terms);
|
||||
|
||||
if (match == Search.MatchType.PREFIX)
|
||||
prefixMatches.push(item);
|
||||
else if (match == Search.MatchType.SUBSTRING)
|
||||
substringMatches.push(item);
|
||||
}
|
||||
return prefixMatches.concat(substringMatches);
|
||||
},
|
||||
|
||||
getInitialResultSet: function(terms) {
|
||||
let windows = global.get_window_actors();
|
||||
windows = windows.map(function(w) { return w.metaWindow });
|
||||
windows = windows.filter(this._tracker.is_window_interesting);
|
||||
|
||||
return this._search(windows, terms);
|
||||
},
|
||||
|
||||
getSubsearchResultSet: function(previousResults, terms) {
|
||||
return this._search(previousResults, terms);
|
||||
},
|
||||
|
||||
// FIXME: resultId is the metaWindow because there's no obvious lookup ID
|
||||
getResultMeta: function(resultId) {
|
||||
if (!resultId)
|
||||
return null;
|
||||
let app = this._tracker.get_window_app(resultId);
|
||||
return { 'id': resultId,
|
||||
'name': resultId.get_title(),
|
||||
'icon': app.create_icon_texture(Search.RESULT_ICON_SIZE) };
|
||||
},
|
||||
|
||||
activateResult: function(resultId) {
|
||||
Main.activateWindow(resultId);
|
||||
},
|
||||
|
||||
expandSearch: function(resultId) {
|
||||
if (Main.overview && Main.overview.viewSelector)
|
||||
Main.overview.viewSelector._switchDefaultTab();
|
||||
}
|
||||
};
|
||||
|
130
js/ui/xdndHandler.js
Normal file
130
js/ui/xdndHandler.js
Normal file
@ -0,0 +1,130 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Lang = imports.lang;
|
||||
const Shell = imports.gi.Shell;
|
||||
const Signals = imports.signals;
|
||||
const Mainloop = imports.mainloop;
|
||||
const DND = imports.ui.dnd;
|
||||
|
||||
function XdndHandler() {
|
||||
this._init();
|
||||
}
|
||||
|
||||
XdndHandler.prototype = {
|
||||
_init: function() {
|
||||
// Used to display a clone of the cursor window when the
|
||||
// window group is hidden (like it happens in the overview)
|
||||
this._cursorWindowClone = null;
|
||||
|
||||
// Used as a drag actor in case we don't have a cursor window clone
|
||||
this._dummy = new Clutter.Rectangle({ width: 1, height: 1, opacity: 0 });
|
||||
global.stage.add_actor(this._dummy);
|
||||
this._dummy.hide();
|
||||
|
||||
// Mutter delays the creation of the output window as long
|
||||
// as possible to avoid flicker. In case a plugin wants to
|
||||
// access it directly it has to connect to the stage's show
|
||||
// signal. (see comment in compositor.c:meta_compositor_manage_screen)
|
||||
global.stage.connect('show', function () {
|
||||
global.init_xdnd();
|
||||
return false;
|
||||
});
|
||||
|
||||
global.connect('xdnd-enter', Lang.bind(this, this._onEnter));
|
||||
global.connect('xdnd-position-changed', Lang.bind(this, this._onPositionChanged));
|
||||
global.connect('xdnd-leave', Lang.bind(this, this._onLeave));
|
||||
|
||||
this._windowGroupVisibilityHandlerId = 0;
|
||||
},
|
||||
|
||||
// Called when the user cancels the drag (i.e release the button)
|
||||
_onLeave: function() {
|
||||
if (this._windowGroupVisibilityHandlerId != 0) {
|
||||
Mainloop.source_remove(this._windowGroupVisibilityHandlerId);
|
||||
this._windowGroupVisibilityHandlerId = 0;
|
||||
}
|
||||
this.emit('drag-end');
|
||||
},
|
||||
|
||||
_onEnter: function() {
|
||||
this._windowGroupVisibilityHandlerId =
|
||||
global.window_group.connect('notify::visible',
|
||||
Lang.bind(this, this._onWindowGroupVisibilityChanged));
|
||||
|
||||
this.emit('drag-begin', global.get_current_time());
|
||||
},
|
||||
|
||||
_onWindowGroupVisibilityChanged: function() {
|
||||
if (!global.window_group.visible) {
|
||||
if (this._cursorWindowClone)
|
||||
return;
|
||||
|
||||
let windows = global.get_window_actors();
|
||||
let cursorWindow = windows[windows.length - 1];
|
||||
|
||||
// FIXME: more reliable way?
|
||||
if (!cursorWindow.is_override_redirect())
|
||||
return;
|
||||
|
||||
let constraint_x = new Clutter.BindConstraint({ coordinate : Clutter.BindCoordinate.X,
|
||||
source: cursorWindow});
|
||||
let constraint_y = new Clutter.BindConstraint({ coordinate : Clutter.BindCoordinate.Y,
|
||||
source: cursorWindow});
|
||||
|
||||
this._cursorWindowClone = new Clutter.Clone({ source: cursorWindow });
|
||||
global.overlay_group.add_actor(this._cursorWindowClone);
|
||||
Shell.util_set_hidden_from_pick(this._cursorWindowClone, true);
|
||||
|
||||
// Make sure that the clone has the same position as the source
|
||||
this._cursorWindowClone.add_constraint(constraint_x);
|
||||
this._cursorWindowClone.add_constraint(constraint_y);
|
||||
} else {
|
||||
if (this._cursorWindowClone)
|
||||
{
|
||||
this._cursorWindowClone.destroy();
|
||||
this._cursorWindowClone = null;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_onPositionChanged: function(obj, x, y) {
|
||||
let pickedActor = global.stage.get_actor_at_pos(Clutter.PickMode.ALL, x, y);
|
||||
|
||||
// Make sure that the cursor window is on top
|
||||
if (this._cursorWindowClone)
|
||||
this._cursorWindowClone.raise_top();
|
||||
|
||||
let dragEvent = {
|
||||
x: x,
|
||||
y: y,
|
||||
dragActor: this._cursorWindowClone ? this._cursorWindowClone : this._dummy,
|
||||
source: this,
|
||||
targetActor: pickedActor
|
||||
};
|
||||
|
||||
for (let i = 0; i < DND.dragMonitors.length; i++) {
|
||||
let motionFunc = DND.dragMonitors[i].dragMotion;
|
||||
if (motionFunc) {
|
||||
let result = motionFunc(dragEvent);
|
||||
if (result != DND.DragMotionResult.CONTINUE)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
while (pickedActor) {
|
||||
if (pickedActor._delegate && pickedActor._delegate.handleDragOver) {
|
||||
let result = pickedActor._delegate.handleDragOver(this,
|
||||
dragEvent.dragActor,
|
||||
x,
|
||||
y,
|
||||
global.get_current_time());
|
||||
if (result != DND.DragMotionResult.CONTINUE)
|
||||
return;
|
||||
}
|
||||
pickedActor = pickedActor.get_parent();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Signals.addSignalMethods(XdndHandler.prototype);
|
@ -8,6 +8,7 @@ el
|
||||
en_GB
|
||||
es
|
||||
et
|
||||
fa
|
||||
fi
|
||||
fr
|
||||
ga
|
||||
|
@ -1,8 +1,6 @@
|
||||
data/gnome-shell.desktop.in.in
|
||||
data/gnome-shell-clock-preferences.desktop.in.in
|
||||
data/org.gnome.shell.gschema.xml.in
|
||||
data/org.gnome.accessibility.magnifier.gschema.xml.in
|
||||
[type: gettext/glade]data/clock-preferences.ui
|
||||
js/ui/appDisplay.js
|
||||
js/ui/appFavorites.js
|
||||
js/ui/dash.js
|
||||
@ -15,10 +13,16 @@ js/ui/popupMenu.js
|
||||
js/ui/runDialog.js
|
||||
js/ui/statusMenu.js
|
||||
js/ui/status/accessibility.js
|
||||
js/ui/status/bluetooth.js
|
||||
js/ui/status/power.js
|
||||
js/ui/status/volume.js
|
||||
js/ui/telepathyClient.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-app-system.c
|
||||
src/shell-global.c
|
||||
src/shell-uri-util.c
|
||||
src/shell-util.c
|
||||
|
||||
|
567
po/de.po
567
po/de.po
@ -6,19 +6,21 @@
|
||||
#
|
||||
# Hendrik Brandt <heb@gnome-de.org>, 2009.
|
||||
# Hendrik Richter <hendrikr@gnome.org>, 2009.
|
||||
# Mario Blättermann <mariobl@gnome.org>, 2009, 2010.
|
||||
# Mario Blättermann <mariobl@gnome.org>, 2009, 2010, 2011.
|
||||
# Mario Klug <mario@klug.me>, 2010.
|
||||
# Christian Kirbach <Christian.Kirbach@googlemail.com>, 2009, 2010.
|
||||
# Jakob Kramer <jakob.kramer@gmx.de>, 2010.
|
||||
# Paul Seyfert <pseyfert@mathphys.fsk.uni-heidelberg.de>, 2010.
|
||||
# Christian Kirbach <Christian.Kirbach@googlemail.com>, 2009, 2010, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&component=general\n"
|
||||
"POT-Creation-Date: 2010-10-10 03:14+0000\n"
|
||||
"PO-Revision-Date: 2010-10-10 20:23+0200\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-01-01 23:21+0100\n"
|
||||
"PO-Revision-Date: 2011-01-01 16:25+0100\n"
|
||||
"Last-Translator: Christian Kirbach <Christian.Kirbach@googlemail.com>\n"
|
||||
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@ -105,12 +107,8 @@ msgstr ""
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr "Liste der Kennungen der Desktop-Dateien für bevorzugte Anwendungen"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
msgid "Overview workspace view mode"
|
||||
msgstr "Modus des Arbeitsflächen-Überblicks"
|
||||
|
||||
# Hier blicke ich überhaupt nicht durch.
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
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 "
|
||||
@ -130,22 +128,22 @@ msgstr ""
|
||||
"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."
|
||||
"»videorate ! theoraenc ! oggmux« lautet und die Aufnahme im Ogg-Theora-"
|
||||
"Format speichert."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
msgstr "Datum in der Uhr anzeigen"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Wochentag im Kalender anzeigen"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Zeit sekundengenau anzeigen"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
@ -153,7 +151,7 @@ msgstr ""
|
||||
"Programme, welche auf diese Bezeichner zutreffen, werden im Favoriten-"
|
||||
"Bereich angezeigt."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"The filename for recorded screencasts will be a unique filename based on the "
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
@ -164,7 +162,7 @@ msgstr ""
|
||||
"Dateiname sollte geändert werden, wenn Sie in einem anderen Containerformat "
|
||||
"aufnehmen."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
@ -173,19 +171,11 @@ msgstr ""
|
||||
"der GNOME-Shell aufgezeichnet werden soll, in Einzelbildern pro Sekunde."
|
||||
|
||||
# hmm Enkodieren oder Kodieren?
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "Die GStreamer-Weiterleitung zur Enkodierung des Screencasts"
|
||||
|
||||
#: ../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 ""
|
||||
"Die gewählte Ansicht des Arbeitsflächen-Überblicks. Mögliche Werte sind "
|
||||
"»single« (einfach) und »grid« (Raster)."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
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 "
|
||||
@ -198,7 +188,7 @@ msgstr ""
|
||||
"deaktivieren, um Ihre Privatsphäre zu schützen. Bitte beachten Sie, dass "
|
||||
"bereits gespeicherte Daten hiervon nicht beeinflusst werden."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
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"
|
||||
@ -211,7 +201,7 @@ msgstr ""
|
||||
"Format zu erhalten. Weitere Informationen finden Sie in der Handbuchseite zu "
|
||||
"strftime()."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
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\", "
|
||||
@ -221,18 +211,18 @@ 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 "
|
||||
"Schlüssel »show_date« und »show_seconds« ignoriert werden."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr "UUIDs der zu deaktivierenden Erweiterungen"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Legt fest, ob der Status der Anwendungsnutzung erfasst werden soll"
|
||||
|
||||
@ -266,14 +256,14 @@ msgid ""
|
||||
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."
|
||||
"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 ""
|
||||
@ -422,62 +412,46 @@ msgstr "_12-Stunden-Format"
|
||||
msgid "_24 hour format"
|
||||
msgstr "_24-Stunden-Format"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:155
|
||||
msgid "All"
|
||||
msgstr "Alle"
|
||||
|
||||
#: ../js/ui/appDisplay.js:236
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "ANWENDUNGEN"
|
||||
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
#: ../js/ui/appDisplay.js:266
|
||||
msgid "PREFERENCES"
|
||||
msgstr "EINSTELLUNGEN"
|
||||
|
||||
#: ../js/ui/appDisplay.js:648
|
||||
#: ../js/ui/appDisplay.js:563
|
||||
msgid "New Window"
|
||||
msgstr "Neues Fenster"
|
||||
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
#: ../js/ui/appDisplay.js:567
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Aus Favoriten entfernen"
|
||||
|
||||
#: ../js/ui/appDisplay.js:653
|
||||
#: ../js/ui/appDisplay.js:568
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Zu Favoriten hinzufügen"
|
||||
|
||||
#: ../js/ui/appDisplay.js:830
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Hier ablegen, um zu Favoriten hinzuzufügen"
|
||||
|
||||
#: ../js/ui/appFavorites.js:88
|
||||
#: ../js/ui/appFavorites.js:91
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s wurde zu Ihren Favoriten hinzugefügt"
|
||||
|
||||
#: ../js/ui/appFavorites.js:107
|
||||
#: ../js/ui/appFavorites.js:122
|
||||
#, c-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s wurde aus Ihren Favoriten entfernt"
|
||||
|
||||
#: ../js/ui/dash.js:142
|
||||
msgid "Find"
|
||||
msgstr "Suchen"
|
||||
#: ../js/ui/dash.js:27
|
||||
msgid "Remove"
|
||||
msgstr "Entfernen"
|
||||
|
||||
#: ../js/ui/dash.js:473
|
||||
msgid "Searching..."
|
||||
msgstr "Suche läuft …"
|
||||
|
||||
#: ../js/ui/dash.js:487
|
||||
msgid "No matching results."
|
||||
msgstr "Keine passenden Ergebnisse."
|
||||
|
||||
#. **** 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 "ORTE UND GERÄTE"
|
||||
|
||||
#. **** Documents ****
|
||||
#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
|
||||
#: ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "ZULETZT GEÖFFNETE DOKUMENTE"
|
||||
|
||||
@ -489,7 +463,9 @@ msgstr "Keine Erweiterungen installiert"
|
||||
msgid "Enabled"
|
||||
msgstr "Aktiviert"
|
||||
|
||||
#: ../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 "Deaktiviert"
|
||||
|
||||
@ -509,63 +485,71 @@ msgstr "Quelle zeigen"
|
||||
msgid "Web Page"
|
||||
msgstr "Webseite"
|
||||
|
||||
#: ../js/ui/overview.js:160
|
||||
#: ../js/ui/overview.js:96
|
||||
msgid "Undo"
|
||||
msgstr "Rückgängig"
|
||||
|
||||
#: ../js/ui/overview.js:158
|
||||
msgid "Windows"
|
||||
msgstr "Fenster"
|
||||
|
||||
#: ../js/ui/overview.js:161
|
||||
msgid "Applications"
|
||||
msgstr "Anwendungen"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:468
|
||||
#: ../js/ui/panel.js:474
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "%s beenden"
|
||||
|
||||
#: ../js/ui/panel.js:493
|
||||
#: ../js/ui/panel.js:499
|
||||
msgid "Preferences"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:579
|
||||
#: ../js/ui/panel.js:585
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a, %e. %b, %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:580
|
||||
#: ../js/ui/panel.js:586
|
||||
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
|
||||
#: ../js/ui/panel.js:590
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:585
|
||||
#: ../js/ui/panel.js:591
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:592
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a, %e. %b, %H:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:593
|
||||
#: ../js/ui/panel.js:599
|
||||
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:597
|
||||
#: ../js/ui/panel.js:603
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %H:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:598
|
||||
#: ../js/ui/panel.js:604
|
||||
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:743
|
||||
#: ../js/ui/panel.js:749
|
||||
msgid "Activities"
|
||||
msgstr "Aktivitäten"
|
||||
|
||||
@ -582,6 +566,10 @@ msgstr "Erneut versuchen"
|
||||
msgid "Connect to..."
|
||||
msgstr "Verbinden mit …"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:558
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "ORTE UND GERÄTE"
|
||||
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
@ -600,42 +588,332 @@ msgstr "Bitte geben Sie einen Befehl ein:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Ausführung von »%s« ist gescheitert:"
|
||||
|
||||
#: ../js/ui/statusMenu.js:91
|
||||
#: ../js/ui/statusMenu.js:101
|
||||
msgid "Available"
|
||||
msgstr "Verfügbar"
|
||||
|
||||
#: ../js/ui/statusMenu.js:95
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Busy"
|
||||
msgstr "Beschäftigt"
|
||||
|
||||
#: ../js/ui/statusMenu.js:99
|
||||
msgid "Invisible"
|
||||
msgstr "Unsichtbar"
|
||||
#: ../js/ui/statusMenu.js:114
|
||||
msgid "My Account"
|
||||
msgstr "Eigenes Konto"
|
||||
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Account Information..."
|
||||
msgstr "Benutzerinformationen …"
|
||||
#: ../js/ui/statusMenu.js:118
|
||||
msgid "System Settings"
|
||||
msgstr "Systemeinstellungen"
|
||||
|
||||
#: ../js/ui/statusMenu.js:110
|
||||
msgid "System Settings..."
|
||||
msgstr "Systemeinstellungen …"
|
||||
|
||||
#: ../js/ui/statusMenu.js:117
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
msgid "Lock Screen"
|
||||
msgstr "Bildschirm sperren"
|
||||
|
||||
#: ../js/ui/statusMenu.js:121
|
||||
#: ../js/ui/statusMenu.js:129
|
||||
msgid "Switch User"
|
||||
msgstr "Benutzer wechseln"
|
||||
|
||||
#: ../js/ui/statusMenu.js:126
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Log Out..."
|
||||
msgstr "Abmelden …"
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
msgid "Suspend..."
|
||||
msgstr "Bereitschaft …"
|
||||
|
||||
#: ../js/ui/statusMenu.js:145
|
||||
msgid "Shut Down..."
|
||||
msgstr "Ausschalten …"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:82
|
||||
msgid "Zoom"
|
||||
msgstr "Vergrößern"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "Bildschirmleser"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:91
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Bildschirmtastatur"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:94
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Visuelle Warnungen"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:97
|
||||
msgid "Sticky Keys"
|
||||
msgstr "Klebrige Tasten"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:100
|
||||
msgid "Slow Keys"
|
||||
msgstr "Tastenverzögerung"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:103
|
||||
msgid "Bounce Keys"
|
||||
msgstr "Springende Tasten"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:106
|
||||
msgid "Mouse Keys"
|
||||
msgstr "Maustasten"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:110
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "Einstellungen zur Barrierefreiheit"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:163
|
||||
msgid "High Contrast"
|
||||
msgstr "Hoher Kontrast"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:205
|
||||
msgid "Large Text"
|
||||
msgstr "Große Schrift"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:234
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:55
|
||||
msgid "Visibility"
|
||||
msgstr "Sichtbarkeit"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:69
|
||||
msgid "Send Files to Device..."
|
||||
msgstr "Dateien an Gerät senden …"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:70
|
||||
msgid "Setup a New Device..."
|
||||
msgstr "Ein neues Gerät einrichten …"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:94
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Bluetooth-Einstellungen"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:185
|
||||
msgid "Connection"
|
||||
msgstr "Verbindung"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:221
|
||||
msgid "Send Files..."
|
||||
msgstr "Dateien senden …"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:226
|
||||
msgid "Browse Files..."
|
||||
msgstr "Dateien durchsuchen …"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:235
|
||||
msgid "Error browsing device"
|
||||
msgstr "Fehler beim Durchsuchen des Geräts"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:236
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr ""
|
||||
"Das angesprochene Gerät kann nicht durchsucht werden. Der Fehler lautet »%s«"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:244
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Tastatureinstellungen"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:249
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Maus-Einstellungen"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:256 ../js/ui/status/volume.js:62
|
||||
msgid "Sound Settings"
|
||||
msgstr "Klangeinstellungen"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:327 ../js/ui/status/bluetooth.js:361
|
||||
#: ../js/ui/status/bluetooth.js:401 ../js/ui/status/bluetooth.js:434
|
||||
msgid "Bluetooth Agent"
|
||||
msgstr "Bluetooth-Agent"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:362
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Legitimierungsanfrage von %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "Gerät »%s« bittet um Zugriff auf den Dienst »%s«"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:370
|
||||
msgid "Always grant access"
|
||||
msgstr "Immer Zugriff gewähren"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:371
|
||||
msgid "Grant this time only"
|
||||
msgstr "Nur dieses Mal gewähren"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
msgid "Reject"
|
||||
msgstr "Abweisen"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:402
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Koppelungsbestätigung für %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:408 ../js/ui/status/bluetooth.js:442
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "Gerät »%s« möchte mit diesem Rechner gekoppelt werden"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:409
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr ""
|
||||
"Bitte bestätigen Sie, ob die PIN »%s« mit der des Gerätes übereinstimmt."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:411
|
||||
msgid "Matches"
|
||||
msgstr "Stimmt überein"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
msgid "Does not match"
|
||||
msgstr "Stimmt nicht überein"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:435
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Koppelungsanfrage für %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:443
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Bitte geben Sie die auf dem Gerät angezeigte PIN ein."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:459
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:460
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "Energieeinstellungen"
|
||||
|
||||
#: ../js/ui/status/power.js:112
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
msgstr[0] "%d Stunde verbleibend"
|
||||
msgstr[1] "%d Stunden verbleibend"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:115
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "%d %s %d %s verbleibend"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "Stunde"
|
||||
msgstr[1] "Stunden"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "Minute"
|
||||
msgstr[1] "Minuten"
|
||||
|
||||
#: ../js/ui/status/power.js:120
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "%d Minute verbleibend"
|
||||
msgstr[1] "%d Minuten verbleibend"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
msgid "AC adapter"
|
||||
msgstr "Netzteil"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
msgid "Laptop battery"
|
||||
msgstr "Laptop-Akku"
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
msgid "UPS"
|
||||
msgstr "Notstromversorgung"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
msgid "Monitor"
|
||||
msgstr "Bildschirm"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
msgid "Mouse"
|
||||
msgstr "Maus"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
msgid "Keyboard"
|
||||
msgstr "Tastatur"
|
||||
|
||||
#: ../js/ui/status/power.js:249
|
||||
msgid "PDA"
|
||||
msgstr "PDA"
|
||||
|
||||
#: ../js/ui/status/power.js:251
|
||||
msgid "Cell phone"
|
||||
msgstr "Mobiltelefon"
|
||||
|
||||
#: ../js/ui/status/power.js:253
|
||||
msgid "Media player"
|
||||
msgstr "Medienwiedergabegerät"
|
||||
|
||||
#: ../js/ui/status/power.js:255
|
||||
msgid "Tablet"
|
||||
msgstr "Tablet"
|
||||
|
||||
#: ../js/ui/status/power.js:257
|
||||
msgid "Computer"
|
||||
msgstr "Rechner"
|
||||
|
||||
#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
|
||||
msgid "Unknown"
|
||||
msgstr "Unbekannt"
|
||||
|
||||
#: ../js/ui/status/volume.js:41
|
||||
msgid "Volume"
|
||||
msgstr "Lautstärke"
|
||||
|
||||
#: ../js/ui/status/volume.js:54
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofon"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:560
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s ist angemeldet."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:565
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s ist abgemeldet."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:568
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "»%s« ist abwesend."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:571
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s ist beschäftigt."
|
||||
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:665
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Gesendet am %A um %X "
|
||||
|
||||
#: ../js/ui/viewSelector.js:26
|
||||
msgid "Search your computer"
|
||||
msgstr "Ihren Rechner durchsuchen"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
@ -646,60 +924,82 @@ msgstr "Start von %s ist abgeschlossen"
|
||||
msgid "'%s' is ready"
|
||||
msgstr "»%s« ist bereit"
|
||||
|
||||
#: ../js/ui/workspacesView.js:230
|
||||
#: ../js/ui/workspacesView.js:244
|
||||
msgid ""
|
||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr ""
|
||||
"Es kann keine weitere Arbeitsfläche hinzugefügt werden, weil das Maximum an "
|
||||
"Arbeitsflächen erreicht worden ist."
|
||||
|
||||
#: ../js/ui/workspacesView.js:247
|
||||
#: ../js/ui/workspacesView.js:260
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "Die erste Arbeitsfläche kann nicht entfernt werden."
|
||||
|
||||
#: ../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 Ausgang"
|
||||
msgstr[1] "%u Ausgänge"
|
||||
|
||||
#. 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 Eingang"
|
||||
msgstr[1] "%u Eingänge"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
msgid "System Sounds"
|
||||
msgstr "Systemklänge"
|
||||
|
||||
#: ../src/shell-global.c:1156
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Vor weniger als einer Minute"
|
||||
|
||||
#: ../src/shell-global.c:1200
|
||||
#: ../src/shell-global.c:1160
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "Vor %d Minute"
|
||||
msgstr[1] "Vor %d Minuten"
|
||||
|
||||
#: ../src/shell-global.c:1205
|
||||
#: ../src/shell-global.c:1165
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "Vor %d Stunde"
|
||||
msgstr[1] "Vor %d Stunden"
|
||||
|
||||
#: ../src/shell-global.c:1210
|
||||
#: ../src/shell-global.c:1170
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "Vor %d Tag"
|
||||
msgstr[1] "Vor %d Tagen"
|
||||
|
||||
#: ../src/shell-global.c:1215
|
||||
#: ../src/shell-global.c:1175
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "Vor %d Woche"
|
||||
msgstr[1] "Vor %d Wochen"
|
||||
|
||||
#: ../src/shell-uri-util.c:89
|
||||
#: ../src/shell-util.c:89
|
||||
msgid "Home Folder"
|
||||
msgstr "Persönlicher Ordner"
|
||||
|
||||
#. Translators: this is the same string as the one found in
|
||||
#. * nautilus
|
||||
#: ../src/shell-uri-util.c:104
|
||||
#: ../src/shell-util.c:104
|
||||
msgid "File System"
|
||||
msgstr "Dateisystem"
|
||||
|
||||
#: ../src/shell-uri-util.c:250
|
||||
#: ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "Suchen"
|
||||
|
||||
@ -708,11 +1008,42 @@ msgstr "Suchen"
|
||||
#. * example, "Trash: some-directory". It means that the
|
||||
#. * directory called "some-directory" is in the trash.
|
||||
#.
|
||||
#: ../src/shell-uri-util.c:300
|
||||
#: ../src/shell-util.c:300
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "What's using power..."
|
||||
#~ msgstr "Energieverbraucher …"
|
||||
|
||||
#~ msgid "Overview workspace view mode"
|
||||
#~ msgstr "Modus des Arbeitsflächen-Überblicks"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The selected workspace view mode in the overview. Supported values are "
|
||||
#~ "\"single\" and \"grid\"."
|
||||
#~ msgstr ""
|
||||
#~ "Die gewählte Ansicht des Arbeitsflächen-Überblicks. Mögliche Werte sind "
|
||||
#~ "»single« (einfach) und »grid« (Raster)."
|
||||
|
||||
#~ msgid "Drag here to add favorites"
|
||||
#~ msgstr "Hier ablegen, um zu Favoriten hinzuzufügen"
|
||||
|
||||
#~ msgid "Find"
|
||||
#~ msgstr "Suchen"
|
||||
|
||||
#~ msgid "Searching..."
|
||||
#~ msgstr "Suche läuft …"
|
||||
|
||||
#~ msgid "No matching results."
|
||||
#~ msgstr "Keine passenden Ergebnisse."
|
||||
|
||||
#~ msgid "Invisible"
|
||||
#~ msgstr "Unsichtbar"
|
||||
|
||||
#~ msgid "Account Information..."
|
||||
#~ msgstr "Benutzerinformationen …"
|
||||
|
||||
#~ msgid "ON"
|
||||
#~ msgstr "EIN"
|
||||
|
||||
@ -725,9 +1056,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "%H:%M"
|
||||
#~ msgstr "%H:%M"
|
||||
|
||||
#~ msgid "Applications"
|
||||
#~ msgstr "Anwendungen"
|
||||
|
||||
#~ msgid "Recent Documents"
|
||||
#~ msgstr "Zuletzt geöffnete Dokumente"
|
||||
|
||||
@ -746,9 +1074,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "SEARCH RESULTS"
|
||||
#~ msgstr "SUCHERGEBNISSE"
|
||||
|
||||
#~ msgid "Unknown"
|
||||
#~ msgstr "Unbekannt"
|
||||
|
||||
#~ msgid "Can't lock screen: %s"
|
||||
#~ msgstr "Bildschirm kann nicht gesperrt werden: %s"
|
||||
|
||||
|
664
po/es.po
664
po/es.po
@ -2,15 +2,16 @@
|
||||
# Copyright (C) 2009 gnome-shell's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the gnome-shell package.
|
||||
# Jorge González <jorgegonz@svn.gnome.org>, 2009, 2010.
|
||||
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2010, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell.master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&component=general\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"
|
||||
"POT-Creation-Date: 2011-01-04 16:17+0000\n"
|
||||
"PO-Revision-Date: 2011-01-05 12:38+0100\n"
|
||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||
"Language-Team: Español <gnome-es-list@gnome.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -25,14 +26,6 @@ msgstr "GNOME Shell"
|
||||
msgid "Window management and application launching"
|
||||
msgstr "Gestión de ventanas e inicio de aplicaciones"
|
||||
|
||||
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
|
||||
msgid "Clock"
|
||||
msgstr "Reloj"
|
||||
|
||||
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
|
||||
msgid "Customize the panel clock"
|
||||
msgstr "Personalizar el reloj del panel"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
||||
msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
@ -42,24 +35,20 @@ msgstr ""
|
||||
"usando el diálogo Alt+F2"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
msgid "Custom format of the clock"
|
||||
msgstr "Formato personalizado del reloj"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
msgstr ""
|
||||
"Activar las herramientas internas, útiles para desarrolladores y probadores, "
|
||||
"desde Alt+F2"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "Extensión de archivo que usar para almacenar los «screencast»"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "Tasa de fotogramas usada para grabar «screencast»."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should not be loaded."
|
||||
@ -67,43 +56,31 @@ msgstr ""
|
||||
"Las extensiones de GNOME Shell tienen una propiedad uuid; esta clave lista "
|
||||
"las extensiones que no se deben cargar."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr "Histórico del diálogo de comandos (Alt+F2)"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
#| msgid ""
|
||||
#| "If true and format is either \"12-hour\" or \"24-hour\", display date in "
|
||||
#| "the clock, in addition to time."
|
||||
msgid "If true, display date in the clock, in addition to time."
|
||||
msgstr "Si es cierta, muestra la fecha en el reloj, además de la hora."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||
msgid "Hour format"
|
||||
msgstr "Formato de la hora"
|
||||
#| msgid "If true, display the ISO week date in the calendar."
|
||||
msgid "If true, display seconds in time."
|
||||
msgstr "Si es cierta, muestra los segundos en la hora."
|
||||
|
||||
#: ../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 ""
|
||||
"Si es cierta y el formato es «12-horas» o «24-horas», muestra la fecha en el "
|
||||
"reloj, además de la hora."
|
||||
|
||||
#: ../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 ""
|
||||
"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."
|
||||
msgstr "Si es cierta muestra la fecha de semana ISO en el calendario."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr "Lista de ID de archivos de escritorio para las aplicaciones favoritas"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
msgid "Overview workspace view mode"
|
||||
msgstr "Modo de visualización de la vista previa del área de trabajo"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
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 "
|
||||
@ -115,29 +92,29 @@ 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."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
msgid "Show date in clock"
|
||||
msgstr "Mostrar la fecha en el reloj"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Mostrar la fecha de la semana en el calendario"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Mostrar la hora con segundos"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
@ -145,7 +122,7 @@ msgstr ""
|
||||
"Las aplicaciones correspondientes con esos identificadores se mostrarán en "
|
||||
"el área de favoritos."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
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 "
|
||||
@ -155,7 +132,7 @@ msgstr ""
|
||||
"basado en la fecha actual y usará esta extensión. Se debería cambiar al "
|
||||
"grabar en otro formato contenedor diferente."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
@ -163,19 +140,11 @@ msgstr ""
|
||||
"La tasa de fotogramas de la grabación resultante grabada por el grabador de "
|
||||
"«screencast» de GNOME Shell, en fotogramas por segundo."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "La tubería de gstreamer usada para codificar el «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 ""
|
||||
"El modo de vista del área de trabajo seleccionada en la vista general. Los "
|
||||
"valores soportados son «single» (sencillo) y «grid» (rejilla)."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
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 "
|
||||
@ -187,41 +156,11 @@ msgstr ""
|
||||
"mantienen de forma privada, puede querer desactivarlo por razones de "
|
||||
"privacidad. Note que haciéndolo no eliminará los datos ya guardados."
|
||||
|
||||
#: ../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 clave especifica el formato usado por el reloj del panel cuando la "
|
||||
"clave del formato se establece a «custom» (personalizado). Puede usar "
|
||||
"especificadores de conversión que entienda strftime() para obtener un "
|
||||
"formato específico. Consulte el manual de strftime() para obtener más "
|
||||
"información."
|
||||
|
||||
#: ../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 clave especifica el formato de la hora especificado por el reloj del "
|
||||
"panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 horas), "
|
||||
"«unix» y «custom» (personalizado).Si se establece a «unix» el reloj mostrará "
|
||||
"la hora en segundos desde la época (1 de enero de 1970). Si se establece a "
|
||||
"«custom» el reloj mostrará la hora según el formato especificado en la clave "
|
||||
"«custom_format». Note que si se establece a «unix» o «custom» se ignoran las "
|
||||
"claves «show_date» y «show_seconds»."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr "Uuid de las extensiones que desactivar"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr ""
|
||||
"Indica si se deben recolectar estadísticas acerca del uso de las aplicaciones"
|
||||
@ -383,90 +322,46 @@ 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"
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:155
|
||||
msgid "All"
|
||||
msgstr "Todas"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:2
|
||||
msgid "Clock Preferences"
|
||||
msgstr "Preferencias del reloj"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:3
|
||||
msgid "Panel Display"
|
||||
msgstr "Panel de visualización"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:4
|
||||
msgid "Show seco_nds"
|
||||
msgstr "Mostrar los segu_ndos"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:5
|
||||
msgid "Show the _date"
|
||||
msgstr "Mostrar la _fecha"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:6
|
||||
msgid "_12 hour format"
|
||||
msgstr "Formato _12 horas"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:7
|
||||
msgid "_24 hour format"
|
||||
msgstr "Formato _24 horas"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
#: ../js/ui/appDisplay.js:236
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "APLICACIONES"
|
||||
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
#: ../js/ui/appDisplay.js:266
|
||||
msgid "PREFERENCES"
|
||||
msgstr "PREFERENCIAS"
|
||||
|
||||
#: ../js/ui/appDisplay.js:647
|
||||
#: ../js/ui/appDisplay.js:563
|
||||
msgid "New Window"
|
||||
msgstr "Ventana nueva"
|
||||
|
||||
#: ../js/ui/appDisplay.js:651
|
||||
#: ../js/ui/appDisplay.js:567
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Quitar de los favoritos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
#: ../js/ui/appDisplay.js:568
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Añadir a los favoritos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:829
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Arrastrar aquí para añadir a los favoritos"
|
||||
|
||||
#: ../js/ui/appFavorites.js:88
|
||||
#: ../js/ui/appFavorites.js:91
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "Se ha añadido %s a sus favoritos."
|
||||
|
||||
#: ../js/ui/appFavorites.js:107
|
||||
#: ../js/ui/appFavorites.js:122
|
||||
#, c-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "Se ha quitado %s de sus favoritos."
|
||||
|
||||
#: ../js/ui/dash.js:142
|
||||
msgid "Find"
|
||||
msgstr "Buscar"
|
||||
#: ../js/ui/dash.js:27
|
||||
msgid "Remove"
|
||||
msgstr "Quitar"
|
||||
|
||||
#: ../js/ui/dash.js:473
|
||||
msgid "Searching..."
|
||||
msgstr "Buscando…"
|
||||
|
||||
#: ../js/ui/dash.js:487
|
||||
msgid "No matching results."
|
||||
msgstr "No se encontró ningún resultado coincidente."
|
||||
|
||||
#. **** 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 "LUGARES Y DISPOSITIVOS"
|
||||
|
||||
#. **** Documents ****
|
||||
#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
|
||||
#: ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "ELEMENTOS RECIENTES"
|
||||
|
||||
@ -500,63 +395,67 @@ msgstr "Ver fuente"
|
||||
msgid "Web Page"
|
||||
msgstr "Página web"
|
||||
|
||||
#: ../js/ui/overview.js:160
|
||||
#: ../js/ui/overview.js:96
|
||||
msgid "Undo"
|
||||
msgstr "Deshacer"
|
||||
|
||||
#: ../js/ui/overview.js:158
|
||||
msgid "Windows"
|
||||
msgstr "Ventanas"
|
||||
|
||||
#: ../js/ui/overview.js:161
|
||||
msgid "Applications"
|
||||
msgstr "Aplicaciones"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:469
|
||||
#: ../js/ui/panel.js:476
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Salir de %s"
|
||||
|
||||
#: ../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:580
|
||||
#: ../js/ui/panel.js:561
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %e de %b, %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:581
|
||||
#: ../js/ui/panel.js:562
|
||||
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:585
|
||||
#: ../js/ui/panel.js:566
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:586
|
||||
#: ../js/ui/panel.js:567
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:593
|
||||
#: ../js/ui/panel.js:574
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %e de %b, %H:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:594
|
||||
#: ../js/ui/panel.js:575
|
||||
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
|
||||
#: ../js/ui/panel.js:579
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %H:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:599
|
||||
#: ../js/ui/panel.js:580
|
||||
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
|
||||
#: ../js/ui/panel.js:725
|
||||
msgid "Activities"
|
||||
msgstr "Actividades"
|
||||
|
||||
@ -573,6 +472,10 @@ msgstr "Reintentar"
|
||||
msgid "Connect to..."
|
||||
msgstr "Conectar a…"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:558
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "LUGARES Y DISPOSITIVOS"
|
||||
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
@ -599,43 +502,38 @@ msgstr "Disponible"
|
||||
msgid "Busy"
|
||||
msgstr "Ocupado"
|
||||
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "Invisible"
|
||||
#: ../js/ui/statusMenu.js:114
|
||||
msgid "My Account"
|
||||
msgstr "Mi cuenta"
|
||||
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr "Mi cuenta…"
|
||||
#: ../js/ui/statusMenu.js:118
|
||||
msgid "System Settings"
|
||||
msgstr "Configuración del sistema"
|
||||
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
#| msgid "System Preferences..."
|
||||
msgid "System Settings..."
|
||||
msgstr "Ajustes del sistema…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
msgid "Lock Screen"
|
||||
msgstr "Bloquear la pantalla"
|
||||
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
#: ../js/ui/statusMenu.js:129
|
||||
msgid "Switch User"
|
||||
msgstr "Cambiar de usuario"
|
||||
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Log Out..."
|
||||
msgstr "Salir…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr "Suspender"
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
msgid "Suspend..."
|
||||
msgstr "Suspender…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
msgstr "Reiniciar…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
#: ../js/ui/statusMenu.js:145
|
||||
msgid "Shut Down..."
|
||||
msgstr "Apagar…"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:82
|
||||
msgid "Zoom"
|
||||
msgstr "Ampliación"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "Lector de pantalla"
|
||||
@ -672,13 +570,253 @@ msgstr "Preferencias del acceso universal"
|
||||
msgid "High Contrast"
|
||||
msgstr "Contraste alto"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
#: ../js/ui/status/accessibility.js:205
|
||||
msgid "Large Text"
|
||||
msgstr "<b>Texto:</b>"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "Ampliación"
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:234
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:55
|
||||
msgid "Visibility"
|
||||
msgstr "Visibilidad"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:69
|
||||
msgid "Send Files to Device..."
|
||||
msgstr "Enviar archivos al dispositivo…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:70
|
||||
msgid "Setup a New Device..."
|
||||
msgstr "Configurar un dispositivo nuevo…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:94
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Configuración de Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:185
|
||||
msgid "Connection"
|
||||
msgstr "Conexión"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:221
|
||||
msgid "Send Files..."
|
||||
msgstr "Enviar archivos…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:226
|
||||
msgid "Browse Files..."
|
||||
msgstr "Examinar archivos…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:235
|
||||
msgid "Error browsing device"
|
||||
msgstr "Error al examinar el dispositivo"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:236
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "No se puede examinar el dispositivo solicitado, el error es «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:244
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Configuración del teclado"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:249
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Ajustes del ratón…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:256 ../js/ui/status/volume.js:62
|
||||
msgid "Sound Settings"
|
||||
msgstr "Configuración del sonido"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:327 ../js/ui/status/bluetooth.js:361
|
||||
#: ../js/ui/status/bluetooth.js:401 ../js/ui/status/bluetooth.js:434
|
||||
msgid "Bluetooth Agent"
|
||||
msgstr "Agente Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:362
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Solicitud de autorización de %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "El dispositivo %s quiere acceder al servicio «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:370
|
||||
msgid "Always grant access"
|
||||
msgstr "Conceder acceso siempre"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:371
|
||||
msgid "Grant this time only"
|
||||
msgstr "Conceder sólo esta vez"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
msgid "Reject"
|
||||
msgstr "Rechazar"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:402
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Confirmación de emparejamiento para «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:408 ../js/ui/status/bluetooth.js:442
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "El dispositivo «%s» quiere emparejarse con este equipo"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:409
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Confirme que el PIN mostrado en «%s» coincide con el del dispositivo."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:411
|
||||
msgid "Matches"
|
||||
msgstr "Coincide"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
msgid "Does not match"
|
||||
msgstr "No coincide"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:435
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Solicitud de emparejamiento para «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:443
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Introduzca el PIN mencionado en el dispositivo."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:459
|
||||
msgid "OK"
|
||||
msgstr "Aceptar"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:460
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "Configuración de energía"
|
||||
|
||||
#: ../js/ui/status/power.js:112
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
msgstr[0] "Queda %d hora"
|
||||
msgstr[1] "Queda %d horas"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:115
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "Quedan %d %s %d %s"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "hora"
|
||||
msgstr[1] "horas"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "miuto"
|
||||
msgstr[1] "minutos"
|
||||
|
||||
#: ../js/ui/status/power.js:120
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "Queda %d minuto"
|
||||
msgstr[1] "Queda %d minutos"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
msgid "AC adapter"
|
||||
msgstr "Adaptador de corriente"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
msgid "Laptop battery"
|
||||
msgstr "Batería del portátil"
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
msgid "UPS"
|
||||
msgstr "SAI"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
msgid "Monitor"
|
||||
msgstr "Monitor"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
msgid "Mouse"
|
||||
msgstr "Ratón"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
msgid "Keyboard"
|
||||
msgstr "Teclado"
|
||||
|
||||
#: ../js/ui/status/power.js:249
|
||||
msgid "PDA"
|
||||
msgstr "PDA"
|
||||
|
||||
#: ../js/ui/status/power.js:251
|
||||
msgid "Cell phone"
|
||||
msgstr "Teléfono móvil"
|
||||
|
||||
#: ../js/ui/status/power.js:253
|
||||
msgid "Media player"
|
||||
msgstr "Reproductor multimedia"
|
||||
|
||||
#: ../js/ui/status/power.js:255
|
||||
msgid "Tablet"
|
||||
msgstr "Tableta"
|
||||
|
||||
#: ../js/ui/status/power.js:257
|
||||
msgid "Computer"
|
||||
msgstr "Equipo"
|
||||
|
||||
#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
|
||||
msgid "Unknown"
|
||||
msgstr "Desconocido"
|
||||
|
||||
#: ../js/ui/status/volume.js:41
|
||||
msgid "Volume"
|
||||
msgstr "Volumen"
|
||||
|
||||
#: ../js/ui/status/volume.js:54
|
||||
msgid "Microphone"
|
||||
msgstr "Micrófono"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:560
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s está conectado/a."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:565
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s está desconectado/a."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:568
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s está ausente."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:571
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s está ocupado/a."
|
||||
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:665
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Enviado a las %X el %A"
|
||||
|
||||
#: ../js/ui/viewSelector.js:26
|
||||
msgid "Search your computer"
|
||||
msgstr "Buscar en su equipo"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
@ -690,14 +828,14 @@ msgstr "%s finalizó su lanzamiento"
|
||||
msgid "'%s' is ready"
|
||||
msgstr "«%s» está preparado"
|
||||
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
#: ../js/ui/workspacesView.js:244
|
||||
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:246
|
||||
#: ../js/ui/workspacesView.js:260
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "No se puede quitar el primer área de trabajo."
|
||||
|
||||
@ -723,49 +861,49 @@ msgstr[1] "%u entradas"
|
||||
msgid "System Sounds"
|
||||
msgstr "Sonidos del sistema"
|
||||
|
||||
#: ../src/shell-global.c:1219
|
||||
#: ../src/shell-global.c:1156
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Hace menos de un minuto"
|
||||
|
||||
#: ../src/shell-global.c:1223
|
||||
#: ../src/shell-global.c:1160
|
||||
#, 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:1228
|
||||
#: ../src/shell-global.c:1165
|
||||
#, 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:1233
|
||||
#: ../src/shell-global.c:1170
|
||||
#, 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:1238
|
||||
#: ../src/shell-global.c:1175
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "Hace %d semana"
|
||||
msgstr[1] "Hace %d semanas"
|
||||
|
||||
#: ../src/shell-uri-util.c:89
|
||||
#: ../src/shell-util.c:89
|
||||
msgid "Home Folder"
|
||||
msgstr "Carpeta personal"
|
||||
|
||||
#. Translators: this is the same string as the one found in
|
||||
#. * nautilus
|
||||
#: ../src/shell-uri-util.c:104
|
||||
#: ../src/shell-util.c:104
|
||||
msgid "File System"
|
||||
msgstr "Sistema de archivos"
|
||||
|
||||
#: ../src/shell-uri-util.c:250
|
||||
#: ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "Buscar"
|
||||
|
||||
@ -774,11 +912,113 @@ msgstr "Buscar"
|
||||
#. * example, "Trash: some-directory". It means that the
|
||||
#. * directory called "some-directory" is in the trash.
|
||||
#.
|
||||
#: ../src/shell-uri-util.c:300
|
||||
#: ../src/shell-util.c:300
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Clock"
|
||||
#~ msgstr "Reloj"
|
||||
|
||||
#~ msgid "Customize the panel clock"
|
||||
#~ msgstr "Personalizar el reloj del panel"
|
||||
|
||||
#~ msgid "Custom format of the clock"
|
||||
#~ msgstr "Formato personalizado del reloj"
|
||||
|
||||
#~ msgid "Hour format"
|
||||
#~ msgstr "Formato de la hora"
|
||||
|
||||
#~ 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."
|
||||
|
||||
#~ 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 clave especifica el formato usado por el reloj del panel cuando la "
|
||||
#~ "clave del formato se establece a «custom» (personalizado). Puede usar "
|
||||
#~ "especificadores de conversión que entienda strftime() para obtener un "
|
||||
#~ "formato específico. Consulte el manual de strftime() para obtener más "
|
||||
#~ "información."
|
||||
|
||||
#~ 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 clave especifica el formato de la hora especificado por el reloj del "
|
||||
#~ "panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 horas), "
|
||||
#~ "«unix» y «custom» (personalizado).Si se establece a «unix» el reloj mostrará "
|
||||
#~ "la hora en segundos desde la época (1 de enero de 1970). Si se establece "
|
||||
#~ "a «custom» el reloj mostrará la hora según el formato especificado en la "
|
||||
#~ "clave «custom_format». Note que si se establece a «unix» o «custom» se "
|
||||
#~ "ignoran las claves «show_date» y «show_seconds»."
|
||||
|
||||
#~ msgid "Clock Format"
|
||||
#~ msgstr "Formato del reloj"
|
||||
|
||||
#~ msgid "Clock Preferences"
|
||||
#~ msgstr "Preferencias del reloj"
|
||||
|
||||
#~ msgid "Panel Display"
|
||||
#~ msgstr "Panel de visualización"
|
||||
|
||||
#~ msgid "Show seco_nds"
|
||||
#~ msgstr "Mostrar los segu_ndos"
|
||||
|
||||
#~ msgid "Show the _date"
|
||||
#~ msgstr "Mostrar la _fecha"
|
||||
|
||||
#~ msgid "_12 hour format"
|
||||
#~ msgstr "Formato _12 horas"
|
||||
|
||||
#~ msgid "_24 hour format"
|
||||
#~ msgstr "Formato _24 horas"
|
||||
|
||||
#~ msgid "Preferences"
|
||||
#~ msgstr "Preferencias"
|
||||
|
||||
#~ msgid "What's using power..."
|
||||
#~ msgstr "Lo que está usando energía…"
|
||||
|
||||
#~ msgid "Overview workspace view mode"
|
||||
#~ msgstr "Modo de visualización de la vista previa del área de trabajo"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The selected workspace view mode in the overview. Supported values are "
|
||||
#~ "\"single\" and \"grid\"."
|
||||
#~ msgstr ""
|
||||
#~ "El modo de vista del área de trabajo seleccionada en la vista general. "
|
||||
#~ "Los valores soportados son «single» (sencillo) y «grid» (rejilla)."
|
||||
|
||||
#~ msgid "Drag here to add favorites"
|
||||
#~ msgstr "Arrastrar aquí para añadir a los favoritos"
|
||||
|
||||
#~ msgid "Find"
|
||||
#~ msgstr "Buscar"
|
||||
|
||||
#~ msgid "Searching..."
|
||||
#~ msgstr "Buscando…"
|
||||
|
||||
#~ msgid "No matching results."
|
||||
#~ msgstr "No se encontró ningún resultado coincidente."
|
||||
|
||||
#~ msgid "Invisible"
|
||||
#~ msgstr "Invisible"
|
||||
|
||||
#~ msgid "Restart..."
|
||||
#~ msgstr "Reiniciar…"
|
||||
|
||||
#~ msgid "Account Information..."
|
||||
#~ msgstr "Información de la cuenta…"
|
||||
|
||||
@ -794,9 +1034,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "%H:%M"
|
||||
#~ msgstr "%H:%M"
|
||||
|
||||
#~ msgid "Applications"
|
||||
#~ msgstr "Aplicaciones"
|
||||
|
||||
#~ msgid "Recent Documents"
|
||||
#~ msgstr "Documentos recientes"
|
||||
|
||||
@ -815,9 +1052,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "SEARCH RESULTS"
|
||||
#~ msgstr "RESULTADOS DE LA BÚSQUEDA"
|
||||
|
||||
#~ msgid "Unknown"
|
||||
#~ msgstr "Desconocido"
|
||||
|
||||
#~ msgid "Can't lock screen: %s"
|
||||
#~ msgstr "No se puede bloquear la pantalla: %s"
|
||||
|
||||
|
450
po/et.po
450
po/et.po
@ -1,21 +1,26 @@
|
||||
# GNOME kesta eesti keele tõlge.
|
||||
# Estonian translation for gnome-shell.
|
||||
# Copyright (C) 2010 The Gnome Project
|
||||
#
|
||||
# Copyright (C) 2010, 2011 The Gnome Project
|
||||
#
|
||||
# This file is distributed under the same license as the gnome-shell package.
|
||||
# Mattias Põldaru <mahfiaz gmail com>, 2010.
|
||||
#
|
||||
# Mattias Põldaru <mahfiaz gmail com>, 2010, 2011.
|
||||
# Ivar Smolin <okul linux ee>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"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-16 19:24+0000\n"
|
||||
"PO-Revision-Date: 2010-10-17 17:16+0300\n"
|
||||
"Last-Translator: Mattias Põldaru <mahfiaz gmail com>\n"
|
||||
"POT-Creation-Date: 2011-01-04 16:17+0000\n"
|
||||
"PO-Revision-Date: 2011-01-09 11:20+0200\n"
|
||||
"Last-Translator: Ivar Smolin <okul@linux.ee>\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"
|
||||
"Language: et\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Poedit-Language: Estonian\n"
|
||||
"X-Poedit-Country: Estonia\n"
|
||||
@ -26,12 +31,6 @@ msgstr "GNOME kest"
|
||||
msgid "Window management and application launching"
|
||||
msgstr "Aknahaldur ja rakenduste käivitaja"
|
||||
|
||||
msgid "Clock"
|
||||
msgstr "Kell"
|
||||
|
||||
msgid "Customize the panel clock"
|
||||
msgstr "Paneelikella kohandamine"
|
||||
|
||||
msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
"dialog."
|
||||
@ -39,15 +38,12 @@ msgstr ""
|
||||
"Lubab ligipääsu sisemistele silumise ja monitoorimise tööriistadele Alt-F2 "
|
||||
"dialoogi kaudu."
|
||||
|
||||
msgid "Custom format of the clock"
|
||||
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 "Faililaiend, mida kasutatakse ekraanivideo salvestamisel"
|
||||
msgstr "Ekraanivideo salvestamisel kasutatav faililaiend"
|
||||
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "Ekraanivideo lindistamisel kasutatav kaadrikiirus."
|
||||
@ -56,36 +52,24 @@ msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should not be loaded."
|
||||
msgstr ""
|
||||
"GNOME Shelli laiendustel on omadus UUID. Selle võtmega määratakse "
|
||||
"laiendused, mida ei peaks laaditama."
|
||||
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr "Käsudialoogi (Alt-F2) ajalugu"
|
||||
|
||||
msgid "Hour format"
|
||||
msgstr "Tundide vorming"
|
||||
msgid "If true, display date in the clock, in addition to time."
|
||||
msgstr "Kui määratud, siis kuvatakse kellaaja kõrval ka kuupäeva."
|
||||
|
||||
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 seconds in time."
|
||||
msgstr "Kui määratud, siis kuvatakse aja juures ka sekundeid."
|
||||
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "Kui tõene, kuvatakse kalendris kuupäeva ISO nädalate järgi."
|
||||
msgstr "Kui määratud, kuvatakse kalendris kuupäeva ISO nädalavormingus."
|
||||
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr "Lemmikrakenduste töölauafailide ID-de loend"
|
||||
|
||||
msgid "Overview workspace view mode"
|
||||
msgstr ""
|
||||
|
||||
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 "
|
||||
@ -101,7 +85,7 @@ msgid "Show date in clock"
|
||||
msgstr "Kell näitab kuupäeva"
|
||||
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Kalendris näidatakse nädala kuupäeva"
|
||||
msgstr "Kalendris näidatakse kuupäeva nädalavormingus"
|
||||
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Kellaaega näidatakse sekunditega"
|
||||
@ -116,6 +100,10 @@ msgid ""
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
"a different container format."
|
||||
msgstr ""
|
||||
"Ekraanivideo jaoks kasutatav failinimi on unikaalne, see sisaldab "
|
||||
"salvestamise kuupäeva ja ka käesoleva võtmega määratud laiendit. Mõnda teise "
|
||||
"konteinervormingusse salvestades tuleks ka sellele vormingule vastav laiend "
|
||||
"määrata."
|
||||
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
@ -125,11 +113,6 @@ msgstr ""
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"The selected workspace view mode in the overview. Supported values are "
|
||||
"\"single\" and \"grid\"."
|
||||
msgstr ""
|
||||
|
||||
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 "
|
||||
@ -137,22 +120,6 @@ msgid ""
|
||||
"remove already saved data."
|
||||
msgstr ""
|
||||
|
||||
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 ""
|
||||
|
||||
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 ""
|
||||
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr "Keelatavate laienduste UUID-d"
|
||||
|
||||
@ -269,28 +236,10 @@ msgstr ""
|
||||
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 formaat"
|
||||
#. Translators: Filter to display all applications
|
||||
msgid "All"
|
||||
msgstr "Kõik"
|
||||
|
||||
msgid "Clock Preferences"
|
||||
msgstr "Kella eelistused"
|
||||
|
||||
msgid "Panel Display"
|
||||
msgstr "Paneelikuva"
|
||||
|
||||
msgid "Show seco_nds"
|
||||
msgstr "_Sekundeid näidatakse"
|
||||
|
||||
msgid "Show the _date"
|
||||
msgstr "_Kuupäeva näidatakse"
|
||||
|
||||
msgid "_12 hour format"
|
||||
msgstr "_12 tunni vorming"
|
||||
|
||||
msgid "_24 hour format"
|
||||
msgstr "_24 tunni vorming"
|
||||
|
||||
#. **** Applications ****
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "Rakendused"
|
||||
|
||||
@ -306,9 +255,6 @@ msgstr "Eemalda lemmikutest"
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Lisa lemmikutesse"
|
||||
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Lemmikute lisamiseks lohista need siia"
|
||||
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s lisati lemmikutesse."
|
||||
@ -317,22 +263,9 @@ msgstr "%s lisati lemmikutesse."
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s eemaldati lemmikutest."
|
||||
|
||||
msgid "Find"
|
||||
msgstr "Otsi"
|
||||
msgid "Remove"
|
||||
msgstr "Eemalda"
|
||||
|
||||
msgid "Searching..."
|
||||
msgstr "Otsimine..."
|
||||
|
||||
msgid "No matching results."
|
||||
msgstr "Tulemused puuduvad."
|
||||
|
||||
#. **** Places ****
|
||||
#. Translators: This is in the sense of locations for documents,
|
||||
#. network locations, etc.
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "Asukohad ja seadmed"
|
||||
|
||||
#. **** Documents ****
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "Hiljutised dokumendid"
|
||||
|
||||
@ -342,6 +275,8 @@ msgstr "Ühtegi laiendust pole paigaldatud"
|
||||
msgid "Enabled"
|
||||
msgstr "Lubatud"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
msgid "Disabled"
|
||||
msgstr "Keelatud"
|
||||
|
||||
@ -360,14 +295,17 @@ msgstr "Veebileht"
|
||||
msgid "Undo"
|
||||
msgstr "Võta tagasi"
|
||||
|
||||
msgid "Windows"
|
||||
msgstr "Aknad"
|
||||
|
||||
msgid "Applications"
|
||||
msgstr "Rakendused"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Lõpeta %s"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Eelistused"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
msgid "%a %b %e, %R:%S"
|
||||
@ -415,6 +353,9 @@ msgstr "Proovi uuesti"
|
||||
msgid "Connect to..."
|
||||
msgstr "Ühendumine..."
|
||||
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "Asukohad ja seadmed"
|
||||
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
@ -436,14 +377,11 @@ msgstr "Saadaval"
|
||||
msgid "Busy"
|
||||
msgstr "Hõivatud"
|
||||
|
||||
msgid "Invisible"
|
||||
msgstr "Nähtamatu"
|
||||
msgid "My Account"
|
||||
msgstr "Minu konto"
|
||||
|
||||
msgid "Account Information..."
|
||||
msgstr "Konto andmed..."
|
||||
|
||||
msgid "System Settings..."
|
||||
msgstr "Süsteemi sätted..."
|
||||
msgid "System Settings"
|
||||
msgstr "Süsteemi sätted"
|
||||
|
||||
msgid "Lock Screen"
|
||||
msgstr "Lukusta ekraan"
|
||||
@ -454,9 +392,234 @@ msgstr "Vaheta kasutajat"
|
||||
msgid "Log Out..."
|
||||
msgstr "Logi välja..."
|
||||
|
||||
msgid "Suspend..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Shut Down..."
|
||||
msgstr "Lülita välja..."
|
||||
|
||||
msgid "Zoom"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screen Reader"
|
||||
msgstr "Ekraanilugeja"
|
||||
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "Ekraaniklaviatuur"
|
||||
|
||||
msgid "Visual Alerts"
|
||||
msgstr "Visuaalsed märguanded"
|
||||
|
||||
msgid "Sticky Keys"
|
||||
msgstr "Kleepuvad klahvid"
|
||||
|
||||
msgid "Slow Keys"
|
||||
msgstr "Aeglased klahvid"
|
||||
|
||||
msgid "Bounce Keys"
|
||||
msgstr "Põrkeklahvid"
|
||||
|
||||
msgid "Mouse Keys"
|
||||
msgstr "Hiireklahvid"
|
||||
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "Universaalse ligipääsu sätted"
|
||||
|
||||
msgid "High Contrast"
|
||||
msgstr ""
|
||||
|
||||
msgid "Large Text"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
msgid "Visibility"
|
||||
msgstr "Nähtavus"
|
||||
|
||||
msgid "Send Files to Device..."
|
||||
msgstr "Failide saatmine seadmesse..."
|
||||
|
||||
msgid "Setup a New Device..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Bluetoothi sätted"
|
||||
|
||||
msgid "Connection"
|
||||
msgstr "Ühendus"
|
||||
|
||||
msgid "Send Files..."
|
||||
msgstr "Failide saatmine..."
|
||||
|
||||
msgid "Browse Files..."
|
||||
msgstr "Failide sirvimine..."
|
||||
|
||||
msgid "Error browsing device"
|
||||
msgstr "Viga seadme sirvimisel"
|
||||
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr ""
|
||||
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Klaviatuurisätted"
|
||||
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Hiiresätted"
|
||||
|
||||
msgid "Sound Settings"
|
||||
msgstr "Helisätted"
|
||||
|
||||
msgid "Bluetooth Agent"
|
||||
msgstr "Bluetoothi agent"
|
||||
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Autoriseerimise päring seadmelt %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "Seade %s soovib ligipääsu teenusele '%s'"
|
||||
|
||||
msgid "Always grant access"
|
||||
msgstr "Luba alati"
|
||||
|
||||
msgid "Grant this time only"
|
||||
msgstr "Luba ainult seekord"
|
||||
|
||||
msgid "Reject"
|
||||
msgstr "Lükka tagasi"
|
||||
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Paardumise kinnitus seadmele %s"
|
||||
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "Seade '%s' tahab selle arvutiga paarduda"
|
||||
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Palun kontrolli, et PIN-kood '%s' kattuks seadme parooliga."
|
||||
|
||||
msgid "Matches"
|
||||
msgstr "Kattub"
|
||||
|
||||
msgid "Does not match"
|
||||
msgstr "Ei kattu"
|
||||
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Seadmega %s paardumise päring"
|
||||
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Palun sisesta seadme poolt öeldav PIN-kood."
|
||||
|
||||
msgid "OK"
|
||||
msgstr "Olgu"
|
||||
|
||||
msgid "Cancel"
|
||||
msgstr "Katkesta"
|
||||
|
||||
msgid "Power Settings"
|
||||
msgstr "Toitesätted..."
|
||||
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
msgstr[0] "jäänud %d tund"
|
||||
msgstr[1] "jäänud %d tundi"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "jäänud %d %s ja %d %s"
|
||||
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "tund"
|
||||
msgstr[1] "tundi"
|
||||
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "minut"
|
||||
msgstr[1] "minutit"
|
||||
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "jäänud %d minut"
|
||||
msgstr[1] "jäänud %d minutit"
|
||||
|
||||
msgid "AC adapter"
|
||||
msgstr "Võrgutoite adapter"
|
||||
|
||||
msgid "Laptop battery"
|
||||
msgstr "Sülearvuti aku"
|
||||
|
||||
msgid "UPS"
|
||||
msgstr "UPS"
|
||||
|
||||
msgid "Monitor"
|
||||
msgstr "Monitor"
|
||||
|
||||
msgid "Mouse"
|
||||
msgstr "Hiir"
|
||||
|
||||
msgid "Keyboard"
|
||||
msgstr "Klaviatuur"
|
||||
|
||||
msgid "PDA"
|
||||
msgstr "Elektronmärkmik"
|
||||
|
||||
msgid "Cell phone"
|
||||
msgstr "Mobiiltelefon"
|
||||
|
||||
msgid "Media player"
|
||||
msgstr "Meediaesitaja"
|
||||
|
||||
msgid "Tablet"
|
||||
msgstr "Graafikalaud"
|
||||
|
||||
msgid "Computer"
|
||||
msgstr "Arvuti"
|
||||
|
||||
msgid "Unknown"
|
||||
msgstr "Tundmatu"
|
||||
|
||||
msgid "Volume"
|
||||
msgstr "Helivaljus"
|
||||
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofon"
|
||||
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s on ühendatud."
|
||||
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s on ühendamata."
|
||||
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s on eemal."
|
||||
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s on hõivatud."
|
||||
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Saadetud: %a, kell %X"
|
||||
|
||||
msgid "Search your computer"
|
||||
msgstr ""
|
||||
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
msgstr "%s läks käima"
|
||||
@ -472,6 +635,25 @@ msgstr "Pole võimalik uut tööala lisada, kuna tööalade piir on saavutatud."
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "Esimest tööala pole võimalik eemaldada."
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "System Sounds"
|
||||
msgstr "Süsteemi helid"
|
||||
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Vähem kui minuti eest"
|
||||
|
||||
@ -518,3 +700,57 @@ msgstr "Otsing"
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Clock"
|
||||
#~ msgstr "Kell"
|
||||
|
||||
#~ msgid "Customize the panel clock"
|
||||
#~ msgstr "Paneelikella kohandamine"
|
||||
|
||||
#~ msgid "Custom format of the clock"
|
||||
#~ msgstr "Kellaaaja kohandatud vorming"
|
||||
|
||||
#~ msgid "Hour format"
|
||||
#~ msgstr "Tundide vorming"
|
||||
|
||||
#~ msgid "Clock Format"
|
||||
#~ msgstr "Kellaaja vorming"
|
||||
|
||||
#~ msgid "Clock Preferences"
|
||||
#~ msgstr "Kella eelistused"
|
||||
|
||||
#~ msgid "Panel Display"
|
||||
#~ msgstr "Paneelikuva"
|
||||
|
||||
#~ msgid "Show seco_nds"
|
||||
#~ msgstr "_Sekundeid näidatakse"
|
||||
|
||||
#~ msgid "Show the _date"
|
||||
#~ msgstr "_Kuupäeva näidatakse"
|
||||
|
||||
#~ msgid "_12 hour format"
|
||||
#~ msgstr "_12 tunni vorming"
|
||||
|
||||
#~ msgid "_24 hour format"
|
||||
#~ msgstr "_24 tunni vorming"
|
||||
|
||||
#~ msgid "Preferences"
|
||||
#~ msgstr "Eelistused"
|
||||
|
||||
#~ msgid "Drag here to add favorites"
|
||||
#~ msgstr "Lemmikute lisamiseks lohista need siia"
|
||||
|
||||
#~ msgid "Find"
|
||||
#~ msgstr "Otsi"
|
||||
|
||||
#~ msgid "Searching..."
|
||||
#~ msgstr "Otsimine..."
|
||||
|
||||
#~ msgid "No matching results."
|
||||
#~ msgstr "Tulemused puuduvad."
|
||||
|
||||
#~ msgid "Invisible"
|
||||
#~ msgstr "Nähtamatu"
|
||||
|
||||
#~ msgid "Account Information..."
|
||||
#~ msgstr "Konto andmed..."
|
||||
|
730
po/fa.po
Normal file
730
po/fa.po
Normal file
@ -0,0 +1,730 @@
|
||||
# Persian translation for gnome-shell.
|
||||
# Copyright (C) 2010 Iranian Free Software Users Group (IFSUG.org)translation team.
|
||||
# This file is distributed under the same license as the gnome-shell package.
|
||||
# Arash Mousavi <mousavi.arash@gmail.com>, 2010.
|
||||
# Mahyar Moghimi <mahyar.moqimi@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-12-01 18:12+0000\n"
|
||||
"PO-Revision-Date: 2010-12-03 13:24+0330\n"
|
||||
"Last-Translator: Mahyar Moghimi <mahyar.moqimi@gmail.com>\n"
|
||||
"Language-Team: Persian <translate@ifsug.org>\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"
|
||||
"X-Poedit-Language: Persian\n"
|
||||
"X-Poedit-Country: IRAN\n"
|
||||
"X-Poedit-SourceCharset: utf-8\n"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||
msgid "GNOME Shell"
|
||||
msgstr "پوستهی گنوم"
|
||||
|
||||
#: ../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 "پسوند پروندهی قابل استفاده برای ذخیره تصویربرداری از صفحهنمایش"
|
||||
|
||||
#: ../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 "افزونههای پوستهی گنوم مشخصهی 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 "اگر روی «درست» تنظیم شود و قالب ساعت هر یک از حالتهای «۱۲ ساعته» و یا «۲۴ ساعته» باشد، تاریخ را در کنار ساعت نشان میدهد."
|
||||
|
||||
#: ../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 "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:14
|
||||
msgid "Show date in clock"
|
||||
msgstr "نمایش تاریخ در ساعت"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "نمایش هفته در تقویم"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show time with seconds"
|
||||
msgstr "نمایش ساعت همراه با ثانیه"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid "The applications corresponding to these identifiers will be displayed in the favorites area."
|
||||
msgstr "برنامههای مشابه این شناسهها در قسمت مورد پسندها نمایش داده میشود."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid "The filename for recorded screencasts will be a unique filename based on the current date, and use this extension. It should be changed when recording to a different container format."
|
||||
msgstr "نام پروندهی ضبط شده برای تصویربرداری از صفحهنمایش یکتا و براساس تاریخ جاری خواهد بود و از این افزونه استفاده خواهد کرد. اگر در زمان ضبط از قالب دیگری استفاده کنید باید تغییر کند."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid "The framerate of the resulting screencast recordered by GNOME Shell's screencast recorder in frames-per-second."
|
||||
msgstr "سرعت فریم حاصل از تصویربرداری از صفحه نمایش با استفاده از ضبط کننده نمایشگر پوستهی گنوم بر اساس فریم بر ثانیه"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "مجرای ارتباطی gstreamer برای کدگذاری تصویربرداری از صفحه نمایش"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
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:22
|
||||
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 "این کلید قالب ساعتِ قاب را هنگامی که بر روی «سفارشی» تنظیم شده باشد تعیین میکند. شما میتوانید از مبدلهای قابل فهم در تابع ()strftime برای اختصاص قالب مشخص استفاده کنید. برای اطلاعات بیشتر مستندات ()strftime را مشاهده کنید."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
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 "این کلید قالب ساعت را در تابلو مشخص میکند. مقادیر ممکن عبارتند از: «۱۲ ساعته»، «۲۴ ساعته»، «یونیکس» و «سفارشی». چنانچه بر روی «یونیکس» تنظیم گردد، ساعت زمان را به ثانیه از زمان مبدا تاریخ نشان میدهد، برای مثال ۰۱-۰۱-۱۹۷۰. اگر بر روی «سفارشی» تنظیم شود ساعت زمان را با توجه به قالب معرفی شده در کلید custom_format نمایش خواهد داد. توجه کنید که چنانچه بر روی یکی از حالتهای «یونیکس» و یا «سفارشی» تنظیم شود، کلیدهای show_date و show_seconds نادیده گرفته خواهند شد."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr "شناسههای Uuid مربوط به افزونهها که غیرفعال شود"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
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 "قالب ساعت"
|
||||
|
||||
#: ../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 "فالب _۱۲ ساعته"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:7
|
||||
msgid "_24 hour format"
|
||||
msgstr "قالب _۲۴ ساعته"
|
||||
|
||||
#: ../js/ui/appDisplay.js:215
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "برنامهها"
|
||||
|
||||
#: ../js/ui/appDisplay.js:245
|
||||
msgid "PREFERENCES"
|
||||
msgstr "ترجیحات"
|
||||
|
||||
#: ../js/ui/appDisplay.js:542
|
||||
msgid "New Window"
|
||||
msgstr "پنجرهی جدید"
|
||||
|
||||
#: ../js/ui/appDisplay.js:546
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "حذف از مورد پسندها"
|
||||
|
||||
#: ../js/ui/appDisplay.js:547
|
||||
msgid "Add to Favorites"
|
||||
msgstr "اضافه کردن به مورد پسندها"
|
||||
|
||||
#: ../js/ui/appFavorites.js:91
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "مورد %s به مورد پسندهای شما اضافه شد."
|
||||
|
||||
#: ../js/ui/appFavorites.js:122
|
||||
#, c-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "مورد %s ازمورد پسندهای شما حذف شد."
|
||||
|
||||
#: ../js/ui/dash.js:27
|
||||
msgid "Remove"
|
||||
msgstr "حذف"
|
||||
|
||||
#: ../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:112
|
||||
msgid "Undo"
|
||||
msgstr "برگردان"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:470
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "خروج از %s"
|
||||
|
||||
#: ../js/ui/panel.js:495
|
||||
msgid "Preferences"
|
||||
msgstr "ترجیحات"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:581
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %b %e, %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:582
|
||||
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:586
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:587
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:594
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %b %e, %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:595
|
||||
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:599
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:600
|
||||
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:745
|
||||
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 "اتصال به..."
|
||||
|
||||
#: ../js/ui/placeDisplay.js:558
|
||||
msgid "PLACES & DEVICES"
|
||||
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:"
|
||||
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:114
|
||||
msgid "My Account"
|
||||
msgstr "حساب من"
|
||||
|
||||
#: ../js/ui/statusMenu.js:118
|
||||
#| msgid "System Settings..."
|
||||
msgid "System Settings"
|
||||
msgstr "تنظیمات سیستم"
|
||||
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
msgid "Lock Screen"
|
||||
msgstr "قفل کردن صفحه"
|
||||
|
||||
#: ../js/ui/statusMenu.js:129
|
||||
msgid "Switch User"
|
||||
msgstr "تعویض کاربر"
|
||||
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Log Out..."
|
||||
msgstr "خروج از سیستم..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
msgid "Suspend..."
|
||||
msgstr "معلق کردن..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:145
|
||||
msgid "Shut Down..."
|
||||
msgstr "خاموش کردن..."
|
||||
|
||||
#: ../js/ui/status/accessibility.js:82
|
||||
msgid "Zoom"
|
||||
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:205
|
||||
msgid "Large Text"
|
||||
msgstr "متن درشت"
|
||||
|
||||
#: ../js/ui/status/power.js:87
|
||||
msgid "What's using power..."
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/power.js:90
|
||||
#| msgid "System Settings..."
|
||||
msgid "Power Settings"
|
||||
msgstr "تنظیمات برق"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
#, c-format
|
||||
#| msgid "%d hour ago"
|
||||
#| msgid_plural "%d hours ago"
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
msgstr[0] "%Id ساعت مانده"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:120
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "%d %s %d %s مانده"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "ساعت"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
#| msgid "%d minute ago"
|
||||
#| msgid_plural "%d minutes ago"
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "%Id دقیقه"
|
||||
|
||||
#: ../js/ui/status/power.js:125
|
||||
#, c-format
|
||||
#| msgid "%d minute ago"
|
||||
#| msgid_plural "%d minutes ago"
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "%Id دقیقهی مانده"
|
||||
|
||||
#: ../js/ui/status/power.js:244
|
||||
msgid "AC adapter"
|
||||
msgstr "آداپتور برق مستقیم"
|
||||
|
||||
#: ../js/ui/status/power.js:246
|
||||
msgid "Laptop battery"
|
||||
msgstr "باتری لپتاپ"
|
||||
|
||||
#: ../js/ui/status/power.js:248
|
||||
msgid "UPS"
|
||||
msgstr "UPS"
|
||||
|
||||
#: ../js/ui/status/power.js:250
|
||||
msgid "Monitor"
|
||||
msgstr "صفحه نمایش"
|
||||
|
||||
#: ../js/ui/status/power.js:252
|
||||
msgid "Mouse"
|
||||
msgstr "موشی"
|
||||
|
||||
#: ../js/ui/status/power.js:254
|
||||
msgid "Keyboard"
|
||||
msgstr "صفحهکلید"
|
||||
|
||||
#: ../js/ui/status/power.js:256
|
||||
msgid "PDA"
|
||||
msgstr "دستیار دیجیتال شخصی"
|
||||
|
||||
#: ../js/ui/status/power.js:258
|
||||
msgid "Cell phone"
|
||||
msgstr "تلفن سلولی"
|
||||
|
||||
#: ../js/ui/status/power.js:260
|
||||
msgid "Media player"
|
||||
msgstr "پخش کنندهی رسانه"
|
||||
|
||||
#: ../js/ui/status/power.js:262
|
||||
#| msgid "Enabled"
|
||||
msgid "Tablet"
|
||||
msgstr "لوحرایانه"
|
||||
|
||||
#: ../js/ui/status/power.js:264
|
||||
msgid "Computer"
|
||||
msgstr "رایانه"
|
||||
|
||||
#: ../js/ui/status/power.js:266
|
||||
#: ../src/shell-app-system.c:1012
|
||||
msgid "Unknown"
|
||||
msgstr "ناشناخته"
|
||||
|
||||
#: ../js/ui/status/volume.js:41
|
||||
msgid "Volume"
|
||||
msgstr "بلندی صدا"
|
||||
|
||||
#: ../js/ui/status/volume.js:54
|
||||
msgid "Microphone"
|
||||
msgstr "میکروفون"
|
||||
|
||||
#: ../js/ui/status/volume.js:62
|
||||
#| msgid "System Settings..."
|
||||
msgid "Sound Settings"
|
||||
msgstr "تنظیمات صدا"
|
||||
|
||||
#: ../js/ui/viewSelector.js:26
|
||||
msgid "Search your computer"
|
||||
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:244
|
||||
msgid "Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr "نمیتوان میزکار جدیدی اضافه کرد زیرا به مرز بیشترین تعداد میزکار رسیدهایم."
|
||||
|
||||
#: ../js/ui/workspacesView.js:260
|
||||
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 Settings..."
|
||||
msgid "System Sounds"
|
||||
msgstr "صداهای سیستم"
|
||||
|
||||
#: ../src/shell-global.c:1163
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "کمتر از یک دقیقه قبل"
|
||||
|
||||
#: ../src/shell-global.c:1167
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%Id دقیقهی پیش"
|
||||
|
||||
#: ../src/shell-global.c:1172
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%Id ساعت پیش"
|
||||
|
||||
#: ../src/shell-global.c:1177
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%Id روز پیش"
|
||||
|
||||
#: ../src/shell-global.c:1182
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%Id هفتهی پیش"
|
||||
|
||||
#: ../src/shell-util.c:89
|
||||
msgid "Home Folder"
|
||||
msgstr "پوشهی آغازه"
|
||||
|
||||
#. Translators: this is the same string as the one found in
|
||||
#. * nautilus
|
||||
#: ../src/shell-util.c:104
|
||||
msgid "File System"
|
||||
msgstr "سیستم پروندهها"
|
||||
|
||||
#: ../src/shell-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-util.c:300
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Overview workspace view mode"
|
||||
#~ msgstr "حالت بررسی اجمالی میزکار"
|
||||
#~ msgid ""
|
||||
#~ "The selected workspace view mode in the overview. Supported values are "
|
||||
#~ "\"single\" and \"grid\"."
|
||||
#~ msgstr ""
|
||||
#~ "میزکار انتخاب شده در حال مشاهده اجمالی. مقادیر قابل پشتیبانی عبارتند از "
|
||||
#~ "«تکی» و «شبکهای»."
|
||||
#~ msgid "Drag here to add favorites"
|
||||
#~ msgstr "به اینجا بکشید تا به مجبوبها اضافه شود"
|
||||
#~ msgid "Find"
|
||||
#~ msgstr "جستجو"
|
||||
#~ msgid "Searching..."
|
||||
#~ msgstr "درحال حستجو..."
|
||||
#~ msgid "No matching results."
|
||||
#~ msgstr "نتیجهی منطبقی پیدا نشد."
|
||||
#~ msgid "Invisible"
|
||||
#~ msgstr "نامرئی"
|
||||
#~ msgid "Account Information..."
|
||||
#~ msgstr "اطلاعات جساب"
|
||||
|
640
po/gl.po
640
po/gl.po
@ -4,14 +4,14 @@
|
||||
#
|
||||
# Anton Meixome <certima@certima.net>, 2009.
|
||||
# Antón Méixome <meixome@certima.net>, 2009.
|
||||
# Fran Diéguez <frandieguez@ubuntu.com>, 2009, 2010.
|
||||
# Fran Diéguez <frandieguez@ubuntu.com>, 2009, 2010, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-11-03 00:26+0100\n"
|
||||
"PO-Revision-Date: 2010-11-03 00:28+0100\n"
|
||||
"POT-Creation-Date: 2011-01-06 23:28+0100\n"
|
||||
"PO-Revision-Date: 2011-01-06 23:33+0100\n"
|
||||
"Last-Translator: Fran Diéguez <frandieguez@ubuntu.com>\n"
|
||||
"Language-Team: Galician <gnome-gl-list@gnome.org>\n"
|
||||
"Language: gl\n"
|
||||
@ -29,14 +29,6 @@ msgstr "GNOME Shell"
|
||||
msgid "Window management and application launching"
|
||||
msgstr "Xestor de xanelas e inicio de aplicativos"
|
||||
|
||||
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
|
||||
msgid "Clock"
|
||||
msgstr "Reloxo"
|
||||
|
||||
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
|
||||
msgid "Customize the panel clock"
|
||||
msgstr "Personalizar o reloxo do panel"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
||||
msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
@ -46,24 +38,20 @@ msgstr ""
|
||||
"usando o diálogo Alt-F2."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
msgid "Custom format of the clock"
|
||||
msgstr "Formato personalizado o reloxo do panel"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
msgstr ""
|
||||
"Activar as ferramentas internas útiles para os desenvolvedores e probadores "
|
||||
"usando Alt-F2"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "Extensión de ficheiro usada para o almacenamento da screencast"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "Taxa de marcos usada para gravar as capturas de pantalla."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should not be loaded."
|
||||
@ -71,43 +59,27 @@ msgstr ""
|
||||
"As extensións do GNOME Shell teñen unha propiedade uuid. Esta chave lista as "
|
||||
"extensións que non deberían cargarse."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr "Hitorial do diálogo de orde (Alt-F2)"
|
||||
msgstr "Historial do diálogo de orde (Alt-F2)"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
msgid "If true, display date in the clock, in addition to time."
|
||||
msgstr "Se é verdadeiro, móstrase a data no reloxo, ademais da hora."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||
msgid "Hour format"
|
||||
msgstr "Formato da hora"
|
||||
msgid "If true, display seconds in time."
|
||||
msgstr "Se é verdadeiro, móstranse os segundos na hora."
|
||||
|
||||
#: ../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-hour» ou «24-hour» móstrase a data no "
|
||||
"reloxo, ademais da hora."
|
||||
|
||||
#: ../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-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."
|
||||
msgstr "Se é verdadeiro, móstrase a data da semana ISO no calendario."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr "Mostra os ID de ficheiros desktop para os aplicativos preferidos"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
msgid "Overview workspace view mode"
|
||||
msgstr "Modo de visualización do espazo de traballo de vista previa"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
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 "
|
||||
@ -128,19 +100,19 @@ msgstr ""
|
||||
"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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
msgid "Show date in clock"
|
||||
msgstr "Mostrar a data no reloxo"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Mostrar a data da semana no calendario"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Mostrar a hora con segundos"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
@ -148,7 +120,7 @@ msgstr ""
|
||||
"Os aplicativos que corresponden a estes identificadores mostraranse na área "
|
||||
"de preferidos."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
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 "
|
||||
@ -158,7 +130,7 @@ msgstr ""
|
||||
"baseado na data actual e usa esta extensión. Debería cambiar ao grabar nun "
|
||||
"formato de contedor diferente."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
@ -166,19 +138,11 @@ msgstr ""
|
||||
"A taxa de marcos do screencast resultante grabado polo grabador de "
|
||||
"screencasts de GNOME Shell en marcos-por-segundo."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "A tubería de 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 modo de visualización do espazo de traballo seleccionado na vista previa. "
|
||||
"Os valores admitidos son \"single\" e \"grid\"."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
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 "
|
||||
@ -190,40 +154,11 @@ msgstr ""
|
||||
"privados, vostede pode desactivar isto por motivos de privacidade. Teña en "
|
||||
"conta que facendo isto non eliminará os datos gardados."
|
||||
|
||||
#: ../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 polo reloxo do panel cando a chave de "
|
||||
"formato está estabelecida a \"custom\". Vostede pode usar os especificadores "
|
||||
"de conversión que entende strftime() para obter un formato de hora "
|
||||
"especificado. Vexa o manual de strftime() para obter máis información."
|
||||
|
||||
#: ../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 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 "
|
||||
"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."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr "Os Uuid das extensións a desactivar"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Indica se recoller estatísticas sobre o uso dos aplicativos"
|
||||
|
||||
@ -381,90 +316,46 @@ msgstr ""
|
||||
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"
|
||||
msgstr "Formato do reloxo"
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:155
|
||||
msgid "All"
|
||||
msgstr "Todos"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:2
|
||||
msgid "Clock Preferences"
|
||||
msgstr "Preferencias do reloxo"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:3
|
||||
msgid "Panel Display"
|
||||
msgstr "Panel de visualización"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:4
|
||||
msgid "Show seco_nds"
|
||||
msgstr "Mostrar os segu_ndos"
|
||||
|
||||
#: ../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 _12 horas"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:7
|
||||
msgid "_24 hour format"
|
||||
msgstr "Formato _24 horas"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
#: ../js/ui/appDisplay.js:236
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "APLICATIVOS"
|
||||
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
#: ../js/ui/appDisplay.js:266
|
||||
msgid "PREFERENCES"
|
||||
msgstr "PREFERENCIAS"
|
||||
|
||||
#: ../js/ui/appDisplay.js:647
|
||||
#: ../js/ui/appDisplay.js:563
|
||||
msgid "New Window"
|
||||
msgstr "Xanela nova"
|
||||
|
||||
#: ../js/ui/appDisplay.js:651
|
||||
#: ../js/ui/appDisplay.js:567
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Eliminar dos favoritos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
#: ../js/ui/appDisplay.js:568
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Engadir aos favoritos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:829
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Arrastre aquí para engadir aos favoritos"
|
||||
|
||||
#: ../js/ui/appFavorites.js:88
|
||||
#: ../js/ui/appFavorites.js:91
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s foi engadido aos seus favoritos."
|
||||
|
||||
#: ../js/ui/appFavorites.js:107
|
||||
#: ../js/ui/appFavorites.js:122
|
||||
#, c-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s foi eliminado dos seus favoritos."
|
||||
|
||||
#: ../js/ui/dash.js:142
|
||||
msgid "Find"
|
||||
msgstr "Buscar"
|
||||
#: ../js/ui/dash.js:27
|
||||
msgid "Remove"
|
||||
msgstr "Eliminar"
|
||||
|
||||
#: ../js/ui/dash.js:473
|
||||
msgid "Searching..."
|
||||
msgstr "Buscando..."
|
||||
|
||||
#: ../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:797 ../js/ui/placeDisplay.js:554
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "LUGARES E DISPOSITIVOS"
|
||||
|
||||
#. **** Documents ****
|
||||
#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
|
||||
#: ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "ELEMENTOS RECENTES"
|
||||
|
||||
@ -498,63 +389,67 @@ msgstr "Ver fonte"
|
||||
msgid "Web Page"
|
||||
msgstr "Páxina web"
|
||||
|
||||
#: ../js/ui/overview.js:160
|
||||
#: ../js/ui/overview.js:101
|
||||
msgid "Undo"
|
||||
msgstr "Desfacer"
|
||||
|
||||
#: ../js/ui/overview.js:166
|
||||
msgid "Windows"
|
||||
msgstr "Xanelas"
|
||||
|
||||
#: ../js/ui/overview.js:169
|
||||
msgid "Applications"
|
||||
msgstr "Aplicativos"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:469
|
||||
#: ../js/ui/panel.js:478
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Saír de %s"
|
||||
|
||||
#: ../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:580
|
||||
#: ../js/ui/panel.js:563
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %e de %b, %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:581
|
||||
#: ../js/ui/panel.js:564
|
||||
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:585
|
||||
#: ../js/ui/panel.js:568
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:586
|
||||
#: ../js/ui/panel.js:569
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:593
|
||||
#: ../js/ui/panel.js:576
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %e de %b, %H:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:594
|
||||
#: ../js/ui/panel.js:577
|
||||
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
|
||||
#: ../js/ui/panel.js:581
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %H:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:599
|
||||
#: ../js/ui/panel.js:582
|
||||
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:744
|
||||
#: ../js/ui/panel.js:727
|
||||
msgid "Activities"
|
||||
msgstr "Actividades"
|
||||
|
||||
@ -571,6 +466,10 @@ msgstr "Reintentar"
|
||||
msgid "Connect to..."
|
||||
msgstr "Conectar con..."
|
||||
|
||||
#: ../js/ui/placeDisplay.js:558
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "LUGARES E DISPOSITIVOS"
|
||||
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
@ -597,42 +496,38 @@ msgstr "Dispoñíbel"
|
||||
msgid "Busy"
|
||||
msgstr "Ocupado"
|
||||
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "Invisíbel"
|
||||
#: ../js/ui/statusMenu.js:114
|
||||
msgid "My Account"
|
||||
msgstr "A miña conta"
|
||||
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr "A miña conta..."
|
||||
#: ../js/ui/statusMenu.js:118
|
||||
msgid "System Settings"
|
||||
msgstr "Configuracións do sistema"
|
||||
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
msgid "System Settings..."
|
||||
msgstr "Configuracións do sistema..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
msgid "Lock Screen"
|
||||
msgstr "Bloquear pantalla"
|
||||
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
#: ../js/ui/statusMenu.js:129
|
||||
msgid "Switch User"
|
||||
msgstr "Cambiar de usuario"
|
||||
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Log Out..."
|
||||
msgstr "Saír da sesión..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr "Suspender"
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
msgid "Suspend..."
|
||||
msgstr "Suspender..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
msgstr "Reiniciar..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
#: ../js/ui/statusMenu.js:145
|
||||
msgid "Shut Down..."
|
||||
msgstr "Apagar..."
|
||||
|
||||
#: ../js/ui/status/accessibility.js:82
|
||||
msgid "Zoom"
|
||||
msgstr "Ampliación"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "Lector de pantalla"
|
||||
@ -669,13 +564,253 @@ msgstr "Configuracións de acceso universal"
|
||||
msgid "High Contrast"
|
||||
msgstr "Alto contraste"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
#: ../js/ui/status/accessibility.js:205
|
||||
msgid "Large Text"
|
||||
msgstr "Texto máis grande"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "Ampliación"
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:240
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:55
|
||||
msgid "Visibility"
|
||||
msgstr "Visibilidade"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:69
|
||||
msgid "Send Files to Device..."
|
||||
msgstr "Enviar ficheiros ao dispositivo..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:70
|
||||
msgid "Setup a New Device..."
|
||||
msgstr "Configurar un novo dispositivo..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:94
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Configuracións de Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:191
|
||||
msgid "Connection"
|
||||
msgstr "Conexión"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:227
|
||||
msgid "Send Files..."
|
||||
msgstr "Enviar ficheiros..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:232
|
||||
msgid "Browse Files..."
|
||||
msgstr "Explorar ficheiros..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:241
|
||||
msgid "Error browsing device"
|
||||
msgstr "Produciuse un erro ao explorar o dispositivo"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:242
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "O dispositivo solicitado non pode explorarse, o erro foi «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:250
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Configuracións do teclado"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:255
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Configuracións do rato"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:262 ../js/ui/status/volume.js:62
|
||||
msgid "Sound Settings"
|
||||
msgstr "Configuracións do son"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:336 ../js/ui/status/bluetooth.js:370
|
||||
#: ../js/ui/status/bluetooth.js:410 ../js/ui/status/bluetooth.js:443
|
||||
msgid "Bluetooth Agent"
|
||||
msgstr "Axente Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:371
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Solicitude de autorización de %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "O dispositivo %s quere acceder ao servizo «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:379
|
||||
msgid "Always grant access"
|
||||
msgstr "Conceder acceso sempre"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:380
|
||||
msgid "Grant this time only"
|
||||
msgstr "Conceder só esta vez"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
msgid "Reject"
|
||||
msgstr "Rexeitar"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:411
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Confirmación de emparellado para «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:417 ../js/ui/status/bluetooth.js:451
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "O dispositivo «%s» quere emparellarse con este equipo"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Confirme que o PIN mostrado en «%s» coincide co do dispositivo."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:420
|
||||
msgid "Matches"
|
||||
msgstr "Coincide"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:421
|
||||
msgid "Does not match"
|
||||
msgstr "Non coincide"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:444
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Solicitude de emparellamento para «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:452
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Introduza o PIN mencionado no dispositivo."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:468
|
||||
msgid "OK"
|
||||
msgstr "Aceptar"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:469
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "Configuracións de enerxía"
|
||||
|
||||
#: ../js/ui/status/power.js:112
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
msgstr[0] "%d hora restante"
|
||||
msgstr[1] "%d horas restante"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:115
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "%d %s %d %s retante"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "hora"
|
||||
msgstr[1] "horas"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "minuto"
|
||||
msgstr[1] "minutos"
|
||||
|
||||
#: ../js/ui/status/power.js:120
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "%d minuto restante"
|
||||
msgstr[1] "%d minutos restantes"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
msgid "AC adapter"
|
||||
msgstr "Adaptador de corrente"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
msgid "Laptop battery"
|
||||
msgstr "Batería do portátil"
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
msgid "UPS"
|
||||
msgstr "UPS"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
msgid "Monitor"
|
||||
msgstr "Monitor"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
msgid "Mouse"
|
||||
msgstr "Rato"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
msgid "Keyboard"
|
||||
msgstr "Teclado"
|
||||
|
||||
#: ../js/ui/status/power.js:249
|
||||
msgid "PDA"
|
||||
msgstr "PDA"
|
||||
|
||||
#: ../js/ui/status/power.js:251
|
||||
msgid "Cell phone"
|
||||
msgstr "Teléfono móbil"
|
||||
|
||||
#: ../js/ui/status/power.js:253
|
||||
msgid "Media player"
|
||||
msgstr "Reprodutor multimedia"
|
||||
|
||||
#: ../js/ui/status/power.js:255
|
||||
msgid "Tablet"
|
||||
msgstr "Tablet"
|
||||
|
||||
#: ../js/ui/status/power.js:257
|
||||
msgid "Computer"
|
||||
msgstr "Computador"
|
||||
|
||||
#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
|
||||
msgid "Unknown"
|
||||
msgstr "Descoñecido"
|
||||
|
||||
#: ../js/ui/status/volume.js:41
|
||||
msgid "Volume"
|
||||
msgstr "Volume"
|
||||
|
||||
#: ../js/ui/status/volume.js:54
|
||||
msgid "Microphone"
|
||||
msgstr "Micrófono"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:561
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s está conectado/a."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:566
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s está desconectado/a."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:569
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s está ausente."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:572
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s está ocupado/a."
|
||||
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:666
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Enviado ás %X o %A"
|
||||
|
||||
#: ../js/ui/viewSelector.js:26
|
||||
msgid "Search your computer"
|
||||
msgstr "Buscar no seu computador"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
@ -687,14 +822,14 @@ msgstr "%s rematou de iniarse"
|
||||
msgid "'%s' is ready"
|
||||
msgstr "«%s» está preparado"
|
||||
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
#: ../js/ui/workspacesView.js:244
|
||||
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:246
|
||||
#: ../js/ui/workspacesView.js:260
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "Non é posíbel quitar a primeira área de traballo."
|
||||
|
||||
@ -720,49 +855,49 @@ msgstr[1] "%u entradas"
|
||||
msgid "System Sounds"
|
||||
msgstr "Sons do sistema"
|
||||
|
||||
#: ../src/shell-global.c:1219
|
||||
#: ../src/shell-global.c:1233
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Hai menos dun minuto"
|
||||
|
||||
#: ../src/shell-global.c:1223
|
||||
#: ../src/shell-global.c:1237
|
||||
#, 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:1228
|
||||
#: ../src/shell-global.c:1242
|
||||
#, 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:1233
|
||||
#: ../src/shell-global.c:1247
|
||||
#, 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:1238
|
||||
#: ../src/shell-global.c:1252
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "hai %d semana"
|
||||
msgstr[1] "hai %d semanas"
|
||||
|
||||
#: ../src/shell-uri-util.c:89
|
||||
#: ../src/shell-util.c:89
|
||||
msgid "Home Folder"
|
||||
msgstr "Cartafol persoal"
|
||||
|
||||
#. Translators: this is the same string as the one found in
|
||||
#. * nautilus
|
||||
#: ../src/shell-uri-util.c:104
|
||||
#: ../src/shell-util.c:104
|
||||
msgid "File System"
|
||||
msgstr "Sistema de ficheiros"
|
||||
|
||||
#: ../src/shell-uri-util.c:250
|
||||
#: ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "Buscar"
|
||||
|
||||
@ -771,11 +906,114 @@ msgstr "Buscar"
|
||||
#. * example, "Trash: some-directory". It means that the
|
||||
#. * directory called "some-directory" is in the trash.
|
||||
#.
|
||||
#: ../src/shell-uri-util.c:300
|
||||
#: ../src/shell-util.c:300
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Clock"
|
||||
#~ msgstr "Reloxo"
|
||||
|
||||
#~ msgid "Customize the panel clock"
|
||||
#~ msgstr "Personalizar o reloxo do panel"
|
||||
|
||||
#~ msgid "Custom format of the clock"
|
||||
#~ msgstr "Formato personalizado o reloxo do panel"
|
||||
|
||||
#~ msgid "Hour format"
|
||||
#~ msgstr "Formato da hora"
|
||||
|
||||
#~ 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."
|
||||
|
||||
#~ 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 polo reloxo do panel cando a chave "
|
||||
#~ "de formato está estabelecida a \"custom\". Vostede pode usar os "
|
||||
#~ "especificadores de conversión que entende strftime() para obter un "
|
||||
#~ "formato de hora especificado. Vexa o manual de strftime() para obter máis "
|
||||
#~ "información."
|
||||
|
||||
#~ 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 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 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."
|
||||
|
||||
#~ msgid "Clock Format"
|
||||
#~ msgstr "Formato do reloxo"
|
||||
|
||||
#~ msgid "Clock Preferences"
|
||||
#~ msgstr "Preferencias do reloxo"
|
||||
|
||||
#~ msgid "Panel Display"
|
||||
#~ msgstr "Panel de visualización"
|
||||
|
||||
#~ msgid "Show seco_nds"
|
||||
#~ msgstr "Mostrar os segu_ndos"
|
||||
|
||||
#~ msgid "Show the _date"
|
||||
#~ msgstr "Mostrar a _data"
|
||||
|
||||
#~ msgid "_12 hour format"
|
||||
#~ msgstr "Formato _12 horas"
|
||||
|
||||
#~ msgid "_24 hour format"
|
||||
#~ msgstr "Formato _24 horas"
|
||||
|
||||
#~ msgid "Preferences"
|
||||
#~ msgstr "Preferencias"
|
||||
|
||||
#~ msgid "What's using power..."
|
||||
#~ msgstr "Que está usando enerxía..."
|
||||
|
||||
#~ msgid "Overview workspace view mode"
|
||||
#~ msgstr "Modo de visualización do espazo de traballo de vista previa"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The selected workspace view mode in the overview. Supported values are "
|
||||
#~ "\"single\" and \"grid\"."
|
||||
#~ msgstr ""
|
||||
#~ "O modo de visualización do espazo de traballo seleccionado na vista "
|
||||
#~ "previa. Os valores admitidos son \"single\" e \"grid\"."
|
||||
|
||||
#~ msgid "Drag here to add favorites"
|
||||
#~ msgstr "Arrastre aquí para engadir aos favoritos"
|
||||
|
||||
#~ msgid "Find"
|
||||
#~ msgstr "Buscar"
|
||||
|
||||
#~ msgid "Searching..."
|
||||
#~ msgstr "Buscando..."
|
||||
|
||||
#~ msgid "No matching results."
|
||||
#~ msgstr "Non hai resultados que coincidan."
|
||||
|
||||
#~ msgid "Invisible"
|
||||
#~ msgstr "Invisíbel"
|
||||
|
||||
#~ msgid "Restart..."
|
||||
#~ msgstr "Reiniciar..."
|
||||
|
||||
#~ msgid "System Preferences..."
|
||||
#~ msgstr "Preferencias do sistema..."
|
||||
|
||||
|
690
po/he.po
690
po/he.po
@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-11-01 07:47+0200\n"
|
||||
"PO-Revision-Date: 2010-11-01 07:48+0200\n"
|
||||
"POT-Creation-Date: 2011-01-09 18:50+0200\n"
|
||||
"PO-Revision-Date: 2011-01-09 18:51+0200\n"
|
||||
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
|
||||
"Language-Team: Hebrew <he@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -25,14 +25,6 @@ msgstr "מעטפת GNOME"
|
||||
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 "
|
||||
@ -42,22 +34,18 @@ msgstr ""
|
||||
"dialog."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
msgid "Custom format of the clock"
|
||||
msgstr "Custom format of the clock"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
msgstr "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "File extension used for storing the screencast"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "Framerate used for recording screencasts."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should not be loaded."
|
||||
@ -65,43 +53,27 @@ msgstr ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should not be loaded."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr "History for command (Alt-F2) dialog"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
msgid "If true, display date in the clock, in addition to time."
|
||||
msgstr "If true, display date in the clock, in addition to time."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||
msgid "Hour format"
|
||||
msgstr "Hour format"
|
||||
msgid "If true, display seconds in time."
|
||||
msgstr "If true, display seconds in time."
|
||||
|
||||
#: ../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 ""
|
||||
"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
|
||||
"clock, in addition to time."
|
||||
|
||||
#: ../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 ""
|
||||
"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
|
||||
"time."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "If true, display the ISO week date in the calendar."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr "List of desktop file IDs for favorite applications"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
msgid "Overview workspace view mode"
|
||||
msgstr "Overview workspace view mode"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
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 "
|
||||
@ -121,57 +93,49 @@ msgstr ""
|
||||
"to an empty value, the default pipeline will be used. This is currently "
|
||||
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
msgid "Show date in clock"
|
||||
msgstr "Show date in clock"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Show the week date in the calendar"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Show time with seconds"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
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 ""
|
||||
"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."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
|
||||
#: ../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 ""
|
||||
"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."
|
||||
|
||||
#: ../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 ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "The gstreamer pipeline used to encode the 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 ""
|
||||
"The selected workspace view mode in the overview. Supported values are "
|
||||
"\"single\" and \"grid\"."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
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 "
|
||||
@ -183,39 +147,11 @@ msgstr ""
|
||||
"want to disable this for privacy reasons. Please note that doing so won't "
|
||||
"remove already saved data."
|
||||
|
||||
#: ../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 ""
|
||||
"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."
|
||||
|
||||
#: ../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 ""
|
||||
"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."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr "Uuids of extensions to disable"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Whether to collect stats about applications usage"
|
||||
|
||||
@ -374,90 +310,46 @@ 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 "מבנה השעון"
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:155
|
||||
msgid "All"
|
||||
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:316 ../js/ui/dash.js:778
|
||||
#: ../js/ui/appDisplay.js:236
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "יישומים"
|
||||
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
#: ../js/ui/appDisplay.js:266
|
||||
msgid "PREFERENCES"
|
||||
msgstr "העדפות"
|
||||
|
||||
#: ../js/ui/appDisplay.js:647
|
||||
#: ../js/ui/appDisplay.js:563
|
||||
msgid "New Window"
|
||||
msgstr "חלון חדש"
|
||||
|
||||
#: ../js/ui/appDisplay.js:651
|
||||
#: ../js/ui/appDisplay.js:567
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "הסרה מהמועדפים"
|
||||
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
#: ../js/ui/appDisplay.js:568
|
||||
msgid "Add to Favorites"
|
||||
msgstr "הוספה למועדפים"
|
||||
|
||||
#: ../js/ui/appDisplay.js:829
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "יש לגרור פריטים לכאן כדי להוסיף מועדפים"
|
||||
|
||||
#: ../js/ui/appFavorites.js:88
|
||||
#: ../js/ui/appFavorites.js:91
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s נוסף למועדפים שלך."
|
||||
|
||||
#: ../js/ui/appFavorites.js:107
|
||||
#: ../js/ui/appFavorites.js:122
|
||||
#, c-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s הוסר מהמועדפים שלך."
|
||||
|
||||
#: ../js/ui/dash.js:142
|
||||
msgid "Find"
|
||||
msgstr "חיפוש"
|
||||
#: ../js/ui/dash.js:27
|
||||
msgid "Remove"
|
||||
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
|
||||
#: ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "פריטים אחרונים"
|
||||
|
||||
@ -491,63 +383,67 @@ msgstr "צפייה במקור"
|
||||
msgid "Web Page"
|
||||
msgstr "דף אינטרנט"
|
||||
|
||||
#: ../js/ui/overview.js:160
|
||||
#: ../js/ui/overview.js:101
|
||||
msgid "Undo"
|
||||
msgstr "ביטול"
|
||||
|
||||
#: ../js/ui/overview.js:166
|
||||
msgid "Windows"
|
||||
msgstr "חלונות"
|
||||
|
||||
#: ../js/ui/overview.js:169
|
||||
msgid "Applications"
|
||||
msgstr "יישומים"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:469
|
||||
#: ../js/ui/panel.js:478
|
||||
#, 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
|
||||
#: ../js/ui/panel.js:563
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %b %e, %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:581
|
||||
#: ../js/ui/panel.js:564
|
||||
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
|
||||
#: ../js/ui/panel.js:568
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:586
|
||||
#: ../js/ui/panel.js:569
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:593
|
||||
#: ../js/ui/panel.js:576
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %b %e, %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:594
|
||||
#: ../js/ui/panel.js:577
|
||||
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
|
||||
#: ../js/ui/panel.js:581
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:599
|
||||
#: ../js/ui/panel.js:582
|
||||
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:744
|
||||
#: ../js/ui/panel.js:727
|
||||
msgid "Activities"
|
||||
msgstr "פעילויות"
|
||||
|
||||
@ -564,6 +460,10 @@ msgstr "ניסיון חוזר"
|
||||
msgid "Connect to..."
|
||||
msgstr "התחברות אל..."
|
||||
|
||||
#: ../js/ui/placeDisplay.js:558
|
||||
msgid "PLACES & DEVICES"
|
||||
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
|
||||
@ -573,11 +473,11 @@ msgstr "התחברות אל..."
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
#: ../js/ui/runDialog.js:233
|
||||
#: ../js/ui/runDialog.js:238
|
||||
msgid "Please enter a command:"
|
||||
msgstr "נא להזין פקודה:"
|
||||
|
||||
#: ../js/ui/runDialog.js:378
|
||||
#: ../js/ui/runDialog.js:383
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "ההרצה של '%s' נכשלה:"
|
||||
@ -590,42 +490,38 @@ msgstr "זמין"
|
||||
msgid "Busy"
|
||||
msgstr "עסוק"
|
||||
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "בלתי נראה"
|
||||
#: ../js/ui/statusMenu.js:114
|
||||
msgid "My Account"
|
||||
msgstr "החשבון שלי"
|
||||
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr "החשבון שלי..."
|
||||
#: ../js/ui/statusMenu.js:118
|
||||
msgid "System Settings"
|
||||
msgstr "הגדרות המערכת"
|
||||
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
msgid "System Settings..."
|
||||
msgstr "הגדרות המערכת..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
msgid "Lock Screen"
|
||||
msgstr "נעילת המסך"
|
||||
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
#: ../js/ui/statusMenu.js:129
|
||||
msgid "Switch User"
|
||||
msgstr "החלפת משתמש"
|
||||
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Log Out..."
|
||||
msgstr "ניתוק..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr "השהיה"
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
msgid "Suspend..."
|
||||
msgstr "השהיה..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
msgstr "הפעלה מחדש..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
#: ../js/ui/statusMenu.js:145
|
||||
msgid "Shut Down..."
|
||||
msgstr "כיבוי..."
|
||||
|
||||
#: ../js/ui/status/accessibility.js:82
|
||||
msgid "Zoom"
|
||||
msgstr "תקריב"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "מקריא מסך"
|
||||
@ -662,13 +558,257 @@ msgstr "הגדרות גישה אוניברסלית"
|
||||
msgid "High Contrast"
|
||||
msgstr "ניגודיות גבוהה"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
#: ../js/ui/status/accessibility.js:205
|
||||
msgid "Large Text"
|
||||
msgstr "טקסט גדול"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "תקריב"
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:240
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:55
|
||||
msgid "Visibility"
|
||||
msgstr "הצגה"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:69
|
||||
msgid "Send Files to Device..."
|
||||
msgstr "שליחת קובץ להתקן..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:70
|
||||
msgid "Setup a New Device..."
|
||||
msgstr "הגדרת התקן חדש..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:94
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "הגדרות Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:191
|
||||
msgid "Connection"
|
||||
msgstr "חיבור"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:227
|
||||
msgid "Send Files..."
|
||||
msgstr "שליחת קבצים..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:232
|
||||
msgid "Browse Files..."
|
||||
msgstr "עיון בקבצים..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:241
|
||||
msgid "Error browsing device"
|
||||
msgstr "שגיאה בעיון בהתקן"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:242
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "לא ניתן לעיין בהתקן הנבחר, השגיאה היא '%s'"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:250
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "הגדרות מקלדת"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:255
|
||||
msgid "Mouse Settings"
|
||||
msgstr "הגדרות עכבר"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:262 ../js/ui/status/volume.js:62
|
||||
msgid "Sound Settings"
|
||||
msgstr "הגדרות שמע"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:336 ../js/ui/status/bluetooth.js:370
|
||||
#: ../js/ui/status/bluetooth.js:410 ../js/ui/status/bluetooth.js:443
|
||||
msgid "Bluetooth Agent"
|
||||
msgstr "סוכן Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:371
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "בקשת אישור מאת %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "ההתקן %s מעוניין לגשת אל השירות '%s'"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:379
|
||||
msgid "Always grant access"
|
||||
msgstr "תמיד להעניק גישה"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:380
|
||||
msgid "Grant this time only"
|
||||
msgstr "הענקת גישה הפעם בלבד"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
msgid "Reject"
|
||||
msgstr "סירוב"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:411
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "אישור צימוד עבור %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:417 ../js/ui/status/bluetooth.js:451
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "ההתקן %s מעוניין בצימוד עם מחשב זה"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "נא לאשר האם קוד ה־PIN '%s' תואם את זה שמופיע בהתקן."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:420
|
||||
msgid "Matches"
|
||||
msgstr "התאמות"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:421
|
||||
msgid "Does not match"
|
||||
msgstr "אינו תואם"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:444
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "בקשת צימוד עבור %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:452
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "נא להזין את קוד ה־PIN המוזכר בהתקן."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:468
|
||||
msgid "OK"
|
||||
msgstr "אישור"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:469
|
||||
msgid "Cancel"
|
||||
msgstr "ביטול"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "הגדרות צריכת החשמל"
|
||||
|
||||
#: ../js/ui/status/power.js:112
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
msgstr[0] "נותרה שעה"
|
||||
msgstr[1] "נותרו %d שעות"
|
||||
msgstr[2] "נותרו שעתיים"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:115
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "%d %s %d %s נותרו"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "שעה"
|
||||
msgstr[1] "שעות"
|
||||
msgstr[2] "שעתיים"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "דקה"
|
||||
msgstr[1] "דקות"
|
||||
msgstr[2] "דקות"
|
||||
|
||||
#: ../js/ui/status/power.js:120
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "דקה אחת נותרה"
|
||||
msgstr[1] "%d דקות נותרו"
|
||||
msgstr[2] "שתי דקות נותרו"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
msgid "AC adapter"
|
||||
msgstr "מתאם חשמל"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
msgid "Laptop battery"
|
||||
msgstr "סוללת נייד"
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
msgid "UPS"
|
||||
msgstr "אל־פסק"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
msgid "Monitor"
|
||||
msgstr "צג"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
msgid "Mouse"
|
||||
msgstr "עכבר"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
msgid "Keyboard"
|
||||
msgstr "מקלדת"
|
||||
|
||||
#: ../js/ui/status/power.js:249
|
||||
msgid "PDA"
|
||||
msgstr "מחשב כף יד"
|
||||
|
||||
#: ../js/ui/status/power.js:251
|
||||
msgid "Cell phone"
|
||||
msgstr "טלפון סלולרי"
|
||||
|
||||
#: ../js/ui/status/power.js:253
|
||||
msgid "Media player"
|
||||
msgstr "נגן מדיה"
|
||||
|
||||
#: ../js/ui/status/power.js:255
|
||||
msgid "Tablet"
|
||||
msgstr "טבלת שליטה"
|
||||
|
||||
#: ../js/ui/status/power.js:257
|
||||
msgid "Computer"
|
||||
msgstr "מחשב"
|
||||
|
||||
#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
|
||||
msgid "Unknown"
|
||||
msgstr "לא ידוע"
|
||||
|
||||
#: ../js/ui/status/volume.js:41
|
||||
msgid "Volume"
|
||||
msgstr "עצמה"
|
||||
|
||||
#: ../js/ui/status/volume.js:54
|
||||
msgid "Microphone"
|
||||
msgstr "מיקרופון"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:561
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s התחבר/ה."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:566
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s התנתק/ה."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:569
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "'%s' מרוחק/ת."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:572
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s עסוק/ה."
|
||||
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:666
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "נשלח ב־%X בשעה %A"
|
||||
|
||||
#: ../js/ui/viewSelector.js:26
|
||||
msgid "Search your computer"
|
||||
msgstr "חיפוש במחשב שלך"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
@ -680,12 +820,12 @@ msgstr "%s סיים את תהליך ההתחלה"
|
||||
msgid "'%s' is ready"
|
||||
msgstr "'%s' מוכן"
|
||||
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
#: ../js/ui/workspacesView.js:244
|
||||
msgid ""
|
||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr "לא ניתן להוסיף מרחבי עבודה כיוון שהם ממלאים את המכסה המרבית."
|
||||
|
||||
#: ../js/ui/workspacesView.js:246
|
||||
#: ../js/ui/workspacesView.js:260
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "לא ניתן להסיר את מרחב העבודה הראשון."
|
||||
|
||||
@ -713,11 +853,11 @@ msgstr[2] "2 קלטים"
|
||||
msgid "System Sounds"
|
||||
msgstr "צלילי מערכת"
|
||||
|
||||
#: ../src/shell-global.c:1219
|
||||
#: ../src/shell-global.c:1233
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "לפני פחות מדקה"
|
||||
|
||||
#: ../src/shell-global.c:1223
|
||||
#: ../src/shell-global.c:1237
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
@ -725,7 +865,7 @@ msgstr[0] "לפני דקה"
|
||||
msgstr[1] "לפני %d דקות"
|
||||
msgstr[2] "לפני 2 דקות"
|
||||
|
||||
#: ../src/shell-global.c:1228
|
||||
#: ../src/shell-global.c:1242
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
@ -733,7 +873,7 @@ msgstr[0] "לפני שעה"
|
||||
msgstr[1] "לפני %d שעות"
|
||||
msgstr[2] "לפני שעתיים"
|
||||
|
||||
#: ../src/shell-global.c:1233
|
||||
#: ../src/shell-global.c:1247
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
@ -741,7 +881,7 @@ msgstr[0] "לפני יום"
|
||||
msgstr[1] "לפני %d ימים"
|
||||
msgstr[2] "לפני יומיים"
|
||||
|
||||
#: ../src/shell-global.c:1238
|
||||
#: ../src/shell-global.c:1252
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
@ -749,17 +889,17 @@ msgstr[0] "לפני שבוע"
|
||||
msgstr[1] "לפני %d שבועות"
|
||||
msgstr[2] "לפני שבועיים"
|
||||
|
||||
#: ../src/shell-uri-util.c:89
|
||||
#: ../src/shell-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
|
||||
#: ../src/shell-util.c:104
|
||||
msgid "File System"
|
||||
msgstr "מערכת הקבצים"
|
||||
|
||||
#: ../src/shell-uri-util.c:250
|
||||
#: ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "חיפוש"
|
||||
|
||||
@ -768,11 +908,111 @@ msgstr "חיפוש"
|
||||
#. * example, "Trash: some-directory". It means that the
|
||||
#. * directory called "some-directory" is in the trash.
|
||||
#.
|
||||
#: ../src/shell-uri-util.c:300
|
||||
#: ../src/shell-util.c:300
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Clock"
|
||||
#~ msgstr "שעון"
|
||||
|
||||
#~ msgid "Customize the panel clock"
|
||||
#~ msgstr "התאמת לוח השעון"
|
||||
|
||||
#~ msgid "Custom format of the clock"
|
||||
#~ msgstr "Custom format of the clock"
|
||||
|
||||
#~ msgid "Hour format"
|
||||
#~ msgstr "Hour format"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
|
||||
#~ "in time."
|
||||
#~ msgstr ""
|
||||
#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
|
||||
#~ "in time."
|
||||
|
||||
#~ 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 ""
|
||||
#~ "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."
|
||||
|
||||
#~ 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 ""
|
||||
#~ "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."
|
||||
|
||||
#~ msgid "Clock Format"
|
||||
#~ msgstr "מבנה השעון"
|
||||
|
||||
#~ msgid "Clock Preferences"
|
||||
#~ msgstr "העדפות השעון"
|
||||
|
||||
#~ msgid "Panel Display"
|
||||
#~ msgstr "תצוגת הלוח"
|
||||
|
||||
#~ msgid "Show seco_nds"
|
||||
#~ msgstr "הצגת ש_ניות"
|
||||
|
||||
#~ msgid "Show the _date"
|
||||
#~ msgstr "הצגת ה_תאריך"
|
||||
|
||||
#~ msgid "_12 hour format"
|
||||
#~ msgstr "מבנה _12 שעות"
|
||||
|
||||
#~ msgid "_24 hour format"
|
||||
#~ msgstr "מבנה _24 שעות"
|
||||
|
||||
#~ msgid "Preferences"
|
||||
#~ msgstr "העדפות"
|
||||
|
||||
#~ msgid "What's using power..."
|
||||
#~ msgstr "מה צורך חשמל..."
|
||||
|
||||
#~ msgid "Overview workspace view mode"
|
||||
#~ msgstr "Overview workspace view mode"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The selected workspace view mode in the overview. Supported values are "
|
||||
#~ "\"single\" and \"grid\"."
|
||||
#~ msgstr ""
|
||||
#~ "The selected workspace view mode in the overview. Supported values are "
|
||||
#~ "\"single\" and \"grid\"."
|
||||
|
||||
#~ msgid "Drag here to add favorites"
|
||||
#~ msgstr "יש לגרור פריטים לכאן כדי להוסיף מועדפים"
|
||||
|
||||
#~ msgid "Find"
|
||||
#~ msgstr "חיפוש"
|
||||
|
||||
#~ msgid "Searching..."
|
||||
#~ msgstr "בחיפוש..."
|
||||
|
||||
#~ msgid "No matching results."
|
||||
#~ msgstr "אין תוצאות תואמות."
|
||||
|
||||
#~ msgid "Invisible"
|
||||
#~ msgstr "בלתי נראה"
|
||||
|
||||
#~ msgid "Restart..."
|
||||
#~ msgstr "הפעלה מחדש..."
|
||||
|
||||
#~ msgid "Account Information..."
|
||||
#~ msgstr "פרטי המשתמש..."
|
||||
|
||||
@ -791,15 +1031,9 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "%H:%M"
|
||||
#~ msgstr "%H:%M"
|
||||
|
||||
#~ msgid "Applications"
|
||||
#~ msgstr "יישומים"
|
||||
|
||||
#~ msgid "Recent Documents"
|
||||
#~ msgstr "מסמכים אחרונים"
|
||||
|
||||
#~ msgid "Unknown"
|
||||
#~ msgstr "לא ידוע"
|
||||
|
||||
#~ msgid "Can't lock screen: %s"
|
||||
#~ msgstr "לא ניתן לנעול את המסך: %s"
|
||||
|
||||
|
477
po/it.po
477
po/it.po
@ -3,15 +3,16 @@
|
||||
# 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.
|
||||
# Luca Ferretti <lferrett@gnome.org>, 2010.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: \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"
|
||||
"POT-Creation-Date: 2010-12-20 22:54+0100\n"
|
||||
"PO-Revision-Date: 2010-12-20 22:55+0100\n"
|
||||
"Last-Translator: Luca Ferretti <lferrett@gnome.org>\n"
|
||||
"Language-Team: Italian <tp@lists.linux.it>\n"
|
||||
"Language: it\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@ -99,12 +100,7 @@ msgstr "Se VERO, visualizza il giorno della settimana ISO nel calendario."
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr "Elenco di ID di file desktop per le applicazioni preferite"
|
||||
|
||||
# (ndt) lunga, ma non è che l'originale aiuti molto...
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
msgid "Overview workspace view mode"
|
||||
msgstr "Modalità di visualizzazione degli spazi di lavoro nella panoramica"
|
||||
|
||||
#: ../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 "
|
||||
@ -125,19 +121,19 @@ msgstr ""
|
||||
"alcun valore, viene usata la pipeline predefinita il cui valore è "
|
||||
"\"videorate ! theoraenc ! oggmux\" e che registra nel formato Ogg Theora."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
msgstr "Mostra la data nell'orologio"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Mostra il giorno della settimana nel calendario"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Mostra l'ora con i secondi"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
@ -145,7 +141,7 @@ msgstr ""
|
||||
"Le applicazioni che corrispondono a questi identificatori vengono "
|
||||
"visualizzate nell'area dei preferiti."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"The filename for recorded screencasts will be a unique filename based on the "
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
@ -155,7 +151,7 @@ msgstr ""
|
||||
"data corrente e utilizza questa estensione. Dovrebbe essere modificato "
|
||||
"quando si registra utilizzando un diverso formato contenitore."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
@ -163,20 +159,12 @@ msgstr ""
|
||||
"Il framerate in fotogrammi al secondo dello screencast registrato attraverso "
|
||||
"il registratore della GNOME Shell."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "La pipeline di gstreamer utilizzata per codificare lo 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 ""
|
||||
"La modalità di visualizzazione degli spazi di lavoro nella panoramica. I "
|
||||
"valori supportati sono \"single\" e \"grid\"."
|
||||
|
||||
# (ndt) quel "in launchers" non mi convince...
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
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 "
|
||||
@ -188,7 +176,7 @@ msgstr ""
|
||||
"disabilitare questa funzionalità per motivi di privacy. I dati già salvati "
|
||||
"non verranno comunque rimossi."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
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"
|
||||
@ -200,7 +188,7 @@ msgstr ""
|
||||
"specificatori di formato compatibili con strftime(). Per maggiori "
|
||||
"informazioni, consultare il manuale di strftime()."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
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\", "
|
||||
@ -217,11 +205,11 @@ msgstr ""
|
||||
"impostata a \"unix\" o \"custom\", le chiavi show_date e show_seconds non "
|
||||
"vengono considerate."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr "UUID delle estensioni da disabilitare"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr ""
|
||||
"Indica se raccogliere statistiche riguardo l'utilizzo delle applicazioni"
|
||||
@ -266,7 +254,6 @@ msgid ""
|
||||
"the mouse image."
|
||||
msgstr ""
|
||||
|
||||
# (ndt) o abilitata?
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
|
||||
msgid "Enable lens mode"
|
||||
msgstr ""
|
||||
@ -380,64 +367,47 @@ msgstr "Formato _12 ore"
|
||||
msgid "_24 hour format"
|
||||
msgstr "Formato _24 ore"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
#: ../js/ui/appDisplay.js:154
|
||||
msgid "All"
|
||||
msgstr "Tutte"
|
||||
|
||||
#: ../js/ui/appDisplay.js:235
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "Applicazioni"
|
||||
msgstr "APPLICAZIONI"
|
||||
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
#: ../js/ui/appDisplay.js:265
|
||||
msgid "PREFERENCES"
|
||||
msgstr "Preferenze"
|
||||
msgstr "PREFERENZE"
|
||||
|
||||
#: ../js/ui/appDisplay.js:648
|
||||
#: ../js/ui/appDisplay.js:562
|
||||
msgid "New Window"
|
||||
msgstr "Nuova finestra"
|
||||
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
#: ../js/ui/appDisplay.js:566
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Rimuovi dai preferiti"
|
||||
|
||||
#: ../js/ui/appDisplay.js:653
|
||||
#: ../js/ui/appDisplay.js:567
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Aggiungi ai preferiti"
|
||||
|
||||
#: ../js/ui/appDisplay.js:830
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Trascinare qui per aggiungere ai preferiti"
|
||||
|
||||
# (ndt) e usare:
|
||||
# L'elemento %s è stato rimosso... ?
|
||||
#: ../js/ui/appFavorites.js:88
|
||||
#: ../js/ui/appFavorites.js:91
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s è stato aggiunto ai preferiti."
|
||||
|
||||
#: ../js/ui/appFavorites.js:107
|
||||
#: ../js/ui/appFavorites.js:122
|
||||
#, c-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s è stato rimosso dai preferiti."
|
||||
|
||||
#: ../js/ui/dash.js:142
|
||||
msgid "Find"
|
||||
msgstr "Trova"
|
||||
#: ../js/ui/dash.js:27
|
||||
msgid "Remove"
|
||||
msgstr "Rimuovi"
|
||||
|
||||
#: ../js/ui/dash.js:473
|
||||
msgid "Searching..."
|
||||
msgstr "Ricerca..."
|
||||
|
||||
#: ../js/ui/dash.js:487
|
||||
msgid "No matching results."
|
||||
msgstr "Nessun risultato."
|
||||
|
||||
#. **** 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 "Risorse e dispositivi"
|
||||
|
||||
#. **** Documents ****
|
||||
#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
|
||||
#: ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "Elementi recenti"
|
||||
|
||||
@ -451,7 +421,9 @@ msgid "Enabled"
|
||||
msgstr "Abilitato"
|
||||
|
||||
# (ndt) o disabilitata?
|
||||
#: ../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 "Disabilitato"
|
||||
|
||||
@ -471,64 +443,72 @@ msgstr "Visualizza sorgente"
|
||||
msgid "Web Page"
|
||||
msgstr "Pagina web"
|
||||
|
||||
#: ../js/ui/overview.js:160
|
||||
#: ../js/ui/overview.js:96
|
||||
msgid "Undo"
|
||||
msgstr "Annulla"
|
||||
|
||||
#: ../js/ui/overview.js:158
|
||||
msgid "Windows"
|
||||
msgstr "Finestra"
|
||||
|
||||
#: ../js/ui/overview.js:161
|
||||
msgid "Applications"
|
||||
msgstr "Applicazioni"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:468
|
||||
#: ../js/ui/panel.js:474
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Chiudi %s"
|
||||
|
||||
#: ../js/ui/panel.js:493
|
||||
#: ../js/ui/panel.js:499
|
||||
msgid "Preferences"
|
||||
msgstr "Preferenze"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:579
|
||||
#: ../js/ui/panel.js:585
|
||||
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:580
|
||||
#: ../js/ui/panel.js:586
|
||||
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:584
|
||||
#: ../js/ui/panel.js:590
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %k.%M.%S"
|
||||
|
||||
#: ../js/ui/panel.js:585
|
||||
#: ../js/ui/panel.js:591
|
||||
msgid "%a %R"
|
||||
msgstr "%a %k.%M"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:592
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %e %b, %l.%M.%S %P"
|
||||
|
||||
#: ../js/ui/panel.js:593
|
||||
#: ../js/ui/panel.js:599
|
||||
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
|
||||
#: ../js/ui/panel.js:603
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l.%M.%S %P"
|
||||
|
||||
#: ../js/ui/panel.js:598
|
||||
#: ../js/ui/panel.js:604
|
||||
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
|
||||
#: ../js/ui/panel.js:749
|
||||
msgid "Activities"
|
||||
msgstr "Attività"
|
||||
|
||||
@ -546,6 +526,10 @@ msgstr "Riprova"
|
||||
msgid "Connect to..."
|
||||
msgstr "Connetti a..."
|
||||
|
||||
#: ../js/ui/placeDisplay.js:558
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "Risorse e dispositivi"
|
||||
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
@ -564,42 +548,46 @@ msgstr "Inserire un comando:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Esecuzione di «%s» non riuscita:"
|
||||
|
||||
#: ../js/ui/statusMenu.js:97
|
||||
#: ../js/ui/statusMenu.js:101
|
||||
msgid "Available"
|
||||
msgstr "Disponibile"
|
||||
|
||||
#: ../js/ui/statusMenu.js:101
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Busy"
|
||||
msgstr "Non disponibile"
|
||||
|
||||
#: ../js/ui/statusMenu.js:105
|
||||
msgid "Invisible"
|
||||
msgstr "Invisibile"
|
||||
#: ../js/ui/statusMenu.js:114
|
||||
msgid "My Account"
|
||||
msgstr "Account personale"
|
||||
|
||||
#: ../js/ui/statusMenu.js:112
|
||||
msgid "Account Information..."
|
||||
msgstr "Informazioni account..."
|
||||
#: ../js/ui/statusMenu.js:118
|
||||
msgid "System Settings"
|
||||
msgstr "Impostazioni di sistema"
|
||||
|
||||
#: ../js/ui/statusMenu.js:116
|
||||
msgid "System Settings..."
|
||||
msgstr "Impostazioni di sistema..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
msgid "Lock Screen"
|
||||
msgstr "Blocca schermo"
|
||||
|
||||
#: ../js/ui/statusMenu.js:127
|
||||
#: ../js/ui/statusMenu.js:129
|
||||
msgid "Switch User"
|
||||
msgstr "Cambia utente"
|
||||
|
||||
#: ../js/ui/statusMenu.js:132
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Log Out..."
|
||||
msgstr "Termina sessione..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:136
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
msgid "Suspend..."
|
||||
msgstr "Sospendi..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:145
|
||||
msgid "Shut Down..."
|
||||
msgstr "Arresta..."
|
||||
|
||||
#: ../js/ui/status/accessibility.js:82
|
||||
msgid "Zoom"
|
||||
msgstr "Ingrandimento"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "Lettore schermo"
|
||||
@ -636,13 +624,258 @@ msgstr "Impostazioni accesso universale"
|
||||
msgid "High Contrast"
|
||||
msgstr "Contrasto elevato"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
#: ../js/ui/status/accessibility.js:205
|
||||
msgid "Large Text"
|
||||
msgstr "Caratteri grandi"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "Ingrandimento"
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:200
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
# as on Android :P
|
||||
#: ../js/ui/status/bluetooth.js:55
|
||||
msgid "Visibility"
|
||||
msgstr "Rilevabile"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:68
|
||||
msgid "Send Files to Device..."
|
||||
msgstr "Invia file al dispositivo..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:71
|
||||
msgid "Setup a New Device..."
|
||||
msgstr "Imposta un nuovo dispositivo..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:94
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Impostazioni Bluetooth"
|
||||
|
||||
# indica lo stato del device BT, per esempio gli auricolari
|
||||
# credo sia meglio l'aggettivo che il sostantivo
|
||||
#: ../js/ui/status/bluetooth.js:151
|
||||
msgid "Connection"
|
||||
msgstr "Collegato"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:187
|
||||
msgid "Send Files..."
|
||||
msgstr "Invia file..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:192
|
||||
msgid "Browse Files..."
|
||||
msgstr "Esplora file..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:201
|
||||
msgid "Error browsing device"
|
||||
msgstr "Errore nell'esplorare il dispositivo"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:202
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "Non è possibile esplorare il dispositivo richiesto, l'errore è «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:210
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Impostazioni tastiera"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:215
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Impostazioni mouse"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:222 ../js/ui/status/volume.js:62
|
||||
msgid "Sound Settings"
|
||||
msgstr "Impostazioni audio"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:293 ../js/ui/status/bluetooth.js:327
|
||||
#: ../js/ui/status/bluetooth.js:367 ../js/ui/status/bluetooth.js:400
|
||||
msgid "Bluetooth Agent"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:328
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Richesta autorizzazione da %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:334
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "Il dispositivo %s vuole accedere al servizio «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:336
|
||||
msgid "Always grant access"
|
||||
msgstr "Consenti sempre accesso"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:337
|
||||
msgid "Grant this time only"
|
||||
msgstr "Consenti solo stavolta"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:338
|
||||
msgid "Reject"
|
||||
msgstr "Rifiuta"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Conferma associazione per %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:374 ../js/ui/status/bluetooth.js:408
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "Il dispositivo %s vuole associarsi con questo computer"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:375
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Confermare la corrispondenza del PIN «%s» con quello sul dispositivo."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
msgid "Matches"
|
||||
msgstr "Corrisponde"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
msgid "Does not match"
|
||||
msgstr "Non corrisponde"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:401
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Richiesta associazione per %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:409
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Inserire il PIN indicato sul dispositivo."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:425
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:426
|
||||
msgid "Cancel"
|
||||
msgstr "Annulla"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "Impostazioni alimentazione"
|
||||
|
||||
#: ../js/ui/status/power.js:112
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
msgstr[0] "%d ora rimanente"
|
||||
msgstr[1] "%d ore rimanenti"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:115
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "%d %s e %d %s rimanenti"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "ora"
|
||||
msgstr[1] "ore"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "minuto"
|
||||
msgstr[1] "minuti"
|
||||
|
||||
#: ../js/ui/status/power.js:120
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "%d minuto rimanente"
|
||||
msgstr[1] "%d minuti rimanenti"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
msgid "AC adapter"
|
||||
msgstr "Alimentatore di corrente"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
msgid "Laptop battery"
|
||||
msgstr "Batteria del portatile"
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
msgid "UPS"
|
||||
msgstr "UPS"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
msgid "Monitor"
|
||||
msgstr "Monitor"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
msgid "Mouse"
|
||||
msgstr "Mouse"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
msgid "Keyboard"
|
||||
msgstr "Tastiera"
|
||||
|
||||
#: ../js/ui/status/power.js:249
|
||||
msgid "PDA"
|
||||
msgstr "PDS"
|
||||
|
||||
# c'era una discussione su tp...
|
||||
#: ../js/ui/status/power.js:251
|
||||
msgid "Cell phone"
|
||||
msgstr "Cellulare"
|
||||
|
||||
#: ../js/ui/status/power.js:253
|
||||
msgid "Media player"
|
||||
msgstr "Lettore multimediale"
|
||||
|
||||
#: ../js/ui/status/power.js:255
|
||||
msgid "Tablet"
|
||||
msgstr "Tablet"
|
||||
|
||||
#: ../js/ui/status/power.js:257
|
||||
msgid "Computer"
|
||||
msgstr "Computer"
|
||||
|
||||
#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
|
||||
msgid "Unknown"
|
||||
msgstr "Sconosciuto"
|
||||
|
||||
#: ../js/ui/status/volume.js:41
|
||||
msgid "Volume"
|
||||
msgstr "Volume"
|
||||
|
||||
#: ../js/ui/status/volume.js:54
|
||||
msgid "Microphone"
|
||||
msgstr "Microfono"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:560
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s è disponibile."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:565
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s è fuori rete."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:568
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s è assente."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:571
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s non è disponibile."
|
||||
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:664
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Inviato alle %-H.%M.%S di %A"
|
||||
|
||||
# FIXME ma ha senso in inglese???
|
||||
#: ../js/ui/viewSelector.js:26
|
||||
msgid "Search your computer"
|
||||
msgstr "Cerca nel computer"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
@ -656,60 +889,82 @@ msgid "'%s' is ready"
|
||||
msgstr "«%s» è pronto"
|
||||
|
||||
# (ndt) un po' liberetta...
|
||||
#: ../js/ui/workspacesView.js:230
|
||||
#: ../js/ui/workspacesView.js:244
|
||||
msgid ""
|
||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr ""
|
||||
"Impossibile aggiungere un nuovo spazio di lavoro: raggiunto il limite "
|
||||
"massimo consentito."
|
||||
|
||||
#: ../js/ui/workspacesView.js:247
|
||||
#: ../js/ui/workspacesView.js:260
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "Impossibile rimuovere il primo spazio di lavoro."
|
||||
|
||||
#: ../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 uscita"
|
||||
msgstr[1] "%u uscite"
|
||||
|
||||
#. 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 ingresso"
|
||||
msgstr[1] "%u ingressi"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
msgid "System Sounds"
|
||||
msgstr "Audio di sistema"
|
||||
|
||||
#: ../src/shell-global.c:1155
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Meno di un minuto fa"
|
||||
|
||||
#: ../src/shell-global.c:1200
|
||||
#: ../src/shell-global.c:1159
|
||||
#, 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:1205
|
||||
#: ../src/shell-global.c:1164
|
||||
#, 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:1210
|
||||
#: ../src/shell-global.c:1169
|
||||
#, 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:1215
|
||||
#: ../src/shell-global.c:1174
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d settimana fa"
|
||||
msgstr[1] "%d settimane fa"
|
||||
|
||||
#: ../src/shell-uri-util.c:89
|
||||
#: ../src/shell-util.c:89
|
||||
msgid "Home Folder"
|
||||
msgstr "Cartella home"
|
||||
|
||||
#. Translators: this is the same string as the one found in
|
||||
#. * nautilus
|
||||
#: ../src/shell-uri-util.c:104
|
||||
#: ../src/shell-util.c:104
|
||||
msgid "File System"
|
||||
msgstr "File system"
|
||||
|
||||
#: ../src/shell-uri-util.c:250
|
||||
#: ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "Cerca"
|
||||
|
||||
@ -719,13 +974,7 @@ msgstr "Cerca"
|
||||
#. * example, "Trash: some-directory". It means that the
|
||||
#. * directory called "some-directory" is in the trash.
|
||||
#.
|
||||
#: ../src/shell-uri-util.c:300
|
||||
#: ../src/shell-util.c:300
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "ON"
|
||||
#~ msgstr "On"
|
||||
|
||||
#~ msgid "OFF"
|
||||
#~ msgstr "Off"
|
||||
|
532
po/nb.po
532
po/nb.po
@ -1,21 +1,23 @@
|
||||
# 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@gnome.org>, 2009-2010.
|
||||
#
|
||||
# Kjartan Maraas <kmaraas@gnome.org>, 2009-2010.
|
||||
# Torstein Adolf Winterseth <kvikende@fsfe.org>, 2010.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell 2.31.x\n"
|
||||
"Project-Id-Version: gnome-shell 2.91.x\n"
|
||||
"Report-Msgid-Bugs-To: \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"
|
||||
"POT-Creation-Date: 2011-01-04 19:39+0100\n"
|
||||
"PO-Revision-Date: 2011-01-04 19:43+0100\n"
|
||||
"Last-Translator: Torstein Adolf Winterseth <kvikende@fsfe.org>\n"
|
||||
"Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.uio.no>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Lokalize 1.1\n"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||
msgid "GNOME Shell"
|
||||
@ -25,14 +27,6 @@ msgstr "GNOME Shell"
|
||||
msgid "Window management and application launching"
|
||||
msgstr "Vindushåndtering og oppstart av programmer"
|
||||
|
||||
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
|
||||
msgid "Clock"
|
||||
msgstr "Klokke"
|
||||
|
||||
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
|
||||
msgid "Customize the panel clock"
|
||||
msgstr "Tilpass klokken på panelet"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
||||
msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
@ -42,60 +36,44 @@ msgstr ""
|
||||
"F2-dialogen."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
msgid "Custom format of the clock"
|
||||
msgstr "Egendefinert format for klokken"
|
||||
|
||||
#: ../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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should not be loaded."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
msgid "If true, display date in the clock, in addition to time."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||
msgid "Hour format"
|
||||
msgstr "Timeformat"
|
||||
msgid "If true, display seconds in time."
|
||||
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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
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 "
|
||||
@ -107,48 +85,42 @@ msgid ""
|
||||
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
msgid "Show date in clock"
|
||||
msgstr "Vis dato i klokken"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Vis dato for uken i kalender"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Vis tid med sekunder"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
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 "
|
||||
@ -156,29 +128,11 @@ msgid ""
|
||||
"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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr "Uuider på utvidelser som skal slås av"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Om det skal samles statistikk om bruk av programmer"
|
||||
|
||||
@ -307,90 +261,46 @@ msgstr ""
|
||||
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"
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:155
|
||||
msgid "All"
|
||||
msgstr "Alle"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:2
|
||||
msgid "Clock Preferences"
|
||||
msgstr "Brukervalg for klokke"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:3
|
||||
msgid "Panel Display"
|
||||
msgstr "Panelvisning"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:4
|
||||
msgid "Show seco_nds"
|
||||
msgstr "Vis seku_nder"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:5
|
||||
msgid "Show the _date"
|
||||
msgstr "Vis _dato"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:6
|
||||
msgid "_12 hour format"
|
||||
msgstr "_12-timers format"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:7
|
||||
msgid "_24 hour format"
|
||||
msgstr "_24-timers format"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
#: ../js/ui/appDisplay.js:236
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "PROGRAMMER"
|
||||
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
#: ../js/ui/appDisplay.js:266
|
||||
msgid "PREFERENCES"
|
||||
msgstr "BRUKERVALG"
|
||||
|
||||
#: ../js/ui/appDisplay.js:648
|
||||
#: ../js/ui/appDisplay.js:563
|
||||
msgid "New Window"
|
||||
msgstr "Nytt vindu"
|
||||
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
#: ../js/ui/appDisplay.js:567
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Fjern fra favoritter"
|
||||
|
||||
#: ../js/ui/appDisplay.js:653
|
||||
#: ../js/ui/appDisplay.js:568
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Legg til i favoritter"
|
||||
|
||||
#: ../js/ui/appDisplay.js:830
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Dra hit for å legge til favoritter"
|
||||
|
||||
#: ../js/ui/appFavorites.js:88
|
||||
#: ../js/ui/appFavorites.js:91
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s ble lagt til i dine favoritter."
|
||||
|
||||
#: ../js/ui/appFavorites.js:107
|
||||
#: ../js/ui/appFavorites.js:122
|
||||
#, c-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s ble fjernet fra dine favoritter."
|
||||
|
||||
#: ../js/ui/dash.js:142
|
||||
msgid "Find"
|
||||
msgstr "Finn"
|
||||
#: ../js/ui/dash.js:27
|
||||
msgid "Remove"
|
||||
msgstr "Fjern"
|
||||
|
||||
#: ../js/ui/dash.js:473
|
||||
msgid "Searching..."
|
||||
msgstr "Søker..."
|
||||
|
||||
#: ../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:797 ../js/ui/placeDisplay.js:554
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "STEDER & ENHETER"
|
||||
|
||||
#. **** Documents ****
|
||||
#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
|
||||
#: ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "SISTE OPPFØRINGER"
|
||||
|
||||
@ -424,63 +334,67 @@ msgstr "Vis kildekode"
|
||||
msgid "Web Page"
|
||||
msgstr "Nettside"
|
||||
|
||||
#: ../js/ui/overview.js:160
|
||||
#: ../js/ui/overview.js:96
|
||||
msgid "Undo"
|
||||
msgstr "Angre"
|
||||
|
||||
#: ../js/ui/overview.js:158
|
||||
msgid "Windows"
|
||||
msgstr "Vinduer"
|
||||
|
||||
#: ../js/ui/overview.js:161
|
||||
msgid "Applications"
|
||||
msgstr "Programmer"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:469
|
||||
#: ../js/ui/panel.js:476
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Avslutt %s"
|
||||
|
||||
#: ../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:580
|
||||
#: ../js/ui/panel.js:561
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %e %b, %R.%S"
|
||||
|
||||
#: ../js/ui/panel.js:581
|
||||
#: ../js/ui/panel.js:562
|
||||
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
|
||||
#: ../js/ui/panel.js:566
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R.%S"
|
||||
|
||||
#: ../js/ui/panel.js:586
|
||||
#: ../js/ui/panel.js:567
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:593
|
||||
#: ../js/ui/panel.js:574
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %e %b, %l.%M.%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:594
|
||||
#: ../js/ui/panel.js:575
|
||||
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
|
||||
#: ../js/ui/panel.js:579
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l.%M.%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:599
|
||||
#: ../js/ui/panel.js:580
|
||||
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:744
|
||||
#: ../js/ui/panel.js:725
|
||||
msgid "Activities"
|
||||
msgstr "Aktiviteter"
|
||||
|
||||
@ -495,7 +409,11 @@ msgstr "Prøv igjen"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:159
|
||||
msgid "Connect to..."
|
||||
msgstr "Koble til..."
|
||||
msgstr "Koble til …"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:558
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "STEDER & ENHETER"
|
||||
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
@ -523,41 +441,37 @@ msgstr "Tilgjengelig"
|
||||
msgid "Busy"
|
||||
msgstr "Opptatt"
|
||||
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "Usynlig"
|
||||
#: ../js/ui/statusMenu.js:114
|
||||
msgid "My Account"
|
||||
msgstr "Min konto"
|
||||
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr "Min konto..."
|
||||
#: ../js/ui/statusMenu.js:118
|
||||
msgid "System Settings"
|
||||
msgstr "Systeminnstillinger"
|
||||
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
msgid "System Preferences..."
|
||||
msgstr "Brukervalg for systemet..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
msgid "Lock Screen"
|
||||
msgstr "Lås skjerm"
|
||||
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
#: ../js/ui/statusMenu.js:129
|
||||
msgid "Switch User"
|
||||
msgstr "Bytt bruker"
|
||||
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Log Out..."
|
||||
msgstr "Logg ut..."
|
||||
msgstr "Logg ut …"
|
||||
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr "Hvilemodus"
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
msgid "Suspend..."
|
||||
msgstr "Hvilemodus …"
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
msgstr "Start på nytt..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
#: ../js/ui/statusMenu.js:145
|
||||
msgid "Shut Down..."
|
||||
msgstr "Avslutt..."
|
||||
msgstr "Avslutt …"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:82
|
||||
msgid "Zoom"
|
||||
msgstr "Zoom"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
@ -595,13 +509,253 @@ msgstr "Innstillinger for tilgjengelighet"
|
||||
msgid "High Contrast"
|
||||
msgstr "Høy kontrast"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
#: ../js/ui/status/accessibility.js:205
|
||||
msgid "Large Text"
|
||||
msgstr "Stor tekst"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "Zoom"
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:234
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:55
|
||||
msgid "Visibility"
|
||||
msgstr "Synlighet"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:69
|
||||
msgid "Send Files to Device..."
|
||||
msgstr "Send filer til enhet..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:70
|
||||
msgid "Setup a New Device..."
|
||||
msgstr "Sett opp en ny enhet..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:94
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "Innstillinger for Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:185
|
||||
msgid "Connection"
|
||||
msgstr "Tilkobling"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:221
|
||||
msgid "Send Files..."
|
||||
msgstr "Send filer..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:226
|
||||
msgid "Browse Files..."
|
||||
msgstr "Bla gjennom filer..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:235
|
||||
msgid "Error browsing device"
|
||||
msgstr "Feil under lesing av enhet"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:236
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "Kan ikke bla gjennom forespurt enhet. Feilen er «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:244
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Innstillinger for tastatur"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:249
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Innstillinger for mus"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:256 ../js/ui/status/volume.js:62
|
||||
msgid "Sound Settings"
|
||||
msgstr "Innstillinger for lyd"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:327 ../js/ui/status/bluetooth.js:361
|
||||
#: ../js/ui/status/bluetooth.js:401 ../js/ui/status/bluetooth.js:434
|
||||
msgid "Bluetooth Agent"
|
||||
msgstr "Bluetooth-agent"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:362
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Forespørsel om autorisering fra %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "Enhet %s vil ha tilgang til tjenesten «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:370
|
||||
msgid "Always grant access"
|
||||
msgstr "Alltid gi tilgang"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:371
|
||||
msgid "Grant this time only"
|
||||
msgstr "Gi tilgang kun denne ene gangen"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
msgid "Reject"
|
||||
msgstr "Avvis"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:402
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Bekreftelse for tilkobling for %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:408 ../js/ui/status/bluetooth.js:442
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "Enhet %s vil koble seg sammen med denne datamaskinen"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:409
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Vennligst bekreft om PIN «%s» er lik den som brukes på enheten."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:411
|
||||
msgid "Matches"
|
||||
msgstr "Stemmer overens"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
msgid "Does not match"
|
||||
msgstr "Stemmer ikke overens"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:435
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Forespørsel om tilkobling for %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:443
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Vennligst oppgi PIN som oppgitt på enheten."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:459
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:460
|
||||
msgid "Cancel"
|
||||
msgstr "Avbryt"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "Innstillinger for strøm"
|
||||
|
||||
#: ../js/ui/status/power.js:112
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
msgstr[0] "%d time gjenstår"
|
||||
msgstr[1] "%d timer gjenstår"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:115
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "%d %s %d %s gjenstår"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "time"
|
||||
msgstr[1] "timer"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "minutt"
|
||||
msgstr[1] "minutter"
|
||||
|
||||
#: ../js/ui/status/power.js:120
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "%d minutt gjenstår"
|
||||
msgstr[1] "%d minutter gjenstår"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
msgid "AC adapter"
|
||||
msgstr "Strømadapter"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
msgid "Laptop battery"
|
||||
msgstr "Batteri på bærbar"
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
msgid "UPS"
|
||||
msgstr "UPS"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
msgid "Monitor"
|
||||
msgstr "Skjerm"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
msgid "Mouse"
|
||||
msgstr "Mus"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
msgid "Keyboard"
|
||||
msgstr "Tastatur"
|
||||
|
||||
#: ../js/ui/status/power.js:249
|
||||
msgid "PDA"
|
||||
msgstr "PDA"
|
||||
|
||||
#: ../js/ui/status/power.js:251
|
||||
msgid "Cell phone"
|
||||
msgstr "Mobiltelefon"
|
||||
|
||||
#: ../js/ui/status/power.js:253
|
||||
msgid "Media player"
|
||||
msgstr "Medieavspiller"
|
||||
|
||||
#: ../js/ui/status/power.js:255
|
||||
msgid "Tablet"
|
||||
msgstr "Nettbrett"
|
||||
|
||||
#: ../js/ui/status/power.js:257
|
||||
msgid "Computer"
|
||||
msgstr "Datamaskin"
|
||||
|
||||
#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
|
||||
msgid "Unknown"
|
||||
msgstr "Ukjent"
|
||||
|
||||
#: ../js/ui/status/volume.js:41
|
||||
msgid "Volume"
|
||||
msgstr "Volum"
|
||||
|
||||
#: ../js/ui/status/volume.js:54
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofon"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:560
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s er tilkoblet."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:565
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s er frakoblet."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:568
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "«%s» er borte."
|
||||
|
||||
#: ../js/ui/telepathyClient.js:571
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s er opptatt."
|
||||
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:665
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "Sendt %X på %A"
|
||||
|
||||
#: ../js/ui/viewSelector.js:26
|
||||
msgid "Search your computer"
|
||||
msgstr "Søk på din datamaskin"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
@ -613,14 +767,14 @@ msgstr "%s er ferdig startet"
|
||||
msgid "'%s' is ready"
|
||||
msgstr "«%s» er klar"
|
||||
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
#: ../js/ui/workspacesView.js:244
|
||||
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:246
|
||||
#: ../js/ui/workspacesView.js:260
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "Kan ikke fjerne første arbeidsområde"
|
||||
|
||||
@ -646,49 +800,49 @@ msgstr[1] "%u innganger"
|
||||
msgid "System Sounds"
|
||||
msgstr "Systemlyder"
|
||||
|
||||
#: ../src/shell-global.c:1204
|
||||
#: ../src/shell-global.c:1156
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Mindre enn ett minutt siden"
|
||||
|
||||
#: ../src/shell-global.c:1208
|
||||
#: ../src/shell-global.c:1160
|
||||
#, 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:1213
|
||||
#: ../src/shell-global.c:1165
|
||||
#, 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:1218
|
||||
#: ../src/shell-global.c:1170
|
||||
#, 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:1223
|
||||
#: ../src/shell-global.c:1175
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d uke siden"
|
||||
msgstr[1] "%d uker siden"
|
||||
|
||||
#: ../src/shell-uri-util.c:89
|
||||
#: ../src/shell-util.c:89
|
||||
msgid "Home Folder"
|
||||
msgstr "Hjemmemappe"
|
||||
|
||||
#. Translators: this is the same string as the one found in
|
||||
#. * nautilus
|
||||
#: ../src/shell-uri-util.c:104
|
||||
#: ../src/shell-util.c:104
|
||||
msgid "File System"
|
||||
msgstr "Filsystem"
|
||||
|
||||
#: ../src/shell-uri-util.c:250
|
||||
#: ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "Søk"
|
||||
|
||||
@ -697,7 +851,7 @@ msgstr "Søk"
|
||||
#. * example, "Trash: some-directory". It means that the
|
||||
#. * directory called "some-directory" is in the trash.
|
||||
#.
|
||||
#: ../src/shell-uri-util.c:300
|
||||
#: ../src/shell-util.c:300
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
661
po/pa.po
661
po/pa.po
@ -1,20 +1,20 @@
|
||||
# Punjabi 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.
|
||||
#
|
||||
# A S Alam <aalam@users.sf.net>, 2009, 2010.
|
||||
# A S Alam <aalam@users.sf.net>, 2009, 2010, 2011.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
|
||||
"cgi?product=gnome-shell&component=general\n"
|
||||
"POT-Creation-Date: 2010-10-27 23:15+0000\n"
|
||||
"PO-Revision-Date: 2010-10-29 08:13+0530\n"
|
||||
"POT-Creation-Date: 2011-01-04 16:17+0000\n"
|
||||
"PO-Revision-Date: 2011-01-08 08:20+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"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: pa\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Lokalize 1.1\n"
|
||||
|
||||
@ -26,14 +26,6 @@ msgstr "ਗਨੋਮ ਸ਼ੈਲ"
|
||||
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 "
|
||||
@ -41,61 +33,49 @@ msgid ""
|
||||
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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "ਸਕਰੀਨਕਾਸਟ ਸੰਭਾਲਣ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਫਾਇਲ ਇਕਟੈਨਸ਼ਨ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "ਸਕਰੀਨਕਾਸਟ ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਫਰੇਮਰੇਟ ਹੈ।"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid ""
|
||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||
"should not be loaded."
|
||||
msgstr ""
|
||||
"ਗਨੋਮ ਸ਼ੈਲ ਇਕਸਟੈਨਸ਼ਨ ਲਈ ਇੱਕ uuid ਵਿਸ਼ੇਸ਼ਤਾ ਹੈ; ਇਹ ਕੁੰਜੀ ਇਕਸਟੈਨਸ਼ਨ ਦਰਸਾਉਂਦੀ ਹੈ, ਜੋ ਲੋਡ ਨਹੀਂ ਹਨ।"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
msgid "History for command (Alt-F2) dialog"
|
||||
msgstr "ਕਮਾਂਡ (Alt-F2) ਡਾਈਲਾਗ ਲਈ ਅਤੀਤ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||
#| msgid ""
|
||||
#| "If true and format is either \"12-hour\" or \"24-hour\", display date in "
|
||||
#| "the clock, in addition to time."
|
||||
msgid "If true, display date in the clock, in addition to time."
|
||||
msgstr "ਜੇ ਸੱਚ ਹੈ ਤਾਂ, ਘੜੀ ਵਿਚ ਸਮਾਂ ਨਾਲ ਮਿਤੀ ਵੀ ਵੇਖਾਈ ਜਾਵੇਗੀ।"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||
msgid "Hour format"
|
||||
msgstr "ਘੰਟਾ ਫਾਰਮੈਟ"
|
||||
#| msgid "If true, display the ISO week date in the calendar."
|
||||
msgid "If true, display seconds in time."
|
||||
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 "ਜੇ ਚੋਣ ਕੀਤੀ ਤਾਂ ਘੜੀ ਵਿੱਚ \"12-hour\" ਜਾਂ \" 24-hour\" ਸਮੇਂ ਦੇ ਨਾਲ ਵੇਖਾਏ ਜਾਣਗੇ।"
|
||||
|
||||
#: ../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 "ਜੇ ਚੋਣ ਕੀਤੀ ਤਾਂ ਸਮੇਂ ਵਿੱਚ \"12-hour\" ਜਾਂ \" 24-hour\" ਸਕਿੰਟ ਵੇਖਾਏ ਜਾਣਗੇ।"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "ਜੇ ਚੋਣ ਕੀਤੀ ਤਾਂ ਕੈਲੰਡਰ ਵਿੱਚ ISO ਹਫਤਾ ਮਿਤੀ ਵੇਖਾਈ ਜਾਵੇਗੀ।"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
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 "
|
||||
@ -107,32 +87,35 @@ msgid ""
|
||||
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
msgid "Show date in clock"
|
||||
msgstr "ਘੜੀ ਵਿੱਚ ਮਿਤੀ ਵੇਖੋ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "ਕੈਲੰਡਰ ਵਿੱਚ ਹਫ਼ਤਾ ਮਿਤੀ ਵੇਖੋ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show time with seconds"
|
||||
msgstr "ਸਮਾਂ ਵਿੱਚ ਸਕਿੰਟ ਵੇਖੋ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr "ਇਹਨਾਂ ਐਂਡਟਟੀਫਾਇਰ ਨਾਲ ਸਬੰਧਿਤ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਪਸੰਦੀਦਾ ਖੇਤਰ 'ਚ ਵੇਖਾਇਆ ਜਾਵੇਗਾ।"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
@ -140,57 +123,27 @@ msgstr ""
|
||||
"ਗਨੋਮ ਸ਼ੈੱਲ ਦੇ ਸਕਰੀਨਕਾਸਟ ਰਿਕਾਰਡਰ ਵਲੋਂ ਰਿਕਾਰਡ ਕਰਕੇ ਬਣਾਈ ਗਈ ਸਕਰੀਨਕਾਸਟ ਦਾ ਫਰੇਮਰੇਟ ਫਰੇਮ ਪ੍ਰਤੀ "
|
||||
"ਸਕਿੰਟ 'ਚ ਹੈ।"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
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 ""
|
||||
"ਸੰਖੇਪ ਵਿੱਚ ਚੁਣੇ ਵਰਕਸਪੇਸ ਝਲਕ ਮੋਡ ਹੈ। ਸਹਾਇਕ ਮੁੱਲ ਹਨ \"single\"(ਇੱਕਲਾ) ਜਾਂ \"grid\" (ਗਰਿੱਡ)।"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
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 ""
|
||||
"ਇਹ ਕੁੰਜੀ ਪੈਨਲ ਘੜੀ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਫਾਰਮੈਟ ਦਿੰਦੀ ਹੈ, ਜਦੋਂ ਕਿ ਫਾਰਮੈਟ ਕੁੰਜੀ \"ਕਸਟਮ\" ਸੈੱਟ ਕੀਤੀ "
|
||||
"ਹੋਵੇ। ਤੁਸੀਂ ਖਾਸ ਫਾਰਮੈਟ ਦੇਣ ਲਈ ਹਦਾਇਤਾਂ ਵਾਸਤੇ 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\"(੧੨-ਘੰਟੇ), \"24-hour\" (੨੪-ਘੰਟੇ), \"unix\" (ਯੂਨੈਕਸ) ਅਤੇ \"custom\" (ਪਸੰਦੀਦਾ)। "
|
||||
"ਜੇ \"ਯੂਨੈਕਸ\" ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਤਾਂ ਘੜੀ ਨੂੰ ਈਪੋਚ (੦੧-ਜਨਵਰੀ-੧੯੭੦) ਤੋਂ ਵੇਖਾਇਆ\n"
|
||||
"ਜਾਵੇਗਾ। ਜੇ \"ਪਸੰਦੀਦਾ\" ਲਈ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਤਾਂ, ਘੜੀ ਨੂੰ custom_format ਕੁੰਜੀ ਵਿੱਚ ਦਿੱਤੇ ਫਾਰਮੈਟ "
|
||||
"ਮੁਤਾਬਕ ਵੇਖਾਇਆ ਜਾਵੇਗਾ। ਯਾਦ ਰੱਖੋ ਕਿ ਜੇ \"ਯੂਨੈਕਸ\" ਜਾਂ \"ਪਸੰਦੀਦਾ\" ਸੈੱਟ ਕੀਤਾ ਤਾਂ ਅੱਪਗਰੇਡ ਮਿਤੀ "
|
||||
"ਵੇਖਾਓ ਤੇ ਸਕਿੰਟ ਵੇਖਾਓ ਨੂੰ ਅਣਡਿੱਠਾ ਕੀਤਾ ਜਾਵੇਗਾ।"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr "ਇਕਟੈਨਸ਼ਨ ਦੀ Uuids ਬੰਦ ਹੈ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਵਰਤੋਂ ਬਾਰੇ ਅੰਕੜੇ ਇੱਕਠੇ ਕਰਨੇ ਹਨ"
|
||||
|
||||
@ -206,7 +159,7 @@ msgstr "ਕਰਾਂਸਹੇਅਰ ਦਾ ਰੰਗ"
|
||||
msgid ""
|
||||
"Determines the length of the vertical and horizontal lines that make up the "
|
||||
"crosshairs."
|
||||
msgstr ""
|
||||
msgstr "ਵਰਟੀਕਲ ਤੇ ਹਰੀਜੱਟਲ ਲਾਈਨਾਂ ਦੀ ਲੰਬਾਈ ਦੱਸੋ, ਜੋ ਕਿ ਕਰਾਂਸਹੇਅਰ ਬਣਾਉਂਦੀਆਂ ਹਨ।"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
|
||||
msgid ""
|
||||
@ -225,7 +178,7 @@ msgstr ""
|
||||
msgid ""
|
||||
"Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
"transparent."
|
||||
msgstr ""
|
||||
msgstr "ਕਰਾਂਸਹੇਅਰ ਦੀ ਟਰਾਂਸਪਰੇਸੀ ਤਹਿ ਕਰੋ, ਪੂਰੀ ਤਰ੍ਹਾਂ ਧੁੰਦਲੇ ਤੋਂ ਪਾਰਦਰਸ਼ੀ ਹੀ।"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
@ -235,7 +188,6 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
|
||||
#| msgid "Enabled"
|
||||
msgid "Enable lens mode"
|
||||
msgstr "ਲੈਨਜ਼ ਮੋਡ ਚਾਲੂ"
|
||||
|
||||
@ -243,7 +195,7 @@ msgstr "ਲੈਨਜ਼ ਮੋਡ ਚਾਲੂ"
|
||||
msgid ""
|
||||
"Enables/disables display of crosshairs centered on the magnified mouse "
|
||||
"sprite."
|
||||
msgstr ""
|
||||
msgstr "ਵੱਡਦਰਸ਼ੀ ਮਾਊਸ ਸਪਰਿਟ ਉੱਤੇ ਸੈਂਟਰ ਕੀਤੇ ਕਰਾਂਸਹੇਅਰ ਵੇਖਾਉਣਾ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰੋ।"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
|
||||
msgid ""
|
||||
@ -251,6 +203,9 @@ msgid ""
|
||||
"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"
|
||||
@ -299,6 +254,8 @@ 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 ""
|
||||
@ -314,96 +271,52 @@ msgstr "ਕਰਾਂਸਹੇਅਰ ਦੀ ਮੋਟਾਈ"
|
||||
msgid ""
|
||||
"Whether the magnified view should be centered over the location of the "
|
||||
"system mouse and move with it."
|
||||
msgstr ""
|
||||
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 "ਘੜੀ ਫਾਰਮੈਟ"
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:155
|
||||
msgid "All"
|
||||
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 "_੧੨ ਘੰਟੇ ਫਾਰਮੈਟ"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:7
|
||||
msgid "_24 hour format"
|
||||
msgstr "_੨੪ ਘੰਟੇ ਫਾਰਮੈਟ"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
#: ../js/ui/appDisplay.js:236
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "ਐਪਲੀਕੇਸ਼ਨ"
|
||||
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
#: ../js/ui/appDisplay.js:266
|
||||
msgid "PREFERENCES"
|
||||
msgstr "ਪਸੰਦ"
|
||||
|
||||
#: ../js/ui/appDisplay.js:648
|
||||
#: ../js/ui/appDisplay.js:563
|
||||
msgid "New Window"
|
||||
msgstr "ਨਵੀਂ ਵਿੰਡੋ"
|
||||
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
#: ../js/ui/appDisplay.js:567
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "ਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਓ"
|
||||
|
||||
#: ../js/ui/appDisplay.js:653
|
||||
#: ../js/ui/appDisplay.js:568
|
||||
msgid "Add to Favorites"
|
||||
msgstr "ਪਸੰਦ 'ਚ ਸ਼ਾਮਲ ਕਰੋ"
|
||||
|
||||
#: ../js/ui/appDisplay.js:830
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "ਪਸੰਦ ਵਿੱਚ ਜੋੜਨ ਲਈ ਇੱਥੇ ਸੁੱਟੋ"
|
||||
|
||||
#: ../js/ui/appFavorites.js:88
|
||||
#: ../js/ui/appFavorites.js:91
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s ਨੂੰ ਤੁਹਾਡੀ ਪਸੰਦ ਵਿੱਚ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ।"
|
||||
|
||||
#: ../js/ui/appFavorites.js:107
|
||||
#: ../js/ui/appFavorites.js:122
|
||||
#, c-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s ਨੂੰ ਤੁਹਾਡੀ ਪਸੰਦ ਤੋਂ ਹਟਾਇਆ ਜਾ ਚੁੱਕਿਆ ਹੈ।"
|
||||
|
||||
#: ../js/ui/dash.js:142
|
||||
msgid "Find"
|
||||
msgstr "ਖੋਜ"
|
||||
#: ../js/ui/dash.js:27
|
||||
msgid "Remove"
|
||||
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
|
||||
#: ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "ਤਾਜ਼ਾ ਆਈਟਮਾਂ"
|
||||
|
||||
@ -437,63 +350,67 @@ msgstr "ਸਰੋਤ ਵੇਖੋ"
|
||||
msgid "Web Page"
|
||||
msgstr "ਵੈੱਬ ਪੇਜ਼"
|
||||
|
||||
#: ../js/ui/overview.js:160
|
||||
#: ../js/ui/overview.js:96
|
||||
msgid "Undo"
|
||||
msgstr "ਵਾਪਸ"
|
||||
|
||||
#: ../js/ui/overview.js:158
|
||||
msgid "Windows"
|
||||
msgstr "ਵਿੰਡੋ"
|
||||
|
||||
#: ../js/ui/overview.js:161
|
||||
msgid "Applications"
|
||||
msgstr "ਐਪਲੀਕੇਸ਼ਨ"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:469
|
||||
#: ../js/ui/panel.js:476
|
||||
#, 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
|
||||
#: ../js/ui/panel.js:561
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a, %e %b %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:581
|
||||
#: ../js/ui/panel.js:562
|
||||
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
|
||||
#: ../js/ui/panel.js:566
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:586
|
||||
#: ../js/ui/panel.js:567
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:593
|
||||
#: ../js/ui/panel.js:574
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %e %b, %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:594
|
||||
#: ../js/ui/panel.js:575
|
||||
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
|
||||
#: ../js/ui/panel.js:579
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:599
|
||||
#: ../js/ui/panel.js:580
|
||||
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:744
|
||||
#: ../js/ui/panel.js:725
|
||||
msgid "Activities"
|
||||
msgstr "ਸਰਗਰਮੀਆਂ"
|
||||
|
||||
@ -510,6 +427,10 @@ msgstr "ਮੁੜ-ਕੋਸ਼ਿਸ਼"
|
||||
msgid "Connect to..."
|
||||
msgstr "...ਨਾਲ ਕੁਨੈਕਟ ਕਰੋ"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:558
|
||||
msgid "PLACES & DEVICES"
|
||||
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
|
||||
@ -536,43 +457,38 @@ msgstr "ਉਪਲੱਬਧ"
|
||||
msgid "Busy"
|
||||
msgstr "ਰੁਝਿਆ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "ਅਦਿੱਖ"
|
||||
#: ../js/ui/statusMenu.js:114
|
||||
msgid "My Account"
|
||||
msgstr "ਮੇਰਾ ਅਕਾਊਂਟ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr "...ਮੇਰਾ ਅਕਾਊਂਟ"
|
||||
#: ../js/ui/statusMenu.js:118
|
||||
msgid "System Settings"
|
||||
msgstr "ਸਿਸਟਮ ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
#| msgid "Preferences"
|
||||
msgid "System Preferences..."
|
||||
msgstr "ਸਿਸਟਮ ਪਸੰਦ..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
msgid "Lock Screen"
|
||||
msgstr "ਸਕਰੀਨ ਲਾਕ ਕਰੋ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
#: ../js/ui/statusMenu.js:129
|
||||
msgid "Switch User"
|
||||
msgstr "ਯੂਜ਼ਰ ਬਦਲੋ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Log Out..."
|
||||
msgstr "ਲਾਗਆਉਟ..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr "ਸਸਪੈਂਡ"
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
msgid "Suspend..."
|
||||
msgstr "ਸਸਪੈਂਡ..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
msgstr "...ਮੁੜ-ਚਾਲੂ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
#: ../js/ui/statusMenu.js:145
|
||||
msgid "Shut Down..."
|
||||
msgstr "ਬੰਦ ਕਰੋ..."
|
||||
|
||||
#: ../js/ui/status/accessibility.js:82
|
||||
msgid "Zoom"
|
||||
msgstr "ਜ਼ੂਮ"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "ਸਕਰੀਨ ਰੀਡਰ"
|
||||
@ -609,13 +525,253 @@ msgstr "ਯੂਨੀਵਰਸਲ ਅਸੈੱਸ ਸੈਟਿੰਗ"
|
||||
msgid "High Contrast"
|
||||
msgstr "ਵੱਧ ਕਨਟਰਾਸਟ"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
#: ../js/ui/status/accessibility.js:205
|
||||
msgid "Large Text"
|
||||
msgstr "ਵੱਡੇ ਅੱਖਰ"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "ਜ਼ੂਮ"
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:234
|
||||
msgid "Bluetooth"
|
||||
msgstr "ਬਲਿਊਟੁੱਥ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:55
|
||||
msgid "Visibility"
|
||||
msgstr "ਦਿੱਖ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:69
|
||||
msgid "Send Files to Device..."
|
||||
msgstr "...ਜੰਤਰ ਨੂੰ ਫਾਇਲਾਂ ਭੇਜੋ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:70
|
||||
msgid "Setup a New Device..."
|
||||
msgstr "...ਨਵਾਂ ਜੰਤਰ ਸੈਟਅੱਪ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:94
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "ਬਲਿਊਟੁੱਥ ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:185
|
||||
msgid "Connection"
|
||||
msgstr "ਕੁਨੈਕਸ਼ਨ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:221
|
||||
msgid "Send Files..."
|
||||
msgstr "...ਫਾਇਲਾਂ ਭੇਜੋ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:226
|
||||
msgid "Browse Files..."
|
||||
msgstr "...ਫਾਇਲਾਂ ਦੀ ਝਲਕ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:235
|
||||
msgid "Error browsing device"
|
||||
msgstr "ਜੰਤਰ ਬਰਾਊਜ਼ ਕਰਨ ਲਈ ਗਲਤੀ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:236
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "ਮੰਗ ਕੀਤੇ ਗਏ ਜੰਤਰ ਨੂੰ ਬਰਾਊਜ਼ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ, ਗਲਤੀ ਸੀ '%s'"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:244
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "ਕੀਬੋਰਡ ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:249
|
||||
msgid "Mouse Settings"
|
||||
msgstr "ਮਾਊਸ ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:256 ../js/ui/status/volume.js:62
|
||||
msgid "Sound Settings"
|
||||
msgstr "ਸਾਊਂਡ ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:327 ../js/ui/status/bluetooth.js:361
|
||||
#: ../js/ui/status/bluetooth.js:401 ../js/ui/status/bluetooth.js:434
|
||||
msgid "Bluetooth Agent"
|
||||
msgstr "ਬਲਿਊਟੁੱਥ ਏਜੰਟ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:362
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "'%s' ਤੋਂ ਪਰਮਾਣਕਿਤਾ ਮੰਗ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "ਜੰਤਰ %s ਸਰਵਿਸ '%s' ਨੂੰ ਵਰਤਣੀ ਚਾਹੁੰਦਾ ਹੈ।"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:370
|
||||
msgid "Always grant access"
|
||||
msgstr "ਹਮੇਸ਼ਾ ਪਹੁੰਚ ਮਨਜ਼ੂਰ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:371
|
||||
msgid "Grant this time only"
|
||||
msgstr "ਕੇਵਲ ਇਸ ਸਮੇਂ ਹੀ ਮਨਜ਼ੂਰ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
msgid "Reject"
|
||||
msgstr "ਨਾ-ਮਨਜ਼ੂਰ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:402
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "%s ਲਈ ਪੇਅਰ ਕਰਨ ਦੀ ਪੁਸ਼ਟੀ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:408 ../js/ui/status/bluetooth.js:442
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "ਜੰਤਰ %s ਇਸ ਕੰਪਿਊਟਰ ਨਾਲ ਪੇਅਰ ਹੋਣਾ ਚਾਹੁੰਦਾ ਹੈ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:409
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "ਪੁਸ਼ਟੀ ਕਰੋ ਜੀ ਕਿ ਪਿੰਨ '%s' ਜੰਤਰ ਉੱਤੇ ਮੌਜੂਦ ਪਿੰਨ ਨਾਲ ਮਿਲਦਾ ਹੈ।"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:411
|
||||
msgid "Matches"
|
||||
msgstr "ਮਿਲਦਾ ਹੈ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
msgid "Does not match"
|
||||
msgstr "ਮਿਲਦਾ ਨਹੀਂ ਹੈ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:435
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "%s ਲਈ ਪੇਅਰ ਕਰਨ ਦੀ ਮੰਗ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:443
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "ਜੰਤਰ ਉੱਤੇ ਦਿੱਤਾ ਗਿਆ ਪਿੰਨ ਦਿਉ ਜੀ।"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:459
|
||||
msgid "OK"
|
||||
msgstr "ਠੀਕ ਹੈ"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:460
|
||||
msgid "Cancel"
|
||||
msgstr "ਰੱਦ ਕਰੋ"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "ਪਾਵਰ ਸੈਟਿੰਗ"
|
||||
|
||||
#: ../js/ui/status/power.js:112
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
msgstr[0] "%d ਘੰਟਾ ਬਾਕੀ"
|
||||
msgstr[1] "%d ਘੰਟੇ ਬਾਕੀ"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:115
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "%d %s %d %s ਬਾਕੀ"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "ਘੰਟਾ"
|
||||
msgstr[1] "ਘੰਟੇ"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "ਮਿੰਟ"
|
||||
msgstr[1] "ਮਿੰਟ"
|
||||
|
||||
#: ../js/ui/status/power.js:120
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "%d ਮਿੰਟ ਬਾਕੀ"
|
||||
msgstr[1] "%d ਮਿੰਟ ਬਾਕੀ"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
msgid "AC adapter"
|
||||
msgstr "AC ਐਡਪਟਰ"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
msgid "Laptop battery"
|
||||
msgstr "ਲੈਪਟਾਪ ਬੈਟਰੀ"
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
msgid "UPS"
|
||||
msgstr "UPS"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
msgid "Monitor"
|
||||
msgstr "ਮਾਨੀਟਰ"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
msgid "Mouse"
|
||||
msgstr "ਮਾਊਸ"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
msgid "Keyboard"
|
||||
msgstr "ਕੀਬੋਰਡ"
|
||||
|
||||
#: ../js/ui/status/power.js:249
|
||||
msgid "PDA"
|
||||
msgstr "PDA"
|
||||
|
||||
#: ../js/ui/status/power.js:251
|
||||
msgid "Cell phone"
|
||||
msgstr "ਸੈੱਲ ਫੋਨ"
|
||||
|
||||
#: ../js/ui/status/power.js:253
|
||||
msgid "Media player"
|
||||
msgstr "ਮੀਡਿਆ ਪਲੇਅਰ"
|
||||
|
||||
#: ../js/ui/status/power.js:255
|
||||
msgid "Tablet"
|
||||
msgstr "ਟੇਬਲੇਟ"
|
||||
|
||||
#: ../js/ui/status/power.js:257
|
||||
msgid "Computer"
|
||||
msgstr "ਕੰਪਿਊਟਰ"
|
||||
|
||||
#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
|
||||
msgid "Unknown"
|
||||
msgstr "ਅਣਜਾਣ"
|
||||
|
||||
#: ../js/ui/status/volume.js:41
|
||||
msgid "Volume"
|
||||
msgstr "ਆਵਾਜ਼"
|
||||
|
||||
#: ../js/ui/status/volume.js:54
|
||||
msgid "Microphone"
|
||||
msgstr "ਮਾਈਕਰੋਫੋਨ"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:560
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s ਆਨਲਾਈਨ ਹੈ।"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:565
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s ਆਫਲਾਈਨ ਹੈ।"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:568
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s ਦੂਰ ਹੈ।"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:571
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s ਰੁੱਝਿਆ/ਰੁੱਝੀ ਹੈ।"
|
||||
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:665
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "%2$A ਨੂੰ %1$X ਵਜੇ ਭੇਜਿਆ"
|
||||
|
||||
#: ../js/ui/viewSelector.js:26
|
||||
msgid "Search your computer"
|
||||
msgstr "ਆਪਣੇ ਕੰਪਿਊਟਰ ਉੱਤੇ ਲੱਭੋ"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
@ -627,11 +783,11 @@ msgstr "%s ਸ਼ੁਰੂ ਹੋਣਾ ਖਤਮ ਹੋਇਆ"
|
||||
msgid "'%s' is ready"
|
||||
msgstr "'%s' ਤਿਆਰ ਹੈ"
|
||||
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
#: ../js/ui/workspacesView.js:244
|
||||
msgid "Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr "ਨਵਾਂ ਵਰਕਸਪੇਸ ਜੋੜਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ, ਕਿਉਂਕਿ ਵਰਕਸਪੇਸਾਂ ਦੀ ਵੱਧੋ-ਵੱਧ ਗਿਣਤੀ ਪੂਰੀ ਹੋ ਚੁੱਕੀ ਹੈ।"
|
||||
|
||||
#: ../js/ui/workspacesView.js:246
|
||||
#: ../js/ui/workspacesView.js:260
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "ਪਹਿਲਾਂ ਵਰਕਸਪੇਸ ਨਹੀਂ ਹਟਾਇਆ ਜਾ ਸਕਦਾ।"
|
||||
|
||||
@ -654,53 +810,52 @@ 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
|
||||
#: ../src/shell-global.c:1156
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "ਇੱਕ ਮਿੰਟ ਤੋਂ ਘੱਟ ਚਿਰ ਪਹਿਲਾਂ"
|
||||
|
||||
#: ../src/shell-global.c:1208
|
||||
#: ../src/shell-global.c:1160
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d ਮਿੰਟ ਪਹਿਲਾਂ"
|
||||
msgstr[1] "%d ਮਿੰਟ ਪਹਿਲਾਂ"
|
||||
|
||||
#: ../src/shell-global.c:1213
|
||||
#: ../src/shell-global.c:1165
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d ਘੰਟਾ ਪਹਿਲਾਂ"
|
||||
msgstr[1] "%d ਘੰਟੇ ਪਹਿਲਾਂ"
|
||||
|
||||
#: ../src/shell-global.c:1218
|
||||
#: ../src/shell-global.c:1170
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d ਦਿਨ ਪਹਿਲਾਂ"
|
||||
msgstr[1] "%d ਦਿਨ ਪਹਿਲਾਂ"
|
||||
|
||||
#: ../src/shell-global.c:1223
|
||||
#: ../src/shell-global.c:1175
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d ਹਫ਼ਤਾ ਪਹਿਲਾਂ"
|
||||
msgstr[1] "%d ਹਫ਼ਤੇ ਪਹਿਲਾਂ"
|
||||
|
||||
#: ../src/shell-uri-util.c:89
|
||||
#: ../src/shell-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
|
||||
#: ../src/shell-util.c:104
|
||||
msgid "File System"
|
||||
msgstr "ਫਾਇਲ ਸਿਸਟਮ"
|
||||
|
||||
#: ../src/shell-uri-util.c:250
|
||||
#: ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "ਖੋਜ"
|
||||
|
||||
@ -709,11 +864,109 @@ msgstr "ਖੋਜ"
|
||||
#. * example, "Trash: some-directory". It means that the
|
||||
#. * directory called "some-directory" is in the trash.
|
||||
#.
|
||||
#: ../src/shell-uri-util.c:300
|
||||
#: ../src/shell-util.c:300
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Clock"
|
||||
#~ msgstr "ਘੜੀ"
|
||||
|
||||
#~ msgid "Customize the panel clock"
|
||||
#~ msgstr "ਪੈਨਲ ਘੜੀ ਕਸਟਮਾਈਜ਼ ਕਰੋ"
|
||||
|
||||
#~ msgid "Custom format of the clock"
|
||||
#~ msgstr "ਘੜੀ ਲਈ ਪਸੰਦੀਦਾ ਫਾਰਮੈਟ"
|
||||
|
||||
#~ msgid "Hour format"
|
||||
#~ msgstr "ਘੰਟਾ ਫਾਰਮੈਟ"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
|
||||
#~ "in time."
|
||||
#~ msgstr "ਜੇ ਚੋਣ ਕੀਤੀ ਤਾਂ ਸਮੇਂ ਵਿੱਚ \"12-hour\" ਜਾਂ \" 24-hour\" ਸਕਿੰਟ ਵੇਖਾਏ ਜਾਣਗੇ।"
|
||||
|
||||
#~ 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 ""
|
||||
#~ "ਇਹ ਕੁੰਜੀ ਪੈਨਲ ਘੜੀ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਫਾਰਮੈਟ ਦਿੰਦੀ ਹੈ, ਜਦੋਂ ਕਿ ਫਾਰਮੈਟ ਕੁੰਜੀ \"ਕਸਟਮ\" ਸੈੱਟ "
|
||||
#~ "ਕੀਤੀ ਹੋਵੇ। ਤੁਸੀਂ ਖਾਸ ਫਾਰਮੈਟ ਦੇਣ ਲਈ ਹਦਾਇਤਾਂ ਵਾਸਤੇ strftime () ਨੂੰ ਵਰਤ ਸਕਦੇ ਹੋ। ਹੋਰ "
|
||||
#~ "ਜਾਣਕਾਰੀ ਲਈ strftime () ਦਸਤਾਵੇਜ਼ ਵੇਖੋ।"
|
||||
|
||||
#~ 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\"(੧੨-ਘੰਟੇ), \"24-hour\" (੨੪-ਘੰਟੇ), \"unix\" (ਯੂਨੈਕਸ) ਅਤੇ \"custom"
|
||||
#~ "\" (ਪਸੰਦੀਦਾ)। ਜੇ \"ਯੂਨੈਕਸ\" ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਤਾਂ ਘੜੀ ਨੂੰ ਈਪੋਚ (੦੧-ਜਨਵਰੀ-੧੯੭੦) ਤੋਂ ਵੇਖਾਇਆ\n"
|
||||
#~ "ਜਾਵੇਗਾ। ਜੇ \"ਪਸੰਦੀਦਾ\" ਲਈ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਤਾਂ, ਘੜੀ ਨੂੰ custom_format ਕੁੰਜੀ ਵਿੱਚ ਦਿੱਤੇ "
|
||||
#~ "ਫਾਰਮੈਟ ਮੁਤਾਬਕ ਵੇਖਾਇਆ ਜਾਵੇਗਾ। ਯਾਦ ਰੱਖੋ ਕਿ ਜੇ \"ਯੂਨੈਕਸ\" ਜਾਂ \"ਪਸੰਦੀਦਾ\" ਸੈੱਟ ਕੀਤਾ ਤਾਂ "
|
||||
#~ "ਅੱਪਗਰੇਡ ਮਿਤੀ ਵੇਖਾਓ ਤੇ ਸਕਿੰਟ ਵੇਖਾਓ ਨੂੰ ਅਣਡਿੱਠਾ ਕੀਤਾ ਜਾਵੇਗਾ।"
|
||||
|
||||
#~ msgid "Clock Format"
|
||||
#~ msgstr "ਘੜੀ ਫਾਰਮੈਟ"
|
||||
|
||||
#~ msgid "Clock Preferences"
|
||||
#~ msgstr "ਘੜੀ ਪਸੰਦ"
|
||||
|
||||
#~ msgid "Panel Display"
|
||||
#~ msgstr "ਪੈਨਲ ਦਿੱਖ"
|
||||
|
||||
#~ msgid "Show seco_nds"
|
||||
#~ msgstr "ਸਕਿੰਟ ਵੇਖੋ(_n)"
|
||||
|
||||
#~ msgid "Show the _date"
|
||||
#~ msgstr "ਮਿਤੀ ਵੇਖੋ(_d)"
|
||||
|
||||
#~ msgid "_12 hour format"
|
||||
#~ msgstr "_੧੨ ਘੰਟੇ ਫਾਰਮੈਟ"
|
||||
|
||||
#~ msgid "_24 hour format"
|
||||
#~ msgstr "_੨੪ ਘੰਟੇ ਫਾਰਮੈਟ"
|
||||
|
||||
#~ msgid "Preferences"
|
||||
#~ msgstr "ਮੇਰੀ ਪਸੰਦ"
|
||||
|
||||
#~ msgid "Overview workspace view mode"
|
||||
#~ msgstr "ਵਰਕਸਪੇਸ ਝਲਕ ਮੋਡ ਦੀ ਝਲਕ"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The selected workspace view mode in the overview. Supported values are "
|
||||
#~ "\"single\" and \"grid\"."
|
||||
#~ msgstr ""
|
||||
#~ "ਸੰਖੇਪ ਵਿੱਚ ਚੁਣੇ ਵਰਕਸਪੇਸ ਝਲਕ ਮੋਡ ਹੈ। ਸਹਾਇਕ ਮੁੱਲ ਹਨ \"single\"(ਇੱਕਲਾ) ਜਾਂ \"grid"
|
||||
#~ "\" (ਗਰਿੱਡ)।"
|
||||
|
||||
#~ msgid "Drag here to add favorites"
|
||||
#~ msgstr "ਪਸੰਦ ਵਿੱਚ ਜੋੜਨ ਲਈ ਇੱਥੇ ਸੁੱਟੋ"
|
||||
|
||||
#~ msgid "Find"
|
||||
#~ msgstr "ਖੋਜ"
|
||||
|
||||
#~ msgid "Searching..."
|
||||
#~ msgstr "ਖੋਜ ਜਾਰੀ ਹੈ..."
|
||||
|
||||
#~ msgid "No matching results."
|
||||
#~ msgstr "ਕੋਈ ਨਤੀਜਾ ਨਹੀਂ ਲੱਭਿਆ।"
|
||||
|
||||
#~ msgid "Invisible"
|
||||
#~ msgstr "ਅਦਿੱਖ"
|
||||
|
||||
#~| msgid "Preferences"
|
||||
#~ msgid "System Preferences..."
|
||||
#~ msgstr "ਸਿਸਟਮ ਪਸੰਦ..."
|
||||
|
||||
#~ msgid "Restart..."
|
||||
#~ msgstr "...ਮੁੜ-ਚਾਲੂ"
|
||||
|
||||
#~ msgid "Account Information..."
|
||||
#~ msgstr "ਅਕਾਊਂਟ ਜਾਣਕਾਰੀ..."
|
||||
|
||||
@ -723,9 +976,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "%H:%M"
|
||||
#~ msgstr "%H:%M"
|
||||
|
||||
#~ msgid "Applications"
|
||||
#~ msgstr "ਐਪਲੀਕੇਸ਼ਨ"
|
||||
|
||||
#~ msgid "Recent Documents"
|
||||
#~ msgstr "ਤਾਜ਼ਾ ਡੌਕੂਮੈਂਟ"
|
||||
|
||||
@ -744,9 +994,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "SEARCH RESULTS"
|
||||
#~ msgstr "ਖੋਜ ਨਤੀਜੇ"
|
||||
|
||||
#~ msgid "Unknown"
|
||||
#~ msgstr "ਅਣਜਾਣ"
|
||||
|
||||
#~ msgid "Can't lock screen: %s"
|
||||
#~ msgstr "ਸਕਰੀਨ ਲਾਕ ਨਹੀਂ ਹੋ ਸਕਦੀ: %s"
|
||||
|
||||
|
356
po/pt_BR.po
356
po/pt_BR.po
@ -5,16 +5,17 @@
|
||||
# Rodrigo Flores <mail@rodrigoflores.org>, 2009.
|
||||
# Felipe Borges <felipe10borges@gmail.com>, 2010.
|
||||
# Henrique P. Machado <hpmachado@gnome.org>, 2010.
|
||||
# Jonh Wendell <wendell@bani.com.br>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \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"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-12-07 08:59-0200\n"
|
||||
"PO-Revision-Date: 2010-12-06 16:03+0100\n"
|
||||
"Last-Translator: Jonh Wendell <wendell@bani.com.br>\n"
|
||||
"Language-Team: Brazilian Portuguese <pt_BR>\n"
|
||||
"Language: pt_BR\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@ -104,10 +105,6 @@ 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 "
|
||||
@ -128,19 +125,19 @@ msgstr ""
|
||||
"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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
msgstr "Mostrar data no relógio"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Mostrar horário com segundos"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
@ -148,7 +145,7 @@ msgstr ""
|
||||
"Os aplicativos correspondentes a estes identificadores serão exibidos na "
|
||||
"área de favoritos."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"The filename for recorded screencasts will be a unique filename based on the "
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
@ -158,7 +155,7 @@ msgstr ""
|
||||
"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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
@ -166,19 +163,11 @@ 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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
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 "
|
||||
@ -190,7 +179,7 @@ msgstr ""
|
||||
"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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
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"
|
||||
@ -202,7 +191,7 @@ msgstr ""
|
||||
"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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
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\", "
|
||||
@ -219,11 +208,11 @@ msgstr ""
|
||||
"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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr "Uuids das extensões a desabilitar"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Quando coletar dados sobre uso de aplicativos"
|
||||
|
||||
@ -269,7 +258,6 @@ msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
|
||||
#, fuzzy
|
||||
#| msgid "Enabled"
|
||||
msgid "Enable lens mode"
|
||||
msgstr "Habilitado"
|
||||
|
||||
@ -382,62 +370,41 @@ msgstr "Formato de _12 horas"
|
||||
msgid "_24 hour format"
|
||||
msgstr "Formato de _24 horas"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
#: ../js/ui/appDisplay.js:215
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "APLICATIVOS"
|
||||
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
#: ../js/ui/appDisplay.js:245
|
||||
msgid "PREFERENCES"
|
||||
msgstr "PREFERÊNCIAS"
|
||||
|
||||
#: ../js/ui/appDisplay.js:647
|
||||
#: ../js/ui/appDisplay.js:542
|
||||
msgid "New Window"
|
||||
msgstr "Nova janela"
|
||||
|
||||
#: ../js/ui/appDisplay.js:651
|
||||
#: ../js/ui/appDisplay.js:546
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Remover dos Favoritos"
|
||||
msgstr "Remover dos favoritos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
#: ../js/ui/appDisplay.js:547
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Adicionar aos Favoritos"
|
||||
msgstr "Adicionar aos favoritos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:829
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "Arraste até aqui para adicionar aos favoritos"
|
||||
|
||||
#: ../js/ui/appFavorites.js:88
|
||||
#: ../js/ui/appFavorites.js:91
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s foi adicionado aos seus favoritos."
|
||||
|
||||
#: ../js/ui/appFavorites.js:107
|
||||
#: ../js/ui/appFavorites.js:122
|
||||
#, c-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s foi removido dos seus favoritos."
|
||||
|
||||
#: ../js/ui/dash.js:142
|
||||
msgid "Find"
|
||||
msgstr "Localizar"
|
||||
#: ../js/ui/dash.js:27
|
||||
msgid "Remove"
|
||||
msgstr "Remover"
|
||||
|
||||
#: ../js/ui/dash.js:473
|
||||
msgid "Searching..."
|
||||
msgstr "Pesquisando..."
|
||||
|
||||
#: ../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:797 ../js/ui/placeDisplay.js:554
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "LOCAIS & DISPOSITIVOS"
|
||||
|
||||
#. **** Documents ****
|
||||
#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
|
||||
#: ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "DOCUMENTOS RECENTES"
|
||||
|
||||
@ -471,63 +438,63 @@ msgstr "Ver fonte"
|
||||
msgid "Web Page"
|
||||
msgstr "Página Web"
|
||||
|
||||
#: ../js/ui/overview.js:160
|
||||
#: ../js/ui/overview.js:112
|
||||
msgid "Undo"
|
||||
msgstr "Desfazer"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:469
|
||||
#: ../js/ui/panel.js:470
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Sair de %s"
|
||||
|
||||
#: ../js/ui/panel.js:494
|
||||
#: ../js/ui/panel.js:495
|
||||
msgid "Preferences"
|
||||
msgstr "Preferências"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:580
|
||||
#: ../js/ui/panel.js:581
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %b %e, %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:581
|
||||
#: ../js/ui/panel.js:582
|
||||
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
|
||||
#: ../js/ui/panel.js:586
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:586
|
||||
#: ../js/ui/panel.js:587
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:593
|
||||
#: ../js/ui/panel.js:594
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %e de %b, %H:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:594
|
||||
#: ../js/ui/panel.js:595
|
||||
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
|
||||
#: ../js/ui/panel.js:599
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %H:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:599
|
||||
#: ../js/ui/panel.js:600
|
||||
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
|
||||
#: ../js/ui/panel.js:745
|
||||
msgid "Activities"
|
||||
msgstr "Atividades"
|
||||
|
||||
@ -544,6 +511,10 @@ msgstr "Tentar novamente"
|
||||
msgid "Connect to..."
|
||||
msgstr "Conectar ao..."
|
||||
|
||||
#: ../js/ui/placeDisplay.js:558
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "LOCAIS & DISPOSITIVOS"
|
||||
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
@ -551,7 +522,7 @@ msgstr "Conectar ao..."
|
||||
#. 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:"
|
||||
@ -570,86 +541,181 @@ msgstr "Disponível"
|
||||
msgid "Busy"
|
||||
msgstr "Ocupado"
|
||||
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "Invisível"
|
||||
#: ../js/ui/statusMenu.js:114
|
||||
msgid "My Account"
|
||||
msgstr "Minha conta"
|
||||
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr ""
|
||||
#: ../js/ui/statusMenu.js:118
|
||||
msgid "System Settings"
|
||||
msgstr "Configurações do sistema"
|
||||
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
#| msgid "System Preferences..."
|
||||
msgid "System Settings..."
|
||||
msgstr "Configurações do sistema..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
msgid "Lock Screen"
|
||||
msgstr "Travar a tela"
|
||||
msgstr "Bloquear a tela"
|
||||
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
#: ../js/ui/statusMenu.js:129
|
||||
msgid "Switch User"
|
||||
msgstr "Alternar usuário"
|
||||
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Log Out..."
|
||||
msgstr "Encerrar sessão..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr ""
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
msgid "Suspend..."
|
||||
msgstr "Suspender..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
#: ../js/ui/statusMenu.js:145
|
||||
msgid "Shut Down..."
|
||||
msgstr "Desligar..."
|
||||
|
||||
#: ../js/ui/status/accessibility.js:82
|
||||
msgid "Zoom"
|
||||
msgstr "Ampliador"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr ""
|
||||
msgstr "Leitor de tela"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:91
|
||||
msgid "Screen Keyboard"
|
||||
msgstr ""
|
||||
msgstr "Teclado na tela"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:94
|
||||
msgid "Visual Alerts"
|
||||
msgstr ""
|
||||
msgstr "Alertas visuais"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:97
|
||||
msgid "Sticky Keys"
|
||||
msgstr ""
|
||||
msgstr "Teclas de aderência"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:100
|
||||
msgid "Slow Keys"
|
||||
msgstr ""
|
||||
msgstr "Teclas lentas"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:103
|
||||
msgid "Bounce Keys"
|
||||
msgstr ""
|
||||
msgstr "Teclas de repercussão"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:106
|
||||
msgid "Mouse Keys"
|
||||
msgstr ""
|
||||
msgstr "Teclas do mouse"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:110
|
||||
msgid "Universal Access Settings"
|
||||
msgstr ""
|
||||
msgstr "Configurações de acesso universal"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:163
|
||||
msgid "High Contrast"
|
||||
msgstr ""
|
||||
msgstr "Alto contraste"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
#: ../js/ui/status/accessibility.js:205
|
||||
msgid "Large Text"
|
||||
msgstr ""
|
||||
msgstr "Texto grande"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr ""
|
||||
#: ../js/ui/status/power.js:87
|
||||
msgid "What's using power..."
|
||||
msgstr "Onde a energia está sendo gasta..."
|
||||
|
||||
#: ../js/ui/status/power.js:90
|
||||
msgid "Power Settings"
|
||||
msgstr "Gerenciamento de energia..."
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
msgstr[0] "%d hora restante"
|
||||
msgstr[1] "%d horas restantes"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:120
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "%d %s e %d %s restantes"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "hora"
|
||||
msgstr[1] "horas"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "minuto"
|
||||
msgstr[1] "minutos"
|
||||
|
||||
#: ../js/ui/status/power.js:125
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "%d minuto restante"
|
||||
msgstr[1] "%d minutos restantes"
|
||||
|
||||
#: ../js/ui/status/power.js:244
|
||||
msgid "AC adapter"
|
||||
msgstr "Tomada"
|
||||
|
||||
#: ../js/ui/status/power.js:246
|
||||
msgid "Laptop battery"
|
||||
msgstr "Bateria do laptop"
|
||||
|
||||
#: ../js/ui/status/power.js:248
|
||||
msgid "UPS"
|
||||
msgstr "UPS"
|
||||
|
||||
#: ../js/ui/status/power.js:250
|
||||
msgid "Monitor"
|
||||
msgstr "Monitor"
|
||||
|
||||
#: ../js/ui/status/power.js:252
|
||||
msgid "Mouse"
|
||||
msgstr "Mouse"
|
||||
|
||||
#: ../js/ui/status/power.js:254
|
||||
msgid "Keyboard"
|
||||
msgstr "Teclado"
|
||||
|
||||
#: ../js/ui/status/power.js:256
|
||||
msgid "PDA"
|
||||
msgstr "PDA"
|
||||
|
||||
#: ../js/ui/status/power.js:258
|
||||
msgid "Cell phone"
|
||||
msgstr "Telefone celular"
|
||||
|
||||
#: ../js/ui/status/power.js:260
|
||||
msgid "Media player"
|
||||
msgstr "Reprodutor de música"
|
||||
|
||||
#: ../js/ui/status/power.js:262
|
||||
msgid "Tablet"
|
||||
msgstr "Tablet"
|
||||
|
||||
#: ../js/ui/status/power.js:264
|
||||
msgid "Computer"
|
||||
msgstr "Computador"
|
||||
|
||||
#: ../js/ui/status/power.js:266 ../src/shell-app-system.c:1012
|
||||
msgid "Unknown"
|
||||
msgstr "Desconhecido"
|
||||
|
||||
#: ../js/ui/status/volume.js:41
|
||||
msgid "Volume"
|
||||
msgstr "Volume"
|
||||
|
||||
#: ../js/ui/status/volume.js:54
|
||||
msgid "Microphone"
|
||||
msgstr "Microfone"
|
||||
|
||||
#: ../js/ui/status/volume.js:62
|
||||
msgid "Sound Settings"
|
||||
msgstr "Configurações de som"
|
||||
|
||||
#: ../js/ui/viewSelector.js:26
|
||||
msgid "Search your computer"
|
||||
msgstr "Pesquise no seu computador"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
@ -661,14 +727,14 @@ msgstr "%s terminou sua inicialização"
|
||||
msgid "'%s' is ready"
|
||||
msgstr "\"%s\" está pronto"
|
||||
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
#: ../js/ui/workspacesView.js:244
|
||||
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."
|
||||
|
||||
#: ../js/ui/workspacesView.js:246
|
||||
#: ../js/ui/workspacesView.js:260
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "Não é possível remover o primeiro espaço de trabalho."
|
||||
|
||||
@ -678,8 +744,8 @@ msgstr "Não é possível remover o primeiro espaço de trabalho."
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%u saída"
|
||||
msgstr[1] "%u saídas"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
@ -687,56 +753,56 @@ msgstr[1] ""
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%u entrada"
|
||||
msgstr[1] "%u entradas"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
msgid "System Sounds"
|
||||
msgstr ""
|
||||
msgstr "Sons do sistema"
|
||||
|
||||
#: ../src/shell-global.c:1219
|
||||
#: ../src/shell-global.c:1163
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Há menos de um minuto"
|
||||
|
||||
#: ../src/shell-global.c:1223
|
||||
#: ../src/shell-global.c:1167
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "Há %d minuto"
|
||||
msgstr[1] "Há %d minutos"
|
||||
|
||||
#: ../src/shell-global.c:1228
|
||||
#: ../src/shell-global.c:1172
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "Há %d hora"
|
||||
msgstr[1] "Há %d horas"
|
||||
|
||||
#: ../src/shell-global.c:1233
|
||||
#: ../src/shell-global.c:1177
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "Há %d dia"
|
||||
msgstr[1] "Há %d dias"
|
||||
|
||||
#: ../src/shell-global.c:1238
|
||||
#: ../src/shell-global.c:1182
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "Há %d semana"
|
||||
msgstr[1] "Há %d semanas"
|
||||
|
||||
#: ../src/shell-uri-util.c:89
|
||||
#: ../src/shell-util.c:89
|
||||
msgid "Home Folder"
|
||||
msgstr "Pasta pessoal"
|
||||
|
||||
#. Translators: this is the same string as the one found in
|
||||
#. * nautilus
|
||||
#: ../src/shell-uri-util.c:104
|
||||
#: ../src/shell-util.c:104
|
||||
msgid "File System"
|
||||
msgstr "Sistema de arquivos"
|
||||
|
||||
#: ../src/shell-uri-util.c:250
|
||||
#: ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "Pesquisar"
|
||||
|
||||
@ -745,11 +811,36 @@ msgstr "Pesquisar"
|
||||
#. * example, "Trash: some-directory". It means that the
|
||||
#. * directory called "some-directory" is in the trash.
|
||||
#.
|
||||
#: ../src/shell-uri-util.c:300
|
||||
#: ../src/shell-util.c:300
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Overview workspace view mode"
|
||||
#~ msgstr "Resumo do modo de visão de áreas de trabalho"
|
||||
|
||||
#~ 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\"."
|
||||
|
||||
#~ msgid "Drag here to add favorites"
|
||||
#~ msgstr "Arraste até aqui para adicionar aos favoritos"
|
||||
|
||||
#~ msgid "Find"
|
||||
#~ msgstr "Localizar"
|
||||
|
||||
#~ msgid "Searching..."
|
||||
#~ msgstr "Pesquisando..."
|
||||
|
||||
#~ msgid "No matching results."
|
||||
#~ msgstr "Nenhum resultado encontrado."
|
||||
|
||||
#~ msgid "Invisible"
|
||||
#~ msgstr "Invisível"
|
||||
|
||||
#~ msgid "ON"
|
||||
#~ msgstr "⚪"
|
||||
|
||||
@ -777,9 +868,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "SEARCH RESULTS"
|
||||
#~ msgstr "RESULTADOS DA BUSCA"
|
||||
|
||||
#~ msgid "Unknown"
|
||||
#~ msgstr "Desconhecido"
|
||||
|
||||
#~ msgid "Can't lock screen: %s"
|
||||
#~ msgstr "Não foi possível travar a tela: %s"
|
||||
|
||||
|
348
po/sl.po
348
po/sl.po
@ -8,8 +8,8 @@ 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-26 14:37+0000\n"
|
||||
"PO-Revision-Date: 2010-10-26 19:29+0100\n"
|
||||
"POT-Creation-Date: 2010-12-11 15:45+0000\n"
|
||||
"PO-Revision-Date: 2010-12-11 20:40+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"
|
||||
@ -86,62 +86,54 @@ msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr "Seznam določil ID namiznih datotek priljubljenih programov"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
msgid "Overview workspace view mode"
|
||||
msgstr "Način pregleda predogleda delovnih površin"
|
||||
|
||||
#: ../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 "Določa cevovod programa GStreamer, ki se uporablja za kodiranje posnetkov. Ta sledi skladnji, ki je uporabljena za gst-launch. Cevovod mora imeti nepovezano korito, kamor se posnetek snema. Običajno je za to namenjen nepovezan izvorni pomnilnik, katerega odvod se zapiše v odvodno datoteko. Vendar pa lahko cevovod ta korak naredi v lastni odvod - možnost se lahko uporabi pri pošiljanju odvoda na strežnik icecast preko shout2send ali podobno. Nedoločena ali prazna možnost se odrazi kot privzeti cevovod. Trenutno je to 'videorate ! theoraenc ! oggmux' in omogoča snemanje v zapis Ogg Theora."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
msgstr "Pokaži datum v uri"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Pokaži tedenski datum v koledarju"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Pokaži čas s sekundami"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid "The applications corresponding to these identifiers will be displayed in the favorites area."
|
||||
msgstr "Programi določeni s temi določili bodo prikazani v območju priljubljenih programov"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid "The filename for recorded screencasts will be a unique filename based on the current date, and use this extension. It should be changed when recording to a different container format."
|
||||
msgstr "Ime datoteke zaslonskega posnetka bo enoznačno ime, kateremu bo dodan datum in določena pripona. Pripona mora ustrezati zapisu zabojnika."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid "The framerate of the resulting screencast recordered by GNOME Shell's screencast recorder in frames-per-second."
|
||||
msgstr "Hitrost sličic shranjenega končnega zaslonskega posnetka v sličicah na sekundo."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "Uporabljen GStreamer cevovod za kodiranje zaslonskega posnetka."
|
||||
|
||||
#: ../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 "Izbrani pogled delovnih površin v predogledu. Podprte vrednosti sta \"enojno\" in \"mrežno\"."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
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 "Lupina običajno nadzira dejavne programe zaradi možnosti prikazovanja najpogosteje uporabljenih v zaganjalniku. Čeprav so podatki krajevni, jih je dobro onemogočiti zaradi varovanja zasebnosti. Z onemogočenje ne bodo odstranjeni že shranjeni podatki."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
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 "Ključ določa zapis, ki naj ga uporablja vstavek ure, kadar je ključ zapisa nastavljen kot \"prikrojen\". Za določitev zapisa lahko uporabite tudi oznake funkcije strftime(), ki so podrobneje zapisane v priročniku funkcije."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
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 "Ključ določa zapis ure. Mogoče vrednosti so \"12-urni\", \"24-urni\", \"unix\" in \"po meri\". Možnost \"unix\" prikazuje čas v sekundah od začetka ere, torej od 01.01.1970, možnost \"po meri\" pa omogoča prikrojen zapis. Pri izbiri zapisa \"unix\" ali \"po meri\" sta izbiri pokaži datum in pokaži sekunde, prezrti."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr "Določila UUID razširitev za onemogočenje"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "Ali naj se beleži statistika uporabe programov"
|
||||
|
||||
@ -179,7 +171,7 @@ 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 ""
|
||||
msgstr "Pri usredinjenem sledenju miški, ko je sistemski kazalnik ob robu zaslona, približanje vsebine drsi naprej tako, da je rob zaslona v približanem pogledu."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
|
||||
msgid "Length of the crosshairs"
|
||||
@ -223,11 +215,11 @@ 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 ""
|
||||
msgstr "Približan pogled lahko zapolni celoten zaslon, lahko pa zasede zgornjo, spodnjo, levo ali pa desno polovico zaslona."
|
||||
|
||||
#: ../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 ""
|
||||
msgstr "Vrednost približanja. Vrednost 1.0 pomeni brez približanja, vrednost 2.0 pa podvoji učinek približanja."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
|
||||
msgid "Thickness of the crosshairs"
|
||||
@ -235,7 +227,7 @@ 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 ""
|
||||
msgstr "Ali naj bo približan pogled usredinjen na mesto sistemske miške in se z njo premika."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
|
||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||
@ -269,64 +261,40 @@ msgstr "_12-urni zapis časa"
|
||||
msgid "_24 hour format"
|
||||
msgstr "_24-urni zapis časa"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:316
|
||||
#: ../js/ui/dash.js:778
|
||||
#: ../js/ui/appDisplay.js:215
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "Programi"
|
||||
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
#: ../js/ui/appDisplay.js:245
|
||||
msgid "PREFERENCES"
|
||||
msgstr "Možnosti"
|
||||
|
||||
#: ../js/ui/appDisplay.js:648
|
||||
#: ../js/ui/appDisplay.js:542
|
||||
msgid "New Window"
|
||||
msgstr "Novo okno"
|
||||
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
#: ../js/ui/appDisplay.js:546
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Odstrani iz priljubljenih"
|
||||
|
||||
#: ../js/ui/appDisplay.js:653
|
||||
#: ../js/ui/appDisplay.js:547
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Dodaj med priljubljene"
|
||||
|
||||
#: ../js/ui/appDisplay.js:830
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "S potegom na to mesto se izbor doda med priljubljene"
|
||||
|
||||
#: ../js/ui/appFavorites.js:88
|
||||
#: ../js/ui/appFavorites.js:91
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "Program \"%s\" je dodan med priljubljeno."
|
||||
|
||||
#: ../js/ui/appFavorites.js:107
|
||||
#: ../js/ui/appFavorites.js:122
|
||||
#, c-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "Program \"%s\" je odstranjen iz priljubljenih."
|
||||
|
||||
#: ../js/ui/dash.js:142
|
||||
msgid "Find"
|
||||
msgstr "Najdi"
|
||||
#: ../js/ui/dash.js:27
|
||||
msgid "Remove"
|
||||
msgstr "Odstrani"
|
||||
|
||||
#: ../js/ui/dash.js:473
|
||||
msgid "Searching..."
|
||||
msgstr "Iskanje ..."
|
||||
|
||||
#: ../js/ui/dash.js:487
|
||||
msgid "No matching results."
|
||||
msgstr "Ni zadetkov iskanja"
|
||||
|
||||
#. **** 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 "Mesta in naprave"
|
||||
|
||||
#. **** Documents ****
|
||||
#: ../js/ui/dash.js:804
|
||||
#: ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "Nedavni predmeti"
|
||||
@ -339,7 +307,10 @@ msgstr "Ni nameščenih razširitev"
|
||||
msgid "Enabled"
|
||||
msgstr "Omogočeno"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:591
|
||||
#: ../src/gvc/gvc-mixer-control.c:1087
|
||||
msgid "Disabled"
|
||||
msgstr "Onemogočeno"
|
||||
|
||||
@ -359,63 +330,63 @@ msgstr "Poglej vir"
|
||||
msgid "Web Page"
|
||||
msgstr "Spletna stran"
|
||||
|
||||
#: ../js/ui/overview.js:160
|
||||
#: ../js/ui/overview.js:112
|
||||
msgid "Undo"
|
||||
msgstr "Razveljavi"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:469
|
||||
#: ../js/ui/panel.js:470
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "Končaj %s"
|
||||
|
||||
#: ../js/ui/panel.js:494
|
||||
#: ../js/ui/panel.js:495
|
||||
msgid "Preferences"
|
||||
msgstr "Možnosti"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:580
|
||||
#: ../js/ui/panel.js:581
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a. %e. %b., %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:581
|
||||
#: ../js/ui/panel.js:582
|
||||
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
|
||||
#: ../js/ui/panel.js:586
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a. %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:586
|
||||
#: ../js/ui/panel.js:587
|
||||
msgid "%a %R"
|
||||
msgstr "%a. %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:593
|
||||
#: ../js/ui/panel.js:594
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a. %e. %b., %H:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:594
|
||||
#: ../js/ui/panel.js:595
|
||||
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:598
|
||||
#: ../js/ui/panel.js:599
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a, %H:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:599
|
||||
#: ../js/ui/panel.js:600
|
||||
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
|
||||
#: ../js/ui/panel.js:745
|
||||
msgid "Activities"
|
||||
msgstr "Dejavnosti"
|
||||
|
||||
@ -432,6 +403,10 @@ msgstr "Poskusi znova"
|
||||
msgid "Connect to..."
|
||||
msgstr "Povezava z ..."
|
||||
|
||||
#: ../js/ui/placeDisplay.js:558
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "Mesta in naprave"
|
||||
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
@ -458,42 +433,38 @@ msgstr "Na voljo"
|
||||
msgid "Busy"
|
||||
msgstr "Zaposleno"
|
||||
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "Nevidno"
|
||||
#: ../js/ui/statusMenu.js:114
|
||||
msgid "My Account"
|
||||
msgstr "Račun"
|
||||
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr "Račun ..."
|
||||
#: ../js/ui/statusMenu.js:118
|
||||
msgid "System Settings"
|
||||
msgstr "Sistemske nastavitve"
|
||||
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
msgid "System Preferences..."
|
||||
msgstr "Sistemske možnosti ..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
msgid "Lock Screen"
|
||||
msgstr "Zakleni zaslon"
|
||||
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
#: ../js/ui/statusMenu.js:129
|
||||
msgid "Switch User"
|
||||
msgstr "Preklopi uporabnika"
|
||||
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Log Out..."
|
||||
msgstr "Odjava ..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr "V mirovanje"
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
msgid "Suspend..."
|
||||
msgstr "V pripravljenost"
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
msgstr "Ponoven zagon ..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
#: ../js/ui/statusMenu.js:145
|
||||
msgid "Shut Down..."
|
||||
msgstr "Izklopi ..."
|
||||
|
||||
#: ../js/ui/status/accessibility.js:82
|
||||
msgid "Zoom"
|
||||
msgstr "Približanje"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "Zaslonski bralnik"
|
||||
@ -530,13 +501,122 @@ msgstr "Splošne nastavitve dostopa"
|
||||
msgid "High Contrast"
|
||||
msgstr "Visok kontrast"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
#: ../js/ui/status/accessibility.js:205
|
||||
msgid "Large Text"
|
||||
msgstr "Veliko besedilo"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "Približanje"
|
||||
#: ../js/ui/status/power.js:87
|
||||
msgid "What's using power..."
|
||||
msgstr "Kaj porablja napetost ..."
|
||||
|
||||
#: ../js/ui/status/power.js:90
|
||||
msgid "Power Settings"
|
||||
msgstr "Upravljanje napajanja"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
msgstr[0] "preostaja še %d ur"
|
||||
msgstr[1] "preostaja še %d ura"
|
||||
msgstr[2] "preostajata še %d uri"
|
||||
msgstr[3] "preostajajo še %d ure"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:120
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "Preostaja še %d %s %d %s"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "ur"
|
||||
msgstr[1] "ura"
|
||||
msgstr[2] "uri"
|
||||
msgstr[3] "ure"
|
||||
|
||||
#: ../js/ui/status/power.js:122
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "minut"
|
||||
msgstr[1] "minuta"
|
||||
msgstr[2] "minuti"
|
||||
msgstr[3] "minute"
|
||||
|
||||
#: ../js/ui/status/power.js:125
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "preostaja še %d minut"
|
||||
msgstr[1] "preostaja še %d minuta"
|
||||
msgstr[2] "preostajata še %d minuti"
|
||||
msgstr[3] "preostajajo še %d minute"
|
||||
|
||||
#: ../js/ui/status/power.js:244
|
||||
msgid "AC adapter"
|
||||
msgstr "Električni prilagodilnik"
|
||||
|
||||
#: ../js/ui/status/power.js:246
|
||||
msgid "Laptop battery"
|
||||
msgstr "Baterija prenosnika"
|
||||
|
||||
#: ../js/ui/status/power.js:248
|
||||
msgid "UPS"
|
||||
msgstr "UPS"
|
||||
|
||||
#: ../js/ui/status/power.js:250
|
||||
msgid "Monitor"
|
||||
msgstr "Zaslon"
|
||||
|
||||
#: ../js/ui/status/power.js:252
|
||||
msgid "Mouse"
|
||||
msgstr "Miška"
|
||||
|
||||
#: ../js/ui/status/power.js:254
|
||||
msgid "Keyboard"
|
||||
msgstr "Tipkovnica"
|
||||
|
||||
#: ../js/ui/status/power.js:256
|
||||
msgid "PDA"
|
||||
msgstr "Dlančnik"
|
||||
|
||||
#: ../js/ui/status/power.js:258
|
||||
msgid "Cell phone"
|
||||
msgstr "Mobilni telefon"
|
||||
|
||||
#: ../js/ui/status/power.js:260
|
||||
msgid "Media player"
|
||||
msgstr "Predstavni predvajalnik"
|
||||
|
||||
#: ../js/ui/status/power.js:262
|
||||
msgid "Tablet"
|
||||
msgstr "Tablični računalnik"
|
||||
|
||||
#: ../js/ui/status/power.js:264
|
||||
msgid "Computer"
|
||||
msgstr "Računalnik"
|
||||
|
||||
#: ../js/ui/status/power.js:266
|
||||
#: ../src/shell-app-system.c:1012
|
||||
msgid "Unknown"
|
||||
msgstr "Neznano"
|
||||
|
||||
#: ../js/ui/status/volume.js:41
|
||||
msgid "Volume"
|
||||
msgstr "Glasnost"
|
||||
|
||||
#: ../js/ui/status/volume.js:54
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofon"
|
||||
|
||||
#: ../js/ui/status/volume.js:62
|
||||
msgid "Sound Settings"
|
||||
msgstr "Nastavitve zvoka"
|
||||
|
||||
#: ../js/ui/viewSelector.js:26
|
||||
msgid "Search your computer"
|
||||
msgstr "Iskanje po računalniku"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
@ -548,19 +628,45 @@ msgstr "%s je končal začenjanje"
|
||||
msgid "'%s' is ready"
|
||||
msgstr "'%s' storitev je pripravljena"
|
||||
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
#: ../js/ui/workspacesView.js:244
|
||||
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:246
|
||||
#: ../js/ui/workspacesView.js:260
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "Ni mogoče odstraniti prve delovne površine."
|
||||
|
||||
#: ../src/shell-global.c:1204
|
||||
#. 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 odvodov naprave"
|
||||
msgstr[1] "%u odvod naprave"
|
||||
msgstr[2] "%u odvoda naprave"
|
||||
msgstr[3] "%u odvodi naprave"
|
||||
|
||||
#. 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 dovodov naprave"
|
||||
msgstr[1] "%u dovod naprave"
|
||||
msgstr[2] "%u dovoda naprave"
|
||||
msgstr[3] "%u dovodi naprave"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
msgid "System Sounds"
|
||||
msgstr "Sistemski zvoki"
|
||||
|
||||
#: ../src/shell-global.c:1155
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "Pred manj kot eno minuto"
|
||||
|
||||
#: ../src/shell-global.c:1208
|
||||
#: ../src/shell-global.c:1159
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
@ -569,7 +675,7 @@ msgstr[1] "Pred %d minuto"
|
||||
msgstr[2] "Pred %d minutama"
|
||||
msgstr[3] "Pred %d minutami"
|
||||
|
||||
#: ../src/shell-global.c:1213
|
||||
#: ../src/shell-global.c:1164
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
@ -578,7 +684,7 @@ msgstr[1] "Pred %d uro"
|
||||
msgstr[2] "Pred %d urama"
|
||||
msgstr[3] "Pred %d urami"
|
||||
|
||||
#: ../src/shell-global.c:1218
|
||||
#: ../src/shell-global.c:1169
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
@ -587,7 +693,7 @@ msgstr[1] "Pred %d dnevom"
|
||||
msgstr[2] "Pred %d dnevoma"
|
||||
msgstr[3] "Pred %d dnevi"
|
||||
|
||||
#: ../src/shell-global.c:1223
|
||||
#: ../src/shell-global.c:1174
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
@ -596,17 +702,17 @@ msgstr[1] "Pred %d tednom"
|
||||
msgstr[2] "Pred %d tednoma"
|
||||
msgstr[3] "Pred %d tedni"
|
||||
|
||||
#: ../src/shell-uri-util.c:89
|
||||
#: ../src/shell-util.c:89
|
||||
msgid "Home Folder"
|
||||
msgstr "Domača mapa"
|
||||
|
||||
#. Translators: this is the same string as the one found in
|
||||
#. * nautilus
|
||||
#: ../src/shell-uri-util.c:104
|
||||
#: ../src/shell-util.c:104
|
||||
msgid "File System"
|
||||
msgstr "Datotečni sistem"
|
||||
|
||||
#: ../src/shell-uri-util.c:250
|
||||
#: ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "Poišči"
|
||||
|
||||
@ -615,15 +721,35 @@ msgstr "Poišči"
|
||||
#. * example, "Trash: some-directory". It means that the
|
||||
#. * directory called "some-directory" is in the trash.
|
||||
#.
|
||||
#: ../src/shell-uri-util.c:300
|
||||
#: ../src/shell-util.c:300
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Overview workspace view mode"
|
||||
#~ msgstr "Način pregleda predogleda delovnih površin"
|
||||
#~ msgid ""
|
||||
#~ "The selected workspace view mode in the overview. Supported values are "
|
||||
#~ "\"single\" and \"grid\"."
|
||||
#~ msgstr ""
|
||||
#~ "Izbrani pogled delovnih površin v predogledu. Podprte vrednosti sta "
|
||||
#~ "\"enojno\" in \"mrežno\"."
|
||||
#~ msgid "Drag here to add favorites"
|
||||
#~ msgstr "S potegom na to mesto se izbor doda med priljubljene"
|
||||
#~ msgid "Find"
|
||||
#~ msgstr "Najdi"
|
||||
#~ msgid "Searching..."
|
||||
#~ msgstr "Iskanje ..."
|
||||
#~ msgid "No matching results."
|
||||
#~ msgstr "Ni zadetkov iskanja"
|
||||
#~ msgid "Invisible"
|
||||
#~ msgstr "Nevidno"
|
||||
#~ msgid "System Preferences..."
|
||||
#~ msgstr "Sistemske možnosti ..."
|
||||
#~ msgid "Restart..."
|
||||
#~ msgstr "Ponoven zagon ..."
|
||||
#~ msgid "Account Information..."
|
||||
#~ msgstr "Podrobnosti računa ..."
|
||||
#~ msgid "System Settings..."
|
||||
#~ msgstr "Sistemske nastavitve ..."
|
||||
#~ msgid "ON"
|
||||
#~ msgstr "⚪"
|
||||
#~ msgid "OFF"
|
||||
@ -640,8 +766,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ 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"
|
||||
|
544
po/ta.po
544
po/ta.po
@ -6,17 +6,17 @@
|
||||
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-08-04 19:41+0000\n"
|
||||
"PO-Revision-Date: 2010-08-05 21:37+0530\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-11-30 14:13+0530\n"
|
||||
"PO-Revision-Date: 2010-12-01 12:57+0530\n"
|
||||
"Last-Translator: Dr.T.Vasudevan <agnihot3@gmail.com>\n"
|
||||
"Language-Team: Tamil <<Ubuntu-l10n-tam@lists.ubuntu.com>>\n"
|
||||
"Language-Team: Tamil <kde-i18n-doc@kde.org>\n"
|
||||
"Language: ta\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Lokalize 1.0\n"
|
||||
"X-Generator: Lokalize 1.1\n"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||
msgid "GNOME Shell"
|
||||
@ -39,8 +39,8 @@ msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
"dialog."
|
||||
msgstr ""
|
||||
"உள்ளமை வழி நீக்கம் மற்றும் Alt-F2 உரையாடல் மூலம் கருவிகள் கண்காணிப்பு "
|
||||
"ஆகியவற்றை அணுக உதவும்."
|
||||
"உள்ளமை வழி நீக்கம் மற்றும் Alt-F2 உரையாடல் மூலம் கருவிகள் கண்காணிப்பு ஆகியவற்றை அணுக "
|
||||
"உதவும்."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
msgid "Custom format of the clock"
|
||||
@ -49,8 +49,8 @@ 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 வழியாக உள்ளமை "
|
||||
"கருவிகளை செயலாக்கு"
|
||||
"உருவாக்குவோர் மற்றூம் சோதிப்போருக்கு பயன்படுமாறு Alt-F2 வழியாக உள்ளமை கருவிகளை "
|
||||
"செயலாக்கு"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
msgid "File extension used for storing the screencast"
|
||||
@ -65,8 +65,8 @@ 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"
|
||||
@ -81,8 +81,8 @@ msgid ""
|
||||
"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
|
||||
"clock, in addition to time."
|
||||
msgstr ""
|
||||
"உண்மையெனில், அமைப்பு \"12 மணி\" அல்லது \"24 மணி\" என இருப்பின் நேரத்துடன் "
|
||||
"நாளையும் காட்டு"
|
||||
"உண்மையெனில், அமைப்பு \"12 மணி\" அல்லது \"24 மணி\" என இருப்பின் நேரத்துடன் நாளையும் "
|
||||
"காட்டு"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||
msgid ""
|
||||
@ -101,10 +101,6 @@ 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 "
|
||||
@ -115,93 +111,76 @@ msgid ""
|
||||
"to an empty value, the default pipeline will be used. This is currently "
|
||||
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
||||
msgstr ""
|
||||
"பதிவுகளை குறியாக்க ஜிஸ்ட்ரீமர் குழாயை அமைக்கிறது. ஜிஎஸ்டி லான்ஸ் க்கு "
|
||||
"பயன்படும் அதே இலக்கணத்தை பின் பற்றும். குழாய்க்கு இணைப்பில்லா பதிவுக்குழி "
|
||||
"இருத்தல் வேண்டும். இதில் விடியோ பதிவாகும். சாதாரணமாக இதில் ஒரு மூல பதிவேடு "
|
||||
"இருக்கும்; இதன் வெளியீடு வெளியீட்டு கோப்பாக பதிவாகும். எனினும் குழாய் தன் "
|
||||
"வெளியீட்டை தானே கவனித்துக்கொள்ள இயலும். இது வெளியீட்டை ஐஸ்காஸ்ட் அல்லது "
|
||||
"ஷௌட்2சென்ட் போன்றவற்றுக்கு நேரடியாக அனுப்ப இயலும். அமைப்பை அன்செட் "
|
||||
"செய்தாலல்லது காலி மதிப்புக்கு அமைத்தாலும் முன்னிருப்பு குழாய் "
|
||||
"பயன்படுத்தப்படும். நடப்பில் இது 'விடியோரேட்!தியோரேங்க்!ஆக்மக்ஸ்' ஆகும்; இது "
|
||||
"ஆக் தியோராவுக்கு பதிவுசெய்யும்."
|
||||
"பதிவுகளை குறியாக்க ஜிஸ்ட்ரீமர் குழாயை அமைக்கிறது. ஜிஎஸ்டி லான்ஸ் க்கு பயன்படும் அதே "
|
||||
"இலக்கணத்தை பின் பற்றும். குழாய்க்கு இணைப்பில்லா பதிவுக்குழி இருத்தல் வேண்டும். இதில் விடியோ "
|
||||
"பதிவாகும். சாதாரணமாக இதில் ஒரு மூல பதிவேடு இருக்கும்; இதன் வெளியீடு வெளியீட்டு "
|
||||
"கோப்பாக பதிவாகும். எனினும் குழாய் தன் வெளியீட்டை தானே கவனித்துக்கொள்ள இயலும். இது "
|
||||
"வெளியீட்டை ஐஸ்காஸ்ட் அல்லது ஷௌட்2சென்ட் போன்றவற்றுக்கு நேரடியாக அனுப்ப இயலும். அமைப்பை "
|
||||
"அன்செட் செய்தாலல்லது காலி மதிப்புக்கு அமைத்தாலும் முன்னிருப்பு குழாய் பயன்படுத்தப்படும். "
|
||||
"நடப்பில் இது 'விடியோரேட்!தியோரேங்க்!ஆக்மக்ஸ்' ஆகும்; இது ஆக் தியோராவுக்கு பதிவுசெய்யும்."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
msgstr "தேதியை கடிகாரத்தில் காட்டுக"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "நாட்காட்டியில் வார நாளை காட்டவும்"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show time with seconds"
|
||||
msgstr "நொடிகளுடன் நேரம் காட்டுக"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr ""
|
||||
"இந்த அடையாளங் காட்டிகளுக்கு பொருத்தமான பயன்பாடுகள் விருப்ப இடத்தில் "
|
||||
"காட்டப்படும்."
|
||||
msgstr "இந்த அடையாளங் காட்டிகளுக்கு பொருத்தமான பயன்பாடுகள் விருப்ப இடத்தில் காட்டப்படும்."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"The filename for recorded screencasts will be a unique filename based on the "
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
"a different container format."
|
||||
msgstr ""
|
||||
"ஸ்க்ரீன்காஸ்ட் இல் பதிவாவனக்கான கோப்புப்பெயர் தனித்தன்மை வாய்ந்தது. இது "
|
||||
"நடப்பு தேதியை அடிப்படையாக கொண்டது; இந்த பின்னொட்டை பயன்படுத்தும். பதிவதை "
|
||||
"வேறு கொள்கலத்தின் ஒழுங்கில் மாற்றுகையில் இதையும் மாற்ற வேண்டும்."
|
||||
"ஸ்க்ரீன்காஸ்ட் இல் பதிவாவனக்கான கோப்புப்பெயர் தனித்தன்மை வாய்ந்தது. இது நடப்பு தேதியை "
|
||||
"அடிப்படையாக கொண்டது; இந்த பின்னொட்டை பயன்படுத்தும். பதிவதை வேறு கொள்கலத்தின் ஒழுங்கில் "
|
||||
"மாற்றுகையில் இதையும் மாற்ற வேண்டும்."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr ""
|
||||
"க்னோம்ஷெல் இன் ஸ்க்ரீன்காஸ்ட் பதிவரில் ஸ்க்ரீன்காட் ஐ பதிகையில் வினாடிக்கு "
|
||||
"சட்டங்களின் விகிதம்."
|
||||
"க்னோம்ஷெல் இன் ஸ்க்ரீன்காஸ்ட் பதிவரில் ஸ்க்ரீன்காட் ஐ பதிகையில் வினாடிக்கு சட்டங்களின் விகிதம்."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
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 ""
|
||||
"வடிவமைப்பு விசை \"தனிப்பயன்\" என்று அமைக்கப்படும் போது பலக கடிகாரம் இந்த "
|
||||
"விசையை "
|
||||
"பயன்படுத்தும். குறிப்பிட்ட அமைப்பை பெற்றுக்கொள்ள strftime() ஆல் "
|
||||
"புரிந்துகொள்ளக்கூடிய மாற்று "
|
||||
"குறிப்புகளை தரவும். மேலும் அதிக விவரங்களுக்கு strftime() கையேட்டை "
|
||||
"பார்க்கவும்."
|
||||
"வடிவமைப்பு விசை \"தனிப்பயன்\" என்று அமைக்கப்படும் போது பலக கடிகாரம் இந்த விசையை "
|
||||
"பயன்படுத்தும். குறிப்பிட்ட அமைப்பை பெற்றுக்கொள்ள strftime() ஆல் புரிந்துகொள்ளக்கூடிய "
|
||||
"மாற்று குறிப்புகளை தரவும். மேலும் அதிக விவரங்களுக்கு strftime() கையேட்டை பார்க்கவும்."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
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\", "
|
||||
@ -211,21 +190,159 @@ msgid ""
|
||||
"the show_date and show_seconds keys are ignored."
|
||||
msgstr ""
|
||||
"இந்த விசை பலக கடிகாரம் பயன்படுத்த வேண்டிய மணி ஒழுங்கை குறிக்கிறது. தரக்கூடிய "
|
||||
"மதிப்புகள் \"12-மணி\", \"24-மணி\", \"யூனிக்ஸ்\" மற்றும் \"தனிப்பயன்\". "
|
||||
"\"யூனிக்ஸ்\" எனில் அது எபோக் அதாவது 1970-01-01 முதல் நடந்த காலத்தை "
|
||||
"வினாடிகளில் காட்டும். \"தனிப்பயன்\" எனில் தனிப்பயன்_ஒழுங்கு இல் காட்டப்பட்ட "
|
||||
"ஒழுங்கில் நேரத்தைக் காட்டும். \"யூனிக்ஸ்\" அல்லது \"தனிப்பயன்\" என "
|
||||
"மைக்கும்போது தேதி_காட்டு, வினாடிகளை_காட்டு விசைகள் உதாசீனப்படுத்தப்படும் என "
|
||||
"அறிக."
|
||||
"மதிப்புகள் \"12-மணி\", \"24-மணி\", \"யூனிக்ஸ்\" மற்றும் \"தனிப்பயன்\". \"யூனிக்ஸ்\" "
|
||||
"எனில் அது எபோக் அதாவது 1970-01-01 முதல் நடந்த காலத்தை வினாடிகளில் காட்டும். \"தனிப்பயன்"
|
||||
"\" எனில் தனிப்பயன்_ஒழுங்கு இல் காட்டப்பட்ட ஒழுங்கில் நேரத்தைக் காட்டும். \"யூனிக்ஸ்\" அல்லது "
|
||||
"\"தனிப்பயன்\" என மைக்கும்போது தேதி_காட்டு, வினாடிகளை_காட்டு விசைகள் "
|
||||
"உதாசீனப்படுத்தப்படும் என அறிக."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr "செயல்நீக்க வேண்டிய நீட்சிகளின் யூயூஐடிக்கள்."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
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 "பெரிதாக்கும் அளவு. 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 "கடிகார வடிவம்"
|
||||
@ -254,177 +371,159 @@ msgstr "_12 மணி வடிவமைப்பு"
|
||||
msgid "_24 hour format"
|
||||
msgstr "_24 மணி வடிவமைப்பு"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:384 ../js/ui/dash.js:776
|
||||
#: ../js/ui/appDisplay.js:215
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "பயன்பாடுகள்"
|
||||
|
||||
#: ../js/ui/appDisplay.js:416
|
||||
#: ../js/ui/appDisplay.js:245
|
||||
msgid "PREFERENCES"
|
||||
msgstr "விருப்பங்கள்"
|
||||
|
||||
#: ../js/ui/appDisplay.js:721
|
||||
#: ../js/ui/appDisplay.js:538
|
||||
msgid "New Window"
|
||||
msgstr "புதிய சாளரம்"
|
||||
|
||||
#: ../js/ui/appDisplay.js:725
|
||||
#: ../js/ui/appDisplay.js:542
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "விருப்பத்தில் இருந்து நீக்கு"
|
||||
|
||||
#: ../js/ui/appDisplay.js:726
|
||||
#: ../js/ui/appDisplay.js:543
|
||||
msgid "Add to Favorites"
|
||||
msgstr "விருப்பங்களுக்கு சேர்"
|
||||
|
||||
#: ../js/ui/appDisplay.js:1033
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "விருப்பங்களுக்கு சேர்க்க இங்கு இழுத்துவிடு"
|
||||
|
||||
#: ../js/ui/appFavorites.js:88
|
||||
#: ../js/ui/appFavorites.js:91
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s உங்கள் விருப்பங்களில் சேர்க்கப்பட்டது"
|
||||
|
||||
#: ../js/ui/appFavorites.js:107
|
||||
#: ../js/ui/appFavorites.js:122
|
||||
#, c-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s உங்கள் விருப்பங்களில் இருந்து நீக்கப்பட்டது"
|
||||
|
||||
#: ../js/ui/dash.js:142
|
||||
msgid "Find"
|
||||
msgstr "தேடு"
|
||||
#: ../js/ui/dash.js:27
|
||||
msgid "Remove"
|
||||
msgstr "நீக்கு"
|
||||
|
||||
#: ../js/ui/dash.js:471
|
||||
msgid "Searching..."
|
||||
msgstr "தேடுகிறது..."
|
||||
|
||||
#: ../js/ui/dash.js:485
|
||||
msgid "No matching results."
|
||||
msgstr "பொருத்தமான விடைகள் இல்லை"
|
||||
|
||||
#. **** Places ****
|
||||
#. Translators: This is in the sense of locations for documents,
|
||||
#. network locations, etc.
|
||||
#: ../js/ui/dash.js:795 ../js/ui/placeDisplay.js:550
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "PLACES & DEVICES"
|
||||
|
||||
#. **** Documents ****
|
||||
#: ../js/ui/dash.js:802 ../js/ui/docDisplay.js:494
|
||||
#: ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "RECENT ITEMS"
|
||||
|
||||
#: ../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:112
|
||||
msgid "Undo"
|
||||
msgstr "மறை"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:473
|
||||
#: ../js/ui/panel.js:470
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "%s லிருந்து வெளியேறு"
|
||||
|
||||
#: ../js/ui/panel.js:498
|
||||
#: ../js/ui/panel.js:495
|
||||
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:581
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %b %e, %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:585
|
||||
#: ../js/ui/panel.js:582
|
||||
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:589
|
||||
#: ../js/ui/panel.js:586
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:590
|
||||
#: ../js/ui/panel.js:587
|
||||
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:594
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %b %e, %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:598
|
||||
#: ../js/ui/panel.js:595
|
||||
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:602
|
||||
#: ../js/ui/panel.js:599
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:603
|
||||
#: ../js/ui/panel.js:600
|
||||
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:745
|
||||
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/placeDisplay.js:558
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "PLACES & DEVICES"
|
||||
|
||||
#: ../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 "முறைமை-மாற்றி-யூஎஸ்"
|
||||
|
||||
#: ../js/ui/runDialog.js:233
|
||||
msgid "Please enter a command:"
|
||||
@ -435,106 +534,177 @@ 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
|
||||
msgid "Invisible"
|
||||
msgstr "பார்க்கமுடியாதது"
|
||||
#: ../js/ui/statusMenu.js:114
|
||||
msgid "My Account"
|
||||
msgstr "என் கணக்கு"
|
||||
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Account Information..."
|
||||
msgstr "கணக்கு தகவல்..."
|
||||
#: ../js/ui/statusMenu.js:118
|
||||
msgid "System Settings"
|
||||
msgstr "கணினி அமைப்புகள்"
|
||||
|
||||
#: ../js/ui/statusMenu.js:110
|
||||
msgid "System Preferences..."
|
||||
msgstr "கணினி முன்னுரிமைகள்..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:117
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
msgid "Lock Screen"
|
||||
msgstr "திரையைப் பூட்டுக."
|
||||
|
||||
#: ../js/ui/statusMenu.js:121
|
||||
#: ../js/ui/statusMenu.js:129
|
||||
msgid "Switch User"
|
||||
msgstr "பயனர் மாற்று"
|
||||
|
||||
#: ../js/ui/statusMenu.js:126
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Log Out..."
|
||||
msgstr "வெளியேறு..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
msgid "Suspend..."
|
||||
msgstr "இடைநிறுத்தம்..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:145
|
||||
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:205
|
||||
msgid "Large Text"
|
||||
msgstr "பெரிய உரை"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:224
|
||||
msgid "Zoom"
|
||||
msgstr "பெரிதாக்கு"
|
||||
|
||||
#: ../js/ui/viewSelector.js:26
|
||||
msgid "Search your computer"
|
||||
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
|
||||
msgid ""
|
||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr ""
|
||||
"பணிக்களத்தை சேர்க்க முடியாது; ஏனெனில் பணிக்களங்களின் உச்ச வரம்பு "
|
||||
"எட்டப்பட்டுவிட்டது."
|
||||
#: ../js/ui/workspacesView.js:244
|
||||
msgid "Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr "பணிக்களத்தை சேர்க்க முடியாது; ஏனெனில் பணிக்களங்களின் உச்ச வரம்பு எட்டப்பட்டுவிட்டது."
|
||||
|
||||
#: ../js/ui/workspacesView.js:247
|
||||
#: ../js/ui/workspacesView.js:260
|
||||
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] "%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 Sounds"
|
||||
msgstr "கணினி ஒலிகள்"
|
||||
|
||||
#: ../src/shell-app-system.c:1012
|
||||
msgid "Unknown"
|
||||
msgstr "தெரியாத"
|
||||
|
||||
#: ../src/shell-global.c:1163
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "ஒரு நிமிடத்திற்கும் குறைவாக"
|
||||
|
||||
#: ../src/shell-global.c:1109
|
||||
#: ../src/shell-global.c:1167
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d minutes ago"
|
||||
msgstr[1] "%d நிமிடங்களுக்கு முன்"
|
||||
|
||||
#: ../src/shell-global.c:1114
|
||||
#: ../src/shell-global.c:1172
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d மணிநேரத்துக்கு முன்"
|
||||
msgstr[1] "%d மணிகள் முன்"
|
||||
|
||||
#: ../src/shell-global.c:1119
|
||||
#: ../src/shell-global.c:1177
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d நாளைக்கு முன்"
|
||||
msgstr[1] "%d நாட்களுக்கு முன்"
|
||||
|
||||
#: ../src/shell-global.c:1124
|
||||
#: ../src/shell-global.c:1182
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d வாரம் முன்"
|
||||
msgstr[1] "%d வாரங்கள் முன்"
|
||||
|
||||
#: ../src/shell-uri-util.c:89
|
||||
#: ../src/shell-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
|
||||
#: ../src/shell-util.c:104
|
||||
msgid "File System"
|
||||
msgstr "கோப்பு அமைப்பு"
|
||||
|
||||
#: ../src/shell-uri-util.c:250
|
||||
#: ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "தேடு"
|
||||
|
||||
@ -543,8 +713,44 @@ msgstr "தேடு"
|
||||
#. * example, "Trash: some-directory". It means that the
|
||||
#. * directory called "some-directory" is in the trash.
|
||||
#.
|
||||
#: ../src/shell-uri-util.c:300
|
||||
#: ../src/shell-util.c:300
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Overview workspace view mode"
|
||||
#~ msgstr "பணி இட மேல்பார்வை காட்சிப் பாங்கு."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The selected workspace view mode in the overview. Supported values are "
|
||||
#~ "\"single\" and \"grid\"."
|
||||
#~ msgstr ""
|
||||
#~ "மேல்பார்வையில் தேர்ந்தெடுத்த பணீட காட்சி பாங்கு. ஆதரவுள்ள மதிப்புகள் 'ஒன்று' மற்றும் "
|
||||
#~ "'வலை'"
|
||||
|
||||
#~ msgid "Drag here to add favorites"
|
||||
#~ msgstr "விருப்பங்களுக்கு சேர்க்க இங்கு இழுத்துவிடு"
|
||||
|
||||
#~ msgid "Find"
|
||||
#~ msgstr "தேடு"
|
||||
|
||||
#~ msgid "Searching..."
|
||||
#~ msgstr "தேடுகிறது..."
|
||||
|
||||
#~ msgid "No matching results."
|
||||
#~ msgstr "பொருத்தமான விடைகள் இல்லை"
|
||||
|
||||
#~ msgid "ON"
|
||||
#~ msgstr "இயக்கத்தில்"
|
||||
|
||||
#~ msgid "OFF"
|
||||
#~ msgstr "செயல் நீக்கு"
|
||||
|
||||
#~ msgid "Invisible"
|
||||
#~ msgstr "பார்க்கமுடியாதது"
|
||||
|
||||
#~ msgid "Account Information..."
|
||||
#~ msgstr "கணக்கு தகவல்..."
|
||||
|
||||
#~ msgid "System Preferences..."
|
||||
#~ msgstr "கணினி முன்னுரிமைகள்..."
|
||||
|
549
po/th.po
549
po/th.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-06-13 23:04+0000\n"
|
||||
"PO-Revision-Date: 2010-06-14 20:22+0700\n"
|
||||
"POT-Creation-Date: 2010-11-20 13:40+0000\n"
|
||||
"PO-Revision-Date: 2010-11-23 10:04+0700\n"
|
||||
"Last-Translator: Sira Nokyoongtong <gumaraa@gmail.com>\n"
|
||||
"Language-Team: Thai <thai-l10n@googlegroups.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -19,11 +19,11 @@ msgstr ""
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||
msgid "GNOME Shell"
|
||||
msgstr ""
|
||||
msgstr "เชลล์ GNOME"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:2
|
||||
msgid "Window management and application launching"
|
||||
msgstr ""
|
||||
msgstr "การจัดการหน้าต่างและการเรียกใช้โปรแกรม"
|
||||
|
||||
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
|
||||
msgid "Clock"
|
||||
@ -33,6 +33,294 @@ 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 ""
|
||||
"ส่วนขยายต่างๆ ของเชลล์ GNOME จะมี 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 ""
|
||||
"ถ้าเลือก และรูปแบบเวลาเป็น \"12-hour\" หรือ \"24-hour\" "
|
||||
"ก็จะแสดงวันที่ในนาฬิกาควบคู่กับเวลาด้วย"
|
||||
|
||||
#: ../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 ""
|
||||
"ถ้าเลือก และรูปแบบเวลาเป็น \"12-hour\" หรือ \"24-hour\" ก็จะแสดงวินาทีในเวลาด้วย"
|
||||
|
||||
# See http://en.wikipedia.org/wiki/ISO_week_date
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr "ถ้าเลือก จะแสดงวันที่แบบสัปดาห์ของ ISO ในปฏิทิน"
|
||||
|
||||
#: ../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 "แสดงวันที่ในนาฬิกา"
|
||||
|
||||
# See http://en.wikipedia.org/wiki/ISO_week_date
|
||||
#: ../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 ""
|
||||
"ค่านี้กำหนดรูปแบบของเวลาในแอพเพล็ตนาฬิกาเมื่อกำหนดรูปแบบเป็น \"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\", \"24-hour\", "
|
||||
"\"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 ""
|
||||
"ช่องแสดงภาพขยายอาจจะใหญ่เต็มจอภาพ (full-screen) หรืออาจจะกินที่แค่ครึ่งบน (top-half) "
|
||||
"ครึ่งล่าง (bottom-half) ครึ่งซ้าย (left-half) หรือครึ่งขวา (right-half)"
|
||||
|
||||
#: ../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 "รูปแบบนาฬิกา"
|
||||
@ -62,31 +350,31 @@ msgid "_24 hour format"
|
||||
msgstr "แบบ _24 ขั่วโมง"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:388 ../js/ui/dash.js:872
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "โปรแกรม"
|
||||
|
||||
#: ../js/ui/appDisplay.js:420
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
msgid "PREFERENCES"
|
||||
msgstr "ปรับแต่ง"
|
||||
|
||||
#: ../js/ui/appDisplay.js:726
|
||||
#: ../js/ui/appDisplay.js:647
|
||||
msgid "New Window"
|
||||
msgstr "หน้าต่างใหม่"
|
||||
|
||||
#: ../js/ui/appDisplay.js:730
|
||||
#: ../js/ui/appDisplay.js:651
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "ลบออกจากรายการโปรด"
|
||||
|
||||
#: ../js/ui/appDisplay.js:731
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
msgid "Add to Favorites"
|
||||
msgstr "เพิ่มเข้าในรายการโปรด"
|
||||
|
||||
#: ../js/ui/appDisplay.js:1038
|
||||
#: ../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 ถูกเพิ่มเข้าในรายการโปรดของคุณแล้ว"
|
||||
@ -96,233 +384,313 @@ msgstr "%s ถูกเพิ่มเข้าในรายการโปร
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s ถูกลบออกจากรายการโปรดของคุณแล้ว"
|
||||
|
||||
#: ../js/ui/dash.js:204
|
||||
#: ../js/ui/dash.js:142
|
||||
msgid "Find"
|
||||
msgstr "หา"
|
||||
|
||||
#: ../js/ui/dash.js:527
|
||||
#: ../js/ui/dash.js:473
|
||||
msgid "Searching..."
|
||||
msgstr "กำลังค้นหา..."
|
||||
|
||||
#: ../js/ui/dash.js:541
|
||||
#: ../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:891 ../js/ui/placeDisplay.js:551
|
||||
#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:558
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr ""
|
||||
msgstr "ที่หลักๆ และอุปกรณ์"
|
||||
|
||||
#. **** Documents ****
|
||||
#: ../js/ui/dash.js:898 ../js/ui/docDisplay.js:497
|
||||
#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr ""
|
||||
msgstr "รายการล่าสุด"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:475
|
||||
#: ../js/ui/lookingGlass.js:552
|
||||
msgid "No extensions installed"
|
||||
msgstr "ไม่มีส่วนขยายติดตั้งอยู่"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:512
|
||||
#: ../js/ui/lookingGlass.js:589
|
||||
msgid "Enabled"
|
||||
msgstr ""
|
||||
msgstr "เปิดใช้งาน"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:514
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
msgstr "ปิดใช้"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:516
|
||||
#: ../js/ui/lookingGlass.js:593
|
||||
msgid "Error"
|
||||
msgstr "ผิดพลาด"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:518
|
||||
#: ../js/ui/lookingGlass.js:595
|
||||
msgid "Out of date"
|
||||
msgstr ""
|
||||
msgstr "ตกรุ่น"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:543
|
||||
#: ../js/ui/lookingGlass.js:620
|
||||
msgid "View Source"
|
||||
msgstr ""
|
||||
msgstr "ดูซอร์ส"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:549
|
||||
#: ../js/ui/lookingGlass.js:626
|
||||
msgid "Web Page"
|
||||
msgstr "หน้าเว็บ"
|
||||
|
||||
#: ../js/ui/overview.js:165
|
||||
#: ../js/ui/overview.js:160
|
||||
msgid "Undo"
|
||||
msgstr "เรียกคืน"
|
||||
|
||||
#: ../js/ui/panel.js:334
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:470
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "ออกจาก %s"
|
||||
|
||||
#: ../js/ui/panel.js:354
|
||||
#: ../js/ui/panel.js:495
|
||||
msgid "Preferences"
|
||||
msgstr "ปรับแต่ง"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:441
|
||||
#: ../js/ui/panel.js:581
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr ""
|
||||
msgstr "%a %d %b, %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:442
|
||||
#: ../js/ui/panel.js:582
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr ""
|
||||
msgstr "%a %d %b, %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:446
|
||||
#: ../js/ui/panel.js:586
|
||||
msgid "%a %R:%S"
|
||||
msgstr ""
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:447
|
||||
#: ../js/ui/panel.js:587
|
||||
msgid "%a %R"
|
||||
msgstr ""
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:454
|
||||
#: ../js/ui/panel.js:594
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr ""
|
||||
msgstr "%a %d %b, %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:455
|
||||
#: ../js/ui/panel.js:595
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr ""
|
||||
msgstr "%a %d %b, %l:%M %p"
|
||||
|
||||
#. Translators: This is a time format without date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:459
|
||||
#: ../js/ui/panel.js:599
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr ""
|
||||
msgstr "%a %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:460
|
||||
#: ../js/ui/panel.js:600
|
||||
msgid "%a %l:%M %p"
|
||||
msgstr ""
|
||||
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:562
|
||||
#: ../js/ui/panel.js:745
|
||||
msgid "Activities"
|
||||
msgstr "กิจกรรม"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:108
|
||||
#: ../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:235
|
||||
#. 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:380
|
||||
#: ../js/ui/runDialog.js:378
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr ""
|
||||
msgstr "คำสั่ง '%s' ทำงานล้มเหลว:"
|
||||
|
||||
#: ../js/ui/statusMenu.js:91
|
||||
#: ../js/ui/statusMenu.js:101
|
||||
msgid "Available"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/statusMenu.js:95
|
||||
msgid "Busy"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/statusMenu.js:99
|
||||
msgid "Invisible"
|
||||
msgstr ""
|
||||
msgstr "อยู่"
|
||||
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Account Information..."
|
||||
msgstr "ข้อมูลบัญชี..."
|
||||
msgid "Busy"
|
||||
msgstr "ไม่ว่าง"
|
||||
|
||||
#: ../js/ui/statusMenu.js:110
|
||||
msgid "System Preferences..."
|
||||
msgstr "ปรับแต่งระบบ..."
|
||||
#: ../js/ui/statusMenu.js:114
|
||||
msgid "My Account..."
|
||||
msgstr "บัญชีของฉัน..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:117
|
||||
#: ../js/ui/statusMenu.js:118
|
||||
msgid "System Settings..."
|
||||
msgstr "ตั้งค่าระบบ..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
msgid "Lock Screen"
|
||||
msgstr "ล็อคหน้าจอ"
|
||||
|
||||
#: ../js/ui/statusMenu.js:121
|
||||
#: ../js/ui/statusMenu.js:129
|
||||
msgid "Switch User"
|
||||
msgstr "สลับผู้ใช้"
|
||||
|
||||
#: ../js/ui/statusMenu.js:126
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Log Out..."
|
||||
msgstr "ออกจากระบบ..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
msgid "Suspend"
|
||||
msgstr "พักเครื่อง"
|
||||
|
||||
#: ../js/ui/statusMenu.js:145
|
||||
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:205
|
||||
msgid "Large Text"
|
||||
msgstr "อักษรขนาดใหญ่"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:224
|
||||
msgid "Zoom"
|
||||
msgstr "ซูม"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
msgid "%s has finished starting"
|
||||
msgstr ""
|
||||
msgstr "%s เปิดเสร็จแล้ว"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:49
|
||||
#: ../js/ui/windowAttentionHandler.js:45
|
||||
#, c-format
|
||||
msgid "'%s' is ready"
|
||||
msgstr "'%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 ""
|
||||
|
||||
#: ../js/ui/workspacesView.js:254
|
||||
#: ../js/ui/workspacesView.js:246
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "ไม่สามารถลบพื้นที่ทำงานแรกได้"
|
||||
|
||||
#: ../src/shell-global.c:1025
|
||||
#. 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-app-system.c:1012
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/shell-global.c:1158
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "ไม่ถึงหนึ่งนาทีก่อน"
|
||||
|
||||
#: ../src/shell-global.c:1029
|
||||
#: ../src/shell-global.c:1162
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d นาทีก่อน"
|
||||
|
||||
#: ../src/shell-global.c:1034
|
||||
#: ../src/shell-global.c:1167
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d ชั่วโมงก่อน"
|
||||
|
||||
#: ../src/shell-global.c:1039
|
||||
#: ../src/shell-global.c:1172
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d วันก่อน"
|
||||
|
||||
#: ../src/shell-global.c:1044
|
||||
#: ../src/shell-global.c:1177
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d สัปดาห์ก่อน"
|
||||
|
||||
#: ../src/shell-uri-util.c:89
|
||||
#: ../src/shell-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
|
||||
#: ../src/shell-util.c:104
|
||||
msgid "File System"
|
||||
msgstr "ระบบแฟ้ม"
|
||||
|
||||
#: ../src/shell-uri-util.c:250
|
||||
#: ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "ค้นหา"
|
||||
|
||||
@ -331,7 +699,10 @@ msgstr "ค้นหา"
|
||||
#. * example, "Trash: some-directory". It means that the
|
||||
#. * directory called "some-directory" is in the trash.
|
||||
#.
|
||||
#: ../src/shell-uri-util.c:300
|
||||
#: ../src/shell-util.c:300
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr ""
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Account Information..."
|
||||
#~ msgstr "ข้อมูลบัญชี..."
|
||||
|
583
po/ug.po
583
po/ug.po
@ -4,14 +4,14 @@
|
||||
# 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"
|
||||
"POT-Creation-Date: 2010-12-20 21:07+0000\n"
|
||||
"PO-Revision-Date: 2010-11-25 14:28+0600\n"
|
||||
"Last-Translator: Sahran <sahran@live.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"
|
||||
@ -20,7 +20,7 @@ msgstr ""
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||
msgid "GNOME Shell"
|
||||
msgstr "GNOME چاپان"
|
||||
msgstr "GNOME Shell"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:2
|
||||
msgid "Window management and application launching"
|
||||
@ -32,7 +32,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 ""
|
||||
@ -42,7 +42,7 @@ msgstr "ئىچكى سازلاش ۋە كۆزىتىش قورالىنى زىيار
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||
msgid "Custom format of the clock"
|
||||
msgstr "ئىختىيارىي سائەت فورماتى"
|
||||
msgstr "سائەتنىڭ ئىختىيارىي فورماتى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
@ -50,11 +50,11 @@ msgstr "ئىچكى قورال قوزغىتىلسا ئىجادكارلار ۋە
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "ھۆججەت كېڭەيتىلگەن ئاتى ئېكران كەسمىسى (screencasts) ساقلاشقا ئىشلىتىلىدۇ"
|
||||
msgstr "ئېكران كەسمىسى (screencasts) ساقلاشتا ئىشلىتىلىدىغان ھۆججەتنىڭ كېڭەيتىلگەن ئاتى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "كاندۇك نىسبىتى ئېكران كەسمىسى (screencasts) خاتىرىلەشكە ئىشلىتىلىدۇ"
|
||||
msgstr "ئېكران كەسمىسى (screencasts) خاتىرىلەشتە ئىشلىتىلىدىغان كاندۇك تېزلىكى."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
@ -88,13 +88,9 @@ msgstr "ئەگەر راست(true) بولسا يىلنامىدىكى ISO ھەپت
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr "ئامراق پروگراممىلارنىڭ ئۈستەل ئۈستى ھۆججەت ID تىزىملىكى"
|
||||
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 "
|
||||
@ -104,50 +100,44 @@ msgid ""
|
||||
"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 ""
|
||||
msgstr "ئۈن ئېلىشنى كودلاشتا ئىشلىتىلىدىغان GStreamer ئاقما لىنىيىنى تەڭشەيدۇ. ئۇ gst-launch گرامماتىكىسىغا بوي سۇنىدۇ. بۇ ئاقما لىنىيىدە ئۇلانمىغان sink pad بولۇشى لازىم، خاتىرىلىنىدىغان سىن مۇشۇ جايدا خاتىرىلىنىدۇ. بۇ لىنىيىدە ئادەتتە يەنە بىر ئۇلانمىغان مەنبە pad بولىدۇ؛ بۇ pad چىقارغان ئۇچۇرلار ھۆججەتكە يېزىلىدۇ. ئەمما ئاقما لىنىيە ئۆزىنىڭ چىقىرىشىنى بىر تەرەپ قىلالايدۇ، بۇنداق بولغاندا shout2send ئارقىلىق ياكى شۇنىڭغا ئوخشاش ئۇسۇلدا چىقىرىشنى icecast مۇلازىمېتىرىغا يوللايدۇ. ئاقما لىنىيە تەڭشەلمىگەن ياكى بوش قىممەتكە تەڭشەلگەندە كۆڭۈلدىكى ئاقما لىنىيە قوزغىتىلىدۇ. ئۇنىڭ نۆۋەتتىكى قىممىتى 'videorate ! theoraenc ! oggmux' بولۇپ، فورماتى Ogg شەكلىدە خاتىرىلىنىدۇ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
msgstr "سائەت ئىچىدە چېسلا كۆرسەت"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "يىلنامىدە ھەپتە كۆرسەت"
|
||||
msgstr "يىلنامىدە ھەپتىنى كۆرسىتىدۇ"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show time with seconds"
|
||||
msgstr "ۋاقىت ئىچىدە سېكۇنتنى بىللە كۆرسەت"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr "مۇناسىپ پروگرامما بەلگىسى يىغقۇچ رايونىدا كۆرسىتىلىدۇ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"The filename for recorded screencasts will be a unique filename based on the "
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
"a different container format."
|
||||
msgstr "خاتىرىلەنگەن ئېكراننىڭ ھۆججەت ئاتى نۆۋەتتىكى چېسلا ئاساسىدا بىردىنبىر بولۇپ بۇ كېڭەيتىلگەن ئاتىنى ئىشلىتىدۇ. ئۇ ئۆزگەرسە ئوخشاش بولمىغان قاچا فورماتىدا خاتىرىلەيدۇ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr "GNOME Shell ئېكران خاتىرىلىگۈچ ھەر سېكۇنتتا خاتىرىلەيدىغان ئېكران كەسمىسى كاندۇك نىسبىتى"
|
||||
msgstr "GNOME Shell ئېكران خاتىرىلىگۈچ ھەر سېكۇنتتا خاتىرىلەيدىغان ئېكران كەسمىسى كاندۇك سۈرىتى(ھەر سېكۇنتتىكى كاندۇك سانى)."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "ئېكران كەسمىسىنى كودلاشتا ئىشلىتىلىدىغان gstreamer ئاقما لىنىيىسى"
|
||||
|
||||
#: ../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 "
|
||||
@ -155,7 +145,7 @@ msgid ""
|
||||
"remove already saved data."
|
||||
msgstr "چاپان (shell) ئادەتتىكى ئەھۋالدا كۆپ ئىشلىتىلىدىغان ئاكتىپ پروگراممىلار(مەسىلەن، ئىجرا قىلىنىۋاتقان)نى كۆزىتىدۇ. گەرچە بۇ سانلىق مەلۇماتلار مەخپىي ساقلانسىمۇ، شەخسىي سىر سەۋەبىدىن بۇنى چەكلىشىڭىز مۇمكىن. دىققەت بۇنداق قىلغاندا ئاللىبۇرۇن ساقلانغان سانلىق مەلۇماتلار چىقىرىۋېتىلمەيدۇ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
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"
|
||||
@ -163,7 +153,7 @@ msgid ""
|
||||
"information."
|
||||
msgstr "format (فورمات) كۇنۇپكىسى \"custom\" (ئىختىيارى) قىلىپ تەڭشەلسە بۇ كۇنۇپكا تاختا سائەت ئىشلىتىدىغان فورماتنى بەلگىلەيدۇ. سىز strftime()نىڭ فورمات بەلگىسىنى ئىشلىتىپ بەلگىلەنگەن فورماتقا ئېرىشەلەيسىز. تەپسىلاتىنى strftime() نىڭ قوللانمىسىدىن كۆرۈڭ."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
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\", "
|
||||
@ -173,27 +163,27 @@ msgid ""
|
||||
"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
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr "كېڭەيتىلمىنىڭ Uuid چەكلەندى"
|
||||
msgstr "چەكلىنىدىغان كېڭەيتىلمىنىڭ Uuid سى"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
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 ""
|
||||
msgstr "نىشانلىغۇچنى ئوتتۇرىغا توغرىلا"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
|
||||
msgid "Color of the crosshairs"
|
||||
msgstr ""
|
||||
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 ""
|
||||
msgstr "نىشانلىغۇچنى ھاسىل قىلىدىغان توغرا ۋە بوي سىزىقنىڭ ئۇزۇنلۇقى بەلگىلىنىدۇ."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
|
||||
msgid ""
|
||||
@ -212,7 +202,7 @@ msgstr ""
|
||||
msgid ""
|
||||
"Determines the transparency of the crosshairs, from fully opaque to fully "
|
||||
"transparent."
|
||||
msgstr ""
|
||||
msgstr "نىشانلىغۇچنىڭ سۈزۈكلۈكى تولۇق سۈزۈكتىن تولۇق تۇتۇققىچە بەلگىلىنىدۇ."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
|
||||
msgid ""
|
||||
@ -223,7 +213,7 @@ msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
|
||||
msgid "Enable lens mode"
|
||||
msgstr ""
|
||||
msgstr "لېنزا ھالىتىنى قوزغات"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
|
||||
msgid ""
|
||||
@ -240,19 +230,19 @@ msgstr ""
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
|
||||
msgid "Length of the crosshairs"
|
||||
msgstr ""
|
||||
msgstr "نىشانلىغۇچنىڭ ئېگىزلىكى"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
|
||||
msgid "Magnification factor"
|
||||
msgstr ""
|
||||
msgstr "چوڭايتىش-كىچىكلىتىش نىسبىتى"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
|
||||
msgid "Mouse Tracking Mode"
|
||||
msgstr ""
|
||||
msgstr "چاشقىنەك ئىزلاش ھالىتى"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
|
||||
msgid "Opacity of the crosshairs"
|
||||
msgstr ""
|
||||
msgstr "نىشانلىغۇچنىڭ سۈزۈكلۈكى"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
|
||||
msgid "Screen position"
|
||||
@ -260,25 +250,25 @@ msgstr "ئېكران ئورنى"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
|
||||
msgid "Scroll magnified contents beyond the edges of the desktop"
|
||||
msgstr "دومىلىما چوڭايتقۇچ ئۈستەل ئۈستى گىرۋەك مەزمۇنىدىن ھالقىپ كەتتى"
|
||||
msgstr "دومىلىما چوڭايتقۇچ ئۈستەلئۈستى گىرۋەك مەزمۇنىدىن ھالقىپ كەتتى"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
|
||||
msgid "Show or hide crosshairs"
|
||||
msgstr ""
|
||||
msgstr "نىشانلىغۇچنى كۆرسەت ياكى يوشۇر"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
|
||||
msgid "Show or hide the magnifier"
|
||||
msgstr ""
|
||||
msgstr "لوپا ئەينەكنى كۆرسەت ياكى يوشۇر"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
|
||||
msgid "Show or hide the magnifier and all of its zoom regions."
|
||||
msgstr ""
|
||||
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 ""
|
||||
msgstr "نىشانلىغۇچنى ھاسىل قىلىدىغان توغرا ۋە بوي سىزىقنىڭ رەڭگى."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
|
||||
msgid ""
|
||||
@ -290,11 +280,11 @@ msgstr ""
|
||||
msgid ""
|
||||
"The power of the magnification. A value of 1.0 means no magnification. A "
|
||||
"value of 2.0 doubles the size."
|
||||
msgstr ""
|
||||
msgstr "چوڭايتىش كۈچى. 1.0 چوڭايتمايدۇ، 2.0 چوڭلۇقىنى ھەسسىلەيدۇ دېگەن مەنىدە."
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
|
||||
msgid "Thickness of the crosshairs"
|
||||
msgstr ""
|
||||
msgstr "نىشانلىغۇچنىڭ قېلىنلىقى"
|
||||
|
||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
|
||||
msgid ""
|
||||
@ -304,7 +294,7 @@ 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 ""
|
||||
msgstr "نىشانلىغۇچنى ھاسىل قىلىدىغان توغرا ۋە بوي سىزىقنىڭ كەڭلىكى."
|
||||
|
||||
#: ../data/clock-preferences.ui.h:1
|
||||
msgid "Clock Format"
|
||||
@ -316,11 +306,11 @@ msgstr "سائەت مايىللىقى"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:3
|
||||
msgid "Panel Display"
|
||||
msgstr "تاختا كۆرسەت"
|
||||
msgstr "تاختا كۆرسىتىش"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:4
|
||||
msgid "Show seco_nds"
|
||||
msgstr "سېكۇنت كۆرسەت(_N)"
|
||||
msgstr "سېكۇنتنى كۆرسەت(_N)"
|
||||
|
||||
#: ../data/clock-preferences.ui.h:5
|
||||
msgid "Show the _date"
|
||||
@ -334,62 +324,45 @@ msgstr "_12 سائەت فورماتى"
|
||||
msgid "_24 hour format"
|
||||
msgstr "_24 سائەت فورماتى"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
#: ../js/ui/appDisplay.js:154
|
||||
msgid "All"
|
||||
msgstr "ھەممىسى"
|
||||
|
||||
#: ../js/ui/appDisplay.js:235
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "پروگراممىلار"
|
||||
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
#: ../js/ui/appDisplay.js:265
|
||||
msgid "PREFERENCES"
|
||||
msgstr "مايىللىق"
|
||||
|
||||
#: ../js/ui/appDisplay.js:647
|
||||
#: ../js/ui/appDisplay.js:562
|
||||
msgid "New Window"
|
||||
msgstr "يېڭى كۆزنەك"
|
||||
|
||||
#: ../js/ui/appDisplay.js:651
|
||||
#: ../js/ui/appDisplay.js:566
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "يىغقۇچتىن چىقىرىۋەت"
|
||||
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
#: ../js/ui/appDisplay.js:567
|
||||
msgid "Add to Favorites"
|
||||
msgstr "يىغقۇچقا قوش"
|
||||
|
||||
#: ../js/ui/appDisplay.js:829
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "بۇ جايغا سۆرەپ قىسقۇچقا قوش"
|
||||
|
||||
#: ../js/ui/appFavorites.js:88
|
||||
#: ../js/ui/appFavorites.js:91
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s يىغقۇچىڭىزغا قوشۇلىدۇ."
|
||||
msgstr "%s يىغقۇچىڭىزغا قوشۇلدى."
|
||||
|
||||
#: ../js/ui/appFavorites.js:107
|
||||
#: ../js/ui/appFavorites.js:122
|
||||
#, c-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s يىغقۇچىڭىزدىن چىقىرىۋېتىلىدۇ."
|
||||
|
||||
#: ../js/ui/dash.js:142
|
||||
msgid "Find"
|
||||
msgstr "ئىزدە"
|
||||
#: ../js/ui/dash.js:27
|
||||
msgid "Remove"
|
||||
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
|
||||
#: ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "يېقىنقى تۈرلەر"
|
||||
|
||||
@ -421,72 +394,81 @@ msgstr "مەنبەنى كۆرسەت"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:626
|
||||
msgid "Web Page"
|
||||
msgstr "تور بەت"
|
||||
msgstr "توربەت"
|
||||
|
||||
#: ../js/ui/overview.js:160
|
||||
#: ../js/ui/overview.js:96
|
||||
msgid "Undo"
|
||||
msgstr "يېنىۋال"
|
||||
|
||||
#: ../js/ui/overview.js:158
|
||||
#| msgid "New Window"
|
||||
msgid "Windows"
|
||||
msgstr "كۆزنەكلەر"
|
||||
|
||||
#: ../js/ui/overview.js:161
|
||||
msgid "Applications"
|
||||
msgstr "پروگراممىلار"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:469
|
||||
#: ../js/ui/panel.js:474
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "%s چېكىن"
|
||||
|
||||
#: ../js/ui/panel.js:494
|
||||
#: ../js/ui/panel.js:499
|
||||
msgid "Preferences"
|
||||
msgstr "مايىللىق"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:580
|
||||
#: ../js/ui/panel.js:585
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%a %b %e، %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:581
|
||||
#: ../js/ui/panel.js:586
|
||||
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
|
||||
#: ../js/ui/panel.js:590
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%a %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:586
|
||||
#: ../js/ui/panel.js:591
|
||||
msgid "%a %R"
|
||||
msgstr "%a %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:593
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%a %b %e، %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:594
|
||||
#: ../js/ui/panel.js:599
|
||||
msgid "%a %b %e, %l:%M %p"
|
||||
msgstr "%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
|
||||
#: ../js/ui/panel.js:603
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%a %l:%M:%S %p"
|
||||
|
||||
#: ../js/ui/panel.js:599
|
||||
#: ../js/ui/panel.js:604
|
||||
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
|
||||
#: ../js/ui/panel.js:749
|
||||
msgid "Activities"
|
||||
msgstr "ھەرىكەتچان"
|
||||
msgstr "پائالىيەتلەر"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:111
|
||||
#, c-format
|
||||
msgid "Failed to unmount '%s'"
|
||||
msgstr "%s نىڭ ئېگەرنى يېشىش مەغلۇپ بولدى."
|
||||
msgstr "«%s» نى ئېگەرسىزلەش مەغلۇپ بولدى"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:114
|
||||
msgid "Retry"
|
||||
@ -494,7 +476,11 @@ msgstr "قايتا سىنا"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:159
|
||||
msgid "Connect to..."
|
||||
msgstr "باغلانماق..."
|
||||
msgstr "باغلىنىش…"
|
||||
|
||||
#: ../js/ui/placeDisplay.js:558
|
||||
msgid "PLACES & DEVICES"
|
||||
msgstr "ئورۇن ۋە ئۈسكۈنىلەر"
|
||||
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
@ -503,7 +489,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:"
|
||||
@ -512,52 +498,51 @@ msgstr "بۇيرۇق كىرگۈزۈڭ:"
|
||||
#: ../js/ui/runDialog.js:378
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "'%s' ئىجرا قىلالمىدى:"
|
||||
msgstr "«%s» ئىجرا قىلىش مەغلۇپ بولدى:"
|
||||
|
||||
#: ../js/ui/statusMenu.js:101
|
||||
msgid "Available"
|
||||
msgstr "ئىشلىتىلىشچان"
|
||||
msgstr "بار"
|
||||
|
||||
#: ../js/ui/statusMenu.js:106
|
||||
msgid "Busy"
|
||||
msgstr "ئالدىراش"
|
||||
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "يوشۇرۇن"
|
||||
#: ../js/ui/statusMenu.js:114
|
||||
#| msgid "My Account..."
|
||||
msgid "My Account"
|
||||
msgstr "ھېساباتىم"
|
||||
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr ""
|
||||
#: ../js/ui/statusMenu.js:118
|
||||
#| msgid "System Settings..."
|
||||
msgid "System Settings"
|
||||
msgstr "سىستېما تەڭشىكى"
|
||||
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
msgid "System Settings..."
|
||||
msgstr "سىستېما تەڭشەكلىرى"
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
msgid "Lock Screen"
|
||||
msgstr "ئېكراننى قۇلۇپلا"
|
||||
msgstr "ئېكراننى قۇلۇپلاش"
|
||||
|
||||
#: ../js/ui/statusMenu.js:129
|
||||
msgid "Switch User"
|
||||
msgstr "ئىشلەتكۈچى ئالماشتۇرۇش"
|
||||
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Switch User"
|
||||
msgstr "ئىشلەتكۈچى ئالماشتۇر"
|
||||
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
msgid "Log Out..."
|
||||
msgstr "تىزىمدىن چىق…"
|
||||
msgstr "تىزىمدىن چىقىش…"
|
||||
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr "ۋاقىتلىق توختىتىش"
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
#| msgid "Suspend"
|
||||
msgid "Suspend..."
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
#: ../js/ui/statusMenu.js:145
|
||||
msgid "Shut Down..."
|
||||
msgstr "تاقا…"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:82
|
||||
msgid "Zoom"
|
||||
msgstr "كېڭەيت تارايت"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "ئېكران ئوقۇغۇچ"
|
||||
@ -572,35 +557,288 @@ msgstr "كۆرۈنمە ئاگاھلاندۇرۇش"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:97
|
||||
msgid "Sticky Keys"
|
||||
msgstr "چاپلاش كۇنۇپكىسى"
|
||||
msgstr "Sticky Keys"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:100
|
||||
msgid "Slow Keys"
|
||||
msgstr "ئاستا كۇنۇپكا"
|
||||
msgstr "Slow Keys"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:103
|
||||
msgid "Bounce Keys"
|
||||
msgstr "قاڭقىش كۇنۇپكىسى"
|
||||
msgstr "Bounce Keys"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:106
|
||||
msgid "Mouse Keys"
|
||||
msgstr "چاشقىنەك كۇنۇپكا"
|
||||
msgstr "Mouse Keys"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:110
|
||||
msgid "Universal Access Settings"
|
||||
msgstr "ھەممىباب زىيارەت تەڭشىكى"
|
||||
msgstr "ئۇنىۋېرسال زىيارەت تەڭشىكى"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:163
|
||||
msgid "High Contrast"
|
||||
msgstr "يۇقىرى ئاق-قارىلىقى"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
#: ../js/ui/status/accessibility.js:205
|
||||
msgid "Large Text"
|
||||
msgstr "چوڭ تېكىست"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "كېڭەيت تارايت"
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:200
|
||||
msgid "Bluetooth"
|
||||
msgstr "كۆكچىش"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:55
|
||||
msgid "Visibility"
|
||||
msgstr "كۆرۈشچانلىقى"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:68
|
||||
msgid "Send Files to Device..."
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:71
|
||||
msgid "Setup a New Device..."
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:94
|
||||
#| msgid "System Settings..."
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:151
|
||||
#| msgid "Connect to..."
|
||||
msgid "Connection"
|
||||
msgstr "باغلىنىش"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:187
|
||||
#| msgid "Suspend"
|
||||
msgid "Send Files..."
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:192
|
||||
msgid "Browse Files..."
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:201
|
||||
msgid "Error browsing device"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:202
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:210
|
||||
#| msgid "System Settings..."
|
||||
msgid "Keyboard Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:215
|
||||
#| msgid "System Settings..."
|
||||
msgid "Mouse Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:222 ../js/ui/status/volume.js:62
|
||||
#| msgid "System Settings..."
|
||||
msgid "Sound Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:293 ../js/ui/status/bluetooth.js:327
|
||||
#: ../js/ui/status/bluetooth.js:367 ../js/ui/status/bluetooth.js:400
|
||||
msgid "Bluetooth Agent"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:328
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:334
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:336
|
||||
msgid "Always grant access"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:337
|
||||
msgid "Grant this time only"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:338
|
||||
msgid "Reject"
|
||||
msgstr "رەت قىل"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:374 ../js/ui/status/bluetooth.js:408
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:375
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
msgid "Matches"
|
||||
msgstr "جۈپلەش تۈرى"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
msgid "Does not match"
|
||||
msgstr "جۈپلىمە"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:401
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:409
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:425
|
||||
msgid "OK"
|
||||
msgstr "جەزملە"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:426
|
||||
msgid "Cancel"
|
||||
msgstr "ۋاز كەچ"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
#| msgid "System Settings..."
|
||||
msgid "Power Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/power.js:112
|
||||
#, c-format
|
||||
#| msgid "%d hour ago"
|
||||
#| msgid_plural "%d hours ago"
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
msgstr[0] ""
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:115
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "سائەت"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
#| msgid "%d minute ago"
|
||||
#| msgid_plural "%d minutes ago"
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "مىنۇت"
|
||||
|
||||
#: ../js/ui/status/power.js:120
|
||||
#, c-format
|
||||
#| msgid "%d minute ago"
|
||||
#| msgid_plural "%d minutes ago"
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] ""
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
msgid "AC adapter"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
msgid "Laptop battery"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
msgid "UPS"
|
||||
msgstr "UPS"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
msgid "Monitor"
|
||||
msgstr "ئېكران"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
#| msgid "Mouse Keys"
|
||||
msgid "Mouse"
|
||||
msgstr "چاشقىنەك"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
#| msgid "Screen Keyboard"
|
||||
msgid "Keyboard"
|
||||
msgstr "ھەرپتاختا"
|
||||
|
||||
#: ../js/ui/status/power.js:249
|
||||
msgid "PDA"
|
||||
msgstr "PDA"
|
||||
|
||||
#: ../js/ui/status/power.js:251
|
||||
msgid "Cell phone"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/status/power.js:253
|
||||
msgid "Media player"
|
||||
msgstr "Media چالغۇ"
|
||||
|
||||
#: ../js/ui/status/power.js:255
|
||||
#| msgid "Enabled"
|
||||
msgid "Tablet"
|
||||
msgstr "سەزمە تاختا"
|
||||
|
||||
#: ../js/ui/status/power.js:257
|
||||
msgid "Computer"
|
||||
msgstr "كومپيۇتېر"
|
||||
|
||||
#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
|
||||
msgid "Unknown"
|
||||
msgstr "نامەلۇم"
|
||||
|
||||
#: ../js/ui/status/volume.js:41
|
||||
msgid "Volume"
|
||||
msgstr "دىسكا"
|
||||
|
||||
#: ../js/ui/status/volume.js:54
|
||||
msgid "Microphone"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/telepathyClient.js:560
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/telepathyClient.js:565
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/telepathyClient.js:568
|
||||
#, c-format
|
||||
#| msgid "'%s' is ready"
|
||||
msgid "%s is away."
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/telepathyClient.js:571
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr ""
|
||||
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:664
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/viewSelector.js:26
|
||||
msgid "Search your computer"
|
||||
msgstr ""
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
@ -610,16 +848,16 @@ msgstr "%s باشلاشنى تاماملىدى"
|
||||
#: ../js/ui/windowAttentionHandler.js:45
|
||||
#, c-format
|
||||
msgid "'%s' is ready"
|
||||
msgstr "'%s' تەييار بولدى"
|
||||
msgstr "«%s» تەييار"
|
||||
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
#: ../js/ui/workspacesView.js:244
|
||||
msgid ""
|
||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr "يېڭى خىزمەت رايونى قوشالمايدۇ چۈنكى ئەڭ كۆپ خىزمەت رايون چېكىگە يەتتى."
|
||||
|
||||
#: ../js/ui/workspacesView.js:246
|
||||
#: ../js/ui/workspacesView.js:260
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "بىرىنچى خىزمەت رايونىنى چىقىرىۋېتەلمەيدۇ."
|
||||
msgstr "بىرىنچى خىزمەت رايونىنى چىقىرىۋەتكىلى بولمايدۇ."
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
@ -627,7 +865,7 @@ msgstr "بىرىنچى خىزمەت رايونىنى چىقىرىۋېتەلمە
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
msgstr[0] "%u چىقار"
|
||||
msgstr[0] "%u چىقىرىلما"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
@ -635,51 +873,51 @@ msgstr[0] "%u چىقار"
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] "%u كىرگۈز"
|
||||
msgstr[0] "%u كىرگۈزۈلمە"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
msgid "System Sounds"
|
||||
msgstr "سىستېما ئاۋازى"
|
||||
|
||||
#: ../src/shell-global.c:1219
|
||||
#: ../src/shell-global.c:1155
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "بىر مىنۇتتىنمۇ ئىلگىرى"
|
||||
|
||||
#: ../src/shell-global.c:1223
|
||||
#: ../src/shell-global.c:1159
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d مىنۇت ئىلگىرى"
|
||||
|
||||
#: ../src/shell-global.c:1228
|
||||
#: ../src/shell-global.c:1164
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d سائەت ئىلگىرى"
|
||||
|
||||
#: ../src/shell-global.c:1233
|
||||
#: ../src/shell-global.c:1169
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d كۈن ئىلگىرى"
|
||||
|
||||
#: ../src/shell-global.c:1238
|
||||
#: ../src/shell-global.c:1174
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d ھەپتە ئىلگىرى"
|
||||
|
||||
#: ../src/shell-uri-util.c:89
|
||||
#: ../src/shell-util.c:89
|
||||
msgid "Home Folder"
|
||||
msgstr "باش مۇندەرىجە"
|
||||
msgstr "ماكان مۇندەرىجە"
|
||||
|
||||
#. Translators: this is the same string as the one found in
|
||||
#. * nautilus
|
||||
#: ../src/shell-uri-util.c:104
|
||||
#: ../src/shell-util.c:104
|
||||
msgid "File System"
|
||||
msgstr "ھۆججەت سىستېمىسى"
|
||||
|
||||
#: ../src/shell-uri-util.c:250
|
||||
#: ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "ئىزدە"
|
||||
|
||||
@ -688,7 +926,32 @@ msgstr "ئىزدە"
|
||||
#. * example, "Trash: some-directory". It means that the
|
||||
#. * directory called "some-directory" is in the trash.
|
||||
#.
|
||||
#: ../src/shell-uri-util.c:300
|
||||
#: ../src/shell-util.c:300
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Overview workspace view mode"
|
||||
#~ msgstr "خىزمەت رايون كۆرۈنۈش ھالىتى ھەققىدە قىسقىچە بايان"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The selected workspace view mode in the overview. Supported values are "
|
||||
#~ "\"single\" and \"grid\"."
|
||||
#~ msgstr ""
|
||||
#~ "قىسقىچە باياندىكى تاللانغان خىزمەت رايونىنىڭ كۆرۈنۈش ھالىتى. ئىشلىتىشكە "
|
||||
#~ "بولىدىغان قىممەتلەر «يەككە» ۋە «سېتكا»"
|
||||
|
||||
#~ msgid "Drag here to add favorites"
|
||||
#~ msgstr "بۇ جايغا سۆرەپ يىغقۇچقا قوش"
|
||||
|
||||
#~ msgid "Find"
|
||||
#~ msgstr "ئىزدە"
|
||||
|
||||
#~ msgid "Searching..."
|
||||
#~ msgstr "ئىزدەۋاتىدۇ..."
|
||||
|
||||
#~ msgid "No matching results."
|
||||
#~ msgstr "ماس كېلىدىغان نەتىجە يوق."
|
||||
|
||||
#~ msgid "Invisible"
|
||||
#~ msgstr "يوشۇرۇن"
|
||||
|
478
po/zh_CN.po
478
po/zh_CN.po
@ -6,19 +6,22 @@
|
||||
# Aron Xu <aronxu@gnome.org>, 2010.
|
||||
# Jessica Ban <bancage@gmail.com>, 2010.
|
||||
# YunQiang Su <wzssyqa@gmail.com>, 2010.
|
||||
# zhang ping <zhangping159@gmail.com>, 2010.
|
||||
# 指冷玉笙寒 (dhyang) <dhyang555@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-10-30 17:51+0000\n"
|
||||
"PO-Revision-Date: 2010-10-28 01:24+0800\n"
|
||||
"Last-Translator: YunQiang Su <wzssyqa@gmail.com>\n"
|
||||
"POT-Creation-Date: 2010-12-23 17:30+0000\n"
|
||||
"PO-Revision-Date: 2010-12-25 20:54+0800\n"
|
||||
"Last-Translator: Aron Xu <happyaron.xu@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: 8bit\n"
|
||||
"Language: zh_CN\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||
@ -94,10 +97,6 @@ msgid "List of desktop file IDs for favorite applications"
|
||||
msgstr "收藏夹中的应用程序的 desktop 文件 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 "
|
||||
@ -115,25 +114,25 @@ msgstr ""
|
||||
"器。当管道未被设置或者设置为空值时,默认的管道将被启用。其值当前"
|
||||
"为“videorate ! theoraenc ! oggmux”并记录为 Ogg Theora 格式。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show date in clock"
|
||||
msgstr "显示日期"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "在日历中显示星期"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||
msgid "Show time with seconds"
|
||||
msgstr "显示秒"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||
msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr "符合这些标示的应用程序将显示在收藏区中。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"The filename for recorded screencasts will be a unique filename based on the "
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
@ -142,25 +141,17 @@ msgstr ""
|
||||
"录制的屏幕录像的文件名将是根据当前时间得到的独特值,并使用这个扩展名。录制另"
|
||||
"外一个不同容器格式的录像时,它应该被更改。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
msgstr "GNOME Shell 的屏幕录像程序录制的屏幕录像的帧率,以 帧/秒 为格式。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "用于编码屏幕录像的 GStreamer 管线"
|
||||
|
||||
#: ../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 ""
|
||||
"总览中,选中的工作区的试图模式。支持的值有 \"single\"(单独) 和 \"grid\"(网"
|
||||
"格)。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
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 "
|
||||
@ -171,7 +162,7 @@ msgstr ""
|
||||
"时,此数据将保持私密,您可能因为隐私原因想要禁用此项。请注意,这么做,并不会"
|
||||
"移除已经保存的数据。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
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"
|
||||
@ -182,7 +173,7 @@ msgstr ""
|
||||
"以被 strftime() 理解的转义符获取特定的格式。请查看 strftime() 的文档获取更多"
|
||||
"信息。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
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\", "
|
||||
@ -197,11 +188,11 @@ msgstr ""
|
||||
"示时间。注意,如果设置为 \"unix\" 或 \"custom\",show_date 和 show_seconds 键"
|
||||
"将被忽略。"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
msgid "Uuids of extensions to disable"
|
||||
msgstr "要禁用的扩展的 uuid"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
msgstr "是否收集应用程序的使用情况"
|
||||
|
||||
@ -366,62 +357,46 @@ msgstr "_12 时格式"
|
||||
msgid "_24 hour format"
|
||||
msgstr "_24 小时格式"
|
||||
|
||||
#. **** Applications ****
|
||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
||||
#. Translators: Filter to display all applications
|
||||
#: ../js/ui/appDisplay.js:155
|
||||
msgid "All"
|
||||
msgstr "全部"
|
||||
|
||||
#: ../js/ui/appDisplay.js:236
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "应用程序"
|
||||
|
||||
#: ../js/ui/appDisplay.js:348
|
||||
#: ../js/ui/appDisplay.js:266
|
||||
msgid "PREFERENCES"
|
||||
msgstr "首选项"
|
||||
|
||||
#: ../js/ui/appDisplay.js:647
|
||||
#: ../js/ui/appDisplay.js:563
|
||||
msgid "New Window"
|
||||
msgstr "新窗口"
|
||||
|
||||
#: ../js/ui/appDisplay.js:651
|
||||
#: ../js/ui/appDisplay.js:567
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "从收藏夹中移除"
|
||||
|
||||
#: ../js/ui/appDisplay.js:652
|
||||
#: ../js/ui/appDisplay.js:568
|
||||
msgid "Add to Favorites"
|
||||
msgstr "添加到收藏夹"
|
||||
|
||||
#: ../js/ui/appDisplay.js:829
|
||||
msgid "Drag here to add favorites"
|
||||
msgstr "拖到这里加入收藏夹"
|
||||
|
||||
#: ../js/ui/appFavorites.js:88
|
||||
#: ../js/ui/appFavorites.js:91
|
||||
#, c-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s 已经添加到了您的收藏夹。"
|
||||
|
||||
#: ../js/ui/appFavorites.js:107
|
||||
#: ../js/ui/appFavorites.js:122
|
||||
#, c-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s 已经从您的收藏夹移除。"
|
||||
|
||||
#: ../js/ui/dash.js:142
|
||||
msgid "Find"
|
||||
msgstr "查找"
|
||||
#: ../js/ui/dash.js:27
|
||||
msgid "Remove"
|
||||
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
|
||||
#: ../js/ui/docDisplay.js:494
|
||||
msgid "RECENT ITEMS"
|
||||
msgstr "最近的项目"
|
||||
|
||||
@ -455,63 +430,71 @@ msgstr "查看源"
|
||||
msgid "Web Page"
|
||||
msgstr "网页"
|
||||
|
||||
#: ../js/ui/overview.js:160
|
||||
#: ../js/ui/overview.js:96
|
||||
msgid "Undo"
|
||||
msgstr "撤销"
|
||||
|
||||
#: ../js/ui/overview.js:158
|
||||
msgid "Windows"
|
||||
msgstr "窗口"
|
||||
|
||||
#: ../js/ui/overview.js:161
|
||||
msgid "Applications"
|
||||
msgstr "应用程序"
|
||||
|
||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||
#: ../js/ui/panel.js:469
|
||||
#: ../js/ui/panel.js:474
|
||||
#, c-format
|
||||
msgid "Quit %s"
|
||||
msgstr "退出 %s"
|
||||
|
||||
#: ../js/ui/panel.js:494
|
||||
#: ../js/ui/panel.js:499
|
||||
msgid "Preferences"
|
||||
msgstr "首选项"
|
||||
|
||||
#. Translators: This is the time format with date used
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/panel.js:580
|
||||
#: ../js/ui/panel.js:585
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%A %b %e, %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:581
|
||||
#: ../js/ui/panel.js:586
|
||||
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:585
|
||||
#: ../js/ui/panel.js:590
|
||||
msgid "%a %R:%S"
|
||||
msgstr "%A %R:%S"
|
||||
|
||||
#: ../js/ui/panel.js:586
|
||||
#: ../js/ui/panel.js:591
|
||||
msgid "%a %R"
|
||||
msgstr "%A %R"
|
||||
|
||||
#. Translators: This is a time format with date used
|
||||
#. for AM/PM.
|
||||
#: ../js/ui/panel.js:593
|
||||
#: ../js/ui/panel.js:598
|
||||
msgid "%a %b %e, %l:%M:%S %p"
|
||||
msgstr "%A %m月%d日 %p%I:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:594
|
||||
#: ../js/ui/panel.js:599
|
||||
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:598
|
||||
#: ../js/ui/panel.js:603
|
||||
msgid "%a %l:%M:%S %p"
|
||||
msgstr "%A %p%I:%M:%S"
|
||||
|
||||
#: ../js/ui/panel.js:599
|
||||
#: ../js/ui/panel.js:604
|
||||
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:744
|
||||
#: ../js/ui/panel.js:749
|
||||
msgid "Activities"
|
||||
msgstr "活动"
|
||||
|
||||
@ -528,6 +511,10 @@ msgstr "重试"
|
||||
msgid "Connect to..."
|
||||
msgstr "连接到..."
|
||||
|
||||
#: ../js/ui/placeDisplay.js:558
|
||||
msgid "PLACES & DEVICES"
|
||||
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
|
||||
@ -554,44 +541,38 @@ msgstr "可用"
|
||||
msgid "Busy"
|
||||
msgstr "忙碌"
|
||||
|
||||
#: ../js/ui/statusMenu.js:111
|
||||
msgid "Invisible"
|
||||
msgstr "隐身"
|
||||
#: ../js/ui/statusMenu.js:114
|
||||
msgid "My Account"
|
||||
msgstr "我的帐户"
|
||||
|
||||
#: ../js/ui/statusMenu.js:119
|
||||
msgid "My Account..."
|
||||
msgstr "我的帐户..."
|
||||
#: ../js/ui/statusMenu.js:118
|
||||
msgid "System Settings"
|
||||
msgstr "系统设置"
|
||||
|
||||
#: ../js/ui/statusMenu.js:123
|
||||
#, fuzzy
|
||||
#| msgid "System Preferences..."
|
||||
msgid "System Settings..."
|
||||
msgstr "系统首选项..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:130
|
||||
#: ../js/ui/statusMenu.js:125
|
||||
msgid "Lock Screen"
|
||||
msgstr "锁住屏幕"
|
||||
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
#: ../js/ui/statusMenu.js:129
|
||||
msgid "Switch User"
|
||||
msgstr "切换用户"
|
||||
|
||||
#: ../js/ui/statusMenu.js:139
|
||||
#: ../js/ui/statusMenu.js:134
|
||||
msgid "Log Out..."
|
||||
msgstr "退出..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:146
|
||||
msgid "Suspend"
|
||||
msgstr "休眠"
|
||||
#: ../js/ui/statusMenu.js:141
|
||||
msgid "Suspend..."
|
||||
msgstr "休眠..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:150
|
||||
msgid "Restart..."
|
||||
msgstr "重启..."
|
||||
|
||||
#: ../js/ui/statusMenu.js:154
|
||||
#: ../js/ui/statusMenu.js:145
|
||||
msgid "Shut Down..."
|
||||
msgstr "关机..."
|
||||
|
||||
#: ../js/ui/status/accessibility.js:82
|
||||
msgid "Zoom"
|
||||
msgstr "缩放"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:88
|
||||
msgid "Screen Reader"
|
||||
msgstr "屏幕阅读器"
|
||||
@ -628,13 +609,249 @@ msgstr "通用访问设置"
|
||||
msgid "High Contrast"
|
||||
msgstr "高对比度"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:202
|
||||
#: ../js/ui/status/accessibility.js:205
|
||||
msgid "Large Text"
|
||||
msgstr "大号文本"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:223
|
||||
msgid "Zoom"
|
||||
msgstr "缩放"
|
||||
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:234
|
||||
msgid "Bluetooth"
|
||||
msgstr "蓝牙"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:55
|
||||
msgid "Visibility"
|
||||
msgstr "可见性"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:69
|
||||
msgid "Send Files to Device..."
|
||||
msgstr "发送文件到设备..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:70
|
||||
msgid "Setup a New Device..."
|
||||
msgstr "安装新设备..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:94
|
||||
msgid "Bluetooth Settings"
|
||||
msgstr "蓝牙设置"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:185
|
||||
msgid "Connection"
|
||||
msgstr "连接"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:221
|
||||
msgid "Send Files..."
|
||||
msgstr "发送文件..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:226
|
||||
msgid "Browse Files..."
|
||||
msgstr "浏览文件..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:235
|
||||
msgid "Error browsing device"
|
||||
msgstr "浏览设备出错"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:236
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "无法浏览请求的设备,错误为 %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:244
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "键盘设置"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:249
|
||||
msgid "Mouse Settings"
|
||||
msgstr "鼠标设置"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:256 ../js/ui/status/volume.js:62
|
||||
msgid "Sound Settings"
|
||||
msgstr "声音设置"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:327 ../js/ui/status/bluetooth.js:361
|
||||
#: ../js/ui/status/bluetooth.js:401 ../js/ui/status/bluetooth.js:434
|
||||
msgid "Bluetooth Agent"
|
||||
msgstr "蓝牙助手"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:362
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "来自 %s 的认证请求"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:368
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "设备 %s 希望访问 %s 服务"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:370
|
||||
msgid "Always grant access"
|
||||
msgstr "始终允许"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:371
|
||||
msgid "Grant this time only"
|
||||
msgstr "允许一次"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
msgid "Reject"
|
||||
msgstr "拒绝"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:402
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "%s 的配对确认"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:408 ../js/ui/status/bluetooth.js:442
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "设备 %s 希望与此电脑配对"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:409
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "请确认 PIN 码 %s 和要配对的设备是否相同。"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:411
|
||||
msgid "Matches"
|
||||
msgstr "相同"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
msgid "Does not match"
|
||||
msgstr "不同"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:435
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "%s 的配对请求"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:443
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "请输入设备上的 PIN 码。"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:459
|
||||
msgid "OK"
|
||||
msgstr "确定"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:460
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
#: ../js/ui/status/power.js:85
|
||||
msgid "Power Settings"
|
||||
msgstr "电源设置"
|
||||
|
||||
#: ../js/ui/status/power.js:112
|
||||
#, c-format
|
||||
msgid "%d hour remaining"
|
||||
msgid_plural "%d hours remaining"
|
||||
msgstr[0] "剩余 %d 小时"
|
||||
|
||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||
#: ../js/ui/status/power.js:115
|
||||
#, c-format
|
||||
msgid "%d %s %d %s remaining"
|
||||
msgstr "剩余 %d %s %d %s"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
msgid "hour"
|
||||
msgid_plural "hours"
|
||||
msgstr[0] "小时"
|
||||
|
||||
#: ../js/ui/status/power.js:117
|
||||
msgid "minute"
|
||||
msgid_plural "minutes"
|
||||
msgstr[0] "分钟"
|
||||
|
||||
#: ../js/ui/status/power.js:120
|
||||
#, c-format
|
||||
msgid "%d minute remaining"
|
||||
msgid_plural "%d minutes remaining"
|
||||
msgstr[0] "剩余 %d 分钟"
|
||||
|
||||
#: ../js/ui/status/power.js:237
|
||||
msgid "AC adapter"
|
||||
msgstr "AC 适配器"
|
||||
|
||||
#: ../js/ui/status/power.js:239
|
||||
msgid "Laptop battery"
|
||||
msgstr "笔记本电池"
|
||||
|
||||
#: ../js/ui/status/power.js:241
|
||||
msgid "UPS"
|
||||
msgstr "UPS"
|
||||
|
||||
#: ../js/ui/status/power.js:243
|
||||
msgid "Monitor"
|
||||
msgstr "显示器"
|
||||
|
||||
#: ../js/ui/status/power.js:245
|
||||
msgid "Mouse"
|
||||
msgstr "鼠标"
|
||||
|
||||
#: ../js/ui/status/power.js:247
|
||||
msgid "Keyboard"
|
||||
msgstr "键盘"
|
||||
|
||||
#: ../js/ui/status/power.js:249
|
||||
msgid "PDA"
|
||||
msgstr "PDA"
|
||||
|
||||
#: ../js/ui/status/power.js:251
|
||||
msgid "Cell phone"
|
||||
msgstr "手机"
|
||||
|
||||
#: ../js/ui/status/power.js:253
|
||||
msgid "Media player"
|
||||
msgstr "媒体播放器"
|
||||
|
||||
#: ../js/ui/status/power.js:255
|
||||
msgid "Tablet"
|
||||
msgstr "触摸板"
|
||||
|
||||
#: ../js/ui/status/power.js:257
|
||||
msgid "Computer"
|
||||
msgstr "计算机"
|
||||
|
||||
#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
|
||||
msgid "Unknown"
|
||||
msgstr "未知"
|
||||
|
||||
#: ../js/ui/status/volume.js:41
|
||||
msgid "Volume"
|
||||
msgstr "音量"
|
||||
|
||||
#: ../js/ui/status/volume.js:54
|
||||
msgid "Microphone"
|
||||
msgstr "麦克风"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:560
|
||||
#, c-format
|
||||
msgid "%s is online."
|
||||
msgstr "%s 在线。"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:565
|
||||
#, c-format
|
||||
msgid "%s is offline."
|
||||
msgstr "%s 离线。"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:568
|
||||
#, c-format
|
||||
msgid "%s is away."
|
||||
msgstr "%s 离开。"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:571
|
||||
#, c-format
|
||||
msgid "%s is busy."
|
||||
msgstr "%s 忙碌。"
|
||||
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:665
|
||||
#, no-c-format
|
||||
msgid "Sent at %X on %A"
|
||||
msgstr "发送于 %X on %A"
|
||||
|
||||
#: ../js/ui/viewSelector.js:26
|
||||
msgid "Search your computer"
|
||||
msgstr "搜索您的计算机"
|
||||
|
||||
#: ../js/ui/windowAttentionHandler.js:43
|
||||
#, c-format
|
||||
@ -646,12 +863,12 @@ msgstr "%s 已启动"
|
||||
msgid "'%s' is ready"
|
||||
msgstr "%s 已就绪"
|
||||
|
||||
#: ../js/ui/workspacesView.js:229
|
||||
#: ../js/ui/workspacesView.js:244
|
||||
msgid ""
|
||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||
msgstr "无法添加新工作区,因为已经达到了工作区数量限制。"
|
||||
|
||||
#: ../js/ui/workspacesView.js:246
|
||||
#: ../js/ui/workspacesView.js:260
|
||||
msgid "Can't remove the first workspace."
|
||||
msgstr "不能移除第一个工作区。"
|
||||
|
||||
@ -661,7 +878,7 @@ msgstr "不能移除第一个工作区。"
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
msgstr[0] ""
|
||||
msgstr[0] "%u 个输出"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
@ -669,51 +886,51 @@ msgstr[0] ""
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] ""
|
||||
msgstr[0] "%u 个输入"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1402
|
||||
msgid "System Sounds"
|
||||
msgstr ""
|
||||
msgstr "系统声音"
|
||||
|
||||
#: ../src/shell-global.c:1219
|
||||
#: ../src/shell-global.c:1156
|
||||
msgid "Less than a minute ago"
|
||||
msgstr "少于一分钟前"
|
||||
|
||||
#: ../src/shell-global.c:1223
|
||||
#: ../src/shell-global.c:1160
|
||||
#, c-format
|
||||
msgid "%d minute ago"
|
||||
msgid_plural "%d minutes ago"
|
||||
msgstr[0] "%d 分钟前"
|
||||
|
||||
#: ../src/shell-global.c:1228
|
||||
#: ../src/shell-global.c:1165
|
||||
#, c-format
|
||||
msgid "%d hour ago"
|
||||
msgid_plural "%d hours ago"
|
||||
msgstr[0] "%d 小时前"
|
||||
|
||||
#: ../src/shell-global.c:1233
|
||||
#: ../src/shell-global.c:1170
|
||||
#, c-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] "%d 天前"
|
||||
|
||||
#: ../src/shell-global.c:1238
|
||||
#: ../src/shell-global.c:1175
|
||||
#, c-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] "%d 周前"
|
||||
|
||||
#: ../src/shell-uri-util.c:89
|
||||
#: ../src/shell-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
|
||||
#: ../src/shell-util.c:104
|
||||
msgid "File System"
|
||||
msgstr "文件系统"
|
||||
|
||||
#: ../src/shell-uri-util.c:250
|
||||
#: ../src/shell-util.c:250
|
||||
msgid "Search"
|
||||
msgstr "搜索"
|
||||
|
||||
@ -722,11 +939,42 @@ msgstr "搜索"
|
||||
#. * example, "Trash: some-directory". It means that the
|
||||
#. * directory called "some-directory" is in the trash.
|
||||
#.
|
||||
#: ../src/shell-uri-util.c:300
|
||||
#: ../src/shell-util.c:300
|
||||
#, c-format
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "What's using power..."
|
||||
#~ msgstr "哪些设备在用电..."
|
||||
|
||||
#~ msgid "Overview workspace view mode"
|
||||
#~ msgstr "工作区视图模式的总览"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The selected workspace view mode in the overview. Supported values are "
|
||||
#~ "\"single\" and \"grid\"."
|
||||
#~ msgstr ""
|
||||
#~ "总览中,选中的工作区的试图模式。支持的值有 \"single\"(单独) 和 \"grid\"(网"
|
||||
#~ "格)。"
|
||||
|
||||
#~ msgid "Drag here to add favorites"
|
||||
#~ msgstr "拖到这里加入收藏夹"
|
||||
|
||||
#~ msgid "Find"
|
||||
#~ msgstr "查找"
|
||||
|
||||
#~ msgid "Searching..."
|
||||
#~ msgstr "正在搜索..."
|
||||
|
||||
#~ msgid "No matching results."
|
||||
#~ msgstr "无匹配结果。"
|
||||
|
||||
#~ msgid "Invisible"
|
||||
#~ msgstr "隐身"
|
||||
|
||||
#~ msgid "Restart..."
|
||||
#~ msgstr "重启..."
|
||||
|
||||
#~ msgid "ON"
|
||||
#~ msgstr "开"
|
||||
|
||||
@ -739,9 +987,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "%H:%M"
|
||||
#~ msgstr "%H:%M"
|
||||
|
||||
#~ msgid "Applications"
|
||||
#~ msgstr "应用程序"
|
||||
|
||||
#~ msgid "Recent Documents"
|
||||
#~ msgstr "最近文档"
|
||||
|
||||
@ -757,9 +1002,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "SEARCH RESULTS"
|
||||
#~ msgstr "搜索结果"
|
||||
|
||||
#~ msgid "Unknown"
|
||||
#~ msgstr "未知"
|
||||
|
||||
#~ msgid "Can't lock screen: %s"
|
||||
#~ msgstr "不能锁住屏幕:%s"
|
||||
|
||||
|
835
po/zh_HK.po
835
po/zh_HK.po
File diff suppressed because it is too large
Load Diff
841
po/zh_TW.po
841
po/zh_TW.po
File diff suppressed because it is too large
Load Diff
@ -47,7 +47,7 @@ st-marshal.c: Makefile st/st-marshal.list
|
||||
|
||||
st-enum-types.h: stamp-st-enum-types.h Makefile
|
||||
@true
|
||||
stamp-st-enum-types.h: $(source_h) st/st-enum-types.h.in
|
||||
stamp-st-enum-types.h: $(source_h) st/st-enum-types.h.in $(st_source_h)
|
||||
$(AM_V_GEN) ( cd $(srcdir) && \
|
||||
$(GLIB_MKENUMS) \
|
||||
--template st/st-enum-types.h.in \
|
||||
@ -100,13 +100,19 @@ st_source_h = \
|
||||
st/st-widget.h \
|
||||
$(NULL)
|
||||
|
||||
st.h: Makefile
|
||||
st.h: stamp-st.h
|
||||
@true
|
||||
stamp-st.h: Makefile
|
||||
$(AM_V_GEN) (echo "#define ST_H_INSIDE 1"; \
|
||||
for name in $(st_source_h); do \
|
||||
echo "#include <"$$name">"; \
|
||||
done; echo "#undef ST_H_INSIDE") > st.h.tmp && mv st.h.tmp st.h
|
||||
done; echo "#undef ST_H_INSIDE") > $@.tmp && \
|
||||
(cmp -s $@.tmp st.h || cp $@.tmp st.h) && \
|
||||
rm -f $@.tmp && \
|
||||
echo timestamp > $(@F)
|
||||
|
||||
BUILT_SOURCES += st.h
|
||||
CLEANFILES += stamp-st.h
|
||||
|
||||
st_source_private_h = \
|
||||
st/st-private.h \
|
||||
|
@ -15,7 +15,6 @@ TRAY_STAMP_FILES = stamp-na-marshal.h
|
||||
|
||||
# please, keep this sorted alphabetically
|
||||
tray_source = \
|
||||
gtk-compat.h \
|
||||
tray/na-tray-child.c \
|
||||
tray/na-tray-child.h \
|
||||
tray/na-tray-manager.c \
|
||||
|
@ -8,13 +8,11 @@ noinst_PROGRAMS =
|
||||
|
||||
.AUTOPARALLEL:
|
||||
|
||||
bin_SCRIPTS = gnome-shell gnome-shell-clock-preferences
|
||||
bin_SCRIPTS = gnome-shell
|
||||
|
||||
gnome-shell: gnome-shell.in
|
||||
$(AM_V_GEN) sed -e "s|@MUTTER_BIN_DIR[@]|$(MUTTER_BIN_DIR)|" \
|
||||
-e "s|@datadir[@]|$(datadir)|" \
|
||||
-e "s|@GJS_JS_DIR[@]|$(GJS_JS_DIR)|" \
|
||||
-e "s|@GJS_JS_NATIVE_DIR[@]|$(GJS_JS_NATIVE_DIR)|" \
|
||||
-e "s|@libexecdir[@]|$(libexecdir)|" \
|
||||
-e "s|@libdir[@]|$(libdir)|" \
|
||||
-e "s|@pkgdatadir[@]|$(pkgdatadir)|" \
|
||||
@ -25,15 +23,6 @@ gnome-shell: gnome-shell.in
|
||||
CLEANFILES += gnome-shell
|
||||
EXTRA_DIST += gnome-shell.in
|
||||
|
||||
gnome-shell-clock-preferences: gnome-shell-clock-preferences.in
|
||||
$(AM_V_GEN) sed -e "s|@datadir[@]|$(datadir)|" \
|
||||
-e "s|@pkgdatadir[@]|$(pkgdatadir)|" \
|
||||
-e "s|@localedir[@]|$(datadir)/locale|" \
|
||||
-e "s|@GJS_CONSOLE[@]|$(GJS_CONSOLE)|" \
|
||||
$< > $@ && chmod a+x $@
|
||||
CLEANFILES += gnome-shell-clock-preferences
|
||||
EXTRA_DIST += gnome-shell-clock-preferences.in
|
||||
|
||||
include Makefile-gdmuser.am
|
||||
include Makefile-st.am
|
||||
include Makefile-tray.am
|
||||
@ -92,7 +81,6 @@ libgnome_shell_la_SOURCES = \
|
||||
shell-window-tracker-private.h \
|
||||
shell-wm-private.h \
|
||||
gnome-shell-plugin.c \
|
||||
gtk-compat.h \
|
||||
shell-app.c \
|
||||
shell-app-system.c \
|
||||
shell-app-usage.c \
|
||||
@ -220,10 +208,12 @@ libgnome_shell_la_LIBADD = \
|
||||
-lm \
|
||||
$(MUTTER_PLUGIN_LIBS) \
|
||||
$(LIBGNOMEUI_LIBS) \
|
||||
$(BLUETOOTH_LIBS) \
|
||||
libst-1.0.la \
|
||||
libgdmuser-1.0.la \
|
||||
libtray.la \
|
||||
libgvc.la
|
||||
|
||||
libgnome_shell_la_CPPFLAGS = $(gnome_shell_cflags)
|
||||
|
||||
typelibdir = $(pkglibdir)
|
||||
|
@ -1199,6 +1199,8 @@ on_list_cached_users_finished (DBusGProxy *proxy,
|
||||
return;
|
||||
}
|
||||
|
||||
maybe_set_is_loaded (manager);
|
||||
|
||||
g_ptr_array_foreach (paths, (GFunc)add_new_user_for_object_path, manager);
|
||||
|
||||
g_ptr_array_foreach (paths, (GFunc)g_free, NULL);
|
||||
|
@ -1,24 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ -f "$0.in" ]
|
||||
then
|
||||
scriptDir="`dirname $0`"
|
||||
uiDir="$scriptDir/../data"
|
||||
jsDir="$scriptDir/../js"
|
||||
schemaDir="$scriptDir/../data"
|
||||
else
|
||||
uiDir="@pkgdatadir@"
|
||||
jsDir="@pkgdatadir@/js"
|
||||
schemaDir="@datadir@/glib-2.0/schemas"
|
||||
fi
|
||||
|
||||
progName="`basename $0`"
|
||||
localeDir="@localedir@"
|
||||
uiFile="$uiDir/clock-preferences.ui"
|
||||
export GJS_PATH="$jsDir"
|
||||
export GSETTINGS_SCHEMA_DIR="$schemaDir"
|
||||
|
||||
@GJS_CONSOLE@ -c "const ClockPreferences = imports.prefs.clockPreferences;
|
||||
ClockPreferences.main({ progName: '$progName',
|
||||
uiFile: '$uiFile',
|
||||
localeDir: '$localeDir' });"
|
@ -113,6 +113,8 @@ struct _GnomeShellPlugin
|
||||
int glx_error_base;
|
||||
int glx_event_base;
|
||||
guint have_swap_event : 1;
|
||||
|
||||
ShellGlobal *global;
|
||||
};
|
||||
|
||||
struct _GnomeShellPluginClass
|
||||
@ -159,8 +161,8 @@ gnome_shell_plugin_init (GnomeShellPlugin *shell_plugin)
|
||||
"/desktop/gnome/shell/windows/attach_modal_dialogs");
|
||||
meta_prefs_override_preference_location ("/apps/metacity/general/button_layout",
|
||||
"/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/edge_tiling",
|
||||
"/desktop/gnome/shell/windows/edge_tiling");
|
||||
meta_prefs_override_preference_location ("/apps/metacity/general/theme",
|
||||
"/desktop/gnome/shell/windows/theme");
|
||||
}
|
||||
@ -320,7 +322,6 @@ gnome_shell_plugin_start (MetaPlugin *plugin)
|
||||
int status;
|
||||
const char *shell_js;
|
||||
char **search_path;
|
||||
ShellGlobal *global;
|
||||
const char *glx_extensions;
|
||||
|
||||
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
|
||||
@ -357,6 +358,10 @@ gnome_shell_plugin_start (MetaPlugin *plugin)
|
||||
"GL buffer swap complete event received (with timestamp of completion)",
|
||||
"x");
|
||||
|
||||
#if HAVE_BLUETOOTH
|
||||
g_irepository_prepend_search_path (BLUETOOTH_DIR);
|
||||
#endif
|
||||
|
||||
g_irepository_prepend_search_path (GNOME_SHELL_PKGLIBDIR);
|
||||
|
||||
shell_js = g_getenv("GNOME_SHELL_JS");
|
||||
@ -364,7 +369,10 @@ gnome_shell_plugin_start (MetaPlugin *plugin)
|
||||
shell_js = JSDIR;
|
||||
|
||||
search_path = g_strsplit(shell_js, ":", -1);
|
||||
shell_plugin->gjs_context = gjs_context_new_with_search_path(search_path);
|
||||
shell_plugin->gjs_context = g_object_new (GJS_TYPE_CONTEXT,
|
||||
"search-path", search_path,
|
||||
"js-version", "1.8",
|
||||
NULL);
|
||||
g_strfreev(search_path);
|
||||
|
||||
/* Disable the gnome-volume-control debug */
|
||||
@ -372,10 +380,10 @@ gnome_shell_plugin_start (MetaPlugin *plugin)
|
||||
gvc_muted_debug_log_handler, NULL);
|
||||
|
||||
/* Initialize the global object here. */
|
||||
global = shell_global_get ();
|
||||
shell_plugin->global = shell_global_get ();
|
||||
|
||||
_shell_global_set_plugin (global, META_PLUGIN(shell_plugin));
|
||||
_shell_global_set_gjs_context (global, shell_plugin->gjs_context);
|
||||
_shell_global_set_plugin (shell_plugin->global, META_PLUGIN(shell_plugin));
|
||||
_shell_global_set_gjs_context (shell_plugin->global, shell_plugin->gjs_context);
|
||||
|
||||
add_statistics (shell_plugin);
|
||||
|
||||
@ -504,9 +512,9 @@ static gboolean
|
||||
gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
||||
XEvent *xev)
|
||||
{
|
||||
#ifdef GLX_INTEL_swap_event
|
||||
GnomeShellPlugin *shell_plugin = GNOME_SHELL_PLUGIN (plugin);
|
||||
|
||||
GnomeShellPlugin *shell_plugin = GNOME_SHELL_PLUGIN (plugin);
|
||||
#ifdef GLX_INTEL_swap_event
|
||||
if (shell_plugin->have_swap_event &&
|
||||
xev->type == (shell_plugin->glx_event_base + GLX_BufferSwapComplete))
|
||||
{
|
||||
@ -538,6 +546,12 @@ gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
||||
&& xev->xcrossing.window == clutter_x11_get_stage_window (CLUTTER_STAGE (clutter_stage_get_default ())))
|
||||
return TRUE;
|
||||
|
||||
/*
|
||||
* Pass the event to shell-global
|
||||
*/
|
||||
if (_shell_global_check_xdnd_event (shell_plugin->global, xev))
|
||||
return TRUE;
|
||||
|
||||
return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE;
|
||||
}
|
||||
|
||||
|
@ -152,7 +152,7 @@ def start_dconf_await_service():
|
||||
# dconf is linked without libtool, so unlike other GNOME modules,
|
||||
# won't have an embedded rpath for its library directory.
|
||||
env = dict(os.environ)
|
||||
if 'LD_LIBRARY_PATH' in env:
|
||||
if 'LD_LIBRARY_PATH' in env and env['LD_LIBRARY_PATH']:
|
||||
ld_library_path = '@libdir@:' + env['LD_LIBRARY_PATH']
|
||||
else:
|
||||
ld_library_path = '@libdir@'
|
||||
@ -220,7 +220,7 @@ def start_shell(perf_output=None):
|
||||
|
||||
# Set up environment
|
||||
env = dict(os.environ)
|
||||
env.update({'GNOME_SHELL_JS' : '@GJS_JS_DIR@:@GJS_JS_NATIVE_DIR@:' + js_dir,
|
||||
env.update({'GNOME_SHELL_JS' : js_dir,
|
||||
'PATH' : '@MUTTER_BIN_DIR@:' + os.environ.get('PATH', ''),
|
||||
'XDG_CONFIG_DIRS' : '@sysconfdir@/xdg:' + (os.environ.get('XDG_CONFIG_DIRS') or '/etc/xdg'),
|
||||
'XDG_DATA_DIRS' : '@datadir@:' + (os.environ.get('XDG_DATA_DIRS') or '/usr/local/share:/usr/share'),
|
||||
@ -246,7 +246,7 @@ def start_shell(perf_output=None):
|
||||
if pkgconfig.returncode == 0:
|
||||
mozjs_libdir = re.sub('-(sdk|devel)', '', mozjs_sdkdir)
|
||||
if os.path.exists(mozjs_libdir + '/libmozjs.so'):
|
||||
if 'LD_LIBRARY_PATH' in env:
|
||||
if 'LD_LIBRARY_PATH' in env and env['LD_LIBRARY_PATH']:
|
||||
ld_library_path = env['LD_LIBRARY_PATH'] + ':' + mozjs_libdir
|
||||
else:
|
||||
ld_library_path = mozjs_libdir
|
||||
|
@ -1,19 +0,0 @@
|
||||
#ifndef __GTK_COMPAT_H__
|
||||
#define __GTK_COMPAT_H__
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
/* Provide a compatibility layer for accessor functions introduced
|
||||
* in GTK+ 2.20 which we need to build with GSEAL_ENABLE.
|
||||
* That way it is still possible to build with GTK+ 2.18 when not
|
||||
* using GSEAL_ENABLE
|
||||
*/
|
||||
|
||||
#if !GTK_CHECK_VERSION(2, 20, 0)
|
||||
|
||||
#define gtk_widget_get_realized(w) GTK_WIDGET_REALIZED (w)
|
||||
#define gtk_widget_get_mapped(w) GTK_WIDGET_MAPPED (w)
|
||||
|
||||
#endif /* GTK_CHECK_VERSION(2, 20, 0) */
|
||||
|
||||
#endif /* __GTK_COMPAT_H__ */
|
@ -6,7 +6,6 @@
|
||||
#include <clutter/x11/clutter-x11.h>
|
||||
|
||||
#include "shell-embedded-window-private.h"
|
||||
#include "gtk-compat.h"
|
||||
|
||||
/* This type is a subclass of GtkWindow that ties the window to a
|
||||
* ShellGtkEmbed; the window is reparented into the stage
|
||||
@ -106,7 +105,7 @@ shell_embedded_window_realize (GtkWidget *widget)
|
||||
* modifying the GDK hierarchy.
|
||||
*/
|
||||
XReparentWindow (GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (widget)),
|
||||
GDK_WINDOW_XWINDOW (gtk_widget_get_window (widget)),
|
||||
gdk_x11_window_get_xid (gtk_widget_get_window (widget)),
|
||||
window->priv->stage_xwindow,
|
||||
window->priv->position.x, window->priv->position.y);
|
||||
}
|
||||
|
@ -245,6 +245,34 @@ shell_generic_container_finalize (GObject *object)
|
||||
G_OBJECT_CLASS (shell_generic_container_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
/* Based on implementation from clutter-group.c */
|
||||
static gboolean
|
||||
shell_generic_container_get_paint_volume (ClutterActor *actor,
|
||||
ClutterPaintVolume *volume)
|
||||
{
|
||||
GList *l, *children;
|
||||
|
||||
children = st_container_get_children_list (ST_CONTAINER (actor));
|
||||
|
||||
CLUTTER_ACTOR_CLASS (shell_generic_container_parent_class)->get_paint_volume (actor, volume);
|
||||
|
||||
for (l = children; l != NULL; l = l->next)
|
||||
{
|
||||
ClutterActor *child = l->data;
|
||||
const ClutterPaintVolume *child_volume;
|
||||
|
||||
/* This gets the paint volume of the child transformed into the
|
||||
* group's coordinate space... */
|
||||
child_volume = clutter_actor_get_transformed_paint_volume (child, actor);
|
||||
if (!child_volume)
|
||||
return FALSE;
|
||||
|
||||
clutter_paint_volume_union (volume, child_volume);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
shell_generic_container_class_init (ShellGenericContainerClass *klass)
|
||||
{
|
||||
@ -257,6 +285,7 @@ shell_generic_container_class_init (ShellGenericContainerClass *klass)
|
||||
actor_class->get_preferred_width = shell_generic_container_get_preferred_width;
|
||||
actor_class->get_preferred_height = shell_generic_container_get_preferred_height;
|
||||
actor_class->allocate = shell_generic_container_allocate;
|
||||
actor_class->get_paint_volume = shell_generic_container_get_paint_volume;
|
||||
actor_class->paint = shell_generic_container_paint;
|
||||
actor_class->pick = shell_generic_container_pick;
|
||||
|
||||
|
@ -11,4 +11,6 @@ void _shell_global_set_plugin (ShellGlobal *global,
|
||||
void _shell_global_set_gjs_context (ShellGlobal *global,
|
||||
GjsContext *context);
|
||||
|
||||
gboolean _shell_global_check_xdnd_event (ShellGlobal *global,
|
||||
XEvent *xev);
|
||||
#endif /* __SHELL_GLOBAL_PRIVATE_H__ */
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include "shell-enum-types.h"
|
||||
#include "shell-perf-log.h"
|
||||
#include "shell-window-tracker.h"
|
||||
#include "shell-marshal.h"
|
||||
#include "shell-wm.h"
|
||||
#include "st.h"
|
||||
|
||||
@ -60,8 +61,6 @@ struct _ShellGlobal {
|
||||
const char *userdatadir;
|
||||
StFocusManager *focus_manager;
|
||||
|
||||
/* Displays the root window; see shell_global_create_root_pixmap_actor() */
|
||||
ClutterActor *root_pixmap;
|
||||
GdkWindow *stage_window;
|
||||
|
||||
gint last_change_screen_width, last_change_screen_height;
|
||||
@ -72,6 +71,8 @@ struct _ShellGlobal {
|
||||
|
||||
/* For sound notifications */
|
||||
ca_context *sound_context;
|
||||
|
||||
guint32 xdnd_timestamp;
|
||||
};
|
||||
|
||||
enum {
|
||||
@ -94,8 +95,19 @@ enum {
|
||||
PROP_FOCUS_MANAGER,
|
||||
};
|
||||
|
||||
/* Signals */
|
||||
enum
|
||||
{
|
||||
XDND_POSITION_CHANGED,
|
||||
XDND_LEAVE,
|
||||
XDND_ENTER,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE(ShellGlobal, shell_global, G_TYPE_OBJECT);
|
||||
|
||||
static guint shell_global_signals [LAST_SIGNAL] = { 0 };
|
||||
|
||||
static void
|
||||
shell_global_set_property(GObject *object,
|
||||
guint prop_id,
|
||||
@ -220,7 +232,6 @@ shell_global_init (ShellGlobal *global)
|
||||
g_signal_connect (global->grab_notifier, "grab-notify", G_CALLBACK (grab_notify), global);
|
||||
global->gtk_grab_active = FALSE;
|
||||
|
||||
global->root_pixmap = NULL;
|
||||
global->stage_window = NULL;
|
||||
|
||||
global->input_mode = SHELL_STAGE_INPUT_MODE_NORMAL;
|
||||
@ -241,6 +252,36 @@ shell_global_class_init (ShellGlobalClass *klass)
|
||||
gobject_class->get_property = shell_global_get_property;
|
||||
gobject_class->set_property = shell_global_set_property;
|
||||
|
||||
/* Emitted from gnome-shell-plugin.c during event handling */
|
||||
shell_global_signals[XDND_POSITION_CHANGED] =
|
||||
g_signal_new ("xdnd-position-changed",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
_shell_marshal_VOID__INT_INT,
|
||||
G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
|
||||
|
||||
/* Emitted from gnome-shell-plugin.c during event handling */
|
||||
shell_global_signals[XDND_LEAVE] =
|
||||
g_signal_new ("xdnd-leave",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
/* Emitted from gnome-shell-plugin.c during event handling */
|
||||
shell_global_signals[XDND_ENTER] =
|
||||
g_signal_new ("xdnd-enter",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_OVERLAY_GROUP,
|
||||
g_param_spec_object ("overlay-group",
|
||||
@ -497,6 +538,9 @@ shell_global_set_cursor (ShellGlobal *global,
|
||||
case SHELL_CURSOR_DND_UNSUPPORTED_TARGET:
|
||||
name = "dnd-none";
|
||||
break;
|
||||
case SHELL_CURSOR_POINTING_HAND:
|
||||
name = "hand";
|
||||
break;
|
||||
default:
|
||||
g_return_if_reached ();
|
||||
}
|
||||
@ -516,6 +560,8 @@ shell_global_set_cursor (ShellGlobal *global,
|
||||
case SHELL_CURSOR_DND_COPY:
|
||||
cursor_type = GDK_PLUS;
|
||||
break;
|
||||
case SHELL_CURSOR_POINTING_HAND:
|
||||
cursor_type = GDK_HAND2;
|
||||
case SHELL_CURSOR_DND_UNSUPPORTED_TARGET:
|
||||
cursor_type = GDK_X_CURSOR;
|
||||
break;
|
||||
@ -528,7 +574,8 @@ shell_global_set_cursor (ShellGlobal *global,
|
||||
{
|
||||
ClutterStage *stage = CLUTTER_STAGE (meta_plugin_get_stage (global->plugin));
|
||||
|
||||
global->stage_window = gdk_window_foreign_new (clutter_x11_get_stage_window (stage));
|
||||
global->stage_window = gdk_x11_window_foreign_new_for_display (gdk_display_get_default (),
|
||||
clutter_x11_get_stage_window (stage));
|
||||
}
|
||||
|
||||
gdk_window_set_cursor (global->stage_window, cursor);
|
||||
@ -651,11 +698,6 @@ update_screen_size (gpointer data)
|
||||
global->last_change_screen_width = width;
|
||||
global->last_change_screen_height = height;
|
||||
|
||||
/* update size of background actor to fix tiled backgrounds */
|
||||
if (global->root_pixmap)
|
||||
clutter_actor_set_size (CLUTTER_ACTOR (global->root_pixmap),
|
||||
width, height);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -1132,6 +1174,39 @@ grab_notify (GtkWidget *widget, gboolean was_grabbed, gpointer user_data)
|
||||
shell_global_set_stage_input_mode (global, global->input_mode);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_init_xdnd:
|
||||
* @global: the #ShellGlobal
|
||||
*
|
||||
* Enables tracking of Xdnd events
|
||||
*/
|
||||
void shell_global_init_xdnd (ShellGlobal *global)
|
||||
{
|
||||
long xdnd_version = 5;
|
||||
|
||||
MetaScreen *screen = shell_global_get_screen (global);
|
||||
Window output_window = meta_get_overlay_window (screen);
|
||||
|
||||
MetaDisplay *display = meta_screen_get_display (screen);
|
||||
Display *xdisplay = meta_display_get_xdisplay (display);
|
||||
|
||||
ClutterStage *stage = CLUTTER_STAGE(meta_plugin_get_stage (global->plugin));
|
||||
Window stage_win = clutter_x11_get_stage_window (stage);
|
||||
|
||||
XChangeProperty (xdisplay, stage_win, gdk_x11_get_xatom_by_name ("XdndAware"), XA_ATOM,
|
||||
32, PropModeReplace, (const unsigned char *)&xdnd_version, 1);
|
||||
|
||||
XChangeProperty (xdisplay, output_window, gdk_x11_get_xatom_by_name ("XdndProxy"), XA_WINDOW,
|
||||
32, PropModeReplace, (const unsigned char *)&stage_win, 1);
|
||||
|
||||
/*
|
||||
* XdndProxy is additionally set on the proxy window as verification that the
|
||||
* XdndProxy property on the target window isn't a left-over
|
||||
*/
|
||||
XChangeProperty (xdisplay, stage_win, gdk_x11_get_xatom_by_name ("XdndProxy"), XA_WINDOW,
|
||||
32, PropModeReplace, (const unsigned char *)&stage_win, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_global_format_time_relative_pretty:
|
||||
* @global:
|
||||
@ -1424,6 +1499,10 @@ shell_global_get_current_time (ShellGlobal *global)
|
||||
guint32 time;
|
||||
MetaDisplay *display;
|
||||
|
||||
/* In case we have a xdnd timestamp use it */
|
||||
if (global->xdnd_timestamp != 0)
|
||||
return global->xdnd_timestamp;
|
||||
|
||||
/* meta_display_get_current_time() will return the correct time
|
||||
when handling an X or Gdk event, but will return CurrentTime
|
||||
from some Clutter event callbacks.
|
||||
@ -1691,3 +1770,67 @@ shell_global_play_theme_sound (ShellGlobal *global,
|
||||
{
|
||||
ca_context_play (global->sound_context, 0, CA_PROP_EVENT_ID, name, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Process Xdnd events
|
||||
*
|
||||
* We pass the position and leave events to JS via a signal
|
||||
* where the actual drag & drop handling happens.
|
||||
*
|
||||
* http://www.freedesktop.org/wiki/Specifications/XDND
|
||||
*/
|
||||
gboolean _shell_global_check_xdnd_event (ShellGlobal *global,
|
||||
XEvent *xev)
|
||||
{
|
||||
MetaScreen *screen = meta_plugin_get_screen (global->plugin);
|
||||
Window output_window = meta_get_overlay_window (screen);
|
||||
MetaDisplay *display = meta_screen_get_display (screen);
|
||||
Display *xdisplay = meta_display_get_xdisplay (display);
|
||||
|
||||
ClutterStage *stage = CLUTTER_STAGE (meta_plugin_get_stage (global->plugin));
|
||||
Window stage_win = clutter_x11_get_stage_window (stage);
|
||||
|
||||
if (xev->xany.window != output_window && xev->xany.window != stage_win)
|
||||
return FALSE;
|
||||
|
||||
if (xev->xany.type == ClientMessage && xev->xclient.message_type == gdk_x11_get_xatom_by_name ("XdndPosition"))
|
||||
{
|
||||
XEvent xevent;
|
||||
Window src = xev->xclient.data.l[0];
|
||||
|
||||
memset (&xevent, 0, sizeof(xevent));
|
||||
xevent.xany.type = ClientMessage;
|
||||
xevent.xany.display = xdisplay;
|
||||
xevent.xclient.window = src;
|
||||
xevent.xclient.message_type = gdk_x11_get_xatom_by_name ("XdndStatus");
|
||||
xevent.xclient.format = 32;
|
||||
xevent.xclient.data.l[0] = output_window;
|
||||
/* flags: bit 0: will we accept the drop? bit 1: do we want more position messages */
|
||||
xevent.xclient.data.l[1] = 2;
|
||||
xevent.xclient.data.l[4] = None;
|
||||
|
||||
XSendEvent (xdisplay, src, False, 0, &xevent);
|
||||
|
||||
/* Store the timestamp of the xdnd position event */
|
||||
global->xdnd_timestamp = xev->xclient.data.l[3];
|
||||
g_signal_emit_by_name (G_OBJECT (global), "xdnd-position-changed",
|
||||
(int)(xev->xclient.data.l[2] >> 16), (int)(xev->xclient.data.l[2] & 0xFFFF));
|
||||
global->xdnd_timestamp = 0;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
else if (xev->xany.type == ClientMessage && xev->xclient.message_type == gdk_x11_get_xatom_by_name ("XdndLeave"))
|
||||
{
|
||||
g_signal_emit_by_name (G_OBJECT (global), "xdnd-leave");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
else if (xev->xany.type == ClientMessage && xev->xclient.message_type == gdk_x11_get_xatom_by_name ("XdndEnter"))
|
||||
{
|
||||
g_signal_emit_by_name (G_OBJECT (global), "xdnd-enter");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -38,7 +38,8 @@ typedef enum {
|
||||
SHELL_CURSOR_DND_IN_DRAG,
|
||||
SHELL_CURSOR_DND_UNSUPPORTED_TARGET,
|
||||
SHELL_CURSOR_DND_MOVE,
|
||||
SHELL_CURSOR_DND_COPY
|
||||
SHELL_CURSOR_DND_COPY,
|
||||
SHELL_CURSOR_POINTING_HAND
|
||||
} ShellCursor;
|
||||
|
||||
void shell_global_set_cursor (ShellGlobal *global,
|
||||
@ -131,6 +132,8 @@ void shell_global_run_at_leisure (ShellGlobal *global,
|
||||
void shell_global_play_theme_sound (ShellGlobal *global,
|
||||
const char *name);
|
||||
|
||||
void shell_global_init_xdnd (ShellGlobal *global);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __SHELL_GLOBAL_H__ */
|
||||
|
@ -3,7 +3,6 @@
|
||||
#include "config.h"
|
||||
|
||||
#include "shell-embedded-window-private.h"
|
||||
#include "gtk-compat.h"
|
||||
|
||||
#include <gdk/gdkx.h>
|
||||
|
||||
@ -39,7 +38,7 @@ shell_gtk_embed_on_window_realize (GtkWidget *widget,
|
||||
* screen.
|
||||
*/
|
||||
clutter_x11_texture_pixmap_set_window (CLUTTER_X11_TEXTURE_PIXMAP (embed),
|
||||
GDK_WINDOW_XWINDOW (gtk_widget_get_window (widget)),
|
||||
gdk_x11_window_get_xid (gtk_widget_get_window (widget)),
|
||||
FALSE);
|
||||
}
|
||||
|
||||
@ -167,25 +166,19 @@ shell_gtk_embed_get_preferred_height (ClutterActor *actor,
|
||||
}
|
||||
|
||||
static void
|
||||
shell_gtk_embed_paint (ClutterActor *actor)
|
||||
shell_gtk_embed_allocate (ClutterActor *actor,
|
||||
const ClutterActorBox *box,
|
||||
ClutterAllocationFlags flags)
|
||||
{
|
||||
ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
|
||||
float wx = 0.0, wy = 0.0, x, y, ax, ay;
|
||||
float w, h;
|
||||
|
||||
CLUTTER_ACTOR_CLASS (shell_gtk_embed_parent_class)->paint (actor);
|
||||
CLUTTER_ACTOR_CLASS (shell_gtk_embed_parent_class)->
|
||||
allocate (actor, box, flags);
|
||||
|
||||
if (!embed->priv->window)
|
||||
return;
|
||||
|
||||
/* Move the X window to the same position as the actor; it's much
|
||||
* easier to just do this from paint() than it is to tray to track
|
||||
* the position and allocation of @embed and each of its ancestors
|
||||
* as they change. We don't use get_transformed_position() here
|
||||
* because we know that the icon isn't scaled or rotated, and so
|
||||
* it's faster to avoid the floating-point transformations.
|
||||
/* Find the actor's new coordinates in terms of the stage (which is
|
||||
* priv->window's parent window.
|
||||
*/
|
||||
clutter_actor_get_size (actor, &w, &h);
|
||||
while (actor)
|
||||
{
|
||||
clutter_actor_get_position (actor, &x, &y);
|
||||
@ -199,7 +192,8 @@ shell_gtk_embed_paint (ClutterActor *actor)
|
||||
|
||||
_shell_embedded_window_allocate (embed->priv->window,
|
||||
(int)(0.5 + wx), (int)(0.5 + wy),
|
||||
w, h);
|
||||
box->x2 - box->x1,
|
||||
box->y2 - box->y1);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -246,7 +240,7 @@ shell_gtk_embed_class_init (ShellGtkEmbedClass *klass)
|
||||
|
||||
actor_class->get_preferred_width = shell_gtk_embed_get_preferred_width;
|
||||
actor_class->get_preferred_height = shell_gtk_embed_get_preferred_height;
|
||||
actor_class->paint = shell_gtk_embed_paint;
|
||||
actor_class->allocate = shell_gtk_embed_allocate;
|
||||
actor_class->realize = shell_gtk_embed_realize;
|
||||
actor_class->unrealize = shell_gtk_embed_unrealize;
|
||||
|
||||
|
@ -4,3 +4,4 @@ VOID:BOXED
|
||||
VOID:BOXED,OBJECT
|
||||
VOID:OBJECT,OBJECT
|
||||
VOID:STRING,OBJECT,BOOLEAN
|
||||
VOID:INT,INT
|
||||
|
@ -5,7 +5,6 @@
|
||||
#include "shell-tray-icon.h"
|
||||
#include "shell-gtk-embed.h"
|
||||
#include "shell-window-tracker.h"
|
||||
#include "gtk-compat.h"
|
||||
#include "tray/na-tray-child.h"
|
||||
#include <gdk/gdkx.h>
|
||||
#include "st.h"
|
||||
|
@ -198,6 +198,7 @@ shell_tray_manager_manage_stage (ShellTrayManager *manager,
|
||||
{
|
||||
Window stage_xwindow;
|
||||
GdkWindow *stage_window;
|
||||
GdkDisplay *display;
|
||||
GdkScreen *screen;
|
||||
|
||||
g_return_if_fail (manager->priv->stage == NULL);
|
||||
@ -212,13 +213,15 @@ shell_tray_manager_manage_stage (ShellTrayManager *manager,
|
||||
* in in some way. (The Clutter/Mutter combo is currently incapable
|
||||
* of multi-screen operation, so alternatively we could just assume
|
||||
* that clutter_x11_get_default_screen() gives us the right
|
||||
* screen.)
|
||||
* screen.) We assume, in any case, that we are using the default
|
||||
* GDK display.
|
||||
*/
|
||||
stage_window = gdk_window_lookup (stage_xwindow);
|
||||
display = gdk_display_get_default();
|
||||
stage_window = gdk_x11_window_lookup_for_display (display, stage_xwindow);
|
||||
if (stage_window)
|
||||
g_object_ref (stage_window);
|
||||
else
|
||||
stage_window = gdk_window_foreign_new (stage_xwindow);
|
||||
stage_window = gdk_x11_window_foreign_new_for_display (display, stage_xwindow);
|
||||
|
||||
screen = gdk_window_get_screen (stage_window);
|
||||
|
||||
|
@ -876,29 +876,39 @@ st_box_layout_apply_transform (ClutterActor *a,
|
||||
cogl_matrix_translate (m, (int) -x, (int) -y, 0);
|
||||
}
|
||||
|
||||
/* If we are translated, then we need to translate back before chaining
|
||||
* up or the background and borders will be drawn in the wrong place */
|
||||
static void
|
||||
get_border_paint_offsets (StBoxLayout *self,
|
||||
double *x,
|
||||
double *y)
|
||||
{
|
||||
StBoxLayoutPrivate *priv = self->priv;
|
||||
|
||||
if (priv->hadjustment)
|
||||
*x = st_adjustment_get_value (priv->hadjustment);
|
||||
else
|
||||
*x = 0;
|
||||
|
||||
if (priv->vadjustment)
|
||||
*y = st_adjustment_get_value (priv->vadjustment);
|
||||
else
|
||||
*y = 0;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
st_box_layout_paint (ClutterActor *actor)
|
||||
{
|
||||
StBoxLayoutPrivate *priv = ST_BOX_LAYOUT (actor)->priv;
|
||||
StBoxLayout *self = ST_BOX_LAYOUT (actor);
|
||||
StBoxLayoutPrivate *priv = self->priv;
|
||||
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
|
||||
GList *l, *children;
|
||||
gdouble x, y;
|
||||
ClutterActorBox allocation_box;
|
||||
ClutterActorBox content_box;
|
||||
|
||||
if (priv->hadjustment)
|
||||
x = st_adjustment_get_value (priv->hadjustment);
|
||||
else
|
||||
x = 0;
|
||||
|
||||
if (priv->vadjustment)
|
||||
y = st_adjustment_get_value (priv->vadjustment);
|
||||
else
|
||||
y = 0;
|
||||
|
||||
/* If we are translated, then we need to translate back before chaining
|
||||
* up or the background and borders will be drawn in the wrong place */
|
||||
get_border_paint_offsets (self, &x, &y);
|
||||
if (x != 0 || y != 0)
|
||||
{
|
||||
cogl_push_matrix ();
|
||||
@ -950,23 +960,15 @@ static void
|
||||
st_box_layout_pick (ClutterActor *actor,
|
||||
const ClutterColor *color)
|
||||
{
|
||||
StBoxLayoutPrivate *priv = ST_BOX_LAYOUT (actor)->priv;
|
||||
StBoxLayout *self = ST_BOX_LAYOUT (actor);
|
||||
StBoxLayoutPrivate *priv = self->priv;
|
||||
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
|
||||
GList *l, *children;
|
||||
gdouble x, y;
|
||||
ClutterActorBox allocation_box;
|
||||
ClutterActorBox content_box;
|
||||
|
||||
if (priv->hadjustment)
|
||||
x = st_adjustment_get_value (priv->hadjustment);
|
||||
else
|
||||
x = 0;
|
||||
|
||||
if (priv->vadjustment)
|
||||
y = st_adjustment_get_value (priv->vadjustment);
|
||||
else
|
||||
y = 0;
|
||||
|
||||
get_border_paint_offsets (self, &x, &y);
|
||||
if (x != 0 || y != 0)
|
||||
{
|
||||
cogl_push_matrix ();
|
||||
@ -1011,6 +1013,34 @@ st_box_layout_pick (ClutterActor *actor,
|
||||
cogl_clip_pop ();
|
||||
}
|
||||
|
||||
static gboolean
|
||||
st_box_layout_get_paint_volume (ClutterActor *actor,
|
||||
ClutterPaintVolume *volume)
|
||||
{
|
||||
StBoxLayout *self = ST_BOX_LAYOUT (actor);
|
||||
gdouble x, y;
|
||||
|
||||
CLUTTER_ACTOR_CLASS (st_box_layout_parent_class)->get_paint_volume (actor, volume);
|
||||
|
||||
/* When scrolled, st_box_layout_apply_transform() includes the scroll offset
|
||||
* and affects paint volumes. This is right for our children, but our paint volume
|
||||
* is determined by our allocation and borders and doesn't scroll, so we need
|
||||
* to reverse-compensate here, the same as we do when painting.
|
||||
*/
|
||||
get_border_paint_offsets (self, &x, &y);
|
||||
if (x != 0 || y != 0)
|
||||
{
|
||||
ClutterVertex origin;
|
||||
|
||||
clutter_paint_volume_get_origin (volume, &origin);
|
||||
origin.x += x;
|
||||
origin.y += y;
|
||||
clutter_paint_volume_set_origin (volume, &origin);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
st_box_layout_style_changed (StWidget *self)
|
||||
{
|
||||
@ -1047,6 +1077,7 @@ st_box_layout_class_init (StBoxLayoutClass *klass)
|
||||
actor_class->apply_transform = st_box_layout_apply_transform;
|
||||
|
||||
actor_class->paint = st_box_layout_paint;
|
||||
actor_class->get_paint_volume = st_box_layout_get_paint_volume;
|
||||
actor_class->pick = st_box_layout_pick;
|
||||
|
||||
widget_class->style_changed = st_box_layout_style_changed;
|
||||
@ -1182,3 +1213,14 @@ st_box_layout_insert_actor (StBoxLayout *self,
|
||||
clutter_container_add_actor((ClutterContainer*) self, actor);
|
||||
st_container_move_child (ST_CONTAINER (self), actor, pos);
|
||||
}
|
||||
|
||||
void
|
||||
st_box_layout_insert_before (StBoxLayout *self,
|
||||
ClutterActor *actor,
|
||||
ClutterActor *sibling)
|
||||
{
|
||||
g_return_if_fail (ST_IS_BOX_LAYOUT (self));
|
||||
|
||||
clutter_container_add_actor(CLUTTER_CONTAINER (self), actor);
|
||||
st_container_move_before (ST_CONTAINER (self), actor, sibling);
|
||||
}
|
||||
|
@ -90,6 +90,10 @@ void st_box_layout_insert_actor (StBoxLayout *self,
|
||||
ClutterActor *actor,
|
||||
int pos);
|
||||
|
||||
void st_box_layout_insert_before (StBoxLayout *self,
|
||||
ClutterActor *actor,
|
||||
ClutterActor *sibling);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* _ST_BOX_LAYOUT_H */
|
||||
|
@ -159,6 +159,29 @@ st_container_move_child (StContainer *container,
|
||||
clutter_actor_queue_relayout ((ClutterActor*) container);
|
||||
}
|
||||
|
||||
void
|
||||
st_container_move_before (StContainer *container,
|
||||
ClutterActor *actor,
|
||||
ClutterActor *sibling)
|
||||
{
|
||||
StContainerPrivate *priv = container->priv;
|
||||
GList *actor_item = NULL;
|
||||
GList *sibling_item = NULL;
|
||||
|
||||
actor_item = g_list_find (priv->children, actor);
|
||||
sibling_item = g_list_find (priv->children, sibling);
|
||||
|
||||
g_return_if_fail (actor_item != NULL);
|
||||
g_return_if_fail (sibling_item != NULL);
|
||||
|
||||
priv->children = g_list_delete_link (priv->children, actor_item);
|
||||
priv->children = g_list_insert_before (priv->children, sibling_item, actor);
|
||||
|
||||
st_container_update_pseudo_classes (container);
|
||||
|
||||
clutter_actor_queue_relayout (CLUTTER_ACTOR (container));
|
||||
}
|
||||
|
||||
/**
|
||||
* st_container_get_children_list:
|
||||
* @container: An #StContainer
|
||||
|
@ -62,6 +62,9 @@ GList * st_container_get_focus_chain (StContainer *container);
|
||||
void st_container_move_child (StContainer *container,
|
||||
ClutterActor *actor,
|
||||
int pos);
|
||||
void st_container_move_before (StContainer *container,
|
||||
ClutterActor *actor,
|
||||
ClutterActor *sibling);
|
||||
GList * st_container_get_children_list (StContainer *container);
|
||||
|
||||
G_END_DECLS
|
||||
|
@ -3,6 +3,7 @@
|
||||
* st-group.c: A fixed layout container based on ClutterGroup
|
||||
*
|
||||
* Copyright 2010 Florian Müllner
|
||||
* Copyright 2010 Intel Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU Lesser General Public License,
|
||||
@ -230,7 +231,33 @@ st_group_hide_all (ClutterActor *actor)
|
||||
NULL);
|
||||
}
|
||||
|
||||
/* Based on implementation from clutter-group.c */
|
||||
static gboolean
|
||||
st_group_get_paint_volume (ClutterActor *actor,
|
||||
ClutterPaintVolume *volume)
|
||||
{
|
||||
GList *l, *children;
|
||||
|
||||
children = st_container_get_children_list (ST_CONTAINER (actor));
|
||||
|
||||
CLUTTER_ACTOR_CLASS (st_group_parent_class)->get_paint_volume (actor, volume);
|
||||
|
||||
for (l = children; l != NULL; l = l->next)
|
||||
{
|
||||
ClutterActor *child = l->data;
|
||||
const ClutterPaintVolume *child_volume;
|
||||
|
||||
/* This gets the paint volume of the child transformed into the
|
||||
* group's coordinate space... */
|
||||
child_volume = clutter_actor_get_transformed_paint_volume (child, actor);
|
||||
if (!child_volume)
|
||||
return FALSE;
|
||||
|
||||
clutter_paint_volume_union (volume, child_volume);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
@ -242,6 +269,7 @@ st_group_class_init (StGroupClass *klass)
|
||||
actor_class->get_preferred_height = st_group_get_preferred_height;
|
||||
actor_class->allocate = st_group_allocate;
|
||||
actor_class->paint = st_group_paint;
|
||||
actor_class->get_paint_volume = st_group_get_paint_volume;
|
||||
actor_class->pick = st_group_pick;
|
||||
actor_class->show_all = st_group_show_all;
|
||||
actor_class->hide_all = st_group_hide_all;
|
||||
|
197
src/st/st-icon.c
197
src/st/st-icon.c
@ -49,6 +49,8 @@ G_DEFINE_TYPE (StIcon, st_icon, ST_TYPE_WIDGET)
|
||||
struct _StIconPrivate
|
||||
{
|
||||
ClutterActor *icon_texture;
|
||||
ClutterActor *pending_texture;
|
||||
guint opacity_handler_id;
|
||||
|
||||
GIcon *gicon;
|
||||
gchar *icon_name;
|
||||
@ -56,6 +58,10 @@ struct _StIconPrivate
|
||||
gint prop_icon_size; /* icon size set as property */
|
||||
gint theme_icon_size; /* icon size from theme node */
|
||||
gint icon_size; /* icon size we are using */
|
||||
|
||||
CoglHandle shadow_material;
|
||||
float shadow_width;
|
||||
float shadow_height;
|
||||
};
|
||||
|
||||
static void st_icon_update (StIcon *icon);
|
||||
@ -139,12 +145,25 @@ st_icon_dispose (GObject *gobject)
|
||||
priv->icon_texture = NULL;
|
||||
}
|
||||
|
||||
if (priv->pending_texture)
|
||||
{
|
||||
clutter_actor_destroy (priv->pending_texture);
|
||||
g_object_unref (priv->pending_texture);
|
||||
priv->pending_texture = NULL;
|
||||
}
|
||||
|
||||
if (priv->gicon)
|
||||
{
|
||||
g_object_unref (priv->gicon);
|
||||
priv->gicon = NULL;
|
||||
}
|
||||
|
||||
if (priv->shadow_material)
|
||||
{
|
||||
cogl_handle_unref (priv->shadow_material);
|
||||
priv->shadow_material = COGL_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS (st_icon_parent_class)->dispose (gobject);
|
||||
}
|
||||
|
||||
@ -227,29 +246,30 @@ st_icon_paint (ClutterActor *actor)
|
||||
CLUTTER_ACTOR_CLASS (st_icon_parent_class)->paint (actor);
|
||||
|
||||
if (priv->icon_texture)
|
||||
clutter_actor_paint (priv->icon_texture);
|
||||
}
|
||||
{
|
||||
if (priv->shadow_material)
|
||||
{
|
||||
StThemeNode *node = st_widget_get_theme_node (ST_WIDGET (actor));
|
||||
StShadow *shadow_spec = st_theme_node_get_shadow (node);
|
||||
ClutterActorBox allocation;
|
||||
float width, height;
|
||||
|
||||
static void
|
||||
st_icon_map (ClutterActor *actor)
|
||||
{
|
||||
StIconPrivate *priv = ST_ICON (actor)->priv;
|
||||
clutter_actor_get_allocation_box (priv->icon_texture, &allocation);
|
||||
clutter_actor_box_get_size (&allocation, &width, &height);
|
||||
|
||||
CLUTTER_ACTOR_CLASS (st_icon_parent_class)->map (actor);
|
||||
allocation.x1 = (width - priv->shadow_width) / 2;
|
||||
allocation.y1 = (height - priv->shadow_height) / 2;
|
||||
allocation.x2 = allocation.x1 + priv->shadow_width;
|
||||
allocation.y2 = allocation.y1 + priv->shadow_height;
|
||||
|
||||
if (priv->icon_texture)
|
||||
clutter_actor_map (priv->icon_texture);
|
||||
}
|
||||
_st_paint_shadow_with_opacity (shadow_spec,
|
||||
priv->shadow_material,
|
||||
&allocation,
|
||||
clutter_actor_get_paint_opacity (priv->icon_texture));
|
||||
}
|
||||
|
||||
static void
|
||||
st_icon_unmap (ClutterActor *actor)
|
||||
{
|
||||
StIconPrivate *priv = ST_ICON (actor)->priv;
|
||||
|
||||
CLUTTER_ACTOR_CLASS (st_icon_parent_class)->unmap (actor);
|
||||
|
||||
if (priv->icon_texture)
|
||||
clutter_actor_unmap (priv->icon_texture);
|
||||
clutter_actor_paint (priv->icon_texture);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@ -283,8 +303,6 @@ st_icon_class_init (StIconClass *klass)
|
||||
actor_class->get_preferred_width = st_icon_get_preferred_width;
|
||||
actor_class->allocate = st_icon_allocate;
|
||||
actor_class->paint = st_icon_paint;
|
||||
actor_class->map = st_icon_map;
|
||||
actor_class->unmap = st_icon_unmap;
|
||||
|
||||
widget_class->style_changed = st_icon_style_changed;
|
||||
|
||||
@ -322,10 +340,90 @@ st_icon_init (StIcon *self)
|
||||
{
|
||||
self->priv = ST_ICON_GET_PRIVATE (self);
|
||||
|
||||
self->priv->gicon = NULL;
|
||||
self->priv->icon_size = DEFAULT_ICON_SIZE;
|
||||
self->priv->prop_icon_size = -1;
|
||||
self->priv->icon_type = DEFAULT_ICON_TYPE;
|
||||
|
||||
self->priv->shadow_material = COGL_INVALID_HANDLE;
|
||||
self->priv->shadow_width = -1;
|
||||
self->priv->shadow_height = -1;
|
||||
}
|
||||
|
||||
static void
|
||||
st_icon_update_shadow_material (StIcon *icon)
|
||||
{
|
||||
StIconPrivate *priv = icon->priv;
|
||||
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (icon));
|
||||
StShadow *shadow_spec = st_theme_node_get_shadow (theme_node);
|
||||
|
||||
if (priv->shadow_material)
|
||||
{
|
||||
cogl_handle_unref (priv->shadow_material);
|
||||
priv->shadow_material = COGL_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
if (shadow_spec)
|
||||
{
|
||||
CoglHandle material;
|
||||
gint width, height;
|
||||
|
||||
clutter_texture_get_base_size (CLUTTER_TEXTURE (priv->icon_texture),
|
||||
&width, &height);
|
||||
material = _st_create_shadow_material_from_actor (shadow_spec,
|
||||
priv->icon_texture);
|
||||
priv->shadow_material = material;
|
||||
priv->shadow_width = width;
|
||||
priv->shadow_height = height;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
on_pixbuf_changed (ClutterTexture *texture,
|
||||
StIcon *icon)
|
||||
{
|
||||
st_icon_update_shadow_material (icon);
|
||||
}
|
||||
|
||||
static void
|
||||
st_icon_finish_update (StIcon *icon)
|
||||
{
|
||||
StIconPrivate *priv = icon->priv;
|
||||
|
||||
if (priv->icon_texture)
|
||||
{
|
||||
clutter_actor_destroy (priv->icon_texture);
|
||||
priv->icon_texture = NULL;
|
||||
}
|
||||
|
||||
if (priv->pending_texture)
|
||||
{
|
||||
priv->icon_texture = priv->pending_texture;
|
||||
priv->pending_texture = NULL;
|
||||
clutter_actor_set_parent (priv->icon_texture, CLUTTER_ACTOR (icon));
|
||||
|
||||
/* Remove the temporary ref we added */
|
||||
g_object_unref (priv->icon_texture);
|
||||
|
||||
st_icon_update_shadow_material (icon);
|
||||
|
||||
/* "pixbuf-change" is actually a misnomer for "texture-changed" */
|
||||
g_signal_connect (priv->icon_texture, "pixbuf-change",
|
||||
G_CALLBACK (on_pixbuf_changed), icon);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
opacity_changed_cb (GObject *object,
|
||||
GParamSpec *pspec,
|
||||
gpointer user_data)
|
||||
{
|
||||
StIcon *icon = user_data;
|
||||
StIconPrivate *priv = icon->priv;
|
||||
|
||||
g_signal_handler_disconnect (priv->pending_texture, priv->opacity_handler_id);
|
||||
priv->opacity_handler_id = 0;
|
||||
|
||||
st_icon_finish_update (icon);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -335,14 +433,14 @@ st_icon_update (StIcon *icon)
|
||||
StThemeNode *theme_node;
|
||||
StTextureCache *cache;
|
||||
|
||||
/* Get rid of the old one */
|
||||
if (priv->icon_texture)
|
||||
if (priv->pending_texture)
|
||||
{
|
||||
clutter_actor_destroy (priv->icon_texture);
|
||||
priv->icon_texture = NULL;
|
||||
clutter_actor_destroy (priv->pending_texture);
|
||||
g_object_unref (priv->pending_texture);
|
||||
priv->pending_texture = NULL;
|
||||
priv->opacity_handler_id = 0;
|
||||
}
|
||||
|
||||
/* Try to lookup the new one */
|
||||
theme_node = st_widget_peek_theme_node (ST_WIDGET (icon));
|
||||
if (theme_node == NULL)
|
||||
return;
|
||||
@ -350,23 +448,42 @@ st_icon_update (StIcon *icon)
|
||||
cache = st_texture_cache_get_default ();
|
||||
if (priv->gicon)
|
||||
{
|
||||
priv->icon_texture = st_texture_cache_load_gicon (cache,
|
||||
(priv->icon_type != ST_ICON_APPLICATION &&
|
||||
priv->icon_type != ST_ICON_DOCUMENT) ?
|
||||
theme_node : NULL,
|
||||
priv->gicon,
|
||||
priv->icon_size);
|
||||
priv->pending_texture = st_texture_cache_load_gicon (cache,
|
||||
(priv->icon_type != ST_ICON_APPLICATION &&
|
||||
priv->icon_type != ST_ICON_DOCUMENT) ?
|
||||
theme_node : NULL,
|
||||
priv->gicon,
|
||||
priv->icon_size);
|
||||
}
|
||||
else if (priv->icon_name)
|
||||
{
|
||||
priv->icon_texture = st_texture_cache_load_icon_name (cache,
|
||||
theme_node,
|
||||
priv->icon_name,
|
||||
priv->icon_type,
|
||||
priv->icon_size);
|
||||
priv->pending_texture = st_texture_cache_load_icon_name (cache,
|
||||
theme_node,
|
||||
priv->icon_name,
|
||||
priv->icon_type,
|
||||
priv->icon_size);
|
||||
}
|
||||
|
||||
if (priv->pending_texture)
|
||||
{
|
||||
g_object_ref_sink (priv->pending_texture);
|
||||
|
||||
if (clutter_actor_get_opacity (priv->pending_texture) != 0 || priv->icon_texture == NULL)
|
||||
{
|
||||
/* This icon is ready for showing, or nothing else is already showing */
|
||||
st_icon_finish_update (icon);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Will be shown when fully loaded */
|
||||
priv->opacity_handler_id = g_signal_connect (priv->pending_texture, "notify::opacity", G_CALLBACK (opacity_changed_cb), icon);
|
||||
}
|
||||
}
|
||||
else if (priv->icon_texture)
|
||||
{
|
||||
clutter_actor_destroy (priv->icon_texture);
|
||||
priv->icon_texture = NULL;
|
||||
}
|
||||
if (priv->icon_texture)
|
||||
clutter_actor_set_parent (priv->icon_texture, CLUTTER_ACTOR (icon));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@ -61,6 +61,7 @@
|
||||
#include <glib.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
#include <gdk/gdkx.h>
|
||||
#include <X11/extensions/XKB.h>
|
||||
|
||||
#include "st-im-text.h"
|
||||
@ -181,6 +182,13 @@ st_im_text_paint (ClutterActor *actor)
|
||||
update_im_cursor_location (self);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
st_im_text_get_paint_volume (ClutterActor *self,
|
||||
ClutterPaintVolume *volume)
|
||||
{
|
||||
return clutter_paint_volume_set_from_allocation (volume, self);
|
||||
}
|
||||
|
||||
/* Returns a new reference to window */
|
||||
static GdkWindow *
|
||||
window_for_actor (ClutterActor *actor)
|
||||
@ -193,11 +201,11 @@ window_for_actor (ClutterActor *actor)
|
||||
stage = clutter_actor_get_stage (actor);
|
||||
xwindow = clutter_x11_get_stage_window ((ClutterStage *)stage);
|
||||
|
||||
window = gdk_window_lookup_for_display (display, xwindow);
|
||||
window = gdk_x11_window_lookup_for_display (display, xwindow);
|
||||
if (window)
|
||||
g_object_ref (window);
|
||||
else
|
||||
window = gdk_window_foreign_new_for_display (display, xwindow);
|
||||
window = gdk_x11_window_foreign_new_for_display (display, xwindow);
|
||||
|
||||
return window;
|
||||
}
|
||||
@ -440,6 +448,7 @@ st_im_text_class_init (StIMTextClass *klass)
|
||||
object_class->dispose = st_im_text_dispose;
|
||||
|
||||
actor_class->paint = st_im_text_paint;
|
||||
actor_class->get_paint_volume = st_im_text_get_paint_volume;
|
||||
actor_class->realize = st_im_text_realize;
|
||||
actor_class->unrealize = st_im_text_unrealize;
|
||||
|
||||
|
@ -1183,9 +1183,7 @@ on_sliced_image_loaded (GObject *source_object,
|
||||
{
|
||||
ClutterActor *actor = load_from_pixbuf (GDK_PIXBUF (list->data));
|
||||
clutter_actor_hide (actor);
|
||||
|
||||
clutter_container_add_actor (CLUTTER_CONTAINER (data->group), actor);
|
||||
g_object_unref (list->data);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1198,6 +1196,17 @@ on_data_destroy (gpointer data)
|
||||
g_free (d);
|
||||
}
|
||||
|
||||
static void
|
||||
free_glist_unref_gobjects (gpointer p)
|
||||
{
|
||||
GList *list = p;
|
||||
GList *iter;
|
||||
|
||||
for (iter = list; iter; iter = iter->next)
|
||||
g_object_unref (iter->data);
|
||||
g_list_free (list);
|
||||
}
|
||||
|
||||
static void
|
||||
load_sliced_image (GSimpleAsyncResult *result,
|
||||
GObject *object,
|
||||
@ -1223,17 +1232,14 @@ load_sliced_image (GSimpleAsyncResult *result,
|
||||
for (x = 0; x < width; x += data->grid_height)
|
||||
{
|
||||
GdkPixbuf *pixbuf = gdk_pixbuf_new_subpixbuf (pix, x, y, data->grid_width, data->grid_height);
|
||||
if (!pixbuf)
|
||||
{
|
||||
g_simple_async_result_set_error (result, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
|
||||
"Has failed thumbnail");
|
||||
break;
|
||||
}
|
||||
g_assert (pixbuf != NULL);
|
||||
res = g_list_append (res, pixbuf);
|
||||
}
|
||||
}
|
||||
if (res)
|
||||
g_simple_async_result_set_op_res_gpointer (result, res, (GDestroyNotify)g_list_free);
|
||||
/* We don't need the original pixbuf anymore, though the subpixbufs
|
||||
will hold a reference. */
|
||||
g_object_unref (pix);
|
||||
g_simple_async_result_set_op_res_gpointer (result, res, free_glist_unref_gobjects);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -49,6 +49,22 @@ typedef struct {
|
||||
guint border_width_2;
|
||||
} StCornerSpec;
|
||||
|
||||
static void
|
||||
elliptical_arc (cairo_t *cr,
|
||||
double x_center,
|
||||
double y_center,
|
||||
double x_radius,
|
||||
double y_radius,
|
||||
double angle1,
|
||||
double angle2)
|
||||
{
|
||||
cairo_save (cr);
|
||||
cairo_translate (cr, x_center, y_center);
|
||||
cairo_scale (cr, x_radius, y_radius);
|
||||
cairo_arc (cr, 0, 0, 1.0, angle1, angle2);
|
||||
cairo_restore (cr);
|
||||
}
|
||||
|
||||
static CoglHandle
|
||||
create_corner_material (StCornerSpec *corner)
|
||||
{
|
||||
@ -73,13 +89,11 @@ create_corner_material (StCornerSpec *corner)
|
||||
cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
|
||||
cairo_scale (cr, size, size);
|
||||
|
||||
/* TODO support nonuniform border widths */
|
||||
|
||||
if (corner->border_width_1 < corner->radius)
|
||||
if (max_border_width <= corner->radius)
|
||||
{
|
||||
double internal_radius = 0.5 * (1.0 - (double) corner->border_width_1 / corner->radius);
|
||||
double x_radius, y_radius;
|
||||
|
||||
if (corner->border_width_1 != 0)
|
||||
if (max_border_width != 0)
|
||||
{
|
||||
cairo_set_source_rgba (cr,
|
||||
corner->border_color_1.red / 255.,
|
||||
@ -96,14 +110,41 @@ create_corner_material (StCornerSpec *corner)
|
||||
corner->color.green / 255.,
|
||||
corner->color.blue / 255.,
|
||||
corner->color.alpha / 255.);
|
||||
cairo_arc (cr, 0.5, 0.5, internal_radius, 0, 2 * M_PI);
|
||||
|
||||
x_radius = 0.5 * (1.0 - (double) corner->border_width_2 / corner->radius);
|
||||
y_radius = 0.5 * (1.0 - (double) corner->border_width_1 / corner->radius);
|
||||
|
||||
/* TOPRIGHT */
|
||||
elliptical_arc (cr,
|
||||
0.5, 0.5,
|
||||
x_radius, y_radius,
|
||||
3 * M_PI / 2, 2 * M_PI);
|
||||
|
||||
/* BOTTOMRIGHT */
|
||||
elliptical_arc (cr,
|
||||
0.5, 0.5,
|
||||
x_radius, y_radius,
|
||||
0, M_PI / 2);
|
||||
|
||||
/* TOPLEFT */
|
||||
elliptical_arc (cr,
|
||||
0.5, 0.5,
|
||||
x_radius, y_radius,
|
||||
M_PI, 3 * M_PI / 2);
|
||||
|
||||
/* BOTTOMLEFT */
|
||||
elliptical_arc (cr,
|
||||
0.5, 0.5,
|
||||
x_radius, y_radius,
|
||||
M_PI / 2, M_PI);
|
||||
|
||||
cairo_fill (cr);
|
||||
}
|
||||
else
|
||||
{
|
||||
double radius;
|
||||
|
||||
radius = (gdouble)corner->radius / corner->border_width_1;
|
||||
radius = (gdouble)corner->radius / max_border_width;
|
||||
|
||||
cairo_set_source_rgba (cr,
|
||||
corner->border_color_1.red / 255.,
|
||||
@ -216,6 +257,41 @@ over (const ClutterColor *source,
|
||||
unpremultiply (result);
|
||||
}
|
||||
|
||||
static void
|
||||
st_theme_node_get_corner_border_widths (StThemeNode *node,
|
||||
StCorner corner_id,
|
||||
guint *border_width_1,
|
||||
guint *border_width_2)
|
||||
{
|
||||
switch (corner_id)
|
||||
{
|
||||
case ST_CORNER_TOPLEFT:
|
||||
if (border_width_1)
|
||||
*border_width_1 = node->border_width[ST_SIDE_TOP];
|
||||
if (border_width_2)
|
||||
*border_width_2 = node->border_width[ST_SIDE_LEFT];
|
||||
break;
|
||||
case ST_CORNER_TOPRIGHT:
|
||||
if (border_width_1)
|
||||
*border_width_1 = node->border_width[ST_SIDE_TOP];
|
||||
if (border_width_2)
|
||||
*border_width_2 = node->border_width[ST_SIDE_RIGHT];
|
||||
break;
|
||||
case ST_CORNER_BOTTOMRIGHT:
|
||||
if (border_width_1)
|
||||
*border_width_1 = node->border_width[ST_SIDE_BOTTOM];
|
||||
if (border_width_2)
|
||||
*border_width_2 = node->border_width[ST_SIDE_RIGHT];
|
||||
break;
|
||||
case ST_CORNER_BOTTOMLEFT:
|
||||
if (border_width_1)
|
||||
*border_width_1 = node->border_width[ST_SIDE_BOTTOM];
|
||||
if (border_width_2)
|
||||
*border_width_2 = node->border_width[ST_SIDE_LEFT];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static CoglHandle
|
||||
st_theme_node_lookup_corner (StThemeNode *node,
|
||||
StCorner corner_id)
|
||||
@ -233,30 +309,25 @@ st_theme_node_lookup_corner (StThemeNode *node,
|
||||
|
||||
corner.radius = node->border_radius[corner_id];
|
||||
corner.color = node->background_color;
|
||||
st_theme_node_get_corner_border_widths (node, corner_id,
|
||||
&corner.border_width_1,
|
||||
&corner.border_width_2);
|
||||
|
||||
switch (corner_id)
|
||||
{
|
||||
case ST_CORNER_TOPLEFT:
|
||||
corner.border_width_1 = node->border_width[ST_SIDE_TOP];
|
||||
corner.border_width_2 = node->border_width[ST_SIDE_LEFT];
|
||||
over (&node->border_color[ST_SIDE_TOP], &corner.color, &corner.border_color_1);
|
||||
over (&node->border_color[ST_SIDE_LEFT], &corner.color, &corner.border_color_2);
|
||||
break;
|
||||
case ST_CORNER_TOPRIGHT:
|
||||
corner.border_width_1 = node->border_width[ST_SIDE_TOP];
|
||||
corner.border_width_2 = node->border_width[ST_SIDE_RIGHT];
|
||||
over (&node->border_color[ST_SIDE_TOP], &corner.color, &corner.border_color_1);
|
||||
over (&node->border_color[ST_SIDE_RIGHT], &corner.color, &corner.border_color_2);
|
||||
break;
|
||||
case ST_CORNER_BOTTOMRIGHT:
|
||||
corner.border_width_1 = node->border_width[ST_SIDE_BOTTOM];
|
||||
corner.border_width_2 = node->border_width[ST_SIDE_RIGHT];
|
||||
over (&node->border_color[ST_SIDE_BOTTOM], &corner.color, &corner.border_color_1);
|
||||
over (&node->border_color[ST_SIDE_RIGHT], &corner.color, &corner.border_color_2);
|
||||
break;
|
||||
case ST_CORNER_BOTTOMLEFT:
|
||||
corner.border_width_1 = node->border_width[ST_SIDE_BOTTOM];
|
||||
corner.border_width_2 = node->border_width[ST_SIDE_LEFT];
|
||||
over (&node->border_color[ST_SIDE_BOTTOM], &corner.color, &corner.border_color_1);
|
||||
over (&node->border_color[ST_SIDE_LEFT], &corner.color, &corner.border_color_2);
|
||||
break;
|
||||
@ -346,28 +417,14 @@ get_background_position (StThemeNode *self,
|
||||
}
|
||||
|
||||
/* Use of this function marks code which doesn't support
|
||||
* non-uniform widths and/or colors.
|
||||
* non-uniform colors.
|
||||
*/
|
||||
static gboolean
|
||||
get_arbitrary_border (StThemeNode *node,
|
||||
int *width,
|
||||
ClutterColor *color)
|
||||
static void
|
||||
get_arbitrary_border_color (StThemeNode *node,
|
||||
ClutterColor *color)
|
||||
{
|
||||
int w;
|
||||
|
||||
w = st_theme_node_get_border_width (node, ST_SIDE_TOP);
|
||||
if (w > 0)
|
||||
{
|
||||
if (width)
|
||||
*width = w;
|
||||
if (color)
|
||||
st_theme_node_get_border_color (node, ST_SIDE_TOP, color);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (width)
|
||||
*width = 0;
|
||||
return FALSE;
|
||||
if (color)
|
||||
st_theme_node_get_border_color (node, ST_SIDE_TOP, color);
|
||||
}
|
||||
|
||||
static CoglHandle
|
||||
@ -378,9 +435,8 @@ st_theme_node_render_gradient (StThemeNode *node)
|
||||
cairo_t *cr;
|
||||
cairo_surface_t *surface;
|
||||
cairo_pattern_t *pattern;
|
||||
gboolean round_border = FALSE;
|
||||
ClutterColor border_color;
|
||||
int border_width;
|
||||
int border_width[4];
|
||||
guint rowstride;
|
||||
guchar *data;
|
||||
|
||||
@ -393,14 +449,14 @@ st_theme_node_render_gradient (StThemeNode *node)
|
||||
rowstride);
|
||||
cr = cairo_create (surface);
|
||||
|
||||
/* TODO - support non-uniform border colors and widths */
|
||||
get_arbitrary_border (node, &border_width, &border_color);
|
||||
/* TODO - support non-uniform border colors */
|
||||
get_arbitrary_border_color (node, &border_color);
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
border_width[i] = st_theme_node_get_border_width (node, i);
|
||||
|
||||
radius[i] = st_theme_node_get_border_radius (node, i);
|
||||
if (radius[i] > 0)
|
||||
round_border = TRUE;
|
||||
}
|
||||
|
||||
if (node->background_gradient_type == ST_GRADIENT_VERTICAL)
|
||||
@ -427,43 +483,45 @@ st_theme_node_render_gradient (StThemeNode *node)
|
||||
node->background_gradient_end.blue / 255.,
|
||||
node->background_gradient_end.alpha / 255.);
|
||||
|
||||
if (round_border)
|
||||
{
|
||||
if (radius[ST_CORNER_TOPLEFT] > 0)
|
||||
cairo_arc (cr,
|
||||
radius[ST_CORNER_TOPLEFT],
|
||||
radius[ST_CORNER_TOPLEFT],
|
||||
radius[ST_CORNER_TOPLEFT], M_PI, 3 * M_PI / 2);
|
||||
else
|
||||
cairo_move_to (cr, 0, 0);
|
||||
cairo_line_to (cr, node->alloc_width - radius[ST_CORNER_TOPRIGHT], 0);
|
||||
if (radius[ST_CORNER_TOPRIGHT] > 0)
|
||||
cairo_arc (cr,
|
||||
node->alloc_width - radius[ST_CORNER_TOPRIGHT],
|
||||
radius[ST_CORNER_TOPRIGHT],
|
||||
radius[ST_CORNER_TOPRIGHT], 3 * M_PI / 2, 2 * M_PI);
|
||||
cairo_line_to (cr, node->alloc_width, node->alloc_height - radius[ST_CORNER_BOTTOMRIGHT]);
|
||||
if (radius[ST_CORNER_BOTTOMRIGHT])
|
||||
cairo_arc (cr,
|
||||
node->alloc_width - radius[ST_CORNER_BOTTOMRIGHT],
|
||||
node->alloc_height - radius[ST_CORNER_BOTTOMRIGHT],
|
||||
radius[ST_CORNER_BOTTOMRIGHT], 0, M_PI / 2);
|
||||
cairo_line_to (cr, radius[ST_CORNER_BOTTOMLEFT], node->alloc_height);
|
||||
if (radius[ST_CORNER_BOTTOMLEFT])
|
||||
cairo_arc (cr,
|
||||
radius[ST_CORNER_BOTTOMLEFT],
|
||||
node->alloc_height - radius[ST_CORNER_BOTTOMLEFT],
|
||||
radius[ST_CORNER_BOTTOMLEFT], M_PI / 2, M_PI);
|
||||
cairo_close_path (cr);
|
||||
}
|
||||
/* Create a path for the background's outline first */
|
||||
if (radius[ST_CORNER_TOPLEFT] > 0)
|
||||
cairo_arc (cr,
|
||||
radius[ST_CORNER_TOPLEFT],
|
||||
radius[ST_CORNER_TOPLEFT],
|
||||
radius[ST_CORNER_TOPLEFT], M_PI, 3 * M_PI / 2);
|
||||
else
|
||||
cairo_rectangle (cr, 0, 0, node->alloc_width, node->alloc_height);
|
||||
cairo_move_to (cr, 0, 0);
|
||||
cairo_line_to (cr, node->alloc_width - radius[ST_CORNER_TOPRIGHT], 0);
|
||||
if (radius[ST_CORNER_TOPRIGHT] > 0)
|
||||
cairo_arc (cr,
|
||||
node->alloc_width - radius[ST_CORNER_TOPRIGHT],
|
||||
radius[ST_CORNER_TOPRIGHT],
|
||||
radius[ST_CORNER_TOPRIGHT], 3 * M_PI / 2, 2 * M_PI);
|
||||
cairo_line_to (cr, node->alloc_width, node->alloc_height - radius[ST_CORNER_BOTTOMRIGHT]);
|
||||
if (radius[ST_CORNER_BOTTOMRIGHT] > 0)
|
||||
cairo_arc (cr,
|
||||
node->alloc_width - radius[ST_CORNER_BOTTOMRIGHT],
|
||||
node->alloc_height - radius[ST_CORNER_BOTTOMRIGHT],
|
||||
radius[ST_CORNER_BOTTOMRIGHT], 0, M_PI / 2);
|
||||
cairo_line_to (cr, radius[ST_CORNER_BOTTOMLEFT], node->alloc_height);
|
||||
if (radius[ST_CORNER_BOTTOMLEFT] > 0)
|
||||
cairo_arc (cr,
|
||||
radius[ST_CORNER_BOTTOMLEFT],
|
||||
node->alloc_height - radius[ST_CORNER_BOTTOMLEFT],
|
||||
radius[ST_CORNER_BOTTOMLEFT], M_PI / 2, M_PI);
|
||||
cairo_close_path (cr);
|
||||
|
||||
if (border_width > 0)
|
||||
|
||||
/* If we have a border, we fill the outline with the border
|
||||
* color and create the inline shape for the background gradient;
|
||||
* otherwise the outline shape is filled with the background
|
||||
* gradient directly
|
||||
*/
|
||||
if (border_width[ST_SIDE_TOP] > 0 ||
|
||||
border_width[ST_SIDE_RIGHT] > 0 ||
|
||||
border_width[ST_SIDE_BOTTOM] > 0 ||
|
||||
border_width[ST_SIDE_LEFT] > 0)
|
||||
{
|
||||
cairo_path_t *path;
|
||||
|
||||
path = cairo_copy_path (cr);
|
||||
cairo_set_source_rgba (cr,
|
||||
border_color.red / 255.,
|
||||
border_color.green / 255.,
|
||||
@ -471,12 +529,71 @@ st_theme_node_render_gradient (StThemeNode *node)
|
||||
border_color.alpha / 255.);
|
||||
cairo_fill (cr);
|
||||
|
||||
cairo_translate (cr, border_width, border_width);
|
||||
cairo_scale (cr,
|
||||
(gdouble)(node->alloc_width - 2 * border_width) / node->alloc_width,
|
||||
(gdouble)(node->alloc_height - 2 * border_width) / node->alloc_height);
|
||||
cairo_append_path (cr, path);
|
||||
cairo_path_destroy (path);
|
||||
if (radius[ST_CORNER_TOPLEFT] > MAX(border_width[ST_SIDE_TOP],
|
||||
border_width[ST_SIDE_LEFT]))
|
||||
elliptical_arc (cr,
|
||||
radius[ST_CORNER_TOPLEFT],
|
||||
radius[ST_CORNER_TOPLEFT],
|
||||
radius[ST_CORNER_TOPLEFT] - border_width[ST_SIDE_LEFT],
|
||||
radius[ST_CORNER_TOPLEFT] - border_width[ST_SIDE_TOP],
|
||||
M_PI, 3 * M_PI / 2);
|
||||
else
|
||||
cairo_move_to (cr,
|
||||
border_width[ST_SIDE_LEFT],
|
||||
border_width[ST_SIDE_TOP]);
|
||||
|
||||
cairo_line_to (cr,
|
||||
node->alloc_width - MAX(radius[ST_CORNER_TOPRIGHT], border_width[ST_SIDE_RIGHT]),
|
||||
border_width[ST_SIDE_TOP]);
|
||||
|
||||
if (radius[ST_CORNER_TOPRIGHT] > MAX(border_width[ST_SIDE_TOP],
|
||||
border_width[ST_SIDE_RIGHT]))
|
||||
elliptical_arc (cr,
|
||||
node->alloc_width - radius[ST_CORNER_TOPRIGHT],
|
||||
radius[ST_CORNER_TOPRIGHT],
|
||||
radius[ST_CORNER_TOPRIGHT] - border_width[ST_SIDE_RIGHT],
|
||||
radius[ST_CORNER_TOPRIGHT] - border_width[ST_SIDE_TOP],
|
||||
3 * M_PI / 2, 2 * M_PI);
|
||||
else
|
||||
cairo_line_to (cr,
|
||||
node->alloc_width - border_width[ST_SIDE_RIGHT],
|
||||
border_width[ST_SIDE_TOP]);
|
||||
|
||||
cairo_line_to (cr,
|
||||
node->alloc_width - border_width[ST_SIDE_RIGHT],
|
||||
node->alloc_height - MAX(radius[ST_CORNER_BOTTOMRIGHT], border_width[ST_SIDE_BOTTOM]));
|
||||
|
||||
if (radius[ST_CORNER_BOTTOMRIGHT] > MAX(border_width[ST_SIDE_BOTTOM],
|
||||
border_width[ST_SIDE_RIGHT]))
|
||||
elliptical_arc (cr,
|
||||
node->alloc_width - radius[ST_CORNER_BOTTOMRIGHT],
|
||||
node->alloc_height - radius[ST_CORNER_BOTTOMRIGHT],
|
||||
radius[ST_CORNER_BOTTOMRIGHT] - border_width[ST_SIDE_RIGHT],
|
||||
radius[ST_CORNER_BOTTOMRIGHT] - border_width[ST_SIDE_BOTTOM],
|
||||
0, M_PI / 2);
|
||||
else
|
||||
cairo_line_to (cr,
|
||||
node->alloc_width - border_width[ST_SIDE_RIGHT],
|
||||
node->alloc_height - border_width[ST_SIDE_BOTTOM]);
|
||||
|
||||
cairo_line_to (cr,
|
||||
MAX(radius[ST_CORNER_BOTTOMLEFT], border_width[ST_SIDE_LEFT]),
|
||||
node->alloc_height - border_width[ST_SIDE_BOTTOM]);
|
||||
|
||||
if (radius[ST_CORNER_BOTTOMLEFT] > MAX(border_width[ST_SIDE_BOTTOM],
|
||||
border_width[ST_SIDE_LEFT]))
|
||||
elliptical_arc (cr,
|
||||
radius[ST_CORNER_BOTTOMLEFT],
|
||||
node->alloc_height - radius[ST_CORNER_BOTTOMLEFT],
|
||||
radius[ST_CORNER_BOTTOMLEFT] - border_width[ST_SIDE_LEFT],
|
||||
radius[ST_CORNER_BOTTOMLEFT] - border_width[ST_SIDE_BOTTOM],
|
||||
M_PI / 2, M_PI);
|
||||
else
|
||||
cairo_line_to (cr,
|
||||
border_width[ST_SIDE_LEFT],
|
||||
node->alloc_height - border_width[ST_SIDE_BOTTOM]);
|
||||
|
||||
cairo_close_path (cr);
|
||||
}
|
||||
|
||||
cairo_set_source (cr, pattern);
|
||||
@ -676,27 +793,40 @@ st_theme_node_paint_borders (StThemeNode *node,
|
||||
|
||||
{
|
||||
float width, height;
|
||||
int border_width;
|
||||
int border_width[4];
|
||||
int max_border_radius = 0;
|
||||
int max_width_radius[4];
|
||||
int corner_id;
|
||||
int corner_id, side_id;
|
||||
ClutterColor border_color;
|
||||
guint8 alpha;
|
||||
|
||||
width = box->x2 - box->x1;
|
||||
height = box->y2 - box->y1;
|
||||
|
||||
get_arbitrary_border (node, &border_width, &border_color);
|
||||
/* TODO - support non-uniform border colors */
|
||||
get_arbitrary_border_color (node, &border_color);
|
||||
|
||||
for (side_id = 0; side_id < 4; side_id++)
|
||||
border_width[side_id] = st_theme_node_get_border_width(node, side_id);
|
||||
|
||||
for (corner_id = 0; corner_id < 4; corner_id++)
|
||||
{
|
||||
guint border_width_1, border_width_2;
|
||||
|
||||
st_theme_node_get_corner_border_widths (node, corner_id,
|
||||
&border_width_1, &border_width_2);
|
||||
|
||||
if (node->border_radius[corner_id] > max_border_radius)
|
||||
max_border_radius = node->border_radius[corner_id];
|
||||
max_width_radius[corner_id] = MAX(border_width,
|
||||
max_width_radius[corner_id] = MAX(MAX(border_width_1, border_width_2),
|
||||
node->border_radius[corner_id]);
|
||||
}
|
||||
|
||||
/* borders */
|
||||
if (border_width > 0)
|
||||
if (border_width[ST_SIDE_TOP] > 0 ||
|
||||
border_width[ST_SIDE_RIGHT] > 0 ||
|
||||
border_width[ST_SIDE_BOTTOM] > 0 ||
|
||||
border_width[ST_SIDE_LEFT] > 0)
|
||||
{
|
||||
ClutterColor effective_border;
|
||||
gboolean skip_corner_1, skip_corner_2;
|
||||
@ -719,18 +849,19 @@ st_theme_node_paint_borders (StThemeNode *node,
|
||||
x1 = skip_corner_1 ? max_width_radius[ST_CORNER_TOPLEFT] : 0;
|
||||
y1 = 0;
|
||||
x2 = skip_corner_2 ? width - max_width_radius[ST_CORNER_TOPRIGHT] : width;
|
||||
y2 = border_width;
|
||||
y2 = border_width[ST_SIDE_TOP];
|
||||
cogl_rectangle (x1, y1, x2, y2);
|
||||
|
||||
/* EAST */
|
||||
skip_corner_1 = node->border_radius[ST_CORNER_TOPRIGHT] > 0;
|
||||
skip_corner_2 = node->border_radius[ST_CORNER_BOTTOMRIGHT] > 0;
|
||||
|
||||
x1 = width - border_width;
|
||||
y1 = skip_corner_1 ? max_width_radius[ST_CORNER_TOPRIGHT] : border_width;
|
||||
x1 = width - border_width[ST_SIDE_RIGHT];
|
||||
y1 = skip_corner_1 ? max_width_radius[ST_CORNER_TOPRIGHT]
|
||||
: border_width[ST_SIDE_TOP];
|
||||
x2 = width;
|
||||
y2 = skip_corner_2 ? height - max_width_radius[ST_CORNER_BOTTOMRIGHT]
|
||||
: height - border_width;
|
||||
: height - border_width[ST_SIDE_BOTTOM];
|
||||
cogl_rectangle (x1, y1, x2, y2);
|
||||
|
||||
/* SOUTH */
|
||||
@ -738,7 +869,7 @@ st_theme_node_paint_borders (StThemeNode *node,
|
||||
skip_corner_2 = node->border_radius[ST_CORNER_BOTTOMRIGHT] > 0;
|
||||
|
||||
x1 = skip_corner_1 ? max_width_radius[ST_CORNER_BOTTOMLEFT] : 0;
|
||||
y1 = height - border_width;
|
||||
y1 = height - border_width[ST_SIDE_BOTTOM];
|
||||
x2 = skip_corner_2 ? width - max_width_radius[ST_CORNER_BOTTOMRIGHT]
|
||||
: width;
|
||||
y2 = height;
|
||||
@ -749,10 +880,11 @@ st_theme_node_paint_borders (StThemeNode *node,
|
||||
skip_corner_2 = node->border_radius[ST_CORNER_BOTTOMLEFT] > 0;
|
||||
|
||||
x1 = 0;
|
||||
y1 = skip_corner_1 ? max_width_radius[ST_CORNER_TOPLEFT] : border_width;
|
||||
x2 = border_width;
|
||||
y1 = skip_corner_1 ? max_width_radius[ST_CORNER_TOPLEFT]
|
||||
: border_width[ST_SIDE_TOP];
|
||||
x2 = border_width[ST_SIDE_LEFT];
|
||||
y2 = skip_corner_2 ? height - max_width_radius[ST_CORNER_BOTTOMLEFT]
|
||||
: height - border_width;
|
||||
: height - border_width[ST_SIDE_BOTTOM];
|
||||
cogl_rectangle (x1, y1, x2, y2);
|
||||
}
|
||||
}
|
||||
@ -823,82 +955,99 @@ st_theme_node_paint_borders (StThemeNode *node,
|
||||
switch (corner_id)
|
||||
{
|
||||
case ST_CORNER_TOPLEFT:
|
||||
verts[0] = border_width;
|
||||
verts[1] = max_width_radius[ST_CORNER_TOPLEFT];
|
||||
verts[0] = border_width[ST_SIDE_LEFT];
|
||||
verts[1] = MAX(node->border_radius[corner_id],
|
||||
border_width[ST_SIDE_TOP]);
|
||||
verts[2] = max_border_radius;
|
||||
verts[3] = max_border_radius;
|
||||
if (n_rects == 2)
|
||||
{
|
||||
verts[4] = max_width_radius[ST_CORNER_TOPLEFT];
|
||||
verts[5] = border_width;
|
||||
verts[4] = MAX(node->border_radius[corner_id],
|
||||
border_width[ST_SIDE_LEFT]);
|
||||
verts[5] = border_width[ST_SIDE_TOP];
|
||||
verts[6] = max_border_radius;
|
||||
verts[7] = max_width_radius[ST_CORNER_TOPLEFT];
|
||||
verts[7] = MAX(node->border_radius[corner_id],
|
||||
border_width[ST_SIDE_TOP]);
|
||||
}
|
||||
break;
|
||||
case ST_CORNER_TOPRIGHT:
|
||||
verts[0] = width - max_border_radius;
|
||||
verts[1] = max_width_radius[ST_CORNER_TOPRIGHT];
|
||||
verts[2] = width - border_width;
|
||||
verts[1] = MAX(node->border_radius[corner_id],
|
||||
border_width[ST_SIDE_TOP]);
|
||||
verts[2] = width - border_width[ST_SIDE_RIGHT];
|
||||
verts[3] = max_border_radius;
|
||||
if (n_rects == 2)
|
||||
{
|
||||
verts[4] = width - max_border_radius;
|
||||
verts[5] = border_width;
|
||||
verts[6] = width - max_width_radius[ST_CORNER_TOPRIGHT];
|
||||
verts[7] = max_width_radius[ST_CORNER_TOPRIGHT];
|
||||
verts[5] = border_width[ST_SIDE_TOP];
|
||||
verts[6] = width - MAX(node->border_radius[corner_id],
|
||||
border_width[ST_SIDE_RIGHT]);
|
||||
verts[7] = MAX(node->border_radius[corner_id],
|
||||
border_width[ST_SIDE_TOP]);
|
||||
}
|
||||
break;
|
||||
case ST_CORNER_BOTTOMRIGHT:
|
||||
verts[0] = width - max_border_radius;
|
||||
verts[1] = height - max_border_radius;
|
||||
verts[2] = width - border_width;
|
||||
verts[3] = height - max_width_radius[ST_CORNER_BOTTOMRIGHT];
|
||||
verts[2] = width - border_width[ST_SIDE_RIGHT];
|
||||
verts[3] = height - MAX(node->border_radius[corner_id],
|
||||
border_width[ST_SIDE_BOTTOM]);
|
||||
if (n_rects == 2)
|
||||
{
|
||||
verts[4] = width - max_border_radius;
|
||||
verts[5] = height - max_width_radius[ST_CORNER_BOTTOMRIGHT];
|
||||
verts[6] = width - max_width_radius[ST_CORNER_BOTTOMRIGHT];
|
||||
verts[7] = height - border_width;
|
||||
verts[5] = height - MAX(node->border_radius[corner_id],
|
||||
border_width[ST_SIDE_BOTTOM]);
|
||||
verts[6] = width - MAX(node->border_radius[corner_id],
|
||||
border_width[ST_SIDE_RIGHT]);
|
||||
verts[7] = height - border_width[ST_SIDE_BOTTOM];
|
||||
}
|
||||
break;
|
||||
case ST_CORNER_BOTTOMLEFT:
|
||||
verts[0] = border_width;
|
||||
verts[0] = border_width[ST_SIDE_LEFT];
|
||||
verts[1] = height - max_border_radius;
|
||||
verts[2] = max_border_radius;
|
||||
verts[3] = height - max_width_radius[ST_CORNER_BOTTOMLEFT];
|
||||
verts[3] = height - MAX(node->border_radius[corner_id],
|
||||
border_width[ST_SIDE_BOTTOM]);
|
||||
if (n_rects == 2)
|
||||
{
|
||||
verts[4] = max_width_radius[ST_CORNER_BOTTOMLEFT];
|
||||
verts[5] = height - max_width_radius[ST_CORNER_BOTTOMLEFT];
|
||||
verts[4] = MAX(node->border_radius[corner_id],
|
||||
border_width[ST_SIDE_LEFT]);
|
||||
verts[5] = height - MAX(node->border_radius[corner_id],
|
||||
border_width[ST_SIDE_BOTTOM]);
|
||||
verts[6] = max_border_radius;
|
||||
verts[7] = height - border_width;
|
||||
verts[7] = height - border_width[ST_SIDE_BOTTOM];
|
||||
}
|
||||
break;
|
||||
}
|
||||
cogl_rectangles (verts, n_rects);
|
||||
}
|
||||
|
||||
if (max_border_radius > border_width)
|
||||
{
|
||||
/* Once we've drawn the borders and corners, if the corners are bigger
|
||||
* the the border width, the remaining area is shaped like
|
||||
*
|
||||
* ########
|
||||
* ##########
|
||||
* ##########
|
||||
* ########
|
||||
*
|
||||
* We draw it in 3 pieces - first the top and bottom, then the main
|
||||
* rectangle
|
||||
*/
|
||||
cogl_rectangle (max_border_radius, border_width,
|
||||
width - max_border_radius, max_border_radius);
|
||||
cogl_rectangle (max_border_radius, height - max_border_radius,
|
||||
width - max_border_radius, height - border_width);
|
||||
}
|
||||
/* Once we've drawn the borders and corners, if the corners are bigger
|
||||
* then the border width, the remaining area is shaped like
|
||||
*
|
||||
* ########
|
||||
* ##########
|
||||
* ##########
|
||||
* ########
|
||||
*
|
||||
* We draw it in at most 3 pieces - first the top and bottom if
|
||||
* necessary, then the main rectangle
|
||||
*/
|
||||
if (max_border_radius > border_width[ST_SIDE_TOP])
|
||||
cogl_rectangle (MAX(max_border_radius, border_width[ST_SIDE_LEFT]),
|
||||
border_width[ST_SIDE_TOP],
|
||||
width - MAX(max_border_radius, border_width[ST_SIDE_RIGHT]),
|
||||
max_border_radius);
|
||||
if (max_border_radius > border_width[ST_SIDE_BOTTOM])
|
||||
cogl_rectangle (MAX(max_border_radius, border_width[ST_SIDE_LEFT]),
|
||||
height - max_border_radius,
|
||||
width - MAX(max_border_radius, border_width[ST_SIDE_RIGHT]),
|
||||
height - border_width[ST_SIDE_BOTTOM]);
|
||||
|
||||
cogl_rectangle (border_width, MAX(border_width, max_border_radius),
|
||||
width - border_width, height - MAX(border_width, max_border_radius));
|
||||
cogl_rectangle (border_width[ST_SIDE_LEFT],
|
||||
MAX(border_width[ST_SIDE_TOP], max_border_radius),
|
||||
width - border_width[ST_SIDE_RIGHT],
|
||||
height - MAX(border_width[ST_SIDE_BOTTOM], max_border_radius));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1078,8 +1227,6 @@ st_theme_node_paint (StThemeNode *node,
|
||||
* zero width or a border image is being used.
|
||||
*
|
||||
* Deviations from the above as implemented here:
|
||||
* - Nonuniform border widths combined with a non-zero border radius result
|
||||
* in the border radius being ignored
|
||||
* - The combination of border image and a non-zero border radius is
|
||||
* not supported; the background color will be drawn with square
|
||||
* corners.
|
||||
|
@ -718,7 +718,7 @@ get_length_from_term (StThemeNode *node,
|
||||
if (term->type != TERM_NUMBER)
|
||||
{
|
||||
g_warning ("Ignoring length property that isn't a number");
|
||||
return FALSE;
|
||||
return VALUE_NOT_FOUND;
|
||||
}
|
||||
|
||||
num = term->content.num;
|
||||
@ -859,7 +859,7 @@ get_length_from_term_int (StThemeNode *node,
|
||||
GetFromTermResult result;
|
||||
|
||||
result = get_length_from_term (node, term, use_parent_font, &value);
|
||||
if (result != VALUE_NOT_FOUND)
|
||||
if (result == VALUE_FOUND)
|
||||
*length = (int) (0.5 + value);
|
||||
return result;
|
||||
}
|
||||
@ -1053,7 +1053,7 @@ do_border_property (StThemeNode *node,
|
||||
StSide side = (StSide)-1;
|
||||
ClutterColor color;
|
||||
gboolean color_set = FALSE;
|
||||
int width;
|
||||
int width = 0; /* suppress warning */
|
||||
gboolean width_set = FALSE;
|
||||
int j;
|
||||
|
||||
@ -1098,7 +1098,8 @@ do_border_property (StThemeNode *node,
|
||||
const char *ident = term->content.str->stryng->str;
|
||||
if (strcmp (ident, "none") == 0 || strcmp (ident, "hidden") == 0)
|
||||
{
|
||||
width = 0.;
|
||||
width = 0;
|
||||
width_set = TRUE;
|
||||
continue;
|
||||
}
|
||||
else if (strcmp (ident, "solid") == 0)
|
||||
@ -1185,7 +1186,7 @@ do_outline_property (StThemeNode *node,
|
||||
const char *property_name = decl->property->stryng->str + 7; /* Skip 'outline' */
|
||||
ClutterColor color;
|
||||
gboolean color_set = FALSE;
|
||||
int width;
|
||||
int width = 0; /* suppress warning */
|
||||
gboolean width_set = FALSE;
|
||||
|
||||
if (strcmp (property_name, "") == 0)
|
||||
@ -1202,7 +1203,8 @@ do_outline_property (StThemeNode *node,
|
||||
const char *ident = term->content.str->stryng->str;
|
||||
if (strcmp (ident, "none") == 0 || strcmp (ident, "hidden") == 0)
|
||||
{
|
||||
width = 0.;
|
||||
width = 0;
|
||||
width_set = TRUE;
|
||||
continue;
|
||||
}
|
||||
else if (strcmp (ident, "solid") == 0)
|
||||
@ -1615,9 +1617,16 @@ _st_theme_node_ensure_background (StThemeNode *node)
|
||||
}
|
||||
else if (term->type == TERM_URI)
|
||||
{
|
||||
CRStyleSheet *base_stylesheet;
|
||||
|
||||
if (decl->parent_statement != NULL)
|
||||
base_stylesheet = decl->parent_statement->parent_sheet;
|
||||
else
|
||||
base_stylesheet = NULL;
|
||||
|
||||
node->background_image = _st_theme_resolve_url (node->theme,
|
||||
decl->parent_statement->parent_sheet,
|
||||
term->content.str->stryng->str);
|
||||
base_stylesheet,
|
||||
term->content.str->stryng->str);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1667,9 +1676,16 @@ _st_theme_node_ensure_background (StThemeNode *node)
|
||||
|
||||
if (decl->value->type == TERM_URI)
|
||||
{
|
||||
CRStyleSheet *base_stylesheet;
|
||||
|
||||
if (decl->parent_statement != NULL)
|
||||
base_stylesheet = decl->parent_statement->parent_sheet;
|
||||
else
|
||||
base_stylesheet = NULL;
|
||||
|
||||
g_free (node->background_image);
|
||||
node->background_image = _st_theme_resolve_url (node->theme,
|
||||
decl->parent_statement->parent_sheet,
|
||||
base_stylesheet,
|
||||
decl->value->content.str->stryng->str);
|
||||
}
|
||||
else if (term_is_inherit (decl->value))
|
||||
@ -2234,17 +2250,19 @@ font_variant_from_term (CRTerm *term,
|
||||
const PangoFontDescription *
|
||||
st_theme_node_get_font (StThemeNode *node)
|
||||
{
|
||||
PangoStyle font_style;
|
||||
/* Initialized despite _set flags to suppress compiler warnings */
|
||||
PangoStyle font_style = PANGO_STYLE_NORMAL;
|
||||
gboolean font_style_set = FALSE;
|
||||
PangoVariant variant;
|
||||
PangoVariant variant = PANGO_VARIANT_NORMAL;
|
||||
gboolean variant_set = FALSE;
|
||||
PangoWeight weight;
|
||||
gboolean weight_absolute;
|
||||
PangoWeight weight = PANGO_WEIGHT_NORMAL;
|
||||
gboolean weight_absolute = TRUE;
|
||||
gboolean weight_set = FALSE;
|
||||
double parent_size;
|
||||
double size = 0.; /* Suppress warning */
|
||||
double size = 0.;
|
||||
gboolean size_set = FALSE;
|
||||
|
||||
char *family = NULL;
|
||||
double parent_size;
|
||||
int i;
|
||||
|
||||
if (node->font_desc)
|
||||
@ -2451,6 +2469,7 @@ st_theme_node_get_border_image (StThemeNode *node)
|
||||
if (strcmp (decl->property->stryng->str, "border-image") == 0)
|
||||
{
|
||||
CRTerm *term = decl->value;
|
||||
CRStyleSheet *base_stylesheet;
|
||||
int borders[4];
|
||||
int n_borders = 0;
|
||||
int i;
|
||||
@ -2525,7 +2544,12 @@ st_theme_node_get_border_image (StThemeNode *node)
|
||||
break;
|
||||
}
|
||||
|
||||
filename = _st_theme_resolve_url (node->theme, decl->parent_statement->parent_sheet, url);
|
||||
if (decl->parent_statement != NULL)
|
||||
base_stylesheet = decl->parent_statement->parent_sheet;
|
||||
else
|
||||
base_stylesheet = NULL;
|
||||
|
||||
filename = _st_theme_resolve_url (node->theme, base_stylesheet, url);
|
||||
if (filename == NULL)
|
||||
goto next_property;
|
||||
|
||||
|
@ -7,6 +7,7 @@
|
||||
* Copyright 2009, 2010 Red Hat, Inc.
|
||||
* Copyright 2009 Abderrahim Kitouni
|
||||
* Copyright 2009, 2010 Florian Müllner
|
||||
* Copyright 2010 Adel Gadllah
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU Lesser General Public License,
|
||||
@ -668,6 +669,31 @@ st_widget_hide (ClutterActor *actor)
|
||||
CLUTTER_ACTOR_CLASS (st_widget_parent_class)->hide (actor);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
st_widget_get_paint_volume (ClutterActor *self, ClutterPaintVolume *volume)
|
||||
{
|
||||
ClutterActorBox paint_box, alloc_box;
|
||||
StThemeNode *theme_node;
|
||||
ClutterVertex origin;
|
||||
|
||||
/* Setting the paint volume does not make sense when we don't have any allocation */
|
||||
if (!clutter_actor_has_allocation (self))
|
||||
return FALSE;
|
||||
|
||||
theme_node = st_widget_get_theme_node (ST_WIDGET(self));
|
||||
clutter_actor_get_allocation_box (self, &alloc_box);
|
||||
st_theme_node_get_paint_box (theme_node, &alloc_box, &paint_box);
|
||||
|
||||
origin.x = paint_box.x1 - alloc_box.x1;
|
||||
origin.y = paint_box.y1 - alloc_box.y1;
|
||||
origin.z = 0.0f;
|
||||
|
||||
clutter_paint_volume_set_origin (volume, &origin);
|
||||
clutter_paint_volume_set_width (volume, paint_box.x2 - paint_box.x1);
|
||||
clutter_paint_volume_set_height (volume, paint_box.y2 - paint_box.y1);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
@ -688,6 +714,7 @@ st_widget_class_init (StWidgetClass *klass)
|
||||
actor_class->get_preferred_height = st_widget_get_preferred_height;
|
||||
actor_class->allocate = st_widget_allocate;
|
||||
actor_class->paint = st_widget_paint;
|
||||
actor_class->get_paint_volume = st_widget_get_paint_volume;
|
||||
actor_class->parent_set = st_widget_parent_set;
|
||||
actor_class->map = st_widget_map;
|
||||
actor_class->unmap = st_widget_unmap;
|
||||
|
@ -23,7 +23,6 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "na-tray-child.h"
|
||||
#include "gtk-compat.h"
|
||||
|
||||
#include <glib/gi18n-lib.h>
|
||||
#include <gdk/gdk.h>
|
||||
@ -420,7 +419,7 @@ na_tray_child_force_redraw (NaTrayChild *child)
|
||||
gtk_widget_get_allocation (widget, &allocation);
|
||||
|
||||
xev.xexpose.type = Expose;
|
||||
xev.xexpose.window = GDK_WINDOW_XWINDOW (plug_window);
|
||||
xev.xexpose.window = gdk_x11_window_get_xid (plug_window);
|
||||
xev.xexpose.x = 0;
|
||||
xev.xexpose.y = 0;
|
||||
xev.xexpose.width = allocation.width;
|
||||
|
@ -25,9 +25,7 @@
|
||||
#include <libintl.h>
|
||||
|
||||
#include "na-tray-manager.h"
|
||||
#include "gtk-compat.h"
|
||||
|
||||
#include <gdkconfig.h>
|
||||
#include <glib/gi18n-lib.h>
|
||||
#if defined (GDK_WINDOWING_X11)
|
||||
#include <gdk/gdkx.h>
|
||||
@ -601,7 +599,7 @@ na_tray_manager_set_orientation_property (NaTrayManager *manager)
|
||||
SYSTEM_TRAY_ORIENTATION_VERT;
|
||||
|
||||
XChangeProperty (GDK_DISPLAY_XDISPLAY (display),
|
||||
GDK_WINDOW_XWINDOW (window),
|
||||
gdk_x11_window_get_xid (window),
|
||||
orientation_atom,
|
||||
XA_CARDINAL, 32,
|
||||
PropModeReplace,
|
||||
@ -646,7 +644,7 @@ na_tray_manager_set_visual_property (NaTrayManager *manager)
|
||||
data[0] = XVisualIDFromVisual (xvisual);
|
||||
|
||||
XChangeProperty (GDK_DISPLAY_XDISPLAY (display),
|
||||
GDK_WINDOW_XWINDOW (window),
|
||||
gdk_x11_window_get_xid (window),
|
||||
visual_atom,
|
||||
XA_VISUALID, 32,
|
||||
PropModeReplace,
|
||||
@ -724,7 +722,7 @@ na_tray_manager_manage_screen_x11 (NaTrayManager *manager,
|
||||
xev.data.l[0] = timestamp;
|
||||
xev.data.l[1] = gdk_x11_atom_to_xatom_for_display (display,
|
||||
manager->selection_atom);
|
||||
xev.data.l[2] = GDK_WINDOW_XWINDOW (window);
|
||||
xev.data.l[2] = gdk_x11_window_get_xid (window);
|
||||
xev.data.l[3] = 0; /* manager specific data */
|
||||
xev.data.l[4] = 0; /* manager specific data */
|
||||
|
||||
|
@ -4,6 +4,7 @@ EXTRA_DIST = run-test.sh.in
|
||||
TEST_JS = \
|
||||
interactive/borders.js \
|
||||
interactive/border-radius.js \
|
||||
interactive/border-width.js \
|
||||
interactive/box-layout.js \
|
||||
interactive/calendar.js \
|
||||
interactive/css-fonts.js \
|
||||
@ -24,8 +25,6 @@ EXTRA_DIST += $(TEST_MISC)
|
||||
|
||||
run-test.sh: run-test.sh.in
|
||||
$(AM_V_GEN) sed \
|
||||
-e "s|@GJS_JS_DIR[@]|$(GJS_JS_DIR)|" \
|
||||
-e "s|@GJS_JS_NATIVE_DIR[@]|$(GJS_JS_NATIVE_DIR)|" \
|
||||
-e "s|@MUTTER_LIB_DIR[@]|$(MUTTER_LIB_DIR)|" \
|
||||
-e "s|@srcdir[@]|$(srcdir)|" \
|
||||
$< > $@ && chmod a+x $@
|
||||
|
@ -10,15 +10,18 @@ let stage = Clutter.Stage.get_default();
|
||||
stage.width = 640;
|
||||
stage.height = 480;
|
||||
|
||||
let vbox = new St.BoxLayout({ vertical: true,
|
||||
width: stage.width,
|
||||
let vbox = new St.BoxLayout({ width: stage.width,
|
||||
height: stage.height,
|
||||
style: 'padding: 10px;'
|
||||
+ 'spacing: 20px;'
|
||||
+ 'background: #ffee88;' });
|
||||
style: 'background: #ffee88;' });
|
||||
stage.add_actor(vbox);
|
||||
|
||||
let scroll = new St.ScrollView();
|
||||
scroll.add_actor(vbox);
|
||||
stage.add_actor(scroll);
|
||||
vbox.add(scroll, { expand: true });
|
||||
|
||||
let box = new St.BoxLayout({ vertical: true,
|
||||
style: 'padding: 10px;'
|
||||
+ 'spacing: 20px;' });
|
||||
scroll.add_actor(box);
|
||||
|
||||
function addTestCase(radii, useGradient) {
|
||||
let background;
|
||||
@ -29,11 +32,11 @@ function addTestCase(radii, useGradient) {
|
||||
else
|
||||
background = 'background: white;';
|
||||
|
||||
vbox.add(new St.Label({ text: "border-radius: " + radii + ";",
|
||||
style: 'border: 1px solid black; '
|
||||
+ 'border-radius: ' + radii + ';'
|
||||
+ 'padding: 5px;' + background }),
|
||||
{ x_fill: false });
|
||||
box.add(new St.Label({ text: "border-radius: " + radii + ";",
|
||||
style: 'border: 1px solid black; '
|
||||
+ 'border-radius: ' + radii + ';'
|
||||
+ 'padding: 5px;' + background }),
|
||||
{ x_fill: false });
|
||||
}
|
||||
|
||||
// uniform backgrounds
|
||||
|
60
tests/interactive/border-width.js
Normal file
60
tests/interactive/border-width.js
Normal file
@ -0,0 +1,60 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const UI = imports.testcommon.ui;
|
||||
|
||||
UI.init();
|
||||
let stage = Clutter.Stage.get_default();
|
||||
stage.width = 640;
|
||||
stage.height = 480;
|
||||
|
||||
let vbox = new St.BoxLayout({ width: stage.width,
|
||||
height: stage.height,
|
||||
style: 'padding: 10px; background: #ffee88;'
|
||||
});
|
||||
stage.add_actor(vbox);
|
||||
|
||||
let scroll = new St.ScrollView();
|
||||
vbox.add(scroll, { expand: true });
|
||||
|
||||
let box = new St.BoxLayout({ vertical: true,
|
||||
style: 'spacing: 20px;' });
|
||||
scroll.add_actor(box);
|
||||
|
||||
function addTestCase(borders, useGradient) {
|
||||
let background;
|
||||
if (useGradient)
|
||||
background = 'background-gradient-direction: vertical;'
|
||||
+ 'background-gradient-start: white;'
|
||||
+ 'background-gradient-end: gray;';
|
||||
else
|
||||
background = 'background: white;';
|
||||
|
||||
let border_style = "border-top: " + borders[St.Side.TOP] + " solid black;\n" +
|
||||
"border-right: " + borders[St.Side.RIGHT] + " solid black;\n" +
|
||||
"border-bottom: " + borders[St.Side.BOTTOM] + " solid black;\n" +
|
||||
"border-left: " + borders[St.Side.LEFT] + " solid black;";
|
||||
box.add(new St.Label({ text: border_style,
|
||||
style: border_style
|
||||
+ 'border-radius: 0px 5px 15px 25px;'
|
||||
+ 'padding: 5px;' + background }),
|
||||
{ x_fill: false });
|
||||
}
|
||||
|
||||
// uniform backgrounds
|
||||
addTestCase([" 0px", " 5px", "10px", "15px"], false);
|
||||
addTestCase([" 5px", "10px", "15px", " 0px"], false);
|
||||
addTestCase(["10px", "15px", " 0px", " 5px"], false);
|
||||
addTestCase(["15px", " 0px", " 5px", "10px"], false);
|
||||
|
||||
// gradient backgrounds
|
||||
addTestCase([" 0px", " 5px", "10px", "15px"], true);
|
||||
addTestCase([" 5px", "10px", "15px", " 0px"], true);
|
||||
addTestCase(["10px", "15px", " 0px", " 5px"], true);
|
||||
addTestCase(["15px", " 0px", " 5px", "10px"], true);
|
||||
|
||||
stage.show();
|
||||
Clutter.main();
|
||||
stage.destroy();
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user