From 5306fbc72ffcf6644a1c9f1b9810028c2d669c07 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Apr 10 2018 05:44:58 +0000 Subject: import gnome-shell-3.26.2-5.el7 --- diff --git a/.gitignore b/.gitignore index cb32663..ad86e13 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/gnome-shell-3.22.3.tar.xz +SOURCES/gnome-shell-3.26.2.tar.xz diff --git a/.gnome-shell.metadata b/.gnome-shell.metadata index 031c566..aacd39e 100644 --- a/.gnome-shell.metadata +++ b/.gnome-shell.metadata @@ -1 +1 @@ -0cfb5d638fb5b9ea02421fdab21c1ebfd145de06 SOURCES/gnome-shell-3.22.3.tar.xz +2becb087720fcb6f067dce006b964bd2faab5870 SOURCES/gnome-shell-3.26.2.tar.xz diff --git a/SOURCES/0001-Revert-build-Drop-autotools-support.patch b/SOURCES/0001-Revert-build-Drop-autotools-support.patch new file mode 100644 index 0000000..b9e5dff --- /dev/null +++ b/SOURCES/0001-Revert-build-Drop-autotools-support.patch @@ -0,0 +1,1632 @@ +From a24679ddf8b96590fc6bf5ed7fadc8724a40445c Mon Sep 17 00:00:00 2001 +From: Olivier Fourdan +Date: Fri, 15 Sep 2017 10:39:50 +0200 +Subject: [PATCH 1/2] Revert "build: Drop autotools support" + +This reverts commit cf010cfd8fc1440373c1ed44540a54a5341cf3eb. +--- + Makefile.am | 33 ++++ + autogen.sh | 35 ++++ + browser-plugin/Makefile.am | 23 +++ + configure.ac | 280 +++++++++++++++++++++++++++++++ + data/Makefile.am | 136 +++++++++++++++ + docs/Makefile.am | 1 + + docs/reference/Makefile.am | 1 + + docs/reference/shell/Makefile.am | 139 ++++++++++++++++ + docs/reference/st/Makefile.am | 104 ++++++++++++ + gtk-doc.make | 304 ++++++++++++++++++++++++++++++++++ + js/Makefile.am | 39 +++++ + man/Makefile.am | 19 +++ + src/Makefile.am | 349 +++++++++++++++++++++++++++++++++++++++ + tests/Makefile.am | 45 +++++ + 14 files changed, 1508 insertions(+) + create mode 100644 Makefile.am + create mode 100755 autogen.sh + create mode 100644 browser-plugin/Makefile.am + create mode 100644 configure.ac + create mode 100644 data/Makefile.am + create mode 100644 docs/Makefile.am + create mode 100644 docs/reference/Makefile.am + create mode 100644 docs/reference/shell/Makefile.am + create mode 100644 docs/reference/st/Makefile.am + create mode 100644 gtk-doc.make + create mode 100644 js/Makefile.am + create mode 100644 man/Makefile.am + create mode 100644 src/Makefile.am + create mode 100644 tests/Makefile.am + +diff --git a/Makefile.am b/Makefile.am +new file mode 100644 +index 000000000..eba7d2b28 +--- /dev/null ++++ b/Makefile.am +@@ -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 +diff --git a/autogen.sh b/autogen.sh +new file mode 100755 +index 000000000..9794dc3b9 +--- /dev/null ++++ b/autogen.sh +@@ -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 +diff --git a/browser-plugin/Makefile.am b/browser-plugin/Makefile.am +new file mode 100644 +index 000000000..6ed1d6340 +--- /dev/null ++++ b/browser-plugin/Makefile.am +@@ -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\" +diff --git a/configure.ac b/configure.ac +new file mode 100644 +index 000000000..6372c4dff +--- /dev/null ++++ b/configure.ac +@@ -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=1 ++ ++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 ]], ++ [[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 ++" +diff --git a/data/Makefile.am b/data/Makefile.am +new file mode 100644 +index 000000000..8c01e49d1 +--- /dev/null ++++ b/data/Makefile.am +@@ -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) +diff --git a/docs/Makefile.am b/docs/Makefile.am +new file mode 100644 +index 000000000..f3ddc22dd +--- /dev/null ++++ b/docs/Makefile.am +@@ -0,0 +1 @@ ++SUBDIRS = reference +diff --git a/docs/reference/Makefile.am b/docs/reference/Makefile.am +new file mode 100644 +index 000000000..2721dc0e0 +--- /dev/null ++++ b/docs/reference/Makefile.am +@@ -0,0 +1 @@ ++SUBDIRS = shell st +diff --git a/docs/reference/shell/Makefile.am b/docs/reference/shell/Makefile.am +new file mode 100644 +index 000000000..715e3f26c +--- /dev/null ++++ b/docs/reference/shell/Makefile.am +@@ -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 +diff --git a/docs/reference/st/Makefile.am b/docs/reference/st/Makefile.am +new file mode 100644 +index 000000000..df2d357d5 +--- /dev/null ++++ b/docs/reference/st/Makefile.am +@@ -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 +diff --git a/gtk-doc.make b/gtk-doc.make +new file mode 100644 +index 000000000..e4a12a5b2 +--- /dev/null ++++ b/gtk-doc.make +@@ -0,0 +1,304 @@ ++# -*- mode: makefile -*- ++ ++#################################### ++# Everything below here is generic # ++#################################### ++ ++if GTK_DOC_USE_LIBTOOL ++GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) ++GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) ++GTKDOC_RUN = $(LIBTOOL) --mode=execute ++else ++GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) ++GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) ++GTKDOC_RUN = ++endif ++ ++# We set GPATH here; this gives us semantics for GNU make ++# which are more like other make's VPATH, when it comes to ++# whether a source that is a target of one rule is then ++# searched for in VPATH/GPATH. ++# ++GPATH = $(srcdir) ++ ++TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE) ++ ++SETUP_FILES = \ ++ $(content_files) \ ++ $(expand_content_files) \ ++ $(DOC_MAIN_SGML_FILE) \ ++ $(DOC_MODULE)-sections.txt \ ++ $(DOC_MODULE)-overrides.txt ++ ++EXTRA_DIST = \ ++ $(HTML_IMAGES) \ ++ $(SETUP_FILES) ++ ++DOC_STAMPS=setup-build.stamp scan-build.stamp sgml-build.stamp \ ++ html-build.stamp pdf-build.stamp \ ++ sgml.stamp html.stamp pdf.stamp ++ ++SCANOBJ_FILES = \ ++ $(DOC_MODULE).args \ ++ $(DOC_MODULE).hierarchy \ ++ $(DOC_MODULE).interfaces \ ++ $(DOC_MODULE).prerequisites \ ++ $(DOC_MODULE).signals ++ ++REPORT_FILES = \ ++ $(DOC_MODULE)-undocumented.txt \ ++ $(DOC_MODULE)-undeclared.txt \ ++ $(DOC_MODULE)-unused.txt ++ ++gtkdoc-check.test: Makefile ++ $(AM_V_GEN)echo "#!/bin/sh -e" > $@; \ ++ echo "$(GTKDOC_CHECK_PATH) || exit 1" >> $@; \ ++ chmod +x $@ ++ ++CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) gtkdoc-check.test ++ ++if GTK_DOC_BUILD_HTML ++HTML_BUILD_STAMP=html-build.stamp ++else ++HTML_BUILD_STAMP= ++endif ++if GTK_DOC_BUILD_PDF ++PDF_BUILD_STAMP=pdf-build.stamp ++else ++PDF_BUILD_STAMP= ++endif ++ ++all-gtk-doc: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) ++.PHONY: all-gtk-doc ++ ++if ENABLE_GTK_DOC ++all-local: all-gtk-doc ++endif ++ ++docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) ++ ++$(REPORT_FILES): sgml-build.stamp ++ ++#### setup #### ++ ++GTK_DOC_V_SETUP=$(GTK_DOC_V_SETUP_$(V)) ++GTK_DOC_V_SETUP_=$(GTK_DOC_V_SETUP_$(AM_DEFAULT_VERBOSITY)) ++GTK_DOC_V_SETUP_0=@echo " DOC Preparing build"; ++ ++setup-build.stamp: ++ -$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ ++ files=`echo $(SETUP_FILES) $(DOC_MODULE).types`; \ ++ if test "x$$files" != "x" ; then \ ++ for file in $$files ; do \ ++ destdir=`dirname $(abs_builddir)/$$file`; \ ++ test -d "$$destdir" || mkdir -p "$$destdir"; \ ++ test -f $(abs_srcdir)/$$file && \ ++ cp -pf $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \ ++ done; \ ++ fi; \ ++ fi ++ $(AM_V_at)touch setup-build.stamp ++ ++ ++#### scan #### ++ ++GTK_DOC_V_SCAN=$(GTK_DOC_V_SCAN_$(V)) ++GTK_DOC_V_SCAN_=$(GTK_DOC_V_SCAN_$(AM_DEFAULT_VERBOSITY)) ++GTK_DOC_V_SCAN_0=@echo " DOC Scanning header files"; ++ ++GTK_DOC_V_INTROSPECT=$(GTK_DOC_V_INTROSPECT_$(V)) ++GTK_DOC_V_INTROSPECT_=$(GTK_DOC_V_INTROSPECT_$(AM_DEFAULT_VERBOSITY)) ++GTK_DOC_V_INTROSPECT_0=@echo " DOC Introspecting gobjects"; ++ ++scan-build.stamp: setup-build.stamp $(HFILE_GLOB) $(CFILE_GLOB) ++ $(GTK_DOC_V_SCAN)_source_dir='' ; \ ++ for i in $(DOC_SOURCE_DIR) ; do \ ++ _source_dir="$${_source_dir} --source-dir=$$i" ; \ ++ done ; \ ++ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES) ++ $(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ ++ scanobj_options=""; \ ++ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ ++ if test "$$?" = "0"; then \ ++ if test "x$(V)" = "x1"; then \ ++ scanobj_options="--verbose"; \ ++ fi; \ ++ fi; \ ++ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ ++ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \ ++ else \ ++ for i in $(SCANOBJ_FILES) ; do \ ++ test -f $$i || touch $$i ; \ ++ done \ ++ fi ++ $(AM_V_at)touch scan-build.stamp ++ ++$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp ++ @true ++ ++#### xml #### ++ ++GTK_DOC_V_XML=$(GTK_DOC_V_XML_$(V)) ++GTK_DOC_V_XML_=$(GTK_DOC_V_XML_$(AM_DEFAULT_VERBOSITY)) ++GTK_DOC_V_XML_0=@echo " DOC Building XML"; ++ ++sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(HFILE_GLOB) $(CFILE_GLOB) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files) xml/gtkdocentities.ent ++ $(GTK_DOC_V_XML)_source_dir='' ; \ ++ for i in $(DOC_SOURCE_DIR) ; do \ ++ _source_dir="$${_source_dir} --source-dir=$$i" ; \ ++ done ; \ ++ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS) ++ $(AM_V_at)touch sgml-build.stamp ++ ++sgml.stamp: sgml-build.stamp ++ @true ++ ++xml/gtkdocentities.ent: Makefile ++ $(GTK_DOC_V_XML)$(MKDIR_P) $(@D) && ( \ ++ echo ""; \ ++ echo ""; \ ++ echo ""; \ ++ echo ""; \ ++ echo ""; \ ++ echo ""; \ ++ echo ""; \ ++ ) > $@ ++ ++#### html #### ++ ++GTK_DOC_V_HTML=$(GTK_DOC_V_HTML_$(V)) ++GTK_DOC_V_HTML_=$(GTK_DOC_V_HTML_$(AM_DEFAULT_VERBOSITY)) ++GTK_DOC_V_HTML_0=@echo " DOC Building HTML"; ++ ++GTK_DOC_V_XREF=$(GTK_DOC_V_XREF_$(V)) ++GTK_DOC_V_XREF_=$(GTK_DOC_V_XREF_$(AM_DEFAULT_VERBOSITY)) ++GTK_DOC_V_XREF_0=@echo " DOC Fixing cross-references"; ++ ++html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files) ++ $(GTK_DOC_V_HTML)rm -rf html && mkdir html && \ ++ mkhtml_options=""; \ ++ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ ++ if test "$$?" = "0"; then \ ++ if test "x$(V)" = "x1"; then \ ++ mkhtml_options="$$mkhtml_options --verbose"; \ ++ fi; \ ++ fi; \ ++ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ ++ if test "$$?" = "0"; then \ ++ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \ ++ fi; \ ++ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) ++ -@test "x$(HTML_IMAGES)" = "x" || \ ++ for file in $(HTML_IMAGES) ; do \ ++ if test -f $(abs_srcdir)/$$file ; then \ ++ cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ ++ fi; \ ++ if test -f $(abs_builddir)/$$file ; then \ ++ cp $(abs_builddir)/$$file $(abs_builddir)/html; \ ++ fi; \ ++ done; ++ $(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) ++ $(AM_V_at)touch html-build.stamp ++ ++#### pdf #### ++ ++GTK_DOC_V_PDF=$(GTK_DOC_V_PDF_$(V)) ++GTK_DOC_V_PDF_=$(GTK_DOC_V_PDF_$(AM_DEFAULT_VERBOSITY)) ++GTK_DOC_V_PDF_0=@echo " DOC Building PDF"; ++ ++pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files) ++ $(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \ ++ mkpdf_options=""; \ ++ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ ++ if test "$$?" = "0"; then \ ++ if test "x$(V)" = "x1"; then \ ++ mkpdf_options="$$mkpdf_options --verbose"; \ ++ fi; \ ++ fi; \ ++ if test "x$(HTML_IMAGES)" != "x"; then \ ++ for img in $(HTML_IMAGES); do \ ++ part=`dirname $$img`; \ ++ echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \ ++ if test $$? != 0; then \ ++ mkpdf_options="$$mkpdf_options --imgdir=$$part"; \ ++ fi; \ ++ done; \ ++ fi; \ ++ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS) ++ $(AM_V_at)touch pdf-build.stamp ++ ++############## ++ ++clean-local: ++ @rm -f *~ *.bak ++ @rm -rf .libs ++ @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-types" ; then \ ++ rm -f $(DOC_MODULE).types; \ ++ fi ++ @if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-sections" ; then \ ++ rm -f $(DOC_MODULE)-sections.txt; \ ++ fi ++ ++distclean-local: ++ @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ ++ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt ++ @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ ++ rm -f $(SETUP_FILES) $(DOC_MODULE).types; \ ++ fi ++ ++maintainer-clean-local: ++ @rm -rf xml html ++ ++install-data-local: ++ @installfiles=`echo $(builddir)/html/*`; \ ++ if test "$$installfiles" = '$(builddir)/html/*'; \ ++ then echo 1>&2 'Nothing to install' ; \ ++ else \ ++ if test -n "$(DOC_MODULE_VERSION)"; then \ ++ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ ++ else \ ++ installdir="$(DESTDIR)$(TARGET_DIR)"; \ ++ fi; \ ++ $(mkinstalldirs) $${installdir} ; \ ++ for i in $$installfiles; do \ ++ echo ' $(INSTALL_DATA) '$$i ; \ ++ $(INSTALL_DATA) $$i $${installdir}; \ ++ done; \ ++ if test -n "$(DOC_MODULE_VERSION)"; then \ ++ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \ ++ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \ ++ fi; \ ++ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \ ++ fi ++ ++uninstall-local: ++ @if test -n "$(DOC_MODULE_VERSION)"; then \ ++ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ ++ else \ ++ installdir="$(DESTDIR)$(TARGET_DIR)"; \ ++ fi; \ ++ rm -rf $${installdir} ++ ++# ++# Require gtk-doc when making dist ++# ++if HAVE_GTK_DOC ++dist-check-gtkdoc: docs ++else ++dist-check-gtkdoc: ++ @echo "*** gtk-doc is needed to run 'make dist'. ***" ++ @echo "*** gtk-doc was not found when 'configure' ran. ***" ++ @echo "*** please install gtk-doc and rerun 'configure'. ***" ++ @false ++endif ++ ++dist-hook: dist-check-gtkdoc all-gtk-doc dist-hook-local ++ @mkdir $(distdir)/html ++ @cp ./html/* $(distdir)/html ++ @-cp ./$(DOC_MODULE).pdf $(distdir)/ ++ @-cp ./$(DOC_MODULE).types $(distdir)/ ++ @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/ ++ @cd $(distdir) && rm -f $(DISTCLEANFILES) ++ @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html ++ ++.PHONY : dist-hook-local docs +diff --git a/js/Makefile.am b/js/Makefile.am +new file mode 100644 +index 000000000..6369c7502 +--- /dev/null ++++ b/js/Makefile.am +@@ -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) +diff --git a/man/Makefile.am b/man/Makefile.am +new file mode 100644 +index 000000000..166b66cf8 +--- /dev/null ++++ b/man/Makefile.am +@@ -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) +diff --git a/src/Makefile.am b/src/Makefile.am +new file mode 100644 +index 000000000..24628ccc9 +--- /dev/null ++++ b/src/Makefile.am +@@ -0,0 +1,349 @@ ++NULL = ++BUILT_SOURCES = ++CLEANFILES = ++EXTRA_DIST = ++bin_SCRIPTS = ++libexec_PROGRAMS = ++noinst_LTLIBRARIES = ++noinst_PROGRAMS = ++service_in_files = ++ ++-include $(INTROSPECTION_MAKEFILE) ++INTROSPECTION_GIRS = ++INTROSPECTION_SCANNER_ARGS = --warn-all --warn-error --add-include-path=$(srcdir) --add-include-path=$(MUTTER_GIR_DIR) -L$(MUTTER_TYPELIB_DIR) ++INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir) --includedir=$(MUTTER_TYPELIB_DIR) ++ ++typelibdir = $(pkglibdir) ++typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib) ++ ++servicedir = $(datadir)/dbus-1/services ++service_DATA = $(service_in_files:.service.in=.service) ++ ++%.service: %.service.in Makefile ++ $(AM_V_GEN) \ ++ [ -d $(@D) ] || $(mkdir_p) $(@D) ; \ ++ sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@.tmp && mv $@.tmp $@ ++CLEANFILES += $(service_DATA) ++ ++CLEANFILES += $(gir_DATA) $(typelib_DATA) ++ ++bin_SCRIPTS += gnome-shell-extension-tool gnome-shell-perf-tool ++EXTRA_DIST += gnome-shell-extension-tool.in gnome-shell-perf-tool.in ++bin_PROGRAMS = gnome-shell gnome-shell-extension-prefs ++ ++generated_script_substitutions = \ ++ -e "s|@bindir[@]|$(bindir)|g" \ ++ -e "s|@datadir[@]|$(datadir)|g" \ ++ -e "s|@libexecdir[@]|$(libexecdir)|g" \ ++ -e "s|@libdir[@]|$(libdir)|g" \ ++ -e "s|@pkglibdir[@]|$(pkglibdir)|g" \ ++ -e "s|@pkgdatadir[@]|$(pkgdatadir)|g" \ ++ -e "s|@PYTHON[@]|$(PYTHON)|g" \ ++ -e "s|@VERSION[@]|$(VERSION)|g" \ ++ -e "s|@sysconfdir[@]|$(sysconfdir)|g" ++ ++gnome-shell-extension-tool: gnome-shell-extension-tool.in Makefile ++ $(AM_V_GEN) sed $(generated_script_substitutions) $< > $@.tmp && mv $@.tmp $@ && chmod a+x $@ ++ ++gnome-shell-perf-tool: gnome-shell-perf-tool.in Makefile ++ $(AM_V_GEN) sed $(generated_script_substitutions) $< > $@.tmp && mv $@.tmp $@ && chmod a+x $@ ++ ++org-gtk-application.c org-gtk-application.h: org.gtk.Application.xml Makefile ++ $(AM_V_GEN) $(GDBUS_CODEGEN) \ ++ --generate-c-code org-gtk-application \ ++ --c-namespace Shell \ ++ $< ++ ++EXTRA_DIST += org.gtk.Application.xml ++CLEANFILES += gnome-shell $(bin_SCRIPTS) ++ ++include Makefile-st.am ++include Makefile-tray.am ++include Makefile-calendar-server.am ++include Makefile-hotplug-sniffer.am ++ ++gnome_shell_cflags = \ ++ $(GNOME_SHELL_CFLAGS) \ ++ -I$(srcdir)/tray \ ++ -DCLUTTER_ENABLE_EXPERIMENTAL_API \ ++ -DCOGL_ENABLE_EXPERIMENTAL_API \ ++ -DVERSION=\"$(VERSION)\" \ ++ -DLOCALEDIR=\"$(datadir)/locale\" \ ++ -DDATADIR=\"$(datadir)\" \ ++ -DGNOME_SHELL_LIBEXECDIR=\"$(libexecdir)\" \ ++ -DGNOME_SHELL_DATADIR=\"$(pkgdatadir)\" \ ++ -DGNOME_SHELL_PKGLIBDIR=\"$(pkglibdir)\" ++ ++privlibdir = $(pkglibdir) ++privlib_LTLIBRARIES = libgnome-shell-menu.la libgnome-shell.la ++ ++shell_built_sources = \ ++ org-gtk-application.h \ ++ org-gtk-application.c \ ++ shell-enum-types.h \ ++ shell-enum-types.c ++ ++BUILT_SOURCES += $(shell_built_sources) ++ ++shell_public_headers_h = \ ++ shell-app.h \ ++ shell-app-system.h \ ++ shell-app-usage.h \ ++ shell-embedded-window.h \ ++ shell-generic-container.h \ ++ shell-glsl-quad.h \ ++ shell-gtk-embed.h \ ++ shell-global.h \ ++ shell-invert-lightness-effect.h \ ++ shell-action-modes.h \ ++ shell-mount-operation.h \ ++ shell-perf-log.h \ ++ shell-screenshot.h \ ++ shell-stack.h \ ++ shell-tray-icon.h \ ++ shell-tray-manager.h \ ++ shell-util.h \ ++ shell-window-tracker.h \ ++ shell-wm.h \ ++ $(NULL) ++ ++if HAVE_NETWORKMANAGER ++shell_public_headers_h += shell-network-agent.h ++endif ++ ++libgnome_shell_menu_la_SOURCES = \ ++ gtkactionmuxer.h \ ++ gtkactionmuxer.c \ ++ gtkactionobservable.h \ ++ gtkactionobservable.c \ ++ gtkactionobserver.h \ ++ gtkactionobserver.c \ ++ gtkmenutrackeritem.c \ ++ gtkmenutrackeritem.h \ ++ gtkmenutracker.c \ ++ gtkmenutracker.h \ ++ $(NULL) ++ ++libgnome_shell_sources = \ ++ $(shell_public_headers_h) \ ++ $(shell_private_sources) \ ++ gnome-shell-plugin.c \ ++ shell-app.c \ ++ shell-app-private.h \ ++ shell-app-system.c \ ++ shell-app-system-private.h \ ++ shell-app-usage.c \ ++ shell-embedded-window-private.h \ ++ shell-embedded-window.c \ ++ shell-generic-container.c \ ++ shell-global.c \ ++ shell-global-private.h \ ++ shell-glsl-quad.c \ ++ shell-gtk-embed.c \ ++ shell-invert-lightness-effect.c \ ++ shell-keyring-prompt.h \ ++ shell-keyring-prompt.c \ ++ shell-menu-tracker.c \ ++ shell-menu-tracker.h \ ++ shell-mount-operation.c \ ++ shell-perf-log.c \ ++ shell-polkit-authentication-agent.h \ ++ shell-polkit-authentication-agent.c \ ++ shell-screenshot.c \ ++ shell-secure-text-buffer.c \ ++ shell-secure-text-buffer.h \ ++ shell-stack.c \ ++ shell-tray-icon.c \ ++ shell-tray-manager.c \ ++ shell-util.c \ ++ shell-window-tracker.c \ ++ shell-window-tracker-private.h \ ++ shell-wm.c \ ++ shell-wm-private.h \ ++ $(NULL) ++ ++if HAVE_NETWORKMANAGER ++libgnome_shell_sources += shell-network-agent.c ++endif ++ ++ ++libgnome_shell_built_sources = \ ++ $(shell_built_sources) \ ++ $(top_builddir)/js/js-resources.c \ ++ $(top_builddir)/js/js-resources.h \ ++ $(NULL) ++ ++libgnome_shell_la_SOURCES = $(libgnome_shell_sources) ++nodist_libgnome_shell_la_SOURCES = $(libgnome_shell_built_sources) ++ ++shell_no_gir_sources = \ ++ org-gtk-application.h \ ++ org-gtk-application.c ++ ++libgnome_shell_la_gir_sources = \ ++ $(filter-out %-private.h $(shell_private_sources) $(shell_no_gir_sources), $(shell_public_headers_h) $(libgnome_shell_sources) $(libgnome_shell_built_sources)) ++ ++gnome_shell_SOURCES = main.c ++gnome_shell_CPPFLAGS = \ ++ -DMUTTER_TYPELIB_DIR=\"$(MUTTER_TYPELIB_DIR)\" \ ++ $(MUTTER_CFLAGS) \ ++ $(gnome_shell_cflags) ++ ++# Here, and after, we repeat mutter and bluetooth libraries just for the rpath ++# The dependency is already pulled in by libtool ++gnome_shell_LDADD = libgnome-shell.la $(GNOME_SHELL_LIBS) $(MUTTER_LIBS) ++gnome_shell_LDFLAGS = -rpath $(MUTTER_TYPELIB_DIR) ++gnome_shell_DEPENDENCIES = libgnome-shell.la ++ ++gnome_shell_extension_prefs_SOURCES = \ ++ gnome-shell-extension-prefs.c \ ++ $(NULL) ++nodist_gnome_shell_extension_prefs_SOURCES = \ ++ $(top_builddir)/js/js-resources.c \ ++ $(top_builddir)/js/js-resources.h \ ++ $(NULL) ++gnome_shell_extension_prefs_CPPFLAGS = $(gnome_shell_cflags) ++gnome_shell_extension_prefs_LDADD = $(GNOME_SHELL_LIBS) ++gnome_shell_extension_prefs_LDFLAGS = -rpath $(MUTTER_TYPELIB_DIR) ++ ++if HAVE_NETWORKMANAGER ++ ++libexec_PROGRAMS += gnome-shell-portal-helper ++gnome_shell_portal_helper_SOURCES = \ ++ gnome-shell-portal-helper.c \ ++ $(NULL) ++nodist_gnome_shell_portal_helper_SOURCES = \ ++ $(top_builddir)/js/js-resources.c \ ++ $(top_builddir)/js/js-resources.h \ ++ $(NULL) ++gnome_shell_portal_helper_CPPFLAGS = $(gnome_shell_cflags) ++gnome_shell_portal_helper_LDADD = $(GNOME_SHELL_LIBS) ++gnome_shell_portal_helper_LDFLAGS = -rpath $(MUTTER_TYPELIB_DIR) ++ ++endif ++ ++######################################## ++ ++shell_recorder_sources = \ ++ shell-recorder.c \ ++ shell-recorder.h ++ ++# Custom element is an internal detail ++ ++if BUILD_RECORDER ++libgnome_shell_sources += $(shell_recorder_sources) ++ ++shell_recorder_private_sources = \ ++ shell-recorder-src.c \ ++ shell-recorder-src.h \ ++ $(NULL) ++ ++shell_private_sources = $(shell_recorder_private_sources) ++ ++endif BUILD_RECORDER ++ ++######################################## ++ ++libexec_PROGRAMS += gnome-shell-perf-helper ++ ++gnome_shell_perf_helper_SOURCES = shell-perf-helper.c ++gnome_shell_perf_helper_CPPFLAGS = $(SHELL_PERF_HELPER_CFLAGS) ++gnome_shell_perf_helper_LDADD = $(SHELL_PERF_HELPER_LIBS) -lm ++ ++######################################## ++ ++noinst_PROGRAMS += run-js-test ++ ++run_js_test_CPPFLAGS = $(MUTTER_CFLAGS) $(gnome_shell_cflags) ++run_js_test_LDADD = libgnome-shell.la $(GNOME_SHELL_JS_LIBS) $(MUTTER_LIBS) ++run_js_test_LDFLAGS = -export-dynamic -rpath $(MUTTER_TYPELIB_DIR) ++ ++run_js_test_SOURCES = \ ++ run-js-test.c ++ ++######################################## ++ ++shell-enum-types.h: stamp-shell-enum-types.h Makefile ++ @true ++stamp-shell-enum-types.h: $(srcdir)/shell-enum-types.h.in $(shell_public_headers_h) ++ $(AM_V_GEN) ( \ ++ $(GLIB_MKENUMS) \ ++ --template $< \ ++ $(addprefix $(srcdir)/,$(shell_public_headers_h)) ) > $(@F).tmp && \ ++ (cmp -s $(@F).tmp shell-enum-types.h || mv $(@F).tmp shell-enum-types.h) && \ ++ rm -f $(@F).tmp && \ ++ echo timestamp > $(@F) ++EXTRA_DIST += shell-enum-types.h.in ++CLEANFILES += stamp-shell-enum-types.h ++ ++shell-enum-types.c: $(srcdir)/shell-enum-types.c.in stamp-shell-enum-types.h ++ $(AM_V_GEN) ( \ ++ $(GLIB_MKENUMS) \ ++ --template $< \ ++ $(addprefix $(srcdir)/,$(shell_public_headers_h)) ) > $(@F).tmp && \ ++ mv $(@F).tmp $(@F) && \ ++ rm -f $(@F).tmp ++EXTRA_DIST += shell-enum-types.c.in ++ ++gvcdir = $(top_builddir)/subprojects/gvc ++ ++libgnome_shell_ldflags = -avoid-version ++libgnome_shell_libadd = \ ++ -lm \ ++ $(GNOME_SHELL_LIBS) \ ++ libgnome-shell-menu.la \ ++ libst-1.0.la \ ++ libtray.la \ ++ $(gvcdir)/libgvc.la \ ++ $(NULL) ++ ++libgnome_shell_menu_la_LDFLAGS = $(libgnome_shell_ldflags) ++libgnome_shell_menu_la_LIBADD = $(GNOME_SHELL_LIBS) ++libgnome_shell_menu_la_CPPFLAGS = $(GNOME_SHELL_CFLAGS) ++ ++libgnome_shell_la_LDFLAGS = $(libgnome_shell_ldflags) ++libgnome_shell_la_LIBADD = $(GNOME_SHELL_LIBS) $(MUTTER_LIBS) $(libgnome_shell_libadd) ++libgnome_shell_la_CPPFLAGS = $(MUTTER_CFLAGS) $(gnome_shell_cflags) ++ ++ShellMenu-0.1.gir: libgnome-shell-menu.la ++ShellMenu_0_1_gir_INCLUDES = Gio-2.0 ++ShellMenu_0_1_gir_CFLAGS = $(libgnome_shell_menu_la_CPPFLAGS) -I $(srcdir) ++ShellMenu_0_1_gir_LIBS = libgnome-shell-menu.la ++ShellMenu_0_1_gir_FILES = \ ++ gtkactionmuxer.h \ ++ gtkactionmuxer.c \ ++ gtkactionobservable.h \ ++ gtkactionobservable.c \ ++ gtkactionobserver.h \ ++ gtkactionobserver.c \ ++ gtkmenutrackeritem.c \ ++ gtkmenutrackeritem.h \ ++ $(NULL) ++ShellMenu_0_1_gir_SCANNERFLAGS = \ ++ --namespace=ShellMenu --identifier-prefix=Gtk ++INTROSPECTION_GIRS += ShellMenu-0.1.gir ++CLEANFILES += ShellMenu-0.1.gir ++ ++Shell-0.1.gir: gnome-shell St-1.0.gir ShellMenu-0.1.gir ++Shell_0_1_gir_INCLUDES = Clutter-$(LIBMUTTER_API_VERSION) ClutterX11-$(LIBMUTTER_API_VERSION) Meta-$(LIBMUTTER_API_VERSION) Soup-2.4 ++if HAVE_NETWORKMANAGER ++Shell_0_1_gir_INCLUDES += NetworkManager-1.0 NMClient-1.0 ++endif ++Shell_0_1_gir_CFLAGS = $(libgnome_shell_la_CPPFLAGS) -I $(srcdir) ++Shell_0_1_gir_LIBS = libgnome-shell.la ++Shell_0_1_gir_FILES = $(libgnome_shell_la_gir_sources) ++Shell_0_1_gir_SCANNERFLAGS = \ ++ --include-uninstalled=$(builddir)/St-1.0.gir \ ++ --include-uninstalled=$(builddir)/ShellMenu-0.1.gir \ ++ --add-include-path=$(MUTTER_GIR_DIR) ++INTROSPECTION_GIRS += Shell-0.1.gir ++CLEANFILES += Shell-0.1.gir ++ ++St-1.0.gir: libst-1.0.la ++St_1_0_gir_INCLUDES = Clutter-$(LIBMUTTER_API_VERSION) Gtk-3.0 ++St_1_0_gir_CFLAGS = $(st_cflags) -DST_COMPILATION ++St_1_0_gir_LIBS = libst-1.0.la ++St_1_0_gir_FILES = $(filter-out %-private.h $(st_non_gir_sources), $(addprefix $(srcdir)/,$(st_source_h))) \ ++ $(addprefix $(srcdir)/,$(st_source_c)) ++INTROSPECTION_GIRS += St-1.0.gir ++CLEANFILES += St-1.0.gir +diff --git a/tests/Makefile.am b/tests/Makefile.am +new file mode 100644 +index 000000000..22ef81d30 +--- /dev/null ++++ b/tests/Makefile.am +@@ -0,0 +1,45 @@ ++noinst_SCRIPTS = run-test.sh ++EXTRA_DIST = run-test.sh.in ++ ++TEST_JS = \ ++ interactive/background-repeat.js \ ++ interactive/background-size.js \ ++ interactive/borders.js \ ++ interactive/border-radius.js \ ++ interactive/border-width.js \ ++ interactive/box-layout.js \ ++ interactive/box-shadow-animated.js \ ++ interactive/box-shadows.js \ ++ interactive/calendar.js \ ++ interactive/css-fonts.js \ ++ interactive/entry.js \ ++ interactive/gapplication.js \ ++ interactive/icons.js \ ++ interactive/inline-style.js \ ++ interactive/scrolling.js \ ++ interactive/scroll-view-sizing.js \ ++ interactive/test-title.js \ ++ interactive/transitions.js \ ++ testcommon/100-200.svg \ ++ testcommon/200-100.svg \ ++ testcommon/200-200.svg \ ++ testcommon/border-image.png \ ++ testcommon/face-plain.png \ ++ testcommon/ui.js \ ++ unit/insertSorted.js \ ++ unit/markup.js \ ++ unit/jsParse.js \ ++ unit/url.js ++EXTRA_DIST += $(TEST_JS) ++ ++TEST_MISC = \ ++ testcommon/test.css ++EXTRA_DIST += $(TEST_MISC) ++ ++run-test.sh: run-test.sh.in ++ $(AM_V_GEN) sed \ ++ -e "s|@MUTTER_TYPELIB_DIR[@]|$(MUTTER_TYPELIB_DIR)|" \ ++ -e "s|@srcdir[@]|$(srcdir)|" \ ++ $< > $@ && chmod a+x $@ ++ ++CLEANFILES = run-test.sh +-- +2.13.5 + diff --git a/SOURCES/0001-app-Fall-back-to-window-title-instead-of-WM_CLASS.patch b/SOURCES/0001-app-Fall-back-to-window-title-instead-of-WM_CLASS.patch index c182978..9b1d19d 100644 --- a/SOURCES/0001-app-Fall-back-to-window-title-instead-of-WM_CLASS.patch +++ b/SOURCES/0001-app-Fall-back-to-window-title-instead-of-WM_CLASS.patch @@ -1,4 +1,4 @@ -From 1c4f08191702f6a06e46bc2a3f6dea2d96c851e7 Mon Sep 17 00:00:00 2001 +From 4104864c0e6e9e39e09353d86a67668109abe272 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 20 May 2015 16:44:00 +0200 Subject: [PATCH] app: Fall back to window title instead of WM_CLASS @@ -11,7 +11,7 @@ a .desktop file ... 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shell-app.c b/src/shell-app.c -index 7f61dc369..ab30abf11 100644 +index dbf537ce9..84fcc97bf 100644 --- a/src/shell-app.c +++ b/src/shell-app.c @@ -265,7 +265,7 @@ shell_app_get_name (ShellApp *app) @@ -24,5 +24,5 @@ index 7f61dc369..ab30abf11 100644 name = C_("program", "Unknown"); return name; -- -2.12.0 +2.14.2 diff --git a/SOURCES/0001-authPrompt-allow-empty-response-to-PAM-messages.patch b/SOURCES/0001-authPrompt-allow-empty-response-to-PAM-messages.patch deleted file mode 100644 index e589a81..0000000 --- a/SOURCES/0001-authPrompt-allow-empty-response-to-PAM-messages.patch +++ /dev/null @@ -1,147 +0,0 @@ -From 497fa4820897bf6579cfc11b33b383a36faca408 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Wed, 14 Jun 2017 10:05:36 -0400 -Subject: [PATCH] authPrompt: allow empty response to PAM messages - -Some PAM modules say "Press enter to continue" or -whatever. We need to support them. - -This commit allows empty responses to PAM questions, -but still requires a non-empty response for username. ---- - js/gdm/authPrompt.js | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js -index ae03a5b49..a18615059 100644 ---- a/js/gdm/authPrompt.js -+++ b/js/gdm/authPrompt.js -@@ -213,61 +213,61 @@ const AuthPrompt = new Lang.Class({ - this._buttonBox.add(this._defaultButtonWell, - { expand: true, - x_fill: false, - y_fill: false, - x_align: St.Align.END, - y_align: St.Align.MIDDLE }); - this.nextButton = new St.Button({ style_class: 'modal-dialog-button button', - button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE, - reactive: true, - can_focus: true, - label: _("Next") }); - this.nextButton.connect('clicked', - Lang.bind(this, function() { - this.emit('next'); - })); - this.nextButton.add_style_pseudo_class('default'); - this._buttonBox.add(this.nextButton, - { expand: false, - x_fill: false, - y_fill: false, - x_align: St.Align.END, - y_align: St.Align.END }); - - this._updateNextButtonSensitivity(this._entry.text.length > 0); - - this._entry.clutter_text.connect('text-changed', - Lang.bind(this, function() { - if (!this._userVerifier.hasPendingMessages && this._queryingService && !this._preemptiveAnswer) - this._fadeOutMessage(); - -- this._updateNextButtonSensitivity(this._entry.text.length > 0); -+ this._updateNextButtonSensitivity(this._entry.text.length > 0 || this.verificationStatus == AuthPromptStatus.VERIFYING); - })); - this._entry.clutter_text.connect('activate', Lang.bind(this, function() { - if (this.nextButton.reactive) - this.emit('next'); - })); - }, - - _onAskQuestion: function(verifier, serviceName, question, passwordChar) { - if (this._queryingService) - this.clear(); - - this._queryingService = serviceName; - if (this._preemptiveAnswer) { - this._userVerifier.answerQuery(this._queryingService, this._preemptiveAnswer); - this._preemptiveAnswer = null; - return; - } - this.setPasswordChar(passwordChar); - this.setQuestion(question); - - if (passwordChar) { - if (this._userVerifier.reauthenticating) - this.nextButton.label = _("Unlock"); - else - this.nextButton.label = C_("button", "Sign In"); - } else { - this.nextButton.label = _("Next"); - } - - this.updateSensitivity(true); -@@ -446,61 +446,61 @@ const AuthPrompt = new Lang.Class({ - transition: 'easeOutQuad' - }); - }, - - setMessage: function(message, type) { - if (type == GdmUtil.MessageType.ERROR) - this._message.add_style_class_name('login-dialog-message-warning'); - else - this._message.remove_style_class_name('login-dialog-message-warning'); - - if (type == GdmUtil.MessageType.HINT) - this._message.add_style_class_name('login-dialog-message-hint'); - else - this._message.remove_style_class_name('login-dialog-message-hint'); - - if (message) { - Tweener.removeTweens(this._message); - this._message.text = message; - this._message.opacity = 255; - } else { - this._message.opacity = 0; - } - }, - - _updateNextButtonSensitivity: function(sensitive) { - this.nextButton.reactive = sensitive; - this.nextButton.can_focus = sensitive; - }, - - updateSensitivity: function(sensitive) { -- this._updateNextButtonSensitivity(sensitive && this._entry.text.length > 0); -+ this._updateNextButtonSensitivity(sensitive && (this._entry.text.length > 0 || this.verificationStatus == AuthPromptStatus.VERIFYING)); - this._entry.reactive = sensitive; - this._entry.clutter_text.editable = sensitive; - }, - - hide: function() { - this.setActorInDefaultButtonWell(null, true); - this.actor.hide(); - this._message.opacity = 0; - - this.setUser(null); - - this.updateSensitivity(true); - this._entry.set_text(''); - }, - - setUser: function(user) { - let oldChild = this._userWell.get_child(); - if (oldChild) - oldChild.destroy(); - - if (user) { - let userWidget = new UserWidget.UserWidget(user); - this._userWell.set_child(userWidget.actor); - } - }, - - _onUserStoppedTypePreemptiveAnswer: function() { - if (!this._preemptiveAnswerWatchId || - this._preemptiveAnswer || - this._queryingService) --- -2.13.0 - diff --git a/SOURCES/0001-calendar-server-Remove-unused-variables-and-function.patch b/SOURCES/0001-calendar-server-Remove-unused-variables-and-function.patch deleted file mode 100644 index 52c3444..0000000 --- a/SOURCES/0001-calendar-server-Remove-unused-variables-and-function.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 56cfd8d36bdf98af82a302d811e9b01caaff2679 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Florian=20M=C3=BCllner?= -Date: Tue, 21 Mar 2017 22:01:43 +0100 -Subject: [PATCH] calendar-server: Remove unused variables and function - -The code that used them was removed in commit 7e0e224e0eb8. ---- - src/calendar-server/gnome-shell-calendar-server.c | 16 ---------------- - 1 file changed, 16 deletions(-) - -diff --git a/src/calendar-server/gnome-shell-calendar-server.c b/src/calendar-server/gnome-shell-calendar-server.c -index 57bc71bb8..b607b7331 100644 ---- a/src/calendar-server/gnome-shell-calendar-server.c -+++ b/src/calendar-server/gnome-shell-calendar-server.c -@@ -387,21 +387,6 @@ calendar_appointment_init (CalendarAppointment *appointment, - default_zone); - } - --static icaltimezone * --resolve_timezone_id (const char *tzid, -- ECalClient *source) --{ -- icaltimezone *retval; -- -- retval = icaltimezone_get_builtin_timezone_from_tzid (tzid); -- if (!retval) -- { -- e_cal_client_get_timezone_sync (source, tzid, &retval, NULL, NULL); -- } -- -- return retval; --} -- - static CalendarAppointment * - calendar_appointment_new (icalcomponent *ical, - ECalClient *cal) -@@ -624,7 +609,6 @@ app_load_events (App *app) - { - ECalClient *cal = E_CAL_CLIENT (l->data); - GError *error; -- GSList *objects, *j; - ECalClientView *view; - CollectAppointmentsData data; - --- -2.12.0 - diff --git a/SOURCES/0001-data-install-process-working.svg-to-filesystem.patch b/SOURCES/0001-data-install-process-working.svg-to-filesystem.patch index d9e9a12..d679b3a 100644 --- a/SOURCES/0001-data-install-process-working.svg-to-filesystem.patch +++ b/SOURCES/0001-data-install-process-working.svg-to-filesystem.patch @@ -1,4 +1,4 @@ -From 62377987c188fd48967c0956c36f36d8f77b0a24 Mon Sep 17 00:00:00 2001 +From fa1ec00431d9c0b1592e1b7c56784ef8d8c26a98 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Thu, 8 Jun 2017 12:04:31 -0400 Subject: [PATCH] data: install process-working.svg to filesystem @@ -10,38 +10,11 @@ This helps prevent unlock failure on inplace upgrades between 1 file changed, 3 insertions(+) diff --git a/data/Makefile.am b/data/Makefile.am -index 2eee47903..e2b806d61 100644 +index 8c01e49d1..f9c198c1c 100644 --- a/data/Makefile.am +++ b/data/Makefile.am -@@ -45,60 +45,63 @@ introspection_DATA = \ - $(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/Gemfile \ - 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/parse-sass.sh \ - $(NULL) - - %.css: %.scss $(theme_sources) - @if test -n "$(SASS)"; then \ - if $(AM_V_P); then PS4= set -x; else echo " GEN $@"; fi; \ - $(SASS) --sourcemap=none -f -q --update $<; \ +@@ -73,6 +73,9 @@ dist_theme_files = \ + $(SASSC) -a $< $@; \ fi +themedir = $(pkgdatadir)/theme @@ -50,33 +23,6 @@ index 2eee47903..e2b806d61 100644 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 -- -2.13.0 +2.14.2 diff --git a/SOURCES/0001-extensionSystem-Notify-about-extension-issues-on-upd.patch b/SOURCES/0001-extensionSystem-Notify-about-extension-issues-on-upd.patch index 45b3ef1..43c074a 100644 --- a/SOURCES/0001-extensionSystem-Notify-about-extension-issues-on-upd.patch +++ b/SOURCES/0001-extensionSystem-Notify-about-extension-issues-on-upd.patch @@ -1,4 +1,4 @@ -From 8a2efe0e5c239a18ad38bba966d73c992eed9dc7 Mon Sep 17 00:00:00 2001 +From b3132648a9a15b9c151bde6733cb0c252dac6a25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Mon, 21 Sep 2015 20:18:12 +0200 Subject: [PATCH] extensionSystem: Notify about extension issues on update @@ -8,7 +8,7 @@ Subject: [PATCH] extensionSystem: Notify about extension issues on update 1 file changed, 32 insertions(+) diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js -index 810fa1577..fe0d8117f 100644 +index c2a11b8a5..5e78618c4 100644 --- a/js/ui/extensionSystem.js +++ b/js/ui/extensionSystem.js @@ -7,6 +7,7 @@ const GLib = imports.gi.GLib; @@ -19,7 +19,7 @@ index 810fa1577..fe0d8117f 100644 const ExtensionUtils = imports.misc.extensionUtils; const Main = imports.ui.main; -@@ -286,6 +287,36 @@ function _onVersionValidationChanged() { +@@ -306,6 +307,36 @@ function _onVersionValidationChanged() { } } @@ -34,7 +34,7 @@ index 810fa1577..fe0d8117f 100644 + if (updateStamp.query_exists(null)) + return; + -+ GLib.mkdir_with_parents (pkgCacheDir, 0755); ++ GLib.mkdir_with_parents (pkgCacheDir, 0o755); + updateStamp.create(0, null).close(null); + + let nOutdated = enabledExtensions.reduce(function(n, uuid) { @@ -55,8 +55,8 @@ index 810fa1577..fe0d8117f 100644 + function _loadExtensions() { global.settings.connect('changed::' + ENABLED_EXTENSIONS_KEY, onEnabledExtensionsChanged); - global.settings.connect('changed::' + EXTENSION_DISABLE_VERSION_CHECK_KEY, _onVersionValidationChanged); -@@ -299,6 +330,7 @@ function _loadExtensions() { + global.settings.connect('changed::' + DISABLE_USER_EXTENSIONS_KEY, onEnabledExtensionsChanged); +@@ -320,6 +351,7 @@ function _loadExtensions() { extension.type = ExtensionUtils.ExtensionType.SESSION_MODE; }); finder.scanExtensions(); @@ -65,5 +65,5 @@ index 810fa1577..fe0d8117f 100644 function enableAllExtensions() { -- -2.12.0 +2.14.2 diff --git a/SOURCES/0001-extensions-Add-a-SESSION_MODE-extension-type.patch b/SOURCES/0001-extensions-Add-a-SESSION_MODE-extension-type.patch index e261ddf..2aeccd0 100644 --- a/SOURCES/0001-extensions-Add-a-SESSION_MODE-extension-type.patch +++ b/SOURCES/0001-extensions-Add-a-SESSION_MODE-extension-type.patch @@ -1,4 +1,4 @@ -From b888500bb59bbf64ad3c10033e48227396d44cd8 Mon Sep 17 00:00:00 2001 +From 446b7a65536ea60b75f1ec705cd8fa287fda968e Mon Sep 17 00:00:00 2001 From: Rui Matos Date: Fri, 8 Nov 2013 13:58:09 +0100 Subject: [PATCH] extensions: Add a SESSION_MODE extension type @@ -11,12 +11,12 @@ different way since they can't be disabled. 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/js/misc/extensionUtils.js b/js/misc/extensionUtils.js -index 1d1221c35..9d7e4496e 100644 +index ca02582c9..3eea38565 100644 --- a/js/misc/extensionUtils.js +++ b/js/misc/extensionUtils.js -@@ -15,7 +15,8 @@ const FileUtils = imports.misc.fileUtils; +@@ -13,7 +13,8 @@ const FileUtils = imports.misc.fileUtils; - const ExtensionType = { + var ExtensionType = { SYSTEM: 1, - PER_USER: 2 + PER_USER: 2, @@ -25,10 +25,10 @@ index 1d1221c35..9d7e4496e 100644 // Maps uuid -> metadata object diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js -index ba332220b..810fa1577 100644 +index 51ce234c2..c2a11b8a5 100644 --- a/js/ui/extensionSystem.js +++ b/js/ui/extensionSystem.js -@@ -295,6 +295,8 @@ function _loadExtensions() { +@@ -316,6 +316,8 @@ function _loadExtensions() { let finder = new ExtensionUtils.ExtensionFinder(); finder.connect('extension-found', function(finder, extension) { loadExtension(extension); @@ -38,5 +38,5 @@ index ba332220b..810fa1577 100644 finder.scanExtensions(); } -- -2.12.0 +2.14.2 diff --git a/SOURCES/0001-gdm-Handle-absence-of-Fprint.Manager-service.patch b/SOURCES/0001-gdm-Handle-absence-of-Fprint.Manager-service.patch deleted file mode 100644 index e4518d2..0000000 --- a/SOURCES/0001-gdm-Handle-absence-of-Fprint.Manager-service.patch +++ /dev/null @@ -1,60 +0,0 @@ -From daa05f09d2a79d160c5e355cf26e4c73d7b0f01b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Florian=20M=C3=BCllner?= -Date: Tue, 14 Mar 2017 21:02:51 +0100 -Subject: [PATCH] gdm: Handle absence of Fprint.Manager service - -We rely on the service to detect whether a fingerprint reader is -present. It is fine to not support fingerprint authentication -when the service is missing, but currently we don't handle this -case at all and end up with a non-functional login screen. - -https://bugzilla.gnome.org/show_bug.cgi?id=780063 ---- - js/gdm/fingerprint.js | 8 +++++++- - js/gdm/util.js | 5 +++-- - 2 files changed, 10 insertions(+), 3 deletions(-) - -diff --git a/js/gdm/fingerprint.js b/js/gdm/fingerprint.js -index bce0bc6a7..2aeb377ce 100644 ---- a/js/gdm/fingerprint.js -+++ b/js/gdm/fingerprint.js -@@ -23,6 +23,12 @@ function FprintManager() { - g_object_path: '/net/reactivated/Fprint/Manager', - g_flags: (Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES) }); - -- self.init(null); -+ try { -+ self.init(null); -+ } catch(e) { -+ log('Failed to connect to Fprint service: ' + e.message); -+ return null; -+ } -+ - return self; - } -diff --git a/js/gdm/util.js b/js/gdm/util.js -index 9517150f0..0048c85bd 100644 ---- a/js/gdm/util.js -+++ b/js/gdm/util.js -@@ -132,7 +132,7 @@ const ShellUserVerifier = new Lang.Class({ - this._settings.connect('changed', - Lang.bind(this, this._updateDefaultService)); - -- this._fprintManager = new Fprint.FprintManager(); -+ this._fprintManager = Fprint.FprintManager(); - this._smartcardManager = SmartcardManager.getSmartcardManager(); - - // We check for smartcards right away, since an inserted smartcard -@@ -294,7 +294,8 @@ const ShellUserVerifier = new Lang.Class({ - _checkForFingerprintReader: function() { - this._haveFingerprintReader = false; - -- if (!this._settings.get_boolean(FINGERPRINT_AUTHENTICATION_KEY)) { -+ if (!this._settings.get_boolean(FINGERPRINT_AUTHENTICATION_KEY) || -+ this._fprintManager == null) { - this._updateDefaultService(); - return; - } --- -2.12.0 - diff --git a/SOURCES/0001-gdm-add-AuthList-control.patch b/SOURCES/0001-gdm-add-AuthList-control.patch new file mode 100644 index 0000000..44e3586 --- /dev/null +++ b/SOURCES/0001-gdm-add-AuthList-control.patch @@ -0,0 +1,240 @@ +From 356171d85579d27da3180fd78ffb353f23c9073f Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Tue, 18 Jul 2017 12:58:14 -0400 +Subject: [PATCH 1/2] gdm: add AuthList control + +Ultimately, we want to add support for GDM's new ChoiceList +PAM extension. That extension allows PAM modules to present +a list of choices to the user. Before we can support that +extension, however, we need to have a list control in the +login-screen/unlock screen. This commit adds that control. + +For the most part, it's a copy-and-paste of the gdm userlist, +but with less features. It lacks API specific to the users, +lacks the built in timed login indicator, etc. It does feature +a label heading. +--- + js/gdm/authList.js | 198 ++++++++++++++++++++++++++++++++++++++++++ + js/js-resources.gresource.xml | 1 + + 2 files changed, 199 insertions(+) + create mode 100644 js/gdm/authList.js + +diff --git a/js/gdm/authList.js b/js/gdm/authList.js +new file mode 100644 +index 000000000..893e35075 +--- /dev/null ++++ b/js/gdm/authList.js +@@ -0,0 +1,198 @@ ++// -*- 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 . ++ */ ++ ++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.BoxLayout({ vertical: true, ++ style_class: 'login-dialog-auth-list-layout' }); ++ ++ this.label = new St.Label({ style_class: 'prompt-dialog-headline' }); ++ this.actor.add_actor(this.label); ++ ++ this._scrollView = new St.ScrollView({ style_class: 'login-dialog-user-list-view'}); ++ this._scrollView.set_policy(Gtk.PolicyType.NEVER, ++ Gtk.PolicyType.AUTOMATIC); ++ this.actor.add_actor(this._scrollView); ++ ++ this._box = new St.BoxLayout({ vertical: true, ++ style_class: 'login-dialog-user-list', ++ pseudo_class: 'expanded' }); ++ ++ this._scrollView.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._scrollView.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._scrollView.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.label.text = ""; ++ this._box.destroy_all_children(); ++ this._items = {}; ++ } ++}); ++Signals.addSignalMethods(AuthList.prototype); +diff --git a/js/js-resources.gresource.xml b/js/js-resources.gresource.xml +index 7a5c8ca6f..c0a80f564 100644 +--- a/js/js-resources.gresource.xml ++++ b/js/js-resources.gresource.xml +@@ -1,6 +1,7 @@ + + + ++ gdm/authList.js + gdm/authPrompt.js + gdm/batch.js + gdm/fingerprint.js +-- +2.14.2 + diff --git a/SOURCES/0001-gdm-honor-timed-login-delay-even-if-animations-disab.patch b/SOURCES/0001-gdm-honor-timed-login-delay-even-if-animations-disab.patch index a0556f7..96c9a7f 100644 --- a/SOURCES/0001-gdm-honor-timed-login-delay-even-if-animations-disab.patch +++ b/SOURCES/0001-gdm-honor-timed-login-delay-even-if-animations-disab.patch @@ -1,4 +1,4 @@ -From 03f5d81342e096ab331308c99ac4b1c15dd5a448 Mon Sep 17 00:00:00 2001 +From 7f2d3668cf8c7a6b8aaab2c52f7e67ab01e5ba4d Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Tue, 18 Aug 2015 12:02:17 -0400 Subject: [PATCH] gdm: honor timed login delay even if animations disabled @@ -18,10 +18,10 @@ animation from a main loop timeout, instead of using the tweener api. 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js -index 0b6c0b50a..45eca18f7 100644 +index 1cae3db85..c1262b1e8 100644 --- a/js/gdm/loginDialog.js +++ b/js/gdm/loginDialog.js -@@ -107,20 +107,34 @@ const UserListItem = new Lang.Class({ +@@ -126,20 +126,34 @@ var UserListItem = new Lang.Class({ let hold = new Batch.Hold(); this.hideTimedLoginIndicator(); @@ -67,5 +67,5 @@ index 0b6c0b50a..45eca18f7 100644 } }); -- -2.12.0 +2.14.2 diff --git a/SOURCES/0001-gdm-use-password-authentication-if-all-schemes-are-d.patch b/SOURCES/0001-gdm-use-password-authentication-if-all-schemes-are-d.patch index c6edacd..1d0d2f4 100644 --- a/SOURCES/0001-gdm-use-password-authentication-if-all-schemes-are-d.patch +++ b/SOURCES/0001-gdm-use-password-authentication-if-all-schemes-are-d.patch @@ -1,4 +1,4 @@ -From 2af504d2aac532fa7e7e3a628198b337440e3d34 Mon Sep 17 00:00:00 2001 +From 345ddfb8456eb3fe8e32ab55d4d3a746d15ae4e0 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 1 Jul 2015 11:18:44 -0400 Subject: [PATCH] gdm: use password authentication if all schemes are disabled @@ -9,10 +9,10 @@ This prevents a traceback, at least. 1 file changed, 5 insertions(+) diff --git a/js/gdm/util.js b/js/gdm/util.js -index 2ff59cb75..1aa52a17f 100644 +index b594da4fd..bae46bfe0 100644 --- a/js/gdm/util.js +++ b/js/gdm/util.js -@@ -414,6 +414,11 @@ const ShellUserVerifier = new Lang.Class({ +@@ -419,6 +419,11 @@ var ShellUserVerifier = new Lang.Class({ this._defaultService = SMARTCARD_SERVICE_NAME; else if (this._haveFingerprintReader) this._defaultService = FINGERPRINT_SERVICE_NAME; @@ -25,5 +25,5 @@ index 2ff59cb75..1aa52a17f 100644 _startService: function(serviceName) { -- -2.12.0 +2.14.2 diff --git a/SOURCES/0001-gdmUtil-Fix-auth-prompt-drawing-over-user-list.patch b/SOURCES/0001-gdmUtil-Fix-auth-prompt-drawing-over-user-list.patch deleted file mode 100644 index e5c5085..0000000 --- a/SOURCES/0001-gdmUtil-Fix-auth-prompt-drawing-over-user-list.patch +++ /dev/null @@ -1,84 +0,0 @@ -From cf6f7eb276edd4ae9b497e54167ea10f7d804f21 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Wed, 7 Jun 2017 15:00:11 -0400 -Subject: [PATCH] gdmUtil: Fix auth prompt drawing over user list - -If the user fails to enter their password then hits escape, we -jump back to the user list, then ask again for a password in a -garbled screen. this commit fixes that by skipping a retry if -the operation is cancelled. ---- - js/gdm/util.js | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/js/gdm/util.js b/js/gdm/util.js -index 6876cbef9..03fd344ef 100644 ---- a/js/gdm/util.js -+++ b/js/gdm/util.js -@@ -513,61 +513,62 @@ const ShellUserVerifier = new Lang.Class({ - _onVerificationComplete: function() { - this.emit('verification-complete'); - }, - - _cancelAndReset: function() { - this.cancel(); - this._onReset(); - }, - - _retry: function() { - this.begin(this._userName, new Batch.Hold()); - }, - - _verificationFailed: function(retry) { - // For Not Listed / enterprise logins, immediately reset - // the dialog - // Otherwise, we allow ALLOWED_FAILURES attempts. After that, we - // go back to the welcome screen. - - this._failCounter++; - let canRetry = retry && this._userName && - this._failCounter < this._settings.get_int(ALLOWED_FAILURES_KEY); - - if (canRetry) { - if (!this.hasPendingMessages) { - this._retry(); - } else { - let signalId = this.connect('no-more-messages', - Lang.bind(this, function() { - this.disconnect(signalId); -- this._retry(); -+ if (this._cancellable && !this._cancellable.is_cancelled()) -+ this._retry(); - })); - } - } else { - if (!this.hasPendingMessages) { - this._cancelAndReset(); - } else { - let signalId = this.connect('no-more-messages', - Lang.bind(this, function() { - this.disconnect(signalId); - this._cancelAndReset(); - })); - } - } - - this.emit('verification-failed'); - }, - - _onConversationStopped: function(client, serviceName) { - // If the login failed with the preauthenticated oVirt credentials - // then discard the credentials and revert to default authentication - // mechanism. - if (this.serviceIsForeground(OVIRT_SERVICE_NAME)) { - this._oVirtCredentialsManager.resetToken(); - this._preemptingService = null; - this._verificationFailed(false); - return; - } - - // if the password service fails, then cancel everything. - // But if, e.g., fingerprint fails, still give --- -2.13.0 - diff --git a/SOURCES/0001-global-Allow-overriding-the-override-schema.patch b/SOURCES/0001-global-Allow-overriding-the-override-schema.patch new file mode 100644 index 0000000..0889d0e --- /dev/null +++ b/SOURCES/0001-global-Allow-overriding-the-override-schema.patch @@ -0,0 +1,115 @@ +From c2a8239044f350a6548e0e8314b4f40b49a726b2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 11 Oct 2017 00:36:18 +0200 +Subject: [PATCH] global: Allow overriding the override schema + +--- + src/main.c | 11 ++++++++++- + src/shell-global.c | 20 +++++++++++++++++++- + 2 files changed, 29 insertions(+), 2 deletions(-) + +diff --git a/src/main.c b/src/main.c +index 9a89aa4d6..085399b68 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -39,6 +39,7 @@ extern GType gnome_shell_plugin_get_type (void); + static gboolean is_gdm_mode = FALSE; + static char *session_mode = NULL; + static int caught_signal = 0; ++static char *override_schema = NULL; + + #define DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER 1 + #define DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER 4 +@@ -455,6 +456,12 @@ GOptionEntry gnome_shell_options[] = { + N_("List possible modes"), + NULL + }, ++ { ++ "override-schema", 0, 0, G_OPTION_ARG_STRING, ++ &override_schema, ++ N_("Override the override schema"), ++ "SCHEMA" ++ }, + { NULL } + }; + +@@ -512,7 +519,9 @@ main (int argc, char **argv) + if (session_mode == NULL) + session_mode = is_gdm_mode ? (char *)"gdm" : (char *)"user"; + +- _shell_global_init ("session-mode", session_mode, NULL); ++ _shell_global_init ("session-mode", session_mode, ++ "override-schema", override_schema, ++ NULL); + + shell_prefs_init (); + +diff --git a/src/shell-global.c b/src/shell-global.c +index 855f6257c..181dbb825 100644 +--- a/src/shell-global.c ++++ b/src/shell-global.c +@@ -67,6 +67,7 @@ struct _ShellGlobal { + GdkScreen *gdk_screen; + + char *session_mode; ++ char *override_schema; + + XserverRegion input_region; + +@@ -98,6 +99,7 @@ enum { + PROP_0, + + PROP_SESSION_MODE, ++ PROP_OVERRIDE_SCHEMA, + PROP_SCREEN, + PROP_GDK_SCREEN, + PROP_DISPLAY, +@@ -141,6 +143,10 @@ shell_global_set_property(GObject *object, + g_clear_pointer (&global->session_mode, g_free); + global->session_mode = g_ascii_strdown (g_value_get_string (value), -1); + break; ++ case PROP_OVERRIDE_SCHEMA: ++ g_clear_pointer (&global->override_schema, g_free); ++ global->override_schema = g_value_dup_string (value); ++ break; + case PROP_FRAME_TIMESTAMPS: + global->frame_timestamps = g_value_get_boolean (value); + break; +@@ -166,6 +172,9 @@ shell_global_get_property(GObject *object, + case PROP_SESSION_MODE: + g_value_set_string (value, shell_global_get_session_mode (global)); + break; ++ case PROP_OVERRIDE_SCHEMA: ++ g_value_set_string (value, global->override_schema); ++ break; + case PROP_SCREEN: + g_value_set_object (value, global->meta_screen); + break; +@@ -370,6 +379,13 @@ shell_global_class_init (ShellGlobalClass *klass) + g_param_spec_string ("session-mode", + "Session Mode", + "The session mode to use", ++ NULL, ++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); ++ g_object_class_install_property (gobject_class, ++ PROP_OVERRIDE_SCHEMA, ++ g_param_spec_string ("override-schema", ++ "Override Schema", ++ "The override schema to use", + "user", + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (gobject_class, +@@ -1495,7 +1511,9 @@ shell_global_get_overrides_settings (ShellGlobal *global) + + if (!settings) + { +- if (strcmp (global->session_mode, "classic") == 0) ++ if (global->override_schema != NULL) ++ schema = global->override_schema; ++ else if (strcmp (global->session_mode, "classic") == 0) + schema = "org.gnome.shell.extensions.classic-overrides"; + else if (strcmp (global->session_mode, "user") == 0) + schema = "org.gnome.shell.overrides"; +-- +2.14.2 + diff --git a/SOURCES/0001-loginDialog-make-info-messages-themed.patch b/SOURCES/0001-loginDialog-make-info-messages-themed.patch index b813224..4f5dd71 100644 --- a/SOURCES/0001-loginDialog-make-info-messages-themed.patch +++ b/SOURCES/0001-loginDialog-make-info-messages-themed.patch @@ -1,4 +1,4 @@ -From 73fa23c14f1582dc959c767454459ab8051e7e5d Mon Sep 17 00:00:00 2001 +From b82109bd0c04a8b050a7ad18cd4b2c1d4186fa61 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 26 Jun 2017 14:35:05 -0400 Subject: [PATCH] loginDialog: make info messages themed @@ -11,37 +11,10 @@ show up invisible. 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/data/theme/gnome-shell-high-contrast.css b/data/theme/gnome-shell-high-contrast.css -index 0325fea87..d89ec4a3a 100644 +index 52dc81863..b807db8ae 100644 --- a/data/theme/gnome-shell-high-contrast.css +++ b/data/theme/gnome-shell-high-contrast.css -@@ -1598,63 +1598,65 @@ StScrollBar { - box-shadow: inset 0 1px #5d696d; - text-shadow: 0 1px black; - icon-shadow: 0 1px black; } - .login-dialog .modal-dialog-button:default:active { - color: white; - border-color: rgba(0, 0, 0, 0.7); - background-color: #1c5187; - box-shadow: inset 0 0 black; - text-shadow: none; - icon-shadow: none; } - .login-dialog .modal-dialog-button:default:insensitive { - color: gray; - border-color: rgba(0, 0, 0, 0.7); - background-color: rgba(62, 67, 69, 0.7); - box-shadow: none; - text-shadow: none; - icon-shadow: none; } - - .login-dialog-logo-bin { - padding: 24px 0px; } - - .login-dialog-banner { - color: #d6d6d1; } - - .login-dialog-button-box { - spacing: 5px; } - +@@ -1647,9 +1647,11 @@ StScrollBar { .login-dialog-message-warning { color: #f57900; } @@ -55,65 +28,11 @@ index 0325fea87..d89ec4a3a 100644 .login-dialog-user-selection-box { padding: 100px 0px; } - .login-dialog-user-selection-box .login-dialog-not-listed-label { - padding-left: 2px; } - .login-dialog-not-listed-button:focus .login-dialog-user-selection-box .login-dialog-not-listed-label, .login-dialog-not-listed-button:hover .login-dialog-user-selection-box .login-dialog-not-listed-label { - color: #eeeeec; } - - .login-dialog-not-listed-label { - font-size: 90%; - font-weight: bold; - color: #a6a69b; - padding-top: 1em; } - - .login-dialog-user-list-view { - -st-vfade-offset: 1em; } - - .login-dialog-user-list { - spacing: 12px; - padding: .2em; - width: 23em; } - .login-dialog-user-list:expanded .login-dialog-user-list-item:focus { - background-color: #215d9c; - color: #ffffff; } - .login-dialog-user-list:expanded .login-dialog-user-list-item:logged-in { - border-right: 2px solid #215d9c; } - - .login-dialog-user-list-item { - border-radius: 5px; - padding: .2em; diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css -index e2a442ecb..bbc6b8434 100644 +index a320f41a0..dd37cdf7b 100644 --- a/data/theme/gnome-shell.css +++ b/data/theme/gnome-shell.css -@@ -1598,63 +1598,65 @@ StScrollBar { - box-shadow: inset 0 1px #5d696d; - text-shadow: 0 1px black; - icon-shadow: 0 1px black; } - .login-dialog .modal-dialog-button:default:active { - color: white; - border-color: rgba(0, 0, 0, 0.7); - background-color: #1c5187; - box-shadow: inset 0 0 black; - text-shadow: none; - icon-shadow: none; } - .login-dialog .modal-dialog-button:default:insensitive { - color: #949796; - border-color: rgba(0, 0, 0, 0.7); - background-color: rgba(66, 72, 73, 0.7); - box-shadow: none; - text-shadow: none; - icon-shadow: none; } - - .login-dialog-logo-bin { - padding: 24px 0px; } - - .login-dialog-banner { - color: #d6d6d1; } - - .login-dialog-button-box { - spacing: 5px; } - +@@ -1647,9 +1647,11 @@ StScrollBar { .login-dialog-message-warning { color: #f57900; } @@ -127,33 +46,6 @@ index e2a442ecb..bbc6b8434 100644 .login-dialog-user-selection-box { padding: 100px 0px; } - .login-dialog-user-selection-box .login-dialog-not-listed-label { - padding-left: 2px; } - .login-dialog-not-listed-button:focus .login-dialog-user-selection-box .login-dialog-not-listed-label, .login-dialog-not-listed-button:hover .login-dialog-user-selection-box .login-dialog-not-listed-label { - color: #eeeeec; } - - .login-dialog-not-listed-label { - font-size: 90%; - font-weight: bold; - color: #a6a69b; - padding-top: 1em; } - - .login-dialog-user-list-view { - -st-vfade-offset: 1em; } - - .login-dialog-user-list { - spacing: 12px; - padding: .2em; - width: 23em; } - .login-dialog-user-list:expanded .login-dialog-user-list-item:focus { - background-color: #215d9c; - color: #ffffff; } - .login-dialog-user-list:expanded .login-dialog-user-list-item:logged-in { - border-right: 2px solid #215d9c; } - - .login-dialog-user-list-item { - border-radius: 5px; - padding: .2em; -- -2.13.0 +2.14.2 diff --git a/SOURCES/0001-loginDialog-only-emit-session-activated-on-user-acti.patch b/SOURCES/0001-loginDialog-only-emit-session-activated-on-user-acti.patch new file mode 100644 index 0000000..7c52aea --- /dev/null +++ b/SOURCES/0001-loginDialog-only-emit-session-activated-on-user-acti.patch @@ -0,0 +1,122 @@ +From 79975970398650a114ce3735272f18ca88b7208e Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Thu, 13 Nov 2014 09:26:52 -0500 +Subject: [PATCH] loginDialog: only emit session-activated on user action + +Right now we emit session-activated any time the bullet +moves in the session menu. That includes at start up when +picking an item arbitrarily, and any time GDM reports the +session was read from the user's account settings. + +session-activated informs GDM about the newly selected session, +so emitting it in response to GDM reporting a session is a +bad idea (it's not only pointless, but it can least to +oscillations) + +This commit changes the code to only emit session-activated when +the user explicitly activates a session item from the gear menu. + +https://bugzilla.gnome.org/show_bug.cgi?id=740142 +--- + js/gdm/loginDialog.js | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js +index 485e36506..6ea794998 100644 +--- a/js/gdm/loginDialog.js ++++ b/js/gdm/loginDialog.js +@@ -353,90 +353,86 @@ var SessionMenuButton = new Lang.Class({ + this._menu.toggle(); + })); + + this._items = {}; + this._activeSessionId = null; + this._populate(); + }, + + updateSensitivity: function(sensitive) { + this._button.reactive = sensitive; + this._button.can_focus = sensitive; + this._menu.close(BoxPointer.PopupAnimation.NONE); + }, + + _updateOrnament: function() { + let itemIds = Object.keys(this._items); + for (let i = 0; i < itemIds.length; i++) { + if (itemIds[i] == this._activeSessionId) + this._items[itemIds[i]].setOrnament(PopupMenu.Ornament.DOT); + else + this._items[itemIds[i]].setOrnament(PopupMenu.Ornament.NONE); + } + }, + + setActiveSession: function(sessionId) { + if (sessionId == this._activeSessionId) + return; + + this._activeSessionId = sessionId; + this._updateOrnament(); +- +- this.emit('session-activated', this._activeSessionId); + }, + + close: function() { + this._menu.close(); + }, + + _populate: function() { + let ids = Gdm.get_session_ids(); + ids.sort(); + + if (ids.length <= 1) { + this._button.hide(); + return; + } + + for (let i = 0; i < ids.length; i++) { + let [sessionName, sessionDescription] = Gdm.get_session_name_and_description(ids[i]); + + let id = ids[i]; + let item = new PopupMenu.PopupMenuItem(sessionName); + this._menu.addMenuItem(item); + this._items[id] = item; + +- if (!this._activeSessionId) +- this.setActiveSession(id); +- + item.connect('activate', Lang.bind(this, function() { + this.setActiveSession(id); ++ this.emit('session-activated', this._activeSessionId); + })); + } + } + }); + Signals.addSignalMethods(SessionMenuButton.prototype); + + var LoginDialog = new Lang.Class({ + Name: 'LoginDialog', + + _init: function(parentActor) { + this.actor = new Shell.GenericContainer({ style_class: 'login-dialog', + visible: false }); + this.actor.get_accessible().set_role(Atk.Role.WINDOW); + + this.actor.add_constraint(new Layout.MonitorConstraint({ primary: true })); + this.actor.connect('allocate', Lang.bind(this, this._onAllocate)); + this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); + parentActor.add_child(this.actor); + + 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, +-- +2.14.3 + diff --git a/SOURCES/0001-magnifier-don-t-spew-to-console-when-focus-moves-aro.patch b/SOURCES/0001-magnifier-don-t-spew-to-console-when-focus-moves-aro.patch index 133c187..0acadd4 100644 --- a/SOURCES/0001-magnifier-don-t-spew-to-console-when-focus-moves-aro.patch +++ b/SOURCES/0001-magnifier-don-t-spew-to-console-when-focus-moves-aro.patch @@ -1,4 +1,4 @@ -From 80c3466bf9752567f557b4db2fe41d5b72e2c257 Mon Sep 17 00:00:00 2001 +From 3ec91d51350bce7a139baf009f659008eb046fc8 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Tue, 15 Sep 2015 14:04:07 -0400 Subject: [PATCH] magnifier: don't spew to console when focus moves around @@ -13,10 +13,10 @@ as they existed in 2.8. 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js -index 6438c64c3..6312524e3 100644 +index 4e91155a5..68b24e1c2 100644 --- a/js/ui/magnifier.js +++ b/js/ui/magnifier.js -@@ -724,7 +724,13 @@ const ZoomRegion = new Lang.Class({ +@@ -724,7 +724,13 @@ var ZoomRegion = new Lang.Class({ }, _updateFocus: function(caller, event) { @@ -31,7 +31,7 @@ index 6438c64c3..6312524e3 100644 if (!component || event.detail1 != 1) return; let extents; -@@ -741,7 +747,13 @@ const ZoomRegion = new Lang.Class({ +@@ -741,7 +747,13 @@ var ZoomRegion = new Lang.Class({ }, _updateCaret: function(caller, event) { @@ -47,5 +47,5 @@ index 6438c64c3..6312524e3 100644 return; let extents; -- -2.12.0 +2.14.2 diff --git a/SOURCES/0001-network-Close-Wifi-selection-dialog-when-appropriate.patch b/SOURCES/0001-network-Close-Wifi-selection-dialog-when-appropriate.patch deleted file mode 100644 index d7ecde1..0000000 --- a/SOURCES/0001-network-Close-Wifi-selection-dialog-when-appropriate.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 465e059a0c8a68301f8071a1cc14c817d2337012 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Florian=20M=C3=BCllner?= -Date: Tue, 14 Mar 2017 20:32:50 +0100 -Subject: [PATCH] network: Close Wifi selection dialog when appropriate - -Currently when the wifi selection dialog is open when the screen lock is -activated, the dialog remains visible above the shield. This is clearly -broken, so close the dialog automatically on session mode changes if the -mode doesn't allow settings (as changing the access point is arguably a -user setting). - -https://bugzilla.gnome.org/show_bug.cgi?id=780054 ---- - js/ui/status/network.js | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/js/ui/status/network.js b/js/ui/status/network.js -index 11ca16014..842f6be6a 100644 ---- a/js/ui/status/network.js -+++ b/js/ui/status/network.js -@@ -769,6 +769,14 @@ const NMWirelessDialog = new Lang.Class({ - this._scanTimeoutId = Mainloop.timeout_add_seconds(15, Lang.bind(this, this._onScanTimeout)); - GLib.Source.set_name_by_id(this._scanTimeoutId, '[gnome-shell] this._onScanTimeout'); - this._onScanTimeout(); -+ -+ let id = Main.sessionMode.connect('updated', () => { -+ if (Main.sessionMode.allowSettings) -+ return; -+ -+ Main.sessionMode.disconnect(id); -+ this.close(); -+ }); - }, - - destroy: function() { --- -2.12.0 - diff --git a/SOURCES/0001-network-Fix-initial-visibility-of-summary-item.patch b/SOURCES/0001-network-Fix-initial-visibility-of-summary-item.patch deleted file mode 100644 index 142ac23..0000000 --- a/SOURCES/0001-network-Fix-initial-visibility-of-summary-item.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 73768b8e327066f691188a5f6619d04c4fb56dda Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Florian=20M=C3=BCllner?= -Date: Wed, 31 May 2017 18:55:09 +0200 -Subject: [PATCH] network: Fix initial visibility of summary item - -This was fixed when upstreaming the patch, but never made it back -into the RHEL version ... ---- - js/ui/status/network.js | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/js/ui/status/network.js b/js/ui/status/network.js -index 842f6be6a..e42ebabd5 100644 ---- a/js/ui/status/network.js -+++ b/js/ui/status/network.js -@@ -1607,6 +1607,7 @@ const DeviceCategory = new Lang.Class({ - - this._summaryItem.menu.addSettingsAction(_('Network Settings'), - 'gnome-network-panel.desktop'); -+ this._summaryItem.actor.hide(); - - }, - --- -2.13.0 - diff --git a/SOURCES/0001-network-Summarize-sections-with-too-many-devices.patch b/SOURCES/0001-network-Summarize-sections-with-too-many-devices.patch deleted file mode 100644 index 501f36f..0000000 --- a/SOURCES/0001-network-Summarize-sections-with-too-many-devices.patch +++ /dev/null @@ -1,138 +0,0 @@ -From cd1462d01cce3741330cb013b5fff9f1267ddabd Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Florian=20M=C3=BCllner?= -Date: Fri, 13 May 2016 19:42:04 +0200 -Subject: [PATCH] network: Summarize sections with too many devices - -Any network devices appear as top level items in the system status -menu, so on system with an unusually high number of devices, the -menu can end up exceeding the available screen height. While this -is a corner case, leaving important system actions unreachable is -bad. The system menu does not lend itself to scrolling, so handle -this case instead by summarizing sections ("n connections") where -the number of devices exceeds a threshold. ---- - js/ui/status/network.js | 87 ++++++++++++++++++++++++++++++++++++++++++------- - 1 file changed, 75 insertions(+), 12 deletions(-) - -diff --git a/js/ui/status/network.js b/js/ui/status/network.js -index 337ea3fa4..c386bff1d 100644 ---- a/js/ui/status/network.js -+++ b/js/ui/status/network.js -@@ -40,6 +40,8 @@ const NMAccessPointSecurity = { - WPA2_ENT: 6 - }; - -+const MAX_DEVICE_ITEMS = 4; -+ - // small optimization, to avoid using [] all the time - const NM80211Mode = NetworkManager['80211Mode']; - const NM80211ApFlags = NetworkManager['80211ApFlags']; -@@ -1564,6 +1566,72 @@ const NMVPNSection = new Lang.Class({ - }); - Signals.addSignalMethods(NMVPNSection.prototype); - -+const DeviceCategory = new Lang.Class({ -+ Name: 'DeviceCategory', -+ Extends: PopupMenu.PopupMenuSection, -+ -+ _init: function(category) { -+ this.parent(); -+ -+ this._category = category; -+ -+ this.devices = []; -+ -+ this.section = new PopupMenu.PopupMenuSection(); -+ this.section.box.connect('actor-added', Lang.bind(this, this._sync)); -+ this.section.box.connect('actor-removed', Lang.bind(this, this._sync)); -+ this.addMenuItem(this.section); -+ -+ this._summaryItem = new PopupMenu.PopupSubMenuMenuItem('', true); -+ this._summaryItem.icon.icon_name = this._getSummaryIcon(); -+ this.addMenuItem(this._summaryItem); -+ -+ this._summaryItem.menu.addSettingsAction(_('Network Settings'), -+ 'gnome-network-panel.desktop'); -+ -+ }, -+ -+ _sync: function() { -+ let nDevices = this.section.box.get_children().reduce( -+ function(prev, child) { -+ return prev + (child.visible ? 1 : 0); -+ }, 0); -+ this._summaryItem.label.text = this._getSummaryLabel(nDevices); -+ let shouldSummarize = nDevices > MAX_DEVICE_ITEMS; -+ this._summaryItem.actor.visible = shouldSummarize; -+ this.section.actor.visible = !shouldSummarize; -+ }, -+ -+ _getSummaryIcon: function() { -+ switch(this._category) { -+ case NMConnectionCategory.WIRED: -+ return 'network-wired-symbolic'; -+ case NMConnectionCategory.WIRELESS: -+ case NMConnectionCategory.WWAN: -+ return 'network-wireless-symbolic'; -+ } -+ return ''; -+ }, -+ -+ _getSummaryLabel: function(nDevices) { -+ switch(this._category) { -+ case NMConnectionCategory.WIRED: -+ return ngettext("%s Wired Connection", -+ "%s Wired Connections", -+ nDevices).format(nDevices); -+ case NMConnectionCategory.WIRELESS: -+ return ngettext("%s Wi-Fi Connection", -+ "%s Wi-Fi Connections", -+ nDevices).format(nDevices); -+ case NMConnectionCategory.WWAN: -+ return ngettext("%s Modem Connection", -+ "%s Modem Connections", -+ nDevices).format(nDevices); -+ } -+ return ''; -+ } -+}); -+ - const NMApplet = new Lang.Class({ - Name: 'NMApplet', - Extends: PanelMenu.SystemIndicator, -@@ -1607,15 +1675,6 @@ const NMApplet = new Lang.Class({ - this._tryLateInit(); - }, - -- _createDeviceCategory: function() { -- let category = { -- section: new PopupMenu.PopupMenuSection(), -- devices: [ ], -- }; -- this.menu.addMenuItem(category.section); -- return category; -- }, -- - _tryLateInit: function() { - if (!this._client || !this._settings) - return; -@@ -1632,9 +1691,13 @@ const NMApplet = new Lang.Class({ - this._nmDevices = []; - this._devices = { }; - -- this._devices.wired = this._createDeviceCategory(); -- this._devices.wireless = this._createDeviceCategory(); -- this._devices.wwan = this._createDeviceCategory(); -+ let categories = [NMConnectionCategory.WIRED, -+ NMConnectionCategory.WIRELESS, -+ NMConnectionCategory.WWAN]; -+ for (let category of categories) { -+ this._devices[category] = new DeviceCategory(category); -+ this.menu.addMenuItem(this._devices[category]); -+ } - - this._vpnSection = new NMVPNSection(this._client); - this._vpnSection.connect('activation-failed', Lang.bind(this, this._onActivationFailed)); --- -2.12.0 - diff --git a/SOURCES/0001-objectManager-handle-proxies-coming-and-going.patch b/SOURCES/0001-objectManager-handle-proxies-coming-and-going.patch deleted file mode 100644 index e5a6f41..0000000 --- a/SOURCES/0001-objectManager-handle-proxies-coming-and-going.patch +++ /dev/null @@ -1,252 +0,0 @@ -From 1fc22df08e365820fedccf92b95601859ce63f5b Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Fri, 7 Oct 2016 15:40:14 -0400 -Subject: [PATCH 1/2] objectManager: handle proxies coming and going - -Ever since commit b8e29ae8c78658917c8a8ddd391667d7d9e36971 -(I think), start up is littered with this message: - - Gjs-WARNING **: JS ERROR: could not get remote objects for service - org.gnome.SettingsDaemon.Smartcard path - -since gnome-shell is now started before gnome-settings-daemon. - -This commit addresses the problem by making the object manager code -not try to autostart its proxy, and instead wait for it to appear. - -https://bugzilla.gnome.org/show_bug.cgi?id=772589 ---- - js/misc/objectManager.js | 34 ++++++++++++++++++++++++++++++++-- - 1 files changed, 34 insertions(+), 2 deletions(-) - -diff --git a/js/misc/objectManager.js b/js/misc/objectManager.js -index 225204347..5db7588b6 100644 ---- a/js/misc/objectManager.js -+++ b/js/misc/objectManager.js -@@ -19,101 +19,104 @@ const ObjectManagerIface = ' \ - \ - \ - \ - \ - \ - \ - '; - - const ObjectManagerInfo = Gio.DBusInterfaceInfo.new_for_xml(ObjectManagerIface); - - const ObjectManager = new Lang.Class({ - Name: 'ObjectManager', - _init: function(params) { - params = Params.parse(params, { connection: null, - name: null, - objectPath: null, - knownInterfaces: null, - cancellable: null, - onLoaded: null }); - - this._connection = params.connection; - this._serviceName = params.name; - this._managerPath = params.objectPath; - this._cancellable = params.cancellable; - - this._managerProxy = new Gio.DBusProxy({ g_connection: this._connection, - g_interface_name: ObjectManagerInfo.name, - g_interface_info: ObjectManagerInfo, - g_name: this._serviceName, - g_object_path: this._managerPath, -- g_flags: Gio.DBusProxyFlags.NONE }); -+ g_flags: Gio.DBusProxyFlags.DO_NOT_AUTO_START }); - - this._interfaceInfos = {}; - this._objects = {}; - this._interfaces = {}; - this._onLoaded = params.onLoaded; - - if (params.knownInterfaces) - this._registerInterfaces(params.knownInterfaces); - - // Start out inhibiting load until at least the proxy - // manager is loaded and the remote objects are fetched - this._numLoadInhibitors = 1; - this._managerProxy.init_async(GLib.PRIORITY_DEFAULT, - this._cancellable, - Lang.bind(this, this._onManagerProxyLoaded)); - }, - - _tryToCompleteLoad: function() { -+ if (this._numLoadInhibitors == 0) -+ return; -+ - this._numLoadInhibitors--; - if (this._numLoadInhibitors == 0) { - if (this._onLoaded) - this._onLoaded(); - } - }, - - _addInterface: function(objectPath, interfaceName, onFinished) { - let info = this._interfaceInfos[interfaceName]; - - if (!info) { - if (onFinished) - onFinished(); - return; - } - - let proxy = new Gio.DBusProxy({ g_connection: this._connection, - g_name: this._serviceName, - g_object_path: objectPath, - g_interface_name: interfaceName, - g_interface_info: info, -- g_flags: Gio.DBusProxyFlags.NONE }); -+ g_flags: Gio.DBusProxyFlags.DO_NOT_AUTO_START }); - - proxy.init_async(GLib.PRIORITY_DEFAULT, - this._cancellable, - Lang.bind(this, function(initable, result) { - let error = null; - try { - initable.init_finish(result); - } catch(e) { - logError(e, 'could not initialize proxy for interface ' + interfaceName); - - if (onFinished) - onFinished(); - return; - } - - let isNewObject; - if (!this._objects[objectPath]) { - this._objects[objectPath] = {}; - isNewObject = true; - } else { - isNewObject = false; - } - - this._objects[objectPath][interfaceName] = proxy; - - if (!this._interfaces[interfaceName]) - this._interfaces[interfaceName] = []; - - this._interfaces[interfaceName].push(proxy); - -@@ -154,92 +157,119 @@ const ObjectManager = new Lang.Class({ - }, - - _onManagerProxyLoaded: function(initable, result) { - let error = null; - try { - initable.init_finish(result); - } catch(e) { - logError(e, 'could not initialize object manager for object ' + params.name); - - this._tryToCompleteLoad(); - return; - } - - this._managerProxy.connectSignal('InterfacesAdded', - Lang.bind(this, function(objectManager, sender, [objectPath, interfaces]) { - let interfaceNames = Object.keys(interfaces); - for (let i = 0; i < interfaceNames.length; i++) - this._addInterface(objectPath, interfaceNames[i]); - })); - this._managerProxy.connectSignal('InterfacesRemoved', - Lang.bind(this, function(objectManager, sender, [objectPath, interfaceNames]) { - for (let i = 0; i < interfaceNames.length; i++) - this._removeInterface(objectPath, interfaceNames[i]); - })); - - if (Object.keys(this._interfaceInfos).length == 0) { - this._tryToCompleteLoad(); - return; - } - -+ this._managerProxy.connect('notify::g-name-owner', Lang.bind(this, function() { -+ if (this._managerProxy.g_name_owner) -+ this._onNameAppeared(); -+ else -+ this._onNameVanished(); -+ })); -+ -+ if (this._managerProxy.g_name_owner) -+ this._onNameAppeared(); -+ }, -+ -+ _onNameAppeared: function() { - this._managerProxy.GetManagedObjectsRemote(Lang.bind(this, function(result, error) { - if (!result) { - if (error) { - logError(error, 'could not get remote objects for service ' + this._serviceName + ' path ' + this._managerPath); - } - - this._tryToCompleteLoad(); - return; - } - - let [objects] = result; - - let objectPaths = Object.keys(objects); - for (let i = 0; i < objectPaths.length; i++) { - let objectPath = objectPaths[i]; - let object = objects[objectPath]; - - let interfaceNames = Object.getOwnPropertyNames(object); - for (let j = 0; j < interfaceNames.length; j++) { - let interfaceName = interfaceNames[j]; - - // Prevent load from completing until the interface is loaded - this._numLoadInhibitors++; - this._addInterface(objectPath, - interfaceName, - Lang.bind(this, this._tryToCompleteLoad)); - } - } - this._tryToCompleteLoad(); - })); - }, - -+ _onNameVanished: function() { -+ let objectPaths = Object.keys(this._objects); -+ for (let i = 0; i < objectPaths.length; i++) { -+ let object = this._objects[objectPaths]; -+ -+ let interfaceNames = Object.keys(object); -+ for (let j = 0; i < interfaceNames.length; i++) { -+ let interfaceName = interfaceNames[i]; -+ -+ if (object[interfaceName]) -+ this._removeInterface(objectPath, interfaceName); -+ } -+ } -+ }, -+ - _registerInterfaces: function(interfaces) { - for (let i = 0; i < interfaces.length; i++) { - let info = Gio.DBusInterfaceInfo.new_for_xml(interfaces[i]); - this._interfaceInfos[info.name] = info; - } - }, - - getProxy: function(objectPath, interfaceName) { - let object = this._objects[objectPath]; - - if (!object) - return null; - - return object[interfaceName]; - }, - - getProxiesForInterface: function(interfaceName) { - let proxyList = this._interfaces[interfaceName]; - - if (!proxyList) - return []; - - return proxyList; - }, - - getAllProxies: function() { - let proxies = []; - - let objectPaths = Object.keys(this._objects); - for (let i = 0; i < objectPaths.length; i++) { diff --git a/SOURCES/0001-padOsd-Ensure-to-pick-pad-devices-only.patch b/SOURCES/0001-padOsd-Ensure-to-pick-pad-devices-only.patch new file mode 100644 index 0000000..9c6087a --- /dev/null +++ b/SOURCES/0001-padOsd-Ensure-to-pick-pad-devices-only.patch @@ -0,0 +1,41 @@ +From 0d9c742127f4a79416478b46a9fa5273701d92e3 Mon Sep 17 00:00:00 2001 +From: Carlos Garnacho +Date: Fri, 19 Jan 2018 10:45:50 +0100 +Subject: [PATCH] padOsd: Ensure to pick pad devices only + +If the underlying X11 input driver creates multiple devices from a single +device node, we may end up picking up the wrong device. So, instead of +picking the first device based on node and bailing out if it's not a pad, +pick the first pad that has that device node, and bail out if there is +none. + +https://gitlab.gnome.org/GNOME/gnome-shell/issues/10 + +Closes: #10 +--- + js/ui/padOsd.js | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/js/ui/padOsd.js b/js/ui/padOsd.js +index 34ef96bb9..6e11ddfba 100644 +--- a/js/ui/padOsd.js ++++ b/js/ui/padOsd.js +@@ -977,12 +977,12 @@ var PadOsdService = new Lang.Class({ + let padDevice = null; + + devices.forEach(Lang.bind(this, function(device) { +- if (deviceNode == device.get_device_node()) ++ if (deviceNode == device.get_device_node() && ++ device.get_device_type() == Clutter.InputDeviceType.PAD_DEVICE) + padDevice = device; + })); + +- if (padDevice == null || +- padDevice.get_device_type() != Clutter.InputDeviceType.PAD_DEVICE) { ++ if (padDevice == null) { + invocation.return_error_literal(Gio.IOErrorEnum, + Gio.IOErrorEnum.CANCELLED, + "Invalid params"); +-- +2.16.1 + diff --git a/SOURCES/0001-panel-add-an-icon-to-the-ActivitiesButton.patch b/SOURCES/0001-panel-add-an-icon-to-the-ActivitiesButton.patch index ea0e747..07929ab 100644 --- a/SOURCES/0001-panel-add-an-icon-to-the-ActivitiesButton.patch +++ b/SOURCES/0001-panel-add-an-icon-to-the-ActivitiesButton.patch @@ -1,4 +1,4 @@ -From ea91b6c39c1c17abca0a5f34b3047a5cd5314127 Mon Sep 17 00:00:00 2001 +From 7196f5d0a60243e218d6a906b9db4f3b6608b47c Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 15 Jan 2014 16:45:34 -0500 Subject: [PATCH] panel: add an icon to the ActivitiesButton @@ -11,38 +11,38 @@ Requested by brand 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/data/theme/gnome-shell-high-contrast.css b/data/theme/gnome-shell-high-contrast.css -index 28922be77..3ce5278e1 100644 +index 51477e713..e7b94624a 100644 --- a/data/theme/gnome-shell-high-contrast.css +++ b/data/theme/gnome-shell-high-contrast.css -@@ -685,6 +685,9 @@ StScrollBar { +@@ -688,6 +688,9 @@ StScrollBar { -st-icon-style: symbolic; margin-left: 4px; margin-right: 4px; } + #panel .panel-button .panel-logo-icon { + padding-right: .4em; + icon-size: 1em; } - #panel .panel-button:hover { - color: white; } - #panel .panel-button:active, #panel .panel-button:overview, #panel .panel-button:focus, #panel .panel-button:checked { + #panel .panel-button .system-status-icon, + #panel .panel-button .app-menu-icon > StIcon, + #panel .panel-button .popup-menu-arrow { diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css -index 690722372..342bebe9d 100644 +index 6aab70867..c1207dcd5 100644 --- a/data/theme/gnome-shell.css +++ b/data/theme/gnome-shell.css -@@ -685,6 +685,9 @@ StScrollBar { +@@ -688,6 +688,9 @@ StScrollBar { -st-icon-style: symbolic; margin-left: 4px; margin-right: 4px; } + #panel .panel-button .panel-logo-icon { + padding-right: .4em; + icon-size: 1em; } - #panel .panel-button:hover { - color: white; } - #panel .panel-button:active, #panel .panel-button:overview, #panel .panel-button:focus, #panel .panel-button:checked { + #panel .panel-button .system-status-icon, + #panel .panel-button .app-menu-icon > StIcon, + #panel .panel-button .popup-menu-arrow { diff --git a/js/ui/panel.js b/js/ui/panel.js -index e05a6223c..d07bbaa7b 100644 +index d7c8397b5..3ec43210e 100644 --- a/js/ui/panel.js +++ b/js/ui/panel.js -@@ -409,11 +409,18 @@ const ActivitiesButton = new Lang.Class({ +@@ -409,11 +409,18 @@ var ActivitiesButton = new Lang.Class({ this.actor.name = 'panelActivities'; @@ -63,5 +63,5 @@ index e05a6223c..d07bbaa7b 100644 this.actor.label_actor = this._label; -- -2.12.0 +2.14.2 diff --git a/SOURCES/0001-screenShield-unblank-when-inserting-smartcard.patch b/SOURCES/0001-screenShield-unblank-when-inserting-smartcard.patch index efcb0cc..4e78dcb 100644 --- a/SOURCES/0001-screenShield-unblank-when-inserting-smartcard.patch +++ b/SOURCES/0001-screenShield-unblank-when-inserting-smartcard.patch @@ -1,4 +1,4 @@ -From c9fc0a860acccb8f28a76c349a839d98cf83cf7b Mon Sep 17 00:00:00 2001 +From 7d9fa52a96cd5698ccb4773ffb71ab23b2a22a3d Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Fri, 3 Jul 2015 13:54:36 -0400 Subject: [PATCH] screenShield: unblank when inserting smartcard @@ -13,10 +13,10 @@ action to get the screen to unblank. 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js -index 8918910f8..3d55375b0 100644 +index 9f3ff84ad..8d3eb43d4 100644 --- a/js/ui/screenShield.js +++ b/js/ui/screenShield.js -@@ -513,8 +513,10 @@ const ScreenShield = new Lang.Class({ +@@ -516,8 +516,10 @@ var ScreenShield = new Lang.Class({ this._smartcardManager = SmartcardManager.getSmartcardManager(); this._smartcardManager.connect('smartcard-inserted', Lang.bind(this, function(manager, token) { @@ -29,5 +29,5 @@ index 8918910f8..3d55375b0 100644 this._oVirtCredentialsManager = OVirt.getOVirtCredentialsManager(); -- -2.12.0 +2.14.2 diff --git a/SOURCES/0001-shellDBus-Add-a-DBus-method-to-load-a-single-extensi.patch b/SOURCES/0001-shellDBus-Add-a-DBus-method-to-load-a-single-extensi.patch index 76eab2b..5e3f861 100644 --- a/SOURCES/0001-shellDBus-Add-a-DBus-method-to-load-a-single-extensi.patch +++ b/SOURCES/0001-shellDBus-Add-a-DBus-method-to-load-a-single-extensi.patch @@ -1,4 +1,4 @@ -From c9cdeef7230e6f9671c2ad38b3b7a21a8da79963 Mon Sep 17 00:00:00 2001 +From f163645029cb5af8471d01379aa9b251e6ac2ae0 Mon Sep 17 00:00:00 2001 From: Rui Matos Date: Fri, 8 Nov 2013 11:36:04 +0100 Subject: [PATCH] shellDBus: Add a DBus method to load a single extension @@ -10,10 +10,10 @@ file and load it into the running shell. 1 file changed, 20 insertions(+) diff --git a/js/ui/shellDBus.js b/js/ui/shellDBus.js -index 14dba7292..7299367e5 100644 +index 3fd24d275..d9f36b281 100644 --- a/js/ui/shellDBus.js +++ b/js/ui/shellDBus.js -@@ -313,6 +313,10 @@ const GnomeShellExtensionsIface = ' \ +@@ -322,6 +322,10 @@ const GnomeShellExtensionsIface = ' \ \ \ \ @@ -24,7 +24,7 @@ index 14dba7292..7299367e5 100644 \ \ '; -@@ -415,6 +419,22 @@ const GnomeShellExtensions = new Lang.Class({ +@@ -424,6 +428,22 @@ var GnomeShellExtensions = new Lang.Class({ ExtensionDownloader.checkForUpdates(); }, @@ -48,5 +48,5 @@ index 14dba7292..7299367e5 100644 _extensionStateChanged: function(_, newState) { -- -2.12.0 +2.14.2 diff --git a/SOURCES/0001-st-Add-missing-NULL-check.patch b/SOURCES/0001-st-Add-missing-NULL-check.patch deleted file mode 100644 index d043cc2..0000000 --- a/SOURCES/0001-st-Add-missing-NULL-check.patch +++ /dev/null @@ -1,37 +0,0 @@ -From dd90faeddf9074e814dbc44d201ee131af198741 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Florian=20M=C3=BCllner?= -Date: Wed, 22 Mar 2017 01:26:08 +0100 -Subject: [PATCH] st: Add missing %NULL check - -st_theme_node_get_border_image() may return %NULL, leading to a -segfault in st_border_image_get_file() when glib is compiled with -G_DISABLE_CHECKS. ---- - src/st/st-widget.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/src/st/st-widget.c b/src/st/st-widget.c -index 002249d25..db984ac9b 100644 ---- a/src/st/st-widget.c -+++ b/src/st/st-widget.c -@@ -290,6 +290,7 @@ st_widget_texture_cache_changed (StTextureCache *cache, - StWidget *actor = ST_WIDGET (user_data); - StWidgetPrivate *priv = st_widget_get_instance_private (actor); - StThemeNode *node = priv->theme_node; -+ StBorderImage *border_image; - gboolean changed = FALSE; - GFile *theme_file; - -@@ -303,7 +304,8 @@ st_widget_texture_cache_changed (StTextureCache *cache, - changed = TRUE; - } - -- theme_file = st_border_image_get_file (st_theme_node_get_border_image (node)); -+ border_image = st_theme_node_get_border_image (node); -+ theme_file = border_image ? st_border_image_get_file (border_image) : NULL; - if ((theme_file != NULL) && g_file_equal (theme_file, file)) - { - st_theme_node_invalidate_border_image (node); --- -2.12.0 - diff --git a/SOURCES/0001-system-don-t-throw-an-exception-if-power-off-disable.patch b/SOURCES/0001-system-don-t-throw-an-exception-if-power-off-disable.patch new file mode 100644 index 0000000..0c6d5fe --- /dev/null +++ b/SOURCES/0001-system-don-t-throw-an-exception-if-power-off-disable.patch @@ -0,0 +1,91 @@ +From 3ff1be9fe127a51092b1f5b97d65af7fff75041d Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Mon, 13 Nov 2017 14:17:18 -0500 +Subject: [PATCH] system: don't throw an exception if power off disabled + +--- + js/ui/status/system.js | 13 ++++++++----- + 1 file changed, 8 insertions(+), 5 deletions(-) + +diff --git a/js/ui/status/system.js b/js/ui/status/system.js +index 2a8ca47..37d140a 100644 +--- a/js/ui/status/system.js ++++ b/js/ui/status/system.js +@@ -40,66 +40,69 @@ var AltSwitcher = new Lang.Class({ + this._clickAction.connect('long-press', Lang.bind(this, this._onLongPress)); + + this.actor = new St.Bin(); + this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); + this.actor.connect('notify::mapped', () => { this._flipped = false; }); + }, + + _sync: function() { + let childToShow = null; + + if (this._standard.visible && this._alternate.visible) { + let [x, y, mods] = global.get_pointer(); + let altPressed = (mods & Clutter.ModifierType.MOD1_MASK) != 0; + if (this._flipped) + childToShow = altPressed ? this._standard : this._alternate; + else + childToShow = altPressed ? this._alternate : this._standard; + } else if (this._standard.visible) { + childToShow = this._standard; + } else if (this._alternate.visible) { + childToShow = this._alternate; + } + + let childShown = this.actor.get_child(); + if (childShown != childToShow) { + if (childShown) { + if (childShown.fake_release) + childShown.fake_release(); + childShown.remove_action(this._clickAction); + } +- childToShow.add_action(this._clickAction); + +- let hasFocus = this.actor.contains(global.stage.get_key_focus()); +- this.actor.set_child(childToShow); +- if (hasFocus) +- childToShow.grab_key_focus(); ++ if (childToShow) { ++ childToShow.add_action(this._clickAction); ++ ++ let hasFocus = this.actor.contains(global.stage.get_key_focus()); ++ this.actor.set_child(childToShow); ++ if (hasFocus) ++ childToShow.grab_key_focus(); ++ } + + // The actors might respond to hover, so + // sync the pointer to make sure they update. + global.sync_pointer(); + } + + this.actor.visible = (childToShow != null); + }, + + _onDestroy: function() { + if (this._capturedEventId > 0) { + global.stage.disconnect(this._capturedEventId); + this._capturedEventId = 0; + } + }, + + _onCapturedEvent: function(actor, event) { + let type = event.type(); + if (type == Clutter.EventType.KEY_PRESS || type == Clutter.EventType.KEY_RELEASE) { + let key = event.get_key_symbol(); + if (key == Clutter.KEY_Alt_L || key == Clutter.KEY_Alt_R) + this._sync(); + } + + return Clutter.EVENT_PROPAGATE; + }, + + _onLongPress: function(action, actor, state) { + if (state == Clutter.LongPressState.QUERY || + state == Clutter.LongPressState.CANCEL) +-- +2.14.3 + diff --git a/SOURCES/0001-windowMenu-Bring-back-workspaces-submenu-for-static-.patch b/SOURCES/0001-windowMenu-Bring-back-workspaces-submenu-for-static-.patch index dbcd0d1..f5ff41f 100644 --- a/SOURCES/0001-windowMenu-Bring-back-workspaces-submenu-for-static-.patch +++ b/SOURCES/0001-windowMenu-Bring-back-workspaces-submenu-for-static-.patch @@ -1,4 +1,4 @@ -From dd7d9565555fcfc9ecc730e421ec2145988ea755 Mon Sep 17 00:00:00 2001 +From 8d085a574b5b5d1055451a1b430fcf5cb9af4859 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 14 Mar 2017 17:04:36 +0100 Subject: [PATCH] windowMenu: Bring back workspaces submenu for static @@ -9,23 +9,14 @@ moving to a specific workspace was intentionally left out; some people are quite attached to it though, so bring it back when static workspaces are used. --- - js/ui/windowMenu.js | 18 ++++++++++++++++-- - 1 file changed, 16 insertions(+), 2 deletions(-) + js/ui/windowMenu.js | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) diff --git a/js/ui/windowMenu.js b/js/ui/windowMenu.js -index 5cd6802e6..6b7f6f7c9 100644 +index 7aa57beb3..8751c4c4d 100644 --- a/js/ui/windowMenu.js +++ b/js/ui/windowMenu.js -@@ -97,8 +97,6 @@ const WindowMenu = new Lang.Class({ - if (window.is_always_on_all_workspaces()) - item.setSensitive(false); - -- let nWorkspaces = global.screen.n_workspaces; -- - if (!isSticky) { - let workspace = window.get_workspace(); - if (workspace != workspace.get_neighbor(Meta.MotionDirection.LEFT)) { -@@ -121,6 +119,22 @@ const WindowMenu = new Lang.Class({ +@@ -119,6 +119,22 @@ var WindowMenu = new Lang.Class({ window.change_workspace(workspace.get_neighbor(Meta.MotionDirection.DOWN)); })); } @@ -49,5 +40,5 @@ index 5cd6802e6..6b7f6f7c9 100644 } -- -2.12.0 +2.14.2 diff --git a/SOURCES/0002-Revert-build-Remove-included-Makefiles-as-well.patch b/SOURCES/0002-Revert-build-Remove-included-Makefiles-as-well.patch new file mode 100644 index 0000000..cb02016 --- /dev/null +++ b/SOURCES/0002-Revert-build-Remove-included-Makefiles-as-well.patch @@ -0,0 +1,299 @@ +From 878e3442d6da7f38a872336de08defeedfcb46c4 Mon Sep 17 00:00:00 2001 +From: Olivier Fourdan +Date: Fri, 15 Sep 2017 10:44:21 +0200 +Subject: [PATCH 2/2] Revert "build: Remove included Makefiles as well" + +This reverts commit 6d704cddea54f6398b12ac626006af9a538e2368. +--- + src/Makefile-calendar-server.am | 39 ++++++++++ + src/Makefile-hotplug-sniffer.am | 23 ++++++ + src/Makefile-st.am | 169 ++++++++++++++++++++++++++++++++++++++++ + src/Makefile-tray.am | 24 ++++++ + 4 files changed, 255 insertions(+) + create mode 100644 src/Makefile-calendar-server.am + create mode 100644 src/Makefile-hotplug-sniffer.am + create mode 100644 src/Makefile-st.am + create mode 100644 src/Makefile-tray.am + +diff --git a/src/Makefile-calendar-server.am b/src/Makefile-calendar-server.am +new file mode 100644 +index 000000000..9ec04eb07 +--- /dev/null ++++ b/src/Makefile-calendar-server.am +@@ -0,0 +1,39 @@ ++service_in_files += calendar-server/org.gnome.Shell.CalendarServer.service.in ++ ++libexec_PROGRAMS += gnome-shell-calendar-server ++ ++gnome_shell_calendar_server_SOURCES = \ ++ calendar-server/calendar-debug.h \ ++ calendar-server/calendar-sources.c calendar-server/calendar-sources.h \ ++ calendar-server/gnome-shell-calendar-server.c \ ++ $(NULL) ++ ++desktopdir=$(datadir)/applications ++desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) ++desktop_in_files = calendar-server/evolution-calendar.desktop.in ++ ++%.desktop:%.desktop.in ++ @$(MKDIR_P) $(builddir)/calendar-server ++ $(AM_V_GEN) $(MSGFMT) --desktop --template $< -d $(top_srcdir)/po -o $@ ++ ++gnome_shell_calendar_server_CFLAGS = \ ++ -I$(top_srcdir)/src \ ++ -DPREFIX=\""$(prefix)"\" \ ++ -DLIBDIR=\""$(libdir)"\" \ ++ -DDATADIR=\""$(datadir)"\" \ ++ -DG_LOG_DOMAIN=\"ShellCalendarServer\" \ ++ $(CALENDAR_SERVER_CFLAGS) \ ++ $(NULL) ++ ++gnome_shell_calendar_server_LDADD = \ ++ $(CALENDAR_SERVER_LIBS) \ ++ $(NULL) ++ ++EXTRA_DIST += \ ++ calendar-server/README \ ++ calendar-server/org.gnome.Shell.CalendarServer.service.in \ ++ $(desktop_in_files) \ ++ $(NULL) ++ ++CLEANFILES += \ ++ $(desktop_DATA) +diff --git a/src/Makefile-hotplug-sniffer.am b/src/Makefile-hotplug-sniffer.am +new file mode 100644 +index 000000000..4a475c119 +--- /dev/null ++++ b/src/Makefile-hotplug-sniffer.am +@@ -0,0 +1,23 @@ ++service_in_files += hotplug-sniffer/org.gnome.Shell.HotplugSniffer.service.in ++ ++libexec_PROGRAMS += gnome-shell-hotplug-sniffer ++ ++gnome_shell_hotplug_sniffer_SOURCES = \ ++ hotplug-sniffer/hotplug-mimetypes.h \ ++ hotplug-sniffer/shell-mime-sniffer.h \ ++ hotplug-sniffer/shell-mime-sniffer.c \ ++ hotplug-sniffer/hotplug-sniffer.c \ ++ $(NULL) ++ ++gnome_shell_hotplug_sniffer_CFLAGS = \ ++ -I$(top_srcdir)/src \ ++ $(SHELL_HOTPLUG_SNIFFER_CFLAGS) \ ++ $(NULL) ++ ++gnome_shell_hotplug_sniffer_LDFLAGS = \ ++ $(SHELL_HOTPLUG_SNIFFER_LIBS) \ ++ $(NULL) ++ ++EXTRA_DIST += \ ++ hotplug-sniffer/org.gnome.Shell.HotplugSniffer.service.in \ ++ $(NULL) +diff --git a/src/Makefile-st.am b/src/Makefile-st.am +new file mode 100644 +index 000000000..f44598e12 +--- /dev/null ++++ b/src/Makefile-st.am +@@ -0,0 +1,169 @@ ++st_cflags = \ ++ -I$(top_srcdir)/src \ ++ -DPREFIX=\""$(prefix)"\" \ ++ -DLIBDIR=\""$(libdir)"\" \ ++ -DG_LOG_DOMAIN=\"St\" \ ++ -DST_COMPILATION \ ++ -DCLUTTER_ENABLE_EXPERIMENTAL_API \ ++ -DCOGL_ENABLE_EXPERIMENTAL_API \ ++ -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \ ++ $(ST_CFLAGS) \ ++ $(NULL) ++ ++st_built_sources = \ ++ st-enum-types.h \ ++ st-enum-types.c ++ ++BUILT_SOURCES += $(st_built_sources) ++ ++EXTRA_DIST += \ ++ st/test-theme.css \ ++ st/st-enum-types.h.in \ ++ st/st-enum-types.c.in ++ ++CLEANFILES += stamp-st-enum-types.h ++ ++st-enum-types.h: stamp-st-enum-types.h Makefile ++ @true ++stamp-st-enum-types.h: $(source_h) $(srcdir)/st/st-enum-types.h.in $(st_source_h) ++ $(AM_V_GEN) ( \ ++ $(GLIB_MKENUMS) \ ++ --template $(srcdir)/st/st-enum-types.h.in \ ++ $(addprefix $(srcdir)/, $(st_source_h)) ) >> $@.tmp && \ ++ (cmp -s $@.tmp st-enum-types.h || cp $@.tmp st-enum-types.h) && \ ++ rm -f $@.tmp && \ ++ echo timestamp > $(@F) ++ ++st-enum-types.c: stamp-st-enum-types.h $(srcdir)/st/st-enum-types.c.in ++ $(AM_V_GEN) ( \ ++ $(GLIB_MKENUMS) \ ++ --template $(srcdir)/st/st-enum-types.c.in \ ++ $(addprefix $(srcdir)/,$(st_source_h)) ) >> $@.tmp && \ ++ cp $@.tmp $@ && \ ++ rm -f $@.tmp ++ ++# please, keep this sorted alphabetically ++st_source_h = \ ++ st/st-adjustment.h \ ++ st/st-bin.h \ ++ st/st-border-image.h \ ++ st/st-box-layout.h \ ++ st/st-box-layout-child.h \ ++ st/st-button.h \ ++ st/st-clipboard.h \ ++ st/st-drawing-area.h \ ++ st/st-entry.h \ ++ st/st-focus-manager.h \ ++ st/st-generic-accessible.h \ ++ st/st-icon.h \ ++ st/st-icon-colors.h \ ++ st/st-im-text.h \ ++ st/st-label.h \ ++ st/st-private.h \ ++ st/st-scrollable.h \ ++ st/st-scroll-bar.h \ ++ st/st-scroll-view.h \ ++ st/st-shadow.h \ ++ st/st-texture-cache.h \ ++ st/st-theme.h \ ++ st/st-theme-context.h \ ++ st/st-theme-node.h \ ++ st/st-types.h \ ++ st/st-widget.h \ ++ st/st-widget-accessible.h \ ++ $(NULL) ++ ++st.h: stamp-st.h ++ @true ++stamp-st.h: Makefile ++ $(AM_V_GEN) (echo "#define ST_H_INSIDE 1"; \ ++ for name in $(st_source_h); do \ ++ echo "#include <"$$name">"; \ ++ done; echo "#undef ST_H_INSIDE") > $@.tmp && \ ++ (cmp -s $@.tmp st.h || cp $@.tmp st.h) && \ ++ rm -f $@.tmp && \ ++ echo timestamp > $(@F) ++ ++BUILT_SOURCES += st.h ++CLEANFILES += stamp-st.h ++ ++st-scroll-view-fade-generated.c: stamp-st-scroll-view-fade-generated.c ++ @true ++stamp-st-scroll-view-fade-generated.c: $(srcdir)/st/st-scroll-view-fade.glsl $(srcdir)/data-to-c.pl ++ $(AM_V_GEN) $(srcdir)/data-to-c.pl $(srcdir)/st/st-scroll-view-fade.glsl st_scroll_view_fade_glsl > $@.tmp && \ ++ (cmp -s $@.tmp st-scroll-view-fade-generated.c || cp $@.tmp st-scroll-view-fade-generated.c) && \ ++ rm -f $@.tmp && \ ++ echo timestamp > $(@F) ++ ++BUILT_SOURCES += st-scroll-view-fade-generated.c ++CLEANFILES += stamp-st-scroll-view-fade-generated.c ++EXTRA_DIST += \ ++ st/st-scroll-view-fade.glsl \ ++ data-to-c.pl \ ++ $(NULL) ++ ++st_source_private_h = \ ++ st/st-private.h \ ++ st/st-theme-private.h \ ++ st/st-theme-node-private.h \ ++ st/st-theme-node-transition.h ++ ++# please, keep this sorted alphabetically ++st_source_c = \ ++ st/st-adjustment.c \ ++ st/st-bin.c \ ++ st/st-border-image.c \ ++ st/st-box-layout.c \ ++ st/st-box-layout-child.c \ ++ st/st-button.c \ ++ st/st-clipboard.c \ ++ st/st-drawing-area.c \ ++ st/st-entry.c \ ++ st/st-focus-manager.c \ ++ st/st-generic-accessible.c \ ++ st/st-icon.c \ ++ st/st-icon-colors.c \ ++ st/st-im-text.c \ ++ st/st-label.c \ ++ st/st-private.c \ ++ st/st-scrollable.c \ ++ st/st-scroll-bar.c \ ++ st/st-scroll-view.c \ ++ st/st-shadow.c \ ++ st/st-texture-cache.c \ ++ st/st-theme.c \ ++ st/st-theme-context.c \ ++ st/st-theme-node.c \ ++ st/st-theme-node-drawing.c \ ++ st/st-theme-node-transition.c \ ++ st/st-widget.c \ ++ $(NULL) ++ ++st_non_gir_sources = \ ++ st/st-scroll-view-fade.c \ ++ st/st-scroll-view-fade.h \ ++ $(NULL) ++ ++noinst_LTLIBRARIES += libst-1.0.la ++ ++libst_1_0_la_LIBADD = -lm $(ST_LIBS) ++libst_1_0_la_SOURCES = \ ++ $(st_source_c) \ ++ $(st_non_gir_sources) \ ++ $(st_source_private_h) \ ++ $(st_source_private_c) \ ++ $(st_source_h) \ ++ $(NULL) ++nodist_libst_1_0_la_SOURCES = \ ++ $(st_built_sources) \ ++ st.h \ ++ $(NULL) ++libst_1_0_la_CPPFLAGS = $(st_cflags) ++libst_1_0_la_LDFLAGS = $(LDADD) ++ ++noinst_PROGRAMS += test-theme ++ ++test_theme_CPPFLAGS = $(st_cflags) ++test_theme_LDADD = libst-1.0.la ++ ++test_theme_SOURCES = st/test-theme.c +diff --git a/src/Makefile-tray.am b/src/Makefile-tray.am +new file mode 100644 +index 000000000..b814c1f7b +--- /dev/null ++++ b/src/Makefile-tray.am +@@ -0,0 +1,24 @@ ++tray_cflags = \ ++ -I$(top_srcdir)/src \ ++ -DG_LOG_DOMAIN=\"notification_area\" \ ++ $(TRAY_CFLAGS) \ ++ $(NULL) ++ ++# please, keep this sorted alphabetically ++tray_source = \ ++ tray/na-tray-child.c \ ++ tray/na-tray-child.h \ ++ tray/na-tray-manager.c \ ++ tray/na-tray-manager.h \ ++ $(NULL) ++ ++noinst_LTLIBRARIES += libtray.la ++ ++libtray_la_LIBADD = $(TRAY_LIBS) ++libtray_la_SOURCES = \ ++ $(tray_source) \ ++ $(NULL) ++libtray_la_CPPFLAGS = $(tray_cflags) ++libtray_la_LDFLAGS = $(LDADD) ++ ++CLEANFILES += $(TRAY_STAMP_FILES) $(BUILT_SOURCES) +-- +2.13.5 + diff --git a/SOURCES/0002-gdmUtil-enable-support-for-GDM-s-ChoiceList-PAM-exte.patch b/SOURCES/0002-gdmUtil-enable-support-for-GDM-s-ChoiceList-PAM-exte.patch new file mode 100644 index 0000000..1c1bbd7 --- /dev/null +++ b/SOURCES/0002-gdmUtil-enable-support-for-GDM-s-ChoiceList-PAM-exte.patch @@ -0,0 +1,267 @@ +From 1383483a7c9707c2528c5a47fd71217cf253c6ff Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Mon, 17 Jul 2017 16:48:03 -0400 +Subject: [PATCH 2/2] gdmUtil: enable support for GDM's ChoiceList PAM + extension + +This commit hooks up support for GDM's ChoiceList PAM extension. +--- + js/gdm/authPrompt.js | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++- + js/gdm/loginDialog.js | 5 ++++ + js/gdm/util.js | 28 +++++++++++++++++++ + js/ui/unlockDialog.js | 9 ++++++- + 4 files changed, 114 insertions(+), 2 deletions(-) + +diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js +index 366f34687..7f23f0087 100644 +--- a/js/gdm/authPrompt.js ++++ b/js/gdm/authPrompt.js +@@ -9,6 +9,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 Meta = imports.gi.Meta; +@@ -61,6 +62,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)); +@@ -125,6 +127,28 @@ var AuthPrompt = new Lang.Class({ + + this.actor.add(this._timedLoginIndicator); + ++ this._authList = new AuthList.AuthList(); ++ this._authList.connect('activate', (list, key) => { ++ this._authList.actor.reactive = false; ++ Tweener.addTween(this._authList.actor, ++ { opacity: 0, ++ time: MESSAGE_FADE_OUT_ANIMATION_TIME, ++ transition: 'easeOutQuad', ++ onComplete: () => { ++ this._authList.clear(); ++ this._authList.actor.hide(); ++ 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._message = new St.Label({ opacity: 0, + styleClass: 'login-dialog-message' }); + this._message.clutter_text.line_wrap = true; +@@ -276,6 +300,21 @@ var AuthPrompt = new Lang.Class({ + this.emit('prompted'); + }, + ++ _onShowChoiceList: function(userVerifier, serviceName, promptMessage, choiceList) { ++ if (this._queryingService) ++ this.clear(); ++ ++ this._queryingService = serviceName; ++ ++ if (this._preemptiveAnswer) ++ this._preemptiveAnswer = null; ++ ++ this.nextButton.label = _("Next"); ++ this.setChoiceList(promptMessage, choiceList); ++ this.updateSensitivity(true); ++ this.emit('prompted'); ++ }, ++ + _onOVirtUserAuthenticated: function() { + if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED) + this.reset(); +@@ -404,6 +443,8 @@ var AuthPrompt = new Lang.Class({ + clear: function() { + this._entry.text = ''; + this.stopSpinning(); ++ this._authList.clear(); ++ this._authList.actor.hide(); + }, + + setPasswordChar: function(passwordChar) { +@@ -419,12 +460,42 @@ var AuthPrompt = new Lang.Class({ + + this._label.set_text(question); + ++ this._authList.actor.hide(); + this._label.show(); + this._entry.show(); + + this._entry.grab_key_focus(); + }, + ++ _fadeInChoiceList: function() { ++ this._authList.actor.opacity = 0; ++ this._authList.actor.show(); ++ this._authList.actor.reactive = false; ++ Tweener.addTween(this._authList.actor, ++ { opacity: 255, ++ time: MESSAGE_FADE_OUT_ANIMATION_TIME, ++ transition: 'easeOutQuad', ++ onComplete: () => { ++ this._authList.actor.reactive = true; ++ } ++ }); ++ }, ++ ++ setChoiceList: function(promptMessage, choiceList) { ++ this._authList.clear(); ++ this._authList.label.text = promptMessage; ++ for (let key in choiceList) { ++ let text = choiceList[key]; ++ this._authList.addItem(key, text); ++ } ++ ++ this._label.hide(); ++ this._entry.hide(); ++ if (this._message.text == "") ++ this._message.hide(); ++ this._fadeInChoiceList(); ++ }, ++ + getAnswer: function() { + let text; + +@@ -460,6 +531,7 @@ var AuthPrompt = new Lang.Class({ + else + this._message.remove_style_class_name('login-dialog-message-hint'); + ++ this._message.show(); + if (message) { + Tweener.removeTweens(this._message); + this._message.text = message; +@@ -475,7 +547,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; + }, +diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js +index 6f6de00da..764a96e06 100644 +--- a/js/gdm/loginDialog.js ++++ b/js/gdm/loginDialog.js +@@ -435,6 +435,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, +diff --git a/js/gdm/util.js b/js/gdm/util.js +index 83a12fb6c..9fc61f55a 100644 +--- a/js/gdm/util.js ++++ b/js/gdm/util.js +@@ -200,6 +200,10 @@ var ShellUserVerifier = new Lang.Class({ + if (this._userVerifier) { + this._userVerifier.run_dispose(); + this._userVerifier = null; ++ if (this._userVerifierChoiceList) { ++ this._userVerifierChoiceList.run_dispose(); ++ this._userVerifierChoiceList = null; ++ } + } + }, + +@@ -227,6 +231,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); +@@ -368,6 +376,11 @@ var ShellUserVerifier = new Lang.Class({ + return; + } + ++ if (client.get_user_verifier_choice_list) ++ this._userVerifierChoiceList = client.get_user_verifier_choice_list(); ++ else ++ this._userVerifierChoiceList = null; ++ + this.reauthenticating = true; + this._connectSignals(); + this._beginVerification(); +@@ -385,6 +398,11 @@ var ShellUserVerifier = new Lang.Class({ + return; + } + ++ if (client.get_user_verifier_choice_list) ++ this._userVerifierChoiceList = client.get_user_verifier_choice_list(); ++ else ++ this._userVerifierChoiceList = null; ++ + this._connectSignals(); + this._beginVerification(); + this._hold.release(); +@@ -398,6 +416,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() { +@@ -474,6 +495,13 @@ var ShellUserVerifier = new Lang.Class({ + this._startService(FINGERPRINT_SERVICE_NAME); + }, + ++ _onChoiceListQuery: function(client, serviceName, promptMessage, list) { ++ if (!this.serviceIsForeground(serviceName)) ++ return; ++ ++ this.emit('show-choice-list', serviceName, promptMessage, list.deep_unpack()); ++ }, ++ + _onInfo: function(client, serviceName, info) { + if (this.serviceIsForeground(serviceName)) { + this._queueMessage(info, MessageType.INFO); +diff --git a/js/ui/unlockDialog.js b/js/ui/unlockDialog.js +index baead5a6f..d525959c5 100644 +--- a/js/ui/unlockDialog.js ++++ b/js/ui/unlockDialog.js +@@ -51,7 +51,14 @@ var UnlockDialog = new Lang.Class({ + y_expand: true }); + this.actor.add_child(this._promptBox); + +- this._authPrompt = new AuthPrompt.AuthPrompt(new Gdm.Client(), AuthPrompt.AuthPromptMode.UNLOCK_ONLY); ++ this._gdmClient = new Gdm.Client(); ++ ++ try { ++ this._gdmClient.set_enabled_extensions([Gdm.UserVerifierChoiceList.interface_info().name]); ++ } catch(e) { ++ } ++ ++ this._authPrompt = new AuthPrompt.AuthPrompt(this._gdmClient, AuthPrompt.AuthPromptMode.UNLOCK_ONLY); + this._authPrompt.connect('failed', Lang.bind(this, this._fail)); + this._authPrompt.connect('cancelled', Lang.bind(this, this._fail)); + this._authPrompt.connect('reset', Lang.bind(this, this._onReset)); +-- +2.14.2 + diff --git a/SOURCES/0002-objectManager-handle-object-manager-sending-empty-ar.patch b/SOURCES/0002-objectManager-handle-object-manager-sending-empty-ar.patch deleted file mode 100644 index 162fa77..0000000 --- a/SOURCES/0002-objectManager-handle-object-manager-sending-empty-ar.patch +++ /dev/null @@ -1,86 +0,0 @@ -From 9ce09f7afb08a32eff1f6664d7893c49237a45c7 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Wed, 14 Jun 2017 16:41:41 -0400 -Subject: [PATCH 2/2] objectManager: handle object manager sending empty array - -If the service implementing the object manager returns -a 0 length array we currently throw an exception. - -This commit fixes that. ---- - js/misc/objectManager.js | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/js/misc/objectManager.js b/js/misc/objectManager.js -index 5db7588b6..835057f5e 100644 ---- a/js/misc/objectManager.js -+++ b/js/misc/objectManager.js -@@ -181,60 +181,65 @@ const ObjectManager = new Lang.Class({ - - if (Object.keys(this._interfaceInfos).length == 0) { - this._tryToCompleteLoad(); - return; - } - - this._managerProxy.connect('notify::g-name-owner', Lang.bind(this, function() { - if (this._managerProxy.g_name_owner) - this._onNameAppeared(); - else - this._onNameVanished(); - })); - - if (this._managerProxy.g_name_owner) - this._onNameAppeared(); - }, - - _onNameAppeared: function() { - this._managerProxy.GetManagedObjectsRemote(Lang.bind(this, function(result, error) { - if (!result) { - if (error) { - logError(error, 'could not get remote objects for service ' + this._serviceName + ' path ' + this._managerPath); - } - - this._tryToCompleteLoad(); - return; - } - - let [objects] = result; - -+ if (!objects) { -+ this._tryToCompleteLoad(); -+ return; -+ } -+ - let objectPaths = Object.keys(objects); - for (let i = 0; i < objectPaths.length; i++) { - let objectPath = objectPaths[i]; - let object = objects[objectPath]; - - let interfaceNames = Object.getOwnPropertyNames(object); - for (let j = 0; j < interfaceNames.length; j++) { - let interfaceName = interfaceNames[j]; - - // Prevent load from completing until the interface is loaded - this._numLoadInhibitors++; - this._addInterface(objectPath, - interfaceName, - Lang.bind(this, this._tryToCompleteLoad)); - } - } - this._tryToCompleteLoad(); - })); - }, - - _onNameVanished: function() { - let objectPaths = Object.keys(this._objects); - for (let i = 0; i < objectPaths.length; i++) { - let object = this._objects[objectPaths]; - - let interfaceNames = Object.keys(object); - for (let j = 0; i < interfaceNames.length; i++) { - let interfaceName = interfaceNames[i]; - - if (object[interfaceName]) --- -2.13.0 - diff --git a/SOURCES/0003-build-Remove-check-for-missing-disthook.patch b/SOURCES/0003-build-Remove-check-for-missing-disthook.patch new file mode 100644 index 0000000..b5302d3 --- /dev/null +++ b/SOURCES/0003-build-Remove-check-for-missing-disthook.patch @@ -0,0 +1,38 @@ +From 49102593eb5776e2edc535147e8277cdcad1e5d9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 6 Oct 2017 18:58:21 +0200 +Subject: [PATCH] build: Remove check-for-missing disthook + +The script has been removed upstream, but the re-added autotools +support still references it; we don't have any use for a disthook +downstream, so just update the Makefile accordingly. +--- + Makefile.am | 7 +------ + 1 file changed, 1 insertion(+), 6 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index eba7d2b28..107a00a05 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -14,8 +14,7 @@ endif + EXTRA_DIST = \ + .project \ + .settings \ +- autogen.sh \ +- tools/check-for-missing.py ++ autogen.sh + + # These are files checked into Git that we don't want to distribute + DIST_EXCLUDE = \ +@@ -26,8 +25,4 @@ DIST_EXCLUDE = \ + 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 +-- +2.14.2 + diff --git a/SOURCES/0004-Revert-build-Use-new-mkenums_simple-function.patch b/SOURCES/0004-Revert-build-Use-new-mkenums_simple-function.patch new file mode 100644 index 0000000..a52a104 --- /dev/null +++ b/SOURCES/0004-Revert-build-Use-new-mkenums_simple-function.patch @@ -0,0 +1,200 @@ +From 20f85200472835180a6302928f05b86063dfb00d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Tue, 24 Oct 2017 02:45:00 +0200 +Subject: [PATCH 4/4] Revert "build: Use new mkenums_simple() function" + +This reverts commit ab0e98dfdd49d73373eb4367a299593b96211f80. +--- + src/meson.build | 6 ++++-- + src/shell-enum-types.c.in | 30 ++++++++++++++++++++++++++++++ + src/shell-enum-types.h.in | 25 +++++++++++++++++++++++++ + src/st/meson.build | 8 +++----- + src/st/st-enum-types.c.in | 33 +++++++++++++++++++++++++++++++++ + src/st/st-enum-types.h.in | 29 +++++++++++++++++++++++++++++ + 6 files changed, 124 insertions(+), 7 deletions(-) + create mode 100644 src/shell-enum-types.c.in + create mode 100644 src/shell-enum-types.h.in + create mode 100644 src/st/st-enum-types.c.in + create mode 100644 src/st/st-enum-types.h.in + +diff --git a/src/meson.build b/src/meson.build +index 3e5557351..1e88bf5d5 100644 +--- a/src/meson.build ++++ b/src/meson.build +@@ -182,8 +182,10 @@ if enable_recorder + endif + + +-libshell_enums = gnome.mkenums_simple('shell-enum-types', +- sources: libshell_public_headers ++libshell_enums = gnome.mkenums('shell-enum-types', ++ sources: libshell_public_headers, ++ c_template: 'shell-enum-types.c.in', ++ h_template: 'shell-enum-types.h.in' + ) + + libshell_gir_sources = [ +diff --git a/src/shell-enum-types.c.in b/src/shell-enum-types.c.in +new file mode 100644 +index 000000000..b350d0016 +--- /dev/null ++++ b/src/shell-enum-types.c.in +@@ -0,0 +1,30 @@ ++/*** BEGIN file-header ***/ ++#include "shell-enum-types.h" ++/*** END file-header ***/ ++ ++/*** BEGIN file-production ***/ ++/* enumerations from "@filename@" */ ++#include "@filename@" ++/*** END file-production ***/ ++ ++/*** BEGIN value-header ***/ ++GType ++@enum_name@_get_type(void) { ++ static GType enum_type_id = 0; ++ if (G_UNLIKELY (!enum_type_id)) ++ { ++ static const G@Type@Value values[] = { ++/*** END value-header ***/ ++ ++/*** BEGIN value-production ***/ ++ { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, ++/*** END value-production ***/ ++ ++/*** BEGIN value-tail ***/ ++ { 0, NULL, NULL } ++ }; ++ enum_type_id = g_@type@_register_static("@EnumName@", values); ++ } ++ return enum_type_id; ++} ++/*** END value-tail ***/ +diff --git a/src/shell-enum-types.h.in b/src/shell-enum-types.h.in +new file mode 100644 +index 000000000..a6aea7d17 +--- /dev/null ++++ b/src/shell-enum-types.h.in +@@ -0,0 +1,25 @@ ++/*** BEGIN file-header ***/ ++#ifndef __SHELL_ENUM_TYPES_H__ ++#define __SHELL_ENUM_TYPES_H__ ++ ++#include ++ ++G_BEGIN_DECLS ++ ++/*** END file-header ***/ ++ ++/*** BEGIN file-production ***/ ++/* enumerations from "@filename@" */ ++/*** END file-production ***/ ++ ++/*** BEGIN file-tail ***/ ++G_END_DECLS ++ ++#endif /* !__SHELL_ENUM_TYPES_H__ */ ++/*** END file-tail ***/ ++ ++/*** BEGIN value-header ***/ ++GType @enum_name@_get_type (void) G_GNUC_CONST; ++#define SHELL_TYPE_@ENUMSHORT@ (@enum_name@_get_type()) ++ ++/*** END value-header ***/ +diff --git a/src/st/meson.build b/src/st/meson.build +index fa9d6bbf4..46378a2f1 100644 +--- a/src/st/meson.build ++++ b/src/st/meson.build +@@ -82,12 +82,10 @@ st_sources = [ + 'st-widget.c' + ] + +-st_enums = gnome.mkenums_simple('st-enum-types', ++st_enums = gnome.mkenums('st-enum-types', + sources: st_headers, +- header_prefix: ''' +-#if !defined(ST_H_INSIDE) && !defined(ST_COMPILATION) +-#error "Only can be included directly.h" +-#endif''' ++ c_template: 'st-enum-types.c.in', ++ h_template: 'st-enum-types.h.in' + ) + + st_gir_sources = st_sources + st_private_headers + st_headers + st_enums +diff --git a/src/st/st-enum-types.c.in b/src/st/st-enum-types.c.in +new file mode 100644 +index 000000000..bf0c54470 +--- /dev/null ++++ b/src/st/st-enum-types.c.in +@@ -0,0 +1,33 @@ ++/*** BEGIN file-header ***/ ++#ifndef ST_COMPILATION ++#define ST_COMPILATION ++#endif ++#include "st-enum-types.h" ++/*** END file-header ***/ ++ ++/*** BEGIN file-production ***/ ++/* enumerations from "@filename@" */ ++#include "@filename@" ++/*** END file-production ***/ ++ ++/*** BEGIN value-header ***/ ++GType ++@enum_name@_get_type(void) { ++ static GType enum_type_id = 0; ++ if (G_UNLIKELY (!enum_type_id)) ++ { ++ static const G@Type@Value values[] = { ++/*** END value-header ***/ ++ ++/*** BEGIN value-production ***/ ++ { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, ++/*** END value-production ***/ ++ ++/*** BEGIN value-tail ***/ ++ { 0, NULL, NULL } ++ }; ++ enum_type_id = g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); ++ } ++ return enum_type_id; ++} ++/*** END value-tail ***/ +diff --git a/src/st/st-enum-types.h.in b/src/st/st-enum-types.h.in +new file mode 100644 +index 000000000..b3dd0e74e +--- /dev/null ++++ b/src/st/st-enum-types.h.in +@@ -0,0 +1,29 @@ ++/*** BEGIN file-header ***/ ++#if !defined(ST_H_INSIDE) && !defined(ST_COMPILATION) ++#error "Only can be included directly.h" ++#endif ++ ++#ifndef __ST_ENUM_TYPES_H__ ++#define __ST_ENUM_TYPES_H__ ++ ++#include ++ ++G_BEGIN_DECLS ++ ++/*** END file-header ***/ ++ ++/*** BEGIN file-production ***/ ++/* enumerations from "@filename@" */ ++/*** END file-production ***/ ++ ++/*** BEGIN file-tail ***/ ++G_END_DECLS ++ ++#endif /* !__ST_ENUM_TYPES_H__ */ ++/*** END file-tail ***/ ++ ++/*** BEGIN value-header ***/ ++GType @enum_name@_get_type (void) G_GNUC_CONST; ++#define ST_TYPE_@ENUMSHORT@ (@enum_name@_get_type()) ++ ++/*** END value-header ***/ +-- +2.14.2 + diff --git a/SOURCES/allow-timed-login-with-no-user-list.patch b/SOURCES/allow-timed-login-with-no-user-list.patch index 25bc1a7..279a55b 100644 --- a/SOURCES/allow-timed-login-with-no-user-list.patch +++ b/SOURCES/allow-timed-login-with-no-user-list.patch @@ -1,4 +1,4 @@ -From f3f5643134c317546c88ff11b974f1a04ad780ff Mon Sep 17 00:00:00 2001 +From fb872747e5697098c87e97bab13c4095b653053b Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Tue, 19 Apr 2016 13:12:46 -0400 Subject: [PATCH] loginDialog: allow timed login with disabled user list @@ -11,10 +11,10 @@ Subject: [PATCH] loginDialog: allow timed login with disabled user list 4 files changed, 73 insertions(+), 3 deletions(-) diff --git a/data/theme/gnome-shell-high-contrast.css b/data/theme/gnome-shell-high-contrast.css -index 3ce5278e1..0325fea87 100644 +index e7b94624a..364725de3 100644 --- a/data/theme/gnome-shell-high-contrast.css +++ b/data/theme/gnome-shell-high-contrast.css -@@ -1691,6 +1691,9 @@ StScrollBar { +@@ -1716,6 +1716,9 @@ StScrollBar { padding-bottom: 12px; spacing: 8px; width: 23em; } @@ -25,10 +25,10 @@ index 3ce5278e1..0325fea87 100644 .login-dialog-prompt-label { color: #bebeb6; diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css -index 342bebe9d..e2a442ecb 100644 +index c1207dcd5..5d754a2bb 100644 --- a/data/theme/gnome-shell.css +++ b/data/theme/gnome-shell.css -@@ -1691,6 +1691,9 @@ StScrollBar { +@@ -1716,6 +1716,9 @@ StScrollBar { padding-bottom: 12px; spacing: 8px; width: 23em; } @@ -39,7 +39,7 @@ index 342bebe9d..e2a442ecb 100644 .login-dialog-prompt-label { color: #bebeb6; diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js -index 6327633d9..ae03a5b49 100644 +index 9affbdd5f..366f34687 100644 --- a/js/gdm/authPrompt.js +++ b/js/gdm/authPrompt.js @@ -2,6 +2,7 @@ @@ -48,9 +48,9 @@ index 6327633d9..ae03a5b49 100644 const Gio = imports.gi.Gio; +const GLib = imports.gi.GLib; const Lang = imports.lang; + const Pango = imports.gi.Pango; const Signals = imports.signals; - const St = imports.gi.St; -@@ -118,6 +119,11 @@ const AuthPrompt = new Lang.Class({ +@@ -119,6 +120,11 @@ var AuthPrompt = new Lang.Class({ this._entry.grab_key_focus(); @@ -62,7 +62,7 @@ index 6327633d9..ae03a5b49 100644 this._message = new St.Label({ opacity: 0, styleClass: 'login-dialog-message' }); this._message.clutter_text.line_wrap = true; -@@ -142,6 +148,41 @@ const AuthPrompt = new Lang.Class({ +@@ -144,6 +150,41 @@ var AuthPrompt = new Lang.Class({ this._defaultButtonWell.add_child(this._spinner.actor); }, @@ -105,10 +105,10 @@ index 6327633d9..ae03a5b49 100644 if (this._preemptiveAnswerWatchId) { this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId); diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js -index 45eca18f7..9034d732e 100644 +index c1262b1e8..6f6de00da 100644 --- a/js/gdm/loginDialog.js +++ b/js/gdm/loginDialog.js -@@ -729,6 +729,9 @@ const LoginDialog = new Lang.Class({ +@@ -756,6 +756,9 @@ var LoginDialog = new Lang.Class({ if (this._authPrompt.verificationStatus == AuthPrompt.AuthPromptStatus.NOT_VERIFYING) this._authPrompt.reset(); @@ -118,7 +118,7 @@ index 45eca18f7..9034d732e 100644 } }, -@@ -984,6 +987,9 @@ const LoginDialog = new Lang.Class({ +@@ -1014,6 +1017,9 @@ var LoginDialog = new Lang.Class({ }, _showTimedLoginAnimation: function() { @@ -128,7 +128,7 @@ index 45eca18f7..9034d732e 100644 this._timedLoginItem.actor.grab_key_focus(); return this._timedLoginItem.showTimedLoginIndicator(this._timedLoginAnimationTime); }, -@@ -1011,19 +1017,31 @@ const LoginDialog = new Lang.Class({ +@@ -1041,19 +1047,31 @@ var LoginDialog = new Lang.Class({ }, _startTimedLogin: function(userName, delay) { @@ -162,7 +162,7 @@ index 45eca18f7..9034d732e 100644 // If we're just starting out, start on the right // item. if (!this._userManager.is_loaded) { -@@ -1034,6 +1052,9 @@ const LoginDialog = new Lang.Class({ +@@ -1064,6 +1082,9 @@ var LoginDialog = new Lang.Class({ this._blockTimedLoginUntilIdle, function() { @@ -172,7 +172,7 @@ index 45eca18f7..9034d732e 100644 this._userList.scrollToItem(this._timedLoginItem); }, -@@ -1058,7 +1079,9 @@ const LoginDialog = new Lang.Class({ +@@ -1088,7 +1109,9 @@ var LoginDialog = new Lang.Class({ if (this._timedLoginItem) this._timedLoginItem.hideTimedLoginIndicator(); @@ -184,5 +184,5 @@ index 45eca18f7..9034d732e 100644 if (userName) this._startTimedLogin(userName, this._timedLoginDelay); -- -2.12.0 +2.14.2 diff --git a/SOURCES/disable-unlock-entry-until-question.patch b/SOURCES/disable-unlock-entry-until-question.patch index 1fca3fd..50ffcc2 100644 --- a/SOURCES/disable-unlock-entry-until-question.patch +++ b/SOURCES/disable-unlock-entry-until-question.patch @@ -1,4 +1,4 @@ -From 9d0795d0a140fae4e916b3e69cadb742b91bf563 Mon Sep 17 00:00:00 2001 +From f941682d22a0e6f40e1109df8043291398783ff4 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 30 Sep 2015 12:51:24 -0400 Subject: [PATCH 1/3] authPrompt: don't fade out auth messages if user types @@ -12,10 +12,10 @@ front, before a password is asked. 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js -index 50c66fd13..2d92ae926 100644 +index a436431be..dedf39f99 100644 --- a/js/gdm/authPrompt.js +++ b/js/gdm/authPrompt.js -@@ -183,7 +183,7 @@ const AuthPrompt = new Lang.Class({ +@@ -185,7 +185,7 @@ var AuthPrompt = new Lang.Class({ this._entry.clutter_text.connect('text-changed', Lang.bind(this, function() { @@ -23,12 +23,12 @@ index 50c66fd13..2d92ae926 100644 + if (!this._userVerifier.hasPendingMessages && this._queryingService && !this._preemptiveAnswer) this._fadeOutMessage(); - this._updateNextButtonSensitivity(this._entry.text.length > 0); + this._updateNextButtonSensitivity(this._entry.text.length > 0 || this.verificationStatus == AuthPromptStatus.VERIFYING); -- -2.12.0 +2.14.2 -From 424ecd98bca6d23c6ee4363014f21dfb91bb2d5c Mon Sep 17 00:00:00 2001 +From 7b83ebcdc1d667438de5a0f41cb7b194b2792d1f Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Wed, 30 Sep 2015 14:36:33 -0400 Subject: [PATCH 2/3] authPrompt: don't spin unless answering question @@ -38,10 +38,10 @@ Subject: [PATCH 2/3] authPrompt: don't spin unless answering question 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js -index 2d92ae926..0b11ba95d 100644 +index dedf39f99..b3ff91789 100644 --- a/js/gdm/authPrompt.js +++ b/js/gdm/authPrompt.js -@@ -65,8 +65,8 @@ const AuthPrompt = new Lang.Class({ +@@ -66,8 +66,8 @@ var AuthPrompt = new Lang.Class({ this.connect('next', Lang.bind(this, function() { this.updateSensitivity(false); @@ -52,10 +52,10 @@ index 2d92ae926..0b11ba95d 100644 } else { this._preemptiveAnswer = this._entry.text; -- -2.12.0 +2.14.2 -From d3848683a63938be8b1af391eecc65e214ad26ce Mon Sep 17 00:00:00 2001 +From 76e455916f6411c695f4528bffbb49c5832ec568 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 5 Oct 2015 15:26:18 -0400 Subject: [PATCH 3/3] authPrompt: stop accepting preemptive answer if user @@ -73,10 +73,10 @@ all. 1 file changed, 38 insertions(+) diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js -index 0b11ba95d..6327633d9 100644 +index b3ff91789..9affbdd5f 100644 --- a/js/gdm/authPrompt.js +++ b/js/gdm/authPrompt.js -@@ -9,6 +9,7 @@ const St = imports.gi.St; +@@ -10,6 +10,7 @@ const St = imports.gi.St; const Animation = imports.ui.animation; const Batch = imports.gdm.batch; const GdmUtil = imports.gdm.util; @@ -84,7 +84,7 @@ index 0b11ba95d..6327633d9 100644 const Params = imports.misc.params; const ShellEntry = imports.ui.shellEntry; const Tweener = imports.ui.tweener; -@@ -46,6 +47,8 @@ const AuthPrompt = new Lang.Class({ +@@ -47,6 +48,8 @@ var AuthPrompt = new Lang.Class({ this._gdmClient = gdmClient; this._mode = mode; @@ -93,7 +93,7 @@ index 0b11ba95d..6327633d9 100644 let reauthenticationOnly; if (this._mode == AuthPromptMode.UNLOCK_ONLY) reauthenticationOnly = true; -@@ -70,6 +73,11 @@ const AuthPrompt = new Lang.Class({ +@@ -71,6 +74,11 @@ var AuthPrompt = new Lang.Class({ this._userVerifier.answerQuery(this._queryingService, this._entry.text); } else { this._preemptiveAnswer = this._entry.text; @@ -105,7 +105,7 @@ index 0b11ba95d..6327633d9 100644 } })); -@@ -135,6 +143,11 @@ const AuthPrompt = new Lang.Class({ +@@ -137,6 +145,11 @@ var AuthPrompt = new Lang.Class({ }, _onDestroy: function() { @@ -117,7 +117,7 @@ index 0b11ba95d..6327633d9 100644 this._userVerifier.destroy(); this._userVerifier = null; }, -@@ -356,6 +369,11 @@ const AuthPrompt = new Lang.Class({ +@@ -358,6 +371,11 @@ var AuthPrompt = new Lang.Class({ }, setQuestion: function(question) { @@ -129,7 +129,7 @@ index 0b11ba95d..6327633d9 100644 this._label.set_text(question); this._label.show(); -@@ -441,12 +459,32 @@ const AuthPrompt = new Lang.Class({ +@@ -443,12 +461,32 @@ var AuthPrompt = new Lang.Class({ } }, @@ -163,5 +163,5 @@ index 0b11ba95d..6327633d9 100644 this._userVerifier.cancel(); -- -2.12.0 +2.14.2 diff --git a/SOURCES/enforce-smartcard-at-unlock.patch b/SOURCES/enforce-smartcard-at-unlock.patch index 87dce7a..07782e2 100644 --- a/SOURCES/enforce-smartcard-at-unlock.patch +++ b/SOURCES/enforce-smartcard-at-unlock.patch @@ -1,4 +1,4 @@ -From 624d302d3d192b66d5465fa4551c223df0c4a850 Mon Sep 17 00:00:00 2001 +From 59b6d50061f3c8e5858230a881267014e8395594 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 28 Sep 2015 10:57:02 -0400 Subject: [PATCH 1/3] smartcardManager: add way to detect if user logged using @@ -16,10 +16,10 @@ This commit adds the necessary api to detect that case. 1 file changed, 7 insertions(+) diff --git a/js/misc/smartcardManager.js b/js/misc/smartcardManager.js -index 674efc9ad..bfe8a26f4 100644 +index 4388f286d..75e9836e9 100644 --- a/js/misc/smartcardManager.js +++ b/js/misc/smartcardManager.js -@@ -113,6 +113,13 @@ const SmartcardManager = new Lang.Class({ +@@ -113,6 +113,13 @@ var SmartcardManager = new Lang.Class({ return false; return true; @@ -34,10 +34,10 @@ index 674efc9ad..bfe8a26f4 100644 }); -- -2.12.0 +2.14.2 -From 9e3c4a25a32f1e9b828dc37c5a37de1481288478 Mon Sep 17 00:00:00 2001 +From b25d32c8fef60dec567f05e6681214a6995656fc Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 28 Sep 2015 19:56:53 -0400 Subject: [PATCH 2/3] gdm: only unlock with smartcard, if smartcard used for @@ -50,19 +50,19 @@ gets used for unlock, too. 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/js/gdm/util.js b/js/gdm/util.js -index 1aa52a17f..cea1a0918 100644 +index bae46bfe0..a44184c17 100644 --- a/js/gdm/util.js +++ b/js/gdm/util.js -@@ -131,7 +131,6 @@ const ShellUserVerifier = new Lang.Class({ +@@ -134,7 +134,6 @@ var ShellUserVerifier = new Lang.Class({ this._settings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA }); this._settings.connect('changed', Lang.bind(this, this._updateDefaultService)); - this._updateDefaultService(); - this._fprintManager = new Fprint.FprintManager(); + this._fprintManager = Fprint.FprintManager(); this._smartcardManager = SmartcardManager.getSmartcardManager(); -@@ -142,6 +141,8 @@ const ShellUserVerifier = new Lang.Class({ - // after a user has been picked. +@@ -146,6 +145,8 @@ var ShellUserVerifier = new Lang.Class({ + this.smartcardDetected = false; this._checkForSmartcard(); + this._updateDefaultService(); @@ -70,7 +70,7 @@ index 1aa52a17f..cea1a0918 100644 this._smartcardInsertedId = this._smartcardManager.connect('smartcard-inserted', Lang.bind(this, this._checkForSmartcard)); this._smartcardRemovedId = this._smartcardManager.connect('smartcard-removed', -@@ -408,7 +409,9 @@ const ShellUserVerifier = new Lang.Class({ +@@ -413,7 +414,9 @@ var ShellUserVerifier = new Lang.Class({ }, _updateDefaultService: function() { @@ -82,10 +82,10 @@ index 1aa52a17f..cea1a0918 100644 else if (this._settings.get_boolean(SMARTCARD_AUTHENTICATION_KEY)) this._defaultService = SMARTCARD_SERVICE_NAME; -- -2.12.0 +2.14.2 -From d378c2ccd514770cc35ce72bfff2b24fe956b762 Mon Sep 17 00:00:00 2001 +From 3309c476c6815e03f17359155f565118a2ad57b2 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 28 Sep 2015 19:57:36 -0400 Subject: [PATCH 3/3] gdm: update default service when smartcard inserted @@ -98,10 +98,10 @@ after we get a smartcard insertion event. 1 file changed, 2 insertions(+) diff --git a/js/gdm/util.js b/js/gdm/util.js -index cea1a0918..9517150f0 100644 +index a44184c17..83a12fb6c 100644 --- a/js/gdm/util.js +++ b/js/gdm/util.js -@@ -331,6 +331,8 @@ const ShellUserVerifier = new Lang.Class({ +@@ -336,6 +336,8 @@ var ShellUserVerifier = new Lang.Class({ else if (this._preemptingService == SMARTCARD_SERVICE_NAME) this._preemptingService = null; @@ -111,5 +111,5 @@ index cea1a0918..9517150f0 100644 } }, -- -2.12.0 +2.14.2 diff --git a/SOURCES/gnome-shell-favourite-apps-terminal.patch b/SOURCES/gnome-shell-favourite-apps-terminal.patch index 5ab9f6b..61fb5d7 100644 --- a/SOURCES/gnome-shell-favourite-apps-terminal.patch +++ b/SOURCES/gnome-shell-favourite-apps-terminal.patch @@ -1,8 +1,17 @@ +From 92845e02be66c676261d204e06c2b0ea55722738 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 9 Mar 2017 14:44:32 +0100 +Subject: [PATCH] appFavorites: Add terminal + +--- + data/org.gnome.shell.gschema.xml.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in -index 1e35ca3..95b8c52 100644 +index 8fb7f7291..6f1459c86 100644 --- a/data/org.gnome.shell.gschema.xml.in +++ b/data/org.gnome.shell.gschema.xml.in -@@ -31,7 +31,7 @@ +@@ -39,7 +39,7 @@ @@ -11,3 +20,6 @@ index 1e35ca3..95b8c52 100644 List of desktop file IDs for favorite applications The applications corresponding to these identifiers +-- +2.14.2 + diff --git a/SOURCES/gnome-shell-favourite-apps-yelp.patch b/SOURCES/gnome-shell-favourite-apps-yelp.patch index 09138f0..0f82456 100644 --- a/SOURCES/gnome-shell-favourite-apps-yelp.patch +++ b/SOURCES/gnome-shell-favourite-apps-yelp.patch @@ -1,6 +1,6 @@ -From bd1b67c5901023dd9919f15a45226e987b4fea42 Mon Sep 17 00:00:00 2001 +From e95369c7fc044867b074775d7e0bab148180f4fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= -Date: Wed, 1 May 2013 01:33:16 +0200 +Date: Thu, 9 Mar 2017 14:44:03 +0100 Subject: [PATCH] Add 'yelp' to default favorites Help should be easily available, so add it to the default favorites. @@ -9,10 +9,10 @@ Help should be easily available, so add it to the default favorites. 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in -index 9ba2418..1e35ca3 100644 +index 868d8edc9..8fb7f7291 100644 --- a/data/org.gnome.shell.gschema.xml.in +++ b/data/org.gnome.shell.gschema.xml.in -@@ -31,7 +31,7 @@ +@@ -39,7 +39,7 @@ @@ -22,5 +22,5 @@ index 9ba2418..1e35ca3 100644 The applications corresponding to these identifiers -- -1.8.3.1 +2.14.2 diff --git a/SOURCES/keep-vpn-list-sorted.patch b/SOURCES/keep-vpn-list-sorted.patch deleted file mode 100644 index ddc0175..0000000 --- a/SOURCES/keep-vpn-list-sorted.patch +++ /dev/null @@ -1,95 +0,0 @@ -From ec8c1bbcb97699e51a2aa0306a7811c911f1a930 Mon Sep 17 00:00:00 2001 -From: Benjamin Berg -Date: Mon, 13 Feb 2017 16:02:02 +0100 -Subject: [PATCH 1/2] ui: Allow moving menu items to a certain position - -This function is a helper to simplify keeping menu items ordered when -their order is updated on the fly (e.g. network connections being -renamed). - -https://bugzilla.gnome.org/show_bug.cgi?id=778686 ---- - js/ui/popupMenu.js | 18 ++++++++++++++++++ - 1 file changed, 18 insertions(+) - -diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js -index 52a58d6b8..011a95ac0 100644 ---- a/js/ui/popupMenu.js -+++ b/js/ui/popupMenu.js -@@ -605,6 +605,24 @@ const PopupMenuBase = new Lang.Class({ - menuItem.actor.show(); - }, - -+ moveMenuItem: function(menuItem, position) { -+ let items = this._getMenuItems(); -+ let i = 0; -+ -+ while (i < items.length && position > 0) { -+ if (items[i] != menuItem) -+ position--; -+ i++; -+ } -+ -+ if (i < items.length) { -+ if (items[i] != menuItem) -+ this.box.set_child_below_sibling(menuItem.actor, items[i].actor); -+ } else { -+ this.box.set_child_above_sibling(menuItem.actor, null); -+ } -+ }, -+ - addMenuItem: function(menuItem, position) { - let before_item = null; - if (position == undefined) { --- -2.12.0 - - -From 40bb56b24c95289ee4bfc121cf9405d303a22609 Mon Sep 17 00:00:00 2001 -From: Benjamin Berg -Date: Mon, 13 Feb 2017 14:52:23 +0100 -Subject: [PATCH 2/2] network: Ensure the connection list is sorted after - rename - -Items were inserted correctly but the synchronisation was lost if the -name of a connection was changed. Simply making sure the position is -correct after a connection is updated fixes the issue. - -Reported-by: Oliver Haessler - -https://bugzilla.gnome.org/show_bug.cgi?id=778686 ---- - js/ui/status/network.js | 13 ++++++++++++- - 1 file changed, 12 insertions(+), 1 deletion(-) - -diff --git a/js/ui/status/network.js b/js/ui/status/network.js -index c386bff1d..11ca16014 100644 ---- a/js/ui/status/network.js -+++ b/js/ui/status/network.js -@@ -299,11 +299,22 @@ const NMConnectionSection = new Lang.Class({ - - let item = this._connectionItems.get(connection.get_uuid()); - if (item) -- item.updateForConnection(connection); -+ this._updateForConnection(item, connection); - else - this._addConnection(connection); - }, - -+ _updateForConnection: function(item, connection) { -+ let pos = this._connections.indexOf(connection); -+ -+ this._connections.splice(pos, 1); -+ pos = Util.insertSorted(this._connections, connection, Lang.bind(this, this._connectionSortFunction)); -+ this._labelSection.moveMenuItem(item.labelItem, pos); -+ this._radioSection.moveMenuItem(item.radioItem, pos); -+ -+ item.updateForConnection(connection); -+ }, -+ - _addConnection: function(connection) { - let item = this._makeConnectionItem(connection); - if (!item) --- -2.12.0 - diff --git a/SOURCES/respect-lockscreen-lockdown.patch b/SOURCES/respect-lockscreen-lockdown.patch deleted file mode 100644 index 6b1a501..0000000 --- a/SOURCES/respect-lockscreen-lockdown.patch +++ /dev/null @@ -1,104 +0,0 @@ -From 957e20baa7d82f532134e02ef54c8368c18cd76f Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Florian=20M=C3=BCllner?= -Date: Fri, 17 Mar 2017 15:48:22 +0100 -Subject: [PATCH 1/2] screenShield: Do not lock the screen when locked down - -When using the 'disable-lock-screen' setting to lock down the screen -lock, the expectation is that users cannot lock the screen. However -as it turns out, all the setting currently does is hiding the lock -button in the system menu and making the lock settings in the privacy -panel inactive. That means that if the 'lock-screen-enabled' setting -isn't disabled and locked down as well, we will just continue to -lock the screen on inactivity - not to mention the keyboard shortcut -that isn't subject to that setting anyway. - -Instead of expecting administrators to hunt down every possible way -of locking the screen and disabling it individually, we can easily -handle all cases by refusing to lock the screen when disabled by the -lockdown settings. - -https://bugzilla.gnome.org/show_bug.cgi?id=780212 ---- - js/ui/screenShield.js | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js -index 3d55375b0..0d822353a 100644 ---- a/js/ui/screenShield.js -+++ b/js/ui/screenShield.js -@@ -33,6 +33,9 @@ const SCREENSAVER_SCHEMA = 'org.gnome.desktop.screensaver'; - const LOCK_ENABLED_KEY = 'lock-enabled'; - const LOCK_DELAY_KEY = 'lock-delay'; - -+const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown'; -+const DISABLE_LOCK_KEY = 'disable-lock-screen'; -+ - const LOCKED_STATE_STR = 'screenShield.locked'; - // fraction of screen height the arrow must reach before completing - // the slide up automatically -@@ -543,6 +546,8 @@ const ScreenShield = new Lang.Class({ - this._settings = new Gio.Settings({ schema_id: SCREENSAVER_SCHEMA }); - this._settings.connect('changed::' + LOCK_ENABLED_KEY, Lang.bind(this, this._syncInhibitor)); - -+ this._lockSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA }); -+ - this._isModal = false; - this._hasLockScreen = false; - this._isGreeter = false; -@@ -1289,6 +1294,11 @@ const ScreenShield = new Lang.Class({ - }, - - lock: function(animate) { -+ if (this._lockSettings.get_boolean(DISABLE_LOCK_KEY)) { -+ log('Screen lock is locked down, not locking') // lock, lock - who's there? -+ return; -+ } -+ - // Warn the user if we can't become modal - if (!this._becomeModal()) { - Main.notifyError(_("Unable to lock"), --- -2.12.0 - - -From 4ff403d64d44b220824122601656db847f0c1a7b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Florian=20M=C3=BCllner?= -Date: Fri, 17 Mar 2017 15:48:22 +0100 -Subject: [PATCH 2/2] screenShield: Do not take an inhibitor when disabled by - lockdown - -Just as with the normal lock screen settings, we shouldn't request -a logind inhibitor when locking is disabled via lockdown settings. - -https://bugzilla.gnome.org/show_bug.cgi?id=780212 ---- - js/ui/screenShield.js | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js -index 0d822353a..f6382d28f 100644 ---- a/js/ui/screenShield.js -+++ b/js/ui/screenShield.js -@@ -547,6 +547,7 @@ const ScreenShield = new Lang.Class({ - this._settings.connect('changed::' + LOCK_ENABLED_KEY, Lang.bind(this, this._syncInhibitor)); - - this._lockSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA }); -+ this._lockSettings.connect('changed::' + DISABLE_LOCK_KEY, Lang.bind(this, this._syncInhibitor)); - - this._isModal = false; - this._hasLockScreen = false; -@@ -705,8 +706,10 @@ const ScreenShield = new Lang.Class({ - }, - - _syncInhibitor: function() { -+ let lockEnabled = this._settings.get_boolean(LOCK_ENABLED_KEY); -+ let lockLocked = this._lockSettings.get_boolean(DISABLE_LOCK_KEY); - let inhibit = (this._loginSession && this._loginSession.Active && -- !this._isActive && this._settings.get_boolean(LOCK_ENABLED_KEY)); -+ !this._isActive && lockEnabled && !lockLocked); - if (inhibit) { - this._loginManager.inhibit(_("GNOME needs to lock the screen"), - Lang.bind(this, function(inhibitor) { --- -2.12.0 - diff --git a/SOURCES/support-headless-mode.patch b/SOURCES/support-headless-mode.patch deleted file mode 100644 index 5e7c1ab..0000000 --- a/SOURCES/support-headless-mode.patch +++ /dev/null @@ -1,227 +0,0 @@ -From 191f8b08f0235b300fab68384abf4ecec2845a03 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Florian=20M=C3=BCllner?= -Date: Thu, 16 Jul 2015 15:15:41 +0200 -Subject: [PATCH] layout: Handle the no-monitor case - ---- - js/ui/layout.js | 50 +++++++++++++++++++++++++++++++++------------ - js/ui/lookingGlass.js | 4 ++++ - js/ui/messageTray.js | 3 ++- - js/ui/panel.js | 5 ++++- - js/ui/workspaceThumbnail.js | 3 ++- - 5 files changed, 49 insertions(+), 16 deletions(-) - -diff --git a/js/ui/layout.js b/js/ui/layout.js -index aaf9da536..9e41d779e 100644 ---- a/js/ui/layout.js -+++ b/js/ui/layout.js -@@ -136,7 +136,10 @@ const MonitorConstraint = new Lang.Class({ - index = Math.min(this._index, Main.layoutManager.monitors.length - 1); - - let rect; -- if (this._workArea) { -+ if (Main.layoutManager.monitors.length == 0) { -+ rect = new Meta.Rectangle({ width: global.screen_width, -+ height: global.screen_height }); -+ } else if (this._workArea) { - let ws = global.screen.get_workspace_by_index(0); - rect = ws.get_work_area_for_monitor(index); - } else { -@@ -323,7 +326,9 @@ const LayoutManager = new Lang.Class({ - for (let i = 0; i < nMonitors; i++) - this.monitors.push(new Monitor(i, screen.get_monitor_geometry(i))); - -- if (nMonitors == 1) { -+ if (nMonitors == 0) { -+ this.primaryIndex = this.bottomIndex = -1; -+ } else if (nMonitors == 1) { - this.primaryIndex = this.bottomIndex = 0; - } else { - // If there are monitors below the primary, then we need -@@ -337,8 +342,10 @@ const LayoutManager = new Lang.Class({ - } - } - } -- this.primaryMonitor = this.monitors[this.primaryIndex]; -- this.bottomMonitor = this.monitors[this.bottomIndex]; -+ this.primaryMonitor = this.primaryIndex > -1 ? this.monitors[this.primaryIndex] -+ : null; -+ this.bottomMonitor = this.bottomIndex > -1 ? this.monitors[this.bottomIndex] -+ : null; - }, - - _updateHotCorners: function() { -@@ -449,6 +456,10 @@ const LayoutManager = new Lang.Class({ - }, - - _updateKeyboardBox: function() { -+ this.keyboardBox.visible = this.keyboardMonitor != null; -+ if (!this.keyboardBox.visible) -+ return; -+ - this.keyboardBox.set_position(this.keyboardMonitor.x, - this.keyboardMonitor.y + this.keyboardMonitor.height); - this.keyboardBox.set_size(this.keyboardMonitor.width, -1); -@@ -458,8 +469,13 @@ const LayoutManager = new Lang.Class({ - this.screenShieldGroup.set_position(0, 0); - this.screenShieldGroup.set_size(global.screen_width, global.screen_height); - -- this.panelBox.set_position(this.primaryMonitor.x, this.primaryMonitor.y); -- this.panelBox.set_size(this.primaryMonitor.width, -1); -+ if (this.primaryMonitor != null) { -+ this.panelBox.set_position(this.primaryMonitor.x, this.primaryMonitor.y); -+ this.panelBox.set_size(this.primaryMonitor.width, -1); -+ } else { -+ this.panelBox.set_position(0, 0); -+ this.panelBox.set_size(global.screen_width, -1); -+ } - - this.keyboardIndex = this.primaryIndex; - }, -@@ -480,9 +496,8 @@ const LayoutManager = new Lang.Class({ - this._rightPanelBarrier = null; - } - -- if (this.panelBox.height) { -- let primary = this.primaryMonitor; -- -+ let primary = this.primaryMonitor; -+ if (this.panelBox.height && primary) { - this._rightPanelBarrier = new Meta.Barrier({ display: global.display, - x1: primary.x + primary.width, y1: primary.y, - x2: primary.x + primary.width, y2: primary.y + this.panelBox.height, -@@ -522,7 +537,7 @@ const LayoutManager = new Lang.Class({ - }, - - get keyboardMonitor() { -- return this.monitors[this.keyboardIndex]; -+ return this.keyboardIndex > -1 ? this.monitors[this.keyboardIndex] : null; - }, - - get focusIndex() { -@@ -536,7 +551,7 @@ const LayoutManager = new Lang.Class({ - }, - - get focusMonitor() { -- return this.monitors[this.focusIndex]; -+ return this.focusIndex > -1 ? this.monitors[this.focusIndex] : null; - }, - - set keyboardIndex(v) { -@@ -591,7 +606,9 @@ const LayoutManager = new Lang.Class({ - reactive: true }); - this.addChrome(this._coverPane); - -- if (Meta.is_restart()) { -+ if (global.screen.get_n_monitors() == 0) { -+ // Don't do anything -+ } else if (Meta.is_restart()) { - // On restart, we don't do an animation. Force an update of the - // regions immediately so that maximized windows restore to the - // right size taking struts into account. -@@ -634,7 +651,7 @@ const LayoutManager = new Lang.Class({ - }, - - _startupAnimation: function() { -- if (Meta.is_restart()) -+ if (Meta.is_restart() || global.screen.get_n_monitors() == 0) - this._startupAnimationComplete(); - else if (Main.sessionMode.isGreeter) - this._startupAnimationGreeter(); -@@ -863,6 +880,8 @@ const LayoutManager = new Lang.Class({ - _updateActorVisibility: function(actorData) { - if (!actorData.trackFullscreen) - return; -+ if (global.screen.get_n_monitors() == 0) -+ return; - - let monitor = this.findMonitorForActor(actorData.actor); - actorData.actor.visible = !(global.window_group.visible && -@@ -880,6 +899,9 @@ const LayoutManager = new Lang.Class({ - }, - - getWorkAreaForMonitor: function(monitorIndex) { -+ if (monitorIndex < 0) -+ return new Meta.Rectangle(); -+ - // Assume that all workspaces will have the same - // struts and pick the first one. - let ws = global.screen.get_workspace_by_index(0); -@@ -985,6 +1007,8 @@ const LayoutManager = new Lang.Class({ - - let monitor = this.findMonitorForActor(actorData.actor); - let side; -+ if (!monitor) -+ continue; - if (x1 <= monitor.x && x2 >= monitor.x + monitor.width) { - if (y1 <= monitor.y) - side = Meta.Side.TOP; -diff --git a/js/ui/lookingGlass.js b/js/ui/lookingGlass.js -index 7dd8bd1c0..abca97600 100644 ---- a/js/ui/lookingGlass.js -+++ b/js/ui/lookingGlass.js -@@ -538,6 +538,8 @@ const Inspector = new Lang.Class({ - return; - - let primary = Main.layoutManager.primaryMonitor; -+ if (!primary) -+ return; - - let [minWidth, minHeight, natWidth, natHeight] = - this._eventHandler.get_preferred_size(); -@@ -1036,6 +1038,8 @@ const LookingGlass = new Lang.Class({ - - _resize: function() { - let primary = Main.layoutManager.primaryMonitor; -+ if (!primary) -+ return; - let myWidth = primary.width * 0.7; - let availableHeight = primary.height - Main.layoutManager.keyboardBox.height; - let myHeight = Math.min(primary.height * 0.7, availableHeight * 0.9); -diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js -index 4f1ab7fea..16b9ef6bc 100644 ---- a/js/ui/messageTray.js -+++ b/js/ui/messageTray.js -@@ -1224,7 +1224,8 @@ const MessageTray = new Lang.Class({ - if (this._notificationState == State.HIDDEN) { - let nextNotification = this._notificationQueue[0] || null; - if (hasNotifications && nextNotification) { -- let limited = this._busy || Main.layoutManager.bottomMonitor.inFullscreen; -+ let bottomMonitor = Main.layoutManager.bottomMonitor; -+ let limited = this._busy || (bottomMonitor && bottomMonitor.inFullscreen); - let showNextNotification = (!limited || nextNotification.forFeedback || nextNotification.urgency == Urgency.CRITICAL); - if (showNextNotification) - this._showNotification(); -diff --git a/js/ui/panel.js b/js/ui/panel.js -index eededfae1..d07bbaa7b 100644 ---- a/js/ui/panel.js -+++ b/js/ui/panel.js -@@ -820,7 +820,10 @@ const Panel = new Lang.Class({ - - _getPreferredWidth: function(actor, forHeight, alloc) { - alloc.min_size = -1; -- alloc.natural_size = Main.layoutManager.primaryMonitor.width; -+ if (Main.layoutManager.primaryMonitor) -+ alloc.natural_size = Main.layoutManager.primaryMonitor.width; -+ else -+ alloc.natural_size = 0; - }, - - _getPreferredHeight: function(actor, forWidth, alloc) { -diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js -index 980ffd665..d19ce1f6a 100644 ---- a/js/ui/workspaceThumbnail.js -+++ b/js/ui/workspaceThumbnail.js -@@ -275,7 +275,8 @@ const WorkspaceThumbnail = new Lang.Class({ - this._createBackground(); - - let monitor = Main.layoutManager.primaryMonitor; -- this.setPorthole(monitor.x, monitor.y, monitor.width, monitor.height); -+ if (monitor) -+ this.setPorthole(monitor.x, monitor.y, monitor.width, monitor.height); - - let windows = global.get_window_actors().filter(Lang.bind(this, function(actor) { - let win = actor.meta_window; --- -2.12.0 - diff --git a/SPECS/gnome-shell.spec b/SPECS/gnome-shell.spec index c8f0af0..8b04859 100644 --- a/SPECS/gnome-shell.spec +++ b/SPECS/gnome-shell.spec @@ -1,6 +1,6 @@ Name: gnome-shell -Version: 3.22.3 -Release: 17%{?dist} +Version: 3.26.2 +Release: 5%{?dist} Summary: Window management and application launching for GNOME Group: User Interface/Desktops @@ -8,7 +8,7 @@ License: GPLv2+ Provides: desktop-notification-daemon URL: https://wiki.gnome.org/Projects/GnomeShell #VCS: git:git://git.gnome.org/gnome-shell -Source0: http://download.gnome.org/sources/gnome-shell/3.22/%{name}-%{version}.tar.xz +Source0: http://download.gnome.org/sources/gnome-shell/3.26/%{name}-%{version}.tar.xz Source1: org.gnome.shell.gschema.override # Replace Epiphany with Firefox in the default favourite apps list @@ -16,6 +16,12 @@ Patch1: gnome-shell-favourite-apps-firefox.patch Patch2: gnome-shell-favourite-apps-yelp.patch Patch3: gnome-shell-favourite-apps-terminal.patch +# el7 build fixes +Patch5: 0001-Revert-build-Drop-autotools-support.patch +Patch6: 0002-Revert-build-Remove-included-Makefiles-as-well.patch +Patch7: 0003-build-Remove-check-for-missing-disthook.patch +Patch8: 0004-Revert-build-Use-new-mkenums_simple-function.patch + # GDM/Lock stuff Patch10: 0001-gdm-honor-timed-login-delay-even-if-animations-disab.patch Patch11: 0001-gdm-use-password-authentication-if-all-schemes-are-d.patch @@ -23,35 +29,28 @@ Patch12: 0001-screenShield-unblank-when-inserting-smartcard.patch Patch13: enforce-smartcard-at-unlock.patch Patch14: disable-unlock-entry-until-question.patch Patch15: allow-timed-login-with-no-user-list.patch -Patch16: 0001-gdm-Handle-absence-of-Fprint.Manager-service.patch -Patch17: respect-lockscreen-lockdown.patch -Patch18: 0001-gdmUtil-Fix-auth-prompt-drawing-over-user-list.patch -Patch19: 0001-data-install-process-working.svg-to-filesystem.patch -Patch20: 0001-authPrompt-allow-empty-response-to-PAM-messages.patch -Patch21: 0001-objectManager-handle-proxies-coming-and-going.patch -Patch22: 0002-objectManager-handle-object-manager-sending-empty-ar.patch -Patch23: 0001-loginDialog-make-info-messages-themed.patch +Patch16: 0001-data-install-process-working.svg-to-filesystem.patch +Patch17: 0001-loginDialog-make-info-messages-themed.patch +Patch18: 0001-gdm-add-AuthList-control.patch +Patch19: 0002-gdmUtil-enable-support-for-GDM-s-ChoiceList-PAM-exte.patch +Patch20: 0001-loginDialog-only-emit-session-activated-on-user-acti.patch # Misc. -Patch30: support-headless-mode.patch -Patch31: 0001-shellDBus-Add-a-DBus-method-to-load-a-single-extensi.patch -Patch32: 0001-extensions-Add-a-SESSION_MODE-extension-type.patch -Patch33: 0001-magnifier-don-t-spew-to-console-when-focus-moves-aro.patch -Patch34: 0001-extensionSystem-Notify-about-extension-issues-on-upd.patch -Patch35: 0001-panel-add-an-icon-to-the-ActivitiesButton.patch -Patch36: 0001-app-Fall-back-to-window-title-instead-of-WM_CLASS.patch -Patch37: 0001-network-Summarize-sections-with-too-many-devices.patch -Patch38: 0001-windowMenu-Bring-back-workspaces-submenu-for-static-.patch -Patch39: keep-vpn-list-sorted.patch -Patch40: 0001-network-Close-Wifi-selection-dialog-when-appropriate.patch -Patch41: 0001-calendar-server-Remove-unused-variables-and-function.patch -Patch42: 0001-st-Add-missing-NULL-check.patch -patch43: 0001-network-Fix-initial-visibility-of-summary-item.patch +Patch30: 0001-shellDBus-Add-a-DBus-method-to-load-a-single-extensi.patch +Patch31: 0001-extensions-Add-a-SESSION_MODE-extension-type.patch +Patch32: 0001-magnifier-don-t-spew-to-console-when-focus-moves-aro.patch +Patch33: 0001-extensionSystem-Notify-about-extension-issues-on-upd.patch +Patch34: 0001-panel-add-an-icon-to-the-ActivitiesButton.patch +Patch35: 0001-app-Fall-back-to-window-title-instead-of-WM_CLASS.patch +Patch36: 0001-windowMenu-Bring-back-workspaces-submenu-for-static-.patch +Patch37: 0001-global-Allow-overriding-the-override-schema.patch +Patch38: 0001-system-don-t-throw-an-exception-if-power-off-disable.patch +Patch39: 0001-padOsd-Ensure-to-pick-pad-devices-only.patch %define gnome_bluetooth_version 1:3.9.0 %define gobject_introspection_version 1.45.4 -%define gjs_version 1.39.0 -%define mutter_version 3.22.1 +%define gjs_version 1.47.0 +%define mutter_version 3.25.90 %define gtk3_version 3.15.0 %define eds_version 3.13.90 %define gnome_desktop_version 3.7.90 @@ -82,6 +81,7 @@ BuildRequires: json-glib-devel >= %{json_glib_version} BuildRequires: upower-devel BuildRequires: libgnome-keyring-devel BuildRequires: libnm-gtk-devel +BuildRequires: mesa-libGL-devel BuildRequires: NetworkManager-glib-devel BuildRequires: polkit-devel BuildRequires: startup-notification-devel @@ -149,6 +149,11 @@ Requires: python%{_isa} %else Requires: python3%{_isa} %endif +# needed for the dual-GPU launch menu +#Requires: switcheroo-control +# needed for clocks/weather integration +Requires: geoclue2-libs%{?_isa} +Requires: libgweather%{?_isa} %description GNOME Shell provides core user interface functions for the GNOME 3 desktop, @@ -170,14 +175,13 @@ be used only by extensions.gnome.org. %prep %autosetup -S git +%build %if 0%{?rhel} # Use Python 2 -sed -i -e 's|/usr/bin/python3|/usr/bin/python|' tools/check-for-missing.py sed -i -e 's/AM_PATH_PYTHON(\[3\])/AM_PATH_PYTHON([2.5])/' configure.ac autoreconf -fi %endif -%build (if ! test -x configure; then NOCONFIGURE=1 ./autogen.sh; fi; %configure --disable-static --disable-compile-warnings) make V=1 %{?_smp_mflags} @@ -226,6 +230,7 @@ glib-compile-schemas --allow-any-name %{_datadir}/glib-2.0/schemas &> /dev/null %{_datadir}/dbus-1/services/org.gnome.Shell.CalendarServer.service %{_datadir}/dbus-1/services/org.gnome.Shell.HotplugSniffer.service %{_datadir}/dbus-1/services/org.gnome.Shell.PortalHelper.service +%{_datadir}/dbus-1/interfaces/org.gnome.Shell.PadOsd.xml %{_datadir}/dbus-1/interfaces/org.gnome.Shell.Screencast.xml %{_datadir}/dbus-1/interfaces/org.gnome.Shell.Screenshot.xml %{_datadir}/dbus-1/interfaces/org.gnome.ShellSearchProvider.xml @@ -252,6 +257,38 @@ glib-compile-schemas --allow-any-name %{_datadir}/glib-2.0/schemas &> /dev/null %{_libdir}/mozilla/plugins/*.so %changelog +* Wed Feb 14 2018 Ray Strode - 3.26.2-5 +- Make session selection bullet isn't shown on wrong item + Resolves: #1527145 + +* Tue Feb 13 2018 Ray Strode - 3.26.2-4 +- Fix timed login + Resolves: #1527143 + +* Wed Feb 07 2018 Carlos Garnacho - 3.26.2-3 +- Fix pad device lookup from event node path + Resolves: #1537879 + +* Mon Nov 13 2017 Ray Strode - 3.26.2-2 +- Don't throw an exception is poweroff is disabled + Resolves: #1512662 + +* Fri Nov 03 2017 Kalev Lember - 3.26.2-1 +- Update to 3.26.2 +- Related: #1481381 + +* Thu Oct 26 2017 Florian Müllner - 3.26.1-2 +- Add CLI option to specify a custom override schema + Resolves: #1432505 + +* Fri Oct 06 2017 Florian Müllner - 3.26.1-1 +- Update to 3.26.1 + Resolves: #1481381 + +* Wed Jul 26 2017 Ray Strode - 3.22.3-18 +- Support GDM ChoiceList pam extensions + Related: #1413900 + * Mon Jun 26 2017 Ray Strode - 3.22.3-17 - Fix PAM info messages in unlock screen Related: #1449359