Compare commits
2 Commits
3.26.2
...
wip/rstrod
Author | SHA1 | Date | |
---|---|---|---|
![]() |
9f925cf78d | ||
![]() |
1fcb59104d |
18
.gitignore
vendored
18
.gitignore
vendored
@@ -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
4
.gitmodules
vendored
@@ -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
33
Makefile.am
Normal 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
98
NEWS
@@ -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
35
autogen.sh
Executable 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
|
23
browser-plugin/Makefile.am
Normal file
23
browser-plugin/Makefile.am
Normal 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
158
configure
vendored
@@ -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
280
configure.ac
Normal 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
136
data/Makefile.am
Normal 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)
|
@@ -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>
|
||||
|
@@ -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)
|
||||
|
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 {
|
||||
|
Submodule data/theme/gnome-shell-sass updated: 32361ac692...82941c9d93
@@ -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 {
|
||||
|
@@ -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 |
@@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
#!/usr/bin/sh
|
||||
|
||||
srcdir=`dirname $0`
|
||||
stamp=${1}
|
||||
|
1
docs/Makefile.am
Normal file
1
docs/Makefile.am
Normal file
@@ -0,0 +1 @@
|
||||
SUBDIRS = reference
|
1
docs/reference/Makefile.am
Normal file
1
docs/reference/Makefile.am
Normal file
@@ -0,0 +1 @@
|
||||
SUBDIRS = shell st
|
139
docs/reference/shell/Makefile.am
Normal file
139
docs/reference/shell/Makefile.am
Normal 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
|
104
docs/reference/st/Makefile.am
Normal file
104
docs/reference/st/Makefile.am
Normal 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
39
js/Makefile.am
Normal 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
190
js/gdm/authList.js
Normal 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);
|
@@ -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;
|
||||
},
|
||||
|
@@ -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,
|
||||
|
@@ -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);
|
||||
|
@@ -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>
|
||||
|
@@ -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');
|
||||
|
@@ -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();
|
||||
}
|
||||
});
|
@@ -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) {
|
||||
|
@@ -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();
|
||||
}
|
||||
});
|
||||
|
@@ -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',
|
||||
|
@@ -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;
|
||||
|
@@ -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:
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -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();
|
||||
}
|
||||
});
|
@@ -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
272
js/ui/legacyTray.js
Normal 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();
|
||||
}
|
||||
}
|
||||
});
|
@@ -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();
|
||||
|
@@ -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,
|
||||
|
@@ -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)
|
||||
|
@@ -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)
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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();
|
||||
}
|
||||
},
|
||||
|
@@ -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) {
|
||||
|
@@ -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;
|
||||
},
|
||||
|
@@ -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;
|
||||
}
|
||||
});
|
||||
|
@@ -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++);
|
||||
|
@@ -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() {
|
||||
|
@@ -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();
|
||||
},
|
||||
});
|
||||
|
@@ -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);
|
||||
}
|
||||
});
|
||||
|
@@ -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) {
|
||||
|
@@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
|
@@ -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));
|
||||
|
||||
|
@@ -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)
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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) {
|
||||
|
@@ -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
19
man/Makefile.am
Normal 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)
|
@@ -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'
|
||||
|
@@ -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
|
||||
|
2561
po/ca@valencia.po
2561
po/ca@valencia.po
File diff suppressed because it is too large
Load Diff
388
po/fur.po
388
po/fur.po
@@ -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"
|
||||
|
||||
|
413
po/id.po
413
po/id.po
@@ -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"
|
||||
|
345
po/lt.po
345
po/lt.po
@@ -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"
|
||||
|
||||
|
2
po/ne.po
2
po/ne.po
@@ -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"
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user