Compare commits

..

2 Commits

Author SHA1 Message Date
Ray Strode
9f925cf78d gdmUtil: enable support for GDM's ChoiceList PAM extension
This commit hooks up support for GDM's ChoiceList PAM extension.
2017-07-26 13:34:06 -04:00
Ray Strode
1fcb59104d gdm: add AuthList control
Ultimately, we want to add support for GDM's need ChoiceList
PAM extension.  That extension allows PAM modules to present
a list of choices to the user. Before we can support that
extension, however, we need to have a list control in the
login-screen/unlock screen.  This commit adds that control.

For the most part, it's a copy-and-paste of the gdm userlist,
but with less features.  It lacks API specific to the users,
lacks the built in timed login indicator, etc.
2017-07-25 10:33:16 -04:00
138 changed files with 15044 additions and 21390 deletions

18
.gitignore vendored
View File

@@ -6,8 +6,16 @@
ABOUT-NLS
ChangeLog
INSTALL
Makefile
Makefile.in
aclocal.m4
autom4te.cache
config.h
config.h.in
config.log
config.status
config
configure
data/org.gnome.Shell.desktop
data/org.gnome.Shell.desktop.in
data/gnome-shell-extension-prefs.desktop
@@ -33,9 +41,15 @@ docs/reference/*/*.types
docs/reference/*/html/
docs/reference/*/xml/
docs/reference/shell/doc-gen-*
gtk-doc.make
js/misc/config.js
js/js-resources.c
js/js-resources.h
intltool-extract.in
intltool-merge.in
intltool-update.in
libtool
m4/
man/gnome-shell.1
omf.make
po/*.gmo
@@ -44,6 +58,7 @@ po/*.header
po/*.sed
po/*.sin
po/.intltool-merge-cache
po/Makefile.in.in
po/Makevars.template
po/POTFILES
po/Rules-quot
@@ -53,6 +68,8 @@ src/*.gir
src/*.typelib
src/*-enum-types.[ch]
src/*-marshal.[ch]
src/Makefile
src/Makefile.in
src/calendar-server/evolution-calendar.desktop
src/calendar-server/org.gnome.Shell.CalendarServer.service
src/gnome-shell
@@ -76,6 +93,7 @@ src/st-scroll-view-fade-generated.c
src/stamp-st-scroll-view-fade-generated.c
stamp-h1
tests/run-test.sh
xmldocs.make
*~
*.patch
*.sw?

4
.gitmodules vendored
View File

@@ -1,6 +1,6 @@
[submodule "data/theme/gnome-shell-sass"]
path = data/theme/gnome-shell-sass
url = https://git.gnome.org/browse/gnome-shell-sass
url = git://git.gnome.org/gnome-shell-sass
[submodule "subprojects/gvc"]
path = subprojects/gvc
url = https://git.gnome.org/browse/libgnome-volume-control
url = git://git.gnome.org/libgnome-volume-control

33
Makefile.am Normal file
View File

@@ -0,0 +1,33 @@
# Point to our macro directory and pick up user flags from the environment
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
SUBDIRS = data js subprojects/gvc src tests po docs
if BUILD_BROWSER_PLUGIN
SUBDIRS += browser-plugin
endif
if ENABLE_MAN
SUBDIRS += man
endif
EXTRA_DIST = \
.project \
.settings \
autogen.sh \
tools/check-for-missing.py
# These are files checked into Git that we don't want to distribute
DIST_EXCLUDE = \
.gitignore \
.gitmodules \
gnome-shell.doap \
HACKING \
MAINTAINERS \
tools/build/*
distcheck-hook:
@echo "Checking disted files against files in git"
@$(srcdir)/tools/check-for-missing.py $(srcdir) $(distdir) $(DIST_EXCLUDE)
DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-man

98
NEWS
View File

@@ -1,101 +1,3 @@
3.26.2
======
* Dump javascript stack on aborts, traps and segfaults [Marco; #789237]
* Misc. bug fixes [Jonas, Florian, Alessandro; #788607, #789018, #789231,
#788542, #789103]
Contributors:
Jonas Ådahl, Alessandro Bono, Florian Müllner, Marco Trevisan (Treviño)
Translations:
Xavi Ivars [ca@valencia], Fabio Tomat [fur], Matej Urbančič [sl],
Hannie Dumoleyn [nl]
3.26.1
======
* Don't detach launched apps to not break pkexec and friends [Florian; #763531]
* Allow search providers to not autostart [Bastien, Florian; #785380, #787986]
* Fix crash when tray icons are hidden/shown in quick succession [Ray; #787361]
* Make window group switcher more consistent [Didier; #786009]
* Improve legibility of the top bar when translucent [Jakub; #787940]
* Don't crash when running outside a logind session [Florian; #788046]
* Allow to run headless [Mario, Jonas; #730551]
* Update calendar on timezone changes [Martin; #678507]
* Improve keyboard navigation of window previews [Florian; #786546]
* Run unit tests on `meson test` [Florian; #786497]
* Misc. bug fixes [Florian, Marc-Antoine, Mario, Jakub, Krzesimir; #787423,
#766368, #787580, #787907, #787901, #788039, #788003, #786343, #787902,
#788265, #788339, #787905, #788282, #787676]
Contributors:
Martin Andersson, Florian Müllner, Bastien Nocera, Krzesimir Nowak,
Marc-Antoine Perennou, Didier Roche, Mario Sanchez Prada, Jakub Steiner,
Ray Strode
Translations:
Efstathios Iosifidis [el], Khaled Hosny [ar], Stas Solovey [ru],
Arash Mousavi [fa], Sveinn í Felli [is], Athul R T [ml],
Cheng-Chia Tseng [zh_TW], Anders Jonsson [sv]
3.26.0
======
* Misc. bug fixes [Ray, Michael, Jonas; #786332] #786783, #786886, #786868]
Contributors:
Jonas Ådahl, Michael Catanzaro, Sebastian Keller, Ray Strode
Translations:
Daniel Mustieles [es], Fran Dieguez [gl], Baurzhan Muftakhidinov [kk],
Marek Cernocky [cs], Andika Triwidada [id], Aurimas Černius [lt],
Piotr Drąg [pl], Trần Ngọc Quân [vi], Jordi Mas [ca], Fabio Tomat [fur],
gogo [hr], Dušan Kazik [sk], Piotr Drąg [ne], Emin Tufan Çetin [tr],
Ask Hjorth Larsen [da], Cheng-Chia Tseng [zh_TW], Rūdolfs Mazurs [lv],
Balázs Meskó [hu], Matej Urbančič [sl], Jiri Grönroos [fi],
Милош Поповић [sr], Милош Поповић [sr@latin], Rafael Fontenelle [pt_BR],
Wolfgang Stöggl [de], Milo Casagrande [it], hanniedu [nl],
Yuras Shumovich [be], Changwoo Ryu [ko], Alain Lojewski [fr],
Alexander Shopov [bg], Daniel Korostil [uk], Kris Thomsen [da],
A S Alam [pa], Sebastian Rasmussen [sv], Inaki Larranaga Murgoitio [eu],
Jiro Matsuzawa [ja]
3.25.91
=======
* Open context menu of highlighted search result on Shift+F10 [Florian; #675315]
* Fix mid-sentence capitalization in weather forecasts [Florian; #779873]
* Add switcher popup to cycle through monitor configurations [Rui; #783550]
* Offer system actions in search [Rares; #691900]
* Misc. bug fixes [Mario, Florian, Rui; #777519, #786120, #786145, #786419,
#786526, #786520, #786520, #786146]
Contributors:
Emmanuele Bassi, Marek Cernocky, Piotr Drąg, Carlos Garnacho, Rui Matos,
Florian Müllner, Mario Sanchez Prada, Rares Visalom
Translations:
Marek Cernocky [cs], Piotr Drąg [pl], Muhammet Kara [tr],
Мирослав Николић [sr, sr@latin], Kukuh Syafaat [id],
Baurzhan Muftakhidinov [kk], Aurimas Černius [lt], Fran Dieguez [gl],
gogo [hr], Jordi Mas [ca]
3.25.90
=======
* Add permission dialog for inhibiting shortucts [Florian; #783342]
* Improve window picker layout [Florian, Jakub; #783953]
* Remove legacy status icon tray [Florian; #785956]
* Drop autotools support [Florian; #785153]
* Misc. bug fixes [Florian, Carlos, Cosimo; #785090, #785309, #767805,
#747794, #785358, #785556]
Contributors:
Emmanuele Bassi, Cosimo Cecchi, Carlos Garnacho, Florian Müllner,
Jakub Steiner
Translations:
Fabio Tomat [fur], Pawan Chitrakar [ne], Aurimas Černius [lt], gogo [hr],
Daniel Mustieles [es], Baurzhan Muftakhidinov [kk], Matej Urbančič [sl],
Marek Cernocky [cs], Dušan Kazik [sk], Jordi Mas [ca], Fran Dieguez [gl],
Andika Triwidada [id], Anders Jonsson [sv], Balázs Meskó [hu]
3.25.4
======
* gdm: Fix "Not listed" focus indication [Florian; #784040]

35
autogen.sh Executable file
View File

@@ -0,0 +1,35 @@
#!/bin/sh
# Run this to generate all the initial makefiles, etc.
srcdir=`dirname $0`
test -z "$srcdir" && srcdir=.
olddir="$(pwd)"
cd "${srcdir}"
(test -f configure.ac \
&& test -d src) || {
echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
echo " top-level gnome-shell directory"
exit 1
}
# Fetch submodules if needed
if test ! -f subprojects/gvc/Makefile.am || test ! -f data/theme/gnome-shell-sass/COPYING;
then
echo "+ Setting up submodules"
git submodule init
fi
git submodule update
aclocal --install || exit 1
gtkdocize --copy || exit 1
intltoolize --force --copy --automake || exit 1
autoreconf --verbose --force --install || exit 1
cd "${olddir}"
if [ "$NOCONFIGURE" = "" ]; then
"${srcdir}/configure" "$@" || exit 1
fi

View File

@@ -0,0 +1,23 @@
mozillalibdir = $(BROWSER_PLUGIN_DIR)
mozillalib_LTLIBRARIES = libgnome-shell-browser-plugin.la
# Browsers can unload and reload the module while browsing, which is not supported by GObject.
# We pass -Wl,-z,nodelete to the linker to ensure the module is never unloaded.
# https://bugzilla.gnome.org/show_bug.cgi?id=737932
libgnome_shell_browser_plugin_la_LDFLAGS = -module -avoid-version -no-undefined -Wl,-z,nodelete
libgnome_shell_browser_plugin_la_LIBADD = \
$(BROWSER_PLUGIN_LIBS)
libgnome_shell_browser_plugin_la_SOURCES = \
browser-plugin.c \
npapi/npapi.h \
npapi/npfunctions.h \
npapi/npruntime.h \
npapi/nptypes.h
libgnome_shell_browser_plugin_la_CFLAGS = \
$(BROWSER_PLUGIN_CFLAGS) \
-DG_LOG_DOMAIN=\"GnomeShellBrowserPlugin\"

158
configure vendored
View File

@@ -1,158 +0,0 @@
#!/bin/bash
# configure script adapter for Meson
# Based on build-api: https://github.com/cgwalters/build-api
# Copyright 2010, 2011, 2013 Colin Walters <walters@verbum.org>
# Copyright 2016, 2017 Emmanuele Bassi
# Licensed under the new-BSD license (http://www.opensource.org/licenses/bsd-license.php)
# Build API variables:
# Little helper function for reading args from the commandline.
# it automatically handles -a b and -a=b variants, and returns 1 if
# we need to shift $3.
read_arg() {
# $1 = arg name
# $2 = arg value
# $3 = arg parameter
local rematch='^[^=]*=(.*)$'
if [[ $2 =~ $rematch ]]; then
read "$1" <<< "${BASH_REMATCH[1]}"
else
read "$1" <<< "$3"
# There is no way to shift our callers args, so
# return 1 to indicate they should do it instead.
return 1
fi
}
sanitycheck() {
# $1 = arg name
# $1 = arg command
# $2 = arg alternates
local cmd=$( which $2 2>/dev/null )
if [ -x "$cmd" ]; then
read "$1" <<< "$cmd"
return 0
fi
test -z $3 || {
for alt in $3; do
cmd=$( which $alt 2>/dev/null )
if [ -x "$cmd" ]; then
read "$1" <<< "$cmd"
return 0
fi
done
}
echo -e "\e[1;31mERROR\e[0m: Command '$2' not found"
exit 1
}
sanitycheck MESON 'meson'
sanitycheck NINJA 'ninja' 'ninja-build'
enable_docs='-Denable-gtk-doc=false'
enable_man='-Denable-man=false'
enable_introspection=''
while (($# > 0)); do
case "${1%%=*}" in
--prefix) read_arg prefix "$@" || shift;;
--bindir) read_arg bindir "$@" || shift;;
--sbindir) read_arg sbindir "$@" || shift;;
--libexecdir) read_arg libexecdir "$@" || shift;;
--datarootdir) read_arg datarootdir "$@" || shift;;
--datadir) read_arg datadir "$@" || shift;;
--sysconfdir) read_arg sysconfdir "$@" || shift;;
--libdir) read_arg libdir "$@" || shift;;
--mandir) read_arg mandir "$@" || shift;;
--includedir) read_arg includedir "$@" || shift;;
--enable-gtk-doc) enable_docs='-Denable-gtk-doc=true';;
--disable-gtk-doc) enable_docs='-Denable-gtk-doc=false';;
--enable-man) enable_man='-Denable-man=true';;
--disable-man) enable_man='-Denable-man=false';;
--enable-introspection) enable_introspection='';;
--disable-introspection) enable_introspection='-Ddisable_introspection=true';;
*) echo -e "\e[1;33mINFO\e[0m: Ignoring unknown option '$1'";;
esac
shift
done
# Defaults
test -z ${prefix} && prefix="/usr/local"
test -z ${bindir} && bindir=${prefix}/bin
test -z ${sbindir} && sbindir=${prefix}/sbin
test -z ${libexecdir} && libexecdir=${prefix}/bin
test -z ${datarootdir} && datarootdir=${prefix}/share
test -z ${datadir} && datadir=${datarootdir}
test -z ${sysconfdir} && sysconfdir=${prefix}/etc
test -z ${libdir} && libdir=${prefix}/lib
test -z ${mandir} && mandir=${prefix}/share/man
test -z ${includedir} && includedir=${prefix}/include
# The source directory is the location of this file
srcdir=$(dirname $0)
# The build directory is the current location
builddir=`pwd`
# If we're calling this file from the source directory then
# we automatically create a build directory and ensure that
# both Meson and Ninja invocations are relative to that
# location
if [[ -f "${builddir}/meson.build" ]]; then
mkdir -p _build
builddir="${builddir}/_build"
NINJA_OPT="-C ${builddir}"
fi
# Wrapper Makefile for Ninja
cat > Makefile <<END
# Generated by configure; do not edit
all:
CC="\$(CC)" CXX="\$(CXX)" ${NINJA} ${NINJA_OPT}
install:
DESTDIR="\$(DESTDIR)" ${NINJA} ${NINJA_OPT} install
check:
${MESON} test ${NINJA_OPT}
END
echo "Summary:"
echo " meson:....... ${MESON}"
echo " ninja:....... ${NINJA}"
echo " prefix:...... ${prefix}"
echo " bindir:...... ${bindir}"
echo " sbindir:..... ${sbindir}"
echo " libexecdir:.. ${libexecdir}"
echo " datarootdir:. ${datarootdir}"
echo " datadir:..... ${datadir}"
echo " sysconfdir:.. ${sysconfdir}"
echo " libdir:...... ${libdir}"
echo " mandir:...... ${mandir}"
echo " includedir:.. ${includedir}"
echo " additional:.."
echo " - ${enable_docs} ${enable_man} ${enable_introspection}"
exec ${MESON} \
--prefix=${prefix} \
--libdir=${libdir} \
--libexecdir=${libexecdir} \
--datadir=${datadir} \
--sysconfdir=${sysconfdir} \
--bindir=${bindir} \
--includedir=${includedir} \
--mandir=${mandir} \
--default-library shared \
${enable_docs} \
${enable_man} \
${enable_introspection} \
${builddir} \
${srcdir}
# vim: ai ts=8 noet sts=2 ft=sh

280
configure.ac Normal file
View File

@@ -0,0 +1,280 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.25.4],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AX_IS_RELEASE([git-directory])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_AUX_DIR([config])
AC_SUBST([PACKAGE_NAME], ["$PACKAGE_NAME"])
AC_SUBST([PACKAGE_VERSION], ["$PACKAGE_VERSION"])
AM_INIT_AUTOMAKE([1.11 no-dist-gzip dist-xz tar-ustar foreign])
AM_MAINTAINER_MODE([enable])
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
# Checks for programs.
AC_PROG_CC
# Initialize libtool
LT_PREREQ([2.2.6])
LT_INIT([disable-static])
# i18n
GETTEXT_PACKAGE=gnome-shell
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
[The prefix for our gettext translation domains.])
AM_GNU_GETTEXT_VERSION([0.19.6])
AM_GNU_GETTEXT([external])
PKG_PROG_PKG_CONFIG([0.22])
AC_PATH_PROG([XSLTPROC], [xsltproc])
GLIB_GSETTINGS
# Get a value to substitute into gnome-shell.in
AM_PATH_PYTHON([3])
AC_SUBST(PYTHON)
# We depend on a specific version of the libmutter API. The mutter variants of
# the Cogl and Clutter libraries also use this API version.
LIBMUTTER_API_VERSION=0
LIBMUTTER=libmutter-$LIBMUTTER_API_VERSION
LIBMUTTER_COGL=mutter-cogl-$LIBMUTTER_API_VERSION
LIBMUTTER_COGL_PANGO=mutter-cogl-pango-$LIBMUTTER_API_VERSION
LIBMUTTER_CLUTTER=mutter-clutter-$LIBMUTTER_API_VERSION
# We need at least this, since gst_plugin_register_static() was added
# in 0.10.16, but nothing older than 0.10.21 has been tested.
GSTREAMER_MIN_VERSION=0.11.92
recorder_modules=
build_recorder=false
AC_MSG_CHECKING([for GStreamer (needed for recording functionality)])
if $PKG_CONFIG --exists gstreamer-1.0 '>=' $GSTREAMER_MIN_VERSION ; then
AC_MSG_RESULT(yes)
build_recorder=true
recorder_modules="gstreamer-1.0 gstreamer-base-1.0 x11 gtk+-3.0"
else
AC_MSG_RESULT(no)
fi
AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
AC_ARG_ENABLE([systemd],
AS_HELP_STRING([--enable-systemd], [Use systemd]),
[enable_systemd=$enableval],
[enable_systemd=auto])
AS_IF([test x$enable_systemd != xno], [
AC_MSG_CHECKING([for libsystemd])
PKG_CHECK_EXISTS([libsystemd],
[have_systemd=yes
AC_DEFINE([HAVE_SYSTEMD], [1], [Define if we have systemd])],
[have_systemd=no])
AC_MSG_RESULT($have_systemd)
])
AC_MSG_RESULT($enable_systemd)
GOBJECT_INTROSPECTION_MIN_VERSION=1.49.1
GJS_MIN_VERSION=1.47.0
MUTTER_MIN_VERSION=3.25.3
GTK_MIN_VERSION=3.15.0
GIO_MIN_VERSION=2.53.0
LIBECAL_MIN_VERSION=3.5.3
LIBEDATASERVER_MIN_VERSION=3.17.2
POLKIT_MIN_VERSION=0.100
STARTUP_NOTIFICATION_MIN_VERSION=0.11
GCR_MIN_VERSION=3.7.5
GNOME_DESKTOP_REQUIRED_VERSION=3.7.90
NETWORKMANAGER_MIN_VERSION=0.9.8
PULSE_MIN_VERS=2.0
# Collect more than 20 libraries for a prize!
SHARED_PCS="gio-unix-2.0 >= $GIO_MIN_VERSION
libxml-2.0
gtk+-3.0 >= $GTK_MIN_VERSION
atk-bridge-2.0
gjs-1.0 >= $GJS_MIN_VERSION
$recorder_modules
gdk-x11-3.0 libsoup-2.4
$LIBMUTTER_CLUTTER >= $MUTTER_MIN_VERSION
$LIBMUTTER_COGL_PANGO
libstartup-notification-1.0 >= $STARTUP_NOTIFICATION_MIN_VERSION
gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_MIN_VERSION
libcanberra libcanberra-gtk3
polkit-agent-1 >= $POLKIT_MIN_VERSION
gcr-base-3 >= $GCR_MIN_VERSION"
if test x$have_systemd = xyes; then
SHARED_PCS="${SHARED_PCS} libsystemd"
fi
PKG_CHECK_MODULES(GNOME_SHELL, $SHARED_PCS)
PKG_CHECK_MODULES(MUTTER, $LIBMUTTER >= $MUTTER_MIN_VERSION)
PKG_CHECK_MODULES(GNOME_SHELL_JS, gio-2.0 gjs-1.0 >= $GJS_MIN_VERSION)
PKG_CHECK_MODULES(ST, $LIBMUTTER_CLUTTER gtk+-3.0 libcroco-0.6 >= 0.6.8 x11)
PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0)
PKG_CHECK_MODULES(SHELL_HOTPLUG_SNIFFER, gio-2.0 gdk-pixbuf-2.0)
PKG_CHECK_MODULES(TRAY, $LIBMUTTER_CLUTTER gtk+-3.0)
PKG_CHECK_MODULES(GVC, libpulse >= $PULSE_MIN_VERS libpulse-mainloop-glib gobject-2.0)
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 3.21.3)
AC_SUBST(LIBMUTTER_API_VERSION)
AC_ARG_ENABLE(browser-plugin,
[AS_HELP_STRING([--enable-browser-plugin],
[Enable browser plugin [default=yes]])],,
enable_browser_plugin=yes)
AS_IF([test x$enable_browser_plugin = xyes], [
PKG_CHECK_MODULES(BROWSER_PLUGIN, gio-2.0 >= $GIO_MIN_VERSION json-glib-1.0 >= 0.13.2)
])
AM_CONDITIONAL(BUILD_BROWSER_PLUGIN, test x$enable_browser_plugin = xyes)
PKG_CHECK_MODULES(BLUETOOTH, gnome-bluetooth-1.0 >= 3.9.0,
[AC_DEFINE([HAVE_BLUETOOTH],[1],[Define if you have libgnome-bluetooth-applet])
AC_SUBST([HAVE_BLUETOOTH],[1])],
[AC_DEFINE([HAVE_BLUETOOTH],[0])
AC_SUBST([HAVE_BLUETOOTH],[0])])
PKG_CHECK_MODULES(CALENDAR_SERVER, libecal-1.2 >= $LIBECAL_MIN_VERSION libedataserver-1.2 >= $LIBEDATASERVER_MIN_VERSION gio-2.0)
AC_SUBST(CALENDAR_SERVER_CFLAGS)
AC_SUBST(CALENDAR_SERVER_LIBS)
GNOME_KEYBINDINGS_KEYSDIR=`$PKG_CONFIG --variable keysdir gnome-keybindings`
AC_SUBST([GNOME_KEYBINDINGS_KEYSDIR])
GOBJECT_INTROSPECTION_CHECK([$GOBJECT_INTROSPECTION_MIN_VERSION])
MUTTER_GIR_DIR=`$PKG_CONFIG --variable=girdir $LIBMUTTER`
AC_SUBST(MUTTER_GIR_DIR)
MUTTER_TYPELIB_DIR=`$PKG_CONFIG --variable=typelibdir $LIBMUTTER`
AC_SUBST(MUTTER_TYPELIB_DIR)
GLIB_COMPILE_RESOURCES=`$PKG_CONFIG --variable glib_compile_resources gio-2.0`
AC_SUBST(GLIB_COMPILE_RESOURCES)
AC_CHECK_FUNCS(fdwalk)
AC_CHECK_FUNCS(mallinfo)
AC_CHECK_HEADERS([sys/resource.h])
# _NL_TIME_FIRST_WEEKDAY is an enum and not a define
AC_MSG_CHECKING([for _NL_TIME_FIRST_WEEKDAY])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>]],
[[nl_langinfo(_NL_TIME_FIRST_WEEKDAY);]])],
[langinfo_ok=yes], [langinfo_ok=no])
AC_MSG_RESULT($langinfo_ok)
if test "$langinfo_ok" = "yes"; then
AC_DEFINE([HAVE__NL_TIME_FIRST_WEEKDAY], [1],
[Define if _NL_TIME_FIRST_WEEKDAY is available])
fi
AC_ARG_ENABLE(networkmanager,
AS_HELP_STRING([--disable-networkmanager],
[disable NetworkManager support @<:@default=auto@:>@]),,
[enable_networkmanager=auto])
if test "x$enable_networkmanager" != "xno"; then
PKG_CHECK_MODULES(NETWORKMANAGER,
[libnm-glib
libnm-util >= $NETWORKMANAGER_MIN_VERSION
libnm-gtk >= $NETWORKMANAGER_MIN_VERSION
libsecret-1 >= 0.18],
[have_networkmanager=yes],
[have_networkmanager=no])
GNOME_SHELL_CFLAGS="$GNOME_SHELL_CFLAGS $NETWORKMANAGER_CFLAGS"
GNOME_SHELL_LIBS="$GNOME_SHELL_LIBS $NETWORKMANAGER_LIBS"
else
have_networkmanager="no (disabled)"
fi
if test "x$have_networkmanager" = "xyes"; then
AC_DEFINE(HAVE_NETWORKMANAGER, [1], [Define if we have NetworkManager])
AC_SUBST([HAVE_NETWORKMANAGER], [1])
else
if test "x$enable_networkmanager" = "xyes"; then
AC_MSG_ERROR([Couldn't find NetworkManager.])
fi
AC_SUBST([HAVE_NETWORKMANAGER], [0])
fi
AM_CONDITIONAL(HAVE_NETWORKMANAGER, test "$have_networkmanager" = "yes")
# Sets GLIB_GENMARSHAL and GLIB_MKENUMS
AM_PATH_GLIB_2_0()
GTK_DOC_CHECK([1.15], [--flavour no-tmpl])
AC_ARG_ENABLE(man,
[AS_HELP_STRING([--enable-man],
[generate man pages [default=yes]])],,
enable_man=yes)
if test "$enable_man" != no; then
AC_PATH_PROG([XSLTPROC], [xsltproc])
if test -z "$XSLTPROC"; then
AC_MSG_ERROR([xsltproc is required for --enable-man])
fi
fi
AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
AX_COMPILER_FLAGS()
case "$WARN_CFLAGS" in
*-Werror*)
WARN_CFLAGS="$WARN_CFLAGS -Wno-error=deprecated-declarations"
;;
esac
AM_CFLAGS="$AM_CFLAGS $WARN_CFLAGS"
AC_SUBST(AM_CFLAGS)
if test -z "${BROWSER_PLUGIN_DIR}"; then
BROWSER_PLUGIN_DIR="\${libdir}/mozilla/plugins"
fi
AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to])
AC_ARG_VAR([GDBUS_CODEGEN],[the gdbus-codegen programme])
AC_PATH_PROG([GDBUS_CODEGEN],[gdbus-codegen],[])
if test -z "$GDBUS_CODEGEN"; then
AC_MSG_ERROR([gdbus-codegen not found])
fi
AC_PATH_PROG([SASSC],[sassc],[])
AC_CONFIG_FILES([
Makefile
data/Makefile
docs/Makefile
docs/reference/Makefile
docs/reference/shell/Makefile
docs/reference/shell/version.xml
docs/reference/st/Makefile
docs/reference/st/version.xml
js/Makefile
src/Makefile
subprojects/gvc/Makefile
browser-plugin/Makefile
tests/Makefile
po/Makefile.in
man/Makefile
])
AC_OUTPUT
echo "
Build configuration:
Prefix: ${prefix}
Source code location: ${srcdir}
Compiler: ${CC}
Compiler Warnings: $ax_enable_compile_warnings
Support for NetworkManager: $have_networkmanager
Support for GStreamer recording: $build_recorder
"

136
data/Makefile.am Normal file
View File

@@ -0,0 +1,136 @@
CLEANFILES =
NULL =
portaldir = $(datadir)/xdg-desktop-portal/portals
portal_DATA = gnome-shell.portal
desktopdir=$(datadir)/applications
desktop_DATA = org.gnome.Shell.desktop gnome-shell-extension-prefs.desktop
if HAVE_NETWORKMANAGER
desktop_DATA += org.gnome.Shell.PortalHelper.desktop
servicedir = $(datadir)/dbus-1/services
service_DATA = org.gnome.Shell.PortalHelper.service
CLEANFILES += \
org.gnome.Shell.PortalHelper.service \
org.gnome.Shell.PortalHelper.desktop \
org.gnome.Shell.PortalHelper.desktop.in \
$(NULL)
endif
%.service: %.service.in
$(AM_V_GEN) sed -e "s|@libexecdir[@]|$(libexecdir)|" \
$< > $@ || rm $@
# We substitute in bindir so it works as an autostart
# file when built in a non-system prefix
%.desktop.in:%.desktop.in.in
$(AM_V_GEN) sed -e "s|@bindir[@]|$(bindir)|" \
-e "s|@VERSION[@]|$(VERSION)|" \
$< > $@ || rm $@
%.desktop:%.desktop.in
$(AM_V_GEN) $(MSGFMT) --desktop --template $(builddir)/$< \
-d $(top_srcdir)/po -o $@
introspectiondir = $(datadir)/dbus-1/interfaces
introspection_DATA = \
org.gnome.Shell.PadOsd.xml \
org.gnome.Shell.Screencast.xml \
org.gnome.Shell.Screenshot.xml \
org.gnome.ShellSearchProvider.xml \
org.gnome.ShellSearchProvider2.xml \
$(NULL)
theme_sources = \
theme/gnome-shell-high-contrast.scss \
theme/gnome-shell.scss \
theme/gnome-shell-sass/_colors.scss \
theme/gnome-shell-sass/_common.scss \
theme/gnome-shell-sass/_drawing.scss \
theme/gnome-shell-sass/_high-contrast-colors.scss \
$(NULL)
dist_theme_files = \
$(theme_sources) \
theme/HACKING \
theme/README \
theme/gnome-shell-sass/COPYING \
theme/gnome-shell-sass/HACKING \
theme/gnome-shell-sass/NEWS \
theme/gnome-shell-sass/README \
theme/gnome-shell-sass/gnome-shell-sass.doap \
theme/pad-osd.css \
theme/parse-sass.sh \
$(NULL)
%.css: %.scss $(theme_sources)
@if test -n "$(SASSC)"; then \
if $(AM_V_P); then PS4= set -x; else echo " GEN $@"; fi; \
$(SASSC) -a $< $@; \
fi
resource_files = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir)/theme --generate-dependencies $(srcdir)/gnome-shell-theme.gresource.xml)
gnome-shell-theme.gresource: gnome-shell-theme.gresource.xml $(resource_files)
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir)/theme $<
resourcedir = $(pkgdatadir)
resource_DATA = gnome-shell-theme.gresource
backgrounddir = $(pkgdatadir)
background_DATA = perf-background.xml
perf-background.xml: perf-background.xml.in
$(AM_V_GEN) sed -e "s|@datadir[@]|$(datadir)|" \
$< > $@ || rm $@
keysdir = @GNOME_KEYBINDINGS_KEYSDIR@
keys_DATA = 50-gnome-shell-system.xml
gsettings_SCHEMAS = org.gnome.shell.gschema.xml
%.gschema.xml: %.gschema.xml.in Makefile
$(AM_V_GEN) sed -e 's|@GETTEXT_PACKAGE[@]|$(GETTEXT_PACKAGE)|g' \
$< > $@ || rm $@
@GSETTINGS_RULES@
# We need to compile schemas at make time
# to run from source tree
gschemas.compiled: $(gsettings_SCHEMAS:.xml=.valid)
$(AM_V_GEN) $(GLIB_COMPILE_SCHEMAS) --targetdir=. .
all-local: gschemas.compiled
convertdir = $(datadir)/GConf/gsettings
convert_DATA = gnome-shell-overrides.convert
EXTRA_DIST = \
org.gnome.Shell.desktop.in.in \
gnome-shell-extension-prefs.desktop.in.in \
$(portal_DATA) \
$(introspection_DATA) \
$(menu_DATA) \
$(convert_DATA) \
$(keys_DATA) \
$(dist_theme_files) \
perf-background.xml.in \
org.gnome.Shell.PortalHelper.desktop.in.in \
org.gnome.Shell.PortalHelper.service.in \
org.gnome.shell.gschema.xml.in \
gnome-shell-theme.gresource.xml \
$(resource_files) \
$(NULL)
CLEANFILES += \
org.gnome.Shell.desktop.in \
gnome-shell-extension-prefs.in \
$(desktop_DATA) \
$(gsettings_SCHEMAS) \
perf-background.xml \
gschemas.compiled \
org.gnome.shell.gschema.valid \
gnome-shell-theme.gresource \
$(NULL)

View File

@@ -9,8 +9,6 @@
<file>checkbox-off.svg</file>
<file>checkbox.svg</file>
<file>close-window.svg</file>
<file>close-window-active.svg</file>
<file>close-window-hover.svg</file>
<file>close.svg</file>
<file>corner-ripple-ltr.png</file>
<file>corner-ripple-rtl.png</file>
@@ -20,7 +18,6 @@
<file>gnome-shell.css</file>
<file>gnome-shell-high-contrast.css</file>
<file>logged-in-indicator.svg</file>
<file alias="icons/message-indicator-symbolic.svg">message-indicator-symbolic.svg</file>
<file>no-events.svg</file>
<file>no-notifications.svg</file>
<file>noise-texture.png</file>

View File

@@ -78,18 +78,11 @@ install_data('50-gnome-shell-system.xml', install_dir: keysdir)
schemaconf = configuration_data()
schemaconf.set('GETTEXT_PACKAGE', meson.project_name())
schema = configure_file(
configure_file(
input: 'org.gnome.shell.gschema.xml.in',
output: 'org.gnome.shell.gschema.xml',
configuration: schemaconf,
install_dir: schemadir
)
# for unit tests - gnome.compile_schemas() only looks in srcdir
custom_target('compile-schemas',
input: schema,
output: 'gschemas.compiled',
command: [find_program('glib-compile-schemas'), meson.current_build_dir()],
build_by_default: true)
install_data('gnome-shell-overrides.convert', install_dir: convertdir)

View File

@@ -1,81 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
id="Foreground"
x="0px"
y="0px"
width="32"
height="32"
viewBox="0 0 32 32"
enable-background="new 0 0 16 16"
xml:space="preserve"
sodipodi:version="0.32"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="close-window-active.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
id="metadata2399"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs2397"><linearGradient
id="linearGradient3173"><stop
style="stop-color:#c4c4c4;stop-opacity:1;"
offset="0"
id="stop3175" /><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop3177" /></linearGradient><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 11 : 1"
inkscape:vp_y="0 : 1375 : 0"
inkscape:vp_z="22 : 11 : 1"
inkscape:persp3d-origin="11 : 7.3333334 : 1"
id="perspective2401" /></defs><sodipodi:namedview
inkscape:window-height="1106"
inkscape:window-width="1700"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#797979"
id="base"
showgrid="false"
inkscape:zoom="4"
inkscape:cx="28.483745"
inkscape:cy="67.714004"
inkscape:window-x="1427"
inkscape:window-y="127"
inkscape:current-layer="Foreground"
showguides="true"
inkscape:guide-bbox="true"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:window-maximized="0"
inkscape:document-rotation="0"><inkscape:grid
type="xygrid"
id="grid11246"
empspacing="32"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" /></sodipodi:namedview><path
d="m 4.4362021,16 c 0,-6.410121 5.1728276,-11.60728 11.5529359,-11.60728 6.380109,0 11.552937,5.197159 11.552937,11.60728 0,6.410122 -5.172828,11.607281 -11.552937,11.607281 C 9.6090297,27.607281 4.4362021,22.410122 4.4362021,16 Z"
id="path883"
style="color:#000000;clip-rule:evenodd;display:inline;overflow:visible;visibility:visible;fill:#a5c8ec;fill-opacity:1;fill-rule:nonzero;stroke:#2975c4;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="csssc"
inkscape:connector-curvature="0" /><path
d="m 11.718386,11.764547 h 1.055207 c 0.01091,-1.26e-4 0.02193,-4.86e-4 0.03298,0 0.269026,0.01183 0.538019,0.135679 0.725455,0.329752 l 2.407192,2.407192 2.440166,-2.407192 c 0.28029,-0.243226 0.471333,-0.322366 0.725455,-0.329752 h 1.055207 v 1.055208 c 0,0.302285 -0.03623,0.581049 -0.263801,0.791405 l -2.407191,2.407191 2.374217,2.374216 c 0.198577,0.198559 0.296768,0.478484 0.296775,0.758432 v 1.055206 h -1.055211 c -0.279947,-10e-6 -0.559877,-0.09824 -0.75843,-0.296777 l -2.407192,-2.407192 -2.407192,2.407192 c -0.198551,0.198579 -0.478493,0.296777 -0.758429,0.296777 H 11.71839 v -1.055206 c -3e-6,-0.279936 0.0982,-0.559873 0.296777,-0.758432 L 14.422359,16.018351 12.015167,13.61116 C 11.79279,13.405784 11.69527,13.116003 11.71839,12.819755 Z"
inkscape:connector-curvature="0"
id="path887"
style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Andale Mono';-inkscape-font-specification:'Andale Mono';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#4a90d9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.87958801;marker:none;enable-background:new"
sodipodi:nodetypes="ccsccccccccccccccccccccccc" /></svg>

Before

Width:  |  Height:  |  Size: 4.6 KiB

View File

@@ -1,81 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
id="Foreground"
x="0px"
y="0px"
width="32"
height="32"
viewBox="0 0 32 32"
enable-background="new 0 0 16 16"
xml:space="preserve"
sodipodi:version="0.32"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="close-window-hover.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
id="metadata2399"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
id="defs2397"><linearGradient
id="linearGradient3173"><stop
style="stop-color:#c4c4c4;stop-opacity:1;"
offset="0"
id="stop3175" /><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop3177" /></linearGradient><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 11 : 1"
inkscape:vp_y="0 : 1375 : 0"
inkscape:vp_z="22 : 11 : 1"
inkscape:persp3d-origin="11 : 7.3333334 : 1"
id="perspective2401" /></defs><sodipodi:namedview
inkscape:window-height="1106"
inkscape:window-width="1700"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#797979"
id="base"
showgrid="false"
inkscape:zoom="4"
inkscape:cx="28.483745"
inkscape:cy="67.714004"
inkscape:window-x="1427"
inkscape:window-y="127"
inkscape:current-layer="Foreground"
showguides="true"
inkscape:guide-bbox="true"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:window-maximized="0"
inkscape:document-rotation="0"><inkscape:grid
type="xygrid"
id="grid11246"
empspacing="32"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" /></sodipodi:namedview><path
inkscape:connector-curvature="0"
sodipodi:nodetypes="csssc"
style="color:#000000;clip-rule:evenodd;display:inline;overflow:visible;visibility:visible;fill:#2975c4;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path822"
d="m 4.4362021,16 c 0,-6.410121 5.1728276,-11.60728 11.5529359,-11.60728 6.380109,0 11.552937,5.197159 11.552937,11.60728 0,6.410122 -5.172828,11.607281 -11.552937,11.607281 C 9.6090297,27.607281 4.4362021,22.410122 4.4362021,16 Z" /><path
sodipodi:nodetypes="ccsccccccccccccccccccccccc"
style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Andale Mono';-inkscape-font-specification:'Andale Mono';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.87958801;marker:none;enable-background:new"
id="path826"
inkscape:connector-curvature="0"
d="m 11.718386,11.764547 h 1.055207 c 0.01091,-1.26e-4 0.02193,-4.86e-4 0.03298,0 0.269026,0.01183 0.538019,0.135679 0.725455,0.329752 l 2.407192,2.407192 2.440166,-2.407192 c 0.28029,-0.243226 0.471333,-0.322366 0.725455,-0.329752 h 1.055207 v 1.055208 c 0,0.302285 -0.03623,0.581049 -0.263801,0.791405 l -2.407191,2.407191 2.374217,2.374216 c 0.198577,0.198559 0.296768,0.478484 0.296775,0.758432 v 1.055206 h -1.055211 c -0.279947,-10e-6 -0.559877,-0.09824 -0.75843,-0.296777 l -2.407192,-2.407192 -2.407192,2.407192 c -0.198551,0.198579 -0.478493,0.296777 -0.758429,0.296777 H 11.71839 v -1.055206 c -3e-6,-0.279936 0.0982,-0.559873 0.296777,-0.758432 L 14.422359,16.018351 12.015167,13.61116 C 11.79279,13.405784 11.69527,13.116003 11.71839,12.819755 Z" /></svg>

Before

Width:  |  Height:  |  Size: 4.6 KiB

View File

@@ -7,6 +7,7 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
@@ -15,71 +16,137 @@
y="0px"
width="32"
height="32"
viewBox="0 0 32 32"
viewBox="0 0 23.272727 23.272727"
enable-background="new 0 0 16 16"
xml:space="preserve"
sodipodi:version="0.32"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
inkscape:version="0.48+devel r10081 custom"
sodipodi:docname="close-window.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
id="metadata2399"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs2397"><linearGradient
id="linearGradient3173"><stop
style="stop-color:#c4c4c4;stop-opacity:1;"
offset="0"
id="stop3175" /><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop3177" /></linearGradient><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 11 : 1"
inkscape:vp_y="0 : 1375 : 0"
inkscape:vp_z="22 : 11 : 1"
inkscape:persp3d-origin="11 : 7.3333334 : 1"
id="perspective2401" /></defs><sodipodi:namedview
inkscape:window-height="1106"
inkscape:window-width="1700"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#797979"
id="base"
showgrid="false"
inkscape:zoom="4"
inkscape:cx="28.483745"
inkscape:cy="67.714004"
inkscape:window-x="1427"
inkscape:window-y="127"
inkscape:current-layer="Foreground"
showguides="true"
inkscape:guide-bbox="true"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:window-maximized="0"
inkscape:document-rotation="0"><inkscape:grid
type="xygrid"
id="grid11246"
empspacing="32"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" /></sodipodi:namedview><path
d="m 4.4362021,15.860384 c 0,-6.410121 5.1728276,-11.60728 11.5529359,-11.60728 6.380109,0 11.552937,5.197159 11.552937,11.60728 0,6.410122 -5.172828,11.607281 -11.552937,11.607281 -6.3801083,0 -11.5529359,-5.197159 -11.5529359,-11.607281 z"
id="path2394-32"
style="color:#000000;clip-rule:evenodd;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2975c4;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
sodipodi:nodetypes="csssc"
inkscape:connector-curvature="0" /><path
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.49900004;fill:#4a90d9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.74932218;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 6.4654832,15.001321 c -0.025906,0.288419 -0.044417,0.579469 -0.044417,0.874662 0,5.313347 4.2883848,9.621271 9.5768588,9.621271 5.288466,0 9.575143,-4.307924 9.575143,-9.621271 0,-0.295193 -0.01852,-0.586243 -0.04441,-0.874662 -0.440376,4.903023 -4.536071,8.746611 -9.53073,8.746611 -4.994659,0 -9.0920617,-3.843588 -9.5324391,-8.746611 z"
id="path2561"
inkscape:connector-curvature="0" /><path
d="m 11.718386,11.639547 h 1.055207 c 0.01091,-1.26e-4 0.02193,-4.86e-4 0.03298,0 0.269026,0.01183 0.538019,0.135679 0.725455,0.329752 l 2.407192,2.407192 2.440166,-2.407192 c 0.28029,-0.243226 0.471333,-0.322366 0.725455,-0.329752 h 1.055207 v 1.055208 c 0,0.302285 -0.03623,0.581049 -0.263801,0.791405 l -2.407191,2.407191 2.374217,2.374216 c 0.198577,0.198559 0.296768,0.478484 0.296775,0.758432 v 1.055206 h -1.055211 c -0.279947,-10e-6 -0.559877,-0.09824 -0.75843,-0.296777 l -2.407192,-2.407192 -2.407192,2.407192 c -0.198551,0.198579 -0.478493,0.296777 -0.758429,0.296777 H 11.71839 v -1.055206 c -3e-6,-0.279936 0.0982,-0.559873 0.296777,-0.758432 L 14.422359,15.893351 12.015167,13.48616 C 11.79279,13.280784 11.69527,12.991003 11.71839,12.694755 Z"
inkscape:connector-curvature="0"
id="path27279-0-5"
style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Andale Mono';-inkscape-font-specification:'Andale Mono';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#4a90d9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.87958801;marker:none;enable-background:new"
sodipodi:nodetypes="ccsccccccccccccccccccccccc" /></svg>
id="metadata2399"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
id="defs2397"><linearGradient
id="linearGradient3173"><stop
style="stop-color:#c4c4c4;stop-opacity:1;"
offset="0"
id="stop3175" /><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop3177" /></linearGradient><inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 8 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="16 : 8 : 1"
inkscape:persp3d-origin="8 : 5.3333333 : 1"
id="perspective2401" /><filter
color-interpolation-filters="sRGB"
inkscape:collect="always"
id="filter16494-4"
x="-0.20989846"
width="1.4197969"
y="-0.20903821"
height="1.4180764"><feGaussianBlur
inkscape:collect="always"
stdDeviation="1.3282637"
id="feGaussianBlur16496-8" /></filter><radialGradient
inkscape:collect="always"
xlink:href="#linearGradient16498-6"
id="radialGradient16504-1"
cx="7.6582627"
cy="5.8191104"
fx="7.6582627"
fy="5.8191104"
r="8.6928644"
gradientTransform="matrix(1.0474339,0,0,1.0517402,-0.3632615,-0.42032492)"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
id="linearGradient16498-6"><stop
style="stop-color:#7b7b7b;stop-opacity:1"
offset="0"
id="stop16500-8" /><stop
style="stop-color:#101010;stop-opacity:1"
offset="1"
id="stop16502-0" /></linearGradient><filter
color-interpolation-filters="sRGB"
inkscape:collect="always"
id="filter16524-9"
x="-0.212979"
width="1.425958"
y="-0.21305652"
height="1.426113"><feGaussianBlur
inkscape:collect="always"
stdDeviation="0.71020915"
id="feGaussianBlur16526-0" /></filter></defs><sodipodi:namedview
inkscape:window-height="1114"
inkscape:window-width="1463"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10.0"
gridtolerance="10.0"
objecttolerance="10.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#000000"
id="base"
showgrid="false"
inkscape:zoom="1"
inkscape:cx="10.720189"
inkscape:cy="13.739577"
inkscape:window-x="0"
inkscape:window-y="26"
inkscape:current-layer="Foreground"
showguides="true"
inkscape:guide-bbox="true"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:window-maximized="0"><inkscape:grid
type="xygrid"
id="grid11246"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" /></sodipodi:namedview>
<g
style="display:inline"
id="g16402-8"
transform="translate(4.7533483,2.8238929)"><g
id="g3175-4"><path
sodipodi:type="inkscape:offset"
inkscape:radius="0"
inkscape:original="M 7.65625 0.125 C 3.2589349 0.125 -0.3125 3.7070002 -0.3125 8.125 C -0.3125 12.543001 3.2589349 16.125 7.65625 16.125 C 12.053566 16.125 15.625 12.543001 15.625 8.125 C 15.625 3.7070002 12.053566 0.125 7.65625 0.125 z "
xlink:href="#path2394-32"
style="opacity:0.52994014;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.18181825;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter16494-4);enable-background:accumulate"
id="path16480-5"
inkscape:href="#path2394-32"
d="m 7.65625,0.125 c -4.3973151,0 -7.96875,3.5820002 -7.96875,8 0,4.418001 3.5714349,8 7.96875,8 4.397316,0 7.96875,-3.581999 7.96875,-8 0,-4.4179998 -3.571434,-8 -7.96875,-8 z"
transform="translate(0,1.028519)" /><path
clip-rule="evenodd"
d="m -0.30428257,8.1237596 c 0,-4.4179998 3.56522987,-7.9999996 7.96254497,-7.9999996 4.3973156,0 7.9625456,3.5819998 7.9625456,7.9999996 0,4.4180014 -3.56523,8.0000004 -7.9625456,8.0000004 -4.3973151,0 -7.96254497,-3.581999 -7.96254497,-8.0000004 z"
id="path2394-32"
style="color:#000000;fill:url(#radialGradient16504-1);fill-opacity:1;fill-rule:nonzero;stroke:#eeeeec;stroke-width:1.4545455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
sodipodi:nodetypes="csssc"
inkscape:connector-curvature="0" /><g
id="g3172-6" /></g><g
transform="matrix(0.72727273,0,0,0.72727273,2.368236,2.1803254)"
style="fill:#ffffff;fill-opacity:1;display:inline"
id="g27275-6-6"
inkscape:label="window-close"><g
style="fill:#ffffff;fill-opacity:1;display:inline"
id="g27277-1-1"
transform="translate(-41,-760)"><path
sodipodi:type="inkscape:offset"
inkscape:radius="0"
inkscape:original="M 44.21875 764.1875 L 44.21875 765.1875 C 44.19684 765.46825 44.289258 765.74287 44.5 765.9375 L 46.78125 768.21875 L 44.5 770.46875 C 44.31181 770.65692 44.218747 770.92221 44.21875 771.1875 L 44.21875 772.1875 L 45.21875 772.1875 C 45.48404 772.1875 45.749336 772.09444 45.9375 771.90625 L 48.21875 769.625 L 50.5 771.90625 C 50.688164 772.0944 50.953449 772.18749 51.21875 772.1875 L 52.21875 772.1875 L 52.21875 771.1875 C 52.218742 770.9222 52.125688 770.65692 51.9375 770.46875 L 49.6875 768.21875 L 51.96875 765.9375 C 52.18441 765.73815 52.21875 765.47397 52.21875 765.1875 L 52.21875 764.1875 L 51.21875 764.1875 C 50.977922 764.1945 50.796875 764.2695 50.53125 764.5 L 48.21875 766.78125 L 45.9375 764.5 C 45.75987 764.31608 45.504951 764.1987 45.25 764.1875 C 45.23954 764.18704 45.22912 764.18738 45.21875 764.1875 L 44.21875 764.1875 z "
xlink:href="#path27279-0-5"
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;color:#bebebe;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.78124988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter16524-9);enable-background:new;font-family:Andale Mono;-inkscape-font-specification:Andale Mono"
id="path16506-5"
inkscape:href="#path27279-0-5"
d="m 44.21875,764.1875 0,1 c -0.02191,0.28075 0.07051,0.55537 0.28125,0.75 l 2.28125,2.28125 -2.28125,2.25 c -0.18819,0.18817 -0.281253,0.45346 -0.28125,0.71875 l 0,1 1,0 c 0.26529,0 0.530586,-0.0931 0.71875,-0.28125 L 48.21875,769.625 50.5,771.90625 c 0.188164,0.18815 0.453449,0.28124 0.71875,0.28125 l 1,0 0,-1 c -8e-6,-0.2653 -0.09306,-0.53058 -0.28125,-0.71875 l -2.25,-2.25 2.28125,-2.28125 c 0.21566,-0.19935 0.25,-0.46353 0.25,-0.75 l 0,-1 -1,0 c -0.240828,0.007 -0.421875,0.082 -0.6875,0.3125 l -2.3125,2.28125 L 45.9375,764.5 c -0.17763,-0.18392 -0.432549,-0.3013 -0.6875,-0.3125 -0.01046,-4.6e-4 -0.02088,-1.2e-4 -0.03125,0 l -1,0 z"
transform="translate(0,1.3535534)" /><path
sodipodi:nodetypes="ccsccccccccccccccccccccccc"
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;color:#bebebe;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.78124988;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new;font-family:Andale Mono;-inkscape-font-specification:Andale Mono"
id="path27279-0-5"
inkscape:connector-curvature="0"
d="m 44.226475,764.17222 1,0 c 0.01037,-1.2e-4 0.02079,-4.6e-4 0.03125,0 0.254951,0.0112 0.50987,0.12858 0.6875,0.3125 l 2.28125,2.28125 2.3125,-2.28125 c 0.265625,-0.2305 0.446672,-0.3055 0.6875,-0.3125 l 1,0 0,1 c 0,0.28647 -0.03434,0.55065 -0.25,0.75 l -2.28125,2.28125 2.25,2.25 c 0.188188,0.18817 0.281242,0.45345 0.28125,0.71875 l 0,1 -1,0 c -0.265301,-1e-5 -0.530586,-0.0931 -0.71875,-0.28125 l -2.28125,-2.28125 -2.28125,2.28125 c -0.188164,0.18819 -0.45346,0.28125 -0.71875,0.28125 l -1,0 0,-1 c -3e-6,-0.26529 0.09306,-0.53058 0.28125,-0.71875 l 2.28125,-2.25 -2.28125,-2.28125 c -0.210742,-0.19463 -0.30316,-0.46925 -0.28125,-0.75 l 0,-1 z" /></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

@@ -454,10 +454,6 @@ StScrollBar {
.extension-dialog .message-dialog-title {
color: #b2b2a9; }
/* Inhibit-Shortcuts Dialog */
.inhibit-shortcuts-dialog {
spacing: 30px; }
/* Network Agent Dialog */
.network-dialog-secret-table {
spacing-rows: 15px;
@@ -647,7 +643,7 @@ StScrollBar {
border: 1px solid #215d9c; }
.tile-preview-left.on-primary {
border-radius: 6px 0 0 0; }
border-radius: 6px 6px 0 0; }
.tile-preview-right.on-primary {
border-radius: 0 6px 0 0; }
@@ -657,7 +653,7 @@ StScrollBar {
/* TOP BAR */
#panel {
background-color: rgba(0, 0, 0, 0.35);
background-color: rgba(0, 0, 0, 0.2);
/* transition from solid to transparent */
transition-duration: 500ms;
font-weight: bold;
@@ -668,7 +664,7 @@ StScrollBar {
spacing: 4px; }
#panel .panel-corner {
-panel-corner-radius: 6px;
-panel-corner-background-color: rgba(0, 0, 0, 0.35);
-panel-corner-background-color: rgba(0, 0, 0, 0.2);
-panel-corner-border-width: 2px;
-panel-corner-border-color: transparent; }
#panel .panel-corner:active, #panel .panel-corner:overview, #panel .panel-corner:focus {
@@ -682,7 +678,7 @@ StScrollBar {
-minimum-hpadding: 6px;
font-weight: bold;
color: #eee;
text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.9);
text-shadow: 0px 0px 2px rgba(0, 0, 0, 0.9);
transition-duration: 100ms; }
#panel .panel-button .app-menu-icon {
-st-icon-style: symbolic;
@@ -691,14 +687,14 @@ StScrollBar {
#panel .panel-button .system-status-icon,
#panel .panel-button .app-menu-icon > StIcon,
#panel .panel-button .popup-menu-arrow {
icon-shadow: 0px 1px 2px rgba(0, 0, 0, 0.9); }
icon-shadow: 0px 0px 2px rgba(0, 0, 0, 0.9); }
#panel .panel-button:hover {
color: white;
text-shadow: 0px 1px 6px black; }
text-shadow: 0px 0px 8px black; }
#panel .panel-button:hover .system-status-icon,
#panel .panel-button:hover .app-menu-icon > StIcon,
#panel .panel-button:hover .popup-menu-arrow {
icon-shadow: 0px 1px 6px black; }
icon-shadow: 0px 0px 8px black; }
#panel .panel-button:active, #panel .panel-button:overview, #panel .panel-button:focus, #panel .panel-button:checked {
background-color: rgba(0, 0, 0, 0.01);
box-shadow: inset 0 -2px 0px #256ab1;
@@ -918,17 +914,17 @@ StScrollBar {
background-color: #0d0d0d; }
.message-icon-bin {
padding: 0.68em 0.2em 0.68em 0.68em; }
padding: 10px 3px 10px 10px; }
.message-icon-bin:rtl {
padding: 0.68em 0.68em 0.68em 0.2em; }
padding: 10px 10px 10px 3px; }
.message-icon-bin > StIcon {
color: #cccccc;
icon-size: 1.09em;
icon-size: 16px;
-st-icon-style: symbolic; }
.message-secondary-bin {
padding: 0 0.82em; }
padding: 0 12px; }
.message-secondary-bin > .event-time {
color: #999999;
@@ -938,7 +934,7 @@ StScrollBar {
padding-bottom: 0.13em; }
.message-secondary-bin > StIcon {
icon-size: 1.09em; }
icon-size: 16px; }
.message-title {
color: #f2f2f2; }
@@ -1025,12 +1021,12 @@ StScrollBar {
background-image: url("resource:///org/gnome/shell/theme/close-window.svg");
background-size: 32px;
height: 32px;
width: 32px;
width: 32px; }
.window-close {
-shell-close-overlap: 16px; }
.window-close:hover {
background-image: url("resource:///org/gnome/shell/theme/close-window-hover.svg"); }
.window-close:active {
background-image: url("resource:///org/gnome/shell/theme/close-window-active.svg"); }
.window-close:rtl {
-st-background-image-shadow: 2px 2px 6px rgba(0, 0, 0, 0.5); }
/* NETWORK DIALOGS */
.nm-dialog {
@@ -1094,11 +1090,13 @@ StScrollBar {
padding-bottom: 32px; }
.window-picker {
-horizontal-spacing: 16px;
-vertical-spacing: 16px;
padding: 0 16px 16px; }
-horizontal-spacing: 32px;
-vertical-spacing: 32px;
padding-left: 32px;
padding-right: 32px;
padding-bottom: 48px; }
.window-picker.external-monitor {
padding: 16px; }
padding: 32px; }
.window-clone-border {
border: 4px solid #215d9c;
@@ -1107,10 +1105,14 @@ StScrollBar {
.window-caption {
spacing: 25px;
color: #ffffff;
background-color: #215d9c;
color: #eeeeec;
background-color: rgba(46, 52, 54, 0.7);
border-radius: 8px;
padding: 4px 12px; }
padding: 4px 12px;
-shell-caption-spacing: 12px; }
.window-caption:hover {
background-color: #215d9c;
color: #ffffff; }
.search-entry {
width: 320px;
@@ -1210,12 +1212,6 @@ StScrollBar {
.icon-grid .overview-icon {
icon-size: 96px; }
.system-action-icon {
background-color: black;
color: white;
border-radius: 99px;
icon-size: 48px; }
.app-view-controls {
padding-bottom: 32px; }
@@ -1339,10 +1335,6 @@ StScrollBar {
border-radius: 9px 0 0 9px; }
.workspace-thumbnails:rtl {
border-radius: 0 9px 9px 0; }
.workspace-thumbnails .placeholder {
background-image: url("resource:///org/gnome/shell/theme/dash-placeholder.svg");
background-size: contain;
height: 24px; }
.workspace-thumbnail-indicator {
border: 4px solid #215d9c;
@@ -1489,6 +1481,38 @@ StScrollBar {
color: pink; }
/* Eeeky things */
.legacy-tray {
background-color: #000;
border: 1px solid black;
border-bottom-width: 0; }
.legacy-tray:ltr {
border-radius: 0 6px 0 0;
border-left-width: 0; }
.legacy-tray:rtl {
border-radius: 6px 0 0 0;
border-right-width: 0; }
.legacy-tray-handle,
.legacy-tray-icon {
padding: 6px; }
.legacy-tray-handle StIcon,
.legacy-tray-icon StIcon {
icon-size: 24px; }
.legacy-tray-handle:hover, .legacy-tray-handle:focus,
.legacy-tray-icon:hover,
.legacy-tray-icon:focus {
background-color: rgba(255, 255, 255, 0.1); }
.legacy-tray-icon-box {
spacing: 12px; }
.legacy-tray-icon-box:ltr {
padding-left: 12px; }
.legacy-tray-icon-box:rtl {
padding-right: 12px; }
.legacy-tray-icon-box StButton {
width: 24px;
height: 24px; }
.magnifier-zoom-region {
border: 2px solid #215d9c; }
.magnifier-zoom-region.full-screen {

View File

@@ -454,10 +454,6 @@ StScrollBar {
.extension-dialog .message-dialog-title {
color: #b2b2a9; }
/* Inhibit-Shortcuts Dialog */
.inhibit-shortcuts-dialog {
spacing: 30px; }
/* Network Agent Dialog */
.network-dialog-secret-table {
spacing-rows: 15px;
@@ -647,7 +643,7 @@ StScrollBar {
border: 1px solid #215d9c; }
.tile-preview-left.on-primary {
border-radius: 6px 0 0 0; }
border-radius: 6px 6px 0 0; }
.tile-preview-right.on-primary {
border-radius: 0 6px 0 0; }
@@ -657,7 +653,7 @@ StScrollBar {
/* TOP BAR */
#panel {
background-color: rgba(0, 0, 0, 0.35);
background-color: rgba(0, 0, 0, 0.2);
/* transition from solid to transparent */
transition-duration: 500ms;
font-weight: bold;
@@ -668,7 +664,7 @@ StScrollBar {
spacing: 4px; }
#panel .panel-corner {
-panel-corner-radius: 6px;
-panel-corner-background-color: rgba(0, 0, 0, 0.35);
-panel-corner-background-color: rgba(0, 0, 0, 0.2);
-panel-corner-border-width: 2px;
-panel-corner-border-color: transparent; }
#panel .panel-corner:active, #panel .panel-corner:overview, #panel .panel-corner:focus {
@@ -682,7 +678,7 @@ StScrollBar {
-minimum-hpadding: 6px;
font-weight: bold;
color: #eee;
text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.9);
text-shadow: 0px 0px 2px rgba(0, 0, 0, 0.9);
transition-duration: 100ms; }
#panel .panel-button .app-menu-icon {
-st-icon-style: symbolic;
@@ -691,14 +687,14 @@ StScrollBar {
#panel .panel-button .system-status-icon,
#panel .panel-button .app-menu-icon > StIcon,
#panel .panel-button .popup-menu-arrow {
icon-shadow: 0px 1px 2px rgba(0, 0, 0, 0.9); }
icon-shadow: 0px 0px 2px rgba(0, 0, 0, 0.9); }
#panel .panel-button:hover {
color: white;
text-shadow: 0px 1px 6px black; }
text-shadow: 0px 0px 8px black; }
#panel .panel-button:hover .system-status-icon,
#panel .panel-button:hover .app-menu-icon > StIcon,
#panel .panel-button:hover .popup-menu-arrow {
icon-shadow: 0px 1px 6px black; }
icon-shadow: 0px 0px 8px black; }
#panel .panel-button:active, #panel .panel-button:overview, #panel .panel-button:focus, #panel .panel-button:checked {
background-color: rgba(0, 0, 0, 0.01);
box-shadow: inset 0 -2px 0px #256ab1;
@@ -918,17 +914,17 @@ StScrollBar {
background-color: #454c4c; }
.message-icon-bin {
padding: 0.68em 0.2em 0.68em 0.68em; }
padding: 10px 3px 10px 10px; }
.message-icon-bin:rtl {
padding: 0.68em 0.68em 0.68em 0.2em; }
padding: 10px 10px 10px 3px; }
.message-icon-bin > StIcon {
color: #bebeb6;
icon-size: 1.09em;
icon-size: 16px;
-st-icon-style: symbolic; }
.message-secondary-bin {
padding: 0 0.82em; }
padding: 0 12px; }
.message-secondary-bin > .event-time {
color: #8e8e80;
@@ -938,7 +934,7 @@ StScrollBar {
padding-bottom: 0.13em; }
.message-secondary-bin > StIcon {
icon-size: 1.09em; }
icon-size: 16px; }
.message-title {
color: #e2e2df; }
@@ -1025,12 +1021,12 @@ StScrollBar {
background-image: url("resource:///org/gnome/shell/theme/close-window.svg");
background-size: 32px;
height: 32px;
width: 32px;
width: 32px; }
.window-close {
-shell-close-overlap: 16px; }
.window-close:hover {
background-image: url("resource:///org/gnome/shell/theme/close-window-hover.svg"); }
.window-close:active {
background-image: url("resource:///org/gnome/shell/theme/close-window-active.svg"); }
.window-close:rtl {
-st-background-image-shadow: 2px 2px 6px rgba(0, 0, 0, 0.5); }
/* NETWORK DIALOGS */
.nm-dialog {
@@ -1094,11 +1090,13 @@ StScrollBar {
padding-bottom: 32px; }
.window-picker {
-horizontal-spacing: 16px;
-vertical-spacing: 16px;
padding: 0 16px 16px; }
-horizontal-spacing: 32px;
-vertical-spacing: 32px;
padding-left: 32px;
padding-right: 32px;
padding-bottom: 48px; }
.window-picker.external-monitor {
padding: 16px; }
padding: 32px; }
.window-clone-border {
border: 4px solid #215d9c;
@@ -1107,10 +1105,14 @@ StScrollBar {
.window-caption {
spacing: 25px;
color: #ffffff;
background-color: #215d9c;
color: #eeeeec;
background-color: rgba(46, 52, 54, 0.7);
border-radius: 8px;
padding: 4px 12px; }
padding: 4px 12px;
-shell-caption-spacing: 12px; }
.window-caption:hover {
background-color: #215d9c;
color: #ffffff; }
.search-entry {
width: 320px;
@@ -1210,12 +1212,6 @@ StScrollBar {
.icon-grid .overview-icon {
icon-size: 96px; }
.system-action-icon {
background-color: black;
color: white;
border-radius: 99px;
icon-size: 48px; }
.app-view-controls {
padding-bottom: 32px; }
@@ -1339,10 +1335,6 @@ StScrollBar {
border-radius: 9px 0 0 9px; }
.workspace-thumbnails:rtl {
border-radius: 0 9px 9px 0; }
.workspace-thumbnails .placeholder {
background-image: url("resource:///org/gnome/shell/theme/dash-placeholder.svg");
background-size: contain;
height: 24px; }
.workspace-thumbnail-indicator {
border: 4px solid #215d9c;
@@ -1489,6 +1481,38 @@ StScrollBar {
color: pink; }
/* Eeeky things */
.legacy-tray {
background-color: #393f3f;
border: 1px solid #1c1f1f;
border-bottom-width: 0; }
.legacy-tray:ltr {
border-radius: 0 6px 0 0;
border-left-width: 0; }
.legacy-tray:rtl {
border-radius: 6px 0 0 0;
border-right-width: 0; }
.legacy-tray-handle,
.legacy-tray-icon {
padding: 6px; }
.legacy-tray-handle StIcon,
.legacy-tray-icon StIcon {
icon-size: 24px; }
.legacy-tray-handle:hover, .legacy-tray-handle:focus,
.legacy-tray-icon:hover,
.legacy-tray-icon:focus {
background-color: rgba(238, 238, 236, 0.1); }
.legacy-tray-icon-box {
spacing: 12px; }
.legacy-tray-icon-box:ltr {
padding-left: 12px; }
.legacy-tray-icon-box:rtl {
padding-right: 12px; }
.legacy-tray-icon-box StButton {
width: 24px;
height: 24px; }
.magnifier-zoom-region {
border: 2px solid #215d9c; }
.magnifier-zoom-region.full-screen {

View File

@@ -1,40 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
viewBox="0 0 4.2333333 4.2333333"
version="1.1"
id="svg8">
<defs
id="defs2" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
style="display:inline"
transform="translate(0,-292.76667)">
<path
style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.17969394"
d="m 3.1749998,294.88333 a 1.0583333,1.0583333 0 0 1 -1.0583332,1.05833 1.0583333,1.0583333 0 0 1 -1.0583333,-1.05833 1.0583333,1.0583333 0 0 1 1.0583333,-1.05833 1.0583333,1.0583333 0 0 1 1.0583332,1.05833 z"
id="path4485" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1,4 +1,4 @@
#!/bin/sh
#!/usr/bin/sh
srcdir=`dirname $0`
stamp=${1}

1
docs/Makefile.am Normal file
View File

@@ -0,0 +1 @@
SUBDIRS = reference

View File

@@ -0,0 +1 @@
SUBDIRS = shell st

View File

@@ -0,0 +1,139 @@
## Process this file with automake to produce Makefile.in
# We require automake 1.6 at least.
AUTOMAKE_OPTIONS = 1.6
# This is a blank Makefile.am for using gtk-doc.
# Copy this to your project's API docs directory and modify the variables to
# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
# of using the various options.
# The name of the module, e.g. 'glib'.
DOC_MODULE=shell
# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
#DOC_MODULE_VERSION=2
# The top-level SGML file. You can change this if you want to.
DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
# Directories containing the source code
# gtk-doc will search all .c and .h files beneath these paths
# for inline comments documenting functions and macros.
DOC_SOURCE_DIR=$(top_srcdir)/src
# Extra options to pass to gtkdoc-scangobj. Not normally needed.
SCANGOBJ_OPTIONS=
# Extra options to supply to gtkdoc-scan.
# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
SCAN_OPTIONS=--rebuild-types
# Extra options to supply to gtkdoc-mkdb.
# e.g. MKDB_OPTIONS=--xml-mode --output-format=xml
MKDB_OPTIONS=--xml-mode --output-format=xml
# Extra options to supply to gtkdoc-mktmpl
# e.g. MKTMPL_OPTIONS=--only-section-tmpl
MKTMPL_OPTIONS=
# Extra options to supply to gtkdoc-mkhtml
MKHTML_OPTIONS=
# Extra options to supply to gtkdoc-fixref. Not normally needed.
# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
FIXXREF_OPTIONS=
# Used for dependencies. The docs will be rebuilt if any of these change.
# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
HFILE_GLOB=$(top_srcdir)/src/*.h
CFILE_GLOB=$(top_srcdir)/src/*.c
# Extra header to include when scanning, which are not under DOC_SOURCE_DIR
# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
EXTRA_HFILES=
# Header files or dirs to ignore when scanning. Use base file/dir names
# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code
IGNORE_HFILES= \
calendar-server \
gvc \
hotplug-sniffer \
st \
tray \
gactionmuxer.h \
gactionobservable.h \
gactionobserver.h \
shell-network-agent.h \
shell-recorder-src.h
if !BUILD_RECORDER
IGNORE_HFILES += shell-recorder.h
endif
# Images to copy into HTML directory.
# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
HTML_IMAGES=
doc-gen-org.gnome.Shell.SearchProvider.xml: $(top_srcdir)/data/org.gnome.ShellSearchProvider.xml
gdbus-codegen \
--interface-prefix org.gnome.ShellSearchProvider. \
--generate-docbook doc-gen \
$(top_srcdir)/data/org.gnome.ShellSearchProvider.xml
doc-gen-org.gnome.Shell.SearchProvider2.xml: $(top_srcdir)/data/org.gnome.ShellSearchProvider2.xml
gdbus-codegen \
--interface-prefix org.gnome.ShellSearchProvider2. \
--generate-docbook doc-gen \
$(top_srcdir)/data/org.gnome.ShellSearchProvider2.xml
doc-gen-org.gnome.Shell.Screenshot.xml: $(top_srcdir)/data/org.gnome.Shell.Screenshot.xml
gdbus-codegen \
--interface-prefix org.gnome.Shell.Screenshot. \
--generate-docbook doc-gen \
$(top_srcdir)/data/org.gnome.Shell.Screenshot.xml
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
content_files= \
doc-gen-org.gnome.Shell.SearchProvider.xml \
doc-gen-org.gnome.Shell.SearchProvider2.xml \
doc-gen-org.gnome.Shell.Screenshot.xml
# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
# These files must be listed here *and* in content_files
# e.g. expand_content_files=running.sgml
expand_content_files=
# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
# Only needed if you are using gtkdoc-scangobj to dynamically query widget
# signals and properties.
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
GTKDOC_CFLAGS=$(GNOME_SHELL_CFLAGS)
GTKDOC_LIBS=$(GNOME_SHELL_LIBS) $(top_builddir)/src/libgnome-shell-menu.la $(top_builddir)/src/libgnome-shell.la -rpath $(MUTTER_TYPELIB_DIR)
# This includes the standard gtk-doc make rules, copied by gtkdocize.
include $(top_srcdir)/gtk-doc.make
# Other files to distribute
# e.g. EXTRA_DIST += version.xml.in
EXTRA_DIST += version.xml.in
# Files not to distribute
# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
DISTCLEANFILES = $(DOC_MODULE).types
# Comment this out if you want 'make check' to test you doc status
# and run some sanity checks
if ENABLE_GTK_DOC
TESTS_ENVIRONMENT = cd $(srcdir) && \
DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \
SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir)
#TESTS = $(GTKDOC_CHECK)
endif
-include $(top_srcdir)/git.mk

View File

@@ -0,0 +1,104 @@
## Process this file with automake to produce Makefile.in
# We require automake 1.6 at least.
AUTOMAKE_OPTIONS = 1.6
# This is a blank Makefile.am for using gtk-doc.
# Copy this to your project's API docs directory and modify the variables to
# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
# of using the various options.
# The name of the module, e.g. 'glib'.
DOC_MODULE=st
# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
#DOC_MODULE_VERSION=2
# The top-level SGML file. You can change this if you want to.
DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
# Directories containing the source code
# gtk-doc will search all .c and .h files beneath these paths
# for inline comments documenting functions and macros.
DOC_SOURCE_DIR=$(top_srcdir)/src/st
# Extra options to pass to gtkdoc-scangobj. Not normally needed.
SCANGOBJ_OPTIONS=
# Extra options to supply to gtkdoc-scan.
# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
SCAN_OPTIONS=--rebuild-types --rebuild-sections
# Extra options to supply to gtkdoc-mkdb.
# e.g. MKDB_OPTIONS=--xml-mode --output-format=xml
MKDB_OPTIONS=--xml-mode --output-format=xml
# Extra options to supply to gtkdoc-mktmpl
# e.g. MKTMPL_OPTIONS=--only-section-tmpl
MKTMPL_OPTIONS=
# Extra options to supply to gtkdoc-mkhtml
MKHTML_OPTIONS=
# Extra options to supply to gtkdoc-fixref. Not normally needed.
# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
FIXXREF_OPTIONS=
# Used for dependencies. The docs will be rebuilt if any of these change.
# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
HFILE_GLOB=$(top_srcdir)/src/st/*.h
CFILE_GLOB=$(top_srcdir)/src/st/*.c
# Extra header to include when scanning, which are not under DOC_SOURCE_DIR
# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
EXTRA_HFILES=
# Header files or dirs to ignore when scanning. Use base file/dir names
# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code
IGNORE_HFILES=st-private.h st-theme-node-private.h
# Images to copy into HTML directory.
# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
HTML_IMAGES=
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
content_files=
# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
# These files must be listed here *and* in content_files
# e.g. expand_content_files=running.sgml
expand_content_files=
# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
# Only needed if you are using gtkdoc-scangobj to dynamically query widget
# signals and properties.
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
GTKDOC_CFLAGS=
GTKDOC_LIBS=$(top_builddir)/src/libst-1.0.la -rpath $(MUTTER_TYPELIB_DIR)
# This includes the standard gtk-doc make rules, copied by gtkdocize.
include $(top_srcdir)/gtk-doc.make
# Other files to distribute
# e.g. EXTRA_DIST += version.xml.in
EXTRA_DIST += version.xml.in
# Files not to distribute
# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
DISTCLEANFILES = $(DOC_MODULE).types $(DOC_MODULE)-sections.txt
# Comment this out if you want 'make check' to test you doc status
# and run some sanity checks
if ENABLE_GTK_DOC
TESTS_ENVIRONMENT = cd $(srcdir) && \
DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \
SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir)
#TESTS = $(GTKDOC_CHECK)
endif
-include $(top_srcdir)/git.mk

39
js/Makefile.am Normal file
View File

@@ -0,0 +1,39 @@
NULL =
BUILT_SOURCES =
misc/config.js: misc/config.js.in Makefile
[ -d $(@D) ] || $(mkdir_p) $(@D) ; \
sed -e "s|[@]PACKAGE_NAME@|$(PACKAGE_NAME)|g" \
-e "s|[@]PACKAGE_VERSION@|$(PACKAGE_VERSION)|g" \
-e "s|[@]HAVE_BLUETOOTH@|$(HAVE_BLUETOOTH)|g" \
-e "s|[@]HAVE_NETWORKMANAGER@|$(HAVE_NETWORKMANAGER)|g" \
-e "s|[@]GETTEXT_PACKAGE@|$(GETTEXT_PACKAGE)|g" \
-e "s|[@]datadir@|$(datadir)|g" \
-e "s|[@]libexecdir@|$(libexecdir)|g" \
-e "s|[@]sysconfdir@|$(sysconfdir)|g" \
-e "s|[@]LIBMUTTER_API_VERSION@|$(LIBMUTTER_API_VERSION)|g" \
$< > $@
js_resource_files = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --sourcedir=$(builddir) --generate-dependencies $(srcdir)/js-resources.gresource.xml)
js-resources.h: js-resources.gresource.xml $(js_resource_files) misc/config.js
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --sourcedir=$(builddir) --generate --c-name shell_js_resources $<
js-resources.c: js-resources.gresource.xml $(js_resource_files) misc/config.js
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --sourcedir=$(builddir) --generate --c-name shell_js_resources $<
js_built_sources = js-resources.c js-resources.h
BUILT_SOURCES += $(js_built_sources)
all-local: $(js_built_sources)
js_resource_dist_files = $(filter-out misc/config.js, $(js_resource_files))
EXTRA_DIST = \
$(js_resource_dist_files) \
js-resources.gresource.xml \
misc/config.js.in \
$(NULL)
CLEANFILES = \
$(js_built_sources) \
$(NULL)

190
js/gdm/authList.js Normal file
View File

@@ -0,0 +1,190 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/*
* Copyright 2017 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, see <http://www.gnu.org/licenses/>.
*/
const Clutter = imports.gi.Clutter;
const GObject = imports.gi.GObject;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Meta = imports.gi.Meta;
const Signals = imports.signals;
const St = imports.gi.St;
const Tweener = imports.ui.tweener;
const _SCROLL_ANIMATION_TIME = 0.5;
const AuthListItem = new Lang.Class({
Name: 'AuthListItem',
_init: function(key, text) {
this.key = key;
let label = new St.Label({ style_class: 'auth-list-item-label',
y_align: Clutter.ActorAlign.CENTER });
label.text = text;
this.actor = new St.Button({ style_class: 'login-dialog-user-list-item',
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
can_focus: true,
child: label,
reactive: true,
x_align: St.Align.START,
x_fill: true });
this.actor.connect('key-focus-in', () => {
this._setSelected(true);
});
this.actor.connect('key-focus-out', () => {
this._setSelected(false);
});
this.actor.connect('notify::hover', () => {
this._setSelected(this.actor.hover);
});
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
},
_onClicked: function() {
this.emit('activate');
},
_setSelected: function(selected) {
if (selected) {
this.actor.add_style_pseudo_class('selected');
this.actor.grab_key_focus();
} else {
this.actor.remove_style_pseudo_class('selected');
}
}
});
Signals.addSignalMethods(AuthListItem.prototype);
const AuthList = new Lang.Class({
Name: 'AuthList',
_init: function() {
this.actor = new St.ScrollView({ style_class: 'login-dialog-user-list-view'});
this.actor.set_policy(Gtk.PolicyType.NEVER,
Gtk.PolicyType.AUTOMATIC);
this._box = new St.BoxLayout({ vertical: true,
style_class: 'login-dialog-user-list',
pseudo_class: 'expanded' });
this.actor.add_actor(this._box);
this._items = {};
this.actor.connect('key-focus-in', Lang.bind(this, this._moveFocusToItems));
},
_moveFocusToItems: function() {
let hasItems = Object.keys(this._items).length > 0;
if (!hasItems)
return;
if (global.stage.get_key_focus() != this.actor)
return;
let focusSet = this.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
if (!focusSet) {
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() {
this._moveFocusToItems();
return false;
}));
}
},
_onItemActivated: function(activatedItem) {
this.emit('activate', activatedItem.key);
},
scrollToItem: function(item) {
let box = item.actor.get_allocation_box();
let adjustment = this.actor.get_vscroll_bar().get_adjustment();
let value = (box.y1 + adjustment.step_increment / 2.0) - (adjustment.page_size / 2.0);
Tweener.removeTweens(adjustment);
Tweener.addTween (adjustment,
{ value: value,
time: _SCROLL_ANIMATION_TIME,
transition: 'easeOutQuad' });
},
jumpToItem: function(item) {
let box = item.actor.get_allocation_box();
let adjustment = this.actor.get_vscroll_bar().get_adjustment();
let value = (box.y1 + adjustment.step_increment / 2.0) - (adjustment.page_size / 2.0);
adjustment.set_value(value);
},
getItem: function(key) {
let item = this._items[key];
if (!item)
return null;
return item;
},
addItem: function(key, text) {
this.removeItem(key);
let item = new AuthListItem(key, text);
this._box.add(item.actor, { x_fill: true });
this._items[key] = item;
item.connect('activate',
Lang.bind(this, this._onItemActivated));
// Try to keep the focused item front-and-center
item.actor.connect('key-focus-in',
Lang.bind(this,
function() {
this.scrollToItem(item);
}));
this._moveFocusToItems();
this.emit('item-added', item);
},
removeItem: function(key) {
let item = this._items[key];
if (!item)
return;
item.actor.destroy();
delete this._items[key];
},
numItems: function() {
return Object.keys(this._items).length;
},
clear: function() {
this._box.destroy_all_children();
this._items = {};
}
});
Signals.addSignalMethods(AuthList.prototype);

View File

@@ -8,6 +8,7 @@ const Signals = imports.signals;
const St = imports.gi.St;
const Animation = imports.ui.animation;
const AuthList = imports.gdm.authList;
const Batch = imports.gdm.batch;
const GdmUtil = imports.gdm.util;
const Params = imports.misc.params;
@@ -57,6 +58,7 @@ var AuthPrompt = new Lang.Class({
this._userVerifier.connect('ask-question', Lang.bind(this, this._onAskQuestion));
this._userVerifier.connect('show-message', Lang.bind(this, this._onShowMessage));
this._userVerifier.connect('show-choice-list', Lang.bind(this, this._onShowChoiceList));
this._userVerifier.connect('verification-failed', Lang.bind(this, this._onVerificationFailed));
this._userVerifier.connect('verification-complete', Lang.bind(this, this._onVerificationComplete));
this._userVerifier.connect('reset', Lang.bind(this, this._onReset));
@@ -117,6 +119,17 @@ var AuthPrompt = new Lang.Class({
this._message.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
this.actor.add(this._message, { x_fill: false, x_align: St.Align.START, y_align: St.Align.START });
this._authList = new AuthList.AuthList();
this._authList.connect('activate', (list, key) => {
this._userVerifier.selectChoice(this._queryingService, key);
});
this._authList.actor.hide();
this.actor.add(this._authList.actor,
{ expand: true,
x_fill: true,
y_fill: false,
x_align: St.Align.START });
this._buttonBox = new St.BoxLayout({ style_class: 'login-dialog-button-box',
vertical: false });
this.actor.add(this._buttonBox,
@@ -222,6 +235,21 @@ var AuthPrompt = new Lang.Class({
this.emit('prompted');
},
_onShowChoiceList: function(userVerifier, serviceName, choiceList) {
if (this._queryingService)
this.clear();
this._queryingService = serviceName;
if (this._preemptiveAnswer)
this._preemptiveAnswer = null;
this.nextButton.label = _("Next");
this.setChoiceList(choiceList);
this.updateSensitivity(true);
this.emit('prompted');
},
_onOVirtUserAuthenticated: function() {
if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED)
this.reset();
@@ -350,6 +378,8 @@ var AuthPrompt = new Lang.Class({
clear: function() {
this._entry.text = '';
this.stopSpinning();
this._authList.clear();
this._authList.actor.hide();
},
setPasswordChar: function(passwordChar) {
@@ -360,12 +390,25 @@ var AuthPrompt = new Lang.Class({
setQuestion: function(question) {
this._label.set_text(question);
this._authList.actor.hide();
this._label.show();
this._entry.show();
this._entry.grab_key_focus();
},
setChoiceList: function(choiceList) {
this._label.hide();
this._entry.hide();
this._authList.clear();
for (let key in choiceList) {
let text = choiceList[key];
this._authList.addItem(key, text);
}
this._authList.actor.show();
},
getAnswer: function() {
let text;
@@ -416,7 +459,7 @@ var AuthPrompt = new Lang.Class({
},
updateSensitivity: function(sensitive) {
this._updateNextButtonSensitivity(sensitive && (this._entry.text.length > 0 || this.verificationStatus == AuthPromptStatus.VERIFYING));
this._updateNextButtonSensitivity(sensitive && !this._authList.actor.visible && (this._entry.text.length > 0 || this.verificationStatus == AuthPromptStatus.VERIFYING));
this._entry.reactive = sensitive;
this._entry.clutter_text.editable = sensitive;
},

View File

@@ -418,6 +418,11 @@ var LoginDialog = new Lang.Class({
this._userManager = AccountsService.UserManager.get_default()
this._gdmClient = new Gdm.Client();
try {
this._gdmClient.set_enabled_extensions([Gdm.UserVerifierChoiceList.interface_info().name]);
} catch(e) {
}
this._settings = new Gio.Settings({ schema_id: GdmUtil.LOGIN_SCREEN_SCHEMA });
this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_KEY,

View File

@@ -17,23 +17,23 @@ const ShellEntry = imports.ui.shellEntry;
const SmartcardManager = imports.misc.smartcardManager;
const Tweener = imports.ui.tweener;
var PASSWORD_SERVICE_NAME = 'gdm-password';
var FINGERPRINT_SERVICE_NAME = 'gdm-fingerprint';
var SMARTCARD_SERVICE_NAME = 'gdm-smartcard';
var OVIRT_SERVICE_NAME = 'gdm-ovirtcred';
const PASSWORD_SERVICE_NAME = 'gdm-password';
const FINGERPRINT_SERVICE_NAME = 'gdm-fingerprint';
const SMARTCARD_SERVICE_NAME = 'gdm-smartcard';
const OVIRT_SERVICE_NAME = 'gdm-ovirtcred';
var FADE_ANIMATION_TIME = 0.16;
var CLONE_FADE_ANIMATION_TIME = 0.25;
var LOGIN_SCREEN_SCHEMA = 'org.gnome.login-screen';
var PASSWORD_AUTHENTICATION_KEY = 'enable-password-authentication';
var FINGERPRINT_AUTHENTICATION_KEY = 'enable-fingerprint-authentication';
var SMARTCARD_AUTHENTICATION_KEY = 'enable-smartcard-authentication';
var BANNER_MESSAGE_KEY = 'banner-message-enable';
var BANNER_MESSAGE_TEXT_KEY = 'banner-message-text';
var ALLOWED_FAILURES_KEY = 'allowed-failures';
const LOGIN_SCREEN_SCHEMA = 'org.gnome.login-screen';
const PASSWORD_AUTHENTICATION_KEY = 'enable-password-authentication';
const FINGERPRINT_AUTHENTICATION_KEY = 'enable-fingerprint-authentication';
const SMARTCARD_AUTHENTICATION_KEY = 'enable-smartcard-authentication';
const BANNER_MESSAGE_KEY = 'banner-message-enable';
const BANNER_MESSAGE_TEXT_KEY = 'banner-message-text';
const ALLOWED_FAILURES_KEY = 'allowed-failures';
var LOGO_KEY = 'logo';
var DISABLE_USER_LIST_KEY = 'disable-user-list';
const LOGO_KEY = 'logo';
const DISABLE_USER_LIST_KEY = 'disable-user-list';
// Give user 48ms to read each character of a PAM message
var USER_READ_TIME = 48
@@ -199,6 +199,8 @@ var ShellUserVerifier = new Lang.Class({
if (this._userVerifier) {
this._userVerifier.run_dispose();
this._userVerifier = null;
this._userVerifierChoiceList.run_dispose();
this._userVerifierChoiceList = null;
}
},
@@ -226,6 +228,10 @@ var ShellUserVerifier = new Lang.Class({
this._oVirtCredentialsManager = null;
},
selectChoice: function(serviceName, key) {
this._userVerifierChoiceList.call_select_choice(serviceName, key, this._cancellable, null);
},
answerQuery: function(serviceName, answer) {
if (!this.hasPendingMessages) {
this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null);
@@ -365,6 +371,8 @@ var ShellUserVerifier = new Lang.Class({
return;
}
this._userVerifierChoiceList = client.get_user_verifier_choice_list();
this.reauthenticating = true;
this._connectSignals();
this._beginVerification();
@@ -382,6 +390,8 @@ var ShellUserVerifier = new Lang.Class({
return;
}
this._userVerifierChoiceList = client.get_user_verifier_choice_list();
this._connectSignals();
this._beginVerification();
this._hold.release();
@@ -395,6 +405,9 @@ var ShellUserVerifier = new Lang.Class({
this._userVerifier.connect('conversation-stopped', Lang.bind(this, this._onConversationStopped));
this._userVerifier.connect('reset', Lang.bind(this, this._onReset));
this._userVerifier.connect('verification-complete', Lang.bind(this, this._onVerificationComplete));
if (this._userVerifierChoiceList)
this._userVerifierChoiceList.connect('choice-query', Lang.bind(this, this._onChoiceListQuery));
},
_getForegroundService: function() {
@@ -464,6 +477,13 @@ var ShellUserVerifier = new Lang.Class({
this._startService(FINGERPRINT_SERVICE_NAME);
},
_onChoiceListQuery: function(client, serviceName, list) {
if (!this.serviceIsForeground(serviceName))
return;
this.emit('show-choice-list', serviceName, list.deep_unpack());
},
_onInfo: function(client, serviceName, info) {
if (this.serviceIsForeground(serviceName)) {
this._queueMessage(info, MessageType.INFO);

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/gnome/shell">
<file>gdm/authList.js</file>
<file>gdm/authPrompt.js</file>
<file>gdm/batch.js</file>
<file>gdm/fingerprint.js</file>
@@ -25,7 +26,6 @@
<file>misc/params.js</file>
<file>misc/permissionStore.js</file>
<file>misc/smartcardManager.js</file>
<file>misc/systemActions.js</file>
<file>misc/util.js</file>
<file>misc/weather.js</file>
@@ -60,11 +60,11 @@
<file>ui/grabHelper.js</file>
<file>ui/ibusCandidatePopup.js</file>
<file>ui/iconGrid.js</file>
<file>ui/inhibitShortcutsDialog.js</file>
<file>ui/keyboard.js</file>
<file>ui/layout.js</file>
<file>ui/lightbox.js</file>
<file>ui/lookingGlass.js</file>
<file>ui/legacyTray.js</file>
<file>ui/magnifier.js</file>
<file>ui/magnifierDBus.js</file>
<file>ui/main.js</file>
@@ -96,7 +96,6 @@
<file>ui/shellMountOperation.js</file>
<file>ui/slider.js</file>
<file>ui/switcherPopup.js</file>
<file>ui/switchMonitor.js</file>
<file>ui/tweener.js</file>
<file>ui/unlockDialog.js</file>
<file>ui/userWidget.js</file>

View File

@@ -119,13 +119,7 @@ var LoginManagerSystemd = new Lang.Class({
return;
}
let sessionId = GLib.getenv('XDG_SESSION_ID');
if (!sessionId) {
log('Unset XDG_SESSION_ID, getCurrentSessionProxy() called outside a user session.');
return;
}
this._proxy.GetSessionRemote(sessionId, Lang.bind(this,
this._proxy.GetSessionRemote(GLib.getenv('XDG_SESSION_ID'), Lang.bind(this,
function(result, error) {
if (error) {
logError(error, 'Could not get a proxy for the current session');

View File

@@ -1,440 +0,0 @@
const AccountsService = imports.gi.AccountsService;
const Clutter = imports.gi.Clutter;
const Gdm = imports.gi.Gdm;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Meta = imports.gi.Meta;
const GObject = imports.gi.GObject;
const GnomeSession = imports.misc.gnomeSession;
const LoginManager = imports.misc.loginManager;
const Main = imports.ui.main;
const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
const LOGIN_SCREEN_SCHEMA = 'org.gnome.login-screen';
const DISABLE_USER_SWITCH_KEY = 'disable-user-switching';
const DISABLE_LOCK_SCREEN_KEY = 'disable-lock-screen';
const DISABLE_LOG_OUT_KEY = 'disable-log-out';
const DISABLE_RESTART_KEY = 'disable-restart-buttons';
const ALWAYS_SHOW_LOG_OUT_KEY = 'always-show-log-out';
const SENSOR_BUS_NAME = 'net.hadess.SensorProxy';
const SENSOR_OBJECT_PATH = '/net/hadess/SensorProxy';
const SensorProxyInterface = '<node> \
<interface name="net.hadess.SensorProxy"> \
<property name="HasAccelerometer" type="b" access="read"/> \
</interface> \
</node>';
const POWER_OFF_ACTION_ID = 'power-off';
const LOCK_SCREEN_ACTION_ID = 'lock-screen';
const LOGOUT_ACTION_ID = 'logout';
const SUSPEND_ACTION_ID = 'suspend';
const SWITCH_USER_ACTION_ID = 'switch-user';
const LOCK_ORIENTATION_ACTION_ID = 'lock-orientation';
const SensorProxy = Gio.DBusProxy.makeProxyWrapper(SensorProxyInterface);
let _singleton = null;
function getDefault() {
if (_singleton == null)
_singleton = new SystemActions();
return _singleton;
}
const SystemActions = new Lang.Class({
Name: 'SystemActions',
Extends: GObject.Object,
Properties: {
'can-power-off': GObject.ParamSpec.boolean('can-power-off',
'can-power-off',
'can-power-off',
GObject.ParamFlags.READABLE,
false),
'can-suspend': GObject.ParamSpec.boolean('can-suspend',
'can-suspend',
'can-suspend',
GObject.ParamFlags.READABLE,
false),
'can-lock-screen': GObject.ParamSpec.boolean('can-lock-screen',
'can-lock-screen',
'can-lock-screen',
GObject.ParamFlags.READABLE,
false),
'can-switch-user': GObject.ParamSpec.boolean('can-switch-user',
'can-switch-user',
'can-switch-user',
GObject.ParamFlags.READABLE,
false),
'can-logout': GObject.ParamSpec.boolean('can-logout',
'can-logout',
'can-logout',
GObject.ParamFlags.READABLE,
false),
'can-lock-orientation': GObject.ParamSpec.boolean('can-lock-orientation',
'can-lock-orientation',
'can-lock-orientation',
GObject.ParamFlags.READABLE,
false),
'orientation-lock-icon': GObject.ParamSpec.string('orientation-lock-icon',
'orientation-lock-icon',
'orientation-lock-icon',
GObject.ParamFlags.READWRITE,
null)
},
_init: function() {
this.parent();
this._canHavePowerOff = true;
this._canHaveSuspend = true;
this._actions = new Map();
this._actions.set(POWER_OFF_ACTION_ID,
{ // Translators: The name of the power-off action in search
name: C_("search-result", "Power off"),
iconName: 'system-shutdown-symbolic',
// Translators: A list of keywords that match the power-off action, separated by semicolons
keywords: _("power off;shutdown").split(';'),
available: false });
this._actions.set(LOCK_SCREEN_ACTION_ID,
{ // Translators: The name of the lock screen action in search
name: C_("search-result", "Lock screen"),
iconName: 'system-lock-screen-symbolic',
// Translators: A list of keywords that match the lock screen action, separated by semicolons
keywords: _("lock screen").split(';'),
available: false });
this._actions.set(LOGOUT_ACTION_ID,
{ // Translators: The name of the logout action in search
name: C_("search-result", "Log out"),
iconName: 'application-exit-symbolic',
// Translators: A list of keywords that match the logout action, separated by semicolons
keywords: _("logout;sign off").split(';'),
available: false });
this._actions.set(SUSPEND_ACTION_ID,
{ // Translators: The name of the suspend action in search
name: C_("search-result", "Suspend"),
iconName: 'media-playback-pause-symbolic',
// Translators: A list of keywords that match the suspend action, separated by semicolons
keywords: _("suspend;sleep").split(';'),
available: false });
this._actions.set(SWITCH_USER_ACTION_ID,
{ // Translators: The name of the switch user action in search
name: C_("search-result", "Switch user"),
iconName: 'system-switch-user-symbolic',
// Translators: A list of keywords that match the switch user action, separated by semicolons
keywords: _("switch user").split(';'),
available: false });
this._actions.set(LOCK_ORIENTATION_ACTION_ID,
{ // Translators: The name of the lock orientation action in search
name: C_("search-result", "Lock orientation"),
iconName: '',
// Translators: A list of keywords that match the lock orientation action, separated by semicolons
keywords: _("lock orientation").split(';'),
available: false });
this._loginScreenSettings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA });
this._lockdownSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA });
this._orientationSettings = new Gio.Settings({ schema_id: 'org.gnome.settings-daemon.peripherals.touchscreen' });
this._session = new GnomeSession.SessionManager();
this._loginManager = LoginManager.getLoginManager();
this._monitorManager = Meta.MonitorManager.get();
this._userManager = AccountsService.UserManager.get_default();
this._userManager.connect('notify::is-loaded',
() => { this._updateMultiUser(); });
this._userManager.connect('notify::has-multiple-users',
() => { this._updateMultiUser(); });
this._userManager.connect('user-added',
() => { this._updateMultiUser(); });
this._userManager.connect('user-removed',
() => { this._updateMultiUser(); });
this._lockdownSettings.connect('changed::' + DISABLE_USER_SWITCH_KEY,
() => { this._updateSwitchUser(); });
this._lockdownSettings.connect('changed::' + DISABLE_LOG_OUT_KEY,
() => { this._updateLogout(); });
global.settings.connect('changed::' + ALWAYS_SHOW_LOG_OUT_KEY,
() => { this._updateLogout(); });
this._lockdownSettings.connect('changed::' + DISABLE_LOCK_SCREEN_KEY,
() => { this._updateLockScreen(); });
this._lockdownSettings.connect('changed::' + DISABLE_LOG_OUT_KEY,
() => { this._updateHaveShutdown(); });
this.forceUpdate();
this._orientationSettings.connect('changed::orientation-lock',
() => { this._updateOrientationLock();
this._updateOrientationLockIcon(); });
Main.layoutManager.connect('monitors-changed',
() => { this._updateOrientationLock(); });
Gio.DBus.system.watch_name(SENSOR_BUS_NAME,
Gio.BusNameWatcherFlags.NONE,
() => { this._sensorProxyAppeared(); },
() => {
this._sensorProxy = null;
this._updateOrientationLock();
});
this._updateOrientationLock();
this._updateOrientationLockIcon();
Main.sessionMode.connect('updated', () => { this._sessionUpdated(); });
this._sessionUpdated();
},
get can_power_off() {
return this._actions.get(POWER_OFF_ACTION_ID).available;
},
get can_suspend() {
return this._actions.get(SUSPEND_ACTION_ID).available;
},
get can_lock_screen() {
return this._actions.get(LOCK_SCREEN_ACTION_ID).available;
},
get can_switch_user() {
return this._actions.get(SWITCH_USER_ACTION_ID).available;
},
get can_logout() {
return this._actions.get(LOGOUT_ACTION_ID).available;
},
get can_lock_orientation() {
return this._actions.get(LOCK_ORIENTATION_ACTION_ID).available;
},
get orientation_lock_icon() {
return this._actions.get(LOCK_ORIENTATION_ACTION_ID).iconName;
},
_sensorProxyAppeared: function() {
this._sensorProxy = new SensorProxy(Gio.DBus.system, SENSOR_BUS_NAME, SENSOR_OBJECT_PATH,
(proxy, error) => {
if (error) {
log(error.message);
return;
}
this._sensorProxy.connect('g-properties-changed',
() => { this._updateOrientationLock(); });
this._updateOrientationLock();
});
},
_updateOrientationLock: function() {
let available = false;
if (this._sensorProxy)
available = this._sensorProxy.HasAccelerometer &&
this._monitorManager.get_is_builtin_display_on();
this._actions.get(LOCK_ORIENTATION_ACTION_ID).available = available;
this.notify('can-lock-orientation');
},
_updateOrientationLockIcon: function() {
let locked = this._orientationSettings.get_boolean('orientation-lock');
let iconName = locked ? 'rotation-locked-symbolic'
: 'rotation-allowed-symbolic';
this._actions.get(LOCK_ORIENTATION_ACTION_ID).iconName = iconName;
this.notify('orientation-lock-icon');
},
_sessionUpdated: function() {
this._updateLockScreen();
this._updatePowerOff();
this._updateSuspend();
this._updateMultiUser();
},
forceUpdate: function() {
// Whether those actions are available or not depends on both lockdown
// settings and Polkit policy - we don't get change notifications for the
// latter, so their value may be outdated; force an update now
this._updateHaveShutdown();
this._updateHaveSuspend();
},
getMatchingActions: function(terms) {
// terms is a list of strings
terms = terms.map((term) => { return term.toLowerCase(); });
let results = [];
for (let [key, {available, keywords}] of this._actions)
if (available && terms.every(t => keywords.some(k => (k.indexOf(t) >= 0))))
results.push(key);
return results;
},
getName: function(id) {
return this._actions.get(id).name;
},
getIconName: function(id) {
return this._actions.get(id).iconName;
},
activateAction: function(id) {
switch (id) {
case POWER_OFF_ACTION_ID:
this.activatePowerOff();
break;
case LOCK_SCREEN_ACTION_ID:
this.activateLockScreen();
break;
case LOGOUT_ACTION_ID:
this.activateLogout();
break;
case SUSPEND_ACTION_ID:
this.activateSuspend();
break;
case SWITCH_USER_ACTION_ID:
this.activateSwitchUser();
break;
case LOCK_ORIENTATION_ACTION_ID:
this.activateLockOrientation();
break;
}
},
_updateLockScreen() {
let showLock = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
let allowLockScreen = !this._lockdownSettings.get_boolean(DISABLE_LOCK_SCREEN_KEY);
this._actions.get(LOCK_SCREEN_ACTION_ID).available = showLock && allowLockScreen && LoginManager.canLock();
this.notify('can-lock-screen');
},
_updateHaveShutdown: function() {
this._session.CanShutdownRemote((result, error) => {
if (error)
return;
this._canHavePowerOff = result[0];
this._updatePowerOff();
});
},
_updatePowerOff: function() {
let disabled = Main.sessionMode.isLocked ||
(Main.sessionMode.isGreeter &&
this._loginScreenSettings.get_boolean(DISABLE_RESTART_KEY));
this._actions.get(POWER_OFF_ACTION_ID).available = this._canHavePowerOff && !disabled;
this.notify('can-power-off');
},
_updateHaveSuspend: function() {
this._loginManager.canSuspend(
(canSuspend, needsAuth) => {
this._canHaveSuspend = canSuspend;
this._suspendNeedsAuth = needsAuth;
this._updateSuspend();
});
},
_updateSuspend: function() {
let disabled = (Main.sessionMode.isLocked &&
this._suspendNeedsAuth) ||
(Main.sessionMode.isGreeter &&
this._loginScreenSettings.get_boolean(DISABLE_RESTART_KEY));
this._actions.get(SUSPEND_ACTION_ID).available = this._canHaveSuspend && !disabled;
this.notify('can-suspend');
},
_updateMultiUser: function() {
this._updateLogout();
this._updateSwitchUser();
},
_updateSwitchUser: function() {
let allowSwitch = !this._lockdownSettings.get_boolean(DISABLE_USER_SWITCH_KEY);
let multiUser = this._userManager.can_switch() && this._userManager.has_multiple_users;
let shouldShowInMode = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
let visible = allowSwitch && multiUser && shouldShowInMode;
this._actions.get(SWITCH_USER_ACTION_ID).available = visible;
this.notify('can-switch-user');
return visible;
},
_updateLogout: function() {
let user = this._userManager.get_user(GLib.get_user_name());
let allowLogout = !this._lockdownSettings.get_boolean(DISABLE_LOG_OUT_KEY);
let alwaysShow = global.settings.get_boolean(ALWAYS_SHOW_LOG_OUT_KEY);
let systemAccount = user.system_account;
let localAccount = user.local_account;
let multiUser = this._userManager.has_multiple_users;
let multiSession = Gdm.get_session_ids().length > 1;
let shouldShowInMode = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
let visible = allowLogout && (alwaysShow || multiUser || multiSession || systemAccount || !localAccount) && shouldShowInMode;
this._actions.get(LOGOUT_ACTION_ID).available = visible;
this.notify('can-logout');
return visible;
},
activateLockOrientation: function() {
if (!this._actions.get(LOCK_ORIENTATION_ACTION_ID).available)
throw new Error('The lock-orientation action is not available!');
let locked = this._orientationSettings.get_boolean('orientation-lock');
this._orientationSettings.set_boolean('orientation-lock', !locked);
},
activateLockScreen: function() {
if (!this._actions.get(LOCK_SCREEN_ACTION_ID).available)
throw new Error('The lock-screen action is not available!');
Main.screenShield.lock(true);
},
activateSwitchUser: function() {
if (!this._actions.get(SWITCH_USER_ACTION_ID).available)
throw new Error('The switch-user action is not available!');
if (Main.screenShield)
Main.screenShield.lock(false);
Clutter.threads_add_repaint_func_full(Clutter.RepaintFlags.POST_PAINT, function() {
Gdm.goto_login_session_sync(null);
return false;
});
},
activateLogout: function() {
if (!this._actions.get(LOGOUT_ACTION_ID).available)
throw new Error('The logout action is not available!');
Main.overview.hide();
this._session.LogoutRemote(0);
},
activatePowerOff: function() {
if (!this._actions.get(POWER_OFF_ACTION_ID).available)
throw new Error('The power-off action is not available!');
this._session.ShutdownRemote(0);
},
activateSuspend: function() {
if (!this._actions.get(SUSPEND_ACTION_ID).available)
throw new Error('The suspend action is not available!');
this._loginManager.suspend();
}
});

View File

@@ -158,10 +158,7 @@ var AppSwitcherPopup = new Lang.Class({
_keyPressHandler: function(keysym, action) {
if (action == Meta.KeyBindingAction.SWITCH_GROUP) {
if (!this._thumbnailsFocused)
this._select(this._selectedIndex, 0);
else
this._select(this._selectedIndex, this._nextWindow());
this._select(this._selectedIndex, this._nextWindow());
} else if (action == Meta.KeyBindingAction.SWITCH_GROUP_BACKWARD) {
this._select(this._selectedIndex, this._previousWindow());
} else if (action == Meta.KeyBindingAction.SWITCH_APPLICATIONS) {

View File

@@ -24,11 +24,8 @@ const OverviewControls = imports.ui.overviewControls;
const PopupMenu = imports.ui.popupMenu;
const Tweener = imports.ui.tweener;
const Workspace = imports.ui.workspace;
const Search = imports.ui.search;
const System = imports.ui.status.system;
const Params = imports.misc.params;
const Util = imports.misc.util;
const SystemActions = imports.misc.systemActions;
var MAX_APPLICATION_WORK_MILLIS = 75;
var MENU_POPUP_TIMEOUT = 600;
@@ -1088,35 +1085,19 @@ var AppSearchProvider = new Lang.Class({
this.id = 'applications';
this.isRemoteProvider = false;
this.canLaunchSearch = false;
this._systemActions = new SystemActions.getDefault();
},
getResultMetas: function(apps, callback) {
let metas = [];
for (let id of apps) {
if (id.endsWith('.desktop')) {
let app = this._appSys.lookup_app(id);
metas.push({ 'id': app.get_id(),
'name': app.get_name(),
'createIcon': function(size) {
return app.create_icon_texture(size);
}
});
} else {
let name = this._systemActions.getName(id);
let iconName = this._systemActions.getIconName(id);
let createIcon = size => new St.Icon({ icon_name: iconName,
width: size,
height: size,
style_class: 'system-action-icon' });
metas.push({ id, name, createIcon });
}
for (let i = 0; i < apps.length; i++) {
let app = this._appSys.lookup_app(apps[i]);
metas.push({ 'id': app.get_id(),
'name': app.get_name(),
'createIcon': function(size) {
return app.create_icon_texture(size);
}
});
}
callback(metas);
},
@@ -1138,9 +1119,6 @@ var AppSearchProvider = new Lang.Class({
return usage.compare('', a, b);
}));
});
results = results.concat(this._systemActions.getMatchingActions(terms));
callback(results);
},
@@ -1149,10 +1127,8 @@ var AppSearchProvider = new Lang.Class({
},
createResultObject: function (resultMeta) {
if (resultMeta.id.endsWith('.desktop'))
return new AppIcon(this._appSys.lookup_app(resultMeta['id']));
else
return new SystemActionIcon(this, resultMeta);
let app = this._appSys.lookup_app(resultMeta['id']);
return new AppIcon(app);
}
});
@@ -1196,9 +1172,13 @@ var FolderView = new Lang.Class({
let numItems = this._allItems.length;
let rtl = icon.get_text_direction() == Clutter.TextDirection.RTL;
for (let i = 0; i < 4; i++) {
let bin = new St.Bin({ width: subSize, height: subSize });
if (i < numItems)
bin.child = this._allItems[i].app.create_icon_texture(subSize);
let bin;
if (i < numItems) {
let texture = this._allItems[i].app.create_icon_texture(subSize);
bin = new St.Bin({ child: texture });
} else {
bin = new St.Bin({ width: subSize, height: subSize });
}
layout.attach(bin, rtl ? (i + 1) % 2 : i % 2, Math.floor(i / 2), 1, 1);
}
@@ -2007,13 +1987,3 @@ var AppIconMenu = new Lang.Class({
}
});
Signals.addSignalMethods(AppIconMenu.prototype);
var SystemActionIcon = new Lang.Class({
Name: 'SystemActionIcon',
Extends: Search.GridSearchResult,
activate: function() {
SystemActions.getDefault().activateAction(this.metaInfo['id']);
Main.overview.hide();
}
});

View File

@@ -11,7 +11,6 @@ const RENAMED_DESKTOP_IDS = {
'baobab.desktop': 'org.gnome.baobab.desktop',
'cheese.desktop': 'org.gnome.Cheese.desktop',
'dconf-editor.desktop': 'ca.desrt.dconf-editor.desktop',
'empathy.desktop': 'org.gnome.Empathy.desktop',
'epiphany.desktop': 'org.gnome.Epiphany.desktop',
'file-roller.desktop': 'org.gnome.FileRoller.desktop',
'gcalctool.desktop': 'org.gnome.Calculator.desktop',

View File

@@ -154,12 +154,8 @@ var BackgroundCache = new Lang.Class({
let monitor = file.monitor(Gio.FileMonitorFlags.NONE, null);
monitor.connect('changed',
Lang.bind(this, function(obj, file, otherFile, eventType) {
// Ignore CHANGED and CREATED events, since in both cases
// we'll get a CHANGES_DONE_HINT event when done.
if (eventType != Gio.FileMonitorEvent.CHANGED &&
eventType != Gio.FileMonitorEvent.CREATED)
this.emit('file-changed', file);
Lang.bind(this, function() {
this.emit('file-changed', file);
}));
this._fileMonitors[key] = monitor;

View File

@@ -587,10 +587,7 @@ var BoxPointer = new Lang.Class({
_calculateArrowSide: function(arrowSide) {
let sourceAllocation = Shell.util_get_transformed_allocation(this._sourceActor);
let [minWidth, minHeight, boxWidth, boxHeight] = this._container.get_preferred_size();
let monitorActor = this.sourceActor;
if (!monitorActor)
monitorActor = this.actor;
let monitor = Main.layoutManager.findMonitorForActor(monitorActor);
let monitor = Main.layoutManager.findMonitorForActor(this.actor);
switch (arrowSide) {
case St.Side.TOP:

View File

@@ -20,7 +20,7 @@ var MSECS_IN_DAY = 24 * 60 * 60 * 1000;
var SHOW_WEEKDATE_KEY = 'show-weekdate';
var ELLIPSIS_CHAR = '\u2026';
var MESSAGE_ICON_SIZE = -1; // pick up from CSS
var MESSAGE_ICON_SIZE = 16;
// alias to prevent xgettext from picking up strings translated in GTK+
const gtk30_ = Gettext_gtk30.gettext;
@@ -428,13 +428,6 @@ var Calendar = new Lang.Class({
this.emit('selected-date-changed', new Date(this._selectedDate));
},
updateTimeZone: function() {
// The calendar need to be rebuilt after a time zone update because
// the date might have changed.
this._rebuildCalendar();
this._update();
},
_buildHeader: function() {
let layout = this.actor.layout_manager;
let offsetCols = this._useWeekdate ? 1 : 0;

View File

@@ -255,11 +255,7 @@ var AutorunDispatcher = new Lang.Class({
if (!shouldAutorunMount(mount))
return;
let setting;
if (contentTypes.length > 0)
setting = this._getAutorunSettingForType(contentTypes[0]);
else
setting = AutorunSetting.ASK;
let setting = this._getAutorunSettingForType(contentTypes[0]);
// check at the settings for the first content type
// to see whether we should ask

View File

@@ -22,7 +22,6 @@ const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const Calendar = imports.ui.calendar;
const Weather = imports.misc.weather;
const System = imports.system;
function _isToday(date) {
let now = new Date();
@@ -234,18 +233,11 @@ var WeatherSection = new Lang.Class({
this._sync();
},
_getSummary: function(info, capitalize=false) {
let options = capitalize ? GWeather.FormatOptions.SENTENCE_CAPITALIZATION
: GWeather.FormatOptions.NO_CAPITALIZATION;
let [ok, phenomenon, qualifier] = info.get_value_conditions();
if (ok)
return new GWeather.Conditions({ significant: true,
phenomenon,
qualifier }).to_string_full(options);
let [, sky] = info.get_value_sky();
return GWeather.Sky.to_string_full(sky, options);
_getSummary: function(info) {
let summary = info.get_conditions();
if (summary == '-')
return info.get_sky();
return summary;
},
_sameSummary: function(info1, info2) {
@@ -263,10 +255,10 @@ var WeatherSection = new Lang.Class({
let info = this._weatherClient.info;
let forecasts = info.get_forecast_list();
if (forecasts.length == 0) // No forecasts, just current conditions
return '%s.'.format(this._getSummary(info, true));
return '%s.'.format(this._getSummary(info));
let current = info;
let infos = [info];
let summaries = [this._getSummary(info)];
for (let i = 0; i < forecasts.length; i++) {
let [ok, timestamp] = forecasts[i].get_value_update();
if (!_isToday(new Date(timestamp * 1000)))
@@ -276,12 +268,12 @@ var WeatherSection = new Lang.Class({
continue; // Ignore consecutive runs of equal summaries
current = forecasts[i];
if (infos.push(current) == 3)
if (summaries.push(this._getSummary(current)) == 3)
break; // Use a maximum of three summaries
}
let fmt;
switch(infos.length) {
switch(summaries.length) {
/* Translators: %s is a weather condition like "Clear sky"; see
libgweather for the possible condition strings. If at all
possible, the sentence should match the grammatical case etc. of
@@ -300,10 +292,6 @@ var WeatherSection = new Lang.Class({
the inserted conditions. */
case 3: fmt = _("%s, then %s, followed by %s later."); break;
}
let summaries = infos.map((info, i) => {
let capitalize = i == 0 && fmt.startsWith('%s');
return this._getSummary(info, capitalize);
});
return String.prototype.format.apply(fmt, summaries);
},
@@ -340,10 +328,8 @@ var MessagesIndicator = new Lang.Class({
Name: 'MessagesIndicator',
_init: function() {
this.actor = new St.Icon({ icon_name: 'message-indicator-symbolic',
icon_size: 16,
visible: false, y_expand: true,
y_align: Clutter.ActorAlign.CENTER });
this.actor = new St.Label({ text: '⚫', visible: false, y_expand: true,
y_align: Clutter.ActorAlign.CENTER });
this._sources = [];
@@ -548,7 +534,6 @@ var DateMenuButton = new Lang.Class({
this._clock = new GnomeDesktop.WallClock();
this._clock.bind_property('clock', this._clockDisplay, 'text', GObject.BindingFlags.SYNC_CREATE);
this._clock.connect('notify::timezone', Lang.bind(this, this._updateTimeZone));
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
this._sessionUpdated();
@@ -568,15 +553,6 @@ var DateMenuButton = new Lang.Class({
this._eventSource = eventSource;
},
_updateTimeZone: function() {
// SpiderMonkey caches the time zone so we must explicitly clear it
// before we can update the calendar, see
// https://bugzilla.gnome.org/show_bug.cgi?id=678507
System.clearDateCaches();
this._calendar.updateTimeZone();
},
_sessionUpdated: function() {
let eventSource;
let showEvents = Main.sessionMode.showCalendarEvents;

View File

@@ -15,8 +15,6 @@ var Dialog = new Lang.Class({
this.parent({ layout_manager: new Clutter.BinLayout() });
this.connect('destroy', Lang.bind(this, this._onDestroy));
this._initialKeyFocus = null;
this._initialKeyFocusDestroyId = 0;
this._pressedKey = null;
this._buttonKeys = {};
this._createDialog();
@@ -88,22 +86,6 @@ var Dialog = new Lang.Class({
return Clutter.EVENT_PROPAGATE;
},
_setInitialKeyFocus: function(actor) {
if (this._initialKeyFocus)
this._initialKeyFocus.disconnect(this._initialKeyFocusDestroyId);
this._initialKeyFocus = actor;
this._initialKeyFocusDestroyId = actor.connect('destroy', () => {
this._initialKeyFocus = null;
this._initialKeyFocusDestroyId = 0;
});
},
get initialKeyFocus() {
return this._initialKeyFocus || this;
},
addContent: function (actor) {
this.contentLayout.add (actor, { expand: true });
},
@@ -134,8 +116,8 @@ var Dialog = new Lang.Class({
if (isDefault)
button.add_style_pseudo_class('default');
if (this._initialKeyFocus == null || isDefault)
this._setInitialKeyFocus(button);
if (!this._initialKeyFocusDestroyId)
this._initialKeyFocus = button;
for (let i in keys)
this._buttonKeys[keys[i]] = buttonInfo;

View File

@@ -38,10 +38,10 @@ var DragDropResult = {
SUCCESS: 1,
CONTINUE: 2
};
var dragMonitors = [];
let eventHandlerActor = null;
let currentDraggable = null;
let dragMonitors = [];
function _getEventHandlerActor() {
if (!eventHandlerActor) {
@@ -94,7 +94,6 @@ var _Draggable = new Lang.Class({
this.disconnectAll();
}));
this._onEventId = null;
this._touchSequence = null;
this._restoreOnSuccess = params.restoreOnSuccess;
this._dragActorMaxSize = params.dragActorMaxSize;
@@ -531,7 +530,7 @@ var _Draggable = new Lang.Class({
// Snap the clone back to its source
[x, y] = this._dragActorSource.get_transformed_position();
let [sourceScaledWidth, sourceScaledHeight] = this._dragActorSource.get_transformed_size();
scale = sourceScaledWidth ? this._dragActor.width / sourceScaledWidth : 0;
scale = this._dragActor.width / sourceScaledWidth;
} else if (this._dragOrigParent) {
// Snap the actor back to its original position within
// its parent, adjusting for the fact that the parent

View File

@@ -1,102 +0,0 @@
const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
const GObject = imports.gi.GObject;
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 Dialog = imports.ui.dialog;
const ModalDialog = imports.ui.modalDialog;
const WAYLAND_KEYBINDINGS_SCHEMA = 'org.gnome.mutter.wayland.keybindings';
const APP_WHITELIST = ['gnome-control-center.desktop'];
var DialogResponse = Meta.InhibitShortcutsDialogResponse;
var InhibitShortcutsDialog = new Lang.Class({
Name: 'InhibitShortcutsDialog',
Extends: GObject.Object,
Implements: [Meta.InhibitShortcutsDialog],
Properties: {
'window': GObject.ParamSpec.override('window', Meta.InhibitShortcutsDialog)
},
_init: function(window) {
this.parent();
this._window = window;
this._dialog = new ModalDialog.ModalDialog();
this._buildLayout();
},
get window() {
return this._window;
},
set window(window) {
this._window = window;
},
get _app() {
let windowTracker = Shell.WindowTracker.get_default();
return windowTracker.get_window_app(this._window);
},
_getRestoreAccel: function() {
let settings = new Gio.Settings({ schema_id: WAYLAND_KEYBINDINGS_SCHEMA });
let accel = settings.get_strv('restore-shortcuts')[0] || '';
return Gtk.accelerator_get_label.apply(null,
Gtk.accelerator_parse(accel));
},
_buildLayout: function() {
let name = this._app ? this._app.get_name() : this._window.title;
/* Translators: %s is an application name like "Settings" */
let title = name ? _("%s wants to inhibit shortcuts").format(name)
: _("Application wants to inhibit shortcuts");
let icon = new Gio.ThemedIcon({ name: 'dialog-warning-symbolic' });
let contentParams = { icon, title };
let restoreAccel = this._getRestoreAccel();
if (restoreAccel)
contentParams.subtitle =
/* Translators: %s is a keyboard shortcut like "Super+x" */
_("You can restore shortcuts by pressing %s.").format(restoreAccel);
let content = new Dialog.MessageDialogContent(contentParams);
this._dialog.contentLayout.add_actor(content);
this._dialog.addButton({ label: _("Deny"),
action: () => {
this._emitResponse(DialogResponse.DENY);
},
key: Clutter.KEY_Escape });
this._dialog.addButton({ label: _("Allow"),
action: () => {
this._emitResponse(DialogResponse.ALLOW);
},
default: true });
},
_emitResponse: function(response) {
this.emit('response', response);
this._dialog.close();
},
vfunc_show: function() {
if (this._app && APP_WHITELIST.indexOf(this._app.get_id()) != -1)
this._emitResponse(DialogResponse.ALLOW);
else
this._dialog.open();
},
vfunc_hide: function() {
this._dialog.close();
}
});

View File

@@ -129,9 +129,6 @@ var MonitorConstraint = new Lang.Class({
if (!this._primary && this._index < 0)
return;
if (!Main.layoutManager.primaryMonitor)
return;
let index;
if (this._primary)
index = Main.layoutManager.primaryIndex;
@@ -192,7 +189,6 @@ var LayoutManager = new Lang.Class({
this._topActors = [];
this._isPopupWindowVisible = false;
this._startingUp = true;
this._pendingLoadBackground = false;
// We don't want to paint the stage background color because either
// the SystemBackground we create or the MetaBackgroundActor inside
@@ -327,9 +323,7 @@ var LayoutManager = new Lang.Class({
for (let i = 0; i < nMonitors; i++)
this.monitors.push(new Monitor(i, screen.get_monitor_geometry(i)));
if (nMonitors == 0) {
this.primaryIndex = this.bottomIndex = -1;
} else if (nMonitors == 1) {
if (nMonitors == 1) {
this.primaryIndex = this.bottomIndex = 0;
} else {
// If there are monitors below the primary, then we need
@@ -343,18 +337,8 @@ var LayoutManager = new Lang.Class({
}
}
}
if (this.primaryIndex != -1) {
this.primaryMonitor = this.monitors[this.primaryIndex];
this.bottomMonitor = this.monitors[this.bottomIndex];
if (this._pendingLoadBackground) {
this._loadBackground();
this._pendingLoadBackground = false;
}
} else {
this.primaryMonitor = null;
this.bottomMonitor = null;
}
this.primaryMonitor = this.monitors[this.primaryIndex];
this.bottomMonitor = this.monitors[this.bottomIndex];
},
_updateHotCorners: function() {
@@ -474,9 +458,6 @@ var LayoutManager = new Lang.Class({
this.screenShieldGroup.set_position(0, 0);
this.screenShieldGroup.set_size(global.screen_width, global.screen_height);
if (!this.primaryMonitor)
return;
this.panelBox.set_position(this.primaryMonitor.x, this.primaryMonitor.y);
this.panelBox.set_size(this.primaryMonitor.width, -1);
@@ -499,9 +480,6 @@ var LayoutManager = new Lang.Class({
this._rightPanelBarrier = null;
}
if (!this.primaryMonitor)
return;
if (this.panelBox.height) {
let primary = this.primaryMonitor;
@@ -571,10 +549,6 @@ var LayoutManager = new Lang.Class({
},
_loadBackground: function() {
if (!this.primaryMonitor) {
this._pendingLoadBackground = true;
return;
}
this._systemBackground = new Background.SystemBackground();
this._systemBackground.actor.hide();
@@ -710,10 +684,8 @@ var LayoutManager = new Lang.Class({
},
showKeyboard: function () {
this.keyboardBox.show();
Tweener.addTween(this.keyboardBox,
{ anchor_y: this.keyboardBox.height,
opacity: 255,
time: KEYBOARD_ANIMATION_TIME,
transition: 'easeOutQuad',
onComplete: this._showKeyboardComplete,
@@ -739,7 +711,6 @@ var LayoutManager = new Lang.Class({
}
Tweener.addTween(this.keyboardBox,
{ anchor_y: 0,
opacity: 0,
time: immediate ? 0 : KEYBOARD_ANIMATION_TIME,
transition: 'easeInQuad',
onComplete: this._hideKeyboardComplete,
@@ -750,7 +721,6 @@ var LayoutManager = new Lang.Class({
},
_hideKeyboardComplete: function() {
this.keyboardBox.hide();
this._updateRegions();
},

272
js/ui/legacyTray.js Normal file
View File

@@ -0,0 +1,272 @@
const Clutter = imports.gi.Clutter;
const GLib = imports.gi.GLib;
const GObject = imports.gi.GObject;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const CtrlAltTab = imports.ui.ctrlAltTab;
const Lang = imports.lang;
const Layout = imports.ui.layout;
const Main = imports.ui.main;
const Overview = imports.ui.overview;
const OverviewControls = imports.ui.overviewControls;
const Tweener = imports.ui.tweener;
var STANDARD_TRAY_ICON_IMPLEMENTATIONS = {
'bluetooth-applet': 'bluetooth',
'gnome-volume-control-applet': 'volume', // renamed to gnome-sound-applet
// when moved to control center
'gnome-sound-applet': 'volume',
'nm-applet': 'network',
'gnome-power-manager': 'battery',
'keyboard': 'keyboard',
'a11y-keyboard': 'a11y',
'kbd-scrolllock': 'keyboard',
'kbd-numlock': 'keyboard',
'kbd-capslock': 'keyboard',
'ibus-ui-gtk': 'keyboard'
};
// Offset of the original position from the bottom-right corner
var CONCEALED_WIDTH = 3;
var REVEAL_ANIMATION_TIME = 0.2;
var TEMP_REVEAL_TIME = 2;
var BARRIER_THRESHOLD = 70;
var BARRIER_TIMEOUT = 1000;
var LegacyTray = new Lang.Class({
Name: 'LegacyTray',
_init: function() {
this.actor = new St.Widget({ clip_to_allocation: true,
layout_manager: new Clutter.BinLayout() });
let constraint = new Layout.MonitorConstraint({ primary: true,
work_area: true });
this.actor.add_constraint(constraint);
this._slideLayout = new OverviewControls.SlideLayout();
this._slideLayout.translationX = 0;
this._slideLayout.slideDirection = OverviewControls.SlideDirection.LEFT;
this._slider = new St.Widget({ x_expand: true, y_expand: true,
x_align: Clutter.ActorAlign.START,
y_align: Clutter.ActorAlign.END,
layout_manager: this._slideLayout });
this.actor.add_actor(this._slider);
this._slider.connect('notify::allocation', Lang.bind(this, this._syncBarrier));
this._box = new St.BoxLayout({ style_class: 'legacy-tray' });
this._slider.add_actor(this._box);
this._concealHandle = new St.Button({ style_class: 'legacy-tray-handle',
/* translators: 'Hide' is a verb */
accessible_name: _("Hide tray"),
can_focus: true });
this._concealHandle.child = new St.Icon({ icon_name: 'go-previous-symbolic' });
this._box.add_child(this._concealHandle);
this._iconBox = new St.BoxLayout({ style_class: 'legacy-tray-icon-box' });
this._box.add_actor(this._iconBox);
this._revealHandle = new St.Button({ style_class: 'legacy-tray-handle' });
this._revealHandle.child = new St.Icon({ icon_name: 'go-next-symbolic' });
this._box.add_child(this._revealHandle);
this._revealHandle.bind_property('visible',
this._concealHandle, 'visible',
GObject.BindingFlags.BIDIRECTIONAL |
GObject.BindingFlags.INVERT_BOOLEAN);
this._revealHandle.connect('notify::visible',
Lang.bind(this, this._sync));
this._revealHandle.connect('notify::hover',
Lang.bind(this ,this._sync));
this._revealHandle.connect('clicked', Lang.bind(this,
function() {
this._concealHandle.show();
}));
this._concealHandle.connect('clicked', Lang.bind(this,
function() {
this._revealHandle.show();
}));
this._horizontalBarrier = null;
this._pressureBarrier = new Layout.PressureBarrier(BARRIER_THRESHOLD,
BARRIER_TIMEOUT,
Shell.ActionMode.NORMAL);
this._pressureBarrier.connect('trigger', Lang.bind(this, function() {
this._concealHandle.show();
}));
Main.layoutManager.addChrome(this.actor, { affectsInputRegion: false });
Main.layoutManager.trackChrome(this._slider, { affectsInputRegion: true });
Main.uiGroup.set_child_below_sibling(this.actor, Main.layoutManager.modalDialogGroup);
Main.ctrlAltTabManager.addGroup(this.actor,
_("Status Icons"), 'focus-legacy-systray-symbolic',
{ sortGroup: CtrlAltTab.SortGroup.BOTTOM });
this._trayManager = new Shell.TrayManager();
this._trayIconAddedId = this._trayManager.connect('tray-icon-added', Lang.bind(this, this._onTrayIconAdded));
this._trayIconRemovedId = this._trayManager.connect('tray-icon-removed', Lang.bind(this, this._onTrayIconRemoved));
this._trayManager.manage_screen(global.screen, this.actor);
Main.overview.connect('showing', Lang.bind(this,
function() {
Tweener.removeTweens(this._slider);
Tweener.addTween(this._slider, { opacity: 0,
time: Overview.ANIMATION_TIME,
transition: 'easeOutQuad' });
}));
Main.overview.connect('shown', Lang.bind(this, this._sync));
Main.overview.connect('hiding', Lang.bind(this,
function() {
this._sync();
Tweener.removeTweens(this._slider);
Tweener.addTween(this._slider, { opacity: 255,
time: Overview.ANIMATION_TIME,
transition: 'easeOutQuad' });
}));
Main.layoutManager.connect('monitors-changed',
Lang.bind(this, this._sync));
global.screen.connect('in-fullscreen-changed',
Lang.bind(this, this._sync));
Main.sessionMode.connect('updated', Lang.bind(this, this._sync));
this._sync();
},
_onTrayIconAdded: function(tm, icon) {
let wmClass = icon.wm_class ? icon.wm_class.toLowerCase() : '';
if (STANDARD_TRAY_ICON_IMPLEMENTATIONS[wmClass] !== undefined)
return;
let button = new St.Button({ child: icon,
style_class: 'legacy-tray-icon',
button_mask: St.ButtonMask.ONE |
St.ButtonMask.TWO |
St.ButtonMask.THREE,
can_focus: true,
x_fill: true, y_fill: true });
let app = Shell.WindowTracker.get_default().get_app_from_pid(icon.pid);
if (!app)
app = Shell.AppSystem.get_default().lookup_startup_wmclass(wmClass);
if (!app)
app = Shell.AppSystem.get_default().lookup_desktop_wmclass(wmClass);
if (app)
button.accessible_name = app.get_name();
else
button.accessible_name = icon.title;
button.connect('clicked',
function() {
icon.click(Clutter.get_current_event());
});
button.connect('key-press-event',
function() {
icon.click(Clutter.get_current_event());
return Clutter.EVENT_PROPAGATE;
});
button.connect('key-focus-in', Lang.bind(this,
function() {
this._concealHandle.show();
}));
this._iconBox.add_actor(button);
if (!this._concealHandle.visible) {
this._concealHandle.show();
GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, TEMP_REVEAL_TIME,
Lang.bind(this, function() {
this._concealHandle.hide();
return GLib.SOURCE_REMOVE;
}));
}
},
_onTrayIconRemoved: function(tm, icon) {
if (!this.actor.contains(icon))
return;
icon.get_parent().destroy();
this._sync();
},
_syncBarrier: function() {
let rtl = (this._slider.get_text_direction() == Clutter.TextDirection.RTL);
let [x, y] = this._slider.get_transformed_position();
let [w, h] = this._slider.get_transformed_size();
let x1 = Math.round(x);
if (rtl)
x1 += Math.round(w);
let x2 = x1;
let y1 = Math.round(y);
let y2 = y1 + Math.round(h);
if (this._horizontalBarrier &&
this._horizontalBarrier.x1 == x1 &&
this._horizontalBarrier.y1 == y1 &&
this._horizontalBarrier.x2 == x2 &&
this._horizontalBarrier.y2 == y2)
return;
this._unsetBarrier();
let directions = (rtl ? Meta.BarrierDirection.NEGATIVE_X : Meta.BarrierDirection.POSITIVE_X);
this._horizontalBarrier = new Meta.Barrier({ display: global.display,
x1: x1, x2: x2,
y1: y1, y2: y2,
directions: directions });
this._pressureBarrier.addBarrier(this._horizontalBarrier);
},
_unsetBarrier: function() {
if (this._horizontalBarrier == null)
return;
this._pressureBarrier.removeBarrier(this._horizontalBarrier);
this._horizontalBarrier.destroy();
this._horizontalBarrier = null;
},
_sync: function() {
// FIXME: we no longer treat tray icons as notifications
let allowed = Main.sessionMode.hasNotifications;
let hasIcons = this._iconBox.get_n_children() > 0;
let inOverview = Main.overview.visible && !Main.overview.animationInProgress;
let inFullscreen = Main.layoutManager.primaryMonitor.inFullscreen;
this.actor.visible = allowed && hasIcons && !inOverview && !inFullscreen;
if (!hasIcons)
this._concealHandle.hide();
let targetSlide;
if (this._concealHandle.visible) {
targetSlide = 1.0;
} else if (!hasIcons) {
targetSlide = 0.0;
} else {
let [, boxWidth] = this._box.get_preferred_width(-1);
let [, handleWidth] = this._revealHandle.get_preferred_width(-1);
if (this._revealHandle.hover)
targetSlide = handleWidth / boxWidth;
else
targetSlide = CONCEALED_WIDTH / boxWidth;
}
if (this.actor.visible) {
Tweener.addTween(this._slideLayout,
{ slideX: targetSlide,
time: REVEAL_ANIMATION_TIME,
transition: 'easeOutQuad' });
} else {
this._slideLayout.slideX = targetSlide;
this._unsetBarrier();
}
}
});

View File

@@ -20,6 +20,7 @@ const Environment = imports.ui.environment;
const ExtensionSystem = imports.ui.extensionSystem;
const ExtensionDownloader = imports.ui.extensionDownloader;
const Keyboard = imports.ui.keyboard;
const LegacyTray = imports.ui.legacyTray;
const MessageTray = imports.ui.messageTray;
const ModalDialog = imports.ui.modalDialog;
const OsdWindow = imports.ui.osdWindow;
@@ -55,6 +56,7 @@ var overview = null;
var runDialog = null;
var lookingGlass = null;
var wm = null;
var legacyTray = null;
var messageTray = null;
var screenShield = null;
var notificationDaemon = null;
@@ -122,7 +124,6 @@ function start() {
sessionMode.connect('updated', _sessionUpdated);
Gtk.Settings.get_default().connect('notify::gtk-theme-name',
_loadDefaultStylesheet);
Gtk.IconTheme.get_default().add_resource_path('/org/gnome/shell/theme/icons');
_initializeUI();
shellAccessDialogDBusService = new AccessDialog.AccessDialogDBus();
@@ -168,6 +169,7 @@ function _initializeUI() {
if (LoginManager.canLock())
screenShield = new ScreenShield.ScreenShield();
legacyTray = new LegacyTray.LegacyTray();
messageTray = new MessageTray.MessageTray();
panel = new Panel.Panel();
keyboard = new Keyboard.Keyboard();

View File

@@ -1205,9 +1205,8 @@ var MessageTray = new Lang.Class({
// _updateState() figures out what (if anything) needs to be done
// at the present time.
_updateState: function() {
let hasMonitor = Main.layoutManager.primaryMonitor != null;
this.actor.visible = !this._bannerBlocked && hasMonitor && this._banner != null;
if (this._bannerBlocked || !hasMonitor)
this.actor.visible = !this._bannerBlocked && this._banner != null;
if (this._bannerBlocked)
return;
// If our state changes caused _updateState to be called,

View File

@@ -84,7 +84,7 @@ var ModalDialog = new Lang.Class({
}
global.focus_manager.add_group(this.dialogLayout);
this._initialKeyFocus = null;
this._initialKeyFocus = this.dialogLayout;
this._initialKeyFocusDestroyId = 0;
this._savedKeyFocus = null;
},
@@ -157,7 +157,7 @@ var ModalDialog = new Lang.Class({
this._initialKeyFocus = actor;
this._initialKeyFocusDestroyId = actor.connect('destroy', Lang.bind(this, function() {
this._initialKeyFocus = null;
this._initialKeyFocus = this.dialogLayout;
this._initialKeyFocusDestroyId = 0;
}));
},
@@ -237,8 +237,7 @@ var ModalDialog = new Lang.Class({
this._savedKeyFocus.grab_key_focus();
this._savedKeyFocus = null;
} else {
let focus = this._initialKeyFocus || this.dialogLayout.initialKeyFocus;
focus.grab_key_focus();
this._initialKeyFocus.grab_key_focus();
}
if (!this._shellReactive)

View File

@@ -670,7 +670,7 @@ const FdoApplicationIface = '<node> \
const FdoApplicationProxy = Gio.DBusProxy.makeProxyWrapper(FdoApplicationIface);
function objectPathFromAppId(appId) {
return '/' + appId.replace(/\./g, '/').replace(/-/g, '_');
return '/' + appId.replace(/\./g, '/');
}
function getPlatformData() {
@@ -687,8 +687,6 @@ var GtkNotificationDaemonAppSource = new Lang.Class({
_init: function(appId) {
this._appId = appId;
this._objectPath = objectPathFromAppId(appId);
if (!GLib.Variant.is_object_path(this._objectPath))
throw new InvalidAppError();
this._app = Shell.AppSystem.get_default().lookup_app(appId + '.desktop');
if (!this._app)

View File

@@ -392,9 +392,6 @@ var Overview = new Lang.Class({
// when it is next shown.
this.hide();
if (!Main.layoutManager.primaryMonitor)
return;
let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex);
this._coverPane.set_position(0, workArea.y);

View File

@@ -254,12 +254,18 @@ var ThumbnailsSlider = new Lang.Class({
Main.layoutManager.connect('monitors-changed', Lang.bind(this, this._updateSlide));
this.actor.connect('notify::hover', Lang.bind(this, this._updateSlide));
global.window_manager.connect('switch-workspace', Lang.bind(this, this._updateSlide));
this._thumbnailsBox.actor.bind_property('visible', this.actor, 'visible', GObject.BindingFlags.SYNC_CREATE);
},
_getAlwaysZoomOut: function() {
// Always show the pager on hover or during a drag
let alwaysZoomOut = this.actor.hover || this._inDrag;
// Always show the pager when hover, during a drag, or if workspaces are
// actually used, e.g. there are windows on any non-active workspace
let alwaysZoomOut = this.actor.hover ||
this._inDrag ||
!Meta.prefs_get_dynamic_workspaces() ||
global.screen.n_workspaces > 2 ||
global.screen.get_active_workspace_index() != 0;
if (!alwaysZoomOut) {
let monitors = Main.layoutManager.monitors;

View File

@@ -513,7 +513,7 @@ var PadDiagram = new Lang.Class({
},
getRingLabelCoords: function (number, dir) {
let numStr = number > 0 ? (number + 1).toString() : '';
let numStr = number > 0 ? number.toString() : '';
let dirStr = dir == CW ? 'CW' : 'CCW';
let labelName = 'LabelRing' + numStr + dirStr;
let leaderName = 'LeaderRing' + numStr + dirStr;

View File

@@ -839,14 +839,8 @@ var Panel = new Lang.Class({
},
_getPreferredWidth: function(actor, forHeight, alloc) {
let primaryMonitor = Main.layoutManager.primaryMonitor;
alloc.min_size = -1;
if (primaryMonitor)
alloc.natural_size = primaryMonitor.width;
else
alloc.natural_size = -1;
alloc.natural_size = Main.layoutManager.primaryMonitor.width;
},
_getPreferredHeight: function(actor, forWidth, alloc) {
@@ -865,16 +859,15 @@ var Panel = new Lang.Class({
let sideWidth, centerWidth;
centerWidth = centerNaturalWidth;
sideWidth = Math.max(0, (allocWidth - centerWidth) / 2);
sideWidth = (allocWidth - centerWidth) / 2;
let childBox = new Clutter.ActorBox();
childBox.y1 = 0;
childBox.y2 = allocHeight;
if (this.actor.get_text_direction() == Clutter.TextDirection.RTL) {
childBox.x1 = Math.max(allocWidth - Math.min(Math.floor(sideWidth),
leftNaturalWidth),
0);
childBox.x1 = allocWidth - Math.min(Math.floor(sideWidth),
leftNaturalWidth);
childBox.x2 = allocWidth;
} else {
childBox.x1 = 0;
@@ -896,9 +889,8 @@ var Panel = new Lang.Class({
childBox.x2 = Math.min(Math.floor(sideWidth),
rightNaturalWidth);
} else {
childBox.x1 = Math.max(allocWidth - Math.min(Math.floor(sideWidth),
rightNaturalWidth),
0);
childBox.x1 = allocWidth - Math.min(Math.floor(sideWidth),
rightNaturalWidth);
childBox.x2 = allocWidth;
}
this._rightBox.allocate(childBox, flags);
@@ -1052,9 +1044,6 @@ var Panel = new Lang.Class({
return;
}
if (!Main.layoutManager.primaryMonitor)
return;
/* Get all the windows in the active workspace that are in the primary monitor and visible */
let activeWorkspace = global.screen.get_active_workspace();
let windows = activeWorkspace.list_windows().filter(function(metaWindow) {
@@ -1084,6 +1073,8 @@ var Panel = new Lang.Class({
let indicator = this.statusArea[role];
if (!indicator)
continue;
if (indicator.menu)
indicator.menu.close();
indicator.container.hide();
}
},

View File

@@ -405,7 +405,7 @@ var PopupImageMenuItem = new Lang.Class({
setIcon: function(icon) {
// The 'icon' parameter can be either a Gio.Icon or a string.
if (icon instanceof GObject.Object && GObject.type_is_a(icon, Gio.Icon))
if (GObject.type_is_a(icon, Gio.Icon))
this._icon.gicon = icon;
else
this._icon.icon_name = icon;
@@ -465,7 +465,6 @@ var PopupMenuBase = new Lang.Class({
_sessionUpdated: function() {
this._setSettingsVisibility(Main.sessionMode.allowSettings);
this.close();
},
addAction: function(title, callback, icon) {

View File

@@ -98,13 +98,6 @@ function loadRemoteSearchProviders(searchSettings, callback) {
return;
}
let autoStart = true;
try {
autoStart = keyfile.get_boolean(group, 'AutoStart');
} catch(e) {
// ignore error
}
let version = '1';
try {
version = keyfile.get_string(group, 'Version');
@@ -113,9 +106,9 @@ function loadRemoteSearchProviders(searchSettings, callback) {
}
if (version >= 2)
remoteProvider = new RemoteSearchProvider2(appInfo, busName, objectPath, autoStart);
remoteProvider = new RemoteSearchProvider2(appInfo, busName, objectPath);
else
remoteProvider = new RemoteSearchProvider(appInfo, busName, objectPath, autoStart);
remoteProvider = new RemoteSearchProvider(appInfo, busName, objectPath);
remoteProvider.defaultEnabled = true;
try {
@@ -191,22 +184,17 @@ function loadRemoteSearchProviders(searchSettings, callback) {
var RemoteSearchProvider = new Lang.Class({
Name: 'RemoteSearchProvider',
_init: function(appInfo, dbusName, dbusPath, autoStart, proxyInfo) {
_init: function(appInfo, dbusName, dbusPath, proxyInfo) {
if (!proxyInfo)
proxyInfo = SearchProviderProxyInfo;
let g_flags = Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES;
if (autoStart)
g_flags |= Gio.DBusProxyFlags.DO_NOT_AUTO_START_AT_CONSTRUCTION;
else
g_flags |= Gio.DBusProxyFlags.DO_NOT_AUTO_START;
this.proxy = new Gio.DBusProxy({ g_bus_type: Gio.BusType.SESSION,
g_name: dbusName,
g_object_path: dbusPath,
g_interface_info: proxyInfo,
g_interface_name: proxyInfo.name,
g_flags });
g_flags: (Gio.DBusProxyFlags.DO_NOT_AUTO_START_AT_CONSTRUCTION |
Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES) });
this.proxy.init_async(GLib.PRIORITY_DEFAULT, null, null);
this.appInfo = appInfo;
@@ -319,8 +307,8 @@ var RemoteSearchProvider2 = new Lang.Class({
Name: 'RemoteSearchProvider2',
Extends: RemoteSearchProvider,
_init: function(appInfo, dbusName, dbusPath, autoStart) {
this.parent(appInfo, dbusName, dbusPath, autoStart, SearchProvider2ProxyInfo);
_init: function(appInfo, dbusName, dbusPath) {
this.parent(appInfo, dbusName, dbusPath, SearchProvider2ProxyInfo);
this.canLaunchSearch = true;
},

View File

@@ -681,15 +681,6 @@ var SearchResults = new Lang.Class({
this._setSelected(this._defaultResult, highlight);
},
popupMenuDefault: function() {
// If we have a search queued up, force the search now.
if (this._searchTimeoutId > 0)
this._doSearch();
if (this._defaultResult)
this._defaultResult.actor.popup_menu();
},
navigateFocus: function(direction) {
let rtl = this.actor.get_text_direction() == Clutter.TextDirection.RTL;
if (direction == Gtk.DirectionType.TAB_BACKWARD ||
@@ -774,7 +765,7 @@ var ProviderInfo = new Lang.Class({
},
setMoreCount: function(count) {
this._moreLabel.text = ngettext("%d more", "%d more", count).format(count);
this._moreLabel.text = _("%d more").format(count);
this._moreLabel.visible = count > 0;
}
});

View File

@@ -843,7 +843,7 @@ var InputSourceIndicator = new Lang.Class({
this._indicatorLabels[i] = indicatorLabel;
is.connect('changed', function() {
menuItem.indicator.set_text(is.shortName);
indicatorLabel.set_text(is.shortName);
indicatorLabel.set_text(is.shorName);
});
this.menu.addMenuItem(menuItem, menuIndex++);

View File

@@ -115,6 +115,17 @@ function ensureActiveConnectionProps(active, settings) {
}
}
function createSettingsAction(label, device) {
let item = new PopupMenu.PopupMenuItem(label);
item.connect('activate', function() {
Util.spawnApp(['gnome-control-center', 'network', 'show-device',
device.get_path()]);
});
return item;
}
var NMConnectionItem = new Lang.Class({
Name: 'NMConnectionItem',
@@ -503,7 +514,7 @@ var NMDeviceWired = new Lang.Class({
_init: function(client, device, settings) {
this.parent(client, device, settings);
this.item.menu.addSettingsAction(_("Wired Settings"), 'gnome-network-panel.desktop');
this.item.menu.addMenuItem(createSettingsAction(_("Wired Settings"), device));
},
_hasCarrier: function() {
@@ -545,7 +556,7 @@ var NMDeviceModem = new Lang.Class({
_init: function(client, device, settings) {
this.parent(client, device, settings);
this.item.menu.addSettingsAction(_("Mobile Broadband Settings"), 'gnome-network-panel.desktop');
this.item.menu.addMenuItem(createSettingsAction(_("Mobile Broadband Settings"), device));
this._mobileDevice = null;
@@ -624,7 +635,7 @@ var NMDeviceBluetooth = new Lang.Class({
_init: function(client, device, settings) {
this.parent(client, device, settings);
this.item.menu.addSettingsAction(_("Bluetooth Settings"), 'gnome-network-panel.desktop');
this.item.menu.addMenuItem(createSettingsAction(_("Bluetooth Settings"), device));
},
_getDescription: function() {
@@ -951,7 +962,7 @@ var NMWirelessDialog = new Lang.Class({
|| (accessPoints[0]._secType == NMAccessPointSecurity.WPA_ENT)) {
// 802.1x-enabled APs require further configuration, so they're
// handled in gnome-control-center
Util.spawn(['gnome-control-center', 'wifi', 'connect-8021x-wifi',
Util.spawn(['gnome-control-center', 'network', 'connect-8021x-wifi',
this._device.get_path(), accessPoints[0].dbus_path]);
} else {
let connection = new NetworkManager.Connection();
@@ -1194,7 +1205,7 @@ var NMDeviceWireless = new Lang.Class({
this._toggleItem.connect('activate', Lang.bind(this, this._toggleWifi));
this.item.menu.addMenuItem(this._toggleItem);
this.item.menu.addSettingsAction(_("Wi-Fi Settings"), 'gnome-wifi-panel.desktop');
this.item.menu.addMenuItem(createSettingsAction(_("Wi-Fi Settings"), device));
this._wirelessEnabledChangedId = this._client.connect('notify::wireless-enabled', Lang.bind(this, this._sync));
this._wirelessHwEnabledChangedId = this._client.connect('notify::wireless-hardware-enabled', Lang.bind(this, this._sync));
@@ -1491,7 +1502,36 @@ var NMVPNSection = new Lang.Class({
_init: function(client) {
this.parent(client);
this.item.menu.addSettingsAction(_("VPN Settings"), 'gnome-network-panel.desktop');
this._vpnSettings = new PopupMenu.PopupMenuItem('');
this.item.menu.addMenuItem(this._vpnSettings);
this._vpnSettings.connect('activate', Lang.bind(this, this._onSettingsActivate));
this._sync();
},
_sync: function() {
let nItems = this._connectionItems.size;
this.item.actor.visible = (nItems > 0);
if (nItems > 1)
this._vpnSettings.label.text = _("Network Settings");
else
this._vpnSettings.label.text = _("VPN Settings");
this.parent();
},
_onSettingsActivate: function() {
let nItems = this._connectionItems.size;
if (nItems > 1) {
let appSys = Shell.AppSystem.get_default();
let app = appSys.lookup_app('gnome-network-panel.desktop');
app.launch(0, -1, false);
} else {
let connection = this._connections[0];
Util.spawnApp(['gnome-control-center', 'network', 'show-device',
connection.get_path()]);
}
},
_getDescription: function() {

View File

@@ -2,19 +2,39 @@
const AccountsService = imports.gi.AccountsService;
const Clutter = imports.gi.Clutter;
const Gdm = imports.gi.Gdm;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const GObject = imports.gi.GObject;
const BoxPointer = imports.ui.boxpointer;
const SystemActions = imports.misc.systemActions;
const GnomeSession = imports.misc.gnomeSession;
const LoginManager = imports.misc.loginManager;
const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
const LOGIN_SCREEN_SCHEMA = 'org.gnome.login-screen';
const DISABLE_USER_SWITCH_KEY = 'disable-user-switching';
const DISABLE_LOCK_SCREEN_KEY = 'disable-lock-screen';
const DISABLE_LOG_OUT_KEY = 'disable-log-out';
const DISABLE_RESTART_KEY = 'disable-restart-buttons';
const ALWAYS_SHOW_LOG_OUT_KEY = 'always-show-log-out';
const SENSOR_BUS_NAME = 'net.hadess.SensorProxy';
const SENSOR_OBJECT_PATH = '/net/hadess/SensorProxy';
const SensorProxyInterface = '<node> \
<interface name="net.hadess.SensorProxy"> \
<property name="HasAccelerometer" type="b" access="read"/> \
</interface> \
</node>';
const SensorProxy = Gio.DBusProxy.makeProxyWrapper(SensorProxyInterface);
var AltSwitcher = new Lang.Class({
Name: 'AltSwitcher',
@@ -118,17 +138,41 @@ var Indicator = new Lang.Class({
_init: function() {
this.parent();
let userManager = AccountsService.UserManager.get_default();
this._user = userManager.get_user(GLib.get_user_name());
this._loginScreenSettings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA });
this._lockdownSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA });
this._orientationSettings = new Gio.Settings({ schema_id: 'org.gnome.settings-daemon.peripherals.touchscreen' });
this._systemActions = new SystemActions.getDefault();
this._session = new GnomeSession.SessionManager();
this._loginManager = LoginManager.getLoginManager();
this._monitorManager = Meta.MonitorManager.get();
this._haveShutdown = true;
this._haveSuspend = true;
this._userManager = AccountsService.UserManager.get_default();
this._user = this._userManager.get_user(GLib.get_user_name());
this._createSubMenu();
this._loginScreenItem.actor.connect('notify::visible',
() => { this._updateMultiUser(); });
this._logoutItem.actor.connect('notify::visible',
() => { this._updateMultiUser(); });
this._userManager.connect('notify::is-loaded',
Lang.bind(this, this._updateMultiUser));
this._userManager.connect('notify::has-multiple-users',
Lang.bind(this, this._updateMultiUser));
this._userManager.connect('user-added',
Lang.bind(this, this._updateMultiUser));
this._userManager.connect('user-removed',
Lang.bind(this, this._updateMultiUser));
this._lockdownSettings.connect('changed::' + DISABLE_USER_SWITCH_KEY,
Lang.bind(this, this._updateMultiUser));
this._lockdownSettings.connect('changed::' + DISABLE_LOG_OUT_KEY,
Lang.bind(this, this._updateMultiUser));
this._lockdownSettings.connect('changed::' + DISABLE_LOCK_SCREEN_KEY,
Lang.bind(this, this._updateLockScreen));
global.settings.connect('changed::' + ALWAYS_SHOW_LOG_OUT_KEY,
Lang.bind(this, this._updateMultiUser));
this._updateSwitchUser();
this._updateMultiUser();
this._updateLockScreen();
// Whether shutdown is available or not depends on both lockdown
// settings (disable-log-out) and Polkit policy - the latter doesn't
// notify, so we update the menu item each time the menu opens or
@@ -138,14 +182,42 @@ var Indicator = new Lang.Class({
if (!open)
return;
this._systemActions.forceUpdate();
this._updateHaveShutdown();
this._updateHaveSuspend();
}));
this._updateMultiUser();
this._lockdownSettings.connect('changed::' + DISABLE_LOG_OUT_KEY,
Lang.bind(this, this._updateHaveShutdown));
this._orientationSettings.connect('changed::orientation-lock',
Lang.bind(this, this._updateOrientationLock));
Main.layoutManager.connect('monitors-changed',
Lang.bind(this, this._updateOrientationLock));
Gio.DBus.system.watch_name(SENSOR_BUS_NAME,
Gio.BusNameWatcherFlags.NONE,
Lang.bind(this, this._sensorProxyAppeared),
Lang.bind(this, function() {
this._sensorProxy = null;
this._updateOrientationLock();
}));
this._updateOrientationLock();
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
this._sessionUpdated();
},
_sensorProxyAppeared: function() {
this._sensorProxy = new SensorProxy(Gio.DBus.system, SENSOR_BUS_NAME, SENSOR_OBJECT_PATH,
Lang.bind(this, function(proxy, error) {
if (error) {
log(error.message);
return;
}
this._sensorProxy.connect('g-properties-changed',
Lang.bind(this, this._updateOrientationLock));
this._updateOrientationLock();
}));
},
_updateActionsVisibility: function() {
let visible = (this._settingsAction.visible ||
this._orientationLockAction.visible ||
@@ -156,14 +228,42 @@ var Indicator = new Lang.Class({
},
_sessionUpdated: function() {
this._updateLockScreen();
this._updatePowerOff();
this._updateSuspend();
this._updateMultiUser();
this._settingsAction.visible = Main.sessionMode.allowSettings;
this._updateActionsVisibility();
},
_updateMultiUser: function() {
let hasSwitchUser = this._loginScreenItem.actor.visible;
let hasLogout = this._logoutItem.actor.visible;
let shouldShowInMode = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
let hasSwitchUser = this._updateSwitchUser();
let hasLogout = this._updateLogout();
this._switchUserSubMenu.actor.visible = hasSwitchUser || hasLogout;
this._switchUserSubMenu.actor.visible = shouldShowInMode && (hasSwitchUser || hasLogout);
},
_updateSwitchUser: function() {
let allowSwitch = !this._lockdownSettings.get_boolean(DISABLE_USER_SWITCH_KEY);
let multiUser = this._userManager.can_switch() && this._userManager.has_multiple_users;
let visible = allowSwitch && multiUser;
this._loginScreenItem.actor.visible = visible;
return visible;
},
_updateLogout: function() {
let allowLogout = !this._lockdownSettings.get_boolean(DISABLE_LOG_OUT_KEY);
let alwaysShow = global.settings.get_boolean(ALWAYS_SHOW_LOG_OUT_KEY);
let systemAccount = this._user.system_account;
let localAccount = this._user.local_account;
let multiUser = this._userManager.has_multiple_users;
let multiSession = Gdm.get_session_ids().length > 1;
let visible = allowLogout && (alwaysShow || multiUser || multiSession || systemAccount || !localAccount);
this._logoutItem.actor.visible = visible;
return visible;
},
_updateSwitchUserSubMenu: function() {
@@ -199,6 +299,63 @@ var Indicator = new Lang.Class({
}
},
_updateOrientationLock: function() {
if (this._sensorProxy)
this._orientationLockAction.visible = this._sensorProxy.HasAccelerometer &&
this._monitorManager.get_is_builtin_display_on();
else
this._orientationLockAction.visible = false;
let locked = this._orientationSettings.get_boolean('orientation-lock');
let icon = this._orientationLockAction.child;
icon.icon_name = locked ? 'rotation-locked-symbolic' : 'rotation-allowed-symbolic';
this._updateActionsVisibility();
},
_updateLockScreen: function() {
let showLock = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
let allowLockScreen = !this._lockdownSettings.get_boolean(DISABLE_LOCK_SCREEN_KEY);
this._lockScreenAction.visible = showLock && allowLockScreen && LoginManager.canLock();
this._updateActionsVisibility();
},
_updateHaveShutdown: function() {
this._session.CanShutdownRemote(Lang.bind(this, function(result, error) {
if (error)
return;
this._haveShutdown = result[0];
this._updatePowerOff();
}));
},
_updatePowerOff: function() {
let disabled = Main.sessionMode.isLocked ||
(Main.sessionMode.isGreeter &&
this._loginScreenSettings.get_boolean(DISABLE_RESTART_KEY));
this._powerOffAction.visible = this._haveShutdown && !disabled;
this._updateActionsVisibility();
},
_updateHaveSuspend: function() {
this._loginManager.canSuspend(Lang.bind(this,
function(canSuspend, needsAuth) {
this._haveSuspend = canSuspend;
this._suspendNeedsAuth = needsAuth;
this._updateSuspend();
}));
},
_updateSuspend: function() {
let disabled = (Main.sessionMode.isLocked &&
this._suspendNeedsAuth) ||
(Main.sessionMode.isGreeter &&
this._loginScreenSettings.get_boolean(DISABLE_RESTART_KEY));
this._suspendAction.visible = this._haveSuspend && !disabled;
this._updateActionsVisibility();
},
_createActionButton: function(iconName, accessibleName) {
let icon = new St.Button({ reactive: true,
can_focus: true,
@@ -210,7 +367,6 @@ var Indicator = new Lang.Class({
},
_createSubMenu: function() {
let bindFlags = GObject.BindingFlags.DEFAULT | GObject.BindingFlags.SYNC_CREATE;
let item;
this._switchUserSubMenu = new PopupMenu.PopupSubMenuMenuItem('', true);
@@ -226,28 +382,14 @@ var Indicator = new Lang.Class({
}));
item = new PopupMenu.PopupMenuItem(_("Switch User"));
item.connect('activate', () => {
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
this._systemActions.activateSwitchUser();
});
item.connect('activate', Lang.bind(this, this._onLoginScreenActivate));
this._switchUserSubMenu.menu.addMenuItem(item);
this._loginScreenItem = item;
this._systemActions.bind_property('can-switch-user',
this._loginScreenItem.actor,
'visible',
bindFlags);
item = new PopupMenu.PopupMenuItem(_("Log Out"));
item.connect('activate', () => {
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
this._systemActions.activateLogout();
});
item.connect('activate', Lang.bind(this, this._onQuitSessionActivate));
this._switchUserSubMenu.menu.addMenuItem(item);
this._logoutItem = item;
this._systemActions.bind_property('can-logout',
this._logoutItem.actor,
'visible',
bindFlags);
this._switchUserSubMenu.menu.addSettingsAction(_("Account Settings"),
'gnome-user-accounts-panel.desktop');
@@ -263,70 +405,28 @@ var Indicator = new Lang.Class({
can_focus: false });
this._settingsAction = this._createActionButton('preferences-system-symbolic', _("Settings"));
this._settingsAction.connect('clicked', () => { this._onSettingsClicked(); });
this._settingsAction.connect('clicked', Lang.bind(this, this._onSettingsClicked));
item.actor.add(this._settingsAction, { expand: true, x_fill: false });
this._orientationLockAction = this._createActionButton('', _("Orientation Lock"));
this._orientationLockAction.connect('clicked', () => {
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE),
this._systemActions.activateLockOrientation();
});
this._orientationLockAction.connect('clicked', Lang.bind(this, this._onOrientationLockClicked));
item.actor.add(this._orientationLockAction, { expand: true, x_fill: false });
this._systemActions.bind_property('can-lock-orientation',
this._orientationLockAction,
'visible',
bindFlags);
this._systemActions.bind_property('orientation-lock-icon',
this._orientationLockAction.child,
'icon-name',
bindFlags);
this._lockScreenAction = this._createActionButton('changes-prevent-symbolic', _("Lock"));
this._lockScreenAction.connect('clicked', () => {
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
this._systemActions.activateLockScreen();
});
this._lockScreenAction.connect('clicked', Lang.bind(this, this._onLockScreenClicked));
item.actor.add(this._lockScreenAction, { expand: true, x_fill: false });
this._systemActions.bind_property('can-lock-screen',
this._lockScreenAction,
'visible',
bindFlags);
this._suspendAction = this._createActionButton('media-playback-pause-symbolic', _("Suspend"));
this._suspendAction.connect('clicked', () => {
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
this._systemActions.activateSuspend();
});
this._systemActions.bind_property('can-suspend',
this._suspendAction,
'visible',
bindFlags);
this._suspendAction.connect('clicked', Lang.bind(this, this._onSuspendClicked));
this._powerOffAction = this._createActionButton('system-shutdown-symbolic', _("Power Off"));
this._powerOffAction.connect('clicked', () => {
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
this._systemActions.activatePowerOff();
});
this._systemActions.bind_property('can-power-off',
this._powerOffAction,
'visible',
bindFlags);
this._powerOffAction.connect('clicked', Lang.bind(this, this._onPowerOffClicked));
this._altSwitcher = new AltSwitcher(this._powerOffAction, this._suspendAction);
item.actor.add(this._altSwitcher.actor, { expand: true, x_fill: false });
this._actionsItem = item;
this.menu.addMenuItem(item);
this._settingsAction.connect('notify::visible',
() => { this._updateActionsVisibility(); });
this._orientationLockAction.connect('notify::visible',
() => { this._updateActionsVisibility(); });
this._lockScreenAction.connect('notify::visible',
() => { this._updateActionsVisibility(); });
this._altSwitcher.actor.connect('notify::visible',
() => { this._updateActionsVisibility(); });
},
_onSettingsClicked: function() {
@@ -334,5 +434,46 @@ var Indicator = new Lang.Class({
let app = Shell.AppSystem.get_default().lookup_app('gnome-control-center.desktop');
Main.overview.hide();
app.activate();
}
},
_onOrientationLockClicked: function() {
this.menu.itemActivated();
let locked = this._orientationSettings.get_boolean('orientation-lock');
this._orientationSettings.set_boolean('orientation-lock', !locked);
this._updateOrientationLock();
},
_onLockScreenClicked: function() {
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
Main.overview.hide();
Main.screenShield.lock(true);
},
_onLoginScreenActivate: function() {
this.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
Main.overview.hide();
if (Main.screenShield)
Main.screenShield.lock(false);
Clutter.threads_add_repaint_func_full(Clutter.RepaintFlags.POST_PAINT, function() {
Gdm.goto_login_session_sync(null);
return false;
});
},
_onQuitSessionActivate: function() {
Main.overview.hide();
this._session.LogoutRemote(0);
},
_onPowerOffClicked: function() {
this.menu.itemActivated();
Main.overview.hide();
this._session.ShutdownRemote(0);
},
_onSuspendClicked: function() {
this.menu.itemActivated();
this._loginManager.suspend();
},
});

View File

@@ -1,101 +0,0 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Clutter = imports.gi.Clutter;
const Lang = imports.lang;
const Meta = imports.gi.Meta;
const St = imports.gi.St;
const SwitcherPopup = imports.ui.switcherPopup;
var APP_ICON_SIZE = 96;
var SwitchMonitorPopup = new Lang.Class({
Name: 'SwitchMonitorPopup',
Extends: SwitcherPopup.SwitcherPopup,
_init: function() {
let items = [{ icon: 'view-mirror-symbolic',
/* Translators: this is for display mirroring i.e. cloning.
* Try to keep it under around 15 characters.
*/
label: _('Mirror') },
{ icon: 'video-joined-displays-symbolic',
/* Translators: this is for the desktop spanning displays.
* Try to keep it under around 15 characters.
*/
label: _('Join Displays') },
{ icon: 'video-single-display-symbolic',
/* Translators: this is for using only an external display.
* Try to keep it under around 15 characters.
*/
label: _('External Only') },
{ icon: 'computer-symbolic',
/* Translators: this is for using only the laptop display.
* Try to keep it under around 15 characters.
*/
label: _('Built-in Only') }];
this.parent(items);
this._switcherList = new SwitchMonitorSwitcher(items);
},
show: function(backward, binding, mask) {
if (!Meta.MonitorManager.get().can_switch_config())
return false;
return this.parent(backward, binding, mask);
},
_initialSelection: function() {
let currentConfig = Meta.MonitorManager.get().get_switch_config();
currentConfig %= Meta.MonitorSwitchConfigType.UNKNOWN;
this._select(currentConfig);
},
_keyPressHandler: function(keysym, action) {
if (action == Meta.KeyBindingAction.SWITCH_MONITOR)
this._select(this._next());
else if (keysym == Clutter.Left)
this._select(this._previous());
else if (keysym == Clutter.Right)
this._select(this._next());
else
return Clutter.EVENT_PROPAGATE;
return Clutter.EVENT_STOP;
},
_finish : function() {
this.parent();
Meta.MonitorManager.get().switch_config(this._selectedIndex);
},
});
var SwitchMonitorSwitcher = new Lang.Class({
Name: 'SwitchMonitorSwitcher',
Extends: SwitcherPopup.SwitcherList,
_init: function(items) {
this.parent(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 = new St.Icon({ icon_name: item.icon,
icon_size: APP_ICON_SIZE });
box.add(icon, { x_fill: false, y_fill: false } );
let text = new St.Label({ text: item.label });
box.add(text, { x_fill: false });
this.addItem(box, text);
}
});

View File

@@ -19,7 +19,6 @@ var POPUP_SCROLL_TIME = 0.10; // seconds
var POPUP_FADE_OUT_TIME = 0.1; // seconds
var DISABLE_HOVER_TIMEOUT = 500; // milliseconds
var NO_MODS_TIMEOUT = 1500; // milliseconds
function mod(a, b) {
return (a + b) % b;
@@ -62,7 +61,6 @@ var SwitcherPopup = new Lang.Class({
this._motionTimeoutId = 0;
this._initialDelayTimeoutId = 0;
this._noModsTimeoutId = 0;
// Initially disable hover so we ignore the enter-event if
// the switcher appears underneath the current pointer location
@@ -147,14 +145,10 @@ var SwitcherPopup = new Lang.Class({
// https://bugzilla.gnome.org/show_bug.cgi?id=596695 for
// details.) So we check now. (Have to do this after updating
// selection.)
if (this._modifierMask) {
let [x, y, mods] = global.get_pointer();
if (!(mods & this._modifierMask)) {
this._finish(global.get_current_time());
return false;
}
} else {
this._resetNoModsTimeout();
let [x, y, mods] = global.get_pointer();
if (!(mods & this._modifierMask)) {
this._finish(global.get_current_time());
return false;
}
// We delay showing the popup so that fast Alt+Tab users aren't
@@ -198,15 +192,11 @@ var SwitcherPopup = new Lang.Class({
},
_keyReleaseEvent: function(actor, event) {
if (this._modifierMask) {
let [x, y, mods] = global.get_pointer();
let state = mods & this._modifierMask;
let [x, y, mods] = global.get_pointer();
let state = mods & this._modifierMask;
if (state == 0)
this._finish(event.get_time());
} else {
this._resetNoModsTimeout();
}
if (state == 0)
this._finish(event.get_time());
return Clutter.EVENT_STOP;
},
@@ -263,18 +253,6 @@ var SwitcherPopup = new Lang.Class({
return GLib.SOURCE_REMOVE;
},
_resetNoModsTimeout: function() {
if (this._noModsTimeoutId != 0)
Mainloop.source_remove(this._noModsTimeoutId);
this._noModsTimeoutId = Mainloop.timeout_add(NO_MODS_TIMEOUT,
Lang.bind(this, function () {
this._finish(global.get_current_time());
this._noModsTimeoutId = 0;
return GLib.SOURCE_REMOVE;
}));
},
_popModal: function() {
if (this._haveModal) {
Main.popModal(this.actor);
@@ -309,8 +287,6 @@ var SwitcherPopup = new Lang.Class({
Mainloop.source_remove(this._motionTimeoutId);
if (this._initialDelayTimeoutId != 0)
Mainloop.source_remove(this._initialDelayTimeoutId);
if (this._noModsTimeoutId != 0)
Mainloop.source_remove(this._noModsTimeoutId);
},
_select: function(num) {

View File

@@ -35,10 +35,6 @@ var Avatar = new Lang.Class({
reactive: params.reactive,
width: this._iconSize * scaleFactor,
height: this._iconSize * scaleFactor });
// Monitor the scaling factor to make sure we recreate the avatar when needed.
let themeContext = St.ThemeContext.get_for_stage(global.stage);
themeContext.connect('notify::scale-factor', Lang.bind(this, this.update));
},
setSensitive: function(sensitive) {
@@ -60,9 +56,6 @@ var Avatar = new Lang.Class({
this.actor.child = new St.Icon({ icon_name: 'avatar-default-symbolic',
icon_size: this._iconSize });
}
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
this.actor.set_size(this._iconSize * scaleFactor, this._iconSize * scaleFactor);
}
});

View File

@@ -163,13 +163,6 @@ var ViewSelector = new Lang.Class({
this._text.connect('key-focus-out', Lang.bind(this, function() {
this._searchResults.highlightDefault(false);
}));
this._entry.connect('popup-menu', () => {
if (!this._searchActive)
return;
this._entry.menu.close();
this._searchResults.popupMenuDefault();
});
this._entry.connect('notify::mapped', Lang.bind(this, this._onMapped));
global.stage.connect('notify::key-focus', Lang.bind(this, this._onStageKeyFocusChanged));

View File

@@ -14,7 +14,6 @@ const Signals = imports.signals;
const AltTab = imports.ui.altTab;
const Dialog = imports.ui.dialog;
const WorkspaceSwitcherPopup = imports.ui.workspaceSwitcherPopup;
const InhibitShortcutsDialog = imports.ui.inhibitShortcutsDialog;
const Main = imports.ui.main;
const ModalDialog = imports.ui.modalDialog;
const Tweener = imports.ui.tweener;
@@ -22,7 +21,6 @@ const WindowMenu = imports.ui.windowMenu;
const PadOsd = imports.ui.padOsd;
const EdgeDragAction = imports.ui.edgeDragAction;
const CloseDialog = imports.ui.closeDialog;
const SwitchMonitor = imports.ui.switchMonitor;
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
var MINIMIZE_WINDOW_ANIMATION_TIME = 0.2;
@@ -35,6 +33,7 @@ var DIM_BRIGHTNESS = -0.3;
var DIM_TIME = 0.500;
var UNDIM_TIME = 0.250;
var DISPLAY_REVERT_TIMEOUT = 20; // in seconds - keep in sync with mutter
var ONE_SECOND = 1000; // in ms
const GSD_WACOM_BUS_NAME = 'org.gnome.SettingsDaemon.Wacom';
@@ -65,7 +64,7 @@ var DisplayChangeDialog = new Lang.Class({
this._wm = wm;
this._countDown = Meta.MonitorManager.get_display_configuration_timeout();
this._countDown = DISPLAY_REVERT_TIMEOUT;
let iconName = 'preferences-desktop-display-symbolic';
let icon = new Gio.ThemedIcon({ name: iconName });
@@ -516,7 +515,7 @@ var TouchpadWorkspaceSwitchAction = new Lang.Class({
return Clutter.EVENT_PROPAGATE;
if (event.get_gesture_phase() == Clutter.TouchpadGesturePhase.UPDATE) {
let [dx, dy] = event.get_gesture_motion_delta();
let [dx, dy] = event.get_gesture_motion_delta(event);
this._dx += dx;
this._dy += dy;
@@ -713,7 +712,6 @@ var WindowManager = new Lang.Class({
this._shellwm.connect('filter-keybinding', Lang.bind(this, this._filterKeybinding));
this._shellwm.connect('confirm-display-change', Lang.bind(this, this._confirmDisplayChange));
this._shellwm.connect('create-close-dialog', Lang.bind(this, this._createCloseDialog));
this._shellwm.connect('create-inhibit-shortcuts-dialog', Lang.bind(this, this._createInhibitShortcutsDialog));
global.screen.connect('restacked', Lang.bind(this, this._syncStacking));
this._workspaceSwitcherPopup = null;
@@ -899,10 +897,6 @@ var WindowManager = new Lang.Class({
Shell.ActionMode.UNLOCK_SCREEN |
Shell.ActionMode.LOGIN_SCREEN,
Lang.bind(this, this._startA11ySwitcher));
this.setCustomKeybindingHandler('switch-monitor',
Shell.ActionMode.NORMAL |
Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._startSwitcher));
this.addKeybinding('pause-resume-tweens',
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
@@ -985,8 +979,7 @@ var WindowManager = new Lang.Class({
gesture.connect('activated', Lang.bind(this, this._switchApp));
global.stage.add_action(gesture);
let mode = Shell.ActionMode.ALL & ~Shell.ActionMode.LOCK_SCREEN;
gesture = new EdgeDragAction.EdgeDragAction(St.Side.BOTTOM, mode);
gesture = new EdgeDragAction.EdgeDragAction(St.Side.BOTTOM, Shell.ActionMode.ALL);
gesture.connect('activated', Lang.bind(this, function() {
Main.keyboard.show(Main.layoutManager.bottomIndex);
}));
@@ -1844,9 +1837,6 @@ var WindowManager = new Lang.Class({
case 'cycle-group-backward':
constructor = AltTab.GroupCyclerPopup;
break;
case 'switch-monitor':
constructor = SwitchMonitor.SwitchMonitorPopup;
break;
}
if (!constructor)
@@ -1987,10 +1977,6 @@ var WindowManager = new Lang.Class({
return new CloseDialog.CloseDialog(window);
},
_createInhibitShortcutsDialog: function (shellwm, window) {
return new InhibitShortcutsDialog.InhibitShortcutsDialog(window);
},
_showResizePopup: function(display, show, rect, displayW, displayH) {
if (show) {
if (!this._resizePopup)

View File

@@ -20,7 +20,7 @@ const WindowManager = imports.ui.windowManager;
var WINDOW_DND_SIZE = 256;
var WINDOW_CLONE_MAXIMUM_SCALE = 1.0;
var WINDOW_CLONE_MAXIMUM_SCALE = 0.7;
var CLOSE_BUTTON_FADE_TIME = 0.1;
@@ -132,7 +132,6 @@ var WindowClone = new Lang.Class({
this.actor._delegate = this;
this.slotId = 0;
this._slot = [0, 0, 0, 0];
this._dragSlot = [0, 0, 0, 0];
this._stackAbove = null;
@@ -158,12 +157,6 @@ var WindowClone = new Lang.Class({
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPress));
this.actor.connect('enter-event', () => { this.emit('show-chrome'); });
this.actor.connect('key-focus-in', () => { this.emit('show-chrome'); });
this.actor.connect('leave-event', () => { this.emit('hide-chrome'); });
this.actor.connect('key-focus-out', () => { this.emit('hide-chrome'); });
this._draggable = DND.makeDraggable(this.actor,
{ restoreOnSuccess: true,
manualMode: true,
@@ -381,8 +374,6 @@ var WindowClone = new Lang.Class({
action.release();
this._draggable.startDrag(x, y, global.get_current_time(), this._dragTouchSequence);
}));
} else {
this.emit('show-chrome');
}
return true;
},
@@ -448,6 +439,7 @@ var WindowOverlay = new Lang.Class({
let title = new St.Label({ style_class: 'window-caption',
text: metaWindow.title });
title.clutter_text.ellipsize = Pango.EllipsizeMode.END;
title._spacing = 0;
windowClone.actor.label_actor = title;
this._updateCaptionId = metaWindow.connect('notify::title',
@@ -463,13 +455,18 @@ var WindowOverlay = new Lang.Class({
button.connect('clicked', Lang.bind(this, this._closeWindow));
windowClone.actor.connect('destroy', Lang.bind(this, this._onDestroy));
windowClone.connect('show-chrome', Lang.bind(this, this._onShowChrome));
windowClone.connect('hide-chrome', Lang.bind(this, this._onHideChrome));
windowClone.actor.connect('enter-event',
Lang.bind(this, this._onEnter));
windowClone.actor.connect('leave-event',
Lang.bind(this, this._onLeave));
windowClone.actor.connect('key-focus-in',
Lang.bind(this, this._onEnter));
windowClone.actor.connect('key-focus-out',
Lang.bind(this, this._onLeave));
this._windowAddedId = 0;
button.hide();
title.hide();
this.title = title;
this.closeButton = button;
@@ -478,8 +475,8 @@ var WindowOverlay = new Lang.Class({
Shell.util_set_hidden_from_pick(this.title, true);
Shell.util_set_hidden_from_pick(this.border, true);
parentActor.add_actor(this.border);
parentActor.add_actor(this.title);
parentActor.add_actor(this.border);
parentActor.add_actor(this.closeButton);
title.connect('style-changed',
Lang.bind(this, this._onStyleChanged));
@@ -494,6 +491,7 @@ var WindowOverlay = new Lang.Class({
hide: function() {
this._hidden = true;
this.title.hide();
this.hideCloseButton();
},
@@ -501,13 +499,14 @@ var WindowOverlay = new Lang.Class({
show: function() {
this._hidden = false;
this.title.show();
if (this._windowClone.actor['has-pointer'])
this._animateVisible();
},
chromeHeights: function () {
return [Math.max(this.borderSize, this.closeButton.height - this.closeButton._overlap),
(this.title.height - this.borderSize) / 2];
this.title.height + this.title._spacing];
},
chromeWidths: function () {
@@ -541,13 +540,24 @@ var WindowOverlay = new Lang.Class({
else
button.set_position(Math.floor(buttonX), Math.floor(buttonY));
let titleX = cloneX + (cloneWidth - title.width) / 2;
let titleY = cloneY + cloneHeight - (title.height - this.borderSize) / 2;
// Clutter.Actor.get_preferred_width() will return the fixed width if one
// is set, so we need to reset the width by calling set_width(-1), to forward
// the call down to StLabel.
// We also need to save and restore the current width, otherwise the animation
// starts from the wrong point.
let prevTitleWidth = title.width;
title.set_width(-1);
let [titleMinWidth, titleNatWidth] = title.get_preferred_width(-1);
let titleWidth = Math.max(titleMinWidth, Math.min(titleNatWidth, cloneWidth));
title.width = prevTitleWidth;
if (animate) {
this._animateOverlayActor(title, Math.floor(titleX), Math.floor(titleY), title.width);
} else {
title.width = title.width;
let titleX = cloneX + (cloneWidth - titleWidth) / 2;
let titleY = cloneY + cloneHeight + title._spacing;
if (animate)
this._animateOverlayActor(title, Math.floor(titleX), Math.floor(titleY), titleWidth);
else {
title.width = titleWidth;
title.set_position(Math.floor(titleX), Math.floor(titleY));
}
@@ -630,48 +640,60 @@ var WindowOverlay = new Lang.Class({
_animateVisible: function() {
this._parentActor.raise_top();
let toAnimate = [this.border, this.title];
if (this._windowCanClose())
toAnimate.push(this.closeButton);
toAnimate.forEach(a => {
a.show();
a.opacity = 0;
Tweener.addTween(a,
if (this._windowCanClose()) {
this.closeButton.show();
this.closeButton.opacity = 0;
Tweener.addTween(this.closeButton,
{ opacity: 255,
time: CLOSE_BUTTON_FADE_TIME,
transition: 'easeOutQuad' });
});
}
this.border.show();
this.border.opacity = 0;
Tweener.addTween(this.border,
{ opacity: 255,
time: CLOSE_BUTTON_FADE_TIME,
transition: 'easeOutQuad' });
this.title.add_style_pseudo_class('hover');
},
_animateInvisible: function() {
[this.closeButton, this.border, this.title].forEach(a => {
a.opacity = 255;
Tweener.addTween(a,
{ opacity: 0,
time: CLOSE_BUTTON_FADE_TIME,
transition: 'easeInQuad' });
});
this.closeButton.opacity = 255;
Tweener.addTween(this.closeButton,
{ opacity: 0,
time: CLOSE_BUTTON_FADE_TIME,
transition: 'easeInQuad' });
this.border.opacity = 255;
Tweener.addTween(this.border,
{ opacity: 0,
time: CLOSE_BUTTON_FADE_TIME,
transition: 'easeInQuad' });
this.title.remove_style_pseudo_class('hover');
},
_onShowChrome: function() {
_onEnter: function() {
// We might get enter events on the clone while the overlay is
// hidden, e.g. during animations, we ignore these events,
// as the close button will be shown as needed when the overlays
// are shown again
if (this._hidden)
return;
return Clutter.EVENT_PROPAGATE;
this._windowClone.actor.grab_key_focus();
this._animateVisible();
this.emit('show-close-button');
return Clutter.EVENT_PROPAGATE;
},
_onHideChrome: function() {
_onLeave: function() {
if (this._idleToggleCloseId == 0) {
this._idleToggleCloseId = Mainloop.timeout_add(750, Lang.bind(this, this._idleToggleCloseButton));
GLib.Source.set_name_by_id(this._idleToggleCloseId, '[gnome-shell] this._idleToggleCloseButton');
}
return Clutter.EVENT_PROPAGATE;
},
_idleToggleCloseButton: function() {
@@ -691,10 +713,13 @@ var WindowOverlay = new Lang.Class({
}
this.closeButton.hide();
this.border.hide();
this.title.hide();
this.title.remove_style_pseudo_class('hover');
},
_onStyleChanged: function() {
let titleNode = this.title.get_theme_node();
this.title._spacing = titleNode.get_length('-shell-caption-spacing');
let closeNode = this.closeButton.get_theme_node();
this.closeButton._overlap = closeNode.get_length('-shell-close-overlap');
@@ -950,10 +975,6 @@ var LayoutStrategy = new Lang.Class({
let cloneX = x + (cellWidth - cloneWidth) / 2;
let cloneY = row.y + row.height * row.additionalScale - cellHeight + compensation;
// Align with the pixel grid to prevent blurry windows at scale = 1
cloneX = Math.floor(cloneX);
cloneY = Math.floor(cloneY);
slots.push([cloneX, cloneY, s, window]);
x += cellWidth + this._columnSpacing;
}
@@ -1070,22 +1091,6 @@ function rectEqual(one, two) {
one.height == two.height);
}
const WorkspaceActor = new Lang.Class({
Name: 'WorkspaceActor',
Extends: St.Widget,
vfunc_get_focus_chain: function() {
return this.get_children().filter(c => c.visible).sort((a,b) => {
let cloneA = (a._delegate && a._delegate instanceof WindowClone) ? a._delegate: null;
let cloneB = (b._delegate && b._delegate instanceof WindowClone) ? b._delegate: null;
if (cloneA && cloneB)
return cloneA.slotId - cloneB.slotId;
return 0;
});
}
});
/**
* @metaWorkspace: a #Meta.Workspace, or null
*/
@@ -1108,7 +1113,6 @@ var Workspace = new Lang.Class({
// do some simple aspect ratio like math to fit the layout calculated
// for the full geometry into this area.
this._actualGeometry = null;
this._actualGeometryLater = 0;
this._currentLayout = null;
@@ -1118,7 +1122,7 @@ var Workspace = new Lang.Class({
// Without this the drop area will be overlapped.
this._windowOverlaysGroup.set_size(0, 0);
this.actor = new WorkspaceActor({ style_class: 'window-picker' });
this.actor = new St.Widget({ style_class: 'window-picker' });
if (monitorIndex != Main.layoutManager.primaryIndex)
this.actor.add_style_class_name('external-monitor');
this.actor.set_size(0, 0);
@@ -1947,16 +1951,19 @@ var Workspace = new Lang.Class({
right: node.get_padding(St.Side.RIGHT),
};
let closeButtonHeight, captionHeight;
let leftBorder, rightBorder;
// All of the overlays have the same chrome sizes,
// so just pick the first one.
let overlay = this._windowOverlays[0];
let [topBorder, bottomBorder] = overlay.chromeHeights();
let [leftBorder, rightBorder] = overlay.chromeWidths();
[closeButtonHeight, captionHeight] = overlay.chromeHeights();
[leftBorder, rightBorder] = overlay.chromeWidths();
rowSpacing += (topBorder + bottomBorder) / 2;
rowSpacing += captionHeight;
columnSpacing += (rightBorder + leftBorder) / 2;
padding.top += topBorder;
padding.bottom += bottomBorder;
padding.top += closeButtonHeight;
padding.bottom += captionHeight;
padding.left += leftBorder;
padding.right += rightBorder;

View File

@@ -31,7 +31,6 @@ var WorkspaceSwitcherPopup = new Lang.Class({
this._itemSpacing = 0;
this._childHeight = 0;
this._childWidth = 0;
this._timeoutId = 0;
this._list.connect('style-changed', Lang.bind(this, function() {
this._itemSpacing = this._list.get_theme_node().get_length('spacing');
}));
@@ -50,6 +49,9 @@ var WorkspaceSwitcherPopup = new Lang.Class({
this._globalSignals = [];
this._globalSignals.push(global.screen.connect('workspace-added', Lang.bind(this, this._redisplay)));
this._globalSignals.push(global.screen.connect('workspace-removed', Lang.bind(this, this._redisplay)));
this._timeoutId = Mainloop.timeout_add(DISPLAY_TIMEOUT, Lang.bind(this, this._onTimeout));
GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._onTimeout');
},
_getPreferredHeight : function (actor, forWidth, alloc) {

View File

@@ -18,8 +18,8 @@ const WindowManager = imports.ui.windowManager;
const Workspace = imports.ui.workspace;
const WorkspacesView = imports.ui.workspacesView;
// The maximum size of a thumbnail is 1/10 the width and height of the screen
let MAX_THUMBNAIL_SCALE = 1/10.;
// The maximum size of a thumbnail is 1/8 the width and height of the screen
let MAX_THUMBNAIL_SCALE = 1/8.;
var RESCALE_ANIMATION_TIME = 0.2;
var SLIDE_ANIMATION_TIME = 0.2;
@@ -937,8 +937,7 @@ var ThumbnailsBox = new Lang.Class({
},
addThumbnails: function(start, count) {
if (!this._ensurePorthole())
return;
this._ensurePorthole();
for (let k = start; k < start + count; k++) {
let metaWorkspace = global.screen.get_workspace_by_index(k);
let thumbnail = new WorkspaceThumbnail(metaWorkspace);
@@ -1126,12 +1125,7 @@ var ThumbnailsBox = new Lang.Class({
// the size request to our children because we know how big they are and know
// that the actors aren't depending on the virtual functions being called.
if (!this._ensurePorthole()) {
alloc.min_size = -1;
alloc.natural_size = -1;
return;
}
this._ensurePorthole();
let themeNode = this.actor.get_theme_node();
let spacing = themeNode.get_length('spacing');
@@ -1143,11 +1137,7 @@ var ThumbnailsBox = new Lang.Class({
},
_getPreferredWidth: function(actor, forHeight, alloc) {
if (!this._ensurePorthole()) {
alloc.min_size = -1;
alloc.natural_size = -1;
return;
}
this._ensurePorthole();
let themeNode = this.actor.get_theme_node();
@@ -1168,13 +1158,8 @@ var ThumbnailsBox = new Lang.Class({
// The "porthole" is the portion of the screen that we show in the
// workspaces
_ensurePorthole: function() {
if (!Main.layoutManager.primaryMonitor)
return false;
if (!this._porthole)
this._porthole = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex);
return true;
},
_allocate: function(actor, box, flags) {

19
man/Makefile.am Normal file
View File

@@ -0,0 +1,19 @@
XSLTPROC_FLAGS = \
--nonet \
--stringparam man.output.quietly 1 \
--stringparam funcsynopsis.style ansi \
--stringparam man.th.extra1.suppress 1 \
--stringparam man.authors.section.enabled 0 \
--stringparam man.copyright.section.enabled 0
.xml.1:
$(AM_V_GEN) $(XSLTPROC) $(XSLTPROC_FLAGS) http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $<
man_MANS = \
gnome-shell.1
xml_files = $(man_MANS:.1=.xml)
EXTRA_DIST = $(xml_files)
DISTCLEANFILES = $(man_MANS)

View File

@@ -1,12 +1,12 @@
project('gnome-shell', 'c',
version: '3.26.2',
meson_version: '>= 0.42.0',
version: '3.25.4',
meson_version: '>= 0.41.0',
license: 'GPLv2+'
)
# We depend on a specific version of the libmutter API. The mutter variants of
# the Cogl and Clutter libraries also use this API version.
mutter_api_version = '1'
mutter_api_version = '0'
clutter_pc = 'mutter-clutter-' + mutter_api_version
cogl_pc = 'mutter-cogl-' + mutter_api_version
@@ -23,7 +23,7 @@ gi_req = '>= 1.49.1'
gjs_req = '>= 1.47.0'
gtk_req = '>= 3.15.0'
json_glib_req = '>= 0.13.2'
mutter_req = '>= 3.26.0'
mutter_req = '>= 3.25.2'
polkit_req = '>= 0.100'
schemas_req = '>= 3.21.3'
startup_req = '>= 0.11'

View File

@@ -9,7 +9,6 @@ js/extensionPrefs/main.js
js/gdm/authPrompt.js
js/gdm/loginDialog.js
js/gdm/util.js
js/misc/systemActions.js
js/misc/util.js
js/portalHelper/main.js
js/ui/accessDialog.js
@@ -31,8 +30,8 @@ js/ui/dateMenu.js
js/ui/endSessionDialog.js
js/ui/extensionDownloader.js
js/ui/extensionSystem.js
js/ui/inhibitShortcutsDialog.js
js/ui/keyboard.js
js/ui/legacyTray.js
js/ui/lookingGlass.js
js/ui/main.js
js/ui/messageList.js
@@ -60,7 +59,6 @@ js/ui/status/power.js
js/ui/status/rfkill.js
js/ui/status/system.js
js/ui/status/volume.js
js/ui/switchMonitor.js
js/ui/unlockDialog.js
js/ui/viewSelector.js
js/ui/windowAttentionHandler.js

610
po/ar.po

File diff suppressed because it is too large Load Diff

565
po/be.po

File diff suppressed because it is too large Load Diff

1291
po/bg.po

File diff suppressed because it is too large Load Diff

570
po/ca.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

568
po/cs.po

File diff suppressed because it is too large Load Diff

677
po/da.po

File diff suppressed because it is too large Load Diff

601
po/de.po

File diff suppressed because it is too large Load Diff

638
po/el.po

File diff suppressed because it is too large Load Diff

593
po/es.po

File diff suppressed because it is too large Load Diff

656
po/eu.po

File diff suppressed because it is too large Load Diff

1095
po/fa.po

File diff suppressed because it is too large Load Diff

583
po/fi.po

File diff suppressed because it is too large Load Diff

767
po/fr.po

File diff suppressed because it is too large Load Diff

388
po/fur.po
View File

@@ -8,15 +8,15 @@ msgstr ""
"Project-Id-Version: video-subtitles master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-10-04 18:03+0000\n"
"PO-Revision-Date: 2017-10-11 08:34+0200\n"
"POT-Creation-Date: 2017-07-22 21:01+0000\n"
"PO-Revision-Date: 2017-07-25 15:43+0200\n"
"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
"Language-Team: Friulian <fur@li.org>\n"
"Language: fur\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.3\n"
"X-Generator: Poedit 2.0.2\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: data/50-gnome-shell-system.xml:6
@@ -113,7 +113,7 @@ msgid ""
msgstr ""
"GNOME Shell al cjarie nome lis estensions che a disin di supuartâ la version "
"di GNOME Shell atualmentri in esecuzion. Abilitant cheste opzion il control "
"nol vignarà plui fat e al cirarà di cjariâ dutis lis estensions ignorant la "
"nol vegnarà plui fat e al cirarà di cjariâ dutis lis estensions ignorant la "
"version che a disin di supuartâ."
#: data/org.gnome.shell.gschema.xml.in:43
@@ -125,7 +125,7 @@ msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
msgstr ""
"Lis aplicazions che a corispuindin a chescj identificadôrs a vignaran "
"Lis aplicazions che a corispuindin a chescj indentificatôrs a vegnaran "
"mostrâts te aree dai preferîts."
#: data/org.gnome.shell.gschema.xml.in:51
@@ -190,7 +190,7 @@ msgid ""
msgstr ""
"La shell e mostrarà un menù Bluetooth nome se un adatatôr Bluetooth al è "
"alimentât, o se a son dispositîfs configurâts e associâts cul adatatôr "
"predefinît. Chest al vignarà azerât se l'adatatôr predefinît nol à mai vût "
"predefinît. Chest al vegnarà azerât se l'adatatôr predefinît nol à mai vût "
"dispositîfs associâts."
#: data/org.gnome.shell.gschema.xml.in:101
@@ -341,7 +341,7 @@ msgstr ""
#: js/gdm/authPrompt.js:149 js/ui/audioDeviceSelection.js:71
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148
#: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197
#: js/ui/shellMountOperation.js:344 js/ui/status/network.js:936
#: js/ui/shellMountOperation.js:344 js/ui/status/network.js:947
msgid "Cancel"
msgstr "Anule"
@@ -402,72 +402,6 @@ msgstr "Erôr di autenticazion"
msgid "(or swipe finger)"
msgstr "(o passe cul dêt)"
#. Translators: The name of the power-off action in search
#: js/misc/systemActions.js:99
msgctxt "search-result"
msgid "Power off"
msgstr "Distudâ"
#. Translators: A list of keywords that match the power-off action, separated by semicolons
#: js/misc/systemActions.js:102
msgid "power off;shutdown"
msgstr "distudâ;studâ"
#. Translators: The name of the lock screen action in search
#: js/misc/systemActions.js:106
msgctxt "search-result"
msgid "Lock screen"
msgstr "Blocâ il schermi"
#. Translators: A list of keywords that match the lock screen action, separated by semicolons
#: js/misc/systemActions.js:109
msgid "lock screen"
msgstr "blocâ schermi;blocâ"
#. Translators: The name of the logout action in search
#: js/misc/systemActions.js:113
msgctxt "search-result"
msgid "Log out"
msgstr "Jessî"
#. Translators: A list of keywords that match the logout action, separated by semicolons
#: js/misc/systemActions.js:116
msgid "logout;sign off"
msgstr "jessî;sierâ session"
#. Translators: The name of the suspend action in search
#: js/misc/systemActions.js:120
msgctxt "search-result"
msgid "Suspend"
msgstr "Sospindi"
#. Translators: A list of keywords that match the suspend action, separated by semicolons
#: js/misc/systemActions.js:123
msgid "suspend;sleep"
msgstr "sospindi;polse"
#. Translators: The name of the switch user action in search
#: js/misc/systemActions.js:127
msgctxt "search-result"
msgid "Switch user"
msgstr "Cambiâ utent"
#. Translators: A list of keywords that match the switch user action, separated by semicolons
#: js/misc/systemActions.js:130
msgid "switch user"
msgstr "cambiâ utent"
#. Translators: The name of the lock orientation action in search
#: js/misc/systemActions.js:134
msgctxt "search-result"
msgid "Lock orientation"
msgstr "Blocâ orientament"
#. Translators: A list of keywords that match the lock orientation action, separated by semicolons
#: js/misc/systemActions.js:137
msgid "lock orientation"
msgstr "blocâ orientament"
#: js/misc/util.js:122
msgid "Command not found"
msgstr "Comant no cjatât"
@@ -627,44 +561,44 @@ msgstr "Dinee acès"
msgid "Grant Access"
msgstr "Garantìs l'acès"
#: js/ui/appDisplay.js:809
#: js/ui/appDisplay.js:806
msgid "Frequently used applications will appear here"
msgstr "Lis aplicazions dopradis dispès a vignaran mostradis culì"
msgstr "Lis aplicazions dopradis dispès a vegnaran mostradis culì"
#: js/ui/appDisplay.js:930
#: js/ui/appDisplay.js:927
msgid "Frequent"
msgstr "Dispès"
#: js/ui/appDisplay.js:937
#: js/ui/appDisplay.js:934
msgid "All"
msgstr "Dutis"
#: js/ui/appDisplay.js:1915
#: js/ui/appDisplay.js:1895
msgid "New Window"
msgstr "Gnûf barcon"
#: js/ui/appDisplay.js:1929
#: js/ui/appDisplay.js:1909
msgid "Launch using Dedicated Graphics Card"
msgstr "Invie doprant une schede grafiche dedicade"
#: js/ui/appDisplay.js:1956 js/ui/dash.js:289
#: js/ui/appDisplay.js:1936 js/ui/dash.js:289
msgid "Remove from Favorites"
msgstr "Gjave dai preferîts"
#: js/ui/appDisplay.js:1962
#: js/ui/appDisplay.js:1942
msgid "Add to Favorites"
msgstr "Zonte tai preferîts"
#: js/ui/appDisplay.js:1972
#: js/ui/appDisplay.js:1952
msgid "Show Details"
msgstr "Mostre Detais"
#: js/ui/appFavorites.js:141
#: js/ui/appFavorites.js:140
#, javascript-format
msgid "%s has been added to your favorites."
msgstr "%s al è stât zontât tai tiei preferîts."
#: js/ui/appFavorites.js:175
#: js/ui/appFavorites.js:174
#, javascript-format
msgid "%s has been removed from your favorites."
msgstr "%s al è stât gjavât dai tiei preferîts."
@@ -697,7 +631,7 @@ msgstr "Cambie sfont..."
msgid "Display Settings"
msgstr "Impostazions visôr"
#: js/ui/backgroundMenu.js:22 js/ui/status/system.js:265
#: js/ui/backgroundMenu.js:22 js/ui/status/system.js:407
msgid "Settings"
msgstr "Impostazions"
@@ -753,51 +687,51 @@ msgctxt "grid saturday"
msgid "S"
msgstr "S"
#: js/ui/calendar.js:449
#: js/ui/calendar.js:442
msgid "Previous month"
msgstr "Mês indaûr"
#: js/ui/calendar.js:459
#: js/ui/calendar.js:452
msgid "Next month"
msgstr "Prossim mês"
#: js/ui/calendar.js:612
#: js/ui/calendar.js:605
#, no-javascript-format
msgctxt "date day number format"
msgid "%d"
msgstr "%d"
#: js/ui/calendar.js:667
#: js/ui/calendar.js:660
msgid "Week %V"
msgstr "Setemane %V"
#. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters
#.
#: js/ui/calendar.js:736
#: js/ui/calendar.js:729
msgctxt "event list time"
msgid "All Day"
msgstr "Dut il dì"
#: js/ui/calendar.js:869
#: js/ui/calendar.js:862
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %d di %B"
#: js/ui/calendar.js:873
#: js/ui/calendar.js:866
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %d di %B dal %Y"
#: js/ui/calendar.js:1093
#: js/ui/calendar.js:1086
msgid "No Notifications"
msgstr "Nissune notifiche"
#: js/ui/calendar.js:1096
#: js/ui/calendar.js:1089
msgid "No Events"
msgstr "Nissun event"
#: js/ui/calendar.js:1124
#: js/ui/calendar.js:1117
msgid "Clear All"
msgstr "Nete dut"
@@ -831,7 +765,7 @@ msgstr "Dispositîf esterni tacât"
msgid "External drive disconnected"
msgstr "Dispositîf esterni distacât"
#: js/ui/components/autorunManager.js:358
#: js/ui/components/autorunManager.js:354
#, javascript-format
msgid "Open with %s"
msgstr "Vierç cun %s"
@@ -844,8 +778,8 @@ msgstr "Password:"
msgid "Type again:"
msgstr "Scîf di gnûf:"
#: js/ui/components/networkAgent.js:112 js/ui/status/network.js:261
#: js/ui/status/network.js:355 js/ui/status/network.js:939
#: js/ui/components/networkAgent.js:112 js/ui/status/network.js:272
#: js/ui/status/network.js:366 js/ui/status/network.js:950
msgid "Connect"
msgstr "Conet"
@@ -920,7 +854,7 @@ msgstr "Passowrd rêt mobil a bande largje"
msgid "A password is required to connect to “%s”."
msgstr "A covente une password par tacâsi a '%s'."
#: js/ui/components/networkAgent.js:627 js/ui/status/network.js:1720
#: js/ui/components/networkAgent.js:627 js/ui/status/network.js:1760
msgid "Network Manager"
msgstr "Ministradôr di rêt"
@@ -951,7 +885,7 @@ msgstr "Mi displâs, no je lade drete. Prove di gnûf."
msgid "%s is now known as %s"
msgstr "L'utent %s al è cognossût cumò come %s"
#: js/ui/ctrlAltTab.js:29 js/ui/viewSelector.js:186
#: js/ui/ctrlAltTab.js:29 js/ui/viewSelector.js:179
msgid "Windows"
msgstr "Barcons"
@@ -968,7 +902,7 @@ msgstr "Dash"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#: js/ui/dateMenu.js:76
#: js/ui/dateMenu.js:75
msgid "%B %e %Y"
msgstr "%e di %B dal %Y"
@@ -976,19 +910,19 @@ msgstr "%e di %B dal %Y"
#. * below the time in the shell; it should combine the weekday and the
#. * date, e.g. "Tuesday February 17 2015".
#.
#: js/ui/dateMenu.js:83
#: js/ui/dateMenu.js:82
msgid "%A %B %e %Y"
msgstr "%A %e di %B dal %Y"
#: js/ui/dateMenu.js:145
#: js/ui/dateMenu.js:144
msgid "Add world clocks…"
msgstr "Zonte orlois mondiâi..."
#: js/ui/dateMenu.js:146
#: js/ui/dateMenu.js:145
msgid "World Clocks"
msgstr "Orlois mondiâi"
#: js/ui/dateMenu.js:225
#: js/ui/dateMenu.js:224
msgid "Weather"
msgstr "Timp"
@@ -996,7 +930,7 @@ msgstr "Timp"
#. libgweather for the possible condition strings. If at all
#. possible, the sentence should match the grammatical case etc. of
#. the inserted conditions.
#: js/ui/dateMenu.js:289
#: js/ui/dateMenu.js:281
#, javascript-format
msgid "%s all day."
msgstr "%s dut il dì."
@@ -1005,7 +939,7 @@ msgstr "%s dut il dì."
#. libgweather for the possible condition strings. If at all
#. possible, the sentence should match the grammatical case etc. of
#. the inserted conditions.
#: js/ui/dateMenu.js:295
#: js/ui/dateMenu.js:287
#, javascript-format
msgid "%s, then %s later."
msgstr "%s, plui tart %s."
@@ -1014,30 +948,30 @@ msgstr "%s, plui tart %s."
#. libgweather for the possible condition strings. If at all
#. possible, the sentence should match the grammatical case etc. of
#. the inserted conditions.
#: js/ui/dateMenu.js:301
#: js/ui/dateMenu.js:293
#, javascript-format
msgid "%s, then %s, followed by %s later."
msgstr "%s, chi di un pôc %s, e plui tart %s."
#: js/ui/dateMenu.js:312
#: js/ui/dateMenu.js:300
msgid "Select a location…"
msgstr "Selezione une posizion..."
#: js/ui/dateMenu.js:315
#: js/ui/dateMenu.js:303
msgid "Loading…"
msgstr "Daûr a cjariâ..."
#. Translators: %s is a temperature with unit, e.g. "23℃"
#: js/ui/dateMenu.js:321
#: js/ui/dateMenu.js:309
#, javascript-format
msgid "Feels like %s."
msgstr "Si sint %s."
#: js/ui/dateMenu.js:324
#: js/ui/dateMenu.js:312
msgid "Go online for weather information"
msgstr "Va in rêt pes informazions sul timp"
#: js/ui/dateMenu.js:326
#: js/ui/dateMenu.js:314
msgid "Weather information is currently unavailable"
msgstr "Lis informazions sul timp al moment no son disponibilis"
@@ -1161,7 +1095,7 @@ msgid ""
"%s %s will be installed after restart. Upgrade installation can take a long "
"time: ensure that you have backed up and that the computer is plugged in."
msgstr ""
"%s %s al vignarà instalât dopo vê tornât a inviâ il computer. La instalazion "
"%s %s al vegnarà instalât dopo vê tornât a inviâ il computer. La instalazion "
"dal avanzament e pues tirâ a dilunc: siguriti di vê fat i backup e che il to "
"computer al sedi tacât."
@@ -1200,34 +1134,19 @@ msgstr "Instale"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Scjariâ e instalâ '%s' da extensions.gnome.org?"
#. Translators: %s is an application name like "Settings"
#: js/ui/inhibitShortcutsDialog.js:59
#, javascript-format
msgid "%s wants to inhibit shortcuts"
msgstr "%s al desidere inibî lis scurtis"
#: js/ui/inhibitShortcutsDialog.js:60
msgid "Application wants to inhibit shortcuts"
msgstr "Une aplicazion e desidere inibî lis scurtis"
#. Translators: %s is a keyboard shortcut like "Super+x"
#: js/ui/inhibitShortcutsDialog.js:69
#, javascript-format
msgid "You can restore shortcuts by pressing %s."
msgstr "Si pues ripristinâ lis scurtis fracant %s."
#: js/ui/inhibitShortcutsDialog.js:74
msgid "Deny"
msgstr "Dinee"
#: js/ui/inhibitShortcutsDialog.js:80
msgid "Allow"
msgstr "Pemet"
#: js/ui/keyboard.js:738 js/ui/status/keyboard.js:782
#: js/ui/keyboard.js:740 js/ui/status/keyboard.js:782
msgid "Keyboard"
msgstr "Tastiere"
#. translators: 'Hide' is a verb
#: js/ui/legacyTray.js:65
msgid "Hide tray"
msgstr "Plate casset"
#: js/ui/legacyTray.js:106
msgid "Status Icons"
msgstr "Iconis di stât"
#: js/ui/lookingGlass.js:642
msgid "No extensions installed"
msgstr "Nissune estension instalade"
@@ -1276,7 +1195,7 @@ msgstr "Viôt sorzint"
msgid "Web Page"
msgstr "Pagjine Web"
#: js/ui/messageTray.js:1494
#: js/ui/messageTray.js:1493
msgid "System Information"
msgstr "Informazion di sisteme"
@@ -1416,7 +1335,7 @@ msgid_plural "%d new notifications"
msgstr[0] "%d gnove notifiche"
msgstr[1] "%d gnovis modifichis"
#: js/ui/screenShield.js:452 js/ui/status/system.js:284
#: js/ui/screenShield.js:452 js/ui/status/system.js:415
msgid "Lock"
msgstr "Bloche"
@@ -1448,12 +1367,10 @@ msgid "No results."
msgstr "Nissun risultât."
# o ancjemò %d
#: js/ui/search.js:777
#: js/ui/search.js:768
#, javascript-format
msgid "%d more"
msgid_plural "%d more"
msgstr[0] "%d altri"
msgstr[1] "%d altris"
msgstr "Ancjemò %d"
#: js/ui/shellEntry.js:25
msgid "Copy"
@@ -1527,7 +1444,7 @@ msgstr "Test Larc"
msgid "Bluetooth"
msgstr "Bluetooth"
#: js/ui/status/bluetooth.js:56 js/ui/status/network.js:627
#: js/ui/status/bluetooth.js:56 js/ui/status/network.js:638
msgid "Bluetooth Settings"
msgstr "Impostazions Bluetooth"
@@ -1547,13 +1464,13 @@ msgstr "Distudât"
msgid "On"
msgstr "Impiât"
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:1299
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:1310
msgid "Turn On"
msgstr "Impie"
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:170
#: js/ui/status/network.js:356 js/ui/status/network.js:1299
#: js/ui/status/network.js:1418 js/ui/status/nightLight.js:47
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:181
#: js/ui/status/network.js:367 js/ui/status/network.js:1310
#: js/ui/status/network.js:1429 js/ui/status/nightLight.js:47
#: js/ui/status/rfkill.js:90 js/ui/status/rfkill.js:117
msgid "Turn Off"
msgstr "Distude"
@@ -1607,13 +1524,13 @@ msgid "<unknown>"
msgstr "<no cognossût>"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:454 js/ui/status/network.js:1328
#: js/ui/status/network.js:465 js/ui/status/network.js:1339
#, javascript-format
msgid "%s Off"
msgstr "%s distudât"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:457
#: js/ui/status/network.js:468
#, javascript-format
msgid "%s Connected"
msgstr "%s tacât"
@@ -1621,189 +1538,190 @@ msgstr "%s tacât"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu);
#. %s is a network identifier
#: js/ui/status/network.js:462
#: js/ui/status/network.js:473
#, javascript-format
msgid "%s Unmanaged"
msgstr "%s no ministrât"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:465
#: js/ui/status/network.js:476
#, javascript-format
msgid "%s Disconnecting"
msgstr "%s daûr a disconeti"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:472 js/ui/status/network.js:1320
#: js/ui/status/network.js:483 js/ui/status/network.js:1331
#, javascript-format
msgid "%s Connecting"
msgstr "%s in conession"
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
#: js/ui/status/network.js:475
#: js/ui/status/network.js:486
#, javascript-format
msgid "%s Requires Authentication"
msgstr "%s al à dibisugne di autenticazion"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing; %s is a network identifier
#: js/ui/status/network.js:483
#: js/ui/status/network.js:494
#, javascript-format
msgid "Firmware Missing For %s"
msgstr "Al mancje il firmware par %s"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage; %s is a network identifier
#: js/ui/status/network.js:487
#: js/ui/status/network.js:498
#, javascript-format
msgid "%s Unavailable"
msgstr "%s no disponibil"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:490
#: js/ui/status/network.js:501
#, javascript-format
msgid "%s Connection Failed"
msgstr "Conession falide su %s"
#: js/ui/status/network.js:506
#: js/ui/status/network.js:517
msgid "Wired Settings"
msgstr "Impostazions rêt vie fîl"
#: js/ui/status/network.js:548
#: js/ui/status/network.js:559
msgid "Mobile Broadband Settings"
msgstr "Impostazions bande largje mobil"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:591 js/ui/status/network.js:1325
#: js/ui/status/network.js:602 js/ui/status/network.js:1336
#, javascript-format
msgid "%s Hardware Disabled"
msgstr "%s disabilitât vie hardware "
#. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode); %s is a network identifier
#: js/ui/status/network.js:595
#: js/ui/status/network.js:606
#, javascript-format
msgid "%s Disabled"
msgstr "%s disabilitât"
#: js/ui/status/network.js:635
#: js/ui/status/network.js:646
msgid "Connect to Internet"
msgstr "Conet a internet"
#: js/ui/status/network.js:833
#: js/ui/status/network.js:844
msgid "Airplane Mode is On"
msgstr "Modalitât avion piade"
#: js/ui/status/network.js:834
#: js/ui/status/network.js:845
msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "Il Wi-Fi al è disabilitât cuant che la modalitât avion e je impiade."
#: js/ui/status/network.js:835
#: js/ui/status/network.js:846
msgid "Turn Off Airplane Mode"
msgstr "Distude modalitât avion"
#: js/ui/status/network.js:844
#: js/ui/status/network.js:855
msgid "Wi-Fi is Off"
msgstr "Il Wi-Fi al è distudât"
#: js/ui/status/network.js:845
#: js/ui/status/network.js:856
msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "Il Wi-Fi al scugne jessi impiât par podêsi tacâ a une rêt."
#: js/ui/status/network.js:846
#: js/ui/status/network.js:857
msgid "Turn On Wi-Fi"
msgstr "Impie il Wi-Fi"
#: js/ui/status/network.js:871
#: js/ui/status/network.js:882
msgid "Wi-Fi Networks"
msgstr "Rêts Wi-Fi"
#: js/ui/status/network.js:873
#: js/ui/status/network.js:884
msgid "Select a network"
msgstr "Selezione une rêt"
#: js/ui/status/network.js:903
#: js/ui/status/network.js:914
msgid "No Networks"
msgstr "Nissune rêt"
#: js/ui/status/network.js:924 js/ui/status/rfkill.js:115
#: js/ui/status/network.js:935 js/ui/status/rfkill.js:115
msgid "Use hardware switch to turn off"
msgstr "Dopre interutôr fisic par distudâ"
#: js/ui/status/network.js:1191
#: js/ui/status/network.js:1202
msgid "Select Network"
msgstr "Selezione rêt"
#: js/ui/status/network.js:1197
#: js/ui/status/network.js:1208
msgid "Wi-Fi Settings"
msgstr "Impostazions Wi-Fi"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1316
#: js/ui/status/network.js:1327
#, javascript-format
msgid "%s Hotspot Active"
msgstr "Hotspot %s atîf"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1331
#: js/ui/status/network.js:1342
#, javascript-format
msgid "%s Not Connected"
msgstr "%s distacât"
#: js/ui/status/network.js:1435
#: js/ui/status/network.js:1446
msgid "connecting…"
msgstr "daûr a coneti…"
#. Translators: this is for network connections that require some kind of key or password
#: js/ui/status/network.js:1438
#: js/ui/status/network.js:1449
msgid "authentication required"
msgstr "autenticazion necessarie"
#: js/ui/status/network.js:1440
#: js/ui/status/network.js:1451
msgid "connection failed"
msgstr "conession falide"
#: js/ui/status/network.js:1494
msgid "VPN Settings"
msgstr "Impostazions VPN"
#: js/ui/status/network.js:1498
msgid "VPN"
msgstr "VPN"
#: js/ui/status/network.js:1508
msgid "VPN Off"
msgstr "VPN distudât"
#: js/ui/status/network.js:1572 js/ui/status/rfkill.js:93
#: js/ui/status/network.js:1517 js/ui/status/network.js:1612
#: js/ui/status/rfkill.js:93
msgid "Network Settings"
msgstr "Impostazions rêt"
#: js/ui/status/network.js:1603
#: js/ui/status/network.js:1519
msgid "VPN Settings"
msgstr "Impostazions VPN"
#: js/ui/status/network.js:1538
msgid "VPN"
msgstr "VPN"
#: js/ui/status/network.js:1548
msgid "VPN Off"
msgstr "VPN distudât"
#: js/ui/status/network.js:1643
#, javascript-format
msgid "%s Wired Connection"
msgid_plural "%s Wired Connections"
msgstr[0] "%s conession cablade"
msgstr[1] "%s conessions cabladis"
#: js/ui/status/network.js:1607
#: js/ui/status/network.js:1647
#, javascript-format
msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections"
msgstr[0] "%s conession cence fîi"
msgstr[1] "%s conessions cence fîi"
#: js/ui/status/network.js:1611
#: js/ui/status/network.js:1651
#, javascript-format
msgid "%s Modem Connection"
msgid_plural "%s Modem Connections"
msgstr[0] "%s conession modem"
msgstr[1] "%s conessions modem"
#: js/ui/status/network.js:1759
#: js/ui/status/network.js:1799
msgid "Connection failed"
msgstr "Conession falide"
#: js/ui/status/network.js:1760
#: js/ui/status/network.js:1800
msgid "Activation of network connection failed"
msgstr "Ativazion de conession di rêt falide"
@@ -1861,27 +1779,27 @@ msgstr "%d%%"
msgid "Airplane Mode On"
msgstr "Modalitât Avion ative"
#: js/ui/status/system.js:228
#: js/ui/status/system.js:384
msgid "Switch User"
msgstr "Cambie Utent"
#: js/ui/status/system.js:240
#: js/ui/status/system.js:389
msgid "Log Out"
msgstr "Jes"
#: js/ui/status/system.js:252
#: js/ui/status/system.js:394
msgid "Account Settings"
msgstr "Impostazions account"
#: js/ui/status/system.js:269
#: js/ui/status/system.js:411
msgid "Orientation Lock"
msgstr "Bloche Orientament"
#: js/ui/status/system.js:295
#: js/ui/status/system.js:419
msgid "Suspend"
msgstr "Sospindi"
#: js/ui/status/system.js:305
#: js/ui/status/system.js:422
msgid "Power Off"
msgstr "Distude"
@@ -1893,34 +1811,6 @@ msgstr "Volum modificât"
msgid "Volume"
msgstr "Volum"
#. Translators: this is for display mirroring i.e. cloning.
#. * Try to keep it under around 15 characters.
#.
#: js/ui/switchMonitor.js:21
msgid "Mirror"
msgstr "Sdopleâ"
#. Translators: this is for the desktop spanning displays.
#. * Try to keep it under around 15 characters.
#.
#: js/ui/switchMonitor.js:26
msgid "Join Displays"
msgstr "Unìs schermis"
#. Translators: this is for using only an external display.
#. * Try to keep it under around 15 characters.
#.
#: js/ui/switchMonitor.js:31
msgid "External Only"
msgstr "Dome esterni"
#. Translators: this is for using only the laptop display.
#. * Try to keep it under around 15 characters.
#.
#: js/ui/switchMonitor.js:36
msgid "Built-in Only"
msgstr "Dome incorporât"
#: js/ui/unlockDialog.js:67
msgid "Log in as another user"
msgstr "Jentre come altri utent"
@@ -1929,11 +1819,11 @@ msgstr "Jentre come altri utent"
msgid "Unlock Window"
msgstr "Sbloche barcon"
#: js/ui/viewSelector.js:190
#: js/ui/viewSelector.js:183
msgid "Applications"
msgstr "Aplicazions"
#: js/ui/viewSelector.js:194
#: js/ui/viewSelector.js:187
msgid "Search"
msgstr "Cîr"
@@ -1942,33 +1832,33 @@ msgstr "Cîr"
msgid "“%s” is ready"
msgstr "'%s' al è pront"
#: js/ui/windowManager.js:72
#: js/ui/windowManager.js:71
msgid "Do you want to keep these display settings?"
msgstr "Vûstu tignî chestis impostazions di visôr?"
#. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels.
#.
#: js/ui/windowManager.js:84
#: js/ui/windowManager.js:83
msgid "Revert Settings"
msgstr "Ripristine impostazions"
#: js/ui/windowManager.js:87
#: js/ui/windowManager.js:86
msgid "Keep Changes"
msgstr "Ten lis modifichis"
#: js/ui/windowManager.js:105
#: js/ui/windowManager.js:104
#, javascript-format
msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds"
msgstr[0] ""
"Lis modifichis as impostazions a vignaran ripristinadis chi di %d secont"
"Lis modifichis as impostazions a vegnaran ripristinadis chi di %d secont"
msgstr[1] ""
"Lis modifichis as impostazions a vignaran ripristinadis chi di %d seconts"
"Lis modifichis as impostazions a vegnaran ripristinadis chi di %d seconts"
#. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height.
#: js/ui/windowManager.js:660
#: js/ui/windowManager.js:659
#, javascript-format
msgid "%d × %d"
msgstr "%d × %d"
@@ -2046,19 +1936,19 @@ msgstr "Calendari di Evolution"
msgid "evolution"
msgstr "evolution"
#: src/main.c:380
#: src/main.c:372
msgid "Print version"
msgstr "Stampe version"
#: src/main.c:386
#: src/main.c:378
msgid "Mode used by GDM for login screen"
msgstr "Modalitât doprade da GDM pe videade di acès"
#: src/main.c:392
#: src/main.c:384
msgid "Use a specific mode, e.g. “gdm” for login screen"
msgstr "Dopre une modalitât specifiche, par esempli “gdm” pe videade di acès"
#: src/main.c:398
#: src/main.c:390
msgid "List possible modes"
msgstr "Liste modalitâts pussibilis"
@@ -2106,12 +1996,6 @@ msgstr[1] "%u jentradis"
msgid "System Sounds"
msgstr "Suns di sisteme"
#~ msgid "Hide tray"
#~ msgstr "Plate casset"
#~ msgid "Status Icons"
#~ msgstr "Iconis di stât"
#~ msgid "Events"
#~ msgstr "Events"

594
po/gl.po

File diff suppressed because it is too large Load Diff

612
po/hr.po

File diff suppressed because it is too large Load Diff

565
po/hu.po

File diff suppressed because it is too large Load Diff

413
po/id.po
View File

@@ -2,7 +2,7 @@
# Copyright (C) 2010 THE gnome-shell'S COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell package.
#
# Andika Triwidada <andika@gmail.com>, 2010-2014, 2017.
# Andika Triwidada <andika@gmail.com>, 2010, 2011, 2012, 2013, 2014.
# Dirgita <dirgitadevina@yahoo.co.id>, 2011, 2012, 2014.
# Wibiharto <wibinem@yahoo.com>, 2011.
msgid ""
@@ -10,16 +10,16 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-22 11:17+0000\n"
"PO-Revision-Date: 2017-08-23 00:03+0700\n"
"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
"POT-Creation-Date: 2017-07-16 17:31+0000\n"
"PO-Revision-Date: 2017-07-17 10:54+0700\n"
"Last-Translator: Kukuh Syafaat <syafaatkukuh@gmail.com>\n"
"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 2.0.3\n"
"X-Generator: Poedit 2.0.2\n"
"X-DamnedLies-Scope: partial\n"
"X-Poedit-SourceCharset: UTF-8\n"
@@ -342,8 +342,8 @@ msgstr "Ada galat saat memuat dialog preferensi bagi %s:"
#: js/gdm/authPrompt.js:149 js/ui/audioDeviceSelection.js:71
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148
#: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197
#: js/ui/shellMountOperation.js:344 js/ui/status/network.js:936
#: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:195
#: js/ui/shellMountOperation.js:344 js/ui/status/network.js:947
msgid "Cancel"
msgstr "Batal"
@@ -404,72 +404,6 @@ msgstr "Galat otentikasi"
msgid "(or swipe finger)"
msgstr "(atau gesekkan jari)"
#. Translators: The name of the power-off action in search
#: js/misc/systemActions.js:99
msgctxt "search-result"
msgid "Power off"
msgstr "Matikan"
#. Translators: A list of keywords that match the power-off action, separated by semicolons
#: js/misc/systemActions.js:102
msgid "power off;shutdown"
msgstr "matikan"
#. Translators: The name of the lock screen action in search
#: js/misc/systemActions.js:106
msgctxt "search-result"
msgid "Lock screen"
msgstr "Kunci layar"
#. Translators: A list of keywords that match the lock screen action, separated by semicolons
#: js/misc/systemActions.js:109
msgid "lock screen"
msgstr "kunci layar"
#. Translators: The name of the logout action in search
#: js/misc/systemActions.js:113
msgctxt "search-result"
msgid "Log out"
msgstr "Keluar"
#. Translators: A list of keywords that match the logout action, separated by semicolons
#: js/misc/systemActions.js:116
msgid "logout;sign off"
msgstr "keluar"
#. Translators: The name of the suspend action in search
#: js/misc/systemActions.js:120
msgctxt "search-result"
msgid "Suspend"
msgstr "Suspensi"
#. Translators: A list of keywords that match the suspend action, separated by semicolons
#: js/misc/systemActions.js:123
msgid "suspend;sleep"
msgstr "suspensi;tidur"
#. Translators: The name of the switch user action in search
#: js/misc/systemActions.js:127
msgctxt "search-result"
msgid "Switch user"
msgstr "Ganti pengguna"
#. Translators: A list of keywords that match the switch user action, separated by semicolons
#: js/misc/systemActions.js:130
msgid "switch user"
msgstr "ganti pengguna"
#. Translators: The name of the lock orientation action in search
#: js/misc/systemActions.js:134
msgctxt "search-result"
msgid "Lock orientation"
msgstr "Kunci orientasi"
#. Translators: A list of keywords that match the lock orientation action, separated by semicolons
#: js/misc/systemActions.js:137
msgid "lock orientation"
msgstr "kunci orientasi"
#: js/misc/util.js:122
msgid "Command not found"
msgstr "Perintah tidak ditemukan"
@@ -623,35 +557,35 @@ msgstr "Tolak Akses"
msgid "Grant Access"
msgstr "Beri Akses"
#: js/ui/appDisplay.js:809
#: js/ui/appDisplay.js:813
msgid "Frequently used applications will appear here"
msgstr "Aplikasi yang sering dipakai akan muncul di sini"
#: js/ui/appDisplay.js:930
#: js/ui/appDisplay.js:934
msgid "Frequent"
msgstr "Sering"
#: js/ui/appDisplay.js:937
#: js/ui/appDisplay.js:941
msgid "All"
msgstr "Semua"
#: js/ui/appDisplay.js:1915
#: js/ui/appDisplay.js:1902
msgid "New Window"
msgstr "Jendela Baru"
#: js/ui/appDisplay.js:1929
#: js/ui/appDisplay.js:1916
msgid "Launch using Dedicated Graphics Card"
msgstr "Luncurkan menggunakan Kartu Grafis Terdedikasi"
#: js/ui/appDisplay.js:1956 js/ui/dash.js:289
#: js/ui/appDisplay.js:1943 js/ui/dash.js:289
msgid "Remove from Favorites"
msgstr "Hapus dari Favorit"
#: js/ui/appDisplay.js:1962
#: js/ui/appDisplay.js:1949
msgid "Add to Favorites"
msgstr "Tambah ke Favorit"
#: js/ui/appDisplay.js:1972
#: js/ui/appDisplay.js:1959
msgid "Show Details"
msgstr "Tampilkan Rincian"
@@ -693,7 +627,7 @@ msgstr "Ubah Latar…"
msgid "Display Settings"
msgstr "Pengaturan Tampilan"
#: js/ui/backgroundMenu.js:22 js/ui/status/system.js:265
#: js/ui/backgroundMenu.js:22 js/ui/status/system.js:407
msgid "Settings"
msgstr "Pengaturan"
@@ -827,7 +761,7 @@ msgstr "Drive eksternal tersambung"
msgid "External drive disconnected"
msgstr "Drive eksternal terputus"
#: js/ui/components/autorunManager.js:354
#: js/ui/components/autorunManager.js:355
#, javascript-format
msgid "Open with %s"
msgstr "Buka dengan %s"
@@ -840,8 +774,8 @@ msgstr "Sandi:"
msgid "Type again:"
msgstr "Ketik lagi:"
#: js/ui/components/networkAgent.js:112 js/ui/status/network.js:261
#: js/ui/status/network.js:355 js/ui/status/network.js:939
#: js/ui/components/networkAgent.js:112 js/ui/status/network.js:272
#: js/ui/status/network.js:366 js/ui/status/network.js:950
msgid "Connect"
msgstr "Sambung"
@@ -916,7 +850,7 @@ msgstr "Sandi jaringan data seluler"
msgid "A password is required to connect to “%s”."
msgstr "Perlu suatu sandi untuk menyambung ke \"%s\"."
#: js/ui/components/networkAgent.js:627 js/ui/status/network.js:1720
#: js/ui/components/networkAgent.js:627 js/ui/status/network.js:1760
msgid "Network Manager"
msgstr "Manajer Jaringan"
@@ -947,7 +881,7 @@ msgstr "Maaf, tidak berhasil. Silakan coba lagi."
msgid "%s is now known as %s"
msgstr "%s sekarang dikenal sebagai %s"
#: js/ui/ctrlAltTab.js:29 js/ui/viewSelector.js:186
#: js/ui/ctrlAltTab.js:29 js/ui/viewSelector.js:179
msgid "Windows"
msgstr "Jendela"
@@ -992,7 +926,7 @@ msgstr "Cuaca"
#. libgweather for the possible condition strings. If at all
#. possible, the sentence should match the grammatical case etc. of
#. the inserted conditions.
#: js/ui/dateMenu.js:286
#: js/ui/dateMenu.js:281
#, javascript-format
msgid "%s all day."
msgstr "%s sepanjang hari."
@@ -1001,7 +935,7 @@ msgstr "%s sepanjang hari."
#. libgweather for the possible condition strings. If at all
#. possible, the sentence should match the grammatical case etc. of
#. the inserted conditions.
#: js/ui/dateMenu.js:292
#: js/ui/dateMenu.js:287
#, javascript-format
msgid "%s, then %s later."
msgstr "%s, kemudian %s."
@@ -1010,30 +944,30 @@ msgstr "%s, kemudian %s."
#. libgweather for the possible condition strings. If at all
#. possible, the sentence should match the grammatical case etc. of
#. the inserted conditions.
#: js/ui/dateMenu.js:298
#: js/ui/dateMenu.js:293
#, javascript-format
msgid "%s, then %s, followed by %s later."
msgstr "%s, kemudian %s, diikuti dengan %s nanti."
#: js/ui/dateMenu.js:309
#: js/ui/dateMenu.js:300
msgid "Select a location…"
msgstr "Pilih lokasi…"
#: js/ui/dateMenu.js:312
#: js/ui/dateMenu.js:303
msgid "Loading…"
msgstr "Memuat…"
#. Translators: %s is a temperature with unit, e.g. "23℃"
#: js/ui/dateMenu.js:318
#: js/ui/dateMenu.js:309
#, javascript-format
msgid "Feels like %s."
msgstr "Terasa seperti %s."
#: js/ui/dateMenu.js:321
#: js/ui/dateMenu.js:312
msgid "Go online for weather information"
msgstr "Pergi daring untuk informasi cuaca"
#: js/ui/dateMenu.js:323
#: js/ui/dateMenu.js:314
msgid "Weather information is currently unavailable"
msgstr "Informasi cuaca saat ini tidak tersedia"
@@ -1179,43 +1113,28 @@ msgstr "%s (jarak jauh)"
msgid "%s (console)"
msgstr "%s (konsol)"
#: js/ui/extensionDownloader.js:201
#: js/ui/extensionDownloader.js:199
msgid "Install"
msgstr "Pasang"
#: js/ui/extensionDownloader.js:206
#: js/ui/extensionDownloader.js:204
#, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Unduh dan pasang \"%s\" dari extensions.gnome.org?"
#. Translators: %s is an application name like "Settings"
#: js/ui/inhibitShortcutsDialog.js:59
#, javascript-format
msgid "%s wants to inhibit shortcuts"
msgstr "%s ingin mencegah pintasan"
#: js/ui/inhibitShortcutsDialog.js:60
msgid "Application wants to inhibit shortcuts"
msgstr "Aplikasi ingin mencegah pintasan"
#. Translators: %s is a keyboard shortcut like "Super+x"
#: js/ui/inhibitShortcutsDialog.js:69
#, javascript-format
msgid "You can restore shortcuts by pressing %s."
msgstr "Anda dapat memulihkan pintasan dengan menekan %s."
#: js/ui/inhibitShortcutsDialog.js:74
msgid "Deny"
msgstr "Tolak"
#: js/ui/inhibitShortcutsDialog.js:80
msgid "Allow"
msgstr "Izinkan"
#: js/ui/keyboard.js:738 js/ui/status/keyboard.js:782
#: js/ui/keyboard.js:740 js/ui/status/keyboard.js:782
msgid "Keyboard"
msgstr "Papan Ketik"
#. translators: 'Hide' is a verb
#: js/ui/legacyTray.js:65
msgid "Hide tray"
msgstr "Sembunyikan baki"
#: js/ui/legacyTray.js:106
msgid "Status Icons"
msgstr "Ikon Status"
#: js/ui/lookingGlass.js:642
msgid "No extensions installed"
msgstr "Tak ada ekstensi terpasang"
@@ -1240,7 +1159,7 @@ msgstr "Diaktifkan"
#. translators:
#. * The device has been disabled
#: js/ui/lookingGlass.js:718 subprojects/gvc/gvc-mixer-control.c:1866
#: js/ui/lookingGlass.js:718 src/gvc/gvc-mixer-control.c:1866
msgid "Disabled"
msgstr "Dinonaktifkan"
@@ -1314,27 +1233,27 @@ msgstr "Ganti monitor"
msgid "Assign keystroke"
msgstr "Tetapkan keystroke"
#: js/ui/padOsd.js:220
#: js/ui/padOsd.js:209
msgid "Done"
msgstr "Selesai"
#: js/ui/padOsd.js:734
#: js/ui/padOsd.js:708
msgid "Edit…"
msgstr "Sunting…"
#: js/ui/padOsd.js:774 js/ui/padOsd.js:879
#: js/ui/padOsd.js:748 js/ui/padOsd.js:810
msgid "None"
msgstr "Nihil"
#: js/ui/padOsd.js:833
#: js/ui/padOsd.js:793
msgid "Press a button to configure"
msgstr "Tekan tombol untuk mengkonfigurasi"
#: js/ui/padOsd.js:834
#: js/ui/padOsd.js:794
msgid "Press Esc to exit"
msgstr "Tekan Esc untuk keluar"
#: js/ui/padOsd.js:837
#: js/ui/padOsd.js:797
msgid "Press any key to exit"
msgstr "Tekan tombol apa saja untuk keluar"
@@ -1401,7 +1320,7 @@ msgid "%d new notification"
msgid_plural "%d new notifications"
msgstr[0] "%d pemberitahuan baru"
#: js/ui/screenShield.js:452 js/ui/status/system.js:284
#: js/ui/screenShield.js:452 js/ui/status/system.js:415
msgid "Lock"
msgstr "Kunci"
@@ -1432,11 +1351,10 @@ msgstr "Mencari…"
msgid "No results."
msgstr "Tak ada yang cocok."
#: js/ui/search.js:777
#: js/ui/search.js:768
#, javascript-format
msgid "%d more"
msgid_plural "%d more"
msgstr[0] "%d lagi"
msgstr "%d lagi"
#: js/ui/shellEntry.js:25
msgid "Copy"
@@ -1510,7 +1428,7 @@ msgstr "Teks Besar"
msgid "Bluetooth"
msgstr "Bluetooth"
#: js/ui/status/bluetooth.js:56 js/ui/status/network.js:627
#: js/ui/status/bluetooth.js:56 js/ui/status/network.js:638
msgid "Bluetooth Settings"
msgstr "Pengaturan Bluetooth"
@@ -1529,13 +1447,13 @@ msgstr "Mati"
msgid "On"
msgstr "Hidup"
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:1299
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:1310
msgid "Turn On"
msgstr "Nyalakan"
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:170
#: js/ui/status/network.js:356 js/ui/status/network.js:1299
#: js/ui/status/network.js:1418 js/ui/status/nightLight.js:47
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:181
#: js/ui/status/network.js:367 js/ui/status/network.js:1310
#: js/ui/status/network.js:1429 js/ui/status/nightLight.js:47
#: js/ui/status/rfkill.js:90 js/ui/status/rfkill.js:117
msgid "Turn Off"
msgstr "Matikan"
@@ -1587,13 +1505,13 @@ msgid "<unknown>"
msgstr "<tak dikenal>"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:454 js/ui/status/network.js:1328
#: js/ui/status/network.js:465 js/ui/status/network.js:1339
#, javascript-format
msgid "%s Off"
msgstr "%s Mati"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:457
#: js/ui/status/network.js:468
#, javascript-format
msgid "%s Connected"
msgstr "%s Tersambung"
@@ -1601,186 +1519,187 @@ msgstr "%s Tersambung"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu);
#. %s is a network identifier
#: js/ui/status/network.js:462
#: js/ui/status/network.js:473
#, javascript-format
msgid "%s Unmanaged"
msgstr "%s Tak Dikelola"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:465
#: js/ui/status/network.js:476
#, javascript-format
msgid "%s Disconnecting"
msgstr "%s Memutus"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:472 js/ui/status/network.js:1320
#: js/ui/status/network.js:483 js/ui/status/network.js:1331
#, javascript-format
msgid "%s Connecting"
msgstr "%s Menyambung"
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
#: js/ui/status/network.js:475
#: js/ui/status/network.js:486
#, javascript-format
msgid "%s Requires Authentication"
msgstr "%s Memerlukan Otentikasi"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing; %s is a network identifier
#: js/ui/status/network.js:483
#: js/ui/status/network.js:494
#, javascript-format
msgid "Firmware Missing For %s"
msgstr "Firmware Hilang Untuk %s"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage; %s is a network identifier
#: js/ui/status/network.js:487
#: js/ui/status/network.js:498
#, javascript-format
msgid "%s Unavailable"
msgstr "%s Tak tersedia"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:490
#: js/ui/status/network.js:501
#, javascript-format
msgid "%s Connection Failed"
msgstr "Koneksi %s Gagal"
#: js/ui/status/network.js:506
#: js/ui/status/network.js:517
msgid "Wired Settings"
msgstr "Pengaturan Kabel"
#: js/ui/status/network.js:548
#: js/ui/status/network.js:559
msgid "Mobile Broadband Settings"
msgstr "Pengaturan Data Seluler"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:591 js/ui/status/network.js:1325
#: js/ui/status/network.js:602 js/ui/status/network.js:1336
#, javascript-format
msgid "%s Hardware Disabled"
msgstr "%s Perangkat Keras Dinonaktifkan"
#. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode); %s is a network identifier
#: js/ui/status/network.js:595
#: js/ui/status/network.js:606
#, javascript-format
msgid "%s Disabled"
msgstr "%s Dinonaktifkan"
#: js/ui/status/network.js:635
#: js/ui/status/network.js:646
msgid "Connect to Internet"
msgstr "Sambungkan ke Internet"
#: js/ui/status/network.js:833
#: js/ui/status/network.js:844
msgid "Airplane Mode is On"
msgstr "Mode Pesawat Terbang Menyala"
#: js/ui/status/network.js:834
#: js/ui/status/network.js:845
msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "Wi-Fi dinonaktifkan ketika mode pesawat terbang menyala."
#: js/ui/status/network.js:835
#: js/ui/status/network.js:846
msgid "Turn Off Airplane Mode"
msgstr "Matikan Mode Pesawat Terbang"
#: js/ui/status/network.js:844
#: js/ui/status/network.js:855
msgid "Wi-Fi is Off"
msgstr "Wi-Fi Mati"
#: js/ui/status/network.js:845
#: js/ui/status/network.js:856
msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "Wi-Fi perlu dinyalakan untuk menyambung ke suatu jaringan."
#: js/ui/status/network.js:846
#: js/ui/status/network.js:857
msgid "Turn On Wi-Fi"
msgstr "Nyalakan Wi-Fi"
#: js/ui/status/network.js:871
#: js/ui/status/network.js:882
msgid "Wi-Fi Networks"
msgstr "Jaringan Wi-Fi"
#: js/ui/status/network.js:873
#: js/ui/status/network.js:884
msgid "Select a network"
msgstr "Pilih jaringan"
#: js/ui/status/network.js:903
#: js/ui/status/network.js:914
msgid "No Networks"
msgstr "Tiada Jaringan"
#: js/ui/status/network.js:924 js/ui/status/rfkill.js:115
#: js/ui/status/network.js:935 js/ui/status/rfkill.js:115
msgid "Use hardware switch to turn off"
msgstr "Pakai saklar perangkat keras untuk mematikan"
#: js/ui/status/network.js:1191
#: js/ui/status/network.js:1202
msgid "Select Network"
msgstr "Pilih Jaringan"
#: js/ui/status/network.js:1197
#: js/ui/status/network.js:1208
msgid "Wi-Fi Settings"
msgstr "Pengaturan Wi-Fi"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1316
#: js/ui/status/network.js:1327
#, javascript-format
msgid "%s Hotspot Active"
msgstr "%s Hotspot Aktif"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1331
#: js/ui/status/network.js:1342
#, javascript-format
msgid "%s Not Connected"
msgstr "%s Tak Tersambung"
#: js/ui/status/network.js:1435
#: js/ui/status/network.js:1446
msgid "connecting…"
msgstr "menghubungi..."
#. Translators: this is for network connections that require some kind of key or password
#: js/ui/status/network.js:1438
#: js/ui/status/network.js:1449
msgid "authentication required"
msgstr "diperlukan otentikasi"
#: js/ui/status/network.js:1440
#: js/ui/status/network.js:1451
msgid "connection failed"
msgstr "koneksi gagal"
#: js/ui/status/network.js:1494
msgid "VPN Settings"
msgstr "Pengaturan VPN"
#: js/ui/status/network.js:1498
msgid "VPN"
msgstr "VPN"
#: js/ui/status/network.js:1508
msgid "VPN Off"
msgstr "VPN Mati"
#: js/ui/status/network.js:1572 js/ui/status/rfkill.js:93
#: js/ui/status/network.js:1517 js/ui/status/network.js:1612
#: js/ui/status/rfkill.js:93
msgid "Network Settings"
msgstr "Pengaturan Jaringan"
#: js/ui/status/network.js:1603
#: js/ui/status/network.js:1519
msgid "VPN Settings"
msgstr "Pengaturan VPN"
#: js/ui/status/network.js:1538
msgid "VPN"
msgstr "VPN"
#: js/ui/status/network.js:1548
msgid "VPN Off"
msgstr "VPN Mati"
#: js/ui/status/network.js:1643
#, javascript-format
msgid "%s Wired Connection"
msgid_plural "%s Wired Connections"
msgstr[0] "%s Koneksi Kabel"
#: js/ui/status/network.js:1607
#: js/ui/status/network.js:1647
#, javascript-format
msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections"
msgstr[0] "%s Koneksi Wi-Fi"
#: js/ui/status/network.js:1611
#: js/ui/status/network.js:1651
#, javascript-format
msgid "%s Modem Connection"
msgid_plural "%s Modem Connections"
msgstr[0] "%s Koneksi Modem"
#: js/ui/status/network.js:1759
#: js/ui/status/network.js:1799
msgid "Connection failed"
msgstr "Koneksi gagal"
#: js/ui/status/network.js:1760
#: js/ui/status/network.js:1800
msgid "Activation of network connection failed"
msgstr "Aktivasi koneksi jaringan gagal"
@@ -1838,27 +1757,27 @@ msgstr "%d%%"
msgid "Airplane Mode On"
msgstr "Mode Pesawat Terbang Aktif"
#: js/ui/status/system.js:228
#: js/ui/status/system.js:384
msgid "Switch User"
msgstr "Ganti Pengguna"
#: js/ui/status/system.js:240
#: js/ui/status/system.js:389
msgid "Log Out"
msgstr "Keluar"
#: js/ui/status/system.js:252
#: js/ui/status/system.js:394
msgid "Account Settings"
msgstr "Pengaturan Akun"
#: js/ui/status/system.js:269
#: js/ui/status/system.js:411
msgid "Orientation Lock"
msgstr "Kunci Orientasi"
#: js/ui/status/system.js:295
#: js/ui/status/system.js:419
msgid "Suspend"
msgstr "Suspensi"
#: js/ui/status/system.js:305
#: js/ui/status/system.js:422
msgid "Power Off"
msgstr "Matikan"
@@ -1870,34 +1789,6 @@ msgstr "Volume diubah"
msgid "Volume"
msgstr "Volume"
#. Translators: this is for display mirroring i.e. cloning.
#. * Try to keep it under around 15 characters.
#.
#: js/ui/switchMonitor.js:21
msgid "Mirror"
msgstr "Kembar"
#. Translators: this is for the desktop spanning displays.
#. * Try to keep it under around 15 characters.
#.
#: js/ui/switchMonitor.js:26
msgid "Join Displays"
msgstr "Gabung Layar"
#. Translators: this is for using only an external display.
#. * Try to keep it under around 15 characters.
#.
#: js/ui/switchMonitor.js:31
msgid "External Only"
msgstr "Hanya Eksternal"
#. Translators: this is for using only the laptop display.
#. * Try to keep it under around 15 characters.
#.
#: js/ui/switchMonitor.js:36
msgid "Built-in Only"
msgstr "Hanya Bawaan"
#: js/ui/unlockDialog.js:67
msgid "Log in as another user"
msgstr "Masuk sebagai pengguna lain"
@@ -1906,11 +1797,11 @@ msgstr "Masuk sebagai pengguna lain"
msgid "Unlock Window"
msgstr "Buka Kunci Jendela"
#: js/ui/viewSelector.js:190
#: js/ui/viewSelector.js:183
msgid "Applications"
msgstr "Aplikasi"
#: js/ui/viewSelector.js:194
#: js/ui/viewSelector.js:187
msgid "Search"
msgstr "Cari"
@@ -1919,22 +1810,22 @@ msgstr "Cari"
msgid "“%s” is ready"
msgstr "'%s' siap"
#: js/ui/windowManager.js:72
#: js/ui/windowManager.js:71
msgid "Do you want to keep these display settings?"
msgstr "Apakah Anda ingin mempertahankan pengaturan tampilan ini?"
#. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels.
#.
#: js/ui/windowManager.js:84
#: js/ui/windowManager.js:83
msgid "Revert Settings"
msgstr "Balikkan Tatanan"
#: js/ui/windowManager.js:87
#: js/ui/windowManager.js:86
msgid "Keep Changes"
msgstr "Simpan Perubahan"
#: js/ui/windowManager.js:105
#: js/ui/windowManager.js:104
#, javascript-format
msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds"
@@ -1942,7 +1833,7 @@ msgstr[0] "Perubahan tatanan akan dikembalikan dalam %d detik"
#. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height.
#: js/ui/windowManager.js:660
#: js/ui/windowManager.js:659
#, javascript-format
msgid "%d × %d"
msgstr "%d × %d"
@@ -2020,19 +1911,39 @@ msgstr "Evolution Kalender"
msgid "evolution"
msgstr "evolution"
#: src/main.c:380
#. translators:
#. * The number of sound outputs on a particular device
#: src/gvc/gvc-mixer-control.c:1873
#, c-format
msgid "%u Output"
msgid_plural "%u Outputs"
msgstr[0] "%u Keluaran"
#. translators:
#. * The number of sound inputs on a particular device
#: src/gvc/gvc-mixer-control.c:1883
#, c-format
msgid "%u Input"
msgid_plural "%u Inputs"
msgstr[0] "%u Masukan"
#: src/gvc/gvc-mixer-control.c:2738
msgid "System Sounds"
msgstr "Suara Sistem"
#: src/main.c:372
msgid "Print version"
msgstr "Versi Cetak"
#: src/main.c:386
#: src/main.c:378
msgid "Mode used by GDM for login screen"
msgstr "Mode yang dipakai oleh layar log masuk GDM"
#: src/main.c:392
#: src/main.c:384
msgid "Use a specific mode, e.g. “gdm” for login screen"
msgstr "Menggunakan mode tertentu, mis. \"gdm\" untuk layar masuk"
#: src/main.c:398
#: src/main.c:390
msgid "List possible modes"
msgstr "Menampilkan mode yang mungkin"
@@ -2058,22 +1969,26 @@ msgstr "Sandi tidak boleh kosong"
msgid "Authentication dialog was dismissed by the user"
msgstr "Dialog otentikasi ditolak oleh pengguna"
#. translators:
#. * The number of sound outputs on a particular device
#: subprojects/gvc/gvc-mixer-control.c:1873
#, c-format
msgid "%u Output"
msgid_plural "%u Outputs"
msgstr[0] "%u Keluaran"
#~ msgid "Events"
#~ msgstr "Kejadian"
#. translators:
#. * The number of sound inputs on a particular device
#: subprojects/gvc/gvc-mixer-control.c:1883
#, c-format
msgid "%u Input"
msgid_plural "%u Inputs"
msgstr[0] "%u Masukan"
#~ msgid "Notifications"
#~ msgstr "Pemberitahuan"
#: subprojects/gvc/gvc-mixer-control.c:2738
msgid "System Sounds"
msgstr "Suara Sistem"
#~ msgid "Clear section"
#~ msgstr "Bersihkan seksi"
#~ msgid "Media"
#~ msgstr "Media"
#~ msgid "GNOME Shell Extension Preferences"
#~ msgstr "Preferensi Ekstensi GNOME Shell"
#~ msgid "Web Authentication Redirect"
#~ msgstr "Pengalihan Otentikasi Web"
#~ msgid "%d x %d"
#~ msgstr "%d x %d"
#~ msgid "Not In Use"
#~ msgstr "Tidak Dipakai"

1021
po/is.po

File diff suppressed because it is too large Load Diff

638
po/it.po

File diff suppressed because it is too large Load Diff

731
po/ja.po

File diff suppressed because it is too large Load Diff

557
po/kk.po

File diff suppressed because it is too large Load Diff

554
po/ko.po

File diff suppressed because it is too large Load Diff

345
po/lt.po
View File

@@ -11,8 +11,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2017-08-22 11:17+0000\n"
"PO-Revision-Date: 2017-08-22 23:13+0300\n"
"POT-Creation-Date: 2017-07-20 03:49+0000\n"
"PO-Revision-Date: 2017-07-24 23:45+0300\n"
"Last-Translator: Aurimas Černius <aurisc4@gmail.com>\n"
"Language-Team: Lietuvių <gnome-lt@lists.akl.lt>\n"
"Language: lt\n"
@@ -337,7 +337,7 @@ msgstr "Kilo klaida įkeliant %s nuostatų dialogą:"
#: js/gdm/authPrompt.js:149 js/ui/audioDeviceSelection.js:71
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148
#: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197
#: js/ui/shellMountOperation.js:344 js/ui/status/network.js:936
#: js/ui/shellMountOperation.js:344 js/ui/status/network.js:947
msgid "Cancel"
msgstr "Atsisakyti"
@@ -398,80 +398,6 @@ msgstr "Tapatybės patvirtinimo klaida"
msgid "(or swipe finger)"
msgstr "(arba perbraukite pirštu)"
#. Translators: The name of the power-off action in search
#: js/misc/systemActions.js:99
#| msgid "Power Off"
msgctxt "search-result"
msgid "Power off"
msgstr "Išjungti"
#. Translators: A list of keywords that match the power-off action, separated by semicolons
#: js/misc/systemActions.js:102
msgid "power off;shutdown"
msgstr "išjungti"
#. Translators: The name of the lock screen action in search
#: js/misc/systemActions.js:106
msgctxt "search-result"
msgid "Lock screen"
msgstr "Užrakinti ekraną"
#. Translators: A list of keywords that match the lock screen action, separated by semicolons
#: js/misc/systemActions.js:109
msgid "lock screen"
msgstr "užrakinti ekraną"
#. Translators: The name of the logout action in search
#: js/misc/systemActions.js:113
#| msgid "Log Out"
msgctxt "search-result"
msgid "Log out"
msgstr "Atsijungti"
#. Translators: A list of keywords that match the logout action, separated by semicolons
#: js/misc/systemActions.js:116
msgid "logout;sign off"
msgstr "atsijungti"
#. Translators: The name of the suspend action in search
#: js/misc/systemActions.js:120
#| msgid "Suspend"
msgctxt "search-result"
msgid "Suspend"
msgstr "Pristabdyti"
#. Translators: A list of keywords that match the suspend action, separated by semicolons
#: js/misc/systemActions.js:123
#| msgid "Suspend"
msgid "suspend;sleep"
msgstr "pristabdyti;užmigdyti"
#. Translators: The name of the switch user action in search
#: js/misc/systemActions.js:127
#| msgid "Switch User"
msgctxt "search-result"
msgid "Switch user"
msgstr "Keisti naudotoją"
#. Translators: A list of keywords that match the switch user action, separated by semicolons
#: js/misc/systemActions.js:130
#| msgid "Switch User"
msgid "switch user"
msgstr "keisti naudotoją"
#. Translators: The name of the lock orientation action in search
#: js/misc/systemActions.js:134
#| msgid "Orientation Lock"
msgctxt "search-result"
msgid "Lock orientation"
msgstr "Orientacijos užrakinimas"
#. Translators: A list of keywords that match the lock orientation action, separated by semicolons
#: js/misc/systemActions.js:137
#| msgid "Orientation Lock"
msgid "lock orientation"
msgstr "orientacijos užrakinimas"
#: js/misc/util.js:122
msgid "Command not found"
msgstr "Komanda nerasta"
@@ -636,35 +562,35 @@ msgstr "Atmesti prieigą"
msgid "Grant Access"
msgstr "Suteikti prieigą"
#: js/ui/appDisplay.js:809
#: js/ui/appDisplay.js:806
msgid "Frequently used applications will appear here"
msgstr "Čia bus matomos dažnai naudojamos programos"
#: js/ui/appDisplay.js:930
#: js/ui/appDisplay.js:927
msgid "Frequent"
msgstr "Dažnai naudojamos"
#: js/ui/appDisplay.js:937
#: js/ui/appDisplay.js:934
msgid "All"
msgstr "Visos"
#: js/ui/appDisplay.js:1915
#: js/ui/appDisplay.js:1895
msgid "New Window"
msgstr "Naujas langas"
#: js/ui/appDisplay.js:1929
#: js/ui/appDisplay.js:1909
msgid "Launch using Dedicated Graphics Card"
msgstr "Paleisti naudojant dedikuotą grafikos kortą"
#: js/ui/appDisplay.js:1956 js/ui/dash.js:289
#: js/ui/appDisplay.js:1936 js/ui/dash.js:289
msgid "Remove from Favorites"
msgstr "Pašalinti iš mėgstamų"
#: js/ui/appDisplay.js:1962
#: js/ui/appDisplay.js:1942
msgid "Add to Favorites"
msgstr "Pridėti prie mėgstamų"
#: js/ui/appDisplay.js:1972
#: js/ui/appDisplay.js:1952
msgid "Show Details"
msgstr "Rodyti detalią informaciją"
@@ -706,7 +632,7 @@ msgstr "Keisti foną…"
msgid "Display Settings"
msgstr "Ekrano nustatymai"
#: js/ui/backgroundMenu.js:22 js/ui/status/system.js:265
#: js/ui/backgroundMenu.js:22 js/ui/status/system.js:407
msgid "Settings"
msgstr "Nustatymai"
@@ -813,6 +739,7 @@ msgstr "Viską išvalyti"
#. Translators: %s is an application name
#: js/ui/closeDialog.js:44
#, javascript-format
#| msgid "“%s” is ready"
msgid "“%s” is not responding."
msgstr "„%s“ neatsiliepia."
@@ -853,8 +780,8 @@ msgstr "Slaptažodis:"
msgid "Type again:"
msgstr "Įveskite dar kartą:"
#: js/ui/components/networkAgent.js:112 js/ui/status/network.js:261
#: js/ui/status/network.js:355 js/ui/status/network.js:939
#: js/ui/components/networkAgent.js:112 js/ui/status/network.js:272
#: js/ui/status/network.js:366 js/ui/status/network.js:950
msgid "Connect"
msgstr "Prisijungti"
@@ -929,7 +856,7 @@ msgstr "Mobiliojo plačiajuosčio tinklo slaptažodis"
msgid "A password is required to connect to “%s”."
msgstr "Būtinas slaptažodis norint prisijungti prie „%s“."
#: js/ui/components/networkAgent.js:627 js/ui/status/network.js:1720
#: js/ui/components/networkAgent.js:627 js/ui/status/network.js:1760
msgid "Network Manager"
msgstr "Tinklo tvarkymas"
@@ -960,7 +887,7 @@ msgstr "Atsiprašome, tai nesuveikė. Bandykite dar kartą."
msgid "%s is now known as %s"
msgstr "%s nuo šiol vadinasi %s"
#: js/ui/ctrlAltTab.js:29 js/ui/viewSelector.js:186
#: js/ui/ctrlAltTab.js:29 js/ui/viewSelector.js:179
msgid "Windows"
msgstr "Langai"
@@ -1005,7 +932,7 @@ msgstr "Orai"
#. libgweather for the possible condition strings. If at all
#. possible, the sentence should match the grammatical case etc. of
#. the inserted conditions.
#: js/ui/dateMenu.js:286
#: js/ui/dateMenu.js:281
#, javascript-format
msgid "%s all day."
msgstr "%s visą dieną."
@@ -1014,7 +941,7 @@ msgstr "%s visą dieną."
#. libgweather for the possible condition strings. If at all
#. possible, the sentence should match the grammatical case etc. of
#. the inserted conditions.
#: js/ui/dateMenu.js:292
#: js/ui/dateMenu.js:287
#, javascript-format
msgid "%s, then %s later."
msgstr "%s, o vėliau %s."
@@ -1023,30 +950,30 @@ msgstr "%s, o vėliau %s."
#. libgweather for the possible condition strings. If at all
#. possible, the sentence should match the grammatical case etc. of
#. the inserted conditions.
#: js/ui/dateMenu.js:298
#: js/ui/dateMenu.js:293
#, javascript-format
msgid "%s, then %s, followed by %s later."
msgstr "%s, tuomet %s, o po to vėliau %s."
#: js/ui/dateMenu.js:309
#: js/ui/dateMenu.js:300
msgid "Select a location…"
msgstr "Pasirinkite vietą…"
#: js/ui/dateMenu.js:312
#: js/ui/dateMenu.js:303
msgid "Loading…"
msgstr "Įkeliama…"
#. Translators: %s is a temperature with unit, e.g. "23℃"
#: js/ui/dateMenu.js:318
#: js/ui/dateMenu.js:309
#, javascript-format
msgid "Feels like %s."
msgstr "Jaučiama kaip %s."
#: js/ui/dateMenu.js:321
#: js/ui/dateMenu.js:312
msgid "Go online for weather information"
msgstr "Prisijunkite prie tinklo orų informacijai gauti"
#: js/ui/dateMenu.js:323
#: js/ui/dateMenu.js:314
msgid "Weather information is currently unavailable"
msgstr "Orų informacija šiuo metu yra neprieinama"
@@ -1213,34 +1140,19 @@ msgstr "Įdiegti"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Parsiųsti ir įdiegti „%s“ iš extensions.gnome.org?"
#. Translators: %s is an application name like "Settings"
#: js/ui/inhibitShortcutsDialog.js:59
#, javascript-format
msgid "%s wants to inhibit shortcuts"
msgstr "%s nori talpinti trumpinius"
#: js/ui/inhibitShortcutsDialog.js:60
msgid "Application wants to inhibit shortcuts"
msgstr "Programa nori talpinti trumpinius"
#. Translators: %s is a keyboard shortcut like "Super+x"
#: js/ui/inhibitShortcutsDialog.js:69
#, javascript-format
msgid "You can restore shortcuts by pressing %s."
msgstr "Galite atstatyti trumpinius paspaudę %s"
#: js/ui/inhibitShortcutsDialog.js:74
msgid "Deny"
msgstr "Neleisti"
#: js/ui/inhibitShortcutsDialog.js:80
msgid "Allow"
msgstr "Leisti"
#: js/ui/keyboard.js:738 js/ui/status/keyboard.js:782
#: js/ui/keyboard.js:740 js/ui/status/keyboard.js:782
msgid "Keyboard"
msgstr "Klaviatūra"
#. translators: 'Hide' is a verb
#: js/ui/legacyTray.js:65
msgid "Hide tray"
msgstr "Slėpti dėklą"
#: js/ui/legacyTray.js:106
msgid "Status Icons"
msgstr "Būsenos piktogramos"
#: js/ui/lookingGlass.js:642
msgid "No extensions installed"
msgstr "Nėra įdiegtų plėtinių"
@@ -1429,7 +1341,7 @@ msgstr[0] "%d naujas pranešimas"
msgstr[1] "%d nauji pranešimai"
msgstr[2] "%d naujų pranešimų"
#: js/ui/screenShield.js:452 js/ui/status/system.js:284
#: js/ui/screenShield.js:452 js/ui/status/system.js:415
msgid "Lock"
msgstr "Užrakinti"
@@ -1460,13 +1372,10 @@ msgstr "Ieškoma…"
msgid "No results."
msgstr "Nerasta atitikmenų."
#: js/ui/search.js:777
#: js/ui/search.js:768
#, javascript-format
msgid "%d more"
msgid_plural "%d more"
msgstr[0] "dar %d"
msgstr[1] "dar %d"
msgstr[2] "dar %d"
msgstr "dar %d"
#: js/ui/shellEntry.js:25
msgid "Copy"
@@ -1540,7 +1449,7 @@ msgstr "Didelis tekstas"
msgid "Bluetooth"
msgstr "Bluetooth"
#: js/ui/status/bluetooth.js:56 js/ui/status/network.js:627
#: js/ui/status/bluetooth.js:56 js/ui/status/network.js:638
msgid "Bluetooth Settings"
msgstr "Bluetooth nustatymai"
@@ -1561,13 +1470,13 @@ msgstr "Išjungta"
msgid "On"
msgstr "Įjungta"
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:1299
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:1310
msgid "Turn On"
msgstr "Įjungti"
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:170
#: js/ui/status/network.js:356 js/ui/status/network.js:1299
#: js/ui/status/network.js:1418 js/ui/status/nightLight.js:47
#: js/ui/status/bluetooth.js:142 js/ui/status/network.js:181
#: js/ui/status/network.js:367 js/ui/status/network.js:1310
#: js/ui/status/network.js:1429 js/ui/status/nightLight.js:47
#: js/ui/status/rfkill.js:90 js/ui/status/rfkill.js:117
msgid "Turn Off"
msgstr "Išjungti"
@@ -1619,13 +1528,13 @@ msgid "<unknown>"
msgstr "<nežinoma>"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:454 js/ui/status/network.js:1328
#: js/ui/status/network.js:465 js/ui/status/network.js:1339
#, javascript-format
msgid "%s Off"
msgstr "%s išjungtas"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:457
#: js/ui/status/network.js:468
#, javascript-format
msgid "%s Connected"
msgstr "Prisijungta prie %s"
@@ -1633,164 +1542,165 @@ msgstr "Prisijungta prie %s"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu);
#. %s is a network identifier
#: js/ui/status/network.js:462
#: js/ui/status/network.js:473
#, javascript-format
msgid "%s Unmanaged"
msgstr "%s netvarkomas"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:465
#: js/ui/status/network.js:476
#, javascript-format
msgid "%s Disconnecting"
msgstr "Atsijungiama nuo %s"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:472 js/ui/status/network.js:1320
#: js/ui/status/network.js:483 js/ui/status/network.js:1331
#, javascript-format
msgid "%s Connecting"
msgstr "Jungiamasi prie %s"
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
#: js/ui/status/network.js:475
#: js/ui/status/network.js:486
#, javascript-format
msgid "%s Requires Authentication"
msgstr "%s reikalauja patvirtinti tapatybę"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing; %s is a network identifier
#: js/ui/status/network.js:483
#: js/ui/status/network.js:494
#, javascript-format
msgid "Firmware Missing For %s"
msgstr "%s trūksta integruotos programinės įrangos"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage; %s is a network identifier
#: js/ui/status/network.js:487
#: js/ui/status/network.js:498
#, javascript-format
msgid "%s Unavailable"
msgstr "%s nepasiekiamas"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:490
#: js/ui/status/network.js:501
#, javascript-format
msgid "%s Connection Failed"
msgstr "Nepavyko prisijungti prie %s"
#: js/ui/status/network.js:506
#: js/ui/status/network.js:517
msgid "Wired Settings"
msgstr "Laidinio ryšio nustatymai"
#: js/ui/status/network.js:548
#: js/ui/status/network.js:559
msgid "Mobile Broadband Settings"
msgstr "Mobiliojo plačiajuosčio tinklo nustatymai"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:591 js/ui/status/network.js:1325
#: js/ui/status/network.js:602 js/ui/status/network.js:1336
#, javascript-format
msgid "%s Hardware Disabled"
msgstr "%s aparatinė įranga išjungta"
#. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode); %s is a network identifier
#: js/ui/status/network.js:595
#: js/ui/status/network.js:606
#, javascript-format
msgid "%s Disabled"
msgstr "%s išjungtas"
#: js/ui/status/network.js:635
#: js/ui/status/network.js:646
msgid "Connect to Internet"
msgstr "Prisijungti prie interneto"
#: js/ui/status/network.js:833
#: js/ui/status/network.js:844
msgid "Airplane Mode is On"
msgstr "Skrydžio veiksena įjungta"
#: js/ui/status/network.js:834
#: js/ui/status/network.js:845
msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "Belaidis ryšys yra išjungta skrydžio veiksenoje."
#: js/ui/status/network.js:835
#: js/ui/status/network.js:846
msgid "Turn Off Airplane Mode"
msgstr "Išjungti skrydžio veikseną"
#: js/ui/status/network.js:844
#: js/ui/status/network.js:855
msgid "Wi-Fi is Off"
msgstr "Belaidžio ryšys išjungtas"
#: js/ui/status/network.js:845
#: js/ui/status/network.js:856
msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "Norint prisijungti prie tinklo reikia įjungti belaidį ryšį."
#: js/ui/status/network.js:846
#: js/ui/status/network.js:857
msgid "Turn On Wi-Fi"
msgstr "Įjungti belaidį ryšį"
#: js/ui/status/network.js:871
#: js/ui/status/network.js:882
msgid "Wi-Fi Networks"
msgstr "Wi-Fi tinklai"
#: js/ui/status/network.js:873
#: js/ui/status/network.js:884
msgid "Select a network"
msgstr "Pasirinkite tinklą"
#: js/ui/status/network.js:903
#: js/ui/status/network.js:914
msgid "No Networks"
msgstr "Nėra tinklų"
#: js/ui/status/network.js:924 js/ui/status/rfkill.js:115
#: js/ui/status/network.js:935 js/ui/status/rfkill.js:115
msgid "Use hardware switch to turn off"
msgstr "Išjungimui naudoti aparatinį jungiklį"
#: js/ui/status/network.js:1191
#: js/ui/status/network.js:1202
msgid "Select Network"
msgstr "Pasirinkite tinklą"
#: js/ui/status/network.js:1197
#: js/ui/status/network.js:1208
msgid "Wi-Fi Settings"
msgstr "Belaidžio ryšio nustatymai"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1316
#: js/ui/status/network.js:1327
#, javascript-format
msgid "%s Hotspot Active"
msgstr "Prieigos taškas %s aktyvus"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1331
#: js/ui/status/network.js:1342
#, javascript-format
msgid "%s Not Connected"
msgstr "Neprisijungta prie %s"
#: js/ui/status/network.js:1435
#: js/ui/status/network.js:1446
msgid "connecting…"
msgstr "jungiamasi…"
#. Translators: this is for network connections that require some kind of key or password
#: js/ui/status/network.js:1438
#: js/ui/status/network.js:1449
msgid "authentication required"
msgstr "reikia patvirtinti tapatybę"
#: js/ui/status/network.js:1440
#: js/ui/status/network.js:1451
msgid "connection failed"
msgstr "nepavyko prisijungti"
#: js/ui/status/network.js:1494
msgid "VPN Settings"
msgstr "VPN nustatymai"
#: js/ui/status/network.js:1498
msgid "VPN"
msgstr "VPN"
#: js/ui/status/network.js:1508
msgid "VPN Off"
msgstr "VPN išjungtas"
#: js/ui/status/network.js:1572 js/ui/status/rfkill.js:93
#: js/ui/status/network.js:1517 js/ui/status/network.js:1612
#: js/ui/status/rfkill.js:93
msgid "Network Settings"
msgstr "Tinklo nustatymai"
#: js/ui/status/network.js:1603
#: js/ui/status/network.js:1519
msgid "VPN Settings"
msgstr "VPN nustatymai"
#: js/ui/status/network.js:1538
msgid "VPN"
msgstr "VPN"
#: js/ui/status/network.js:1548
msgid "VPN Off"
msgstr "VPN išjungtas"
#: js/ui/status/network.js:1643
#, javascript-format
msgid "%s Wired Connection"
msgid_plural "%s Wired Connections"
@@ -1798,7 +1708,7 @@ msgstr[0] "%s laidinis ryšys"
msgstr[1] "%s laidiniai ryšiai"
msgstr[2] "%s laidinių ryšių"
#: js/ui/status/network.js:1607
#: js/ui/status/network.js:1647
#, javascript-format
msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections"
@@ -1806,7 +1716,7 @@ msgstr[0] "%s belaidis ryšys"
msgstr[1] "%s belaidžiai ryšiai"
msgstr[2] "%s belaidžių ryšių"
#: js/ui/status/network.js:1611
#: js/ui/status/network.js:1651
#, javascript-format
msgid "%s Modem Connection"
msgid_plural "%s Modem Connections"
@@ -1814,11 +1724,11 @@ msgstr[0] "%s modemo ryšys"
msgstr[1] "%s modemo ryšiai"
msgstr[2] "%s modemo ryšių"
#: js/ui/status/network.js:1759
#: js/ui/status/network.js:1799
msgid "Connection failed"
msgstr "Nepavyko prisijungti"
#: js/ui/status/network.js:1760
#: js/ui/status/network.js:1800
msgid "Activation of network connection failed"
msgstr "Tinklo ryšio nepavyko aktyvuoti"
@@ -1876,27 +1786,27 @@ msgstr "%d%%"
msgid "Airplane Mode On"
msgstr "Skrydžio veiksena įjungta"
#: js/ui/status/system.js:228
#: js/ui/status/system.js:384
msgid "Switch User"
msgstr "Keisti naudotoją"
#: js/ui/status/system.js:240
#: js/ui/status/system.js:389
msgid "Log Out"
msgstr "Atsijungti"
#: js/ui/status/system.js:252
#: js/ui/status/system.js:394
msgid "Account Settings"
msgstr "Paskyros nustatymai"
#: js/ui/status/system.js:269
#: js/ui/status/system.js:411
msgid "Orientation Lock"
msgstr "Padėties užrakinimas"
#: js/ui/status/system.js:295
#: js/ui/status/system.js:419
msgid "Suspend"
msgstr "Pristabdyti"
#: js/ui/status/system.js:305
#: js/ui/status/system.js:422
msgid "Power Off"
msgstr "Išjungti"
@@ -1908,35 +1818,6 @@ msgstr "Garsumas pakeistas"
msgid "Volume"
msgstr "Garsumas"
#. Translators: this is for display mirroring i.e. cloning.
#. * Try to keep it under around 15 characters.
#.
#: js/ui/switchMonitor.js:21
#| msgid "Error"
msgid "Mirror"
msgstr "Veidrodis"
#. Translators: this is for the desktop spanning displays.
#. * Try to keep it under around 15 characters.
#.
#: js/ui/switchMonitor.js:26
msgid "Join Displays"
msgstr "Sujungti vaizduoklius"
#. Translators: this is for using only an external display.
#. * Try to keep it under around 15 characters.
#.
#: js/ui/switchMonitor.js:31
msgid "External Only"
msgstr "Tik išorinis"
#. Translators: this is for using only the laptop display.
#. * Try to keep it under around 15 characters.
#.
#: js/ui/switchMonitor.js:36
msgid "Built-in Only"
msgstr "Tik vidinis"
#: js/ui/unlockDialog.js:67
msgid "Log in as another user"
msgstr "Prisijungti kitu naudotoju"
@@ -1945,11 +1826,11 @@ msgstr "Prisijungti kitu naudotoju"
msgid "Unlock Window"
msgstr "Atrakinimo langas"
#: js/ui/viewSelector.js:190
#: js/ui/viewSelector.js:183
msgid "Applications"
msgstr "Programos"
#: js/ui/viewSelector.js:194
#: js/ui/viewSelector.js:187
msgid "Search"
msgstr "Ieškoti"
@@ -1958,22 +1839,22 @@ msgstr "Ieškoti"
msgid "“%s” is ready"
msgstr "„%s“ yra pasirengusi"
#: js/ui/windowManager.js:72
#: js/ui/windowManager.js:71
msgid "Do you want to keep these display settings?"
msgstr "Ar norite įrašyti šiuos vaizduoklio nustatymus?"
#. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels.
#.
#: js/ui/windowManager.js:84
#: js/ui/windowManager.js:83
msgid "Revert Settings"
msgstr "Grąžinti nustatymus"
#: js/ui/windowManager.js:87
#: js/ui/windowManager.js:86
msgid "Keep Changes"
msgstr "Įrašyti pakeitimus"
#: js/ui/windowManager.js:105
#: js/ui/windowManager.js:104
#, javascript-format
msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds"
@@ -1983,7 +1864,7 @@ msgstr[2] "Pakeitimai bus grąžinti po %d sekundžių"
#. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height.
#: js/ui/windowManager.js:660
#: js/ui/windowManager.js:659
#, javascript-format
msgid "%d × %d"
msgstr "%d × %d"
@@ -2061,19 +1942,19 @@ msgstr "Evolution kalendorius"
msgid "evolution"
msgstr "evolution"
#: src/main.c:380
#: src/main.c:372
msgid "Print version"
msgstr "Išvesti versijos numerį"
#: src/main.c:386
#: src/main.c:378
msgid "Mode used by GDM for login screen"
msgstr "Veiksena, naudojama GDM prisijungimo ekrane"
#: src/main.c:392
#: src/main.c:384
msgid "Use a specific mode, e.g. “gdm” for login screen"
msgstr "Naudoti konkrečią veikseną, pvz., „gdm“ prisijungimo ekranui"
#: src/main.c:398
#: src/main.c:390
msgid "List possible modes"
msgstr "Išvardinti galimas veiksenas"
@@ -2123,12 +2004,6 @@ msgstr[2] "%u įvesčių"
msgid "System Sounds"
msgstr "Sistemos garsai"
#~ msgid "Hide tray"
#~ msgstr "Slėpti dėklą"
#~ msgid "Status Icons"
#~ msgstr "Būsenos piktogramos"
#~ msgid "Events"
#~ msgstr "Įvykiai"

577
po/lv.po

File diff suppressed because it is too large Load Diff

3132
po/ml.po

File diff suppressed because it is too large Load Diff

View File

@@ -1931,7 +1931,7 @@ msgstr "इभोल्युसन पात्रो"
#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
#: src/calendar-server/evolution-calendar.desktop.in:6
msgid "evolution"
msgstr "evolution"
msgstr "इभोल्युसन"
#: src/main.c:372
msgid "Print version"

1098
po/nl.po

File diff suppressed because it is too large Load Diff

772
po/pa.po

File diff suppressed because it is too large Load Diff

576
po/pl.po

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More