Catch up with master
This commit is contained in:
commit
0d9095d2d4
5
.gitignore
vendored
5
.gitignore
vendored
@ -18,8 +18,6 @@ config
|
|||||||
configure
|
configure
|
||||||
data/gnome-shell.desktop
|
data/gnome-shell.desktop
|
||||||
data/gnome-shell.desktop.in
|
data/gnome-shell.desktop.in
|
||||||
data/gnome-shell-clock-preferences.desktop
|
|
||||||
data/gnome-shell-clock-preferences.desktop.in
|
|
||||||
data/gschemas.compiled
|
data/gschemas.compiled
|
||||||
data/org.gnome.shell.gschema.xml
|
data/org.gnome.shell.gschema.xml
|
||||||
data/org.gnome.shell.gschema.valid
|
data/org.gnome.shell.gschema.valid
|
||||||
@ -46,12 +44,13 @@ src/Makefile
|
|||||||
src/Makefile.in
|
src/Makefile.in
|
||||||
src/gnomeshell-taskpanel
|
src/gnomeshell-taskpanel
|
||||||
src/gnome-shell
|
src/gnome-shell
|
||||||
src/gnome-shell-clock-preferences
|
|
||||||
src/run-js-test
|
src/run-js-test
|
||||||
src/test-recorder
|
src/test-recorder
|
||||||
src/test-recorder.ogg
|
src/test-recorder.ogg
|
||||||
src/test-theme
|
src/test-theme
|
||||||
src/st.h
|
src/st.h
|
||||||
|
src/stamp-st.h
|
||||||
|
src/stamp-st.h.tmp
|
||||||
stamp-h1
|
stamp-h1
|
||||||
tests/run-test.sh
|
tests/run-test.sh
|
||||||
xmldocs.make
|
xmldocs.make
|
||||||
|
28
configure.ac
28
configure.ac
@ -1,11 +1,14 @@
|
|||||||
AC_PREREQ(2.63)
|
AC_PREREQ(2.63)
|
||||||
AC_INIT([gnome-shell],[2.91.3],[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_HEADERS([config.h])
|
||||||
AC_CONFIG_SRCDIR([src/shell-global.c])
|
AC_CONFIG_SRCDIR([src/shell-global.c])
|
||||||
AC_CONFIG_MACRO_DIR([m4])
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
AC_CONFIG_AUX_DIR([config])
|
AC_CONFIG_AUX_DIR([config])
|
||||||
|
|
||||||
|
AC_SUBST([PACKAGE_NAME], ["$PACKAGE_NAME"])
|
||||||
|
AC_SUBST([PACKAGE_VERSION], ["$PACKAGE_VERSION"])
|
||||||
|
|
||||||
AM_INIT_AUTOMAKE([1.10 dist-bzip2 no-dist-gzip foreign])
|
AM_INIT_AUTOMAKE([1.10 dist-bzip2 no-dist-gzip foreign])
|
||||||
AM_MAINTAINER_MODE
|
AM_MAINTAINER_MODE
|
||||||
|
|
||||||
@ -58,15 +61,15 @@ fi
|
|||||||
AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
|
AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
|
||||||
|
|
||||||
CLUTTER_MIN_VERSION=1.5.8
|
CLUTTER_MIN_VERSION=1.5.8
|
||||||
GOBJECT_INTROSPECTION_MIN_VERSION=0.6.11
|
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
|
||||||
GJS_MIN_VERSION=0.7
|
GJS_MIN_VERSION=0.7.8
|
||||||
MUTTER_MIN_VERSION=2.91.0
|
MUTTER_MIN_VERSION=2.91.4
|
||||||
GTK_MIN_VERSION=2.91.0
|
GTK_MIN_VERSION=2.91.7
|
||||||
GIO_MIN_VERSION=2.25.9
|
GIO_MIN_VERSION=2.25.9
|
||||||
|
|
||||||
# Collect more than 20 libraries for a prize!
|
# Collect more than 20 libraries for a prize!
|
||||||
PKG_CHECK_MODULES(MUTTER_PLUGIN, gio-2.0 >= $GIO_MIN_VERSION
|
PKG_CHECK_MODULES(MUTTER_PLUGIN, gio-2.0 >= $GIO_MIN_VERSION
|
||||||
gio-unix-2.0 dbus-glib-1
|
gio-unix-2.0 dbus-glib-1 libxml-2.0
|
||||||
gtk+-3.0 >= $GTK_MIN_VERSION
|
gtk+-3.0 >= $GTK_MIN_VERSION
|
||||||
mutter-plugins >= $MUTTER_MIN_VERSION
|
mutter-plugins >= $MUTTER_MIN_VERSION
|
||||||
gjs-internals-1.0 >= $GJS_MIN_VERSION
|
gjs-internals-1.0 >= $GJS_MIN_VERSION
|
||||||
@ -78,6 +81,10 @@ PKG_CHECK_MODULES(MUTTER_PLUGIN, gio-2.0 >= $GIO_MIN_VERSION
|
|||||||
gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_MIN_VERSION
|
gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_MIN_VERSION
|
||||||
libcanberra)
|
libcanberra)
|
||||||
|
|
||||||
|
GJS_VERSION=`$PKG_CONFIG --modversion gjs-internals-1.0`
|
||||||
|
AC_DEFINE_UNQUOTED([GJS_VERSION], ["$GJS_VERSION"], [The version of GJS we're linking to])
|
||||||
|
AC_SUBST([GJS_VERSION], ["$GJS_VERSION"])
|
||||||
|
|
||||||
saved_CFLAGS=$CFLAGS
|
saved_CFLAGS=$CFLAGS
|
||||||
saved_LIBS=$LIBS
|
saved_LIBS=$LIBS
|
||||||
CFLAGS=$MUTTER_PLUGIN_CFLAGS
|
CFLAGS=$MUTTER_PLUGIN_CFLAGS
|
||||||
@ -87,7 +94,6 @@ AC_CHECK_FUNCS(JS_NewGlobalObject sn_startup_sequence_get_application_id)
|
|||||||
CFLAGS=$saved_CFLAGS
|
CFLAGS=$saved_CFLAGS
|
||||||
LIBS=$saved_LIBS
|
LIBS=$saved_LIBS
|
||||||
|
|
||||||
PKG_CHECK_MODULES(TIDY, clutter-1.0)
|
|
||||||
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 gnome-desktop-3.0 >= 2.90.0)
|
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 gnome-desktop-3.0 >= 2.90.0)
|
||||||
PKG_CHECK_MODULES(GDMUSER, dbus-glib-1 gtk+-3.0)
|
PKG_CHECK_MODULES(GDMUSER, dbus-glib-1 gtk+-3.0)
|
||||||
PKG_CHECK_MODULES(TRAY, gtk+-3.0)
|
PKG_CHECK_MODULES(TRAY, gtk+-3.0)
|
||||||
@ -165,14 +171,6 @@ changequote([,])dnl
|
|||||||
AC_PATH_PROG(mutter, [mutter])
|
AC_PATH_PROG(mutter, [mutter])
|
||||||
AC_SUBST(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([
|
AC_CONFIG_FILES([
|
||||||
Makefile
|
Makefile
|
||||||
data/Makefile
|
data/Makefile
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
desktopdir=$(datadir)/applications
|
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
|
# We substitute in bindir so it works as an autostart
|
||||||
# file when built in a non-system prefix
|
# file when built in a non-system prefix
|
||||||
@ -12,7 +12,10 @@ desktop_DATA = gnome-shell.desktop gnome-shell-clock-preferences.desktop
|
|||||||
%.desktop:%.desktop.in
|
%.desktop:%.desktop.in
|
||||||
$(AM_V_GEN) sed s/^_// < $< > $@ || rm $@
|
$(AM_V_GEN) sed s/^_// < $< > $@ || rm $@
|
||||||
|
|
||||||
dist_pkgdata_DATA = clock-preferences.ui
|
searchprovidersdir = $(pkgdatadir)/search_providers
|
||||||
|
dist_searchproviders_DATA = \
|
||||||
|
search_providers/google.xml \
|
||||||
|
search_providers/wikipedia.xml
|
||||||
|
|
||||||
imagesdir = $(pkgdatadir)/images
|
imagesdir = $(pkgdatadir)/images
|
||||||
dist_images_DATA = \
|
dist_images_DATA = \
|
||||||
@ -88,7 +91,6 @@ install-data-local:
|
|||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
gnome-shell.desktop.in.in \
|
gnome-shell.desktop.in.in \
|
||||||
gnome-shell-clock-preferences.desktop.in.in \
|
|
||||||
$(menu_DATA) \
|
$(menu_DATA) \
|
||||||
$(gconfschema_DATA) \
|
$(gconfschema_DATA) \
|
||||||
$(shaders_DATA) \
|
$(shaders_DATA) \
|
||||||
@ -97,7 +99,6 @@ EXTRA_DIST = \
|
|||||||
|
|
||||||
CLEANFILES = \
|
CLEANFILES = \
|
||||||
gnome-shell.desktop.in \
|
gnome-shell.desktop.in \
|
||||||
gnome-shell-clock-preferences.desktop.in \
|
|
||||||
$(desktop_DATA) \
|
$(desktop_DATA) \
|
||||||
$(gsettings_SCHEMAS) \
|
$(gsettings_SCHEMAS) \
|
||||||
gschemas.compiled
|
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@
|
|
@ -30,13 +30,17 @@
|
|||||||
</_description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
<key name="favorite-apps" type="as">
|
<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>
|
<_summary>List of desktop file IDs for favorite applications</_summary>
|
||||||
<_description>
|
<_description>
|
||||||
The applications corresponding to these identifiers
|
The applications corresponding to these identifiers
|
||||||
will be displayed in the favorites area.
|
will be displayed in the favorites area.
|
||||||
</_description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
|
<key name="disabled-open-search-providers" type="as">
|
||||||
|
<default>[]</default>
|
||||||
|
<_summary>disabled OpenSearch providers</_summary>
|
||||||
|
</key>
|
||||||
<key name="command-history" type="as">
|
<key name="command-history" type="as">
|
||||||
<default>[]</default>
|
<default>[]</default>
|
||||||
<_summary>History for command (Alt-F2) dialog</_summary>
|
<_summary>History for command (Alt-F2) dialog</_summary>
|
||||||
@ -59,51 +63,18 @@
|
|||||||
|
|
||||||
<schema id="org.gnome.shell.clock" path="/apps/gnome-shell/clock/"
|
<schema id="org.gnome.shell.clock" path="/apps/gnome-shell/clock/"
|
||||||
gettext-domain="@GETTEXT_PACKAGE@">
|
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">
|
<key name="show-seconds" type="b">
|
||||||
<default>false</default>
|
<default>false</default>
|
||||||
<_summary>Show time with seconds</_summary>
|
<_summary>Show time with seconds</_summary>
|
||||||
<_description>
|
<_description>
|
||||||
If true and format is either "12-hour" or "24-hour", display seconds in time.
|
If true, display seconds in time.
|
||||||
</_description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
<key name="show-date" type="b">
|
<key name="show-date" type="b">
|
||||||
<default>false</default>
|
<default>false</default>
|
||||||
<_summary>Show date in clock</_summary>
|
<_summary>Show date in clock</_summary>
|
||||||
<_description>
|
<_description>
|
||||||
If true and format is either "12-hour" or "24-hour",
|
If true, display date in the clock, in addition to time.
|
||||||
display date in the clock, in addition to time.
|
|
||||||
</_description>
|
</_description>
|
||||||
</key>
|
</key>
|
||||||
</schema>
|
</schema>
|
||||||
|
7
data/search_providers/google.xml
Normal file
7
data/search_providers/google.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
|
||||||
|
<ShortName>Google</ShortName>
|
||||||
|
<Description>Google Search</Description>
|
||||||
|
<InputEncoding>UTF-8</InputEncoding>
|
||||||
|
<Image width="16" height="16">data:image/x-icon;base64,AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs9Pt8xetPtu9FsfFNtu%2BTzvb2%2B%2Fne4dFJeBw0egA%2FfAJAfAA8ewBBegAAAAD%2B%2FPtft98Mp%2BwWsfAVsvEbs%2FQeqvF8xO7%2F%2F%2F63yqkxdgM7gwE%2FggM%2BfQA%2BegBDeQDe7PIbotgQufcMufEPtfIPsvAbs%2FQvq%2Bfz%2Bf%2F%2B%2B%2FZKhR05hgBBhQI8hgBAgAI9ewD0%2B%2Fg3pswAtO8Cxf4Kw%2FsJvvYAqupKsNv%2B%2Fv7%2F%2FP5VkSU0iQA7jQA9hgBDgQU%2BfQH%2F%2Ff%2FQ6fM4sM4KsN8AteMCruIqqdbZ7PH8%2Fv%2Fg6Nc%2Fhg05kAA8jAM9iQI%2BhQA%2BgQDQu6b97uv%2F%2F%2F7V8Pqw3eiWz97q8%2Ff%2F%2F%2F%2F7%2FPptpkkqjQE4kwA7kAA5iwI8iAA8hQCOSSKdXjiyflbAkG7u2s%2F%2B%2F%2F39%2F%2F7r8utrqEYtjQE8lgA7kwA7kwA9jwA9igA9hACiWSekVRyeSgiYSBHx6N%2F%2B%2Fv7k7OFRmiYtlAA5lwI7lwI4lAA7kgI9jwE9iwI4iQCoVhWcTxCmb0K%2BooT8%2Fv%2F7%2F%2F%2FJ2r8fdwI1mwA3mQA3mgA8lAE8lAE4jwA9iwE%2BhwGfXifWvqz%2B%2Ff%2F58u%2Fev6Dt4tr%2B%2F%2F2ZuIUsggA7mgM6mAM3lgA5lgA6kQE%2FkwBChwHt4dv%2F%2F%2F728ei1bCi7VAC5XQ7kz7n%2F%2F%2F6bsZkgcB03lQA9lgM7kwA2iQktZToPK4r9%2F%2F%2F9%2F%2F%2FSqYK5UwDKZAS9WALIkFn%2B%2F%2F3%2F%2BP8oKccGGcIRJrERILYFEMwAAuEAAdX%2F%2Ff7%2F%2FP%2B%2BfDvGXQLIZgLEWgLOjlf7%2F%2F%2F%2F%2F%2F9QU90EAPQAAf8DAP0AAfMAAOUDAtr%2F%2F%2F%2F7%2B%2Fu2bCTIYwDPZgDBWQDSr4P%2F%2Fv%2F%2F%2FP5GRuABAPkAA%2FwBAfkDAPAAAesAAN%2F%2F%2B%2Fz%2F%2F%2F64g1C5VwDMYwK8Yg7y5tz8%2Fv%2FV1PYKDOcAAP0DAf4AAf0AAfYEAOwAAuAAAAD%2F%2FPvi28ymXyChTATRrIb8%2F%2F3v8fk6P8MAAdUCAvoAAP0CAP0AAfYAAO4AAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAA</Image>
|
||||||
|
<Url type="text/html" method="GET" template="http://www.google.com/search?q={searchTerms}"/>
|
||||||
|
</OpenSearchDescription>
|
44
data/search_providers/wikipedia.xml
Normal file
44
data/search_providers/wikipedia.xml
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
|
||||||
|
<ShortName>Wikipedia</ShortName>
|
||||||
|
<Description>Wikipedia, the free encyclopedia</Description>
|
||||||
|
<InputEncoding>UTF-8</InputEncoding>
|
||||||
|
<Image width="16" height="16">data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAEAgQAhIOEAMjHyABIR0gA6ejpAGlqaQCpqKkAKCgoAPz9%2FAAZGBkAmJiYANjZ2ABXWFcAent6ALm6uQA8OjwAiIiIiIiIiIiIiI4oiL6IiIiIgzuIV4iIiIhndo53KIiIiB%2FWvXoYiIiIfEZfWBSIiIEGi%2FfoqoiIgzuL84i9iIjpGIoMiEHoiMkos3FojmiLlUipYliEWIF%2BiDe0GoRa7D6GPbjcu1yIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</Image>
|
||||||
|
<Url type="text/html" method="GET" template="http://{language}.wikipedia.org/wiki/Special:Search?search={searchTerms}"/>
|
||||||
|
<!-- The criterion for being below is being listed with more than 100,000
|
||||||
|
articles on http://meta.wikimedia.org/wiki/List_of_Wikipedias -->
|
||||||
|
<Language>ar</Language>
|
||||||
|
<Language>bg</Language>
|
||||||
|
<Language>ca</Language>
|
||||||
|
<Language>cs</Language>
|
||||||
|
<Language>da</Language>
|
||||||
|
<Language>de</Language>
|
||||||
|
<Language>en</Language>
|
||||||
|
<Language>eo</Language>
|
||||||
|
<Language>es</Language>
|
||||||
|
<Language>fa</Language>
|
||||||
|
<Language>fi</Language>
|
||||||
|
<Language>fr</Language>
|
||||||
|
<Language>he</Language>
|
||||||
|
<Language>hu</Language>
|
||||||
|
<Language>id</Language>
|
||||||
|
<Language>it</Language>
|
||||||
|
<Language>ja</Language>
|
||||||
|
<Language>ko</Language>
|
||||||
|
<Language>lt</Language>
|
||||||
|
<Language>nl</Language>
|
||||||
|
<Language>no</Language>
|
||||||
|
<Language>pl</Language>
|
||||||
|
<Language>pt</Language>
|
||||||
|
<Language>ro</Language>
|
||||||
|
<Language>ru</Language>
|
||||||
|
<Language>sk</Language>
|
||||||
|
<Language>sl</Language>
|
||||||
|
<Language>sr</Language>
|
||||||
|
<Language>sv</Language>
|
||||||
|
<Language>tr</Language>
|
||||||
|
<Language>uk</Language>
|
||||||
|
<Language>vi</Language>
|
||||||
|
<Language>vo</Language>
|
||||||
|
<Language>war</Language>
|
||||||
|
<Language>zh</Language>
|
||||||
|
</OpenSearchDescription>
|
@ -214,7 +214,7 @@ StTooltip StLabel {
|
|||||||
transition-duration: 100;
|
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-direction: vertical;
|
||||||
background-gradient-start: #3c3c3c;
|
background-gradient-start: #3c3c3c;
|
||||||
background-gradient-end: #131313;
|
background-gradient-end: #131313;
|
||||||
@ -338,6 +338,7 @@ StTooltip StLabel {
|
|||||||
|
|
||||||
#viewSelector {
|
#viewSelector {
|
||||||
spacing: 16px;
|
spacing: 16px;
|
||||||
|
font-size: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#viewSelectorTabBar {
|
#viewSelectorTabBar {
|
||||||
@ -384,10 +385,14 @@ StTooltip StLabel {
|
|||||||
color: #888a85;
|
color: #888a85;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
padding: 0px 12px;
|
padding: 0px 12px;
|
||||||
|
height: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.view-tab-title:selected {
|
.view-tab-title:selected {
|
||||||
color: white;
|
color: #000000;
|
||||||
|
background-color: #c2c7cd;
|
||||||
|
border-radius: 4px;
|
||||||
|
height: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.view-tab-boxpointer {
|
.view-tab-boxpointer {
|
||||||
@ -436,40 +441,30 @@ StTooltip StLabel {
|
|||||||
spacing: 4px;
|
spacing: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* GenericDisplay */
|
.search-providers-box {
|
||||||
|
|
||||||
.generic-display-container {
|
|
||||||
spacing: 4px;
|
spacing: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.generic-display-item {
|
.dash-search-button {
|
||||||
height: 50px;
|
background-gradient-direction: vertical;
|
||||||
border-radius: 4px;
|
background-gradient-start: rgba(255, 255, 255, 0.2);
|
||||||
color: #ffffff;
|
background-gradient-end: rgba(255, 255, 255, 0);
|
||||||
font-size: 14px;
|
/* border: 1px solid #808080;*/
|
||||||
spacing: 4px;
|
border-radius: 10px;
|
||||||
|
height: 32px;
|
||||||
|
width: 300px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.generic-display-item:selected {
|
.dash-search-button:selected,
|
||||||
background-color: rgba(79,111,173,0.66);
|
.dash-search-button:hover {
|
||||||
|
background-gradient-direction: vertical;
|
||||||
|
background-gradient-start: rgba(255, 255, 255, 0.4);
|
||||||
|
background-gradient-end: rgba(255, 255, 255, 0.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
.generic-display-item-text {
|
.dash-search-button-label {
|
||||||
spacing: 4px;
|
color: #cccccc;
|
||||||
}
|
font: 16px sans-serif;
|
||||||
|
|
||||||
.generic-display-item-description {
|
|
||||||
font-size: 12px;
|
|
||||||
color: #bababa;
|
|
||||||
}
|
|
||||||
|
|
||||||
.generic-display-details {
|
|
||||||
font-size: 14px;
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.generic-display-details-name {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Apps */
|
/* Apps */
|
||||||
@ -549,57 +544,6 @@ StTooltip StLabel {
|
|||||||
font-size: 12px
|
font-size: 12px
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Places */
|
|
||||||
|
|
||||||
.places-section {
|
|
||||||
spacing-columns: 4px;
|
|
||||||
spacing-rows: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.places-item-box {
|
|
||||||
spacing: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.places-item {
|
|
||||||
border-radius: 4px;
|
|
||||||
padding: 2px;
|
|
||||||
border: 1px solid #181818;
|
|
||||||
padding-left: 4px;
|
|
||||||
padding-right: 4px;
|
|
||||||
transition-duration: 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
.places-item:hover {
|
|
||||||
border: 1px solid #666666;
|
|
||||||
background-gradient-direction: vertical;
|
|
||||||
background-gradient-start: rgba(61,61,61,0.8);
|
|
||||||
background-gradient-end: rgba(24,24,24,0.2);
|
|
||||||
transition-duration: 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Recent items */
|
|
||||||
|
|
||||||
.recent-docs-item-box {
|
|
||||||
spacing: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.recent-docs-item {
|
|
||||||
border-radius: 4px;
|
|
||||||
padding: 2px;
|
|
||||||
border: 1px solid #181818;
|
|
||||||
padding-left: 4px;
|
|
||||||
padding-right: 4px;
|
|
||||||
transition-duration: 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
.recent-docs-item:hover {
|
|
||||||
border: 1px solid #666666;
|
|
||||||
background-gradient-direction: vertical;
|
|
||||||
background-gradient-start: rgba(61,61,61,0.8);
|
|
||||||
background-gradient-end: rgba(24,24,24,0.2);
|
|
||||||
transition-duration: 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* LookingGlass */
|
/* LookingGlass */
|
||||||
|
|
||||||
#LookingGlassDialog
|
#LookingGlassDialog
|
||||||
@ -1142,6 +1086,15 @@ StTooltip StLabel {
|
|||||||
border-radius: 8px;
|
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 {
|
.switcher-list .thumbnail-box {
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
spacing: 4px;
|
spacing: 4px;
|
||||||
@ -1151,18 +1104,6 @@ StTooltip StLabel {
|
|||||||
width: 256px;
|
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 {
|
.switcher-list .separator {
|
||||||
width: 1px;
|
width: 1px;
|
||||||
background: rgba(255,255,255,0.33);
|
background: rgba(255,255,255,0.33);
|
||||||
@ -1227,6 +1168,54 @@ StTooltip StLabel {
|
|||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Modal Dialogs */
|
||||||
|
.modal-dialog {
|
||||||
|
font: 12pt sans-serif;
|
||||||
|
border-radius: 24px;
|
||||||
|
background-color: rgba(0.0, 0.0, 0.0, 0.9);
|
||||||
|
border: 2px solid #868686;
|
||||||
|
color: #ffffff;
|
||||||
|
|
||||||
|
padding-right: 42px;
|
||||||
|
padding-left: 42px;
|
||||||
|
padding-bottom: 30px;
|
||||||
|
padding-top: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-dialog-button {
|
||||||
|
border: 1px solid #8b8b8b;
|
||||||
|
border-radius: 18px;
|
||||||
|
font: 14px sans-serif;
|
||||||
|
|
||||||
|
margin-left: 10px;
|
||||||
|
margin-right: 10px;
|
||||||
|
|
||||||
|
padding-left: 32px;
|
||||||
|
padding-right: 32px;
|
||||||
|
padding-top: 8px;
|
||||||
|
padding-bottom: 8px;
|
||||||
|
|
||||||
|
background-gradient-direction: vertical;
|
||||||
|
background-gradient-start: #29323b;
|
||||||
|
background-gradient-end: #121a24;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-dialog-button:active,
|
||||||
|
.modal-dialog-button:pressed {
|
||||||
|
border-color: #a5a5a5;
|
||||||
|
background-gradient-start: #121a24;
|
||||||
|
background-gradient-end: #29323b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-dialog-button:focus {
|
||||||
|
border: 2px solid #a5a5a5;
|
||||||
|
|
||||||
|
padding-left: 31px;
|
||||||
|
padding-right: 31px;
|
||||||
|
padding-top: 7px;
|
||||||
|
padding-bottom: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
/* Run Dialog */
|
/* Run Dialog */
|
||||||
.run-dialog-label {
|
.run-dialog-label {
|
||||||
font: 12px sans-serif;
|
font: 12px sans-serif;
|
||||||
@ -1252,16 +1241,74 @@ StTooltip StLabel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.run-dialog {
|
.run-dialog {
|
||||||
padding: 8px;
|
border-radius: 16px;
|
||||||
border: 1px solid rgba(128,128,128,0.40);
|
|
||||||
border-radius: 4px;
|
padding-right: 21px;
|
||||||
background: rgba(0,0,0,0.8);
|
padding-left: 21px;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
padding-top: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lightbox {
|
.lightbox {
|
||||||
background-color: rgba(0, 0, 0, 0.4);
|
background-color: rgba(0, 0, 0, 0.4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* End Session Dialog */
|
||||||
|
.end-session-dialog-subject {
|
||||||
|
font: 12pt sans-serif;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #666666;
|
||||||
|
padding-top: 10px;
|
||||||
|
padding-left: 17px;
|
||||||
|
padding-bottom: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.end-session-dialog-description {
|
||||||
|
font: 10pt sans-serif;
|
||||||
|
color: white;
|
||||||
|
padding-left: 17px;
|
||||||
|
padding-right: 40px;
|
||||||
|
width: 16em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.end-session-dialog-logout-icon {
|
||||||
|
border: 2px solid #8b8b8b;
|
||||||
|
border-radius: 5px;
|
||||||
|
width: 32px;
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.end-session-dialog-shutdown-icon {
|
||||||
|
width: 32px;
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.end-session-dialog-app-list {
|
||||||
|
font: 10pt sans-serif;
|
||||||
|
max-height: 200px;
|
||||||
|
padding-top: 42px;
|
||||||
|
padding-bottom: 42px;
|
||||||
|
padding-left: 17px;
|
||||||
|
padding-right: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.end-session-dialog-app-list-item {
|
||||||
|
padding-right: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.end-session-dialog-app-list-item-icon {
|
||||||
|
padding-right: 17px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.end-session-dialog-app-list-item-name {
|
||||||
|
font: 10pt sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.end-session-dialog-app-list-item-description {
|
||||||
|
font: 8pt sans-serif;
|
||||||
|
color: #444444;
|
||||||
|
}
|
||||||
|
|
||||||
/* Magnifier */
|
/* Magnifier */
|
||||||
|
|
||||||
.magnifier-zoom-region {
|
.magnifier-zoom-region {
|
||||||
|
@ -9,22 +9,22 @@ nobase_dist_js_DATA = \
|
|||||||
misc/gnomeSession.js \
|
misc/gnomeSession.js \
|
||||||
misc/params.js \
|
misc/params.js \
|
||||||
misc/telepathy.js \
|
misc/telepathy.js \
|
||||||
misc/utils.js \
|
misc/util.js \
|
||||||
perf/core.js \
|
perf/core.js \
|
||||||
prefs/clockPreferences.js \
|
|
||||||
ui/altTab.js \
|
ui/altTab.js \
|
||||||
ui/appDisplay.js \
|
ui/appDisplay.js \
|
||||||
ui/appFavorites.js \
|
ui/appFavorites.js \
|
||||||
ui/boxpointer.js \
|
ui/boxpointer.js \
|
||||||
ui/calendar.js \
|
ui/calendar.js \
|
||||||
ui/chrome.js \
|
ui/chrome.js \
|
||||||
|
ui/ctrlAltTab.js \
|
||||||
ui/dash.js \
|
ui/dash.js \
|
||||||
ui/dateMenu.js \
|
ui/dateMenu.js \
|
||||||
ui/dnd.js \
|
ui/dnd.js \
|
||||||
ui/docDisplay.js \
|
ui/docDisplay.js \
|
||||||
|
ui/endSessionDialog.js \
|
||||||
ui/environment.js \
|
ui/environment.js \
|
||||||
ui/extensionSystem.js \
|
ui/extensionSystem.js \
|
||||||
ui/genericDisplay.js \
|
|
||||||
ui/iconGrid.js \
|
ui/iconGrid.js \
|
||||||
ui/lightbox.js \
|
ui/lightbox.js \
|
||||||
ui/link.js \
|
ui/link.js \
|
||||||
@ -33,6 +33,7 @@ nobase_dist_js_DATA = \
|
|||||||
ui/magnifierDBus.js \
|
ui/magnifierDBus.js \
|
||||||
ui/main.js \
|
ui/main.js \
|
||||||
ui/messageTray.js \
|
ui/messageTray.js \
|
||||||
|
ui/modalDialog.js \
|
||||||
ui/notificationDaemon.js \
|
ui/notificationDaemon.js \
|
||||||
ui/overview.js \
|
ui/overview.js \
|
||||||
ui/panel.js \
|
ui/panel.js \
|
||||||
@ -47,6 +48,7 @@ nobase_dist_js_DATA = \
|
|||||||
ui/statusIconDispatcher.js \
|
ui/statusIconDispatcher.js \
|
||||||
ui/statusMenu.js \
|
ui/statusMenu.js \
|
||||||
ui/status/accessibility.js \
|
ui/status/accessibility.js \
|
||||||
|
ui/status/keyboard.js \
|
||||||
ui/status/power.js \
|
ui/status/power.js \
|
||||||
ui/status/volume.js \
|
ui/status/volume.js \
|
||||||
ui/status/bluetooth.js \
|
ui/status/bluetooth.js \
|
||||||
@ -57,4 +59,5 @@ nobase_dist_js_DATA = \
|
|||||||
ui/windowManager.js \
|
ui/windowManager.js \
|
||||||
ui/workspace.js \
|
ui/workspace.js \
|
||||||
ui/workspacesView.js \
|
ui/workspacesView.js \
|
||||||
ui/workspaceSwitcherPopup.js
|
ui/workspaceSwitcherPopup.js \
|
||||||
|
ui/xdndHandler.js
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
/* mode: js2; indent-tabs-mode: nil; tab-size: 4 */
|
/* mode: js2; indent-tabs-mode: nil; tab-size: 4 */
|
||||||
|
/* The name of this package (not localized) */
|
||||||
|
const PACKAGE_NAME = '@PACKAGE_NAME@';
|
||||||
|
/* The version of this package */
|
||||||
|
const PACKAGE_VERSION = '@PACKAGE_VERSION@';
|
||||||
|
/* The version of GJS we're linking to */
|
||||||
|
const GJS_VERSION = '@GJS_VERSION@';
|
||||||
|
/* 1 if gnome-bluetooth is available, 0 otherwise */
|
||||||
const HAVE_BLUETOOTH = @HAVE_BLUETOOTH@;
|
const HAVE_BLUETOOTH = @HAVE_BLUETOOTH@;
|
||||||
|
|
||||||
|
@ -60,8 +60,7 @@ function getDocManager() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DocManager wraps the DocSystem, primarily to expose DocInfo objects
|
* DocManager wraps the DocSystem, primarily to expose DocInfo objects.
|
||||||
* which conform to the GenericDisplay item API.
|
|
||||||
*/
|
*/
|
||||||
function DocManager() {
|
function DocManager() {
|
||||||
this._init();
|
this._init();
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
const DBus = imports.dbus;
|
const DBus = imports.dbus;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
|
const Signals = imports.signals;
|
||||||
|
|
||||||
const PresenceIface = {
|
const PresenceIface = {
|
||||||
name: 'org.gnome.SessionManager.Presence',
|
name: 'org.gnome.SessionManager.Presence',
|
||||||
@ -43,3 +44,60 @@ Presence.prototype = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
DBus.proxifyPrototype(Presence.prototype, PresenceIface);
|
DBus.proxifyPrototype(Presence.prototype, PresenceIface);
|
||||||
|
|
||||||
|
// Note inhibitors are immutable objects, so they don't
|
||||||
|
// change at runtime (changes always come in the form
|
||||||
|
// of new inhibitors)
|
||||||
|
const InhibitorIface = {
|
||||||
|
name: 'org.gnome.SessionManager.Inhibitor',
|
||||||
|
properties: [{ name: 'app_id',
|
||||||
|
signature: 's',
|
||||||
|
access: 'readonly' },
|
||||||
|
{ name: 'client_id',
|
||||||
|
signature: 's',
|
||||||
|
access: 'readonly' },
|
||||||
|
{ name: 'reason',
|
||||||
|
signature: 's',
|
||||||
|
access: 'readonly' },
|
||||||
|
{ name: 'flags',
|
||||||
|
signature: 'u',
|
||||||
|
access: 'readonly' },
|
||||||
|
{ name: 'toplevel_xid',
|
||||||
|
signature: 'u',
|
||||||
|
access: 'readonly' },
|
||||||
|
{ name: 'cookie',
|
||||||
|
signature: 'u',
|
||||||
|
access: 'readonly' }],
|
||||||
|
};
|
||||||
|
|
||||||
|
function Inhibitor(objectPath) {
|
||||||
|
this._init(objectPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
Inhibitor.prototype = {
|
||||||
|
_init: function(objectPath) {
|
||||||
|
DBus.session.proxifyObject(this,
|
||||||
|
"org.gnome.SessionManager",
|
||||||
|
objectPath);
|
||||||
|
this.isLoaded = false;
|
||||||
|
this._loadingPropertiesCount = InhibitorIface.properties.length;
|
||||||
|
for (let i = 0; i < InhibitorIface.properties.length; i++) {
|
||||||
|
let propertyName = InhibitorIface.properties[i].name;
|
||||||
|
this.GetRemote(propertyName, Lang.bind(this,
|
||||||
|
function(value, exception) {
|
||||||
|
if (exception)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this[propertyName] = value;
|
||||||
|
this._loadingPropertiesCount--;
|
||||||
|
|
||||||
|
if (this._loadingPropertiesCount == 0) {
|
||||||
|
this.isLoaded = true;
|
||||||
|
this.emit("is-loaded");
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
DBus.proxifyPrototype(Inhibitor.prototype, InhibitorIface);
|
||||||
|
Signals.addSignalMethods(Inhibitor.prototype);
|
||||||
|
175
js/misc/util.js
Normal file
175
js/misc/util.js
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
|
const Gdk = imports.gi.Gdk;
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
|
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
const MessageTray = imports.ui.messageTray;
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain('gnome-shell');
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
|
/* http://daringfireball.net/2010/07/improved_regex_for_matching_urls */
|
||||||
|
const _urlRegexp = new RegExp('\\b(([a-z][\\w-]+:(/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)([^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:\'\\".,<>?«»“”‘’]))', 'gi');
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
// spawn:
|
||||||
|
// @argv: an argv array
|
||||||
|
//
|
||||||
|
// Runs @argv in the background, handling any errors that occur
|
||||||
|
// when trying to start the program.
|
||||||
|
function spawn(argv) {
|
||||||
|
try {
|
||||||
|
trySpawn(argv);
|
||||||
|
} catch (err) {
|
||||||
|
_handleSpawnError(argv[0], err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// spawnCommandLine:
|
||||||
|
// @command_line: a command line
|
||||||
|
//
|
||||||
|
// Runs @command_line in the background, handling any errors that
|
||||||
|
// occur when trying to parse or start the program.
|
||||||
|
function spawnCommandLine(command_line) {
|
||||||
|
try {
|
||||||
|
let [success, argc, argv] = GLib.shell_parse_argv(command_line);
|
||||||
|
trySpawn(argv);
|
||||||
|
} catch (err) {
|
||||||
|
_handleSpawnError(command_line, err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// spawnDesktop:
|
||||||
|
// @id: a desktop file ID
|
||||||
|
//
|
||||||
|
// Spawns the desktop file identified by @id using startup notification,
|
||||||
|
// etc, handling any errors that occur when trying to find or start
|
||||||
|
// the program.
|
||||||
|
function spawnDesktop(id) {
|
||||||
|
try {
|
||||||
|
trySpawnDesktop(id);
|
||||||
|
} catch (err) {
|
||||||
|
_handleSpawnError(id, err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// trySpawn:
|
||||||
|
// @argv: an argv array
|
||||||
|
//
|
||||||
|
// Runs @argv in the background. If launching @argv fails,
|
||||||
|
// this will throw an error.
|
||||||
|
function trySpawn(argv)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
GLib.spawn_async(null, argv, null,
|
||||||
|
GLib.SpawnFlags.SEARCH_PATH,
|
||||||
|
null, null);
|
||||||
|
} catch (err) {
|
||||||
|
// The exception from gjs contains an error string like:
|
||||||
|
// Error invoking GLib.spawn_command_line_async: Failed to
|
||||||
|
// execute child process "foo" (No such file or directory)
|
||||||
|
// We are only interested in the part in the parentheses. (And
|
||||||
|
// we can't pattern match the text, since it gets localized.)
|
||||||
|
err.message = err.message.replace(/.*\((.+)\)/, '$1');
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// trySpawnCommandLine:
|
||||||
|
// @command_line: a command line
|
||||||
|
//
|
||||||
|
// Runs @command_line in the background. If launching @command_line
|
||||||
|
// fails, this will throw an error.
|
||||||
|
function trySpawnCommandLine(command_line) {
|
||||||
|
let success, argc, argv;
|
||||||
|
|
||||||
|
try {
|
||||||
|
[success, argc, argv] = GLib.shell_parse_argv(command_line);
|
||||||
|
} catch (err) {
|
||||||
|
// Replace "Error invoking GLib.shell_parse_argv: " with
|
||||||
|
// something nicer
|
||||||
|
err.message = err.message.replace(/[^:]*: /, _("Could not parse command:") + "\n");
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
|
||||||
|
trySpawn(argv);
|
||||||
|
}
|
||||||
|
|
||||||
|
// trySpawnDesktop:
|
||||||
|
// @id: a desktop file ID
|
||||||
|
//
|
||||||
|
// Spawns the desktop file identified by @id using startup notification.
|
||||||
|
// On error, throws an exception.
|
||||||
|
function trySpawnDesktop(id) {
|
||||||
|
let app;
|
||||||
|
|
||||||
|
// shell_app_system_load_from_desktop_file() will end up returning
|
||||||
|
// a stupid error message if the desktop file doesn't exist, but
|
||||||
|
// that's the only case it returns an error for, so we just
|
||||||
|
// substitute our own error in instead
|
||||||
|
try {
|
||||||
|
app = Shell.AppSystem.get_default().load_from_desktop_file(id + '.desktop');
|
||||||
|
} catch (err) {
|
||||||
|
throw new Error(_("No such application"));
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
app.launch();
|
||||||
|
} catch(err) {
|
||||||
|
// see trySpawn
|
||||||
|
err.message = err.message.replace(/.*\((.+)\)/, '$1');
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function _handleSpawnError(command, err) {
|
||||||
|
let title = _("Execution of '%s' failed:").format(command);
|
||||||
|
|
||||||
|
let source = new MessageTray.SystemNotificationSource();
|
||||||
|
Main.messageTray.add(source);
|
||||||
|
let notification = new MessageTray.Notification(source, title, err.message);
|
||||||
|
notification.setTransient(true);
|
||||||
|
source.notify(notification);
|
||||||
|
}
|
||||||
|
|
||||||
|
// killall:
|
||||||
|
// @processName: a process name
|
||||||
|
//
|
||||||
|
// Kills @processName. If no process with the given name is found,
|
||||||
|
// this will fail silently.
|
||||||
|
function killall(processName) {
|
||||||
|
try {
|
||||||
|
// pkill is more portable than killall, but on Linux at least
|
||||||
|
// it won't match if you pass more than 15 characters of the
|
||||||
|
// process name... However, if you use the '-f' flag to match
|
||||||
|
// the entire command line, it will work, but we have to be
|
||||||
|
// careful in that case that we can match
|
||||||
|
// '/usr/bin/processName' but not 'gedit processName.c' or
|
||||||
|
// whatever...
|
||||||
|
|
||||||
|
let argv = ['pkill', '-f', '^([^ ]*/)?' + processName + '($| )'];
|
||||||
|
GLib.spawn_sync(null, argv, null, GLib.SpawnFlags.SEARCH_PATH, null, null);
|
||||||
|
// It might be useful to return success/failure, but we'd need
|
||||||
|
// a wrapper around WIFEXITED and WEXITSTATUS. Since none of
|
||||||
|
// the current callers care, we don't bother.
|
||||||
|
} catch (e) {
|
||||||
|
logError(e, 'Failed to kill ' + processName);
|
||||||
|
}
|
||||||
|
}
|
@ -1,19 +0,0 @@
|
|||||||
/* -*- 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 = {
|
AltTabPopup.prototype = {
|
||||||
_init : function() {
|
_init : function() {
|
||||||
this.actor = new Shell.GenericContainer({ name: 'altTabPopup',
|
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-width', Lang.bind(this, this._getPreferredWidth));
|
||||||
this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
|
this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
|
||||||
@ -126,8 +127,8 @@ AltTabPopup.prototype = {
|
|||||||
return false;
|
return false;
|
||||||
this._haveModal = true;
|
this._haveModal = true;
|
||||||
|
|
||||||
this._keyPressEventId = global.stage.connect('key-press-event', Lang.bind(this, this._keyPressEvent));
|
this.actor.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-release-event', Lang.bind(this, this._keyReleaseEvent));
|
||||||
|
|
||||||
this.actor.connect('button-press-event', Lang.bind(this, this._clickedOutside));
|
this.actor.connect('button-press-event', Lang.bind(this, this._clickedOutside));
|
||||||
this.actor.connect('scroll-event', Lang.bind(this, this._onScroll));
|
this.actor.connect('scroll-event', Lang.bind(this, this._onScroll));
|
||||||
@ -365,6 +366,7 @@ AltTabPopup.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
destroy : function() {
|
destroy : function() {
|
||||||
|
if (this.actor.visible) {
|
||||||
Tweener.addTween(this.actor,
|
Tweener.addTween(this.actor,
|
||||||
{ opacity: 0,
|
{ opacity: 0,
|
||||||
time: POPUP_FADE_TIME,
|
time: POPUP_FADE_TIME,
|
||||||
@ -374,6 +376,8 @@ AltTabPopup.prototype = {
|
|||||||
this.actor.destroy();
|
this.actor.destroy();
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
} else
|
||||||
|
this.actor.destroy();
|
||||||
},
|
},
|
||||||
|
|
||||||
_onDestroy : function() {
|
_onDestroy : function() {
|
||||||
@ -383,11 +387,6 @@ AltTabPopup.prototype = {
|
|||||||
if (this._thumbnails)
|
if (this._thumbnails)
|
||||||
this._destroyThumbnails();
|
this._destroyThumbnails();
|
||||||
|
|
||||||
if (this._keyPressEventId)
|
|
||||||
global.stage.disconnect(this._keyPressEventId);
|
|
||||||
if (this._keyReleaseEventId)
|
|
||||||
global.stage.disconnect(this._keyReleaseEventId);
|
|
||||||
|
|
||||||
if (this._motionTimeoutId != 0)
|
if (this._motionTimeoutId != 0)
|
||||||
Mainloop.source_remove(this._motionTimeoutId);
|
Mainloop.source_remove(this._motionTimeoutId);
|
||||||
if (this._thumbnailTimeoutId != 0)
|
if (this._thumbnailTimeoutId != 0)
|
||||||
@ -609,16 +608,18 @@ SwitcherList.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
highlight: function(index, justOutline) {
|
highlight: function(index, justOutline) {
|
||||||
if (this._highlighted != -1)
|
if (this._highlighted != -1) {
|
||||||
this._items[this._highlighted].style_class = 'item-box';
|
this._items[this._highlighted].remove_style_pseudo_class('outlined');
|
||||||
|
this._items[this._highlighted].remove_style_pseudo_class('selected');
|
||||||
|
}
|
||||||
|
|
||||||
this._highlighted = index;
|
this._highlighted = index;
|
||||||
|
|
||||||
if (this._highlighted != -1) {
|
if (this._highlighted != -1) {
|
||||||
if (justOutline)
|
if (justOutline)
|
||||||
this._items[this._highlighted].style_class = 'outlined-item-box';
|
this._items[this._highlighted].add_style_pseudo_class('outlined');
|
||||||
else
|
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();
|
let monitor = global.get_primary_monitor();
|
||||||
@ -864,17 +865,19 @@ AppSwitcher.prototype = {
|
|||||||
while(this._items.length > 1 && this._items[j].style_class != 'item-box') {
|
while(this._items.length > 1 && this._items[j].style_class != 'item-box') {
|
||||||
j++;
|
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 [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);
|
let totalSpacing = this._list.spacing * (this._items.length - 1);
|
||||||
if (this._separator)
|
if (this._separator)
|
||||||
totalSpacing += this._separator.width + this._list.spacing;
|
totalSpacing += this._separator.width + this._list.spacing;
|
||||||
|
|
||||||
// We just assume the whole screen here due to weirdness happing with the passed width
|
// We just assume the whole screen here due to weirdness happing with the passed width
|
||||||
let focus = global.get_focus_monitor();
|
let primary = global.get_primary_monitor();
|
||||||
let parentPadding = this.actor.get_parent().get_theme_node().get_horizontal_padding();
|
let parentPadding = this.actor.get_parent().get_theme_node().get_horizontal_padding();
|
||||||
let availWidth = focus.width - parentPadding - this.actor.get_theme_node().get_horizontal_padding();
|
let availWidth = primary.width - parentPadding - this.actor.get_theme_node().get_horizontal_padding();
|
||||||
let height = 0;
|
let height = 0;
|
||||||
|
|
||||||
for(let i = 0; i < iconSizes.length; i++) {
|
for(let i = 0; i < iconSizes.length; i++) {
|
||||||
|
@ -151,6 +151,7 @@ ViewByCategories.prototype = {
|
|||||||
this._apps = apps;
|
this._apps = apps;
|
||||||
this._view.refresh(apps);
|
this._view.refresh(apps);
|
||||||
|
|
||||||
|
/* Translators: Filter to display all applications */
|
||||||
this._addFilter(_("All"), -1);
|
this._addFilter(_("All"), -1);
|
||||||
|
|
||||||
if (!sections)
|
if (!sections)
|
||||||
@ -280,21 +281,21 @@ PrefsSearchProvider.prototype = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function AppIcon(app) {
|
function AppIcon(app, params) {
|
||||||
this._init(app);
|
this._init(app, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
AppIcon.prototype = {
|
AppIcon.prototype = {
|
||||||
__proto__: IconGrid.BaseIcon.prototype,
|
__proto__: IconGrid.BaseIcon.prototype,
|
||||||
|
|
||||||
_init : function(app) {
|
_init : function(app, params) {
|
||||||
this.app = app;
|
this.app = app;
|
||||||
|
|
||||||
let label = this.app.get_name();
|
let label = this.app.get_name();
|
||||||
|
|
||||||
IconGrid.BaseIcon.prototype._init.call(this,
|
IconGrid.BaseIcon.prototype._init.call(this,
|
||||||
label,
|
label,
|
||||||
{ setSizeManually: true });
|
params);
|
||||||
},
|
},
|
||||||
|
|
||||||
createIcon: function(iconSize) {
|
createIcon: function(iconSize) {
|
||||||
@ -302,12 +303,12 @@ AppIcon.prototype = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function AppWellIcon(app) {
|
function AppWellIcon(app, iconParams) {
|
||||||
this._init(app);
|
this._init(app, iconParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
AppWellIcon.prototype = {
|
AppWellIcon.prototype = {
|
||||||
_init : function(app) {
|
_init : function(app, iconParams) {
|
||||||
this.app = app;
|
this.app = app;
|
||||||
this.actor = new St.Clickable({ style_class: 'app-well-app',
|
this.actor = new St.Clickable({ style_class: 'app-well-app',
|
||||||
reactive: true,
|
reactive: true,
|
||||||
@ -315,7 +316,7 @@ AppWellIcon.prototype = {
|
|||||||
y_fill: true });
|
y_fill: true });
|
||||||
this.actor._delegate = this;
|
this.actor._delegate = this;
|
||||||
|
|
||||||
this.icon = new AppIcon(app);
|
this.icon = new AppIcon(app, iconParams);
|
||||||
this.actor.set_child(this.icon.actor);
|
this.actor.set_child(this.icon.actor);
|
||||||
|
|
||||||
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
|
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
|
||||||
|
@ -42,7 +42,7 @@ BoxPointer.prototype = {
|
|||||||
this.bin.raise(this._border);
|
this.bin.raise(this._border);
|
||||||
},
|
},
|
||||||
|
|
||||||
animateAppear: function(onComplete) {
|
show: function(animate, onComplete) {
|
||||||
let x = this.actor.x;
|
let x = this.actor.x;
|
||||||
let y = this.actor.y;
|
let y = this.actor.y;
|
||||||
let themeNode = this.actor.get_theme_node();
|
let themeNode = this.actor.get_theme_node();
|
||||||
@ -51,6 +51,7 @@ BoxPointer.prototype = {
|
|||||||
this.actor.opacity = 0;
|
this.actor.opacity = 0;
|
||||||
this.actor.show();
|
this.actor.show();
|
||||||
|
|
||||||
|
if (animate) {
|
||||||
switch (this._arrowSide) {
|
switch (this._arrowSide) {
|
||||||
case St.Side.TOP:
|
case St.Side.TOP:
|
||||||
this.actor.y -= rise;
|
this.actor.y -= rise;
|
||||||
@ -65,6 +66,7 @@ BoxPointer.prototype = {
|
|||||||
this.actor.x += rise;
|
this.actor.x += rise;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Tweener.addTween(this.actor, { opacity: 255,
|
Tweener.addTween(this.actor, { opacity: 255,
|
||||||
x: x,
|
x: x,
|
||||||
@ -74,7 +76,7 @@ BoxPointer.prototype = {
|
|||||||
time: POPUP_ANIMATION_TIME });
|
time: POPUP_ANIMATION_TIME });
|
||||||
},
|
},
|
||||||
|
|
||||||
animateDisappear: function(onComplete) {
|
hide: function(animate, onComplete) {
|
||||||
let x = this.actor.x;
|
let x = this.actor.x;
|
||||||
let y = this.actor.y;
|
let y = this.actor.y;
|
||||||
let originalX = this.actor.x;
|
let originalX = this.actor.x;
|
||||||
@ -82,6 +84,7 @@ BoxPointer.prototype = {
|
|||||||
let themeNode = this.actor.get_theme_node();
|
let themeNode = this.actor.get_theme_node();
|
||||||
let rise = themeNode.get_length('-arrow-rise');
|
let rise = themeNode.get_length('-arrow-rise');
|
||||||
|
|
||||||
|
if (animate) {
|
||||||
switch (this._arrowSide) {
|
switch (this._arrowSide) {
|
||||||
case St.Side.TOP:
|
case St.Side.TOP:
|
||||||
y += rise;
|
y += rise;
|
||||||
@ -96,6 +99,7 @@ BoxPointer.prototype = {
|
|||||||
x -= rise;
|
x -= rise;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Tweener.addTween(this.actor, { opacity: 0,
|
Tweener.addTween(this.actor, { opacity: 0,
|
||||||
x: x,
|
x: x,
|
||||||
|
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,8 +78,6 @@ function Dash() {
|
|||||||
|
|
||||||
Dash.prototype = {
|
Dash.prototype = {
|
||||||
_init : function() {
|
_init : function() {
|
||||||
this._menus = [];
|
|
||||||
this._menuDisplays = [];
|
|
||||||
this._maxHeight = -1;
|
this._maxHeight = -1;
|
||||||
this._iconSize = 48;
|
this._iconSize = 48;
|
||||||
|
|
||||||
@ -193,7 +191,8 @@ Dash.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
_addApp: function(app) {
|
_addApp: function(app) {
|
||||||
let display = new AppDisplay.AppWellIcon(app);
|
let display = new AppDisplay.AppWellIcon(app,
|
||||||
|
{ setSizeManually: true });
|
||||||
display._draggable.connect('drag-begin',
|
display._draggable.connect('drag-begin',
|
||||||
Lang.bind(this, function() {
|
Lang.bind(this, function() {
|
||||||
display.actor.opacity = 50;
|
display.actor.opacity = 50;
|
||||||
@ -273,7 +272,11 @@ Dash.prototype = {
|
|||||||
if (app == null || app.is_transient())
|
if (app == null || app.is_transient())
|
||||||
return DND.DragMotionResult.NO_DROP;
|
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 numChildren = this._box.get_children().length;
|
||||||
let boxHeight = this._box.height;
|
let boxHeight = this._box.height;
|
||||||
|
|
||||||
@ -291,15 +294,16 @@ Dash.prototype = {
|
|||||||
this._dragPlaceholderPos = pos;
|
this._dragPlaceholderPos = pos;
|
||||||
if (this._dragPlaceholder)
|
if (this._dragPlaceholder)
|
||||||
this._dragPlaceholder.destroy();
|
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._dragPlaceholder = new St.Bin({ style_class: 'dash-placeholder' });
|
||||||
this._box.insert_actor(this._dragPlaceholder, pos);
|
this._box.insert_actor(this._dragPlaceholder, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
let id = app.get_id();
|
let srcIsFavorite = (favPos != -1);
|
||||||
|
|
||||||
let favorites = AppFavorites.getAppFavorites().getFavoriteMap();
|
|
||||||
|
|
||||||
let srcIsFavorite = (id in favorites);
|
|
||||||
|
|
||||||
if (srcIsFavorite)
|
if (srcIsFavorite)
|
||||||
return DND.DragMotionResult.MOVE_DROP;
|
return DND.DragMotionResult.MOVE_DROP;
|
||||||
|
@ -1,487 +1,11 @@
|
|||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
/* -*- 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 St = imports.gi.St;
|
|
||||||
const Mainloop = imports.mainloop;
|
|
||||||
const Gettext = imports.gettext.domain('gnome-shell');
|
const Gettext = imports.gettext.domain('gnome-shell');
|
||||||
const _ = Gettext.gettext;
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
const DocInfo = imports.misc.docInfo;
|
const DocInfo = imports.misc.docInfo;
|
||||||
const DND = imports.ui.dnd;
|
|
||||||
const GenericDisplay = imports.ui.genericDisplay;
|
|
||||||
const Main = imports.ui.main;
|
|
||||||
const Search = imports.ui.search;
|
const Search = imports.ui.search;
|
||||||
|
|
||||||
const MAX_DASH_DOCS = 50;
|
|
||||||
const DASH_DOCS_ICON_SIZE = 16;
|
|
||||||
|
|
||||||
const DEFAULT_SPACING = 4;
|
|
||||||
|
|
||||||
/* This class represents a single display item containing information about a document.
|
|
||||||
* We take the current number of seconds in the constructor to avoid looking up the current
|
|
||||||
* time for every item when they are created in a batch.
|
|
||||||
*
|
|
||||||
* docInfo - DocInfo object containing information about the document
|
|
||||||
* currentSeconds - current number of seconds since the epoch
|
|
||||||
*/
|
|
||||||
function DocDisplayItem(docInfo, currentSecs) {
|
|
||||||
this._init(docInfo, currentSecs);
|
|
||||||
}
|
|
||||||
|
|
||||||
DocDisplayItem.prototype = {
|
|
||||||
__proto__: GenericDisplay.GenericDisplayItem.prototype,
|
|
||||||
|
|
||||||
_init : function(docInfo, currentSecs) {
|
|
||||||
GenericDisplay.GenericDisplayItem.prototype._init.call(this);
|
|
||||||
this._docInfo = docInfo;
|
|
||||||
|
|
||||||
this._setItemInfo(docInfo.name, '');
|
|
||||||
|
|
||||||
this._timeoutTime = -1;
|
|
||||||
this._resetTimeDisplay(currentSecs);
|
|
||||||
},
|
|
||||||
|
|
||||||
//// Public methods ////
|
|
||||||
|
|
||||||
getUpdateTimeoutTime: function() {
|
|
||||||
return this._timeoutTime;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Update any relative-time based displays for this item.
|
|
||||||
redisplay: function(currentSecs) {
|
|
||||||
this._resetTimeDisplay(currentSecs);
|
|
||||||
},
|
|
||||||
|
|
||||||
//// Public method overrides ////
|
|
||||||
|
|
||||||
// Opens a document represented by this display item.
|
|
||||||
launch : function() {
|
|
||||||
this._docInfo.launch();
|
|
||||||
},
|
|
||||||
|
|
||||||
//// Protected method overrides ////
|
|
||||||
|
|
||||||
// Returns an icon for the item.
|
|
||||||
_createIcon : function() {
|
|
||||||
return this._docInfo.createIcon(GenericDisplay.ITEM_DISPLAY_ICON_SIZE);
|
|
||||||
},
|
|
||||||
|
|
||||||
// Returns a preview icon for the item.
|
|
||||||
_createPreviewIcon : function() {
|
|
||||||
return this._docInfo.createIcon(GenericDisplay.PREVIEW_ICON_SIZE);
|
|
||||||
},
|
|
||||||
|
|
||||||
// Creates and returns a large preview icon, but only if this._docInfo is an image file
|
|
||||||
// and we were able to generate a pixbuf from it successfully.
|
|
||||||
_createLargePreviewIcon : function() {
|
|
||||||
if (this._docInfo.mimeType == null || this._docInfo.mimeType.indexOf('image/') != 0)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
try {
|
|
||||||
return St.TextureCache.get_default().load_uri_sync(St.TextureCachePolicy.NONE,
|
|
||||||
this._docInfo.uri, -1, -1);
|
|
||||||
} catch (e) {
|
|
||||||
// An exception will be raised when the image format isn't know
|
|
||||||
/* FIXME: http://bugzilla.gnome.org/show_bug.cgi?id=591480: should
|
|
||||||
* only ignore GDK_PIXBUF_ERROR_UNKNOWN_TYPE. */
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
//// Drag and Drop ////
|
|
||||||
|
|
||||||
shellWorkspaceLaunch: function() {
|
|
||||||
this.launch();
|
|
||||||
},
|
|
||||||
|
|
||||||
//// Private Methods ////
|
|
||||||
|
|
||||||
// Updates the last visited time displayed in the description text for the item.
|
|
||||||
_resetTimeDisplay: function(currentSecs) {
|
|
||||||
let lastSecs = this._docInfo.timestamp;
|
|
||||||
let timeDelta = currentSecs - lastSecs;
|
|
||||||
let [text, nextUpdate] = global.format_time_relative_pretty(timeDelta);
|
|
||||||
this._timeoutTime = currentSecs + nextUpdate;
|
|
||||||
this._setDescriptionText(text);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/* This class represents a display containing a collection of document items.
|
|
||||||
* The documents are sorted by how recently they were last visited.
|
|
||||||
*/
|
|
||||||
function DocDisplay() {
|
|
||||||
this._init();
|
|
||||||
}
|
|
||||||
|
|
||||||
DocDisplay.prototype = {
|
|
||||||
__proto__: GenericDisplay.GenericDisplay.prototype,
|
|
||||||
|
|
||||||
_init : function() {
|
|
||||||
GenericDisplay.GenericDisplay.prototype._init.call(this);
|
|
||||||
// We keep a single timeout callback for updating last visited times
|
|
||||||
// for all the items in the display. This avoids creating individual
|
|
||||||
// callbacks for each item in the display. So proper time updates
|
|
||||||
// for individual items and item details depend on the item being
|
|
||||||
// associated with one of the displays.
|
|
||||||
this._updateTimeoutTargetTime = -1;
|
|
||||||
this._updateTimeoutId = 0;
|
|
||||||
|
|
||||||
this._docManager = DocInfo.getDocManager();
|
|
||||||
this._docsStale = true;
|
|
||||||
this._docManager.connect('changed', Lang.bind(this, function(mgr, userData) {
|
|
||||||
this._docsStale = true;
|
|
||||||
// Changes in local recent files should not happen when we are in the Overview mode,
|
|
||||||
// but redisplaying right away is cool when we use Zephyr.
|
|
||||||
// Also, we might be displaying remote documents, like Google Docs, in the future
|
|
||||||
// which might be edited by someone else.
|
|
||||||
this._redisplay(GenericDisplay.RedisplayFlags.NONE);
|
|
||||||
}));
|
|
||||||
|
|
||||||
this.connect('destroy', Lang.bind(this, function (o) {
|
|
||||||
if (this._updateTimeoutId > 0)
|
|
||||||
Mainloop.source_remove(this._updateTimeoutId);
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
//// Protected method overrides ////
|
|
||||||
|
|
||||||
// Gets the list of recent items from the recent items manager.
|
|
||||||
_refreshCache : function() {
|
|
||||||
if (!this._docsStale)
|
|
||||||
return true;
|
|
||||||
this._allItems = {};
|
|
||||||
Lang.copyProperties(this._docManager.getInfosByUri(), this._allItems);
|
|
||||||
this._docsStale = false;
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Sets the list of the displayed items based on how recently they were last visited.
|
|
||||||
_setDefaultList : function() {
|
|
||||||
// It seems to be an implementation detail of the Mozilla JavaScript that object
|
|
||||||
// properties are returned during the iteration in the same order in which they were
|
|
||||||
// defined, but it is not a guarantee according to this
|
|
||||||
// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Statements/for...in
|
|
||||||
// While this._allItems associative array seems to always be ordered by last added,
|
|
||||||
// as the results of this._recentManager.get_items() based on which it is constructed are,
|
|
||||||
// we should do the sorting manually because we want the order to be based on last visited.
|
|
||||||
//
|
|
||||||
// This function is called each time the search string is set back to '' or we display
|
|
||||||
// the Overview, so we are doing the sorting over the same items multiple times if the list
|
|
||||||
// of recent items didn't change. We could store an additional array of doc ids and sort
|
|
||||||
// them once when they are returned by this._recentManager.get_items() to avoid having to do
|
|
||||||
// this sorting each time, but the sorting seems to be very fast anyway, so there is no need
|
|
||||||
// to introduce an additional class variable.
|
|
||||||
this._matchedItems = {};
|
|
||||||
this._matchedItemKeys = [];
|
|
||||||
let docIdsToRemove = [];
|
|
||||||
for (docId in this._allItems) {
|
|
||||||
this._matchedItems[docId] = 1;
|
|
||||||
this._matchedItemKeys.push(docId);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (docId in docIdsToRemove) {
|
|
||||||
delete this._allItems[docId];
|
|
||||||
}
|
|
||||||
|
|
||||||
this._matchedItemKeys.sort(Lang.bind(this, this._compareItems));
|
|
||||||
},
|
|
||||||
|
|
||||||
// Compares items associated with the item ids based on how recently the items
|
|
||||||
// were last visited.
|
|
||||||
// Returns an integer value indicating the result of the comparison.
|
|
||||||
_compareItems : function(itemIdA, itemIdB) {
|
|
||||||
let docA = this._allItems[itemIdA];
|
|
||||||
let docB = this._allItems[itemIdB];
|
|
||||||
|
|
||||||
return docB.timestamp - docA.timestamp;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Checks if the item info can be a match for the search string by checking
|
|
||||||
// the name of the document. Item info is expected to be GtkRecentInfo.
|
|
||||||
// Returns a boolean flag indicating if itemInfo is a match.
|
|
||||||
_isInfoMatching : function(itemInfo, search) {
|
|
||||||
if (!itemInfo.exists())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (search == null || search == '')
|
|
||||||
return true;
|
|
||||||
|
|
||||||
let name = itemInfo.name.toLowerCase();
|
|
||||||
if (name.indexOf(search) >= 0)
|
|
||||||
return true;
|
|
||||||
// TODO: we can also check doc URIs, so that
|
|
||||||
// if you search for a directory name, we display recent files from it
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Creates a DocDisplayItem based on itemInfo, which is expected to be a DocInfo object.
|
|
||||||
_createDisplayItem: function(itemInfo) {
|
|
||||||
let currentSecs = new Date().getTime() / 1000;
|
|
||||||
let docDisplayItem = new DocDisplayItem(itemInfo, currentSecs);
|
|
||||||
this._updateTimeoutCallback(docDisplayItem, currentSecs);
|
|
||||||
return docDisplayItem;
|
|
||||||
},
|
|
||||||
|
|
||||||
//// Private Methods ////
|
|
||||||
|
|
||||||
// A callback function that redisplays the items, updating their descriptions,
|
|
||||||
// and sets up a new timeout callback.
|
|
||||||
_docTimeout: function () {
|
|
||||||
let currentSecs = new Date().getTime() / 1000;
|
|
||||||
this._updateTimeoutId = 0;
|
|
||||||
this._updateTimeoutTargetTime = -1;
|
|
||||||
for (let docId in this._displayedItems) {
|
|
||||||
let docDisplayItem = this._displayedItems[docId];
|
|
||||||
docDisplayItem.redisplay(currentSecs);
|
|
||||||
this._updateTimeoutCallback(docDisplayItem, currentSecs);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Updates the timeout callback if the timeout time for the docDisplayItem
|
|
||||||
// is earlier than the target time for the current timeout callback.
|
|
||||||
_updateTimeoutCallback: function (docDisplayItem, currentSecs) {
|
|
||||||
let timeoutTime = docDisplayItem.getUpdateTimeoutTime();
|
|
||||||
if (this._updateTimeoutTargetTime < 0 || timeoutTime < this._updateTimeoutTargetTime) {
|
|
||||||
if (this._updateTimeoutId > 0)
|
|
||||||
Mainloop.source_remove(this._updateTimeoutId);
|
|
||||||
this._updateTimeoutId = Mainloop.timeout_add_seconds(timeoutTime - currentSecs, Lang.bind(this, this._docTimeout));
|
|
||||||
this._updateTimeoutTargetTime = timeoutTime;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Signals.addSignalMethods(DocDisplay.prototype);
|
|
||||||
|
|
||||||
function DashDocDisplayItem(docInfo) {
|
|
||||||
this._init(docInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
DashDocDisplayItem.prototype = {
|
|
||||||
_init: function(docInfo) {
|
|
||||||
this._info = docInfo;
|
|
||||||
this._icon = docInfo.createIcon(DASH_DOCS_ICON_SIZE);
|
|
||||||
|
|
||||||
this.actor = new St.Clickable({ style_class: 'recent-docs-item',
|
|
||||||
reactive: true,
|
|
||||||
x_align: St.Align.START });
|
|
||||||
|
|
||||||
let box = new St.BoxLayout({ style_class: 'recent-docs-item-box' });
|
|
||||||
this.actor.set_child(box);
|
|
||||||
|
|
||||||
box.add(this._icon);
|
|
||||||
|
|
||||||
let text = new St.Label({ text: docInfo.name });
|
|
||||||
box.add(text);
|
|
||||||
|
|
||||||
this.actor.connect('clicked', Lang.bind(this, function () {
|
|
||||||
docInfo.launch();
|
|
||||||
Main.overview.hide();
|
|
||||||
}));
|
|
||||||
|
|
||||||
this.actor._delegate = this;
|
|
||||||
let draggable = DND.makeDraggable(this.actor);
|
|
||||||
draggable.connect('drag-begin',
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
Main.overview.beginItemDrag(this);
|
|
||||||
}));
|
|
||||||
draggable.connect('drag-end',
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
Main.overview.endItemDrag(this);
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
getUri: function() {
|
|
||||||
return this._info.uri;
|
|
||||||
},
|
|
||||||
|
|
||||||
getDragActorSource: function() {
|
|
||||||
return this._icon;
|
|
||||||
},
|
|
||||||
|
|
||||||
getDragActor: function(stageX, stageY) {
|
|
||||||
this.dragActor = this._info.createIcon(DASH_DOCS_ICON_SIZE);
|
|
||||||
return this.dragActor;
|
|
||||||
},
|
|
||||||
|
|
||||||
//// Drag and drop functions ////
|
|
||||||
|
|
||||||
shellWorkspaceLaunch: function () {
|
|
||||||
this._info.launch();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class used to display two column recent documents in the dash
|
|
||||||
*/
|
|
||||||
function DashDocDisplay() {
|
|
||||||
this._init();
|
|
||||||
}
|
|
||||||
|
|
||||||
DashDocDisplay.prototype = {
|
|
||||||
_init: function() {
|
|
||||||
this.actor = new Shell.GenericContainer();
|
|
||||||
this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
|
|
||||||
this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
|
|
||||||
this.actor.connect('allocate', Lang.bind(this, this._allocate));
|
|
||||||
this._workId = Main.initializeDeferredWork(this.actor, Lang.bind(this, this._redisplay));
|
|
||||||
|
|
||||||
this._actorsByUri = {};
|
|
||||||
|
|
||||||
this._docManager = DocInfo.getDocManager();
|
|
||||||
this._docManager.connect('changed', Lang.bind(this, this._onDocsChanged));
|
|
||||||
this._pendingDocsChange = true;
|
|
||||||
this._checkDocExistence = false;
|
|
||||||
},
|
|
||||||
|
|
||||||
_getPreferredWidth: function(actor, forHeight, alloc) {
|
|
||||||
let children = actor.get_children();
|
|
||||||
|
|
||||||
// We use two columns maximum. Just take the min and natural size of the
|
|
||||||
// first two items, even though strictly speaking it's not correct; we'd
|
|
||||||
// need to calculate how many items we could fit for the height, then
|
|
||||||
// take the biggest preferred width for each column.
|
|
||||||
// In practice the dash gets a fixed width anyways.
|
|
||||||
|
|
||||||
// If we have one child, add its minimum and natural size
|
|
||||||
if (children.length > 0) {
|
|
||||||
let [minSize, naturalSize] = children[0].get_preferred_width(forHeight);
|
|
||||||
alloc.min_size += minSize;
|
|
||||||
alloc.natural_size += naturalSize;
|
|
||||||
}
|
|
||||||
// If we have two, add its size, plus DEFAULT_SPACING
|
|
||||||
if (children.length > 1) {
|
|
||||||
let [minSize, naturalSize] = children[1].get_preferred_width(forHeight);
|
|
||||||
alloc.min_size += DEFAULT_SPACING + minSize;
|
|
||||||
alloc.natural_size += DEFAULT_SPACING + naturalSize;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_getPreferredHeight: function(actor, forWidth, alloc) {
|
|
||||||
let children = actor.get_children();
|
|
||||||
|
|
||||||
// The width of an item is our allocated width, minus spacing, divided in half.
|
|
||||||
this._itemWidth = Math.floor((forWidth - DEFAULT_SPACING) / 2);
|
|
||||||
|
|
||||||
let maxNatural = 0;
|
|
||||||
for (let i = 0; i < children.length; i++) {
|
|
||||||
let child = children[i];
|
|
||||||
let [minSize, naturalSize] = child.get_preferred_height(this._itemWidth);
|
|
||||||
maxNatural = Math.max(maxNatural, naturalSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
this._itemHeight = maxNatural;
|
|
||||||
|
|
||||||
let firstColumnChildren = Math.ceil(children.length / 2);
|
|
||||||
alloc.natural_size = (firstColumnChildren * maxNatural +
|
|
||||||
(firstColumnChildren - 1) * DEFAULT_SPACING);
|
|
||||||
},
|
|
||||||
|
|
||||||
_allocate: function(actor, box, flags) {
|
|
||||||
let width = box.x2 - box.x1;
|
|
||||||
let height = box.y2 - box.y1;
|
|
||||||
|
|
||||||
// Make sure this._itemWidth/Height have been computed, even
|
|
||||||
// if the parent actor didn't check our size before allocating.
|
|
||||||
// (Not clear if that is required or not as a Clutter
|
|
||||||
// invariant; this is safe and cheap because of caching.)
|
|
||||||
actor.get_preferred_height(width);
|
|
||||||
|
|
||||||
let children = actor.get_children();
|
|
||||||
|
|
||||||
let x = 0;
|
|
||||||
let y = 0;
|
|
||||||
let columnIndex = 0;
|
|
||||||
let i = 0;
|
|
||||||
// Loop over the children, going vertically down first. When we run
|
|
||||||
// out of vertical space (our y variable is bigger than box.y2), switch
|
|
||||||
// to the second column.
|
|
||||||
while (i < children.length) {
|
|
||||||
let child = children[i];
|
|
||||||
|
|
||||||
if (y + this._itemHeight > box.y2) {
|
|
||||||
// Is this the second column, or we're in
|
|
||||||
// the first column and can't even fit one
|
|
||||||
// item? In that case, break.
|
|
||||||
if (columnIndex == 1 || i == 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// Set x to the halfway point.
|
|
||||||
columnIndex += 1;
|
|
||||||
x = x + this._itemWidth + DEFAULT_SPACING;
|
|
||||||
// And y is back to the top.
|
|
||||||
y = 0;
|
|
||||||
// Retry this same item, now that we're in the second column.
|
|
||||||
// By looping back to the top here, we re-test the size
|
|
||||||
// again for the second column.
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
let childBox = new Clutter.ActorBox();
|
|
||||||
childBox.x1 = x;
|
|
||||||
childBox.y1 = y;
|
|
||||||
childBox.x2 = childBox.x1 + this._itemWidth;
|
|
||||||
childBox.y2 = y + this._itemHeight;
|
|
||||||
|
|
||||||
y = childBox.y2 + DEFAULT_SPACING;
|
|
||||||
|
|
||||||
child.allocate(childBox, flags);
|
|
||||||
this.actor.set_skip_paint(child, false);
|
|
||||||
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._checkDocExistence) {
|
|
||||||
// Now we know how many docs we are displaying, queue a check to see if any of them
|
|
||||||
// have been deleted. If they are deleted, then we'll get a 'changed' signal; since
|
|
||||||
// we'll now be displaying items we weren't previously, we'll check again to see
|
|
||||||
// if they were deleted, and so forth and so on.
|
|
||||||
// TODO: We should change this to ask for as many as we can fit in the given space:
|
|
||||||
// https://bugzilla.gnome.org/show_bug.cgi?id=603522#c23
|
|
||||||
this._docManager.queueExistenceCheck(i);
|
|
||||||
this._checkDocExistence = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (; i < children.length; i++)
|
|
||||||
this.actor.set_skip_paint(children[i], true);
|
|
||||||
},
|
|
||||||
|
|
||||||
_onDocsChanged: function() {
|
|
||||||
this._checkDocExistence = true;
|
|
||||||
Main.queueDeferredWork(this._workId);
|
|
||||||
},
|
|
||||||
|
|
||||||
_redisplay: function() {
|
|
||||||
// Should be kept alive by the _actorsByUri
|
|
||||||
this.actor.remove_all();
|
|
||||||
let docs = this._docManager.getTimestampOrderedInfos();
|
|
||||||
for (let i = 0; i < docs.length && i < MAX_DASH_DOCS; i++) {
|
|
||||||
let doc = docs[i];
|
|
||||||
let display = this._actorsByUri[doc.uri];
|
|
||||||
if (display) {
|
|
||||||
this.actor.add_actor(display.actor);
|
|
||||||
} else {
|
|
||||||
let display = new DashDocDisplayItem(doc);
|
|
||||||
this.actor.add_actor(display.actor);
|
|
||||||
this._actorsByUri[doc.uri] = display;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Any unparented actors must have been deleted
|
|
||||||
for (let uri in this._actorsByUri) {
|
|
||||||
let display = this._actorsByUri[uri];
|
|
||||||
if (display.actor.get_parent() == null) {
|
|
||||||
display.actor.destroy();
|
|
||||||
delete this._actorsByUri[uri];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.emit('changed');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Signals.addSignalMethods(DashDocDisplay.prototype);
|
|
||||||
|
|
||||||
function DocSearchProvider() {
|
function DocSearchProvider() {
|
||||||
this._init();
|
this._init();
|
||||||
|
504
js/ui/endSessionDialog.js
Normal file
504
js/ui/endSessionDialog.js
Normal file
@ -0,0 +1,504 @@
|
|||||||
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*-
|
||||||
|
*
|
||||||
|
* Copyright 2010 Red Hat, Inc
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
* any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
* 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const DBus = imports.dbus;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Signals = imports.signals;
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain('gnome-shell');
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
|
const Clutter = imports.gi.Clutter;
|
||||||
|
const Gdm = imports.gi.Gdm;
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
|
const Gtk = imports.gi.Gtk;
|
||||||
|
const Pango = imports.gi.Pango;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
|
|
||||||
|
const GnomeSession = imports.misc.gnomeSession
|
||||||
|
const Lightbox = imports.ui.lightbox;
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
const ModalDialog = imports.ui.modalDialog;
|
||||||
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
|
let _endSessionDialog = null;
|
||||||
|
|
||||||
|
const _ITEM_ICON_SIZE = 48;
|
||||||
|
const _DIALOG_ICON_SIZE = 32;
|
||||||
|
|
||||||
|
const GSM_SESSION_MANAGER_LOGOUT_FORCE = 2;
|
||||||
|
|
||||||
|
const EndSessionDialogIface = {
|
||||||
|
name: 'org.gnome.SessionManager.EndSessionDialog',
|
||||||
|
methods: [{ name: 'Open',
|
||||||
|
inSignature: 'uuuao',
|
||||||
|
outSignature: ''
|
||||||
|
}
|
||||||
|
],
|
||||||
|
signals: [{ name: 'Canceled',
|
||||||
|
outSignature: '',
|
||||||
|
}],
|
||||||
|
properties: []
|
||||||
|
};
|
||||||
|
|
||||||
|
const logoutDialogContent = {
|
||||||
|
subjectWithUser: _("Log Out %s"),
|
||||||
|
subject: _("Log Out"),
|
||||||
|
inhibitedDescription: _("Click Log Out to quit these applications and log out of the system."),
|
||||||
|
uninhibitedDescriptionWithUser: _("%s will be logged out automatically in %d seconds."),
|
||||||
|
uninhibitedDescription: _("You will be logged out automatically in %d seconds."),
|
||||||
|
endDescription: _("Logging out of the system."),
|
||||||
|
confirmButtonText: _("Log Out"),
|
||||||
|
iconStyleClass: 'end-session-dialog-logout-icon'
|
||||||
|
};
|
||||||
|
|
||||||
|
const shutdownDialogContent = {
|
||||||
|
subject: _("Shut Down"),
|
||||||
|
inhibitedDescription: _("Click Shut Down to quit these applications and shut down the system."),
|
||||||
|
uninhibitedDescription: _("The system will shut down automatically in %d seconds."),
|
||||||
|
endDescription: _("Shutting down the system."),
|
||||||
|
confirmButtonText: _("Shut Down"),
|
||||||
|
iconName: 'system-shutdown',
|
||||||
|
iconStyleClass: 'end-session-dialog-shutdown-icon'
|
||||||
|
};
|
||||||
|
|
||||||
|
const restartDialogContent = {
|
||||||
|
subject: _("Restart"),
|
||||||
|
inhibitedDescription: _("Click Restart to quit these applications and restart the system."),
|
||||||
|
uninhibitedDescription: _("The system will restart automatically in %d seconds."),
|
||||||
|
endDescription: _("Restarting the system."),
|
||||||
|
confirmButtonText: _("Restart"),
|
||||||
|
iconName: 'system-shutdown',
|
||||||
|
iconStyleClass: 'end-session-dialog-shutdown-icon'
|
||||||
|
};
|
||||||
|
|
||||||
|
const DialogContent = {
|
||||||
|
0 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_LOGOUT */: logoutDialogContent,
|
||||||
|
1 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_SHUTDOWN */: shutdownDialogContent,
|
||||||
|
2 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_RESTART */: restartDialogContent
|
||||||
|
};
|
||||||
|
|
||||||
|
function findAppFromInhibitor(inhibitor) {
|
||||||
|
let desktopFile = inhibitor.app_id;
|
||||||
|
|
||||||
|
if (!GLib.str_has_suffix(desktopFile, '.desktop'))
|
||||||
|
desktopFile += '.desktop';
|
||||||
|
|
||||||
|
let candidateDesktopFiles = [];
|
||||||
|
|
||||||
|
candidateDesktopFiles.push(desktopFile);
|
||||||
|
candidateDesktopFiles.push('gnome-' + desktopFile);
|
||||||
|
|
||||||
|
let appSystem = Shell.AppSystem.get_default();
|
||||||
|
let app = null;
|
||||||
|
for (let i = 0; i < candidateDesktopFiles.length; i++) {
|
||||||
|
try {
|
||||||
|
app = appSystem.get_app(candidateDesktopFiles[i]);
|
||||||
|
|
||||||
|
if (app)
|
||||||
|
break;
|
||||||
|
} catch(e) {
|
||||||
|
// ignore errors
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return app;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ListItem(app, reason) {
|
||||||
|
this._init(app, reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
ListItem.prototype = {
|
||||||
|
_init: function(app, reason) {
|
||||||
|
this._app = app;
|
||||||
|
this._reason = reason;
|
||||||
|
|
||||||
|
if (this._reason == null)
|
||||||
|
this._reason = '';
|
||||||
|
|
||||||
|
let layout = new St.BoxLayout({ vertical: false});
|
||||||
|
|
||||||
|
this.actor = new St.Clickable({ style_class: 'end-session-dialog-app-list-item',
|
||||||
|
can_focus: true,
|
||||||
|
child: layout,
|
||||||
|
reactive: true,
|
||||||
|
x_align: St.Align.START,
|
||||||
|
x_fill: true });
|
||||||
|
|
||||||
|
this._icon = this._app.create_icon_texture(_ITEM_ICON_SIZE);
|
||||||
|
|
||||||
|
let iconBin = new St.Bin({ style_class: 'end-session-dialog-app-list-item-icon',
|
||||||
|
child: this._icon });
|
||||||
|
layout.add(iconBin);
|
||||||
|
|
||||||
|
let textLayout = new St.BoxLayout({ style_class: 'end-session-dialog-app-list-item-text-box',
|
||||||
|
vertical: true });
|
||||||
|
layout.add(textLayout);
|
||||||
|
|
||||||
|
this._nameLabel = new St.Label({ text: this._app.get_name(),
|
||||||
|
style_class: 'end-session-dialog-app-list-item-name' });
|
||||||
|
textLayout.add(this._nameLabel,
|
||||||
|
{ expand: false,
|
||||||
|
x_fill: true });
|
||||||
|
|
||||||
|
this._descriptionLabel = new St.Label({ text: this._reason,
|
||||||
|
style_class: 'end-session-dialog-app-list-item-description' });
|
||||||
|
textLayout.add(this._descriptionLabel,
|
||||||
|
{ expand: true,
|
||||||
|
x_fill: true });
|
||||||
|
|
||||||
|
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
|
||||||
|
},
|
||||||
|
|
||||||
|
_onClicked: function() {
|
||||||
|
this.emit('activate');
|
||||||
|
this._app.activate();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Signals.addSignalMethods(ListItem.prototype);
|
||||||
|
|
||||||
|
// The logout timer only shows updates every 10 seconds
|
||||||
|
// until the last 10 seconds, then it shows updates every
|
||||||
|
// second. This function takes a given time and returns
|
||||||
|
// what we should show to the user for that time.
|
||||||
|
function _roundSecondsToInterval(totalSeconds, secondsLeft, interval) {
|
||||||
|
let time;
|
||||||
|
|
||||||
|
time = Math.ceil(secondsLeft);
|
||||||
|
|
||||||
|
// Final count down is in decrements of 1
|
||||||
|
if (time <= interval)
|
||||||
|
return time;
|
||||||
|
|
||||||
|
// Round up higher than last displayable time interval
|
||||||
|
time += interval - 1;
|
||||||
|
|
||||||
|
// Then round down to that time interval
|
||||||
|
if (time > totalSeconds)
|
||||||
|
time = Math.ceil(totalSeconds);
|
||||||
|
else
|
||||||
|
time -= time % interval;
|
||||||
|
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _setLabelText(label, text) {
|
||||||
|
if (text) {
|
||||||
|
label.set_text(text);
|
||||||
|
label.show();
|
||||||
|
} else {
|
||||||
|
label.set_text('');
|
||||||
|
label.hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function EndSessionDialog() {
|
||||||
|
if (_endSessionDialog == null) {
|
||||||
|
this._init();
|
||||||
|
DBus.session.exportObject('/org/gnome/SessionManager/EndSessionDialog',
|
||||||
|
this);
|
||||||
|
_endSessionDialog = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _endSessionDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
// This always returns the same singleton object
|
||||||
|
// By instantiating it initially, we register the
|
||||||
|
// bus object, etc.
|
||||||
|
let dialog = new EndSessionDialog();
|
||||||
|
}
|
||||||
|
|
||||||
|
EndSessionDialog.prototype = {
|
||||||
|
__proto__: ModalDialog.ModalDialog.prototype,
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
ModalDialog.ModalDialog.prototype._init.call(this);
|
||||||
|
|
||||||
|
this._user = Gdm.UserManager.ref_default().get_user(GLib.get_user_name());
|
||||||
|
|
||||||
|
this._secondsLeft = 0;
|
||||||
|
this._totalSecondsToStayOpen = 0;
|
||||||
|
this._inhibitors = [];
|
||||||
|
|
||||||
|
this.connect('destroy',
|
||||||
|
Lang.bind(this, this._onDestroy));
|
||||||
|
this.connect('opened',
|
||||||
|
Lang.bind(this, this._onOpened));
|
||||||
|
|
||||||
|
this._userLoadedId = this._user.connect('notify::is_loaded',
|
||||||
|
Lang.bind(this, this._updateContent));
|
||||||
|
|
||||||
|
this._userChangedId = this._user.connect('changed',
|
||||||
|
Lang.bind(this, this._updateContent));
|
||||||
|
|
||||||
|
let mainContentLayout = new St.BoxLayout({ vertical: false });
|
||||||
|
this.contentLayout.add(mainContentLayout,
|
||||||
|
{ x_fill: true,
|
||||||
|
y_fill: false });
|
||||||
|
|
||||||
|
this._iconBin = new St.Bin();
|
||||||
|
mainContentLayout.add(this._iconBin,
|
||||||
|
{ x_fill: true,
|
||||||
|
y_fill: false,
|
||||||
|
x_align: St.Align.END,
|
||||||
|
y_align: St.Align.START });
|
||||||
|
|
||||||
|
let messageLayout = new St.BoxLayout({ vertical: true });
|
||||||
|
mainContentLayout.add(messageLayout,
|
||||||
|
{ y_align: St.Align.START });
|
||||||
|
|
||||||
|
this._subjectLabel = new St.Label({ style_class: 'end-session-dialog-subject' });
|
||||||
|
|
||||||
|
messageLayout.add(this._subjectLabel,
|
||||||
|
{ y_fill: false,
|
||||||
|
y_align: St.Align.START });
|
||||||
|
|
||||||
|
this._descriptionLabel = new St.Label({ style_class: 'end-session-dialog-description' });
|
||||||
|
this._descriptionLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||||
|
this._descriptionLabel.clutter_text.line_wrap = true;
|
||||||
|
|
||||||
|
messageLayout.add(this._descriptionLabel,
|
||||||
|
{ y_fill: true,
|
||||||
|
y_align: St.Align.START });
|
||||||
|
|
||||||
|
let scrollView = new St.ScrollView({ style_class: 'end-session-dialog-app-list'});
|
||||||
|
scrollView.set_policy(Gtk.PolicyType.NEVER,
|
||||||
|
Gtk.PolicyType.AUTOMATIC);
|
||||||
|
this.contentLayout.add(scrollView,
|
||||||
|
{ x_fill: true,
|
||||||
|
y_fill: true });
|
||||||
|
this._applicationList = new St.BoxLayout({ vertical: true });
|
||||||
|
scrollView.add_actor(this._applicationList,
|
||||||
|
{ x_fill: true,
|
||||||
|
y_fill: true,
|
||||||
|
x_align: St.Align.START,
|
||||||
|
y_align: St.Align.MIDDLE });
|
||||||
|
},
|
||||||
|
|
||||||
|
_onDestroy: function() {
|
||||||
|
this._user.disconnect(this._userLoadedId);
|
||||||
|
this._user.disconnect(this._userChangedId);
|
||||||
|
},
|
||||||
|
|
||||||
|
_setIconFromFile: function(iconFile, styleClass) {
|
||||||
|
if (styleClass)
|
||||||
|
this._iconBin.set_style_class_name(styleClass);
|
||||||
|
this._iconBin.set_style(null);
|
||||||
|
|
||||||
|
this._iconBin.child = null;
|
||||||
|
if (iconFile) {
|
||||||
|
this._iconBin.show();
|
||||||
|
this._iconBin.set_style('background-image: url("' + iconFile + '");');
|
||||||
|
} else {
|
||||||
|
this._iconBin.hide();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_setIconFromName: function(iconName, styleClass) {
|
||||||
|
if (styleClass)
|
||||||
|
this._iconBin.set_style_class_name(styleClass);
|
||||||
|
this._iconBin.set_style(null);
|
||||||
|
|
||||||
|
if (iconName != null) {
|
||||||
|
let textureCache = St.TextureCache.get_default();
|
||||||
|
let icon = textureCache.load_icon_name(this._iconBin.get_theme_node(),
|
||||||
|
iconName,
|
||||||
|
St.IconType.SYMBOLIC,
|
||||||
|
_DIALOG_ICON_SIZE);
|
||||||
|
|
||||||
|
this._iconBin.child = icon;
|
||||||
|
this._iconBin.show();
|
||||||
|
} else {
|
||||||
|
this._iconBin.child = null;
|
||||||
|
this._iconBin.hide();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateContent: function() {
|
||||||
|
if (this.state != ModalDialog.State.OPENING &&
|
||||||
|
this.state != ModalDialog.State.OPENED)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let dialogContent = DialogContent[this._type];
|
||||||
|
|
||||||
|
let subject = dialogContent.subject;
|
||||||
|
let description;
|
||||||
|
|
||||||
|
if (this._user.is_loaded && !dialogContent.iconName) {
|
||||||
|
let iconFile = this._user.get_icon_file();
|
||||||
|
|
||||||
|
this._setIconFromFile(iconFile, dialogContent.iconStyleClass);
|
||||||
|
} else if (dialogContent.iconName) {
|
||||||
|
this._setIconFromName(dialogContent.iconName,
|
||||||
|
dialogContent.iconStyleClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._inhibitors.length > 0) {
|
||||||
|
this._stopTimer();
|
||||||
|
description = dialogContent.inhibitedDescription;
|
||||||
|
} else if (this._secondsLeft > 0 && this._inhibitors.length == 0) {
|
||||||
|
let displayTime = _roundSecondsToInterval(this._totalSecondsToStayOpen,
|
||||||
|
this._secondsLeft,
|
||||||
|
10);
|
||||||
|
|
||||||
|
if (this._user.is_loaded) {
|
||||||
|
let realName = this._user.get_real_name();
|
||||||
|
|
||||||
|
if (realName != null) {
|
||||||
|
if (dialogContent.subjectWithUser)
|
||||||
|
subject = dialogContent.subjectWithUser.format(realName);
|
||||||
|
|
||||||
|
if (dialogContent.uninhibitedDescriptionWithUser)
|
||||||
|
description = dialogContent.uninhibitedDescriptionWithUser.format(realName, displayTime);
|
||||||
|
else
|
||||||
|
description = dialogContent.uninhibitedDescription.format(displayTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!description)
|
||||||
|
description = dialogContent.uninhibitedDescription.format(displayTime);
|
||||||
|
} else {
|
||||||
|
description = dialogContent.endDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
_setLabelText(this._subjectLabel, subject);
|
||||||
|
_setLabelText(this._descriptionLabel, description);
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateButtons: function() {
|
||||||
|
if (this.state != ModalDialog.State.OPENING &&
|
||||||
|
this.state != ModalDialog.State.OPENED)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let dialogContent = DialogContent[this._type];
|
||||||
|
let confirmButtonText = _("Confirm");
|
||||||
|
|
||||||
|
if (dialogContent.confirmButtonText)
|
||||||
|
confirmButtonText = dialogContent.confirmButtonText;
|
||||||
|
|
||||||
|
this.setButtons([{ label: _("Cancel"),
|
||||||
|
action: Lang.bind(this, this.cancel),
|
||||||
|
key: Clutter.Escape
|
||||||
|
},
|
||||||
|
{ label: confirmButtonText,
|
||||||
|
action: Lang.bind(this, this._confirm)
|
||||||
|
}]);
|
||||||
|
},
|
||||||
|
|
||||||
|
cancel: function() {
|
||||||
|
this._stopTimer();
|
||||||
|
DBus.session.emit_signal('/org/gnome/SessionManager/EndSessionDialog',
|
||||||
|
'org.gnome.SessionManager.EndSessionDialog',
|
||||||
|
'Canceled', '', []);
|
||||||
|
this.close(global.get_current_time());
|
||||||
|
},
|
||||||
|
|
||||||
|
_confirm: function() {
|
||||||
|
this._fadeOutDialog();
|
||||||
|
this._stopTimer();
|
||||||
|
DBus.session.emit_signal('/org/gnome/SessionManager/EndSessionDialog',
|
||||||
|
'org.gnome.SessionManager.EndSessionDialog',
|
||||||
|
'Confirmed', '', []);
|
||||||
|
},
|
||||||
|
|
||||||
|
_onOpened: function() {
|
||||||
|
if (this._inhibitors.length == 0)
|
||||||
|
this._startTimer();
|
||||||
|
},
|
||||||
|
|
||||||
|
_startTimer: function() {
|
||||||
|
this._secondsLeft = this._totalSecondsToStayOpen;
|
||||||
|
Tweener.addTween(this,
|
||||||
|
{ _secondsLeft: 0,
|
||||||
|
time: this._secondsLeft,
|
||||||
|
transition: 'linear',
|
||||||
|
onUpdate: Lang.bind(this, this._updateContent),
|
||||||
|
onComplete: Lang.bind(this, this._confirm),
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_stopTimer: function() {
|
||||||
|
Tweener.removeTweens(this);
|
||||||
|
this._secondsLeft = 0;
|
||||||
|
},
|
||||||
|
|
||||||
|
_onInhibitorLoaded: function(inhibitor) {
|
||||||
|
if (this._inhibitors.indexOf(inhibitor) < 0) {
|
||||||
|
// Stale inhibitor
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let app = findAppFromInhibitor(inhibitor);
|
||||||
|
|
||||||
|
if (app) {
|
||||||
|
let item = new ListItem(app, inhibitor.reason);
|
||||||
|
item.connect('activate',
|
||||||
|
Lang.bind(this, function() {
|
||||||
|
this.close(global.get_current_time());
|
||||||
|
}));
|
||||||
|
this._applicationList.add(item.actor, { x_fill: true });
|
||||||
|
this._stopTimer();
|
||||||
|
} else {
|
||||||
|
// inhibiting app is a service, not an application
|
||||||
|
this._inhibitors.splice(this._inhibitors.indexOf(inhibitor), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
this._updateContent();
|
||||||
|
},
|
||||||
|
|
||||||
|
OpenAsync: function(type, timestamp, totalSecondsToStayOpen, inhibitorObjectPaths, callback) {
|
||||||
|
this._totalSecondsToStayOpen = totalSecondsToStayOpen;
|
||||||
|
this._inhibitors = [];
|
||||||
|
this._applicationList.remove_all();
|
||||||
|
this._type = type;
|
||||||
|
|
||||||
|
if (!(this._type in DialogContent))
|
||||||
|
throw new DBus.DBusError('org.gnome.Shell.ModalDialog.TypeError',
|
||||||
|
"Unknown dialog type requested");
|
||||||
|
|
||||||
|
for (let i = 0; i < inhibitorObjectPaths.length; i++) {
|
||||||
|
let inhibitor = new GnomeSession.Inhibitor(inhibitorObjectPaths[i]);
|
||||||
|
|
||||||
|
inhibitor.connect('is-loaded',
|
||||||
|
Lang.bind(this, function() {
|
||||||
|
this._onInhibitorLoaded(inhibitor);
|
||||||
|
}));
|
||||||
|
this._inhibitors.push(inhibitor);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.open(timestamp))
|
||||||
|
throw new DBus.DBusError('org.gnome.Shell.ModalDialog.GrabError',
|
||||||
|
"Cannot grab pointer and keyboard");
|
||||||
|
|
||||||
|
this._updateButtons();
|
||||||
|
this._updateContent();
|
||||||
|
|
||||||
|
let signalId = this.connect('opened',
|
||||||
|
Lang.bind(this, function() {
|
||||||
|
callback();
|
||||||
|
this.disconnect(signalId);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
DBus.conformExport(EndSessionDialog.prototype, EndSessionDialogIface);
|
@ -88,7 +88,7 @@ function init() {
|
|||||||
|
|
||||||
_blockMethod('Clutter.Event.get_state', 'Shell.get_event_state',
|
_blockMethod('Clutter.Event.get_state', 'Shell.get_event_state',
|
||||||
'gjs\'s handling of Clutter.ModifierType is broken. See bug 597292.');
|
'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.');
|
'gjs\'s handling of Gdk.ModifierType is broken. See bug 597292.');
|
||||||
_blockMethod('Gdk.Window.get_device_position', 'global.get_pointer',
|
_blockMethod('Gdk.Window.get_device_position', 'global.get_pointer',
|
||||||
'gjs\'s handling of Gdk.ModifierType is broken. See bug 597292.');
|
'gjs\'s handling of Gdk.ModifierType is broken. See bug 597292.');
|
||||||
|
@ -4,6 +4,8 @@ const GLib = imports.gi.GLib;
|
|||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
|
|
||||||
|
const Config = imports.misc.config;
|
||||||
|
|
||||||
const ExtensionState = {
|
const ExtensionState = {
|
||||||
ENABLED: 1,
|
ENABLED: 1,
|
||||||
DISABLED: 2,
|
DISABLED: 2,
|
||||||
@ -25,6 +27,36 @@ var disabledExtensions;
|
|||||||
// GFile for user extensions
|
// GFile for user extensions
|
||||||
var userExtensionsDir = null;
|
var userExtensionsDir = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* versionCheck:
|
||||||
|
* @required: an array of versions we're compatible with
|
||||||
|
* @current: the version we have
|
||||||
|
*
|
||||||
|
* Check if a component is compatible for an extension.
|
||||||
|
* @required is an array, and at least one version must match.
|
||||||
|
* @current must be in the format <major>.<minor>.<point>.<micro>
|
||||||
|
* <micro> is always ignored
|
||||||
|
* <point> is ignored if <minor> is even (so you can target the
|
||||||
|
* whole stable release)
|
||||||
|
* <minor> and <major> must match
|
||||||
|
* Each target version must be at least <major> and <minor>
|
||||||
|
*/
|
||||||
|
function versionCheck(required, current) {
|
||||||
|
let currentArray = current.split('.');
|
||||||
|
let major = currentArray[0];
|
||||||
|
let minor = currentArray[1];
|
||||||
|
let point = currentArray[2];
|
||||||
|
for (let i = 0; i < required.length; i++) {
|
||||||
|
let requiredArray = required[i].split('.');
|
||||||
|
if (requiredArray[0] == major &&
|
||||||
|
requiredArray[1] == minor &&
|
||||||
|
(requiredArray[2] == point ||
|
||||||
|
(requiredArray[2] == undefined && parseInt(minor) % 2 == 0)))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
function loadExtension(dir, enabled, type) {
|
function loadExtension(dir, enabled, type) {
|
||||||
let info;
|
let info;
|
||||||
let baseErrorString = 'While loading extension from "' + dir.get_parse_name() + '": ';
|
let baseErrorString = 'While loading extension from "' + dir.get_parse_name() + '": ';
|
||||||
@ -43,8 +75,8 @@ function loadExtension(dir, enabled, type) {
|
|||||||
global.logError(baseErrorString + 'Failed to parse metadata.json: ' + e);
|
global.logError(baseErrorString + 'Failed to parse metadata.json: ' + e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let requiredProperties = ['uuid', 'name', 'description'];
|
let requiredProperties = ['uuid', 'name', 'description', 'shell-version'];
|
||||||
for (let i = 0; i < requiredProperties; i++) {
|
for (let i = 0; i < requiredProperties.length; i++) {
|
||||||
let prop = requiredProperties[i];
|
let prop = requiredProperties[i];
|
||||||
if (!meta[prop]) {
|
if (!meta[prop]) {
|
||||||
global.logError(baseErrorString + 'missing "' + prop + '" property in metadata.json');
|
global.logError(baseErrorString + 'missing "' + prop + '" property in metadata.json');
|
||||||
@ -68,6 +100,12 @@ function loadExtension(dir, enabled, type) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!versionCheck(meta['shell-version'], Config.PACKAGE_VERSION) ||
|
||||||
|
(meta['js-version'] && !versionCheck(meta['js-version'], Config.GJS_VERSION))) {
|
||||||
|
global.logError(baseErrorString + 'extension is not compatible with current GNOME Shell and/or GJS version');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
extensionMeta[meta.uuid] = meta;
|
extensionMeta[meta.uuid] = meta;
|
||||||
extensionMeta[meta.uuid].type = type;
|
extensionMeta[meta.uuid].type = type;
|
||||||
extensionMeta[meta.uuid].path = dir.get_path();
|
extensionMeta[meta.uuid].path = dir.get_path();
|
||||||
|
@ -1,693 +0,0 @@
|
|||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
||||||
|
|
||||||
const Gtk = imports.gi.Gtk;
|
|
||||||
const Lang = imports.lang;
|
|
||||||
const Signals = imports.signals;
|
|
||||||
const St = imports.gi.St;
|
|
||||||
|
|
||||||
const DND = imports.ui.dnd;
|
|
||||||
const Main = imports.ui.main;
|
|
||||||
|
|
||||||
const RedisplayFlags = { NONE: 0,
|
|
||||||
FULL: 1 << 1,
|
|
||||||
SUBSEARCH: 1 << 2,
|
|
||||||
IMMEDIATE: 1 << 3 };
|
|
||||||
|
|
||||||
// Used by subclasses
|
|
||||||
const ITEM_DISPLAY_ICON_SIZE = 48;
|
|
||||||
const PREVIEW_ICON_SIZE = 96;
|
|
||||||
|
|
||||||
/* This is a virtual class that represents a single display item containing
|
|
||||||
* a name, a description, and an icon. It allows selecting an item and represents
|
|
||||||
* it by highlighting it with a different background color than the default.
|
|
||||||
*/
|
|
||||||
function GenericDisplayItem() {
|
|
||||||
this._init();
|
|
||||||
}
|
|
||||||
|
|
||||||
GenericDisplayItem.prototype = {
|
|
||||||
_init: function() {
|
|
||||||
this.actor = new St.BoxLayout({ style_class: 'generic-display-item',
|
|
||||||
reactive: true });
|
|
||||||
|
|
||||||
this.actor._delegate = this;
|
|
||||||
this.actor.connect('button-release-event',
|
|
||||||
Lang.bind(this,
|
|
||||||
function() {
|
|
||||||
// Activates the item by launching it
|
|
||||||
this.emit('activate');
|
|
||||||
return true;
|
|
||||||
}));
|
|
||||||
|
|
||||||
let draggable = DND.makeDraggable(this.actor);
|
|
||||||
draggable.connect('drag-begin',
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
Main.overview.beginItemDrag(this);
|
|
||||||
}));
|
|
||||||
draggable.connect('drag-end',
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
Main.overview.endItemDrag(this);
|
|
||||||
}));
|
|
||||||
|
|
||||||
this._iconBin = new St.Bin();
|
|
||||||
this.actor.add(this._iconBin);
|
|
||||||
|
|
||||||
this._infoText = new St.BoxLayout({ style_class: 'generic-display-item-text',
|
|
||||||
vertical: true });
|
|
||||||
this.actor.add(this._infoText, { expand: true, y_fill: false });
|
|
||||||
|
|
||||||
this._name = null;
|
|
||||||
this._description = null;
|
|
||||||
this._icon = null;
|
|
||||||
|
|
||||||
this._initialLoadComplete = false;
|
|
||||||
|
|
||||||
// An array of details description actors that we create over time for the item.
|
|
||||||
// It is used for updating the description text inside the details actor when
|
|
||||||
// the description text for the item is updated.
|
|
||||||
this._detailsDescriptions = [];
|
|
||||||
},
|
|
||||||
|
|
||||||
//// Draggable object interface ////
|
|
||||||
|
|
||||||
// Returns a cloned texture of the item's icon to represent the item as it
|
|
||||||
// is being dragged.
|
|
||||||
getDragActor: function(stageX, stageY) {
|
|
||||||
return this._createIcon();
|
|
||||||
},
|
|
||||||
|
|
||||||
// Returns the item icon, a separate copy of which is used to
|
|
||||||
// represent the item as it is being dragged. This is used to
|
|
||||||
// determine a snap-back location for the drag icon if it does
|
|
||||||
// not get accepted by any drop target.
|
|
||||||
getDragActorSource: function() {
|
|
||||||
return this._icon;
|
|
||||||
},
|
|
||||||
|
|
||||||
//// Public methods ////
|
|
||||||
|
|
||||||
// Highlights the item by setting a different background color than the default
|
|
||||||
// if isSelected is true, removes the highlighting otherwise.
|
|
||||||
markSelected: function(isSelected) {
|
|
||||||
if (isSelected)
|
|
||||||
this.actor.add_style_pseudo_class('selected');
|
|
||||||
else
|
|
||||||
this.actor.remove_style_pseudo_class('selected');
|
|
||||||
},
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Returns an actor containing item details. In the future details can have more information than what
|
|
||||||
* the preview pop-up has and be item-type specific.
|
|
||||||
*/
|
|
||||||
createDetailsActor: function() {
|
|
||||||
|
|
||||||
let details = new St.BoxLayout({ style_class: 'generic-display-container',
|
|
||||||
vertical: true });
|
|
||||||
|
|
||||||
let mainDetails = new St.BoxLayout({ style_class: 'generic-display-container' });
|
|
||||||
|
|
||||||
// Inner box with name and description
|
|
||||||
let textDetails = new St.BoxLayout({ style_class: 'generic-display-details',
|
|
||||||
vertical: true });
|
|
||||||
let detailsName = new St.Label({ style_class: 'generic-display-details-name',
|
|
||||||
text: this._name.text });
|
|
||||||
textDetails.add(detailsName);
|
|
||||||
|
|
||||||
let detailsDescription = new St.Label({ text: this._description.text });
|
|
||||||
textDetails.add(detailsDescription);
|
|
||||||
|
|
||||||
this._detailsDescriptions.push(detailsDescription);
|
|
||||||
|
|
||||||
mainDetails.add(textDetails, { expand: true });
|
|
||||||
|
|
||||||
let previewIcon = this._createPreviewIcon();
|
|
||||||
let largePreviewIcon = this._createLargePreviewIcon();
|
|
||||||
|
|
||||||
if (previewIcon != null && largePreviewIcon == null) {
|
|
||||||
mainDetails.insert_actor(previewIcon, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
details.add(mainDetails);
|
|
||||||
|
|
||||||
if (largePreviewIcon != null) {
|
|
||||||
details.add(largePreviewIcon);
|
|
||||||
}
|
|
||||||
|
|
||||||
return details;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Destroys the item.
|
|
||||||
destroy: function() {
|
|
||||||
this.actor.destroy();
|
|
||||||
},
|
|
||||||
|
|
||||||
//// Pure virtual public methods ////
|
|
||||||
|
|
||||||
// Performes an action associated with launching this item, such as opening a file or an application.
|
|
||||||
launch: function() {
|
|
||||||
throw new Error('Not implemented');
|
|
||||||
},
|
|
||||||
|
|
||||||
//// Protected methods ////
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Creates the graphical elements for the item based on the item information.
|
|
||||||
*
|
|
||||||
* nameText - name of the item
|
|
||||||
* descriptionText - short description of the item
|
|
||||||
*/
|
|
||||||
_setItemInfo: function(nameText, descriptionText) {
|
|
||||||
if (this._name != null) {
|
|
||||||
// this also removes this._name from the parent container,
|
|
||||||
// so we don't need to call this.actor.remove_actor(this._name) directly
|
|
||||||
this._name.destroy();
|
|
||||||
this._name = null;
|
|
||||||
}
|
|
||||||
if (this._description != null) {
|
|
||||||
this._description.destroy();
|
|
||||||
this._description = null;
|
|
||||||
}
|
|
||||||
if (this._icon != null) {
|
|
||||||
// though we get the icon from elsewhere, we assume its ownership here,
|
|
||||||
// and therefore should be responsible for distroying it
|
|
||||||
this._icon.destroy();
|
|
||||||
this._icon = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._icon = this._createIcon();
|
|
||||||
this._iconBin.set_child(this._icon);
|
|
||||||
|
|
||||||
this._name = new St.Label({ style_class: 'generic-display-item-name',
|
|
||||||
text: nameText });
|
|
||||||
this._infoText.add(this._name);
|
|
||||||
|
|
||||||
this._description = new St.Label({ style_class: 'generic-display-item-description',
|
|
||||||
text: descriptionText ? descriptionText : '' });
|
|
||||||
this._infoText.add(this._description);
|
|
||||||
},
|
|
||||||
|
|
||||||
// Sets the description text for the item, including the description text
|
|
||||||
// in the details actors that have been created for the item.
|
|
||||||
_setDescriptionText: function(text) {
|
|
||||||
this._description.text = text;
|
|
||||||
for (let i = 0; i < this._detailsDescriptions.length; i++) {
|
|
||||||
let detailsDescription = this._detailsDescriptions[i];
|
|
||||||
if (detailsDescription != null) {
|
|
||||||
detailsDescription.text = text;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
//// Virtual protected methods ////
|
|
||||||
|
|
||||||
// Creates and returns a large preview icon, but only if we have a detailed image.
|
|
||||||
_createLargePreviewIcon : function() {
|
|
||||||
return null;
|
|
||||||
},
|
|
||||||
|
|
||||||
//// Pure virtual protected methods ////
|
|
||||||
|
|
||||||
// Returns an icon for the item.
|
|
||||||
_createIcon: function() {
|
|
||||||
throw new Error('Not implemented');
|
|
||||||
},
|
|
||||||
|
|
||||||
// Returns a preview icon for the item.
|
|
||||||
_createPreviewIcon: function() {
|
|
||||||
throw new Error('Not implemented');
|
|
||||||
}
|
|
||||||
|
|
||||||
//// Private methods ////
|
|
||||||
};
|
|
||||||
|
|
||||||
Signals.addSignalMethods(GenericDisplayItem.prototype);
|
|
||||||
|
|
||||||
/* This is a virtual class that represents a display containing a collection of items
|
|
||||||
* that can be filtered with a search string.
|
|
||||||
*/
|
|
||||||
function GenericDisplay() {
|
|
||||||
this._init();
|
|
||||||
}
|
|
||||||
|
|
||||||
GenericDisplay.prototype = {
|
|
||||||
_init : function() {
|
|
||||||
this._search = '';
|
|
||||||
this._expanded = false;
|
|
||||||
|
|
||||||
this.actor = new St.ScrollView({ x_fill: true,
|
|
||||||
y_fill: false,
|
|
||||||
vshadows: true });
|
|
||||||
this._list = new St.BoxLayout({ style_class: 'generic-display-container',
|
|
||||||
vertical: true });
|
|
||||||
this.actor.add_actor(this._list);
|
|
||||||
this.actor.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
|
||||||
|
|
||||||
this._pendingRedisplay = RedisplayFlags.NONE;
|
|
||||||
this.actor.connect('notify::mapped', Lang.bind(this, this._onMappedNotify));
|
|
||||||
|
|
||||||
// map<itemId, Object> where Object represents the item info
|
|
||||||
this._allItems = {};
|
|
||||||
// set<itemId>
|
|
||||||
this._matchedItems = {};
|
|
||||||
// sorted array of items matched by search
|
|
||||||
this._matchedItemKeys = [];
|
|
||||||
// map<itemId, GenericDisplayItem>
|
|
||||||
this._displayedItems = {};
|
|
||||||
this._openDetailIndex = -1;
|
|
||||||
this._selectedIndex = -1;
|
|
||||||
},
|
|
||||||
|
|
||||||
//// Public methods ////
|
|
||||||
|
|
||||||
// Sets the search string and displays the matching items.
|
|
||||||
setSearch: function(text) {
|
|
||||||
let lowertext = text.toLowerCase();
|
|
||||||
if (lowertext == this._search) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let flags = RedisplayFlags.IMMEDIATE;
|
|
||||||
if (this._search != '') {
|
|
||||||
// Because we combine search terms with OR, we have to be sure that no new term
|
|
||||||
// was introduced before deciding that the new search results will be a subset of
|
|
||||||
// the existing search results.
|
|
||||||
if (lowertext.indexOf(this._search) == 0 &&
|
|
||||||
lowertext.split(/\s+/).length == this._search.split(/\s+/).length) {
|
|
||||||
flags |= RedisplayFlags.SUBSEARCH;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this._search = lowertext;
|
|
||||||
this._redisplay(flags);
|
|
||||||
},
|
|
||||||
|
|
||||||
// Launches the item that is currently selected, closing the Overview
|
|
||||||
activateSelected: function() {
|
|
||||||
if (this._selectedIndex != -1) {
|
|
||||||
let selected = this._findDisplayedByIndex(this._selectedIndex);
|
|
||||||
selected.launch();
|
|
||||||
this.unsetSelected();
|
|
||||||
Main.overview.hide();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// Moves the selection one up. If the selection was already on the top item, it's moved
|
|
||||||
// to the bottom one. Returns true if the selection actually moved up, false if it wrapped
|
|
||||||
// around to the bottom.
|
|
||||||
selectUp: function() {
|
|
||||||
let count = this._getVisibleCount();
|
|
||||||
let selectedUp = true;
|
|
||||||
let prev = this._selectedIndex - 1;
|
|
||||||
if (this._selectedIndex <= 0) {
|
|
||||||
prev = count - 1;
|
|
||||||
selectedUp = false;
|
|
||||||
}
|
|
||||||
this._selectIndex(prev);
|
|
||||||
return selectedUp;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Moves the selection one down. If the selection was already on the bottom item, it's moved
|
|
||||||
// to the top one. Returns true if the selection actually moved down, false if it wrapped
|
|
||||||
// around to the top.
|
|
||||||
selectDown: function() {
|
|
||||||
let count = this._getVisibleCount();
|
|
||||||
let selectedDown = true;
|
|
||||||
let next = this._selectedIndex + 1;
|
|
||||||
if (this._selectedIndex == count - 1) {
|
|
||||||
next = 0;
|
|
||||||
selectedDown = false;
|
|
||||||
}
|
|
||||||
this._selectIndex(next);
|
|
||||||
return selectedDown;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Selects the first item among the displayed items.
|
|
||||||
selectFirstItem: function() {
|
|
||||||
if (this.hasItems())
|
|
||||||
this._selectIndex(0);
|
|
||||||
},
|
|
||||||
|
|
||||||
// Selects the last item among the displayed items.
|
|
||||||
selectLastItem: function() {
|
|
||||||
let count = this._getVisibleCount();
|
|
||||||
if (this.hasItems())
|
|
||||||
this._selectIndex(count - 1);
|
|
||||||
},
|
|
||||||
|
|
||||||
// Returns true if the display has some item selected.
|
|
||||||
hasSelected: function() {
|
|
||||||
return this._selectedIndex != -1;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Removes selection if some display item is selected.
|
|
||||||
unsetSelected: function() {
|
|
||||||
this._selectIndex(-1);
|
|
||||||
},
|
|
||||||
|
|
||||||
// Returns true if the display has any displayed items.
|
|
||||||
hasItems: function() {
|
|
||||||
// TODO: figure out why this._list.displayedCount is returning a
|
|
||||||
// positive number when this._mathedItems.length is 0
|
|
||||||
// This can be triggered if a search string is entered for which there are no matches.
|
|
||||||
// log('this._mathedItems.length: ' + this._matchedItems.length + ' this._list.displayedCount ' + this._list.displayedCount);
|
|
||||||
return this._matchedItemKeys.length > 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
getMatchedItemsCount: function() {
|
|
||||||
return this._matchedItemKeys.length;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Load the initial state
|
|
||||||
load: function() {
|
|
||||||
this._redisplay(RedisplayFlags.FULL);
|
|
||||||
},
|
|
||||||
|
|
||||||
// Should be called when the display is closed
|
|
||||||
resetState: function() {
|
|
||||||
this._filterReset();
|
|
||||||
this._openDetailIndex = -1;
|
|
||||||
this.actor.get_vscroll_bar().get_adjustment().value = 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Returns an actor which acts as a sidebar; this is used for
|
|
||||||
// the applications category view
|
|
||||||
getNavigationArea: function () {
|
|
||||||
return null;
|
|
||||||
},
|
|
||||||
|
|
||||||
createDetailsForIndex: function(index) {
|
|
||||||
let item = this._findDisplayedByIndex(index);
|
|
||||||
return item.createDetailsActor();
|
|
||||||
},
|
|
||||||
|
|
||||||
//// Protected methods ////
|
|
||||||
|
|
||||||
_recreateDisplayItems: function() {
|
|
||||||
this._removeAllDisplayItems();
|
|
||||||
this._setDefaultList();
|
|
||||||
for (let itemId in this._allItems) {
|
|
||||||
this._addDisplayItem(itemId);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// Creates a display item based on the information associated with itemId
|
|
||||||
// and adds it to the list of displayed items, but does not yet display it.
|
|
||||||
_addDisplayItem : function(itemId) {
|
|
||||||
if (this._displayedItems.hasOwnProperty(itemId)) {
|
|
||||||
log('Tried adding a display item for ' + itemId + ', but an item with this item id is already among displayed items.');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let itemInfo = this._allItems[itemId];
|
|
||||||
let displayItem = this._createDisplayItem(itemInfo);
|
|
||||||
|
|
||||||
displayItem.connect('activate',
|
|
||||||
Lang.bind(this,
|
|
||||||
function() {
|
|
||||||
// update the selection
|
|
||||||
this._selectIndex(this._list.get_children().indexOf(displayItem.actor));
|
|
||||||
this.activateSelected();
|
|
||||||
}));
|
|
||||||
|
|
||||||
displayItem.connect('show-details',
|
|
||||||
Lang.bind(this,
|
|
||||||
function() {
|
|
||||||
let index = this._list.get_children().indexOf(displayItem.actor);
|
|
||||||
/* Close the details pane if already open */
|
|
||||||
if (index == this._openDetailIndex) {
|
|
||||||
this._openDetailIndex = -1;
|
|
||||||
this.emit('show-details', -1);
|
|
||||||
} else {
|
|
||||||
this._openDetailIndex = index;
|
|
||||||
this.emit('show-details', index);
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
this._displayedItems[itemId] = displayItem;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Removes an item identifed by the itemId from the displayed items.
|
|
||||||
_removeDisplayItem: function(itemId) {
|
|
||||||
let children = this._list.get_children();
|
|
||||||
let count = children.length;
|
|
||||||
let displayItem = this._displayedItems[itemId];
|
|
||||||
let displayItemIndex = children.indexOf(displayItem.actor);
|
|
||||||
|
|
||||||
if (this.hasSelected() && count == 1) {
|
|
||||||
this.unsetSelected();
|
|
||||||
} else if (this.hasSelected() && displayItemIndex < this._selectedIndex) {
|
|
||||||
this.selectUp();
|
|
||||||
}
|
|
||||||
|
|
||||||
displayItem.destroy();
|
|
||||||
|
|
||||||
delete this._displayedItems[itemId];
|
|
||||||
},
|
|
||||||
|
|
||||||
// Removes all displayed items.
|
|
||||||
_removeAllDisplayItems: function() {
|
|
||||||
this.unsetSelected();
|
|
||||||
for (itemId in this._displayedItems)
|
|
||||||
this._removeDisplayItem(itemId);
|
|
||||||
},
|
|
||||||
|
|
||||||
// Return true if there's an active search or other constraint
|
|
||||||
// on the list
|
|
||||||
_filterActive: function() {
|
|
||||||
return this._search != '';
|
|
||||||
},
|
|
||||||
|
|
||||||
// Called when we are resetting state
|
|
||||||
_filterReset: function() {
|
|
||||||
this.unsetSelected();
|
|
||||||
},
|
|
||||||
|
|
||||||
_compareSearchMatch: function(a, b) {
|
|
||||||
let countA = this._matchedItems[a];
|
|
||||||
let countB = this._matchedItems[b];
|
|
||||||
if (countA > countB)
|
|
||||||
return -1;
|
|
||||||
else if (countA < countB)
|
|
||||||
return 1;
|
|
||||||
else
|
|
||||||
return this._compareItems(a, b);
|
|
||||||
},
|
|
||||||
|
|
||||||
_setMatches: function(matches) {
|
|
||||||
this._matchedItems = matches;
|
|
||||||
this._matchedItemKeys = [];
|
|
||||||
for (let itemId in this._matchedItems) {
|
|
||||||
this._matchedItemKeys.push(itemId);
|
|
||||||
}
|
|
||||||
this._matchedItemKeys.sort(Lang.bind(this, this._compareSearchMatch));
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* _redisplaySubSearch:
|
|
||||||
* A somewhat more optimized function called when we know
|
|
||||||
* that we're going to be displaying a subset of the items
|
|
||||||
* we already had, in the same order. In that case, we can
|
|
||||||
* just hide the actors that shouldn't be shown.
|
|
||||||
*/
|
|
||||||
_redisplaySubSearch: function() {
|
|
||||||
let matches = this._getSearchMatchedItems(true);
|
|
||||||
|
|
||||||
// Just hide all from the old set,
|
|
||||||
// we'll show the ones we want below
|
|
||||||
for (let itemId in this._displayedItems) {
|
|
||||||
let item = this._displayedItems[itemId];
|
|
||||||
item.actor.hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
this._setMatches(matches);
|
|
||||||
|
|
||||||
for (let itemId in matches) {
|
|
||||||
let item = this._displayedItems[itemId];
|
|
||||||
item.actor.show();
|
|
||||||
}
|
|
||||||
this._list.queue_relayout();
|
|
||||||
},
|
|
||||||
|
|
||||||
_redisplayReordering: function() {
|
|
||||||
if (!this._filterActive()) {
|
|
||||||
this._setDefaultList();
|
|
||||||
} else {
|
|
||||||
this._setMatches(this._getSearchMatchedItems(false));
|
|
||||||
}
|
|
||||||
this._list.remove_all();
|
|
||||||
for (let i = 0; i < this._matchedItemKeys.length; i++) {
|
|
||||||
let itemId = this._matchedItemKeys[i];
|
|
||||||
let item = this._displayedItems[itemId];
|
|
||||||
item.actor.show();
|
|
||||||
this._list.add_actor(item.actor);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Updates the displayed items, applying the search string if one exists.
|
|
||||||
* @flags: Flags controlling redisplay behavior as follows:
|
|
||||||
* SUBSEARCH - Indicates that the current _search is a superstring of the previous
|
|
||||||
* one, which implies we only need to re-search through previous results.
|
|
||||||
* FULL - Indicates that we need recreate all displayed items.
|
|
||||||
* IMMEDIATE - Do the full redisplay even if we're not mapped. This is useful
|
|
||||||
* if you want to get the number of matched items and show/hide a section based on
|
|
||||||
* that number.
|
|
||||||
*/
|
|
||||||
_redisplay: function(flags) {
|
|
||||||
let immediate = (flags & RedisplayFlags.IMMEDIATE) != 0;
|
|
||||||
if (!immediate && !this.actor.mapped) {
|
|
||||||
this._pendingRedisplay |= flags;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let isSubSearch = (flags & RedisplayFlags.SUBSEARCH) != 0;
|
|
||||||
let fullReload = (flags & RedisplayFlags.FULL) != 0;
|
|
||||||
|
|
||||||
let hadSelected = this.hasSelected();
|
|
||||||
this.unsetSelected();
|
|
||||||
|
|
||||||
if (!this._initialLoadComplete)
|
|
||||||
fullReload = true;
|
|
||||||
|
|
||||||
if (!this._refreshCache())
|
|
||||||
fullReload = true;
|
|
||||||
|
|
||||||
if (fullReload) {
|
|
||||||
this._recreateDisplayItems();
|
|
||||||
this._initialLoadComplete = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isSubSearch) {
|
|
||||||
this._redisplaySubSearch();
|
|
||||||
} else {
|
|
||||||
this._redisplayReordering();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hadSelected) {
|
|
||||||
this._selectedIndex = -1;
|
|
||||||
this.selectFirstItem();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.emit('redisplayed');
|
|
||||||
},
|
|
||||||
|
|
||||||
//// Pure virtual protected methods ////
|
|
||||||
|
|
||||||
// Performs the steps needed to have the latest information about the items.
|
|
||||||
// Implementation should return %true if we are up to date, and %false
|
|
||||||
// if a full reload occurred.
|
|
||||||
_refreshCache: function() {
|
|
||||||
throw new Error('Not implemented');
|
|
||||||
},
|
|
||||||
|
|
||||||
// Sets the list of the displayed items based on the default sorting order.
|
|
||||||
// The default sorting order is specific to each implementing class.
|
|
||||||
_setDefaultList: function() {
|
|
||||||
throw new Error('Not implemented');
|
|
||||||
},
|
|
||||||
|
|
||||||
// Compares items associated with the item ids based on the order in which the
|
|
||||||
// items should be displayed.
|
|
||||||
// Intended to be used as a compareFunction for array.sort().
|
|
||||||
// Returns an integer value indicating the result of the comparison.
|
|
||||||
_compareItems: function(itemIdA, itemIdB) {
|
|
||||||
throw new Error('Not implemented');
|
|
||||||
},
|
|
||||||
|
|
||||||
// Checks if the item info can be a match for the search string.
|
|
||||||
// Returns a boolean flag indicating if that's the case.
|
|
||||||
_isInfoMatching: function(itemInfo, search) {
|
|
||||||
throw new Error('Not implemented');
|
|
||||||
},
|
|
||||||
|
|
||||||
// Creates a display item based on itemInfo.
|
|
||||||
_createDisplayItem: function(itemInfo) {
|
|
||||||
throw new Error('Not implemented');
|
|
||||||
},
|
|
||||||
|
|
||||||
//// Private methods ////
|
|
||||||
|
|
||||||
_getItemSearchScore: function(itemId, terms) {
|
|
||||||
let item = this._allItems[itemId];
|
|
||||||
let score = 0;
|
|
||||||
for (let i = 0; i < terms.length; i++) {
|
|
||||||
let term = terms[i];
|
|
||||||
if (this._isInfoMatching(item, term)) {
|
|
||||||
score++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return score;
|
|
||||||
},
|
|
||||||
|
|
||||||
_getSearchMatchedItems: function(isSubSearch) {
|
|
||||||
// Break the search up into terms, and search for each
|
|
||||||
// individual term. Keep track of the number of terms
|
|
||||||
// each item matched.
|
|
||||||
let terms = this._search.split(/\s+/);
|
|
||||||
let matchScores = {};
|
|
||||||
|
|
||||||
if (isSubSearch) {
|
|
||||||
for (let i = 0; i < this._matchedItemKeys.length; i++) {
|
|
||||||
let itemId = this._matchedItemKeys[i];
|
|
||||||
let score = this._getItemSearchScore(itemId, terms);
|
|
||||||
if (score > 0)
|
|
||||||
matchScores[itemId] = score;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (let itemId in this._displayedItems) {
|
|
||||||
let score = this._getItemSearchScore(itemId, terms);
|
|
||||||
if (score > 0)
|
|
||||||
matchScores[itemId] = score;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return matchScores;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Returns a display item based on its index in the ordering of the
|
|
||||||
// display children.
|
|
||||||
_findDisplayedByIndex: function(index) {
|
|
||||||
let actor = this._list.get_children()[index];
|
|
||||||
return this._findDisplayedByActor(actor);
|
|
||||||
},
|
|
||||||
|
|
||||||
// Returns a display item based on the actor that represents it in
|
|
||||||
// the display.
|
|
||||||
_findDisplayedByActor: function(actor) {
|
|
||||||
for (itemId in this._displayedItems) {
|
|
||||||
let item = this._displayedItems[itemId];
|
|
||||||
if (item.actor == actor) {
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Selects (e.g. highlights) a display item at the provided index,
|
|
||||||
// updates this.selectedItemDetails actor, and emits 'selected' signal.
|
|
||||||
_selectIndex: function(index) {
|
|
||||||
// Cleanup from the previous item
|
|
||||||
if (this.hasSelected()) {
|
|
||||||
this._findDisplayedByIndex(this._selectedIndex).markSelected(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
this._selectedIndex = index;
|
|
||||||
if (index < 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Mark the new item as selected and create its details pane
|
|
||||||
let item = this._findDisplayedByIndex(index);
|
|
||||||
item.markSelected(true);
|
|
||||||
this.emit('selected');
|
|
||||||
},
|
|
||||||
|
|
||||||
_getVisibleCount: function() {
|
|
||||||
return this._list.get_n_children();
|
|
||||||
},
|
|
||||||
|
|
||||||
_onMappedNotify: function () {
|
|
||||||
let mapped = this.actor.mapped;
|
|
||||||
if (mapped && this._pendingRedisplay > RedisplayFlags.NONE)
|
|
||||||
this._redisplay(this._pendingRedisplay);
|
|
||||||
|
|
||||||
this._pendingRedisplay = RedisplayFlags.NONE;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Signals.addSignalMethods(GenericDisplay.prototype);
|
|
@ -398,6 +398,9 @@ Inspector.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
_allocate: function(actor, box, flags) {
|
_allocate: function(actor, box, flags) {
|
||||||
|
if (!this._eventHandler)
|
||||||
|
return;
|
||||||
|
|
||||||
let primary = global.get_primary_monitor();
|
let primary = global.get_primary_monitor();
|
||||||
|
|
||||||
let [minWidth, minHeight, natWidth, natHeight] =
|
let [minWidth, minHeight, natWidth, natHeight] =
|
||||||
@ -415,6 +418,7 @@ Inspector.prototype = {
|
|||||||
Clutter.ungrab_pointer(this._eventHandler);
|
Clutter.ungrab_pointer(this._eventHandler);
|
||||||
Clutter.ungrab_keyboard(this._eventHandler);
|
Clutter.ungrab_keyboard(this._eventHandler);
|
||||||
this._eventHandler.destroy();
|
this._eventHandler.destroy();
|
||||||
|
this._eventHandler = null;
|
||||||
this.emit('closed');
|
this.emit('closed');
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -663,7 +667,7 @@ LookingGlass.prototype = {
|
|||||||
style_class: 'lg-dialog',
|
style_class: 'lg-dialog',
|
||||||
vertical: true,
|
vertical: true,
|
||||||
visible: false });
|
visible: false });
|
||||||
|
this.actor.connect('key-press-event', Lang.bind(this, this._globalKeyPressEvent));
|
||||||
|
|
||||||
this._interfaceSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
|
this._interfaceSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
|
||||||
this._interfaceSettings.connect('changed::monospace-font-name',
|
this._interfaceSettings.connect('changed::monospace-font-name',
|
||||||
@ -924,20 +928,15 @@ LookingGlass.prototype = {
|
|||||||
if (this._open)
|
if (this._open)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!Main.pushModal(this.actor))
|
if (!Main.pushModal(this._entry))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._keyPressEventId = global.stage.connect('key-press-event',
|
|
||||||
Lang.bind(this, this._globalKeyPressEvent));
|
|
||||||
|
|
||||||
this.actor.show();
|
this.actor.show();
|
||||||
this.actor.lower(Main.chrome.actor);
|
this.actor.lower(Main.chrome.actor);
|
||||||
this._open = true;
|
this._open = true;
|
||||||
|
|
||||||
Tweener.removeTweens(this.actor);
|
Tweener.removeTweens(this.actor);
|
||||||
|
|
||||||
global.stage.set_key_focus(this._entry);
|
|
||||||
|
|
||||||
// We inverse compensate for the slow-down so you can change the factor
|
// We inverse compensate for the slow-down so you can change the factor
|
||||||
// through LookingGlass without long waits.
|
// through LookingGlass without long waits.
|
||||||
Tweener.addTween(this.actor, { time: 0.5 / St.get_slow_down_factor(),
|
Tweener.addTween(this.actor, { time: 0.5 / St.get_slow_down_factor(),
|
||||||
@ -950,9 +949,6 @@ LookingGlass.prototype = {
|
|||||||
if (!this._open)
|
if (!this._open)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (this._keyPressEventId)
|
|
||||||
global.stage.disconnect(this._keyPressEventId);
|
|
||||||
|
|
||||||
this._objInspector.actor.hide();
|
this._objInspector.actor.hide();
|
||||||
|
|
||||||
this._historyNavIndex = -1;
|
this._historyNavIndex = -1;
|
||||||
@ -965,7 +961,7 @@ LookingGlass.prototype = {
|
|||||||
this._borderPaintTarget = null;
|
this._borderPaintTarget = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Main.popModal(this.actor);
|
Main.popModal(this._entry);
|
||||||
|
|
||||||
Tweener.addTween(this.actor, { time: 0.5 / St.get_slow_down_factor(),
|
Tweener.addTween(this.actor, { time: 0.5 / St.get_slow_down_factor(),
|
||||||
transition: 'easeOutQuad',
|
transition: 'easeOutQuad',
|
||||||
|
127
js/ui/main.js
127
js/ui/main.js
@ -17,8 +17,12 @@ const Mainloop = imports.mainloop;
|
|||||||
const Meta = imports.gi.Meta;
|
const Meta = imports.gi.Meta;
|
||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
|
const Gettext = imports.gettext.domain('gnome-shell');
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
const Chrome = imports.ui.chrome;
|
const Chrome = imports.ui.chrome;
|
||||||
|
const CtrlAltTab = imports.ui.ctrlAltTab;
|
||||||
|
const EndSessionDialog = imports.ui.endSessionDialog;
|
||||||
const Environment = imports.ui.environment;
|
const Environment = imports.ui.environment;
|
||||||
const ExtensionSystem = imports.ui.extensionSystem;
|
const ExtensionSystem = imports.ui.extensionSystem;
|
||||||
const MessageTray = imports.ui.messageTray;
|
const MessageTray = imports.ui.messageTray;
|
||||||
@ -34,7 +38,9 @@ const ShellDBus = imports.ui.shellDBus;
|
|||||||
const TelepathyClient = imports.ui.telepathyClient;
|
const TelepathyClient = imports.ui.telepathyClient;
|
||||||
const WindowManager = imports.ui.windowManager;
|
const WindowManager = imports.ui.windowManager;
|
||||||
const Magnifier = imports.ui.magnifier;
|
const Magnifier = imports.ui.magnifier;
|
||||||
|
const XdndHandler = imports.ui.xdndHandler;
|
||||||
const StatusIconDispatcher = imports.ui.statusIconDispatcher;
|
const StatusIconDispatcher = imports.ui.statusIconDispatcher;
|
||||||
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
const DEFAULT_BACKGROUND_COLOR = new Clutter.Color();
|
const DEFAULT_BACKGROUND_COLOR = new Clutter.Color();
|
||||||
DEFAULT_BACKGROUND_COLOR.from_pixel(0x2266bbff);
|
DEFAULT_BACKGROUND_COLOR.from_pixel(0x2266bbff);
|
||||||
@ -50,12 +56,14 @@ let messageTray = null;
|
|||||||
let notificationDaemon = null;
|
let notificationDaemon = null;
|
||||||
let windowAttentionHandler = null;
|
let windowAttentionHandler = null;
|
||||||
let telepathyClient = null;
|
let telepathyClient = null;
|
||||||
|
let ctrlAltTabManager = null;
|
||||||
let recorder = null;
|
let recorder = null;
|
||||||
let shellDBusService = null;
|
let shellDBusService = null;
|
||||||
let modalCount = 0;
|
let modalCount = 0;
|
||||||
let modalActorFocusStack = [];
|
let modalActorFocusStack = [];
|
||||||
let uiGroup = null;
|
let uiGroup = null;
|
||||||
let magnifier = null;
|
let magnifier = null;
|
||||||
|
let xdndHandler = null;
|
||||||
let statusIconDispatcher = null;
|
let statusIconDispatcher = null;
|
||||||
let _errorLogStack = [];
|
let _errorLogStack = [];
|
||||||
let _startDate;
|
let _startDate;
|
||||||
@ -103,10 +111,7 @@ function start() {
|
|||||||
global.stage.color = DEFAULT_BACKGROUND_COLOR;
|
global.stage.color = DEFAULT_BACKGROUND_COLOR;
|
||||||
global.stage.no_clear_hint = true;
|
global.stage.no_clear_hint = true;
|
||||||
|
|
||||||
let themeContext = St.ThemeContext.get_for_stage (global.stage);
|
loadTheme();
|
||||||
let stylesheetPath = global.datadir + '/theme/gnome-shell.css';
|
|
||||||
let theme = new St.Theme ({ application_stylesheet: stylesheetPath });
|
|
||||||
themeContext.set_theme (theme);
|
|
||||||
|
|
||||||
let shellwm = global.window_manager;
|
let shellwm = global.window_manager;
|
||||||
shellwm.takeover_keybinding('panel_main_menu');
|
shellwm.takeover_keybinding('panel_main_menu');
|
||||||
@ -125,6 +130,7 @@ function start() {
|
|||||||
global.stage.add_actor(uiGroup);
|
global.stage.add_actor(uiGroup);
|
||||||
|
|
||||||
placesManager = new PlaceDisplay.PlacesManager();
|
placesManager = new PlaceDisplay.PlacesManager();
|
||||||
|
xdndHandler = new XdndHandler.XdndHandler();
|
||||||
overview = new Overview.Overview();
|
overview = new Overview.Overview();
|
||||||
chrome = new Chrome.Chrome();
|
chrome = new Chrome.Chrome();
|
||||||
magnifier = new Magnifier.Magnifier();
|
magnifier = new Magnifier.Magnifier();
|
||||||
@ -137,6 +143,9 @@ function start() {
|
|||||||
telepathyClient = new TelepathyClient.Client();
|
telepathyClient = new TelepathyClient.Client();
|
||||||
panel.startStatusArea();
|
panel.startStatusArea();
|
||||||
|
|
||||||
|
ctrlAltTabManager = new CtrlAltTab.CtrlAltTabManager();
|
||||||
|
ctrlAltTabManager.addGroup(panel.actor, _("Panel"), 'gnome-panel');
|
||||||
|
|
||||||
_startDate = new Date();
|
_startDate = new Date();
|
||||||
|
|
||||||
let recorderSettings = new Gio.Settings({ schema: 'org.gnome.shell.recorder' });
|
let recorderSettings = new Gio.Settings({ schema: 'org.gnome.shell.recorder' });
|
||||||
@ -163,6 +172,10 @@ function start() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Provide the bus object for gnome-session to
|
||||||
|
// initiate logouts.
|
||||||
|
EndSessionDialog.init();
|
||||||
|
|
||||||
global.gdk_screen.connect('monitors-changed', _relayout);
|
global.gdk_screen.connect('monitors-changed', _relayout);
|
||||||
|
|
||||||
ExtensionSystem.init();
|
ExtensionSystem.init();
|
||||||
@ -191,6 +204,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:
|
* _log:
|
||||||
* @category: string message type ('info', 'error')
|
* @category: string message type ('info', 'error')
|
||||||
@ -277,47 +302,42 @@ function _removeUnusedWorkspaces() {
|
|||||||
// are disabled with a global grab. (When there is a global grab, then
|
// 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
|
// all key events will be delivered to the stage, so ::captured-event
|
||||||
// on the stage can be used for global keybindings.)
|
// 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) {
|
function _globalKeyPressHandler(actor, event) {
|
||||||
if (modalCount == 0)
|
if (modalCount == 0)
|
||||||
return false;
|
return false;
|
||||||
if (event.type() != Clutter.EventType.KEY_RELEASE)
|
if (event.type() != Clutter.EventType.KEY_PRESS)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
let symbol = event.get_key_symbol();
|
let symbol = event.get_key_symbol();
|
||||||
let keyCode = event.get_key_code();
|
let keyCode = event.get_key_code();
|
||||||
let modifierState = Shell.get_event_state(event);
|
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();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Whitelist some of the Metacity actions
|
|
||||||
let display = global.screen.get_display();
|
let display = global.screen.get_display();
|
||||||
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
|
|
||||||
|
|
||||||
// This relies on the fact that Clutter.ModifierType is the same as Gdk.ModifierType
|
// This relies on the fact that Clutter.ModifierType is the same as Gdk.ModifierType
|
||||||
let action = display.get_keybinding_action(keyCode, modifierState);
|
let action = display.get_keybinding_action(keyCode, modifierState);
|
||||||
switch (action) {
|
|
||||||
case Meta.KeyBindingAction.COMMAND_SCREENSHOT:
|
// 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 gconf = GConf.Client.get_default();
|
||||||
let command = gconf.get_string('/apps/metacity/keybinding_commands/command_screenshot');
|
let command = gconf.get_string('/apps/metacity/keybinding_commands/command_screenshot');
|
||||||
if (command != null && command != '') {
|
if (command != null && command != '')
|
||||||
let [ok, len, args] = GLib.shell_parse_argv(command);
|
Util.spawnCommandLine(command);
|
||||||
let p = new Shell.Process({'args' : args});
|
|
||||||
p.run();
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (action) {
|
||||||
case Meta.KeyBindingAction.WORKSPACE_LEFT:
|
case Meta.KeyBindingAction.WORKSPACE_LEFT:
|
||||||
wm.actionMoveWorkspaceLeft();
|
wm.actionMoveWorkspaceLeft();
|
||||||
return true;
|
return true;
|
||||||
@ -328,6 +348,12 @@ function _globalKeyPressHandler(actor, event) {
|
|||||||
case Meta.KeyBindingAction.COMMAND_2:
|
case Meta.KeyBindingAction.COMMAND_2:
|
||||||
getRunDialog().open();
|
getRunDialog().open();
|
||||||
return true;
|
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;
|
return false;
|
||||||
@ -346,21 +372,30 @@ function _findModal(actor) {
|
|||||||
/**
|
/**
|
||||||
* pushModal:
|
* pushModal:
|
||||||
* @actor: #ClutterActor which will be given keyboard focus
|
* @actor: #ClutterActor which will be given keyboard focus
|
||||||
|
* @timestamp: optional timestamp
|
||||||
*
|
*
|
||||||
* Ensure we are in a mode where all keyboard and mouse input goes to
|
* 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 stage, and focus @actor. Multiple calls to this function act in
|
||||||
* the effect will be undone when an equal number of popModal() invocations
|
* a stacking fashion; the effect will be undone when an equal number
|
||||||
* have been made.
|
* of popModal() invocations have been made.
|
||||||
*
|
*
|
||||||
* Next, record the current Clutter keyboard focus on a stack. If the modal stack
|
* Next, record the current Clutter keyboard focus on a stack. If the
|
||||||
* returns to this actor, reset the focus to the actor which was focused
|
* modal stack returns to this actor, reset the focus to the actor
|
||||||
* at the time pushModal() was invoked.
|
* which was focused at the time pushModal() was invoked.
|
||||||
|
*
|
||||||
|
* @timestamp is optionally used to associate the call with a specific user
|
||||||
|
* initiated event. If not provided then the value of
|
||||||
|
* global.get_current_time() is assumed.
|
||||||
*
|
*
|
||||||
* Returns: true iff we successfully acquired a grab or already had one
|
* Returns: true iff we successfully acquired a grab or already had one
|
||||||
*/
|
*/
|
||||||
function pushModal(actor) {
|
function pushModal(actor, timestamp) {
|
||||||
|
|
||||||
|
if (timestamp == undefined)
|
||||||
|
timestamp = global.get_current_time();
|
||||||
|
|
||||||
if (modalCount == 0) {
|
if (modalCount == 0) {
|
||||||
if (!global.begin_modal(global.get_current_time())) {
|
if (!global.begin_modal(timestamp)) {
|
||||||
log('pushModal: invocation of begin_modal failed');
|
log('pushModal: invocation of begin_modal failed');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -384,19 +419,28 @@ function pushModal(actor) {
|
|||||||
}
|
}
|
||||||
modalActorFocusStack.push([actor, curFocus]);
|
modalActorFocusStack.push([actor, curFocus]);
|
||||||
|
|
||||||
global.stage.set_key_focus(null);
|
global.stage.set_key_focus(actor);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* popModal:
|
* popModal:
|
||||||
* @actor: #ClutterActor passed to original invocation of pushModal().
|
* @actor: #ClutterActor passed to original invocation of pushModal().
|
||||||
|
* @timestamp: optional timestamp
|
||||||
*
|
*
|
||||||
* Reverse the effect of pushModal(). If this invocation is undoing
|
* Reverse the effect of pushModal(). If this invocation is undoing
|
||||||
* the topmost invocation, then the focus will be restored to the
|
* the topmost invocation, then the focus will be restored to the
|
||||||
* previous focus at the time when pushModal() was invoked.
|
* previous focus at the time when pushModal() was invoked.
|
||||||
|
*
|
||||||
|
* @timestamp is optionally used to associate the call with a specific user
|
||||||
|
* initiated event. If not provided then the value of
|
||||||
|
* global.get_current_time() is assumed.
|
||||||
*/
|
*/
|
||||||
function popModal(actor) {
|
function popModal(actor, timestamp) {
|
||||||
|
|
||||||
|
if (timestamp == undefined)
|
||||||
|
timestamp = global.get_current_time();
|
||||||
|
|
||||||
modalCount -= 1;
|
modalCount -= 1;
|
||||||
let focusIndex = _findModal(actor);
|
let focusIndex = _findModal(actor);
|
||||||
if (focusIndex >= 0) {
|
if (focusIndex >= 0) {
|
||||||
@ -414,7 +458,8 @@ function popModal(actor) {
|
|||||||
if (modalCount > 0)
|
if (modalCount > 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
global.end_modal(global.get_current_time());
|
global.stage.set_key_focus(null);
|
||||||
|
global.end_modal(timestamp);
|
||||||
global.set_stage_input_mode(Shell.StageInputMode.NORMAL);
|
global.set_stage_input_mode(Shell.StageInputMode.NORMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,10 @@ const Tweener = imports.ui.tweener;
|
|||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const BoxPointer = imports.ui.boxpointer;
|
const BoxPointer = imports.ui.boxpointer;
|
||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
const Utils = imports.misc.utils;
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain('gnome-shell');
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
const ANIMATION_TIME = 0.2;
|
const ANIMATION_TIME = 0.2;
|
||||||
const NOTIFICATION_TIMEOUT = 4;
|
const NOTIFICATION_TIMEOUT = 4;
|
||||||
@ -38,6 +41,17 @@ const State = {
|
|||||||
HIDING: 3
|
HIDING: 3
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 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) {
|
function _fixMarkup(text, allowMarkup) {
|
||||||
if (allowMarkup) {
|
if (allowMarkup) {
|
||||||
// Support &, ", ', < and >, escape all other
|
// Support &, ", ', < and >, escape all other
|
||||||
@ -92,8 +106,7 @@ URLHighlighter.prototype = {
|
|||||||
return true;
|
return true;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// TODO: remove this after gnome 3 release
|
// TODO: remove this after gnome 3 release
|
||||||
let p = new Shell.Process({ 'args' : ['gvfs-open', url] });
|
Util.spawn(['gvfs-open', url]);
|
||||||
p.run();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -124,13 +137,13 @@ URLHighlighter.prototype = {
|
|||||||
|
|
||||||
this.actor.clutter_text.set_markup(text);
|
this.actor.clutter_text.set_markup(text);
|
||||||
/* clutter_text.text contain text without markup */
|
/* clutter_text.text contain text without markup */
|
||||||
this._urls = Utils.findUrls(this.actor.clutter_text.text);
|
this._urls = Util.findUrls(this.actor.clutter_text.text);
|
||||||
this._highlightUrls();
|
this._highlightUrls();
|
||||||
},
|
},
|
||||||
|
|
||||||
_highlightUrls: function() {
|
_highlightUrls: function() {
|
||||||
// text here contain markup
|
// text here contain markup
|
||||||
let urls = Utils.findUrls(this._text);
|
let urls = Util.findUrls(this._text);
|
||||||
let markup = '';
|
let markup = '';
|
||||||
let pos = 0;
|
let pos = 0;
|
||||||
for (let i = 0; i < urls.length; i++) {
|
for (let i = 0; i < urls.length; i++) {
|
||||||
@ -225,7 +238,7 @@ function Notification(source, title, banner, params) {
|
|||||||
Notification.prototype = {
|
Notification.prototype = {
|
||||||
_init: function(source, title, banner, params) {
|
_init: function(source, title, banner, params) {
|
||||||
this.source = source;
|
this.source = source;
|
||||||
this.urgent = false;
|
this.urgency = Urgency.NORMAL;
|
||||||
this.resident = false;
|
this.resident = false;
|
||||||
// 'transient' is a reserved keyword in JS, so we have to use an alternate variable name
|
// 'transient' is a reserved keyword in JS, so we have to use an alternate variable name
|
||||||
this.isTransient = false;
|
this.isTransient = false;
|
||||||
@ -245,7 +258,6 @@ Notification.prototype = {
|
|||||||
this._prevFocusedWindow = null;
|
this._prevFocusedWindow = null;
|
||||||
this._prevKeyFocusActor = null;
|
this._prevKeyFocusActor = null;
|
||||||
|
|
||||||
this._focusWindowChangedId = 0;
|
|
||||||
this._focusActorChangedId = 0;
|
this._focusActorChangedId = 0;
|
||||||
this._stageInputModeChangedId = 0;
|
this._stageInputModeChangedId = 0;
|
||||||
this._capturedEventId = 0;
|
this._capturedEventId = 0;
|
||||||
@ -491,8 +503,8 @@ Notification.prototype = {
|
|||||||
this._updated();
|
this._updated();
|
||||||
},
|
},
|
||||||
|
|
||||||
setUrgent: function(urgent) {
|
setUrgency: function(urgency) {
|
||||||
this.urgent = urgent;
|
this.urgency = urgency;
|
||||||
},
|
},
|
||||||
|
|
||||||
setResident: function(resident) {
|
setResident: function(resident) {
|
||||||
@ -624,29 +636,16 @@ Notification.prototype = {
|
|||||||
let metaDisplay = global.screen.get_display();
|
let metaDisplay = global.screen.get_display();
|
||||||
|
|
||||||
this._prevFocusedWindow = metaDisplay.focus_window;
|
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
|
if (!Main.overview.visible)
|
||||||
// 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 {
|
|
||||||
global.set_stage_input_mode(Shell.StageInputMode.FOCUSED);
|
global.set_stage_input_mode(Shell.StageInputMode.FOCUSED);
|
||||||
|
|
||||||
this._focusWindowChangedId = metaDisplay.connect('notify::focus-window', Lang.bind(this, this._focusWindowChanged));
|
// 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._stageInputModeChangedId = global.connect('notify::stage-input-mode', Lang.bind(this, this._stageInputModeChanged));
|
this._stageInputModeChangedId = global.connect('notify::stage-input-mode', Lang.bind(this, this._stageInputModeChanged));
|
||||||
|
|
||||||
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._focusActorChangedId = global.stage.connect('notify::key-focus', Lang.bind(this, this._focusActorChanged));
|
this._focusActorChangedId = global.stage.connect('notify::key-focus', Lang.bind(this, this._focusActorChanged));
|
||||||
|
|
||||||
this._hasFocus = true;
|
this._hasFocus = true;
|
||||||
@ -654,19 +653,6 @@ Notification.prototype = {
|
|||||||
Main.messageTray.lock();
|
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() {
|
_focusActorChanged: function() {
|
||||||
let focusedActor = global.stage.get_key_focus();
|
let focusedActor = global.stage.get_key_focus();
|
||||||
if (!focusedActor || !this.actor.contains(focusedActor)) {
|
if (!focusedActor || !this.actor.contains(focusedActor)) {
|
||||||
@ -676,15 +662,6 @@ Notification.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
_stageInputModeChanged: function() {
|
_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();
|
this.ungrabFocus();
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -729,24 +706,11 @@ Notification.prototype = {
|
|||||||
this.destroy();
|
this.destroy();
|
||||||
},
|
},
|
||||||
|
|
||||||
_onKeyPress: function(actor, event) {
|
|
||||||
let symbol = event.get_key_symbol();
|
|
||||||
if (symbol == Clutter.Escape) {
|
|
||||||
Main.messageTray.escapeTray();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
|
|
||||||
ungrabFocus: function() {
|
ungrabFocus: function() {
|
||||||
if (!this._hasFocus)
|
if (!this._hasFocus)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
let metaDisplay = global.screen.get_display();
|
let metaDisplay = global.screen.get_display();
|
||||||
if (this._focusWindowChangedId > 0) {
|
|
||||||
metaDisplay.disconnect(this._focusWindowChangedId);
|
|
||||||
this._focusWindowChangedId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._focusActorChangedId > 0) {
|
if (this._focusActorChangedId > 0) {
|
||||||
global.stage.disconnect(this._focusActorChangedId);
|
global.stage.disconnect(this._focusActorChangedId);
|
||||||
@ -759,20 +723,14 @@ Notification.prototype = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this._capturedEventId > 0) {
|
if (this._capturedEventId > 0) {
|
||||||
Main.popModal(this.actor);
|
|
||||||
global.stage.disconnect(this._capturedEventId);
|
global.stage.disconnect(this._capturedEventId);
|
||||||
this._capturedEventId = 0;
|
this._capturedEventId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._keyPressId > 0) {
|
|
||||||
global.stage.disconnect(this._keyPressId);
|
|
||||||
this._keyPressId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._hasFocus = false;
|
this._hasFocus = false;
|
||||||
Main.messageTray.unlock();
|
Main.messageTray.unlock();
|
||||||
|
|
||||||
if (this._prevFocusedWindow) {
|
if (this._prevFocusedWindow && !metaDisplay.focus_window) {
|
||||||
metaDisplay.set_input_focus_window(this._prevFocusedWindow, false, global.get_current_time());
|
metaDisplay.set_input_focus_window(this._prevFocusedWindow, false, global.get_current_time());
|
||||||
this._prevFocusedWindow = null;
|
this._prevFocusedWindow = null;
|
||||||
}
|
}
|
||||||
@ -951,7 +909,7 @@ MessageTray.prototype = {
|
|||||||
this._notification = null;
|
this._notification = null;
|
||||||
this._notificationClickedId = 0;
|
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.actor.add_actor(this._summaryBin);
|
||||||
this._summary = new St.BoxLayout({ name: 'summary-mode',
|
this._summary = new St.BoxLayout({ name: 'summary-mode',
|
||||||
reactive: true,
|
reactive: true,
|
||||||
@ -1043,9 +1001,8 @@ MessageTray.prototype = {
|
|||||||
this.actor.width = primary.width;
|
this.actor.width = primary.width;
|
||||||
this._notificationBin.x = 0;
|
this._notificationBin.x = 0;
|
||||||
this._notificationBin.width = primary.width;
|
this._notificationBin.width = primary.width;
|
||||||
|
this._summaryBin.x = 0;
|
||||||
// These work because of their anchor_gravity
|
this._summaryBin.width = primary.width;
|
||||||
this._summaryBin.x = primary.width;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
contains: function(source) {
|
contains: function(source) {
|
||||||
@ -1212,13 +1169,11 @@ MessageTray.prototype = {
|
|||||||
} else if (this._notificationQueue.indexOf(notification) < 0) {
|
} else if (this._notificationQueue.indexOf(notification) < 0) {
|
||||||
notification.connect('destroy',
|
notification.connect('destroy',
|
||||||
Lang.bind(this, this.removeNotification));
|
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();
|
this._updateState();
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -1417,7 +1372,7 @@ MessageTray.prototype = {
|
|||||||
let notificationsPending = this._notificationQueue.length > 0;
|
let notificationsPending = this._notificationQueue.length > 0;
|
||||||
let notificationPinned = this._pointerInTray && !this._pointerInSummary && !this._notificationRemoved;
|
let notificationPinned = this._pointerInTray && !this._pointerInSummary && !this._notificationRemoved;
|
||||||
let notificationExpanded = this._notificationBin.y < 0;
|
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 (this._notificationState == State.HIDDEN) {
|
||||||
if (notificationsPending)
|
if (notificationsPending)
|
||||||
@ -1545,26 +1500,44 @@ MessageTray.prototype = {
|
|||||||
|
|
||||||
_updateShowingNotification: function() {
|
_updateShowingNotification: function() {
|
||||||
Tweener.removeTweens(this._notificationBin);
|
Tweener.removeTweens(this._notificationBin);
|
||||||
this._tween(this._notificationBin, '_notificationState', State.SHOWN,
|
|
||||||
{ y: 0,
|
// We auto-expand notifications with CRITICAL urgency.
|
||||||
opacity: 255,
|
// We use Tweener.removeTweens() to remove a tween that was hiding the notification we are
|
||||||
|
// updating, in case that notification was in the process of being hidden. However,
|
||||||
|
// Tweener.removeTweens() would also remove a tween that was updating the position of the
|
||||||
|
// notification we are updating, in case that notification was already expanded and its height
|
||||||
|
// changed. Therefore we need to call this._expandNotification() for expanded notifications
|
||||||
|
// to make sure their position is updated.
|
||||||
|
if (this._notification.urgency == Urgency.CRITICAL || this._notification.expanded)
|
||||||
|
this._expandNotification(true);
|
||||||
|
|
||||||
|
// We tween all notifications to full opacity. This ensures that both new notifications and
|
||||||
|
// notifications that might have been in the process of hiding get full opacity.
|
||||||
|
//
|
||||||
|
// We tween any notification showing in the banner mode to banner height (this._notificationBin.y = 0).
|
||||||
|
// This ensures that both new notifications and notifications in the banner mode that might
|
||||||
|
// have been in the process of hiding are shown with the banner height.
|
||||||
|
//
|
||||||
|
// We use this._showNotificationCompleted() onComplete callback to extend the time the updated
|
||||||
|
// notification is being shown.
|
||||||
|
//
|
||||||
|
// We don't set the y parameter for the tween for expanded notifications because
|
||||||
|
// this._expandNotification() will result in getting this._notificationBin.y set to the appropriate
|
||||||
|
// fully expanded value.
|
||||||
|
let tweenParams = { opacity: 255,
|
||||||
time: ANIMATION_TIME,
|
time: ANIMATION_TIME,
|
||||||
transition: 'easeOutQuad',
|
transition: 'easeOutQuad',
|
||||||
onComplete: this._showNotificationCompleted,
|
onComplete: this._showNotificationCompleted,
|
||||||
onCompleteScope: this
|
onCompleteScope: this
|
||||||
});
|
};
|
||||||
|
if (!this._notification.expanded)
|
||||||
|
tweenParams.y = 0;
|
||||||
|
|
||||||
// We auto-expand urgent notifications.
|
this._tween(this._notificationBin, '_notificationState', State.SHOWN, tweenParams);
|
||||||
// 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)
|
|
||||||
// This will overwrite the y tween, but leave the opacity
|
|
||||||
// tween, and so the onComplete will remain as well.
|
|
||||||
this._expandNotification(true);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_showNotificationCompleted: function() {
|
_showNotificationCompleted: function() {
|
||||||
|
if (this._notification.urgency != Urgency.CRITICAL)
|
||||||
this._updateNotificationTimeout(NOTIFICATION_TIMEOUT * 1000);
|
this._updateNotificationTimeout(NOTIFICATION_TIMEOUT * 1000);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -1650,7 +1623,7 @@ MessageTray.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// We use this function to grab focus when the user moves the pointer
|
// 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() {
|
_ensureNotificationFocused: function() {
|
||||||
this._notification.grabFocus(false);
|
this._notification.grabFocus(false);
|
||||||
},
|
},
|
||||||
@ -1722,7 +1695,7 @@ MessageTray.prototype = {
|
|||||||
this._adjustNotificationBoxPointerPosition();
|
this._adjustNotificationBoxPointerPosition();
|
||||||
|
|
||||||
this._summaryNotificationState = State.SHOWING;
|
this._summaryNotificationState = State.SHOWING;
|
||||||
this._summaryNotificationBoxPointer.animateAppear(Lang.bind(this, function() {
|
this._summaryNotificationBoxPointer.show(true, Lang.bind(this, function() {
|
||||||
this._summaryNotificationState = State.SHOWN;
|
this._summaryNotificationState = State.SHOWN;
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
@ -1761,7 +1734,7 @@ MessageTray.prototype = {
|
|||||||
|
|
||||||
this._summaryNotification.ungrabFocus();
|
this._summaryNotification.ungrabFocus();
|
||||||
this._summaryNotificationState = State.HIDING;
|
this._summaryNotificationState = State.HIDING;
|
||||||
this._summaryNotificationBoxPointer.animateDisappear(Lang.bind(this, this._hideSummaryNotificationCompleted));
|
this._summaryNotificationBoxPointer.hide(true, Lang.bind(this, this._hideSummaryNotificationCompleted));
|
||||||
},
|
},
|
||||||
|
|
||||||
_hideSummaryNotificationCompleted: function() {
|
_hideSummaryNotificationCompleted: function() {
|
||||||
@ -1780,3 +1753,27 @@ MessageTray.prototype = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function SystemNotificationSource() {
|
||||||
|
this._init();
|
||||||
|
}
|
||||||
|
|
||||||
|
SystemNotificationSource.prototype = {
|
||||||
|
__proto__: Source.prototype,
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
Source.prototype._init.call(this, _("System Information"));
|
||||||
|
|
||||||
|
this._setSummaryIcon(this.createNotificationIcon());
|
||||||
|
},
|
||||||
|
|
||||||
|
createNotificationIcon: function() {
|
||||||
|
return new St.Icon({ icon_name: 'dialog-information',
|
||||||
|
icon_type: St.IconType.SYMBOLIC,
|
||||||
|
icon_size: this.ICON_SIZE });
|
||||||
|
},
|
||||||
|
|
||||||
|
_notificationClicked: function() {
|
||||||
|
this.destroy();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
233
js/ui/modalDialog.js
Normal file
233
js/ui/modalDialog.js
Normal file
@ -0,0 +1,233 @@
|
|||||||
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
|
const Clutter = imports.gi.Clutter;
|
||||||
|
const Gdk = imports.gi.Gdk;
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Meta = imports.gi.Meta;
|
||||||
|
const Pango = imports.gi.Pango;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
|
const Signals = imports.signals;
|
||||||
|
const Gettext = imports.gettext.domain('gnome-shell');
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
|
const Params = imports.misc.params;
|
||||||
|
|
||||||
|
const Lightbox = imports.ui.lightbox;
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
|
const OPEN_AND_CLOSE_TIME = 0.1;
|
||||||
|
const FADE_OUT_DIALOG_TIME = 1.0;
|
||||||
|
|
||||||
|
const State = {
|
||||||
|
OPENED: 0,
|
||||||
|
CLOSED: 1,
|
||||||
|
OPENING: 2,
|
||||||
|
CLOSING: 3,
|
||||||
|
FADED_OUT: 4
|
||||||
|
};
|
||||||
|
|
||||||
|
function ModalDialog() {
|
||||||
|
this._init();
|
||||||
|
}
|
||||||
|
|
||||||
|
ModalDialog.prototype = {
|
||||||
|
_init: function(params) {
|
||||||
|
params = Params.parse(params, { styleClass: null });
|
||||||
|
|
||||||
|
this.state = State.CLOSED;
|
||||||
|
|
||||||
|
this._group = new St.Group({ visible: false,
|
||||||
|
x: 0,
|
||||||
|
y: 0 });
|
||||||
|
Main.uiGroup.add_actor(this._group);
|
||||||
|
global.focus_manager.add_group(this._group);
|
||||||
|
this._initialKeyFocus = this._group;
|
||||||
|
|
||||||
|
this._group.connect('destroy', Lang.bind(this, this._onGroupDestroy));
|
||||||
|
|
||||||
|
this._actionKeys = {};
|
||||||
|
this._group.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
|
||||||
|
|
||||||
|
this._lightbox = new Lightbox.Lightbox(this._group,
|
||||||
|
{ inhibitEvents: true });
|
||||||
|
|
||||||
|
this._backgroundBin = new St.Bin();
|
||||||
|
|
||||||
|
this._group.add_actor(this._backgroundBin);
|
||||||
|
this._lightbox.highlight(this._backgroundBin);
|
||||||
|
|
||||||
|
this._dialogLayout = new St.BoxLayout({ style_class: 'modal-dialog',
|
||||||
|
vertical: true });
|
||||||
|
if (params.styleClass != null) {
|
||||||
|
this._dialogLayout.add_style_class_name(params.styleClass);
|
||||||
|
}
|
||||||
|
this._backgroundBin.child = this._dialogLayout;
|
||||||
|
|
||||||
|
this.contentLayout = new St.BoxLayout({ vertical: true });
|
||||||
|
this._dialogLayout.add(this.contentLayout,
|
||||||
|
{ x_fill: true,
|
||||||
|
y_fill: true,
|
||||||
|
x_align: St.Align.MIDDLE,
|
||||||
|
y_align: St.Align.START });
|
||||||
|
|
||||||
|
this._buttonLayout = new St.BoxLayout({ opacity: 220,
|
||||||
|
vertical: false });
|
||||||
|
this._dialogLayout.add(this._buttonLayout,
|
||||||
|
{ expand: true,
|
||||||
|
x_align: St.Align.MIDDLE,
|
||||||
|
y_align: St.Align.END });
|
||||||
|
},
|
||||||
|
|
||||||
|
setButtons: function(buttons) {
|
||||||
|
this._buttonLayout.remove_all();
|
||||||
|
let i = 0;
|
||||||
|
for (let index in buttons) {
|
||||||
|
let buttonInfo = buttons[index];
|
||||||
|
let label = buttonInfo['label'];
|
||||||
|
let action = buttonInfo['action'];
|
||||||
|
let key = buttonInfo['key'];
|
||||||
|
|
||||||
|
let button = new St.Button({ style_class: 'modal-dialog-button',
|
||||||
|
reactive: true,
|
||||||
|
can_focus: true,
|
||||||
|
label: label });
|
||||||
|
|
||||||
|
let x_alignment;
|
||||||
|
if (buttons.length == 1)
|
||||||
|
x_alignment = St.Align.END;
|
||||||
|
else if (i == 0)
|
||||||
|
x_alignment = St.Align.START;
|
||||||
|
else if (i == buttons.length - 1)
|
||||||
|
x_alignment = St.Align.END;
|
||||||
|
else
|
||||||
|
x_alignment = St.Align.MIDDLE;
|
||||||
|
|
||||||
|
this._initialKeyFocus = button;
|
||||||
|
this._buttonLayout.add(button,
|
||||||
|
{ expand: true,
|
||||||
|
x_fill: false,
|
||||||
|
y_fill: false,
|
||||||
|
x_align: x_alignment,
|
||||||
|
y_align: St.Align.MIDDLE });
|
||||||
|
|
||||||
|
button.connect('clicked', action);
|
||||||
|
|
||||||
|
if (key)
|
||||||
|
this._actionKeys[key] = action;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_onKeyPressEvent: function(object, keyPressEvent) {
|
||||||
|
let symbol = keyPressEvent.get_key_symbol();
|
||||||
|
let action = this._actionKeys[symbol];
|
||||||
|
|
||||||
|
if (action)
|
||||||
|
action();
|
||||||
|
},
|
||||||
|
|
||||||
|
_onGroupDestroy: function() {
|
||||||
|
this.emit('destroy');
|
||||||
|
},
|
||||||
|
|
||||||
|
_fadeOpen: function() {
|
||||||
|
let monitor = global.get_focus_monitor();
|
||||||
|
|
||||||
|
this._backgroundBin.set_position(monitor.x, monitor.y);
|
||||||
|
this._backgroundBin.set_size(monitor.width, monitor.height);
|
||||||
|
|
||||||
|
this.state = State.OPENING;
|
||||||
|
|
||||||
|
this._dialogLayout.opacity = 255;
|
||||||
|
this._lightbox.show();
|
||||||
|
this._group.opacity = 0;
|
||||||
|
this._group.show();
|
||||||
|
Tweener.addTween(this._group,
|
||||||
|
{ opacity: 255,
|
||||||
|
time: OPEN_AND_CLOSE_TIME,
|
||||||
|
transition: 'easeOutQuad',
|
||||||
|
onComplete: Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
this._initialKeyFocus.grab_key_focus();
|
||||||
|
this.state = State.OPENED;
|
||||||
|
this.emit('opened');
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
open: function(timestamp) {
|
||||||
|
if (this.state == State.OPENED || this.state == State.OPENING)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (!Main.pushModal(this._group, timestamp))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
global.stage.set_key_focus(this._group);
|
||||||
|
|
||||||
|
this._fadeOpen();
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
close: function(timestamp) {
|
||||||
|
if (this.state == State.CLOSED || this.state == State.CLOSING)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let needsPopModal;
|
||||||
|
|
||||||
|
if (this.state == State.OPENED || this.state == State.OPENING)
|
||||||
|
needsPopModal = true;
|
||||||
|
else
|
||||||
|
needsPopModal = false;
|
||||||
|
|
||||||
|
this.state = State.CLOSING;
|
||||||
|
|
||||||
|
Tweener.addTween(this._group,
|
||||||
|
{ opacity: 0,
|
||||||
|
time: OPEN_AND_CLOSE_TIME,
|
||||||
|
transition: 'easeOutQuad',
|
||||||
|
onComplete: Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
this.state = State.CLOSED;
|
||||||
|
this._group.hide();
|
||||||
|
|
||||||
|
if (needsPopModal)
|
||||||
|
Main.popModal(this._group, timestamp);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// This method is like close, but fades the dialog out much slower,
|
||||||
|
// and leaves the lightbox in place. Once in the faded out state,
|
||||||
|
// the dialog can be brought back by an open call, or the lightbox
|
||||||
|
// can be dismissed by a close call.
|
||||||
|
//
|
||||||
|
// The main point of this method is to give some indication to the user
|
||||||
|
// that the dialog reponse has been acknowledged but will take a few
|
||||||
|
// moments before being processed.
|
||||||
|
// e.g., if a user clicked "Log Out" then the dialog should go away
|
||||||
|
// imediately, but the lightbox should remain until the logout is
|
||||||
|
// complete.
|
||||||
|
_fadeOutDialog: function(timestamp) {
|
||||||
|
if (this.state == State.CLOSED || this.state == State.CLOSING)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (this.state == State.FADED_OUT)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Tweener.addTween(this._dialogLayout,
|
||||||
|
{ opacity: 0,
|
||||||
|
time: FADE_OUT_DIALOG_TIME,
|
||||||
|
transition: 'easeOutQuad',
|
||||||
|
onComplete: Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
this.state = State.FADED_OUT;
|
||||||
|
Main.popModal(this._group, timestamp);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Signals.addSignalMethods(ModalDialog.prototype);
|
@ -9,9 +9,11 @@ const St = imports.gi.St;
|
|||||||
const Gettext = imports.gettext.domain('gnome-shell');
|
const Gettext = imports.gettext.domain('gnome-shell');
|
||||||
const _ = Gettext.gettext;
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
|
const Config = imports.misc.config;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const MessageTray = imports.ui.messageTray;
|
const MessageTray = imports.ui.messageTray;
|
||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
let nextNotificationId = 1;
|
let nextNotificationId = 1;
|
||||||
|
|
||||||
@ -126,17 +128,8 @@ NotificationDaemon.prototype = {
|
|||||||
log('Failed to acquire org.freedesktop.Notifications');
|
log('Failed to acquire org.freedesktop.Notifications');
|
||||||
else {
|
else {
|
||||||
log('Failed to acquire org.freedesktop.Notifications; trying again');
|
log('Failed to acquire org.freedesktop.Notifications; trying again');
|
||||||
|
Util.killall('notification-daemon');
|
||||||
// kill the notification-daemon. pkill is more portable
|
Util.killall('notify-osd');
|
||||||
// than killall, but on Linux at least it won't match if
|
|
||||||
// you pass more than 15 characters of the process name...
|
|
||||||
// However, if you use the '-f' flag to match the entire
|
|
||||||
// command line, it will work, but we have to be careful
|
|
||||||
// in that case that we don't match 'gedit
|
|
||||||
// notification-daemon.c' or whatever...
|
|
||||||
let p = new Shell.Process({ args: ['pkill', '-f',
|
|
||||||
'^([^ ]*/)?(notification-daemon|notify-osd)$']});
|
|
||||||
p.run();
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -343,8 +336,17 @@ NotificationDaemon.prototype = {
|
|||||||
for (let i = 0; i < actions.length - 1; i += 2)
|
for (let i = 0; i < actions.length - 1; i += 2)
|
||||||
notification.addButton(actions[i], actions[i + 1]);
|
notification.addButton(actions[i], actions[i + 1]);
|
||||||
}
|
}
|
||||||
|
switch (hints.urgency) {
|
||||||
notification.setUrgent(hints.urgency == Urgency.CRITICAL);
|
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);
|
notification.setResident(hints.resident == true);
|
||||||
// 'transient' is a reserved keyword in JS, so we have to retrieve the value
|
// '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
|
// of the 'transient' hint with hints['transient'] rather than hints.transient
|
||||||
@ -381,10 +383,10 @@ NotificationDaemon.prototype = {
|
|||||||
|
|
||||||
GetServerInformation: function() {
|
GetServerInformation: function() {
|
||||||
return [
|
return [
|
||||||
'GNOME Shell',
|
Config.PACKAGE_NAME,
|
||||||
'GNOME',
|
'GNOME',
|
||||||
'0.1', // FIXME, get this from somewhere
|
Config.PACKAGE_VERSION,
|
||||||
'1.0'
|
'1.2'
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -467,8 +469,8 @@ Source.prototype = {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// Only override the icon if we were previously using
|
// Only override the icon if we were previously using
|
||||||
// notification-based icons (ie, not a trayicon)
|
// notification-based icons (ie, not a trayicon) or if it was unset before
|
||||||
if (this.useNotificationIcon) {
|
if (!this._isTrayIcon) {
|
||||||
this.useNotificationIcon = false;
|
this.useNotificationIcon = false;
|
||||||
this._setSummaryIcon(this.app.create_icon_texture (this.ICON_SIZE));
|
this._setSummaryIcon(this.app.create_icon_texture (this.ICON_SIZE));
|
||||||
}
|
}
|
||||||
|
@ -6,13 +6,15 @@ const Mainloop = imports.mainloop;
|
|||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
const Gettext = imports.gettext.domain('gnome-shell');
|
const Gettext = imports.gettext.domain('gnome-shell');
|
||||||
const _ = Gettext.gettext;
|
const _ = Gettext.gettext;
|
||||||
|
const Gdk = imports.gi.Gdk;
|
||||||
|
|
||||||
const AppDisplay = imports.ui.appDisplay;
|
const AppDisplay = imports.ui.appDisplay;
|
||||||
const Dash = imports.ui.dash;
|
const Dash = imports.ui.dash;
|
||||||
|
const DND = imports.ui.dnd;
|
||||||
const DocDisplay = imports.ui.docDisplay;
|
const DocDisplay = imports.ui.docDisplay;
|
||||||
const GenericDisplay = imports.ui.genericDisplay;
|
|
||||||
const Lightbox = imports.ui.lightbox;
|
const Lightbox = imports.ui.lightbox;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const MessageTray = imports.ui.messageTray;
|
const MessageTray = imports.ui.messageTray;
|
||||||
@ -28,30 +30,7 @@ const ANIMATION_TIME = 0.25;
|
|||||||
// We split the screen vertically between the dash and the view selector.
|
// We split the screen vertically between the dash and the view selector.
|
||||||
const DASH_SPLIT_FRACTION = 0.1;
|
const DASH_SPLIT_FRACTION = 0.1;
|
||||||
|
|
||||||
|
const DND_WINDOW_SWITCH_TIMEOUT = 1250;
|
||||||
function Source() {
|
|
||||||
this._init();
|
|
||||||
}
|
|
||||||
|
|
||||||
Source.prototype = {
|
|
||||||
__proto__: MessageTray.Source.prototype,
|
|
||||||
|
|
||||||
_init: function() {
|
|
||||||
MessageTray.Source.prototype._init.call(this,
|
|
||||||
"System Information");
|
|
||||||
this._setSummaryIcon(this.createNotificationIcon());
|
|
||||||
},
|
|
||||||
|
|
||||||
createNotificationIcon: function() {
|
|
||||||
return new St.Icon({ icon_name: 'dialog-information',
|
|
||||||
icon_type: St.IconType.SYMBOLIC,
|
|
||||||
icon_size: this.ICON_SIZE });
|
|
||||||
},
|
|
||||||
|
|
||||||
_notificationClicked: function() {
|
|
||||||
this.destroy();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function ShellInfo() {
|
function ShellInfo() {
|
||||||
this._init();
|
this._init();
|
||||||
@ -74,7 +53,7 @@ ShellInfo.prototype = {
|
|||||||
|
|
||||||
setMessage: function(text, undoCallback, undoLabel) {
|
setMessage: function(text, undoCallback, undoLabel) {
|
||||||
if (this._source == null) {
|
if (this._source == null) {
|
||||||
this._source = new Source();
|
this._source = new MessageTray.SystemNotificationSource();
|
||||||
this._source.connect('destroy', Lang.bind(this,
|
this._source.connect('destroy', Lang.bind(this,
|
||||||
function() {
|
function() {
|
||||||
this._source = null;
|
this._source = null;
|
||||||
@ -135,7 +114,10 @@ Overview.prototype = {
|
|||||||
|
|
||||||
this._workspacesDisplay = null;
|
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.animationInProgress = false;
|
||||||
this._hideInProgress = false;
|
this._hideInProgress = false;
|
||||||
|
|
||||||
@ -174,9 +156,72 @@ Overview.prototype = {
|
|||||||
|
|
||||||
this._coverPane.lower_bottom();
|
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;
|
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() {
|
_getDesktopClone: function() {
|
||||||
let windows = global.get_window_actors().filter(function(w) {
|
let windows = global.get_window_actors().filter(function(w) {
|
||||||
return w.meta_window.get_window_type() == Meta.WindowType.DESKTOP;
|
return w.meta_window.get_window_type() == Meta.WindowType.DESKTOP;
|
||||||
@ -267,11 +312,23 @@ Overview.prototype = {
|
|||||||
return [this.workspaces.actor.x, this.workspaces.actor.y];
|
return [this.workspaces.actor.x, this.workspaces.actor.y];
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// show:
|
||||||
|
//
|
||||||
|
// Animates the overview visible and grabs mouse and keyboard input
|
||||||
show : function() {
|
show : function() {
|
||||||
if (this.visible)
|
if (this._shown)
|
||||||
return;
|
return;
|
||||||
|
// Do this manually instead of using _syncInputMode, to handle failure
|
||||||
if (!Main.pushModal(this.viewSelector.actor))
|
if (!Main.pushModal(this.viewSelector.actor))
|
||||||
return;
|
return;
|
||||||
|
this._modal = true;
|
||||||
|
this._animateVisible();
|
||||||
|
this._shown = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
_animateVisible: function() {
|
||||||
|
if (this.visible || this.animationInProgress)
|
||||||
|
return;
|
||||||
|
|
||||||
this.visible = true;
|
this.visible = true;
|
||||||
this.animationInProgress = true;
|
this.animationInProgress = true;
|
||||||
@ -337,8 +394,102 @@ Overview.prototype = {
|
|||||||
this.emit('showing');
|
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() {
|
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;
|
return;
|
||||||
|
|
||||||
this.animationInProgress = true;
|
this.animationInProgress = true;
|
||||||
@ -382,36 +533,17 @@ Overview.prototype = {
|
|||||||
this.emit('hiding');
|
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() {
|
_showDone: function() {
|
||||||
if (this._hideInProgress)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this.animationInProgress = false;
|
this.animationInProgress = false;
|
||||||
this._desktopFade.hide();
|
this._desktopFade.hide();
|
||||||
this._coverPane.lower_bottom();
|
this._coverPane.lower_bottom();
|
||||||
|
|
||||||
this.emit('shown');
|
this.emit('shown');
|
||||||
|
// Handle any calls to hide* while we were showing
|
||||||
|
if (!this._shown && !this._shownTemporarily)
|
||||||
|
this._animateNotVisible();
|
||||||
|
|
||||||
|
this._syncInputMode();
|
||||||
},
|
},
|
||||||
|
|
||||||
_hideDone: function() {
|
_hideDone: function() {
|
||||||
@ -434,8 +566,18 @@ Overview.prototype = {
|
|||||||
|
|
||||||
this._coverPane.lower_bottom();
|
this._coverPane.lower_bottom();
|
||||||
|
|
||||||
Main.popModal(this.viewSelector.actor);
|
|
||||||
this.emit('hidden');
|
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);
|
Signals.addSignalMethods(Overview.prototype);
|
||||||
|
144
js/ui/panel.js
144
js/ui/panel.js
@ -27,6 +27,8 @@ const PANEL_ICON_SIZE = 24;
|
|||||||
|
|
||||||
const HOT_CORNER_ACTIVATION_TIMEOUT = 0.5;
|
const HOT_CORNER_ACTIVATION_TIMEOUT = 0.5;
|
||||||
|
|
||||||
|
const BUTTON_DND_ACTIVATION_TIMEOUT = 250;
|
||||||
|
|
||||||
const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
|
const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
|
||||||
const SPINNER_UPDATE_TIMEOUT = 130;
|
const SPINNER_UPDATE_TIMEOUT = 130;
|
||||||
const SPINNER_SPEED = 0.02;
|
const SPINNER_SPEED = 0.02;
|
||||||
@ -35,14 +37,17 @@ const STANDARD_TRAY_ICON_ORDER = ['a11y', 'display', 'keyboard', 'volume', 'blue
|
|||||||
const STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION = {
|
const STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION = {
|
||||||
'a11y': imports.ui.status.accessibility.ATIndicator,
|
'a11y': imports.ui.status.accessibility.ATIndicator,
|
||||||
'volume': imports.ui.status.volume.Indicator,
|
'volume': imports.ui.status.volume.Indicator,
|
||||||
'battery': imports.ui.status.power.Indicator
|
'battery': imports.ui.status.power.Indicator,
|
||||||
|
'keyboard': imports.ui.status.keyboard.XKBIndicator
|
||||||
};
|
};
|
||||||
|
|
||||||
if (Config.HAVE_BLUETOOTH)
|
if (Config.HAVE_BLUETOOTH)
|
||||||
STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['bluetooth'] = imports.ui.status.bluetooth.Indicator;
|
STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['bluetooth'] = imports.ui.status.bluetooth.Indicator;
|
||||||
|
|
||||||
const CLOCK_FORMAT_KEY = 'format';
|
// in org.gnome.desktop.interface
|
||||||
const CLOCK_CUSTOM_FORMAT_KEY = 'custom-format';
|
const CLOCK_FORMAT_KEY = 'clock-format';
|
||||||
|
|
||||||
|
// in org.gnome.shell.clock
|
||||||
const CLOCK_SHOW_DATE_KEY = 'show-date';
|
const CLOCK_SHOW_DATE_KEY = 'show-date';
|
||||||
const CLOCK_SHOW_SECONDS_KEY = 'show-seconds';
|
const CLOCK_SHOW_SECONDS_KEY = 'show-seconds';
|
||||||
|
|
||||||
@ -493,69 +498,53 @@ function ClockButton() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ClockButton.prototype = {
|
ClockButton.prototype = {
|
||||||
__proto__: PanelMenu.Button.prototype,
|
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
PanelMenu.Button.prototype._init.call(this, St.Align.START);
|
this.actor = new St.Bin({ style_class: 'panel-button',
|
||||||
this.menu.addAction(_("Preferences"), Lang.bind(this, this._onPrefs));
|
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._clock = new St.Label();
|
||||||
this.actor.set_child(this._clock);
|
this.actor.set_child(this._clock);
|
||||||
|
|
||||||
this._calendarPopup = null;
|
this._calendarPopup = null;
|
||||||
|
|
||||||
|
this._desktopSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
|
||||||
this._clockSettings = new Gio.Settings({ schema: 'org.gnome.shell.clock' });
|
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));
|
this._clockSettings.connect('changed', Lang.bind(this, this._updateClock));
|
||||||
|
|
||||||
// Start the clock
|
// Start the clock
|
||||||
this._updateClock();
|
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() {
|
closeCalendar: function() {
|
||||||
if (!this._calendarPopup || !this._calendarPopup.isOpen)
|
if (!this._calendarPopup || !this._calendarPopup.isOpen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._calendarPopup.hide();
|
this._calendarPopup.hide();
|
||||||
|
|
||||||
this.menu.isOpen = false;
|
|
||||||
this.actor.remove_style_pseudo_class('pressed');
|
this.actor.remove_style_pseudo_class('pressed');
|
||||||
},
|
},
|
||||||
|
|
||||||
openCalendar: function() {
|
openCalendar: function() {
|
||||||
this._calendarPopup.show();
|
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');
|
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() {
|
_toggleCalendar: function() {
|
||||||
if (this._calendarPopup == null) {
|
if (this._calendarPopup == null) {
|
||||||
this._calendarPopup = new CalendarPopup();
|
this._calendarPopup = new CalendarPopup();
|
||||||
this._calendarPopup.actor.hide();
|
this._calendarPopup.actor.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.menu.isOpen && !this._calendarPopup.isOpen) {
|
|
||||||
this.menu.close();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!this._calendarPopup.isOpen)
|
if (!this._calendarPopup.isOpen)
|
||||||
this.openCalendar();
|
this.openCalendar();
|
||||||
else
|
else
|
||||||
@ -563,23 +552,13 @@ ClockButton.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
_updateClock: function() {
|
_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 showDate = this._clockSettings.get_boolean(CLOCK_SHOW_DATE_KEY);
|
||||||
let showSeconds = this._clockSettings.get_boolean(CLOCK_SHOW_SECONDS_KEY);
|
let showSeconds = this._clockSettings.get_boolean(CLOCK_SHOW_SECONDS_KEY);
|
||||||
|
|
||||||
let clockFormat;
|
let clockFormat;
|
||||||
switch (format) {
|
switch (format) {
|
||||||
case 'unix':
|
case '24h':
|
||||||
// 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':
|
|
||||||
if (showDate)
|
if (showDate)
|
||||||
/* Translators: This is the time format with date used
|
/* Translators: This is the time format with date used
|
||||||
in 24-hour mode. */
|
in 24-hour mode. */
|
||||||
@ -591,7 +570,7 @@ ClockButton.prototype = {
|
|||||||
clockFormat = showSeconds ? _("%a %R:%S")
|
clockFormat = showSeconds ? _("%a %R:%S")
|
||||||
: _("%a %R");
|
: _("%a %R");
|
||||||
break;
|
break;
|
||||||
case '12-hour':
|
case '12h':
|
||||||
default:
|
default:
|
||||||
if (showDate)
|
if (showDate)
|
||||||
/* Translators: This is a time format with date used
|
/* Translators: This is a time format with date used
|
||||||
@ -753,7 +732,20 @@ Panel.prototype = {
|
|||||||
reactive: true,
|
reactive: true,
|
||||||
can_focus: true });
|
can_focus: true });
|
||||||
this.button.set_child(label);
|
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);
|
this._leftBox.add(this.button);
|
||||||
|
|
||||||
// We use this flag to mark the case where the user has entered the
|
// We use this flag to mark the case where the user has entered the
|
||||||
@ -791,6 +783,18 @@ Panel.prototype = {
|
|||||||
this._hotCorner.connect('leave-event',
|
this._hotCorner.connect('leave-event',
|
||||||
Lang.bind(this, this._onHotCornerLeft));
|
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._hotCornerEnvirons);
|
||||||
this._boxContainer.add_actor(this._hotCorner);
|
this._boxContainer.add_actor(this._hotCorner);
|
||||||
|
|
||||||
@ -846,6 +850,25 @@ Panel.prototype = {
|
|||||||
Main.chrome.addActor(this.actor, { visibleInOverview: true });
|
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() {
|
startStatusArea: function() {
|
||||||
for (let i = 0; i < STANDARD_TRAY_ICON_ORDER.length; i++) {
|
for (let i = 0; i < STANDARD_TRAY_ICON_ORDER.length; i++) {
|
||||||
let role = STANDARD_TRAY_ICON_ORDER[i];
|
let role = STANDARD_TRAY_ICON_ORDER[i];
|
||||||
@ -936,14 +959,7 @@ Panel.prototype = {
|
|||||||
Main.uiGroup.add_actor(ripple);
|
Main.uiGroup.add_actor(ripple);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onHotCornerEntered : function() {
|
rippleAnimation: function() {
|
||||||
if (this._menus.grabbed)
|
|
||||||
return false;
|
|
||||||
if (!this._hotCornerEntered) {
|
|
||||||
this._hotCornerEntered = true;
|
|
||||||
if (!Main.overview.animationInProgress) {
|
|
||||||
this._hotCornerActivationTime = Date.now() / 1000;
|
|
||||||
|
|
||||||
// Show three concentric ripples expanding outwards; the exact
|
// Show three concentric ripples expanding outwards; the exact
|
||||||
// parameters were found by trial and error, so don't look
|
// parameters were found by trial and error, so don't look
|
||||||
// for them to make perfect sense mathematically
|
// for them to make perfect sense mathematically
|
||||||
@ -952,6 +968,17 @@ Panel.prototype = {
|
|||||||
this._addRipple(0.0, 0.83, 0.25, 1.0, 1.5, 0.0);
|
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.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._addRipple(0.35, 1.0, 0.0, 0.3, 1, 0.0);
|
||||||
|
},
|
||||||
|
|
||||||
|
_onHotCornerEntered : function() {
|
||||||
|
if (this._menus.grabbed)
|
||||||
|
return false;
|
||||||
|
if (!this._hotCornerEntered) {
|
||||||
|
this._hotCornerEntered = true;
|
||||||
|
if (!Main.overview.animationInProgress) {
|
||||||
|
this._hotCornerActivationTime = Date.now() / 1000;
|
||||||
|
|
||||||
|
this.rippleAnimation();
|
||||||
Main.overview.toggle();
|
Main.overview.toggle();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -998,6 +1025,9 @@ function CalendarPopup() {
|
|||||||
CalendarPopup.prototype = {
|
CalendarPopup.prototype = {
|
||||||
_init: function() {
|
_init: function() {
|
||||||
let panelActor = Main.panel.actor;
|
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' });
|
this.actor = new St.Bin({ name: 'calendarPopup' });
|
||||||
|
|
||||||
@ -1009,7 +1039,7 @@ CalendarPopup.prototype = {
|
|||||||
Main.chrome.addActor(this.actor, { visibleInOverview: true,
|
Main.chrome.addActor(this.actor, { visibleInOverview: true,
|
||||||
affectsStruts: false });
|
affectsStruts: false });
|
||||||
this.actor.y = (panelActor.y + panelActor.height - this.actor.height);
|
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() {
|
show: function() {
|
||||||
@ -1022,7 +1052,6 @@ CalendarPopup.prototype = {
|
|||||||
// Reset the calendar to today's date
|
// Reset the calendar to today's date
|
||||||
this.calendar.setDate(new Date());
|
this.calendar.setDate(new Date());
|
||||||
|
|
||||||
this._centerPopup();
|
|
||||||
this.actor.lower(panelActor);
|
this.actor.lower(panelActor);
|
||||||
this.actor.show();
|
this.actor.show();
|
||||||
Tweener.addTween(this.actor,
|
Tweener.addTween(this.actor,
|
||||||
@ -1046,10 +1075,5 @@ CalendarPopup.prototype = {
|
|||||||
onComplete: function() { this.actor.hide(); },
|
onComplete: function() { this.actor.hide(); },
|
||||||
onCompleteScope: this
|
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) {
|
_onOpenStateChanged: function(menu, open) {
|
||||||
if (open) {
|
if (open)
|
||||||
this.actor.add_style_pseudo_class('pressed');
|
this.actor.add_style_pseudo_class('pressed');
|
||||||
let focus = global.stage.get_key_focus();
|
else
|
||||||
if (!focus || (focus != this.actor && !menu.actor.contains(focus)))
|
|
||||||
this.actor.grab_key_focus();
|
|
||||||
} else
|
|
||||||
this.actor.remove_style_pseudo_class('pressed');
|
this.actor.remove_style_pseudo_class('pressed');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
const GConf = imports.gi.GConf;
|
|
||||||
const GLib = imports.gi.GLib;
|
const GLib = imports.gi.GLib;
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
@ -14,11 +13,7 @@ const _ = Gettext.gettext;
|
|||||||
const DND = imports.ui.dnd;
|
const DND = imports.ui.dnd;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Search = imports.ui.search;
|
const Search = imports.ui.search;
|
||||||
|
const Util = imports.misc.util;
|
||||||
const NAUTILUS_PREFS_DIR = '/apps/nautilus/preferences';
|
|
||||||
const DESKTOP_IS_HOME_KEY = NAUTILUS_PREFS_DIR + '/desktop_is_home_dir';
|
|
||||||
|
|
||||||
const PLACES_ICON_SIZE = 16;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a place object, which is most normally a bookmark entry,
|
* Represents a place object, which is most normally a bookmark entry,
|
||||||
@ -123,13 +118,9 @@ function PlacesManager() {
|
|||||||
|
|
||||||
PlacesManager.prototype = {
|
PlacesManager.prototype = {
|
||||||
_init: function() {
|
_init: function() {
|
||||||
let gconf = GConf.Client.get_default();
|
|
||||||
gconf.add_dir(NAUTILUS_PREFS_DIR, GConf.ClientPreloadType.PRELOAD_NONE);
|
|
||||||
|
|
||||||
this._defaultPlaces = [];
|
this._defaultPlaces = [];
|
||||||
this._mounts = [];
|
this._mounts = [];
|
||||||
this._bookmarks = [];
|
this._bookmarks = [];
|
||||||
this._isDesktopHome = gconf.get_bool(DESKTOP_IS_HOME_KEY);
|
|
||||||
|
|
||||||
let homeFile = Gio.file_new_for_path (GLib.get_home_dir());
|
let homeFile = Gio.file_new_for_path (GLib.get_home_dir());
|
||||||
let homeUri = homeFile.get_uri();
|
let homeUri = homeFile.get_uri();
|
||||||
@ -163,7 +154,7 @@ PlacesManager.prototype = {
|
|||||||
icon_size: size });
|
icon_size: size });
|
||||||
},
|
},
|
||||||
function () {
|
function () {
|
||||||
new Shell.Process({ args: ['nautilus-connect-server'] }).run();
|
Util.spawn(['nautilus-connect-server']);
|
||||||
});
|
});
|
||||||
|
|
||||||
let networkApp = null;
|
let networkApp = null;
|
||||||
@ -188,9 +179,6 @@ PlacesManager.prototype = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._defaultPlaces.push(this._home);
|
this._defaultPlaces.push(this._home);
|
||||||
|
|
||||||
this._desktopMenuIndex = this._defaultPlaces.length;
|
|
||||||
if (!this._isDesktopHome)
|
|
||||||
this._defaultPlaces.push(this._desktopMenu);
|
this._defaultPlaces.push(this._desktopMenu);
|
||||||
|
|
||||||
if (this._network)
|
if (this._network)
|
||||||
@ -229,9 +217,6 @@ PlacesManager.prototype = {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
this._reloadBookmarks();
|
this._reloadBookmarks();
|
||||||
|
|
||||||
gconf.notify_add(DESKTOP_IS_HOME_KEY, Lang.bind(this, this._updateDesktopMenuVisibility));
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateDevices: function() {
|
_updateDevices: function() {
|
||||||
@ -340,21 +325,6 @@ PlacesManager.prototype = {
|
|||||||
this.emit('places-updated');
|
this.emit('places-updated');
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateDesktopMenuVisibility: function() {
|
|
||||||
let gconf = GConf.Client.get_default();
|
|
||||||
this._isDesktopHome = gconf.get_boolean(DESKTOP_IS_HOME_KEY);
|
|
||||||
|
|
||||||
if (this._isDesktopHome)
|
|
||||||
this._removeById(this._defaultPlaces, 'special:desktop');
|
|
||||||
else
|
|
||||||
this._defaultPlaces.splice(this._desktopMenuIndex, 0,
|
|
||||||
this._desktopMenu);
|
|
||||||
|
|
||||||
/* See comment in _updateDevices for explanation why there are two signals. */
|
|
||||||
this.emit('defaults-updated');
|
|
||||||
this.emit('places-updated');
|
|
||||||
},
|
|
||||||
|
|
||||||
_addMount: function(mount) {
|
_addMount: function(mount) {
|
||||||
let devItem = new PlaceDeviceInfo(mount);
|
let devItem = new PlaceDeviceInfo(mount);
|
||||||
this._mounts.push(devItem);
|
this._mounts.push(devItem);
|
||||||
@ -402,150 +372,8 @@ PlacesManager.prototype = {
|
|||||||
sourceArray.splice(this._lookupIndexById(sourceArray, id), 1);
|
sourceArray.splice(this._lookupIndexById(sourceArray, id), 1);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Signals.addSignalMethods(PlacesManager.prototype);
|
Signals.addSignalMethods(PlacesManager.prototype);
|
||||||
|
|
||||||
/**
|
|
||||||
* An entry in the places menu.
|
|
||||||
* @info The corresponding PlaceInfo to populate this entry.
|
|
||||||
*/
|
|
||||||
function DashPlaceDisplayItem(info) {
|
|
||||||
this._init(info);
|
|
||||||
}
|
|
||||||
|
|
||||||
DashPlaceDisplayItem.prototype = {
|
|
||||||
_init: function(info) {
|
|
||||||
this.name = info.name;
|
|
||||||
this._info = info;
|
|
||||||
this._icon = info.iconFactory(PLACES_ICON_SIZE);
|
|
||||||
|
|
||||||
this.actor = new St.Clickable({ style_class: 'places-item',
|
|
||||||
reactive: true,
|
|
||||||
x_align: St.Align.START,
|
|
||||||
x_fill: true });
|
|
||||||
|
|
||||||
let box = new St.BoxLayout({ style_class: 'places-item-box' });
|
|
||||||
this.actor.set_child(box);
|
|
||||||
|
|
||||||
let bin = new St.Bin({ child: this._icon });
|
|
||||||
box.add(bin);
|
|
||||||
|
|
||||||
let text = new St.Label({ text: info.name });
|
|
||||||
box.add(text, { expand: true, x_fill: true });
|
|
||||||
|
|
||||||
if (info.isRemovable()) {
|
|
||||||
let removeIcon = new St.Icon({ icon_name: 'media-eject',
|
|
||||||
icon_type: St.IconType.FULLCOLOR,
|
|
||||||
icon_size: PLACES_ICON_SIZE });
|
|
||||||
let removeIconBox = new St.Clickable({ child: removeIcon,
|
|
||||||
reactive: true });
|
|
||||||
box.add(removeIconBox);
|
|
||||||
removeIconBox.connect('clicked',
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
this._info.remove();
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
|
|
||||||
|
|
||||||
this.actor._delegate = this;
|
|
||||||
this._draggable = DND.makeDraggable(this.actor);
|
|
||||||
this._draggable.connect('drag-begin',
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
Main.overview.beginItemDrag(this);
|
|
||||||
}));
|
|
||||||
this._draggable.connect('drag-end',
|
|
||||||
Lang.bind(this, function() {
|
|
||||||
Main.overview.endItemDrag(this);
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
_onClicked: function(b) {
|
|
||||||
this._info.launch();
|
|
||||||
Main.overview.hide();
|
|
||||||
},
|
|
||||||
|
|
||||||
getDragActorSource: function() {
|
|
||||||
return this._icon;
|
|
||||||
},
|
|
||||||
|
|
||||||
getDragActor: function(stageX, stageY) {
|
|
||||||
return this._info.iconFactory(PLACES_ICON_SIZE);
|
|
||||||
},
|
|
||||||
|
|
||||||
//// Drag and drop methods ////
|
|
||||||
|
|
||||||
shellWorkspaceLaunch: function() {
|
|
||||||
this._info.launch();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
function DashPlaceDisplay() {
|
|
||||||
this._init();
|
|
||||||
}
|
|
||||||
|
|
||||||
DashPlaceDisplay.prototype = {
|
|
||||||
_init: function() {
|
|
||||||
|
|
||||||
// Places is divided semi-arbitrarily into left and right; a grid would
|
|
||||||
// look better in that there would be an even number of items left+right,
|
|
||||||
// but it seems like we want some sort of differentiation between actions
|
|
||||||
// like "Connect to server..." and regular folders
|
|
||||||
this.actor = new St.Table({ style_class: 'places-section',
|
|
||||||
homogeneous: true });
|
|
||||||
|
|
||||||
this._defaultsList = [];
|
|
||||||
this._bookmarksList = [];
|
|
||||||
this._mountsList = [];
|
|
||||||
|
|
||||||
Main.placesManager.connect('defaults-updated', Lang.bind(this, this._updateDefaults));
|
|
||||||
Main.placesManager.connect('bookmarks-updated', Lang.bind(this, this._updateBookmarks));
|
|
||||||
Main.placesManager.connect('mounts-updated', Lang.bind(this, this._updateMounts));
|
|
||||||
|
|
||||||
this._updateDefaults();
|
|
||||||
this._updateMounts();
|
|
||||||
this._updateBookmarks();
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateDefaults: function() {
|
|
||||||
for (let i = 0; i < this._defaultsList.length; i++)
|
|
||||||
this._defaultsList[i].destroy();
|
|
||||||
|
|
||||||
this._defaultsList = [];
|
|
||||||
let places = Main.placesManager.getDefaultPlaces();
|
|
||||||
for (let i = 0; i < places.length; i++) {
|
|
||||||
this._defaultsList[i] = new DashPlaceDisplayItem(places[i]).actor;
|
|
||||||
this.actor.add(this._defaultsList[i], {row: i, col: 0});
|
|
||||||
}
|
|
||||||
this._updateMounts();
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateMounts: function() {
|
|
||||||
for (let i = 0; i < this._mountsList.length; i++)
|
|
||||||
this._mountsList[i].destroy();
|
|
||||||
|
|
||||||
this._mountsList = [];
|
|
||||||
let places = Main.placesManager.getMounts();
|
|
||||||
for (let i = 0; i < places.length; i++) {
|
|
||||||
this._mountsList[i] = new DashPlaceDisplayItem(places[i]).actor;
|
|
||||||
this.actor.add(this._mountsList[i], {row: this._defaultsList.length + i, col: 0});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateBookmarks: function() {
|
|
||||||
for (let i = 0; i < this._bookmarksList.length; i++)
|
|
||||||
this._bookmarksList[i].destroy();
|
|
||||||
|
|
||||||
this._bookmarksList = [];
|
|
||||||
let places = Main.placesManager.getBookmarks();
|
|
||||||
for (let i = 0; i < places.length; i ++) {
|
|
||||||
this._bookmarksList[i] = new DashPlaceDisplayItem(places[i]).actor;
|
|
||||||
this.actor.add(this._bookmarksList[i], {row: i, col: 1});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Signals.addSignalMethods(DashPlaceDisplay.prototype);
|
|
||||||
|
|
||||||
function PlaceSearchProvider() {
|
function PlaceSearchProvider() {
|
||||||
this._init();
|
this._init();
|
||||||
|
@ -631,18 +631,25 @@ PopupMenuBase.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
addMenuItem: function(menuItem, position) {
|
addMenuItem: function(menuItem, position) {
|
||||||
if (position == undefined)
|
let before_item = null;
|
||||||
|
if (position == undefined) {
|
||||||
this.box.add(menuItem.actor);
|
this.box.add(menuItem.actor);
|
||||||
else
|
} else {
|
||||||
this.box.insert_actor(menuItem.actor, position);
|
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 (menuItem instanceof PopupSubMenuMenuItem) {
|
||||||
if (position == undefined)
|
if (before_item == null)
|
||||||
this.box.add(menuItem.menu.actor);
|
this.box.add(menuItem.menu.actor);
|
||||||
else
|
else
|
||||||
this.box.insert_actor(menuItem.menu.actor, position + 1);
|
this.box.insert_before(menuItem.menu.actor, before_item);
|
||||||
menuItem._subMenuActivateId = menuItem.menu.connect('activate', Lang.bind(this, function() {
|
menuItem._subMenuActivateId = menuItem.menu.connect('activate', Lang.bind(this, function() {
|
||||||
this.emit('activate');
|
this.emit('activate');
|
||||||
this.close();
|
this.close(true);
|
||||||
}));
|
}));
|
||||||
menuItem._subMenuActiveChangeId = menuItem.menu.connect('active-changed', Lang.bind(this, function(submenu, submenuItem) {
|
menuItem._subMenuActiveChangeId = menuItem.menu.connect('active-changed', Lang.bind(this, function(submenu, submenuItem) {
|
||||||
if (this._activeMenuItem && this._activeMenuItem != submenuItem)
|
if (this._activeMenuItem && this._activeMenuItem != submenuItem)
|
||||||
@ -652,7 +659,7 @@ PopupMenuBase.prototype = {
|
|||||||
}));
|
}));
|
||||||
menuItem._closingId = this.connect('open-state-changed', function(self, open) {
|
menuItem._closingId = this.connect('open-state-changed', function(self, open) {
|
||||||
if (!open)
|
if (!open)
|
||||||
menuItem.menu.immediateClose();
|
menuItem.menu.close(false);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
menuItem._activeChangeId = menuItem.connect('active-changed', Lang.bind(this, function (menuItem, active) {
|
menuItem._activeChangeId = menuItem.connect('active-changed', Lang.bind(this, function (menuItem, active) {
|
||||||
@ -668,7 +675,7 @@ PopupMenuBase.prototype = {
|
|||||||
}));
|
}));
|
||||||
menuItem._activateId = menuItem.connect('activate', Lang.bind(this, function (menuItem, event) {
|
menuItem._activateId = menuItem.connect('activate', Lang.bind(this, function (menuItem, event) {
|
||||||
this.emit('activate', menuItem);
|
this.emit('activate', menuItem);
|
||||||
this.close();
|
this.close(true);
|
||||||
}));
|
}));
|
||||||
menuItem.connect('destroy', Lang.bind(this, function(emitter) {
|
menuItem.connect('destroy', Lang.bind(this, function(emitter) {
|
||||||
menuItem.disconnect(menuItem._activateId);
|
menuItem.disconnect(menuItem._activateId);
|
||||||
@ -735,9 +742,9 @@ PopupMenuBase.prototype = {
|
|||||||
|
|
||||||
toggle: function() {
|
toggle: function() {
|
||||||
if (this.isOpen)
|
if (this.isOpen)
|
||||||
this.close();
|
this.close(true);
|
||||||
else
|
else
|
||||||
this.open();
|
this.open(true);
|
||||||
},
|
},
|
||||||
|
|
||||||
destroy: function() {
|
destroy: function() {
|
||||||
@ -802,26 +809,26 @@ PopupMenu.prototype = {
|
|||||||
this._boxPointer.setArrowOrigin(origin);
|
this._boxPointer.setArrowOrigin(origin);
|
||||||
},
|
},
|
||||||
|
|
||||||
open: function() {
|
open: function(animate) {
|
||||||
if (this.isOpen)
|
if (this.isOpen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this.isOpen = true;
|
this.isOpen = true;
|
||||||
|
|
||||||
this._boxPointer.setPosition(this.sourceActor, this._gap, this._alignment);
|
this._boxPointer.setPosition(this.sourceActor, this._gap, this._alignment);
|
||||||
this._boxPointer.animateAppear();
|
this._boxPointer.show(animate);
|
||||||
|
|
||||||
this.emit('open-state-changed', true);
|
this.emit('open-state-changed', true);
|
||||||
},
|
},
|
||||||
|
|
||||||
close: function() {
|
close: function(animate) {
|
||||||
if (!this.isOpen)
|
if (!this.isOpen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (this._activeMenuItem)
|
if (this._activeMenuItem)
|
||||||
this._activeMenuItem.setActive(false);
|
this._activeMenuItem.setActive(false);
|
||||||
|
|
||||||
this._boxPointer.animateDisappear();
|
this._boxPointer.hide(animate);
|
||||||
|
|
||||||
this.isOpen = false;
|
this.isOpen = false;
|
||||||
this.emit('open-state-changed', false);
|
this.emit('open-state-changed', false);
|
||||||
@ -848,12 +855,15 @@ PopupSubMenu.prototype = {
|
|||||||
this.actor.hide();
|
this.actor.hide();
|
||||||
},
|
},
|
||||||
|
|
||||||
open: function() {
|
open: function(animate) {
|
||||||
if (this.isOpen)
|
if (this.isOpen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this.isOpen = true;
|
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);
|
let [naturalHeight, minHeight] = this.actor.get_preferred_height(-1);
|
||||||
this.actor.height = 0;
|
this.actor.height = 0;
|
||||||
this.actor.show();
|
this.actor.show();
|
||||||
@ -874,7 +884,7 @@ PopupSubMenu.prototype = {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
close: function() {
|
close: function(animate) {
|
||||||
if (!this.isOpen)
|
if (!this.isOpen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -883,6 +893,7 @@ PopupSubMenu.prototype = {
|
|||||||
if (this._activeMenuItem)
|
if (this._activeMenuItem)
|
||||||
this._activeMenuItem.setActive(false);
|
this._activeMenuItem.setActive(false);
|
||||||
|
|
||||||
|
if (animate) {
|
||||||
this.actor._arrow_rotation = this._arrow.rotation_angle_z;
|
this.actor._arrow_rotation = this._arrow.rotation_angle_z;
|
||||||
Tweener.addTween(this.actor,
|
Tweener.addTween(this.actor,
|
||||||
{ _arrow_rotation: 0,
|
{ _arrow_rotation: 0,
|
||||||
@ -900,27 +911,20 @@ PopupSubMenu.prototype = {
|
|||||||
this._arrow.rotation_angle_z = this.actor._arrow_rotation;
|
this._arrow.rotation_angle_z = this.actor._arrow_rotation;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
} else {
|
||||||
|
|
||||||
immediateClose: function() {
|
|
||||||
if (!this.isOpen)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (this._activeMenuItem)
|
|
||||||
this._activeMenuItem.setActive(false);
|
|
||||||
|
|
||||||
this._arrow.rotation_angle_z = 0;
|
this._arrow.rotation_angle_z = 0;
|
||||||
this.actor.hide();
|
this.actor.hide();
|
||||||
|
|
||||||
this.isOpen = false;
|
this.isOpen = false;
|
||||||
this.emit('open-state-changed', false);
|
this.emit('open-state-changed', false);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_onKeyPressEvent: function(actor, event) {
|
_onKeyPressEvent: function(actor, event) {
|
||||||
// Move focus back to parent menu if the user types Left.
|
// Move focus back to parent menu if the user types Left.
|
||||||
|
|
||||||
if (this.isOpen && event.get_key_symbol() == Clutter.KEY_Left) {
|
if (this.isOpen && event.get_key_symbol() == Clutter.KEY_Left) {
|
||||||
this.close();
|
this.close(true);
|
||||||
this.sourceActor._delegate.setActive(true);
|
this.sourceActor._delegate.setActive(true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -964,7 +968,7 @@ PopupSubMenuMenuItem.prototype = {
|
|||||||
|
|
||||||
_onKeyPressEvent: function(actor, event) {
|
_onKeyPressEvent: function(actor, event) {
|
||||||
if (event.get_key_symbol() == Clutter.KEY_Right) {
|
if (event.get_key_symbol() == Clutter.KEY_Right) {
|
||||||
this.menu.open();
|
this.menu.open(true);
|
||||||
this.menu.activateFirst();
|
this.menu.activateFirst();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -972,7 +976,7 @@ PopupSubMenuMenuItem.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
activate: function(event) {
|
activate: function(event) {
|
||||||
this.menu.open();
|
this.menu.open(true);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onButtonReleaseEvent: function(actor) {
|
_onButtonReleaseEvent: function(actor) {
|
||||||
@ -999,23 +1003,24 @@ PopupMenuManager.prototype = {
|
|||||||
this._leaveEventId = 0;
|
this._leaveEventId = 0;
|
||||||
this._activeMenu = null;
|
this._activeMenu = null;
|
||||||
this._menus = [];
|
this._menus = [];
|
||||||
this._delayedMenus = [];
|
this._preGrabInputMode = null;
|
||||||
},
|
},
|
||||||
|
|
||||||
addMenu: function(menu, position) {
|
addMenu: function(menu, position) {
|
||||||
let menudata = {
|
let menudata = {
|
||||||
menu: menu,
|
menu: menu,
|
||||||
openStateChangeId: menu.connect('open-state-changed', Lang.bind(this, this._onMenuOpenState)),
|
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)),
|
destroyId: menu.connect('destroy', Lang.bind(this, this._onMenuDestroy)),
|
||||||
enterId: 0,
|
enterId: 0,
|
||||||
focusId: 0
|
focusInId: 0,
|
||||||
|
focusOutId: 0
|
||||||
};
|
};
|
||||||
|
|
||||||
let source = menu.sourceActor;
|
let source = menu.sourceActor;
|
||||||
if (source) {
|
if (source) {
|
||||||
menudata.enterId = source.connect('enter-event', Lang.bind(this, function() { this._onMenuSourceEnter(menu); }));
|
menudata.enterId = source.connect('enter-event', Lang.bind(this, function() { this._onMenuSourceEnter(menu); }));
|
||||||
menudata.focusId = source.connect('key-focus-in', Lang.bind(this, function() { this._onMenuSourceEnter(menu); }));
|
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)
|
if (position == undefined)
|
||||||
@ -1034,18 +1039,19 @@ PopupMenuManager.prototype = {
|
|||||||
|
|
||||||
let menudata = this._menus[position];
|
let menudata = this._menus[position];
|
||||||
menu.disconnect(menudata.openStateChangeId);
|
menu.disconnect(menudata.openStateChangeId);
|
||||||
menu.disconnect(menudata.activateId);
|
|
||||||
menu.disconnect(menudata.destroyId);
|
menu.disconnect(menudata.destroyId);
|
||||||
|
|
||||||
if (menudata.enterId)
|
if (menudata.enterId)
|
||||||
menu.sourceActor.disconnect(menudata.enterId);
|
menu.sourceActor.disconnect(menudata.enterId);
|
||||||
if (menudata.focusId)
|
if (menudata.focusInId)
|
||||||
menu.sourceActor.disconnect(menudata.focusId);
|
menu.sourceActor.disconnect(menudata.focusInId);
|
||||||
|
if (menudata.focusOutId)
|
||||||
|
menu.sourceActor.disconnect(menudata.focusOutId);
|
||||||
|
|
||||||
this._menus.splice(position, 1);
|
this._menus.splice(position, 1);
|
||||||
},
|
},
|
||||||
|
|
||||||
grab: function() {
|
_grab: function() {
|
||||||
Main.pushModal(this._owner.actor);
|
Main.pushModal(this._owner.actor);
|
||||||
|
|
||||||
this._eventCaptureId = global.stage.connect('captured-event', Lang.bind(this, this._onEventCapture));
|
this._eventCaptureId = global.stage.connect('captured-event', Lang.bind(this, this._onEventCapture));
|
||||||
@ -1057,7 +1063,7 @@ PopupMenuManager.prototype = {
|
|||||||
this.grabbed = true;
|
this.grabbed = true;
|
||||||
},
|
},
|
||||||
|
|
||||||
ungrab: function() {
|
_ungrab: function() {
|
||||||
global.stage.disconnect(this._eventCaptureId);
|
global.stage.disconnect(this._eventCaptureId);
|
||||||
this._eventCaptureId = 0;
|
this._eventCaptureId = 0;
|
||||||
global.stage.disconnect(this._keyPressEventId);
|
global.stage.disconnect(this._keyPressEventId);
|
||||||
@ -1073,40 +1079,100 @@ PopupMenuManager.prototype = {
|
|||||||
|
|
||||||
_onMenuOpenState: function(menu, open) {
|
_onMenuOpenState: function(menu, open) {
|
||||||
if (open) {
|
if (open) {
|
||||||
this._activeMenu = menu;
|
if (!this.grabbed) {
|
||||||
if (!this.grabbed)
|
this._preGrabInputMode = global.stage_input_mode;
|
||||||
this.grab();
|
this._grab();
|
||||||
} else if (menu == this._activeMenu) {
|
|
||||||
this._activeMenu = null;
|
|
||||||
if (this.grabbed)
|
|
||||||
this.ungrab();
|
|
||||||
}
|
}
|
||||||
|
this._activeMenu = menu;
|
||||||
|
|
||||||
|
// 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) {
|
||||||
|
let focus = global.stage.key_focus;
|
||||||
|
let fromActive = this._activeMenuContains(focus);
|
||||||
|
|
||||||
|
if (this.grabbed)
|
||||||
|
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) {
|
_onMenuSourceEnter: function(menu) {
|
||||||
if (!this.grabbed || menu == this._activeMenu)
|
if (!this.grabbed || menu == this._activeMenu)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (this._activeMenu != null)
|
this._changeMenu(menu);
|
||||||
this._activeMenu.close();
|
|
||||||
menu.open();
|
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onMenuActivated: function(menu, item) {
|
_onKeyFocusOut: function(menu) {
|
||||||
if (this.grabbed)
|
if (!this.grabbed || menu != this._activeMenu)
|
||||||
this.ungrab();
|
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) {
|
_onMenuDestroy: function(menu) {
|
||||||
this.removeMenu(menu);
|
this.removeMenu(menu);
|
||||||
},
|
},
|
||||||
|
|
||||||
_eventIsOnActiveMenu: function(event) {
|
_activeMenuContains: function(actor) {
|
||||||
let src = event.get_source();
|
|
||||||
return this._activeMenu != null
|
return this._activeMenu != null
|
||||||
&& (this._activeMenu.actor.contains(src) ||
|
&& (this._activeMenu.actor.contains(actor) ||
|
||||||
(this._activeMenu.sourceActor && this._activeMenu.sourceActor.contains(src)));
|
(this._activeMenu.sourceActor && this._activeMenu.sourceActor.contains(actor)));
|
||||||
|
},
|
||||||
|
|
||||||
|
_eventIsOnActiveMenu: function(event) {
|
||||||
|
return this._activeMenuContains(event.get_source());
|
||||||
},
|
},
|
||||||
|
|
||||||
_eventIsOnAnyMenuSource: function(event) {
|
_eventIsOnAnyMenuSource: function(event) {
|
||||||
@ -1128,6 +1194,18 @@ PopupMenuManager.prototype = {
|
|||||||
return -1;
|
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) {
|
_onEventCapture: function(actor, event) {
|
||||||
if (!this.grabbed)
|
if (!this.grabbed)
|
||||||
return false;
|
return false;
|
||||||
@ -1166,12 +1244,9 @@ PopupMenuManager.prototype = {
|
|||||||
if (symbol == Clutter.Left || symbol == Clutter.Right) {
|
if (symbol == Clutter.Left || symbol == Clutter.Right) {
|
||||||
let direction = symbol == Clutter.Right ? 1 : -1;
|
let direction = symbol == Clutter.Right ? 1 : -1;
|
||||||
let pos = this._findMenu(this._activeMenu);
|
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) {
|
if (next != this._activeMenu) {
|
||||||
let oldMenu = this._activeMenu;
|
this._changeMenu(next);
|
||||||
this._activeMenu = next;
|
|
||||||
oldMenu.close();
|
|
||||||
next.open();
|
|
||||||
next.activateFirst();
|
next.activateFirst();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -1182,6 +1257,6 @@ PopupMenuManager.prototype = {
|
|||||||
|
|
||||||
_closeMenu: function() {
|
_closeMenu: function() {
|
||||||
if (this._activeMenu != null)
|
if (this._activeMenu != null)
|
||||||
this._activeMenu.close();
|
this._activeMenu.close(true);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -11,16 +11,18 @@ const Signals = imports.signals;
|
|||||||
const Gettext = imports.gettext.domain('gnome-shell');
|
const Gettext = imports.gettext.domain('gnome-shell');
|
||||||
const _ = Gettext.gettext;
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
const Lightbox = imports.ui.lightbox;
|
const FileUtils = imports.misc.fileUtils;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
|
const ModalDialog = imports.ui.modalDialog;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
const MAX_FILE_DELETED_BEFORE_INVALID = 10;
|
const MAX_FILE_DELETED_BEFORE_INVALID = 10;
|
||||||
|
|
||||||
const HISTORY_KEY = 'command-history';
|
const HISTORY_KEY = 'command-history';
|
||||||
const HISTORY_LIMIT = 512;
|
const HISTORY_LIMIT = 512;
|
||||||
|
|
||||||
const DIALOG_FADE_TIME = 0.1;
|
const DIALOG_GROW_TIME = 0.1;
|
||||||
|
|
||||||
function CommandCompleter() {
|
function CommandCompleter() {
|
||||||
this._init();
|
this._init();
|
||||||
@ -62,25 +64,6 @@ CommandCompleter.prototype = {
|
|||||||
this._update(0);
|
this._update(0);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onGetEnumerateComplete : function(obj, res) {
|
|
||||||
this._enumerator = obj.enumerate_children_finish(res);
|
|
||||||
this._enumerator.next_files_async(100, GLib.PRIORITY_LOW, null, Lang.bind(this, this._onNextFileComplete));
|
|
||||||
},
|
|
||||||
|
|
||||||
_onNextFileComplete : function(obj, res) {
|
|
||||||
let files = obj.next_files_finish(res);
|
|
||||||
for (let i = 0; i < files.length; i++) {
|
|
||||||
this._childs[this._i].push(files[i].get_name());
|
|
||||||
}
|
|
||||||
if (files.length) {
|
|
||||||
this._enumerator.next_files_async(100, GLib.PRIORITY_LOW, null, Lang.bind(this, this._onNextFileComplete));
|
|
||||||
} else {
|
|
||||||
this._enumerator.close(null);
|
|
||||||
this._enumerator = null;
|
|
||||||
this._update(this._i + 1);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
update : function() {
|
update : function() {
|
||||||
if (this._valid)
|
if (this._valid)
|
||||||
return;
|
return;
|
||||||
@ -100,7 +83,12 @@ CommandCompleter.prototype = {
|
|||||||
}
|
}
|
||||||
let file = Gio.file_new_for_path(this._paths[i]);
|
let file = Gio.file_new_for_path(this._paths[i]);
|
||||||
this._childs[this._i] = [];
|
this._childs[this._i] = [];
|
||||||
file.enumerate_children_async(Gio.FILE_ATTRIBUTE_STANDARD_NAME, Gio.FileQueryInfoFlags.NONE, GLib.PRIORITY_LOW, null, Lang.bind(this, this._onGetEnumerateComplete));
|
FileUtils.listDirAsync(file, Lang.bind(this, function (files) {
|
||||||
|
for (let i = 0; i < files.length; i++) {
|
||||||
|
this._childs[this._i].push(files[i].get_name());
|
||||||
|
}
|
||||||
|
this._update(this._i + 1);
|
||||||
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
_onChanged : function(m, f, of, type) {
|
_onChanged : function(m, f, of, type) {
|
||||||
@ -175,8 +163,9 @@ function RunDialog() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
RunDialog.prototype = {
|
RunDialog.prototype = {
|
||||||
|
__proto__: ModalDialog.ModalDialog.prototype,
|
||||||
_init : function() {
|
_init : function() {
|
||||||
this._isOpen = false;
|
ModalDialog.ModalDialog.prototype._init.call(this, { styleClass: 'run-dialog' });
|
||||||
|
|
||||||
global.settings.connect('changed::development-tools', Lang.bind(this, function () {
|
global.settings.connect('changed::development-tools', Lang.bind(this, function () {
|
||||||
this._enableInternalCommands = global.settings.get_boolean('development-tools');
|
this._enableInternalCommands = global.settings.get_boolean('development-tools');
|
||||||
@ -207,41 +196,32 @@ RunDialog.prototype = {
|
|||||||
|
|
||||||
'debugexit': Lang.bind(this, function() {
|
'debugexit': Lang.bind(this, function() {
|
||||||
Meta.exit(Meta.ExitCode.ERROR);
|
Meta.exit(Meta.ExitCode.ERROR);
|
||||||
|
}),
|
||||||
|
|
||||||
|
// rt is short for "reload theme"
|
||||||
|
'rt': Lang.bind(this, function() {
|
||||||
|
Main.loadTheme();
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
// All actors are inside _group. We create it initially
|
|
||||||
// hidden then show it in show()
|
|
||||||
this._group = new Clutter.Group({ visible: false,
|
|
||||||
x: 0, y: 0 });
|
|
||||||
Main.uiGroup.add_actor(this._group);
|
|
||||||
|
|
||||||
this._lightbox = new Lightbox.Lightbox(this._group,
|
|
||||||
{ inhibitEvents: true });
|
|
||||||
|
|
||||||
this._box = new St.Bin({ x_align: St.Align.MIDDLE,
|
|
||||||
y_align: St.Align.MIDDLE });
|
|
||||||
|
|
||||||
this._group.add_actor(this._box);
|
|
||||||
this._lightbox.highlight(this._box);
|
|
||||||
|
|
||||||
let dialogBox = new St.BoxLayout({ style_class: 'run-dialog', vertical: true });
|
|
||||||
|
|
||||||
this._box.set_child(dialogBox);
|
|
||||||
|
|
||||||
let label = new St.Label({ style_class: 'run-dialog-label',
|
let label = new St.Label({ style_class: 'run-dialog-label',
|
||||||
text: _("Please enter a command:") });
|
text: _("Please enter a command:") });
|
||||||
|
|
||||||
dialogBox.add(label, { expand: true, y_fill: false });
|
this.contentLayout.add(label, { y_align: St.Align.START });
|
||||||
|
|
||||||
let entry = new St.Entry({ style_class: 'run-dialog-entry' });
|
let entry = new St.Entry({ style_class: 'run-dialog-entry' });
|
||||||
|
|
||||||
this._entryText = entry.clutter_text;
|
this._entryText = entry.clutter_text;
|
||||||
dialogBox.add(entry, { expand: true });
|
this.contentLayout.add(entry, { y_align: St.Align.START });
|
||||||
|
this.connect('opened',
|
||||||
|
Lang.bind(this, function() {
|
||||||
|
this._entryText.grab_key_focus();
|
||||||
|
}));
|
||||||
|
|
||||||
this._errorBox = new St.BoxLayout();
|
this._errorBox = new St.BoxLayout();
|
||||||
|
|
||||||
dialogBox.add(this._errorBox, { expand: true });
|
this.contentLayout.add(this._errorBox, { expand: true });
|
||||||
|
|
||||||
let errorIcon = new St.Button({ style_class: 'run-dialog-error-icon' });
|
let errorIcon = new St.Button({ style_class: 'run-dialog-error-icon' });
|
||||||
|
|
||||||
@ -275,10 +255,10 @@ RunDialog.prototype = {
|
|||||||
else
|
else
|
||||||
this._run(o.get_text(), false);
|
this._run(o.get_text(), false);
|
||||||
if (!this._commandError)
|
if (!this._commandError)
|
||||||
this.close();
|
this.close(global.get_current_time());
|
||||||
}
|
}
|
||||||
if (symbol == Clutter.Escape) {
|
if (symbol == Clutter.Escape) {
|
||||||
this.close();
|
this.close(global.get_current_time());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (symbol == Clutter.slash) {
|
if (symbol == Clutter.slash) {
|
||||||
@ -349,9 +329,7 @@ RunDialog.prototype = {
|
|||||||
try {
|
try {
|
||||||
if (inTerminal)
|
if (inTerminal)
|
||||||
command = 'gnome-terminal -x ' + input;
|
command = 'gnome-terminal -x ' + input;
|
||||||
let [ok, len, args] = GLib.shell_parse_argv(command);
|
Util.trySpawnCommandLine(command);
|
||||||
let p = new Shell.Process({ 'args' : args });
|
|
||||||
p.run();
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// Mmmh, that failed - see if @input matches an existing file
|
// Mmmh, that failed - see if @input matches an existing file
|
||||||
let path = null;
|
let path = null;
|
||||||
@ -369,16 +347,25 @@ RunDialog.prototype = {
|
|||||||
global.create_app_launch_context());
|
global.create_app_launch_context());
|
||||||
} else {
|
} else {
|
||||||
this._commandError = true;
|
this._commandError = true;
|
||||||
// The exception contains an error string like:
|
|
||||||
// Error invoking Shell.run: Failed to execute child
|
let errorStr = _("Execution of '%s' failed:").format(command) + '\n' + e.message;
|
||||||
// process "foo" (No such file or directory)
|
|
||||||
// We are only interested in the actual error, so parse
|
|
||||||
//that out.
|
|
||||||
let m = /.+\((.+)\)/.exec(e);
|
|
||||||
let errorStr = _("Execution of '%s' failed:").format(command) + '\n' + m[1];
|
|
||||||
this._errorMessage.set_text(errorStr);
|
this._errorMessage.set_text(errorStr);
|
||||||
|
|
||||||
|
if (!this._errorBox.visible) {
|
||||||
|
let [errorBoxMinHeight, errorBoxNaturalHeight] = this._errorBox.get_preferred_height(-1);
|
||||||
|
|
||||||
|
let parentActor = this._errorBox.get_parent();
|
||||||
|
Tweener.addTween(parentActor,
|
||||||
|
{ height: parentActor.height + errorBoxNaturalHeight,
|
||||||
|
time: DIALOG_GROW_TIME,
|
||||||
|
transition: 'easeOutQuad',
|
||||||
|
onComplete: Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
parentActor.set_height(-1);
|
||||||
this._errorBox.show();
|
this._errorBox.show();
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -401,52 +388,13 @@ RunDialog.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
open: function() {
|
open: function() {
|
||||||
if (this._isOpen) // Already shown
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!Main.pushModal(this._group))
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Position the dialog on the current monitor
|
|
||||||
let monitor = global.get_focus_monitor();
|
|
||||||
|
|
||||||
this._historyIndex = this._history.length;
|
this._historyIndex = this._history.length;
|
||||||
|
this._errorBox.hide();
|
||||||
this._box.set_position(monitor.x, monitor.y);
|
this._entryText.set_text('');
|
||||||
this._box.set_size(monitor.width, monitor.height);
|
|
||||||
|
|
||||||
this._isOpen = true;
|
|
||||||
this._lightbox.show();
|
|
||||||
this._group.opacity = 0;
|
|
||||||
this._group.show();
|
|
||||||
Tweener.addTween(this._group,
|
|
||||||
{ opacity: 255,
|
|
||||||
time: DIALOG_FADE_TIME,
|
|
||||||
transition: 'easeOutQuad'
|
|
||||||
});
|
|
||||||
|
|
||||||
global.stage.set_key_focus(this._entryText);
|
|
||||||
},
|
|
||||||
|
|
||||||
close : function() {
|
|
||||||
if (!this._isOpen)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._isOpen = false;
|
|
||||||
this._commandError = false;
|
this._commandError = false;
|
||||||
|
|
||||||
Main.popModal(this._group);
|
ModalDialog.ModalDialog.prototype.open.call(this);
|
||||||
|
},
|
||||||
|
|
||||||
Tweener.addTween(this._group,
|
|
||||||
{ opacity: 0,
|
|
||||||
time: DIALOG_FADE_TIME,
|
|
||||||
transition: 'easeOutQuad',
|
|
||||||
onComplete: Lang.bind(this, function() {
|
|
||||||
this._errorBox.hide();
|
|
||||||
this._group.hide();
|
|
||||||
this._entryText.set_text('');
|
|
||||||
})
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
Signals.addSignalMethods(RunDialog.prototype);
|
Signals.addSignalMethods(RunDialog.prototype);
|
||||||
|
114
js/ui/search.js
114
js/ui/search.js
@ -1,6 +1,19 @@
|
|||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
|
const Lang = imports.lang;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain('gnome-shell');
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
|
const FileUtils = imports.misc.fileUtils;
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
|
||||||
|
const DISABLED_OPEN_SEARCH_PROVIDERS_KEY = 'disabled-open-search-providers';
|
||||||
|
|
||||||
const RESULT_ICON_SIZE = 48;
|
const RESULT_ICON_SIZE = 48;
|
||||||
|
|
||||||
@ -211,6 +224,107 @@ SearchProvider.prototype = {
|
|||||||
};
|
};
|
||||||
Signals.addSignalMethods(SearchProvider.prototype);
|
Signals.addSignalMethods(SearchProvider.prototype);
|
||||||
|
|
||||||
|
function OpenSearchSystem(title) {
|
||||||
|
this._init(title);
|
||||||
|
}
|
||||||
|
|
||||||
|
OpenSearchSystem.prototype = {
|
||||||
|
_init: function() {
|
||||||
|
this._providers = [];
|
||||||
|
global.settings.connect('changed::' + DISABLED_OPEN_SEARCH_PROVIDERS_KEY, Lang.bind(this, this._refresh));
|
||||||
|
this._refresh();
|
||||||
|
},
|
||||||
|
|
||||||
|
getProviders: function() {
|
||||||
|
let res = [];
|
||||||
|
for (let i = 0; i < this._providers.length; i++)
|
||||||
|
res.push({ id: i, name: this._providers[i].name });
|
||||||
|
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
|
||||||
|
setSearchTerms: function(terms) {
|
||||||
|
this._terms = terms;
|
||||||
|
},
|
||||||
|
|
||||||
|
_checkSupportedProviderLanguage: function(provider) {
|
||||||
|
if (provider.url.search(/{language}/) == -1)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
let langs = GLib.get_language_names();
|
||||||
|
|
||||||
|
langs.push('en');
|
||||||
|
let lang = null;
|
||||||
|
for (let i = 0; i < langs.length; i++) {
|
||||||
|
for (let k = 0; k < provider.langs.length; k++) {
|
||||||
|
if (langs[i] == provider.langs[k])
|
||||||
|
lang = langs[i];
|
||||||
|
}
|
||||||
|
if (lang)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
provider.lang = lang;
|
||||||
|
return lang != null;
|
||||||
|
},
|
||||||
|
|
||||||
|
activateResult: function(id) {
|
||||||
|
let searchTerms = this._terms.join(' ');
|
||||||
|
|
||||||
|
let url = this._providers[id].url.replace('{searchTerms}', encodeURIComponent(searchTerms));
|
||||||
|
if (url.match('{language}'))
|
||||||
|
url = url.replace('{language}', this._providers[id].lang);
|
||||||
|
|
||||||
|
try {
|
||||||
|
Gio.app_info_launch_default_for_uri(url, global.create_app_launch_context());
|
||||||
|
} catch (e) {
|
||||||
|
// TODO: remove this after glib will be removed from moduleset
|
||||||
|
// In the default jhbuild, gio is in our prefix but gvfs is not
|
||||||
|
Util.spawn(['gvfs-open', url])
|
||||||
|
}
|
||||||
|
|
||||||
|
Main.overview.hide();
|
||||||
|
},
|
||||||
|
|
||||||
|
_addProvider: function(fileName) {
|
||||||
|
let file = Gio.file_new_for_path(global.datadir + '/search_providers/' + fileName);
|
||||||
|
let source = '';
|
||||||
|
|
||||||
|
file.load_contents_async(null, Lang.bind(this, function (obj, res) {
|
||||||
|
let [success, source] = file.load_contents_finish(res);
|
||||||
|
if (source) {
|
||||||
|
let [success, name, url, langs, icon_uri] = global.parse_search_provider(source);
|
||||||
|
let provider ={ name: name,
|
||||||
|
url: url,
|
||||||
|
id: this._providers.length,
|
||||||
|
icon_uri: icon_uri,
|
||||||
|
langs: langs };
|
||||||
|
if (this._checkSupportedProviderLanguage(provider)) {
|
||||||
|
this._providers.push(provider);
|
||||||
|
this.emit('changed');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
|
||||||
|
_refresh: function() {
|
||||||
|
this._providers = [];
|
||||||
|
let names = global.settings.get_strv(DISABLED_OPEN_SEARCH_PROVIDERS_KEY);
|
||||||
|
let file = Gio.file_new_for_path(global.datadir + '/search_providers');
|
||||||
|
FileUtils.listDirAsync(file, Lang.bind(this, function(files) {
|
||||||
|
for (let i = 0; i < files.length; i++) {
|
||||||
|
let enabled = true;
|
||||||
|
let name = files[i].get_name();
|
||||||
|
for (let k = 0; k < names.length; k++)
|
||||||
|
if (names[k] == name)
|
||||||
|
enabled = false;
|
||||||
|
if (enabled)
|
||||||
|
this._addProvider(name);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Signals.addSignalMethods(OpenSearchSystem.prototype);
|
||||||
|
|
||||||
function SearchSystem() {
|
function SearchSystem() {
|
||||||
this._init();
|
this._init();
|
||||||
}
|
}
|
||||||
|
@ -149,18 +149,18 @@ GridSearchResults.prototype = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
function SearchResults(searchSystem) {
|
function SearchResults(searchSystem, openSearchSystem) {
|
||||||
this._init(searchSystem);
|
this._init(searchSystem, openSearchSystem);
|
||||||
}
|
}
|
||||||
|
|
||||||
SearchResults.prototype = {
|
SearchResults.prototype = {
|
||||||
_init: function(searchSystem) {
|
_init: function(searchSystem, openSearchSystem) {
|
||||||
this._searchSystem = searchSystem;
|
this._searchSystem = searchSystem;
|
||||||
|
this._openSearchSystem = openSearchSystem;
|
||||||
|
|
||||||
|
this.actor = new St.BoxLayout({ name: 'searchResults',
|
||||||
|
vertical: true });
|
||||||
|
|
||||||
this.actor = new St.Bin({ name: 'searchResults',
|
|
||||||
y_align: St.Align.START,
|
|
||||||
x_align: St.Align.START,
|
|
||||||
x_fill: true });
|
|
||||||
this._content = new St.BoxLayout({ name: 'searchResultsContent',
|
this._content = new St.BoxLayout({ name: 'searchResultsContent',
|
||||||
vertical: true });
|
vertical: true });
|
||||||
|
|
||||||
@ -170,7 +170,11 @@ SearchResults.prototype = {
|
|||||||
scrollView.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
scrollView.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
||||||
scrollView.add_actor(this._content);
|
scrollView.add_actor(this._content);
|
||||||
|
|
||||||
this.actor.set_child(scrollView);
|
this.actor.add(scrollView, { x_fill: true,
|
||||||
|
y_fill: false,
|
||||||
|
expand: true,
|
||||||
|
x_align: St.Align.START,
|
||||||
|
y_align: St.Align.START });
|
||||||
|
|
||||||
this._statusText = new St.Label({ style_class: 'search-statustext' });
|
this._statusText = new St.Label({ style_class: 'search-statustext' });
|
||||||
this._content.add(this._statusText);
|
this._content.add(this._statusText);
|
||||||
@ -179,6 +183,51 @@ SearchResults.prototype = {
|
|||||||
this._providerMeta = [];
|
this._providerMeta = [];
|
||||||
for (let i = 0; i < this._providers.length; i++)
|
for (let i = 0; i < this._providers.length; i++)
|
||||||
this.createProviderMeta(this._providers[i]);
|
this.createProviderMeta(this._providers[i]);
|
||||||
|
|
||||||
|
this._searchProvidersBox = new St.BoxLayout({ style_class: 'search-providers-box' });
|
||||||
|
this.actor.add(this._searchProvidersBox);
|
||||||
|
|
||||||
|
this._openSearchProviders = [];
|
||||||
|
this._openSearchSystem.connect('changed', Lang.bind(this, this._updateOpenSearchProviderButtons));
|
||||||
|
this._updateOpenSearchProviderButtons();
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateOpenSearchProviderButtons: function() {
|
||||||
|
this._selectedOpenSearchButton = -1;
|
||||||
|
for (let i = 0; i < this._openSearchProviders.length; i++)
|
||||||
|
this._openSearchProviders[i].actor.destroy();
|
||||||
|
this._openSearchProviders = this._openSearchSystem.getProviders();
|
||||||
|
for (let i = 0; i < this._openSearchProviders.length; i++)
|
||||||
|
this._createOpenSearchProviderButton(this._openSearchProviders[i]);
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateOpenSearchButtonState: function() {
|
||||||
|
for (let i = 0; i < this._openSearchProviders.length; i++) {
|
||||||
|
if (i == this._selectedOpenSearchButton)
|
||||||
|
this._openSearchProviders[i].actor.add_style_pseudo_class('selected');
|
||||||
|
else
|
||||||
|
this._openSearchProviders[i].actor.remove_style_pseudo_class('selected');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_createOpenSearchProviderButton: function(provider) {
|
||||||
|
let clickable = new St.Clickable({ style_class: 'dash-search-button',
|
||||||
|
reactive: true,
|
||||||
|
x_fill: true,
|
||||||
|
y_align: St.Align.MIDDLE });
|
||||||
|
let bin = new St.Bin({ x_fill: false,
|
||||||
|
x_align:St.Align.MIDDLE });
|
||||||
|
clickable.connect('clicked', Lang.bind(this, function() {
|
||||||
|
this._openSearchSystem.activateResult(provider.id);
|
||||||
|
}));
|
||||||
|
let title = new St.Label({ text: provider.name,
|
||||||
|
style_class: 'dash-search-button-label' });
|
||||||
|
|
||||||
|
bin.set_child(title);
|
||||||
|
clickable.set_child(bin);
|
||||||
|
provider.actor = clickable;
|
||||||
|
|
||||||
|
this._searchProvidersBox.add(clickable);
|
||||||
},
|
},
|
||||||
|
|
||||||
createProviderMeta: function(provider) {
|
createProviderMeta: function(provider) {
|
||||||
@ -227,6 +276,8 @@ SearchResults.prototype = {
|
|||||||
this._searchSystem.reset();
|
this._searchSystem.reset();
|
||||||
this._statusText.hide();
|
this._statusText.hide();
|
||||||
this._clearDisplay();
|
this._clearDisplay();
|
||||||
|
this._selectedOpenSearchButton = -1;
|
||||||
|
this._updateOpenSearchButtonState();
|
||||||
},
|
},
|
||||||
|
|
||||||
startingSearch: function() {
|
startingSearch: function() {
|
||||||
@ -247,12 +298,12 @@ SearchResults.prototype = {
|
|||||||
if (results.length == 0) {
|
if (results.length == 0) {
|
||||||
this._statusText.set_text(_("No matching results."));
|
this._statusText.set_text(_("No matching results."));
|
||||||
this._statusText.show();
|
this._statusText.show();
|
||||||
return true;
|
|
||||||
} else {
|
} else {
|
||||||
this._statusText.hide();
|
this._statusText.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
let terms = this._searchSystem.getTerms();
|
let terms = this._searchSystem.getTerms();
|
||||||
|
this._openSearchSystem.setSearchTerms(terms);
|
||||||
|
|
||||||
for (let i = 0; i < results.length; i++) {
|
for (let i = 0; i < results.length; i++) {
|
||||||
let [provider, providerResults] = results[i];
|
let [provider, providerResults] = results[i];
|
||||||
@ -262,6 +313,7 @@ SearchResults.prototype = {
|
|||||||
meta.count.set_text('' + providerResults.length);
|
meta.count.set_text('' + providerResults.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this._selectedOpenSearchButton == -1)
|
||||||
this.selectDown(false);
|
this.selectDown(false);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -284,6 +336,7 @@ SearchResults.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
selectUp: function(recursing) {
|
selectUp: function(recursing) {
|
||||||
|
if (this._selectedOpenSearchButton == -1) {
|
||||||
for (let i = this._selectedProvider; i >= 0; i--) {
|
for (let i = this._selectedProvider; i >= 0; i--) {
|
||||||
let meta = this._providerMeta[i];
|
let meta = this._providerMeta[i];
|
||||||
if (!meta.actor.visible)
|
if (!meta.actor.visible)
|
||||||
@ -294,6 +347,15 @@ SearchResults.prototype = {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._selectedOpenSearchButton == -1)
|
||||||
|
this._selectedOpenSearchButton = this._openSearchProviders.length;
|
||||||
|
this._selectedOpenSearchButton--;
|
||||||
|
this._updateOpenSearchButtonState();
|
||||||
|
if (this._selectedOpenSearchButton >= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
if (this._providerMeta.length > 0 && !recursing) {
|
if (this._providerMeta.length > 0 && !recursing) {
|
||||||
this._selectedProvider = this._providerMeta.length - 1;
|
this._selectedProvider = this._providerMeta.length - 1;
|
||||||
this.selectUp(true);
|
this.selectUp(true);
|
||||||
@ -302,6 +364,7 @@ SearchResults.prototype = {
|
|||||||
|
|
||||||
selectDown: function(recursing) {
|
selectDown: function(recursing) {
|
||||||
let current = this._selectedProvider;
|
let current = this._selectedProvider;
|
||||||
|
if (this._selectedOpenSearchButton == -1) {
|
||||||
if (current == -1)
|
if (current == -1)
|
||||||
current = 0;
|
current = 0;
|
||||||
for (let i = current; i < this._providerMeta.length; i++) {
|
for (let i = current; i < this._providerMeta.length; i++) {
|
||||||
@ -314,6 +377,17 @@ SearchResults.prototype = {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
this._selectedOpenSearchButton++;
|
||||||
|
|
||||||
|
if (this._selectedOpenSearchButton < this._openSearchProviders.length) {
|
||||||
|
this._updateOpenSearchButtonState();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._selectedOpenSearchButton = -1;
|
||||||
|
this._updateOpenSearchButtonState();
|
||||||
|
|
||||||
if (this._providerMeta.length > 0 && !recursing) {
|
if (this._providerMeta.length > 0 && !recursing) {
|
||||||
this._selectedProvider = 0;
|
this._selectedProvider = 0;
|
||||||
this.selectDown(true);
|
this.selectDown(true);
|
||||||
@ -321,6 +395,13 @@ SearchResults.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
activateSelected: function() {
|
activateSelected: function() {
|
||||||
|
if (this._selectedOpenSearchButton != -1) {
|
||||||
|
let provider = this._openSearchProviders[this._selectedOpenSearchButton];
|
||||||
|
this._openSearchSystem.activateResult(provider.id);
|
||||||
|
Main.overview.hide();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let current = this._selectedProvider;
|
let current = this._selectedProvider;
|
||||||
if (current < 0)
|
if (current < 0)
|
||||||
return;
|
return;
|
||||||
|
@ -12,6 +12,7 @@ const St = imports.gi.St;
|
|||||||
|
|
||||||
const PanelMenu = imports.ui.panelMenu;
|
const PanelMenu = imports.ui.panelMenu;
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
const Gettext = imports.gettext.domain('gnome-shell');
|
const Gettext = imports.gettext.domain('gnome-shell');
|
||||||
const _ = Gettext.gettext;
|
const _ = Gettext.gettext;
|
||||||
@ -108,8 +109,7 @@ ATIndicator.prototype = {
|
|||||||
|
|
||||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
this.menu.addAction(_("Universal Access Settings"), function() {
|
this.menu.addAction(_("Universal Access Settings"), function() {
|
||||||
let p = new Shell.Process({ args: ['gnome-control-center','universal-access'] });
|
Util.spawnDesktop('gnome-universal-access-panel');
|
||||||
p.run();
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -65,16 +65,17 @@ Indicator.prototype = {
|
|||||||
this.menu.addMenuItem(this._discoverable);
|
this.menu.addMenuItem(this._discoverable);
|
||||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
|
|
||||||
this._fullMenuItems = [new PopupMenu.PopupMenuItem(_("Send Files to Device...")),
|
this._fullMenuItems = [new PopupMenu.PopupSeparatorMenuItem(),
|
||||||
new PopupMenu.PopupSeparatorMenuItem(),
|
new PopupMenu.PopupMenuItem(_("Send Files to Device...")),
|
||||||
new PopupMenu.PopupSeparatorMenuItem(),
|
new PopupMenu.PopupMenuItem(_("Setup a New Device...")),
|
||||||
new PopupMenu.PopupMenuItem(_("Setup a New Device..."))];
|
new PopupMenu.PopupSeparatorMenuItem()];
|
||||||
this._deviceSep = this._fullMenuItems[1]; // hidden if no device exists
|
this._hasDevices = false;
|
||||||
|
this._deviceSep = this._fullMenuItems[0]; // hidden if no device exists
|
||||||
|
|
||||||
this._fullMenuItems[0].connect('activate', function() {
|
this._fullMenuItems[1].connect('activate', function() {
|
||||||
GLib.spawn_command_line_async('bluetooth-sendto');
|
GLib.spawn_command_line_async('bluetooth-sendto');
|
||||||
});
|
});
|
||||||
this._fullMenuItems[3].connect('activate', function() {
|
this._fullMenuItems[2].connect('activate', function() {
|
||||||
GLib.spawn_command_line_async('bluetooth-wizard');
|
GLib.spawn_command_line_async('bluetooth-wizard');
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -83,7 +84,7 @@ Indicator.prototype = {
|
|||||||
this.menu.addMenuItem(item);
|
this.menu.addMenuItem(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._deviceItemPosition = 5;
|
this._deviceItemPosition = 3;
|
||||||
this._deviceItems = [];
|
this._deviceItems = [];
|
||||||
this._applet.connect('devices-changed', Lang.bind(this, this._updateDevices));
|
this._applet.connect('devices-changed', Lang.bind(this, this._updateDevices));
|
||||||
this._updateDevices();
|
this._updateDevices();
|
||||||
@ -104,12 +105,18 @@ Indicator.prototype = {
|
|||||||
_updateKillswitch: function() {
|
_updateKillswitch: function() {
|
||||||
let current_state = this._applet.killswitch_state;
|
let current_state = this._applet.killswitch_state;
|
||||||
let on = current_state == GnomeBluetoothApplet.KillswitchState.UNBLOCKED;
|
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 &&
|
let can_toggle = current_state != GnomeBluetoothApplet.KillswitchState.NO_ADAPTER &&
|
||||||
current_state != GnomeBluetoothApplet.KillswitchState.HARD_BLOCKED;
|
current_state != GnomeBluetoothApplet.KillswitchState.HARD_BLOCKED;
|
||||||
|
|
||||||
this._killswitch.setToggleState(on);
|
this._killswitch.setToggleState(on);
|
||||||
this._killswitch.actor.reactive = can_toggle;
|
this._killswitch.actor.reactive = can_toggle;
|
||||||
|
|
||||||
|
if (has_adapter)
|
||||||
|
this.actor.show();
|
||||||
|
else
|
||||||
|
this.actor.hide();
|
||||||
|
|
||||||
if (on) {
|
if (on) {
|
||||||
this._discoverable.actor.show();
|
this._discoverable.actor.show();
|
||||||
this.setIcon('bluetooth-active');
|
this.setIcon('bluetooth-active');
|
||||||
@ -119,22 +126,56 @@ Indicator.prototype = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateDevices: function() {
|
_deviceCompare: function(d1, d2) {
|
||||||
this._destroyAll(this._deviceItems);
|
return d1.device_path == d2.device_path &&
|
||||||
this._deviceItems = [];
|
d1.bdaddr == d2.bdaddr &&
|
||||||
|
d1.can_connect == d2.can_connect &&
|
||||||
|
d1.capabilities == d2.capabilities;
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateDevices: function() {
|
||||||
let devices = this._applet.get_devices();
|
let devices = this._applet.get_devices();
|
||||||
let anydevice = false;
|
|
||||||
|
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++) {
|
for (let i = 0; i < devices.length; i++) {
|
||||||
let d = devices[i];
|
let d = devices[i];
|
||||||
|
if (d._skip)
|
||||||
|
continue;
|
||||||
let item = this._createDeviceItem(d);
|
let item = this._createDeviceItem(d);
|
||||||
if (item) {
|
if (item) {
|
||||||
this.menu.addMenuItem(item, this._deviceItemPosition + this._deviceItems.length);
|
this.menu.addMenuItem(item, this._deviceItemPosition + this._deviceItems.length);
|
||||||
this._deviceItems.push(item);
|
this._deviceItems.push(item);
|
||||||
anydevice = true;
|
this._hasDevices = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (anydevice)
|
if (this._hasDevices)
|
||||||
this._deviceSep.actor.show();
|
this._deviceSep.actor.show();
|
||||||
else
|
else
|
||||||
this._deviceSep.actor.hide();
|
this._deviceSep.actor.hide();
|
||||||
@ -233,7 +274,10 @@ Indicator.prototype = {
|
|||||||
_updateFullMenu: function() {
|
_updateFullMenu: function() {
|
||||||
if (this._applet.show_full_menu) {
|
if (this._applet.show_full_menu) {
|
||||||
this._showAll(this._fullMenuItems);
|
this._showAll(this._fullMenuItems);
|
||||||
|
if (this._hasDevices)
|
||||||
this._showAll(this._deviceItems);
|
this._showAll(this._deviceItems);
|
||||||
|
else
|
||||||
|
this._deviceSep.actor.hide();
|
||||||
} else {
|
} else {
|
||||||
this._hideAll(this._fullMenuItems);
|
this._hideAll(this._fullMenuItems);
|
||||||
this._hideAll(this._deviceItems);
|
this._hideAll(this._deviceItems);
|
||||||
@ -422,7 +466,7 @@ PinNotification.prototype = {
|
|||||||
}));
|
}));
|
||||||
this.addActor(this._entry);
|
this.addActor(this._entry);
|
||||||
|
|
||||||
this.addButton('ok', _("Ok"));
|
this.addButton('ok', _("OK"));
|
||||||
this.addButton('cancel', _("Cancel"));
|
this.addButton('cancel', _("Cancel"));
|
||||||
|
|
||||||
this.connect('action-invoked', Lang.bind(this, function(self, action) {
|
this.connect('action-invoked', Lang.bind(this, function(self, action) {
|
||||||
|
206
js/ui/status/keyboard.js
Normal file
206
js/ui/status/keyboard.js
Normal file
@ -0,0 +1,206 @@
|
|||||||
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
|
const Clutter = imports.gi.Clutter;
|
||||||
|
const GdkPixbuf = imports.gi.GdkPixbuf;
|
||||||
|
const Gkbd = imports.gi.Gkbd;
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
|
||||||
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
const PanelMenu = imports.ui.panelMenu;
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain('gnome-shell');
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
|
const INDICATOR_SCHEMA = 'org.gnome.settings-daemon.plugins.keyboard';
|
||||||
|
|
||||||
|
function LayoutMenuItem() {
|
||||||
|
this._init.apply(this, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
LayoutMenuItem.prototype = {
|
||||||
|
__proto__: PopupMenu.PopupBaseMenuItem.prototype,
|
||||||
|
|
||||||
|
_init: function(config, id, indicator, long_name) {
|
||||||
|
PopupMenu.PopupBaseMenuItem.prototype._init.call(this);
|
||||||
|
|
||||||
|
this._config = config;
|
||||||
|
this._id = id;
|
||||||
|
this.label = new St.Label({ text: long_name });
|
||||||
|
this.indicator = indicator;
|
||||||
|
this.addActor(this.label);
|
||||||
|
this.addActor(this.indicator);
|
||||||
|
},
|
||||||
|
|
||||||
|
activate: function(event) {
|
||||||
|
PopupMenu.PopupBaseMenuItem.prototype.activate.call(this);
|
||||||
|
this._config.lock_group(this._id);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function XKBIndicator() {
|
||||||
|
this._init.apply(this, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
XKBIndicator.prototype = {
|
||||||
|
__proto__: PanelMenu.Button.prototype,
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
PanelMenu.Button.prototype._init.call(this, St.Align.START);
|
||||||
|
|
||||||
|
this._container = new Shell.GenericContainer();
|
||||||
|
this._container.connect('get-preferred-width', Lang.bind(this, this._get_preferred_width));
|
||||||
|
this._container.connect('get-preferred-height', Lang.bind(this, this._get_preferred_height));
|
||||||
|
this._container.connect('allocate', Lang.bind(this, this._allocate));
|
||||||
|
this.actor.set_child(this._container);
|
||||||
|
|
||||||
|
this._iconActor = new St.Icon({ icon_name: 'keyboard', icon_type: St.IconType.SYMBOLIC, style_class: 'system-status-icon' });
|
||||||
|
this._container.add_actor(this._iconActor);
|
||||||
|
this._labelActors = [ ];
|
||||||
|
this._layoutItems = [ ];
|
||||||
|
|
||||||
|
this._indicatorSettings = new Gio.Settings({ schema: INDICATOR_SCHEMA });
|
||||||
|
this._indicatorSettings.connect('changed::disable-indicator', Lang.bind(this, this._sync_config));
|
||||||
|
|
||||||
|
this._disableIndicator = false;
|
||||||
|
this._showFlags = false;
|
||||||
|
this._config = Gkbd.Configuration.get();
|
||||||
|
this._config.connect('changed', Lang.bind(this, this._sync_config));
|
||||||
|
this._config.connect('group-changed', Lang.bind(this, this._sync_group));
|
||||||
|
this._config.start_listen();
|
||||||
|
|
||||||
|
this._sync_config();
|
||||||
|
|
||||||
|
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
|
this.menu.addAction(_("Keyboard Settings"), function() {
|
||||||
|
GLib.spawn_command_line_async('gnome-control-center region');
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_sync_config: function() {
|
||||||
|
this._disableIndicator = this._indicatorSettings.get_boolean('disable-indicator');
|
||||||
|
|
||||||
|
this._showFlags = this._config.if_flags_shown();
|
||||||
|
if (this._showFlags) {
|
||||||
|
this._container.set_skip_paint(this._iconActor, false);
|
||||||
|
} else {
|
||||||
|
this._container.set_skip_paint(this._iconActor, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
let groups = this._config.get_group_names();
|
||||||
|
if (groups.length > 1 && !this._disableIndicator) {
|
||||||
|
this.actor.show();
|
||||||
|
} else {
|
||||||
|
this.menu.close();
|
||||||
|
this.actor.hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < this._layoutItems.length; i++)
|
||||||
|
this._layoutItems[i].destroy();
|
||||||
|
|
||||||
|
for (let i = 0; i < this._labelActors.length; i++)
|
||||||
|
this._labelActors[i].destroy();
|
||||||
|
|
||||||
|
let short_names = this._config.get_short_group_names();
|
||||||
|
|
||||||
|
this._selectedLayout = null;
|
||||||
|
this._layoutItems = [ ];
|
||||||
|
this._selectedLabel = null;
|
||||||
|
this._labelActors = [ ];
|
||||||
|
for (let i = 0; i < groups.length; i++) {
|
||||||
|
let icon_name = this._config.get_group_name(i);
|
||||||
|
let actor;
|
||||||
|
if (this._showFlags)
|
||||||
|
actor = new St.Icon({ icon_name: icon_name, icon_type: St.IconType.SYMBOLIC, style_class: 'popup-menu-icon' });
|
||||||
|
else
|
||||||
|
actor = new St.Label({ text: short_names[i] });
|
||||||
|
let item = new LayoutMenuItem(this._config, i, actor, groups[i]);
|
||||||
|
item._short_group_name = short_names[i];
|
||||||
|
item._icon_name = icon_name;
|
||||||
|
this._layoutItems.push(item);
|
||||||
|
this.menu.addMenuItem(item, i);
|
||||||
|
|
||||||
|
let shortLabel = new St.Label({ text: short_names[i] });
|
||||||
|
this._labelActors.push(shortLabel);
|
||||||
|
this._container.add_actor(shortLabel);
|
||||||
|
this._container.set_skip_paint(shortLabel, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
this._sync_group();
|
||||||
|
},
|
||||||
|
|
||||||
|
_sync_group: function() {
|
||||||
|
let selected = this._config.get_current_group();
|
||||||
|
|
||||||
|
if (this._selectedLayout) {
|
||||||
|
this._selectedLayout.setShowDot(false);
|
||||||
|
this._selectedLayout = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._selectedLabel) {
|
||||||
|
this._container.set_skip_paint(this._selectedLabel, true);
|
||||||
|
this._selectedLabel = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
let item = this._layoutItems[selected];
|
||||||
|
item.setShowDot(true);
|
||||||
|
|
||||||
|
this._iconActor.icon_name = item._icon_name;
|
||||||
|
this._selectedLabel = this._labelActors[selected];
|
||||||
|
this._container.set_skip_paint(this._selectedLabel, this._showFlags);
|
||||||
|
|
||||||
|
this._selectedLayout = item;
|
||||||
|
},
|
||||||
|
|
||||||
|
_get_preferred_width: function(container, for_height, alloc) {
|
||||||
|
/* Here, and in _get_preferred_height, we need to query for the
|
||||||
|
height of all children, but we ignore the results for those
|
||||||
|
we don't actually display. */
|
||||||
|
let max_min_width = 0, max_natural_width = 0;
|
||||||
|
if (this._showFlags)
|
||||||
|
[max_min_width, max_natural_width] = this._iconActor.get_preferred_width(for_height);
|
||||||
|
|
||||||
|
for (let i = 0; i < this._labelActors.length; i++) {
|
||||||
|
let [min_width, natural_width] = this._labelActors[i].get_preferred_width(for_height);
|
||||||
|
if (!this._showFlags) {
|
||||||
|
max_min_width = Math.max(max_min_width, min_width);
|
||||||
|
max_natural_width = Math.max(max_natural_width, natural_width);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
alloc.min_size = max_min_width;
|
||||||
|
alloc.natural_size = max_natural_width;
|
||||||
|
},
|
||||||
|
|
||||||
|
_get_preferred_height: function(container, for_width, alloc) {
|
||||||
|
let max_min_height = 0, max_natural_height = 0;
|
||||||
|
if (this._showFlags)
|
||||||
|
[max_min_height, max_natural_height] = this._iconActor.get_preferred_height(for_width);
|
||||||
|
|
||||||
|
for (let i = 0; i < this._labelActors.length; i++) {
|
||||||
|
let [min_height, natural_height] = this._labelActors[i].get_preferred_height(for_width);
|
||||||
|
if (!this._showFlags) {
|
||||||
|
max_min_height = Math.max(max_min_height, min_height);
|
||||||
|
max_natural_height = Math.max(max_natural_height, natural_height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
alloc.min_size = max_min_height;
|
||||||
|
alloc.natural_size = max_natural_height;
|
||||||
|
},
|
||||||
|
|
||||||
|
_allocate: function(container, box, flags) {
|
||||||
|
// translate box to (0, 0)
|
||||||
|
box.x2 -= box.x1;
|
||||||
|
box.x1 = 0;
|
||||||
|
box.y2 -= box.y1;
|
||||||
|
box.y1 = 0;
|
||||||
|
|
||||||
|
this._iconActor.allocate_align_fill(box, 0.5, 0, false, false, flags);
|
||||||
|
for (let i = 0; i < this._labelActors.length; i++)
|
||||||
|
this._labelActors[i].allocate_align_fill(box, 0.5, 0, false, false, flags);
|
||||||
|
}
|
||||||
|
};
|
@ -1,7 +1,6 @@
|
|||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const GLib = imports.gi.GLib;
|
|
||||||
const DBus = imports.dbus;
|
const DBus = imports.dbus;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Mainloop = imports.mainloop;
|
const Mainloop = imports.mainloop;
|
||||||
@ -10,6 +9,7 @@ const St = imports.gi.St;
|
|||||||
|
|
||||||
const PanelMenu = imports.ui.panelMenu;
|
const PanelMenu = imports.ui.panelMenu;
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
const Gettext = imports.gettext.domain('gnome-shell');
|
const Gettext = imports.gettext.domain('gnome-shell');
|
||||||
const _ = Gettext.gettext;
|
const _ = Gettext.gettext;
|
||||||
@ -83,7 +83,7 @@ Indicator.prototype = {
|
|||||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
|
|
||||||
this.menu.addAction(_("Power Settings"),function() {
|
this.menu.addAction(_("Power Settings"),function() {
|
||||||
GLib.spawn_command_line_async('gnome-control-center power');
|
Util.spawnDesktop('gnome-power-panel');
|
||||||
});
|
});
|
||||||
|
|
||||||
this._proxy.connect('Changed', Lang.bind(this, this._devicesChanged));
|
this._proxy.connect('Changed', Lang.bind(this, this._devicesChanged));
|
||||||
@ -134,8 +134,7 @@ Indicator.prototype = {
|
|||||||
this._batteryItem.actor.reactive = true;
|
this._batteryItem.actor.reactive = true;
|
||||||
this._batteryItem.actor.can_focus = true;
|
this._batteryItem.actor.can_focus = true;
|
||||||
this._batteryItem.connect('activate', function(item) {
|
this._batteryItem.connect('activate', function(item) {
|
||||||
let p = new Shell.Process({ args: ['gnome-power-statistics', '--device', device_id] });
|
Util.spawn(['gnome-power-statistics', '--device', device_id]);
|
||||||
p.run();
|
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// virtual device
|
// virtual device
|
||||||
@ -164,8 +163,7 @@ Indicator.prototype = {
|
|||||||
|
|
||||||
let item = new DeviceItem (devices[i]);
|
let item = new DeviceItem (devices[i]);
|
||||||
item.connect('activate', function() {
|
item.connect('activate', function() {
|
||||||
let p = new Shell.Process({ args: ['gnome-power-statistics', '--device', device_id] });
|
Util.spawn(['gnome-power-statistics', '--device', device_id]);
|
||||||
p.run();
|
|
||||||
});
|
});
|
||||||
this._deviceItems.push(item);
|
this._deviceItems.push(item);
|
||||||
this.menu.addMenuItem(item, this._otherDevicePosition + position);
|
this.menu.addMenuItem(item, this._otherDevicePosition + position);
|
||||||
@ -197,8 +195,8 @@ Indicator.prototype = {
|
|||||||
|
|
||||||
_checkError: function(error) {
|
_checkError: function(error) {
|
||||||
if (!this._restarted && error && error.message.match(/org\.freedesktop\.DBus\.Error\.(UnknownMethod|InvalidArgs)/)) {
|
if (!this._restarted && error && error.message.match(/org\.freedesktop\.DBus\.Error\.(UnknownMethod|InvalidArgs)/)) {
|
||||||
GLib.spawn_command_line_sync('pkill -f "^gnome-power-manager$"');
|
Util.killall('gnome-power-manager');
|
||||||
GLib.spawn_command_line_async('gnome-power-manager');
|
Util.spawn(['gnome-power-manager']);
|
||||||
this._restarted = true;
|
this._restarted = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ const St = imports.gi.St;
|
|||||||
|
|
||||||
const PanelMenu = imports.ui.panelMenu;
|
const PanelMenu = imports.ui.panelMenu;
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
const Gettext = imports.gettext.domain('gnome-shell');
|
const Gettext = imports.gettext.domain('gnome-shell');
|
||||||
const _ = Gettext.gettext;
|
const _ = Gettext.gettext;
|
||||||
@ -60,8 +61,7 @@ Indicator.prototype = {
|
|||||||
|
|
||||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
this.menu.addAction(_("Sound Settings"), function() {
|
this.menu.addAction(_("Sound Settings"), function() {
|
||||||
let p = new Shell.Process({ args: ['gnome-control-center', 'sound'] });
|
Util.spawnDesktop('gnome-sound-panel');
|
||||||
p.run();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
|
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
|
||||||
|
@ -6,6 +6,7 @@ const Signals = imports.signals;
|
|||||||
|
|
||||||
const MessageTray = imports.ui.messageTray;
|
const MessageTray = imports.ui.messageTray;
|
||||||
const NotificationDaemon = imports.ui.notificationDaemon;
|
const NotificationDaemon = imports.ui.notificationDaemon;
|
||||||
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
const STANDARD_TRAY_ICON_IMPLEMENTATIONS = {
|
const STANDARD_TRAY_ICON_IMPLEMENTATIONS = {
|
||||||
'bluetooth-applet': 'bluetooth',
|
'bluetooth-applet': 'bluetooth',
|
||||||
@ -33,8 +34,7 @@ StatusIconDispatcher.prototype = {
|
|||||||
// app-indicators, so that applications fall back to normal
|
// app-indicators, so that applications fall back to normal
|
||||||
// status icons
|
// status icons
|
||||||
// http://bugzilla.gnome.org/show_bug.cgi=id=621382
|
// http://bugzilla.gnome.org/show_bug.cgi=id=621382
|
||||||
let p = new Shell.Process({ args: ['pkill', '-f', '^([^ ]*/)?indicator-application-service$']});
|
Util.killall('indicator-application-service');
|
||||||
p.run();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_onTrayIconAdded: function(o, icon) {
|
_onTrayIconAdded: function(o, icon) {
|
||||||
|
@ -12,6 +12,7 @@ const GnomeSession = imports.misc.gnomeSession;
|
|||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const PanelMenu = imports.ui.panelMenu;
|
const PanelMenu = imports.ui.panelMenu;
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
// Adapted from gdm/gui/user-switch-applet/applet.c
|
// Adapted from gdm/gui/user-switch-applet/applet.c
|
||||||
//
|
//
|
||||||
@ -31,7 +32,7 @@ StatusMenuButton.prototype = {
|
|||||||
this.actor.set_child(box);
|
this.actor.set_child(box);
|
||||||
|
|
||||||
this._gdm = Gdm.UserManager.ref_default();
|
this._gdm = Gdm.UserManager.ref_default();
|
||||||
this._gdm.queue_load()
|
this._gdm.queue_load();
|
||||||
|
|
||||||
this._user = this._gdm.get_user(GLib.get_user_name());
|
this._user = this._gdm.get_user(GLib.get_user_name());
|
||||||
this._presence = new GnomeSession.Presence();
|
this._presence = new GnomeSession.Presence();
|
||||||
@ -153,17 +154,17 @@ StatusMenuButton.prototype = {
|
|||||||
|
|
||||||
_onMyAccountActivate: function() {
|
_onMyAccountActivate: function() {
|
||||||
Main.overview.hide();
|
Main.overview.hide();
|
||||||
this._spawn(['gnome-control-center', 'user-accounts']);
|
Util.spawnDesktop('gnome-user-accounts-panel');
|
||||||
},
|
},
|
||||||
|
|
||||||
_onPreferencesActivate: function() {
|
_onPreferencesActivate: function() {
|
||||||
Main.overview.hide();
|
Main.overview.hide();
|
||||||
this._spawn(['gnome-control-center', '-o']);
|
Util.spawnDesktop('gnome-control-center');
|
||||||
},
|
},
|
||||||
|
|
||||||
_onLockScreenActivate: function() {
|
_onLockScreenActivate: function() {
|
||||||
Main.overview.hide();
|
Main.overview.hide();
|
||||||
this._spawn(['gnome-screensaver-command', '--lock']);
|
Util.spawn(['gnome-screensaver-command', '--lock']);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onLoginScreenActivate: function() {
|
_onLoginScreenActivate: function() {
|
||||||
@ -174,19 +175,11 @@ StatusMenuButton.prototype = {
|
|||||||
|
|
||||||
_onQuitSessionActivate: function() {
|
_onQuitSessionActivate: function() {
|
||||||
Main.overview.hide();
|
Main.overview.hide();
|
||||||
this._spawn(['gnome-session-save', '--logout-dialog']);
|
Util.spawn(['gnome-session-save', '--logout-dialog']);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onShutDownActivate: function() {
|
_onShutDownActivate: function() {
|
||||||
Main.overview.hide();
|
Main.overview.hide();
|
||||||
this._spawn(['gnome-session-save', '--shutdown-dialog']);
|
Util.spawn(['gnome-session-save', '--shutdown-dialog']);
|
||||||
},
|
|
||||||
|
|
||||||
_spawn: function(args) {
|
|
||||||
// FIXME: once Shell.Process gets support for signalling
|
|
||||||
// errors we should pop up an error dialog or something here
|
|
||||||
// on failure
|
|
||||||
let p = new Shell.Process({'args' : args});
|
|
||||||
p.run();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -476,6 +476,7 @@ Source.prototype = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._notification = new Notification(this);
|
this._notification = new Notification(this);
|
||||||
|
this._notification.setUrgency(MessageTray.Urgency.HIGH);
|
||||||
|
|
||||||
// Since we only create sources when receiving a message, this
|
// Since we only create sources when receiving a message, this
|
||||||
// is a plausible default
|
// is a plausible default
|
||||||
@ -593,6 +594,7 @@ Notification.prototype = {
|
|||||||
|
|
||||||
_init: function(source) {
|
_init: function(source) {
|
||||||
MessageTray.Notification.prototype._init.call(this, source, source.title, null, { customContent: true });
|
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 = new St.Entry({ style_class: 'chat-response' });
|
||||||
this._responseEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivated));
|
this._responseEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivated));
|
||||||
|
@ -16,12 +16,12 @@ const SearchDisplay = imports.ui.searchDisplay;
|
|||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
|
|
||||||
function SearchEntry() {
|
function SearchEntry(focusBase) {
|
||||||
this._init();
|
this._init(focusBase);
|
||||||
}
|
}
|
||||||
|
|
||||||
SearchEntry.prototype = {
|
SearchEntry.prototype = {
|
||||||
_init : function() {
|
_init : function(focusBase) {
|
||||||
this.actor = new St.Entry({ name: 'searchEntry',
|
this.actor = new St.Entry({ name: 'searchEntry',
|
||||||
hint_text: _("Search your computer") });
|
hint_text: _("Search your computer") });
|
||||||
this.entry = this.actor.clutter_text;
|
this.entry = this.actor.clutter_text;
|
||||||
@ -45,11 +45,12 @@ SearchEntry.prototype = {
|
|||||||
this.pane = null;
|
this.pane = null;
|
||||||
|
|
||||||
this._capturedEventId = 0;
|
this._capturedEventId = 0;
|
||||||
|
this._focusBase = focusBase;
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateCursorVisibility: function() {
|
_updateCursorVisibility: function() {
|
||||||
let focus = global.stage.get_key_focus();
|
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);
|
this.entry.set_cursor_visible(true);
|
||||||
else
|
else
|
||||||
this.entry.set_cursor_visible(false);
|
this.entry.set_cursor_visible(false);
|
||||||
@ -81,8 +82,8 @@ SearchEntry.prototype = {
|
|||||||
|
|
||||||
this.entry.text = '';
|
this.entry.text = '';
|
||||||
|
|
||||||
// Return focus to the stage
|
// Return focus to the viewSelector
|
||||||
global.stage.set_key_focus(null);
|
global.stage.set_key_focus(this._focusBase);
|
||||||
|
|
||||||
this.entry.set_cursor_visible(true);
|
this.entry.set_cursor_visible(true);
|
||||||
this.entry.set_selection(0, 0);
|
this.entry.set_selection(0, 0);
|
||||||
@ -117,11 +118,11 @@ SearchEntry.prototype = {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
case Clutter.EventType.KEY_PRESS:
|
case Clutter.EventType.KEY_PRESS:
|
||||||
// If neither the stage nor our entry have key focus, some
|
// If some "special" actor grabbed the focus (run
|
||||||
// "special" actor grabbed the focus (run dialog, looking
|
// dialog, looking glass); we don't want to interfere
|
||||||
// glass); we don't want to interfere with that
|
// with that
|
||||||
let focus = global.stage.get_key_focus();
|
let focus = global.stage.get_key_focus();
|
||||||
if (focus != global.stage && focus != this.entry)
|
if (focus != this._focusBase && focus != this.entry)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
let sym = event.get_key_symbol();
|
let sym = event.get_key_symbol();
|
||||||
@ -231,23 +232,25 @@ ViewTab.prototype = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
function SearchTab() {
|
function SearchTab(focusBase) {
|
||||||
this._init();
|
this._init(focusBase);
|
||||||
}
|
}
|
||||||
|
|
||||||
SearchTab.prototype = {
|
SearchTab.prototype = {
|
||||||
__proto__: BaseTab.prototype,
|
__proto__: BaseTab.prototype,
|
||||||
|
|
||||||
_init: function() {
|
_init: function(focusBase) {
|
||||||
this._searchActive = false;
|
this._searchActive = false;
|
||||||
this._searchPending = false;
|
this._searchPending = false;
|
||||||
this._keyPressId = 0;
|
this._keyPressId = 0;
|
||||||
this._searchTimeoutId = 0;
|
this._searchTimeoutId = 0;
|
||||||
|
this._focusBase = focusBase;
|
||||||
|
|
||||||
this._searchSystem = new Search.SearchSystem();
|
this._searchSystem = new Search.SearchSystem();
|
||||||
|
this._openSearchSystem = new Search.OpenSearchSystem();
|
||||||
|
|
||||||
this._searchEntry = new SearchEntry();
|
this._searchEntry = new SearchEntry(focusBase);
|
||||||
this._searchResults = new SearchDisplay.SearchResults(this._searchSystem);
|
this._searchResults = new SearchDisplay.SearchResults(this._searchSystem, this._openSearchSystem);
|
||||||
BaseTab.prototype._init.call(this,
|
BaseTab.prototype._init.call(this,
|
||||||
this._searchEntry.actor,
|
this._searchEntry.actor,
|
||||||
this._searchResults.actor);
|
this._searchResults.actor);
|
||||||
@ -274,7 +277,7 @@ SearchTab.prototype = {
|
|||||||
BaseTab.prototype.show.call(this);
|
BaseTab.prototype.show.call(this);
|
||||||
|
|
||||||
if (this._keyPressId == 0)
|
if (this._keyPressId == 0)
|
||||||
this._keyPressId = global.stage.connect('key-press-event',
|
this._keyPressId = this._searchEntry.entry.connect('key-press-event',
|
||||||
Lang.bind(this, this._onKeyPress));
|
Lang.bind(this, this._onKeyPress));
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -282,7 +285,7 @@ SearchTab.prototype = {
|
|||||||
BaseTab.prototype.hide.call(this);
|
BaseTab.prototype.hide.call(this);
|
||||||
|
|
||||||
if (this._keyPressId > 0) {
|
if (this._keyPressId > 0) {
|
||||||
global.stage.disconnect(this._keyPressId);
|
this._searchEntry.entry.disconnect(this._keyPressId);
|
||||||
this._keyPressId = 0;
|
this._keyPressId = 0;
|
||||||
}
|
}
|
||||||
this._searchEntry.reset();
|
this._searchEntry.reset();
|
||||||
@ -317,14 +320,7 @@ SearchTab.prototype = {
|
|||||||
this._searchTimeoutId = Mainloop.timeout_add(150, Lang.bind(this, this._doSearch));
|
this._searchTimeoutId = Mainloop.timeout_add(150, Lang.bind(this, this._doSearch));
|
||||||
},
|
},
|
||||||
|
|
||||||
_onKeyPress: function(stage, event) {
|
_onKeyPress: function(entry, event) {
|
||||||
// If neither the stage nor the search entry have key focus, some
|
|
||||||
// "special" actor grabbed the focus (run dialog, looking glass);
|
|
||||||
// we don't want to interfere with that
|
|
||||||
let focus = stage.get_key_focus();
|
|
||||||
if (focus != stage && focus != this._searchEntry.entry)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
let symbol = event.get_key_symbol();
|
let symbol = event.get_key_symbol();
|
||||||
if (symbol == Clutter.Up) {
|
if (symbol == Clutter.Up) {
|
||||||
if (!this._searchActive)
|
if (!this._searchActive)
|
||||||
@ -393,7 +389,7 @@ ViewSelector.prototype = {
|
|||||||
this._tabs = [];
|
this._tabs = [];
|
||||||
this._activeTab = null;
|
this._activeTab = null;
|
||||||
|
|
||||||
this._searchTab = new SearchTab();
|
this._searchTab = new SearchTab(this.actor);
|
||||||
this._searchArea.set_child(this._searchTab.title);
|
this._searchArea.set_child(this._searchTab.title);
|
||||||
this._addTab(this._searchTab);
|
this._addTab(this._searchTab);
|
||||||
|
|
||||||
@ -559,14 +555,7 @@ ViewSelector.prototype = {
|
|||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
_onKeyPress: function(stage, event) {
|
_onKeyPress: function(actor, event) {
|
||||||
// Only process events if the stage has key focus - search is handled
|
|
||||||
// by the search tab, and we do not want to interfere with "special"
|
|
||||||
// actors grabbing focus (run dialog, looking glass, notifications).
|
|
||||||
let focus = stage.get_key_focus();
|
|
||||||
if (focus != stage)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
let modifiers = Shell.get_event_state(event);
|
let modifiers = Shell.get_event_state(event);
|
||||||
let symbol = event.get_key_symbol();
|
let symbol = event.get_key_symbol();
|
||||||
if (symbol == Clutter.Escape) {
|
if (symbol == Clutter.Escape) {
|
||||||
@ -600,7 +589,7 @@ ViewSelector.prototype = {
|
|||||||
this._overviewHidingId = Main.overview.connect('hiding',
|
this._overviewHidingId = Main.overview.connect('hiding',
|
||||||
Lang.bind(this, this._switchDefaultTab));
|
Lang.bind(this, this._switchDefaultTab));
|
||||||
if (this._keyPressId == 0)
|
if (this._keyPressId == 0)
|
||||||
this._keyPressId = global.stage.connect('key-press-event',
|
this._keyPressId = this.actor.connect('key-press-event',
|
||||||
Lang.bind(this, this._onKeyPress));
|
Lang.bind(this, this._onKeyPress));
|
||||||
|
|
||||||
this._switchDefaultTab();
|
this._switchDefaultTab();
|
||||||
@ -610,7 +599,7 @@ ViewSelector.prototype = {
|
|||||||
this._searchTab.setFindAsYouType(false);
|
this._searchTab.setFindAsYouType(false);
|
||||||
|
|
||||||
if (this._keyPressId > 0) {
|
if (this._keyPressId > 0) {
|
||||||
global.stage.disconnect(this._keyPressId);
|
this.actor.disconnect(this._keyPressId);
|
||||||
this._keyPressId = 0;
|
this._keyPressId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -497,6 +497,8 @@ WindowManager.prototype = {
|
|||||||
|
|
||||||
for (let i = 0; i < switchData.windows.length; i++) {
|
for (let i = 0; i < switchData.windows.length; i++) {
|
||||||
let w = switchData.windows[i];
|
let w = switchData.windows[i];
|
||||||
|
if (w.window.is_destroyed()) // Window gone
|
||||||
|
continue;
|
||||||
if (w.window.get_parent() == switchData.outGroup) {
|
if (w.window.get_parent() == switchData.outGroup) {
|
||||||
w.window.reparent(w.parent);
|
w.window.reparent(w.parent);
|
||||||
w.window.hide();
|
w.window.hide();
|
||||||
|
@ -644,6 +644,9 @@ WorkspacesView.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onDragMotion: function(dragEvent) {
|
_onDragMotion: function(dragEvent) {
|
||||||
|
if (Main.overview.animationInProgress)
|
||||||
|
return DND.DragMotionResult.CONTINUE;
|
||||||
|
|
||||||
let primary = global.get_primary_monitor();
|
let primary = global.get_primary_monitor();
|
||||||
|
|
||||||
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
|
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
|
||||||
|
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);
|
@ -1,13 +1,14 @@
|
|||||||
data/gnome-shell.desktop.in.in
|
data/gnome-shell.desktop.in.in
|
||||||
data/gnome-shell-clock-preferences.desktop.in.in
|
|
||||||
data/org.gnome.shell.gschema.xml.in
|
data/org.gnome.shell.gschema.xml.in
|
||||||
data/org.gnome.accessibility.magnifier.gschema.xml.in
|
data/org.gnome.accessibility.magnifier.gschema.xml.in
|
||||||
[type: gettext/glade]data/clock-preferences.ui
|
js/misc/util.js
|
||||||
js/ui/appDisplay.js
|
js/ui/appDisplay.js
|
||||||
js/ui/appFavorites.js
|
js/ui/appFavorites.js
|
||||||
js/ui/dash.js
|
js/ui/dash.js
|
||||||
js/ui/docDisplay.js
|
js/ui/docDisplay.js
|
||||||
|
js/ui/endSessionDialog.js
|
||||||
js/ui/lookingGlass.js
|
js/ui/lookingGlass.js
|
||||||
|
js/ui/messageTray.js
|
||||||
js/ui/overview.js
|
js/ui/overview.js
|
||||||
js/ui/panel.js
|
js/ui/panel.js
|
||||||
js/ui/placeDisplay.js
|
js/ui/placeDisplay.js
|
||||||
@ -15,6 +16,8 @@ js/ui/popupMenu.js
|
|||||||
js/ui/runDialog.js
|
js/ui/runDialog.js
|
||||||
js/ui/statusMenu.js
|
js/ui/statusMenu.js
|
||||||
js/ui/status/accessibility.js
|
js/ui/status/accessibility.js
|
||||||
|
js/ui/status/bluetooth.js
|
||||||
|
js/ui/status/keyboard.js
|
||||||
js/ui/status/power.js
|
js/ui/status/power.js
|
||||||
js/ui/status/volume.js
|
js/ui/status/volume.js
|
||||||
js/ui/telepathyClient.js
|
js/ui/telepathyClient.js
|
||||||
|
595
po/ar.po
595
po/ar.po
@ -1,13 +1,13 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
# Khaled Hosny <khaledhosny@eglug.org>, 2009, 2010.
|
# Khaled Hosny <khaledhosny@eglug.org>, 2009, 2010, 2011.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: HEAD\n"
|
"Project-Id-Version: HEAD\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2010-10-30 13:30+0200\n"
|
"POT-Creation-Date: 2011-01-12 11:29+0200\n"
|
||||||
"PO-Revision-Date: 2010-10-30 13:30+0300\n"
|
"PO-Revision-Date: 2011-01-12 11:29+0300\n"
|
||||||
"Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n"
|
"Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n"
|
||||||
"Language-Team: Arabic <doc@arabeyes.org>\n"
|
"Language-Team: Arabic <doc@arabeyes.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -26,14 +26,6 @@ msgstr "صدفة جنوم"
|
|||||||
msgid "Window management and application launching"
|
msgid "Window management and application launching"
|
||||||
msgstr "إدارة النوافذ وإطلاق التطبيقات"
|
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
|
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
||||||
msgid ""
|
msgid ""
|
||||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||||
@ -41,60 +33,44 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
#: ../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"
|
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||||
msgstr ""
|
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"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr ""
|
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."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||||
msgid ""
|
msgid ""
|
||||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||||
"should not be loaded."
|
"should not be loaded."
|
||||||
msgstr ""
|
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"
|
msgid "History for command (Alt-F2) dialog"
|
||||||
msgstr ""
|
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
|
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||||
msgid "Hour format"
|
msgid "If true, display seconds in time."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
#: ../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."
|
msgid "If true, display the ISO week date in the calendar."
|
||||||
msgstr ""
|
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"
|
msgid "List of desktop file IDs for favorite applications"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||||
msgid "Overview workspace view mode"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"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 "
|
"used for gst-launch. The pipeline should have an unconnected sink pad where "
|
||||||
@ -106,48 +82,42 @@ msgid ""
|
|||||||
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||||
msgid "Show date in clock"
|
msgid "Show date in clock"
|
||||||
msgstr ""
|
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"
|
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:14
|
||||||
msgid "Show time with seconds"
|
msgid "Show time with seconds"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||||
msgid ""
|
msgid ""
|
||||||
"The applications corresponding to these identifiers will be displayed in the "
|
"The applications corresponding to these identifiers will be displayed in the "
|
||||||
"favorites area."
|
"favorites area."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"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 "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
"a different container format."
|
"a different container format."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
msgstr ""
|
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"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||||
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 ""
|
msgid ""
|
||||||
"The shell normally monitors active applications in order to present the most "
|
"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 "
|
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
||||||
@ -155,29 +125,11 @@ msgid ""
|
|||||||
"remove already saved data."
|
"remove already saved data."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||||
msgid ""
|
|
||||||
"This key specifies the format used by the panel clock when the format key is "
|
|
||||||
"set to \"custom\". You can use conversion specifiers understood by strftime"
|
|
||||||
"() to obtain a specific format. See the strftime() manual for more "
|
|
||||||
"information."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
|
||||||
msgid ""
|
|
||||||
"This key specifies the hour format used by the panel clock. Possible values "
|
|
||||||
"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
|
|
||||||
"the clock will display time in seconds since Epoch, i.e. 1970-01-01. If set "
|
|
||||||
"to \"custom\", the clock will display time according to the format specified "
|
|
||||||
"in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
|
|
||||||
"the show_date and show_seconds keys are ignored."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
|
||||||
msgid "Uuids of extensions to disable"
|
msgid "Uuids of extensions to disable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../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"
|
msgid "Whether to collect stats about applications usage"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -306,90 +258,46 @@ msgstr ""
|
|||||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:1
|
#. Translators: Filter to display all applications
|
||||||
msgid "Clock Format"
|
#: ../js/ui/appDisplay.js:155
|
||||||
msgstr "تنسيق الساعة"
|
msgid "All"
|
||||||
|
msgstr "الكل"
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:2
|
#: ../js/ui/appDisplay.js:236
|
||||||
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
|
|
||||||
msgid "APPLICATIONS"
|
msgid "APPLICATIONS"
|
||||||
msgstr "التطبيقات"
|
msgstr "التطبيقات"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:348
|
#: ../js/ui/appDisplay.js:266
|
||||||
msgid "PREFERENCES"
|
msgid "PREFERENCES"
|
||||||
msgstr "التفضيلات"
|
msgstr "التفضيلات"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:647
|
#: ../js/ui/appDisplay.js:563
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "نافذة جديدة"
|
msgstr "نافذة جديدة"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:651
|
#: ../js/ui/appDisplay.js:567
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "أزِل من المفضّلة"
|
msgstr "أزِل من المفضّلة"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:652
|
#: ../js/ui/appDisplay.js:568
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "أضِف إلى المفضّلة"
|
msgstr "أضِف إلى المفضّلة"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:829
|
#: ../js/ui/appFavorites.js:91
|
||||||
msgid "Drag here to add favorites"
|
|
||||||
msgstr "اسحب إلى هنا ليضاف إلى المفضّلة"
|
|
||||||
|
|
||||||
#: ../js/ui/appFavorites.js:88
|
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has been added to your favorites."
|
msgid "%s has been added to your favorites."
|
||||||
msgstr "أضيف %s إلى مفضلتك."
|
msgstr "أضيف %s إلى مفضلتك."
|
||||||
|
|
||||||
#: ../js/ui/appFavorites.js:107
|
#: ../js/ui/appFavorites.js:122
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has been removed from your favorites."
|
msgid "%s has been removed from your favorites."
|
||||||
msgstr "أزيل %s من مفضّلتك."
|
msgstr "أزيل %s من مفضّلتك."
|
||||||
|
|
||||||
#: ../js/ui/dash.js:142
|
#: ../js/ui/dash.js:27
|
||||||
msgid "Find"
|
msgid "Remove"
|
||||||
msgstr "ابحث"
|
msgstr "أزِل"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:473
|
#: ../js/ui/docDisplay.js:494
|
||||||
msgid "Searching..."
|
|
||||||
msgstr "يبحث..."
|
|
||||||
|
|
||||||
#: ../js/ui/dash.js:487
|
|
||||||
msgid "No matching results."
|
|
||||||
msgstr "لا نتائج مطابقة."
|
|
||||||
|
|
||||||
#. **** Places ****
|
|
||||||
#. Translators: This is in the sense of locations for documents,
|
|
||||||
#. network locations, etc.
|
|
||||||
#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:554
|
|
||||||
msgid "PLACES & DEVICES"
|
|
||||||
msgstr "الأماكن والأجهزة"
|
|
||||||
|
|
||||||
#. **** Documents ****
|
|
||||||
#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
|
|
||||||
msgid "RECENT ITEMS"
|
msgid "RECENT ITEMS"
|
||||||
msgstr "العناصر الحديثة"
|
msgstr "العناصر الحديثة"
|
||||||
|
|
||||||
@ -423,63 +331,67 @@ msgstr "اعرض المصدر"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "صفحة الوب"
|
msgstr "صفحة الوب"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:160
|
#: ../js/ui/overview.js:101
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "تراجع"
|
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
|
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||||
#: ../js/ui/panel.js:469
|
#: ../js/ui/panel.js:478
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Quit %s"
|
msgid "Quit %s"
|
||||||
msgstr "أغلق %s"
|
msgstr "أغلق %s"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:494
|
|
||||||
msgid "Preferences"
|
|
||||||
msgstr "التفضيلات"
|
|
||||||
|
|
||||||
#. Translators: This is the time format with date used
|
#. Translators: This is the time format with date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/panel.js:580
|
#: ../js/ui/panel.js:563
|
||||||
msgid "%a %b %e, %R:%S"
|
msgid "%a %b %e, %R:%S"
|
||||||
msgstr "%A %e %B، %R:%S"
|
msgstr "%A %e %B، %R:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:581
|
#: ../js/ui/panel.js:564
|
||||||
msgid "%a %b %e, %R"
|
msgid "%a %b %e, %R"
|
||||||
msgstr "%A %e %B، %R"
|
msgstr "%A %e %B، %R"
|
||||||
|
|
||||||
#. Translators: This is the time format without date used
|
#. Translators: This is the time format without date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/panel.js:585
|
#: ../js/ui/panel.js:568
|
||||||
msgid "%a %R:%S"
|
msgid "%a %R:%S"
|
||||||
msgstr "%A %R:%S"
|
msgstr "%A %R:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:586
|
#: ../js/ui/panel.js:569
|
||||||
msgid "%a %R"
|
msgid "%a %R"
|
||||||
msgstr "%A %R"
|
msgstr "%A %R"
|
||||||
|
|
||||||
#. Translators: This is a time format with date used
|
#. Translators: This is a time format with date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/panel.js:593
|
#: ../js/ui/panel.js:576
|
||||||
msgid "%a %b %e, %l:%M:%S %p"
|
msgid "%a %b %e, %l:%M:%S %p"
|
||||||
msgstr "%A %e %B، %l:%M:%S %p"
|
msgstr "%A %e %B، %l:%M:%S %p"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:594
|
#: ../js/ui/panel.js:577
|
||||||
msgid "%a %b %e, %l:%M %p"
|
msgid "%a %b %e, %l:%M %p"
|
||||||
msgstr "%A %e %B، %l:%M %p"
|
msgstr "%A %e %B، %l:%M %p"
|
||||||
|
|
||||||
#. Translators: This is a time format without date used
|
#. Translators: This is a time format without date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/panel.js:598
|
#: ../js/ui/panel.js:581
|
||||||
msgid "%a %l:%M:%S %p"
|
msgid "%a %l:%M:%S %p"
|
||||||
msgstr "%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"
|
msgid "%a %l:%M %p"
|
||||||
msgstr "%A %Ol:%OM %p"
|
msgstr "%A %Ol:%OM %p"
|
||||||
|
|
||||||
#. Button on the left side of the panel.
|
#. 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".
|
#. 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"
|
msgid "Activities"
|
||||||
msgstr "الأنشطة"
|
msgstr "الأنشطة"
|
||||||
|
|
||||||
@ -496,6 +408,10 @@ msgstr "أعد المحاولة"
|
|||||||
msgid "Connect to..."
|
msgid "Connect to..."
|
||||||
msgstr "اتّصل ب..."
|
msgstr "اتّصل ب..."
|
||||||
|
|
||||||
|
#: ../js/ui/placeDisplay.js:558
|
||||||
|
msgid "PLACES & DEVICES"
|
||||||
|
msgstr "الأماكن والأجهزة"
|
||||||
|
|
||||||
#. Translators: this MUST be either "toggle-switch-us"
|
#. Translators: this MUST be either "toggle-switch-us"
|
||||||
#. (for toggle switches containing the English words
|
#. (for toggle switches containing the English words
|
||||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||||
@ -503,13 +419,13 @@ msgstr "اتّصل ب..."
|
|||||||
#. simply result in invisible toggle switches.
|
#. simply result in invisible toggle switches.
|
||||||
#: ../js/ui/popupMenu.js:33
|
#: ../js/ui/popupMenu.js:33
|
||||||
msgid "toggle-switch-us"
|
msgid "toggle-switch-us"
|
||||||
msgstr ""
|
msgstr "toggle-switch-intl"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:233
|
#: ../js/ui/runDialog.js:238
|
||||||
msgid "Please enter a command:"
|
msgid "Please enter a command:"
|
||||||
msgstr "من فضلك اكتب أمرا:"
|
msgstr "من فضلك اكتب أمرا:"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:378
|
#: ../js/ui/runDialog.js:383
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Execution of '%s' failed:"
|
msgid "Execution of '%s' failed:"
|
||||||
msgstr "فشل تنفيذ '%s':"
|
msgstr "فشل تنفيذ '%s':"
|
||||||
@ -522,42 +438,38 @@ msgstr "متاح"
|
|||||||
msgid "Busy"
|
msgid "Busy"
|
||||||
msgstr "مشغول"
|
msgstr "مشغول"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:111
|
#: ../js/ui/statusMenu.js:114
|
||||||
msgid "Invisible"
|
msgid "My Account"
|
||||||
msgstr "خفي"
|
msgstr "حسابي"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:119
|
#: ../js/ui/statusMenu.js:118
|
||||||
msgid "My Account..."
|
msgid "System Settings"
|
||||||
msgstr "حسابي..."
|
msgstr "إعدادات النظام"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:123
|
#: ../js/ui/statusMenu.js:125
|
||||||
msgid "System Preferences..."
|
|
||||||
msgstr "تفضيلات النظام..."
|
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:130
|
|
||||||
msgid "Lock Screen"
|
msgid "Lock Screen"
|
||||||
msgstr "أوصد الشاشة"
|
msgstr "أوصد الشاشة"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:134
|
#: ../js/ui/statusMenu.js:129
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "بدّل المستخدم"
|
msgstr "بدّل المستخدم"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:139
|
#: ../js/ui/statusMenu.js:134
|
||||||
msgid "Log Out..."
|
msgid "Log Out..."
|
||||||
msgstr "اخرج..."
|
msgstr "اخرج..."
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:146
|
#: ../js/ui/statusMenu.js:141
|
||||||
msgid "Suspend"
|
msgid "Suspend..."
|
||||||
msgstr "علّق"
|
msgstr "علّق..."
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:150
|
#: ../js/ui/statusMenu.js:145
|
||||||
msgid "Restart..."
|
|
||||||
msgstr "أعد التشغيل..."
|
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:154
|
|
||||||
msgid "Shut Down..."
|
msgid "Shut Down..."
|
||||||
msgstr "أطفئ..."
|
msgstr "أطفئ..."
|
||||||
|
|
||||||
|
#: ../js/ui/status/accessibility.js:82
|
||||||
|
msgid "Zoom"
|
||||||
|
msgstr "تقريب"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:88
|
#: ../js/ui/status/accessibility.js:88
|
||||||
msgid "Screen Reader"
|
msgid "Screen Reader"
|
||||||
msgstr "قارئ الشاشة"
|
msgstr "قارئ الشاشة"
|
||||||
@ -594,13 +506,269 @@ msgstr "إعدادات الإتاحة"
|
|||||||
msgid "High Contrast"
|
msgid "High Contrast"
|
||||||
msgstr "تباين عال"
|
msgstr "تباين عال"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:202
|
#: ../js/ui/status/accessibility.js:205
|
||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr "نص كبير"
|
msgstr "نص كبير"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:223
|
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:240
|
||||||
msgid "Zoom"
|
msgid "Bluetooth"
|
||||||
msgstr "تقريب"
|
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: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 "عميل بلوتوث"
|
||||||
|
|
||||||
|
#: ../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 "من فضلك أكد تطابق الرقم '%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 "من فضلك أدخل الرقم المذكور على الجهاز."
|
||||||
|
|
||||||
|
#: ../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] "بقي ساعة"
|
||||||
|
msgstr[2] "بقي ساعتين"
|
||||||
|
msgstr[3] "بقي %d ساعات"
|
||||||
|
msgstr[4] "بقي %d ساعة"
|
||||||
|
msgstr[5] "بقي %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] "ساعة"
|
||||||
|
msgstr[2] "ساعتين"
|
||||||
|
msgstr[3] "ساعات"
|
||||||
|
msgstr[4] "ساعة"
|
||||||
|
msgstr[5] "ساعة"
|
||||||
|
|
||||||
|
#: ../js/ui/status/power.js:117
|
||||||
|
msgid "minute"
|
||||||
|
msgid_plural "minutes"
|
||||||
|
msgstr[0] "أقل من دقيقة"
|
||||||
|
msgstr[1] "دقيقة"
|
||||||
|
msgstr[2] "دقيقتين"
|
||||||
|
msgstr[3] "دقائق"
|
||||||
|
msgstr[4] "دقيقة"
|
||||||
|
msgstr[5] "دقيقة"
|
||||||
|
|
||||||
|
#: ../js/ui/status/power.js:120
|
||||||
|
#, c-format
|
||||||
|
msgid "%d minute remaining"
|
||||||
|
msgid_plural "%d minutes remaining"
|
||||||
|
msgstr[0] "بقي أقل من دقيقة"
|
||||||
|
msgstr[1] "بقي دقيقة"
|
||||||
|
msgstr[2] "بقي دقيقتين"
|
||||||
|
msgstr[3] "بقي %d دقائق"
|
||||||
|
msgstr[4] "بقي %d دقيقة"
|
||||||
|
msgstr[5] "بقي %d دقيقة"
|
||||||
|
|
||||||
|
#: ../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 "أُرسلت الساعة %l:%M:%S في %A"
|
||||||
|
|
||||||
|
#: ../js/ui/viewSelector.js:26
|
||||||
|
msgid "Search your computer"
|
||||||
|
msgstr "ابحث في حاسوبك"
|
||||||
|
|
||||||
#: ../js/ui/windowAttentionHandler.js:43
|
#: ../js/ui/windowAttentionHandler.js:43
|
||||||
#, c-format
|
#, c-format
|
||||||
@ -612,12 +780,12 @@ msgstr "انتهى %s من البدء"
|
|||||||
msgid "'%s' is ready"
|
msgid "'%s' is ready"
|
||||||
msgstr "'%s' جاهز"
|
msgstr "'%s' جاهز"
|
||||||
|
|
||||||
#: ../js/ui/workspacesView.js:229
|
#: ../js/ui/workspacesView.js:244
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||||
msgstr "تعذّر إضافة مساحة عمل جديدة، لتجاوز أقصى عدد من مساحات العمل."
|
msgstr "تعذّر إضافة مساحة عمل جديدة، لتجاوز أقصى عدد من مساحات العمل."
|
||||||
|
|
||||||
#: ../js/ui/workspacesView.js:246
|
#: ../js/ui/workspacesView.js:260
|
||||||
msgid "Can't remove the first workspace."
|
msgid "Can't remove the first workspace."
|
||||||
msgstr "لا يمكن حذف مساحة العمل الأولى."
|
msgstr "لا يمكن حذف مساحة العمل الأولى."
|
||||||
|
|
||||||
@ -651,11 +819,11 @@ msgstr[5] "%u مدخل"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "أصوات النظام"
|
msgstr "أصوات النظام"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1219
|
#: ../src/shell-global.c:1233
|
||||||
msgid "Less than a minute ago"
|
msgid "Less than a minute ago"
|
||||||
msgstr "منذ أقل من دقيقة"
|
msgstr "منذ أقل من دقيقة"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1223
|
#: ../src/shell-global.c:1237
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d minute ago"
|
msgid "%d minute ago"
|
||||||
msgid_plural "%d minutes ago"
|
msgid_plural "%d minutes ago"
|
||||||
@ -666,7 +834,7 @@ msgstr[3] "منذ %d دقائق"
|
|||||||
msgstr[4] "منذ %d دقيقة"
|
msgstr[4] "منذ %d دقيقة"
|
||||||
msgstr[5] "منذ %d دقيقة"
|
msgstr[5] "منذ %d دقيقة"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1228
|
#: ../src/shell-global.c:1242
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d hour ago"
|
msgid "%d hour ago"
|
||||||
msgid_plural "%d hours ago"
|
msgid_plural "%d hours ago"
|
||||||
@ -677,7 +845,7 @@ msgstr[3] "منذ %d ساعات"
|
|||||||
msgstr[4] "منذ %d ساعة"
|
msgstr[4] "منذ %d ساعة"
|
||||||
msgstr[5] "منذ %d ساعة"
|
msgstr[5] "منذ %d ساعة"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1233
|
#: ../src/shell-global.c:1247
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d day ago"
|
msgid "%d day ago"
|
||||||
msgid_plural "%d days ago"
|
msgid_plural "%d days ago"
|
||||||
@ -688,7 +856,7 @@ msgstr[3] "منذ %d أيام"
|
|||||||
msgstr[4] "منذ %d يوما"
|
msgstr[4] "منذ %d يوما"
|
||||||
msgstr[5] "منذ %d يوم"
|
msgstr[5] "منذ %d يوم"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1238
|
#: ../src/shell-global.c:1252
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d week ago"
|
msgid "%d week ago"
|
||||||
msgid_plural "%d weeks ago"
|
msgid_plural "%d weeks ago"
|
||||||
@ -699,17 +867,17 @@ msgstr[3] "منذ %d أسابيع"
|
|||||||
msgstr[4] "منذ %d أسبوعا"
|
msgstr[4] "منذ %d أسبوعا"
|
||||||
msgstr[5] "منذ %d أسبوع"
|
msgstr[5] "منذ %d أسبوع"
|
||||||
|
|
||||||
#: ../src/shell-uri-util.c:89
|
#: ../src/shell-util.c:89
|
||||||
msgid "Home Folder"
|
msgid "Home Folder"
|
||||||
msgstr "مجلد المنزل"
|
msgstr "مجلد المنزل"
|
||||||
|
|
||||||
#. Translators: this is the same string as the one found in
|
#. Translators: this is the same string as the one found in
|
||||||
#. * nautilus
|
#. * nautilus
|
||||||
#: ../src/shell-uri-util.c:104
|
#: ../src/shell-util.c:104
|
||||||
msgid "File System"
|
msgid "File System"
|
||||||
msgstr "نظام الملفات"
|
msgstr "نظام الملفات"
|
||||||
|
|
||||||
#: ../src/shell-uri-util.c:250
|
#: ../src/shell-util.c:250
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "ابحث"
|
msgstr "ابحث"
|
||||||
|
|
||||||
@ -718,20 +886,68 @@ msgstr "ابحث"
|
|||||||
#. * example, "Trash: some-directory". It means that the
|
#. * example, "Trash: some-directory". It means that the
|
||||||
#. * directory called "some-directory" is in the trash.
|
#. * directory called "some-directory" is in the trash.
|
||||||
#.
|
#.
|
||||||
#: ../src/shell-uri-util.c:300
|
#: ../src/shell-util.c:300
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%1$s: %2$s"
|
msgid "%1$s: %2$s"
|
||||||
msgstr "%1$s: %2$s"
|
msgstr "%1$s: %2$s"
|
||||||
|
|
||||||
|
#~ msgid "Clock"
|
||||||
|
#~ msgstr "الساعة"
|
||||||
|
|
||||||
|
#~ msgid "Customize the panel clock"
|
||||||
|
#~ msgstr "طوّع ساعة اللوحة"
|
||||||
|
|
||||||
|
#~ 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 "Drag here to add favorites"
|
||||||
|
#~ msgstr "اسحب إلى هنا ليضاف إلى المفضّلة"
|
||||||
|
|
||||||
|
#~ msgid "Find"
|
||||||
|
#~ msgstr "ابحث"
|
||||||
|
|
||||||
|
#~ msgid "Searching..."
|
||||||
|
#~ msgstr "يبحث..."
|
||||||
|
|
||||||
|
#~ msgid "No matching results."
|
||||||
|
#~ msgstr "لا نتائج مطابقة."
|
||||||
|
|
||||||
|
#~ msgid "Preferences"
|
||||||
|
#~ msgstr "التفضيلات"
|
||||||
|
|
||||||
|
#~ msgid "Invisible"
|
||||||
|
#~ msgstr "خفي"
|
||||||
|
|
||||||
|
#~ msgid "System Preferences..."
|
||||||
|
#~ msgstr "تفضيلات النظام..."
|
||||||
|
|
||||||
|
#~ msgid "Restart..."
|
||||||
|
#~ msgstr "أعد التشغيل..."
|
||||||
|
|
||||||
#~ msgid "Account Information..."
|
#~ msgid "Account Information..."
|
||||||
#~ msgstr "معلومات الحساب..."
|
#~ msgstr "معلومات الحساب..."
|
||||||
|
|
||||||
#~ msgid "%H:%M"
|
#~ msgid "%H:%M"
|
||||||
#~ msgstr "%OH:%OM"
|
#~ msgstr "%OH:%OM"
|
||||||
|
|
||||||
#~ msgid "Applications"
|
|
||||||
#~ msgstr "التطبيقات"
|
|
||||||
|
|
||||||
#~ msgid "Recent Documents"
|
#~ msgid "Recent Documents"
|
||||||
#~ msgstr "المستندات الحديثة"
|
#~ msgstr "المستندات الحديثة"
|
||||||
|
|
||||||
@ -750,9 +966,6 @@ msgstr "%1$s: %2$s"
|
|||||||
#~ msgid "SEARCH RESULTS"
|
#~ msgid "SEARCH RESULTS"
|
||||||
#~ msgstr "نتائج البحث"
|
#~ msgstr "نتائج البحث"
|
||||||
|
|
||||||
#~ msgid "Unknown"
|
|
||||||
#~ msgstr "مجهول"
|
|
||||||
|
|
||||||
#~ msgid "Can't lock screen: %s"
|
#~ msgid "Can't lock screen: %s"
|
||||||
#~ msgstr "تعذّر إيصاد الشاشة: %s"
|
#~ msgstr "تعذّر إيصاد الشاشة: %s"
|
||||||
|
|
||||||
|
567
po/de.po
567
po/de.po
@ -6,19 +6,21 @@
|
|||||||
#
|
#
|
||||||
# Hendrik Brandt <heb@gnome-de.org>, 2009.
|
# Hendrik Brandt <heb@gnome-de.org>, 2009.
|
||||||
# Hendrik Richter <hendrikr@gnome.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.
|
# 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 ""
|
msgid ""
|
||||||
msgstr ""
|
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-"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"shell&component=general\n"
|
"POT-Creation-Date: 2011-01-01 23:21+0100\n"
|
||||||
"POT-Creation-Date: 2010-10-10 03:14+0000\n"
|
"PO-Revision-Date: 2011-01-01 16:25+0100\n"
|
||||||
"PO-Revision-Date: 2010-10-10 20:23+0200\n"
|
|
||||||
"Last-Translator: Christian Kirbach <Christian.Kirbach@googlemail.com>\n"
|
"Last-Translator: Christian Kirbach <Christian.Kirbach@googlemail.com>\n"
|
||||||
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
|
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
|
||||||
|
"Language: \n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
@ -105,12 +107,8 @@ msgstr ""
|
|||||||
msgid "List of desktop file IDs for favorite applications"
|
msgid "List of desktop file IDs for favorite applications"
|
||||||
msgstr "Liste der Kennungen der Desktop-Dateien für bevorzugte Anwendungen"
|
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.
|
# 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 ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"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 "
|
"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 "
|
"Das kann zum Senden der Ausgabe über shout2send an einen Icecast-Server oder "
|
||||||
"Ähnliches verwendet werden. Falls nicht (oder auf einen leeren Wert) "
|
"Ähnliches verwendet werden. Falls nicht (oder auf einen leeren Wert) "
|
||||||
"gesetzt, so wird die vorgegebene Weiterleitung verwendet, welche derzeit "
|
"gesetzt, so wird die vorgegebene Weiterleitung verwendet, welche derzeit "
|
||||||
"»videorate ! theoraenc ! oggmux« lautet und die Aufnahme im Ogg-Theora-Format "
|
"»videorate ! theoraenc ! oggmux« lautet und die Aufnahme im Ogg-Theora-"
|
||||||
"speichert."
|
"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"
|
msgid "Show date in clock"
|
||||||
msgstr "Datum in der Uhr anzeigen"
|
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"
|
msgid "Show the week date in the calendar"
|
||||||
msgstr "Wochentag im Kalender anzeigen"
|
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"
|
msgid "Show time with seconds"
|
||||||
msgstr "Zeit sekundengenau anzeigen"
|
msgstr "Zeit sekundengenau anzeigen"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||||
msgid ""
|
msgid ""
|
||||||
"The applications corresponding to these identifiers will be displayed in the "
|
"The applications corresponding to these identifiers will be displayed in the "
|
||||||
"favorites area."
|
"favorites area."
|
||||||
@ -153,7 +151,7 @@ msgstr ""
|
|||||||
"Programme, welche auf diese Bezeichner zutreffen, werden im Favoriten-"
|
"Programme, welche auf diese Bezeichner zutreffen, werden im Favoriten-"
|
||||||
"Bereich angezeigt."
|
"Bereich angezeigt."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"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 "
|
"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 "
|
"Dateiname sollte geändert werden, wenn Sie in einem anderen Containerformat "
|
||||||
"aufnehmen."
|
"aufnehmen."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
@ -173,19 +171,11 @@ msgstr ""
|
|||||||
"der GNOME-Shell aufgezeichnet werden soll, in Einzelbildern pro Sekunde."
|
"der GNOME-Shell aufgezeichnet werden soll, in Einzelbildern pro Sekunde."
|
||||||
|
|
||||||
# hmm Enkodieren oder Kodieren?
|
# 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"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "Die GStreamer-Weiterleitung zur Enkodierung des Screencasts"
|
msgstr "Die GStreamer-Weiterleitung zur Enkodierung des Screencasts"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||||
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
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"The shell normally monitors active applications in order to present the most "
|
"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 "
|
"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 "
|
"deaktivieren, um Ihre Privatsphäre zu schützen. Bitte beachten Sie, dass "
|
||||||
"bereits gespeicherte Daten hiervon nicht beeinflusst werden."
|
"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 ""
|
msgid ""
|
||||||
"This key specifies the format used by the panel clock when the format key is "
|
"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"
|
"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 "
|
"Format zu erhalten. Weitere Informationen finden Sie in der Handbuchseite zu "
|
||||||
"strftime()."
|
"strftime()."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key specifies the hour format used by the panel clock. Possible values "
|
"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\", "
|
"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."
|
"the show_date and show_seconds keys are ignored."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Dieser Schlüssel legt das Stundenformat für die Anzeige der Panel-Uhr fest. "
|
"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« "
|
"Mögliche Werte sind »12-hour«, »24-hour«, »unix« und »custom«. Wenn Sie "
|
||||||
"verwenden, zeigt die Uhr die Sekunden seit Epoch, dem Beginn der Unix-"
|
"»unix« verwenden, zeigt die Uhr die Sekunden seit Epoch, dem Beginn der Unix-"
|
||||||
"Zeitrechnung am 1. Januar 1970 an. Wenn Sie »custom« (benutzerdefiniert) "
|
"Zeitrechnung am 1. Januar 1970 an. Wenn Sie »custom« (benutzerdefiniert) "
|
||||||
"verwenden, zeigt die Uhr die Zeit gemäß dem im Schlüssel »custom_format« "
|
"verwenden, zeigt die Uhr die Zeit gemäß dem im Schlüssel »custom_format« "
|
||||||
"angegebenen Format an. Beachten Sie, dass bei »unix« oder »custom« die "
|
"angegebenen Format an. Beachten Sie, dass bei »unix« oder »custom« die "
|
||||||
"Schlüssel »show_date« und »show_seconds« ignoriert werden."
|
"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"
|
msgid "Uuids of extensions to disable"
|
||||||
msgstr "UUIDs der zu deaktivierenden Erweiterungen"
|
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"
|
msgid "Whether to collect stats about applications usage"
|
||||||
msgstr "Legt fest, ob der Status der Anwendungsnutzung erfasst werden soll"
|
msgstr "Legt fest, ob der Status der Anwendungsnutzung erfasst werden soll"
|
||||||
|
|
||||||
@ -266,14 +256,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Legt die Position des vergrößerten Bildes der Maus innerhalb der "
|
"Legt die Position des vergrößerten Bildes der Maus innerhalb der "
|
||||||
"vergrößerten Ansicht fest, und wie die Maus auf die Mausbewegungen des "
|
"vergrößerten Ansicht fest, und wie die Maus auf die Mausbewegungen des "
|
||||||
"Systems reagiert. Folgende Werte sind möglich: »none« - keine Mausverfolgung; "
|
"Systems reagiert. Folgende Werte sind möglich: »none« - keine "
|
||||||
"»centered« - das Mausbild wird in der Mitte des vergrößerten Bereiches "
|
"Mausverfolgung; »centered« - das Mausbild wird in der Mitte des vergrößerten "
|
||||||
"dargestellt (welche auch den Zeiger der Systemmaus darstellt), wobei der "
|
"Bereiches dargestellt (welche auch den Zeiger der Systemmaus darstellt), "
|
||||||
"vergrößerte Inhalt gerollt wird, sobald die Systemmaus bewegt wird; "
|
"wobei der vergrößerte Inhalt gerollt wird, sobald die Systemmaus bewegt "
|
||||||
"»proportional« - die Position der vergrößerten Maus im vergrößerten Bereich "
|
"wird; »proportional« - die Position der vergrößerten Maus im vergrößerten "
|
||||||
"ist proportional zur Position der Systemmaus auf dem Bildschirm; »push« - "
|
"Bereich ist proportional zur Position der Systemmaus auf dem Bildschirm; "
|
||||||
"wenn die vergrößerte Maus einen der Ränder des vergrößerten Bereichs "
|
"»push« - wenn die vergrößerte Maus einen der Ränder des vergrößerten "
|
||||||
"berührt, wird der entsprechende Inhalt in die Ansicht geschoben."
|
"Bereichs berührt, wird der entsprechende Inhalt in die Ansicht geschoben."
|
||||||
|
|
||||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
|
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -422,62 +412,46 @@ msgstr "_12-Stunden-Format"
|
|||||||
msgid "_24 hour format"
|
msgid "_24 hour format"
|
||||||
msgstr "_24-Stunden-Format"
|
msgstr "_24-Stunden-Format"
|
||||||
|
|
||||||
#. **** Applications ****
|
#. Translators: Filter to display all applications
|
||||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
#: ../js/ui/appDisplay.js:155
|
||||||
|
msgid "All"
|
||||||
|
msgstr "Alle"
|
||||||
|
|
||||||
|
#: ../js/ui/appDisplay.js:236
|
||||||
msgid "APPLICATIONS"
|
msgid "APPLICATIONS"
|
||||||
msgstr "ANWENDUNGEN"
|
msgstr "ANWENDUNGEN"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:348
|
#: ../js/ui/appDisplay.js:266
|
||||||
msgid "PREFERENCES"
|
msgid "PREFERENCES"
|
||||||
msgstr "EINSTELLUNGEN"
|
msgstr "EINSTELLUNGEN"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:648
|
#: ../js/ui/appDisplay.js:563
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Neues Fenster"
|
msgstr "Neues Fenster"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:652
|
#: ../js/ui/appDisplay.js:567
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Aus Favoriten entfernen"
|
msgstr "Aus Favoriten entfernen"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:653
|
#: ../js/ui/appDisplay.js:568
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Zu Favoriten hinzufügen"
|
msgstr "Zu Favoriten hinzufügen"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:830
|
#: ../js/ui/appFavorites.js:91
|
||||||
msgid "Drag here to add favorites"
|
|
||||||
msgstr "Hier ablegen, um zu Favoriten hinzuzufügen"
|
|
||||||
|
|
||||||
#: ../js/ui/appFavorites.js:88
|
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has been added to your favorites."
|
msgid "%s has been added to your favorites."
|
||||||
msgstr "%s wurde zu Ihren Favoriten hinzugefügt"
|
msgstr "%s wurde zu Ihren Favoriten hinzugefügt"
|
||||||
|
|
||||||
#: ../js/ui/appFavorites.js:107
|
#: ../js/ui/appFavorites.js:122
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has been removed from your favorites."
|
msgid "%s has been removed from your favorites."
|
||||||
msgstr "%s wurde aus Ihren Favoriten entfernt"
|
msgstr "%s wurde aus Ihren Favoriten entfernt"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:142
|
#: ../js/ui/dash.js:27
|
||||||
msgid "Find"
|
msgid "Remove"
|
||||||
msgstr "Suchen"
|
msgstr "Entfernen"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:473
|
#: ../js/ui/docDisplay.js:494
|
||||||
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
|
|
||||||
msgid "RECENT ITEMS"
|
msgid "RECENT ITEMS"
|
||||||
msgstr "ZULETZT GEÖFFNETE DOKUMENTE"
|
msgstr "ZULETZT GEÖFFNETE DOKUMENTE"
|
||||||
|
|
||||||
@ -489,7 +463,9 @@ msgstr "Keine Erweiterungen installiert"
|
|||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "Aktiviert"
|
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"
|
msgid "Disabled"
|
||||||
msgstr "Deaktiviert"
|
msgstr "Deaktiviert"
|
||||||
|
|
||||||
@ -509,63 +485,71 @@ msgstr "Quelle zeigen"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Webseite"
|
msgstr "Webseite"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:160
|
#: ../js/ui/overview.js:96
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "Rückgängig"
|
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
|
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||||
#: ../js/ui/panel.js:468
|
#: ../js/ui/panel.js:474
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Quit %s"
|
msgid "Quit %s"
|
||||||
msgstr "%s beenden"
|
msgstr "%s beenden"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:493
|
#: ../js/ui/panel.js:499
|
||||||
msgid "Preferences"
|
msgid "Preferences"
|
||||||
msgstr "Einstellungen"
|
msgstr "Einstellungen"
|
||||||
|
|
||||||
#. Translators: This is the time format with date used
|
#. Translators: This is the time format with date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/panel.js:579
|
#: ../js/ui/panel.js:585
|
||||||
msgid "%a %b %e, %R:%S"
|
msgid "%a %b %e, %R:%S"
|
||||||
msgstr "%a, %e. %b, %R:%S"
|
msgstr "%a, %e. %b, %R:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:580
|
#: ../js/ui/panel.js:586
|
||||||
msgid "%a %b %e, %R"
|
msgid "%a %b %e, %R"
|
||||||
msgstr "%a, %e. %b, %R"
|
msgstr "%a, %e. %b, %R"
|
||||||
|
|
||||||
#. Translators: This is the time format without date used
|
#. Translators: This is the time format without date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/panel.js:584
|
#: ../js/ui/panel.js:590
|
||||||
msgid "%a %R:%S"
|
msgid "%a %R:%S"
|
||||||
msgstr "%a %R:%S"
|
msgstr "%a %R:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:585
|
#: ../js/ui/panel.js:591
|
||||||
msgid "%a %R"
|
msgid "%a %R"
|
||||||
msgstr "%a %R"
|
msgstr "%a %R"
|
||||||
|
|
||||||
#. Translators: This is a time format with date used
|
#. Translators: This is a time format with date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/panel.js:592
|
#: ../js/ui/panel.js:598
|
||||||
msgid "%a %b %e, %l:%M:%S %p"
|
msgid "%a %b %e, %l:%M:%S %p"
|
||||||
msgstr "%a, %e. %b, %H:%M:%S"
|
msgstr "%a, %e. %b, %H:%M:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:593
|
#: ../js/ui/panel.js:599
|
||||||
msgid "%a %b %e, %l:%M %p"
|
msgid "%a %b %e, %l:%M %p"
|
||||||
msgstr "%a, %e. %b, %H:%M"
|
msgstr "%a, %e. %b, %H:%M"
|
||||||
|
|
||||||
#. Translators: This is a time format without date used
|
#. Translators: This is a time format without date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/panel.js:597
|
#: ../js/ui/panel.js:603
|
||||||
msgid "%a %l:%M:%S %p"
|
msgid "%a %l:%M:%S %p"
|
||||||
msgstr "%a %H:%M:%S"
|
msgstr "%a %H:%M:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:598
|
#: ../js/ui/panel.js:604
|
||||||
msgid "%a %l:%M %p"
|
msgid "%a %l:%M %p"
|
||||||
msgstr "%a %H:%M"
|
msgstr "%a %H:%M"
|
||||||
|
|
||||||
#. Button on the left side of the panel.
|
#. 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".
|
#. 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"
|
msgid "Activities"
|
||||||
msgstr "Aktivitäten"
|
msgstr "Aktivitäten"
|
||||||
|
|
||||||
@ -582,6 +566,10 @@ msgstr "Erneut versuchen"
|
|||||||
msgid "Connect to..."
|
msgid "Connect to..."
|
||||||
msgstr "Verbinden mit …"
|
msgstr "Verbinden mit …"
|
||||||
|
|
||||||
|
#: ../js/ui/placeDisplay.js:558
|
||||||
|
msgid "PLACES & DEVICES"
|
||||||
|
msgstr "ORTE UND GERÄTE"
|
||||||
|
|
||||||
#. Translators: this MUST be either "toggle-switch-us"
|
#. Translators: this MUST be either "toggle-switch-us"
|
||||||
#. (for toggle switches containing the English words
|
#. (for toggle switches containing the English words
|
||||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
#. "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:"
|
msgid "Execution of '%s' failed:"
|
||||||
msgstr "Ausführung von »%s« ist gescheitert:"
|
msgstr "Ausführung von »%s« ist gescheitert:"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:91
|
#: ../js/ui/statusMenu.js:101
|
||||||
msgid "Available"
|
msgid "Available"
|
||||||
msgstr "Verfügbar"
|
msgstr "Verfügbar"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:95
|
#: ../js/ui/statusMenu.js:106
|
||||||
msgid "Busy"
|
msgid "Busy"
|
||||||
msgstr "Beschäftigt"
|
msgstr "Beschäftigt"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:99
|
#: ../js/ui/statusMenu.js:114
|
||||||
msgid "Invisible"
|
msgid "My Account"
|
||||||
msgstr "Unsichtbar"
|
msgstr "Eigenes Konto"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:106
|
#: ../js/ui/statusMenu.js:118
|
||||||
msgid "Account Information..."
|
msgid "System Settings"
|
||||||
msgstr "Benutzerinformationen …"
|
msgstr "Systemeinstellungen"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:110
|
#: ../js/ui/statusMenu.js:125
|
||||||
msgid "System Settings..."
|
|
||||||
msgstr "Systemeinstellungen …"
|
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:117
|
|
||||||
msgid "Lock Screen"
|
msgid "Lock Screen"
|
||||||
msgstr "Bildschirm sperren"
|
msgstr "Bildschirm sperren"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:121
|
#: ../js/ui/statusMenu.js:129
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "Benutzer wechseln"
|
msgstr "Benutzer wechseln"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:126
|
#: ../js/ui/statusMenu.js:134
|
||||||
msgid "Log Out..."
|
msgid "Log Out..."
|
||||||
msgstr "Abmelden …"
|
msgstr "Abmelden …"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:130
|
#: ../js/ui/statusMenu.js:141
|
||||||
|
msgid "Suspend..."
|
||||||
|
msgstr "Bereitschaft …"
|
||||||
|
|
||||||
|
#: ../js/ui/statusMenu.js:145
|
||||||
msgid "Shut Down..."
|
msgid "Shut Down..."
|
||||||
msgstr "Ausschalten …"
|
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
|
#: ../js/ui/windowAttentionHandler.js:43
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has finished starting"
|
msgid "%s has finished starting"
|
||||||
@ -646,60 +924,82 @@ msgstr "Start von %s ist abgeschlossen"
|
|||||||
msgid "'%s' is ready"
|
msgid "'%s' is ready"
|
||||||
msgstr "»%s« ist bereit"
|
msgstr "»%s« ist bereit"
|
||||||
|
|
||||||
#: ../js/ui/workspacesView.js:230
|
#: ../js/ui/workspacesView.js:244
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Es kann keine weitere Arbeitsfläche hinzugefügt werden, weil das Maximum an "
|
"Es kann keine weitere Arbeitsfläche hinzugefügt werden, weil das Maximum an "
|
||||||
"Arbeitsflächen erreicht worden ist."
|
"Arbeitsflächen erreicht worden ist."
|
||||||
|
|
||||||
#: ../js/ui/workspacesView.js:247
|
#: ../js/ui/workspacesView.js:260
|
||||||
msgid "Can't remove the first workspace."
|
msgid "Can't remove the first workspace."
|
||||||
msgstr "Die erste Arbeitsfläche kann nicht entfernt werden."
|
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"
|
msgid "Less than a minute ago"
|
||||||
msgstr "Vor weniger als einer Minute"
|
msgstr "Vor weniger als einer Minute"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1200
|
#: ../src/shell-global.c:1160
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d minute ago"
|
msgid "%d minute ago"
|
||||||
msgid_plural "%d minutes ago"
|
msgid_plural "%d minutes ago"
|
||||||
msgstr[0] "Vor %d Minute"
|
msgstr[0] "Vor %d Minute"
|
||||||
msgstr[1] "Vor %d Minuten"
|
msgstr[1] "Vor %d Minuten"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1205
|
#: ../src/shell-global.c:1165
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d hour ago"
|
msgid "%d hour ago"
|
||||||
msgid_plural "%d hours ago"
|
msgid_plural "%d hours ago"
|
||||||
msgstr[0] "Vor %d Stunde"
|
msgstr[0] "Vor %d Stunde"
|
||||||
msgstr[1] "Vor %d Stunden"
|
msgstr[1] "Vor %d Stunden"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1210
|
#: ../src/shell-global.c:1170
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d day ago"
|
msgid "%d day ago"
|
||||||
msgid_plural "%d days ago"
|
msgid_plural "%d days ago"
|
||||||
msgstr[0] "Vor %d Tag"
|
msgstr[0] "Vor %d Tag"
|
||||||
msgstr[1] "Vor %d Tagen"
|
msgstr[1] "Vor %d Tagen"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1215
|
#: ../src/shell-global.c:1175
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d week ago"
|
msgid "%d week ago"
|
||||||
msgid_plural "%d weeks ago"
|
msgid_plural "%d weeks ago"
|
||||||
msgstr[0] "Vor %d Woche"
|
msgstr[0] "Vor %d Woche"
|
||||||
msgstr[1] "Vor %d Wochen"
|
msgstr[1] "Vor %d Wochen"
|
||||||
|
|
||||||
#: ../src/shell-uri-util.c:89
|
#: ../src/shell-util.c:89
|
||||||
msgid "Home Folder"
|
msgid "Home Folder"
|
||||||
msgstr "Persönlicher Ordner"
|
msgstr "Persönlicher Ordner"
|
||||||
|
|
||||||
#. Translators: this is the same string as the one found in
|
#. Translators: this is the same string as the one found in
|
||||||
#. * nautilus
|
#. * nautilus
|
||||||
#: ../src/shell-uri-util.c:104
|
#: ../src/shell-util.c:104
|
||||||
msgid "File System"
|
msgid "File System"
|
||||||
msgstr "Dateisystem"
|
msgstr "Dateisystem"
|
||||||
|
|
||||||
#: ../src/shell-uri-util.c:250
|
#: ../src/shell-util.c:250
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Suchen"
|
msgstr "Suchen"
|
||||||
|
|
||||||
@ -708,11 +1008,42 @@ msgstr "Suchen"
|
|||||||
#. * example, "Trash: some-directory". It means that the
|
#. * example, "Trash: some-directory". It means that the
|
||||||
#. * directory called "some-directory" is in the trash.
|
#. * directory called "some-directory" is in the trash.
|
||||||
#.
|
#.
|
||||||
#: ../src/shell-uri-util.c:300
|
#: ../src/shell-util.c:300
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%1$s: %2$s"
|
msgid "%1$s: %2$s"
|
||||||
msgstr "%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"
|
#~ msgid "ON"
|
||||||
#~ msgstr "EIN"
|
#~ msgstr "EIN"
|
||||||
|
|
||||||
@ -725,9 +1056,6 @@ msgstr "%1$s: %2$s"
|
|||||||
#~ msgid "%H:%M"
|
#~ msgid "%H:%M"
|
||||||
#~ msgstr "%H:%M"
|
#~ msgstr "%H:%M"
|
||||||
|
|
||||||
#~ msgid "Applications"
|
|
||||||
#~ msgstr "Anwendungen"
|
|
||||||
|
|
||||||
#~ msgid "Recent Documents"
|
#~ msgid "Recent Documents"
|
||||||
#~ msgstr "Zuletzt geöffnete Dokumente"
|
#~ msgstr "Zuletzt geöffnete Dokumente"
|
||||||
|
|
||||||
@ -746,9 +1074,6 @@ msgstr "%1$s: %2$s"
|
|||||||
#~ msgid "SEARCH RESULTS"
|
#~ msgid "SEARCH RESULTS"
|
||||||
#~ msgstr "SUCHERGEBNISSE"
|
#~ msgstr "SUCHERGEBNISSE"
|
||||||
|
|
||||||
#~ msgid "Unknown"
|
|
||||||
#~ msgstr "Unbekannt"
|
|
||||||
|
|
||||||
#~ msgid "Can't lock screen: %s"
|
#~ msgid "Can't lock screen: %s"
|
||||||
#~ msgstr "Bildschirm kann nicht gesperrt werden: %s"
|
#~ msgstr "Bildschirm kann nicht gesperrt werden: %s"
|
||||||
|
|
||||||
|
583
po/es.po
583
po/es.po
@ -2,15 +2,16 @@
|
|||||||
# Copyright (C) 2009 gnome-shell's COPYRIGHT HOLDER
|
# Copyright (C) 2009 gnome-shell's COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the gnome-shell package.
|
# This file is distributed under the same license as the gnome-shell package.
|
||||||
# Jorge González <jorgegonz@svn.gnome.org>, 2009, 2010.
|
# Jorge González <jorgegonz@svn.gnome.org>, 2009, 2010.
|
||||||
|
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2010, 2011.
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
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-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&component=general\n"
|
"shell&component=general\n"
|
||||||
"POT-Creation-Date: 2010-12-18 19:25+0000\n"
|
"POT-Creation-Date: 2011-01-15 00:23+0000\n"
|
||||||
"PO-Revision-Date: 2010-12-19 13:12+0100\n"
|
"PO-Revision-Date: 2011-01-16 13:26+0100\n"
|
||||||
"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
|
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||||
"Language-Team: Español <gnome-es-list@gnome.org>\n"
|
"Language-Team: Español <gnome-es-list@gnome.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -25,14 +26,6 @@ msgstr "GNOME Shell"
|
|||||||
msgid "Window management and application launching"
|
msgid "Window management and application launching"
|
||||||
msgstr "Gestión de ventanas e inicio de aplicaciones"
|
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
|
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
||||||
msgid ""
|
msgid ""
|
||||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||||
@ -42,24 +35,20 @@ msgstr ""
|
|||||||
"usando el diálogo Alt+F2"
|
"usando el diálogo Alt+F2"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
#: ../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"
|
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Activar las herramientas internas, útiles para desarrolladores y probadores, "
|
"Activar las herramientas internas, útiles para desarrolladores y probadores, "
|
||||||
"desde Alt+F2"
|
"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"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr "Extensión de archivo que usar para almacenar los «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."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr "Tasa de fotogramas usada para grabar «screencast»."
|
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 ""
|
msgid ""
|
||||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||||
"should not be loaded."
|
"should not be loaded."
|
||||||
@ -67,39 +56,27 @@ msgstr ""
|
|||||||
"Las extensiones de GNOME Shell tienen una propiedad uuid; esta clave lista "
|
"Las extensiones de GNOME Shell tienen una propiedad uuid; esta clave lista "
|
||||||
"las extensiones que no se deben cargar."
|
"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"
|
msgid "History for command (Alt-F2) dialog"
|
||||||
msgstr "Histórico del diálogo de comandos (Alt+F2)"
|
msgstr "Histórico del diálogo de comandos (Alt+F2)"
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||||
|
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
|
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||||
msgid "Hour format"
|
msgid "If true, display seconds in time."
|
||||||
msgstr "Formato de la hora"
|
msgstr "Si es cierta, muestra los segundos en la hora."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
#: ../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."
|
msgid "If true, display the ISO week date in the calendar."
|
||||||
msgstr "Si es cierta muestra la fecha de semana ISO en el calendario."
|
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"
|
msgid "List of desktop file IDs for favorite applications"
|
||||||
msgstr "Lista de ID de archivos de escritorio para las aplicaciones favoritas"
|
msgstr "Lista de ID de archivos de escritorio para las aplicaciones favoritas"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"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 "
|
"used for gst-launch. The pipeline should have an unconnected sink pad where "
|
||||||
@ -121,19 +98,19 @@ msgstr ""
|
|||||||
"predeterminada. Actualmente es «videorate ! theoraenc ! oggmux» y greba en "
|
"predeterminada. Actualmente es «videorate ! theoraenc ! oggmux» y greba en "
|
||||||
"Ogg Theora."
|
"Ogg Theora."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||||
msgid "Show date in clock"
|
msgid "Show date in clock"
|
||||||
msgstr "Mostrar la fecha en el reloj"
|
msgstr "Mostrar la fecha en el reloj"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||||
msgid "Show the week date in the calendar"
|
msgid "Show the week date in the calendar"
|
||||||
msgstr "Mostrar la fecha de la semana en el calendario"
|
msgstr "Mostrar la fecha de la semana en el calendario"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||||
msgid "Show time with seconds"
|
msgid "Show time with seconds"
|
||||||
msgstr "Mostrar la hora con segundos"
|
msgstr "Mostrar la hora con segundos"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||||
msgid ""
|
msgid ""
|
||||||
"The applications corresponding to these identifiers will be displayed in the "
|
"The applications corresponding to these identifiers will be displayed in the "
|
||||||
"favorites area."
|
"favorites area."
|
||||||
@ -141,7 +118,7 @@ msgstr ""
|
|||||||
"Las aplicaciones correspondientes con esos identificadores se mostrarán en "
|
"Las aplicaciones correspondientes con esos identificadores se mostrarán en "
|
||||||
"el área de favoritos."
|
"el área de favoritos."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"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 "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
@ -151,7 +128,7 @@ msgstr ""
|
|||||||
"basado en la fecha actual y usará esta extensión. Se debería cambiar al "
|
"basado en la fecha actual y usará esta extensión. Se debería cambiar al "
|
||||||
"grabar en otro formato contenedor diferente."
|
"grabar en otro formato contenedor diferente."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
@ -159,11 +136,11 @@ msgstr ""
|
|||||||
"La tasa de fotogramas de la grabación resultante grabada por el grabador de "
|
"La tasa de fotogramas de la grabación resultante grabada por el grabador de "
|
||||||
"«screencast» de GNOME Shell, en fotogramas por segundo."
|
"«screencast» de GNOME Shell, en fotogramas por segundo."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "La tubería de gstreamer usada para codificar el «screencast»"
|
msgstr "La tubería de gstreamer usada para codificar el «screencast»"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||||
msgid ""
|
msgid ""
|
||||||
"The shell normally monitors active applications in order to present the most "
|
"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 "
|
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
||||||
@ -175,41 +152,11 @@ msgstr ""
|
|||||||
"mantienen de forma privada, puede querer desactivarlo por razones de "
|
"mantienen de forma privada, puede querer desactivarlo por razones de "
|
||||||
"privacidad. Note que haciéndolo no eliminará los datos ya guardados."
|
"privacidad. Note que haciéndolo no eliminará los datos ya guardados."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||||
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: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 ""
|
|
||||||
"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:24
|
|
||||||
msgid "Uuids of extensions to disable"
|
msgid "Uuids of extensions to disable"
|
||||||
msgstr "Uuid de las extensiones que desactivar"
|
msgstr "Uuid de las extensiones que desactivar"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||||
msgid "Whether to collect stats about applications usage"
|
msgid "Whether to collect stats about applications usage"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Indica si se deben recolectar estadísticas acerca del uso de las aplicaciones"
|
"Indica si se deben recolectar estadísticas acerca del uso de las aplicaciones"
|
||||||
@ -371,55 +318,45 @@ msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Anchura de las líneas verticales y horizontales que conforman las cruces."
|
"Anchura de las líneas verticales y horizontales que conforman las cruces."
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:1
|
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||||
msgid "Clock Format"
|
#. something nicer
|
||||||
msgstr "Formato del reloj"
|
#: ../js/misc/util.js:108
|
||||||
|
#| msgid "Please enter a command:"
|
||||||
|
msgid "Could not parse command:"
|
||||||
|
msgstr "No se pudo analizar el comando:"
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:2
|
#: ../js/misc/util.js:130
|
||||||
msgid "Clock Preferences"
|
#| msgid "Applications"
|
||||||
msgstr "Preferencias del reloj"
|
msgid "No such application"
|
||||||
|
msgstr "No existe la aplicación"
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:3
|
#: ../js/misc/util.js:143 ../js/ui/runDialog.js:364
|
||||||
msgid "Panel Display"
|
#, c-format
|
||||||
msgstr "Panel de visualización"
|
msgid "Execution of '%s' failed:"
|
||||||
|
msgstr "Falló la ejecución de «%s»:"
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:4
|
#. Translators: Filter to display all applications
|
||||||
msgid "Show seco_nds"
|
#: ../js/ui/appDisplay.js:155
|
||||||
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"
|
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:154
|
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "Todas"
|
msgstr "Todas"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:235
|
#: ../js/ui/appDisplay.js:236
|
||||||
msgid "APPLICATIONS"
|
msgid "APPLICATIONS"
|
||||||
msgstr "APLICACIONES"
|
msgstr "APLICACIONES"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:265
|
#: ../js/ui/appDisplay.js:266
|
||||||
msgid "PREFERENCES"
|
msgid "PREFERENCES"
|
||||||
msgstr "PREFERENCIAS"
|
msgstr "PREFERENCIAS"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:562
|
#: ../js/ui/appDisplay.js:563
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Ventana nueva"
|
msgstr "Ventana nueva"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:566
|
#: ../js/ui/appDisplay.js:567
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Quitar de los favoritos"
|
msgstr "Quitar de los favoritos"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:567
|
#: ../js/ui/appDisplay.js:568
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Añadir a los favoritos"
|
msgstr "Añadir a los favoritos"
|
||||||
|
|
||||||
@ -437,122 +374,199 @@ msgstr "Se ha quitado %s de sus favoritos."
|
|||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Quitar"
|
msgstr "Quitar"
|
||||||
|
|
||||||
#: ../js/ui/docDisplay.js:494
|
#: ../js/ui/docDisplay.js:18
|
||||||
msgid "RECENT ITEMS"
|
msgid "RECENT ITEMS"
|
||||||
msgstr "ELEMENTOS RECIENTES"
|
msgstr "ELEMENTOS RECIENTES"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:552
|
#: ../js/ui/endSessionDialog.js:63
|
||||||
|
#, c-format
|
||||||
|
#| msgid "Log Out..."
|
||||||
|
msgid "Log Out %s"
|
||||||
|
msgstr "Cerrar la sesión %s"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
|
||||||
|
#| msgid "Log Out..."
|
||||||
|
msgid "Log Out"
|
||||||
|
msgstr "Cerrar la sesión"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:65
|
||||||
|
msgid "Click Log Out to quit these applications and log out of the system."
|
||||||
|
msgstr ""
|
||||||
|
"Pulse «Cerrar la sesión» para salir de esas aplicaciones y cerrar la sesión "
|
||||||
|
"del sistema."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:66
|
||||||
|
#, c-format
|
||||||
|
msgid "%s will be logged out automatically in %d seconds."
|
||||||
|
msgstr "La sesión de %s se cerrará automáticamente en %d segundos."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:67
|
||||||
|
#, c-format
|
||||||
|
msgid "You will be logged out automatically in %d seconds."
|
||||||
|
msgstr "Su sesión se cerrará automáticamente en %d segundos."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:68
|
||||||
|
msgid "Logging out of the system."
|
||||||
|
msgstr "Cerrando la sesión."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
|
||||||
|
#| msgid "Shut Down..."
|
||||||
|
msgid "Shut Down"
|
||||||
|
msgstr "Apagar"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:75
|
||||||
|
msgid "Click Shut Down to quit these applications and shut down the system."
|
||||||
|
msgstr "Pulse «Apagar» para salir de esas aplicaciones y apagar el sistema."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:76
|
||||||
|
#, c-format
|
||||||
|
msgid "The system will shut down automatically in %d seconds."
|
||||||
|
msgstr "El sistema se apagará automáticamente en %d segundo."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:77
|
||||||
|
msgid "Shutting down the system."
|
||||||
|
msgstr "Apagando el sistema."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
|
||||||
|
#| msgid "Restart..."
|
||||||
|
msgid "Restart"
|
||||||
|
msgstr "Reiniciar"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:85
|
||||||
|
msgid "Click Restart to quit these applications and restart the system."
|
||||||
|
msgstr ""
|
||||||
|
"Pulse «Reiniciar» para salir de esas aplicaciones y reiniciar el sistema."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:86
|
||||||
|
#, c-format
|
||||||
|
msgid "The system will restart automatically in %d seconds."
|
||||||
|
msgstr "El sistema se reiniciará automáticamente en %d segundos."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:87
|
||||||
|
msgid "Restarting the system."
|
||||||
|
msgstr "Reiniciando el sistema."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:395
|
||||||
|
msgid "Confirm"
|
||||||
|
msgstr "Confirmar"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:469
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Cancelar"
|
||||||
|
|
||||||
|
#: ../js/ui/lookingGlass.js:556
|
||||||
msgid "No extensions installed"
|
msgid "No extensions installed"
|
||||||
msgstr "No hay extensiones instaladas"
|
msgstr "No hay extensiones instaladas"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:589
|
#: ../js/ui/lookingGlass.js:593
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "Activado"
|
msgstr "Activado"
|
||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The device has been disabled
|
#. * The device has been disabled
|
||||||
#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
|
#: ../js/ui/lookingGlass.js:595 ../src/gvc/gvc-mixer-control.c:1087
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "Desactivado"
|
msgstr "Desactivado"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:593
|
#: ../js/ui/lookingGlass.js:597
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Error"
|
msgstr "Error"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:595
|
#: ../js/ui/lookingGlass.js:599
|
||||||
msgid "Out of date"
|
msgid "Out of date"
|
||||||
msgstr "Caducado"
|
msgstr "Caducado"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:620
|
#: ../js/ui/lookingGlass.js:624
|
||||||
msgid "View Source"
|
msgid "View Source"
|
||||||
msgstr "Ver fuente"
|
msgstr "Ver fuente"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:626
|
#: ../js/ui/lookingGlass.js:630
|
||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Página web"
|
msgstr "Página web"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:96
|
#: ../js/ui/messageTray.js:1748
|
||||||
|
#| msgid "Account Information..."
|
||||||
|
msgid "System Information"
|
||||||
|
msgstr "Información del sistema"
|
||||||
|
|
||||||
|
#: ../js/ui/overview.js:75
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "Deshacer"
|
msgstr "Deshacer"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:158
|
#: ../js/ui/overview.js:140
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Ventanas"
|
msgstr "Ventanas"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:161
|
#: ../js/ui/overview.js:143
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Aplicaciones"
|
msgstr "Aplicaciones"
|
||||||
|
|
||||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||||
#: ../js/ui/panel.js:474
|
#: ../js/ui/panel.js:479
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Quit %s"
|
msgid "Quit %s"
|
||||||
msgstr "Salir de %s"
|
msgstr "Salir de %s"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:499
|
|
||||||
msgid "Preferences"
|
|
||||||
msgstr "Preferencias"
|
|
||||||
|
|
||||||
#. Translators: This is the time format with date used
|
#. Translators: This is the time format with date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/panel.js:585
|
#: ../js/ui/panel.js:564
|
||||||
msgid "%a %b %e, %R:%S"
|
msgid "%a %b %e, %R:%S"
|
||||||
msgstr "%a %e de %b, %R:%S"
|
msgstr "%a %e de %b, %R:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:586
|
#: ../js/ui/panel.js:565
|
||||||
msgid "%a %b %e, %R"
|
msgid "%a %b %e, %R"
|
||||||
msgstr "%a %e de %b, %R"
|
msgstr "%a %e de %b, %R"
|
||||||
|
|
||||||
#. Translators: This is the time format without date used
|
#. Translators: This is the time format without date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/panel.js:590
|
#: ../js/ui/panel.js:569
|
||||||
msgid "%a %R:%S"
|
msgid "%a %R:%S"
|
||||||
msgstr "%a %R:%S"
|
msgstr "%a %R:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:591
|
#: ../js/ui/panel.js:570
|
||||||
msgid "%a %R"
|
msgid "%a %R"
|
||||||
msgstr "%a %R"
|
msgstr "%a %R"
|
||||||
|
|
||||||
#. Translators: This is a time format with date used
|
#. Translators: This is a time format with date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/panel.js:598
|
#: ../js/ui/panel.js:577
|
||||||
msgid "%a %b %e, %l:%M:%S %p"
|
msgid "%a %b %e, %l:%M:%S %p"
|
||||||
msgstr "%a %e de %b, %H:%M:%S"
|
msgstr "%a %e de %b, %H:%M:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:599
|
#: ../js/ui/panel.js:578
|
||||||
msgid "%a %b %e, %l:%M %p"
|
msgid "%a %b %e, %l:%M %p"
|
||||||
msgstr "%a %e de %b, %H:%M"
|
msgstr "%a %e de %b, %H:%M"
|
||||||
|
|
||||||
#. Translators: This is a time format without date used
|
#. Translators: This is a time format without date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/panel.js:603
|
#: ../js/ui/panel.js:582
|
||||||
msgid "%a %l:%M:%S %p"
|
msgid "%a %l:%M:%S %p"
|
||||||
msgstr "%a %H:%M:%S"
|
msgstr "%a %H:%M:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:604
|
#: ../js/ui/panel.js:583
|
||||||
msgid "%a %l:%M %p"
|
msgid "%a %l:%M %p"
|
||||||
msgstr "%a %H:%M"
|
msgstr "%a %H:%M"
|
||||||
|
|
||||||
#. Button on the left side of the panel.
|
#. 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".
|
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||||
#: ../js/ui/panel.js:749
|
#: ../js/ui/panel.js:728
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "Actividades"
|
msgstr "Actividades"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:111
|
#: ../js/ui/placeDisplay.js:112
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to unmount '%s'"
|
msgid "Failed to unmount '%s'"
|
||||||
msgstr "Falló al desmontar «%s»"
|
msgstr "Falló al desmontar «%s»"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:114
|
#: ../js/ui/placeDisplay.js:115
|
||||||
msgid "Retry"
|
msgid "Retry"
|
||||||
msgstr "Reintentar"
|
msgstr "Reintentar"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:159
|
#: ../js/ui/placeDisplay.js:160
|
||||||
msgid "Connect to..."
|
msgid "Connect to..."
|
||||||
msgstr "Conectar a…"
|
msgstr "Conectar a…"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:558
|
#: ../js/ui/placeDisplay.js:559
|
||||||
msgid "PLACES & DEVICES"
|
msgid "PLACES & DEVICES"
|
||||||
msgstr "LUGARES Y DISPOSITIVOS"
|
msgstr "LUGARES Y DISPOSITIVOS"
|
||||||
|
|
||||||
@ -565,84 +579,79 @@ msgstr "LUGARES Y DISPOSITIVOS"
|
|||||||
msgid "toggle-switch-us"
|
msgid "toggle-switch-us"
|
||||||
msgstr "toggle-switch-intl"
|
msgstr "toggle-switch-intl"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:233
|
#: ../js/ui/runDialog.js:222
|
||||||
msgid "Please enter a command:"
|
msgid "Please enter a command:"
|
||||||
msgstr "Introduzca un comando:"
|
msgstr "Introduzca un comando:"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:378
|
#: ../js/ui/statusMenu.js:102
|
||||||
#, c-format
|
|
||||||
msgid "Execution of '%s' failed:"
|
|
||||||
msgstr "Falló la ejecución de «%s»:"
|
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:101
|
|
||||||
msgid "Available"
|
msgid "Available"
|
||||||
msgstr "Disponible"
|
msgstr "Disponible"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:106
|
#: ../js/ui/statusMenu.js:107
|
||||||
msgid "Busy"
|
msgid "Busy"
|
||||||
msgstr "Ocupado"
|
msgstr "Ocupado"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:114
|
#: ../js/ui/statusMenu.js:115
|
||||||
msgid "My Account"
|
msgid "My Account"
|
||||||
msgstr "Mi cuenta"
|
msgstr "Mi cuenta"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:118
|
#: ../js/ui/statusMenu.js:119
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "Configuración del sistema"
|
msgstr "Configuración del sistema"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:125
|
#: ../js/ui/statusMenu.js:126
|
||||||
msgid "Lock Screen"
|
msgid "Lock Screen"
|
||||||
msgstr "Bloquear la pantalla"
|
msgstr "Bloquear la pantalla"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:129
|
#: ../js/ui/statusMenu.js:130
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "Cambiar de usuario"
|
msgstr "Cambiar de usuario"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:134
|
#: ../js/ui/statusMenu.js:135
|
||||||
msgid "Log Out..."
|
msgid "Log Out..."
|
||||||
msgstr "Salir…"
|
msgstr "Cerrar la sesión…"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:141
|
#: ../js/ui/statusMenu.js:142
|
||||||
msgid "Suspend..."
|
msgid "Suspend..."
|
||||||
msgstr "Suspender…"
|
msgstr "Suspender…"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:145
|
#: ../js/ui/statusMenu.js:146
|
||||||
msgid "Shut Down..."
|
msgid "Shut Down..."
|
||||||
msgstr "Apagar…"
|
msgstr "Apagar…"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:82
|
#: ../js/ui/status/accessibility.js:83
|
||||||
msgid "Zoom"
|
msgid "Zoom"
|
||||||
msgstr "Ampliación"
|
msgstr "Ampliación"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:88
|
#: ../js/ui/status/accessibility.js:89
|
||||||
msgid "Screen Reader"
|
msgid "Screen Reader"
|
||||||
msgstr "Lector de pantalla"
|
msgstr "Lector de pantalla"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:91
|
#: ../js/ui/status/accessibility.js:92
|
||||||
msgid "Screen Keyboard"
|
msgid "Screen Keyboard"
|
||||||
msgstr "Teclado en pantalla"
|
msgstr "Teclado en pantalla"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:94
|
#: ../js/ui/status/accessibility.js:95
|
||||||
msgid "Visual Alerts"
|
msgid "Visual Alerts"
|
||||||
msgstr "Alertas visuales"
|
msgstr "Alertas visuales"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:97
|
#: ../js/ui/status/accessibility.js:98
|
||||||
msgid "Sticky Keys"
|
msgid "Sticky Keys"
|
||||||
msgstr "Teclas persistentes"
|
msgstr "Teclas persistentes"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:100
|
#: ../js/ui/status/accessibility.js:101
|
||||||
msgid "Slow Keys"
|
msgid "Slow Keys"
|
||||||
msgstr "Teclas lentas"
|
msgstr "Teclas lentas"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:103
|
#: ../js/ui/status/accessibility.js:104
|
||||||
msgid "Bounce Keys"
|
msgid "Bounce Keys"
|
||||||
msgstr "Rechazo de teclas"
|
msgstr "Rechazo de teclas"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:106
|
#: ../js/ui/status/accessibility.js:107
|
||||||
msgid "Mouse Keys"
|
msgid "Mouse Keys"
|
||||||
msgstr "Teclas del ratón"
|
msgstr "Teclas del ratón"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:110
|
#: ../js/ui/status/accessibility.js:111
|
||||||
msgid "Universal Access Settings"
|
msgid "Universal Access Settings"
|
||||||
msgstr "Preferencias del acceso universal"
|
msgstr "Preferencias del acceso universal"
|
||||||
|
|
||||||
@ -654,6 +663,122 @@ msgstr "Contraste alto"
|
|||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr "<b>Texto:</b>"
|
msgstr "<b>Texto:</b>"
|
||||||
|
|
||||||
|
#: ../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 "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:191
|
||||||
|
msgid "Connection"
|
||||||
|
msgstr "Conexión"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:227
|
||||||
|
msgid "Send Files..."
|
||||||
|
msgstr "Enviar archivos…"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:232
|
||||||
|
msgid "Browse Files..."
|
||||||
|
msgstr "Examinar archivos…"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:241
|
||||||
|
msgid "Error browsing device"
|
||||||
|
msgstr "Error al examinar el dispositivo"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:242
|
||||||
|
#, 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:250 ../js/ui/status/keyboard.js:78
|
||||||
|
msgid "Keyboard Settings"
|
||||||
|
msgstr "Configuración del teclado"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:255
|
||||||
|
msgid "Mouse Settings"
|
||||||
|
msgstr "Ajustes del ratón…"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:262 ../js/ui/status/volume.js:63
|
||||||
|
msgid "Sound Settings"
|
||||||
|
msgstr "Configuración del sonido"
|
||||||
|
|
||||||
|
#: ../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 "Agente Bluetooth"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:371
|
||||||
|
#, c-format
|
||||||
|
msgid "Authorization request from %s"
|
||||||
|
msgstr "Solicitud de autorización de %s"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:377
|
||||||
|
#, 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:379
|
||||||
|
msgid "Always grant access"
|
||||||
|
msgstr "Conceder acceso siempre"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:380
|
||||||
|
msgid "Grant this time only"
|
||||||
|
msgstr "Conceder sólo esta vez"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:381
|
||||||
|
msgid "Reject"
|
||||||
|
msgstr "Rechazar"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:411
|
||||||
|
#, c-format
|
||||||
|
msgid "Pairing confirmation for %s"
|
||||||
|
msgstr "Confirmación de emparejamiento 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 "El dispositivo «%s» quiere emparejarse 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 el PIN mostrado en «%s» coincide con el del dispositivo."
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:420
|
||||||
|
msgid "Matches"
|
||||||
|
msgstr "Coincide"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:421
|
||||||
|
msgid "Does not match"
|
||||||
|
msgstr "No coincide"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:444
|
||||||
|
#, c-format
|
||||||
|
msgid "Pairing request for %s"
|
||||||
|
msgstr "Solicitud de emparejamiento para «%s»"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:452
|
||||||
|
msgid "Please enter the PIN mentioned on the device."
|
||||||
|
msgstr "Introduzca el PIN mencionado en el dispositivo."
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:468
|
||||||
|
msgid "OK"
|
||||||
|
msgstr "Aceptar"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:85
|
#: ../js/ui/status/power.js:85
|
||||||
msgid "Power Settings"
|
msgid "Power Settings"
|
||||||
msgstr "Configuración de energía"
|
msgstr "Configuración de energía"
|
||||||
@ -690,82 +815,78 @@ msgid_plural "%d minutes remaining"
|
|||||||
msgstr[0] "Queda %d minuto"
|
msgstr[0] "Queda %d minuto"
|
||||||
msgstr[1] "Queda %d minutos"
|
msgstr[1] "Queda %d minutos"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:237
|
#: ../js/ui/status/power.js:235
|
||||||
msgid "AC adapter"
|
msgid "AC adapter"
|
||||||
msgstr "Adaptador de corriente"
|
msgstr "Adaptador de corriente"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:239
|
#: ../js/ui/status/power.js:237
|
||||||
msgid "Laptop battery"
|
msgid "Laptop battery"
|
||||||
msgstr "Batería del portátil"
|
msgstr "Batería del portátil"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:241
|
#: ../js/ui/status/power.js:239
|
||||||
msgid "UPS"
|
msgid "UPS"
|
||||||
msgstr "SAI"
|
msgstr "SAI"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:243
|
#: ../js/ui/status/power.js:241
|
||||||
msgid "Monitor"
|
msgid "Monitor"
|
||||||
msgstr "Monitor"
|
msgstr "Monitor"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:245
|
#: ../js/ui/status/power.js:243
|
||||||
msgid "Mouse"
|
msgid "Mouse"
|
||||||
msgstr "Ratón"
|
msgstr "Ratón"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:247
|
#: ../js/ui/status/power.js:245
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Teclado"
|
msgstr "Teclado"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:249
|
#: ../js/ui/status/power.js:247
|
||||||
msgid "PDA"
|
msgid "PDA"
|
||||||
msgstr "PDA"
|
msgstr "PDA"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:251
|
#: ../js/ui/status/power.js:249
|
||||||
msgid "Cell phone"
|
msgid "Cell phone"
|
||||||
msgstr "Teléfono móvil"
|
msgstr "Teléfono móvil"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:253
|
#: ../js/ui/status/power.js:251
|
||||||
msgid "Media player"
|
msgid "Media player"
|
||||||
msgstr "Reproductor multimedia"
|
msgstr "Reproductor multimedia"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:255
|
#: ../js/ui/status/power.js:253
|
||||||
msgid "Tablet"
|
msgid "Tablet"
|
||||||
msgstr "Tableta"
|
msgstr "Tableta"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:257
|
#: ../js/ui/status/power.js:255
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "Equipo"
|
msgstr "Equipo"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
|
#: ../js/ui/status/power.js:257 ../src/shell-app-system.c:1012
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Desconocido"
|
msgstr "Desconocido"
|
||||||
|
|
||||||
#: ../js/ui/status/volume.js:41
|
#: ../js/ui/status/volume.js:42
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "Volumen"
|
msgstr "Volumen"
|
||||||
|
|
||||||
#: ../js/ui/status/volume.js:54
|
#: ../js/ui/status/volume.js:55
|
||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Micrófono"
|
msgstr "Micrófono"
|
||||||
|
|
||||||
#: ../js/ui/status/volume.js:62
|
#: ../js/ui/telepathyClient.js:561
|
||||||
msgid "Sound Settings"
|
|
||||||
msgstr "Configuración del sonido"
|
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:560
|
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is online."
|
msgid "%s is online."
|
||||||
msgstr "%s está conectado/a."
|
msgstr "%s está conectado/a."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:565
|
#: ../js/ui/telepathyClient.js:566
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is offline."
|
msgid "%s is offline."
|
||||||
msgstr "%s está desconectado/a."
|
msgstr "%s está desconectado/a."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:568
|
#: ../js/ui/telepathyClient.js:569
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is away."
|
msgid "%s is away."
|
||||||
msgstr "%s está ausente."
|
msgstr "%s está ausente."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:571
|
#: ../js/ui/telepathyClient.js:572
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is busy."
|
msgid "%s is busy."
|
||||||
msgstr "%s está ocupado/a."
|
msgstr "%s está ocupado/a."
|
||||||
@ -773,7 +894,7 @@ msgstr "%s está ocupado/a."
|
|||||||
#. Translators: this is a time format string followed by a date.
|
#. Translators: this is a time format string followed by a date.
|
||||||
#. If applicable, replace %X with a strftime format valid for your
|
#. If applicable, replace %X with a strftime format valid for your
|
||||||
#. locale, without seconds.
|
#. locale, without seconds.
|
||||||
#: ../js/ui/telepathyClient.js:664
|
#: ../js/ui/telepathyClient.js:666
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent at %X on %A"
|
msgid "Sent at %X on %A"
|
||||||
msgstr "Enviado a las %X el %A"
|
msgstr "Enviado a las %X el %A"
|
||||||
@ -825,32 +946,32 @@ msgstr[1] "%u entradas"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Sonidos del sistema"
|
msgstr "Sonidos del sistema"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1155
|
#: ../src/shell-global.c:1233
|
||||||
msgid "Less than a minute ago"
|
msgid "Less than a minute ago"
|
||||||
msgstr "Hace menos de un minuto"
|
msgstr "Hace menos de un minuto"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1159
|
#: ../src/shell-global.c:1237
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d minute ago"
|
msgid "%d minute ago"
|
||||||
msgid_plural "%d minutes ago"
|
msgid_plural "%d minutes ago"
|
||||||
msgstr[0] "Hace %d minuto"
|
msgstr[0] "Hace %d minuto"
|
||||||
msgstr[1] "Hace %d minutos"
|
msgstr[1] "Hace %d minutos"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1164
|
#: ../src/shell-global.c:1242
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d hour ago"
|
msgid "%d hour ago"
|
||||||
msgid_plural "%d hours ago"
|
msgid_plural "%d hours ago"
|
||||||
msgstr[0] "Hace %d hora"
|
msgstr[0] "Hace %d hora"
|
||||||
msgstr[1] "Hace %d horas"
|
msgstr[1] "Hace %d horas"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1169
|
#: ../src/shell-global.c:1247
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d day ago"
|
msgid "%d day ago"
|
||||||
msgid_plural "%d days ago"
|
msgid_plural "%d days ago"
|
||||||
msgstr[0] "Hace %d día"
|
msgstr[0] "Hace %d día"
|
||||||
msgstr[1] "Hace %d días"
|
msgstr[1] "Hace %d días"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1174
|
#: ../src/shell-global.c:1252
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d week ago"
|
msgid "%d week ago"
|
||||||
msgid_plural "%d weeks ago"
|
msgid_plural "%d weeks ago"
|
||||||
@ -881,6 +1002,78 @@ msgstr "Buscar"
|
|||||||
msgid "%1$s: %2$s"
|
msgid "%1$s: %2$s"
|
||||||
msgstr "%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..."
|
#~ msgid "What's using power..."
|
||||||
#~ msgstr "Lo que está usando energía…"
|
#~ msgstr "Lo que está usando energía…"
|
||||||
|
|
||||||
@ -909,12 +1102,6 @@ msgstr "%1$s: %2$s"
|
|||||||
#~ msgid "Invisible"
|
#~ msgid "Invisible"
|
||||||
#~ msgstr "Invisible"
|
#~ msgstr "Invisible"
|
||||||
|
|
||||||
#~ msgid "Restart..."
|
|
||||||
#~ msgstr "Reiniciar…"
|
|
||||||
|
|
||||||
#~ msgid "Account Information..."
|
|
||||||
#~ msgstr "Información de la cuenta…"
|
|
||||||
|
|
||||||
#~ msgid "ON"
|
#~ msgid "ON"
|
||||||
#~ msgstr "ENCENDIDO"
|
#~ msgstr "ENCENDIDO"
|
||||||
|
|
||||||
|
320
po/et.po
320
po/et.po
@ -1,21 +1,26 @@
|
|||||||
|
# GNOME kesta eesti keele tõlge.
|
||||||
# Estonian translation for gnome-shell.
|
# 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.
|
# 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 ""
|
msgid ""
|
||||||
msgstr ""
|
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-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&component=general\n"
|
"shell&component=general\n"
|
||||||
"POT-Creation-Date: 2010-12-18 23:05+0000\n"
|
"POT-Creation-Date: 2011-01-15 00:23+0000\n"
|
||||||
"PO-Revision-Date: 2010-12-18 11:47+0200\n"
|
"PO-Revision-Date: 2011-01-15 15:45+0200\n"
|
||||||
"Last-Translator: Ivar Smolin <okul@linux.ee>\n"
|
"Last-Translator: Ivar Smolin <okul@linux.ee>\n"
|
||||||
"Language-Team: Estonian <gnome-et@linux.ee>\n"
|
"Language-Team: Estonian <gnome-et@linux.ee>\n"
|
||||||
"Language: et\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: et\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"X-Poedit-Language: Estonian\n"
|
"X-Poedit-Language: Estonian\n"
|
||||||
"X-Poedit-Country: Estonia\n"
|
"X-Poedit-Country: Estonia\n"
|
||||||
@ -26,12 +31,6 @@ msgstr "GNOME kest"
|
|||||||
msgid "Window management and application launching"
|
msgid "Window management and application launching"
|
||||||
msgstr "Aknahaldur ja rakenduste käivitaja"
|
msgstr "Aknahaldur ja rakenduste käivitaja"
|
||||||
|
|
||||||
msgid "Clock"
|
|
||||||
msgstr "Kell"
|
|
||||||
|
|
||||||
msgid "Customize the panel clock"
|
|
||||||
msgstr "Paneelikella kohandamine"
|
|
||||||
|
|
||||||
msgid ""
|
msgid ""
|
||||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||||
"dialog."
|
"dialog."
|
||||||
@ -39,15 +38,12 @@ msgstr ""
|
|||||||
"Lubab ligipääsu sisemistele silumise ja monitoorimise tööriistadele Alt-F2 "
|
"Lubab ligipääsu sisemistele silumise ja monitoorimise tööriistadele Alt-F2 "
|
||||||
"dialoogi kaudu."
|
"dialoogi kaudu."
|
||||||
|
|
||||||
msgid "Custom format of the clock"
|
|
||||||
msgstr "Kellaaaja kohandatud vorming"
|
|
||||||
|
|
||||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Arendajate ja testijate jaoks sisemiste tööriistade lubamine Alt-F2 alt"
|
"Arendajate ja testijate jaoks sisemiste tööriistade lubamine Alt-F2 alt"
|
||||||
|
|
||||||
msgid "File extension used for storing the screencast"
|
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."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr "Ekraanivideo lindistamisel kasutatav kaadrikiirus."
|
msgstr "Ekraanivideo lindistamisel kasutatav kaadrikiirus."
|
||||||
@ -56,29 +52,20 @@ msgid ""
|
|||||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||||
"should not be loaded."
|
"should not be loaded."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"GNOME Shelli laiendustel on omadus UUID. Selle võtmega määratakse "
|
||||||
|
"laiendused, mida ei peaks laaditama."
|
||||||
|
|
||||||
msgid "History for command (Alt-F2) dialog"
|
msgid "History for command (Alt-F2) dialog"
|
||||||
msgstr "Käsudialoogi (Alt-F2) ajalugu"
|
msgstr "Käsudialoogi (Alt-F2) ajalugu"
|
||||||
|
|
||||||
msgid "Hour format"
|
msgid "If true, display date in the clock, in addition to time."
|
||||||
msgstr "Tundide vorming"
|
msgstr "Kui määratud, siis kuvatakse kellaaja kõrval ka kuupäeva."
|
||||||
|
|
||||||
msgid ""
|
msgid "If true, display seconds in time."
|
||||||
"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
|
msgstr "Kui määratud, siis kuvatakse aja juures ka sekundeid."
|
||||||
"clock, in addition to time."
|
|
||||||
msgstr ""
|
|
||||||
"Kui tõene ja vorming on kas \"12-tundi\" või \"24-tundi\", kuvatakse "
|
|
||||||
"kellaaja kõrval ka kuupäeva."
|
|
||||||
|
|
||||||
msgid ""
|
|
||||||
"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
|
|
||||||
"time."
|
|
||||||
msgstr ""
|
|
||||||
"Kui tõene ja vorming on kas \"12-tundi\" või \"24-tundi\", kuvatakse "
|
|
||||||
"kellaaega koos sekunditega."
|
|
||||||
|
|
||||||
msgid "If true, display the ISO week date in the calendar."
|
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"
|
msgid "List of desktop file IDs for favorite applications"
|
||||||
msgstr "Lemmikrakenduste töölauafailide ID-de loend"
|
msgstr "Lemmikrakenduste töölauafailide ID-de loend"
|
||||||
@ -98,7 +85,7 @@ msgid "Show date in clock"
|
|||||||
msgstr "Kell näitab kuupäeva"
|
msgstr "Kell näitab kuupäeva"
|
||||||
|
|
||||||
msgid "Show the week date in the calendar"
|
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"
|
msgid "Show time with seconds"
|
||||||
msgstr "Kellaaega näidatakse sekunditega"
|
msgstr "Kellaaega näidatakse sekunditega"
|
||||||
@ -113,6 +100,10 @@ msgid ""
|
|||||||
"current date, and use this extension. It should be changed when recording to "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
"a different container format."
|
"a different container format."
|
||||||
msgstr ""
|
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 ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
@ -129,22 +120,6 @@ msgid ""
|
|||||||
"remove already saved data."
|
"remove already saved data."
|
||||||
msgstr ""
|
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"
|
msgid "Uuids of extensions to disable"
|
||||||
msgstr "Keelatavate laienduste UUID-d"
|
msgstr "Keelatavate laienduste UUID-d"
|
||||||
|
|
||||||
@ -261,29 +236,21 @@ msgstr ""
|
|||||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||||
msgstr "Niitristi moodustavate püst- ja rõhtjoone laius"
|
msgstr "Niitristi moodustavate püst- ja rõhtjoone laius"
|
||||||
|
|
||||||
msgid "Clock Format"
|
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||||
msgstr "Kellaaja vorming"
|
#. something nicer
|
||||||
|
msgid "Could not parse command:"
|
||||||
|
msgstr "Käsku pole võimalik analüüsida:"
|
||||||
|
|
||||||
msgid "Clock Preferences"
|
msgid "No such application"
|
||||||
msgstr "Kella eelistused"
|
msgstr "Sellist rakendust ei ole"
|
||||||
|
|
||||||
msgid "Panel Display"
|
#, c-format
|
||||||
msgstr "Paneelikuva"
|
msgid "Execution of '%s' failed:"
|
||||||
|
msgstr "'%s' käivitamine nurjus:"
|
||||||
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"
|
|
||||||
|
|
||||||
|
#. Translators: Filter to display all applications
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr ""
|
msgstr "Kõik"
|
||||||
|
|
||||||
msgid "APPLICATIONS"
|
msgid "APPLICATIONS"
|
||||||
msgstr "Rakendused"
|
msgstr "Rakendused"
|
||||||
@ -309,11 +276,66 @@ msgid "%s has been removed from your favorites."
|
|||||||
msgstr "%s eemaldati lemmikutest."
|
msgstr "%s eemaldati lemmikutest."
|
||||||
|
|
||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr ""
|
msgstr "Eemalda"
|
||||||
|
|
||||||
msgid "RECENT ITEMS"
|
msgid "RECENT ITEMS"
|
||||||
msgstr "Hiljutised dokumendid"
|
msgstr "Hiljutised dokumendid"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "Log Out %s"
|
||||||
|
msgstr "Logi %s välja"
|
||||||
|
|
||||||
|
msgid "Log Out"
|
||||||
|
msgstr "Logi välja"
|
||||||
|
|
||||||
|
msgid "Click Log Out to quit these applications and log out of the system."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "%s will be logged out automatically in %d seconds."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "You will be logged out automatically in %d seconds."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Logging out of the system."
|
||||||
|
msgstr "Süsteemist väljalogimine"
|
||||||
|
|
||||||
|
msgid "Shut Down"
|
||||||
|
msgstr "Lülita välja"
|
||||||
|
|
||||||
|
msgid "Click Shut Down to quit these applications and shut down the system."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "The system will shut down automatically in %d seconds."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Shutting down the system."
|
||||||
|
msgstr "Süsteemi seiskamine."
|
||||||
|
|
||||||
|
msgid "Restart"
|
||||||
|
msgstr "Taaskäivita"
|
||||||
|
|
||||||
|
msgid "Click Restart to quit these applications and restart the system."
|
||||||
|
msgstr ""
|
||||||
|
"Nende rakenduste sulgemiseks ja süsteemi taaskäivitamiseks klõpsa "
|
||||||
|
"\"Taaskäivita\"."
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
msgid "The system will restart automatically in %d seconds."
|
||||||
|
msgstr "Süsteem taaskäivitatakse automaatselt %d sekundi pärast."
|
||||||
|
|
||||||
|
msgid "Restarting the system."
|
||||||
|
msgstr "Süsteemi taaskäivitamine."
|
||||||
|
|
||||||
|
msgid "Confirm"
|
||||||
|
msgstr "Kinnita"
|
||||||
|
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Katkesta"
|
||||||
|
|
||||||
msgid "No extensions installed"
|
msgid "No extensions installed"
|
||||||
msgstr "Ühtegi laiendust pole paigaldatud"
|
msgstr "Ühtegi laiendust pole paigaldatud"
|
||||||
|
|
||||||
@ -337,6 +359,9 @@ msgstr "Kuva lähtekoodi"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Veebileht"
|
msgstr "Veebileht"
|
||||||
|
|
||||||
|
msgid "System Information"
|
||||||
|
msgstr "Süsteemi andmed"
|
||||||
|
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "Võta tagasi"
|
msgstr "Võta tagasi"
|
||||||
|
|
||||||
@ -351,9 +376,6 @@ msgstr "Rakendused"
|
|||||||
msgid "Quit %s"
|
msgid "Quit %s"
|
||||||
msgstr "Lõpeta %s"
|
msgstr "Lõpeta %s"
|
||||||
|
|
||||||
msgid "Preferences"
|
|
||||||
msgstr "Eelistused"
|
|
||||||
|
|
||||||
#. Translators: This is the time format with date used
|
#. Translators: This is the time format with date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
msgid "%a %b %e, %R:%S"
|
msgid "%a %b %e, %R:%S"
|
||||||
@ -415,10 +437,6 @@ msgstr "toggle-switch-intl"
|
|||||||
msgid "Please enter a command:"
|
msgid "Please enter a command:"
|
||||||
msgstr "Palun sisesta käsk:"
|
msgstr "Palun sisesta käsk:"
|
||||||
|
|
||||||
#, c-format
|
|
||||||
msgid "Execution of '%s' failed:"
|
|
||||||
msgstr "'%s' käivitamine nurjus:"
|
|
||||||
|
|
||||||
msgid "Available"
|
msgid "Available"
|
||||||
msgstr "Saadaval"
|
msgstr "Saadaval"
|
||||||
|
|
||||||
@ -441,7 +459,7 @@ msgid "Log Out..."
|
|||||||
msgstr "Logi välja..."
|
msgstr "Logi välja..."
|
||||||
|
|
||||||
msgid "Suspend..."
|
msgid "Suspend..."
|
||||||
msgstr ""
|
msgstr "Peata..."
|
||||||
|
|
||||||
msgid "Shut Down..."
|
msgid "Shut Down..."
|
||||||
msgstr "Lülita välja..."
|
msgstr "Lülita välja..."
|
||||||
@ -465,7 +483,7 @@ msgid "Slow Keys"
|
|||||||
msgstr "Aeglased klahvid"
|
msgstr "Aeglased klahvid"
|
||||||
|
|
||||||
msgid "Bounce Keys"
|
msgid "Bounce Keys"
|
||||||
msgstr ""
|
msgstr "Põrkeklahvid"
|
||||||
|
|
||||||
msgid "Mouse Keys"
|
msgid "Mouse Keys"
|
||||||
msgstr "Hiireklahvid"
|
msgstr "Hiireklahvid"
|
||||||
@ -479,19 +497,107 @@ msgstr ""
|
|||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr ""
|
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 "Power Settings"
|
msgid "Power Settings"
|
||||||
msgstr "Toitesätted..."
|
msgstr "Toitesätted..."
|
||||||
|
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d hour remaining"
|
msgid "%d hour remaining"
|
||||||
msgid_plural "%d hours remaining"
|
msgid_plural "%d hours remaining"
|
||||||
msgstr[0] ""
|
msgstr[0] "jäänud %d tund"
|
||||||
msgstr[1] ""
|
msgstr[1] "jäänud %d tundi"
|
||||||
|
|
||||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d %s %d %s remaining"
|
msgid "%d %s %d %s remaining"
|
||||||
msgstr ""
|
msgstr "jäänud %d %s ja %d %s"
|
||||||
|
|
||||||
msgid "hour"
|
msgid "hour"
|
||||||
msgid_plural "hours"
|
msgid_plural "hours"
|
||||||
@ -506,8 +612,8 @@ msgstr[1] "minutit"
|
|||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d minute remaining"
|
msgid "%d minute remaining"
|
||||||
msgid_plural "%d minutes remaining"
|
msgid_plural "%d minutes remaining"
|
||||||
msgstr[0] ""
|
msgstr[0] "jäänud %d minut"
|
||||||
msgstr[1] ""
|
msgstr[1] "jäänud %d minutit"
|
||||||
|
|
||||||
msgid "AC adapter"
|
msgid "AC adapter"
|
||||||
msgstr "Võrgutoite adapter"
|
msgstr "Võrgutoite adapter"
|
||||||
@ -528,7 +634,7 @@ msgid "Keyboard"
|
|||||||
msgstr "Klaviatuur"
|
msgstr "Klaviatuur"
|
||||||
|
|
||||||
msgid "PDA"
|
msgid "PDA"
|
||||||
msgstr ""
|
msgstr "Elektronmärkmik"
|
||||||
|
|
||||||
msgid "Cell phone"
|
msgid "Cell phone"
|
||||||
msgstr "Mobiiltelefon"
|
msgstr "Mobiiltelefon"
|
||||||
@ -537,7 +643,7 @@ msgid "Media player"
|
|||||||
msgstr "Meediaesitaja"
|
msgstr "Meediaesitaja"
|
||||||
|
|
||||||
msgid "Tablet"
|
msgid "Tablet"
|
||||||
msgstr ""
|
msgstr "Graafikalaud"
|
||||||
|
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "Arvuti"
|
msgstr "Arvuti"
|
||||||
@ -551,9 +657,6 @@ msgstr "Helivaljus"
|
|||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Mikrofon"
|
msgstr "Mikrofon"
|
||||||
|
|
||||||
msgid "Sound Settings"
|
|
||||||
msgstr "Helisätted"
|
|
||||||
|
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is online."
|
msgid "%s is online."
|
||||||
msgstr "%s on ühendatud."
|
msgstr "%s on ühendatud."
|
||||||
@ -575,7 +678,7 @@ msgstr "%s on hõivatud."
|
|||||||
#. locale, without seconds.
|
#. locale, without seconds.
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent at %X on %A"
|
msgid "Sent at %X on %A"
|
||||||
msgstr ""
|
msgstr "Saadetud: %a, kell %X"
|
||||||
|
|
||||||
msgid "Search your computer"
|
msgid "Search your computer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -661,6 +764,42 @@ msgstr "Otsing"
|
|||||||
msgid "%1$s: %2$s"
|
msgid "%1$s: %2$s"
|
||||||
msgstr "%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"
|
#~ msgid "Drag here to add favorites"
|
||||||
#~ msgstr "Lemmikute lisamiseks lohista need siia"
|
#~ msgstr "Lemmikute lisamiseks lohista need siia"
|
||||||
|
|
||||||
@ -675,6 +814,3 @@ msgstr "%1$s: %2$s"
|
|||||||
|
|
||||||
#~ msgid "Invisible"
|
#~ msgid "Invisible"
|
||||||
#~ msgstr "Nähtamatu"
|
#~ msgstr "Nähtamatu"
|
||||||
|
|
||||||
#~ msgid "Account Information..."
|
|
||||||
#~ msgstr "Konto andmed..."
|
|
||||||
|
603
po/he.po
603
po/he.po
@ -8,8 +8,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell master\n"
|
"Project-Id-Version: gnome-shell master\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2010-12-19 01:04+0200\n"
|
"POT-Creation-Date: 2011-01-18 13:02+0200\n"
|
||||||
"PO-Revision-Date: 2010-12-19 01:04+0200\n"
|
"PO-Revision-Date: 2011-01-18 13:05+0200\n"
|
||||||
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
|
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
|
||||||
"Language-Team: Hebrew <he@li.org>\n"
|
"Language-Team: Hebrew <he@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -25,14 +25,6 @@ msgstr "מעטפת GNOME"
|
|||||||
msgid "Window management and application launching"
|
msgid "Window management and application launching"
|
||||||
msgstr "ניהול חלונות והרצת יישומים"
|
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
|
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
||||||
msgid ""
|
msgid ""
|
||||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||||
@ -42,22 +34,18 @@ msgstr ""
|
|||||||
"dialog."
|
"dialog."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
#: ../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"
|
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||||
msgstr "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"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr "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."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr "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 ""
|
msgid ""
|
||||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||||
"should not be loaded."
|
"should not be loaded."
|
||||||
@ -65,39 +53,27 @@ msgstr ""
|
|||||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||||
"should not be loaded."
|
"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"
|
msgid "History for command (Alt-F2) dialog"
|
||||||
msgstr "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
|
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||||
msgid "Hour format"
|
msgid "If true, display seconds in time."
|
||||||
msgstr "Hour format"
|
msgstr "If true, display seconds in time."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
#: ../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."
|
msgid "If true, display the ISO week date in the calendar."
|
||||||
msgstr "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"
|
msgid "List of desktop file IDs for favorite applications"
|
||||||
msgstr "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
|
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"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 "
|
"used for gst-launch. The pipeline should have an unconnected sink pad where "
|
||||||
@ -117,49 +93,49 @@ msgstr ""
|
|||||||
"to an empty value, the default pipeline will be used. This is currently "
|
"to an empty value, the default pipeline will be used. This is currently "
|
||||||
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||||
msgid "Show date in clock"
|
msgid "Show date in clock"
|
||||||
msgstr "Show date in clock"
|
msgstr "Show date in clock"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||||
msgid "Show the week date in the calendar"
|
msgid "Show the week date in the calendar"
|
||||||
msgstr "Show the week date in the calendar"
|
msgstr "Show the week date in the calendar"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||||
msgid "Show time with seconds"
|
msgid "Show time with seconds"
|
||||||
msgstr "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
|
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||||
msgid ""
|
msgid ""
|
||||||
"The applications corresponding to these identifiers will be displayed in the "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"favorites area."
|
"screencast recorder in frames-per-second."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"The applications corresponding to these identifiers will be displayed in the "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"favorites area."
|
"screencast recorder in frames-per-second."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
#: ../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 ""
|
|
||||||
"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:19
|
|
||||||
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:20
|
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "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:21
|
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||||
msgid ""
|
msgid ""
|
||||||
"The shell normally monitors active applications in order to present the most "
|
"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 "
|
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
||||||
@ -171,42 +147,18 @@ msgstr ""
|
|||||||
"want to disable this for privacy reasons. Please note that doing so won't "
|
"want to disable this for privacy reasons. Please note that doing so won't "
|
||||||
"remove already saved data."
|
"remove already saved data."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||||
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: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 ""
|
|
||||||
"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:24
|
|
||||||
msgid "Uuids of extensions to disable"
|
msgid "Uuids of extensions to disable"
|
||||||
msgstr "Uuids of extensions to disable"
|
msgstr "Uuids of extensions to disable"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||||
msgid "Whether to collect stats about applications usage"
|
msgid "Whether to collect stats about applications usage"
|
||||||
msgstr "Whether to collect stats about applications usage"
|
msgstr "Whether to collect stats about applications usage"
|
||||||
|
|
||||||
|
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||||
|
msgid "disabled OpenSearch providers"
|
||||||
|
msgstr "disabled OpenSearch providers"
|
||||||
|
|
||||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
|
||||||
msgid "Clip the crosshairs at the center"
|
msgid "Clip the crosshairs at the center"
|
||||||
msgstr "Clip the crosshairs at the center"
|
msgstr "Clip the crosshairs at the center"
|
||||||
@ -362,55 +314,43 @@ msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Width of the vertical and horizontal lines that make up the crosshairs."
|
"Width of the vertical and horizontal lines that make up the crosshairs."
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:1
|
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||||
msgid "Clock Format"
|
#. something nicer
|
||||||
msgstr "מבנה השעון"
|
#: ../js/misc/util.js:108
|
||||||
|
msgid "Could not parse command:"
|
||||||
|
msgstr "לא ניתן לפענח את הפקודה:"
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:2
|
#: ../js/misc/util.js:130
|
||||||
msgid "Clock Preferences"
|
msgid "No such application"
|
||||||
msgstr "העדפות השעון"
|
msgstr "אין כזה יישום"
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:3
|
#: ../js/misc/util.js:143 ../js/ui/runDialog.js:351
|
||||||
msgid "Panel Display"
|
#, c-format
|
||||||
msgstr "תצוגת הלוח"
|
msgid "Execution of '%s' failed:"
|
||||||
|
msgstr "ההרצה של '%s' נכשלה:"
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:4
|
#. Translators: Filter to display all applications
|
||||||
msgid "Show seco_nds"
|
#: ../js/ui/appDisplay.js:155
|
||||||
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 שעות"
|
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:154
|
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "הכול"
|
msgstr "הכול"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:235
|
#: ../js/ui/appDisplay.js:236
|
||||||
msgid "APPLICATIONS"
|
msgid "APPLICATIONS"
|
||||||
msgstr "יישומים"
|
msgstr "יישומים"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:265
|
#: ../js/ui/appDisplay.js:266
|
||||||
msgid "PREFERENCES"
|
msgid "PREFERENCES"
|
||||||
msgstr "העדפות"
|
msgstr "העדפות"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:562
|
#: ../js/ui/appDisplay.js:563
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "חלון חדש"
|
msgstr "חלון חדש"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:566
|
#: ../js/ui/appDisplay.js:567
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "הסרה מהמועדפים"
|
msgstr "הסרה מהמועדפים"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:567
|
#: ../js/ui/appDisplay.js:568
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "הוספה למועדפים"
|
msgstr "הוספה למועדפים"
|
||||||
|
|
||||||
@ -428,122 +368,191 @@ msgstr "%s הוסר מהמועדפים שלך."
|
|||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "הסרה"
|
msgstr "הסרה"
|
||||||
|
|
||||||
#: ../js/ui/docDisplay.js:494
|
#: ../js/ui/docDisplay.js:18
|
||||||
msgid "RECENT ITEMS"
|
msgid "RECENT ITEMS"
|
||||||
msgstr "פריטים אחרונים"
|
msgstr "פריטים אחרונים"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:552
|
#: ../js/ui/endSessionDialog.js:63
|
||||||
|
#, c-format
|
||||||
|
msgid "Log Out %s"
|
||||||
|
msgstr "הוצאת %s"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
|
||||||
|
msgid "Log Out"
|
||||||
|
msgstr "יציאה"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:65
|
||||||
|
msgid "Click Log Out to quit these applications and log out of the system."
|
||||||
|
msgstr "יש ללחוץ על יציאה כדי לסגור יישומים אלה ולצאת מהמערכת."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:66
|
||||||
|
#, c-format
|
||||||
|
msgid "%s will be logged out automatically in %d seconds."
|
||||||
|
msgstr "המשתמש %s ייצא אוטומטית בעוד %d שניות."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:67
|
||||||
|
#, c-format
|
||||||
|
msgid "You will be logged out automatically in %d seconds."
|
||||||
|
msgstr "המערכת תוציא אותך אוטומטית בעוד %d שניות."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:68
|
||||||
|
msgid "Logging out of the system."
|
||||||
|
msgstr "מתבצעת יציאה מהמערכת."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
|
||||||
|
msgid "Shut Down"
|
||||||
|
msgstr "כיבוי"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:75
|
||||||
|
msgid "Click Shut Down to quit these applications and shut down the system."
|
||||||
|
msgstr "יש ללחוץ על יציאה כדי לסגור יישומים אלה ולכבות את המערכת."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:76
|
||||||
|
#, c-format
|
||||||
|
msgid "The system will shut down automatically in %d seconds."
|
||||||
|
msgstr "המערכת תכבה אוטומטית בעוד %d שניות."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:77
|
||||||
|
msgid "Shutting down the system."
|
||||||
|
msgstr "המערכת נכבית."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
|
||||||
|
msgid "Restart"
|
||||||
|
msgstr "הפעלה מחדש"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:85
|
||||||
|
msgid "Click Restart to quit these applications and restart the system."
|
||||||
|
msgstr "יש ללחוץ על יציאה כדי לסגור יישומים אלה ולהפעיל את המערכת מחדש."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:86
|
||||||
|
#, c-format
|
||||||
|
msgid "The system will restart automatically in %d seconds."
|
||||||
|
msgstr "המערכת תופעל מחדש בעוד %d שניות."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:87
|
||||||
|
msgid "Restarting the system."
|
||||||
|
msgstr "המערכת מופעלת מחדש"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:395
|
||||||
|
msgid "Confirm"
|
||||||
|
msgstr "אישור"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "ביטול"
|
||||||
|
|
||||||
|
#: ../js/ui/lookingGlass.js:556
|
||||||
msgid "No extensions installed"
|
msgid "No extensions installed"
|
||||||
msgstr "לא מותקנות הרחבות"
|
msgstr "לא מותקנות הרחבות"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:589
|
#: ../js/ui/lookingGlass.js:593
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "פעיל"
|
msgstr "פעיל"
|
||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The device has been disabled
|
#. * The device has been disabled
|
||||||
#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
|
#: ../js/ui/lookingGlass.js:595 ../src/gvc/gvc-mixer-control.c:1087
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "מנוטרל"
|
msgstr "מנוטרל"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:593
|
#: ../js/ui/lookingGlass.js:597
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "שגיאה"
|
msgstr "שגיאה"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:595
|
#: ../js/ui/lookingGlass.js:599
|
||||||
msgid "Out of date"
|
msgid "Out of date"
|
||||||
msgstr "לא בתוקף"
|
msgstr "לא בתוקף"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:620
|
#: ../js/ui/lookingGlass.js:624
|
||||||
msgid "View Source"
|
msgid "View Source"
|
||||||
msgstr "צפייה במקור"
|
msgstr "צפייה במקור"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:626
|
#: ../js/ui/lookingGlass.js:630
|
||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "דף אינטרנט"
|
msgstr "דף אינטרנט"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:96
|
#: ../js/ui/messageTray.js:1748
|
||||||
|
msgid "System Information"
|
||||||
|
msgstr "פרטי המערכת"
|
||||||
|
|
||||||
|
#: ../js/ui/overview.js:75
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "ביטול"
|
msgstr "ביטול"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:158
|
#: ../js/ui/overview.js:140
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "חלונות"
|
msgstr "חלונות"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:161
|
#: ../js/ui/overview.js:143
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "יישומים"
|
msgstr "יישומים"
|
||||||
|
|
||||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||||
#: ../js/ui/panel.js:474
|
#: ../js/ui/panel.js:479
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Quit %s"
|
msgid "Quit %s"
|
||||||
msgstr "יציאה מ־%s"
|
msgstr "יציאה מ־%s"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:499
|
|
||||||
msgid "Preferences"
|
|
||||||
msgstr "העדפות"
|
|
||||||
|
|
||||||
#. Translators: This is the time format with date used
|
#. Translators: This is the time format with date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/panel.js:585
|
#: ../js/ui/panel.js:564
|
||||||
msgid "%a %b %e, %R:%S"
|
msgid "%a %b %e, %R:%S"
|
||||||
msgstr "%a %b %e, %R:%S"
|
msgstr "%a %b %e, %R:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:586
|
#: ../js/ui/panel.js:565
|
||||||
msgid "%a %b %e, %R"
|
msgid "%a %b %e, %R"
|
||||||
msgstr "%a %b %e, %R"
|
msgstr "%a %b %e, %R"
|
||||||
|
|
||||||
#. Translators: This is the time format without date used
|
#. Translators: This is the time format without date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/panel.js:590
|
#: ../js/ui/panel.js:569
|
||||||
msgid "%a %R:%S"
|
msgid "%a %R:%S"
|
||||||
msgstr "%a %R:%S"
|
msgstr "%a %R:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:591
|
#: ../js/ui/panel.js:570
|
||||||
msgid "%a %R"
|
msgid "%a %R"
|
||||||
msgstr "%a %R"
|
msgstr "%a %R"
|
||||||
|
|
||||||
#. Translators: This is a time format with date used
|
#. Translators: This is a time format with date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/panel.js:598
|
#: ../js/ui/panel.js:577
|
||||||
msgid "%a %b %e, %l:%M:%S %p"
|
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:599
|
#: ../js/ui/panel.js:578
|
||||||
msgid "%a %b %e, %l:%M %p"
|
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
|
#. Translators: This is a time format without date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/panel.js:603
|
#: ../js/ui/panel.js:582
|
||||||
msgid "%a %l:%M:%S %p"
|
msgid "%a %l:%M:%S %p"
|
||||||
msgstr "%a %l:%M:%S %p"
|
msgstr "%a %l:%M:%S %p"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:604
|
#: ../js/ui/panel.js:583
|
||||||
msgid "%a %l:%M %p"
|
msgid "%a %l:%M %p"
|
||||||
msgstr "%a %l:%M %p"
|
msgstr "%a %l:%M %p"
|
||||||
|
|
||||||
#. Button on the left side of the panel.
|
#. 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".
|
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||||
#: ../js/ui/panel.js:749
|
#: ../js/ui/panel.js:728
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "פעילויות"
|
msgstr "פעילויות"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:111
|
#: ../js/ui/placeDisplay.js:106
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to unmount '%s'"
|
msgid "Failed to unmount '%s'"
|
||||||
msgstr "אירע כשל בניתוק '%s'"
|
msgstr "אירע כשל בניתוק '%s'"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:114
|
#: ../js/ui/placeDisplay.js:109
|
||||||
msgid "Retry"
|
msgid "Retry"
|
||||||
msgstr "ניסיון חוזר"
|
msgstr "ניסיון חוזר"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:159
|
#: ../js/ui/placeDisplay.js:150
|
||||||
msgid "Connect to..."
|
msgid "Connect to..."
|
||||||
msgstr "התחברות אל..."
|
msgstr "התחברות אל..."
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:558
|
#: ../js/ui/placeDisplay.js:386
|
||||||
msgid "PLACES & DEVICES"
|
msgid "PLACES & DEVICES"
|
||||||
msgstr "מקומות והתקנים"
|
msgstr "מקומות והתקנים"
|
||||||
|
|
||||||
@ -556,84 +565,79 @@ msgstr "מקומות והתקנים"
|
|||||||
msgid "toggle-switch-us"
|
msgid "toggle-switch-us"
|
||||||
msgstr "toggle-switch-intl"
|
msgstr "toggle-switch-intl"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:233
|
#: ../js/ui/runDialog.js:209
|
||||||
msgid "Please enter a command:"
|
msgid "Please enter a command:"
|
||||||
msgstr "נא להזין פקודה:"
|
msgstr "נא להזין פקודה:"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:378
|
#: ../js/ui/statusMenu.js:102
|
||||||
#, c-format
|
|
||||||
msgid "Execution of '%s' failed:"
|
|
||||||
msgstr "ההרצה של '%s' נכשלה:"
|
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:101
|
|
||||||
msgid "Available"
|
msgid "Available"
|
||||||
msgstr "זמין"
|
msgstr "זמין"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:106
|
#: ../js/ui/statusMenu.js:107
|
||||||
msgid "Busy"
|
msgid "Busy"
|
||||||
msgstr "עסוק"
|
msgstr "עסוק"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:114
|
#: ../js/ui/statusMenu.js:115
|
||||||
msgid "My Account"
|
msgid "My Account"
|
||||||
msgstr "החשבון שלי"
|
msgstr "החשבון שלי"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:118
|
#: ../js/ui/statusMenu.js:119
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "הגדרות המערכת"
|
msgstr "הגדרות המערכת"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:125
|
#: ../js/ui/statusMenu.js:126
|
||||||
msgid "Lock Screen"
|
msgid "Lock Screen"
|
||||||
msgstr "נעילת המסך"
|
msgstr "נעילת המסך"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:129
|
#: ../js/ui/statusMenu.js:130
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "החלפת משתמש"
|
msgstr "החלפת משתמש"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:134
|
#: ../js/ui/statusMenu.js:135
|
||||||
msgid "Log Out..."
|
msgid "Log Out..."
|
||||||
msgstr "ניתוק..."
|
msgstr "ניתוק..."
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:141
|
#: ../js/ui/statusMenu.js:142
|
||||||
msgid "Suspend..."
|
msgid "Suspend..."
|
||||||
msgstr "השהיה..."
|
msgstr "השהיה..."
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:145
|
#: ../js/ui/statusMenu.js:146
|
||||||
msgid "Shut Down..."
|
msgid "Shut Down..."
|
||||||
msgstr "כיבוי..."
|
msgstr "כיבוי..."
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:82
|
#: ../js/ui/status/accessibility.js:83
|
||||||
msgid "Zoom"
|
msgid "Zoom"
|
||||||
msgstr "תקריב"
|
msgstr "תקריב"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:88
|
#: ../js/ui/status/accessibility.js:89
|
||||||
msgid "Screen Reader"
|
msgid "Screen Reader"
|
||||||
msgstr "מקריא מסך"
|
msgstr "מקריא מסך"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:91
|
#: ../js/ui/status/accessibility.js:92
|
||||||
msgid "Screen Keyboard"
|
msgid "Screen Keyboard"
|
||||||
msgstr "מקלדת מסך"
|
msgstr "מקלדת מסך"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:94
|
#: ../js/ui/status/accessibility.js:95
|
||||||
msgid "Visual Alerts"
|
msgid "Visual Alerts"
|
||||||
msgstr "התראות חזותיות"
|
msgstr "התראות חזותיות"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:97
|
#: ../js/ui/status/accessibility.js:98
|
||||||
msgid "Sticky Keys"
|
msgid "Sticky Keys"
|
||||||
msgstr "מקשים דביקים"
|
msgstr "מקשים דביקים"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:100
|
#: ../js/ui/status/accessibility.js:101
|
||||||
msgid "Slow Keys"
|
msgid "Slow Keys"
|
||||||
msgstr "מקשים אטיים"
|
msgstr "מקשים אטיים"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:103
|
#: ../js/ui/status/accessibility.js:104
|
||||||
msgid "Bounce Keys"
|
msgid "Bounce Keys"
|
||||||
msgstr "מקשים קופצים"
|
msgstr "מקשים קופצים"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:106
|
#: ../js/ui/status/accessibility.js:107
|
||||||
msgid "Mouse Keys"
|
msgid "Mouse Keys"
|
||||||
msgstr "מקשי עכבר"
|
msgstr "מקשי עכבר"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:110
|
#: ../js/ui/status/accessibility.js:111
|
||||||
msgid "Universal Access Settings"
|
msgid "Universal Access Settings"
|
||||||
msgstr "הגדרות גישה אוניברסלית"
|
msgstr "הגדרות גישה אוניברסלית"
|
||||||
|
|
||||||
@ -645,6 +649,122 @@ msgstr "ניגודיות גבוהה"
|
|||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr "טקסט גדול"
|
msgstr "טקסט גדול"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
|
||||||
|
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:95
|
||||||
|
msgid "Bluetooth Settings"
|
||||||
|
msgstr "הגדרות Bluetooth"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:192
|
||||||
|
msgid "Connection"
|
||||||
|
msgstr "חיבור"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:228
|
||||||
|
msgid "Send Files..."
|
||||||
|
msgstr "שליחת קבצים..."
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:233
|
||||||
|
msgid "Browse Files..."
|
||||||
|
msgstr "עיון בקבצים..."
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:242
|
||||||
|
msgid "Error browsing device"
|
||||||
|
msgstr "שגיאה בעיון בהתקן"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:243
|
||||||
|
#, c-format
|
||||||
|
msgid "The requested device cannot be browsed, error is '%s'"
|
||||||
|
msgstr "לא ניתן לעיין בהתקן הנבחר, השגיאה היא '%s'"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:251 ../js/ui/status/keyboard.js:78
|
||||||
|
msgid "Keyboard Settings"
|
||||||
|
msgstr "הגדרות מקלדת"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:256
|
||||||
|
msgid "Mouse Settings"
|
||||||
|
msgstr "הגדרות עכבר"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:263 ../js/ui/status/volume.js:63
|
||||||
|
msgid "Sound Settings"
|
||||||
|
msgstr "הגדרות שמע"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
|
||||||
|
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:444
|
||||||
|
msgid "Bluetooth Agent"
|
||||||
|
msgstr "סוכן Bluetooth"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:372
|
||||||
|
#, c-format
|
||||||
|
msgid "Authorization request from %s"
|
||||||
|
msgstr "בקשת אישור מאת %s"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:378
|
||||||
|
#, c-format
|
||||||
|
msgid "Device %s wants access to the service '%s'"
|
||||||
|
msgstr "ההתקן %s מעוניין לגשת אל השירות '%s'"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:380
|
||||||
|
msgid "Always grant access"
|
||||||
|
msgstr "תמיד להעניק גישה"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:381
|
||||||
|
msgid "Grant this time only"
|
||||||
|
msgstr "הענקת גישה הפעם בלבד"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:382
|
||||||
|
msgid "Reject"
|
||||||
|
msgstr "סירוב"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:412
|
||||||
|
#, c-format
|
||||||
|
msgid "Pairing confirmation for %s"
|
||||||
|
msgstr "אישור צימוד עבור %s"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
|
||||||
|
#, c-format
|
||||||
|
msgid "Device %s wants to pair with this computer"
|
||||||
|
msgstr "ההתקן %s מעוניין בצימוד עם מחשב זה"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:419
|
||||||
|
#, c-format
|
||||||
|
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||||
|
msgstr "נא לאשר האם קוד ה־PIN '%s' תואם את זה שמופיע בהתקן."
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:421
|
||||||
|
msgid "Matches"
|
||||||
|
msgstr "התאמות"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:422
|
||||||
|
msgid "Does not match"
|
||||||
|
msgstr "אינו תואם"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:445
|
||||||
|
#, c-format
|
||||||
|
msgid "Pairing request for %s"
|
||||||
|
msgstr "בקשת צימוד עבור %s"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:453
|
||||||
|
msgid "Please enter the PIN mentioned on the device."
|
||||||
|
msgstr "נא להזין את קוד ה־PIN המוזכר בהתקן."
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:469
|
||||||
|
msgid "OK"
|
||||||
|
msgstr "אישור"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:85
|
#: ../js/ui/status/power.js:85
|
||||||
msgid "Power Settings"
|
msgid "Power Settings"
|
||||||
msgstr "הגדרות צריכת החשמל"
|
msgstr "הגדרות צריכת החשמל"
|
||||||
@ -685,82 +805,78 @@ msgstr[0] "דקה אחת נותרה"
|
|||||||
msgstr[1] "%d דקות נותרו"
|
msgstr[1] "%d דקות נותרו"
|
||||||
msgstr[2] "שתי דקות נותרו"
|
msgstr[2] "שתי דקות נותרו"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:237
|
#: ../js/ui/status/power.js:235
|
||||||
msgid "AC adapter"
|
msgid "AC adapter"
|
||||||
msgstr "מתאם חשמל"
|
msgstr "מתאם חשמל"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:239
|
#: ../js/ui/status/power.js:237
|
||||||
msgid "Laptop battery"
|
msgid "Laptop battery"
|
||||||
msgstr "סוללת נייד"
|
msgstr "סוללת נייד"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:241
|
#: ../js/ui/status/power.js:239
|
||||||
msgid "UPS"
|
msgid "UPS"
|
||||||
msgstr "אל־פסק"
|
msgstr "אל־פסק"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:243
|
#: ../js/ui/status/power.js:241
|
||||||
msgid "Monitor"
|
msgid "Monitor"
|
||||||
msgstr "צג"
|
msgstr "צג"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:245
|
#: ../js/ui/status/power.js:243
|
||||||
msgid "Mouse"
|
msgid "Mouse"
|
||||||
msgstr "עכבר"
|
msgstr "עכבר"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:247
|
#: ../js/ui/status/power.js:245
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "מקלדת"
|
msgstr "מקלדת"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:249
|
#: ../js/ui/status/power.js:247
|
||||||
msgid "PDA"
|
msgid "PDA"
|
||||||
msgstr "מחשב כף יד"
|
msgstr "מחשב כף יד"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:251
|
#: ../js/ui/status/power.js:249
|
||||||
msgid "Cell phone"
|
msgid "Cell phone"
|
||||||
msgstr "טלפון סלולרי"
|
msgstr "טלפון סלולרי"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:253
|
#: ../js/ui/status/power.js:251
|
||||||
msgid "Media player"
|
msgid "Media player"
|
||||||
msgstr "נגן מדיה"
|
msgstr "נגן מדיה"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:255
|
#: ../js/ui/status/power.js:253
|
||||||
msgid "Tablet"
|
msgid "Tablet"
|
||||||
msgstr "טבלת שליטה"
|
msgstr "טבלת שליטה"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:257
|
#: ../js/ui/status/power.js:255
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "מחשב"
|
msgstr "מחשב"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
|
#: ../js/ui/status/power.js:257 ../src/shell-app-system.c:1012
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "לא ידוע"
|
msgstr "לא ידוע"
|
||||||
|
|
||||||
#: ../js/ui/status/volume.js:41
|
#: ../js/ui/status/volume.js:42
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "עצמה"
|
msgstr "עצמה"
|
||||||
|
|
||||||
#: ../js/ui/status/volume.js:54
|
#: ../js/ui/status/volume.js:55
|
||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "מיקרופון"
|
msgstr "מיקרופון"
|
||||||
|
|
||||||
#: ../js/ui/status/volume.js:62
|
#: ../js/ui/telepathyClient.js:561
|
||||||
msgid "Sound Settings"
|
|
||||||
msgstr "הגדרות שמע"
|
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:560
|
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is online."
|
msgid "%s is online."
|
||||||
msgstr "%s התחבר/ה."
|
msgstr "%s התחבר/ה."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:565
|
#: ../js/ui/telepathyClient.js:566
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is offline."
|
msgid "%s is offline."
|
||||||
msgstr "%s התנתק/ה."
|
msgstr "%s התנתק/ה."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:568
|
#: ../js/ui/telepathyClient.js:569
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is away."
|
msgid "%s is away."
|
||||||
msgstr "'%s' מרוחק/ת."
|
msgstr "'%s' מרוחק/ת."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:571
|
#: ../js/ui/telepathyClient.js:572
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is busy."
|
msgid "%s is busy."
|
||||||
msgstr "%s עסוק/ה."
|
msgstr "%s עסוק/ה."
|
||||||
@ -768,7 +884,7 @@ msgstr "%s עסוק/ה."
|
|||||||
#. Translators: this is a time format string followed by a date.
|
#. Translators: this is a time format string followed by a date.
|
||||||
#. If applicable, replace %X with a strftime format valid for your
|
#. If applicable, replace %X with a strftime format valid for your
|
||||||
#. locale, without seconds.
|
#. locale, without seconds.
|
||||||
#: ../js/ui/telepathyClient.js:664
|
#: ../js/ui/telepathyClient.js:666
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent at %X on %A"
|
msgid "Sent at %X on %A"
|
||||||
msgstr "נשלח ב־%X בשעה %A"
|
msgstr "נשלח ב־%X בשעה %A"
|
||||||
@ -820,11 +936,11 @@ msgstr[2] "2 קלטים"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "צלילי מערכת"
|
msgstr "צלילי מערכת"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1155
|
#: ../src/shell-global.c:1366
|
||||||
msgid "Less than a minute ago"
|
msgid "Less than a minute ago"
|
||||||
msgstr "לפני פחות מדקה"
|
msgstr "לפני פחות מדקה"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1159
|
#: ../src/shell-global.c:1370
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d minute ago"
|
msgid "%d minute ago"
|
||||||
msgid_plural "%d minutes ago"
|
msgid_plural "%d minutes ago"
|
||||||
@ -832,7 +948,7 @@ msgstr[0] "לפני דקה"
|
|||||||
msgstr[1] "לפני %d דקות"
|
msgstr[1] "לפני %d דקות"
|
||||||
msgstr[2] "לפני 2 דקות"
|
msgstr[2] "לפני 2 דקות"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1164
|
#: ../src/shell-global.c:1375
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d hour ago"
|
msgid "%d hour ago"
|
||||||
msgid_plural "%d hours ago"
|
msgid_plural "%d hours ago"
|
||||||
@ -840,7 +956,7 @@ msgstr[0] "לפני שעה"
|
|||||||
msgstr[1] "לפני %d שעות"
|
msgstr[1] "לפני %d שעות"
|
||||||
msgstr[2] "לפני שעתיים"
|
msgstr[2] "לפני שעתיים"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1169
|
#: ../src/shell-global.c:1380
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d day ago"
|
msgid "%d day ago"
|
||||||
msgid_plural "%d days ago"
|
msgid_plural "%d days ago"
|
||||||
@ -848,7 +964,7 @@ msgstr[0] "לפני יום"
|
|||||||
msgstr[1] "לפני %d ימים"
|
msgstr[1] "לפני %d ימים"
|
||||||
msgstr[2] "לפני יומיים"
|
msgstr[2] "לפני יומיים"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1174
|
#: ../src/shell-global.c:1385
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d week ago"
|
msgid "%d week ago"
|
||||||
msgid_plural "%d weeks ago"
|
msgid_plural "%d weeks ago"
|
||||||
@ -880,6 +996,75 @@ msgstr "חיפוש"
|
|||||||
msgid "%1$s: %2$s"
|
msgid "%1$s: %2$s"
|
||||||
msgstr "%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..."
|
#~ msgid "What's using power..."
|
||||||
#~ msgstr "מה צורך חשמל..."
|
#~ msgstr "מה צורך חשמל..."
|
||||||
|
|
||||||
@ -908,12 +1093,6 @@ msgstr "%1$s: %2$s"
|
|||||||
#~ msgid "Invisible"
|
#~ msgid "Invisible"
|
||||||
#~ msgstr "בלתי נראה"
|
#~ msgstr "בלתי נראה"
|
||||||
|
|
||||||
#~ msgid "Restart..."
|
|
||||||
#~ msgstr "הפעלה מחדש..."
|
|
||||||
|
|
||||||
#~ msgid "Account Information..."
|
|
||||||
#~ msgstr "פרטי המשתמש..."
|
|
||||||
|
|
||||||
#~ msgid "ON"
|
#~ msgid "ON"
|
||||||
#~ msgstr "1"
|
#~ msgstr "1"
|
||||||
|
|
||||||
|
568
po/it.po
568
po/it.po
@ -3,19 +3,19 @@
|
|||||||
# This file is distributed under the same license as the gnome-shell package.
|
# This file is distributed under the same license as the gnome-shell package.
|
||||||
#
|
#
|
||||||
# Milo Casagrande <milo@ubuntu.com>, 2009, 2010.
|
# Milo Casagrande <milo@ubuntu.com>, 2009, 2010.
|
||||||
# Luca Ferretti <lferrett@gnome.org>, 2010.
|
# Luca Ferretti <lferrett@gnome.org>, 2010, 2011.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell\n"
|
"Project-Id-Version: gnome-shell\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2010-12-13 21:30+0100\n"
|
"POT-Creation-Date: 2011-01-15 01:10+0100\n"
|
||||||
"PO-Revision-Date: 2010-12-13 22:40+0100\n"
|
"PO-Revision-Date: 2011-01-15 01:19+0100\n"
|
||||||
"Last-Translator: Luca Ferretti <lferrett@gnome.org>\n"
|
"Last-Translator: Luca Ferretti <lferrett@gnome.org>\n"
|
||||||
"Language-Team: Italian <tp@lists.linux.it>\n"
|
"Language-Team: Italian <tp@lists.linux.it>\n"
|
||||||
"Language: it\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: it\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||||
@ -26,14 +26,6 @@ msgstr "GNOME Shell"
|
|||||||
msgid "Window management and application launching"
|
msgid "Window management and application launching"
|
||||||
msgstr "Gestisce finestre e avvia applicazioni"
|
msgstr "Gestisce finestre e avvia applicazioni"
|
||||||
|
|
||||||
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
|
|
||||||
msgid "Clock"
|
|
||||||
msgstr "Orologio"
|
|
||||||
|
|
||||||
#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
|
|
||||||
msgid "Customize the panel clock"
|
|
||||||
msgstr "Personalizza l'orologio sul pannello"
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
||||||
msgid ""
|
msgid ""
|
||||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||||
@ -43,24 +35,20 @@ msgstr ""
|
|||||||
"utilizzando il dialogo Alt-F2."
|
"utilizzando il dialogo Alt-F2."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
||||||
msgid "Custom format of the clock"
|
|
||||||
msgstr "Formato personalizzato dell'orologio"
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
|
||||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Abilita gli strumenti interni utili a sviluppatori e beta-tester attraverso "
|
"Abilita gli strumenti interni utili a sviluppatori e beta-tester attraverso "
|
||||||
"Alt-F2"
|
"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"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr "Estensione del file utilizzato per salvare lo screencast"
|
msgstr "Estensione del file utilizzato per salvare lo 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."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr "Framerate per la registrazione di screencast."
|
msgstr "Framerate per la registrazione di screencast."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||||
msgid ""
|
msgid ""
|
||||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||||
"should not be loaded."
|
"should not be loaded."
|
||||||
@ -68,39 +56,27 @@ msgstr ""
|
|||||||
"Le estensioni per la GNOME Shell dispongono di una proprietà UUID: questa "
|
"Le estensioni per la GNOME Shell dispongono di una proprietà UUID: questa "
|
||||||
"chiave elenca le estensioni che non dovrebbero essere caricate."
|
"chiave elenca le estensioni che non dovrebbero essere caricate."
|
||||||
|
|
||||||
#: ../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"
|
msgid "History for command (Alt-F2) dialog"
|
||||||
msgstr "Cronologia per il dialogo dei comandi (Alt-F2)"
|
msgstr "Cronologia per il dialogo dei comandi (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 VERO, mostra nell'orologio la data, oltre all'orario."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||||
msgid "Hour format"
|
msgid "If true, display seconds in time."
|
||||||
msgstr "Formato orario"
|
msgstr "Se VERO, mostra i secondi nell'orario."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
||||||
msgid ""
|
msgid "If true, display the ISO week date in the calendar."
|
||||||
"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
|
msgstr "Se VERO, mostra il giorno della settimana ISO nel calendario."
|
||||||
"clock, in addition to time."
|
|
||||||
msgstr ""
|
|
||||||
"Se VERO e il formato è \"12-hour\" oppure \"24-hour\", visualizza anche la "
|
|
||||||
"data nell'orologio oltre all'orario."
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
#: ../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 VERO e il formato è \"12-hour\" oppure \"24-hour\", visualizza i secondi "
|
|
||||||
"nell'ora."
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
|
||||||
msgid "If true, display the ISO week date in the calendar."
|
|
||||||
msgstr "Se VERO, visualizza il giorno della settimana ISO nel calendario."
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
|
||||||
msgid "List of desktop file IDs for favorite applications"
|
msgid "List of desktop file IDs for favorite applications"
|
||||||
msgstr "Elenco di ID di file desktop per le applicazioni preferite"
|
msgstr "Elenco di ID di file desktop per le applicazioni preferite"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"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 "
|
"used for gst-launch. The pipeline should have an unconnected sink pad where "
|
||||||
@ -121,19 +97,19 @@ msgstr ""
|
|||||||
"alcun valore, viene usata la pipeline predefinita il cui valore è "
|
"alcun valore, viene usata la pipeline predefinita il cui valore è "
|
||||||
"\"videorate ! theoraenc ! oggmux\" e che registra nel formato Ogg Theora."
|
"\"videorate ! theoraenc ! oggmux\" e che registra nel formato Ogg Theora."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||||
msgid "Show date in clock"
|
msgid "Show date in clock"
|
||||||
msgstr "Mostra la data nell'orologio"
|
msgstr "Mostra la data nell'orologio"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||||
msgid "Show the week date in the calendar"
|
msgid "Show the week date in the calendar"
|
||||||
msgstr "Mostra il giorno della settimana nel calendario"
|
msgstr "Mostra il giorno della settimana nel calendario"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||||
msgid "Show time with seconds"
|
msgid "Show time with seconds"
|
||||||
msgstr "Mostra l'ora con i secondi"
|
msgstr "Mostra l'ora con i secondi"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||||
msgid ""
|
msgid ""
|
||||||
"The applications corresponding to these identifiers will be displayed in the "
|
"The applications corresponding to these identifiers will be displayed in the "
|
||||||
"favorites area."
|
"favorites area."
|
||||||
@ -141,7 +117,7 @@ msgstr ""
|
|||||||
"Le applicazioni che corrispondono a questi identificatori vengono "
|
"Le applicazioni che corrispondono a questi identificatori vengono "
|
||||||
"visualizzate nell'area dei preferiti."
|
"visualizzate nell'area dei preferiti."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"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 "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
@ -151,7 +127,7 @@ msgstr ""
|
|||||||
"data corrente e utilizza questa estensione. Dovrebbe essere modificato "
|
"data corrente e utilizza questa estensione. Dovrebbe essere modificato "
|
||||||
"quando si registra utilizzando un diverso formato contenitore."
|
"quando si registra utilizzando un diverso formato contenitore."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
@ -159,12 +135,12 @@ msgstr ""
|
|||||||
"Il framerate in fotogrammi al secondo dello screencast registrato attraverso "
|
"Il framerate in fotogrammi al secondo dello screencast registrato attraverso "
|
||||||
"il registratore della GNOME Shell."
|
"il registratore della GNOME Shell."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "La pipeline di gstreamer utilizzata per codificare lo screencast"
|
msgstr "La pipeline di gstreamer utilizzata per codificare lo screencast"
|
||||||
|
|
||||||
# (ndt) quel "in launchers" non mi convince...
|
# (ndt) quel "in launchers" non mi convince...
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||||
msgid ""
|
msgid ""
|
||||||
"The shell normally monitors active applications in order to present the most "
|
"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 "
|
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
||||||
@ -176,40 +152,11 @@ msgstr ""
|
|||||||
"disabilitare questa funzionalità per motivi di privacy. I dati già salvati "
|
"disabilitare questa funzionalità per motivi di privacy. I dati già salvati "
|
||||||
"non verranno comunque rimossi."
|
"non verranno comunque rimossi."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||||
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 ""
|
|
||||||
"Questa chiave indica il formato usato dall'orologio nel pannello quando la "
|
|
||||||
"chiave specifica è impostata a \"custom\". È possibile utilizzare gli "
|
|
||||||
"specificatori di formato compatibili con strftime(). Per maggiori "
|
|
||||||
"informazioni, consultare il manuale di 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 ""
|
|
||||||
"Questa chiave indica il formato orario usato dall'orologio. I possibili "
|
|
||||||
"valori sono \"12-hour\", \"24-hour\", \"unix\" e \"custom\". Se impostata a "
|
|
||||||
"\"unix\", l'orologio visualizza l'ora in secondi a partire dall'era Epoch, "
|
|
||||||
"cioè dal 1970-01-01. Se impostata a \"custom\", l'orologio visualizza l'ora "
|
|
||||||
"in base al formato specificato nella chiave custom_format. Notare che se "
|
|
||||||
"impostata a \"unix\" o \"custom\", le chiavi show_date e show_seconds non "
|
|
||||||
"vengono considerate."
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
|
||||||
msgid "Uuids of extensions to disable"
|
msgid "Uuids of extensions to disable"
|
||||||
msgstr "UUID delle estensioni da disabilitare"
|
msgstr "UUID delle estensioni da disabilitare"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||||
msgid "Whether to collect stats about applications usage"
|
msgid "Whether to collect stats about applications usage"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Indica se raccogliere statistiche riguardo l'utilizzo delle applicazioni"
|
"Indica se raccogliere statistiche riguardo l'utilizzo delle applicazioni"
|
||||||
@ -339,51 +286,43 @@ msgstr ""
|
|||||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:1
|
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||||
msgid "Clock Format"
|
#. something nicer
|
||||||
msgstr "Formato ora"
|
#: ../js/misc/util.js:108
|
||||||
|
msgid "Could not parse command:"
|
||||||
|
msgstr "Impossibile analizzare il comando:"
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:2
|
#: ../js/misc/util.js:130
|
||||||
msgid "Clock Preferences"
|
msgid "No such application"
|
||||||
msgstr "Preferenze di Orologio"
|
msgstr "Applicazione inesistente"
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:3
|
#: ../js/misc/util.js:143 ../js/ui/runDialog.js:364
|
||||||
msgid "Panel Display"
|
#, c-format
|
||||||
msgstr "Visualizzazione sul pannello"
|
msgid "Execution of '%s' failed:"
|
||||||
|
msgstr "Esecuzione di «%s» non riuscita:"
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:4
|
#. Translators: Filter to display all applications
|
||||||
msgid "Show seco_nds"
|
#: ../js/ui/appDisplay.js:155
|
||||||
msgstr "Mostrare i _secondi"
|
msgid "All"
|
||||||
|
msgstr "Tutte"
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:5
|
#: ../js/ui/appDisplay.js:236
|
||||||
msgid "Show the _date"
|
|
||||||
msgstr "Mostrare la _data"
|
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:6
|
|
||||||
msgid "_12 hour format"
|
|
||||||
msgstr "Formato _12 ore"
|
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:7
|
|
||||||
msgid "_24 hour format"
|
|
||||||
msgstr "Formato _24 ore"
|
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:215
|
|
||||||
msgid "APPLICATIONS"
|
msgid "APPLICATIONS"
|
||||||
msgstr "Applicazioni"
|
msgstr "APPLICAZIONI"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:245
|
#: ../js/ui/appDisplay.js:266
|
||||||
msgid "PREFERENCES"
|
msgid "PREFERENCES"
|
||||||
msgstr "Preferenze"
|
msgstr "PREFERENZE"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:542
|
#: ../js/ui/appDisplay.js:563
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Nuova finestra"
|
msgstr "Nuova finestra"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:546
|
#: ../js/ui/appDisplay.js:567
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Rimuovi dai preferiti"
|
msgstr "Rimuovi dai preferiti"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:547
|
#: ../js/ui/appDisplay.js:568
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Aggiungi ai preferiti"
|
msgstr "Aggiungi ai preferiti"
|
||||||
|
|
||||||
@ -403,118 +342,197 @@ msgstr "%s è stato rimosso dai preferiti."
|
|||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Rimuovi"
|
msgstr "Rimuovi"
|
||||||
|
|
||||||
#: ../js/ui/docDisplay.js:494
|
#: ../js/ui/docDisplay.js:18
|
||||||
msgid "RECENT ITEMS"
|
msgid "RECENT ITEMS"
|
||||||
msgstr "Elementi recenti"
|
msgstr "Elementi recenti"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:552
|
#: ../js/ui/endSessionDialog.js:63
|
||||||
|
#, c-format
|
||||||
|
msgid "Log Out %s"
|
||||||
|
msgstr "Termina sessione di %s"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
|
||||||
|
msgid "Log Out"
|
||||||
|
msgstr "Termina sessione"
|
||||||
|
|
||||||
|
# oddio... abbandonare il sistema sembra la nave che affonda... (LF)
|
||||||
|
#: ../js/ui/endSessionDialog.js:65
|
||||||
|
msgid "Click Log Out to quit these applications and log out of the system."
|
||||||
|
msgstr "Fare clic su «Termina sessione» per chiudere queste applicazioni e abbandonare il sistema."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:66
|
||||||
|
#, c-format
|
||||||
|
msgid "%s will be logged out automatically in %d seconds."
|
||||||
|
msgstr "La sessione di %s verrà terminata automaticamente tra %d secondi."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:67
|
||||||
|
#, c-format
|
||||||
|
msgid "You will be logged out automatically in %d seconds."
|
||||||
|
msgstr "La sessione verrà terminata automaticamente tra %d secondi."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:68
|
||||||
|
msgid "Logging out of the system."
|
||||||
|
msgstr "Chiusura della sessione."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
|
||||||
|
msgid "Shut Down"
|
||||||
|
msgstr "Arresta"
|
||||||
|
|
||||||
|
# usato un termine diverso, magari si capisce meglio (LF)
|
||||||
|
#: ../js/ui/endSessionDialog.js:75
|
||||||
|
msgid "Click Shut Down to quit these applications and shut down the system."
|
||||||
|
msgstr "Fare clic su «Arresta» per chiudere queste applicazioni e spegnere il sistema."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:76
|
||||||
|
#, c-format
|
||||||
|
msgid "The system will shut down automatically in %d seconds."
|
||||||
|
msgstr "Il sistema verrà arrestato automaticamente tra %d secondi."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:77
|
||||||
|
msgid "Shutting down the system."
|
||||||
|
msgstr "Arresto del sistema."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
|
||||||
|
msgid "Restart"
|
||||||
|
msgstr "Riavvia"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:85
|
||||||
|
msgid "Click Restart to quit these applications and restart the system."
|
||||||
|
msgstr "Fare clic su «Riavvia» per chiudere queste applicazioni e riavviare il sistema."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:86
|
||||||
|
#, c-format
|
||||||
|
msgid "The system will restart automatically in %d seconds."
|
||||||
|
msgstr "Il sistema verrà riavviato automaticamente tra %d secondi."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:87
|
||||||
|
msgid "Restarting the system."
|
||||||
|
msgstr "Riavvio del sistema."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:395
|
||||||
|
msgid "Confirm"
|
||||||
|
msgstr "Conferma"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:469
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Annulla"
|
||||||
|
|
||||||
|
#: ../js/ui/lookingGlass.js:556
|
||||||
msgid "No extensions installed"
|
msgid "No extensions installed"
|
||||||
msgstr "Nessuna estensione installata"
|
msgstr "Nessuna estensione installata"
|
||||||
|
|
||||||
# (ndt) o abilitata?
|
# (ndt) o abilitata?
|
||||||
#: ../js/ui/lookingGlass.js:589
|
#: ../js/ui/lookingGlass.js:593
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "Abilitato"
|
msgstr "Abilitato"
|
||||||
|
|
||||||
# (ndt) o disabilitata?
|
# (ndt) o disabilitata?
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The device has been disabled
|
#. * The device has been disabled
|
||||||
#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
|
#: ../js/ui/lookingGlass.js:595 ../src/gvc/gvc-mixer-control.c:1087
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "Disabilitato"
|
msgstr "Disabilitato"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:593
|
#: ../js/ui/lookingGlass.js:597
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Errore"
|
msgstr "Errore"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:595
|
#: ../js/ui/lookingGlass.js:599
|
||||||
msgid "Out of date"
|
msgid "Out of date"
|
||||||
msgstr "Non aggiornato"
|
msgstr "Non aggiornato"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:620
|
#: ../js/ui/lookingGlass.js:624
|
||||||
msgid "View Source"
|
msgid "View Source"
|
||||||
msgstr "Visualizza sorgente"
|
msgstr "Visualizza sorgente"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:626
|
#: ../js/ui/lookingGlass.js:630
|
||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Pagina web"
|
msgstr "Pagina web"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:112
|
#: ../js/ui/messageTray.js:1748
|
||||||
|
msgid "System Information"
|
||||||
|
msgstr "Informazione di sistema"
|
||||||
|
|
||||||
|
#: ../js/ui/overview.js:75
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "Annulla"
|
msgstr "Annulla"
|
||||||
|
|
||||||
|
#: ../js/ui/overview.js:140
|
||||||
|
msgid "Windows"
|
||||||
|
msgstr "Finestre"
|
||||||
|
|
||||||
|
#: ../js/ui/overview.js:143
|
||||||
|
msgid "Applications"
|
||||||
|
msgstr "Applicazioni"
|
||||||
|
|
||||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||||
#: ../js/ui/panel.js:470
|
#: ../js/ui/panel.js:479
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Quit %s"
|
msgid "Quit %s"
|
||||||
msgstr "Chiudi %s"
|
msgstr "Chiudi %s"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:495
|
|
||||||
msgid "Preferences"
|
|
||||||
msgstr "Preferenze"
|
|
||||||
|
|
||||||
#. Translators: This is the time format with date used
|
#. Translators: This is the time format with date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/panel.js:581
|
#: ../js/ui/panel.js:564
|
||||||
msgid "%a %b %e, %R:%S"
|
msgid "%a %b %e, %R:%S"
|
||||||
msgstr "%a %e %b, %k.%M.%S"
|
msgstr "%a %e %b, %k.%M.%S"
|
||||||
|
|
||||||
# (ndt) proviamo col k, se non funge, sappiamo il perché...
|
# (ndt) proviamo col k, se non funge, sappiamo il perché...
|
||||||
#: ../js/ui/panel.js:582
|
#: ../js/ui/panel.js:565
|
||||||
msgid "%a %b %e, %R"
|
msgid "%a %b %e, %R"
|
||||||
msgstr "%a %e %b, %k.%M"
|
msgstr "%a %e %b, %k.%M"
|
||||||
|
|
||||||
#. Translators: This is the time format without date used
|
#. Translators: This is the time format without date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/panel.js:586
|
#: ../js/ui/panel.js:569
|
||||||
msgid "%a %R:%S"
|
msgid "%a %R:%S"
|
||||||
msgstr "%a %k.%M.%S"
|
msgstr "%a %k.%M.%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:587
|
#: ../js/ui/panel.js:570
|
||||||
msgid "%a %R"
|
msgid "%a %R"
|
||||||
msgstr "%a %k.%M"
|
msgstr "%a %k.%M"
|
||||||
|
|
||||||
#. Translators: This is a time format with date used
|
#. Translators: This is a time format with date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/panel.js:594
|
#: ../js/ui/panel.js:577
|
||||||
msgid "%a %b %e, %l:%M:%S %p"
|
msgid "%a %b %e, %l:%M:%S %p"
|
||||||
msgstr "%a %e %b, %l.%M.%S %P"
|
msgstr "%a %e %b, %l.%M.%S %P"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:595
|
#: ../js/ui/panel.js:578
|
||||||
msgid "%a %b %e, %l:%M %p"
|
msgid "%a %b %e, %l:%M %p"
|
||||||
msgstr "%a %e %b, %l.%M %P"
|
msgstr "%a %e %b, %l.%M %P"
|
||||||
|
|
||||||
#. Translators: This is a time format without date used
|
#. Translators: This is a time format without date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/panel.js:599
|
#: ../js/ui/panel.js:582
|
||||||
msgid "%a %l:%M:%S %p"
|
msgid "%a %l:%M:%S %p"
|
||||||
msgstr "%a %l.%M.%S %P"
|
msgstr "%a %l.%M.%S %P"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:600
|
#: ../js/ui/panel.js:583
|
||||||
msgid "%a %l:%M %p"
|
msgid "%a %l:%M %p"
|
||||||
msgstr "%a %l.%M %P"
|
msgstr "%a %l.%M %P"
|
||||||
|
|
||||||
#. Button on the left side of the panel.
|
#. 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".
|
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||||
#: ../js/ui/panel.js:745
|
#: ../js/ui/panel.js:728
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "Attività"
|
msgstr "Attività"
|
||||||
|
|
||||||
# (ndt) libera, ma unmount non si può proprio vedere...
|
# (ndt) libera, ma unmount non si può proprio vedere...
|
||||||
#: ../js/ui/placeDisplay.js:111
|
#: ../js/ui/placeDisplay.js:112
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to unmount '%s'"
|
msgid "Failed to unmount '%s'"
|
||||||
msgstr "Impossibile scollegare «%s»"
|
msgstr "Impossibile scollegare «%s»"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:114
|
#: ../js/ui/placeDisplay.js:115
|
||||||
msgid "Retry"
|
msgid "Retry"
|
||||||
msgstr "Riprova"
|
msgstr "Riprova"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:159
|
#: ../js/ui/placeDisplay.js:160
|
||||||
msgid "Connect to..."
|
msgid "Connect to..."
|
||||||
msgstr "Connetti a..."
|
msgstr "Connetti a..."
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:558
|
#: ../js/ui/placeDisplay.js:559
|
||||||
msgid "PLACES & DEVICES"
|
msgid "PLACES & DEVICES"
|
||||||
msgstr "Risorse e dispositivi"
|
msgstr "Risorse e dispositivi"
|
||||||
|
|
||||||
@ -527,84 +545,79 @@ msgstr "Risorse e dispositivi"
|
|||||||
msgid "toggle-switch-us"
|
msgid "toggle-switch-us"
|
||||||
msgstr "toggle-switch-intl"
|
msgstr "toggle-switch-intl"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:233
|
#: ../js/ui/runDialog.js:222
|
||||||
msgid "Please enter a command:"
|
msgid "Please enter a command:"
|
||||||
msgstr "Inserire un comando:"
|
msgstr "Inserire un comando:"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:378
|
#: ../js/ui/statusMenu.js:102
|
||||||
#, c-format
|
|
||||||
msgid "Execution of '%s' failed:"
|
|
||||||
msgstr "Esecuzione di «%s» non riuscita:"
|
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:101
|
|
||||||
msgid "Available"
|
msgid "Available"
|
||||||
msgstr "Disponibile"
|
msgstr "Disponibile"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:106
|
#: ../js/ui/statusMenu.js:107
|
||||||
msgid "Busy"
|
msgid "Busy"
|
||||||
msgstr "Non disponibile"
|
msgstr "Non disponibile"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:114
|
#: ../js/ui/statusMenu.js:115
|
||||||
msgid "My Account"
|
msgid "My Account"
|
||||||
msgstr "Account personale"
|
msgstr "Account personale"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:118
|
#: ../js/ui/statusMenu.js:119
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "Impostazioni di sistema"
|
msgstr "Impostazioni di sistema"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:125
|
#: ../js/ui/statusMenu.js:126
|
||||||
msgid "Lock Screen"
|
msgid "Lock Screen"
|
||||||
msgstr "Blocca schermo"
|
msgstr "Blocca schermo"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:129
|
#: ../js/ui/statusMenu.js:130
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "Cambia utente"
|
msgstr "Cambia utente"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:134
|
#: ../js/ui/statusMenu.js:135
|
||||||
msgid "Log Out..."
|
msgid "Log Out..."
|
||||||
msgstr "Termina sessione..."
|
msgstr "Termina sessione..."
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:141
|
#: ../js/ui/statusMenu.js:142
|
||||||
msgid "Suspend..."
|
msgid "Suspend..."
|
||||||
msgstr "Sospendi..."
|
msgstr "Sospendi..."
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:145
|
#: ../js/ui/statusMenu.js:146
|
||||||
msgid "Shut Down..."
|
msgid "Shut Down..."
|
||||||
msgstr "Arresta..."
|
msgstr "Arresta..."
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:82
|
#: ../js/ui/status/accessibility.js:83
|
||||||
msgid "Zoom"
|
msgid "Zoom"
|
||||||
msgstr "Ingrandimento"
|
msgstr "Ingrandimento"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:88
|
#: ../js/ui/status/accessibility.js:89
|
||||||
msgid "Screen Reader"
|
msgid "Screen Reader"
|
||||||
msgstr "Lettore schermo"
|
msgstr "Lettore schermo"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:91
|
#: ../js/ui/status/accessibility.js:92
|
||||||
msgid "Screen Keyboard"
|
msgid "Screen Keyboard"
|
||||||
msgstr "Tastiera a schermo"
|
msgstr "Tastiera a schermo"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:94
|
#: ../js/ui/status/accessibility.js:95
|
||||||
msgid "Visual Alerts"
|
msgid "Visual Alerts"
|
||||||
msgstr "Allerte visive"
|
msgstr "Allerte visive"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:97
|
#: ../js/ui/status/accessibility.js:98
|
||||||
msgid "Sticky Keys"
|
msgid "Sticky Keys"
|
||||||
msgstr "Permanenza tasti"
|
msgstr "Permanenza tasti"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:100
|
#: ../js/ui/status/accessibility.js:101
|
||||||
msgid "Slow Keys"
|
msgid "Slow Keys"
|
||||||
msgstr "Rallentamento tasti"
|
msgstr "Rallentamento tasti"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:103
|
#: ../js/ui/status/accessibility.js:104
|
||||||
msgid "Bounce Keys"
|
msgid "Bounce Keys"
|
||||||
msgstr "Pressione ravvicinata tasti"
|
msgstr "Pressione ravvicinata tasti"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:106
|
#: ../js/ui/status/accessibility.js:107
|
||||||
msgid "Mouse Keys"
|
msgid "Mouse Keys"
|
||||||
msgstr "Mouse da tastiera"
|
msgstr "Mouse da tastiera"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:110
|
#: ../js/ui/status/accessibility.js:111
|
||||||
msgid "Universal Access Settings"
|
msgid "Universal Access Settings"
|
||||||
msgstr "Impostazioni accesso universale"
|
msgstr "Impostazioni accesso universale"
|
||||||
|
|
||||||
@ -616,16 +629,130 @@ msgstr "Contrasto elevato"
|
|||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr "Caratteri grandi"
|
msgstr "Caratteri grandi"
|
||||||
|
|
||||||
# Sarebbe da vedere uhmmm...
|
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:240
|
||||||
#: ../js/ui/status/power.js:87
|
msgid "Bluetooth"
|
||||||
msgid "What's using power..."
|
msgstr "Bluetooth"
|
||||||
msgstr "Consumi energetici..."
|
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:90
|
# as on Android :P
|
||||||
|
#: ../js/ui/status/bluetooth.js:55
|
||||||
|
msgid "Visibility"
|
||||||
|
msgstr "Rilevabile"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:69
|
||||||
|
msgid "Send Files to Device..."
|
||||||
|
msgstr "Invia file al dispositivo..."
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:70
|
||||||
|
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:191
|
||||||
|
msgid "Connection"
|
||||||
|
msgstr "Collegato"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:227
|
||||||
|
msgid "Send Files..."
|
||||||
|
msgstr "Invia file..."
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:232
|
||||||
|
msgid "Browse Files..."
|
||||||
|
msgstr "Esplora file..."
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:241
|
||||||
|
msgid "Error browsing device"
|
||||||
|
msgstr "Errore nell'esplorare il dispositivo"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:242
|
||||||
|
#, 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:250 ../js/ui/status/keyboard.js:78
|
||||||
|
msgid "Keyboard Settings"
|
||||||
|
msgstr "Impostazioni tastiera"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:255
|
||||||
|
msgid "Mouse Settings"
|
||||||
|
msgstr "Impostazioni mouse"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:262 ../js/ui/status/volume.js:63
|
||||||
|
msgid "Sound Settings"
|
||||||
|
msgstr "Impostazioni audio"
|
||||||
|
|
||||||
|
#: ../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 ""
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:371
|
||||||
|
#, c-format
|
||||||
|
msgid "Authorization request from %s"
|
||||||
|
msgstr "Richesta autorizzazione da %s"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:377
|
||||||
|
#, 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:379
|
||||||
|
msgid "Always grant access"
|
||||||
|
msgstr "Consenti sempre accesso"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:380
|
||||||
|
msgid "Grant this time only"
|
||||||
|
msgstr "Consenti solo stavolta"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:381
|
||||||
|
msgid "Reject"
|
||||||
|
msgstr "Rifiuta"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:411
|
||||||
|
#, c-format
|
||||||
|
msgid "Pairing confirmation for %s"
|
||||||
|
msgstr "Conferma associazione per %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 "Il dispositivo %s vuole associarsi con questo computer"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:418
|
||||||
|
#, 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:420
|
||||||
|
msgid "Matches"
|
||||||
|
msgstr "Corrisponde"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:421
|
||||||
|
msgid "Does not match"
|
||||||
|
msgstr "Non corrisponde"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:444
|
||||||
|
#, c-format
|
||||||
|
msgid "Pairing request for %s"
|
||||||
|
msgstr "Richiesta associazione per %s"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:452
|
||||||
|
msgid "Please enter the PIN mentioned on the device."
|
||||||
|
msgstr "Inserire il PIN indicato sul dispositivo."
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:468
|
||||||
|
msgid "OK"
|
||||||
|
msgstr "OK"
|
||||||
|
|
||||||
|
#: ../js/ui/status/power.js:85
|
||||||
msgid "Power Settings"
|
msgid "Power Settings"
|
||||||
msgstr "Impostazioni alimentazione"
|
msgstr "Impostazioni alimentazione"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:117
|
#: ../js/ui/status/power.js:112
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d hour remaining"
|
msgid "%d hour remaining"
|
||||||
msgid_plural "%d hours remaining"
|
msgid_plural "%d hours remaining"
|
||||||
@ -633,125 +760,120 @@ msgstr[0] "%d ora rimanente"
|
|||||||
msgstr[1] "%d ore rimanenti"
|
msgstr[1] "%d ore rimanenti"
|
||||||
|
|
||||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||||
#: ../js/ui/status/power.js:120
|
#: ../js/ui/status/power.js:115
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d %s %d %s remaining"
|
msgid "%d %s %d %s remaining"
|
||||||
msgstr "%d %s e %d %s rimanenti"
|
msgstr "%d %s e %d %s rimanenti"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:122
|
#: ../js/ui/status/power.js:117
|
||||||
msgid "hour"
|
msgid "hour"
|
||||||
msgid_plural "hours"
|
msgid_plural "hours"
|
||||||
msgstr[0] "ora"
|
msgstr[0] "ora"
|
||||||
msgstr[1] "ore"
|
msgstr[1] "ore"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:122
|
#: ../js/ui/status/power.js:117
|
||||||
msgid "minute"
|
msgid "minute"
|
||||||
msgid_plural "minutes"
|
msgid_plural "minutes"
|
||||||
msgstr[0] "minuto"
|
msgstr[0] "minuto"
|
||||||
msgstr[1] "minuti"
|
msgstr[1] "minuti"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:125
|
#: ../js/ui/status/power.js:120
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d minute remaining"
|
msgid "%d minute remaining"
|
||||||
msgid_plural "%d minutes remaining"
|
msgid_plural "%d minutes remaining"
|
||||||
msgstr[0] "%d minuto rimanente"
|
msgstr[0] "%d minuto rimanente"
|
||||||
msgstr[1] "%d minuti rimanenti"
|
msgstr[1] "%d minuti rimanenti"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:244
|
#: ../js/ui/status/power.js:235
|
||||||
msgid "AC adapter"
|
msgid "AC adapter"
|
||||||
msgstr "Alimentatore di corrente"
|
msgstr "Alimentatore di corrente"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:246
|
#: ../js/ui/status/power.js:237
|
||||||
msgid "Laptop battery"
|
msgid "Laptop battery"
|
||||||
msgstr "Batteria del portatile"
|
msgstr "Batteria del portatile"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:248
|
#: ../js/ui/status/power.js:239
|
||||||
msgid "UPS"
|
msgid "UPS"
|
||||||
msgstr "UPS"
|
msgstr "UPS"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:250
|
#: ../js/ui/status/power.js:241
|
||||||
msgid "Monitor"
|
msgid "Monitor"
|
||||||
msgstr "Monitor"
|
msgstr "Monitor"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:252
|
#: ../js/ui/status/power.js:243
|
||||||
msgid "Mouse"
|
msgid "Mouse"
|
||||||
msgstr "Mouse"
|
msgstr "Mouse"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:254
|
#: ../js/ui/status/power.js:245
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Tastiera"
|
msgstr "Tastiera"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:256
|
#: ../js/ui/status/power.js:247
|
||||||
msgid "PDA"
|
msgid "PDA"
|
||||||
msgstr "PDS"
|
msgstr "PDS"
|
||||||
|
|
||||||
# c'era una discussione su tp...
|
# c'era una discussione su tp...
|
||||||
#: ../js/ui/status/power.js:258
|
#: ../js/ui/status/power.js:249
|
||||||
msgid "Cell phone"
|
msgid "Cell phone"
|
||||||
msgstr "Cellulare"
|
msgstr "Cellulare"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:260
|
#: ../js/ui/status/power.js:251
|
||||||
msgid "Media player"
|
msgid "Media player"
|
||||||
msgstr "Lettore multimediale"
|
msgstr "Lettore multimediale"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:262
|
#: ../js/ui/status/power.js:253
|
||||||
msgid "Tablet"
|
msgid "Tablet"
|
||||||
msgstr "Tablet"
|
msgstr "Tablet"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:264
|
#: ../js/ui/status/power.js:255
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "Computer"
|
msgstr "Computer"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:266 ../src/shell-app-system.c:1012
|
#: ../js/ui/status/power.js:257 ../src/shell-app-system.c:1012
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Sconosciuto"
|
msgstr "Sconosciuto"
|
||||||
|
|
||||||
#: ../js/ui/status/volume.js:41
|
#: ../js/ui/status/volume.js:42
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "Volume"
|
msgstr "Volume"
|
||||||
|
|
||||||
#: ../js/ui/status/volume.js:54
|
#: ../js/ui/status/volume.js:55
|
||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Microfono"
|
msgstr "Microfono"
|
||||||
|
|
||||||
#: ../js/ui/status/volume.js:62
|
#: ../js/ui/telepathyClient.js:561
|
||||||
msgid "Sound Settings"
|
#, c-format
|
||||||
msgstr "Impostazioni audio"
|
msgid "%s is online."
|
||||||
|
msgstr "%s è disponibile."
|
||||||
|
|
||||||
|
#: ../js/ui/telepathyClient.js:566
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is offline."
|
||||||
|
msgstr "%s è fuori rete."
|
||||||
|
|
||||||
|
#: ../js/ui/telepathyClient.js:569
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is away."
|
||||||
|
msgstr "%s è assente."
|
||||||
|
|
||||||
|
#: ../js/ui/telepathyClient.js:572
|
||||||
|
#, 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:666
|
||||||
|
#, no-c-format
|
||||||
|
msgid "Sent at %X on %A"
|
||||||
|
msgstr "Inviato alle %-H.%M.%S di %A"
|
||||||
|
|
||||||
# FIXME ma ha senso in inglese???
|
# FIXME ma ha senso in inglese???
|
||||||
#: ../js/ui/viewSelector.js:26
|
#: ../js/ui/viewSelector.js:26
|
||||||
msgid "Search your computer"
|
msgid "Search your computer"
|
||||||
msgstr "Cerca nel computer"
|
msgstr "Cerca nel computer"
|
||||||
|
|
||||||
#: ../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 è furi 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."
|
|
||||||
|
|
||||||
# FIXME -- Da rifinire..
|
|
||||||
#. 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:663
|
|
||||||
#, c-format, fuzzy
|
|
||||||
msgid "Sent at %X on %A"
|
|
||||||
msgstr "Inviato alle %-H.%M.%S di %A"
|
|
||||||
|
|
||||||
#: ../js/ui/windowAttentionHandler.js:43
|
#: ../js/ui/windowAttentionHandler.js:43
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has finished starting"
|
msgid "%s has finished starting"
|
||||||
@ -797,32 +919,32 @@ msgstr[1] "%u ingressi"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Audio di sistema"
|
msgstr "Audio di sistema"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1155
|
#: ../src/shell-global.c:1233
|
||||||
msgid "Less than a minute ago"
|
msgid "Less than a minute ago"
|
||||||
msgstr "Meno di un minuto fa"
|
msgstr "Meno di un minuto fa"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1159
|
#: ../src/shell-global.c:1237
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d minute ago"
|
msgid "%d minute ago"
|
||||||
msgid_plural "%d minutes ago"
|
msgid_plural "%d minutes ago"
|
||||||
msgstr[0] "%d minuto fa"
|
msgstr[0] "%d minuto fa"
|
||||||
msgstr[1] "%d minuti fa"
|
msgstr[1] "%d minuti fa"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1164
|
#: ../src/shell-global.c:1242
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d hour ago"
|
msgid "%d hour ago"
|
||||||
msgid_plural "%d hours ago"
|
msgid_plural "%d hours ago"
|
||||||
msgstr[0] "%d ora fa"
|
msgstr[0] "%d ora fa"
|
||||||
msgstr[1] "%d ore fa"
|
msgstr[1] "%d ore fa"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1169
|
#: ../src/shell-global.c:1247
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d day ago"
|
msgid "%d day ago"
|
||||||
msgid_plural "%d days ago"
|
msgid_plural "%d days ago"
|
||||||
msgstr[0] "%d giorno fa"
|
msgstr[0] "%d giorno fa"
|
||||||
msgstr[1] "%d giorni fa"
|
msgstr[1] "%d giorni fa"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1174
|
#: ../src/shell-global.c:1252
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d week ago"
|
msgid "%d week ago"
|
||||||
msgid_plural "%d weeks ago"
|
msgid_plural "%d weeks ago"
|
||||||
|
504
po/nb.po
504
po/nb.po
@ -1,21 +1,23 @@
|
|||||||
# Norwegian bokmål translation of gnome-shell.
|
# Norwegian bokmål translation of gnome-shell.
|
||||||
# Copyright (C) 2009 THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) 2009 THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the gnome-shell package.
|
# 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 ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell 2.91.x\n"
|
"Project-Id-Version: gnome-shell 2.91.x\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2010-12-17 14:18+0100\n"
|
"POT-Creation-Date: 2011-01-15 12:41+0100\n"
|
||||||
"PO-Revision-Date: 2010-12-17 14:19+0100\n"
|
"PO-Revision-Date: 2011-01-15 12:44+0100\n"
|
||||||
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
|
"Last-Translator: Torstein Adolf Winterseth <kvikende@fsfe.org>\n"
|
||||||
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
|
"Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.uio.no>\n"
|
||||||
"Language: \n"
|
"Language: \n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"X-Generator: Lokalize 1.1\n"
|
||||||
|
|
||||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||||
msgid "GNOME Shell"
|
msgid "GNOME Shell"
|
||||||
@ -25,14 +27,6 @@ msgstr "GNOME Shell"
|
|||||||
msgid "Window management and application launching"
|
msgid "Window management and application launching"
|
||||||
msgstr "Vindushåndtering og oppstart av programmer"
|
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
|
#: ../data/org.gnome.shell.gschema.xml.in.h:1
|
||||||
msgid ""
|
msgid ""
|
||||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||||
@ -42,56 +36,44 @@ msgstr ""
|
|||||||
"F2-dialogen."
|
"F2-dialogen."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:2
|
#: ../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"
|
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||||
msgstr ""
|
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"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr ""
|
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."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||||
msgid ""
|
msgid ""
|
||||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||||
"should not be loaded."
|
"should not be loaded."
|
||||||
msgstr ""
|
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"
|
msgid "History for command (Alt-F2) dialog"
|
||||||
msgstr ""
|
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
|
#: ../data/org.gnome.shell.gschema.xml.in.h:8
|
||||||
msgid "Hour format"
|
msgid "If true, display seconds in time."
|
||||||
msgstr "Timeformat"
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:9
|
#: ../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."
|
msgid "If true, display the ISO week date in the calendar."
|
||||||
msgstr ""
|
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"
|
msgid "List of desktop file IDs for favorite applications"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"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 "
|
"used for gst-launch. The pipeline should have an unconnected sink pad where "
|
||||||
@ -103,42 +85,42 @@ msgid ""
|
|||||||
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||||
msgid "Show date in clock"
|
msgid "Show date in clock"
|
||||||
msgstr "Vis dato i klokken"
|
msgstr "Vis dato i klokken"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||||
msgid "Show the week date in the calendar"
|
msgid "Show the week date in the calendar"
|
||||||
msgstr "Vis dato for uken i kalender"
|
msgstr "Vis dato for uken i kalender"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||||
msgid "Show time with seconds"
|
msgid "Show time with seconds"
|
||||||
msgstr "Vis tid med sekunder"
|
msgstr "Vis tid med sekunder"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.h:15
|
||||||
msgid ""
|
msgid ""
|
||||||
"The applications corresponding to these identifiers will be displayed in the "
|
"The applications corresponding to these identifiers will be displayed in the "
|
||||||
"favorites area."
|
"favorites area."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.h:16
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"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 "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
"a different container format."
|
"a different container format."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||||
msgid ""
|
msgid ""
|
||||||
"The shell normally monitors active applications in order to present the most "
|
"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 "
|
"used ones (e.g. in launchers). While this data will be kept private, you may "
|
||||||
@ -146,29 +128,11 @@ msgid ""
|
|||||||
"remove already saved data."
|
"remove already saved data."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||||
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: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 ""
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
|
||||||
msgid "Uuids of extensions to disable"
|
msgid "Uuids of extensions to disable"
|
||||||
msgstr "Uuider på utvidelser som skal slås av"
|
msgstr "Uuider på utvidelser som skal slås av"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||||
msgid "Whether to collect stats about applications usage"
|
msgid "Whether to collect stats about applications usage"
|
||||||
msgstr "Om det skal samles statistikk om bruk av programmer"
|
msgstr "Om det skal samles statistikk om bruk av programmer"
|
||||||
|
|
||||||
@ -297,51 +261,43 @@ msgstr ""
|
|||||||
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:1
|
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||||
msgid "Clock Format"
|
#. something nicer
|
||||||
msgstr "Klokkeformat"
|
#: ../js/misc/util.js:108
|
||||||
|
msgid "Could not parse command:"
|
||||||
|
msgstr "Klarte ikke å lese kommando:"
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:2
|
#: ../js/misc/util.js:130
|
||||||
msgid "Clock Preferences"
|
msgid "No such application"
|
||||||
msgstr "Brukervalg for klokke"
|
msgstr "Programmet finnes ikke"
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:3
|
#: ../js/misc/util.js:143 ../js/ui/runDialog.js:364
|
||||||
msgid "Panel Display"
|
#, c-format
|
||||||
msgstr "Panelvisning"
|
msgid "Execution of '%s' failed:"
|
||||||
|
msgstr "Kjøring av «%s» feilet:"
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:4
|
#. Translators: Filter to display all applications
|
||||||
msgid "Show seco_nds"
|
#: ../js/ui/appDisplay.js:155
|
||||||
msgstr "Vis seku_nder"
|
msgid "All"
|
||||||
|
msgstr "Alle"
|
||||||
|
|
||||||
#: ../data/clock-preferences.ui.h:5
|
#: ../js/ui/appDisplay.js:236
|
||||||
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"
|
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:215
|
|
||||||
msgid "APPLICATIONS"
|
msgid "APPLICATIONS"
|
||||||
msgstr "PROGRAMMER"
|
msgstr "PROGRAMMER"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:245
|
#: ../js/ui/appDisplay.js:266
|
||||||
msgid "PREFERENCES"
|
msgid "PREFERENCES"
|
||||||
msgstr "BRUKERVALG"
|
msgstr "BRUKERVALG"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:542
|
#: ../js/ui/appDisplay.js:563
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Nytt vindu"
|
msgstr "Nytt vindu"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:546
|
#: ../js/ui/appDisplay.js:567
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Fjern fra favoritter"
|
msgstr "Fjern fra favoritter"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:547
|
#: ../js/ui/appDisplay.js:568
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Legg til i favoritter"
|
msgstr "Legg til i favoritter"
|
||||||
|
|
||||||
@ -359,122 +315,191 @@ msgstr "%s ble fjernet fra dine favoritter."
|
|||||||
msgid "Remove"
|
msgid "Remove"
|
||||||
msgstr "Fjern"
|
msgstr "Fjern"
|
||||||
|
|
||||||
#: ../js/ui/docDisplay.js:494
|
#: ../js/ui/docDisplay.js:18
|
||||||
msgid "RECENT ITEMS"
|
msgid "RECENT ITEMS"
|
||||||
msgstr "SISTE OPPFØRINGER"
|
msgstr "SISTE OPPFØRINGER"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:552
|
#: ../js/ui/endSessionDialog.js:63
|
||||||
|
#, c-format
|
||||||
|
msgid "Log Out %s"
|
||||||
|
msgstr "Logg ut %s"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
|
||||||
|
msgid "Log Out"
|
||||||
|
msgstr "Logg ut …"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:65
|
||||||
|
msgid "Click Log Out to quit these applications and log out of the system."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:66
|
||||||
|
#, c-format
|
||||||
|
msgid "%s will be logged out automatically in %d seconds."
|
||||||
|
msgstr "%s vil bli logget ut automatisk om %d sekunder."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:67
|
||||||
|
#, c-format
|
||||||
|
msgid "You will be logged out automatically in %d seconds."
|
||||||
|
msgstr "Du vil bli logget ut automatisk om %d sekunder."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:68
|
||||||
|
msgid "Logging out of the system."
|
||||||
|
msgstr "Logger ut av systemet"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
|
||||||
|
msgid "Shut Down"
|
||||||
|
msgstr "Avslutt"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:75
|
||||||
|
msgid "Click Shut Down to quit these applications and shut down the system."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:76
|
||||||
|
#, c-format
|
||||||
|
msgid "The system will shut down automatically in %d seconds."
|
||||||
|
msgstr "Systemet vil slås av automatisk om %d sekunder."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:77
|
||||||
|
msgid "Shutting down the system."
|
||||||
|
msgstr "Slår av systemet."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
|
||||||
|
msgid "Restart"
|
||||||
|
msgstr "Start på nytt"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:85
|
||||||
|
msgid "Click Restart to quit these applications and restart the system."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:86
|
||||||
|
#, c-format
|
||||||
|
msgid "The system will restart automatically in %d seconds."
|
||||||
|
msgstr "Systemet vil starte på nytt automatisk om %d sekunder."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:87
|
||||||
|
msgid "Restarting the system."
|
||||||
|
msgstr "Starter systemet på nytt."
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:395
|
||||||
|
msgid "Confirm"
|
||||||
|
msgstr "Bekreft"
|
||||||
|
|
||||||
|
#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:469
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Avbryt"
|
||||||
|
|
||||||
|
#: ../js/ui/lookingGlass.js:556
|
||||||
msgid "No extensions installed"
|
msgid "No extensions installed"
|
||||||
msgstr "Ingen utvidelser installert"
|
msgstr "Ingen utvidelser installert"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:589
|
#: ../js/ui/lookingGlass.js:593
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "Aktivert"
|
msgstr "Aktivert"
|
||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The device has been disabled
|
#. * The device has been disabled
|
||||||
#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
|
#: ../js/ui/lookingGlass.js:595 ../src/gvc/gvc-mixer-control.c:1087
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "Deaktivert"
|
msgstr "Deaktivert"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:593
|
#: ../js/ui/lookingGlass.js:597
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Feil"
|
msgstr "Feil"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:595
|
#: ../js/ui/lookingGlass.js:599
|
||||||
msgid "Out of date"
|
msgid "Out of date"
|
||||||
msgstr "Utdatert"
|
msgstr "Utdatert"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:620
|
#: ../js/ui/lookingGlass.js:624
|
||||||
msgid "View Source"
|
msgid "View Source"
|
||||||
msgstr "Vis kildekode"
|
msgstr "Vis kildekode"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:626
|
#: ../js/ui/lookingGlass.js:630
|
||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Nettside"
|
msgstr "Nettside"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:96
|
#: ../js/ui/messageTray.js:1748
|
||||||
|
msgid "System Information"
|
||||||
|
msgstr "Systeminformasjon"
|
||||||
|
|
||||||
|
#: ../js/ui/overview.js:75
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "Angre"
|
msgstr "Angre"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:158
|
#: ../js/ui/overview.js:140
|
||||||
msgid "Windows"
|
msgid "Windows"
|
||||||
msgstr "Vinduer"
|
msgstr "Vinduer"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:161
|
#: ../js/ui/overview.js:143
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Programmer"
|
msgstr "Programmer"
|
||||||
|
|
||||||
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||||
#: ../js/ui/panel.js:470
|
#: ../js/ui/panel.js:479
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Quit %s"
|
msgid "Quit %s"
|
||||||
msgstr "Avslutt %s"
|
msgstr "Avslutt %s"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:495
|
|
||||||
msgid "Preferences"
|
|
||||||
msgstr "Brukervalg"
|
|
||||||
|
|
||||||
#. Translators: This is the time format with date used
|
#. Translators: This is the time format with date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/panel.js:581
|
#: ../js/ui/panel.js:564
|
||||||
msgid "%a %b %e, %R:%S"
|
msgid "%a %b %e, %R:%S"
|
||||||
msgstr "%a %e %b, %R.%S"
|
msgstr "%a %e %b, %R.%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:582
|
#: ../js/ui/panel.js:565
|
||||||
msgid "%a %b %e, %R"
|
msgid "%a %b %e, %R"
|
||||||
msgstr "%a %e %b, %R"
|
msgstr "%a %e %b, %R"
|
||||||
|
|
||||||
#. Translators: This is the time format without date used
|
#. Translators: This is the time format without date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/panel.js:586
|
#: ../js/ui/panel.js:569
|
||||||
msgid "%a %R:%S"
|
msgid "%a %R:%S"
|
||||||
msgstr "%a %R.%S"
|
msgstr "%a %R.%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:587
|
#: ../js/ui/panel.js:570
|
||||||
msgid "%a %R"
|
msgid "%a %R"
|
||||||
msgstr "%a %R"
|
msgstr "%a %R"
|
||||||
|
|
||||||
#. Translators: This is a time format with date used
|
#. Translators: This is a time format with date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/panel.js:594
|
#: ../js/ui/panel.js:577
|
||||||
msgid "%a %b %e, %l:%M:%S %p"
|
msgid "%a %b %e, %l:%M:%S %p"
|
||||||
msgstr "%a %e %b, %l.%M.%S %p"
|
msgstr "%a %e %b, %l.%M.%S %p"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:595
|
#: ../js/ui/panel.js:578
|
||||||
msgid "%a %b %e, %l:%M %p"
|
msgid "%a %b %e, %l:%M %p"
|
||||||
msgstr "%a %e %b, %l.%M %p"
|
msgstr "%a %e %b, %l.%M %p"
|
||||||
|
|
||||||
#. Translators: This is a time format without date used
|
#. Translators: This is a time format without date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/panel.js:599
|
#: ../js/ui/panel.js:582
|
||||||
msgid "%a %l:%M:%S %p"
|
msgid "%a %l:%M:%S %p"
|
||||||
msgstr "%a %l.%M.%S %p"
|
msgstr "%a %l.%M.%S %p"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:600
|
#: ../js/ui/panel.js:583
|
||||||
msgid "%a %l:%M %p"
|
msgid "%a %l:%M %p"
|
||||||
msgstr "%a %l.%M %p"
|
msgstr "%a %l.%M %p"
|
||||||
|
|
||||||
#. Button on the left side of the panel.
|
#. 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".
|
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||||
#: ../js/ui/panel.js:745
|
#: ../js/ui/panel.js:728
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "Aktiviteter"
|
msgstr "Aktiviteter"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:111
|
#: ../js/ui/placeDisplay.js:112
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to unmount '%s'"
|
msgid "Failed to unmount '%s'"
|
||||||
msgstr "Klarte ikke å avmontere «%s»"
|
msgstr "Klarte ikke å avmontere «%s»"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:114
|
#: ../js/ui/placeDisplay.js:115
|
||||||
msgid "Retry"
|
msgid "Retry"
|
||||||
msgstr "Prøv igjen"
|
msgstr "Prøv igjen"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:159
|
#: ../js/ui/placeDisplay.js:160
|
||||||
msgid "Connect to..."
|
msgid "Connect to..."
|
||||||
msgstr "Koble til..."
|
msgstr "Koble til …"
|
||||||
|
|
||||||
#: ../js/ui/placeDisplay.js:558
|
#: ../js/ui/placeDisplay.js:559
|
||||||
msgid "PLACES & DEVICES"
|
msgid "PLACES & DEVICES"
|
||||||
msgstr "STEDER & ENHETER"
|
msgstr "STEDER & ENHETER"
|
||||||
|
|
||||||
@ -487,84 +512,79 @@ msgstr "STEDER & ENHETER"
|
|||||||
msgid "toggle-switch-us"
|
msgid "toggle-switch-us"
|
||||||
msgstr "toggle-switch-intl"
|
msgstr "toggle-switch-intl"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:233
|
#: ../js/ui/runDialog.js:222
|
||||||
msgid "Please enter a command:"
|
msgid "Please enter a command:"
|
||||||
msgstr "Oppgi en kommando:"
|
msgstr "Oppgi en kommando:"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:378
|
#: ../js/ui/statusMenu.js:102
|
||||||
#, c-format
|
|
||||||
msgid "Execution of '%s' failed:"
|
|
||||||
msgstr "Kjøring av «%s» feilet:"
|
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:101
|
|
||||||
msgid "Available"
|
msgid "Available"
|
||||||
msgstr "Tilgjengelig"
|
msgstr "Tilgjengelig"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:106
|
#: ../js/ui/statusMenu.js:107
|
||||||
msgid "Busy"
|
msgid "Busy"
|
||||||
msgstr "Opptatt"
|
msgstr "Opptatt"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:114
|
#: ../js/ui/statusMenu.js:115
|
||||||
msgid "My Account"
|
msgid "My Account"
|
||||||
msgstr "Min konto"
|
msgstr "Min konto"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:118
|
#: ../js/ui/statusMenu.js:119
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "Systeminnstillinger"
|
msgstr "Systeminnstillinger"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:125
|
#: ../js/ui/statusMenu.js:126
|
||||||
msgid "Lock Screen"
|
msgid "Lock Screen"
|
||||||
msgstr "Lås skjerm"
|
msgstr "Lås skjerm"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:129
|
#: ../js/ui/statusMenu.js:130
|
||||||
msgid "Switch User"
|
msgid "Switch User"
|
||||||
msgstr "Bytt bruker"
|
msgstr "Bytt bruker"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:134
|
#: ../js/ui/statusMenu.js:135
|
||||||
msgid "Log Out..."
|
msgid "Log Out..."
|
||||||
msgstr "Logg ut..."
|
msgstr "Logg ut …"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:141
|
#: ../js/ui/statusMenu.js:142
|
||||||
msgid "Suspend..."
|
msgid "Suspend..."
|
||||||
msgstr "Hvilemodus..."
|
msgstr "Hvilemodus …"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:145
|
#: ../js/ui/statusMenu.js:146
|
||||||
msgid "Shut Down..."
|
msgid "Shut Down..."
|
||||||
msgstr "Avslutt..."
|
msgstr "Avslutt …"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:82
|
#: ../js/ui/status/accessibility.js:83
|
||||||
msgid "Zoom"
|
msgid "Zoom"
|
||||||
msgstr "Zoom"
|
msgstr "Zoom"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:88
|
#: ../js/ui/status/accessibility.js:89
|
||||||
msgid "Screen Reader"
|
msgid "Screen Reader"
|
||||||
msgstr "Skjermleser"
|
msgstr "Skjermleser"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:91
|
#: ../js/ui/status/accessibility.js:92
|
||||||
msgid "Screen Keyboard"
|
msgid "Screen Keyboard"
|
||||||
msgstr "Tastatur på skjermen"
|
msgstr "Tastatur på skjermen"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:94
|
#: ../js/ui/status/accessibility.js:95
|
||||||
msgid "Visual Alerts"
|
msgid "Visual Alerts"
|
||||||
msgstr "Synlig varsling"
|
msgstr "Synlig varsling"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:97
|
#: ../js/ui/status/accessibility.js:98
|
||||||
msgid "Sticky Keys"
|
msgid "Sticky Keys"
|
||||||
msgstr "Klebrige taster"
|
msgstr "Klebrige taster"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:100
|
#: ../js/ui/status/accessibility.js:101
|
||||||
msgid "Slow Keys"
|
msgid "Slow Keys"
|
||||||
msgstr "Trege taster"
|
msgstr "Trege taster"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:103
|
#: ../js/ui/status/accessibility.js:104
|
||||||
msgid "Bounce Keys"
|
msgid "Bounce Keys"
|
||||||
msgstr "Spretne taster"
|
msgstr "Spretne taster"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:106
|
#: ../js/ui/status/accessibility.js:107
|
||||||
msgid "Mouse Keys"
|
msgid "Mouse Keys"
|
||||||
msgstr "Mustaster"
|
msgstr "Mustaster"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:110
|
#: ../js/ui/status/accessibility.js:111
|
||||||
msgid "Universal Access Settings"
|
msgid "Universal Access Settings"
|
||||||
msgstr "Innstillinger for tilgjengelighet"
|
msgstr "Innstillinger for tilgjengelighet"
|
||||||
|
|
||||||
@ -576,15 +596,127 @@ msgstr "Høy kontrast"
|
|||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr "Stor tekst"
|
msgstr "Stor tekst"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:85
|
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:240
|
||||||
msgid "What's using power..."
|
msgid "Bluetooth"
|
||||||
msgstr "Hva bruker strøm..."
|
msgstr "Bluetooth"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:88
|
#: ../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:191
|
||||||
|
msgid "Connection"
|
||||||
|
msgstr "Tilkobling"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:227
|
||||||
|
msgid "Send Files..."
|
||||||
|
msgstr "Send filer..."
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:232
|
||||||
|
msgid "Browse Files..."
|
||||||
|
msgstr "Bla gjennom filer..."
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:241
|
||||||
|
msgid "Error browsing device"
|
||||||
|
msgstr "Feil under lesing av enhet"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:242
|
||||||
|
#, 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:250 ../js/ui/status/keyboard.js:78
|
||||||
|
msgid "Keyboard Settings"
|
||||||
|
msgstr "Innstillinger for tastatur"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:255
|
||||||
|
msgid "Mouse Settings"
|
||||||
|
msgstr "Innstillinger for mus"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:262 ../js/ui/status/volume.js:63
|
||||||
|
msgid "Sound Settings"
|
||||||
|
msgstr "Innstillinger for lyd"
|
||||||
|
|
||||||
|
#: ../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-agent"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:371
|
||||||
|
#, c-format
|
||||||
|
msgid "Authorization request from %s"
|
||||||
|
msgstr "Forespørsel om autorisering fra %s"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:377
|
||||||
|
#, 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:379
|
||||||
|
msgid "Always grant access"
|
||||||
|
msgstr "Alltid gi tilgang"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:380
|
||||||
|
msgid "Grant this time only"
|
||||||
|
msgstr "Gi tilgang kun denne ene gangen"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:381
|
||||||
|
msgid "Reject"
|
||||||
|
msgstr "Avvis"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:411
|
||||||
|
#, c-format
|
||||||
|
msgid "Pairing confirmation for %s"
|
||||||
|
msgstr "Bekreftelse for tilkobling for %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 "Enhet %s vil koble seg sammen med denne datamaskinen"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:418
|
||||||
|
#, 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:420
|
||||||
|
msgid "Matches"
|
||||||
|
msgstr "Stemmer overens"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:421
|
||||||
|
msgid "Does not match"
|
||||||
|
msgstr "Stemmer ikke overens"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:444
|
||||||
|
#, c-format
|
||||||
|
msgid "Pairing request for %s"
|
||||||
|
msgstr "Forespørsel om tilkobling for %s"
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:452
|
||||||
|
msgid "Please enter the PIN mentioned on the device."
|
||||||
|
msgstr "Vennligst oppgi PIN som oppgitt på enheten."
|
||||||
|
|
||||||
|
#: ../js/ui/status/bluetooth.js:468
|
||||||
|
msgid "OK"
|
||||||
|
msgstr "OK"
|
||||||
|
|
||||||
|
#: ../js/ui/status/power.js:85
|
||||||
msgid "Power Settings"
|
msgid "Power Settings"
|
||||||
msgstr "Innstillinger for strøm"
|
msgstr "Innstillinger for strøm"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:115
|
#: ../js/ui/status/power.js:112
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d hour remaining"
|
msgid "%d hour remaining"
|
||||||
msgid_plural "%d hours remaining"
|
msgid_plural "%d hours remaining"
|
||||||
@ -592,106 +724,102 @@ msgstr[0] "%d time gjenstår"
|
|||||||
msgstr[1] "%d timer gjenstår"
|
msgstr[1] "%d timer gjenstår"
|
||||||
|
|
||||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||||
#: ../js/ui/status/power.js:118
|
#: ../js/ui/status/power.js:115
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d %s %d %s remaining"
|
msgid "%d %s %d %s remaining"
|
||||||
msgstr "%d %s %d %s gjenstår"
|
msgstr "%d %s %d %s gjenstår"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:120
|
#: ../js/ui/status/power.js:117
|
||||||
msgid "hour"
|
msgid "hour"
|
||||||
msgid_plural "hours"
|
msgid_plural "hours"
|
||||||
msgstr[0] "time"
|
msgstr[0] "time"
|
||||||
msgstr[1] "timer"
|
msgstr[1] "timer"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:120
|
#: ../js/ui/status/power.js:117
|
||||||
msgid "minute"
|
msgid "minute"
|
||||||
msgid_plural "minutes"
|
msgid_plural "minutes"
|
||||||
msgstr[0] "minutt"
|
msgstr[0] "minutt"
|
||||||
msgstr[1] "minutter"
|
msgstr[1] "minutter"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:123
|
#: ../js/ui/status/power.js:120
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d minute remaining"
|
msgid "%d minute remaining"
|
||||||
msgid_plural "%d minutes remaining"
|
msgid_plural "%d minutes remaining"
|
||||||
msgstr[0] "%d minutt gjenstår"
|
msgstr[0] "%d minutt gjenstår"
|
||||||
msgstr[1] "%d minutter gjenstår"
|
msgstr[1] "%d minutter gjenstår"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:240
|
#: ../js/ui/status/power.js:235
|
||||||
msgid "AC adapter"
|
msgid "AC adapter"
|
||||||
msgstr "Strømadapter"
|
msgstr "Strømadapter"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:242
|
#: ../js/ui/status/power.js:237
|
||||||
msgid "Laptop battery"
|
msgid "Laptop battery"
|
||||||
msgstr "Batteri på bærbar"
|
msgstr "Batteri på bærbar"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:244
|
#: ../js/ui/status/power.js:239
|
||||||
msgid "UPS"
|
msgid "UPS"
|
||||||
msgstr "UPS"
|
msgstr "UPS"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:246
|
#: ../js/ui/status/power.js:241
|
||||||
msgid "Monitor"
|
msgid "Monitor"
|
||||||
msgstr "Skjerm"
|
msgstr "Skjerm"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:248
|
#: ../js/ui/status/power.js:243
|
||||||
msgid "Mouse"
|
msgid "Mouse"
|
||||||
msgstr "Mus"
|
msgstr "Mus"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:250
|
#: ../js/ui/status/power.js:245
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Tastatur"
|
msgstr "Tastatur"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:252
|
#: ../js/ui/status/power.js:247
|
||||||
msgid "PDA"
|
msgid "PDA"
|
||||||
msgstr "PDA"
|
msgstr "PDA"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:254
|
#: ../js/ui/status/power.js:249
|
||||||
msgid "Cell phone"
|
msgid "Cell phone"
|
||||||
msgstr "Mobiltelefon"
|
msgstr "Mobiltelefon"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:256
|
#: ../js/ui/status/power.js:251
|
||||||
msgid "Media player"
|
msgid "Media player"
|
||||||
msgstr "Medieavspiller"
|
msgstr "Medieavspiller"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:258
|
#: ../js/ui/status/power.js:253
|
||||||
msgid "Tablet"
|
msgid "Tablet"
|
||||||
msgstr "Nettbrett"
|
msgstr "Nettbrett"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:260
|
#: ../js/ui/status/power.js:255
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "Datamaskin"
|
msgstr "Datamaskin"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:262 ../src/shell-app-system.c:1012
|
#: ../js/ui/status/power.js:257 ../src/shell-app-system.c:1012
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Ukjent"
|
msgstr "Ukjent"
|
||||||
|
|
||||||
#: ../js/ui/status/volume.js:41
|
#: ../js/ui/status/volume.js:42
|
||||||
msgid "Volume"
|
msgid "Volume"
|
||||||
msgstr "Volum"
|
msgstr "Volum"
|
||||||
|
|
||||||
#: ../js/ui/status/volume.js:54
|
#: ../js/ui/status/volume.js:55
|
||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Mikrofon"
|
msgstr "Mikrofon"
|
||||||
|
|
||||||
#: ../js/ui/status/volume.js:62
|
#: ../js/ui/telepathyClient.js:561
|
||||||
msgid "Sound Settings"
|
|
||||||
msgstr "Innstillinger for lyd"
|
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:560
|
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is online."
|
msgid "%s is online."
|
||||||
msgstr "%s er tilkoblet."
|
msgstr "%s er tilkoblet."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:565
|
#: ../js/ui/telepathyClient.js:566
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is offline."
|
msgid "%s is offline."
|
||||||
msgstr "%s er frakoblet."
|
msgstr "%s er frakoblet."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:568
|
#: ../js/ui/telepathyClient.js:569
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is away."
|
msgid "%s is away."
|
||||||
msgstr "«%s» er borte."
|
msgstr "«%s» er borte."
|
||||||
|
|
||||||
#: ../js/ui/telepathyClient.js:571
|
#: ../js/ui/telepathyClient.js:572
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s is busy."
|
msgid "%s is busy."
|
||||||
msgstr "%s er opptatt."
|
msgstr "%s er opptatt."
|
||||||
@ -699,7 +827,7 @@ msgstr "%s er opptatt."
|
|||||||
#. Translators: this is a time format string followed by a date.
|
#. Translators: this is a time format string followed by a date.
|
||||||
#. If applicable, replace %X with a strftime format valid for your
|
#. If applicable, replace %X with a strftime format valid for your
|
||||||
#. locale, without seconds.
|
#. locale, without seconds.
|
||||||
#: ../js/ui/telepathyClient.js:664
|
#: ../js/ui/telepathyClient.js:666
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Sent at %X on %A"
|
msgid "Sent at %X on %A"
|
||||||
msgstr "Sendt %X på %A"
|
msgstr "Sendt %X på %A"
|
||||||
@ -751,32 +879,32 @@ msgstr[1] "%u innganger"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Systemlyder"
|
msgstr "Systemlyder"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1155
|
#: ../src/shell-global.c:1233
|
||||||
msgid "Less than a minute ago"
|
msgid "Less than a minute ago"
|
||||||
msgstr "Mindre enn ett minutt siden"
|
msgstr "Mindre enn ett minutt siden"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1159
|
#: ../src/shell-global.c:1237
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d minute ago"
|
msgid "%d minute ago"
|
||||||
msgid_plural "%d minutes ago"
|
msgid_plural "%d minutes ago"
|
||||||
msgstr[0] "%d minutt siden"
|
msgstr[0] "%d minutt siden"
|
||||||
msgstr[1] "%d minutter siden"
|
msgstr[1] "%d minutter siden"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1164
|
#: ../src/shell-global.c:1242
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d hour ago"
|
msgid "%d hour ago"
|
||||||
msgid_plural "%d hours ago"
|
msgid_plural "%d hours ago"
|
||||||
msgstr[0] "%d time siden"
|
msgstr[0] "%d time siden"
|
||||||
msgstr[1] "%d timer siden"
|
msgstr[1] "%d timer siden"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1169
|
#: ../src/shell-global.c:1247
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d day ago"
|
msgid "%d day ago"
|
||||||
msgid_plural "%d days ago"
|
msgid_plural "%d days ago"
|
||||||
msgstr[0] "%d dag siden"
|
msgstr[0] "%d dag siden"
|
||||||
msgstr[1] "%d dager siden"
|
msgstr[1] "%d dager siden"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1174
|
#: ../src/shell-global.c:1252
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d week ago"
|
msgid "%d week ago"
|
||||||
msgid_plural "%d weeks ago"
|
msgid_plural "%d weeks ago"
|
||||||
|
507
po/ug.po
507
po/ug.po
@ -8,9 +8,8 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell\n"
|
"Project-Id-Version: gnome-shell\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&component=general\n"
|
||||||
"shell&component=general\n"
|
"POT-Creation-Date: 2010-12-20 21:07+0000\n"
|
||||||
"POT-Creation-Date: 2010-11-25 14:32+0000\n"
|
|
||||||
"PO-Revision-Date: 2010-11-25 14:28+0600\n"
|
"PO-Revision-Date: 2010-11-25 14:28+0600\n"
|
||||||
"Last-Translator: Sahran <sahran@live.com>\n"
|
"Last-Translator: Sahran <sahran@live.com>\n"
|
||||||
"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
|
"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
|
||||||
@ -47,28 +46,21 @@ msgstr "سائەتنىڭ ئىختىيارىي فورماتى"
|
|||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||||
msgstr ""
|
msgstr "ئىچكى قورال قوزغىتىلسا ئىجادكارلار ۋە سىنىغۇچىلارنىڭ Alt-F2 ئارقىلىق كىرىشىگە قۇلايلىق"
|
||||||
"ئىچكى قورال قوزغىتىلسا ئىجادكارلار ۋە سىنىغۇچىلارنىڭ Alt-F2 ئارقىلىق "
|
|
||||||
"كىرىشىگە قۇلايلىق"
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
#: ../data/org.gnome.shell.gschema.xml.in.h:4
|
||||||
msgid "File extension used for storing the screencast"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr ""
|
msgstr "ئېكران كەسمىسى (screencasts) ساقلاشتا ئىشلىتىلىدىغان ھۆججەتنىڭ كېڭەيتىلگەن ئاتى"
|
||||||
"ئېكران كەسمىسى (screencasts) ساقلاشتا ئىشلىتىلىدىغان ھۆججەتنىڭ كېڭەيتىلگەن "
|
|
||||||
"ئاتى "
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||||
msgid "Framerate used for recording screencasts."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr ""
|
msgstr "ئېكران كەسمىسى (screencasts) خاتىرىلەشتە ئىشلىتىلىدىغان كاندۇك تېزلىكى."
|
||||||
"ئېكران كەسمىسى (screencasts) خاتىرىلەشتە ئىشلىتىلىدىغان كاندۇك تېزلىكى."
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
#: ../data/org.gnome.shell.gschema.xml.in.h:6
|
||||||
msgid ""
|
msgid ""
|
||||||
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
"GNOME Shell extensions have a uuid property; this key lists extensions which "
|
||||||
"should not be loaded."
|
"should not be loaded."
|
||||||
msgstr ""
|
msgstr "GNOME چاپان (Shell)كېڭەيتىلمىسىنىڭ uuid خاسلىقى بار؛ بۇ كۇنۇپكا يۈكلەنمەيدىغان كېڭەيتىلمىلەر تىزىملىكىنى كۆرسىتىدۇ."
|
||||||
"GNOME چاپان (Shell)كېڭەيتىلمىسىنىڭ uuid خاسلىقى بار؛ بۇ كۇنۇپكا "
|
|
||||||
"يۈكلەنمەيدىغان كېڭەيتىلمىلەر تىزىملىكىنى كۆرسىتىدۇ."
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
#: ../data/org.gnome.shell.gschema.xml.in.h:7
|
||||||
msgid "History for command (Alt-F2) dialog"
|
msgid "History for command (Alt-F2) dialog"
|
||||||
@ -82,17 +74,13 @@ msgstr "سائەت فورماتى"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
|
"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
|
||||||
"clock, in addition to time."
|
"clock, in addition to time."
|
||||||
msgstr ""
|
msgstr "ئەگەر راست (true) بولسا سائەتتە ۋاقىت فورماتىنى «12 سائەت» ياكى «24 سائەت» كۆرسەتكەندىن سىرت چېسلانىمۇ كۆرسىتىدۇ."
|
||||||
"ئەگەر راست (true) بولسا سائەتتە ۋاقىت فورماتىنى «12 سائەت» ياكى «24 سائەت» "
|
|
||||||
"كۆرسەتكەندىن سىرت چېسلانىمۇ كۆرسىتىدۇ."
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
#: ../data/org.gnome.shell.gschema.xml.in.h:10
|
||||||
msgid ""
|
msgid ""
|
||||||
"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
|
"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
|
||||||
"time."
|
"time."
|
||||||
msgstr ""
|
msgstr "ئەگەر راست (true) بولسا سائەتتە ۋاقىت فورماتىنى «12 سائەت» ياكى «24 سائەت» كۆرسەتكەندىن سىرت سېكۇنتنىمۇ كۆرسىتىدۇ."
|
||||||
"ئەگەر راست (true) بولسا سائەتتە ۋاقىت فورماتىنى «12 سائەت» ياكى «24 سائەت» "
|
|
||||||
"كۆرسەتكەندىن سىرت سېكۇنتنىمۇ كۆرسىتىدۇ. "
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
#: ../data/org.gnome.shell.gschema.xml.in.h:11
|
||||||
msgid "If true, display the ISO week date in the calendar."
|
msgid "If true, display the ISO week date in the calendar."
|
||||||
@ -100,13 +88,9 @@ msgstr "ئەگەر راست(true) بولسا يىلنامىدىكى ISO ھەپت
|
|||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
#: ../data/org.gnome.shell.gschema.xml.in.h:12
|
||||||
msgid "List of desktop file IDs for favorite applications"
|
msgid "List of desktop file IDs for favorite applications"
|
||||||
msgstr "ئامراق قوللىنىشچان پروگراممىلارنىڭ ئۈستەل ئۈستى ھۆججەت ID تىزىملىكى"
|
msgstr "ئامراق پروگراممىلارنىڭ ئۈستەلئۈستى ھۆججەت ID تىزىملىكى"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
#: ../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 ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"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 "
|
"used for gst-launch. The pipeline should have an unconnected sink pad where "
|
||||||
@ -116,91 +100,60 @@ msgid ""
|
|||||||
"the output to an icecast server via shout2send or similar. When unset or set "
|
"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 "
|
"to an empty value, the default pipeline will be used. This is currently "
|
||||||
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
|
||||||
msgstr ""
|
msgstr "ئۈن ئېلىشنى كودلاشتا ئىشلىتىلىدىغان GStreamer ئاقما لىنىيىنى تەڭشەيدۇ. ئۇ gst-launch گرامماتىكىسىغا بوي سۇنىدۇ. بۇ ئاقما لىنىيىدە ئۇلانمىغان sink pad بولۇشى لازىم، خاتىرىلىنىدىغان سىن مۇشۇ جايدا خاتىرىلىنىدۇ. بۇ لىنىيىدە ئادەتتە يەنە بىر ئۇلانمىغان مەنبە pad بولىدۇ؛ بۇ pad چىقارغان ئۇچۇرلار ھۆججەتكە يېزىلىدۇ. ئەمما ئاقما لىنىيە ئۆزىنىڭ چىقىرىشىنى بىر تەرەپ قىلالايدۇ، بۇنداق بولغاندا shout2send ئارقىلىق ياكى شۇنىڭغا ئوخشاش ئۇسۇلدا چىقىرىشنى icecast مۇلازىمېتىرىغا يوللايدۇ. ئاقما لىنىيە تەڭشەلمىگەن ياكى بوش قىممەتكە تەڭشەلگەندە كۆڭۈلدىكى ئاقما لىنىيە قوزغىتىلىدۇ. ئۇنىڭ نۆۋەتتىكى قىممىتى 'videorate ! theoraenc ! oggmux' بولۇپ، فورماتى Ogg شەكلىدە خاتىرىلىنىدۇ."
|
||||||
"ئۈن ئېلىشنى كودلاشتا ئىشلىتىلىدىغان 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"
|
msgid "Show date in clock"
|
||||||
msgstr "سائەت ئىچىدە چېسلا كۆرسەت"
|
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"
|
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"
|
msgid "Show time with seconds"
|
||||||
msgstr "ۋاقىت ئىچىدە سېكۇنتنى بىللە كۆرسەت"
|
msgstr "ۋاقىت ئىچىدە سېكۇنتنى بىللە كۆرسەت"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.h:17
|
||||||
msgid ""
|
msgid ""
|
||||||
"The applications corresponding to these identifiers will be displayed in the "
|
"The applications corresponding to these identifiers will be displayed in the "
|
||||||
"favorites area."
|
"favorites area."
|
||||||
msgstr "مۇناسىپ پروگرامما بەلگىسى يىغقۇچ رايونىدا كۆرسىتىلىدۇ."
|
msgstr "مۇناسىپ پروگرامما بەلگىسى يىغقۇچ رايونىدا كۆرسىتىلىدۇ."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"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 "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
"a different container format."
|
"a different container format."
|
||||||
msgstr ""
|
msgstr "خاتىرىلەنگەن ئېكراننىڭ ھۆججەت ئاتى نۆۋەتتىكى چېسلا ئاساسىدا بىردىنبىر بولۇپ بۇ كېڭەيتىلگەن ئاتىنى ئىشلىتىدۇ. ئۇ ئۆزگەرسە ئوخشاش بولمىغان قاچا فورماتىدا خاتىرىلەيدۇ."
|
||||||
"خاتىرىلەنگەن ئېكراننىڭ ھۆججەت ئاتى نۆۋەتتىكى چېسلا ئاساسىدا بىردىنبىر بولۇپ "
|
|
||||||
"بۇ كېڭەيتىلگەن ئاتىنى ئىشلىتىدۇ. ئۇ ئۆزگەرسە ئوخشاش بولمىغان قاچا فورماتىدا "
|
|
||||||
"خاتىرىلەيدۇ."
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
msgstr ""
|
msgstr "GNOME Shell ئېكران خاتىرىلىگۈچ ھەر سېكۇنتتا خاتىرىلەيدىغان ئېكران كەسمىسى كاندۇك سۈرىتى(ھەر سېكۇنتتىكى كاندۇك سانى)."
|
||||||
"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"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "ئېكران كەسمىسىنى كودلاشتا ئىشلىتىلىدىغان gstreamer ئاقما لىنىيىسى"
|
msgstr "ئېكران كەسمىسىنى كودلاشتا ئىشلىتىلىدىغان gstreamer ئاقما لىنىيىسى"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||||
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 ""
|
msgid ""
|
||||||
"The shell normally monitors active applications in order to present the most "
|
"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 "
|
"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 "
|
"want to disable this for privacy reasons. Please note that doing so won't "
|
||||||
"remove already saved data."
|
"remove already saved data."
|
||||||
msgstr ""
|
msgstr "چاپان (shell) ئادەتتىكى ئەھۋالدا كۆپ ئىشلىتىلىدىغان ئاكتىپ پروگراممىلار(مەسىلەن، ئىجرا قىلىنىۋاتقان)نى كۆزىتىدۇ. گەرچە بۇ سانلىق مەلۇماتلار مەخپىي ساقلانسىمۇ، شەخسىي سىر سەۋەبىدىن بۇنى چەكلىشىڭىز مۇمكىن. دىققەت بۇنداق قىلغاندا ئاللىبۇرۇن ساقلانغان سانلىق مەلۇماتلار چىقىرىۋېتىلمەيدۇ."
|
||||||
"چاپان (shell) ئادەتتىكى ئەھۋالدا كۆپ ئىشلىتىلىدىغان ئاكتىپ پروگراممىلار"
|
|
||||||
"(مەسىلەن، ئىجرا قىلىنىۋاتقان)نى كۆزىتىدۇ. گەرچە بۇ سانلىق مەلۇماتلار مەخپىي "
|
|
||||||
"ساقلانسىمۇ، شەخسىي سىر سەۋەبىدىن بۇنى چەكلىشىڭىز مۇمكىن. دىققەت بۇنداق "
|
|
||||||
"قىلغاندا ئاللىبۇرۇن ساقلانغان سانلىق مەلۇماتلار چىقىرىۋېتىلمەيدۇ."
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key specifies the format used by the panel clock when the format key is "
|
"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"
|
"set to \"custom\". You can use conversion specifiers understood by strftime"
|
||||||
"() to obtain a specific format. See the strftime() manual for more "
|
"() to obtain a specific format. See the strftime() manual for more "
|
||||||
"information."
|
"information."
|
||||||
msgstr ""
|
msgstr "format (فورمات) كۇنۇپكىسى \"custom\" (ئىختىيارى) قىلىپ تەڭشەلسە بۇ كۇنۇپكا تاختا سائەت ئىشلىتىدىغان فورماتنى بەلگىلەيدۇ. سىز strftime()نىڭ فورمات بەلگىسىنى ئىشلىتىپ بەلگىلەنگەن فورماتقا ئېرىشەلەيسىز. تەپسىلاتىنى strftime() نىڭ قوللانمىسىدىن كۆرۈڭ."
|
||||||
"format (فورمات) كۇنۇپكىسى \"custom\" (ئىختىيارى) قىلىپ تەڭشەلسە بۇ كۇنۇپكا "
|
|
||||||
"تاختا سائەت ئىشلىتىدىغان فورماتنى بەلگىلەيدۇ. سىز strftime()نىڭ فورمات "
|
|
||||||
"بەلگىسىنى ئىشلىتىپ بەلگىلەنگەن فورماتقا ئېرىشەلەيسىز. تەپسىلاتىنى strftime() "
|
|
||||||
"نىڭ قوللانمىسىدىن كۆرۈڭ."
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key specifies the hour format used by the panel clock. Possible values "
|
"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\", "
|
"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
|
||||||
@ -208,20 +161,13 @@ msgid ""
|
|||||||
"to \"custom\", the clock will display time according to the format specified "
|
"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\", "
|
"in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
|
||||||
"the show_date and show_seconds keys are ignored."
|
"the show_date and show_seconds keys are ignored."
|
||||||
msgstr ""
|
msgstr "بۇ كۇنۇپكا تاختا سائەت ئىشلەتكەن سائەت فورماتىنى بەلگىلىگەن. ئىشلەتكىلى بولىدىغان قىممىتى \"12-hour\" يەنى (12 سائەت)، \"24-hour\" يەنى (24 سائەت)، \"unix\" ۋە \"custom\" (ئىختىيارى). ئەگەر \"unix\" قىلىپ تەڭشەلسە سائەت ئۆزلۈكىدىن يېڭى ئېرا (يەنى، 1970-01-01) دىن ئۆتكەن سېكۇنتنى ئاساس قىلىدۇ. ئەگەر \"custom\" قىلىپ تەڭشەلسە سائەت custom_format كۇنۇپكا قىممىتىگە ئاساسەن ۋاقىتنى كۆرسىتىدۇ. ئەگەر \"unix\" ياكى \"custom\" قىلىپ تەڭشەلسە show_date ۋە show_seconds قىممىتىگە پەرۋا قىلمايدۇ"
|
||||||
"بۇ كۇنۇپكا تاختا سائەت ئىشلەتكەن سائەت فورماتىنى بەلگىلىگەن. ئىشلەتكىلى "
|
|
||||||
"بولىدىغان قىممىتى \"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"
|
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"
|
msgid "Whether to collect stats about applications usage"
|
||||||
msgstr "پروگراممىنىڭ ئىشلىتىلىشى ھەققىدىكى ستاتىستىكىنى توپلامدۇ يوق"
|
msgstr "پروگراممىنىڭ ئىشلىتىلىشى ھەققىدىكى ستاتىستىكىنى توپلامدۇ يوق"
|
||||||
|
|
||||||
@ -237,8 +183,7 @@ msgstr "نىشانلىغۇچنىڭ رەڭگى"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"Determines the length of the vertical and horizontal lines that make up the "
|
"Determines the length of the vertical and horizontal lines that make up the "
|
||||||
"crosshairs."
|
"crosshairs."
|
||||||
msgstr ""
|
msgstr "نىشانلىغۇچنى ھاسىل قىلىدىغان توغرا ۋە بوي سىزىقنىڭ ئۇزۇنلۇقى بەلگىلىنىدۇ."
|
||||||
"نىشانلىغۇچنى ھاسىل قىلىدىغان توغرا ۋە بوي سىزىقنىڭ ئۇزۇنلۇقى بەلگىلىنىدۇ."
|
|
||||||
|
|
||||||
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
|
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -379,62 +324,45 @@ msgstr "_12 سائەت فورماتى"
|
|||||||
msgid "_24 hour format"
|
msgid "_24 hour format"
|
||||||
msgstr "_24 سائەت فورماتى"
|
msgstr "_24 سائەت فورماتى"
|
||||||
|
|
||||||
#. **** Applications ****
|
#: ../js/ui/appDisplay.js:154
|
||||||
#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
|
msgid "All"
|
||||||
|
msgstr "ھەممىسى"
|
||||||
|
|
||||||
|
#: ../js/ui/appDisplay.js:235
|
||||||
msgid "APPLICATIONS"
|
msgid "APPLICATIONS"
|
||||||
msgstr "پروگراممىلار"
|
msgstr "پروگراممىلار"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:348
|
#: ../js/ui/appDisplay.js:265
|
||||||
msgid "PREFERENCES"
|
msgid "PREFERENCES"
|
||||||
msgstr "مايىللىق"
|
msgstr "مايىللىق"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:647
|
#: ../js/ui/appDisplay.js:562
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "يېڭى كۆزنەك"
|
msgstr "يېڭى كۆزنەك"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:651
|
#: ../js/ui/appDisplay.js:566
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "يىغقۇچتىن چىقىرىۋەت"
|
msgstr "يىغقۇچتىن چىقىرىۋەت"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:652
|
#: ../js/ui/appDisplay.js:567
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "يىغقۇچقا قوش"
|
msgstr "يىغقۇچقا قوش"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:829
|
#: ../js/ui/appFavorites.js:91
|
||||||
msgid "Drag here to add favorites"
|
|
||||||
msgstr "بۇ جايغا سۆرەپ يىغقۇچقا قوش"
|
|
||||||
|
|
||||||
#: ../js/ui/appFavorites.js:88
|
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has been added to your favorites."
|
msgid "%s has been added to your favorites."
|
||||||
msgstr "%s يىغقۇچىڭىزغا قوشۇلدى."
|
msgstr "%s يىغقۇچىڭىزغا قوشۇلدى."
|
||||||
|
|
||||||
#: ../js/ui/appFavorites.js:107
|
#: ../js/ui/appFavorites.js:122
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has been removed from your favorites."
|
msgid "%s has been removed from your favorites."
|
||||||
msgstr "%s يىغقۇچىڭىزدىن چىقىرىۋېتىلىدۇ."
|
msgstr "%s يىغقۇچىڭىزدىن چىقىرىۋېتىلىدۇ."
|
||||||
|
|
||||||
#: ../js/ui/dash.js:142
|
#: ../js/ui/dash.js:27
|
||||||
msgid "Find"
|
msgid "Remove"
|
||||||
msgstr "ئىزدە"
|
msgstr "چىقىرىۋەت"
|
||||||
|
|
||||||
#: ../js/ui/dash.js:473
|
#: ../js/ui/docDisplay.js:494
|
||||||
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:558
|
|
||||||
msgid "PLACES & DEVICES"
|
|
||||||
msgstr "ئورۇن ۋە ئۈسكۈنىلەر"
|
|
||||||
|
|
||||||
#. **** Documents ****
|
|
||||||
#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
|
|
||||||
msgid "RECENT ITEMS"
|
msgid "RECENT ITEMS"
|
||||||
msgstr "يېقىنقى تۈرلەر"
|
msgstr "يېقىنقى تۈرلەر"
|
||||||
|
|
||||||
@ -468,63 +396,72 @@ msgstr "مەنبەنى كۆرسەت"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "توربەت"
|
msgstr "توربەت"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:160
|
#: ../js/ui/overview.js:96
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "يېنىۋال"
|
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
|
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||||
#: ../js/ui/panel.js:470
|
#: ../js/ui/panel.js:474
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Quit %s"
|
msgid "Quit %s"
|
||||||
msgstr "%s چېكىن"
|
msgstr "%s چېكىن"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:495
|
#: ../js/ui/panel.js:499
|
||||||
msgid "Preferences"
|
msgid "Preferences"
|
||||||
msgstr "مايىللىق"
|
msgstr "مايىللىق"
|
||||||
|
|
||||||
#. Translators: This is the time format with date used
|
#. Translators: This is the time format with date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/panel.js:581
|
#: ../js/ui/panel.js:585
|
||||||
msgid "%a %b %e, %R:%S"
|
msgid "%a %b %e, %R:%S"
|
||||||
msgstr "%a %b %e، %R:%S"
|
msgstr "%a %b %e، %R:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:582
|
#: ../js/ui/panel.js:586
|
||||||
msgid "%a %b %e, %R"
|
msgid "%a %b %e, %R"
|
||||||
msgstr "%a %b %e، %R"
|
msgstr "%a %b %e، %R"
|
||||||
|
|
||||||
#. Translators: This is the time format without date used
|
#. Translators: This is the time format without date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/panel.js:586
|
#: ../js/ui/panel.js:590
|
||||||
msgid "%a %R:%S"
|
msgid "%a %R:%S"
|
||||||
msgstr "%a %R:%S"
|
msgstr "%a %R:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:587
|
#: ../js/ui/panel.js:591
|
||||||
msgid "%a %R"
|
msgid "%a %R"
|
||||||
msgstr "%a %R"
|
msgstr "%a %R"
|
||||||
|
|
||||||
#. Translators: This is a time format with date used
|
#. Translators: This is a time format with date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/panel.js:594
|
#: ../js/ui/panel.js:598
|
||||||
msgid "%a %b %e, %l:%M:%S %p"
|
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:595
|
#: ../js/ui/panel.js:599
|
||||||
msgid "%a %b %e, %l:%M %p"
|
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
|
#. Translators: This is a time format without date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/panel.js:599
|
#: ../js/ui/panel.js:603
|
||||||
msgid "%a %l:%M:%S %p"
|
msgid "%a %l:%M:%S %p"
|
||||||
msgstr "%a %l:%M:%S %p"
|
msgstr "%a %l:%M:%S %p"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:600
|
#: ../js/ui/panel.js:604
|
||||||
msgid "%a %l:%M %p"
|
msgid "%a %l:%M %p"
|
||||||
msgstr "%p%l:%M (%a)"
|
msgstr "%p%l:%M (%a)"
|
||||||
|
|
||||||
#. Button on the left side of the panel.
|
#. 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".
|
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||||
#: ../js/ui/panel.js:745
|
#: ../js/ui/panel.js:749
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "پائالىيەتلەر"
|
msgstr "پائالىيەتلەر"
|
||||||
|
|
||||||
@ -541,6 +478,10 @@ msgstr "قايتا سىنا"
|
|||||||
msgid "Connect to..."
|
msgid "Connect to..."
|
||||||
msgstr "باغلىنىش…"
|
msgstr "باغلىنىش…"
|
||||||
|
|
||||||
|
#: ../js/ui/placeDisplay.js:558
|
||||||
|
msgid "PLACES & DEVICES"
|
||||||
|
msgstr "ئورۇن ۋە ئۈسكۈنىلەر"
|
||||||
|
|
||||||
#. Translators: this MUST be either "toggle-switch-us"
|
#. Translators: this MUST be either "toggle-switch-us"
|
||||||
#. (for toggle switches containing the English words
|
#. (for toggle switches containing the English words
|
||||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||||
@ -568,16 +509,14 @@ msgid "Busy"
|
|||||||
msgstr "ئالدىراش"
|
msgstr "ئالدىراش"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:114
|
#: ../js/ui/statusMenu.js:114
|
||||||
#, fuzzy
|
|
||||||
#| msgid "My Account..."
|
#| msgid "My Account..."
|
||||||
msgid "My Account"
|
msgid "My Account"
|
||||||
msgstr "ھېساباتىم…"
|
msgstr "ھېساباتىم"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:118
|
#: ../js/ui/statusMenu.js:118
|
||||||
#, fuzzy
|
|
||||||
#| msgid "System Settings..."
|
#| msgid "System Settings..."
|
||||||
msgid "System Settings"
|
msgid "System Settings"
|
||||||
msgstr "سىستېما تەڭشەكلىرى..."
|
msgstr "سىستېما تەڭشىكى"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:125
|
#: ../js/ui/statusMenu.js:125
|
||||||
msgid "Lock Screen"
|
msgid "Lock Screen"
|
||||||
@ -592,15 +531,18 @@ msgid "Log Out..."
|
|||||||
msgstr "تىزىمدىن چىقىش…"
|
msgstr "تىزىمدىن چىقىش…"
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:141
|
#: ../js/ui/statusMenu.js:141
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Suspend"
|
#| msgid "Suspend"
|
||||||
msgid "Suspend..."
|
msgid "Suspend..."
|
||||||
msgstr "توڭلات"
|
msgstr ""
|
||||||
|
|
||||||
#: ../js/ui/statusMenu.js:145
|
#: ../js/ui/statusMenu.js:145
|
||||||
msgid "Shut Down..."
|
msgid "Shut Down..."
|
||||||
msgstr "تاقا…"
|
msgstr "تاقا…"
|
||||||
|
|
||||||
|
#: ../js/ui/status/accessibility.js:82
|
||||||
|
msgid "Zoom"
|
||||||
|
msgstr "كېڭەيت تارايت"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:88
|
#: ../js/ui/status/accessibility.js:88
|
||||||
msgid "Screen Reader"
|
msgid "Screen Reader"
|
||||||
msgstr "ئېكران ئوقۇغۇچ"
|
msgstr "ئېكران ئوقۇغۇچ"
|
||||||
@ -641,9 +583,262 @@ msgstr "يۇقىرى ئاق-قارىلىقى"
|
|||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr "چوڭ تېكىست"
|
msgstr "چوڭ تېكىست"
|
||||||
|
|
||||||
#: ../js/ui/status/accessibility.js:224
|
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:200
|
||||||
msgid "Zoom"
|
msgid "Bluetooth"
|
||||||
msgstr "كېڭەيت تارايت"
|
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
|
#: ../js/ui/windowAttentionHandler.js:43
|
||||||
#, c-format
|
#, c-format
|
||||||
@ -655,12 +850,12 @@ msgstr "%s باشلاشنى تاماملىدى"
|
|||||||
msgid "'%s' is ready"
|
msgid "'%s' is ready"
|
||||||
msgstr "«%s» تەييار"
|
msgstr "«%s» تەييار"
|
||||||
|
|
||||||
#: ../js/ui/workspacesView.js:229
|
#: ../js/ui/workspacesView.js:244
|
||||||
msgid ""
|
msgid ""
|
||||||
"Can't add a new workspace because maximum workspaces limit has been reached."
|
"Can't add a new workspace because maximum workspaces limit has been reached."
|
||||||
msgstr "يېڭى خىزمەت رايونى قوشالمايدۇ چۈنكى ئەڭ كۆپ خىزمەت رايون چېكىگە يەتتى."
|
msgstr "يېڭى خىزمەت رايونى قوشالمايدۇ چۈنكى ئەڭ كۆپ خىزمەت رايون چېكىگە يەتتى."
|
||||||
|
|
||||||
#: ../js/ui/workspacesView.js:246
|
#: ../js/ui/workspacesView.js:260
|
||||||
msgid "Can't remove the first workspace."
|
msgid "Can't remove the first workspace."
|
||||||
msgstr "بىرىنچى خىزمەت رايونىنى چىقىرىۋەتكىلى بولمايدۇ."
|
msgstr "بىرىنچى خىزمەت رايونىنى چىقىرىۋەتكىلى بولمايدۇ."
|
||||||
|
|
||||||
@ -684,33 +879,29 @@ msgstr[0] "%u كىرگۈزۈلمە"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "سىستېما ئاۋازى"
|
msgstr "سىستېما ئاۋازى"
|
||||||
|
|
||||||
#: ../src/shell-app-system.c:1012
|
#: ../src/shell-global.c:1155
|
||||||
msgid "Unknown"
|
|
||||||
msgstr "نامەلۇم"
|
|
||||||
|
|
||||||
#: ../src/shell-global.c:1163
|
|
||||||
msgid "Less than a minute ago"
|
msgid "Less than a minute ago"
|
||||||
msgstr "بىر مىنۇتتىنمۇ ئىلگىرى"
|
msgstr "بىر مىنۇتتىنمۇ ئىلگىرى"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1167
|
#: ../src/shell-global.c:1159
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d minute ago"
|
msgid "%d minute ago"
|
||||||
msgid_plural "%d minutes ago"
|
msgid_plural "%d minutes ago"
|
||||||
msgstr[0] "%d مىنۇت ئىلگىرى"
|
msgstr[0] "%d مىنۇت ئىلگىرى"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1172
|
#: ../src/shell-global.c:1164
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d hour ago"
|
msgid "%d hour ago"
|
||||||
msgid_plural "%d hours ago"
|
msgid_plural "%d hours ago"
|
||||||
msgstr[0] "%d سائەت ئىلگىرى"
|
msgstr[0] "%d سائەت ئىلگىرى"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1177
|
#: ../src/shell-global.c:1169
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d day ago"
|
msgid "%d day ago"
|
||||||
msgid_plural "%d days ago"
|
msgid_plural "%d days ago"
|
||||||
msgstr[0] "%d كۈن ئىلگىرى"
|
msgstr[0] "%d كۈن ئىلگىرى"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1182
|
#: ../src/shell-global.c:1174
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d week ago"
|
msgid "%d week ago"
|
||||||
msgid_plural "%d weeks ago"
|
msgid_plural "%d weeks ago"
|
||||||
@ -740,5 +931,27 @@ msgstr "ئىزدە"
|
|||||||
msgid "%1$s: %2$s"
|
msgid "%1$s: %2$s"
|
||||||
msgstr "%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"
|
#~ msgid "Invisible"
|
||||||
#~ msgstr "يوشۇرۇن"
|
#~ msgstr "يوشۇرۇن"
|
||||||
|
256
po/zh_CN.po
256
po/zh_CN.po
@ -7,14 +7,15 @@
|
|||||||
# Jessica Ban <bancage@gmail.com>, 2010.
|
# Jessica Ban <bancage@gmail.com>, 2010.
|
||||||
# YunQiang Su <wzssyqa@gmail.com>, 2010.
|
# YunQiang Su <wzssyqa@gmail.com>, 2010.
|
||||||
# zhang ping <zhangping159@gmail.com>, 2010.
|
# zhang ping <zhangping159@gmail.com>, 2010.
|
||||||
|
# 指冷玉笙寒 (dhyang) <dhyang555@gmail.com>, 2010
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
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-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&component=general\n"
|
"shell&component=general\n"
|
||||||
"POT-Creation-Date: 2010-12-10 00:17+0000\n"
|
"POT-Creation-Date: 2010-12-23 17:30+0000\n"
|
||||||
"PO-Revision-Date: 2010-12-12 15:45+0800\n"
|
"PO-Revision-Date: 2010-12-25 20:54+0800\n"
|
||||||
"Last-Translator: Aron Xu <happyaron.xu@gmail.com>\n"
|
"Last-Translator: Aron Xu <happyaron.xu@gmail.com>\n"
|
||||||
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
|
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -356,23 +357,28 @@ msgstr "_12 时格式"
|
|||||||
msgid "_24 hour format"
|
msgid "_24 hour format"
|
||||||
msgstr "_24 小时格式"
|
msgstr "_24 小时格式"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:215
|
#. Translators: Filter to display all applications
|
||||||
|
#: ../js/ui/appDisplay.js:155
|
||||||
|
msgid "All"
|
||||||
|
msgstr "全部"
|
||||||
|
|
||||||
|
#: ../js/ui/appDisplay.js:236
|
||||||
msgid "APPLICATIONS"
|
msgid "APPLICATIONS"
|
||||||
msgstr "应用程序"
|
msgstr "应用程序"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:245
|
#: ../js/ui/appDisplay.js:266
|
||||||
msgid "PREFERENCES"
|
msgid "PREFERENCES"
|
||||||
msgstr "首选项"
|
msgstr "首选项"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:542
|
#: ../js/ui/appDisplay.js:563
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "新窗口"
|
msgstr "新窗口"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:546
|
#: ../js/ui/appDisplay.js:567
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "从收藏夹中移除"
|
msgstr "从收藏夹中移除"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:547
|
#: ../js/ui/appDisplay.js:568
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "添加到收藏夹"
|
msgstr "添加到收藏夹"
|
||||||
|
|
||||||
@ -424,63 +430,71 @@ msgstr "查看源"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "网页"
|
msgstr "网页"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:112
|
#: ../js/ui/overview.js:96
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "撤销"
|
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
|
#. TODO - _quit() doesn't really work on apps in state STARTING yet
|
||||||
#: ../js/ui/panel.js:470
|
#: ../js/ui/panel.js:474
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Quit %s"
|
msgid "Quit %s"
|
||||||
msgstr "退出 %s"
|
msgstr "退出 %s"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:495
|
#: ../js/ui/panel.js:499
|
||||||
msgid "Preferences"
|
msgid "Preferences"
|
||||||
msgstr "首选项"
|
msgstr "首选项"
|
||||||
|
|
||||||
#. Translators: This is the time format with date used
|
#. Translators: This is the time format with date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/panel.js:581
|
#: ../js/ui/panel.js:585
|
||||||
msgid "%a %b %e, %R:%S"
|
msgid "%a %b %e, %R:%S"
|
||||||
msgstr "%A %b %e, %R:%S"
|
msgstr "%A %b %e, %R:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:582
|
#: ../js/ui/panel.js:586
|
||||||
msgid "%a %b %e, %R"
|
msgid "%a %b %e, %R"
|
||||||
msgstr "%A %m月%d日 %R"
|
msgstr "%A %m月%d日 %R"
|
||||||
|
|
||||||
#. Translators: This is the time format without date used
|
#. Translators: This is the time format without date used
|
||||||
#. in 24-hour mode.
|
#. in 24-hour mode.
|
||||||
#: ../js/ui/panel.js:586
|
#: ../js/ui/panel.js:590
|
||||||
msgid "%a %R:%S"
|
msgid "%a %R:%S"
|
||||||
msgstr "%A %R:%S"
|
msgstr "%A %R:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:587
|
#: ../js/ui/panel.js:591
|
||||||
msgid "%a %R"
|
msgid "%a %R"
|
||||||
msgstr "%A %R"
|
msgstr "%A %R"
|
||||||
|
|
||||||
#. Translators: This is a time format with date used
|
#. Translators: This is a time format with date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/panel.js:594
|
#: ../js/ui/panel.js:598
|
||||||
msgid "%a %b %e, %l:%M:%S %p"
|
msgid "%a %b %e, %l:%M:%S %p"
|
||||||
msgstr "%A %m月%d日 %p%I:%M:%S"
|
msgstr "%A %m月%d日 %p%I:%M:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:595
|
#: ../js/ui/panel.js:599
|
||||||
msgid "%a %b %e, %l:%M %p"
|
msgid "%a %b %e, %l:%M %p"
|
||||||
msgstr "%A %m月%d日 %p%I:%M"
|
msgstr "%A %m月%d日 %p%I:%M"
|
||||||
|
|
||||||
#. Translators: This is a time format without date used
|
#. Translators: This is a time format without date used
|
||||||
#. for AM/PM.
|
#. for AM/PM.
|
||||||
#: ../js/ui/panel.js:599
|
#: ../js/ui/panel.js:603
|
||||||
msgid "%a %l:%M:%S %p"
|
msgid "%a %l:%M:%S %p"
|
||||||
msgstr "%A %p%I:%M:%S"
|
msgstr "%A %p%I:%M:%S"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:600
|
#: ../js/ui/panel.js:604
|
||||||
msgid "%a %l:%M %p"
|
msgid "%a %l:%M %p"
|
||||||
msgstr "%a %l:%M %p"
|
msgstr "%a %l:%M %p"
|
||||||
|
|
||||||
#. Button on the left side of the panel.
|
#. 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".
|
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
|
||||||
#: ../js/ui/panel.js:745
|
#: ../js/ui/panel.js:749
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "活动"
|
msgstr "活动"
|
||||||
|
|
||||||
@ -599,87 +613,203 @@ msgstr "高对比度"
|
|||||||
msgid "Large Text"
|
msgid "Large Text"
|
||||||
msgstr "大号文本"
|
msgstr "大号文本"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:87
|
#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:234
|
||||||
msgid "What's using power..."
|
msgid "Bluetooth"
|
||||||
msgstr "哪些设备在用电..."
|
msgstr "蓝牙"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:90
|
#: ../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"
|
msgid "Power Settings"
|
||||||
msgstr "电源设置"
|
msgstr "电源设置"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:117
|
#: ../js/ui/status/power.js:112
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d hour remaining"
|
msgid "%d hour remaining"
|
||||||
msgid_plural "%d hours remaining"
|
msgid_plural "%d hours remaining"
|
||||||
msgstr[0] "剩余 %d 小时"
|
msgstr[0] "剩余 %d 小时"
|
||||||
|
|
||||||
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
|
||||||
#: ../js/ui/status/power.js:120
|
#: ../js/ui/status/power.js:115
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d %s %d %s remaining"
|
msgid "%d %s %d %s remaining"
|
||||||
msgstr "剩余 %d %s %d %s"
|
msgstr "剩余 %d %s %d %s"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:122
|
#: ../js/ui/status/power.js:117
|
||||||
msgid "hour"
|
msgid "hour"
|
||||||
msgid_plural "hours"
|
msgid_plural "hours"
|
||||||
msgstr[0] "小时"
|
msgstr[0] "小时"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:122
|
#: ../js/ui/status/power.js:117
|
||||||
msgid "minute"
|
msgid "minute"
|
||||||
msgid_plural "minutes"
|
msgid_plural "minutes"
|
||||||
msgstr[0] "分钟"
|
msgstr[0] "分钟"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:125
|
#: ../js/ui/status/power.js:120
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d minute remaining"
|
msgid "%d minute remaining"
|
||||||
msgid_plural "%d minutes remaining"
|
msgid_plural "%d minutes remaining"
|
||||||
msgstr[0] "剩余 %d 分钟"
|
msgstr[0] "剩余 %d 分钟"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:244
|
#: ../js/ui/status/power.js:237
|
||||||
msgid "AC adapter"
|
msgid "AC adapter"
|
||||||
msgstr "AC 适配器"
|
msgstr "AC 适配器"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:246
|
#: ../js/ui/status/power.js:239
|
||||||
msgid "Laptop battery"
|
msgid "Laptop battery"
|
||||||
msgstr "笔记本电池"
|
msgstr "笔记本电池"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:248
|
#: ../js/ui/status/power.js:241
|
||||||
msgid "UPS"
|
msgid "UPS"
|
||||||
msgstr "UPS"
|
msgstr "UPS"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:250
|
#: ../js/ui/status/power.js:243
|
||||||
msgid "Monitor"
|
msgid "Monitor"
|
||||||
msgstr "显示器"
|
msgstr "显示器"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:252
|
#: ../js/ui/status/power.js:245
|
||||||
msgid "Mouse"
|
msgid "Mouse"
|
||||||
msgstr "鼠标"
|
msgstr "鼠标"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:254
|
#: ../js/ui/status/power.js:247
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "键盘"
|
msgstr "键盘"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:256
|
#: ../js/ui/status/power.js:249
|
||||||
msgid "PDA"
|
msgid "PDA"
|
||||||
msgstr "PDA"
|
msgstr "PDA"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:258
|
#: ../js/ui/status/power.js:251
|
||||||
msgid "Cell phone"
|
msgid "Cell phone"
|
||||||
msgstr "手机"
|
msgstr "手机"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:260
|
#: ../js/ui/status/power.js:253
|
||||||
msgid "Media player"
|
msgid "Media player"
|
||||||
msgstr "媒体播放器"
|
msgstr "媒体播放器"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:262
|
#: ../js/ui/status/power.js:255
|
||||||
msgid "Tablet"
|
msgid "Tablet"
|
||||||
msgstr "触摸板"
|
msgstr "触摸板"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:264
|
#: ../js/ui/status/power.js:257
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "计算机"
|
msgstr "计算机"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:266 ../src/shell-app-system.c:1012
|
#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "未知"
|
msgstr "未知"
|
||||||
|
|
||||||
@ -691,9 +821,33 @@ msgstr "音量"
|
|||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "麦克风"
|
msgstr "麦克风"
|
||||||
|
|
||||||
#: ../js/ui/status/volume.js:62
|
#: ../js/ui/telepathyClient.js:560
|
||||||
msgid "Sound Settings"
|
#, c-format
|
||||||
msgstr "声音设置"
|
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
|
#: ../js/ui/viewSelector.js:26
|
||||||
msgid "Search your computer"
|
msgid "Search your computer"
|
||||||
@ -738,29 +892,29 @@ msgstr[0] "%u 个输入"
|
|||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "系统声音"
|
msgstr "系统声音"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1155
|
#: ../src/shell-global.c:1156
|
||||||
msgid "Less than a minute ago"
|
msgid "Less than a minute ago"
|
||||||
msgstr "少于一分钟前"
|
msgstr "少于一分钟前"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1159
|
#: ../src/shell-global.c:1160
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d minute ago"
|
msgid "%d minute ago"
|
||||||
msgid_plural "%d minutes ago"
|
msgid_plural "%d minutes ago"
|
||||||
msgstr[0] "%d 分钟前"
|
msgstr[0] "%d 分钟前"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1164
|
#: ../src/shell-global.c:1165
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d hour ago"
|
msgid "%d hour ago"
|
||||||
msgid_plural "%d hours ago"
|
msgid_plural "%d hours ago"
|
||||||
msgstr[0] "%d 小时前"
|
msgstr[0] "%d 小时前"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1169
|
#: ../src/shell-global.c:1170
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d day ago"
|
msgid "%d day ago"
|
||||||
msgid_plural "%d days ago"
|
msgid_plural "%d days ago"
|
||||||
msgstr[0] "%d 天前"
|
msgstr[0] "%d 天前"
|
||||||
|
|
||||||
#: ../src/shell-global.c:1174
|
#: ../src/shell-global.c:1175
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d week ago"
|
msgid "%d week ago"
|
||||||
msgid_plural "%d weeks ago"
|
msgid_plural "%d weeks ago"
|
||||||
@ -790,6 +944,9 @@ msgstr "搜索"
|
|||||||
msgid "%1$s: %2$s"
|
msgid "%1$s: %2$s"
|
||||||
msgstr "%1$s: %2$s"
|
msgstr "%1$s: %2$s"
|
||||||
|
|
||||||
|
#~ msgid "What's using power..."
|
||||||
|
#~ msgstr "哪些设备在用电..."
|
||||||
|
|
||||||
#~ msgid "Overview workspace view mode"
|
#~ msgid "Overview workspace view mode"
|
||||||
#~ msgstr "工作区视图模式的总览"
|
#~ msgstr "工作区视图模式的总览"
|
||||||
|
|
||||||
@ -830,9 +987,6 @@ msgstr "%1$s: %2$s"
|
|||||||
#~ msgid "%H:%M"
|
#~ msgid "%H:%M"
|
||||||
#~ msgstr "%H:%M"
|
#~ msgstr "%H:%M"
|
||||||
|
|
||||||
#~ msgid "Applications"
|
|
||||||
#~ msgstr "应用程序"
|
|
||||||
|
|
||||||
#~ msgid "Recent Documents"
|
#~ msgid "Recent Documents"
|
||||||
#~ msgstr "最近文档"
|
#~ msgstr "最近文档"
|
||||||
|
|
||||||
|
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
@ -100,13 +100,19 @@ st_source_h = \
|
|||||||
st/st-widget.h \
|
st/st-widget.h \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
st.h: Makefile
|
st.h: stamp-st.h
|
||||||
|
@true
|
||||||
|
stamp-st.h: Makefile
|
||||||
$(AM_V_GEN) (echo "#define ST_H_INSIDE 1"; \
|
$(AM_V_GEN) (echo "#define ST_H_INSIDE 1"; \
|
||||||
for name in $(st_source_h); do \
|
for name in $(st_source_h); do \
|
||||||
echo "#include <"$$name">"; \
|
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
|
BUILT_SOURCES += st.h
|
||||||
|
CLEANFILES += stamp-st.h
|
||||||
|
|
||||||
st_source_private_h = \
|
st_source_private_h = \
|
||||||
st/st-private.h \
|
st/st-private.h \
|
||||||
|
@ -15,7 +15,6 @@ TRAY_STAMP_FILES = stamp-na-marshal.h
|
|||||||
|
|
||||||
# please, keep this sorted alphabetically
|
# please, keep this sorted alphabetically
|
||||||
tray_source = \
|
tray_source = \
|
||||||
gtk-compat.h \
|
|
||||||
tray/na-tray-child.c \
|
tray/na-tray-child.c \
|
||||||
tray/na-tray-child.h \
|
tray/na-tray-child.h \
|
||||||
tray/na-tray-manager.c \
|
tray/na-tray-manager.c \
|
||||||
|
@ -8,7 +8,7 @@ noinst_PROGRAMS =
|
|||||||
|
|
||||||
.AUTOPARALLEL:
|
.AUTOPARALLEL:
|
||||||
|
|
||||||
bin_SCRIPTS = gnome-shell gnome-shell-clock-preferences
|
bin_SCRIPTS = gnome-shell
|
||||||
|
|
||||||
gnome-shell: gnome-shell.in
|
gnome-shell: gnome-shell.in
|
||||||
$(AM_V_GEN) sed -e "s|@MUTTER_BIN_DIR[@]|$(MUTTER_BIN_DIR)|" \
|
$(AM_V_GEN) sed -e "s|@MUTTER_BIN_DIR[@]|$(MUTTER_BIN_DIR)|" \
|
||||||
@ -23,15 +23,6 @@ gnome-shell: gnome-shell.in
|
|||||||
CLEANFILES += gnome-shell
|
CLEANFILES += gnome-shell
|
||||||
EXTRA_DIST += gnome-shell.in
|
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-gdmuser.am
|
||||||
include Makefile-st.am
|
include Makefile-st.am
|
||||||
include Makefile-tray.am
|
include Makefile-tray.am
|
||||||
@ -68,7 +59,6 @@ shell_public_headers_h = \
|
|||||||
shell-embedded-window.h \
|
shell-embedded-window.h \
|
||||||
shell-generic-container.h \
|
shell-generic-container.h \
|
||||||
shell-gtk-embed.h \
|
shell-gtk-embed.h \
|
||||||
shell-process.h \
|
|
||||||
shell-global.h \
|
shell-global.h \
|
||||||
shell-perf-log.h \
|
shell-perf-log.h \
|
||||||
shell-slicer.h \
|
shell-slicer.h \
|
||||||
@ -90,7 +80,6 @@ libgnome_shell_la_SOURCES = \
|
|||||||
shell-window-tracker-private.h \
|
shell-window-tracker-private.h \
|
||||||
shell-wm-private.h \
|
shell-wm-private.h \
|
||||||
gnome-shell-plugin.c \
|
gnome-shell-plugin.c \
|
||||||
gtk-compat.h \
|
|
||||||
shell-app.c \
|
shell-app.c \
|
||||||
shell-app-system.c \
|
shell-app-system.c \
|
||||||
shell-app-usage.c \
|
shell-app-usage.c \
|
||||||
@ -100,7 +89,6 @@ libgnome_shell_la_SOURCES = \
|
|||||||
shell-embedded-window.c \
|
shell-embedded-window.c \
|
||||||
shell-generic-container.c \
|
shell-generic-container.c \
|
||||||
shell-gtk-embed.c \
|
shell-gtk-embed.c \
|
||||||
shell-process.c \
|
|
||||||
shell-global.c \
|
shell-global.c \
|
||||||
shell-perf-log.c \
|
shell-perf-log.c \
|
||||||
shell-slicer.c \
|
shell-slicer.c \
|
||||||
|
@ -3059,15 +3059,6 @@ gdm_user_manager_finalize (GObject *object)
|
|||||||
G_OBJECT_CLASS (gdm_user_manager_parent_class)->finalize (object);
|
G_OBJECT_CLASS (gdm_user_manager_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
gdm_user_muted_debug_log_handler (const char *log_domain,
|
|
||||||
GLogLevelFlags log_level,
|
|
||||||
const char *message,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
/* Intentionally empty to discard message */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gdm_user_manager_ref_default:
|
* gdm_user_manager_ref_default:
|
||||||
*
|
*
|
||||||
@ -3086,11 +3077,6 @@ gdm_user_manager_ref_default (void)
|
|||||||
user_manager_object = g_object_new (GDM_TYPE_USER_MANAGER, NULL);
|
user_manager_object = g_object_new (GDM_TYPE_USER_MANAGER, NULL);
|
||||||
g_object_add_weak_pointer (user_manager_object,
|
g_object_add_weak_pointer (user_manager_object,
|
||||||
(gpointer *) &user_manager_object);
|
(gpointer *) &user_manager_object);
|
||||||
|
|
||||||
/* We don't normally care about user manager messages in the shell,
|
|
||||||
* so mute them */
|
|
||||||
g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,
|
|
||||||
gdm_user_muted_debug_log_handler, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return GDM_USER_MANAGER (user_manager_object);
|
return GDM_USER_MANAGER (user_manager_object);
|
||||||
|
@ -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@ --js-version 1.8 -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_error_base;
|
||||||
int glx_event_base;
|
int glx_event_base;
|
||||||
guint have_swap_event : 1;
|
guint have_swap_event : 1;
|
||||||
|
|
||||||
|
ShellGlobal *global;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GnomeShellPluginClass
|
struct _GnomeShellPluginClass
|
||||||
@ -299,8 +301,101 @@ add_statistics (GnomeShellPlugin *shell_plugin)
|
|||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* This is an IBus workaround. The flow of events with IBus is that every time
|
||||||
|
* it gets gets a key event, it:
|
||||||
|
*
|
||||||
|
* Sends it to the daemon via D-Bus asynchronously
|
||||||
|
* When it gets an reply, synthesizes a new GdkEvent and puts it into the
|
||||||
|
* GDK event queue with gdk_event_put(), including
|
||||||
|
* IBUS_FORWARD_MASK = 1 << 25 in the state to prevent a loop.
|
||||||
|
*
|
||||||
|
* (Normally, IBus uses the GTK+ key snooper mechanism to get the key
|
||||||
|
* events early, but since our key events aren't visible to GTK+ key snoopers,
|
||||||
|
* IBus will instead get the events via the standard
|
||||||
|
* GtkIMContext.filter_keypress() mechanism.)
|
||||||
|
*
|
||||||
|
* There are a number of potential problems here; probably the worst
|
||||||
|
* problem is that IBus doesn't forward the timestamp with the event
|
||||||
|
* so that every key event that gets delivered ends up with
|
||||||
|
* GDK_CURRENT_TIME. This creates some very subtle bugs; for example
|
||||||
|
* if you have IBus running and a keystroke is used to trigger
|
||||||
|
* launching an application, focus stealing prevention won't work
|
||||||
|
* right. http://code.google.com/p/ibus/issues/detail?id=1184
|
||||||
|
*
|
||||||
|
* In any case, our normal flow of key events is:
|
||||||
|
*
|
||||||
|
* GDK filter function => clutter_x11_handle_event => clutter actor
|
||||||
|
*
|
||||||
|
* So, if we see a key event that gets delivered via the GDK event handler
|
||||||
|
* function - then we know it must be one of these synthesized events, and
|
||||||
|
* we should push it back to clutter.
|
||||||
|
*
|
||||||
|
* To summarize, the full key event flow with IBus is:
|
||||||
|
*
|
||||||
|
* GDK filter function
|
||||||
|
* => Mutter
|
||||||
|
* => gnome_shell_plugin_xevent_filter()
|
||||||
|
* => clutter_x11_handle_event()
|
||||||
|
* => clutter event delivery to actor
|
||||||
|
* => gtk_im_context_filter_event()
|
||||||
|
* => sent to IBus daemon
|
||||||
|
* => response received from IBus daemon
|
||||||
|
* => gdk_event_put()
|
||||||
|
* => GDK event handler
|
||||||
|
* => <this function>
|
||||||
|
* => clutter_event_put()
|
||||||
|
* => clutter event delivery to actor
|
||||||
|
*
|
||||||
|
* Anything else we see here we just pass on to the normal GDK event handler
|
||||||
|
* gtk_main_do_event().
|
||||||
|
*/
|
||||||
static void
|
static void
|
||||||
gvc_muted_debug_log_handler (const char *log_domain,
|
gnome_shell_gdk_event_handler (GdkEvent *event_gdk,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
if (event_gdk->type == GDK_KEY_PRESS || event_gdk->type == GDK_KEY_RELEASE)
|
||||||
|
{
|
||||||
|
ClutterActor *stage;
|
||||||
|
Window stage_xwindow;
|
||||||
|
|
||||||
|
stage = clutter_stage_get_default ();
|
||||||
|
stage_xwindow = clutter_x11_get_stage_window (CLUTTER_STAGE (stage));
|
||||||
|
|
||||||
|
if (GDK_WINDOW_XID (event_gdk->key.window) == stage_xwindow)
|
||||||
|
{
|
||||||
|
ClutterDeviceManager *device_manager = clutter_device_manager_get_default ();
|
||||||
|
ClutterInputDevice *keyboard = clutter_device_manager_get_core_device (device_manager,
|
||||||
|
CLUTTER_KEYBOARD_DEVICE);
|
||||||
|
|
||||||
|
ClutterEvent *event_clutter = clutter_event_new ((event_gdk->type == GDK_KEY_RELEASE) ?
|
||||||
|
CLUTTER_KEY_PRESS : CLUTTER_KEY_RELEASE);
|
||||||
|
event_clutter->key.time = event_gdk->key.time;
|
||||||
|
event_clutter->key.flags = CLUTTER_EVENT_NONE;
|
||||||
|
event_clutter->key.stage = CLUTTER_STAGE (stage);
|
||||||
|
event_clutter->key.source = NULL;
|
||||||
|
|
||||||
|
/* This depends on ClutterModifierType and GdkModifierType being
|
||||||
|
* identical, which they are currently. (They both match the X
|
||||||
|
* modifier state in the low 16-bits and have the same extensions.) */
|
||||||
|
event_clutter->key.modifier_state = event_gdk->key.state;
|
||||||
|
|
||||||
|
event_clutter->key.keyval = event_gdk->key.keyval;
|
||||||
|
event_clutter->key.hardware_keycode = event_gdk->key.hardware_keycode;
|
||||||
|
event_clutter->key.unicode_value = gdk_keyval_to_unicode (event_clutter->key.keyval);
|
||||||
|
event_clutter->key.device = keyboard;
|
||||||
|
|
||||||
|
clutter_event_put (event_clutter);
|
||||||
|
clutter_event_free (event_clutter);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gtk_main_do_event (event_gdk);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
muted_log_handler (const char *log_domain,
|
||||||
GLogLevelFlags log_level,
|
GLogLevelFlags log_level,
|
||||||
const char *message,
|
const char *message,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
@ -320,7 +415,6 @@ gnome_shell_plugin_start (MetaPlugin *plugin)
|
|||||||
int status;
|
int status;
|
||||||
const char *shell_js;
|
const char *shell_js;
|
||||||
char **search_path;
|
char **search_path;
|
||||||
ShellGlobal *global;
|
|
||||||
const char *glx_extensions;
|
const char *glx_extensions;
|
||||||
|
|
||||||
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
|
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
|
||||||
@ -339,6 +433,8 @@ gnome_shell_plugin_start (MetaPlugin *plugin)
|
|||||||
NULL);
|
NULL);
|
||||||
update_font_options (settings);
|
update_font_options (settings);
|
||||||
|
|
||||||
|
gdk_event_handler_set (gnome_shell_gdk_event_handler, plugin, NULL);
|
||||||
|
|
||||||
screen = meta_plugin_get_screen (plugin);
|
screen = meta_plugin_get_screen (plugin);
|
||||||
display = meta_screen_get_display (screen);
|
display = meta_screen_get_display (screen);
|
||||||
|
|
||||||
@ -374,15 +470,19 @@ gnome_shell_plugin_start (MetaPlugin *plugin)
|
|||||||
NULL);
|
NULL);
|
||||||
g_strfreev(search_path);
|
g_strfreev(search_path);
|
||||||
|
|
||||||
/* Disable the gnome-volume-control debug */
|
/* Disable debug spew from various libraries */
|
||||||
g_log_set_handler ("Gvc", G_LOG_LEVEL_DEBUG,
|
g_log_set_handler ("Gvc", G_LOG_LEVEL_DEBUG,
|
||||||
gvc_muted_debug_log_handler, NULL);
|
muted_log_handler, NULL);
|
||||||
|
g_log_set_handler ("GdmUser", G_LOG_LEVEL_DEBUG,
|
||||||
|
muted_log_handler, NULL);
|
||||||
|
g_log_set_handler ("libgnome-bluetooth", G_LOG_LEVEL_DEBUG | G_LOG_LEVEL_MESSAGE,
|
||||||
|
muted_log_handler, NULL);
|
||||||
|
|
||||||
/* Initialize the global object here. */
|
/* 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_plugin (shell_plugin->global, META_PLUGIN(shell_plugin));
|
||||||
_shell_global_set_gjs_context (global, shell_plugin->gjs_context);
|
_shell_global_set_gjs_context (shell_plugin->global, shell_plugin->gjs_context);
|
||||||
|
|
||||||
add_statistics (shell_plugin);
|
add_statistics (shell_plugin);
|
||||||
|
|
||||||
@ -511,9 +611,9 @@ static gboolean
|
|||||||
gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
||||||
XEvent *xev)
|
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 &&
|
if (shell_plugin->have_swap_event &&
|
||||||
xev->type == (shell_plugin->glx_event_base + GLX_BufferSwapComplete))
|
xev->type == (shell_plugin->glx_event_base + GLX_BufferSwapComplete))
|
||||||
{
|
{
|
||||||
@ -545,6 +645,12 @@ gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
|||||||
&& xev->xcrossing.window == clutter_x11_get_stage_window (CLUTTER_STAGE (clutter_stage_get_default ())))
|
&& xev->xcrossing.window == clutter_x11_get_stage_window (CLUTTER_STAGE (clutter_stage_get_default ())))
|
||||||
return TRUE;
|
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;
|
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,
|
# dconf is linked without libtool, so unlike other GNOME modules,
|
||||||
# won't have an embedded rpath for its library directory.
|
# won't have an embedded rpath for its library directory.
|
||||||
env = dict(os.environ)
|
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']
|
ld_library_path = '@libdir@:' + env['LD_LIBRARY_PATH']
|
||||||
else:
|
else:
|
||||||
ld_library_path = '@libdir@'
|
ld_library_path = '@libdir@'
|
||||||
@ -246,7 +246,7 @@ def start_shell(perf_output=None):
|
|||||||
if pkgconfig.returncode == 0:
|
if pkgconfig.returncode == 0:
|
||||||
mozjs_libdir = re.sub('-(sdk|devel)', '', mozjs_sdkdir)
|
mozjs_libdir = re.sub('-(sdk|devel)', '', mozjs_sdkdir)
|
||||||
if os.path.exists(mozjs_libdir + '/libmozjs.so'):
|
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
|
ld_library_path = env['LD_LIBRARY_PATH'] + ':' + mozjs_libdir
|
||||||
else:
|
else:
|
||||||
ld_library_path = mozjs_libdir
|
ld_library_path = mozjs_libdir
|
||||||
@ -672,7 +672,8 @@ use an extension title clicktofocus@janedoe.example.com.'''
|
|||||||
os.makedirs(extension_path)
|
os.makedirs(extension_path)
|
||||||
meta = { 'name': name,
|
meta = { 'name': name,
|
||||||
'description': description,
|
'description': description,
|
||||||
'uuid': uuid }
|
'uuid': uuid,
|
||||||
|
'shell-version': ['@VERSION@'] }
|
||||||
f = open(os.path.join(extension_path, 'metadata.json'), 'w')
|
f = open(os.path.join(extension_path, 'metadata.json'), 'w')
|
||||||
try:
|
try:
|
||||||
json.dump(meta, f)
|
json.dump(meta, f)
|
||||||
|
@ -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__ */
|
|
@ -51,46 +51,52 @@ char *shell_app_info_get_description (ShellAppInfo *info);
|
|||||||
char *shell_app_info_get_executable (ShellAppInfo *info);
|
char *shell_app_info_get_executable (ShellAppInfo *info);
|
||||||
char *shell_app_info_get_desktop_file_path (ShellAppInfo *info);
|
char *shell_app_info_get_desktop_file_path (ShellAppInfo *info);
|
||||||
GIcon *shell_app_info_get_icon (ShellAppInfo *info);
|
GIcon *shell_app_info_get_icon (ShellAppInfo *info);
|
||||||
ClutterActor *shell_app_info_create_icon_texture (ShellAppInfo *info, float size);
|
ClutterActor *shell_app_info_create_icon_texture (ShellAppInfo *info,
|
||||||
|
float size);
|
||||||
char *shell_app_info_get_section (ShellAppInfo *info);
|
char *shell_app_info_get_section (ShellAppInfo *info);
|
||||||
gboolean shell_app_info_get_is_nodisplay (ShellAppInfo *info);
|
gboolean shell_app_info_get_is_nodisplay (ShellAppInfo *info);
|
||||||
gboolean shell_app_info_is_transient (ShellAppInfo *info);
|
gboolean shell_app_info_is_transient (ShellAppInfo *info);
|
||||||
|
|
||||||
MetaWindow *shell_app_info_get_source_window (ShellAppInfo *info);
|
MetaWindow *shell_app_info_get_source_window (ShellAppInfo *info);
|
||||||
|
|
||||||
|
gboolean shell_app_info_launch (ShellAppInfo *info,
|
||||||
|
GError **error);
|
||||||
gboolean shell_app_info_launch_full (ShellAppInfo *info,
|
gboolean shell_app_info_launch_full (ShellAppInfo *info,
|
||||||
guint timestamp,
|
guint timestamp,
|
||||||
GList *uris,
|
GList *uris,
|
||||||
int workspace,
|
int workspace,
|
||||||
char **startup_id,
|
char **startup_id,
|
||||||
GError **error);
|
GError **error);
|
||||||
gboolean shell_app_info_launch (ShellAppInfo *info,
|
|
||||||
GError **error);
|
|
||||||
|
|
||||||
ShellAppInfo *shell_app_system_load_from_desktop_file (ShellAppSystem *system, const char *filename, GError **error);
|
|
||||||
|
|
||||||
GList *shell_app_system_get_sections (ShellAppSystem *system);
|
GList *shell_app_system_get_sections (ShellAppSystem *system);
|
||||||
ShellApp *shell_app_system_get_app (ShellAppSystem *system, const char *id);
|
|
||||||
ShellApp *shell_app_system_get_app_for_path (ShellAppSystem *system, const char *desktop_path);
|
|
||||||
ShellApp *shell_app_system_get_app_for_window (ShellAppSystem *self, MetaWindow *window);
|
|
||||||
|
|
||||||
void _shell_app_system_register_app (ShellAppSystem *self, ShellApp *app);
|
|
||||||
|
|
||||||
ShellApp *shell_app_system_lookup_heuristic_basename (ShellAppSystem *system, const char *id);
|
|
||||||
|
|
||||||
ShellAppInfo *shell_app_system_create_from_window (ShellAppSystem *system, MetaWindow *window);
|
|
||||||
|
|
||||||
GSList *shell_app_system_get_flattened_apps (ShellAppSystem *system);
|
GSList *shell_app_system_get_flattened_apps (ShellAppSystem *system);
|
||||||
|
|
||||||
GSList *shell_app_system_get_all_settings (ShellAppSystem *system);
|
GSList *shell_app_system_get_all_settings (ShellAppSystem *system);
|
||||||
|
|
||||||
|
ShellApp *shell_app_system_get_app (ShellAppSystem *system,
|
||||||
|
const char *id);
|
||||||
|
ShellApp *shell_app_system_get_app_for_path (ShellAppSystem *system,
|
||||||
|
const char *desktop_path);
|
||||||
|
ShellApp *shell_app_system_get_app_for_window (ShellAppSystem *self,
|
||||||
|
MetaWindow *window);
|
||||||
|
ShellApp *shell_app_system_lookup_heuristic_basename (ShellAppSystem *system,
|
||||||
|
const char *id);
|
||||||
|
|
||||||
|
ShellAppInfo *shell_app_system_load_from_desktop_file (ShellAppSystem *system,
|
||||||
|
const char *filename,
|
||||||
|
GError **error);
|
||||||
|
ShellAppInfo *shell_app_system_create_from_window (ShellAppSystem *system,
|
||||||
|
MetaWindow *window);
|
||||||
|
|
||||||
GSList *shell_app_system_initial_search (ShellAppSystem *system,
|
GSList *shell_app_system_initial_search (ShellAppSystem *system,
|
||||||
gboolean prefs,
|
gboolean prefs,
|
||||||
GSList *terms);
|
GSList *terms);
|
||||||
|
|
||||||
GSList *shell_app_system_subsearch (ShellAppSystem *system,
|
GSList *shell_app_system_subsearch (ShellAppSystem *system,
|
||||||
gboolean prefs,
|
gboolean prefs,
|
||||||
GSList *previous_results,
|
GSList *previous_results,
|
||||||
GSList *terms);
|
GSList *terms);
|
||||||
|
|
||||||
|
/* internal API */
|
||||||
|
void _shell_app_system_register_app (ShellAppSystem *self,
|
||||||
|
ShellApp *app);
|
||||||
|
|
||||||
#endif /* __SHELL_APP_SYSTEM_H__ */
|
#endif /* __SHELL_APP_SYSTEM_H__ */
|
||||||
|
@ -577,7 +577,8 @@ shell_app_is_on_workspace (ShellApp *app,
|
|||||||
|
|
||||||
if (shell_app_get_state (app) == SHELL_APP_STATE_STARTING)
|
if (shell_app_get_state (app) == SHELL_APP_STATE_STARTING)
|
||||||
{
|
{
|
||||||
if (meta_workspace_index (workspace) == app->started_on_workspace)
|
if (app->started_on_workspace == -1 ||
|
||||||
|
meta_workspace_index (workspace) == app->started_on_workspace)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
else
|
else
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
#include <clutter/x11/clutter-x11.h>
|
#include <clutter/x11/clutter-x11.h>
|
||||||
|
|
||||||
#include "shell-embedded-window-private.h"
|
#include "shell-embedded-window-private.h"
|
||||||
#include "gtk-compat.h"
|
|
||||||
|
|
||||||
/* This type is a subclass of GtkWindow that ties the window to a
|
/* This type is a subclass of GtkWindow that ties the window to a
|
||||||
* ShellGtkEmbed; the window is reparented into the stage
|
* ShellGtkEmbed; the window is reparented into the stage
|
||||||
|
@ -233,6 +233,8 @@ shell_generic_container_set_skip_paint (ShellGenericContainer *self,
|
|||||||
g_hash_table_remove (self->priv->skip_paint, child);
|
g_hash_table_remove (self->priv->skip_paint, child);
|
||||||
else
|
else
|
||||||
g_hash_table_insert (self->priv->skip_paint, child, child);
|
g_hash_table_insert (self->priv->skip_paint, child, child);
|
||||||
|
|
||||||
|
clutter_actor_queue_redraw (CLUTTER_ACTOR (self));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -11,4 +11,6 @@ void _shell_global_set_plugin (ShellGlobal *global,
|
|||||||
void _shell_global_set_gjs_context (ShellGlobal *global,
|
void _shell_global_set_gjs_context (ShellGlobal *global,
|
||||||
GjsContext *context);
|
GjsContext *context);
|
||||||
|
|
||||||
|
gboolean _shell_global_check_xdnd_event (ShellGlobal *global,
|
||||||
|
XEvent *xev);
|
||||||
#endif /* __SHELL_GLOBAL_PRIVATE_H__ */
|
#endif /* __SHELL_GLOBAL_PRIVATE_H__ */
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "shell-enum-types.h"
|
#include "shell-enum-types.h"
|
||||||
#include "shell-perf-log.h"
|
#include "shell-perf-log.h"
|
||||||
#include "shell-window-tracker.h"
|
#include "shell-window-tracker.h"
|
||||||
|
#include "shell-marshal.h"
|
||||||
#include "shell-wm.h"
|
#include "shell-wm.h"
|
||||||
#include "st.h"
|
#include "st.h"
|
||||||
|
|
||||||
@ -26,6 +27,9 @@
|
|||||||
#include <X11/extensions/Xfixes.h>
|
#include <X11/extensions/Xfixes.h>
|
||||||
#include <gjs/gjs-module.h>
|
#include <gjs/gjs-module.h>
|
||||||
#include <canberra.h>
|
#include <canberra.h>
|
||||||
|
#include <libxml/xmlmemory.h>
|
||||||
|
#include <libxml/parser.h>
|
||||||
|
#include <libxml/tree.h>
|
||||||
#ifdef HAVE_SYS_RESOURCE_H
|
#ifdef HAVE_SYS_RESOURCE_H
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
#endif
|
#endif
|
||||||
@ -70,6 +74,8 @@ struct _ShellGlobal {
|
|||||||
|
|
||||||
/* For sound notifications */
|
/* For sound notifications */
|
||||||
ca_context *sound_context;
|
ca_context *sound_context;
|
||||||
|
|
||||||
|
guint32 xdnd_timestamp;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
@ -92,8 +98,19 @@ enum {
|
|||||||
PROP_FOCUS_MANAGER,
|
PROP_FOCUS_MANAGER,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Signals */
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
XDND_POSITION_CHANGED,
|
||||||
|
XDND_LEAVE,
|
||||||
|
XDND_ENTER,
|
||||||
|
LAST_SIGNAL
|
||||||
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE(ShellGlobal, shell_global, G_TYPE_OBJECT);
|
G_DEFINE_TYPE(ShellGlobal, shell_global, G_TYPE_OBJECT);
|
||||||
|
|
||||||
|
static guint shell_global_signals [LAST_SIGNAL] = { 0 };
|
||||||
|
|
||||||
static void
|
static void
|
||||||
shell_global_set_property(GObject *object,
|
shell_global_set_property(GObject *object,
|
||||||
guint prop_id,
|
guint prop_id,
|
||||||
@ -238,6 +255,36 @@ shell_global_class_init (ShellGlobalClass *klass)
|
|||||||
gobject_class->get_property = shell_global_get_property;
|
gobject_class->get_property = shell_global_get_property;
|
||||||
gobject_class->set_property = shell_global_set_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,
|
g_object_class_install_property (gobject_class,
|
||||||
PROP_OVERLAY_GROUP,
|
PROP_OVERLAY_GROUP,
|
||||||
g_param_spec_object ("overlay-group",
|
g_param_spec_object ("overlay-group",
|
||||||
@ -530,7 +577,8 @@ shell_global_set_cursor (ShellGlobal *global,
|
|||||||
{
|
{
|
||||||
ClutterStage *stage = CLUTTER_STAGE (meta_plugin_get_stage (global->plugin));
|
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);
|
gdk_window_set_cursor (global->stage_window, cursor);
|
||||||
@ -1025,6 +1073,136 @@ shell_global_breakpoint (ShellGlobal *global)
|
|||||||
G_BREAKPOINT ();
|
G_BREAKPOINT ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* shell_global_parse_search_provider:
|
||||||
|
* @global: A #ShellGlobal
|
||||||
|
* @data: description of provider
|
||||||
|
* @name: (out): location to store a display name
|
||||||
|
* @url: (out): location to store template of url
|
||||||
|
* @langs: (out) (transfer full) (element-type utf8): list of supported languages
|
||||||
|
* @icon_data_uri: (out): location to store uri
|
||||||
|
* @error: location to store GError
|
||||||
|
*
|
||||||
|
* Returns: %TRUE on success
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
shell_global_parse_search_provider (ShellGlobal *global,
|
||||||
|
const char *data,
|
||||||
|
char **name,
|
||||||
|
char **url,
|
||||||
|
GList **langs,
|
||||||
|
char **icon_data_uri,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
xmlDocPtr doc = xmlParseMemory (data, strlen(data));
|
||||||
|
xmlNode *root;
|
||||||
|
|
||||||
|
*name = NULL;
|
||||||
|
*url = NULL;
|
||||||
|
*icon_data_uri = NULL;
|
||||||
|
*langs = NULL;
|
||||||
|
|
||||||
|
if (!doc)
|
||||||
|
{
|
||||||
|
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Malformed xml");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
root = xmlDocGetRootElement (doc);
|
||||||
|
if (root && root->name && xmlStrcmp (root->name, (const xmlChar *)"OpenSearchDescription") == 0)
|
||||||
|
{
|
||||||
|
xmlNode *child;
|
||||||
|
for (child = root->children; child; child = child->next)
|
||||||
|
{
|
||||||
|
if (!child->name)
|
||||||
|
continue;
|
||||||
|
if (xmlStrcmp (child->name, (const xmlChar *)"Language") == 0)
|
||||||
|
{
|
||||||
|
xmlChar *val = xmlNodeListGetString(doc, child->xmlChildrenNode, 1);
|
||||||
|
if (!val)
|
||||||
|
continue;
|
||||||
|
*langs = g_list_append (*langs, g_strdup ((char *)val));
|
||||||
|
xmlFree (val);
|
||||||
|
}
|
||||||
|
if (!*name && xmlStrcmp (child->name, (const xmlChar *)"ShortName") == 0)
|
||||||
|
{
|
||||||
|
xmlChar *val = xmlNodeListGetString(doc, child->xmlChildrenNode, 1);
|
||||||
|
*name = g_strdup ((char *)val);
|
||||||
|
xmlFree (val);
|
||||||
|
}
|
||||||
|
if (!*icon_data_uri && xmlStrcmp (child->name, (const xmlChar *)"Image") == 0)
|
||||||
|
{
|
||||||
|
xmlChar *val = xmlNodeListGetString(doc, child->xmlChildrenNode, 1);
|
||||||
|
if (val)
|
||||||
|
*icon_data_uri = g_strdup ((char *)val);
|
||||||
|
xmlFree (val);
|
||||||
|
}
|
||||||
|
if (!*url && xmlStrcmp (child->name, (const xmlChar *)"Url") == 0)
|
||||||
|
{
|
||||||
|
xmlChar *template;
|
||||||
|
xmlChar *type;
|
||||||
|
|
||||||
|
type = xmlGetProp(child, (const xmlChar *)"type");
|
||||||
|
if (!type)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (xmlStrcmp (type, (const xmlChar *)"text/html") != 0)
|
||||||
|
{
|
||||||
|
xmlFree (type);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
xmlFree (type);
|
||||||
|
|
||||||
|
template = xmlGetProp(child, (const xmlChar *)"template");
|
||||||
|
if (!template)
|
||||||
|
continue;
|
||||||
|
*url = g_strdup ((char *)template);
|
||||||
|
xmlFree (template);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Invalid OpenSearch document");
|
||||||
|
xmlFreeDoc (doc);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
xmlFreeDoc (doc);
|
||||||
|
if (*icon_data_uri && *name && *url)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
if (*icon_data_uri)
|
||||||
|
g_free (*icon_data_uri);
|
||||||
|
else
|
||||||
|
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||||
|
"search provider doesn't have icon");
|
||||||
|
|
||||||
|
if (*name)
|
||||||
|
g_free (*name);
|
||||||
|
else if (error && !*error)
|
||||||
|
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||||
|
"search provider doesn't have ShortName");
|
||||||
|
|
||||||
|
if (*url)
|
||||||
|
g_free (*url);
|
||||||
|
else if (error && !*error)
|
||||||
|
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||||
|
"search provider doesn't have template for url");
|
||||||
|
|
||||||
|
if (*langs)
|
||||||
|
{
|
||||||
|
g_list_foreach (*langs, (GFunc)g_free, NULL);
|
||||||
|
g_list_free (*langs);
|
||||||
|
}
|
||||||
|
|
||||||
|
*url = NULL;
|
||||||
|
*name = NULL;
|
||||||
|
*icon_data_uri = NULL;
|
||||||
|
*langs = NULL;
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* shell_global_gc:
|
* shell_global_gc:
|
||||||
* @global: A #ShellGlobal
|
* @global: A #ShellGlobal
|
||||||
@ -1129,6 +1307,39 @@ grab_notify (GtkWidget *widget, gboolean was_grabbed, gpointer user_data)
|
|||||||
shell_global_set_stage_input_mode (global, global->input_mode);
|
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:
|
* shell_global_format_time_relative_pretty:
|
||||||
* @global:
|
* @global:
|
||||||
@ -1421,6 +1632,10 @@ shell_global_get_current_time (ShellGlobal *global)
|
|||||||
guint32 time;
|
guint32 time;
|
||||||
MetaDisplay *display;
|
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
|
/* meta_display_get_current_time() will return the correct time
|
||||||
when handling an X or Gdk event, but will return CurrentTime
|
when handling an X or Gdk event, but will return CurrentTime
|
||||||
from some Clutter event callbacks.
|
from some Clutter event callbacks.
|
||||||
@ -1688,3 +1903,67 @@ shell_global_play_theme_sound (ShellGlobal *global,
|
|||||||
{
|
{
|
||||||
ca_context_play (global->sound_context, 0, CA_PROP_EVENT_ID, name, NULL);
|
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;
|
||||||
|
}
|
||||||
|
@ -84,6 +84,14 @@ void shell_global_reexec_self (ShellGlobal *global);
|
|||||||
|
|
||||||
void shell_global_breakpoint (ShellGlobal *global);
|
void shell_global_breakpoint (ShellGlobal *global);
|
||||||
|
|
||||||
|
gboolean shell_global_parse_search_provider (ShellGlobal *global,
|
||||||
|
const char *data,
|
||||||
|
char **name,
|
||||||
|
char **url,
|
||||||
|
GList **langs,
|
||||||
|
char **icon_data_uri,
|
||||||
|
GError **error);
|
||||||
|
|
||||||
void shell_global_gc (ShellGlobal *global);
|
void shell_global_gc (ShellGlobal *global);
|
||||||
|
|
||||||
void shell_global_maybe_gc (ShellGlobal *global);
|
void shell_global_maybe_gc (ShellGlobal *global);
|
||||||
@ -132,6 +140,8 @@ void shell_global_run_at_leisure (ShellGlobal *global,
|
|||||||
void shell_global_play_theme_sound (ShellGlobal *global,
|
void shell_global_play_theme_sound (ShellGlobal *global,
|
||||||
const char *name);
|
const char *name);
|
||||||
|
|
||||||
|
void shell_global_init_xdnd (ShellGlobal *global);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __SHELL_GLOBAL_H__ */
|
#endif /* __SHELL_GLOBAL_H__ */
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include "shell-embedded-window-private.h"
|
#include "shell-embedded-window-private.h"
|
||||||
#include "gtk-compat.h"
|
|
||||||
|
|
||||||
#include <gdk/gdkx.h>
|
#include <gdk/gdkx.h>
|
||||||
|
|
||||||
@ -167,25 +166,19 @@ shell_gtk_embed_get_preferred_height (ClutterActor *actor,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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);
|
ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
|
||||||
float wx = 0.0, wy = 0.0, x, y, ax, ay;
|
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)
|
/* Find the actor's new coordinates in terms of the stage (which is
|
||||||
return;
|
* priv->window's parent window.
|
||||||
|
|
||||||
/* 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.
|
|
||||||
*/
|
*/
|
||||||
clutter_actor_get_size (actor, &w, &h);
|
|
||||||
while (actor)
|
while (actor)
|
||||||
{
|
{
|
||||||
clutter_actor_get_position (actor, &x, &y);
|
clutter_actor_get_position (actor, &x, &y);
|
||||||
@ -199,7 +192,8 @@ shell_gtk_embed_paint (ClutterActor *actor)
|
|||||||
|
|
||||||
_shell_embedded_window_allocate (embed->priv->window,
|
_shell_embedded_window_allocate (embed->priv->window,
|
||||||
(int)(0.5 + wx), (int)(0.5 + wy),
|
(int)(0.5 + wx), (int)(0.5 + wy),
|
||||||
w, h);
|
box->x2 - box->x1,
|
||||||
|
box->y2 - box->y1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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_width = shell_gtk_embed_get_preferred_width;
|
||||||
actor_class->get_preferred_height = shell_gtk_embed_get_preferred_height;
|
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->realize = shell_gtk_embed_realize;
|
||||||
actor_class->unrealize = shell_gtk_embed_unrealize;
|
actor_class->unrealize = shell_gtk_embed_unrealize;
|
||||||
|
|
||||||
|
@ -4,3 +4,4 @@ VOID:BOXED
|
|||||||
VOID:BOXED,OBJECT
|
VOID:BOXED,OBJECT
|
||||||
VOID:OBJECT,OBJECT
|
VOID:OBJECT,OBJECT
|
||||||
VOID:STRING,OBJECT,BOOLEAN
|
VOID:STRING,OBJECT,BOOLEAN
|
||||||
|
VOID:INT,INT
|
||||||
|
@ -1,129 +0,0 @@
|
|||||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include "shell-process.h"
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
|
|
||||||
struct _ShellProcessPrivate {
|
|
||||||
char **args;
|
|
||||||
GPid pid;
|
|
||||||
};
|
|
||||||
|
|
||||||
enum {
|
|
||||||
PROP_0,
|
|
||||||
PROP_ARGS,
|
|
||||||
};
|
|
||||||
|
|
||||||
static void shell_process_dispose (GObject *object);
|
|
||||||
static void shell_process_finalize (GObject *object);
|
|
||||||
static void shell_process_set_property ( GObject *object,
|
|
||||||
guint property_id,
|
|
||||||
const GValue *value,
|
|
||||||
GParamSpec *pspec );
|
|
||||||
static void shell_process_get_property( GObject *object,
|
|
||||||
guint property_id,
|
|
||||||
GValue *value,
|
|
||||||
GParamSpec *pspec );
|
|
||||||
|
|
||||||
G_DEFINE_TYPE( ShellProcess, shell_process, G_TYPE_OBJECT);
|
|
||||||
|
|
||||||
static void shell_process_class_init( ShellProcessClass *klass)
|
|
||||||
{
|
|
||||||
GObjectClass *gobject_class = (GObjectClass *)klass;
|
|
||||||
|
|
||||||
gobject_class->dispose = shell_process_dispose;
|
|
||||||
gobject_class->finalize = shell_process_finalize;
|
|
||||||
gobject_class->set_property = shell_process_set_property;
|
|
||||||
gobject_class->get_property = shell_process_get_property;
|
|
||||||
|
|
||||||
g_object_class_install_property (gobject_class,
|
|
||||||
PROP_ARGS,
|
|
||||||
g_param_spec_boxed ("args",
|
|
||||||
"Arguments",
|
|
||||||
"",
|
|
||||||
G_TYPE_STRV,
|
|
||||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
static void shell_process_init (ShellProcess *self)
|
|
||||||
{
|
|
||||||
self->priv = g_new0 (ShellProcessPrivate, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void shell_process_dispose (GObject *object)
|
|
||||||
{
|
|
||||||
G_OBJECT_CLASS (shell_process_parent_class)->dispose(object);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void shell_process_finalize (GObject *object)
|
|
||||||
{
|
|
||||||
ShellProcess *self = (ShellProcess*)object;
|
|
||||||
|
|
||||||
g_free (self->priv);
|
|
||||||
g_signal_handlers_destroy(object);
|
|
||||||
G_OBJECT_CLASS (shell_process_parent_class)->finalize(object);
|
|
||||||
}
|
|
||||||
static void shell_process_set_property ( GObject *object,
|
|
||||||
guint property_id,
|
|
||||||
const GValue *value,
|
|
||||||
GParamSpec *pspec )
|
|
||||||
{
|
|
||||||
ShellProcess* self = SHELL_PROCESS(object);
|
|
||||||
switch (property_id) {
|
|
||||||
case PROP_ARGS:
|
|
||||||
self->priv->args = (char**) g_value_dup_boxed (value);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void shell_process_get_property ( GObject *object,
|
|
||||||
guint property_id,
|
|
||||||
GValue *value,
|
|
||||||
GParamSpec *pspec )
|
|
||||||
{
|
|
||||||
ShellProcess* self = SHELL_PROCESS(object);
|
|
||||||
switch (property_id) {
|
|
||||||
case PROP_ARGS:
|
|
||||||
g_value_set_boxed (value, self->priv->args);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ShellProcess* shell_process_new(char **args)
|
|
||||||
{
|
|
||||||
return (ShellProcess*) g_object_new(SHELL_TYPE_PROCESS,
|
|
||||||
"args", args,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean
|
|
||||||
shell_process_run (ShellProcess *self,
|
|
||||||
GError **error)
|
|
||||||
{
|
|
||||||
return g_spawn_async (NULL, self->priv->args, NULL,
|
|
||||||
G_SPAWN_SEARCH_PATH, NULL, NULL,
|
|
||||||
&self->priv->pid,
|
|
||||||
error);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
int
|
|
||||||
shell_process_wait (ShellProcess *self)
|
|
||||||
{
|
|
||||||
int status;
|
|
||||||
|
|
||||||
waitpid ((pid_t) self->priv->pid, &status, 0);
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
*/
|
|
@ -1,37 +0,0 @@
|
|||||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
|
||||||
#ifndef __SHELL_PROCESS_H__
|
|
||||||
#define __SHELL_PROCESS_H__
|
|
||||||
|
|
||||||
#include <glib-object.h>
|
|
||||||
|
|
||||||
#define SHELL_TYPE_PROCESS (shell_process_get_type ())
|
|
||||||
#define SHELL_PROCESS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_PROCESS, ShellProcess))
|
|
||||||
#define SHELL_PROCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_PROCESS, ShellProcessClass))
|
|
||||||
#define SHELL_IS_PROCESS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_PROCESS))
|
|
||||||
#define SHELL_IS_PROCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_PROCESS))
|
|
||||||
#define SHELL_PROCESS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_PROCESS, ShellProcessClass))
|
|
||||||
|
|
||||||
typedef struct _ShellProcess ShellProcess;
|
|
||||||
typedef struct _ShellProcessClass ShellProcessClass;
|
|
||||||
|
|
||||||
typedef struct _ShellProcessPrivate ShellProcessPrivate;
|
|
||||||
|
|
||||||
struct _ShellProcess
|
|
||||||
{
|
|
||||||
GObject parent;
|
|
||||||
|
|
||||||
ShellProcessPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _ShellProcessClass
|
|
||||||
{
|
|
||||||
GObjectClass parent_class;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
GType shell_process_get_type (void) G_GNUC_CONST;
|
|
||||||
ShellProcess* shell_process_new(char **args);
|
|
||||||
|
|
||||||
gboolean shell_process_run (ShellProcess *process, GError **error);
|
|
||||||
|
|
||||||
#endif /* __SHELL_PROCESS_H__ */
|
|
@ -5,7 +5,6 @@
|
|||||||
#include "shell-tray-icon.h"
|
#include "shell-tray-icon.h"
|
||||||
#include "shell-gtk-embed.h"
|
#include "shell-gtk-embed.h"
|
||||||
#include "shell-window-tracker.h"
|
#include "shell-window-tracker.h"
|
||||||
#include "gtk-compat.h"
|
|
||||||
#include "tray/na-tray-child.h"
|
#include "tray/na-tray-child.h"
|
||||||
#include <gdk/gdkx.h>
|
#include <gdk/gdkx.h>
|
||||||
#include "st.h"
|
#include "st.h"
|
||||||
|
@ -198,6 +198,7 @@ shell_tray_manager_manage_stage (ShellTrayManager *manager,
|
|||||||
{
|
{
|
||||||
Window stage_xwindow;
|
Window stage_xwindow;
|
||||||
GdkWindow *stage_window;
|
GdkWindow *stage_window;
|
||||||
|
GdkDisplay *display;
|
||||||
GdkScreen *screen;
|
GdkScreen *screen;
|
||||||
|
|
||||||
g_return_if_fail (manager->priv->stage == NULL);
|
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
|
* in in some way. (The Clutter/Mutter combo is currently incapable
|
||||||
* of multi-screen operation, so alternatively we could just assume
|
* of multi-screen operation, so alternatively we could just assume
|
||||||
* that clutter_x11_get_default_screen() gives us the right
|
* 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)
|
if (stage_window)
|
||||||
g_object_ref (stage_window);
|
g_object_ref (stage_window);
|
||||||
else
|
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);
|
screen = gdk_window_get_screen (stage_window);
|
||||||
|
|
||||||
|
@ -1213,3 +1213,14 @@ st_box_layout_insert_actor (StBoxLayout *self,
|
|||||||
clutter_container_add_actor((ClutterContainer*) self, actor);
|
clutter_container_add_actor((ClutterContainer*) self, actor);
|
||||||
st_container_move_child (ST_CONTAINER (self), actor, pos);
|
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,
|
ClutterActor *actor,
|
||||||
int pos);
|
int pos);
|
||||||
|
|
||||||
|
void st_box_layout_insert_before (StBoxLayout *self,
|
||||||
|
ClutterActor *actor,
|
||||||
|
ClutterActor *sibling);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* _ST_BOX_LAYOUT_H */
|
#endif /* _ST_BOX_LAYOUT_H */
|
||||||
|
@ -159,6 +159,29 @@ st_container_move_child (StContainer *container,
|
|||||||
clutter_actor_queue_relayout ((ClutterActor*) 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:
|
* st_container_get_children_list:
|
||||||
* @container: An #StContainer
|
* @container: An #StContainer
|
||||||
|
@ -62,6 +62,9 @@ GList * st_container_get_focus_chain (StContainer *container);
|
|||||||
void st_container_move_child (StContainer *container,
|
void st_container_move_child (StContainer *container,
|
||||||
ClutterActor *actor,
|
ClutterActor *actor,
|
||||||
int pos);
|
int pos);
|
||||||
|
void st_container_move_before (StContainer *container,
|
||||||
|
ClutterActor *actor,
|
||||||
|
ClutterActor *sibling);
|
||||||
GList * st_container_get_children_list (StContainer *container);
|
GList * st_container_get_children_list (StContainer *container);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
@ -149,7 +149,7 @@ st_icon_dispose (GObject *gobject)
|
|||||||
{
|
{
|
||||||
clutter_actor_destroy (priv->pending_texture);
|
clutter_actor_destroy (priv->pending_texture);
|
||||||
g_object_unref (priv->pending_texture);
|
g_object_unref (priv->pending_texture);
|
||||||
priv->icon_texture = NULL;
|
priv->pending_texture = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priv->gicon)
|
if (priv->gicon)
|
||||||
|
@ -61,6 +61,7 @@
|
|||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include <gdk/gdkkeysyms.h>
|
#include <gdk/gdkkeysyms.h>
|
||||||
|
#include <gdk/gdkx.h>
|
||||||
#include <X11/extensions/XKB.h>
|
#include <X11/extensions/XKB.h>
|
||||||
|
|
||||||
#include "st-im-text.h"
|
#include "st-im-text.h"
|
||||||
@ -200,11 +201,11 @@ window_for_actor (ClutterActor *actor)
|
|||||||
stage = clutter_actor_get_stage (actor);
|
stage = clutter_actor_get_stage (actor);
|
||||||
xwindow = clutter_x11_get_stage_window ((ClutterStage *)stage);
|
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)
|
if (window)
|
||||||
g_object_ref (window);
|
g_object_ref (window);
|
||||||
else
|
else
|
||||||
window = gdk_window_foreign_new_for_display (display, xwindow);
|
window = gdk_x11_window_foreign_new_for_display (display, xwindow);
|
||||||
|
|
||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
@ -437,6 +437,67 @@ out:
|
|||||||
return rotated_pixbuf;
|
return rotated_pixbuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GdkPixbuf*
|
||||||
|
decode_image (const char *val)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
GError *error = NULL;
|
||||||
|
GdkPixbuf *res = NULL;
|
||||||
|
struct {
|
||||||
|
const char *prefix;
|
||||||
|
const char *mime_type;
|
||||||
|
} formats[] = {
|
||||||
|
{ "data:image/x-icon;base64,", "image/x-icon" },
|
||||||
|
{ "data:image/png;base64,", "image/png" }
|
||||||
|
};
|
||||||
|
|
||||||
|
g_return_val_if_fail (val, NULL);
|
||||||
|
|
||||||
|
for (i = 0; i < G_N_ELEMENTS (formats); i++)
|
||||||
|
{
|
||||||
|
if (g_str_has_prefix (val, formats[i].prefix))
|
||||||
|
{
|
||||||
|
gsize len;
|
||||||
|
guchar *data = NULL;
|
||||||
|
char *unescaped;
|
||||||
|
|
||||||
|
unescaped = g_uri_unescape_string (val + strlen (formats[i].prefix), NULL);
|
||||||
|
if (unescaped)
|
||||||
|
{
|
||||||
|
data = g_base64_decode (unescaped, &len);
|
||||||
|
g_free (unescaped);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data)
|
||||||
|
{
|
||||||
|
GdkPixbufLoader *loader;
|
||||||
|
|
||||||
|
loader = gdk_pixbuf_loader_new_with_mime_type (formats[i].mime_type, &error);
|
||||||
|
if (loader &&
|
||||||
|
gdk_pixbuf_loader_write (loader, data, len, &error) &&
|
||||||
|
gdk_pixbuf_loader_close (loader, &error))
|
||||||
|
{
|
||||||
|
res = gdk_pixbuf_loader_get_pixbuf (loader);
|
||||||
|
g_object_ref (res);
|
||||||
|
}
|
||||||
|
g_object_unref (loader);
|
||||||
|
g_free (data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!res)
|
||||||
|
{
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
g_warning ("%s\n", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
g_warning ("incorrect data uri");
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
static GdkPixbuf *
|
static GdkPixbuf *
|
||||||
impl_load_pixbuf_file (const char *uri,
|
impl_load_pixbuf_file (const char *uri,
|
||||||
int available_width,
|
int available_width,
|
||||||
@ -448,6 +509,9 @@ impl_load_pixbuf_file (const char *uri,
|
|||||||
char *contents = NULL;
|
char *contents = NULL;
|
||||||
gsize size;
|
gsize size;
|
||||||
|
|
||||||
|
if (g_str_has_prefix (uri, "data:"))
|
||||||
|
return decode_image (uri);
|
||||||
|
|
||||||
file = g_file_new_for_uri (uri);
|
file = g_file_new_for_uri (uri);
|
||||||
if (g_file_load_contents (file, NULL, &contents, &size, NULL, error))
|
if (g_file_load_contents (file, NULL, &contents, &size, NULL, error))
|
||||||
{
|
{
|
||||||
@ -1615,7 +1679,7 @@ st_texture_cache_load_from_data (StTextureCache *cache,
|
|||||||
/**
|
/**
|
||||||
* st_texture_cache_load_from_raw:
|
* st_texture_cache_load_from_raw:
|
||||||
* @cache: a #StTextureCache
|
* @cache: a #StTextureCache
|
||||||
* @data: raw pixel data
|
* @data: (array length=len): raw pixel data
|
||||||
* @len: the length of @data
|
* @len: the length of @data
|
||||||
* @has_alpha: whether @data includes an alpha channel
|
* @has_alpha: whether @data includes an alpha channel
|
||||||
* @width: width in pixels of @data
|
* @width: width in pixels of @data
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "na-tray-child.h"
|
#include "na-tray-child.h"
|
||||||
#include "gtk-compat.h"
|
|
||||||
|
|
||||||
#include <glib/gi18n-lib.h>
|
#include <glib/gi18n-lib.h>
|
||||||
#include <gdk/gdk.h>
|
#include <gdk/gdk.h>
|
||||||
|
@ -25,9 +25,7 @@
|
|||||||
#include <libintl.h>
|
#include <libintl.h>
|
||||||
|
|
||||||
#include "na-tray-manager.h"
|
#include "na-tray-manager.h"
|
||||||
#include "gtk-compat.h"
|
|
||||||
|
|
||||||
#include <gdkconfig.h>
|
|
||||||
#include <glib/gi18n-lib.h>
|
#include <glib/gi18n-lib.h>
|
||||||
#if defined (GDK_WINDOWING_X11)
|
#if defined (GDK_WINDOWING_X11)
|
||||||
#include <gdk/gdkx.h>
|
#include <gdk/gdkx.h>
|
||||||
|
@ -62,7 +62,7 @@ fi
|
|||||||
# libxklavier, libxml2, ORBit2, pam, python, readline,
|
# libxklavier, libxml2, ORBit2, pam, python, readline,
|
||||||
# spidermonkey ({mozilla,firefox,xulrunner}-js), startup-notification,
|
# spidermonkey ({mozilla,firefox,xulrunner}-js), startup-notification,
|
||||||
# xdamage, icon-naming-utils, upower, libtool-ltdl, libvorbis,
|
# xdamage, icon-naming-utils, upower, libtool-ltdl, libvorbis,
|
||||||
# libgcrypt, libtasn1, libgnome-keyring
|
# libgcrypt, libtasn1, libgnome-keyring, libgtop, cups
|
||||||
#
|
#
|
||||||
# Non-devel packages needed by gnome-shell and its deps:
|
# Non-devel packages needed by gnome-shell and its deps:
|
||||||
# glxinfo, gstreamer-plugins-base, gstreamer-plugins-good,
|
# glxinfo, gstreamer-plugins-base, gstreamer-plugins-good,
|
||||||
@ -76,13 +76,14 @@ if test "x$system" = xUbuntu -o "x$system" = xDebian -o "x$system" = xLinuxMint
|
|||||||
build-essential curl
|
build-essential curl
|
||||||
automake bison flex gettext git-core gnome-common gtk-doc-tools
|
automake bison flex gettext git-core gnome-common gtk-doc-tools
|
||||||
gvfs gvfs-backends icon-naming-utils
|
gvfs gvfs-backends icon-naming-utils
|
||||||
libdbus-glib-1-dev libexpat-dev libffi-dev libgnome-menu-dev libgnome-desktop-dev
|
libdbus-glib-1-dev libexpat-dev libffi-dev libgnome-menu-dev libgnome-desktop-dev libgtop2-dev
|
||||||
libjasper-dev libjpeg-dev libpng-dev libstartup-notification0-dev libtiff-dev
|
libjasper-dev libjpeg-dev libpng-dev libstartup-notification0-dev libtiff-dev
|
||||||
libwnck-dev libgl1-mesa-dev liborbit2-dev libpulse-dev libreadline5-dev libxml2-dev
|
libwnck-dev libgl1-mesa-dev liborbit2-dev libpulse-dev libreadline5-dev libxml2-dev
|
||||||
mesa-common-dev mesa-utils libpam-dev python-dev python-gconf python-gobject
|
mesa-common-dev mesa-utils libpam-dev python-dev python-gconf python-gobject
|
||||||
xulrunner-dev xserver-xephyr gnome-terminal libcroco3-dev
|
xulrunner-dev xserver-xephyr gnome-terminal libcroco3-dev
|
||||||
libgstreamer0.10-dev gstreamer0.10-plugins-base gstreamer0.10-plugins-good
|
libgstreamer0.10-dev gstreamer0.10-plugins-base gstreamer0.10-plugins-good
|
||||||
libltdl-dev libvorbis-dev libxklavier-dev libgnome-keyring-dev libupower-glib-dev
|
libltdl-dev libvorbis-dev libxklavier-dev libgnome-keyring-dev
|
||||||
|
libupower-glib-dev libcups2-dev
|
||||||
"
|
"
|
||||||
|
|
||||||
if apt-cache show autopoint > /dev/null 2> /dev/null; then
|
if apt-cache show autopoint > /dev/null 2> /dev/null; then
|
||||||
@ -120,7 +121,7 @@ if test "x$system" = xFedora ; then
|
|||||||
startup-notification-devel xorg-x11-server-Xephyr gnome-terminal zenity
|
startup-notification-devel xorg-x11-server-Xephyr gnome-terminal zenity
|
||||||
icon-naming-utils upower-devel libtool-ltdl-devel libvorbis-devel
|
icon-naming-utils upower-devel libtool-ltdl-devel libvorbis-devel
|
||||||
libxklavier-devel libgcrypt-devel libtasn1-devel libtasn1-tools
|
libxklavier-devel libgcrypt-devel libtasn1-devel libtasn1-tools
|
||||||
libgnome-keyring-devel
|
libgnome-keyring-devel libgtop2-devel cups-devel
|
||||||
"
|
"
|
||||||
|
|
||||||
if expr $version \>= 14 > /dev/null ; then
|
if expr $version \>= 14 > /dev/null ; then
|
||||||
@ -143,7 +144,7 @@ if test "x$system" = xSUSE -o "x$system" = "xSUSE LINUX" ; then
|
|||||||
curl \
|
curl \
|
||||||
bison flex gtk-doc gnome-common gnome-doc-utils-devel \
|
bison flex gtk-doc gnome-common gnome-doc-utils-devel \
|
||||||
gnome-desktop-devel gnome-menus-devel icon-naming-utils \
|
gnome-desktop-devel gnome-menus-devel icon-naming-utils \
|
||||||
libpulse-devel libtiff-devel cups-devel libffi-devel \
|
libgtop-devel libpulse-devel libtiff-devel cups-devel libffi-devel \
|
||||||
orbit2-devel libwnck-devel xorg-x11-proto-devel readline-devel \
|
orbit2-devel libwnck-devel xorg-x11-proto-devel readline-devel \
|
||||||
mozilla-xulrunner191-devel libcroco-devel \
|
mozilla-xulrunner191-devel libcroco-devel \
|
||||||
xorg-x11-devel xorg-x11 xorg-x11-server-extra \
|
xorg-x11-devel xorg-x11 xorg-x11-server-extra \
|
||||||
|
@ -25,10 +25,10 @@
|
|||||||
<branch repo="git.gnome.org" module="glib"/>
|
<branch repo="git.gnome.org" module="glib"/>
|
||||||
</autotools>
|
</autotools>
|
||||||
|
|
||||||
<tarball id="vala" version="0.9.7" autogenargs="--enable-vapigen">
|
<tarball id="vala" version="0.11.4" autogenargs="--enable-vapigen">
|
||||||
<source href="http://ftp.gnome.org/pub/GNOME/sources/vala/0.9/vala-0.9.7.tar.bz2"
|
<source href="http://ftp.gnome.org/pub/GNOME/sources/vala/0.11/vala-0.11.4.tar.bz2"
|
||||||
hash="sha256:4a09219fc1abb960c17b4f7704332a4dd1edc21216520a3e5deeaac44cc6b4a7"
|
hash="sha256:98b3e9e94b5462e88b1ad46d018d830d0316e26c61e36bf778500b414342239d"
|
||||||
md5sum="3062fe00c0f5b8f40cd2a94ff9bbe2da" size="2394250"/>
|
md5sum="5d8c374b29c18bff14df7f5a7d64fda9" size="2852854"/>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dep package="glib"/>
|
<dep package="glib"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
Loading…
Reference in New Issue
Block a user