summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2022-01-20 13:33:11 +0100
committerSimon Rettberg2022-01-20 13:33:11 +0100
commit3d748ebe7d900e96670ff3d455896998dfba6191 (patch)
treee8bbaf6531897a2292da2158a46e9dce3df96baf
parentRe-sync dpms settings on unblank (diff)
downloadxscreensaver-3d748ebe7d900e96670ff3d455896998dfba6191.tar.gz
xscreensaver-3d748ebe7d900e96670ff3d455896998dfba6191.tar.xz
xscreensaver-3d748ebe7d900e96670ff3d455896998dfba6191.zip
-rw-r--r--Makefile.in67
-rw-r--r--README22
-rw-r--r--README.hacking9
-rw-r--r--aclocal.m46
-rw-r--r--config.h.in61
-rwxr-xr-xconfigure5830
-rw-r--r--configure.ac (renamed from configure.in)2136
-rw-r--r--driver/Makefile.in125
-rw-r--r--driver/XScreenSaver.ad.in12
-rw-r--r--driver/demo-Gtk-conf.c15
-rw-r--r--driver/demo-Gtk.c201
-rw-r--r--driver/lock.c11
-rw-r--r--driver/passwd-pam.c2
-rw-r--r--driver/pdf2jpeg.m2
-rw-r--r--driver/prefs.c6
-rw-r--r--driver/remote.c12
-rw-r--r--driver/screens.c18
-rw-r--r--driver/stderr.c18
-rw-r--r--driver/subprocs.c64
-rw-r--r--driver/timers.c3
-rw-r--r--driver/windows.c57
-rw-r--r--driver/xscreensaver-command.c10
-rw-r--r--driver/xscreensaver-command.man12
-rw-r--r--driver/xscreensaver-demo.glade2.in3136
-rw-r--r--driver/xscreensaver-demo.glade2p19
-rw-r--r--driver/xscreensaver-demo.ui2912
-rwxr-xr-xdriver/xscreensaver-getimage-file45
-rwxr-xr-xdriver/xscreensaver-getimage-video7
-rw-r--r--driver/xscreensaver-getimage.c22
-rw-r--r--driver/xscreensaver-systemd.c1043
-rwxr-xr-xdriver/xscreensaver-text33
-rw-r--r--driver/xscreensaver.c289
-rw-r--r--driver/xscreensaver.h10
-rw-r--r--driver/xscreensaver.man12
-rw-r--r--driver/xset.c4
-rw-r--r--intltool-update.in613
-rw-r--r--jwxyz/jwxyz-cocoa.h16
-rw-r--r--jwxyz/jwxyz-cocoa.m56
-rw-r--r--jwxyz/jwxyz-gl.c6
-rw-r--r--jwxyz/jwxyz.m30
-rw-r--r--jwxyz/jwxyzI.h2
-rw-r--r--jwxyz/jwzgles.c2
-rw-r--r--jwxyz/jwzgles.h1
-rw-r--r--po/Makefile.in.in6
-rw-r--r--po/POTFILES.in8
-rw-r--r--po/da.po2
-rw-r--r--po/de.po2
-rw-r--r--po/es.po2
-rw-r--r--po/et.po2
-rw-r--r--po/fi.po2
-rw-r--r--po/fr.po2
-rw-r--r--po/hu.po2
-rw-r--r--po/it.po2
-rw-r--r--po/ja.po2
-rw-r--r--po/ko.po2
-rw-r--r--po/nb.po2
-rw-r--r--po/nl.po2
-rw-r--r--po/pl.po2
-rw-r--r--po/pt.po2
-rw-r--r--po/pt_BR.po2
-rw-r--r--po/ru.po2
-rw-r--r--po/sk.po2
-rw-r--r--po/sv.po2
-rw-r--r--po/vi.po2
-rw-r--r--po/wa.po2
-rw-r--r--po/zh_CN.po2
-rw-r--r--po/zh_TW.po2
-rw-r--r--utils/Makefile.in2
-rw-r--r--utils/font-retry.c13
-rw-r--r--utils/grabclient.c20
-rw-r--r--utils/grabscreen.h4
-rw-r--r--utils/textclient-mobile.c2
-rw-r--r--utils/textclient.c80
-rw-r--r--utils/textclient.h4
-rw-r--r--utils/usleep.h4
-rw-r--r--utils/utf8wc.c6
-rw-r--r--utils/version.h2
-rw-r--r--utils/xshm.c14
-rw-r--r--utils/yarandom.c4
-rw-r--r--xscreensaver.spec23
80 files changed, 9114 insertions, 8079 deletions
diff --git a/Makefile.in b/Makefile.in
index 52f1b4f..30a1db9 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -9,7 +9,7 @@ SHELL = /bin/sh
SUBDIRS = utils jwxyz hacks/images hacks hacks/glx driver po
SUBDIRS2 = $(SUBDIRS) OSX android
TARFILES = README README.hacking README.VMS INSTALL \
- configure configure.in Makefile.in config.h.in \
+ configure configure.ac Makefile.in config.h.in \
config.h-vms install-sh setup.com config.guess aclocal.m4 \
ax_pthread.m4 config.sub makevms.com \
intltool-merge.in intltool-extract.in intltool-update.in \
@@ -101,9 +101,12 @@ _tar:
# of autoconf other than the ones I've tried (2.12 and 2.13.)
#
configure::
+ rm -f configure
aclocal
autoconf
autoheader
+
+configure::
@TMP=configure.$$$$ ; \
echo "munging configure's --help message..." ; \
( perl -e ' \
@@ -111,26 +114,24 @@ configure::
while (<>) { $$file .= $$_; } \
$$_ = $$file; \
\
- s/^(Configuration:)$$/\n$$1\n/m; \
- s/^(Directory and file names:)$$/\n$$1\n/m; \
- s/^ --sbindir=.*\n//m; \
- s/^ --sysconfdir.*\n//m; \
- s/^ --sharedstatedir.*\n.*\n//m; \
- s/^ --localstatedir.*\n//m; \
- s/^ --infodir.*\n//m; \
- s/^(Host type:)$$/\n$$1\n/m; \
- s/\nFeatures and packages:\n.*library files are in DIR\n/\n/s;\
- s/--enable and --with options recognized://m; \
- s/\n --with-x .*?(["\n])/$$1/s; \
- s/\n(Installation options:\n)/$$1/s; \
+ s/\nInstallation directories:.*?\n\n/\n/s; \
+ s/\nOptional Features:.*?\n\n/\n/s; \
+ s/\nOptional Packages:.*?\n\n/\n/s; \
\
- s/^ --oldincludedir=.*$$/ \
- --x-includes=DIR X include files are in DIR\n \
- --x-libraries=DIR X library files are in DIR/m; \
+ s/^ +--sbindir=.*\n//m; \
+ s/^ +--sysconfdir.*\n//m; \
+ s/^ +--sharedstatedir.*\n.*\n//m; \
+ s/^ +--oldincludedir.*\n//m; \
+ s/^ +--infodir.*\n//m; \
+ s/^ +--htmldir.*\n//m; \
+ s/^ +--dvidir.*\n//m; \
+ s/^ +--pdfdir.*\n//m; \
+ s/^ +--psdir.*\n//m; \
+ s/^ +--with-x .*\n//m; \
\
- s@mandir=.\$$\{prefix}/man.@mandir=\\\$${datadir}/man@; \
+ s/(\n\n)\n+/$$1/gs; \
\
- s@rm -f conftest@rm -rf conftest@g; \
+ s/rm -f conftest/rm -rf conftest/g; \
\
print;' \
< configure \
@@ -362,3 +363,33 @@ count::
grep -v helper | \
grep -v ljlatest | \
wc -l
+
+
+cerebrum::
+ rsync -vax . cerebrum:src/xscreensaver/ \
+ --omit-dir-times \
+ --delete-during \
+ --exclude .git \
+ --exclude OSX \
+ --exclude android \
+ --exclude archive \
+ --exclude build \
+ --exclude gen \
+ --exclude videos \
+ --include '*.asm' \
+ --include '*.c' \
+ --include '*.gif' \
+ --include '*.h' \
+ --include '*.in' \
+ --include '*.jpg' \
+ --include '*.m' \
+ --include '*.m4' \
+ --include '*.pdb' \
+ --include '*.png' \
+ --include '*.po' \
+ --include '*.xml' \
+ --include '*.xpm' \
+ --include 'configure*' \
+ --include '*/' \
+ --exclude '*'
+
diff --git a/README b/README
index 0b55bd1..692c739 100644
--- a/README
+++ b/README
@@ -25,12 +25,12 @@ To compile for a Unix system with X11:
make install
If you are on an "apt"-based system, "apt-get build-dep xscreensaver"
- might install most of the compilation dependencies.
+ might install most of the compilation dependencies. You may need to
+ uncomment a line in /etc/apt/sources.list first.
To compile for macOS X or iOS:
- Use the included XCode project. Requires XCode 6 and macOS 10.8
- or newer.
+ Use the included XCode project. Probably requires XCode 11 or newer.
To compile for Android:
@@ -46,6 +46,22 @@ XScreenSaver has an extensive manual -- please read it!
===============================================================================
+5.45 * New hacks, `covid19', `headroom', `sphereeversion' and `beats'.
+ * Shader updates to `hypertorus'.
+ * No more image-loading pause in `glslideshow'.
+ * BSOD supports GNOME.
+ * Image loaders support SVG.
+ * macOS: Fixed text loading on 10.15.
+ * X11: `xscreensaver-systemd' now allows video players to request that
+ the screen not blank.
+ * X11: -log implies -verbose -no-capture-stderr.
+ * X11: Glade -> GtkBuilder.
+ * Android: These hacks work now: `carousel', `juggler3d', `molecule',
+ `photopile', `polyominoes'.
+ * Various bug fixes.
+
+5.44.1 * macOS: fixed some signing problems in the DMG.
+
5.44 * New hacks, `gibson', `etruscanvenus' and `scooter'.
* BSOD supports Tivo and Nintendo.
* New color options in `romanboy', `projectiveplane', `hypertorus'
diff --git a/README.hacking b/README.hacking
index f2958b4..09147f7 100644
--- a/README.hacking
+++ b/README.hacking
@@ -50,6 +50,11 @@ Requirements for inclusion with the XScreenSaver collection
your name and the current year). The GNU GPL is not compatible with
the rest of XScreenSaver.
+ - No clocks! Just as time travellers always try to kill Hitler on their
+ first trip, everyone seems to think that their first screen saver
+ should be a clock of some kind. Nobody needs to know what time it is
+ with such frequency. Fight The Tyranny Of The Clock.
+
==========================================================================
The XScreenSaver API
@@ -184,6 +189,10 @@ Programming Tips
in long-lived processes where no such cleanup takes place.
Consider Valgrind or gcc -fsanitize=leak to find memory leaks.
+ - Again, don't use global variables. If you are doing your developent
+ under X11, test your saver from the command line with the "-pair"
+ argument. If that crashes, you're using global variables!
+
==========================================================================
macOS, iOS and Android
diff --git a/aclocal.m4 b/aclocal.m4
index d25f855..bebda60 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.16.2 -*- Autoconf -*-
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -701,7 +701,7 @@ AC_DEFUN([AM_NLS],
AC_SUBST([USE_NLS])
])
-# Copyright (C) 2006-2018 Free Software Foundation, Inc.
+# Copyright (C) 2006-2020 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
diff --git a/config.h.in b/config.h.in
index 9f66b48..b725818 100644
--- a/config.h.in
+++ b/config.h.in
@@ -1,7 +1,7 @@
-/* config.h.in. Generated from configure.in by autoheader. */
+/* config.h.in. Generated from configure.ac by autoheader. */
-/* config.h.in --- xscreensaver, Copyright (c) 1991-2014 Jamie Zawinski.
+/* config.h.in --- xscreensaver, Copyright (c) 1991-2020 Jamie Zawinski.
*
* The best way to set these parameters is by running the included `configure'
* script. That examines your system, and generates `config.h' from
@@ -67,9 +67,7 @@
/* Define this if you have the X Double Buffer Extension. */
#undef HAVE_DOUBLE_BUFFER_EXTENSION
-/* Define this if you have the XDPMS extension. This is standard on
- sufficiently-recent XFree86 systems, and possibly elsewhere. (It's
- available if the file /usr/include/X11/extensions/dpms.h exists.) */
+/* Define this if you have the XDPMS extension. */
#undef HAVE_DPMS_EXTENSION
/* Define this if your system is Digital or SCO Unix with so-called ``Enhanced
@@ -126,15 +124,18 @@
/* Define this if you have the -lgle from GLE version 3 */
#undef HAVE_GLE3
+/* Define this if your OpenGL implementation supports the OpenGL Shading
+ Language (GLSL). This requires at least OpenGL 2.0. HAVE_GL should be
+ defined, too. */
+#undef HAVE_GLSL
+
/* Define this if you have Gtk (any version.) */
#undef HAVE_GTK
/* Define this if you have Gtk 2.x. */
#undef HAVE_GTK2
-/* Define this if you are running HPUX with so-called ``Secure Passwords'' (if
- you have /usr/include/hpsecurity.h, you probably have this.) I haven't
- tested this one, let me know if it works. */
+/* Define this if you have HPUX with so-called "Secure Passwords". */
#undef HAVE_HPUX_PASSWD
/* Define this if you do pings with a `struct icmp' and an `icmp_id' slot. */
@@ -192,6 +193,11 @@
have different names.) (HAVE_GL should be defined too.) */
#undef HAVE_MESA_GL
+/* Using the MIT-SCREEN-SAVER extension means that the X server will crash at
+ random times, and fading and hysteresis won't work. Don't use this. You'll
+ be sorry. See comment in xscreensaver.c. */
+#undef HAVE_MIT_SAVER_EXTENSION
+
/* Define this if you have Motif. */
#undef HAVE_MOTIF
@@ -233,17 +239,13 @@
/* Define to 1 if you have the `putenv' function. */
#undef HAVE_PUTENV
-/* Define this if you have the Resize and Rotate extension. This is standard
- on sufficiently-recent XFree86 systems, and possibly elsewhere. (It's
- available if the file /usr/include/X11/extensions/Xrandr.h exists.) */
+/* Define this if you have the Resize and Rotate extension. */
#undef HAVE_RANDR
/* Define this if the RANDR library is version 1.2 or newer. */
#undef HAVE_RANDR_12
-/* Define this if you have the XReadDisplay extension (I think this is an
- SGI-only thing; it's in <X11/extensions/readdisplay.h>.) A few of the
- screenhacks will take advantage of this if it's available. */
+/* Define this if you have the SGI XReadDisplay extension. */
#undef HAVE_READ_DISPLAY_EXTENSION
/* Define to 1 if you have the `realpath' function. */
@@ -267,6 +269,12 @@
/* Define to 1 if you have the `setrlimit' function. */
#undef HAVE_SETRLIMIT
+/* Define this if you have the SGI SCREEN_SAVER extension. */
+#undef HAVE_SGI_SAVER_EXTENSION
+
+/* Define this if you have the SGI-VIDEO-CONTROL extension. */
+#undef HAVE_SGI_VC_EXTENSION
+
/* Define this if your system uses 'shadow' passwords, that is, the passwords
live in /etc/shadow instead of /etc/passwd, and one reads them with
getspnam() instead of getpwnam(). (Note that SCO systems do some random
@@ -340,22 +348,17 @@
/* Define this if you have the functions XF86VidModeGetModeLine() and
XF86VidModeGetViewPort(), in support of virtual desktops where the X
- server's root window is bigger than the actual screen. This is an XFree86
- thing, and probably doesn't exist elsewhere. (It's available if the file
- /usr/include/X11/extensions/xf86vmode.h exists.) */
+ server's root window is bigger than the actual screen. */
#undef HAVE_XF86VMODE
/* Define this if you have the functions XF86VidModeGetGamma() and
XF86VidModeSetGamma(), which allow clients to change the gamma response of
- the monitor. This is an XFree86 4.0.x thing, and probably doesn't exist
- elsewhere. (It's available if the file
- /usr/include/X11/extensions/xf86vmode.h exists and has stuff about gamma in
- it.) */
+ the monitor. */
#undef HAVE_XF86VMODE_GAMMA
/* Define this if you have the functions XF86VidModeGetGammaRamp() and
XF86VidModeSetGammaRamp(), which provide finer-grained control than
- XF86VidMode[GS]etGamma(). These appeared in XFree86 4.1.0. */
+ XF86VidMode[GS]etGamma(). */
#undef HAVE_XF86VMODE_GAMMA_RAMP
/* Define this if you have libXft2. */
@@ -365,14 +368,13 @@
which allows the Ctrl-Sh-Reset key sequence to be temporarily disabled.) */
#undef HAVE_XHPDISABLERESET
-/* Define this if you have the Xinerama extension. This is standard on
- sufficiently-recent XFree86 systems, and possibly elsewhere. (It's
- available if the file /usr/include/X11/extensions/Xinerama.h exists.) */
+/* Define this if you have the X11R5 XIDLE extension. */
+#undef HAVE_XIDLE_EXTENSION
+
+/* Define this if you have the Xinerama extension. */
#undef HAVE_XINERAMA
-/* Define this if you have the Xinput extension. This is standard since X11R5,
- and is thus almost everywhere. (It's available if the file
- /usr/include/X11/extensions/XInput.h exists.) */
+/* Define this if you have the Xinput extension. */
#undef HAVE_XINPUT
/* Define this if you have the XmComboBox Motif widget (Motif 2.0.) */
@@ -394,9 +396,6 @@
/* Define this to remove the option of locking the screen at all. */
#undef NO_LOCKING
-/* This is the same as GETTEXT_PACKAGE, but for the glade generated code. */
-#undef PACKAGE
-
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
diff --git a/configure b/configure
index 68e04e2..e2aead7 100755
--- a/configure
+++ b/configure
@@ -664,8 +664,6 @@ SCRIPTS_OSX
EXES_SYSTEMD
EXES_OSX
OBJCC
-COMMENT_DEMO_GLADE2_GTK_2_22_TAIL
-COMMENT_DEMO_GLADE2_GTK_2_22_HEAD
WITH_BROWSER
DEFAULT_TEXT_FILE
DEFAULT_IMAGE_DIRECTORY
@@ -700,10 +698,13 @@ ALL_DEMO_PROGRAMS
PREFERRED_DEMO_PROGRAM
INCLUDES
setcap_program
+PTHREAD_CFLAGS
+PTHREAD_LIBS
+PTHREAD_CC
+ax_pthread_config
+login_manager_tmp
gnome_url_show_program
gnome_open_program
-pkg_config
-login_manager_tmp
MKINSTALLDIRS
POSUB
POFILES
@@ -753,6 +754,7 @@ INTLTOOL_EXTRACT
INTLTOOL_MERGE
INTLTOOL_UPDATE
USE_NLS
+pkg_config
X_EXTRA_LIBS
X_LIBS
X_PRE_LIBS
@@ -766,10 +768,6 @@ INSTALL_DATA
INSTALL_SCRIPT
INSTALL_PROGRAM
CPP
-PTHREAD_CFLAGS
-PTHREAD_LIBS
-PTHREAD_CC
-ax_pthread_config
OBJEXT
EXEEXT
ac_ct_CC
@@ -827,22 +825,28 @@ SHELL'
ac_subst_files=''
ac_user_opts='
enable_option_checking
-with_x_app_defaults
-with_pthread
enable_largefile
with_x
enable_nls
+with_app_defaults
with_hackdir
enable_subdir
with_configdir
with_dpms_ext
+with_xf86vmode_ext
with_xinerama_ext
+with_randr_ext
with_xinput_ext
-with_xf86vmode_ext
with_xf86gamma_ext
-with_randr_ext
+with_xidle_ext
+with_sgi_ext
+with_sgivc_ext
+with_readdisplay
+with_xshm_ext
+with_xdbe_ext
with_proc_interrupts
with_proc_oom
+with_systemd
enable_locking
enable_root_passwd
with_pam
@@ -851,25 +855,22 @@ enable_pam_check_account_type
with_kerberos
with_shadow
with_passwd_helper
-with_login_manager
with_gtk
with_motif
+with_login_manager
+with_image_directory
+with_text_file
+with_browser
with_gl
with_gle
with_gles
+with_jpeg
with_png
with_pixbuf
-with_jpeg
with_xft
-with_systemd
-with_xshm_ext
-with_xdbe_ext
-with_readdisplay
-with_image_directory
-with_text_file
-with_browser
-with_setuid_hacks
+with_pthread
with_setcap_hacks
+with_setuid_hacks
with_record_animation
'
ac_precious_vars='build_alias
@@ -1511,83 +1512,79 @@ Optional Features:
--disable-largefile omit support for large files
--disable-nls do not use Native Language Support
-Screen locking options:
- --enable-locking Compile in support for locking the display.
- --disable-locking Do not allow locking at all.
-
- --enable-root-passwd Allow root passwd to unlock screen.
- --disable-root-passwd Do not allow that.
- --enable-pam-check-account-type
- Whether PAM should check the result of account
- modules when authenticating. Only do this if you
- have account configured properly on your system.
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
-
- --with-pthread Enables POSIX threads, for SMP support.
--with-x use the X Window System
+Installation Options:
-Installation options:
+ --prefix=PREFIX Install root of architecture-independent files.
+ --exec-prefix=EPREFIX Install root of architecture-dependent files.
+ --with-app-defaults=DIR Where to install the default settings file.
--with-hackdir=DIR Where to install the hundreds of demo executables.
- Default: `PREFIX/libexec/xscreensaver/'
- --with-configdir=DIR Where to install the data files that describe each
- of the display modes to the GUI.
- Default: `PREFIX/share/xscreensaver/config/'
- --with-x-app-defaults=DIR
- Where to install xscreensaver configuration file.
-
- --with-dpms-ext Include support for the DPMS extension.
- --with-xinerama-ext Include support for the XINERAMA extension.
+ --with-configdir=DIR Where to install the GUI configuration files.
+
+Server Extension Options:
+
+ --with-dpms-ext Include support for power management.
+ --with-xf86vmode-ext Include support for virtual screens.
+ --with-xinerama-ext Include support for multiple monitors.
+ --with-randr-ext Include different support for multiple monitors.
--with-xinput-ext Include support for the XInput extension.
- --with-xf86vmode-ext Include support for XFree86 virtual screens.
--with-xf86gamma-ext Include support for XFree86 gamma fading.
- --with-randr-ext Include support for the X Resize+Rotate extension.
+ --with-xidle-ext Include support for the X11R5 XIDLE extension.
+ --with-sgi-ext Include support for the SGI SCREEN_SAVER extension.
+ --with-sgivc-ext Include support for the SGI-VIDEO-CONTROL extension.
+ --with-readdisplay Include support for the SGI XReadDisplay extension.
+ --with-xshm-ext Include support for the Shared Memory extension.
+ --with-xdbe-ext Include support for the DOUBLE-BUFFER extension.
--with-proc-interrupts Include support for consulting the /proc/interrupts
file to notice keyboard activity.
- --with-proc-oom Include support for disabling the OOM-killer.
+ --with-proc-oom Include support for disabling the OOM-killer.
+ --with-systemd Support systemd requests to lock on suspend, and to
+ allow video players to inhibit the screen saver.
+
+Screen Locking Options:
+
+ --disable-locking Do not allow locking of the display at all.
--with-pam Include support for PAM (Pluggable Auth Modules.)
- --with-pam-service-name NAME arg is the name of the PAM service that
- xscreensaver will authenticate as.
+ --with-pam-service-name Set the name of the xscreensaver PAM service.
+ --enable-pam-account Whether PAM should check the result of account
+ modules when authenticating. Only do this if you
+ have "account" modules configured on your system.
+ --enable-root-passwd Allow the root passwd to unlock, if not using PAM.
--with-kerberos Include support for Kerberos authentication.
--with-shadow Include support for shadow password authentication.
--with-passwd-helper Include support for an external password
verification helper program.
- --with-login-manager Put a "New Login" button on the unlock dialog that
- runs a login manager like gdmflexiserver or kdmctl.
-User interface options:
+User Interface Options:
--with-gtk Use the Gtk toolkit for the user interface.
- --with-motif Use the Motif toolkit for the user interface
- (no longer supported.)
+ --with-motif Use the Motif toolkit for the user interface.
+ --with-login-manager Put a "New Login" button on the unlock dialog that
+ runs a login manager like gdmflexiserver or kdmctl.
+ --with-image-directory Some demos will display random images from here.
+ --with-text-file=FILE Some demos will use this as a source of text.
+ --with-browser=BROWSER The web browser used to open the "Help" URL.
-Graphics options:
+Graphics Options:
--with-gl Build those demos which depend on OpenGL.
- --with-gle Build those demos which depend on GLE
- (the OpenGL "extrusion" library.)
+ --with-gle Build those demos which depend on GLE (extrusion).
--with-gles Target OpenGL ES 1.x API instead of OpenGL 1.3.
- --with-png Include support for the PNG library.
- --with-pixbuf Include support for the GDK-Pixbuf library in some
- demos, which will make it possible for them to read
- GIF, JPEG, and PNG files as well.
--with-jpeg Include support for the JPEG library.
+ --with-png Include support for the PNG library.
+ --with-pixbuf Include support for the GDK-Pixbuf library, which
+ allows the display of JPEG, PNG, GIF and SVG images.
--with-xft Include support for the X Freetype library.
- --with-systemd Build xscreensaver-systemd to lock on suspend.
- --with-xshm-ext Include support for the Shared Memory extension.
- --with-xdbe-ext Include support for the DOUBLE-BUFFER extension.
- --with-readdisplay Include support for the XReadDisplay extension.
- --with-image-directory Arg is the default directory from which some demos
- will choose random images to display.
- --with-text-file=FILE By default, some demos may display this file.
- --with-browser=BROWSER Specify the web browser used to show the help URL.
- --with-setuid-hacks Allow some demos to be installed `setuid root'
- (which is needed in order to ping other hosts.)
- --with-setcap-hacks Allow some demos to be installed with setcap
- (which is needed in order to ping other hosts.)
+ --with-pthread Enables POSIX threads, for SMP support.
+ --with-setcap-hacks Build the "sonar" demo with libcap, which allows
+ it to ping other hosts without being setuid.
+ --with-setuid-hacks Install the "sonar" demo as setuid root, which is
+ needed in order to ping other hosts without setcap.
--with-record-animation Include code for generating MP4 videos.
Some influential environment variables:
@@ -1719,52 +1716,6 @@ fi
} # ac_fn_c_try_compile
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- test -x conftest$ac_exeext
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
- # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
- # interfere with the next link command; also delete a directory that is
- # left behind by Apple's compiler. We do this before executing the actions.
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
- as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
# ac_fn_c_try_cpp LINENO
# ----------------------
# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
@@ -2016,6 +1967,52 @@ $as_echo "$ac_res" >&6; }
} # ac_fn_c_check_type
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ test -x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
# ac_fn_c_check_func LINENO FUNC VAR
# ----------------------------------
# Tests whether FUNC exists, setting the cache variable VAR accordingly
@@ -2510,31 +2507,17 @@ echo "command line was: $0 $@"
# This only ever existed in X11R4 and X11R5.
-#AH_TEMPLATE([HAVE_XIDLE_EXTENSION],
-# [Define this if you have the XIDLE extension installed. If you
-# have the XIDLE extension, this is recommended. (You have this
-# extension if the file /usr/include/X11/extensions/xidle.h
-# exists.) Turning on this flag lets XScreenSaver work better with
-# servers which support this extension; but it will still work
-# with servers which do not suport it, so it's a good idea to
-# compile in support for it if you can.])
-
-# Using this extension will crash your X server and make fading not work.
-#AH_TEMPLATE([HAVE_MIT_SAVER_EXTENSION],
-# [Define this if you have the MIT-SCREEN-SAVER extension
-# installed. See the caveats about this extension, above.
-# (It's available if /usr/include/X11/extensions/scrnsaver.h
-# exists.)])
+
+
+
# This only ever existed on SGI hardware.
-#AH_TEMPLATE([HAVE_SGI_SAVER_EXTENSION],
-# [Define this if you have the SGI SCREEN_SAVER extension. This is
-# standard on Irix systems, and not available elsewhere.])
+
# This only ever existed on SGI hardware.
-#AH_TEMPLATE([HAVE_SGI_VC_EXTENSION],
-# [Define this if you have the SGI-VIDEO-CONTROL extension. This
-# is standard on Irix systems, and not available elsewhere.])
+
+
+
@@ -2676,15 +2659,6 @@ done
###############################################################################
#
-# Query AX_PTHREAD, and figure out which compiler gets used.
-#
-###############################################################################
-
-
-
-
-###############################################################################
-#
# Function to figure out how to run the compiler.
#
###############################################################################
@@ -2797,22 +2771,6 @@ perl_version_cmd='print $]'
#
-###############################################################################
-#
-# Handle the --with-x-app-defaults option HERE
-#
-###############################################################################
-
-
-# Check whether --with-x-app-defaults was given.
-if test "${with_x_app_defaults+set}" = set; then :
- withval=$with_x_app_defaults; ac_cv_x_app_defaults="$withval"
-else
- eval ac_x_app_defaults="$withval"
-fi
-
-
-
@@ -2879,7 +2837,6 @@ fi
-
###############################################################################
###############################################################################
#
@@ -2892,7 +2849,6 @@ fi
test "x$prefix" = xNONE && prefix=$ac_default_prefix
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
# random compiler setup
ac_aux_dir=
for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
@@ -3786,586 +3742,6 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-have_pthread=no
- with_pthread_req=unspecified
-
- # AX_PTHREAD is from the GNU Autoconf Archive.
- # https://savannah.gnu.org/projects/autoconf-archive/
- # ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_pthread.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
-#
-# DESCRIPTION
-#
-# This macro figures out how to build C programs using POSIX threads. It
-# sets the PTHREAD_LIBS output variable to the threads library and linker
-# flags, and the PTHREAD_CFLAGS output variable to any special C compiler
-# flags that are needed. (The user can also force certain compiler
-# flags/libs to be tested by setting these environment variables.)
-#
-# Also sets PTHREAD_CC to any special C compiler that is needed for
-# multi-threaded programs (defaults to the value of CC otherwise). (This
-# is necessary on AIX to use the special cc_r compiler alias.)
-#
-# NOTE: You are assumed to not only compile your program with these flags,
-# but also link it with them as well. e.g. you should link with
-# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
-#
-# If you are only building threads programs, you may wish to use these
-# variables in your default LIBS, CFLAGS, and CC:
-#
-# LIBS="$PTHREAD_LIBS $LIBS"
-# CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-# CC="$PTHREAD_CC"
-#
-# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
-# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
-# (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
-#
-# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the
-# PTHREAD_PRIO_INHERIT symbol is defined when compiling with
-# PTHREAD_CFLAGS.
-#
-# ACTION-IF-FOUND is a list of shell commands to run if a threads library
-# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
-# is not found. If ACTION-IF-FOUND is not specified, the default action
-# will define HAVE_PTHREAD.
-#
-# Please let the authors know if this macro fails on any platform, or if
-# you have any other suggestions or comments. This macro was based on work
-# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
-# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
-# Alejandro Forero Cuervo to the autoconf macro repository. We are also
-# grateful for the helpful feedback of numerous users.
-#
-# Updated for Autoconf 2.68 by Daniel Richard G.
-#
-# LICENSE
-#
-# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
-# Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>
-#
-# 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 3 of the License, or (at your
-# option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
-# Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception, the respective Autoconf Macro's copyright owner
-# gives unlimited permission to copy, distribute and modify the configure
-# scripts that are the output of Autoconf when processing the Macro. You
-# need not follow the terms of the GNU General Public License when using
-# or distributing such scripts, even though portions of the text of the
-# Macro appear in them. The GNU General Public License (GPL) does govern
-# all other use of the material that constitutes the Autoconf Macro.
-#
-# This special exception to the GPL applies to versions of the Autoconf
-# Macro released by the Autoconf Archive. When you make and distribute a
-# modified version of the Autoconf Macro, you may extend this special
-# exception to the GPL to apply to your modified version as well.
-
-#serial 21
-
-# This is what autoupdate's m4 run will expand. It fires
-# the warning (with _au_warn_XXX), outputs it into the
-# updated configure.ac (with AC_DIAGNOSE), and then outputs
-# the replacement expansion.
-
-
-# This is an auxiliary macro that is also run when
-# autoupdate runs m4. It simply calls m4_warning, but
-# we need a wrapper so that each warning is emitted only
-# once. We break the quoting in m4_warning's argument in
-# order to expand this macro's arguments, not AU_DEFUN's.
-
-
-# Finally, this is the expansion that is picked up by
-# autoconf. It tells the user to run autoupdate, and
-# then outputs the replacement expansion. We do not care
-# about autoupdate's warning because that contains
-# information on what to do *after* running autoupdate.
-
-
-
- # This affects CC, LIBS, and CFLAGS, instead of defining new variables.
-
-
-# Check whether --with-pthread was given.
-if test "${with_pthread+set}" = set; then :
- withval=$with_pthread; with_pthread="$withval"; with_pthread_req="$withval"
-else
- with_pthread=yes
-fi
-
-
- if test "$with_pthread" = yes; then
- # AX_PTHREAD might want a different compiler.
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ax_pthread_ok=no
-
-# We used to check for pthread.h first, but this fails if pthread.h
-# requires special compiler flags (e.g. on True64 or Sequent).
-# It gets checked for in the link test anyway.
-
-# First of all, check if the user has set any of the PTHREAD_LIBS,
-# etcetera environment variables, and if threads linking works using
-# them:
-if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
- save_LIBS="$LIBS"
- LIBS="$PTHREAD_LIBS $LIBS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5
-$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pthread_join ();
-int
-main ()
-{
-return pthread_join ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ax_pthread_ok=yes
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
-$as_echo "$ax_pthread_ok" >&6; }
- if test x"$ax_pthread_ok" = xno; then
- PTHREAD_LIBS=""
- PTHREAD_CFLAGS=""
- fi
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
-fi
-
-# We must check for the threads library under a number of different
-# names; the ordering is very important because some systems
-# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
-# libraries is broken (non-POSIX).
-
-# Create a list of thread flags to try. Items starting with a "-" are
-# C compiler flags, and other items are library names, except for "none"
-# which indicates that we try without any flags at all, and "pthread-config"
-# which is a program returning the flags for the Pth emulation library.
-
-ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
-
-# The ordering *is* (sometimes) important. Some notes on the
-# individual items follow:
-
-# pthreads: AIX (must check this before -lpthread)
-# none: in case threads are in libc; should be tried before -Kthread and
-# other compiler flags to prevent continual compiler warnings
-# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
-# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
-# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
-# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
-# -pthreads: Solaris/gcc
-# -mthreads: Mingw32/gcc, Lynx/gcc
-# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
-# doesn't hurt to check since this sometimes defines pthreads too;
-# also defines -D_REENTRANT)
-# ... -mt is also the pthreads flag for HP/aCC
-# pthread: Linux, etcetera
-# --thread-safe: KAI C++
-# pthread-config: use pthread-config program (for GNU Pth library)
-
-case ${host_os} in
- solaris*)
-
- # On Solaris (at least, for some versions), libc contains stubbed
- # (non-functional) versions of the pthreads routines, so link-based
- # tests will erroneously succeed. (We need to link with -pthreads/-mt/
- # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
- # a function called by this macro, so we could check for that, but
- # who knows whether they'll stub that too in a future libc.) So,
- # we'll just look for -pthreads and -lpthread first:
-
- ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
- ;;
-
- darwin*)
- ax_pthread_flags="-pthread $ax_pthread_flags"
- ;;
-esac
-
-# Clang doesn't consider unrecognized options an error unless we specify
-# -Werror. We throw in some extra Clang-specific options to ensure that
-# this doesn't happen for GCC, which also accepts -Werror.
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler needs -Werror to reject unknown flags" >&5
-$as_echo_n "checking if compiler needs -Werror to reject unknown flags... " >&6; }
-save_CFLAGS="$CFLAGS"
-ax_pthread_extra_flags="-Werror"
-CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int foo(void);
-int
-main ()
-{
-foo()
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- ax_pthread_extra_flags=
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-CFLAGS="$save_CFLAGS"
-
-if test x"$ax_pthread_ok" = xno; then
-for flag in $ax_pthread_flags; do
-
- case $flag in
- none)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5
-$as_echo_n "checking whether pthreads work without any flags... " >&6; }
- ;;
-
- -*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5
-$as_echo_n "checking whether pthreads work with $flag... " >&6; }
- PTHREAD_CFLAGS="$flag"
- ;;
-
- pthread-config)
- # Extract the first word of "pthread-config", so it can be a program name with args.
-set dummy pthread-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ax_pthread_config+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ax_pthread_config"; then
- ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_ax_pthread_config="yes"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no"
-fi
-fi
-ax_pthread_config=$ac_cv_prog_ax_pthread_config
-if test -n "$ax_pthread_config"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5
-$as_echo "$ax_pthread_config" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- if test x"$ax_pthread_config" = xno; then continue; fi
- PTHREAD_CFLAGS="`pthread-config --cflags`"
- PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
- ;;
-
- *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5
-$as_echo_n "checking for the pthreads library -l$flag... " >&6; }
- PTHREAD_LIBS="-l$flag"
- ;;
- esac
-
- save_LIBS="$LIBS"
- save_CFLAGS="$CFLAGS"
- LIBS="$PTHREAD_LIBS $LIBS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags"
-
- # Check for various functions. We must include pthread.h,
- # since some functions may be macros. (On the Sequent, we
- # need a special flag -Kthread to make this header compile.)
- # We check for pthread_join because it is in -lpthread on IRIX
- # while pthread_create is in libc. We check for pthread_attr_init
- # due to DEC craziness with -lpthreads. We check for
- # pthread_cleanup_push because it is one of the few pthread
- # functions on Solaris that doesn't have a non-functional libc stub.
- # We try pthread_create on general principles.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <pthread.h>
- static void routine(void *a) { a = 0; }
- static void *start_routine(void *a) { return a; }
-int
-main ()
-{
-pthread_t th; pthread_attr_t attr;
- pthread_create(&th, 0, start_routine, 0);
- pthread_join(th, 0);
- pthread_attr_init(&attr);
- pthread_cleanup_push(routine, 0);
- pthread_cleanup_pop(0) /* ; */
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ax_pthread_ok=yes
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
-$as_echo "$ax_pthread_ok" >&6; }
- if test "x$ax_pthread_ok" = xyes; then
- break;
- fi
-
- PTHREAD_LIBS=""
- PTHREAD_CFLAGS=""
-done
-fi
-
-# Various other checks:
-if test "x$ax_pthread_ok" = xyes; then
- save_LIBS="$LIBS"
- LIBS="$PTHREAD_LIBS $LIBS"
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-
- # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
-$as_echo_n "checking for joinable pthread attribute... " >&6; }
- attr_name=unknown
- for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <pthread.h>
-int
-main ()
-{
-int attr = $attr; return attr /* ; */
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- attr_name=$attr; break
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- done
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5
-$as_echo "$attr_name" >&6; }
- if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
-
-cat >>confdefs.h <<_ACEOF
-#define PTHREAD_CREATE_JOINABLE $attr_name
-_ACEOF
-
- fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5
-$as_echo_n "checking if more special flags are required for pthreads... " >&6; }
- flag=no
- case ${host_os} in
- aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
- osf* | hpux*) flag="-D_REENTRANT";;
- solaris*)
- if test "$GCC" = "yes"; then
- flag="-D_REENTRANT"
- else
- # TODO: What about Clang on Solaris?
- flag="-mt -D_REENTRANT"
- fi
- ;;
- esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag" >&5
-$as_echo "$flag" >&6; }
- if test "x$flag" != xno; then
- PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
- fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5
-$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; }
-if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then :
- $as_echo_n "(cached) " >&6
-else
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <pthread.h>
-int
-main ()
-{
-int i = PTHREAD_PRIO_INHERIT;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ax_cv_PTHREAD_PRIO_INHERIT=yes
-else
- ax_cv_PTHREAD_PRIO_INHERIT=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5
-$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; }
- if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"; then :
-
-$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h
-
-fi
-
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
-
- # More AIX lossage: compile with *_r variant
- if test "x$GCC" != xyes; then
- case $host_os in
- aix*)
- case "x/$CC" in #(
- x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) :
- #handle absolute path differently from PATH based program lookup
- case "x$CC" in #(
- x/*) :
- if as_fn_executable_p ${CC}_r; then :
- PTHREAD_CC="${CC}_r"
-fi ;; #(
- *) :
- for ac_prog in ${CC}_r
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_PTHREAD_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$PTHREAD_CC"; then
- ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_PTHREAD_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
-if test -n "$PTHREAD_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5
-$as_echo "$PTHREAD_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$PTHREAD_CC" && break
-done
-test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
- ;;
-esac ;; #(
- *) :
- ;;
-esac
- ;;
- esac
- fi
-fi
-
-test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
-
-
-
-
-
-# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test x"$ax_pthread_ok" = xyes; then
- if test "$CC" = "$PTHREAD_CC" -o -z "$ac_original_cc"; then
- have_pthread=yes
- else
- ac_prog_cc_no_pthread=yes
- fi
-
- :
-else
- ax_pthread_ok=no
-
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
- if test "$have_pthread" = yes; then
- $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
-
- CC=$PTHREAD_CC
- fi
- fi
- # Needs ac_original_cc.
-
-
if test -z "$GCC"; then
# not using GCC
@@ -4699,6 +4075,7 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
if ${ac_cv_c_const+:} false; then :
@@ -6874,90 +6251,6 @@ if test "$have_x" != yes; then
as_fn_error $? "Couldn't find X11 headers/libs. Try \`$0 --help'." "$LINENO" 5
fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X app-defaults directory" >&5
-$as_echo_n "checking for X app-defaults directory... " >&6; }
-if ${ac_cv_x_app_defaults+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- # skip this, it's always wrong these days.
- # AC_PATH_X_APP_DEFAULTS_XMKMF
- if test x"$ac_x_app_defaults" = x; then
- true
- # Look for the directory under a standard set of common directories.
- # Check X11 before X11Rn because it's often a symlink to the current release.
- for ac_dir in \
- \
- /usr/share/X11/app-defaults \
- \
- /usr/X11/lib/app-defaults \
- /usr/X11R6/lib/app-defaults \
- /usr/X11R6/lib/X11/app-defaults \
- /usr/X11R5/lib/app-defaults \
- /usr/X11R5/lib/X11/app-defaults \
- /usr/X11R4/lib/app-defaults \
- /usr/X11R4/lib/X11/app-defaults \
- \
- /usr/lib/X11/app-defaults \
- /usr/lib/X11R6/app-defaults \
- /usr/lib/X11R5/app-defaults \
- /usr/lib/X11R4/app-defaults \
- \
- /etc/X11/app-defaults \
- \
- /usr/local/X11/lib/app-defaults \
- /usr/local/X11R6/lib/app-defaults \
- /usr/local/X11R5/lib/app-defaults \
- /usr/local/X11R4/lib/app-defaults \
- \
- /usr/local/lib/X11/app-defaults \
- /usr/local/lib/X11R6/app-defaults \
- /usr/local/lib/X11R6/X11/app-defaults \
- /usr/local/lib/X11R5/app-defaults \
- /usr/local/lib/X11R5/X11/app-defaults \
- /usr/local/lib/X11R4/app-defaults \
- /usr/local/lib/X11R4/X11/app-defaults \
- \
- /usr/X386/lib/X11/app-defaults \
- /usr/x386/lib/X11/app-defaults \
- /usr/XFree86/lib/X11/app-defaults \
- \
- /usr/lib/X11/app-defaults \
- /usr/local/lib/X11/app-defaults \
- /usr/unsupported/lib/X11/app-defaults \
- /usr/athena/lib/X11/app-defaults \
- /usr/local/x11r5/lib/X11/app-defaults \
- /usr/lpp/Xamples/lib/X11/app-defaults \
- /lib/usr/lib/X11/app-defaults \
- \
- /usr/openwin/lib/app-defaults \
- /usr/openwin/lib/X11/app-defaults \
- /usr/openwin/share/lib/app-defaults \
- /usr/openwin/share/lib/X11/app-defaults \
- \
- /X11R6/lib/app-defaults \
- /X11R5/lib/app-defaults \
- /X11R4/lib/app-defaults \
- ; \
- do
- if test -d "$ac_dir"; then
- ac_x_app_defaults=$ac_dir
- break
- fi
- done
-
- fi
- if test x"$ac_x_app_defaults" = x; then
- /bin/echo -n 'fallback: '
- ac_cv_x_app_defaults="/usr/lib/X11/app-defaults"
- else
- # Record where we found app-defaults for the cache.
- ac_cv_x_app_defaults="$ac_x_app_defaults"
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_x_app_defaults" >&5
-$as_echo "$ac_cv_x_app_defaults" >&6; }
- eval ac_x_app_defaults="$ac_cv_x_app_defaults"
case "$host" in
*-hpux*)
@@ -7163,10 +6456,14 @@ $as_echo "$ac_cv_xpointer" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether this is MacOS X" >&5
$as_echo_n "checking whether this is MacOS X... " >&6; }
ac_macosx=no
+ ac_irix=no
case "$host" in
*-apple-darwin* )
ac_macosx=yes
;;
+ *-irix* )
+ ac_irix=yes
+ ;;
esac
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_macosx" >&5
$as_echo "$ac_macosx" >&6; }
@@ -7174,6 +6471,150 @@ $as_echo "$ac_macosx" >&6; }
###############################################################################
#
+# pkg-config
+#
+###############################################################################
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_pkg_config+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $pkg_config in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_pkg_config="$pkg_config" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_pkg_config="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+pkg_config=$ac_cv_path_pkg_config
+if test -n "$pkg_config"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pkg_config" >&5
+$as_echo "$pkg_config" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_pkg_config"; then
+ ac_pt_pkg_config=$pkg_config
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_pkg_config+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $ac_pt_pkg_config in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_pkg_config="$ac_pt_pkg_config" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_pkg_config="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_pkg_config=$ac_cv_path_ac_pt_pkg_config
+if test -n "$ac_pt_pkg_config"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_pkg_config" >&5
+$as_echo "$ac_pt_pkg_config" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_pt_pkg_config" = x; then
+ pkg_config=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ pkg_config=$ac_pt_pkg_config
+ fi
+else
+ pkg_config="$ac_cv_path_pkg_config"
+fi
+
+
+if test -z "$pkg_config" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pkg-config not found!" >&5
+$as_echo "$as_me: WARNING: pkg-config not found!" >&2;}
+ pkg_config="false"
+fi
+
+
+# Utility function for running pkg-config-based tests...
+#
+pkgs=''
+pkg_check_version() {
+ if test "$ok" = yes ; then
+ req="$1"
+ min="$2"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $req" >&5
+$as_echo_n "checking for $req... " >&6; }
+ if $pkg_config --exists "$req" ; then
+ vers=`$pkg_config --modversion "$req"`
+ if $pkg_config --exists "$req >= $min" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vers" >&5
+$as_echo "$vers" >&6; }
+ pkgs="$pkgs $req"
+ return 1
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vers (wanted >= $min)" >&5
+$as_echo "$vers (wanted >= $min)" >&6; }
+ ok=no
+ return 0
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ok=no
+ return 0
+ fi
+ fi
+}
+
+
+###############################################################################
+#
# Gettext support
#
###############################################################################
@@ -7662,11 +7103,6 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE "$GETTEXT_PACKAGE"
-_ACEOF
-
-
ALL_LINGUAS="da de es et fi fr hu it ja ko nb nl pl pt pt_BR ru sk sv vi wa zh_CN zh_TW"
@@ -8579,6 +8015,107 @@ $as_echo "$ac_cv_ld_static" >&6; }
esac
fi
+###############################################################################
+#
+# The --with-x-app-defaults option
+#
+###############################################################################
+
+#### H1
+
+
+# Check whether --with-app-defaults was given.
+if test "${with_app_defaults+set}" = set; then :
+ withval=$with_app_defaults; ac_cv_x_app_defaults="$withval"
+else
+ eval ac_x_app_defaults="$withval"
+fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X app-defaults directory" >&5
+$as_echo_n "checking for X app-defaults directory... " >&6; }
+if ${ac_cv_x_app_defaults+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # skip this, it's always wrong these days.
+ # AC_PATH_X_APP_DEFAULTS_XMKMF
+ if test x"$ac_x_app_defaults" = x; then
+ true
+ # Look for the directory under a standard set of common directories.
+ # Check X11 before X11Rn because it's often a symlink to the current release.
+ for ac_dir in \
+ \
+ /usr/share/X11/app-defaults \
+ \
+ /usr/X11/lib/app-defaults \
+ /usr/X11R6/lib/app-defaults \
+ /usr/X11R6/lib/X11/app-defaults \
+ /usr/X11R5/lib/app-defaults \
+ /usr/X11R5/lib/X11/app-defaults \
+ /usr/X11R4/lib/app-defaults \
+ /usr/X11R4/lib/X11/app-defaults \
+ \
+ /usr/lib/X11/app-defaults \
+ /usr/lib/X11R6/app-defaults \
+ /usr/lib/X11R5/app-defaults \
+ /usr/lib/X11R4/app-defaults \
+ \
+ /etc/X11/app-defaults \
+ \
+ /usr/local/X11/lib/app-defaults \
+ /usr/local/X11R6/lib/app-defaults \
+ /usr/local/X11R5/lib/app-defaults \
+ /usr/local/X11R4/lib/app-defaults \
+ \
+ /usr/local/lib/X11/app-defaults \
+ /usr/local/lib/X11R6/app-defaults \
+ /usr/local/lib/X11R6/X11/app-defaults \
+ /usr/local/lib/X11R5/app-defaults \
+ /usr/local/lib/X11R5/X11/app-defaults \
+ /usr/local/lib/X11R4/app-defaults \
+ /usr/local/lib/X11R4/X11/app-defaults \
+ \
+ /usr/X386/lib/X11/app-defaults \
+ /usr/x386/lib/X11/app-defaults \
+ /usr/XFree86/lib/X11/app-defaults \
+ \
+ /usr/lib/X11/app-defaults \
+ /usr/local/lib/X11/app-defaults \
+ /usr/unsupported/lib/X11/app-defaults \
+ /usr/athena/lib/X11/app-defaults \
+ /usr/local/x11r5/lib/X11/app-defaults \
+ /usr/lpp/Xamples/lib/X11/app-defaults \
+ /lib/usr/lib/X11/app-defaults \
+ \
+ /usr/openwin/lib/app-defaults \
+ /usr/openwin/lib/X11/app-defaults \
+ /usr/openwin/share/lib/app-defaults \
+ /usr/openwin/share/lib/X11/app-defaults \
+ \
+ /X11R6/lib/app-defaults \
+ /X11R5/lib/app-defaults \
+ /X11R4/lib/app-defaults \
+ ; \
+ do
+ if test -d "$ac_dir"; then
+ ac_x_app_defaults=$ac_dir
+ break
+ fi
+ done
+
+ fi
+ if test x"$ac_x_app_defaults" = x; then
+ /bin/echo -n 'fallback: '
+ ac_cv_x_app_defaults="/usr/lib/X11/app-defaults"
+ else
+ # Record where we found app-defaults for the cache.
+ ac_cv_x_app_defaults="$ac_x_app_defaults"
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_x_app_defaults" >&5
+$as_echo "$ac_cv_x_app_defaults" >&6; }
+ eval ac_x_app_defaults="$ac_cv_x_app_defaults"
+
###############################################################################
#
@@ -8631,7 +8168,6 @@ fi
###############################################################################
#
# Handle the --with-configdir option
-# Help for --with-x-app-defaults option added.
#
###############################################################################
@@ -8664,116 +8200,14 @@ fi
-
-###############################################################################
-#
-# Check for the SGI SCREEN_SAVER server extension.
-#
-###############################################################################
-
-#have_sgi=no
-#with_sgi_req=unspecified
-#AC_ARG_WITH(sgi-ext,
-#[Except where noted, all of the --with options below can also take a
-#directory argument: for example, `--with-motif=/opt/Motif'. That would
-#cause /opt/Motif/include/ to be added to the -I list, and /opt/Motif/lib/
-#to be added to the -L list, assuming those directories exist.
-#
-#By default, support for each of these options will be built in, if the
-#relevant library routines exist. At run time, they will then be used
-#only if the X server being used supports them. Each --with option has
-#a corresponding --without option, to override building support for them
-#at all.
-#
-#Screen blanking and idle-detection options:
-#
-# --with-sgi-ext Include support for the SGI SCREEN_SAVER extension.],
-# [with_sgi="$withval"; with_sgi_req="$withval"],[with_sgi=yes])
-#
-#HANDLE_X_PATH_ARG(with_sgi, --with-sgi-ext, SGI SCREEN_SAVER)
-#
-#if test "$with_sgi" = yes; then
-# AC_CHECK_X_HEADER(X11/extensions/XScreenSaver.h,
-# [have_sgi=yes
-# AC_DEFINE(HAVE_SGI_SAVER_EXTENSION)],,
-# [#include <X11/Xlib.h>])
-#
-#elif test "$with_sgi" != no; then
-# echo "error: must be yes or no: --with-sgi-ext=$with_sgi"
-# exit 1
-#fi
-
-
-###############################################################################
-#
-# Check for the XIDLE server extension.
-#
-###############################################################################
-
-#have_xidle=no
-#with_xidle_req=unspecified
-#AC_ARG_WITH(xidle-ext,
-#[ --with-xidle-ext Include support for the XIDLE extension.],
-# [with_xidle="$withval"; with_xidle_req="$withval"],[with_xidle=yes])
-#
-#HANDLE_X_PATH_ARG(with_xidle, --with-xidle-ext, XIDLE)
-#
-#if test "$with_xidle" = yes; then
-# AC_CHECK_X_HEADER(X11/extensions/xidle.h,
-# [have_xidle=yes
-# AC_DEFINE(HAVE_XIDLE_EXTENSION)],,
-# [#include <X11/Xlib.h>])
-#elif test "$with_xidle" != no; then
-# echo "error: must be yes or no: --with-xidle-ext=$with_xidle"
-# exit 1
-#fi
-
-
-###############################################################################
-#
-# Check for the SGI-VIDEO-CONTROL server extension.
-#
-###############################################################################
-
-#have_sgivc=no
-#with_sgivc_req=unspecified
-#AC_ARG_WITH(sgivc-ext,
-#[ --with-sgivc-ext Include support for the SGI-VIDEO-CONTROL extension.],
-# [with_sgivc="$withval"; with_sgivc_req="$withval"],[with_sgivc=yes])
-#
-#HANDLE_X_PATH_ARG(with_sgivc, --with-sgivc-ext, SGI-VIDEO-CONTROL)
-#
-#if test "$with_sgivc" = yes; then
-#
-# # first check for XSGIvc.h
-# AC_CHECK_X_HEADER(X11/extensions/XSGIvc.h, [have_sgivc=yes],,
-# [#include <X11/Xlib.h>])
-#
-# # if that succeeded, then check for the -lXsgivc
-# if test "$have_sgivc" = yes; then
-# have_sgivc=no
-# AC_CHECK_X_LIB(Xsgivc, XSGIvcQueryGammaMap,
-# [have_sgivc=yes; SAVER_LIBS="$SAVER_LIBS -lXsgivc"], [true],
-# -lXext -lX11)
-# fi
-#
-# # if that succeeded, then we've really got it.
-# if test "$have_sgivc" = yes; then
-# AC_DEFINE(HAVE_SGI_VC_EXTENSION)
-# fi
-#
-#elif test "$with_sgivc" != no; then
-# echo "error: must be yes or no: --with-sgivc-ext=$with_sgivc"
-# exit 1
-#fi
-
-
###############################################################################
#
# Check for the DPMS server extension.
#
###############################################################################
+#### H1
+
have_dpms=no
with_dpms_req=unspecified
@@ -9006,6 +8440,173 @@ fi
###############################################################################
#
+# Check for the XF86VMODE server extension (for virtual screens.)
+#
+###############################################################################
+
+have_xf86vmode=no
+with_xf86vmode_req=unspecified
+
+# Check whether --with-xf86vmode-ext was given.
+if test "${with_xf86vmode_ext+set}" = set; then :
+ withval=$with_xf86vmode_ext; with_xf86vmode="$withval"; with_xf86vmode_req="$withval"
+else
+ with_xf86vmode=yes
+fi
+
+
+
+ case "$with_xf86vmode" in
+ yes) ;;
+ no) ;;
+
+ /*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xf86vmode headers" >&5
+$as_echo_n "checking for xf86vmode headers... " >&6; }
+ d=$with_xf86vmode/include
+ if test -d $d; then
+ X_CFLAGS="-I$d $X_CFLAGS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xf86vmode libs" >&5
+$as_echo_n "checking for xf86vmode libs... " >&6; }
+ d=$with_xf86vmode/lib
+ if test -d $d; then
+ X_LIBS="-L$d $X_LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ # replace the directory string with "yes".
+ with_xf86vmode_req="yes"
+ with_xf86vmode=$with_xf86vmode_req
+ ;;
+
+ *)
+ echo ""
+ echo "error: argument to --with-xf86vmode-ext must be \"yes\", \"no\", or a directory."
+ echo " If it is a directory, then \`DIR/include' will be added to"
+ echo " the -I list, and \`DIR/lib' will be added to the -L list."
+ exit 1
+ ;;
+ esac
+
+
+VIDMODE_LIBS=""
+
+if test "$with_xf86vmode" = yes; then
+
+ # first check for xf86vmode.h
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ ac_fn_c_check_header_compile "$LINENO" "X11/extensions/xf86vmode.h" "ac_cv_header_X11_extensions_xf86vmode_h" "#include <X11/Xlib.h>
+"
+if test "x$ac_cv_header_X11_extensions_xf86vmode_h" = xyes; then :
+ have_xf86vmode=yes
+fi
+
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+
+ # if that succeeded, then check for the -lXxf86vm
+ if test "$have_xf86vmode" = yes; then
+ have_xf86vmode=no
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ ac_save_LDFLAGS="$LDFLAGS"
+# ac_save_LIBS="$LIBS"
+
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ # note: $X_CFLAGS includes $x_includes
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+ if test \! -z "$libdir" ; then
+ LDFLAGS="$LDFLAGS -L$libdir"
+ fi
+ # note: $X_LIBS includes $x_libraries
+ LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
+
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XF86VidModeGetViewPort in -lXxf86vm" >&5
+$as_echo_n "checking for XF86VidModeGetViewPort in -lXxf86vm... " >&6; }
+if ${ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lXxf86vm -lXext -lX11 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char XF86VidModeGetViewPort ();
+int
+main ()
+{
+return XF86VidModeGetViewPort ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort=yes
+else
+ ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort" >&5
+$as_echo "$ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort" >&6; }
+if test "x$ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort" = xyes; then :
+ have_xf86vmode=yes;
+ VIDMODE_LIBS="-lXxf86vm";
+ SAVER_LIBS="$SAVER_LIBS $VIDMODE_LIBS"
+else
+ true
+fi
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LDFLAGS="$ac_save_LDFLAGS"
+# LIBS="$ac_save_LIBS"
+
+ fi
+
+ # if that succeeded, then we've really got it.
+ if test "$have_xf86vmode" = yes; then
+ $as_echo "#define HAVE_XF86VMODE 1" >>confdefs.h
+
+ fi
+
+elif test "$with_xf86vmode" != no; then
+ echo "error: must be yes or no: --with-xf86vmode-ext=$with_xf86vmode"
+ exit 1
+fi
+
+
+###############################################################################
+#
# Check for the XINERAMA server extension.
#
###############################################################################
@@ -9091,7 +8692,7 @@ if ${ac_cv_lib_Xss_XScreenSaverQueryInfo+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXss -lXss -lX11 $LIBS"
+LIBS="-lXss -lXss -lXext -lX11 $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -9307,30 +8908,34 @@ fi
###############################################################################
#
-# Check for the XINPUT server extension.
+# Check for the RANDR (Resize and Rotate) server extension.
+#
+# We need this to detect when the resolution of the desktop
+# has changed out from under us (this is a newer, different
+# mechanism than the XF86VMODE virtual viewports.)
#
###############################################################################
-have_xinput=no
-with_xinput_req=unspecified
+have_randr=no
+with_randr_req=unspecified
-# Check whether --with-xinput-ext was given.
-if test "${with_xinput_ext+set}" = set; then :
- withval=$with_xinput_ext; with_xinput="$withval"; with_xinput_req="$withval"
+# Check whether --with-randr-ext was given.
+if test "${with_randr_ext+set}" = set; then :
+ withval=$with_randr_ext; with_randr="$withval"; with_randr_req="$withval"
else
- with_xinput=yes
+ with_randr=yes
fi
- case "$with_xinput" in
+ case "$with_randr" in
yes) ;;
no) ;;
/*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XINPUT headers" >&5
-$as_echo_n "checking for XINPUT headers... " >&6; }
- d=$with_xinput/include
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for RANDR headers" >&5
+$as_echo_n "checking for RANDR headers... " >&6; }
+ d=$with_randr/include
if test -d $d; then
X_CFLAGS="-I$d $X_CFLAGS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
@@ -9340,9 +8945,9 @@ $as_echo "$d" >&6; }
$as_echo "not found ($d: no such directory)" >&6; }
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XINPUT libs" >&5
-$as_echo_n "checking for XINPUT libs... " >&6; }
- d=$with_xinput/lib
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for RANDR libs" >&5
+$as_echo_n "checking for RANDR libs... " >&6; }
+ d=$with_randr/lib
if test -d $d; then
X_LIBS="-L$d $X_LIBS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
@@ -9353,13 +8958,13 @@ $as_echo "not found ($d: no such directory)" >&6; }
fi
# replace the directory string with "yes".
- with_xinput_req="yes"
- with_xinput=$with_xinput_req
+ with_randr_req="yes"
+ with_randr=$with_randr_req
;;
*)
echo ""
- echo "error: argument to --with-xinput-ext must be \"yes\", \"no\", or a directory."
+ echo "error: argument to --with-randr-ext must be \"yes\", \"no\", or a directory."
echo " If it is a directory, then \`DIR/include' will be added to"
echo " the -I list, and \`DIR/lib' will be added to the -L list."
exit 1
@@ -9367,9 +8972,9 @@ $as_echo "not found ($d: no such directory)" >&6; }
esac
-if test "$with_xinput" = yes; then
+if test "$with_randr" = yes; then
- # first check for Xinput.h
+ # first check for Xrandr.h
ac_save_CPPFLAGS="$CPPFLAGS"
if test \! -z "$includedir" ; then
@@ -9377,18 +8982,20 @@ if test "$with_xinput" = yes; then
fi
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
- ac_fn_c_check_header_compile "$LINENO" "X11/extensions/XInput.h" "ac_cv_header_X11_extensions_XInput_h" "#include <X11/Xlib.h>
+ ac_fn_c_check_header_compile "$LINENO" "X11/extensions/Xrandr.h" "ac_cv_header_X11_extensions_Xrandr_h" "#include <X11/Xlib.h>
"
-if test "x$ac_cv_header_X11_extensions_XInput_h" = xyes; then :
- have_xinput=yes
+if test "x$ac_cv_header_X11_extensions_Xrandr_h" = xyes; then :
+ have_randr=yes
fi
CPPFLAGS="$ac_save_CPPFLAGS"
- # if that succeeded, then check for libXi
- if test "$have_xinput" = yes; then
- have_xinput=no
+ # if that succeeded, then check for the XRR code in the libraries
+ if test "$have_randr" = yes; then
+
+ # RANDR probably needs -lXrender
+ xrender_libs=
ac_save_CPPFLAGS="$CPPFLAGS"
ac_save_LDFLAGS="$LDFLAGS"
@@ -9408,13 +9015,13 @@ fi
CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XListInputDevices in -lXi" >&5
-$as_echo_n "checking for XListInputDevices in -lXi... " >&6; }
-if ${ac_cv_lib_Xi_XListInputDevices+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRenderSetSubpixelOrder in -lXrender" >&5
+$as_echo_n "checking for XRenderSetSubpixelOrder in -lXrender... " >&6; }
+if ${ac_cv_lib_Xrender_XRenderSetSubpixelOrder+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXi -lXext -lX11 $LIBS"
+LIBS="-lXrender -lXext -lX11 $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -9424,28 +9031,96 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
-char XListInputDevices ();
+char XRenderSetSubpixelOrder ();
int
main ()
{
-return XListInputDevices ();
+return XRenderSetSubpixelOrder ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_Xi_XListInputDevices=yes
+ ac_cv_lib_Xrender_XRenderSetSubpixelOrder=yes
else
- ac_cv_lib_Xi_XListInputDevices=no
+ ac_cv_lib_Xrender_XRenderSetSubpixelOrder=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xi_XListInputDevices" >&5
-$as_echo "$ac_cv_lib_Xi_XListInputDevices" >&6; }
-if test "x$ac_cv_lib_Xi_XListInputDevices" = xyes; then :
- have_xinput=yes; SAVER_LIBS="$SAVER_LIBS -lXi"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xrender_XRenderSetSubpixelOrder" >&5
+$as_echo "$ac_cv_lib_Xrender_XRenderSetSubpixelOrder" >&6; }
+if test "x$ac_cv_lib_Xrender_XRenderSetSubpixelOrder" = xyes; then :
+ xrender_libs="-lXrender"
+else
+ true
+fi
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LDFLAGS="$ac_save_LDFLAGS"
+# LIBS="$ac_save_LIBS"
+
+
+ # first look for RANDR in -lXext
+ have_randr=no
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ ac_save_LDFLAGS="$LDFLAGS"
+# ac_save_LIBS="$LIBS"
+
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ # note: $X_CFLAGS includes $x_includes
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+ if test \! -z "$libdir" ; then
+ LDFLAGS="$LDFLAGS -L$libdir"
+ fi
+ # note: $X_LIBS includes $x_libraries
+ LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
+
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRRGetScreenInfo in -lXext" >&5
+$as_echo_n "checking for XRRGetScreenInfo in -lXext... " >&6; }
+if ${ac_cv_lib_Xext_XRRGetScreenInfo+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lXext $xrender_libs -lXext -lX11 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char XRRGetScreenInfo ();
+int
+main ()
+{
+return XRRGetScreenInfo ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_Xext_XRRGetScreenInfo=yes
+else
+ ac_cv_lib_Xext_XRRGetScreenInfo=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XRRGetScreenInfo" >&5
+$as_echo "$ac_cv_lib_Xext_XRRGetScreenInfo" >&6; }
+if test "x$ac_cv_lib_Xext_XRRGetScreenInfo" = xyes; then :
+ have_randr=yes; SAVER_LIBS="$SAVER_LIBS $xrender_libs"
else
true
fi
@@ -9454,46 +9129,244 @@ fi
LDFLAGS="$ac_save_LDFLAGS"
# LIBS="$ac_save_LIBS"
+
+ # if that failed, look in -lXrandr
+ if test "$have_randr" = no; then
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ ac_save_LDFLAGS="$LDFLAGS"
+# ac_save_LIBS="$LIBS"
+
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ # note: $X_CFLAGS includes $x_includes
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+ if test \! -z "$libdir" ; then
+ LDFLAGS="$LDFLAGS -L$libdir"
+ fi
+ # note: $X_LIBS includes $x_libraries
+ LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
+
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRRGetScreenInfo in -lXrandr" >&5
+$as_echo_n "checking for XRRGetScreenInfo in -lXrandr... " >&6; }
+if ${ac_cv_lib_Xrandr_XRRGetScreenInfo+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lXrandr $xrender_libs -lXext -lX11 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char XRRGetScreenInfo ();
+int
+main ()
+{
+return XRRGetScreenInfo ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_Xrandr_XRRGetScreenInfo=yes
+else
+ ac_cv_lib_Xrandr_XRRGetScreenInfo=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xrandr_XRRGetScreenInfo" >&5
+$as_echo "$ac_cv_lib_Xrandr_XRRGetScreenInfo" >&6; }
+if test "x$ac_cv_lib_Xrandr_XRRGetScreenInfo" = xyes; then :
+ have_randr=yes; SAVER_LIBS="$SAVER_LIBS -lXrandr $xrender_libs"
+else
+ true
+fi
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LDFLAGS="$ac_save_LDFLAGS"
+# LIBS="$ac_save_LIBS"
+
+ fi
fi
# if that succeeded, then we've really got it.
- if test "$have_xinput" = yes; then
- $as_echo "#define HAVE_XINPUT 1" >>confdefs.h
+ if test "$have_randr" = yes; then
+ $as_echo "#define HAVE_RANDR 1" >>confdefs.h
+
+
+ # Now check for version 1.2 in the same libs.
+ # Try to compile, since on MacOS 10.5.7, headers are older than libs!
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRRGetScreenResources" >&5
+$as_echo_n "checking for XRRGetScreenResources... " >&6; }
+if ${ac_cv_randr_12+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_randr_12=no
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+ #include <X11/Xlib.h>
+ #include <X11/extensions/Xrandr.h>
+int
+main ()
+{
+XRRScreenResources *res =
+ XRRGetScreenResources (0, 0);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_randr_12=yes
+else
+ ac_cv_randr_12=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CPPFLAGS="$ac_save_CPPFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_randr_12" >&5
+$as_echo "$ac_cv_randr_12" >&6; }
+ if test "$ac_cv_randr_12" = yes ; then
+ $as_echo "#define HAVE_RANDR_12 1" >>confdefs.h
+ fi
+# AC_CHECK_X_LIB(c, XRRGetOutputInfo, [AC_DEFINE(HAVE_RANDR_12)],
+# [true], $SAVER_LIBS)
fi
-elif test "$with_xinput" != no; then
- echo "error: must be yes or no: --with-xinput-ext=$with_xinput"
+
+elif test "$with_randr" != no; then
+ echo "error: must be yes or no: --with-randr-ext=$with_randr"
exit 1
fi
###############################################################################
#
-# Check for the XF86VMODE server extension (for virtual screens.)
+# Check for XF86MiscSetGrabKeysState (but only bother if we are already
+# using other XF86 stuff.)
#
###############################################################################
-have_xf86vmode=no
-with_xf86vmode_req=unspecified
+have_xf86miscsetgrabkeysstate=no
+if test "$have_xf86gamma" = yes -o "$have_xf86vmode" = yes; then
-# Check whether --with-xf86vmode-ext was given.
-if test "${with_xf86vmode_ext+set}" = set; then :
- withval=$with_xf86vmode_ext; with_xf86vmode="$withval"; with_xf86vmode_req="$withval"
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ ac_save_LDFLAGS="$LDFLAGS"
+# ac_save_LIBS="$LIBS"
+
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ # note: $X_CFLAGS includes $x_includes
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+ if test \! -z "$libdir" ; then
+ LDFLAGS="$LDFLAGS -L$libdir"
+ fi
+ # note: $X_LIBS includes $x_libraries
+ LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
+
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XF86MiscSetGrabKeysState in -lXxf86misc" >&5
+$as_echo_n "checking for XF86MiscSetGrabKeysState in -lXxf86misc... " >&6; }
+if ${ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- with_xf86vmode=yes
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lXxf86misc -lXext -lX11 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char XF86MiscSetGrabKeysState ();
+int
+main ()
+{
+return XF86MiscSetGrabKeysState ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState=yes
+else
+ ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState=no
fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState" >&5
+$as_echo "$ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState" >&6; }
+if test "x$ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState" = xyes; then :
+ have_xf86miscsetgrabkeysstate=yes
+else
+ true
+fi
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LDFLAGS="$ac_save_LDFLAGS"
+# LIBS="$ac_save_LIBS"
+
+ if test "$have_xf86miscsetgrabkeysstate" = yes ; then
+ SAVER_LIBS="$SAVER_LIBS -lXxf86misc"
+ $as_echo "#define HAVE_XF86MISCSETGRABKEYSSTATE 1" >>confdefs.h
+ fi
+fi
- case "$with_xf86vmode" in
+###############################################################################
+#
+# Check for the XINPUT server extension.
+#
+###############################################################################
+
+have_xinput=no
+with_xinput_req=unspecified
+
+# Check whether --with-xinput-ext was given.
+if test "${with_xinput_ext+set}" = set; then :
+ withval=$with_xinput_ext; with_xinput="$withval"; with_xinput_req="$withval"
+else
+ with_xinput=yes
+fi
+
+
+
+ case "$with_xinput" in
yes) ;;
no) ;;
/*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xf86vmode headers" >&5
-$as_echo_n "checking for xf86vmode headers... " >&6; }
- d=$with_xf86vmode/include
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XINPUT headers" >&5
+$as_echo_n "checking for XINPUT headers... " >&6; }
+ d=$with_xinput/include
if test -d $d; then
X_CFLAGS="-I$d $X_CFLAGS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
@@ -9503,9 +9376,9 @@ $as_echo "$d" >&6; }
$as_echo "not found ($d: no such directory)" >&6; }
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xf86vmode libs" >&5
-$as_echo_n "checking for xf86vmode libs... " >&6; }
- d=$with_xf86vmode/lib
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XINPUT libs" >&5
+$as_echo_n "checking for XINPUT libs... " >&6; }
+ d=$with_xinput/lib
if test -d $d; then
X_LIBS="-L$d $X_LIBS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
@@ -9516,13 +9389,13 @@ $as_echo "not found ($d: no such directory)" >&6; }
fi
# replace the directory string with "yes".
- with_xf86vmode_req="yes"
- with_xf86vmode=$with_xf86vmode_req
+ with_xinput_req="yes"
+ with_xinput=$with_xinput_req
;;
*)
echo ""
- echo "error: argument to --with-xf86vmode-ext must be \"yes\", \"no\", or a directory."
+ echo "error: argument to --with-xinput-ext must be \"yes\", \"no\", or a directory."
echo " If it is a directory, then \`DIR/include' will be added to"
echo " the -I list, and \`DIR/lib' will be added to the -L list."
exit 1
@@ -9530,11 +9403,9 @@ $as_echo "not found ($d: no such directory)" >&6; }
esac
-VIDMODE_LIBS=""
-
-if test "$with_xf86vmode" = yes; then
+if test "$with_xinput" = yes; then
- # first check for xf86vmode.h
+ # first check for Xinput.h
ac_save_CPPFLAGS="$CPPFLAGS"
if test \! -z "$includedir" ; then
@@ -9542,18 +9413,18 @@ if test "$with_xf86vmode" = yes; then
fi
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
- ac_fn_c_check_header_compile "$LINENO" "X11/extensions/xf86vmode.h" "ac_cv_header_X11_extensions_xf86vmode_h" "#include <X11/Xlib.h>
+ ac_fn_c_check_header_compile "$LINENO" "X11/extensions/XInput.h" "ac_cv_header_X11_extensions_XInput_h" "#include <X11/Xlib.h>
"
-if test "x$ac_cv_header_X11_extensions_xf86vmode_h" = xyes; then :
- have_xf86vmode=yes
+if test "x$ac_cv_header_X11_extensions_XInput_h" = xyes; then :
+ have_xinput=yes
fi
CPPFLAGS="$ac_save_CPPFLAGS"
- # if that succeeded, then check for the -lXxf86vm
- if test "$have_xf86vmode" = yes; then
- have_xf86vmode=no
+ # if that succeeded, then check for libXi
+ if test "$have_xinput" = yes; then
+ have_xinput=no
ac_save_CPPFLAGS="$CPPFLAGS"
ac_save_LDFLAGS="$LDFLAGS"
@@ -9573,13 +9444,13 @@ fi
CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XF86VidModeGetViewPort in -lXxf86vm" >&5
-$as_echo_n "checking for XF86VidModeGetViewPort in -lXxf86vm... " >&6; }
-if ${ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XListInputDevices in -lXi" >&5
+$as_echo_n "checking for XListInputDevices in -lXi... " >&6; }
+if ${ac_cv_lib_Xi_XListInputDevices+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXxf86vm -lXext -lX11 $LIBS"
+LIBS="-lXi -lXext -lX11 $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -9589,30 +9460,28 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
-char XF86VidModeGetViewPort ();
+char XListInputDevices ();
int
main ()
{
-return XF86VidModeGetViewPort ();
+return XListInputDevices ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort=yes
+ ac_cv_lib_Xi_XListInputDevices=yes
else
- ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort=no
+ ac_cv_lib_Xi_XListInputDevices=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort" >&5
-$as_echo "$ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort" >&6; }
-if test "x$ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort" = xyes; then :
- have_xf86vmode=yes;
- VIDMODE_LIBS="-lXxf86vm";
- SAVER_LIBS="$SAVER_LIBS $VIDMODE_LIBS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xi_XListInputDevices" >&5
+$as_echo "$ac_cv_lib_Xi_XListInputDevices" >&6; }
+if test "x$ac_cv_lib_Xi_XListInputDevices" = xyes; then :
+ have_xinput=yes; SAVER_LIBS="$SAVER_LIBS -lXi"
else
true
fi
@@ -9624,13 +9493,13 @@ fi
fi
# if that succeeded, then we've really got it.
- if test "$have_xf86vmode" = yes; then
- $as_echo "#define HAVE_XF86VMODE 1" >>confdefs.h
+ if test "$have_xinput" = yes; then
+ $as_echo "#define HAVE_XINPUT 1" >>confdefs.h
fi
-elif test "$with_xf86vmode" != no; then
- echo "error: must be yes or no: --with-xf86vmode-ext=$with_xf86vmode"
+elif test "$with_xinput" != no; then
+ echo "error: must be yes or no: --with-xinput-ext=$with_xinput"
exit 1
fi
@@ -9885,34 +9754,30 @@ fi
###############################################################################
#
-# Check for the RANDR (Resize and Rotate) server extension.
-#
-# We need this to detect when the resolution of the desktop
-# has changed out from under us (this is a newer, different
-# mechanism than the XF86VMODE virtual viewports.)
+# Check for the XIDLE server extension.
#
###############################################################################
-have_randr=no
-with_randr_req=unspecified
+have_xidle=no
+with_xidle_req=unspecified
-# Check whether --with-randr-ext was given.
-if test "${with_randr_ext+set}" = set; then :
- withval=$with_randr_ext; with_randr="$withval"; with_randr_req="$withval"
+# Check whether --with-xidle-ext was given.
+if test "${with_xidle_ext+set}" = set; then :
+ withval=$with_xidle_ext; with_xidle="$withval"; with_xidle_req="$withval"
else
- with_randr=yes
+ with_xidle=yes
fi
- case "$with_randr" in
+ case "$with_xidle" in
yes) ;;
no) ;;
/*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for RANDR headers" >&5
-$as_echo_n "checking for RANDR headers... " >&6; }
- d=$with_randr/include
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XIDLE headers" >&5
+$as_echo_n "checking for XIDLE headers... " >&6; }
+ d=$with_xidle/include
if test -d $d; then
X_CFLAGS="-I$d $X_CFLAGS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
@@ -9922,9 +9787,9 @@ $as_echo "$d" >&6; }
$as_echo "not found ($d: no such directory)" >&6; }
fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for RANDR libs" >&5
-$as_echo_n "checking for RANDR libs... " >&6; }
- d=$with_randr/lib
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XIDLE libs" >&5
+$as_echo_n "checking for XIDLE libs... " >&6; }
+ d=$with_xidle/lib
if test -d $d; then
X_LIBS="-L$d $X_LIBS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
@@ -9935,13 +9800,13 @@ $as_echo "not found ($d: no such directory)" >&6; }
fi
# replace the directory string with "yes".
- with_randr_req="yes"
- with_randr=$with_randr_req
+ with_xidle_req="yes"
+ with_xidle=$with_xidle_req
;;
*)
echo ""
- echo "error: argument to --with-randr-ext must be \"yes\", \"no\", or a directory."
+ echo "error: argument to --with-xidle-ext must be \"yes\", \"no\", or a directory."
echo " If it is a directory, then \`DIR/include' will be added to"
echo " the -I list, and \`DIR/lib' will be added to the -L list."
exit 1
@@ -9949,9 +9814,7 @@ $as_echo "not found ($d: no such directory)" >&6; }
esac
-if test "$with_randr" = yes; then
-
- # first check for Xrandr.h
+if test "$with_xidle" = yes; then
ac_save_CPPFLAGS="$CPPFLAGS"
if test \! -z "$includedir" ; then
@@ -9959,20 +9822,57 @@ if test "$with_randr" = yes; then
fi
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
- ac_fn_c_check_header_compile "$LINENO" "X11/extensions/Xrandr.h" "ac_cv_header_X11_extensions_Xrandr_h" "#include <X11/Xlib.h>
+ ac_fn_c_check_header_compile "$LINENO" "X11/extensions/xidle.h" "ac_cv_header_X11_extensions_xidle_h" "#include <X11/Xlib.h>
"
-if test "x$ac_cv_header_X11_extensions_Xrandr_h" = xyes; then :
- have_randr=yes
+if test "x$ac_cv_header_X11_extensions_xidle_h" = xyes; then :
+ have_xidle=yes
+ $as_echo "#define HAVE_XIDLE_EXTENSION 1" >>confdefs.h
+
fi
CPPFLAGS="$ac_save_CPPFLAGS"
+elif test "$with_xidle" != no; then
+ echo "error: must be yes or no: --with-xidle-ext=$with_xidle"
+ exit 1
+fi
- # if that succeeded, then check for the XRR code in the libraries
- if test "$have_randr" = yes; then
- # RANDR probably needs -lXrender
- xrender_libs=
+###############################################################################
+#
+# Check for the MIT-SCREEN-SAVER server extension.
+#
+###############################################################################
+
+have_mit=no
+with_mit=no
+with_mit_req=unspecified
+#AC_ARG_WITH(mit-ext,
+#[ --with-mit-ext Include support for the MIT-SCREEN-SAVER extension.],
+# [with_mit="$withval"; with_mit_req="$withval"],[with_mit=no])
+#HANDLE_X_PATH_ARG(with_mit, --with-mit-ext, MIT-SCREEN-SAVER)
+
+if test "$with_mit" = yes; then
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ ac_fn_c_check_header_compile "$LINENO" "X11/extensions/scrnsaver.h" "ac_cv_header_X11_extensions_scrnsaver_h" "#include <X11/Xlib.h>
+"
+if test "x$ac_cv_header_X11_extensions_scrnsaver_h" = xyes; then :
+ have_mit=yes
+fi
+
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+
+ # Now check to see if it's really in the library; XF86Free-3.3 ships
+ # scrnsaver.h, but doesn't include the code in libXext.a, the idiots!
+ #
+ if test "$have_mit" = yes; then
ac_save_CPPFLAGS="$CPPFLAGS"
ac_save_LDFLAGS="$LDFLAGS"
@@ -9992,13 +9892,13 @@ fi
CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRenderSetSubpixelOrder in -lXrender" >&5
-$as_echo_n "checking for XRenderSetSubpixelOrder in -lXrender... " >&6; }
-if ${ac_cv_lib_Xrender_XRenderSetSubpixelOrder+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XScreenSaverRegister in -lXext" >&5
+$as_echo_n "checking for XScreenSaverRegister in -lXext... " >&6; }
+if ${ac_cv_lib_Xext_XScreenSaverRegister+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXrender -lXext -lX11 $LIBS"
+LIBS="-lXext -lm $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -10008,30 +9908,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
-char XRenderSetSubpixelOrder ();
+char XScreenSaverRegister ();
int
main ()
{
-return XRenderSetSubpixelOrder ();
+return XScreenSaverRegister ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_Xrender_XRenderSetSubpixelOrder=yes
+ ac_cv_lib_Xext_XScreenSaverRegister=yes
else
- ac_cv_lib_Xrender_XRenderSetSubpixelOrder=no
+ ac_cv_lib_Xext_XScreenSaverRegister=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xrender_XRenderSetSubpixelOrder" >&5
-$as_echo "$ac_cv_lib_Xrender_XRenderSetSubpixelOrder" >&6; }
-if test "x$ac_cv_lib_Xrender_XRenderSetSubpixelOrder" = xyes; then :
- xrender_libs="-lXrender"
-else
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XScreenSaverRegister" >&5
+$as_echo "$ac_cv_lib_Xext_XScreenSaverRegister" >&6; }
+if test "x$ac_cv_lib_Xext_XScreenSaverRegister" = xyes; then :
true
+else
+ have_mit=no
fi
CPPFLAGS="$ac_save_CPPFLAGS"
@@ -10039,8 +9939,9 @@ fi
# LIBS="$ac_save_LIBS"
- # first look for RANDR in -lXext
- have_randr=no
+ if test "$have_mit" = no; then
+ # Fuck! Looks like XF86Free-3.3 actually puts it in XExExt instead
+ # of in Xext. Thank you master, may I have another.
ac_save_CPPFLAGS="$CPPFLAGS"
ac_save_LDFLAGS="$LDFLAGS"
@@ -10060,13 +9961,13 @@ fi
CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRRGetScreenInfo in -lXext" >&5
-$as_echo_n "checking for XRRGetScreenInfo in -lXext... " >&6; }
-if ${ac_cv_lib_Xext_XRRGetScreenInfo+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XScreenSaverRegister in -lXExExt" >&5
+$as_echo_n "checking for XScreenSaverRegister in -lXExExt... " >&6; }
+if ${ac_cv_lib_XExExt_XScreenSaverRegister+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXext $xrender_libs -lXext -lX11 $LIBS"
+LIBS="-lXExExt -lX11 -lXext -lm $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -10076,28 +9977,28 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
-char XRRGetScreenInfo ();
+char XScreenSaverRegister ();
int
main ()
{
-return XRRGetScreenInfo ();
+return XScreenSaverRegister ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_Xext_XRRGetScreenInfo=yes
+ ac_cv_lib_XExExt_XScreenSaverRegister=yes
else
- ac_cv_lib_Xext_XRRGetScreenInfo=no
+ ac_cv_lib_XExExt_XScreenSaverRegister=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XRRGetScreenInfo" >&5
-$as_echo "$ac_cv_lib_Xext_XRRGetScreenInfo" >&6; }
-if test "x$ac_cv_lib_Xext_XRRGetScreenInfo" = xyes; then :
- have_randr=yes; SAVER_LIBS="$SAVER_LIBS $xrender_libs"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_XExExt_XScreenSaverRegister" >&5
+$as_echo "$ac_cv_lib_XExExt_XScreenSaverRegister" >&6; }
+if test "x$ac_cv_lib_XExExt_XScreenSaverRegister" = xyes; then :
+ have_mit=yes; SAVER_LIBS="$SAVER_LIBS -lXExExt"
else
true
fi
@@ -10106,9 +10007,13 @@ fi
LDFLAGS="$ac_save_LDFLAGS"
# LIBS="$ac_save_LIBS"
+ fi
- # if that failed, look in -lXrandr
- if test "$have_randr" = no; then
+ if test "$have_mit" = no; then
+ # Double fuck! Looks like some versions of XFree86 (whichever version
+ # it is that comes with RedHat Linux 2.0 -- I can't find a version
+ # number) put this garbage in Xss instead of Xext. Thank you master,
+ # may I have another.
ac_save_CPPFLAGS="$CPPFLAGS"
ac_save_LDFLAGS="$LDFLAGS"
@@ -10128,13 +10033,13 @@ fi
CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRRGetScreenInfo in -lXrandr" >&5
-$as_echo_n "checking for XRRGetScreenInfo in -lXrandr... " >&6; }
-if ${ac_cv_lib_Xrandr_XRRGetScreenInfo+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XScreenSaverRegister in -lXss" >&5
+$as_echo_n "checking for XScreenSaverRegister in -lXss... " >&6; }
+if ${ac_cv_lib_Xss_XScreenSaverRegister+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXrandr $xrender_libs -lXext -lX11 $LIBS"
+LIBS="-lXss -lX11 -lXext -lm $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -10144,28 +10049,28 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
-char XRRGetScreenInfo ();
+char XScreenSaverRegister ();
int
main ()
{
-return XRRGetScreenInfo ();
+return XScreenSaverRegister ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_Xrandr_XRRGetScreenInfo=yes
+ ac_cv_lib_Xss_XScreenSaverRegister=yes
else
- ac_cv_lib_Xrandr_XRRGetScreenInfo=no
+ ac_cv_lib_Xss_XScreenSaverRegister=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xrandr_XRRGetScreenInfo" >&5
-$as_echo "$ac_cv_lib_Xrandr_XRRGetScreenInfo" >&6; }
-if test "x$ac_cv_lib_Xrandr_XRRGetScreenInfo" = xyes; then :
- have_randr=yes; SAVER_LIBS="$SAVER_LIBS -lXrandr $xrender_libs"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xss_XScreenSaverRegister" >&5
+$as_echo "$ac_cv_lib_Xss_XScreenSaverRegister" >&6; }
+if test "x$ac_cv_lib_Xss_XScreenSaverRegister" = xyes; then :
+ have_mit=yes; SAVER_LIBS="$SAVER_LIBS -lXss"
else
true
fi
@@ -10175,21 +10080,84 @@ fi
# LIBS="$ac_save_LIBS"
fi
+
+ if test "$have_mit" = yes; then
+# AC_DEFINE(HAVE_MIT_SAVER_EXTENSION)
+ echo "Using the MIT-SCREEN-SAVER extension will crash your server. Don't."
+ exit 1
+ fi
+
fi
- # if that succeeded, then we've really got it.
- if test "$have_randr" = yes; then
- $as_echo "#define HAVE_RANDR 1" >>confdefs.h
+elif test "$with_mit" != no; then
+ echo "error: must be yes or no: --with-mit-ext=$with_mit"
+ exit 1
+fi
- # Now check for version 1.2 in the same libs.
- # Try to compile, since on MacOS 10.5.7, headers are older than libs!
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRRGetScreenResources" >&5
-$as_echo_n "checking for XRRGetScreenResources... " >&6; }
-if ${ac_cv_randr_12+:} false; then :
- $as_echo_n "(cached) " >&6
+###############################################################################
+#
+# Check for the SGI SCREEN_SAVER server extension.
+#
+###############################################################################
+
+have_sgi=no
+with_sgi_req=unspecified
+
+# Check whether --with-sgi-ext was given.
+if test "${with_sgi_ext+set}" = set; then :
+ withval=$with_sgi_ext; with_sgi="$withval"; with_sgi_req="$withval"
else
- ac_cv_randr_12=no
+ with_sgi=$ac_irix
+fi
+
+
+
+ case "$with_sgi" in
+ yes) ;;
+ no) ;;
+
+ /*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SGI SCREEN_SAVER headers" >&5
+$as_echo_n "checking for SGI SCREEN_SAVER headers... " >&6; }
+ d=$with_sgi/include
+ if test -d $d; then
+ X_CFLAGS="-I$d $X_CFLAGS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SGI SCREEN_SAVER libs" >&5
+$as_echo_n "checking for SGI SCREEN_SAVER libs... " >&6; }
+ d=$with_sgi/lib
+ if test -d $d; then
+ X_LIBS="-L$d $X_LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ # replace the directory string with "yes".
+ with_sgi_req="yes"
+ with_sgi=$with_sgi_req
+ ;;
+
+ *)
+ echo ""
+ echo "error: argument to --with-sgi-ext must be \"yes\", \"no\", or a directory."
+ echo " If it is a directory, then \`DIR/include' will be added to"
+ echo " the -I list, and \`DIR/lib' will be added to the -L list."
+ exit 1
+ ;;
+ esac
+
+
+if test "$with_sgi" = yes; then
ac_save_CPPFLAGS="$CPPFLAGS"
if test \! -z "$includedir" ; then
@@ -10197,54 +10165,400 @@ else
fi
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ ac_fn_c_check_header_compile "$LINENO" "X11/extensions/XScreenSaver.h" "ac_cv_header_X11_extensions_XScreenSaver_h" "#include <X11/Xlib.h>
+"
+if test "x$ac_cv_header_X11_extensions_XScreenSaver_h" = xyes; then :
+ have_sgi=yes
+ $as_echo "#define HAVE_SGI_SAVER_EXTENSION 1" >>confdefs.h
+
+fi
+
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+
+elif test "$with_sgi" != no; then
+ echo "error: must be yes or no: --with-sgi-ext=$with_sgi"
+ exit 1
+fi
+
+
+###############################################################################
+#
+# Check for the SGI-VIDEO-CONTROL server extension.
+#
+###############################################################################
+
+have_sgivc=no
+with_sgivc_req=unspecified
+
+# Check whether --with-sgivc-ext was given.
+if test "${with_sgivc_ext+set}" = set; then :
+ withval=$with_sgivc_ext; with_sgivc="$withval"; with_sgivc_req="$withval"
+else
+ with_sgivc=$ac_irix
+fi
+
+
+
+ case "$with_sgivc" in
+ yes) ;;
+ no) ;;
+
+ /*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SGI-VIDEO-CONTROL headers" >&5
+$as_echo_n "checking for SGI-VIDEO-CONTROL headers... " >&6; }
+ d=$with_sgivc/include
+ if test -d $d; then
+ X_CFLAGS="-I$d $X_CFLAGS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SGI-VIDEO-CONTROL libs" >&5
+$as_echo_n "checking for SGI-VIDEO-CONTROL libs... " >&6; }
+ d=$with_sgivc/lib
+ if test -d $d; then
+ X_LIBS="-L$d $X_LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ # replace the directory string with "yes".
+ with_sgivc_req="yes"
+ with_sgivc=$with_sgivc_req
+ ;;
+
+ *)
+ echo ""
+ echo "error: argument to --with-sgivc-ext must be \"yes\", \"no\", or a directory."
+ echo " If it is a directory, then \`DIR/include' will be added to"
+ echo " the -I list, and \`DIR/lib' will be added to the -L list."
+ exit 1
+ ;;
+ esac
+
+
+if test "$with_sgivc" = yes; then
+
+ # first check for XSGIvc.h
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ ac_fn_c_check_header_compile "$LINENO" "X11/extensions/XSGIvc.h" "ac_cv_header_X11_extensions_XSGIvc_h" "#include <X11/Xlib.h>
+"
+if test "x$ac_cv_header_X11_extensions_XSGIvc_h" = xyes; then :
+ have_sgivc=yes
+fi
+
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+
+ # if that succeeded, then check for the -lXsgivc
+ if test "$have_sgivc" = yes; then
+ have_sgivc=no
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ ac_save_LDFLAGS="$LDFLAGS"
+# ac_save_LIBS="$LIBS"
+
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ # note: $X_CFLAGS includes $x_includes
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+ if test \! -z "$libdir" ; then
+ LDFLAGS="$LDFLAGS -L$libdir"
+ fi
+ # note: $X_LIBS includes $x_libraries
+ LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
+
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XSGIvcQueryGammaMap in -lXsgivc" >&5
+$as_echo_n "checking for XSGIvcQueryGammaMap in -lXsgivc... " >&6; }
+if ${ac_cv_lib_Xsgivc_XSGIvcQueryGammaMap+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lXsgivc -lXext -lX11 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <stdlib.h>
- #include <X11/Xlib.h>
- #include <X11/extensions/Xrandr.h>
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char XSGIvcQueryGammaMap ();
int
main ()
{
-XRRScreenResources *res =
- XRRGetScreenResources (0, 0);
+return XSGIvcQueryGammaMap ();
;
return 0;
}
_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_randr_12=yes
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_Xsgivc_XSGIvcQueryGammaMap=yes
else
- ac_cv_randr_12=no
+ ac_cv_lib_Xsgivc_XSGIvcQueryGammaMap=no
fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xsgivc_XSGIvcQueryGammaMap" >&5
+$as_echo "$ac_cv_lib_Xsgivc_XSGIvcQueryGammaMap" >&6; }
+if test "x$ac_cv_lib_Xsgivc_XSGIvcQueryGammaMap" = xyes; then :
+ have_sgivc=yes; SAVER_LIBS="$SAVER_LIBS -lXsgivc"
+else
+ true
+fi
+
CPPFLAGS="$ac_save_CPPFLAGS"
+ LDFLAGS="$ac_save_LDFLAGS"
+# LIBS="$ac_save_LIBS"
+
+ fi
+
+ # if that succeeded, then we've really got it.
+ if test "$have_sgivc" = yes; then
+ $as_echo "#define HAVE_SGI_VC_EXTENSION 1" >>confdefs.h
+
+ fi
+
+elif test "$with_sgivc" != no; then
+ echo "error: must be yes or no: --with-sgivc-ext=$with_sgivc"
+ exit 1
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_randr_12" >&5
-$as_echo "$ac_cv_randr_12" >&6; }
- if test "$ac_cv_randr_12" = yes ; then
- $as_echo "#define HAVE_RANDR_12 1" >>confdefs.h
- fi
-# AC_CHECK_X_LIB(c, XRRGetOutputInfo, [AC_DEFINE(HAVE_RANDR_12)],
-# [true], $SAVER_LIBS)
+
+###############################################################################
+#
+# Check for the SGI XReadDisplay server extension.
+#
+###############################################################################
+
+have_readdisplay=no
+with_readdisplay_req=unspecified
+
+# Check whether --with-readdisplay was given.
+if test "${with_readdisplay+set}" = set; then :
+ withval=$with_readdisplay; with_readdisplay="$withval"; with_readdisplay_req="$withval"
+else
+ with_readdisplay=$ac_irix
+fi
+
+
+
+ case "$with_readdisplay" in
+ yes) ;;
+ no) ;;
+
+ /*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XReadDisplay headers" >&5
+$as_echo_n "checking for XReadDisplay headers... " >&6; }
+ d=$with_readdisplay/include
+ if test -d $d; then
+ X_CFLAGS="-I$d $X_CFLAGS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XReadDisplay libs" >&5
+$as_echo_n "checking for XReadDisplay libs... " >&6; }
+ d=$with_readdisplay/lib
+ if test -d $d; then
+ X_LIBS="-L$d $X_LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ # replace the directory string with "yes".
+ with_readdisplay_req="yes"
+ with_readdisplay=$with_readdisplay_req
+ ;;
+
+ *)
+ echo ""
+ echo "error: argument to --with-readdisplay must be \"yes\", \"no\", or a directory."
+ echo " If it is a directory, then \`DIR/include' will be added to"
+ echo " the -I list, and \`DIR/lib' will be added to the -L list."
+ exit 1
+ ;;
+ esac
+
+
+if test "$with_readdisplay" = yes; then
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ ac_fn_c_check_header_compile "$LINENO" "X11/extensions/readdisplay.h" "ac_cv_header_X11_extensions_readdisplay_h" "#include <X11/Xlib.h>
+"
+if test "x$ac_cv_header_X11_extensions_readdisplay_h" = xyes; then :
+ $as_echo "#define HAVE_READ_DISPLAY_EXTENSION 1" >>confdefs.h
+fi
-elif test "$with_randr" != no; then
- echo "error: must be yes or no: --with-randr-ext=$with_randr"
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+elif test "$with_readdisplay" != no; then
+ echo "error: must be yes or no: --with-readdisplay=$with_readdisplay"
exit 1
fi
###############################################################################
#
-# Check for XF86MiscSetGrabKeysState (but only bother if we are already
-# using other XF86 stuff.)
+# Check for the XSHM server extension.
#
###############################################################################
-have_xf86miscsetgrabkeysstate=no
-if test "$have_xf86gamma" = yes -o "$have_xf86vmode" = yes; then
+have_xshm=no
+with_xshm_req=unspecified
+
+# Check whether --with-xshm-ext was given.
+if test "${with_xshm_ext+set}" = set; then :
+ withval=$with_xshm_ext; with_xshm="$withval"; with_xshm_req="$withval"
+else
+ with_xshm=yes
+fi
+
+
+
+ case "$with_xshm" in
+ yes) ;;
+ no) ;;
+
+ /*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XSHM headers" >&5
+$as_echo_n "checking for XSHM headers... " >&6; }
+ d=$with_xshm/include
+ if test -d $d; then
+ X_CFLAGS="-I$d $X_CFLAGS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XSHM libs" >&5
+$as_echo_n "checking for XSHM libs... " >&6; }
+ d=$with_xshm/lib
+ if test -d $d; then
+ X_LIBS="-L$d $X_LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ # replace the directory string with "yes".
+ with_xshm_req="yes"
+ with_xshm=$with_xshm_req
+ ;;
+
+ *)
+ echo ""
+ echo "error: argument to --with-xshm-ext must be \"yes\", \"no\", or a directory."
+ echo " If it is a directory, then \`DIR/include' will be added to"
+ echo " the -I list, and \`DIR/lib' will be added to the -L list."
+ exit 1
+ ;;
+ esac
+
+
+if test "$with_xshm" = yes; then
+
+ # first check for Xshm.h.
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ ac_fn_c_check_header_compile "$LINENO" "X11/extensions/XShm.h" "ac_cv_header_X11_extensions_XShm_h" "#include <X11/Xlib.h>
+"
+if test "x$ac_cv_header_X11_extensions_XShm_h" = xyes; then :
+ have_xshm=yes
+fi
+
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+
+ # if that succeeded, then check for sys/ipc.h.
+ if test "$have_xshm" = yes; then
+ have_xshm=no
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ ac_fn_c_check_header_mongrel "$LINENO" "sys/ipc.h" "ac_cv_header_sys_ipc_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_ipc_h" = xyes; then :
+ have_xshm=yes
+fi
+
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ fi
+
+ # if that succeeded, then check for sys/shm.h.
+ if test "$have_xshm" = yes; then
+ have_xshm=no
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ ac_fn_c_check_header_mongrel "$LINENO" "sys/shm.h" "ac_cv_header_sys_shm_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_shm_h" = xyes; then :
+ have_xshm=yes
+fi
+
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ fi
+
+ # AIX is pathological, as usual: apparently it's normal for the Xshm headers
+ # to exist, but the library code to not exist. And even better, the library
+ # code is in its own library: libXextSam.a. So, if we're on AIX, and that
+ # lib doesn't exist, give up. (This lib gets added to X_EXTRA_LIBS, and
+ # that's not quite right, but close enough.)
+ #
+ case "$host" in
+ *-aix*)
+ if `uname -v` -eq 3 ; then
+ have_xshm=no
ac_save_CPPFLAGS="$CPPFLAGS"
ac_save_LDFLAGS="$LDFLAGS"
@@ -10264,13 +10578,13 @@ if test "$have_xf86gamma" = yes -o "$have_xf86vmode" = yes; then
CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XF86MiscSetGrabKeysState in -lXxf86misc" >&5
-$as_echo_n "checking for XF86MiscSetGrabKeysState in -lXxf86misc... " >&6; }
-if ${ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XShmQueryExtension in -lXextSam" >&5
+$as_echo_n "checking for XShmQueryExtension in -lXextSam... " >&6; }
+if ${ac_cv_lib_XextSam_XShmQueryExtension+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXxf86misc -lXext -lX11 $LIBS"
+LIBS="-lXextSam -lX11 -lXext -lm $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -10280,28 +10594,28 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
-char XF86MiscSetGrabKeysState ();
+char XShmQueryExtension ();
int
main ()
{
-return XF86MiscSetGrabKeysState ();
+return XShmQueryExtension ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState=yes
+ ac_cv_lib_XextSam_XShmQueryExtension=yes
else
- ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState=no
+ ac_cv_lib_XextSam_XShmQueryExtension=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState" >&5
-$as_echo "$ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState" >&6; }
-if test "x$ac_cv_lib_Xxf86misc_XF86MiscSetGrabKeysState" = xyes; then :
- have_xf86miscsetgrabkeysstate=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_XextSam_XShmQueryExtension" >&5
+$as_echo "$ac_cv_lib_XextSam_XShmQueryExtension" >&6; }
+if test "x$ac_cv_lib_XextSam_XShmQueryExtension" = xyes; then :
+ have_xshm=yes; X_EXTRA_LIBS="$X_EXTRA_LIBS -lXextSam"
else
true
fi
@@ -10310,11 +10624,109 @@ fi
LDFLAGS="$ac_save_LDFLAGS"
# LIBS="$ac_save_LIBS"
- if test "$have_xf86miscsetgrabkeysstate" = yes ; then
- SAVER_LIBS="$SAVER_LIBS -lXxf86misc"
- $as_echo "#define HAVE_XF86MISCSETGRABKEYSSTATE 1" >>confdefs.h
+ fi
+ ;;
+ esac
+
+ # if that succeeded, then we've really got it.
+ if test "$have_xshm" = yes; then
+ $as_echo "#define HAVE_XSHM_EXTENSION 1" >>confdefs.h
fi
+
+elif test "$with_xshm" != no; then
+ echo "error: must be yes or no: --with-xshm-ext=$with_xshm"
+ exit 1
+fi
+
+
+###############################################################################
+#
+# Check for the DOUBLE-BUFFER server extension.
+#
+###############################################################################
+
+have_xdbe=no
+with_xdbe_req=unspecified
+
+# Check whether --with-xdbe-ext was given.
+if test "${with_xdbe_ext+set}" = set; then :
+ withval=$with_xdbe_ext; with_xdbe="$withval"; with_xdbe_req="$withval"
+else
+ with_xdbe=yes
+fi
+
+
+
+ case "$with_xdbe" in
+ yes) ;;
+ no) ;;
+
+ /*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DOUBLE-BUFFER headers" >&5
+$as_echo_n "checking for DOUBLE-BUFFER headers... " >&6; }
+ d=$with_xdbe/include
+ if test -d $d; then
+ X_CFLAGS="-I$d $X_CFLAGS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DOUBLE-BUFFER libs" >&5
+$as_echo_n "checking for DOUBLE-BUFFER libs... " >&6; }
+ d=$with_xdbe/lib
+ if test -d $d; then
+ X_LIBS="-L$d $X_LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ # replace the directory string with "yes".
+ with_xdbe_req="yes"
+ with_xdbe=$with_xdbe_req
+ ;;
+
+ *)
+ echo ""
+ echo "error: argument to --with-xdbe-ext must be \"yes\", \"no\", or a directory."
+ echo " If it is a directory, then \`DIR/include' will be added to"
+ echo " the -I list, and \`DIR/lib' will be added to the -L list."
+ exit 1
+ ;;
+ esac
+
+
+if test "$with_xdbe" = yes; then
+
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ ac_fn_c_check_header_compile "$LINENO" "X11/extensions/Xdbe.h" "ac_cv_header_X11_extensions_Xdbe_h" "#include <X11/Xlib.h>
+"
+if test "x$ac_cv_header_X11_extensions_Xdbe_h" = xyes; then :
+ have_xdbe=yes
+fi
+
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ if test "$have_xdbe" = yes; then
+ $as_echo "#define HAVE_DOUBLE_BUFFER_EXTENSION 1" >>confdefs.h
+
+ fi
+
+elif test "$with_xdbe" != no; then
+ echo "error: must be yes or no: --with-xdbe-ext=$with_xshm"
+ exit 1
fi
@@ -10464,13 +10876,239 @@ fi
###############################################################################
#
+# Check for -lsystemd
+#
+###############################################################################
+
+have_systemd=no
+with_systemd_req=unspecified
+systemd_halfassed=no
+systemd_too_old=no
+
+# Check whether --with-systemd was given.
+if test "${with_systemd+set}" = set; then :
+ withval=$with_systemd; with_systemd="$withval"; with_systemd_req="$withval"
+else
+ with_systemd=yes
+fi
+
+
+
+ case "$with_systemd" in
+ yes) ;;
+ no) ;;
+
+ /*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for systemd headers" >&5
+$as_echo_n "checking for systemd headers... " >&6; }
+ d=$with_systemd/include
+ if test -d $d; then
+ X_CFLAGS="-I$d $X_CFLAGS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for systemd libs" >&5
+$as_echo_n "checking for systemd libs... " >&6; }
+ d=$with_systemd/lib
+ if test -d $d; then
+ X_LIBS="-L$d $X_LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ # replace the directory string with "yes".
+ with_systemd_req="yes"
+ with_systemd=$with_systemd_req
+ ;;
+
+ *)
+ echo ""
+ echo "error: argument to --with-systemd must be \"yes\", \"no\", or a directory."
+ echo " If it is a directory, then \`DIR/include' will be added to"
+ echo " the -I list, and \`DIR/lib' will be added to the -L list."
+ exit 1
+ ;;
+ esac
+
+
+if test "$with_systemd" != yes -a "$with_systemd" != no ; then
+ echo "error: must be yes or no: --with-systemd=$with_systemd"
+ exit 1
+fi
+
+if test "$with_systemd" = yes; then
+
+ pkgs=''
+ ok="yes"
+ pkg_check_version libsystemd 221
+ have_systemd="$ok"
+
+ if test "$have_systemd" = no; then
+ if $pkg_config --exists libsystemd ; then
+ systemd_too_old=yes
+ fi
+ fi
+
+ if test "$have_systemd" = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsystemd includes" >&5
+$as_echo_n "checking for libsystemd includes... " >&6; }
+if ${ac_cv_systemd_config_cflags+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_systemd_config_cflags=`$pkg_config --cflags $pkgs`
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_systemd_config_cflags" >&5
+$as_echo "$ac_cv_systemd_config_cflags" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsystemd libs" >&5
+$as_echo_n "checking for libsystemd libs... " >&6; }
+if ${ac_cv_systemd_config_libs+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_systemd_config_libs=`$pkg_config --libs $pkgs`
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_systemd_config_libs" >&5
+$as_echo "$ac_cv_systemd_config_libs" >&6; }
+ fi
+
+ ac_systemd_config_cflags=$ac_cv_systemd_config_cflags
+ ac_systemd_config_libs=$ac_cv_systemd_config_libs
+
+ if test "$have_systemd" = yes; then
+ #
+ # we appear to have libsystemd; check for headers/libs to be sure.
+ #
+ ac_save_systemd_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $ac_systemd_config_cflags"
+
+ have_systemd=no
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ ac_fn_c_check_header_mongrel "$LINENO" "systemd/sd-bus.h" "ac_cv_header_systemd_sd_bus_h" "$ac_includes_default"
+if test "x$ac_cv_header_systemd_sd_bus_h" = xyes; then :
+ have_systemd=yes
+fi
+
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+
+ CPPFLAGS="$ac_save_systemd_CPPFLAGS"
+ fi
+
+ if test "$have_systemd" = yes; then
+ # we have the headers, now check for the libraries
+ have_systemd=no
+ systemd_halfassed=yes
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for libsystemd usability..." >&5
+$as_echo "checking for libsystemd usability..." >&6; }
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ ac_save_LDFLAGS="$LDFLAGS"
+# ac_save_LIBS="$LIBS"
+
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ # note: $X_CFLAGS includes $x_includes
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+ if test \! -z "$libdir" ; then
+ LDFLAGS="$LDFLAGS -L$libdir"
+ fi
+ # note: $X_LIBS includes $x_libraries
+ LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
+
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sd_bus_open_system in -lc" >&5
+$as_echo_n "checking for sd_bus_open_system in -lc... " >&6; }
+if ${ac_cv_lib_c_sd_bus_open_system+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lc $ac_systemd_config_libs -lX11 -lXext -lm $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sd_bus_open_system ();
+int
+main ()
+{
+return sd_bus_open_system ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_c_sd_bus_open_system=yes
+else
+ ac_cv_lib_c_sd_bus_open_system=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_sd_bus_open_system" >&5
+$as_echo "$ac_cv_lib_c_sd_bus_open_system" >&6; }
+if test "x$ac_cv_lib_c_sd_bus_open_system" = xyes; then :
+ have_systemd=yes
+fi
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LDFLAGS="$ac_save_LDFLAGS"
+# LIBS="$ac_save_LIBS"
+
+ fi
+
+ if test "$have_systemd" = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for libsystemd usability... no" >&5
+$as_echo "checking for libsystemd usability... no" >&6; }
+ fi
+fi
+
+if test "$have_systemd" = yes; then
+ INCLUDES="$INCLUDES $ac_systemd_config_cflags"
+ EXES_SYSTEMD='$(EXES_SYSTEMD)'
+ $as_echo "#define HAVE_LIBSYSTEMD 1" >>confdefs.h
+
+else
+ EXES_SYSTEMD=''
+fi
+
+
+###############################################################################
+#
# The --enable-locking option
#
+# Note: "configure --help" list all "--enable" options before any
+# "--with" options, so we document the --enable options inline with
+# the --with options where it looks better, instead of in AC_ARG_ENABLE
+# where it would make sense, sigh...
+#
###############################################################################
# Check whether --enable-locking was given.
if test "${enable_locking+set}" = set; then :
- enableval=$enable_locking; enable_locking="$enableval"
+ enableval=$enable_locking; # This is documented elsewhere because of --enable/--with option sorting.
+ enable_locking="$enableval"
else
if test "$ac_macosx" = yes; then
# We can't lock on MacOS X, so default to not compiling in support for it.
@@ -10493,14 +11131,16 @@ else
fi
-###############################################################################
+##############################################################################
#
# Whether to allow root password to unblank.
#
###############################################################################
+
# Check whether --enable-root-passwd was given.
if test "${enable_root_passwd+set}" = set; then :
- enableval=$enable_root_passwd; enable_root_passwd="$enableval"
+ enableval=$enable_root_passwd; # This is documented elsewhere because of --enable/--with option sorting.
+ enable_root_passwd="$enableval"
else
enable_root_passwd=yes
fi
@@ -10514,6 +11154,7 @@ elif test "$enable_root_passwd" != no; then
exit 1
fi
+
###############################################################################
#
# Check for PAM.
@@ -10532,6 +11173,8 @@ case "$host" in
;;
esac
+#### H1
+
have_pam=no
with_pam_req=unspecified
@@ -10555,7 +11198,8 @@ fi
# Check whether --enable-pam-check-account-type was given.
if test "${enable_pam_check_account_type+set}" = set; then :
- enableval=$enable_pam_check_account_type; enable_pam_check_account_type="$enableval"
+ enableval=$enable_pam_check_account_type; # This is documented elsewhere because of --enable/--with option sorting.
+ enable_pam_check_account_type="$enableval"
else
enable_pam_check_account_type=no
fi
@@ -11977,321 +12621,6 @@ _ACEOF
esac
-###############################################################################
-#
-# Check for a login manager for a "New Login" button on the lock dialog.
-# Usually this will be "/usr/bin/gdmflexiserver".
-#
-###############################################################################
-
-with_login_manager_req=unspecified
-default_login_manager_1='gdmflexiserver -ls'
-default_login_manager_2='kdmctl reserve'
-default_login_manager_3='lxdm -c USER_SWITCH'
-default_login_manager_4='dm-tool switch-to-greeter'
-
-
-# Check whether --with-login-manager was given.
-if test "${with_login_manager+set}" = set; then :
- withval=$with_login_manager; with_login_manager="$withval"; with_login_manager_req="$withval"
-else
- with_login_manager=yes
-fi
-
-# no HANDLE_X_PATH_ARG for this one
-
-if test "$enable_locking" = no ; then
- with_login_manager_req=no
- with_login_manager=no
-fi
-
-case "$with_login_manager_req" in
- no)
- with_login_manager=""
- ;;
-
- yes|unspecified)
- # Try various defaults, use the first one that exists.
-
- with_login_manager=""
-
- if test -z "$with_login_manager" ; then
- set dummy $default_login_manager_1 ; login_manager_tmp=$2
- unset ac_cv_path_login_manager_tmp # don't cache
- # Extract the first word of "$login_manager_tmp", so it can be a program name with args.
-set dummy $login_manager_tmp; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_login_manager_tmp+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $login_manager_tmp in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-login_manager_tmp=$ac_cv_path_login_manager_tmp
-if test -n "$login_manager_tmp"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5
-$as_echo "$login_manager_tmp" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- if test ! -z "$login_manager_tmp" ; then
- with_login_manager="$default_login_manager_1"
- fi
- fi
-
- if test -z "$with_login_manager" ; then
- set dummy $default_login_manager_2 ; login_manager_tmp=$2
- unset ac_cv_path_login_manager_tmp # don't cache
- # Extract the first word of "$login_manager_tmp", so it can be a program name with args.
-set dummy $login_manager_tmp; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_login_manager_tmp+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $login_manager_tmp in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-login_manager_tmp=$ac_cv_path_login_manager_tmp
-if test -n "$login_manager_tmp"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5
-$as_echo "$login_manager_tmp" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- if test ! -z "$login_manager_tmp" ; then
- with_login_manager="$default_login_manager_2"
- fi
- fi
-
- if test -z "$with_login_manager" ; then
- set dummy $default_login_manager_3 ; login_manager_tmp=$2
- unset ac_cv_path_login_manager_tmp # don't cache
- # Extract the first word of "$login_manager_tmp", so it can be a program name with args.
-set dummy $login_manager_tmp; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_login_manager_tmp+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $login_manager_tmp in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-login_manager_tmp=$ac_cv_path_login_manager_tmp
-if test -n "$login_manager_tmp"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5
-$as_echo "$login_manager_tmp" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- if test ! -z "$login_manager_tmp" ; then
- with_login_manager="$default_login_manager_3"
- fi
- fi
-
- if test -z "$with_login_manager" ; then
- set dummy $default_login_manager_4 ; login_manager_tmp=$2
- unset ac_cv_path_login_manager_tmp # don't cache
- # Extract the first word of "$login_manager_tmp", so it can be a program name with args.
-set dummy $login_manager_tmp; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_login_manager_tmp+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $login_manager_tmp in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-login_manager_tmp=$ac_cv_path_login_manager_tmp
-if test -n "$login_manager_tmp"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5
-$as_echo "$login_manager_tmp" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- if test ! -z "$login_manager_tmp" ; then
- with_login_manager="$default_login_manager_4"
- fi
- fi
-
- ;;
-
- /*)
- # absolute path specified on cmd line
- set dummy $with_login_manager_req ; login_manager_tmp=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $login_manager_tmp" >&5
-$as_echo_n "checking for $login_manager_tmp... " >&6; }
- if test -x "$login_manager_tmp" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- with_login_manager=""
- fi
- ;;
-
- *)
- # relative path specified on cmd line
- set dummy $with_login_manager_req ; login_manager_tmp=$2
- unset ac_cv_path_login_manager_tmp # don't cache
- # Extract the first word of "$login_manager_tmp", so it can be a program name with args.
-set dummy $login_manager_tmp; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_login_manager_tmp+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $login_manager_tmp in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-login_manager_tmp=$ac_cv_path_login_manager_tmp
-if test -n "$login_manager_tmp"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5
-$as_echo "$login_manager_tmp" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- if test -z "$login_manager_tmp" ; then
- with_login_manager=""
- else
- with_login_manager="$login_manager_tmp"
- fi
- ;;
-esac
-ac_cv_login_manager_program="$with_login_manager"
-
-NEW_LOGIN_COMMAND_P=''
-NEW_LOGIN_COMMAND="$ac_cv_login_manager_program"
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for login manager" >&5
-$as_echo_n "checking for login manager... " >&6; }
-if test -z "$NEW_LOGIN_COMMAND" ; then
- NEW_LOGIN_COMMAND="$default_login_manager_1"
- NEW_LOGIN_COMMAND_P='! '
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NEW_LOGIN_COMMAND (disabled)" >&5
-$as_echo "$NEW_LOGIN_COMMAND (disabled)" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NEW_LOGIN_COMMAND" >&5
-$as_echo "$NEW_LOGIN_COMMAND" >&6; }
-fi
-
###############################################################################
#
@@ -12299,6 +12628,8 @@ fi
#
###############################################################################
+#### H1
+
have_gtk=no
with_gtk_req=unspecified
@@ -12385,115 +12716,16 @@ parse_gtk_version_string() {
fi
}
-# Find pkg-config... (need this for both gtk and gdk_pixbuf.)
-# if the user specified --with-gtk=/foo/ then look there.
-#
-gtk_path="$PATH"
-if test ! -z "$gtk_dir"; then
- # canonicalize slashes.
- foo=`echo "${gtk_dir}/bin" | sed 's@//*@/@g'`
- gtk_path="$foo:$gtk_path"
-fi
-
-for ac_prog in pkg-config
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_pkg_config+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- case $pkg_config in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_pkg_config="$pkg_config" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $gtk_path
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_path_pkg_config="$as_dir/$ac_word$ac_exec_ext"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-pkg_config=$ac_cv_path_pkg_config
-if test -n "$pkg_config"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pkg_config" >&5
-$as_echo "$pkg_config" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$pkg_config" && break
-done
-
-
-if test -z "$pkg_config" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pkg-config not found!" >&5
-$as_echo "$as_me: WARNING: pkg-config not found!" >&2;}
- pkg_config="false"
-fi
-
-
-# Utility function for running pkg-config-based tests...
-#
-pkgs=''
-pkg_check_version() {
- if test "$ok" = yes ; then
- req="$1"
- min="$2"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $req" >&5
-$as_echo_n "checking for $req... " >&6; }
- if $pkg_config --exists "$req" ; then
- vers=`$pkg_config --modversion "$req"`
- if $pkg_config --exists "$req >= $min" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vers" >&5
-$as_echo "$vers" >&6; }
- pkgs="$pkgs $req"
- return 1
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vers (wanted >= $min)" >&5
-$as_echo "$vers (wanted >= $min)" >&6; }
- ok=no
- return 0
- fi
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- ok=no
- return 0
- fi
- fi
-}
-
-
jurassic_gtk=no
gtk_halfassed=no
-have_gtk_2_22_or_higher=no
-COMMENT_DEMO_GLADE2_GTK_2_22_HEAD=""
-COMMENT_DEMO_GLADE2_GTK_2_22_TAIL=""
if test "$with_gtk" = yes; then
have_gtk=no
ok="yes"
- pkg_check_version gtk+-2.0 2.0.1 ; ac_gtk_version_string="$vers"
+ pkg_check_version gtk+-2.0 2.22.0 ; ac_gtk_version_string="$vers"
pkg_check_version gmodule-2.0 2.0.0
pkg_check_version libxml-2.0 2.4.6
- pkg_check_version libglade-2.0 1.99.0
pkg_check_version gdk-pixbuf-2.0 2.0.0
pkg_check_version gdk-pixbuf-xlib-2.0 2.0.0
have_gtk="$ok"
@@ -12551,16 +12783,6 @@ $as_echo "$ac_cv_gtk_config_libs" >&6; }
$as_echo "#define HAVE_XML 1" >>confdefs.h
fi
-
- if test "$have_gtk" = yes; then
- ok="yes"
- pkg_check_version gtk+-2.0 2.22
- have_gtk_2_22_or_higher="$ok"
- if test "$have_gtk_2_22_or_higher" = yes; then
- COMMENT_DEMO_GLADE2_GTK_2_22_HEAD="<!-- comment>"
- COMMENT_DEMO_GLADE2_GTK_2_22_TAIL="</comment -->"
- fi
- fi
fi
@@ -13089,14 +13311,537 @@ fi
###############################################################################
#
+# Check for a login manager for a "New Login" button on the lock dialog.
+# Usually this will be "/usr/bin/gdmflexiserver".
+#
+###############################################################################
+
+with_login_manager_req=unspecified
+default_login_manager_1='gdmflexiserver -ls'
+default_login_manager_2='kdmctl reserve'
+default_login_manager_3='lxdm -c USER_SWITCH'
+default_login_manager_4='dm-tool switch-to-greeter'
+
+
+# Check whether --with-login-manager was given.
+if test "${with_login_manager+set}" = set; then :
+ withval=$with_login_manager; with_login_manager="$withval"; with_login_manager_req="$withval"
+else
+ with_login_manager=yes
+fi
+
+# no HANDLE_X_PATH_ARG for this one
+
+if test "$enable_locking" = no ; then
+ with_login_manager_req=no
+ with_login_manager=no
+fi
+
+case "$with_login_manager_req" in
+ no)
+ with_login_manager=""
+ ;;
+
+ yes|unspecified)
+ # Try various defaults, use the first one that exists.
+
+ with_login_manager=""
+
+ if test -z "$with_login_manager" ; then
+ set dummy $default_login_manager_1 ; login_manager_tmp=$2
+ unset ac_cv_path_login_manager_tmp # don't cache
+ # Extract the first word of "$login_manager_tmp", so it can be a program name with args.
+set dummy $login_manager_tmp; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_login_manager_tmp+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $login_manager_tmp in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+login_manager_tmp=$ac_cv_path_login_manager_tmp
+if test -n "$login_manager_tmp"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5
+$as_echo "$login_manager_tmp" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test ! -z "$login_manager_tmp" ; then
+ with_login_manager="$default_login_manager_1"
+ fi
+ fi
+
+ if test -z "$with_login_manager" ; then
+ set dummy $default_login_manager_2 ; login_manager_tmp=$2
+ unset ac_cv_path_login_manager_tmp # don't cache
+ # Extract the first word of "$login_manager_tmp", so it can be a program name with args.
+set dummy $login_manager_tmp; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_login_manager_tmp+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $login_manager_tmp in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+login_manager_tmp=$ac_cv_path_login_manager_tmp
+if test -n "$login_manager_tmp"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5
+$as_echo "$login_manager_tmp" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test ! -z "$login_manager_tmp" ; then
+ with_login_manager="$default_login_manager_2"
+ fi
+ fi
+
+ if test -z "$with_login_manager" ; then
+ set dummy $default_login_manager_3 ; login_manager_tmp=$2
+ unset ac_cv_path_login_manager_tmp # don't cache
+ # Extract the first word of "$login_manager_tmp", so it can be a program name with args.
+set dummy $login_manager_tmp; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_login_manager_tmp+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $login_manager_tmp in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+login_manager_tmp=$ac_cv_path_login_manager_tmp
+if test -n "$login_manager_tmp"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5
+$as_echo "$login_manager_tmp" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test ! -z "$login_manager_tmp" ; then
+ with_login_manager="$default_login_manager_3"
+ fi
+ fi
+
+ if test -z "$with_login_manager" ; then
+ set dummy $default_login_manager_4 ; login_manager_tmp=$2
+ unset ac_cv_path_login_manager_tmp # don't cache
+ # Extract the first word of "$login_manager_tmp", so it can be a program name with args.
+set dummy $login_manager_tmp; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_login_manager_tmp+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $login_manager_tmp in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+login_manager_tmp=$ac_cv_path_login_manager_tmp
+if test -n "$login_manager_tmp"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5
+$as_echo "$login_manager_tmp" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test ! -z "$login_manager_tmp" ; then
+ with_login_manager="$default_login_manager_4"
+ fi
+ fi
+
+ ;;
+
+ /*)
+ # absolute path specified on cmd line
+ set dummy $with_login_manager_req ; login_manager_tmp=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $login_manager_tmp" >&5
+$as_echo_n "checking for $login_manager_tmp... " >&6; }
+ if test -x "$login_manager_tmp" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ with_login_manager=""
+ fi
+ ;;
+
+ *)
+ # relative path specified on cmd line
+ set dummy $with_login_manager_req ; login_manager_tmp=$2
+ unset ac_cv_path_login_manager_tmp # don't cache
+ # Extract the first word of "$login_manager_tmp", so it can be a program name with args.
+set dummy $login_manager_tmp; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_login_manager_tmp+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $login_manager_tmp in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+login_manager_tmp=$ac_cv_path_login_manager_tmp
+if test -n "$login_manager_tmp"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5
+$as_echo "$login_manager_tmp" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test -z "$login_manager_tmp" ; then
+ with_login_manager=""
+ else
+ with_login_manager="$login_manager_tmp"
+ fi
+ ;;
+esac
+ac_cv_login_manager_program="$with_login_manager"
+
+NEW_LOGIN_COMMAND_P=''
+NEW_LOGIN_COMMAND="$ac_cv_login_manager_program"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for login manager" >&5
+$as_echo_n "checking for login manager... " >&6; }
+if test -z "$NEW_LOGIN_COMMAND" ; then
+ NEW_LOGIN_COMMAND="$default_login_manager_1"
+ NEW_LOGIN_COMMAND_P='! '
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NEW_LOGIN_COMMAND (disabled)" >&5
+$as_echo "$NEW_LOGIN_COMMAND (disabled)" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NEW_LOGIN_COMMAND" >&5
+$as_echo "$NEW_LOGIN_COMMAND" >&6; }
+fi
+
+
+
+###############################################################################
+#
+# Check for a directory full of images to use as the default value
+# of the "imageDirectory" preference.
+#
+###############################################################################
+
+have_imagedir=no
+with_imagedir_req=unspecified
+
+
+# Check whether --with-image-directory was given.
+if test "${with_image_directory+set}" = set; then :
+ withval=$with_image_directory; with_imagedir="$withval"; with_imagedir_req="$withval"
+else
+ with_imagedir=yes
+fi
+
+# no HANDLE_X_PATH_ARG for this one
+
+case "$with_imagedir" in
+ /*)
+ # absolute path
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for image directory $with_imagedir" >&5
+$as_echo_n "checking for image directory $with_imagedir... " >&6; }
+ if test -d "$with_imagedir" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ with_imagedir=""
+ fi
+ ;;
+ yes)
+ with_imagedir=""
+
+ #### Could use some more defaults here...
+ for dd in \
+ "/usr/share/rpd-wallpaper" \
+ "/usr/share/backgrounds/images/" \
+ "/usr/share/wallpapers/" \
+ "/Library/Desktop Pictures/" \
+ ; do
+ if test -z "$with_imagedir"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for image directory $dd" >&5
+$as_echo_n "checking for image directory $dd... " >&6; }
+ if test -d "$dd" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ with_imagedir="$dd"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ fi
+ done
+
+ ;;
+ no)
+ with_imagedir=""
+ ;;
+
+ *)
+ echo "error: must be an absolute path: --with-image-directory=$with_imagedir_req"
+ exit 1
+ ;;
+esac
+ac_cv_imagedir="$with_imagedir"
+
+DEFAULT_IMAGES_P='True'
+DEFAULT_IMAGE_DIRECTORY="$ac_cv_imagedir"
+
+if test -z "$DEFAULT_IMAGE_DIRECTORY" ; then
+ DEFAULT_IMAGES_P='False'
+fi
+
+
+###############################################################################
+#
+# Pick a text file to use as the default of the "textFile" preference.
+# Any old file will do, but preferably one that will make interesting
+# shapes when displayed by "starwars" and "fontglide".
+#
+###############################################################################
+
+have_textfile=no
+with_textfile_req=unspecified
+
+
+# Check whether --with-text-file was given.
+if test "${with_text_file+set}" = set; then :
+ withval=$with_text_file; with_textfile="$withval"; with_textfile_req="$withval"
+else
+ with_textfile=yes
+fi
+
+# no HANDLE_X_PATH_ARG for this one
+
+case "$with_textfile" in
+ /*)
+ # absolute path
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for text file $with_textfile" >&5
+$as_echo_n "checking for text file $with_textfile... " >&6; }
+ if test -f "$with_textfile" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ with_textfile=""
+ fi
+ ;;
+ yes)
+ with_textfile=""
+
+ #### Could use some more defaults here...
+ for f in \
+ "/usr/X11R6/lib/X11/doc/README" \
+ "/usr/share/doc/xserver-common/copyright" \
+ "/usr/share/doc/xserver-xorg-core/copyright" \
+ "/usr/X11R6/README" \
+ "/usr/share/doc/libX11*/COPYING" \
+ "/usr/X11/share/X11/doc/README*" \
+ "/usr/share/doc/debian/debian-manifesto" \
+ ; do
+ if test -z "$with_textfile"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for text file $f" >&5
+$as_echo_n "checking for text file $f... " >&6; }
+ f=`/bin/ls $f 2>&- | head -1`
+ if test -f "$f" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ with_textfile="$f"
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ fi
+ done
+
+ ;;
+ no)
+ with_textfile=""
+ ;;
+
+ *)
+ echo "error: must be an absolute path: --with-text-file=$with_textfile_req"
+ exit 1
+ ;;
+esac
+ac_cv_textfile="$with_textfile"
+
+DEFAULT_TEXT_FILE="$ac_cv_textfile"
+
+
+###############################################################################
+#
+# Check the browser to see help URL
+#
+###############################################################################
+
+have_browser=no
+with_browser_req=unspecified
+
+
+# Check whether --with-browser was given.
+if test "${with_browser+set}" = set; then :
+ withval=$with_browser; with_browser="$withval"; with_browser_req="$withval"
+else
+ with_browser=no
+fi
+
+# no HANDLE_X_PATH_ARG for this one
+
+case "$with_browser" in
+ no )
+ ;;
+ * )
+ WITH_BROWSER=$with_browser
+ gnome_open_program=$with_browser
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for browser $with_browser" >&5
+$as_echo_n "checking for browser $with_browser... " >&6; }
+ with_browser_fullpath=`which $with_browser 2>/dev/null`
+ case $with_browser_fullpath in
+ /* )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ have_browser=yes
+ ;;
+ * )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+# Only warning: we don't want to install all packages for the
+# dependency of the browser in building stage...
+ echo "WARNING: browser not found: --with-browser=$with_browser"
+ ;;
+ esac
+ ;;
+esac
+ac_cv_browser="$with_browser"
+
+
+###############################################################################
+#
# Check for -lGL or -lMesaGL.
#
###############################################################################
+#### H1
+
have_gl=no
ac_have_mesa_gl=no
with_gl_req=unspecified
gl_halfassed=no
+have_glext=no
# Check whether --with-gl was given.
if test "${with_gl+set}" = set; then :
@@ -13494,7 +14239,7 @@ if ${ac_cv_mesagl_version_string+:} false; then :
$as_echo_n "(cached) " >&6
else
cat > conftest.$ac_ext <<EOF
-#line 13497 "configure"
+#line 14242 "configure"
#include "confdefs.h"
#include <GL/gl.h>
#ifndef MESA_MAJOR_VERSION
@@ -13641,6 +14386,96 @@ fi
LDFLAGS="$ac_save_LDFLAGS"
# LIBS="$ac_save_LIBS"
+
+ # Check for OpenGL GLSL features.
+ #
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ ac_fn_c_check_header_compile "$LINENO" "GL/glext.h" "ac_cv_header_GL_glext_h" "#include <GL/gl.h>
+"
+if test "x$ac_cv_header_GL_glext_h" = xyes; then :
+ have_glext=yes
+else
+ have_glext=no
+fi
+
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ if test "$have_glext" = yes ; then
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ ac_save_LDFLAGS="$LDFLAGS"
+# ac_save_LIBS="$LIBS"
+
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ # note: $X_CFLAGS includes $x_includes
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+ if test \! -z "$libdir" ; then
+ LDFLAGS="$LDFLAGS -L$libdir"
+ fi
+ # note: $X_LIBS includes $x_libraries
+ LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
+
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
+ as_ac_Lib=`$as_echo "ac_cv_lib_$gl_lib_1''_glUseProgram" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for glUseProgram in -l$gl_lib_1" >&5
+$as_echo_n "checking for glUseProgram in -l$gl_lib_1... " >&6; }
+if eval \${$as_ac_Lib+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-l$gl_lib_1 $GL_LIBS -lX11 -lXext -lm $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char glUseProgram ();
+int
+main ()
+{
+return glUseProgram ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$as_ac_Lib=yes"
+else
+ eval "$as_ac_Lib=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+eval ac_res=\$$as_ac_Lib
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
+ $as_echo "#define HAVE_GLSL 1" >>confdefs.h
+
+else
+ true
+fi
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LDFLAGS="$ac_save_LDFLAGS"
+# LIBS="$ac_save_LIBS"
+
+ fi
fi
elif test "$with_gl" != no; then
@@ -14084,6 +14919,167 @@ fi
###############################################################################
#
+# Check for -ljpeg
+#
+###############################################################################
+
+have_jpeg=no
+with_jpeg_req=unspecified
+jpeg_halfassed=no
+
+# Check whether --with-jpeg was given.
+if test "${with_jpeg+set}" = set; then :
+ withval=$with_jpeg; with_jpeg="$withval"; with_jpeg_req="$withval"
+else
+ with_jpeg=yes
+fi
+
+
+
+ case "$with_jpeg" in
+ yes) ;;
+ no) ;;
+
+ /*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JPEG headers" >&5
+$as_echo_n "checking for JPEG headers... " >&6; }
+ d=$with_jpeg/include
+ if test -d $d; then
+ X_CFLAGS="-I$d $X_CFLAGS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JPEG libs" >&5
+$as_echo_n "checking for JPEG libs... " >&6; }
+ d=$with_jpeg/lib
+ if test -d $d; then
+ X_LIBS="-L$d $X_LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ # replace the directory string with "yes".
+ with_jpeg_req="yes"
+ with_jpeg=$with_jpeg_req
+ ;;
+
+ *)
+ echo ""
+ echo "error: argument to --with-jpeg must be \"yes\", \"no\", or a directory."
+ echo " If it is a directory, then \`DIR/include' will be added to"
+ echo " the -I list, and \`DIR/lib' will be added to the -L list."
+ exit 1
+ ;;
+ esac
+
+
+if test "$with_jpeg" != yes -a "$with_jpeg" != no ; then
+ echo "error: must be yes or no: --with-jpeg=$with_jpeg"
+ exit 1
+fi
+
+if test "$with_jpeg" = yes; then
+
+ have_jpeg=no
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ ac_fn_c_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default"
+if test "x$ac_cv_header_jpeglib_h" = xyes; then :
+ have_jpeg=yes
+fi
+
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+
+ if test "$have_jpeg" = yes; then
+ # we have the header, now check for the library
+ have_jpeg=no
+ jpeg_halfassed=yes
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ ac_save_LDFLAGS="$LDFLAGS"
+# ac_save_LIBS="$LIBS"
+
+ if test \! -z "$includedir" ; then
+ CPPFLAGS="$CPPFLAGS -I$includedir"
+ fi
+ # note: $X_CFLAGS includes $x_includes
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+ if test \! -z "$libdir" ; then
+ LDFLAGS="$LDFLAGS -L$libdir"
+ fi
+ # note: $X_LIBS includes $x_libraries
+ LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
+
+ CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
+ LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_start_compress in -ljpeg" >&5
+$as_echo_n "checking for jpeg_start_compress in -ljpeg... " >&6; }
+if ${ac_cv_lib_jpeg_jpeg_start_compress+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ljpeg $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char jpeg_start_compress ();
+int
+main ()
+{
+return jpeg_start_compress ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_jpeg_jpeg_start_compress=yes
+else
+ ac_cv_lib_jpeg_jpeg_start_compress=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_jpeg_start_compress" >&5
+$as_echo "$ac_cv_lib_jpeg_jpeg_start_compress" >&6; }
+if test "x$ac_cv_lib_jpeg_jpeg_start_compress" = xyes; then :
+ have_jpeg=yes
+ jpeg_halfassed=no
+ JPEG_LIBS="-ljpeg"
+ $as_echo "#define HAVE_JPEGLIB 1" >>confdefs.h
+
+fi
+
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LDFLAGS="$ac_save_LDFLAGS"
+# LIBS="$ac_save_LIBS"
+
+ fi
+fi
+
+
+###############################################################################
+#
# Check for -lpng
#
###############################################################################
@@ -14653,167 +15649,6 @@ fi
###############################################################################
#
-# Check for -ljpeg
-#
-###############################################################################
-
-have_jpeg=no
-with_jpeg_req=unspecified
-jpeg_halfassed=no
-
-# Check whether --with-jpeg was given.
-if test "${with_jpeg+set}" = set; then :
- withval=$with_jpeg; with_jpeg="$withval"; with_jpeg_req="$withval"
-else
- with_jpeg=yes
-fi
-
-
-
- case "$with_jpeg" in
- yes) ;;
- no) ;;
-
- /*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JPEG headers" >&5
-$as_echo_n "checking for JPEG headers... " >&6; }
- d=$with_jpeg/include
- if test -d $d; then
- X_CFLAGS="-I$d $X_CFLAGS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
-$as_echo "$d" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
-$as_echo "not found ($d: no such directory)" >&6; }
- fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JPEG libs" >&5
-$as_echo_n "checking for JPEG libs... " >&6; }
- d=$with_jpeg/lib
- if test -d $d; then
- X_LIBS="-L$d $X_LIBS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
-$as_echo "$d" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
-$as_echo "not found ($d: no such directory)" >&6; }
- fi
-
- # replace the directory string with "yes".
- with_jpeg_req="yes"
- with_jpeg=$with_jpeg_req
- ;;
-
- *)
- echo ""
- echo "error: argument to --with-jpeg must be \"yes\", \"no\", or a directory."
- echo " If it is a directory, then \`DIR/include' will be added to"
- echo " the -I list, and \`DIR/lib' will be added to the -L list."
- exit 1
- ;;
- esac
-
-
-if test "$with_jpeg" != yes -a "$with_jpeg" != no ; then
- echo "error: must be yes or no: --with-jpeg=$with_jpeg"
- exit 1
-fi
-
-if test "$with_jpeg" = yes; then
-
- have_jpeg=no
-
- ac_save_CPPFLAGS="$CPPFLAGS"
- if test \! -z "$includedir" ; then
- CPPFLAGS="$CPPFLAGS -I$includedir"
- fi
- CPPFLAGS="$CPPFLAGS $X_CFLAGS"
- CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
- ac_fn_c_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default"
-if test "x$ac_cv_header_jpeglib_h" = xyes; then :
- have_jpeg=yes
-fi
-
-
- CPPFLAGS="$ac_save_CPPFLAGS"
-
- if test "$have_jpeg" = yes; then
- # we have the header, now check for the library
- have_jpeg=no
- jpeg_halfassed=yes
-
- ac_save_CPPFLAGS="$CPPFLAGS"
- ac_save_LDFLAGS="$LDFLAGS"
-# ac_save_LIBS="$LIBS"
-
- if test \! -z "$includedir" ; then
- CPPFLAGS="$CPPFLAGS -I$includedir"
- fi
- # note: $X_CFLAGS includes $x_includes
- CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-
- if test \! -z "$libdir" ; then
- LDFLAGS="$LDFLAGS -L$libdir"
- fi
- # note: $X_LIBS includes $x_libraries
- LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
-
- CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
- LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_start_compress in -ljpeg" >&5
-$as_echo_n "checking for jpeg_start_compress in -ljpeg... " >&6; }
-if ${ac_cv_lib_jpeg_jpeg_start_compress+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ljpeg $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char jpeg_start_compress ();
-int
-main ()
-{
-return jpeg_start_compress ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_jpeg_jpeg_start_compress=yes
-else
- ac_cv_lib_jpeg_jpeg_start_compress=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_jpeg_start_compress" >&5
-$as_echo "$ac_cv_lib_jpeg_jpeg_start_compress" >&6; }
-if test "x$ac_cv_lib_jpeg_jpeg_start_compress" = xyes; then :
- have_jpeg=yes
- jpeg_halfassed=no
- JPEG_LIBS="-ljpeg"
- $as_echo "#define HAVE_JPEGLIB 1" >>confdefs.h
-
-fi
-
- CPPFLAGS="$ac_save_CPPFLAGS"
- LDFLAGS="$ac_save_LDFLAGS"
-# LIBS="$ac_save_LIBS"
-
- fi
-fi
-
-
-###############################################################################
-#
# Check for -lXft
#
###############################################################################
@@ -15101,216 +15936,47 @@ else
fi
-###############################################################################
+# Also check for the standard X11 bitmap fonts, since Debian likes to not
+# install any of those by default. The unlock dialog requires them.
#
-# Check for -lsystemd
-#
-###############################################################################
-
-have_systemd=no
-with_systemd_req=unspecified
-systemd_halfassed=no
-
-# Check whether --with-systemd was given.
-if test "${with_systemd+set}" = set; then :
- withval=$with_systemd; with_systemd="$withval"; with_systemd_req="$withval"
-else
- with_systemd=yes
-fi
-
-
-
- case "$with_systemd" in
- yes) ;;
- no) ;;
-
- /*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for systemd headers" >&5
-$as_echo_n "checking for systemd headers... " >&6; }
- d=$with_systemd/include
- if test -d $d; then
- X_CFLAGS="-I$d $X_CFLAGS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
-$as_echo "$d" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
-$as_echo "not found ($d: no such directory)" >&6; }
- fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for systemd libs" >&5
-$as_echo_n "checking for systemd libs... " >&6; }
- d=$with_systemd/lib
- if test -d $d; then
- X_LIBS="-L$d $X_LIBS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
-$as_echo "$d" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
-$as_echo "not found ($d: no such directory)" >&6; }
- fi
-
- # replace the directory string with "yes".
- with_systemd_req="yes"
- with_systemd=$with_systemd_req
- ;;
-
- *)
- echo ""
- echo "error: argument to --with-systemd must be \"yes\", \"no\", or a directory."
- echo " If it is a directory, then \`DIR/include' will be added to"
- echo " the -I list, and \`DIR/lib' will be added to the -L list."
- exit 1
- ;;
- esac
-
-
-if test "$with_systemd" != yes -a "$with_systemd" != no ; then
- echo "error: must be yes or no: --with-systemd=$with_systemd"
- exit 1
-fi
-
-if test "$with_systemd" = yes; then
-
- pkgs=''
- ok="yes"
- pkg_check_version libsystemd 221
- have_systemd="$ok"
-
- if test "$have_systemd" = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsystemd includes" >&5
-$as_echo_n "checking for libsystemd includes... " >&6; }
-if ${ac_cv_systemd_config_cflags+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_systemd_config_cflags=`$pkg_config --cflags $pkgs`
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_systemd_config_cflags" >&5
-$as_echo "$ac_cv_systemd_config_cflags" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsystemd libs" >&5
-$as_echo_n "checking for libsystemd libs... " >&6; }
-if ${ac_cv_systemd_config_libs+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_systemd_config_libs=`$pkg_config --libs $pkgs`
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_systemd_config_libs" >&5
-$as_echo "$ac_cv_systemd_config_libs" >&6; }
- fi
-
- ac_systemd_config_cflags=$ac_cv_systemd_config_cflags
- ac_systemd_config_libs=$ac_cv_systemd_config_libs
-
- if test "$have_systemd" = yes; then
- #
- # we appear to have libsystemd; check for headers/libs to be sure.
- #
- ac_save_systemd_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $ac_systemd_config_cflags"
-
- have_systemd=no
-
- ac_save_CPPFLAGS="$CPPFLAGS"
- if test \! -z "$includedir" ; then
- CPPFLAGS="$CPPFLAGS -I$includedir"
- fi
- CPPFLAGS="$CPPFLAGS $X_CFLAGS"
- CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
- ac_fn_c_check_header_mongrel "$LINENO" "systemd/sd-bus.h" "ac_cv_header_systemd_sd_bus_h" "$ac_includes_default"
-if test "x$ac_cv_header_systemd_sd_bus_h" = xyes; then :
- have_systemd=yes
-fi
-
-
- CPPFLAGS="$ac_save_CPPFLAGS"
-
- CPPFLAGS="$ac_save_systemd_CPPFLAGS"
- fi
-
- if test "$have_systemd" = yes; then
- # we have the headers, now check for the libraries
- have_systemd=no
- systemd_halfassed=yes
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for libsystemd usability..." >&5
-$as_echo "checking for libsystemd usability..." >&6; }
-
- ac_save_CPPFLAGS="$CPPFLAGS"
- ac_save_LDFLAGS="$LDFLAGS"
-# ac_save_LIBS="$LIBS"
-
- if test \! -z "$includedir" ; then
- CPPFLAGS="$CPPFLAGS -I$includedir"
- fi
- # note: $X_CFLAGS includes $x_includes
- CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-
- if test \! -z "$libdir" ; then
- LDFLAGS="$LDFLAGS -L$libdir"
- fi
- # note: $X_LIBS includes $x_libraries
- LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
-
- CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
- LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sd_bus_open_system in -lc" >&5
-$as_echo_n "checking for sd_bus_open_system in -lc... " >&6; }
-if ${ac_cv_lib_c_sd_bus_open_system+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lc $ac_systemd_config_libs -lX11 -lXext -lm $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char sd_bus_open_system ();
-int
-main ()
-{
-return sd_bus_open_system ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_c_sd_bus_open_system=yes
-else
- ac_cv_lib_c_sd_bus_open_system=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_sd_bus_open_system" >&5
-$as_echo "$ac_cv_lib_c_sd_bus_open_system" >&6; }
-if test "x$ac_cv_lib_c_sd_bus_open_system" = xyes; then :
- have_systemd=yes
-fi
-
- CPPFLAGS="$ac_save_CPPFLAGS"
- LDFLAGS="$ac_save_LDFLAGS"
-# LIBS="$ac_save_LIBS"
-
- fi
-
- if test "$have_systemd" = no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for libsystemd usability... no" >&5
-$as_echo "checking for libsystemd usability... no" >&6; }
- fi
-fi
-
-if test "$have_systemd" = yes; then
- INCLUDES="$INCLUDES $ac_systemd_config_cflags"
- EXES_SYSTEMD='$(EXES_SYSTEMD)'
- $as_echo "#define HAVE_LIBSYSTEMD 1" >>confdefs.h
-
-else
- EXES_SYSTEMD=''
+have_bitmap_fonts=no
+ff='helvB14.pcf.gz helvB14-ISO8859-1.pcf.gz'
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for bitmap font files" >&5
+$as_echo_n "checking for bitmap font files... " >&6; }
+for d in /usr/share/fonts/X11 \
+ /usr/share/X11/fonts \
+ /opt/X11/share/fonts \
+; do
+ for r in 100dpi 75dpi ; do
+ for f in $ff ; do
+ if test -f "$d/$r/$f" ; then
+ have_bitmap_fonts=yes
+ fi
+ done
+ done
+done
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_bitmap_fonts" >&5
+$as_echo "$have_bitmap_fonts" >&6; }
+
+# In case we didn't guess the font directory properly, check RPMs and DEBs too.
+if test $have_bitmap_fonts != yes ; then
+ for r in 100dpi 75dpi ; do
+ for f in xfonts-$r \
+ xorg-x11-fonts-$r \
+ xorg-x11-fonts-ISO8859-1-$r \
+ ; do
+ if test $have_bitmap_fonts != yes ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $f" >&5
+$as_echo_n "checking for $f... " >&6; }
+ if ( rpm -q "$f" 2>&- >&- ) ||
+ ( dpkg -s "$f" 2>&- | grep -q '^Status:.*installed' ) ; then
+ have_bitmap_fonts=yes
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_bitmap_fonts" >&5
+$as_echo "$have_bitmap_fonts" >&6; }
+ fi
+ done
+ done
fi
@@ -15471,162 +16137,163 @@ fi
fi
+
###############################################################################
#
-# Check for the XSHM server extension.
+# Query AX_PTHREAD, and figure out which compiler gets used.
#
###############################################################################
-have_xshm=no
-with_xshm_req=unspecified
-
-# Check whether --with-xshm-ext was given.
-if test "${with_xshm_ext+set}" = set; then :
- withval=$with_xshm_ext; with_xshm="$withval"; with_xshm_req="$withval"
-else
- with_xshm=yes
-fi
-
-
-
- case "$with_xshm" in
- yes) ;;
- no) ;;
-
- /*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XSHM headers" >&5
-$as_echo_n "checking for XSHM headers... " >&6; }
- d=$with_xshm/include
- if test -d $d; then
- X_CFLAGS="-I$d $X_CFLAGS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
-$as_echo "$d" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
-$as_echo "not found ($d: no such directory)" >&6; }
- fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XSHM libs" >&5
-$as_echo_n "checking for XSHM libs... " >&6; }
- d=$with_xshm/lib
- if test -d $d; then
- X_LIBS="-L$d $X_LIBS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
-$as_echo "$d" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
-$as_echo "not found ($d: no such directory)" >&6; }
- fi
-
- # replace the directory string with "yes".
- with_xshm_req="yes"
- with_xshm=$with_xshm_req
- ;;
+have_pthread=no
+with_pthread_req=unspecified
- *)
- echo ""
- echo "error: argument to --with-xshm-ext must be \"yes\", \"no\", or a directory."
- echo " If it is a directory, then \`DIR/include' will be added to"
- echo " the -I list, and \`DIR/lib' will be added to the -L list."
- exit 1
- ;;
- esac
+# AX_PTHREAD is from the GNU Autoconf Archive.
+# https://savannah.gnu.org/projects/autoconf-archive/
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_pthread.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+#
+# DESCRIPTION
+#
+# This macro figures out how to build C programs using POSIX threads. It
+# sets the PTHREAD_LIBS output variable to the threads library and linker
+# flags, and the PTHREAD_CFLAGS output variable to any special C compiler
+# flags that are needed. (The user can also force certain compiler
+# flags/libs to be tested by setting these environment variables.)
+#
+# Also sets PTHREAD_CC to any special C compiler that is needed for
+# multi-threaded programs (defaults to the value of CC otherwise). (This
+# is necessary on AIX to use the special cc_r compiler alias.)
+#
+# NOTE: You are assumed to not only compile your program with these flags,
+# but also link it with them as well. e.g. you should link with
+# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
+#
+# If you are only building threads programs, you may wish to use these
+# variables in your default LIBS, CFLAGS, and CC:
+#
+# LIBS="$PTHREAD_LIBS $LIBS"
+# CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+# CC="$PTHREAD_CC"
+#
+# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
+# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
+# (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
+#
+# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the
+# PTHREAD_PRIO_INHERIT symbol is defined when compiling with
+# PTHREAD_CFLAGS.
+#
+# ACTION-IF-FOUND is a list of shell commands to run if a threads library
+# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
+# is not found. If ACTION-IF-FOUND is not specified, the default action
+# will define HAVE_PTHREAD.
+#
+# Please let the authors know if this macro fails on any platform, or if
+# you have any other suggestions or comments. This macro was based on work
+# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
+# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
+# Alejandro Forero Cuervo to the autoconf macro repository. We are also
+# grateful for the helpful feedback of numerous users.
+#
+# Updated for Autoconf 2.68 by Daniel Richard G.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
+# Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>
+#
+# 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 3 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception, the respective Autoconf Macro's copyright owner
+# gives unlimited permission to copy, distribute and modify the configure
+# scripts that are the output of Autoconf when processing the Macro. You
+# need not follow the terms of the GNU General Public License when using
+# or distributing such scripts, even though portions of the text of the
+# Macro appear in them. The GNU General Public License (GPL) does govern
+# all other use of the material that constitutes the Autoconf Macro.
+#
+# This special exception to the GPL applies to versions of the Autoconf
+# Macro released by the Autoconf Archive. When you make and distribute a
+# modified version of the Autoconf Macro, you may extend this special
+# exception to the GPL to apply to your modified version as well.
+#serial 21
-if test "$with_xshm" = yes; then
+# This is what autoupdate's m4 run will expand. It fires
+# the warning (with _au_warn_XXX), outputs it into the
+# updated configure.ac (with AC_DIAGNOSE), and then outputs
+# the replacement expansion.
- # first check for Xshm.h.
-
- ac_save_CPPFLAGS="$CPPFLAGS"
- if test \! -z "$includedir" ; then
- CPPFLAGS="$CPPFLAGS -I$includedir"
- fi
- CPPFLAGS="$CPPFLAGS $X_CFLAGS"
- CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
- ac_fn_c_check_header_compile "$LINENO" "X11/extensions/XShm.h" "ac_cv_header_X11_extensions_XShm_h" "#include <X11/Xlib.h>
-"
-if test "x$ac_cv_header_X11_extensions_XShm_h" = xyes; then :
- have_xshm=yes
-fi
+# This is an auxiliary macro that is also run when
+# autoupdate runs m4. It simply calls m4_warning, but
+# we need a wrapper so that each warning is emitted only
+# once. We break the quoting in m4_warning's argument in
+# order to expand this macro's arguments, not AU_DEFUN's.
- CPPFLAGS="$ac_save_CPPFLAGS"
- # if that succeeded, then check for sys/ipc.h.
- if test "$have_xshm" = yes; then
- have_xshm=no
+# Finally, this is the expansion that is picked up by
+# autoconf. It tells the user to run autoupdate, and
+# then outputs the replacement expansion. We do not care
+# about autoupdate's warning because that contains
+# information on what to do *after* running autoupdate.
- ac_save_CPPFLAGS="$CPPFLAGS"
- if test \! -z "$includedir" ; then
- CPPFLAGS="$CPPFLAGS -I$includedir"
- fi
- CPPFLAGS="$CPPFLAGS $X_CFLAGS"
- CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
- ac_fn_c_check_header_mongrel "$LINENO" "sys/ipc.h" "ac_cv_header_sys_ipc_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_ipc_h" = xyes; then :
- have_xshm=yes
-fi
- CPPFLAGS="$ac_save_CPPFLAGS"
- fi
+# This affects CC, LIBS, and CFLAGS, instead of defining new variables.
- # if that succeeded, then check for sys/shm.h.
- if test "$have_xshm" = yes; then
- have_xshm=no
- ac_save_CPPFLAGS="$CPPFLAGS"
- if test \! -z "$includedir" ; then
- CPPFLAGS="$CPPFLAGS -I$includedir"
- fi
- CPPFLAGS="$CPPFLAGS $X_CFLAGS"
- CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
- ac_fn_c_check_header_mongrel "$LINENO" "sys/shm.h" "ac_cv_header_sys_shm_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_shm_h" = xyes; then :
- have_xshm=yes
+# Check whether --with-pthread was given.
+if test "${with_pthread+set}" = set; then :
+ withval=$with_pthread; with_pthread="$withval"; with_pthread_req="$withval"
+else
+ with_pthread=yes
fi
- CPPFLAGS="$ac_save_CPPFLAGS"
- fi
+if test "$with_pthread" = yes; then
+ # AX_PTHREAD might want a different compiler.
- # AIX is pathological, as usual: apparently it's normal for the Xshm headers
- # to exist, but the library code to not exist. And even better, the library
- # code is in its own library: libXextSam.a. So, if we're on AIX, and that
- # lib doesn't exist, give up. (This lib gets added to X_EXTRA_LIBS, and
- # that's not quite right, but close enough.)
- #
- case "$host" in
- *-aix*)
- if `uname -v` -eq 3 ; then
- have_xshm=no
- ac_save_CPPFLAGS="$CPPFLAGS"
- ac_save_LDFLAGS="$LDFLAGS"
-# ac_save_LIBS="$LIBS"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
- if test \! -z "$includedir" ; then
- CPPFLAGS="$CPPFLAGS -I$includedir"
- fi
- # note: $X_CFLAGS includes $x_includes
- CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ax_pthread_ok=no
- if test \! -z "$libdir" ; then
- LDFLAGS="$LDFLAGS -L$libdir"
- fi
- # note: $X_LIBS includes $x_libraries
- LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS"
+# We used to check for pthread.h first, but this fails if pthread.h
+# requires special compiler flags (e.g. on True64 or Sequent).
+# It gets checked for in the link test anyway.
- CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
- LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS`
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XShmQueryExtension in -lXextSam" >&5
-$as_echo_n "checking for XShmQueryExtension in -lXextSam... " >&6; }
-if ${ac_cv_lib_XextSam_XShmQueryExtension+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXextSam -lX11 -lXext -lm $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+# First of all, check if the user has set any of the PTHREAD_LIBS,
+# etcetera environment variables, and if threads linking works using
+# them:
+if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+ save_LIBS="$LIBS"
+ LIBS="$PTHREAD_LIBS $LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5
+$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
@@ -15635,506 +16302,430 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
-char XShmQueryExtension ();
+char pthread_join ();
int
main ()
{
-return XShmQueryExtension ();
+return pthread_join ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_XextSam_XShmQueryExtension=yes
-else
- ac_cv_lib_XextSam_XShmQueryExtension=no
+ ax_pthread_ok=yes
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_XextSam_XShmQueryExtension" >&5
-$as_echo "$ac_cv_lib_XextSam_XShmQueryExtension" >&6; }
-if test "x$ac_cv_lib_XextSam_XShmQueryExtension" = xyes; then :
- have_xshm=yes; X_EXTRA_LIBS="$X_EXTRA_LIBS -lXextSam"
-else
- true
-fi
-
- CPPFLAGS="$ac_save_CPPFLAGS"
- LDFLAGS="$ac_save_LDFLAGS"
-# LIBS="$ac_save_LIBS"
-
- fi
- ;;
- esac
-
- # if that succeeded, then we've really got it.
- if test "$have_xshm" = yes; then
- $as_echo "#define HAVE_XSHM_EXTENSION 1" >>confdefs.h
-
- fi
-
-elif test "$with_xshm" != no; then
- echo "error: must be yes or no: --with-xshm-ext=$with_xshm"
- exit 1
-fi
-
-
-###############################################################################
-#
-# Check for the DOUBLE-BUFFER server extension.
-#
-###############################################################################
-
-have_xdbe=no
-with_xdbe_req=unspecified
-
-# Check whether --with-xdbe-ext was given.
-if test "${with_xdbe_ext+set}" = set; then :
- withval=$with_xdbe_ext; with_xdbe="$withval"; with_xdbe_req="$withval"
-else
- with_xdbe=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+ if test x"$ax_pthread_ok" = xno; then
+ PTHREAD_LIBS=""
+ PTHREAD_CFLAGS=""
+ fi
+ LIBS="$save_LIBS"
+ CFLAGS="$save_CFLAGS"
fi
+# We must check for the threads library under a number of different
+# names; the ordering is very important because some systems
+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+# libraries is broken (non-POSIX).
+# Create a list of thread flags to try. Items starting with a "-" are
+# C compiler flags, and other items are library names, except for "none"
+# which indicates that we try without any flags at all, and "pthread-config"
+# which is a program returning the flags for the Pth emulation library.
- case "$with_xdbe" in
- yes) ;;
- no) ;;
+ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
- /*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DOUBLE-BUFFER headers" >&5
-$as_echo_n "checking for DOUBLE-BUFFER headers... " >&6; }
- d=$with_xdbe/include
- if test -d $d; then
- X_CFLAGS="-I$d $X_CFLAGS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
-$as_echo "$d" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
-$as_echo "not found ($d: no such directory)" >&6; }
- fi
+# The ordering *is* (sometimes) important. Some notes on the
+# individual items follow:
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DOUBLE-BUFFER libs" >&5
-$as_echo_n "checking for DOUBLE-BUFFER libs... " >&6; }
- d=$with_xdbe/lib
- if test -d $d; then
- X_LIBS="-L$d $X_LIBS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
-$as_echo "$d" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
-$as_echo "not found ($d: no such directory)" >&6; }
- fi
+# pthreads: AIX (must check this before -lpthread)
+# none: in case threads are in libc; should be tried before -Kthread and
+# other compiler flags to prevent continual compiler warnings
+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
+# -pthreads: Solaris/gcc
+# -mthreads: Mingw32/gcc, Lynx/gcc
+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+# doesn't hurt to check since this sometimes defines pthreads too;
+# also defines -D_REENTRANT)
+# ... -mt is also the pthreads flag for HP/aCC
+# pthread: Linux, etcetera
+# --thread-safe: KAI C++
+# pthread-config: use pthread-config program (for GNU Pth library)
- # replace the directory string with "yes".
- with_xdbe_req="yes"
- with_xdbe=$with_xdbe_req
- ;;
+case ${host_os} in
+ solaris*)
- *)
- echo ""
- echo "error: argument to --with-xdbe-ext must be \"yes\", \"no\", or a directory."
- echo " If it is a directory, then \`DIR/include' will be added to"
- echo " the -I list, and \`DIR/lib' will be added to the -L list."
- exit 1
- ;;
- esac
+ # On Solaris (at least, for some versions), libc contains stubbed
+ # (non-functional) versions of the pthreads routines, so link-based
+ # tests will erroneously succeed. (We need to link with -pthreads/-mt/
+ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
+ # a function called by this macro, so we could check for that, but
+ # who knows whether they'll stub that too in a future libc.) So,
+ # we'll just look for -pthreads and -lpthread first:
+ ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
+ ;;
-if test "$with_xdbe" = yes; then
+ darwin*)
+ ax_pthread_flags="-pthread $ax_pthread_flags"
+ ;;
+esac
+# Clang doesn't consider unrecognized options an error unless we specify
+# -Werror. We throw in some extra Clang-specific options to ensure that
+# this doesn't happen for GCC, which also accepts -Werror.
- ac_save_CPPFLAGS="$CPPFLAGS"
- if test \! -z "$includedir" ; then
- CPPFLAGS="$CPPFLAGS -I$includedir"
- fi
- CPPFLAGS="$CPPFLAGS $X_CFLAGS"
- CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
- ac_fn_c_check_header_compile "$LINENO" "X11/extensions/Xdbe.h" "ac_cv_header_X11_extensions_Xdbe_h" "#include <X11/Xlib.h>
-"
-if test "x$ac_cv_header_X11_extensions_Xdbe_h" = xyes; then :
- have_xdbe=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler needs -Werror to reject unknown flags" >&5
+$as_echo_n "checking if compiler needs -Werror to reject unknown flags... " >&6; }
+save_CFLAGS="$CFLAGS"
+ax_pthread_extra_flags="-Werror"
+CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo(void);
+int
+main ()
+{
+foo()
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ ax_pthread_extra_flags=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+CFLAGS="$save_CFLAGS"
+if test x"$ax_pthread_ok" = xno; then
+for flag in $ax_pthread_flags; do
- CPPFLAGS="$ac_save_CPPFLAGS"
- if test "$have_xdbe" = yes; then
- $as_echo "#define HAVE_DOUBLE_BUFFER_EXTENSION 1" >>confdefs.h
+ case $flag in
+ none)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5
+$as_echo_n "checking whether pthreads work without any flags... " >&6; }
+ ;;
+
+ -*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5
+$as_echo_n "checking whether pthreads work with $flag... " >&6; }
+ PTHREAD_CFLAGS="$flag"
+ ;;
+ pthread-config)
+ # Extract the first word of "pthread-config", so it can be a program name with args.
+set dummy pthread-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ax_pthread_config+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ax_pthread_config"; then
+ ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ax_pthread_config="yes"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
fi
+done
+ done
+IFS=$as_save_IFS
-elif test "$with_xdbe" != no; then
- echo "error: must be yes or no: --with-xdbe-ext=$with_xshm"
- exit 1
+ test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no"
fi
-
-
-###############################################################################
-#
-# Check for the SGI XReadDisplay server extension.
-#
-# Note: this has to be down here, rather than up with the other server
-# extension tests, so that the output of `configure --help' is in the
-# right order. Arrgh!
-#
-###############################################################################
-
-have_readdisplay=no
-with_readdisplay_req=unspecified
-
-# Check whether --with-readdisplay was given.
-if test "${with_readdisplay+set}" = set; then :
- withval=$with_readdisplay; with_readdisplay="$withval"; with_readdisplay_req="$withval"
+fi
+ax_pthread_config=$ac_cv_prog_ax_pthread_config
+if test -n "$ax_pthread_config"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5
+$as_echo "$ax_pthread_config" >&6; }
else
- with_readdisplay=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
+ if test x"$ax_pthread_config" = xno; then continue; fi
+ PTHREAD_CFLAGS="`pthread-config --cflags`"
+ PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+ ;;
- case "$with_readdisplay" in
- yes) ;;
- no) ;;
-
- /*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XReadDisplay headers" >&5
-$as_echo_n "checking for XReadDisplay headers... " >&6; }
- d=$with_readdisplay/include
- if test -d $d; then
- X_CFLAGS="-I$d $X_CFLAGS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
-$as_echo "$d" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
-$as_echo "not found ($d: no such directory)" >&6; }
- fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XReadDisplay libs" >&5
-$as_echo_n "checking for XReadDisplay libs... " >&6; }
- d=$with_readdisplay/lib
- if test -d $d; then
- X_LIBS="-L$d $X_LIBS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
-$as_echo "$d" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
-$as_echo "not found ($d: no such directory)" >&6; }
- fi
-
- # replace the directory string with "yes".
- with_readdisplay_req="yes"
- with_readdisplay=$with_readdisplay_req
- ;;
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5
+$as_echo_n "checking for the pthreads library -l$flag... " >&6; }
+ PTHREAD_LIBS="-l$flag"
+ ;;
+ esac
- *)
- echo ""
- echo "error: argument to --with-readdisplay must be \"yes\", \"no\", or a directory."
- echo " If it is a directory, then \`DIR/include' will be added to"
- echo " the -I list, and \`DIR/lib' will be added to the -L list."
- exit 1
- ;;
- esac
+ save_LIBS="$LIBS"
+ save_CFLAGS="$CFLAGS"
+ LIBS="$PTHREAD_LIBS $LIBS"
+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags"
+ # Check for various functions. We must include pthread.h,
+ # since some functions may be macros. (On the Sequent, we
+ # need a special flag -Kthread to make this header compile.)
+ # We check for pthread_join because it is in -lpthread on IRIX
+ # while pthread_create is in libc. We check for pthread_attr_init
+ # due to DEC craziness with -lpthreads. We check for
+ # pthread_cleanup_push because it is one of the few pthread
+ # functions on Solaris that doesn't have a non-functional libc stub.
+ # We try pthread_create on general principles.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+ static void routine(void *a) { a = 0; }
+ static void *start_routine(void *a) { return a; }
+int
+main ()
+{
+pthread_t th; pthread_attr_t attr;
+ pthread_create(&th, 0, start_routine, 0);
+ pthread_join(th, 0);
+ pthread_attr_init(&attr);
+ pthread_cleanup_push(routine, 0);
+ pthread_cleanup_pop(0) /* ; */
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_pthread_ok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
-if test "$with_readdisplay" = yes; then
+ LIBS="$save_LIBS"
+ CFLAGS="$save_CFLAGS"
- ac_save_CPPFLAGS="$CPPFLAGS"
- if test \! -z "$includedir" ; then
- CPPFLAGS="$CPPFLAGS -I$includedir"
- fi
- CPPFLAGS="$CPPFLAGS $X_CFLAGS"
- CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS`
- ac_fn_c_check_header_compile "$LINENO" "X11/extensions/readdisplay.h" "ac_cv_header_X11_extensions_readdisplay_h" "#include <X11/Xlib.h>
-"
-if test "x$ac_cv_header_X11_extensions_readdisplay_h" = xyes; then :
- $as_echo "#define HAVE_READ_DISPLAY_EXTENSION 1" >>confdefs.h
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+ if test "x$ax_pthread_ok" = xyes; then
+ break;
+ fi
+ PTHREAD_LIBS=""
+ PTHREAD_CFLAGS=""
+done
fi
+# Various other checks:
+if test "x$ax_pthread_ok" = xyes; then
+ save_LIBS="$LIBS"
+ LIBS="$PTHREAD_LIBS $LIBS"
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
- CPPFLAGS="$ac_save_CPPFLAGS"
-elif test "$with_readdisplay" != no; then
- echo "error: must be yes or no: --with-readdisplay=$with_readdisplay"
- exit 1
+ # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
+$as_echo_n "checking for joinable pthread attribute... " >&6; }
+ attr_name=unknown
+ for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+int
+main ()
+{
+int attr = $attr; return attr /* ; */
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ attr_name=$attr; break
fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5
+$as_echo "$attr_name" >&6; }
+ if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
+cat >>confdefs.h <<_ACEOF
+#define PTHREAD_CREATE_JOINABLE $attr_name
+_ACEOF
-###############################################################################
-#
-# Check for a directory full of images to use as the default value
-# of the "imageDirectory" preference.
-#
-###############################################################################
+ fi
-have_imagedir=no
-with_imagedir_req=unspecified
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5
+$as_echo_n "checking if more special flags are required for pthreads... " >&6; }
+ flag=no
+ case ${host_os} in
+ aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
+ osf* | hpux*) flag="-D_REENTRANT";;
+ solaris*)
+ if test "$GCC" = "yes"; then
+ flag="-D_REENTRANT"
+ else
+ # TODO: What about Clang on Solaris?
+ flag="-mt -D_REENTRANT"
+ fi
+ ;;
+ esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag" >&5
+$as_echo "$flag" >&6; }
+ if test "x$flag" != xno; then
+ PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5
+$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; }
+if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
-# Check whether --with-image-directory was given.
-if test "${with_image_directory+set}" = set; then :
- withval=$with_image_directory; with_imagedir="$withval"; with_imagedir_req="$withval"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+int
+main ()
+{
+int i = PTHREAD_PRIO_INHERIT;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_cv_PTHREAD_PRIO_INHERIT=yes
else
- with_imagedir=yes
+ ax_cv_PTHREAD_PRIO_INHERIT=no
fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
-# no HANDLE_X_PATH_ARG for this one
-
-case "$with_imagedir" in
- /*)
- # absolute path
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for image directory $with_imagedir" >&5
-$as_echo_n "checking for image directory $with_imagedir... " >&6; }
- if test -d "$with_imagedir" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- with_imagedir=""
- fi
- ;;
- yes)
- with_imagedir=""
-
- #### Could use some more defaults here...
- for dd in \
- "/usr/share/backgrounds/images/" \
- "/usr/share/wallpapers/" \
- "/Library/Desktop Pictures/" \
- ; do
- if test -z "$with_imagedir"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for image directory $dd" >&5
-$as_echo_n "checking for image directory $dd... " >&6; }
- if test -d "$dd" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- with_imagedir="$dd"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
- fi
- done
-
- ;;
- no)
- with_imagedir=""
- ;;
-
- *)
- echo "error: must be an absolute path: --with-image-directory=$with_imagedir_req"
- exit 1
- ;;
-esac
-ac_cv_imagedir="$with_imagedir"
-
-DEFAULT_IMAGES_P='True'
-DEFAULT_IMAGE_DIRECTORY="$ac_cv_imagedir"
-
-if test -z "$DEFAULT_IMAGE_DIRECTORY" ; then
- DEFAULT_IMAGES_P='False'
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5
+$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; }
+ if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"; then :
+$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h
-###############################################################################
-#
-# Pick a text file to use as the default of the "textFile" preference.
-# Any old file will do, but preferably one that will make interesting
-# shapes when displayed by "starwars" and "fontglide".
-#
-###############################################################################
+fi
-have_textfile=no
-with_textfile_req=unspecified
+ LIBS="$save_LIBS"
+ CFLAGS="$save_CFLAGS"
+ # More AIX lossage: compile with *_r variant
+ if test "x$GCC" != xyes; then
+ case $host_os in
+ aix*)
+ case "x/$CC" in #(
+ x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) :
+ #handle absolute path differently from PATH based program lookup
+ case "x$CC" in #(
+ x/*) :
+ if as_fn_executable_p ${CC}_r; then :
+ PTHREAD_CC="${CC}_r"
+fi ;; #(
+ *) :
+ for ac_prog in ${CC}_r
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_PTHREAD_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$PTHREAD_CC"; then
+ ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_PTHREAD_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
-# Check whether --with-text-file was given.
-if test "${with_text_file+set}" = set; then :
- withval=$with_text_file; with_textfile="$withval"; with_textfile_req="$withval"
+fi
+fi
+PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
+if test -n "$PTHREAD_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5
+$as_echo "$PTHREAD_CC" >&6; }
else
- with_textfile=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
-# no HANDLE_X_PATH_ARG for this one
-
-case "$with_textfile" in
- /*)
- # absolute path
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for text file $with_textfile" >&5
-$as_echo_n "checking for text file $with_textfile... " >&6; }
- if test -f "$with_textfile" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- with_textfile=""
- fi
- ;;
- yes)
- with_textfile=""
- #### Could use some more defaults here...
- for f in \
- "/usr/X11R6/lib/X11/doc/README" \
- "/usr/share/doc/xserver-common/copyright" \
- "/usr/share/doc/xserver-xorg-core/copyright" \
- "/usr/X11R6/README" \
- "/usr/share/doc/libX11*/COPYING" \
- "/usr/X11/share/X11/doc/README*" \
- "/usr/share/doc/debian/debian-manifesto" \
- ; do
- if test -z "$with_textfile"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for text file $f" >&5
-$as_echo_n "checking for text file $f... " >&6; }
- f=`/bin/ls $f 2>&- | head -1`
- if test -f "$f" ; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- with_textfile="$f"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+ test -n "$PTHREAD_CC" && break
+done
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+ ;;
+esac ;; #(
+ *) :
+ ;;
+esac
+ ;;
+ esac
fi
- fi
- done
-
- ;;
- no)
- with_textfile=""
- ;;
+fi
- *)
- echo "error: must be an absolute path: --with-text-file=$with_textfile_req"
- exit 1
- ;;
-esac
-ac_cv_textfile="$with_textfile"
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
-DEFAULT_TEXT_FILE="$ac_cv_textfile"
-###############################################################################
-#
-# Check the browser to see help URL
-#
-###############################################################################
-have_browser=no
-with_browser_req=unspecified
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test x"$ax_pthread_ok" = xyes; then
+ if test "$CC" = "$PTHREAD_CC" -o -z "$ac_original_cc"; then
+ have_pthread=yes
+ else
+ ac_prog_cc_no_pthread=yes
+ fi
-# Check whether --with-browser was given.
-if test "${with_browser+set}" = set; then :
- withval=$with_browser; with_browser="$withval"; with_browser_req="$withval"
+ :
else
- with_browser=no
-fi
-
-# no HANDLE_X_PATH_ARG for this one
-
-case "$with_browser" in
- no )
- ;;
- * )
- WITH_BROWSER=$with_browser
- gnome_open_program=$with_browser
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for browser $with_browser" >&5
-$as_echo_n "checking for browser $with_browser... " >&6; }
- with_browser_fullpath=`which $with_browser 2>/dev/null`
- case $with_browser_fullpath in
- /* )
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- have_browser=yes
- ;;
- * )
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-# Only warning: we don't want to install all packages for the
-# dependency of the browser in building stage...
- echo "WARNING: browser not found: --with-browser=$with_browser"
- ;;
- esac
- ;;
-esac
-ac_cv_browser="$with_browser"
-
-###############################################################################
-#
-# Check whether it's ok to install some hacks as setuid (e.g., "sonar")
-# This should be safe, but let's give people the option.
-#
-###############################################################################
-
-setuid_hacks_default=no
-setuid_hacks="$setuid_hacks_default"
+ ax_pthread_ok=no
-# Check whether --with-setuid-hacks was given.
-if test "${with_setuid_hacks+set}" = set; then :
- withval=$with_setuid_hacks; setuid_hacks="$withval"
-else
- setuid_hacks="$setuid_hacks_default"
fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
- case "$setuid_hacks" in
- yes) ;;
- no) ;;
-
- /*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setuid hacks headers" >&5
-$as_echo_n "checking for setuid hacks headers... " >&6; }
- d=$setuid_hacks/include
- if test -d $d; then
- X_CFLAGS="-I$d $X_CFLAGS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
-$as_echo "$d" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
-$as_echo "not found ($d: no such directory)" >&6; }
- fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setuid hacks libs" >&5
-$as_echo_n "checking for setuid hacks libs... " >&6; }
- d=$setuid_hacks/lib
- if test -d $d; then
- X_LIBS="-L$d $X_LIBS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
-$as_echo "$d" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
-$as_echo "not found ($d: no such directory)" >&6; }
- fi
-
- # replace the directory string with "yes".
- setuid_hacks_req="yes"
- setuid_hacks=$setuid_hacks_req
- ;;
-
- *)
- echo ""
- echo "error: argument to --with-setuid-hacks must be \"yes\", \"no\", or a directory."
- echo " If it is a directory, then \`DIR/include' will be added to"
- echo " the -I list, and \`DIR/lib' will be added to the -L list."
- exit 1
- ;;
- esac
-
+ if test "$have_pthread" = yes; then
+ $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
-if test "$setuid_hacks" = yes; then
- true
-elif test "$setuid_hacks" != no; then
- echo "error: must be yes or no: --with-setuid-hacks=$setuid_hacks"
- exit 1
+ CC=$PTHREAD_CC
+ fi
fi
###############################################################################
#
-# Check for setcap, which is less worrying than setuid.
+# Check for libcap, which allows "sonar" to work without setuid.
#
###############################################################################
@@ -16335,6 +16926,82 @@ fi
###############################################################################
#
+# Option to prevent "sonar" from working properly.
+# It must be setuid on systems without libcap.
+#
+###############################################################################
+
+if test "$have_libcap" = yes; then
+ setuid_hacks_default=no
+else
+ setuid_hacks_default=yes
+fi
+
+setuid_hacks="$setuid_hacks_default"
+
+# Check whether --with-setuid-hacks was given.
+if test "${with_setuid_hacks+set}" = set; then :
+ withval=$with_setuid_hacks; setuid_hacks="$withval"
+else
+ setuid_hacks="$setuid_hacks_default"
+fi
+
+
+
+ case "$setuid_hacks" in
+ yes) ;;
+ no) ;;
+
+ /*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setuid hacks headers" >&5
+$as_echo_n "checking for setuid hacks headers... " >&6; }
+ d=$setuid_hacks/include
+ if test -d $d; then
+ X_CFLAGS="-I$d $X_CFLAGS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setuid hacks libs" >&5
+$as_echo_n "checking for setuid hacks libs... " >&6; }
+ d=$setuid_hacks/lib
+ if test -d $d; then
+ X_LIBS="-L$d $X_LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5
+$as_echo "$d" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5
+$as_echo "not found ($d: no such directory)" >&6; }
+ fi
+
+ # replace the directory string with "yes".
+ setuid_hacks_req="yes"
+ setuid_hacks=$setuid_hacks_req
+ ;;
+
+ *)
+ echo ""
+ echo "error: argument to --with-setuid-hacks must be \"yes\", \"no\", or a directory."
+ echo " If it is a directory, then \`DIR/include' will be added to"
+ echo " the -I list, and \`DIR/lib' will be added to the -L list."
+ exit 1
+ ;;
+ esac
+
+
+if test "$setuid_hacks" = yes; then
+ true
+elif test "$setuid_hacks" != no; then
+ echo "error: must be yes or no: --with-setuid-hacks=$setuid_hacks"
+ exit 1
+fi
+
+
+###############################################################################
+#
# Check for --with-record-animation
#
###############################################################################
@@ -16415,6 +17082,7 @@ $as_echo "enabling --with-record-animation" >&6; }
fi
fi
+
###############################################################################
#
# Done testing. Now, set up the various -I and -L variables,
@@ -16671,9 +17339,6 @@ INCLUDES=`echo "$INCLUDES" | sed 's@ -I${prefix}/include@@g;'`
-
-
-
APPDEFAULTS=$ac_x_app_defaults
@@ -16682,7 +17347,7 @@ APPDEFAULTS=$ac_x_app_defaults
-ac_config_files="$ac_config_files Makefile utils/Makefile jwxyz/Makefile hacks/Makefile hacks/images/Makefile hacks/glx/Makefile po/Makefile.in driver/Makefile driver/xscreensaver.pam driver/xscreensaver-demo.glade2 driver/XScreenSaver.ad"
+ac_config_files="$ac_config_files Makefile utils/Makefile jwxyz/Makefile hacks/Makefile hacks/images/Makefile hacks/glx/Makefile po/Makefile.in driver/Makefile driver/xscreensaver.pam driver/XScreenSaver.ad"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -17398,7 +18063,6 @@ do
"po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
"driver/Makefile") CONFIG_FILES="$CONFIG_FILES driver/Makefile" ;;
"driver/xscreensaver.pam") CONFIG_FILES="$CONFIG_FILES driver/xscreensaver.pam" ;;
- "driver/xscreensaver-demo.glade2") CONFIG_FILES="$CONFIG_FILES driver/xscreensaver-demo.glade2" ;;
"driver/XScreenSaver.ad") CONFIG_FILES="$CONFIG_FILES driver/XScreenSaver.ad" ;;
"po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;;
@@ -18094,6 +18758,10 @@ if test "$with_xidle_req" = yes -a "$have_xidle" = no ; then
warn 'The XIdle extension was requested, but was not found.'
fi
+if test "$with_mit_req" = yes -a "$have_mit" = no ; then
+ warn 'The MIT-SCREEN-SAVER extension was requested, but was not found.'
+fi
+
if test "$with_xshm_req" = yes -a "$have_xshm" = no ; then
warn 'The XSHM extension was requested, but was not found.'
fi
@@ -18340,19 +19008,29 @@ if test "$have_xft" = no ; then
fi
+if test "$have_bitmap_fonts" = no ; then
+ warnL 'The standard bitmap fonts do not seem to be installed.'
+ warn2 'That is not going to work out well for you.'
+ warn2 'Install "xfonts-100dpi" or "xorg-x11-fonts-100dpi".'
+fi
+
+
if test "$have_systemd" = no ; then
systemd_warned=no
- if test "$with_systemd_req" = yes ; then
+ if test "$systemd_too_old" = yes ; then
+ warnL "The systemd library is too old."
+ systemd_warned=yes
+ elif test "$with_systemd_req" = yes ; then
warnL "Use of systemd was requested, but it was not found."
systemd_warned=yes
- elif test "$with_systemd_req" = no ; then
+ elif test "$ac_macosx" = yes; then
true
- # noteL 'The systemd library is not being used.'
- # systemd_warned=yes
+ elif test "$with_systemd_req" = no ; then
+ noteL 'The systemd library is not being used.'
+ systemd_warned=yes
else
- true
- # noteL "The systemd library was not found."
- # systemd_warned=yes
+ warnL "The systemd library was not found."
+ systemd_warned=yes
fi
if test "$systemd_halfassed" = yes ; then
@@ -18366,7 +19044,11 @@ if test "$have_systemd" = no ; then
fi
if test "$systemd_warned" = yes; then
+ echo ''
warn2 "This means that xscreensaver-systemd won't be built."
+ warn2 "Without that, xscreensaver will not be able to auto-lock"
+ warn2 "before the system is suspended (e.g., closing laptop lid)"
+ warn2 "and might activate while video playback is in progress."
fi
fi
@@ -18507,8 +19189,6 @@ for bad_choice in xscreensaver xscreensaver-demo xscreensaver-command ; do
done
-do_dir_warning=no
-
# Now let's warn if there's a previous RPM version already installed.
# But don't bother with this test if we are currently *building* an RPM.
@@ -18524,27 +19204,38 @@ if test -z "$RPM_PACKAGE_VERSION" ; then
if test \! -z "$rpmv" ; then
- rpmbdir=`rpm -ql $rpmnames | sed -n 's@^\(.*\)/xscreensaver-demo$@\1@p'`
- rpmhdir=`rpm -ql $rpmnames | sed -n 's@^\(.*\)/popsquares$@\1@p'`
+
+ # M4 sucks!!
+
+ rpmbdir=`rpm -ql $rpmnames | sed -n 's@^\(.*/\)xscreensaver-demo$@\1@p'`
+ rpmhdir=`rpm -ql $rpmnames | sed -n 's@^\(.*/\)popsquares$@\1@p'`
+ rpmcdir=`rpm -ql $rpmnames | sed -n 's@^\(.*/\)popsquares\.xml$@\1@p'`
+ rpmadir=`rpm -ql $rpmnames | sed -n 's@^\(.*/\)XScreenSaver$@\1@p'`
+
+
+ err=" (DIFFERS)"
+ if test -z "$rpmbdir" ; then rpmbdir='???'
+ elif test "$rpmbdir" != "${bindir}/" ; then rpmbdir="$rpmbdir$err";fi
+
+ if test -z "$rpmhdir" ; then rpmhdir='???'
+ elif test "$rpmhdir" != "${HACKDIR}/" ; then rpmhdir="$rpmhdir$err";fi
+
+ if test -z "$rpmcdir" ; then rpmcdir='???'
+ elif test "$rpmcdir" != "${HACK_CONF_DIR}/"; then rpmcdir="$rpmcdir$err";fi
+
+ if test -z "$rpmadir" ; then rpmadir='???'
+ elif test "$rpmadir" != "${APPDEFAULTS}/" ; then rpmadir="$rpmadir$err";fi
warning=no
- warnL "There is already an installed RPM of xscreensaver $rpmv"
- warn2 'on this system. You might want to remove it ("rpm -ve")'
- warn2 'before running "make install" in this directory.'
+ warnL "There is already an installed RPM of xscreensaver"
+ warn2 "version \"$rpmv\" on this system."
echo ""
- warn2 "Alternately, you could build this version of xscreensaver"
- warn2 'as an RPM, and then install that. An "xscreensaver.spec"'
- warn2 'file is included. Try "rpmbuild -v -ba xscreensaver.spec".'
- warn2 "See the RPM documentation for more info."
+ warn2 "It is currently installed in these directories:"
echo ""
-
- if test "$rpmbdir" = "$rpmhdir" ; then
- warn2 "The RPM version was installed in $rpmbdir/."
- do_dir_warning=yes
- else
- warn2 "The RPM version was installed in $rpmbdir/,"
- warn2 "with demos in $rpmhdir/."
- fi
+ warn2 "User programs: $rpmbdir$berr"
+ warn2 "Screen savers: $rpmhdir$herr"
+ warn2 "Configuration: $rpmcdir$cerr"
+ warn2 "App Defaults: $rpmadir$aerr"
fi
fi
@@ -18559,54 +19250,47 @@ for dpkg in $debnames ; do
done
if test \! -z "$debv" ; then
- debbdir=`dpkg -L $debnames 2>/dev/null | \
- sed -n 's@^\(.*/bin/\)xscreensaver$@\1@p'`
- debhdir=`dpkg -L $debnames 2>/dev/null | \
- sed -n 's@^\(.*/\)popsquares$@\1@p'`
- if test -z "$debbdir" ; then debbdir='???'; fi
- if test -z "$debhdir" ; then debhdir='???'; fi
- warning=no
- warnL "There is already an installed dpkg of xscreensaver"
- warn2 "version \"$debv\" on this system."
- echo ""
- warn2 "The dpkg was installed in $debbdir,"
- warn2 "with demos in $debhdir."
-fi
+ # M4 sucks!!
+ debbdir=`dpkg -L $debnames 2>&- | sed -n 's@^\(.*/bin/\)xscreensaver$@\1@p'`
+ debhdir=`dpkg -L $debnames 2>&- | sed -n 's@^\(.*/\)popsquares$@\1@p'`
+ debcdir=`dpkg -L $debnames 2>&- | sed -n 's@^\(.*/\)popsquares\.xml$@\1@p'`
+ debadir=`dpkg -L $debnames 2>&- | sed -n 's@^\(.*/\)XScreenSaver[^/]*$@\1@p'`
-if test "${bindir}" = "${HACKDIR}" ; then
- do_dir_warning=yes
-fi
-if test "$do_dir_warning" = yes; then
- echo ""
- echo "$warnsep"
- echo ""
- echo ' When you run "make install", the "xscreensaver",'
- echo ' "xscreensaver-demo", and "xscreensaver-command" executables'
- echo " will be installed in ${bindir}/."
- echo ""
- echo " The various graphics demos (200+ different executables) will"
- echo " be installed in ${HACKDIR}/."
- echo ""
- echo " If you would prefer the demos to be installed elsewhere,"
- echo " you should re-run configure with the --with-hackdir=DIR"
- echo " option. For more information, run \`./configure --help'."
- warning=yes
-fi
+ err=" (DIFFERS)"
+ if test -z "$debbdir" ; then debbdir='???'
+ elif test "$debbdir" != "${bindir}/" ; then debbdir="$debbdir$err"; fi
-if test "$warning" != no; then
- echo '' ; echo "$warnsep" ; echo ''
-fi
+ if test -z "$debhdir" ; then debhdir='???'
+ elif test "$debhdir" != "${HACKDIR}/" ; then debhdir="$debhdir$err"; fi
-if test "$do_dir_warning" = no; then
- if test "$warning" = no; then
- echo ''
- fi
- echo "User programs will be installed in ${bindir}/"
- echo "Screen savers will be installed in ${HACKDIR}/"
- echo "Configuration dialogs will be installed in ${HACK_CONF_DIR}/"
- echo "System-wide default settings will be installed in ${APPDEFAULTS}/"
- echo ''
-fi
+ if test -z "$debcdir" ; then debcdir='???'
+ elif test "$debcdir" != "${HACK_CONF_DIR}/" ; then debcdir="$debcdir$err"; fi
+
+ if test -z "$debadir" ; then debadir='???'
+ elif test "$debadir" != "${APPDEFAULTS}/" ; then debadir="$debadir$err"; fi
+
+ warning=no
+ warnL "There is already an installed dpkg of xscreensaver"
+ warn2 "version \"$debv\" on this system."
+ echo ""
+ warn2 "It is currently installed in these directories:"
+ echo ""
+ warn2 "User programs: $debbdir$berr"
+ warn2 "Screen savers: $debhdir$herr"
+ warn2 "Configuration: $debcdir$cerr"
+ warn2 "App Defaults: $debadir$aerr"
+fi
+
+echo ""
+echo "$warnsep"
+echo ""
+echo " XScreenSaver will be installed in these directories:"
+echo ""
+echo " User programs: ${bindir}/"
+echo " Screen savers: ${HACKDIR}/"
+echo " Configuration: ${HACK_CONF_DIR}/"
+echo " App Defaults: ${APPDEFAULTS}/"
+echo ""
diff --git a/configure.in b/configure.ac
index a2e943e..f827da9 100644
--- a/configure.in
+++ b/configure.ac
@@ -1,4 +1,4 @@
-# configure.in --- xscreensaver, Copyright (c) 1997-2014 Jamie Zawinski.
+# configure.in --- xscreensaver, Copyright (c) 1997-2020 Jamie Zawinski.
#
AC_PREREQ(2.52)
@@ -15,7 +15,7 @@ echo "command line was: $0 $@"
###############################################################################
AH_TOP([
-/* config.h.in --- xscreensaver, Copyright (c) 1991-2014 Jamie Zawinski.
+/* config.h.in --- xscreensaver, Copyright (c) 1991-2020 Jamie Zawinski.
*
* The best way to set these parameters is by running the included `configure'
* script. That examines your system, and generates `config.h' from
@@ -27,10 +27,7 @@ AH_TOP([
])
AH_TEMPLATE([HAVE_READ_DISPLAY_EXTENSION],
- [Define this if you have the XReadDisplay extension (I think
- this is an SGI-only thing; it's in
- <X11/extensions/readdisplay.h>.) A few of the screenhacks will
- take advantage of this if it's available.])
+ [Define this if you have the SGI XReadDisplay extension.])
AH_TEMPLATE([HAVE_XHPDISABLERESET],
[Define this if you have the XHPDisableReset function (an HP only
@@ -38,71 +35,46 @@ AH_TEMPLATE([HAVE_XHPDISABLERESET],
temporarily disabled.)])
# This only ever existed in X11R4 and X11R5.
-#AH_TEMPLATE([HAVE_XIDLE_EXTENSION],
-# [Define this if you have the XIDLE extension installed. If you
-# have the XIDLE extension, this is recommended. (You have this
-# extension if the file /usr/include/X11/extensions/xidle.h
-# exists.) Turning on this flag lets XScreenSaver work better with
-# servers which support this extension; but it will still work
-# with servers which do not suport it, so it's a good idea to
-# compile in support for it if you can.])
-
-# Using this extension will crash your X server and make fading not work.
-#AH_TEMPLATE([HAVE_MIT_SAVER_EXTENSION],
-# [Define this if you have the MIT-SCREEN-SAVER extension
-# installed. See the caveats about this extension, above.
-# (It's available if /usr/include/X11/extensions/scrnsaver.h
-# exists.)])
+AH_TEMPLATE([HAVE_XIDLE_EXTENSION],
+ [Define this if you have the X11R5 XIDLE extension.])
+
+AH_TEMPLATE([HAVE_MIT_SAVER_EXTENSION],
+ [Using the MIT-SCREEN-SAVER extension means that the X server
+ will crash at random times, and fading and hysteresis won't work.
+ Don't use this. You'll be sorry. See comment in xscreensaver.c.])
# This only ever existed on SGI hardware.
-#AH_TEMPLATE([HAVE_SGI_SAVER_EXTENSION],
-# [Define this if you have the SGI SCREEN_SAVER extension. This is
-# standard on Irix systems, and not available elsewhere.])
+AH_TEMPLATE([HAVE_SGI_SAVER_EXTENSION],
+ [Define this if you have the SGI SCREEN_SAVER extension.])
# This only ever existed on SGI hardware.
-#AH_TEMPLATE([HAVE_SGI_VC_EXTENSION],
-# [Define this if you have the SGI-VIDEO-CONTROL extension. This
-# is standard on Irix systems, and not available elsewhere.])
+AH_TEMPLATE([HAVE_SGI_VC_EXTENSION],
+ [Define this if you have the SGI-VIDEO-CONTROL extension.])
AH_TEMPLATE([HAVE_DPMS_EXTENSION],
- [Define this if you have the XDPMS extension. This is standard
- on sufficiently-recent XFree86 systems, and possibly elsewhere.
- (It's available if the file /usr/include/X11/extensions/dpms.h
- exists.)])
+ [Define this if you have the XDPMS extension.])
AH_TEMPLATE([HAVE_XF86VMODE],
[Define this if you have the functions XF86VidModeGetModeLine()
and XF86VidModeGetViewPort(), in support of virtual desktops
where the X server's root window is bigger than the actual
- screen. This is an XFree86 thing, and probably doesn't exist
- elsewhere. (It's available if the file
- /usr/include/X11/extensions/xf86vmode.h exists.)])
+ screen.])
AH_TEMPLATE([HAVE_XF86VMODE_GAMMA],
[Define this if you have the functions XF86VidModeGetGamma() and
XF86VidModeSetGamma(), which allow clients to change the gamma
- response of the monitor. This is an XFree86 4.0.x thing, and
- probably doesn't exist elsewhere. (It's available if the file
- /usr/include/X11/extensions/xf86vmode.h exists and has stuff about
- gamma in it.)])
+ response of the monitor.])
AH_TEMPLATE([HAVE_XF86VMODE_GAMMA_RAMP],
[Define this if you have the functions XF86VidModeGetGammaRamp()
and XF86VidModeSetGammaRamp(), which provide finer-grained
- control than XF86VidMode[GS]etGamma(). These appeared in
- XFree86 4.1.0.])
+ control than XF86VidMode[GS]etGamma().])
AH_TEMPLATE([HAVE_XINERAMA],
- [Define this if you have the Xinerama extension. This is
- standard on sufficiently-recent XFree86 systems, and possibly
- elsewhere. (It's available if the file
- /usr/include/X11/extensions/Xinerama.h exists.)])
+ [Define this if you have the Xinerama extension.])
AH_TEMPLATE([HAVE_XINPUT],
- [Define this if you have the Xinput extension. This is
- standard since X11R5, and is thus almost everywhere.
- (It's available if the file /usr/include/X11/extensions/XInput.h
- exists.)])
+ [Define this if you have the Xinput extension.])
AH_TEMPLATE([HAVE_XF86MISCSETGRABKEYSSTATE],
[Define this if you have the XF86MiscSetGrabKeysState function
@@ -111,10 +83,7 @@ AH_TEMPLATE([HAVE_XF86MISCSETGRABKEYSSTATE],
Ctrl-Alt-BS or Ctrl-Alt-F1.)])
AH_TEMPLATE([HAVE_RANDR],
- [Define this if you have the Resize and Rotate extension.
- This is standard on sufficiently-recent XFree86 systems, and
- possibly elsewhere. (It's available if the file
- /usr/include/X11/extensions/Xrandr.h exists.)])
+ [Define this if you have the Resize and Rotate extension.])
AH_TEMPLATE([HAVE_RANDR_12],
[Define this if the RANDR library is version 1.2 or newer.])
@@ -199,6 +168,11 @@ AH_TEMPLATE([HAVE_GLBINDTEXTURE],
routine. This is the case for OpenGL 1.1, but not for OpenGL
1.0.])
+AH_TEMPLATE([HAVE_GLSL],
+ [Define this if your OpenGL implementation supports the OpenGL
+ Shading Language (GLSL). This requires at least OpenGL 2.0.
+ HAVE_GL should be defined, too.])
+
AH_TEMPLATE([HAVE_GLE],
[Define this if you have the -lgle and -lmatrix libraries (GL
extrusion.)])
@@ -296,9 +270,7 @@ AH_TEMPLATE([HAVE_ADJUNCT_PASSWD],
let me know if it works.])
AH_TEMPLATE([HAVE_HPUX_PASSWD],
- [Define this if you are running HPUX with so-called ``Secure
- Passwords'' (if you have /usr/include/hpsecurity.h, you probably
- have this.) I haven't tested this one, let me know if it works.])
+ [Define this if you have HPUX with so-called "Secure Passwords".])
AH_TEMPLATE([HAVE_SYSLOG],
[Define this if you the openlog(), syslog(), and closelog()
@@ -355,45 +327,6 @@ done
###############################################################################
#
-# Query AX_PTHREAD, and figure out which compiler gets used.
-#
-###############################################################################
-
-AC_DEFUN([AC_PROG_CC_PTHREAD],
- [have_pthread=no
- with_pthread_req=unspecified
-
- # AX_PTHREAD is from the GNU Autoconf Archive.
- # https://savannah.gnu.org/projects/autoconf-archive/
- m4_include(ax_pthread.m4)
-
- # This affects CC, LIBS, and CFLAGS, instead of defining new variables.
-
- AC_ARG_WITH([pthread],
- [ --with-pthread Enables POSIX threads, for SMP support.],
- [with_pthread="$withval"; with_pthread_req="$withval"],
- [with_pthread=yes])
-
- if test "$with_pthread" = yes; then
- # AX_PTHREAD might want a different compiler.
- AX_PTHREAD(
- [if test "$CC" = "$PTHREAD_CC" -o -z "$ac_original_cc"; then
- have_pthread=yes
- else
- ac_prog_cc_no_pthread=yes
- fi
- ])
-
- if test "$have_pthread" = yes; then
- AC_DEFINE([HAVE_PTHREAD])
- CC=$PTHREAD_CC
- fi
- fi
-])
-
-
-###############################################################################
-#
# Function to figure out how to run the compiler.
#
###############################################################################
@@ -808,17 +741,6 @@ EOF
rm -fr conftestdir
fi])
-###############################################################################
-#
-# Handle the --with-x-app-defaults option HERE
-#
-###############################################################################
-
-AC_ARG_WITH(x-app-defaults,[],
- [ac_cv_x_app_defaults="$withval"],
- [eval ac_x_app_defaults="$withval"])
-
-
AC_DEFUN([AC_PATH_X_APP_DEFAULTS_DIRECT],[
# Look for the directory under a standard set of common directories.
# Check X11 before X11Rn because it's often a symlink to the current release.
@@ -1211,7 +1133,6 @@ AC_DEFUN([HANDLE_X_PATH_ARG], [
])
-
###############################################################################
###############################################################################
#
@@ -1224,14 +1145,11 @@ AC_DEFUN([HANDLE_X_PATH_ARG], [
test "x$prefix" = xNONE && prefix=$ac_default_prefix
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
# random compiler setup
AC_CANONICAL_HOST
ac_original_cc=$CC
AC_PROG_CC
-AC_PROG_CC_PTHREAD # Needs ac_original_cc.
-
AC_PROG_CC_ANSI
AC_NO_LONG_STRING_WARNINGS
AC_NO_MISPLACED_DECLARATIONS
@@ -1290,22 +1208,67 @@ if test "$have_x" != yes; then
AC_MSG_ERROR(Couldn't find X11 headers/libs. Try `$0 --help'.)
fi
-AC_PATH_X_APP_DEFAULTS
AC_X_RANDOM_PATHS
AC_XPOINTER
AC_MSG_CHECKING(whether this is MacOS X)
ac_macosx=no
+ ac_irix=no
case "$host" in
*-apple-darwin* )
ac_macosx=yes
;;
+ *-irix* )
+ ac_irix=yes
+ ;;
esac
AC_MSG_RESULT($ac_macosx)
###############################################################################
#
+# pkg-config
+#
+###############################################################################
+
+AC_PATH_TOOL(pkg_config, pkg-config)
+
+if test -z "$pkg_config" ; then
+ AC_MSG_WARN([pkg-config not found!])
+ pkg_config="false"
+fi
+
+
+# Utility function for running pkg-config-based tests...
+#
+pkgs=''
+pkg_check_version() {
+ if test "$ok" = yes ; then
+ req="$1"
+ min="$2"
+ AC_MSG_CHECKING(for $req)
+ if $pkg_config --exists "$req" ; then
+ vers=`$pkg_config --modversion "$req"`
+ if $pkg_config --exists "$req >= $min" ; then
+ AC_MSG_RESULT($vers)
+ pkgs="$pkgs $req"
+ return 1
+ else
+ AC_MSG_RESULT($vers (wanted >= $min))
+ ok=no
+ return 0
+ fi
+ else
+ AC_MSG_RESULT(no)
+ ok=no
+ return 0
+ fi
+ fi
+}
+
+
+###############################################################################
+#
# Gettext support
#
###############################################################################
@@ -1314,9 +1277,6 @@ IT_PROG_INTLTOOL
GETTEXT_PACKAGE=xscreensaver
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
[This is the name of the gettext package to use.])
-AC_DEFINE_UNQUOTED(PACKAGE, "$GETTEXT_PACKAGE",
- [This is the same as GETTEXT_PACKAGE, but for the glade
- generated code.])
AC_SUBST(GETTEXT_PACKAGE)
ALL_LINGUAS="da de es et fi fr hu it ja ko nb nl pl pt pt_BR ru sk sv vi wa zh_CN zh_TW"
@@ -1389,6 +1349,24 @@ if test "$have_xmu" = yes ; then
esac
fi
+###############################################################################
+#
+# The --with-x-app-defaults option
+#
+###############################################################################
+
+#### H1
+
+AC_ARG_WITH(app-defaults,[
+Installation Options:
+
+ --prefix=PREFIX Install root of architecture-independent files.
+ --exec-prefix=EPREFIX Install root of architecture-dependent files.
+ --with-app-defaults=DIR Where to install the default settings file.],
+ [ac_cv_x_app_defaults="$withval"],
+ [eval ac_x_app_defaults="$withval"])
+AC_PATH_X_APP_DEFAULTS
+
###############################################################################
#
@@ -1398,11 +1376,8 @@ fi
have_hackdir=yes
with_hackdir_req=unspecified
-AC_ARG_WITH(hackdir,[
-
-Installation options:
- --with-hackdir=DIR Where to install the hundreds of demo executables.
- Default: `PREFIX/libexec/xscreensaver/'],
+AC_ARG_WITH(hackdir,
+[ --with-hackdir=DIR Where to install the hundreds of demo executables.],
[with_hackdir="$withval"; with_hackdir_req="$withval"],[with_hackdir=yes])
if test x"$with_hackdir" = xyes; then
@@ -1435,19 +1410,13 @@ fi
###############################################################################
#
# Handle the --with-configdir option
-# Help for --with-x-app-defaults option added.
#
###############################################################################
have_configdir=yes
with_configdir_req=unspecified
AC_ARG_WITH(configdir,
-[ --with-configdir=DIR Where to install the data files that describe each
- of the display modes to the GUI.
- Default: `PREFIX/share/xscreensaver/config/'
- --with-x-app-defaults=DIR
- Where to install xscreensaver configuration file.
-],
+[ --with-configdir=DIR Where to install the GUI configuration files.],
[with_configdir="$withval"; with_configdir_req="$withval"],
[with_configdir=yes])
@@ -1469,120 +1438,21 @@ fi
-
-###############################################################################
-#
-# Check for the SGI SCREEN_SAVER server extension.
-#
-###############################################################################
-
-#have_sgi=no
-#with_sgi_req=unspecified
-#AC_ARG_WITH(sgi-ext,
-#[Except where noted, all of the --with options below can also take a
-#directory argument: for example, `--with-motif=/opt/Motif'. That would
-#cause /opt/Motif/include/ to be added to the -I list, and /opt/Motif/lib/
-#to be added to the -L list, assuming those directories exist.
-#
-#By default, support for each of these options will be built in, if the
-#relevant library routines exist. At run time, they will then be used
-#only if the X server being used supports them. Each --with option has
-#a corresponding --without option, to override building support for them
-#at all.
-#
-#Screen blanking and idle-detection options:
-#
-# --with-sgi-ext Include support for the SGI SCREEN_SAVER extension.],
-# [with_sgi="$withval"; with_sgi_req="$withval"],[with_sgi=yes])
-#
-#HANDLE_X_PATH_ARG(with_sgi, --with-sgi-ext, SGI SCREEN_SAVER)
-#
-#if test "$with_sgi" = yes; then
-# AC_CHECK_X_HEADER(X11/extensions/XScreenSaver.h,
-# [have_sgi=yes
-# AC_DEFINE(HAVE_SGI_SAVER_EXTENSION)],,
-# [#include <X11/Xlib.h>])
-#
-#elif test "$with_sgi" != no; then
-# echo "error: must be yes or no: --with-sgi-ext=$with_sgi"
-# exit 1
-#fi
-
-
-###############################################################################
-#
-# Check for the XIDLE server extension.
-#
-###############################################################################
-
-#have_xidle=no
-#with_xidle_req=unspecified
-#AC_ARG_WITH(xidle-ext,
-#[ --with-xidle-ext Include support for the XIDLE extension.],
-# [with_xidle="$withval"; with_xidle_req="$withval"],[with_xidle=yes])
-#
-#HANDLE_X_PATH_ARG(with_xidle, --with-xidle-ext, XIDLE)
-#
-#if test "$with_xidle" = yes; then
-# AC_CHECK_X_HEADER(X11/extensions/xidle.h,
-# [have_xidle=yes
-# AC_DEFINE(HAVE_XIDLE_EXTENSION)],,
-# [#include <X11/Xlib.h>])
-#elif test "$with_xidle" != no; then
-# echo "error: must be yes or no: --with-xidle-ext=$with_xidle"
-# exit 1
-#fi
-
-
-###############################################################################
-#
-# Check for the SGI-VIDEO-CONTROL server extension.
-#
-###############################################################################
-
-#have_sgivc=no
-#with_sgivc_req=unspecified
-#AC_ARG_WITH(sgivc-ext,
-#[ --with-sgivc-ext Include support for the SGI-VIDEO-CONTROL extension.],
-# [with_sgivc="$withval"; with_sgivc_req="$withval"],[with_sgivc=yes])
-#
-#HANDLE_X_PATH_ARG(with_sgivc, --with-sgivc-ext, SGI-VIDEO-CONTROL)
-#
-#if test "$with_sgivc" = yes; then
-#
-# # first check for XSGIvc.h
-# AC_CHECK_X_HEADER(X11/extensions/XSGIvc.h, [have_sgivc=yes],,
-# [#include <X11/Xlib.h>])
-#
-# # if that succeeded, then check for the -lXsgivc
-# if test "$have_sgivc" = yes; then
-# have_sgivc=no
-# AC_CHECK_X_LIB(Xsgivc, XSGIvcQueryGammaMap,
-# [have_sgivc=yes; SAVER_LIBS="$SAVER_LIBS -lXsgivc"], [true],
-# -lXext -lX11)
-# fi
-#
-# # if that succeeded, then we've really got it.
-# if test "$have_sgivc" = yes; then
-# AC_DEFINE(HAVE_SGI_VC_EXTENSION)
-# fi
-#
-#elif test "$with_sgivc" != no; then
-# echo "error: must be yes or no: --with-sgivc-ext=$with_sgivc"
-# exit 1
-#fi
-
-
###############################################################################
#
# Check for the DPMS server extension.
#
###############################################################################
+#### H1
+
have_dpms=no
with_dpms_req=unspecified
AC_ARG_WITH(dpms-ext,
-[ --with-dpms-ext Include support for the DPMS extension.],
+[
+Server Extension Options:
+
+ --with-dpms-ext Include support for power management.],
[with_dpms="$withval"; with_dpms_req="$withval"],[with_dpms=yes])
HANDLE_X_PATH_ARG(with_dpms, --with-dpms-ext, DPMS)
@@ -1623,6 +1493,50 @@ fi
###############################################################################
#
+# Check for the XF86VMODE server extension (for virtual screens.)
+#
+###############################################################################
+
+have_xf86vmode=no
+with_xf86vmode_req=unspecified
+AC_ARG_WITH(xf86vmode-ext,
+[ --with-xf86vmode-ext Include support for virtual screens.],
+ [with_xf86vmode="$withval"; with_xf86vmode_req="$withval"],
+ [with_xf86vmode=yes])
+
+HANDLE_X_PATH_ARG(with_xf86vmode, --with-xf86vmode-ext, xf86vmode)
+
+VIDMODE_LIBS=""
+
+if test "$with_xf86vmode" = yes; then
+
+ # first check for xf86vmode.h
+ AC_CHECK_X_HEADER(X11/extensions/xf86vmode.h, [have_xf86vmode=yes],,
+ [#include <X11/Xlib.h>])
+
+ # if that succeeded, then check for the -lXxf86vm
+ if test "$have_xf86vmode" = yes; then
+ have_xf86vmode=no
+ AC_CHECK_X_LIB(Xxf86vm, XF86VidModeGetViewPort,
+ [have_xf86vmode=yes;
+ VIDMODE_LIBS="-lXxf86vm";
+ SAVER_LIBS="$SAVER_LIBS $VIDMODE_LIBS"],
+ [true], -lXext -lX11)
+ fi
+
+ # if that succeeded, then we've really got it.
+ if test "$have_xf86vmode" = yes; then
+ AC_DEFINE(HAVE_XF86VMODE)
+ fi
+
+elif test "$with_xf86vmode" != no; then
+ echo "error: must be yes or no: --with-xf86vmode-ext=$with_xf86vmode"
+ exit 1
+fi
+
+
+###############################################################################
+#
# Check for the XINERAMA server extension.
#
###############################################################################
@@ -1630,13 +1544,13 @@ fi
have_xinerama=no
with_xinerama_req=unspecified
AC_ARG_WITH(xinerama-ext,
-[ --with-xinerama-ext Include support for the XINERAMA extension.],
+[ --with-xinerama-ext Include support for multiple monitors.],
[with_xinerama="$withval"; with_xinerama_req="$withval"],[with_xinerama=yes])
HANDLE_X_PATH_ARG(with_xinerama, --with-xinerama-ext, XINERAMA)
AC_CHECK_X_LIB(Xss, XScreenSaverQueryInfo, [X_EXTRA_LIBS="$X_EXTRA_LIBS -lXss"], [true],
- -lXss -lX11)
+ -lXss -lXext -lX11)
if test "$with_xinerama" = yes; then
@@ -1674,83 +1588,133 @@ fi
###############################################################################
#
-# Check for the XINPUT server extension.
+# Check for the RANDR (Resize and Rotate) server extension.
+#
+# We need this to detect when the resolution of the desktop
+# has changed out from under us (this is a newer, different
+# mechanism than the XF86VMODE virtual viewports.)
#
###############################################################################
-have_xinput=no
-with_xinput_req=unspecified
-AC_ARG_WITH(xinput-ext,
-[ --with-xinput-ext Include support for the XInput extension.],
- [with_xinput="$withval"; with_xinput_req="$withval"], [with_xinput=yes])
+have_randr=no
+with_randr_req=unspecified
+AC_ARG_WITH(randr-ext,
+[ --with-randr-ext Include different support for multiple monitors.],
+ [with_randr="$withval"; with_randr_req="$withval"],[with_randr=yes])
-HANDLE_X_PATH_ARG(with_xinput, --with-xinput-ext, XINPUT)
+HANDLE_X_PATH_ARG(with_randr, --with-randr-ext, RANDR)
-if test "$with_xinput" = yes; then
+if test "$with_randr" = yes; then
- # first check for Xinput.h
- AC_CHECK_X_HEADER(X11/extensions/XInput.h, [have_xinput=yes],,
+ # first check for Xrandr.h
+ AC_CHECK_X_HEADER(X11/extensions/Xrandr.h, [have_randr=yes],,
[#include <X11/Xlib.h>])
- # if that succeeded, then check for libXi
- if test "$have_xinput" = yes; then
- have_xinput=no
- AC_CHECK_X_LIB(Xi, XListInputDevices,
- [have_xinput=yes; SAVER_LIBS="$SAVER_LIBS -lXi"],
- [true], -lXext -lX11)
+ # if that succeeded, then check for the XRR code in the libraries
+ if test "$have_randr" = yes; then
+
+ # RANDR probably needs -lXrender
+ xrender_libs=
+ AC_CHECK_X_LIB(Xrender, XRenderSetSubpixelOrder,
+ [xrender_libs="-lXrender"], [true], -lXext -lX11)
+
+ # first look for RANDR in -lXext
+ have_randr=no
+ AC_CHECK_X_LIB(Xext, XRRGetScreenInfo,
+ [have_randr=yes; SAVER_LIBS="$SAVER_LIBS $xrender_libs"],
+ [true], $xrender_libs -lXext -lX11)
+
+ # if that failed, look in -lXrandr
+ if test "$have_randr" = no; then
+ AC_CHECK_X_LIB(Xrandr, XRRGetScreenInfo,
+ [have_randr=yes; SAVER_LIBS="$SAVER_LIBS -lXrandr $xrender_libs"],
+ [true], $xrender_libs -lXext -lX11)
+ fi
fi
# if that succeeded, then we've really got it.
- if test "$have_xinput" = yes; then
- AC_DEFINE(HAVE_XINPUT)
+ if test "$have_randr" = yes; then
+ AC_DEFINE(HAVE_RANDR)
+
+ # Now check for version 1.2 in the same libs.
+ # Try to compile, since on MacOS 10.5.7, headers are older than libs!
+ AC_CACHE_CHECK([for XRRGetScreenResources], ac_cv_randr_12,
+ [ac_cv_randr_12=no
+ AC_TRY_X_COMPILE([#include <stdlib.h>
+ #include <X11/Xlib.h>
+ #include <X11/extensions/Xrandr.h>],
+ [XRRScreenResources *res =
+ XRRGetScreenResources (0, 0);],
+ [ac_cv_randr_12=yes],
+ [ac_cv_randr_12=no])])
+ if test "$ac_cv_randr_12" = yes ; then
+ AC_DEFINE(HAVE_RANDR_12)
+ fi
+# AC_CHECK_X_LIB(c, XRRGetOutputInfo, [AC_DEFINE(HAVE_RANDR_12)],
+# [true], $SAVER_LIBS)
fi
-elif test "$with_xinput" != no; then
- echo "error: must be yes or no: --with-xinput-ext=$with_xinput"
+
+elif test "$with_randr" != no; then
+ echo "error: must be yes or no: --with-randr-ext=$with_randr"
exit 1
fi
###############################################################################
#
-# Check for the XF86VMODE server extension (for virtual screens.)
+# Check for XF86MiscSetGrabKeysState (but only bother if we are already
+# using other XF86 stuff.)
#
###############################################################################
-have_xf86vmode=no
-with_xf86vmode_req=unspecified
-AC_ARG_WITH(xf86vmode-ext,
-[ --with-xf86vmode-ext Include support for XFree86 virtual screens.],
- [with_xf86vmode="$withval"; with_xf86vmode_req="$withval"],
- [with_xf86vmode=yes])
+have_xf86miscsetgrabkeysstate=no
+if test "$have_xf86gamma" = yes -o "$have_xf86vmode" = yes; then
+ AC_CHECK_X_LIB(Xxf86misc, XF86MiscSetGrabKeysState,
+ [have_xf86miscsetgrabkeysstate=yes],
+ [true], -lXext -lX11)
+ if test "$have_xf86miscsetgrabkeysstate" = yes ; then
+ SAVER_LIBS="$SAVER_LIBS -lXxf86misc"
+ AC_DEFINE(HAVE_XF86MISCSETGRABKEYSSTATE)
+ fi
+fi
-HANDLE_X_PATH_ARG(with_xf86vmode, --with-xf86vmode-ext, xf86vmode)
-VIDMODE_LIBS=""
+###############################################################################
+#
+# Check for the XINPUT server extension.
+#
+###############################################################################
-if test "$with_xf86vmode" = yes; then
+have_xinput=no
+with_xinput_req=unspecified
+AC_ARG_WITH(xinput-ext,
+[ --with-xinput-ext Include support for the XInput extension.],
+ [with_xinput="$withval"; with_xinput_req="$withval"], [with_xinput=yes])
- # first check for xf86vmode.h
- AC_CHECK_X_HEADER(X11/extensions/xf86vmode.h, [have_xf86vmode=yes],,
+HANDLE_X_PATH_ARG(with_xinput, --with-xinput-ext, XINPUT)
+
+if test "$with_xinput" = yes; then
+
+ # first check for Xinput.h
+ AC_CHECK_X_HEADER(X11/extensions/XInput.h, [have_xinput=yes],,
[#include <X11/Xlib.h>])
- # if that succeeded, then check for the -lXxf86vm
- if test "$have_xf86vmode" = yes; then
- have_xf86vmode=no
- AC_CHECK_X_LIB(Xxf86vm, XF86VidModeGetViewPort,
- [have_xf86vmode=yes;
- VIDMODE_LIBS="-lXxf86vm";
- SAVER_LIBS="$SAVER_LIBS $VIDMODE_LIBS"],
+ # if that succeeded, then check for libXi
+ if test "$have_xinput" = yes; then
+ have_xinput=no
+ AC_CHECK_X_LIB(Xi, XListInputDevices,
+ [have_xinput=yes; SAVER_LIBS="$SAVER_LIBS -lXi"],
[true], -lXext -lX11)
fi
# if that succeeded, then we've really got it.
- if test "$have_xf86vmode" = yes; then
- AC_DEFINE(HAVE_XF86VMODE)
+ if test "$have_xinput" = yes; then
+ AC_DEFINE(HAVE_XINPUT)
fi
-elif test "$with_xf86vmode" != no; then
- echo "error: must be yes or no: --with-xf86vmode-ext=$with_xf86vmode"
+elif test "$with_xinput" != no; then
+ echo "error: must be yes or no: --with-xinput-ext=$with_xinput"
exit 1
fi
@@ -1819,95 +1783,260 @@ fi
###############################################################################
#
-# Check for the RANDR (Resize and Rotate) server extension.
+# Check for the XIDLE server extension.
#
-# We need this to detect when the resolution of the desktop
-# has changed out from under us (this is a newer, different
-# mechanism than the XF86VMODE virtual viewports.)
+###############################################################################
+
+have_xidle=no
+with_xidle_req=unspecified
+AC_ARG_WITH(xidle-ext,
+[ --with-xidle-ext Include support for the X11R5 XIDLE extension.],
+ [with_xidle="$withval"; with_xidle_req="$withval"],[with_xidle=yes])
+
+HANDLE_X_PATH_ARG(with_xidle, --with-xidle-ext, XIDLE)
+
+if test "$with_xidle" = yes; then
+ AC_CHECK_X_HEADER(X11/extensions/xidle.h,
+ [have_xidle=yes
+ AC_DEFINE(HAVE_XIDLE_EXTENSION)],,
+ [#include <X11/Xlib.h>])
+elif test "$with_xidle" != no; then
+ echo "error: must be yes or no: --with-xidle-ext=$with_xidle"
+ exit 1
+fi
+
+
+###############################################################################
+#
+# Check for the MIT-SCREEN-SAVER server extension.
#
###############################################################################
-have_randr=no
-with_randr_req=unspecified
-AC_ARG_WITH(randr-ext,
-[ --with-randr-ext Include support for the X Resize+Rotate extension.],
- [with_randr="$withval"; with_randr_req="$withval"],[with_randr=yes])
+have_mit=no
+with_mit=no
+with_mit_req=unspecified
+#AC_ARG_WITH(mit-ext,
+#[ --with-mit-ext Include support for the MIT-SCREEN-SAVER extension.],
+# [with_mit="$withval"; with_mit_req="$withval"],[with_mit=no])
+#HANDLE_X_PATH_ARG(with_mit, --with-mit-ext, MIT-SCREEN-SAVER)
-HANDLE_X_PATH_ARG(with_randr, --with-randr-ext, RANDR)
+if test "$with_mit" = yes; then
+ AC_CHECK_X_HEADER(X11/extensions/scrnsaver.h, [have_mit=yes],,
+ [#include <X11/Xlib.h>])
-if test "$with_randr" = yes; then
+ # Now check to see if it's really in the library; XF86Free-3.3 ships
+ # scrnsaver.h, but doesn't include the code in libXext.a, the idiots!
+ #
+ if test "$have_mit" = yes; then
+ AC_CHECK_X_LIB(Xext, XScreenSaverRegister, [true], [have_mit=no], -lm)
+
+ if test "$have_mit" = no; then
+ # Fuck! Looks like XF86Free-3.3 actually puts it in XExExt instead
+ # of in Xext. Thank you master, may I have another.
+ AC_CHECK_X_LIB(XExExt, XScreenSaverRegister,
+ [have_mit=yes; SAVER_LIBS="$SAVER_LIBS -lXExExt"],
+ [true], -lX11 -lXext -lm)
+ fi
- # first check for Xrandr.h
- AC_CHECK_X_HEADER(X11/extensions/Xrandr.h, [have_randr=yes],,
+ if test "$have_mit" = no; then
+ # Double fuck! Looks like some versions of XFree86 (whichever version
+ # it is that comes with RedHat Linux 2.0 -- I can't find a version
+ # number) put this garbage in Xss instead of Xext. Thank you master,
+ # may I have another.
+ AC_CHECK_X_LIB(Xss, XScreenSaverRegister,
+ [have_mit=yes; SAVER_LIBS="$SAVER_LIBS -lXss"],
+ [true], -lX11 -lXext -lm)
+ fi
+
+ if test "$have_mit" = yes; then
+# AC_DEFINE(HAVE_MIT_SAVER_EXTENSION)
+ echo "Using the MIT-SCREEN-SAVER extension will crash your server. Don't."
+ exit 1
+ fi
+
+ fi
+
+elif test "$with_mit" != no; then
+ echo "error: must be yes or no: --with-mit-ext=$with_mit"
+ exit 1
+fi
+
+
+###############################################################################
+#
+# Check for the SGI SCREEN_SAVER server extension.
+#
+###############################################################################
+
+have_sgi=no
+with_sgi_req=unspecified
+AC_ARG_WITH(sgi-ext,
+[ --with-sgi-ext Include support for the SGI SCREEN_SAVER extension.],
+ [with_sgi="$withval"; with_sgi_req="$withval"],[with_sgi=$ac_irix])
+
+HANDLE_X_PATH_ARG(with_sgi, --with-sgi-ext, SGI SCREEN_SAVER)
+
+if test "$with_sgi" = yes; then
+ AC_CHECK_X_HEADER(X11/extensions/XScreenSaver.h,
+ [have_sgi=yes
+ AC_DEFINE(HAVE_SGI_SAVER_EXTENSION)],,
[#include <X11/Xlib.h>])
- # if that succeeded, then check for the XRR code in the libraries
- if test "$have_randr" = yes; then
+elif test "$with_sgi" != no; then
+ echo "error: must be yes or no: --with-sgi-ext=$with_sgi"
+ exit 1
+fi
- # RANDR probably needs -lXrender
- xrender_libs=
- AC_CHECK_X_LIB(Xrender, XRenderSetSubpixelOrder,
- [xrender_libs="-lXrender"], [true], -lXext -lX11)
- # first look for RANDR in -lXext
- have_randr=no
- AC_CHECK_X_LIB(Xext, XRRGetScreenInfo,
- [have_randr=yes; SAVER_LIBS="$SAVER_LIBS $xrender_libs"],
- [true], $xrender_libs -lXext -lX11)
+###############################################################################
+#
+# Check for the SGI-VIDEO-CONTROL server extension.
+#
+###############################################################################
- # if that failed, look in -lXrandr
- if test "$have_randr" = no; then
- AC_CHECK_X_LIB(Xrandr, XRRGetScreenInfo,
- [have_randr=yes; SAVER_LIBS="$SAVER_LIBS -lXrandr $xrender_libs"],
- [true], $xrender_libs -lXext -lX11)
- fi
+have_sgivc=no
+with_sgivc_req=unspecified
+AC_ARG_WITH(sgivc-ext,
+[ --with-sgivc-ext Include support for the SGI-VIDEO-CONTROL extension.],
+ [with_sgivc="$withval"; with_sgivc_req="$withval"],[with_sgivc=$ac_irix])
+
+HANDLE_X_PATH_ARG(with_sgivc, --with-sgivc-ext, SGI-VIDEO-CONTROL)
+
+if test "$with_sgivc" = yes; then
+
+ # first check for XSGIvc.h
+ AC_CHECK_X_HEADER(X11/extensions/XSGIvc.h, [have_sgivc=yes],,
+ [#include <X11/Xlib.h>])
+
+ # if that succeeded, then check for the -lXsgivc
+ if test "$have_sgivc" = yes; then
+ have_sgivc=no
+ AC_CHECK_X_LIB(Xsgivc, XSGIvcQueryGammaMap,
+ [have_sgivc=yes; SAVER_LIBS="$SAVER_LIBS -lXsgivc"], [true],
+ -lXext -lX11)
fi
# if that succeeded, then we've really got it.
- if test "$have_randr" = yes; then
- AC_DEFINE(HAVE_RANDR)
+ if test "$have_sgivc" = yes; then
+ AC_DEFINE(HAVE_SGI_VC_EXTENSION)
+ fi
- # Now check for version 1.2 in the same libs.
- # Try to compile, since on MacOS 10.5.7, headers are older than libs!
- AC_CACHE_CHECK([for XRRGetScreenResources], ac_cv_randr_12,
- [ac_cv_randr_12=no
- AC_TRY_X_COMPILE([#include <stdlib.h>
- #include <X11/Xlib.h>
- #include <X11/extensions/Xrandr.h>],
- [XRRScreenResources *res =
- XRRGetScreenResources (0, 0);],
- [ac_cv_randr_12=yes],
- [ac_cv_randr_12=no])])
- if test "$ac_cv_randr_12" = yes ; then
- AC_DEFINE(HAVE_RANDR_12)
- fi
-# AC_CHECK_X_LIB(c, XRRGetOutputInfo, [AC_DEFINE(HAVE_RANDR_12)],
-# [true], $SAVER_LIBS)
+elif test "$with_sgivc" != no; then
+ echo "error: must be yes or no: --with-sgivc-ext=$with_sgivc"
+ exit 1
+fi
+
+
+###############################################################################
+#
+# Check for the SGI XReadDisplay server extension.
+#
+###############################################################################
+
+have_readdisplay=no
+with_readdisplay_req=unspecified
+AC_ARG_WITH(readdisplay,
+[ --with-readdisplay Include support for the SGI XReadDisplay extension.],
+ [with_readdisplay="$withval"; with_readdisplay_req="$withval"],
+ [with_readdisplay=$ac_irix])
+
+HANDLE_X_PATH_ARG(with_readdisplay, --with-readdisplay, XReadDisplay)
+
+if test "$with_readdisplay" = yes; then
+ AC_CHECK_X_HEADER(X11/extensions/readdisplay.h,
+ AC_DEFINE(HAVE_READ_DISPLAY_EXTENSION),,
+ [#include <X11/Xlib.h>])
+elif test "$with_readdisplay" != no; then
+ echo "error: must be yes or no: --with-readdisplay=$with_readdisplay"
+ exit 1
+fi
+
+
+###############################################################################
+#
+# Check for the XSHM server extension.
+#
+###############################################################################
+
+have_xshm=no
+with_xshm_req=unspecified
+AC_ARG_WITH(xshm-ext,
+[ --with-xshm-ext Include support for the Shared Memory extension.],
+ [with_xshm="$withval"; with_xshm_req="$withval"],[with_xshm=yes])
+
+HANDLE_X_PATH_ARG(with_xshm, --with-xshm-ext, XSHM)
+
+if test "$with_xshm" = yes; then
+
+ # first check for Xshm.h.
+ AC_CHECK_X_HEADER(X11/extensions/XShm.h, [have_xshm=yes],,
+ [#include <X11/Xlib.h>])
+
+ # if that succeeded, then check for sys/ipc.h.
+ if test "$have_xshm" = yes; then
+ have_xshm=no
+ AC_CHECK_X_HEADER(sys/ipc.h, [have_xshm=yes])
fi
+ # if that succeeded, then check for sys/shm.h.
+ if test "$have_xshm" = yes; then
+ have_xshm=no
+ AC_CHECK_X_HEADER(sys/shm.h, [have_xshm=yes])
+ fi
-elif test "$with_randr" != no; then
- echo "error: must be yes or no: --with-randr-ext=$with_randr"
+ # AIX is pathological, as usual: apparently it's normal for the Xshm headers
+ # to exist, but the library code to not exist. And even better, the library
+ # code is in its own library: libXextSam.a. So, if we're on AIX, and that
+ # lib doesn't exist, give up. (This lib gets added to X_EXTRA_LIBS, and
+ # that's not quite right, but close enough.)
+ #
+ case "$host" in
+ *-aix*)
+ if [ `uname -v` -eq 3 ]; then
+ have_xshm=no
+ AC_CHECK_X_LIB(XextSam, XShmQueryExtension,
+ [have_xshm=yes; X_EXTRA_LIBS="$X_EXTRA_LIBS -lXextSam"],
+ [true], -lX11 -lXext -lm)
+ fi
+ ;;
+ esac
+
+ # if that succeeded, then we've really got it.
+ if test "$have_xshm" = yes; then
+ AC_DEFINE(HAVE_XSHM_EXTENSION)
+ fi
+
+elif test "$with_xshm" != no; then
+ echo "error: must be yes or no: --with-xshm-ext=$with_xshm"
exit 1
fi
###############################################################################
#
-# Check for XF86MiscSetGrabKeysState (but only bother if we are already
-# using other XF86 stuff.)
+# Check for the DOUBLE-BUFFER server extension.
#
###############################################################################
-have_xf86miscsetgrabkeysstate=no
-if test "$have_xf86gamma" = yes -o "$have_xf86vmode" = yes; then
- AC_CHECK_X_LIB(Xxf86misc, XF86MiscSetGrabKeysState,
- [have_xf86miscsetgrabkeysstate=yes],
- [true], -lXext -lX11)
- if test "$have_xf86miscsetgrabkeysstate" = yes ; then
- SAVER_LIBS="$SAVER_LIBS -lXxf86misc"
- AC_DEFINE(HAVE_XF86MISCSETGRABKEYSSTATE)
+have_xdbe=no
+with_xdbe_req=unspecified
+AC_ARG_WITH(xdbe-ext,
+[ --with-xdbe-ext Include support for the DOUBLE-BUFFER extension.],
+ [with_xdbe="$withval"; with_xdbe_req="$withval"],[with_xdbe=yes])
+
+HANDLE_X_PATH_ARG(with_xdbe, --with-xdbe-ext, DOUBLE-BUFFER)
+
+if test "$with_xdbe" = yes; then
+
+ AC_CHECK_X_HEADER(X11/extensions/Xdbe.h, [have_xdbe=yes],,
+ [#include <X11/Xlib.h>])
+ if test "$have_xdbe" = yes; then
+ AC_DEFINE(HAVE_DOUBLE_BUFFER_EXTENSION)
fi
+
+elif test "$with_xdbe" != no; then
+ echo "error: must be yes or no: --with-xdbe-ext=$with_xshm"
+ exit 1
fi
@@ -1977,7 +2106,7 @@ fi
have_proc_oom=no
with_proc_oom_req=unspecified
AC_ARG_WITH(proc-oom,
-[ --with-proc-oom Include support for disabling the OOM-killer.],
+[ --with-proc-oom Include support for disabling the OOM-killer.],
[with_proc_oom="$withval"; with_proc_oom_req="$withval"],
[with_proc_oom=yes])
@@ -2013,13 +2142,100 @@ fi
###############################################################################
#
+# Check for -lsystemd
+#
+###############################################################################
+
+have_systemd=no
+with_systemd_req=unspecified
+systemd_halfassed=no
+systemd_too_old=no
+AC_ARG_WITH(systemd,
+[ --with-systemd Support systemd requests to lock on suspend, and to
+ allow video players to inhibit the screen saver.],
+ [with_systemd="$withval"; with_systemd_req="$withval"],
+ [with_systemd=yes])
+
+HANDLE_X_PATH_ARG(with_systemd, --with-systemd, systemd)
+
+if test "$with_systemd" != yes -a "$with_systemd" != no ; then
+ echo "error: must be yes or no: --with-systemd=$with_systemd"
+ exit 1
+fi
+
+if test "$with_systemd" = yes; then
+
+ pkgs=''
+ ok="yes"
+ pkg_check_version libsystemd 221
+ have_systemd="$ok"
+
+ if test "$have_systemd" = no; then
+ if $pkg_config --exists libsystemd ; then
+ systemd_too_old=yes
+ fi
+ fi
+
+ if test "$have_systemd" = yes; then
+ AC_CACHE_CHECK([for libsystemd includes], ac_cv_systemd_config_cflags,
+ [ac_cv_systemd_config_cflags=`$pkg_config --cflags $pkgs`])
+ AC_CACHE_CHECK([for libsystemd libs], ac_cv_systemd_config_libs,
+ [ac_cv_systemd_config_libs=`$pkg_config --libs $pkgs`])
+ fi
+
+ ac_systemd_config_cflags=$ac_cv_systemd_config_cflags
+ ac_systemd_config_libs=$ac_cv_systemd_config_libs
+
+ if test "$have_systemd" = yes; then
+ #
+ # we appear to have libsystemd; check for headers/libs to be sure.
+ #
+ ac_save_systemd_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $ac_systemd_config_cflags"
+
+ have_systemd=no
+ AC_CHECK_X_HEADER(systemd/sd-bus.h, [have_systemd=yes])
+
+ CPPFLAGS="$ac_save_systemd_CPPFLAGS"
+ fi
+
+ if test "$have_systemd" = yes; then
+ # we have the headers, now check for the libraries
+ have_systemd=no
+ systemd_halfassed=yes
+
+ AC_MSG_RESULT(checking for libsystemd usability...)
+ AC_CHECK_X_LIB(c, sd_bus_open_system, [have_systemd=yes],,
+ $ac_systemd_config_libs -lX11 -lXext -lm)
+ fi
+
+ if test "$have_systemd" = no; then
+ AC_MSG_RESULT(checking for libsystemd usability... no)
+ fi
+fi
+
+if test "$have_systemd" = yes; then
+ INCLUDES="$INCLUDES $ac_systemd_config_cflags"
+ EXES_SYSTEMD='$(EXES_SYSTEMD)'
+ AC_DEFINE(HAVE_LIBSYSTEMD)
+else
+ EXES_SYSTEMD=''
+fi
+
+
+###############################################################################
+#
# The --enable-locking option
#
+# Note: "configure --help" list all "--enable" options before any
+# "--with" options, so we document the --enable options inline with
+# the --with options where it looks better, instead of in AC_ARG_ENABLE
+# where it would make sense, sigh...
+#
###############################################################################
-AC_ARG_ENABLE(locking,[Screen locking options:
- --enable-locking Compile in support for locking the display.
- --disable-locking Do not allow locking at all.],
+AC_ARG_ENABLE(locking,
+[], # This is documented elsewhere because of --enable/--with option sorting.
[enable_locking="$enableval"],
[if test "$ac_macosx" = yes; then
# We can't lock on MacOS X, so default to not compiling in support for it.
@@ -2039,14 +2255,14 @@ else
fi
-###############################################################################
+##############################################################################
#
# Whether to allow root password to unblank.
#
###############################################################################
-AC_ARG_ENABLE(root-passwd, [
- --enable-root-passwd Allow root passwd to unlock screen.
- --disable-root-passwd Do not allow that.],
+
+AC_ARG_ENABLE(root-passwd,
+[], # This is documented elsewhere because of --enable/--with option sorting.
[enable_root_passwd="$enableval"],[enable_root_passwd=yes])
if test "$enable_root_passwd" = yes; then
AC_DEFINE(ALLOW_ROOT_PASSWD)
@@ -2056,6 +2272,7 @@ elif test "$enable_root_passwd" != no; then
exit 1
fi
+
###############################################################################
#
# Check for PAM.
@@ -2074,24 +2291,28 @@ case "$host" in
;;
esac
+#### H1
+
have_pam=no
with_pam_req=unspecified
-AC_ARG_WITH(pam,
-[ --with-pam Include support for PAM (Pluggable Auth Modules.)],
+AC_ARG_WITH(pam,[
+Screen Locking Options:
+
+ --disable-locking Do not allow locking of the display at all.
+ --with-pam Include support for PAM (Pluggable Auth Modules.)],
[with_pam="$withval"; with_pam_req="$withval"],[with_pam=$with_pam_default])
AC_ARG_WITH([pam_service_name],
- AC_HELP_STRING([--with-pam-service-name],
- [NAME arg is the name of the PAM service that
- xscreensaver will authenticate as.]),
- [pam_service_name="$withval"],[pam_service_name="xscreensaver"])
+[ --with-pam-service-name Set the name of the xscreensaver PAM service.
+ --enable-pam-account Whether PAM should check the result of account
+ modules when authenticating. Only do this if you
+ have "account" modules configured on your system.
+ --enable-root-passwd Allow the root passwd to unlock, if not using PAM.],
+ [pam_service_name="$withval"],[pam_service_name="xscreensaver"])
AC_ARG_ENABLE(pam-check-account-type,
- [AC_HELP_STRING([--enable-pam-check-account-type],
- [Whether PAM should check the result of account
- modules when authenticating. Only do this if you
- have account configured properly on your system.])],
+[], # This is documented elsewhere because of --enable/--with option sorting.
[enable_pam_check_account_type="$enableval"],[enable_pam_check_account_type=no])
if test "$enable_pam_check_account_type" = yes ; then
AC_DEFINE(PAM_CHECK_ACCOUNT_TYPE)
@@ -2515,117 +2736,6 @@ case "$with_passwd_helper" in
esac
-###############################################################################
-#
-# Check for a login manager for a "New Login" button on the lock dialog.
-# Usually this will be "/usr/bin/gdmflexiserver".
-#
-###############################################################################
-
-with_login_manager_req=unspecified
-default_login_manager_1='gdmflexiserver -ls'
-default_login_manager_2='kdmctl reserve'
-default_login_manager_3='lxdm -c USER_SWITCH'
-default_login_manager_4='dm-tool switch-to-greeter'
-
-AC_ARG_WITH(login-manager,
-[ --with-login-manager Put a "New Login" button on the unlock dialog that
- runs a login manager like gdmflexiserver or kdmctl.],
- [with_login_manager="$withval"; with_login_manager_req="$withval"],
- [with_login_manager=yes])
-# no HANDLE_X_PATH_ARG for this one
-
-if test "$enable_locking" = no ; then
- with_login_manager_req=no
- with_login_manager=no
-fi
-
-case "$with_login_manager_req" in
- no)
- with_login_manager=""
- ;;
-
- yes|unspecified)
- # Try various defaults, use the first one that exists.
-
- with_login_manager=""
-
- if test -z "$with_login_manager" ; then
- set dummy $default_login_manager_1 ; login_manager_tmp=$2
- unset ac_cv_path_login_manager_tmp # don't cache
- AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, [])
- if test ! -z "$login_manager_tmp" ; then
- with_login_manager="$default_login_manager_1"
- fi
- fi
-
- if test -z "$with_login_manager" ; then
- set dummy $default_login_manager_2 ; login_manager_tmp=$2
- unset ac_cv_path_login_manager_tmp # don't cache
- AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, [])
- if test ! -z "$login_manager_tmp" ; then
- with_login_manager="$default_login_manager_2"
- fi
- fi
-
- if test -z "$with_login_manager" ; then
- set dummy $default_login_manager_3 ; login_manager_tmp=$2
- unset ac_cv_path_login_manager_tmp # don't cache
- AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, [])
- if test ! -z "$login_manager_tmp" ; then
- with_login_manager="$default_login_manager_3"
- fi
- fi
-
- if test -z "$with_login_manager" ; then
- set dummy $default_login_manager_4 ; login_manager_tmp=$2
- unset ac_cv_path_login_manager_tmp # don't cache
- AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, [])
- if test ! -z "$login_manager_tmp" ; then
- with_login_manager="$default_login_manager_4"
- fi
- fi
-
- ;;
-
- /*)
- # absolute path specified on cmd line
- set dummy $with_login_manager_req ; login_manager_tmp=$2
- AC_MSG_CHECKING([for $login_manager_tmp])
- if test -x "$login_manager_tmp" ; then
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- with_login_manager=""
- fi
- ;;
-
- *)
- # relative path specified on cmd line
- set dummy $with_login_manager_req ; login_manager_tmp=$2
- unset ac_cv_path_login_manager_tmp # don't cache
- AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, [])
- if test -z "$login_manager_tmp" ; then
- with_login_manager=""
- else
- with_login_manager="$login_manager_tmp"
- fi
- ;;
-esac
-ac_cv_login_manager_program="$with_login_manager"
-
-NEW_LOGIN_COMMAND_P=''
-NEW_LOGIN_COMMAND="$ac_cv_login_manager_program"
-
-AC_MSG_CHECKING(for login manager)
-if test -z "$NEW_LOGIN_COMMAND" ; then
- NEW_LOGIN_COMMAND="$default_login_manager_1"
- NEW_LOGIN_COMMAND_P='! '
- AC_MSG_RESULT($NEW_LOGIN_COMMAND (disabled))
-else
- AC_MSG_RESULT($NEW_LOGIN_COMMAND)
-fi
-
###############################################################################
#
@@ -2633,10 +2743,13 @@ fi
#
###############################################################################
+#### H1
+
have_gtk=no
with_gtk_req=unspecified
-AC_ARG_WITH(gtk,[
-User interface options:
+AC_ARG_WITH(gtk,
+[
+User Interface Options:
--with-gtk Use the Gtk toolkit for the user interface.],
[with_gtk="$withval"; with_gtk_req="$withval"],[with_gtk=yes])
@@ -2673,66 +2786,16 @@ parse_gtk_version_string() {
fi
}
-# Find pkg-config... (need this for both gtk and gdk_pixbuf.)
-# if the user specified --with-gtk=/foo/ then look there.
-#
-gtk_path="$PATH"
-if test ! -z "$gtk_dir"; then
- # canonicalize slashes.
- foo=`echo "${gtk_dir}/bin" | sed 's@//*@/@g'`
- gtk_path="$foo:$gtk_path"
-fi
-
-AC_PATH_PROGS(pkg_config, pkg-config,, $gtk_path)
-
-if test -z "$pkg_config" ; then
- AC_MSG_WARN([pkg-config not found!])
- pkg_config="false"
-fi
-
-
-# Utility function for running pkg-config-based tests...
-#
-pkgs=''
-pkg_check_version() {
- if test "$ok" = yes ; then
- req="$1"
- min="$2"
- AC_MSG_CHECKING(for $req)
- if $pkg_config --exists "$req" ; then
- vers=`$pkg_config --modversion "$req"`
- if $pkg_config --exists "$req >= $min" ; then
- AC_MSG_RESULT($vers)
- pkgs="$pkgs $req"
- return 1
- else
- AC_MSG_RESULT($vers (wanted >= $min))
- ok=no
- return 0
- fi
- else
- AC_MSG_RESULT(no)
- ok=no
- return 0
- fi
- fi
-}
-
-
jurassic_gtk=no
gtk_halfassed=no
-have_gtk_2_22_or_higher=no
-COMMENT_DEMO_GLADE2_GTK_2_22_HEAD=""
-COMMENT_DEMO_GLADE2_GTK_2_22_TAIL=""
if test "$with_gtk" = yes; then
have_gtk=no
ok="yes"
- pkg_check_version gtk+-2.0 2.0.1 ; ac_gtk_version_string="$vers"
+ pkg_check_version gtk+-2.0 2.22.0 ; ac_gtk_version_string="$vers"
pkg_check_version gmodule-2.0 2.0.0
pkg_check_version libxml-2.0 2.4.6
- pkg_check_version libglade-2.0 1.99.0
pkg_check_version gdk-pixbuf-2.0 2.0.0
pkg_check_version gdk-pixbuf-xlib-2.0 2.0.0
have_gtk="$ok"
@@ -2773,16 +2836,6 @@ if test "$with_gtk" = yes; then
AC_DEFINE(HAVE_GTK2)
AC_DEFINE(HAVE_XML)
fi
-
- if test "$have_gtk" = yes; then
- ok="yes"
- pkg_check_version gtk+-2.0 2.22
- have_gtk_2_22_or_higher="$ok"
- if test "$have_gtk_2_22_or_higher" = yes; then
- COMMENT_DEMO_GLADE2_GTK_2_22_HEAD="<!-- comment>"
- COMMENT_DEMO_GLADE2_GTK_2_22_TAIL="</comment -->"
- fi
- fi
fi
@@ -2803,8 +2856,8 @@ fi
have_motif=no
with_motif_req=unspecified
-AC_ARG_WITH(motif,[ --with-motif Use the Motif toolkit for the user interface
- (no longer supported.)],
+AC_ARG_WITH(motif,
+[ --with-motif Use the Motif toolkit for the user interface.],
[with_motif="$withval"; with_motif_req="$withval"],[with_motif=no])
HANDLE_X_PATH_ARG(with_motif, --with-motif, Motif)
@@ -2950,16 +3003,309 @@ fi
###############################################################################
#
+# Check for a login manager for a "New Login" button on the lock dialog.
+# Usually this will be "/usr/bin/gdmflexiserver".
+#
+###############################################################################
+
+with_login_manager_req=unspecified
+default_login_manager_1='gdmflexiserver -ls'
+default_login_manager_2='kdmctl reserve'
+default_login_manager_3='lxdm -c USER_SWITCH'
+default_login_manager_4='dm-tool switch-to-greeter'
+
+AC_ARG_WITH(login-manager,
+[ --with-login-manager Put a "New Login" button on the unlock dialog that
+ runs a login manager like gdmflexiserver or kdmctl.],
+ [with_login_manager="$withval"; with_login_manager_req="$withval"],
+ [with_login_manager=yes])
+# no HANDLE_X_PATH_ARG for this one
+
+if test "$enable_locking" = no ; then
+ with_login_manager_req=no
+ with_login_manager=no
+fi
+
+case "$with_login_manager_req" in
+ no)
+ with_login_manager=""
+ ;;
+
+ yes|unspecified)
+ # Try various defaults, use the first one that exists.
+
+ with_login_manager=""
+
+ if test -z "$with_login_manager" ; then
+ set dummy $default_login_manager_1 ; login_manager_tmp=$2
+ unset ac_cv_path_login_manager_tmp # don't cache
+ AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, [])
+ if test ! -z "$login_manager_tmp" ; then
+ with_login_manager="$default_login_manager_1"
+ fi
+ fi
+
+ if test -z "$with_login_manager" ; then
+ set dummy $default_login_manager_2 ; login_manager_tmp=$2
+ unset ac_cv_path_login_manager_tmp # don't cache
+ AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, [])
+ if test ! -z "$login_manager_tmp" ; then
+ with_login_manager="$default_login_manager_2"
+ fi
+ fi
+
+ if test -z "$with_login_manager" ; then
+ set dummy $default_login_manager_3 ; login_manager_tmp=$2
+ unset ac_cv_path_login_manager_tmp # don't cache
+ AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, [])
+ if test ! -z "$login_manager_tmp" ; then
+ with_login_manager="$default_login_manager_3"
+ fi
+ fi
+
+ if test -z "$with_login_manager" ; then
+ set dummy $default_login_manager_4 ; login_manager_tmp=$2
+ unset ac_cv_path_login_manager_tmp # don't cache
+ AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, [])
+ if test ! -z "$login_manager_tmp" ; then
+ with_login_manager="$default_login_manager_4"
+ fi
+ fi
+
+ ;;
+
+ /*)
+ # absolute path specified on cmd line
+ set dummy $with_login_manager_req ; login_manager_tmp=$2
+ AC_MSG_CHECKING([for $login_manager_tmp])
+ if test -x "$login_manager_tmp" ; then
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ with_login_manager=""
+ fi
+ ;;
+
+ *)
+ # relative path specified on cmd line
+ set dummy $with_login_manager_req ; login_manager_tmp=$2
+ unset ac_cv_path_login_manager_tmp # don't cache
+ AC_PATH_PROG(login_manager_tmp, $login_manager_tmp, [])
+ if test -z "$login_manager_tmp" ; then
+ with_login_manager=""
+ else
+ with_login_manager="$login_manager_tmp"
+ fi
+ ;;
+esac
+ac_cv_login_manager_program="$with_login_manager"
+
+NEW_LOGIN_COMMAND_P=''
+NEW_LOGIN_COMMAND="$ac_cv_login_manager_program"
+
+AC_MSG_CHECKING(for login manager)
+if test -z "$NEW_LOGIN_COMMAND" ; then
+ NEW_LOGIN_COMMAND="$default_login_manager_1"
+ NEW_LOGIN_COMMAND_P='! '
+ AC_MSG_RESULT($NEW_LOGIN_COMMAND (disabled))
+else
+ AC_MSG_RESULT($NEW_LOGIN_COMMAND)
+fi
+
+
+
+###############################################################################
+#
+# Check for a directory full of images to use as the default value
+# of the "imageDirectory" preference.
+#
+###############################################################################
+
+have_imagedir=no
+with_imagedir_req=unspecified
+
+AC_ARG_WITH(image-directory,
+[ --with-image-directory Some demos will display random images from here.],
+ [with_imagedir="$withval"; with_imagedir_req="$withval"],
+ [with_imagedir=yes])
+# no HANDLE_X_PATH_ARG for this one
+
+case "$with_imagedir" in
+ /*)
+ # absolute path
+ AC_MSG_CHECKING([for image directory $with_imagedir])
+ if test -d "$with_imagedir" ; then
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ with_imagedir=""
+ fi
+ ;;
+ yes)
+ with_imagedir=""
+
+ #### Could use some more defaults here...
+ for dd in \
+ "/usr/share/rpd-wallpaper" \
+ "/usr/share/backgrounds/images/" \
+ "/usr/share/wallpapers/" \
+ "/Library/Desktop Pictures/" \
+ ; do
+ if test -z "$with_imagedir"; then
+ AC_MSG_CHECKING([for image directory $dd])
+ if test -d "$dd" ; then
+ AC_MSG_RESULT(yes)
+ with_imagedir="$dd"
+ else
+ AC_MSG_RESULT(no)
+ fi
+ fi
+ done
+
+ ;;
+ no)
+ with_imagedir=""
+ ;;
+
+ *)
+ echo "error: must be an absolute path: --with-image-directory=$with_imagedir_req"
+ exit 1
+ ;;
+esac
+ac_cv_imagedir="$with_imagedir"
+
+DEFAULT_IMAGES_P='True'
+DEFAULT_IMAGE_DIRECTORY="$ac_cv_imagedir"
+
+if test -z "$DEFAULT_IMAGE_DIRECTORY" ; then
+ DEFAULT_IMAGES_P='False'
+fi
+
+
+###############################################################################
+#
+# Pick a text file to use as the default of the "textFile" preference.
+# Any old file will do, but preferably one that will make interesting
+# shapes when displayed by "starwars" and "fontglide".
+#
+###############################################################################
+
+have_textfile=no
+with_textfile_req=unspecified
+
+AC_ARG_WITH(text-file,
+[ --with-text-file=FILE Some demos will use this as a source of text.],
+ [with_textfile="$withval"; with_textfile_req="$withval"],
+ [with_textfile=yes])
+# no HANDLE_X_PATH_ARG for this one
+
+case "$with_textfile" in
+ /*)
+ # absolute path
+ AC_MSG_CHECKING([for text file $with_textfile])
+ if test -f "$with_textfile" ; then
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ with_textfile=""
+ fi
+ ;;
+ yes)
+ with_textfile=""
+
+ #### Could use some more defaults here...
+ for f in \
+ "/usr/X11R6/lib/X11/doc/README" \
+ "/usr/share/doc/xserver-common/copyright" \
+ "/usr/share/doc/xserver-xorg-core/copyright" \
+ "/usr/X11R6/README" \
+ "/usr/share/doc/libX11*/COPYING" \
+ "/usr/X11/share/X11/doc/README*" \
+ "/usr/share/doc/debian/debian-manifesto" \
+ ; do
+ if test -z "$with_textfile"; then
+ AC_MSG_CHECKING([for text file $f])
+ f=`/bin/ls $f 2>&- | head -1`
+ if test -f "$f" ; then
+ AC_MSG_RESULT(yes)
+ with_textfile="$f"
+ else
+ AC_MSG_RESULT(no)
+ fi
+ fi
+ done
+
+ ;;
+ no)
+ with_textfile=""
+ ;;
+
+ *)
+ echo "error: must be an absolute path: --with-text-file=$with_textfile_req"
+ exit 1
+ ;;
+esac
+ac_cv_textfile="$with_textfile"
+
+DEFAULT_TEXT_FILE="$ac_cv_textfile"
+
+
+###############################################################################
+#
+# Check the browser to see help URL
+#
+###############################################################################
+
+have_browser=no
+with_browser_req=unspecified
+
+AC_ARG_WITH(browser,
+[ --with-browser=BROWSER The web browser used to open the "Help" URL.],
+ [with_browser="$withval"; with_browser_req="$withval"],
+ [with_browser=no ])
+# no HANDLE_X_PATH_ARG for this one
+
+case "$with_browser" in
+ no )
+ ;;
+ * )
+ WITH_BROWSER=$with_browser
+ gnome_open_program=$with_browser
+ AC_MSG_CHECKING([for browser $with_browser])
+ with_browser_fullpath=`which $with_browser 2>/dev/null`
+ case $with_browser_fullpath in
+ /* )
+ AC_MSG_RESULT(yes)
+ have_browser=yes
+ ;;
+ * )
+ AC_MSG_RESULT(no)
+# Only warning: we don't want to install all packages for the
+# dependency of the browser in building stage...
+ echo "WARNING: browser not found: --with-browser=$with_browser"
+ ;;
+ esac
+ ;;
+esac
+ac_cv_browser="$with_browser"
+
+
+###############################################################################
+#
# Check for -lGL or -lMesaGL.
#
###############################################################################
+#### H1
+
have_gl=no
ac_have_mesa_gl=no
with_gl_req=unspecified
gl_halfassed=no
-AC_ARG_WITH(gl,[
-Graphics options:
+have_glext=no
+AC_ARG_WITH(gl,
+[
+Graphics Options:
--with-gl Build those demos which depend on OpenGL.],
[with_gl="$withval"; with_gl_req="$withval"],[with_gl=yes])
@@ -3164,6 +3510,15 @@ EOF
#
AC_CHECK_X_LIB($gl_lib_1, glBindTexture, [AC_DEFINE(HAVE_GLBINDTEXTURE)],
[true], $GL_LIBS -lX11 -lXext -lm)
+
+ # Check for OpenGL GLSL features.
+ #
+ AC_CHECK_X_HEADER(GL/glext.h, have_glext=yes, have_glext=no,
+ [#include <GL/gl.h>])
+ if test "$have_glext" = yes ; then
+ AC_CHECK_X_LIB($gl_lib_1, glUseProgram, [AC_DEFINE(HAVE_GLSL)],
+ [true], $GL_LIBS -lX11 -lXext -lm)
+ fi
fi
elif test "$with_gl" != no; then
@@ -3182,8 +3537,7 @@ have_gle=no
with_gle_req=unspecified
gle_halfassed=no
AC_ARG_WITH(gle,
-[ --with-gle Build those demos which depend on GLE
- (the OpenGL "extrusion" library.)],
+[ --with-gle Build those demos which depend on GLE (extrusion).],
[with_gle="$withval"; with_gle_req="$withval"],[with_gle=yes])
HANDLE_X_PATH_ARG(with_gle, --with-gle, GLE)
@@ -3283,6 +3637,45 @@ fi
###############################################################################
#
+# Check for -ljpeg
+#
+###############################################################################
+
+have_jpeg=no
+with_jpeg_req=unspecified
+jpeg_halfassed=no
+AC_ARG_WITH(jpeg,
+[ --with-jpeg Include support for the JPEG library.],
+ [with_jpeg="$withval"; with_jpeg_req="$withval"],
+ [with_jpeg=yes])
+
+HANDLE_X_PATH_ARG(with_jpeg, --with-jpeg, JPEG)
+
+if test "$with_jpeg" != yes -a "$with_jpeg" != no ; then
+ echo "error: must be yes or no: --with-jpeg=$with_jpeg"
+ exit 1
+fi
+
+if test "$with_jpeg" = yes; then
+
+ have_jpeg=no
+ AC_CHECK_X_HEADER(jpeglib.h, [have_jpeg=yes])
+
+ if test "$have_jpeg" = yes; then
+ # we have the header, now check for the library
+ have_jpeg=no
+ jpeg_halfassed=yes
+ AC_CHECK_X_LIB(jpeg, jpeg_start_compress,
+ [have_jpeg=yes
+ jpeg_halfassed=no
+ JPEG_LIBS="-ljpeg"
+ AC_DEFINE(HAVE_JPEGLIB)])
+ fi
+fi
+
+
+###############################################################################
+#
# Check for -lpng
#
###############################################################################
@@ -3291,7 +3684,7 @@ have_png=no
with_png_req=unspecified
png_halfassed=no
AC_ARG_WITH(png,
-[ --with-png Include support for the PNG library.],
+[ --with-png Include support for the PNG library.],
[with_png="$withval"; with_png_req="$withval"],
[with_png=yes])
@@ -3333,9 +3726,8 @@ fi
have_gdk_pixbuf=no
with_gdk_pixbuf_req=unspecified
AC_ARG_WITH(pixbuf,
-[ --with-pixbuf Include support for the GDK-Pixbuf library in some
- demos, which will make it possible for them to read
- GIF, JPEG, and PNG files as well.],
+[ --with-pixbuf Include support for the GDK-Pixbuf library, which
+ allows the display of JPEG, PNG, GIF and SVG images.],
[with_gdk_pixbuf="$withval"; with_gdk_pixbuf_req="$withval"],
[with_gdk_pixbuf=yes])
@@ -3449,45 +3841,6 @@ fi
###############################################################################
#
-# Check for -ljpeg
-#
-###############################################################################
-
-have_jpeg=no
-with_jpeg_req=unspecified
-jpeg_halfassed=no
-AC_ARG_WITH(jpeg,
-[ --with-jpeg Include support for the JPEG library.],
- [with_jpeg="$withval"; with_jpeg_req="$withval"],
- [with_jpeg=yes])
-
-HANDLE_X_PATH_ARG(with_jpeg, --with-jpeg, JPEG)
-
-if test "$with_jpeg" != yes -a "$with_jpeg" != no ; then
- echo "error: must be yes or no: --with-jpeg=$with_jpeg"
- exit 1
-fi
-
-if test "$with_jpeg" = yes; then
-
- have_jpeg=no
- AC_CHECK_X_HEADER(jpeglib.h, [have_jpeg=yes])
-
- if test "$have_jpeg" = yes; then
- # we have the header, now check for the library
- have_jpeg=no
- jpeg_halfassed=yes
- AC_CHECK_X_LIB(jpeg, jpeg_start_compress,
- [have_jpeg=yes
- jpeg_halfassed=no
- JPEG_LIBS="-ljpeg"
- AC_DEFINE(HAVE_JPEGLIB)])
- fi
-fi
-
-
-###############################################################################
-#
# Check for -lXft
#
###############################################################################
@@ -3574,78 +3927,43 @@ else
fi
-###############################################################################
+# Also check for the standard X11 bitmap fonts, since Debian likes to not
+# install any of those by default. The unlock dialog requires them.
#
-# Check for -lsystemd
-#
-###############################################################################
-
-have_systemd=no
-with_systemd_req=unspecified
-systemd_halfassed=no
-AC_ARG_WITH(systemd,
-[ --with-systemd Build xscreensaver-systemd to lock on suspend.],
- [with_systemd="$withval"; with_systemd_req="$withval"],
- [with_systemd=yes])
-
-HANDLE_X_PATH_ARG(with_systemd, --with-systemd, systemd)
-
-if test "$with_systemd" != yes -a "$with_systemd" != no ; then
- echo "error: must be yes or no: --with-systemd=$with_systemd"
- exit 1
-fi
-
-if test "$with_systemd" = yes; then
-
- pkgs=''
- ok="yes"
- pkg_check_version libsystemd 221
- have_systemd="$ok"
-
- if test "$have_systemd" = yes; then
- AC_CACHE_CHECK([for libsystemd includes], ac_cv_systemd_config_cflags,
- [ac_cv_systemd_config_cflags=`$pkg_config --cflags $pkgs`])
- AC_CACHE_CHECK([for libsystemd libs], ac_cv_systemd_config_libs,
- [ac_cv_systemd_config_libs=`$pkg_config --libs $pkgs`])
- fi
-
- ac_systemd_config_cflags=$ac_cv_systemd_config_cflags
- ac_systemd_config_libs=$ac_cv_systemd_config_libs
-
- if test "$have_systemd" = yes; then
- #
- # we appear to have libsystemd; check for headers/libs to be sure.
- #
- ac_save_systemd_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $ac_systemd_config_cflags"
-
- have_systemd=no
- AC_CHECK_X_HEADER(systemd/sd-bus.h, [have_systemd=yes])
-
- CPPFLAGS="$ac_save_systemd_CPPFLAGS"
- fi
-
- if test "$have_systemd" = yes; then
- # we have the headers, now check for the libraries
- have_systemd=no
- systemd_halfassed=yes
-
- AC_MSG_RESULT(checking for libsystemd usability...)
- AC_CHECK_X_LIB(c, sd_bus_open_system, [have_systemd=yes],,
- $ac_systemd_config_libs -lX11 -lXext -lm)
- fi
-
- if test "$have_systemd" = no; then
- AC_MSG_RESULT(checking for libsystemd usability... no)
- fi
-fi
-
-if test "$have_systemd" = yes; then
- INCLUDES="$INCLUDES $ac_systemd_config_cflags"
- EXES_SYSTEMD='$(EXES_SYSTEMD)'
- AC_DEFINE(HAVE_LIBSYSTEMD)
-else
- EXES_SYSTEMD=''
+have_bitmap_fonts=no
+ff='helvB14.pcf.gz helvB14-ISO8859-1.pcf.gz'
+AC_MSG_CHECKING(for bitmap font files)
+for d in /usr/share/fonts/X11 \
+ /usr/share/X11/fonts \
+ /opt/X11/share/fonts \
+; do
+ for r in 100dpi 75dpi ; do
+ for f in $ff ; do
+ if test -f "$d/$r/$f" ; then
+ have_bitmap_fonts=yes
+ fi
+ done
+ done
+done
+AC_MSG_RESULT($have_bitmap_fonts)
+
+# In case we didn't guess the font directory properly, check RPMs and DEBs too.
+if test $have_bitmap_fonts != yes ; then
+ for r in 100dpi 75dpi ; do
+ for f in xfonts-$r \
+ xorg-x11-fonts-$r \
+ xorg-x11-fonts-ISO8859-1-$r \
+ ; do
+ if test $have_bitmap_fonts != yes ; then
+ AC_MSG_CHECKING(for $f)
+ if ( rpm -q "$f" 2>&- >&- ) ||
+ ( dpkg -s "$f" 2>&- | grep -q '^Status:.*installed' ) ; then
+ have_bitmap_fonts=yes
+ fi
+ AC_MSG_RESULT($have_bitmap_fonts)
+ fi
+ done
+ done
fi
@@ -3670,325 +3988,47 @@ if test "$ac_have_forkpty" != yes ; then
AC_DEFINE(HAVE_FORKPTY)])
fi
-###############################################################################
-#
-# Check for the XSHM server extension.
-#
-###############################################################################
-
-have_xshm=no
-with_xshm_req=unspecified
-AC_ARG_WITH(xshm-ext,
-[ --with-xshm-ext Include support for the Shared Memory extension.],
- [with_xshm="$withval"; with_xshm_req="$withval"],[with_xshm=yes])
-
-HANDLE_X_PATH_ARG(with_xshm, --with-xshm-ext, XSHM)
-
-if test "$with_xshm" = yes; then
-
- # first check for Xshm.h.
- AC_CHECK_X_HEADER(X11/extensions/XShm.h, [have_xshm=yes],,
- [#include <X11/Xlib.h>])
-
- # if that succeeded, then check for sys/ipc.h.
- if test "$have_xshm" = yes; then
- have_xshm=no
- AC_CHECK_X_HEADER(sys/ipc.h, [have_xshm=yes])
- fi
-
- # if that succeeded, then check for sys/shm.h.
- if test "$have_xshm" = yes; then
- have_xshm=no
- AC_CHECK_X_HEADER(sys/shm.h, [have_xshm=yes])
- fi
-
- # AIX is pathological, as usual: apparently it's normal for the Xshm headers
- # to exist, but the library code to not exist. And even better, the library
- # code is in its own library: libXextSam.a. So, if we're on AIX, and that
- # lib doesn't exist, give up. (This lib gets added to X_EXTRA_LIBS, and
- # that's not quite right, but close enough.)
- #
- case "$host" in
- *-aix*)
- if [ `uname -v` -eq 3 ]; then
- have_xshm=no
- AC_CHECK_X_LIB(XextSam, XShmQueryExtension,
- [have_xshm=yes; X_EXTRA_LIBS="$X_EXTRA_LIBS -lXextSam"],
- [true], -lX11 -lXext -lm)
- fi
- ;;
- esac
-
- # if that succeeded, then we've really got it.
- if test "$have_xshm" = yes; then
- AC_DEFINE(HAVE_XSHM_EXTENSION)
- fi
-
-elif test "$with_xshm" != no; then
- echo "error: must be yes or no: --with-xshm-ext=$with_xshm"
- exit 1
-fi
-
-
-###############################################################################
-#
-# Check for the DOUBLE-BUFFER server extension.
-#
-###############################################################################
-
-have_xdbe=no
-with_xdbe_req=unspecified
-AC_ARG_WITH(xdbe-ext,
-[ --with-xdbe-ext Include support for the DOUBLE-BUFFER extension.],
- [with_xdbe="$withval"; with_xdbe_req="$withval"],[with_xdbe=yes])
-
-HANDLE_X_PATH_ARG(with_xdbe, --with-xdbe-ext, DOUBLE-BUFFER)
-
-if test "$with_xdbe" = yes; then
-
- AC_CHECK_X_HEADER(X11/extensions/Xdbe.h, [have_xdbe=yes],,
- [#include <X11/Xlib.h>])
- if test "$have_xdbe" = yes; then
- AC_DEFINE(HAVE_DOUBLE_BUFFER_EXTENSION)
- fi
-
-elif test "$with_xdbe" != no; then
- echo "error: must be yes or no: --with-xdbe-ext=$with_xshm"
- exit 1
-fi
-
###############################################################################
#
-# Check for the SGI XReadDisplay server extension.
-#
-# Note: this has to be down here, rather than up with the other server
-# extension tests, so that the output of `configure --help' is in the
-# right order. Arrgh!
-#
-###############################################################################
-
-have_readdisplay=no
-with_readdisplay_req=unspecified
-AC_ARG_WITH(readdisplay,
-[ --with-readdisplay Include support for the XReadDisplay extension.],
- [with_readdisplay="$withval"; with_readdisplay_req="$withval"],
- [with_readdisplay=yes])
-
-HANDLE_X_PATH_ARG(with_readdisplay, --with-readdisplay, XReadDisplay)
-
-if test "$with_readdisplay" = yes; then
- AC_CHECK_X_HEADER(X11/extensions/readdisplay.h,
- AC_DEFINE(HAVE_READ_DISPLAY_EXTENSION),,
- [#include <X11/Xlib.h>])
-elif test "$with_readdisplay" != no; then
- echo "error: must be yes or no: --with-readdisplay=$with_readdisplay"
- exit 1
-fi
-
-
-###############################################################################
-#
-# Check for a directory full of images to use as the default value
-# of the "imageDirectory" preference.
+# Query AX_PTHREAD, and figure out which compiler gets used.
#
###############################################################################
-have_imagedir=no
-with_imagedir_req=unspecified
-
-AC_ARG_WITH(image-directory,
-[ --with-image-directory Arg is the default directory from which some demos
- will choose random images to display.],
- [with_imagedir="$withval"; with_imagedir_req="$withval"],
- [with_imagedir=yes])
-# no HANDLE_X_PATH_ARG for this one
-
-case "$with_imagedir" in
- /*)
- # absolute path
- AC_MSG_CHECKING([for image directory $with_imagedir])
- if test -d "$with_imagedir" ; then
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- with_imagedir=""
- fi
- ;;
- yes)
- with_imagedir=""
-
- #### Could use some more defaults here...
- for dd in \
- "/usr/share/backgrounds/images/" \
- "/usr/share/wallpapers/" \
- "/Library/Desktop Pictures/" \
- ; do
- if test -z "$with_imagedir"; then
- AC_MSG_CHECKING([for image directory $dd])
- if test -d "$dd" ; then
- AC_MSG_RESULT(yes)
- with_imagedir="$dd"
- else
- AC_MSG_RESULT(no)
- fi
- fi
- done
-
- ;;
- no)
- with_imagedir=""
- ;;
-
- *)
- echo "error: must be an absolute path: --with-image-directory=$with_imagedir_req"
- exit 1
- ;;
-esac
-ac_cv_imagedir="$with_imagedir"
-
-DEFAULT_IMAGES_P='True'
-DEFAULT_IMAGE_DIRECTORY="$ac_cv_imagedir"
+have_pthread=no
+with_pthread_req=unspecified
-if test -z "$DEFAULT_IMAGE_DIRECTORY" ; then
- DEFAULT_IMAGES_P='False'
-fi
+# AX_PTHREAD is from the GNU Autoconf Archive.
+# https://savannah.gnu.org/projects/autoconf-archive/
+m4_include(ax_pthread.m4)
+# This affects CC, LIBS, and CFLAGS, instead of defining new variables.
-###############################################################################
-#
-# Pick a text file to use as the default of the "textFile" preference.
-# Any old file will do, but preferably one that will make interesting
-# shapes when displayed by "starwars" and "fontglide".
-#
-###############################################################################
+AC_ARG_WITH([pthread],
+[ --with-pthread Enables POSIX threads, for SMP support.],
+ [with_pthread="$withval"; with_pthread_req="$withval"],
+ [with_pthread=yes])
-have_textfile=no
-with_textfile_req=unspecified
-
-AC_ARG_WITH(text-file,
-[ --with-text-file=FILE By default, some demos may display this file.],
- [with_textfile="$withval"; with_textfile_req="$withval"],
- [with_textfile=yes])
-# no HANDLE_X_PATH_ARG for this one
-
-case "$with_textfile" in
- /*)
- # absolute path
- AC_MSG_CHECKING([for text file $with_textfile])
- if test -f "$with_textfile" ; then
- AC_MSG_RESULT(yes)
+if test "$with_pthread" = yes; then
+ # AX_PTHREAD might want a different compiler.
+ AX_PTHREAD(
+ [if test "$CC" = "$PTHREAD_CC" -o -z "$ac_original_cc"; then
+ have_pthread=yes
else
- AC_MSG_RESULT(no)
- with_textfile=""
+ ac_prog_cc_no_pthread=yes
fi
- ;;
- yes)
- with_textfile=""
-
- #### Could use some more defaults here...
- for f in \
- "/usr/X11R6/lib/X11/doc/README" \
- "/usr/share/doc/xserver-common/copyright" \
- "/usr/share/doc/xserver-xorg-core/copyright" \
- "/usr/X11R6/README" \
- "/usr/share/doc/libX11*/COPYING" \
- "/usr/X11/share/X11/doc/README*" \
- "/usr/share/doc/debian/debian-manifesto" \
- ; do
- if test -z "$with_textfile"; then
- AC_MSG_CHECKING([for text file $f])
- f=`/bin/ls $f 2>&- | head -1`
- if test -f "$f" ; then
- AC_MSG_RESULT(yes)
- with_textfile="$f"
- else
- AC_MSG_RESULT(no)
- fi
- fi
- done
-
- ;;
- no)
- with_textfile=""
- ;;
-
- *)
- echo "error: must be an absolute path: --with-text-file=$with_textfile_req"
- exit 1
- ;;
-esac
-ac_cv_textfile="$with_textfile"
-
-DEFAULT_TEXT_FILE="$ac_cv_textfile"
-
-
-###############################################################################
-#
-# Check the browser to see help URL
-#
-###############################################################################
-
-have_browser=no
-with_browser_req=unspecified
-
-AC_ARG_WITH(browser,
-[ --with-browser=BROWSER Specify the web browser used to show the help URL.],
- [with_browser="$withval"; with_browser_req="$withval"],
- [with_browser=no ])
-# no HANDLE_X_PATH_ARG for this one
-
-case "$with_browser" in
- no )
- ;;
- * )
- WITH_BROWSER=$with_browser
- gnome_open_program=$with_browser
- AC_MSG_CHECKING([for browser $with_browser])
- with_browser_fullpath=`which $with_browser 2>/dev/null`
- case $with_browser_fullpath in
- /* )
- AC_MSG_RESULT(yes)
- have_browser=yes
- ;;
- * )
- AC_MSG_RESULT(no)
-# Only warning: we don't want to install all packages for the
-# dependency of the browser in building stage...
- echo "WARNING: browser not found: --with-browser=$with_browser"
- ;;
- esac
- ;;
-esac
-ac_cv_browser="$with_browser"
-
-###############################################################################
-#
-# Check whether it's ok to install some hacks as setuid (e.g., "sonar")
-# This should be safe, but let's give people the option.
-#
-###############################################################################
-
-setuid_hacks_default=no
-setuid_hacks="$setuid_hacks_default"
-AC_ARG_WITH(setuid-hacks,
-[ --with-setuid-hacks Allow some demos to be installed `setuid root'
- (which is needed in order to ping other hosts.)],
- [setuid_hacks="$withval"], [setuid_hacks="$setuid_hacks_default"])
-
-HANDLE_X_PATH_ARG(setuid_hacks, --with-setuid-hacks, setuid hacks)
+ ])
-if test "$setuid_hacks" = yes; then
- true
-elif test "$setuid_hacks" != no; then
- echo "error: must be yes or no: --with-setuid-hacks=$setuid_hacks"
- exit 1
+ if test "$have_pthread" = yes; then
+ AC_DEFINE([HAVE_PTHREAD])
+ CC=$PTHREAD_CC
+ fi
fi
###############################################################################
#
-# Check for setcap, which is less worrying than setuid.
+# Check for libcap, which allows "sonar" to work without setuid.
#
###############################################################################
@@ -3997,8 +4037,8 @@ setcap_hacks_default=yes
setcap_hacks="$setcap_hacks_default"
setcap_hacks_req=unspecified
AC_ARG_WITH(setcap-hacks,
-[ --with-setcap-hacks Allow some demos to be installed with setcap
- (which is needed in order to ping other hosts.)],
+[ --with-setcap-hacks Build the "sonar" demo with libcap, which allows
+ it to ping other hosts without being setuid.],
[setcap_hacks="$withval"; setcap_hacks_req="$withval"],
[setcap_hacks=yes])
@@ -4027,6 +4067,35 @@ fi
###############################################################################
#
+# Option to prevent "sonar" from working properly.
+# It must be setuid on systems without libcap.
+#
+###############################################################################
+
+if test "$have_libcap" = yes; then
+ setuid_hacks_default=no
+else
+ setuid_hacks_default=yes
+fi
+
+setuid_hacks="$setuid_hacks_default"
+AC_ARG_WITH(setuid-hacks,
+[ --with-setuid-hacks Install the "sonar" demo as setuid root, which is
+ needed in order to ping other hosts without setcap.],
+ [setuid_hacks="$withval"], [setuid_hacks="$setuid_hacks_default"])
+
+HANDLE_X_PATH_ARG(setuid_hacks, --with-setuid-hacks, setuid hacks)
+
+if test "$setuid_hacks" = yes; then
+ true
+elif test "$setuid_hacks" != no; then
+ echo "error: must be yes or no: --with-setuid-hacks=$setuid_hacks"
+ exit 1
+fi
+
+
+###############################################################################
+#
# Check for --with-record-animation
#
###############################################################################
@@ -4057,6 +4126,7 @@ if test "$record_anim" = yes; then
fi
fi
+
###############################################################################
#
# Done testing. Now, set up the various -I and -L variables,
@@ -4269,9 +4339,6 @@ AC_SUBST(DEFAULT_IMAGES_P)
AC_SUBST(DEFAULT_IMAGE_DIRECTORY)
AC_SUBST(DEFAULT_TEXT_FILE)
AC_SUBST(WITH_BROWSER)
-AC_SUBST(COMMENT_DEMO_GLADE2_GTK_2_22_HEAD)
-AC_SUBST(COMMENT_DEMO_GLADE2_GTK_2_22_TAIL)
-
AC_SUBST(OBJCC)
AC_SUBST(EXES_OSX)
@@ -4331,7 +4398,6 @@ AC_OUTPUT(Makefile
po/Makefile.in
driver/Makefile
driver/xscreensaver.pam
- driver/xscreensaver-demo.glade2
driver/XScreenSaver.ad)
###############################################################################
@@ -4410,6 +4476,10 @@ if test "$with_xidle_req" = yes -a "$have_xidle" = no ; then
warn 'The XIdle extension was requested, but was not found.'
fi
+if test "$with_mit_req" = yes -a "$have_mit" = no ; then
+ warn 'The MIT-SCREEN-SAVER extension was requested, but was not found.'
+fi
+
if test "$with_xshm_req" = yes -a "$have_xshm" = no ; then
warn 'The XSHM extension was requested, but was not found.'
fi
@@ -4656,19 +4726,29 @@ if test "$have_xft" = no ; then
fi
+if test "$have_bitmap_fonts" = no ; then
+ warnL 'The standard bitmap fonts do not seem to be installed.'
+ warn2 'That is not going to work out well for you.'
+ warn2 'Install "xfonts-100dpi" or "xorg-x11-fonts-100dpi".'
+fi
+
+
if test "$have_systemd" = no ; then
systemd_warned=no
- if test "$with_systemd_req" = yes ; then
+ if test "$systemd_too_old" = yes ; then
+ warnL "The systemd library is too old."
+ systemd_warned=yes
+ elif test "$with_systemd_req" = yes ; then
warnL "Use of systemd was requested, but it was not found."
systemd_warned=yes
- elif test "$with_systemd_req" = no ; then
+ elif test "$ac_macosx" = yes; then
true
- # noteL 'The systemd library is not being used.'
- # systemd_warned=yes
+ elif test "$with_systemd_req" = no ; then
+ noteL 'The systemd library is not being used.'
+ systemd_warned=yes
else
- true
- # noteL "The systemd library was not found."
- # systemd_warned=yes
+ warnL "The systemd library was not found."
+ systemd_warned=yes
fi
if test "$systemd_halfassed" = yes ; then
@@ -4682,7 +4762,11 @@ if test "$have_systemd" = no ; then
fi
if test "$systemd_warned" = yes; then
+ echo ''
warn2 "This means that xscreensaver-systemd won't be built."
+ warn2 "Without that, xscreensaver will not be able to auto-lock"
+ warn2 "before the system is suspended (e.g., closing laptop lid)"
+ warn2 "and might activate while video playback is in progress."
fi
fi
@@ -4823,8 +4907,6 @@ for bad_choice in xscreensaver xscreensaver-demo xscreensaver-command ; do
done
-do_dir_warning=no
-
# Now let's warn if there's a previous RPM version already installed.
# But don't bother with this test if we are currently *building* an RPM.
@@ -4840,27 +4922,38 @@ if test -z "$RPM_PACKAGE_VERSION" ; then
changequote([,])
if test \! -z "$rpmv" ; then
- rpmbdir=`rpm -ql $rpmnames | sed -n 's@^\(.*\)/xscreensaver-demo$@\1@p'`
- rpmhdir=`rpm -ql $rpmnames | sed -n 's@^\(.*\)/popsquares$@\1@p'`
+
+ # M4 sucks!!
+ changequote(A,B)
+ rpmbdir=`rpm -ql $rpmnames | sed -n 's@^\(.*/\)xscreensaver-demo$@\1@p'`
+ rpmhdir=`rpm -ql $rpmnames | sed -n 's@^\(.*/\)popsquares$@\1@p'`
+ rpmcdir=`rpm -ql $rpmnames | sed -n 's@^\(.*/\)popsquares\.xml$@\1@p'`
+ rpmadir=`rpm -ql $rpmnames | sed -n 's@^\(.*/\)XScreenSaver$@\1@p'`
+ changequote([,])
+
+ err=" (DIFFERS)"
+ if test -z "$rpmbdir" ; then rpmbdir='???'
+ elif test "$rpmbdir" != "${bindir}/" ; then rpmbdir="$rpmbdir$err";fi
+
+ if test -z "$rpmhdir" ; then rpmhdir='???'
+ elif test "$rpmhdir" != "${HACKDIR}/" ; then rpmhdir="$rpmhdir$err";fi
+
+ if test -z "$rpmcdir" ; then rpmcdir='???'
+ elif test "$rpmcdir" != "${HACK_CONF_DIR}/"; then rpmcdir="$rpmcdir$err";fi
+
+ if test -z "$rpmadir" ; then rpmadir='???'
+ elif test "$rpmadir" != "${APPDEFAULTS}/" ; then rpmadir="$rpmadir$err";fi
warning=no
- warnL "There is already an installed RPM of xscreensaver $rpmv"
- warn2 'on this system. You might want to remove it ("rpm -ve")'
- warn2 'before running "make install" in this directory.'
+ warnL "There is already an installed RPM of xscreensaver"
+ warn2 "version \"$rpmv\" on this system."
echo ""
- warn2 "Alternately, you could build this version of xscreensaver"
- warn2 'as an RPM, and then install that. An "xscreensaver.spec"'
- warn2 'file is included. Try "rpmbuild -v -ba xscreensaver.spec".'
- warn2 "See the RPM documentation for more info."
+ warn2 "It is currently installed in these directories:"
echo ""
-
- if test "$rpmbdir" = "$rpmhdir" ; then
- warn2 "The RPM version was installed in $rpmbdir/."
- do_dir_warning=yes
- else
- warn2 "The RPM version was installed in $rpmbdir/,"
- warn2 "with demos in $rpmhdir/."
- fi
+ warn2 "User programs: $rpmbdir$berr"
+ warn2 "Screen savers: $rpmhdir$herr"
+ warn2 "Configuration: $rpmcdir$cerr"
+ warn2 "App Defaults: $rpmadir$aerr"
fi
fi
@@ -4875,54 +4968,47 @@ for dpkg in $debnames ; do
done
if test \! -z "$debv" ; then
- debbdir=`dpkg -L $debnames 2>/dev/null | \
- sed -n 's@^\(.*/bin/\)xscreensaver$@\1@p'`
- debhdir=`dpkg -L $debnames 2>/dev/null | \
- sed -n 's@^\(.*/\)popsquares$@\1@p'`
- if test -z "$debbdir" ; then debbdir='???'; fi
- if test -z "$debhdir" ; then debhdir='???'; fi
- warning=no
- warnL "There is already an installed dpkg of xscreensaver"
- warn2 "version \"$debv\" on this system."
- echo ""
- warn2 "The dpkg was installed in $debbdir,"
- warn2 "with demos in $debhdir."
-fi
+ # M4 sucks!!
+ changequote(A,B)
+ debbdir=`dpkg -L $debnames 2>&- | sed -n 's@^\(.*/bin/\)xscreensaver$@\1@p'`
+ debhdir=`dpkg -L $debnames 2>&- | sed -n 's@^\(.*/\)popsquares$@\1@p'`
+ debcdir=`dpkg -L $debnames 2>&- | sed -n 's@^\(.*/\)popsquares\.xml$@\1@p'`
+ debadir=`dpkg -L $debnames 2>&- | sed -n 's@^\(.*/\)XScreenSaver[^/]*$@\1@p'`
+ changequote([,])
+ err=" (DIFFERS)"
+ if test -z "$debbdir" ; then debbdir='???'
+ elif test "$debbdir" != "${bindir}/" ; then debbdir="$debbdir$err"; fi
-if test "${bindir}" = "${HACKDIR}" ; then
- do_dir_warning=yes
-fi
+ if test -z "$debhdir" ; then debhdir='???'
+ elif test "$debhdir" != "${HACKDIR}/" ; then debhdir="$debhdir$err"; fi
-if test "$do_dir_warning" = yes; then
- echo ""
- echo "$warnsep"
- echo ""
- echo ' When you run "make install", the "xscreensaver",'
- echo ' "xscreensaver-demo", and "xscreensaver-command" executables'
- echo " will be installed in ${bindir}/."
- echo ""
- echo " The various graphics demos (200+ different executables) will"
- echo " be installed in ${HACKDIR}/."
- echo ""
- echo " If you would prefer the demos to be installed elsewhere,"
- echo " you should re-run configure with the --with-hackdir=DIR"
- echo " option. For more information, run \`./configure --help'."
- warning=yes
-fi
+ if test -z "$debcdir" ; then debcdir='???'
+ elif test "$debcdir" != "${HACK_CONF_DIR}/" ; then debcdir="$debcdir$err"; fi
-if test "$warning" != no; then
- echo '' ; echo "$warnsep" ; echo ''
-fi
+ if test -z "$debadir" ; then debadir='???'
+ elif test "$debadir" != "${APPDEFAULTS}/" ; then debadir="$debadir$err"; fi
-if test "$do_dir_warning" = no; then
- if test "$warning" = no; then
- echo ''
- fi
- echo "User programs will be installed in ${bindir}/"
- echo "Screen savers will be installed in ${HACKDIR}/"
- echo "Configuration dialogs will be installed in ${HACK_CONF_DIR}/"
- echo "System-wide default settings will be installed in ${APPDEFAULTS}/"
- echo ''
-fi
+ warning=no
+ warnL "There is already an installed dpkg of xscreensaver"
+ warn2 "version \"$debv\" on this system."
+ echo ""
+ warn2 "It is currently installed in these directories:"
+ echo ""
+ warn2 "User programs: $debbdir$berr"
+ warn2 "Screen savers: $debhdir$herr"
+ warn2 "Configuration: $debcdir$cerr"
+ warn2 "App Defaults: $debadir$aerr"
+fi
+
+echo ""
+echo "$warnsep"
+echo ""
+echo " XScreenSaver will be installed in these directories:"
+echo ""
+echo " User programs: ${bindir}/"
+echo " Screen savers: ${HACKDIR}/"
+echo " Configuration: ${HACK_CONF_DIR}/"
+echo " App Defaults: ${APPDEFAULTS}/"
+echo ""
diff --git a/driver/Makefile.in b/driver/Makefile.in
index 7baf504..070a8b7 100644
--- a/driver/Makefile.in
+++ b/driver/Makefile.in
@@ -27,7 +27,8 @@ INTLTOOL_MERGE = @INTLTOOL_MERGE@
GTK_DATADIR = @GTK_DATADIR@
GTK_APPDIR = $(GTK_DATADIR)/applications
GTK_ICONDIR = $(GTK_DATADIR)/pixmaps
-GTK_GLADEDIR = $(GTK_DATADIR)/xscreensaver/glade
+GTK_UIDIR = $(GTK_DATADIR)/xscreensaver/ui
+OLD_GLADEDIR = $(GTK_DATADIR)/xscreensaver/glade
HACK_CONF_DIR = @HACK_CONF_DIR@
CC = @CC@
@@ -36,8 +37,8 @@ CFLAGS = @CFLAGS@
LDFLAGS = @LDFLAGS@
DEFS = @DEFS@
INTL_DEFS = -DLOCALEDIR=\"$(localedir)\"
-SUBP_DEFS = $(DEFS) -DDEFAULT_PATH_PREFIX='"@HACKDIR@"'
-GTK_DEFS = $(DEFS) -DDEFAULT_ICONDIR='"$(GTK_GLADEDIR)"'
+SUBP_DEFS = -DDEFAULT_PATH_PREFIX='"@HACKDIR@"'
+GTK_DEFS = -DDEFAULT_ICONDIR='"$(GTK_UIDIR)"'
CONF_DEFS = -DHACK_CONFIGURATION_PATH='"$(HACK_CONF_DIR)"'
LIBS = @LIBS@
@@ -114,7 +115,7 @@ NOLOCK_SRCS_1 = lock.c
NOLOCK_OBJS_1 = lock.o
SYSTEMD_SRCS = xscreensaver-systemd.c
-SYSTEMD_OBJS = xscreensaver-systemd.o
+SYSTEMD_OBJS = xscreensaver-systemd.o $(UTILS_BIN)/yarandom.o
SYSTEMD_LIBS = -lsystemd
TEST_SRCS = test-passwd.c test-uid.c test-xdpms.c test-grab.c \
@@ -245,7 +246,7 @@ MEN = $(MEN_1) @MEN_OSX@
EXTRAS = README Makefile.in \
XScreenSaver.ad.in XScreenSaver-Xm.ad xscreensaver.pam.in \
- xscreensaver-demo.glade2.in xscreensaver-demo.glade2p \
+ xscreensaver-demo.ui \
screensaver-properties.desktop.in \
.gdbinit
VMSFILES = compile_axp.com compile_decc.com link_axp.com link_decc.com \
@@ -378,7 +379,7 @@ munge-scripts: $(SCRIPTS)
install-man: $(MEN)
@men="$(MEN)" ; \
U=$(UTILS_SRC)/version.h ; \
- V=`sed -n 's/.*xscreensaver \([0-9]\.[^)]*)\).*/\1/p' < $$U` ; \
+ V=`sed -n 's/.*xscreensaver \([0-9]\.[^)]*)\).*/\1/p' < $$U` ; \
T=/tmp/xs$$$$.$(mansuffix) ; \
TH=".TH XScreenSaver $(mansuffix) \"$$V\" \"X Version 11\"" ; \
echo "installing man pages: $$TH" ; \
@@ -529,42 +530,42 @@ install-gnome:: $(LOGO)
fi
# ../utils/images/screensaver-*.png
-# into /usr/share/xscreensaver/glade/
+# into /usr/share/xscreensaver/ui/
install-gnome::
- @if [ "$(GTK_DATADIR)" != "" ]; then \
- if [ ! -d "$(install_prefix)$(GTK_GLADEDIR)" ]; then \
- echo $(INSTALL_DIRS) "$(install_prefix)$(GTK_GLADEDIR)" ;\
- $(INSTALL_DIRS) "$(install_prefix)$(GTK_GLADEDIR)" ;\
+ @if [ "$(GTK_DATADIR)" != "" ]; then \
+ if [ ! -d "$(install_prefix)$(GTK_UIDIR)" ]; then \
+ echo $(INSTALL_DIRS) "$(install_prefix)$(GTK_UIDIR)" ;\
+ $(INSTALL_DIRS) "$(install_prefix)$(GTK_UIDIR)" ;\
fi ;\
for target in $(GTK_ICONS) ; do \
dest=`echo $$target | sed 's@^.*/@@'` ;\
echo $(INSTALL_DATA) $$target \
- $(install_prefix)$(GTK_GLADEDIR)/$$dest ;\
+ $(install_prefix)$(GTK_UIDIR)/$$dest ;\
$(INSTALL_DATA) $$target \
- $(install_prefix)$(GTK_GLADEDIR)/$$dest ;\
+ $(install_prefix)$(GTK_UIDIR)/$$dest ;\
done ;\
fi
-# xscreensaver-demo.glade2
-# into /usr/share/xscreensaver/glade/
-install-gnome:: xscreensaver-demo.glade2
+# xscreensaver-demo.ui
+# into /usr/share/xscreensaver/ui/
+install-gnome:: xscreensaver-demo.ui
@if [ "$(GTK_DATADIR)" != "" ]; then \
- if [ ! -d "$(install_prefix)$(GTK_GLADEDIR)" ]; then \
- echo $(INSTALL_DIRS) "$(install_prefix)$(GTK_GLADEDIR)" ;\
- $(INSTALL_DIRS) "$(install_prefix)$(GTK_GLADEDIR)" ;\
+ if [ ! -d "$(install_prefix)$(GTK_UIDIR)" ]; then \
+ echo $(INSTALL_DIRS) "$(install_prefix)$(GTK_UIDIR)" ;\
+ $(INSTALL_DIRS) "$(install_prefix)$(GTK_UIDIR)" ;\
fi ;\
- target=xscreensaver-demo.glade2 ;\
- echo $(INSTALL_DATA) $$target \
- $(install_prefix)$(GTK_GLADEDIR)/$$target ;\
- if $(INSTALL_DATA) $$target \
- $(install_prefix)$(GTK_GLADEDIR)/$$target ;\
+ target=xscreensaver-demo.ui ;\
+ echo $(INSTALL_DATA) $$target \
+ $(install_prefix)$(GTK_UIDIR)/$$target ;\
+ if $(INSTALL_DATA) $$target \
+ $(install_prefix)$(GTK_UIDIR)/$$target ;\
then true ;\
else \
e=echo ; \
$$e "" ;\
$$e " ####################################################################";\
$$e " Warning: unable to install $$target into" ;\
- $$e " $(install_prefix)$(GTK_GLADEDIR)/." ;\
+ $$e " $(install_prefix)$(GTK_UIDIR)/." ;\
$$e " Without this file, xscreensaver-demo will not" ;\
$$e " be able to run properly." ;\
$$e " ####################################################################";\
@@ -593,25 +594,29 @@ uninstall-gnome::
fi
# ../utils/images/screensaver-*.png
-# into /usr/share/xscreensaver/glade/
+# into /usr/share/xscreensaver/ui/
uninstall-gnome::
@if [ "$(GTK_DATADIR)" != "" ]; then \
for target in $(GTK_ICONS) ; do \
dest=`echo $$target | sed 's@^.*/@@'` ;\
- echo rm -f $(install_prefix)$(GTK_GLADEDIR)/$$dest ;\
- rm -f $(install_prefix)$(GTK_GLADEDIR)/$$dest ;\
+ echo rm -f $(install_prefix)$(GTK_UIDIR)/$$dest ;\
+ rm -f $(install_prefix)$(GTK_UIDIR)/$$dest ;\
done ;\
fi
-# xscreensaver-demo.glade2
-# into /usr/share/xscreensaver/glade/
-uninstall-gnome:: xscreensaver-demo.glade2
+# xscreensaver-demo.ui
+# into /usr/share/xscreensaver/ui/
+uninstall-gnome::
@if [ "$(GTK_DATADIR)" != "" ]; then \
- target=xscreensaver-demo.glade2 ;\
- echo rm -f $(install_prefix)$(GTK_GLADEDIR)/$$target ;\
- rm -f $(install_prefix)$(GTK_GLADEDIR)/$$target ;\
+ target=xscreensaver-demo.ui ;\
+ echo rm -f $(install_prefix)$(GTK_UIDIR)/$$target ;\
+ rm -f $(install_prefix)$(GTK_UIDIR)/$$target ;\
fi
+# /usr/share/xscreensaver/glade/ no longer used
+uninstall-gnome::
+ -rm -rf $(OLD_GLADEDIR)
+
# /usr/share/xscreensaver/config/README
install-xml:
@dest=$(install_prefix)$(HACK_CONF_DIR) ; \
@@ -632,9 +637,11 @@ clean:
XScreenSaver_ad.h XScreenSaver_Xm_ad.h
distclean: clean
- -rm -f Makefile XScreenSaver.ad \
- TAGS *~ "#"* screensaver-properties.desktop \
- xscreensaver-demo.glade2 \
+ -rm -f \
+ TAGS *~ "#"* *.rej *.orig \
+ Makefile \
+ XScreenSaver.ad \
+ screensaver-properties.desktop \
xscreensaver.pam
# Adds all current dependencies to Makefile
@@ -679,12 +686,12 @@ update_ad_version::
@ \
files="XScreenSaver.ad.in ../hacks/config/README ../OSX/bindist.rtf" ; \
U=$(UTILS_SRC)/version.h ; \
- V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' < $$U` ; \
+ V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^ ]*\).*/\1/p' < $$U` ; \
Y=`date '+%Y'` ; \
D=`date '+%d-%b-%Y'` ; \
for S in $$files ; do \
T=/tmp/xs.$$$$ ; \
- sed -e "s/\(.*version \)[0-9][0-9]*\.[0-9]*[ab]*[0-9]*\(.*\)/\1$$V\2/" \
+ sed -e "s/\(.*version \)[0-9][0-9]*\.[0-9.]*[ab]*[0-9]*\(.*\)/\1$$V\2/" \
-e "s/\([0-9][0-9]-[A-Z][a-z][a-z]-[0-9][0-9][0-9]*\)/$$D/" \
-e "s/\( [0-9][0-9][0-9][0-9]-\)[0-9][0-9][0-9][0-9] /\1$$Y /" \
< $$S > $$T ; \
@@ -751,32 +758,26 @@ $(UTIL_OBJS):
$(MAKE) $(@F) CC="$(CC)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)"
# How we build object files in this directory.
+CC_ALL=$(INCLUDES) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS)
.c.o:
- $(CC) -c $(INCLUDES) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) $<
-
+ $(CC) -c $(CC_ALL) $<
.m.o:
- $(OBJCC) -c $(INCLUDES) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) $<
+ $(OBJCC) -c $(CC_ALL) $<
# subprocs takes an extra -D option.
subprocs.o: subprocs.c
- $(CC) -c $(INCLUDES) $(SUBP_DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) \
- $(srcdir)/subprocs.c
+ $(CC) -c $(CC_ALL) $(SUBP_DEFS) $(srcdir)/subprocs.c
# xscreensaver takes an extra -D option.
xscreensaver.o: xscreensaver.c
- $(CC) -c $(INCLUDES) $(DEFS) $(INTL_DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) \
- $(srcdir)/xscreensaver.c
+ $(CC) -c $(CC_ALL) $(INTL_DEFS) $(srcdir)/xscreensaver.c
-# demo-Gtk takes extra -D options, and an extra -I option.
+# demo-Gtk and demo-Gtk-conf take extra -D and -I options.
+DEMO_GTK=$(CONF_DEFS) $(SUBP_DEFS) $(GTK_DEFS) $(INTL_DEFS) -I$(ICON_SRC)
demo-Gtk.o: demo-Gtk.c
- $(CC) -c $(INCLUDES) $(SUBP_DEFS) -I$(ICON_SRC) \
- $(GTK_DEFS) $(INTL_DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) \
- $(srcdir)/demo-Gtk.c
-
-# demo-Gtk-conf takes an extra -D option.
+ $(CC) -c $(CC_ALL) $(DEMO_GTK) $(srcdir)/demo-Gtk.c
demo-Gtk-conf.o: demo-Gtk-conf.c
- $(CC) -c $(INCLUDES) $(CONF_DEFS) $(GTK_DEFS) $(CPPFLAGS) $(CFLAGS) $(X_CFLAGS) \
- $(srcdir)/demo-Gtk-conf.c
+ $(CC) -c $(CC_ALL) $(DEMO_GTK) $(srcdir)/demo-Gtk-conf.c
# How we build the default app-defaults file into the program.
@@ -808,15 +809,15 @@ xscreensaver-demo: @PREFERRED_DEMO_PROGRAM@
cp -p @PREFERRED_DEMO_PROGRAM@@EXEEXT@ $@@EXEEXT@ ; \
fi
+DEMO_XM_CC=$(DEMO_OBJS) $(MOTIF_OBJS) $(LIBS) $(X_LIBS) $(MOTIF_LIBS)
+DEMO_GTK_CC=$(DEMO_OBJS) $(GTK_OBJS) $(LIBS) $(X_LIBS) $(GTK_LIBS) $(XML_LIBS)
+DEMO_CC2=$(INTL_LIBS) $(X_PRE_LIBS) -lXt -lX11 $(XDPMS_LIBS) $(XINERAMA_LIBS)
+DEMO_CC3=-lXext $(X_EXTRA_LIBS)
xscreensaver-demo-Xm: $(DEMO_OBJS) $(MOTIF_OBJS)
- $(CC) $(LDFLAGS) -o $@ $(DEMO_OBJS) $(MOTIF_OBJS) $(LIBS) $(X_LIBS) \
- $(MOTIF_LIBS) $(INTL_LIBS) $(X_PRE_LIBS) -lXt -lX11 \
- $(XDPMS_LIBS) $(XINERAMA_LIBS) -lXext $(X_EXTRA_LIBS)
+ $(CC) $(LDFLAGS) -o $@ $(DEMO_XM_CC) $(DEMO_CC2) $(DEMO_CC3)
xscreensaver-demo-Gtk: $(DEMO_OBJS) $(GTK_OBJS)
- $(CC) $(LDFLAGS) -o $@ $(DEMO_OBJS) $(GTK_OBJS) $(LIBS) $(X_LIBS) \
- $(GTK_LIBS) $(XML_LIBS) $(INTL_LIBS) $(X_PRE_LIBS) \
- -lXt -lX11 $(XDPMS_LIBS) $(XINERAMA_LIBS) -lXext $(X_EXTRA_LIBS)
+ $(CC) $(LDFLAGS) -o $@ $(DEMO_GTK_CC) $(DEMO_CC2) $(DEMO_CC3)
demo-Gtk.o: XScreenSaver_ad.h
demo-Xm.o: XScreenSaver_Xm_ad.h
@@ -1042,6 +1043,10 @@ xscreensaver.o: $(UTILS_SRC)/version.h
xscreensaver.o: $(UTILS_SRC)/visual.h
xscreensaver.o: $(UTILS_SRC)/yarandom.h
xscreensaver.o: $(srcdir)/xscreensaver.h
+xscreensaver-systemd.o: ../config.h
+xscreensaver-systemd.o: $(UTILS_SRC)/queue.h
+xscreensaver-systemd.o: $(UTILS_SRC)/version.h
+xscreensaver-systemd.o: $(UTILS_SRC)/yarandom.h
xset.o: ../config.h
xset.o: $(srcdir)/prefs.h
xset.o: $(srcdir)/types.h
diff --git a/driver/XScreenSaver.ad.in b/driver/XScreenSaver.ad.in
index 0b51f0c..8eb0b63 100644
--- a/driver/XScreenSaver.ad.in
+++ b/driver/XScreenSaver.ad.in
@@ -4,8 +4,8 @@
! a screen saver and locker for the X window system
! by Jamie Zawinski
!
-! version 5.44
-! 20-Mar-2020
+! version 5.45
+! 08-Dec-2020
!
! See "man xscreensaver" for more info. The latest version is always
! available at https://www.jwz.org/xscreensaver/
@@ -589,8 +589,12 @@ XScreenSaver.bourneShell: /bin/sh
vfeedback -root \n\
@GL_KLUDGE@ GL: deepstars -root \n\
@GL_KLUDGE@ GL: gravitywell -root \n\
+@GL_KLUDGE@ GL: beats -root \n\
+@GL_KLUDGE@ GL: covid19 -root \n\
@GL_KLUDGE@ GL: etruscanvenus -root \n\
-@GL_KLUDGE@ GL: gibson -root \n
+@GL_KLUDGE@ GL: gibson -root \n\
+@GL_KLUDGE@ GL: headroom -root \n\
+@GL_KLUDGE@ GL: sphereeversion -root \n
@@ -615,6 +619,7 @@ XScreenSaver.bourneShell: /bin/sh
*hacks.ccurve.name: CCurve
*hacks.cloudlife.name: CloudLife
*hacks.companioncube.name: CompanionCube
+*hacks.covid19.name: COVID19
*hacks.cubestack.name: CubeStack
*hacks.cubestorm.name: CubeStorm
*hacks.cubetwist.name: CubeTwist
@@ -676,6 +681,7 @@ XScreenSaver.bourneShell: /bin/sh
*hacks.skytentacles.name: SkyTentacles
*hacks.slidescreen.name: SlideScreen
*hacks.speedmine.name: SpeedMine
+*hacks.sphereeversion.name: SphereEversion
*hacks.splitflap.name: SplitFlap
*hacks.starwars.name: StarWars
*hacks.stonerview.name: StonerView
diff --git a/driver/demo-Gtk-conf.c b/driver/demo-Gtk-conf.c
index bac6ecc..cc3b6a3 100644
--- a/driver/demo-Gtk-conf.c
+++ b/driver/demo-Gtk-conf.c
@@ -1,5 +1,5 @@
/* demo-Gtk-conf.c --- implements the dynamic configuration dialogs.
- * xscreensaver, Copyright (c) 2001-2014 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 2001-2020 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -59,8 +59,21 @@
# endif /* LIBXML_VERSION */
#endif /* xmlChildrenNode */
+#if (__GNUC__ >= 4) /* Ignore useless warnings generated by gtk.h */
+# undef inline
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wstrict-prototypes"
+# pragma GCC diagnostic ignored "-Wlong-long"
+# pragma GCC diagnostic ignored "-Wvariadic-macros"
+# pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+
#include <gtk/gtk.h>
+#if (__GNUC__ >= 4)
+# pragma GCC diagnostic pop
+#endif
+
#include "demo-Gtk-conf.h"
/* Deal with deprecation of direct access to struct fields on the way to GTK3
diff --git a/driver/demo-Gtk.c b/driver/demo-Gtk.c
index da98c53..c938ef2 100644
--- a/driver/demo-Gtk.c
+++ b/driver/demo-Gtk.c
@@ -82,6 +82,15 @@
# include <X11/extensions/Xinerama.h>
#endif /* HAVE_XINERAMA */
+#if (__GNUC__ >= 4) /* Ignore useless warnings generated by gtk.h */
+# undef inline
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wstrict-prototypes"
+# pragma GCC diagnostic ignored "-Wlong-long"
+# pragma GCC diagnostic ignored "-Wvariadic-macros"
+# pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+
#include <gtk/gtk.h>
#ifdef HAVE_CRAPPLET
@@ -92,25 +101,20 @@
#include <gdk/gdkx.h>
#ifdef HAVE_GTK2
-# include <glade/glade-xml.h>
# include <gmodule.h>
#else /* !HAVE_GTK2 */
# define G_MODULE_EXPORT /**/
#endif /* !HAVE_GTK2 */
-#if defined(DEFAULT_ICONDIR) && !defined(GLADE_DIR)
-# define GLADE_DIR DEFAULT_ICONDIR
-#endif
-#if !defined(DEFAULT_ICONDIR) && defined(GLADE_DIR)
-# define DEFAULT_ICONDIR GLADE_DIR
-#endif
-
#ifndef HAVE_XML
/* Kludge: this is defined in demo-Gtk-conf.c when HAVE_XML.
It is unused otherwise, so in that case, stub it out. */
static const char *hack_configuration_path = 0;
#endif
+#if (__GNUC__ >= 4)
+# pragma GCC diagnostic pop
+#endif
#include "version.h"
@@ -208,7 +212,7 @@ typedef struct {
conf_data *cdata; /* private data for per-hack configuration */
#ifdef HAVE_GTK2
- GladeXML *glade_ui; /* Glade UI file */
+ GtkBuilder *gtk_ui; /* UI file */
#endif /* HAVE_GTK2 */
Bool debug_p; /* whether to print diagnostics */
@@ -272,16 +276,15 @@ static void kill_preview_subproc (state *, Bool reset_p);
static void schedule_preview_check (state *);
-/* Prototypes of functions used by the Glade-generated code,
- to avoid warnings.
+/* Prototypes of functions used by the Gtk-generated code, to avoid warnings.
*/
-void exit_menu_cb (GtkMenuItem *, gpointer user_data);
-void about_menu_cb (GtkMenuItem *, gpointer user_data);
-void doc_menu_cb (GtkMenuItem *, gpointer user_data);
-void file_menu_cb (GtkMenuItem *, gpointer user_data);
-void activate_menu_cb (GtkMenuItem *, gpointer user_data);
-void lock_menu_cb (GtkMenuItem *, gpointer user_data);
-void kill_menu_cb (GtkMenuItem *, gpointer user_data);
+void exit_menu_cb (GtkAction *, gpointer user_data);
+void about_menu_cb (GtkAction *, gpointer user_data);
+void doc_menu_cb (GtkAction *, gpointer user_data);
+void file_menu_cb (GtkAction *, gpointer user_data);
+void activate_menu_cb (GtkAction *, gpointer user_data);
+void lock_menu_cb (GtkAction *, gpointer user_data);
+void kill_menu_cb (GtkAction *, gpointer user_data);
void restart_menu_cb (GtkWidget *, gpointer user_data);
void run_this_cb (GtkButton *, gpointer user_data);
void manual_cb (GtkButton *, gpointer user_data);
@@ -339,38 +342,49 @@ name_to_widget (state *s, const char *name)
if (!*name) abort();
#ifdef HAVE_GTK2
- if (!s->glade_ui)
+ if (!s->gtk_ui)
{
- /* First try to load the Glade file from the current directory;
+ /* First try to load the UI file from the current directory;
if there isn't one there, check the installed directory.
*/
-# define GLADE_FILE_NAME "xscreensaver-demo.glade2"
- const char * const files[] = { GLADE_FILE_NAME,
- GLADE_DIR "/" GLADE_FILE_NAME };
+# define UI_FILE "xscreensaver-demo.ui"
+ const char * const files[] = { UI_FILE,
+ DEFAULT_ICONDIR "/" UI_FILE };
int i;
+
+ s->gtk_ui = gtk_builder_new ();
+
for (i = 0; i < countof (files); i++)
{
struct stat st;
if (!stat (files[i], &st))
{
- s->glade_ui = glade_xml_new (files[i], NULL, NULL);
- break;
+ GError* error = NULL;
+
+ if (gtk_builder_add_from_file (s->gtk_ui, files[i], &error))
+ break;
+ else
+ {
+ g_warning ("Couldn't load builder file %s: %s",
+ files[i], error->message);
+ g_error_free (error);
+ }
}
}
- if (!s->glade_ui)
+ if (i >= countof (files))
{
fprintf (stderr,
- "%s: could not load \"" GLADE_FILE_NAME "\"\n"
- "\tfrom " GLADE_DIR "/ or current directory.\n",
+ "%s: could not load \"" UI_FILE "\"\n"
+ "\tfrom " DEFAULT_ICONDIR "/ or current directory.\n",
blurb());
exit (-1);
}
-# undef GLADE_FILE_NAME
+# undef UI_FILE
- glade_xml_signal_autoconnect (s->glade_ui);
+ gtk_builder_connect_signals (s->gtk_ui, NULL);
}
- w = glade_xml_get_widget (s->glade_ui, name);
+ w = GTK_WIDGET (gtk_builder_get_object (s->gtk_ui, name));
#else /* !HAVE_GTK2 */
@@ -382,7 +396,7 @@ name_to_widget (state *s, const char *name)
#endif /* HAVE_GTK2 */
if (w) return w;
- fprintf (stderr, "%s: no widget \"%s\" (wrong Glade file?)\n",
+ fprintf (stderr, "%s: no widget \"%s\" (wrong UI file?)\n",
blurb(), name);
abort();
}
@@ -774,12 +788,12 @@ run_hack (state *s, int list_elt, Bool report_errors_p)
/* Button callbacks
According to Eric Lassauge, this G_MODULE_EXPORT crud is needed to make
- libglade work on Cygwin; apparently all Glade callbacks need this magic
- extra declaration. I do not pretend to understand.
+ GTK work on Cygwin; apparently all GTK callbacks need this magic extra
+ declaration. I do not pretend to understand.
*/
G_MODULE_EXPORT void
-exit_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
+exit_menu_cb (GtkAction *menu_action, gpointer user_data)
{
state *s = global_state_kludge; /* I hate C so much... */
flush_dialog_changes_and_save (s);
@@ -798,7 +812,7 @@ wm_toplevel_close_cb (GtkWidget *widget, GdkEvent *event, gpointer data)
G_MODULE_EXPORT void
-about_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
+about_menu_cb (GtkAction *menu_action, gpointer user_data)
{
char msg [2048];
char *vers = strdup (screensaver_id + 4);
@@ -819,7 +833,7 @@ about_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
/* Ole Laursen <olau@hardworking.dk> says "don't use _() here because
non-ASCII characters aren't allowed in localizable string keys."
- (I don't want to just use (c) instead of because that doesn't
+ (I don't want to just use (c) instead of © because that doesn't
look as good in the plain-old default Latin1 "C" locale.)
*/
#ifdef HAVE_GTK2
@@ -851,7 +865,8 @@ about_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
GtkWidget *dialog = gtk_dialog_new ();
GtkWidget *hbox, *icon, *vbox, *label1, *label2, *hb, *ok;
- GtkWidget *parent = GTK_WIDGET (menuitem);
+ GSList *proxies = gtk_action_get_proxies (menu_action);
+ GtkWidget *parent = GTK_WIDGET (proxies->data);
while (GET_PARENT (parent))
parent = GET_PARENT (parent);
@@ -932,7 +947,7 @@ about_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
G_MODULE_EXPORT void
-doc_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
+doc_menu_cb (GtkAction *menu_action, gpointer user_data)
{
state *s = global_state_kludge; /* I hate C so much... */
saver_preferences *p = &s->prefs;
@@ -960,7 +975,7 @@ doc_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
G_MODULE_EXPORT void
-file_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
+file_menu_cb (GtkAction *menu_action, gpointer user_data)
{
state *s = global_state_kludge; /* I hate C so much... */
sensitize_menu_items (s, False);
@@ -968,7 +983,7 @@ file_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
G_MODULE_EXPORT void
-activate_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
+activate_menu_cb (GtkAction *menu_action, gpointer user_data)
{
state *s = global_state_kludge; /* I hate C so much... */
run_cmd (s, XA_ACTIVATE, 0);
@@ -976,7 +991,7 @@ activate_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
G_MODULE_EXPORT void
-lock_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
+lock_menu_cb (GtkAction *menu_action, gpointer user_data)
{
state *s = global_state_kludge; /* I hate C so much... */
run_cmd (s, XA_LOCK, 0);
@@ -984,7 +999,7 @@ lock_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
G_MODULE_EXPORT void
-kill_menu_cb (GtkMenuItem *menuitem, gpointer user_data)
+kill_menu_cb (GtkAction *menu_action, gpointer user_data)
{
state *s = global_state_kludge; /* I hate C so much... */
run_cmd (s, XA_EXIT, 0);
@@ -1191,7 +1206,7 @@ force_list_select_item (state *s, GtkWidget *list, int list_elt, Bool scroll_p)
if (!was) gtk_widget_set_sensitive (parent, True);
#ifdef HAVE_GTK2
model = gtk_tree_view_get_model (GTK_TREE_VIEW (list));
- g_assert (model);
+ if (!model) abort();
if (gtk_tree_model_iter_nth_child (model, &iter, NULL, list_elt))
{
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
@@ -1634,11 +1649,8 @@ flush_dialog_changes_and_save (state *s)
/* Map the mode menu to `saver_mode' enum values. */
{
- GtkOptionMenu *opt = GTK_OPTION_MENU (name_to_widget (s, "mode_menu"));
- GtkMenu *menu = GTK_MENU (gtk_option_menu_get_menu (opt));
- GtkWidget *selected = gtk_menu_get_active (menu);
- GList *kids = gtk_container_children (GTK_CONTAINER (menu));
- int menu_elt = g_list_index (kids, (gpointer) selected);
+ GtkComboBox *opt = GTK_COMBO_BOX (name_to_widget (s, "mode_menu"));
+ int menu_elt = gtk_combo_box_get_active (opt);
if (menu_elt < 0 || menu_elt >= countof(mode_menu_order)) abort();
p2->mode = mode_menu_order[menu_elt];
}
@@ -1744,9 +1756,10 @@ flush_popup_changes_and_save (state *s)
int list_elt = selected_list_element (s);
GtkEntry *cmd = GTK_ENTRY (name_to_widget (s, "cmd_text"));
- GtkCombo *vis = GTK_COMBO (name_to_widget (s, "visual_combo"));
+ GtkComboBoxEntry *vis = GTK_COMBO_BOX_ENTRY (name_to_widget (s, "visual_combo"));
+ GtkEntry *visent = GTK_ENTRY (gtk_bin_get_child (GTK_BIN (vis)));
- const char *visual = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (vis)->entry));
+ const char *visual = gtk_entry_get_text (visent);
const char *command = gtk_entry_get_text (cmd);
char c;
@@ -1791,7 +1804,7 @@ flush_popup_changes_and_save (state *s)
{
gdk_beep (); /* unparsable */
visual = "";
- gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (vis)->entry), _("Any"));
+ gtk_entry_set_text (visent, _("Any"));
}
changed = flush_changes (s, list_elt, -1, command, visual);
@@ -1839,21 +1852,8 @@ mode_menu_item_cb (GtkWidget *widget, gpointer user_data)
GtkWidget *list = name_to_widget (s, "list");
int list_elt;
- GList *menu_items =
- gtk_container_children (GTK_CONTAINER (GET_PARENT (widget)));
- int menu_index = 0;
- saver_mode new_mode;
-
- while (menu_items)
- {
- if (menu_items->data == widget)
- break;
- menu_index++;
- menu_items = menu_items->next;
- }
- if (!menu_items) abort();
-
- new_mode = mode_menu_order[menu_index];
+ int menu_index = gtk_combo_box_get_active (GTK_COMBO_BOX (widget));
+ saver_mode new_mode = mode_menu_order[menu_index];
/* Keep the same list element displayed as before; except if we're
switching *to* "one screensaver" mode from any other mode, set
@@ -1901,7 +1901,7 @@ list_activated_cb (GtkTreeView *list,
char *str;
int list_elt;
- g_return_if_fail (!gdk_pointer_is_grabbed ());
+ if (gdk_pointer_is_grabbed()) return;
str = gtk_tree_path_to_string (path);
list_elt = strtol (str, NULL, 10);
@@ -2868,13 +2868,13 @@ populate_prefs_page (state *s)
/* Map the `saver_mode' enum to mode menu to values. */
{
- GtkOptionMenu *opt = GTK_OPTION_MENU (name_to_widget (s, "mode_menu"));
+ GtkComboBox *opt = GTK_COMBO_BOX (name_to_widget (s, "mode_menu"));
int i;
for (i = 0; i < countof(mode_menu_order); i++)
if (mode_menu_order[i] == p->mode)
break;
- gtk_option_menu_set_history (opt, i);
+ gtk_combo_box_set_active (opt, i);
update_list_sensitivity (s);
}
@@ -3022,7 +3022,7 @@ sensitize_menu_items (state *s, Bool force_p)
static Bool running_p = False;
static time_t last_checked = 0;
time_t now = time ((time_t *) 0);
- const char *names[] = { "activate_menu", "lock_menu", "kill_menu",
+ const char *names[] = { "activate_action", "lock_action", "kill_action",
/* "demo" */ };
int i;
@@ -3034,8 +3034,8 @@ sensitize_menu_items (state *s, Bool force_p)
for (i = 0; i < countof(names); i++)
{
- GtkWidget *w = name_to_widget (s, names[i]);
- gtk_widget_set_sensitive (GTK_WIDGET(w), running_p);
+ GtkAction *a = GTK_ACTION (gtk_builder_get_object (s->gtk_ui, names[i]));
+ gtk_action_set_sensitive (a, running_p);
}
}
@@ -3107,7 +3107,7 @@ fix_text_entry_sizes (state *s)
/* Now fix the width of the combo box.
*/
w = GTK_WIDGET (name_to_widget (s, "visual_combo"));
- w = GTK_COMBO (w)->entry;
+ w = GTK_COMBO_BOX_ENTRY (w)->entry;
width = gdk_string_width (w->style->font, "PseudoColor___");
gtk_widget_set_usize (w, width, -2);
@@ -3313,7 +3313,7 @@ populate_demo_window (state *s, int list_elt)
GtkFrame *frame1 = GTK_FRAME (name_to_widget (s, "preview_frame"));
GtkFrame *frame2 = GTK_FRAME (name_to_widget (s, "opt_frame"));
GtkEntry *cmd = GTK_ENTRY (name_to_widget (s, "cmd_text"));
- GtkCombo *vis = GTK_COMBO (name_to_widget (s, "visual_combo"));
+ GtkComboBoxEntry *vis = GTK_COMBO_BOX_ENTRY (name_to_widget (s, "visual_combo"));
GtkWidget *list = GTK_WIDGET (name_to_widget (s, "list"));
if (p->mode == BLANK_ONLY)
@@ -3363,7 +3363,7 @@ populate_demo_window (state *s, int list_elt)
gtk_window_set_title (GTK_WINDOW (s->popup_widget), title);
}
- gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (vis)->entry),
+ gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (vis))),
(hack
? (hack->visual && *hack->visual
? hack->visual
@@ -5171,31 +5171,32 @@ main (int argc, char **argv)
#endif /* !HAVE_GTK2 */
/* Hook up callbacks to the items on the mode menu. */
- {
- GtkOptionMenu *opt = GTK_OPTION_MENU (name_to_widget (s, "mode_menu"));
- GtkMenu *menu = GTK_MENU (gtk_option_menu_get_menu (opt));
- GList *kids = gtk_container_children (GTK_CONTAINER (menu));
- int i;
- for (i = 0; kids; kids = kids->next, i++)
- {
- gtk_signal_connect (GTK_OBJECT (kids->data), "activate",
- GTK_SIGNAL_FUNC (mode_menu_item_cb),
- (gpointer) s);
-
- /* The "random-same" mode menu item does not appear unless
- there are multple screens.
- */
- if (s->nscreens <= 1 &&
- mode_menu_order[i] == RANDOM_HACKS_SAME)
- gtk_widget_hide (GTK_WIDGET (kids->data));
- }
+ gtk_signal_connect (GTK_OBJECT (name_to_widget (s, "mode_menu")),
+ "changed", GTK_SIGNAL_FUNC (mode_menu_item_cb),
+ (gpointer) s);
+ if (s->nscreens <= 1)
+ {
+ GtkComboBox *opt = GTK_COMBO_BOX (name_to_widget (s, "mode_menu"));
+ GtkTreeModel *list = gtk_combo_box_get_model (opt);
+ unsigned int i;
+ for (i = 0; i < countof(mode_menu_order); i++)
+ {
+ /* The "random-same" mode menu item does not appear unless
+ there are multiple screens.
+ */
+ if (mode_menu_order[i] == RANDOM_HACKS_SAME)
+ {
+ GtkTreeIter iter;
+ gtk_tree_model_iter_nth_child (list, &iter, NULL, i);
+ gtk_list_store_remove (GTK_LIST_STORE (list), &iter);
+ break;
+ }
+ }
- if (s->nscreens <= 1) /* recompute option-menu size */
- {
- gtk_widget_unrealize (GTK_WIDGET (menu));
- gtk_widget_realize (GTK_WIDGET (menu));
- }
- }
+ /* recompute option-menu size */
+ gtk_widget_unrealize (GTK_WIDGET (opt));
+ gtk_widget_realize (GTK_WIDGET (opt));
+ }
/* Handle the -prefs command-line argument. */
diff --git a/driver/lock.c b/driver/lock.c
index d36481e..8bcd2e0 100644
--- a/driver/lock.c
+++ b/driver/lock.c
@@ -1,5 +1,5 @@
/* lock.c --- handling the password dialog for locking-mode.
- * xscreensaver, Copyright (c) 1993-2018 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1993-2020 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -1928,6 +1928,15 @@ passwd_event_loop (saver_info *si)
if (si->pw_data->login_button_p)
handle_login_button (si, &event.x_event);
}
+ else if (event.x_event.xany.type == ClientMessage &&
+ event.x_event.xclient.message_type == XA_SCREENSAVER &&
+ event.x_event.xclient.format == 32)
+ {
+ const char *msg =
+ "ClientMessage ignored while authentication dialog is active";
+ clientmessage_response (si, event.x_event.xclient.window,
+ True, msg, msg);
+ }
else
XtDispatchEvent (&event.x_event);
}
diff --git a/driver/passwd-pam.c b/driver/passwd-pam.c
index d463bc2..457fed5 100644
--- a/driver/passwd-pam.c
+++ b/driver/passwd-pam.c
@@ -131,7 +131,7 @@ Bool pam_priv_init (int argc, char **argv, Bool verbose_p);
set up an "xscreensaver" PAM service. However, if we went that route,
it would have a really awful failure mode: the failure mode would be that
xscreensaver was willing to *lock* the screen, but would be unwilling to
- *unlock* the screen. (With the non-PAM password code, the analagous
+ *unlock* the screen. (With the non-PAM password code, the analogous
situation -- security not being configured properly, for example do to the
executable not being installed as setuid root -- the failure mode is much
more palettable, in that xscreensaver will refuse to *lock* the screen,
diff --git a/driver/pdf2jpeg.m b/driver/pdf2jpeg.m
index d681b4a..a9975e8 100644
--- a/driver/pdf2jpeg.m
+++ b/driver/pdf2jpeg.m
@@ -138,7 +138,7 @@ main (int argc, char** argv)
dictionaryWithObject:
[NSNumber numberWithFloat:compression]
forKey:NSImageCompressionFactor];
- NSData *jpeg_data = [bit_rep representationUsingType:NSJPEGFileType
+ NSData *jpeg_data = [bit_rep representationUsingType:NSBitmapImageFileTypeJPEG
properties:props];
[jpeg_data writeToFile:
diff --git a/driver/prefs.c b/driver/prefs.c
index b608738..8c8c19a 100644
--- a/driver/prefs.c
+++ b/driver/prefs.c
@@ -971,7 +971,9 @@ write_init_file (Display *dpy,
/* Since the .xscreensaver file is used for IPC, let's try and make
sure that the bits actually land on the disk right away. */
- sync ();
+ /* Update 2020: Apparently here in the future, this sometimes takes
+ 3+ seconds, so let's not. */
+ /* sync(); */
status = 0; /* wrote and renamed successfully! */
}
@@ -1779,5 +1781,5 @@ senesculent_p (void)
mrnths = ((((tm->tm_year + 1900) * 12) + tm->tm_mon) - /* h */
(y * 12 + m)); /* h */
/* p */
- return (mrnths >= 34); /* . */
+ return (mrnths >= 44); /* . */
}
diff --git a/driver/remote.c b/driver/remote.c
index 83254e0..218aa6a 100644
--- a/driver/remote.c
+++ b/driver/remote.c
@@ -1,4 +1,4 @@
-/* xscreensaver-command, Copyright (c) 1991-2019 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver-command, Copyright (c) 1991-2020 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -551,7 +551,7 @@ xscreensaver_command_wait_for_blank (Display *dpy, Window window,
}
else if (xgwa.map_state == IsViewable)
{
- if (verbose_p)
+ if (verbose_p > 1)
fprintf (stderr, "%s: window 0x%08x mapped.\n",
progname, (unsigned int) window);
return 0;
@@ -570,10 +570,11 @@ xscreensaver_command_wait_for_blank (Display *dpy, Window window,
fprintf (stderr, "%s: %s\n", progname, err);
return -1;
}
- else if (verbose_p && now > start+1)
+ else if (verbose_p && now > start + 3)
{
fprintf (stderr, "%s: waiting for window 0x%08x to map\n",
progname, (unsigned int) window);
+ verbose_p++;
}
}
@@ -681,11 +682,12 @@ server_xscreensaver_version (Display *dpy,
{
char *o = 0, *p = 0, *c = 0;
o = strchr ((char *) id, '(');
- if (o) p = strchr (o, '@');
+ if (o) p = strrchr (o, '@');
if (p) c = strchr (p, ')');
if (c)
{
- /* found ID of the form "1234 (user@host)". */
+ /* found ID of the form "1234 (user@host)"
+ or the weirder "1234 (user@crap@host)". */
user = o+1;
host = p+1;
*p = 0;
diff --git a/driver/screens.c b/driver/screens.c
index f319c96..5aeb55d 100644
--- a/driver/screens.c
+++ b/driver/screens.c
@@ -1,5 +1,5 @@
/* screens.c --- dealing with RANDR, Xinerama, and VidMode Viewports.
- * xscreensaver, Copyright (c) 1991-2008 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1991-2020 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -1089,6 +1089,22 @@ update_screen_layout (saver_info *si)
j++;
}
+ for (; j < count; j++)
+ {
+ saver_screen_info *ssi = &si->screens[j];
+ if (!ssi->screensaver_window)
+ continue;
+ fprintf (stderr, "%s: %d: screen now unused, disabling.\n",
+ blurb(), j);
+ /* Undo store_saver_id() so that xscreensaver-command doesn't attempt
+ to communicate with us through this window. It might make more
+ sense to destroy the window, but I'm not 100% sure that there are
+ no outstanding grabs on it that have yet been transferred.
+ */
+ XDeleteProperty (si->dpy, ssi->screensaver_window,
+ XA_SCREENSAVER_VERSION);
+ }
+
si->default_screen = &si->screens[0];
return True;
}
diff --git a/driver/stderr.c b/driver/stderr.c
index 84fa697..140f6c1 100644
--- a/driver/stderr.c
+++ b/driver/stderr.c
@@ -1,5 +1,5 @@
/* stderr.c --- capturing stdout/stderr output onto the screensaver window.
- * xscreensaver, Copyright (c) 1991-2016 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1991-2020 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -296,6 +296,7 @@ static void
stderr_callback (XtPointer closure, int *fd, XtIntervalId *id)
{
saver_info *si = (saver_info *) closure;
+ Bool shutting_down_p = (id == 0); /* Called from shutdown_stderr() */
char *s;
int left;
int size;
@@ -345,7 +346,7 @@ stderr_callback (XtPointer closure, int *fd, XtIntervalId *id)
However, if the buffer is full (meaning lots of data has been written)
then we don't reset the timer.
*/
- if (read_this_time > 0)
+ if (read_this_time > 0 && !shutting_down_p)
{
if (si->stderr_popup_timer)
XtRemoveTimeOut (si->stderr_popup_timer);
@@ -361,7 +362,7 @@ stderr_callback (XtPointer closure, int *fd, XtIntervalId *id)
screen as well as on the original value of those streams.
*/
void
-initialize_stderr (saver_info *si)
+initialize_stderr (saver_info *si, Bool inhibit_p)
{
static Boolean done = False;
int fds [2];
@@ -378,6 +379,9 @@ initialize_stderr (saver_info *si)
real_stderr = stderr;
real_stdout = stdout;
+ if (inhibit_p)
+ return;
+
stderr_dialog_p = get_boolean_resource (si->dpy, "captureStderr", "Boolean");
if (!stderr_dialog_p)
@@ -476,8 +480,9 @@ initialize_stderr (saver_info *si)
/* If the "-log file" command-line option has been specified,
open the file for append, and redirect stdout/stderr there.
This is called very early, before initialize_stderr().
+ Returns true if logging to a file.
*/
-void
+Bool
stderr_log_file (saver_info *si)
{
int stdout_fd = 1;
@@ -485,7 +490,8 @@ stderr_log_file (saver_info *si)
const char *filename = get_string_resource (si->dpy, "logFile", "LogFile");
int fd;
- if (!filename || !*filename) return;
+ if (!filename || !*filename)
+ return False;
fd = open (filename, O_WRONLY | O_APPEND | O_CREAT, 0666);
@@ -511,6 +517,7 @@ stderr_log_file (saver_info *si)
"##########################################################################\n"
"\n",
blurb(), filename, timestring(0));
+ return True;
}
@@ -527,6 +534,7 @@ shutdown_stderr (saver_info *si)
if (!real_stderr || stderr_stdout_read_fd < 0)
return;
+ /* Copy any stragglers from the stderr pipe into stderr_buffer */
stderr_callback ((XtPointer) si, &stderr_stdout_read_fd, 0);
if (stderr_tail &&
diff --git a/driver/subprocs.c b/driver/subprocs.c
index 6cb96d3..d4d26ae 100644
--- a/driver/subprocs.c
+++ b/driver/subprocs.c
@@ -1,5 +1,5 @@
/* subprocs.c --- choosing, spawning, and killing screenhacks.
- * xscreensaver, Copyright (c) 1991-2019 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1991-2020 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -62,7 +62,7 @@ extern int kill (pid_t, int); /* signal() is in sys/signal.h... */
#undef XtPointer
#define XtAppContext void*
#define XrmDatabase void*
-#define XtIntervalId void*
+#define XtIntervalId unsigned long
#define XtPointer void*
#define Widget void*
@@ -369,7 +369,8 @@ find_job (pid_t pid)
static void await_dying_children (saver_info *si);
#ifndef VMS
-static void describe_dead_child (saver_info *, pid_t, int wait_status);
+static void describe_dead_child (saver_info *, pid_t, int wait_status,
+ struct rusage);
#endif
@@ -561,9 +562,10 @@ await_dying_children (saver_info *si)
{
int wait_status = 0;
pid_t kid;
+ struct rusage rus;
errno = 0;
- kid = waitpid (-1, &wait_status, WNOHANG|WUNTRACED);
+ kid = wait4 (-1, &wait_status, WNOHANG|WUNTRACED, &rus);
if (si->prefs.debug_p)
{
@@ -600,13 +602,14 @@ await_dying_children (saver_info *si)
(kid < 0 && errno != EINTR))
break;
- describe_dead_child (si, kid, wait_status);
+ describe_dead_child (si, kid, wait_status, rus);
}
}
static void
-describe_dead_child (saver_info *si, pid_t kid, int wait_status)
+describe_dead_child (saver_info *si, pid_t kid, int wait_status,
+ struct rusage rus)
{
int i;
saver_preferences *p = &si->prefs;
@@ -678,6 +681,10 @@ describe_dead_child (saver_info *si, pid_t kid, int wait_status)
blurb(), screen_no, (unsigned long) kid, name,
signal_name (WTERMSIG(wait_status)));
*/
+# ifdef LOG_CPU_TIME
+ long u_ms = rus.ru_utime.tv_usec / 1000 + rus.ru_utime.tv_sec * 1000;
+ long s_ms = rus.ru_stime.tv_usec / 1000 + rus.ru_stime.tv_sec * 1000;
+# endif /* LOG_CPU_TIME */
write_string (STDERR_FILENO, blurb());
write_string (STDERR_FILENO, ": ");
write_long (STDERR_FILENO, (long) screen_no);
@@ -688,6 +695,20 @@ describe_dead_child (saver_info *si, pid_t kid, int wait_status)
write_string (STDERR_FILENO, ") terminated with signal ");
write_long (STDERR_FILENO, WTERMSIG(wait_status));
write_string (STDERR_FILENO, ".\n");
+# ifdef LOG_CPU_TIME
+ write_string (STDERR_FILENO, blurb());
+ write_string (STDERR_FILENO, ": ");
+ write_long (STDERR_FILENO, (long) screen_no);
+ write_string (STDERR_FILENO, ": CPU used: ");
+ write_long (STDERR_FILENO, (u_ms / 1000)); /* msec -> sec */
+ write_string (STDERR_FILENO, ".");
+ write_long (STDERR_FILENO, (u_ms % 1000) / 100);
+ write_string (STDERR_FILENO, "u, ");
+ write_long (STDERR_FILENO, (s_ms / 1000)); /* msec -> sec */
+ write_string (STDERR_FILENO, ".");
+ write_long (STDERR_FILENO, (s_ms % 1000) / 100);
+ write_string (STDERR_FILENO, "s.\n");
+# endif /* LOG_CPU_TIME */
}
if (job)
@@ -1468,9 +1489,25 @@ save_argv (int argc, char **argv)
void
restart_process (saver_info *si)
{
- fflush (stdout);
- fflush (stderr);
- shutdown_stderr (si);
+ if (si->screen_blanked_p)
+ {
+ unblank_screen (si);
+ XSync (si->dpy, False);
+ }
+
+ emergency_kill_subproc (si);
+
+# ifdef HAVE_LIBSYSTEMD
+ if (si->systemd_pid) /* Kill background xscreensaver-systemd process */
+ {
+ /* We're exiting, so there's no need to do a full kill_job() here,
+ which would waitpid(). */
+ /* kill_job (si, si->systemd_pid, SIGTERM); */
+ kill (si->systemd_pid, SIGTERM);
+ si->systemd_pid = 0;
+ }
+# endif
+
if (si->prefs.verbose_p)
{
int i;
@@ -1478,12 +1515,13 @@ restart_process (saver_info *si)
for (i = 0; saved_argv[i]; i++)
fprintf (stderr, " %s", saved_argv[i]);
fprintf (stderr, "\n");
+
+ describe_uids (si, stderr);
+ fprintf (stderr, "\n");
}
- describe_uids (si, stderr);
- fprintf (stderr, "\n");
- fflush (stdout);
- fflush (stderr);
+ shutdown_stderr (si);
+
execvp (saved_argv [0], saved_argv); /* shouldn't return */
{
char buf [512];
diff --git a/driver/timers.c b/driver/timers.c
index b096000..17781eb 100644
--- a/driver/timers.c
+++ b/driver/timers.c
@@ -729,6 +729,9 @@ flush_events (saver_info *si)
deactivated by clientmessage.
I trust that explains why this function is a big hairy mess.
+
+ See the very long comment at the top of xscreensaver.c for why the
+ MIT-SCREEN-SAVER extension is garbage and should not be used.
*/
void
sleep_until_idle (saver_info *si, Bool until_idle_p)
diff --git a/driver/windows.c b/driver/windows.c
index c0e2291..f70e7cb 100644
--- a/driver/windows.c
+++ b/driver/windows.c
@@ -63,7 +63,7 @@ typedef long PROP32;
#undef XtPointer
#define XtAppContext void*
#define XrmDatabase void*
-#define XtIntervalId void*
+#define XtIntervalId unsigned long
#define XtPointer void*
#define Widget void*
@@ -774,24 +774,37 @@ static RETSIGTYPE
restore_real_vroot_handler (int sig)
{
saver_info *si = global_si_kludge; /* I hate C so much... */
+ Bool restored_p;
signal (sig, SIG_DFL);
- if (restore_real_vroot (si))
- fprintf (real_stderr, "\n%s: %s intercepted, vroot restored.\n",
- blurb(), signal_name(sig));
+
# ifdef HAVE_LIBSYSTEMD
if (si->systemd_pid) /* Kill background xscreensaver-systemd process */
{
/* We're exiting, so there's no need to do a full kill_job() here,
- which will waitpid(). */
+ which would waitpid(). */
/* kill_job (si, si->systemd_pid, SIGTERM); */
kill (si->systemd_pid, SIGTERM);
si->systemd_pid = 0;
}
# endif
+
+ /* This is a signal handler, and the following might do X protocol,
+ which is horrible, but we're about to terminate so we don't have
+ a choice... */
+ restored_p = restore_real_vroot (si);
+
+ /* Calling fprintf from a signal handler is also risky, but we're
+ so far into the weeds on that front already... */
+ fprintf (stderr, "\n%s: %s%s\n\n", blurb(), signal_name(sig),
+ (restored_p ? ", vroot restored" : ""));
+
+ shutdown_stderr (si);
+
kill (getpid (), sig);
}
+
static void
catch_signal (saver_info *si, int sig, RETSIGTYPE (*handler) (int))
{
@@ -874,15 +887,6 @@ saver_sighup_handler (int sig)
fprintf (stderr, "%s: %s received: restarting...\n",
blurb(), signal_name(sig));
- if (si->screen_blanked_p)
- {
- int i;
- for (i = 0; i < si->nscreens; i++)
- kill_screenhack (&si->screens[i]);
- unblank_screen (si);
- XSync (si->dpy, False);
- }
-
restart_process (si); /* Does not return */
abort ();
}
@@ -898,17 +902,16 @@ saver_exit (saver_info *si, int status, const char *dump_core_reason)
Bool vrs;
if (exiting)
- exit(status);
+ exit (status);
exiting = True;
vrs = restore_real_vroot (si);
- emergency_kill_subproc (si);
- shutdown_stderr (si);
-
if (p->verbose_p && vrs)
fprintf (real_stderr, "%s: old vroot restored.\n", blurb());
+ emergency_kill_subproc (si);
+
# ifdef HAVE_LIBSYSTEMD
if (si->systemd_pid) /* Kill background xscreensaver-systemd process */
{
@@ -917,12 +920,7 @@ saver_exit (saver_info *si, int status, const char *dump_core_reason)
}
# endif
- fflush(real_stdout);
-
-#ifdef VMS /* on VMS, 1 is the "normal" exit code instead of 0. */
- if (status == 0) status = 1;
- else if (status == 1) status = -1;
-#endif
+ shutdown_stderr (si);
bugp = !!dump_core_reason;
@@ -960,6 +958,11 @@ saver_exit (saver_info *si, int status, const char *dump_core_reason)
abort();
}
+# ifdef VMS /* on VMS, 1 is the "normal" exit code instead of 0. */
+ if (status == 0) status = 1;
+ else if (status == 1) status = -1;
+# endif
+
exit (status);
}
@@ -1322,7 +1325,11 @@ initialize_screensaver_window_1 (saver_screen_info *ssi)
always exist (though the ID is constant.) So to use this
window, we'd have to reimplement the ACTIVATE ClientMessage to
tell the *server* to tell *us* to turn on, to cause the window
- to get created at the right time. Gag. */
+ to get created at the right time. Gag.
+
+ See the very long comment at the top of xscreensaver.c for why the
+ MIT-SCREEN-SAVER extension is garbage and should not be used.
+ */
XScreenSaverSetAttributes (si->dpy, root,
0, 0, width, height, 0,
current_depth, InputOutput, visual,
diff --git a/driver/xscreensaver-command.c b/driver/xscreensaver-command.c
index 4a4f0b4..e452112 100644
--- a/driver/xscreensaver-command.c
+++ b/driver/xscreensaver-command.c
@@ -1,4 +1,4 @@
-/* xscreensaver-command, Copyright (c) 1991-2019 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver-command, Copyright (c) 1991-2020 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -72,6 +72,9 @@ usage: %s -<option>\n\
with this program, xscreensaver-command. See the man pages for\n\
details. These are the arguments understood by xscreensaver-command:\n\
\n\
+ -quiet Only print output if an error occurs.\n\
+ -verbose Opposite of -quiet. Default.\n\
+\n\
-demo Ask the xscreensaver process to enter interactive demo mode.\n\
\n\
-prefs Ask the xscreensaver process to bring up the preferences\n\
@@ -166,6 +169,7 @@ main (int argc, char **argv)
char *s;
Atom XA_WATCH = 0; /* kludge: not really an atom */
char year[5];
+ Bool verbose_p = TRUE;
progname = argv[0];
s = strrchr (progname, '/');
@@ -208,6 +212,8 @@ main (int argc, char **argv)
else if (!strncmp (s, "-version", L)) cmd = &XA_SCREENSAVER_VERSION;
else if (!strncmp (s, "-time", L)) cmd = &XA_SCREENSAVER_STATUS;
else if (!strncmp (s, "-watch", L)) cmd = &XA_WATCH;
+ else if (!strncmp (s, "-quiet", L)) verbose_p = FALSE;
+ else if (!strncmp (s, "-verbose", L)) verbose_p = TRUE;
else USAGE ();
if (cmd == &XA_SELECT || cmd == &XA_DEMO)
@@ -338,7 +344,7 @@ main (int argc, char **argv)
if (isatty(0))
sleep (1);
- i = xscreensaver_command (dpy, *cmd, arg, True, NULL);
+ i = xscreensaver_command (dpy, *cmd, arg, verbose_p, NULL);
if (i < 0) exit (i);
else exit (0);
}
diff --git a/driver/xscreensaver-command.man b/driver/xscreensaver-command.man
index 5837e5d..af5aaa6 100644
--- a/driver/xscreensaver-command.man
+++ b/driver/xscreensaver-command.man
@@ -32,7 +32,9 @@ xscreensaver-command - control a running xscreensaver process
\-suspend | \
\-version | \
\-time | \
-\-watch]
+\-watch | \
+\-quiet | \
+\-verbose]
.SH DESCRIPTION
The \fIxscreensaver\-command\fP program controls a running \fIxscreensaver\fP
process by sending it client-messages.
@@ -53,6 +55,12 @@ accepts the following command-line options:
.B \-help
Prints a brief summary of command-line options.
.TP 8
+.B \-quiet
+Only print output if an error occurs.
+.TP 8
+.B \-verbose
+Opposite of \-quiet. Default.
+.TP 8
.B \-demo
This just launches the
.BR xscreensaver\-demo (1)
@@ -256,7 +264,7 @@ and related tools can always be found at https://www.jwz.org/xscreensaver/
.BR xscreensaver\-demo (1),
.BR xset (1)
.SH COPYRIGHT
-Copyright \(co 1992-2019 by Jamie Zawinski.
+Copyright \(co 1992-2020 by Jamie Zawinski.
Permission to use, copy, modify, distribute, and sell this software
and its documentation for any purpose is hereby granted without fee,
provided that the above copyright notice appear in all copies and that
diff --git a/driver/xscreensaver-demo.glade2.in b/driver/xscreensaver-demo.glade2.in
deleted file mode 100644
index ad0095d..0000000
--- a/driver/xscreensaver-demo.glade2.in
+++ /dev/null
@@ -1,3136 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
-<glade-interface>
-<requires lib="gnome"/>
-
-<widget class="GtkWindow" id="xscreensaver_demo">
- <property name="title" translatable="yes">XScreenSaver</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
-
- <child>
- <widget class="GtkVBox" id="outer_vbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">5</property>
-
- <child>
- <widget class="GtkMenuBar" id="menubar">
- <property name="visible">True</property>
- <property name="pack_direction">GTK_PACK_DIRECTION_LTR</property>
- <property name="child_pack_direction">GTK_PACK_DIRECTION_LTR</property>
-
- <child>
- <widget class="GtkMenuItem" id="file">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_File</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="file_menu_cb" last_modification_time="Sun, 06 Mar 2005 21:41:13 GMT"/>
-
- <child>
- <widget class="GtkMenu" id="file_menu">
-
- <child>
- <widget class="GtkMenuItem" id="activate_menu">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Blank Screen Now</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="activate_menu_cb"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkMenuItem" id="lock_menu">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Lock Screen Now</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="lock_menu_cb"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkMenuItem" id="kill_menu">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Kill Daemon</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="kill_menu_cb"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkMenuItem" id="restart">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Restart Daemon</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="restart_menu_cb"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkMenuItem" id="separator1">
- <property name="visible">True</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkMenuItem" id="exit_menu">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Quit</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="exit_menu_cb"/>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkMenuItem" id="help">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Help</property>
- <property name="use_underline">True</property>
-
- <child>
- <widget class="GtkMenu" id="help_menu">
-
- <child>
- <widget class="GtkMenuItem" id="about_menu">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_About...</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="about_menu_cb"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkMenuItem" id="doc_menu">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Documentation...</property>
- <property name="use_underline">True</property>
- <signal name="activate" handler="doc_menu_cb"/>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="spacer_hbox">
- <property name="border_width">8</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkNotebook" id="notebook">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="show_tabs">True</property>
- <property name="show_border">True</property>
- <property name="tab_pos">GTK_POS_TOP</property>
- <property name="scrollable">False</property>
- <property name="enable_popup">False</property>
- <signal name="switch_page" handler="switch_page_cb"/>
-
- <child>
- <widget class="GtkTable" id="demos_table">
- <property name="border_width">10</property>
- <property name="visible">True</property>
- <property name="n_rows">2</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">0</property>
- <property name="column_spacing">0</property>
-
- <child>
- <widget class="GtkTable" id="blanking_table">
- <property name="visible">True</property>
- <property name="n_rows">3</property>
- <property name="n_columns">4</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">2</property>
- <property name="column_spacing">0</property>
-
- <child>
- <widget class="GtkLabel" id="cycle_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Cycle After</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_RIGHT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">1</property>
- <property name="yalign">0.5</property>
- <property name="xpad">8</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">cycle_spinbutton</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="cycle_spinbutton" type="label-for"/>
- <atkrelation target="cycle_spinbutton" type="flows-to"/>
- </accessibility>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEventBox" id="lock_button_eventbox">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Whether a password should be required to un-blank the screen.</property>
- <property name="visible_window">True</property>
- <property name="above_child">False</property>
-
- <child>
- <widget class="GtkCheckButton" id="lock_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Lock Screen After </property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <accessibility>
- <atkproperty name="AtkObject::accessible_name" translatable="yes">Lock Screen</atkproperty>
- <atkrelation target="lock_spinbutton" type="controller-for"/>
- <atkrelation target="lock_spinbutton" type="label-for"/>
- <atkrelation target="lock_spinbutton" type="flows-to"/>
- </accessibility>
- <signal name="toggled" handler="pref_changed_cb"/>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkSpinButton" id="timeout_spinbutton">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">How long before the screen saver activates.</property>
- <property name="can_focus">True</property>
- <property name="climb_rate">15</property>
- <property name="digits">0</property>
- <property name="numeric">True</property>
- <property name="update_policy">GTK_UPDATE_ALWAYS</property>
- <property name="snap_to_ticks">True</property>
- <property name="wrap">False</property>
- <property name="adjustment">1 1 720 1 15 0</property>
- <accessibility>
- <atkrelation target="timeout_label" type="labelled-by"/>
- <atkrelation target="timeout_mlabel" type="labelled-by"/>
- <atkrelation target="timeout_label" type="flows-from"/>
- <atkrelation target="timeout_mlabel" type="flows-to"/>
- </accessibility>
- <signal name="activate" handler="pref_changed_cb"/>
- <signal name="focus_out_event" handler="pref_changed_event_cb"/>
- <signal name="value_changed" handler="pref_changed_cb"/>
- </widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkSpinButton" id="lock_spinbutton">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">How long after the screen blanks until a password will be required.</property>
- <property name="can_focus">True</property>
- <property name="climb_rate">15</property>
- <property name="digits">0</property>
- <property name="numeric">True</property>
- <property name="update_policy">GTK_UPDATE_ALWAYS</property>
- <property name="snap_to_ticks">True</property>
- <property name="wrap">False</property>
- <property name="adjustment">0 0 720 1 15 0</property>
- <accessibility>
- <atkproperty name="AtkObject::accessible_name" translatable="yes">Lock Screen After</atkproperty>
- <atkrelation target="lock_button" type="controlled-by"/>
- <atkrelation target="lock_button" type="labelled-by"/>
- <atkrelation target="lock_mlabel" type="labelled-by"/>
- <atkrelation target="lock_button" type="flows-from"/>
- <atkrelation target="lock_mlabel" type="flows-to"/>
- </accessibility>
- <signal name="activate" handler="pref_changed_cb"/>
- <signal name="focus_out_event" handler="pref_changed_event_cb"/>
- <signal name="value_changed" handler="pref_changed_cb"/>
- </widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="y_padding">10</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkSpinButton" id="cycle_spinbutton">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">How long each display mode should run before choosing a new one (in Random mode.)</property>
- <property name="can_focus">True</property>
- <property name="climb_rate">15</property>
- <property name="digits">0</property>
- <property name="numeric">True</property>
- <property name="update_policy">GTK_UPDATE_ALWAYS</property>
- <property name="snap_to_ticks">True</property>
- <property name="wrap">False</property>
- <property name="adjustment">0 0 720 1 15 0</property>
- <accessibility>
- <atkrelation target="cycle_label" type="labelled-by"/>
- <atkrelation target="cycle_mlabel" type="labelled-by"/>
- <atkrelation target="cycle_label" type="flows-from"/>
- <atkrelation target="cycle_mlabel" type="flows-to"/>
- </accessibility>
- <signal name="activate" handler="pref_changed_cb"/>
- <signal name="focus_out_event" handler="pref_changed_event_cb"/>
- <signal name="value_changed" handler="pref_changed_cb"/>
- </widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="lock_mlabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">minutes</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">8</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="lock_spinbutton" type="label-for"/>
- <atkrelation target="lock_spinbutton" type="flows-to"/>
- </accessibility>
- </widget>
- <packing>
- <property name="left_attach">3</property>
- <property name="right_attach">4</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="cycle_mlabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">minutes</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">8</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="cycle_spinbutton" type="label-for"/>
- <atkrelation target="cycle_spinbutton" type="flows-from"/>
- </accessibility>
- </widget>
- <packing>
- <property name="left_attach">3</property>
- <property name="right_attach">4</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="timeout_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Blank After</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_RIGHT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">1</property>
- <property name="yalign">0.5</property>
- <property name="xpad">8</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">timeout_spinbutton</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="timeout_spinbutton" type="label-for"/>
- <atkrelation target="timeout_spinbutton" type="flows-to"/>
- </accessibility>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="timeout_mlabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">minutes</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">8</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="timeout_spinbutton" type="label-for"/>
- <atkrelation target="timeout_spinbutton" type="flows-from"/>
- </accessibility>
- </widget>
- <packing>
- <property name="left_attach">3</property>
- <property name="right_attach">4</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHButtonBox" id="demo_manual_hbbox">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_SPREAD</property>
- <property name="spacing">30</property>
-
- <child>
- <widget class="GtkButton" id="demo">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Demo the selected screen saver in full-screen mode (click the mouse to return.)</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Preview</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="run_this_cb"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="settings">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Customization and explanation of the selected screen saver.</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Settings...</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="settings_cb"/>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="list_vbox">
- <property name="border_width">10</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkHBox" id="mode_hbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkLabel" id="mode_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Mode:</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">mode_menu</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="mode_menu_popup" type="label-for"/>
- </accessibility>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkOptionMenu" id="mode_menu">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="history">0</property>
- <accessibility>
- <atkrelation target="mode_label" type="labelled-by"/>
- </accessibility>
-
- <child internal-child="menu">
- <widget class="GtkMenu" id="mode_menu_popup">
- <property name="visible">True</property>
-
- <child>
- <widget class="GtkMenuItem" id="disable_menuitem">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Never blank the screen or power down the monitor.</property>
- <property name="label" translatable="yes">_Disable Screen Saver</property>
- <property name="use_underline">True</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkMenuItem" id="blank_menuitem">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">When idle or locked, blacken the screen only.</property>
- <property name="label" translatable="yes">_Blank Screen Only</property>
- <property name="use_underline">True</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkMenuItem" id="one_menuitem">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">When idle or locked, run the display mode selected below.</property>
- <property name="label" translatable="yes">_Only One Screen Saver</property>
- <property name="use_underline">True</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkMenuItem" id="random_menuitem">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">When idle or locked, choose a random display mode from among the checked items in the list below.</property>
- <property name="label" translatable="yes">_Random Screen Saver</property>
- <property name="use_underline">True</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkMenuItem" id="random_same_menuitem">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">When idle or locked, choose a random display mode from among the checked items in the list below. Run that same mode on each monitor.</property>
- <property name="label" translatable="yes">_Same Random Savers</property>
- <property name="use_underline">True</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">4</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">10</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkScrolledWindow" id="scroller">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
- <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
- <child>
- <widget class="GtkTreeView" id="list">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_visible">False</property>
- <property name="rules_hint">True</property>
- <property name="reorderable">False</property>
- <property name="enable_search">True</property>
- <property name="fixed_height_mode">False</property>
- <property name="hover_selection">False</property>
- <property name="hover_expand">False</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="centering_hbox">
- <property name="visible">True</property>
- <property name="homogeneous">True</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkHBox" id="next_prev_hbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkButton" id="next">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Run the next screen saver in the list in full-screen mode (click the mouse to return.)</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="run_next_cb"/>
-
- <child>
- <widget class="GtkArrow" id="arrow1">
- <property name="visible">True</property>
- <property name="arrow_type">GTK_ARROW_DOWN</property>
- <property name="shadow_type">GTK_SHADOW_OUT</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="prev">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Run the previous screen saver in the list in full-screen mode (click the mouse to return.)</property>
- <property name="can_focus">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="run_prev_cb"/>
-
- <child>
- <widget class="GtkArrow" id="arrow2">
- <property name="visible">True</property>
- <property name="arrow_type">GTK_ARROW_UP</property>
- <property name="shadow_type">GTK_SHADOW_OUT</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="preview_frame">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
- <accessibility>
- <atkrelation target="label1" type="labelled-by"/>
- </accessibility>
-
- <child>
- <widget class="GtkNotebook" id="preview_notebook">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="show_tabs">True</property>
- <property name="show_border">False</property>
- <property name="tab_pos">GTK_POS_BOTTOM</property>
- <property name="scrollable">False</property>
- <property name="enable_popup">False</property>
-
- <child>
- <widget class="GtkAspectFrame" id="preview_aspectframe">
- <property name="border_width">8</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="ratio">1.33000004292</property>
- <property name="obey_child">False</property>
-
- <child>
- <widget class="GtkDrawingArea" id="preview">
- <property name="visible">True</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="preview_tab">
- <property name="visible">True</property>
- <property name="label" translatable="yes">preview</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="no_preview_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">No Preview
-Available</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="no_preview_tab">
- <property name="visible">True</property>
- <property name="label" translatable="yes">no preview</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="not_installed_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Not
-Installed</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="not_installed_tab">
- <property name="visible">True</property>
- <property name="label" translatable="yes">not installed</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="nothing_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Very few (or no) screen savers appear to be available.
-
-This probably means that the &quot;xscreensaver-extras&quot; and
-&quot;xscreensaver-gl-extras&quot; packages are not installed.</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="nothing_tab">
- <property name="visible">True</property>
- <property name="label" translatable="yes">nothing</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Description</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="preview_frame" type="label-for"/>
- </accessibility>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_padding">6</property>
- <property name="x_options">expand|shrink|fill</property>
- <property name="y_options">expand|shrink|fill</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="demo_tab">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Display Modes</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">notebook</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="options_table">
- <property name="visible">True</property>
- <property name="n_rows">2</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">True</property>
- <property name="row_spacing">0</property>
- <property name="column_spacing">0</property>
-
- <child>
- <widget class="GtkFrame" id="grab_frame">
- <property name="border_width">10</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
- <accessibility>
- <atkrelation target="label2" type="labelled-by"/>
- </accessibility>
-
- <child>
- <widget class="GtkHBox" id="grab_hbox">
- <property name="border_width">8</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">8</property>
-
- <child>
- <widget class="GtkImage" id="image2">
- <property name="visible">True</property>
- <property name="pixbuf">screensaver-snap.png</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="xpad">4</property>
- <property name="ypad">8</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="grab_vbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkCheckButton" id="grab_desk_button">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Whether the image-manipulating modes should be allowed to operate on an image of your desktop.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Grab Desktop _Images</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="pref_changed_cb"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="grab_video_button">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Whether the image-manipulating modes should operate on images captured from the system's video input (if there is one.)</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Grab _Video Frames</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="pref_changed_cb"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="grab_image_button">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Whether the image-manipulating modes should load image files.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Choose _Random Image:</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <accessibility>
- <atkrelation target="image_text" type="controller-for"/>
- <atkrelation target="image_browse_button" type="controller-for"/>
- </accessibility>
- <signal name="toggled" handler="pref_changed_cb"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="image_hbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkLabel" id="grab_dummy">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">8</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="image_text">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">The local directory, RSS feed or Atom feed from which images will be randomly chosen.</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- <accessibility>
- <atkrelation target="grab_image_button" type="labelled-by"/>
- <atkrelation target="grab_image_button" type="controlled-by"/>
- </accessibility>
- <signal name="activate" handler="pref_changed_cb"/>
- <signal name="focus_out_event" handler="pref_changed_event_cb"/>
- </widget>
- <packing>
- <property name="padding">2</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="image_browse_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Browse</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="browse_image_dir_cb"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label8">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Local directory, or RSS feed URL.</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">20</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label2">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Image Manipulation</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="grab_frame" type="label-for"/>
- </accessibility>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="diag_frame">
- <property name="border_width">10</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
- <accessibility>
- <atkrelation target="label3" type="labelled-by"/>
- </accessibility>
-
- <child>
- <widget class="GtkHBox" id="diag_hbox">
- <property name="border_width">8</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">8</property>
-
- <child>
- <widget class="GtkImage" id="diag_logo">
- <property name="visible">True</property>
- <property name="pixbuf">screensaver-diagnostic.png</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="text_table">
- <property name="visible">True</property>
- <property name="n_rows">5</property>
- <property name="n_columns">3</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">2</property>
- <property name="column_spacing">2</property>
-
- <child>
- <widget class="GtkRadioButton" id="text_radio">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Text-displaying modes will display the text typed here.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Text</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <accessibility>
- <atkrelation target="text_entry" type="controller-for"/>
- <atkrelation target="text_entry" type="label-for"/>
- </accessibility>
- <signal name="toggled" handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:31:44 GMT"/>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="text_file_radio">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Text-displaying modes will display the contents of this file.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Text _file</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">text_radio</property>
- <accessibility>
- <atkrelation target="text_file_entry" type="label-for"/>
- <atkrelation target="text_file_entry" type="controller-for"/>
- </accessibility>
- <signal name="toggled" handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:31:55 GMT"/>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="text_program_radio">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Text-displaying modes will display the output of this program.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Program</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">text_radio</property>
- <accessibility>
- <atkrelation target="text_program_entry" type="label-for"/>
- <atkrelation target="text_program_entry" type="controller-for"/>
- <atkrelation target="text_program_browse" type="controller-for"/>
- </accessibility>
- <signal name="toggled" handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:32:07 GMT"/>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="text_url_radio">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Text-displaying modes will display the contents of this URL (HTML or RSS).</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_URL</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">text_radio</property>
- <accessibility>
- <atkrelation target="text_url_entry" type="label-for"/>
- <atkrelation target="text_url_entry" type="controller-for"/>
- </accessibility>
- <signal name="toggled" handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:32:17 GMT"/>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkRadioButton" id="text_host_radio">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Text-displaying modes will display the local host name, date, and time.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Host Name and Time</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">True</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <property name="group">text_radio</property>
- <signal name="toggled" handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:31:32 GMT"/>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">3</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="text_url_entry">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Text-displaying modes will display the contents of this URL (HTML or RSS).</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- <accessibility>
- <atkrelation target="text_url_radio" type="controlled-by"/>
- </accessibility>
- <signal name="activate" handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:33:10 GMT"/>
- <signal name="focus_out_event" handler="pref_changed_event_cb" last_modification_time="Sun, 20 Mar 2005 21:34:26 GMT"/>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">3</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="text_file_browse">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Browse</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <accessibility>
- <atkrelation target="text_file_radio" type="controlled-by"/>
- </accessibility>
- <signal name="clicked" handler="browse_text_file_cb" last_modification_time="Sun, 20 Mar 2005 01:24:38 GMT"/>
- </widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="text_entry">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Text-displaying modes will display the text typed here.</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- <accessibility>
- <atkrelation target="text_program_radio" type="labelled-by"/>
- <atkrelation target="text_program_radio" type="controlled-by"/>
- </accessibility>
- <signal name="activate" handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:32:42 GMT"/>
- <signal name="focus_out_event" handler="pref_changed_event_cb" last_modification_time="Sun, 20 Mar 2005 21:33:43 GMT"/>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">3</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="text_program_entry">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Text-displaying modes will display the output of this program.</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- <accessibility>
- <atkrelation target="text_program_radio" type="labelled-by"/>
- <atkrelation target="text_program_radio" type="controlled-by"/>
- </accessibility>
- <signal name="activate" handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:33:02 GMT"/>
- <signal name="focus_out_event" handler="pref_changed_event_cb" last_modification_time="Sun, 20 Mar 2005 21:34:15 GMT"/>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="text_program_browse">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Browse</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <accessibility>
- <atkrelation target="text_program_radio" type="controller-for"/>
- </accessibility>
- <signal name="clicked" handler="browse_text_program_cb" last_modification_time="Sun, 20 Mar 2005 01:24:51 GMT"/>
- </widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="text_file_entry">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Text-displaying modes will display the contents of this file.</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- <accessibility>
- <atkrelation target="text_file_radio" type="labelled-by"/>
- <atkrelation target="text_file_radio" type="controlled-by"/>
- </accessibility>
- <signal name="activate" handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:32:53 GMT"/>
- <signal name="focus_out_event" handler="pref_changed_event_cb" last_modification_time="Sun, 20 Mar 2005 21:33:55 GMT"/>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Text Manipulation</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="diag_frame" type="label-for"/>
- </accessibility>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="dpms_frame">
- <property name="border_width">10</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
-
- <child>
- <widget class="GtkHBox" id="dpms_hbox">
- <property name="border_width">8</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">8</property>
-
- <child>
- <widget class="GtkImage" id="dpms_logo">
- <property name="visible">True</property>
- <property name="pixbuf">screensaver-power.png</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox6">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkCheckButton" id="dpms_button">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Whether the monitor should be powered down after a while.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Power Management Enabled</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">True</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <accessibility>
- <atkrelation target="dpms_suspend_spinbutton" type="controller-for"/>
- <atkrelation target="dpms_standby_spinbutton" type="controller-for"/>
- <atkrelation target="dpms_off_spinbutton" type="controller-for"/>
- </accessibility>
- <signal name="toggled" handler="pref_changed_cb"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="dpms_table">
- <property name="visible">True</property>
- <property name="n_rows">3</property>
- <property name="n_columns">3</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">2</property>
- <property name="column_spacing">4</property>
-
- <child>
- <widget class="GtkLabel" id="dpms_standby_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Stand_by After</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">1</property>
- <property name="yalign">0.5</property>
- <property name="xpad">10</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">dpms_standby_spinbutton</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="dpms_standby_spinbutton" type="label-for"/>
- <atkrelation target="dpms_standby_spinbutton" type="flows-to"/>
- </accessibility>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="dpms_suspend_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Sus_pend After</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">1</property>
- <property name="yalign">0.5</property>
- <property name="xpad">10</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">dpms_suspend_spinbutton</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="dpms_suspend_spinbutton" type="label-for"/>
- <atkrelation target="dpms_suspend_spinbutton" type="flows-to"/>
- </accessibility>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="dpms_off_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Off After</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">1</property>
- <property name="yalign">0.5</property>
- <property name="xpad">10</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">dpms_off_spinbutton</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="dpms_off_spinbutton" type="label-for"/>
- <atkrelation target="dpms_off_spinbutton" type="flows-to"/>
- </accessibility>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="dpms_standby_mlabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">minutes</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="dpms_standby_spinbutton" type="label-for"/>
- <atkrelation target="dpms_standby_spinbutton" type="flows-from"/>
- </accessibility>
- </widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="dpms_suspend_mlabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">minutes</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="dpms_suspend_spinbutton" type="label-for"/>
- <atkrelation target="dpms_suspend_spinbutton" type="flows-from"/>
- </accessibility>
- </widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="dpms_off_mlabel">
- <property name="visible">True</property>
- <property name="label" translatable="yes">minutes</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="dpms_off_spinbutton" type="label-for"/>
- <atkrelation target="dpms_off_spinbutton" type="flows-from"/>
- </accessibility>
- </widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkSpinButton" id="dpms_off_spinbutton">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">How long until the monitor powers down.</property>
- <property name="can_focus">True</property>
- <property name="climb_rate">15</property>
- <property name="digits">0</property>
- <property name="numeric">True</property>
- <property name="update_policy">GTK_UPDATE_ALWAYS</property>
- <property name="snap_to_ticks">True</property>
- <property name="wrap">False</property>
- <property name="adjustment">0 0 1440 1 15 0</property>
- <accessibility>
- <atkrelation target="dpms_button" type="controlled-by"/>
- <atkrelation target="dpms_off_label" type="labelled-by"/>
- <atkrelation target="dpms_off_mlabel" type="labelled-by"/>
- <atkrelation target="dpms_off_label" type="flows-from"/>
- <atkrelation target="dpms_off_mlabel" type="flows-to"/>
- </accessibility>
- <signal name="activate" handler="pref_changed_cb"/>
- <signal name="focus_out_event" handler="pref_changed_event_cb"/>
- <signal name="value_changed" handler="pref_changed_cb"/>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkSpinButton" id="dpms_suspend_spinbutton">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">How long until the monitor goes into power-saving mode.</property>
- <property name="can_focus">True</property>
- <property name="climb_rate">15</property>
- <property name="digits">0</property>
- <property name="numeric">True</property>
- <property name="update_policy">GTK_UPDATE_ALWAYS</property>
- <property name="snap_to_ticks">True</property>
- <property name="wrap">False</property>
- <property name="adjustment">0 0 1440 1 15 0</property>
- <accessibility>
- <atkrelation target="dpms_button" type="controlled-by"/>
- <atkrelation target="dpms_suspend_label" type="labelled-by"/>
- <atkrelation target="dpms_suspend_mlabel" type="labelled-by"/>
- <atkrelation target="dpms_suspend_label" type="flows-from"/>
- <atkrelation target="dpms_suspend_mlabel" type="flows-to"/>
- </accessibility>
- <signal name="activate" handler="pref_changed_cb"/>
- <signal name="focus_out_event" handler="pref_changed_event_cb"/>
- <signal name="value_changed" handler="pref_changed_cb"/>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkSpinButton" id="dpms_standby_spinbutton">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">How long until the monitor goes completely black.</property>
- <property name="can_focus">True</property>
- <property name="climb_rate">15</property>
- <property name="digits">0</property>
- <property name="numeric">True</property>
- <property name="update_policy">GTK_UPDATE_ALWAYS</property>
- <property name="snap_to_ticks">True</property>
- <property name="wrap">False</property>
- <property name="adjustment">0 0 1440 1 15 0</property>
- <accessibility>
- <atkrelation target="dpms_button" type="controlled-by"/>
- <atkrelation target="dpms_standby_label" type="labelled-by"/>
- <atkrelation target="dpms_standby_mlabel" type="labelled-by"/>
- <atkrelation target="dpms_standby_label" type="flows-from"/>
- <atkrelation target="dpms_standby_mlabel" type="flows-to"/>
- </accessibility>
- <signal name="activate" handler="pref_changed_cb"/>
- <signal name="focus_out_event" handler="pref_changed_event_cb"/>
- <signal name="value_changed" handler="pref_changed_cb"/>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="dpms_quickoff_button">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Whether the monitor should be powered off immediately in "Blank Screen Only" mode, regardless of the above power-management timeouts.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Quick Power-off in Blank Only Mode</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="pref_changed_cb"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Display Power Management</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="dpms_frame" type="label-for"/>
- </accessibility>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="cmap_frame">
- <property name="border_width">10</property>
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0.5</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
- <accessibility>
- <atkrelation target="label5" type="labelled-by"/>
- </accessibility>
-
- <child>
- <widget class="GtkHBox" id="cmap_hbox">
- <property name="border_width">8</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">8</property>
-
- <child>
- <widget class="GtkImage" id="image5">
- <property name="visible">True</property>
- <property name="pixbuf">screensaver-colorselector.png</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox7">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkCheckButton" id="fade_button">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Whether the screen should slowly fade to black when the screen saver activates.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Fade to Black when _Blanking</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <accessibility>
- <atkrelation target="fade_spinbutton" type="controller-for"/>
- </accessibility>
- <signal name="toggled" handler="pref_changed_cb"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="unfade_button">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Whether the screen should slowly fade in from black when the screen saver deactivates.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Fade from Black When _Unblanking</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <accessibility>
- <atkrelation target="fade_spinbutton" type="controller-for"/>
- </accessibility>
- <signal name="toggled" handler="pref_changed_cb"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="fade_hbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkLabel" id="fade_dummy">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">3</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="fade_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">F_ade Duration</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">fade_spinbutton</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="fade_spinbutton" type="label-for"/>
- <atkrelation target="fade_spinbutton" type="flows-to"/>
- </accessibility>
- </widget>
- <packing>
- <property name="padding">14</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkSpinButton" id="fade_spinbutton">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">How long it should take for the screen to fade in and out.</property>
- <property name="can_focus">True</property>
- <property name="climb_rate">1</property>
- <property name="digits">0</property>
- <property name="numeric">True</property>
- <property name="update_policy">GTK_UPDATE_ALWAYS</property>
- <property name="snap_to_ticks">True</property>
- <property name="wrap">False</property>
- <property name="adjustment">0 0 10 1 1 0</property>
- <accessibility>
- <atkrelation target="unfade_button" type="controlled-by"/>
- <atkrelation target="fade_button" type="controlled-by"/>
- <atkrelation target="fade_label" type="labelled-by"/>
- <atkrelation target="fade_sec_label" type="labelled-by"/>
- <atkrelation target="fade_label" type="flows-from"/>
- <atkrelation target="fade_sec_label" type="flows-to"/>
- </accessibility>
- <signal name="activate" handler="pref_changed_cb"/>
- <signal name="focus_out_event" handler="pref_changed_event_cb"/>
- <signal name="value_changed" handler="pref_changed_cb"/>
- </widget>
- <packing>
- <property name="padding">4</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="fade_sec_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">seconds</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="fade_spinbutton" type="label-for"/>
- <atkrelation target="fade_spinbutton" type="flows-from"/>
- </accessibility>
- </widget>
- <packing>
- <property name="padding">2</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHSeparator" id="cmap_hr">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="padding">8</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCheckButton" id="install_button">
- <property name="visible">True</property>
- <property name="tooltip" translatable="yes">Whether to install a private colormap when running in 8-bit mode on the default Visual.</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Install _Colormap</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="pref_changed_cb"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label5">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Fading and Colormaps</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="cmap_frame" type="label-for"/>
- </accessibility>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="options_tab">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Advanced</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">notebook</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHButtonBox" id="hbuttonbox2">
- <property name="border_width">5</property>
- <property name="layout_style">GTK_BUTTONBOX_EDGE</property>
- <property name="spacing">10</property>
-
- <child>
- <widget class="GtkButton" id="helpbutton">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-help</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="doc_menu_cb"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="closebutton">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-close</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="exit_menu_cb"/>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkDialog" id="xscreensaver_settings_dialog">
- <property name="title" translatable="yes">dialog1</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- @COMMENT_DEMO_GLADE2_GTK_2_22_HEAD@<property name="has_separator">False</property>@COMMENT_DEMO_GLADE2_GTK_2_22_TAIL@
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog_vbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog_action_area">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="adv_button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Advanced &gt;&gt;</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">0</property>
- <signal name="clicked" handler="settings_adv_cb"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="std_button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Standard &lt;&lt;</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">0</property>
- <signal name="clicked" handler="settings_std_cb"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="reset_button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Reset to Defaults</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">0</property>
- <signal name="clicked" handler="settings_reset_cb"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="cancel_button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- <signal name="clicked" handler="settings_cancel_cb"/>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="ok_button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-5</property>
- <signal name="clicked" handler="settings_ok_cb"/>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkVBox" id="vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkFrame" id="opt_frame">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
- <accessibility>
- <atkrelation target="label6" type="labelled-by"/>
- </accessibility>
-
- <child>
- <widget class="GtkNotebook" id="opt_notebook">
- <property name="border_width">12</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="show_tabs">True</property>
- <property name="show_border">False</property>
- <property name="tab_pos">GTK_POS_BOTTOM</property>
- <property name="scrollable">False</property>
- <property name="enable_popup">False</property>
- <signal name="switch_page" handler="settings_switch_page_cb"/>
-
- <child>
- <widget class="GtkVBox" id="settings_vbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">True</property>
- <property name="tab_fill">True</property>
- <property name="tab_pack">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="std_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Standard</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkTable" id="adv_table">
- <property name="visible">True</property>
- <property name="n_rows">4</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">0</property>
- <property name="column_spacing">0</property>
-
- <child>
- <widget class="GtkImage" id="cmd_logo">
- <property name="visible">True</property>
- <property name="pixbuf">screensaver-cmndln.png</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">4</property>
- <property name="ypad">8</property>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="cmd_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Command Line:</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">cmd_text</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="cmd_text" type="label-for"/>
- </accessibility>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">fill</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="cmd_text">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- <accessibility>
- <atkrelation target="cmd_label" type="labelled-by"/>
- </accessibility>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="y_options"></property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="visual_hbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkLabel" id="visual">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Visual:</property>
- <property name="use_underline">True</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">1</property>
- <property name="yalign">0.5</property>
- <property name="xpad">3</property>
- <property name="ypad">0</property>
- <property name="mnemonic_widget">visual_entry</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="visual_combo" type="label-for"/>
- </accessibility>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkCombo" id="visual_combo">
- <property name="visible">True</property>
- <property name="value_in_list">False</property>
- <property name="allow_empty">True</property>
- <property name="case_sensitive">False</property>
- <property name="enable_arrow_keys">True</property>
- <property name="enable_arrows_always">False</property>
- <accessibility>
- <atkrelation target="visual" type="labelled-by"/>
- </accessibility>
-
- <child internal-child="entry">
- <widget class="GtkEntry" id="visual_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">*</property>
- <property name="activates_default">False</property>
- </widget>
- </child>
-
- <child internal-child="list">
- <widget class="GtkList" id="combo-list1">
- <property name="visible">True</property>
- <property name="selection_mode">GTK_SELECTION_BROWSE</property>
-
- <child>
- <widget class="GtkListItem" id="listitem25">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Any</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkListItem" id="listitem26">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Best</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkListItem" id="listitem27">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Default</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkListItem" id="listitem28">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Default-N</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkListItem" id="listitem29">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">GL</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkListItem" id="listitem30">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">TrueColor</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkListItem" id="listitem31">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">PseudoColor</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkListItem" id="listitem32">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">StaticGray</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkListItem" id="listitem33">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">GrayScale</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkListItem" id="listitem34">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">DirectColor</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkListItem" id="listitem35">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Color</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkListItem" id="listitem36">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Gray</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkListItem" id="listitem37">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Mono</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">fill</property>
- <property name="y_options">fill</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- <property name="tab_fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="adv_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Advanced</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label6">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Settings</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <accessibility>
- <atkrelation target="opt_frame" type="label-for"/>
- </accessibility>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkFrame" id="doc_frame">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
-
- <child>
- <widget class="GtkVBox" id="doc_vbox">
- <property name="border_width">5</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">5</property>
-
- <child>
- <widget class="GtkLabel" id="doc">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">True</property>
- <property name="selectable">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkButton" id="manual">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Documentation...</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <signal name="clicked" handler="manual_cb"/>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label7">
- <property name="visible">True</property>
- <property name="label" translatable="yes"></property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-</glade-interface>
diff --git a/driver/xscreensaver-demo.glade2p b/driver/xscreensaver-demo.glade2p
deleted file mode 100644
index 3dfe894..0000000
--- a/driver/xscreensaver-demo.glade2p
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-project SYSTEM "http://glade.gnome.org/glade-project-2.0.dtd">
-
-<glade-project>
- <name>XScreenSaver Demo</name>
- <program_name>xscreensaver-demo</program_name>
- <source_directory></source_directory>
- <pixmaps_directory>../utils/images</pixmaps_directory>
- <use_widget_names>TRUE</use_widget_names>
- <output_main_file>FALSE</output_main_file>
- <output_build_files>FALSE</output_build_files>
- <backup_source_files>FALSE</backup_source_files>
- <main_source_file>demo-Gtk2-widgets.c</main_source_file>
- <main_header_file>demo-Gtk2-widgets.h</main_header_file>
- <handler_source_file>demo-Gtk2-stubs.c</handler_source_file>
- <handler_header_file>demo-Gtk2-stubs.h</handler_header_file>
- <support_source_file>demo-Gtk2-support.c</support_source_file>
- <support_header_file>demo-Gtk2-support.h</support_header_file>
-</glade-project>
diff --git a/driver/xscreensaver-demo.ui b/driver/xscreensaver-demo.ui
new file mode 100644
index 0000000..f40f1c8
--- /dev/null
+++ b/driver/xscreensaver-demo.ui
@@ -0,0 +1,2912 @@
+<?xml version="1.0"?>
+<!--*- mode: xml -*-->
+<interface>
+ <object class="GtkAdjustment" id="adjustment1">
+ <property name="upper">720</property>
+ <property name="lower">1</property>
+ <property name="page_increment">15</property>
+ <property name="step_increment">1</property>
+ <property name="page_size">0</property>
+ <property name="value">1</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment2">
+ <property name="upper">720</property>
+ <property name="lower">0</property>
+ <property name="page_increment">15</property>
+ <property name="step_increment">1</property>
+ <property name="page_size">0</property>
+ <property name="value">0</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment3">
+ <property name="upper">720</property>
+ <property name="lower">0</property>
+ <property name="page_increment">15</property>
+ <property name="step_increment">1</property>
+ <property name="page_size">0</property>
+ <property name="value">0</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment4">
+ <property name="upper">1440</property>
+ <property name="lower">0</property>
+ <property name="page_increment">15</property>
+ <property name="step_increment">1</property>
+ <property name="page_size">0</property>
+ <property name="value">0</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment5">
+ <property name="upper">1440</property>
+ <property name="lower">0</property>
+ <property name="page_increment">15</property>
+ <property name="step_increment">1</property>
+ <property name="page_size">0</property>
+ <property name="value">0</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment6">
+ <property name="upper">1440</property>
+ <property name="lower">0</property>
+ <property name="page_increment">15</property>
+ <property name="step_increment">1</property>
+ <property name="page_size">0</property>
+ <property name="value">0</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment7">
+ <property name="upper">10</property>
+ <property name="lower">0</property>
+ <property name="page_increment">1</property>
+ <property name="step_increment">1</property>
+ <property name="page_size">0</property>
+ <property name="value">0</property>
+ </object>
+ <object class="GtkListStore" id="mode_menu_model">
+ <columns>
+ <column type="gchararray"/>
+ </columns>
+ <data>
+ <row>
+ <col id="0" translatable="yes">Disable Screen Saver</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">Blank Screen Only</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">Only One Screen Saver</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">Random Screen Saver</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">Same Random Savers</col>
+ </row>
+ </data>
+ </object>
+ <object class="GtkListStore" id="visual_combo_model">
+ <columns>
+ <column type="gchararray"/>
+ </columns>
+ <data>
+ <row>
+ <col id="0" translatable="yes">Any</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">Best</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">Default</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">Default-N</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">GL</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">TrueColor</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">PseudoColor</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">StaticGray</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">GrayScale</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">DirectColor</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">Color</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">Gray</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">Mono</col>
+ </row>
+ </data>
+ </object>
+ <object class="GtkUIManager" id="uimanager1">
+ <child>
+ <object class="GtkActionGroup" id="actiongroup1">
+ <child>
+ <object class="GtkAction" id="file">
+ <property name="name">file</property>
+ <property name="label" translatable="yes">_File</property>
+ <signal handler="file_menu_cb" last_modification_time="Sun, 06 Mar 2005 21:41:13 GMT" name="activate"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAction" id="activate_action">
+ <property name="name">activate_action</property>
+ <property name="label" translatable="yes">_Blank Screen Now</property>
+ <signal handler="activate_menu_cb" name="activate"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAction" id="lock_action">
+ <property name="name">lock_action</property>
+ <property name="label" translatable="yes">_Lock Screen Now</property>
+ <signal handler="lock_menu_cb" name="activate"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAction" id="kill_action">
+ <property name="name">kill_action</property>
+ <property name="label" translatable="yes">_Kill Daemon</property>
+ <signal handler="kill_menu_cb" name="activate"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAction" id="restart_action">
+ <property name="name">restart_action</property>
+ <property name="label" translatable="yes">_Restart Daemon</property>
+ <signal handler="restart_menu_cb" name="activate"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAction" id="exit_action">
+ <property name="name">exit_action</property>
+ <property name="label" translatable="yes">_Quit</property>
+ <signal handler="exit_menu_cb" name="activate"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAction" id="help">
+ <property name="name">help</property>
+ <property name="label" translatable="yes">_Help</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAction" id="about_action">
+ <property name="name">about_action</property>
+ <property name="label" translatable="yes">_About...</property>
+ <signal handler="about_menu_cb" name="activate"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAction" id="doc_action">
+ <property name="name">doc_action</property>
+ <property name="label" translatable="yes">_Documentation...</property>
+ <signal handler="doc_menu_cb" name="activate"/>
+ </object>
+ </child>
+ </object>
+ </child>
+ <ui>
+ <menubar name="menubar">
+ <menu action="file">
+ <menuitem name="activate_menu" action="activate_action"/>
+ <menuitem name="lock_menu" action="lock_action"/>
+ <menuitem name="kill_menu" action="kill_action"/>
+ <menuitem name="restart_menu" action="restart_action"/>
+ <separator/>
+ <menuitem name="exit_menu" action="exit_action"/>
+ </menu>
+ <menu action="help">
+ <menuitem name="about_menu" action="about_action"/>
+ <menuitem name="doc_menu" action="doc_action"/>
+ </menu>
+ </menubar>
+ </ui>
+ </object>
+ <object class="GtkWindow" id="xscreensaver_demo">
+ <property name="title" translatable="yes">XScreenSaver</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">False</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+ <child>
+ <object class="GtkVBox" id="outer_vbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">5</property>
+ <child>
+ <object class="GtkMenuBar" constructor="uimanager1" id="menubar">
+ <property name="visible">True</property>
+ <property name="pack_direction">GTK_PACK_DIRECTION_LTR</property>
+ <property name="child_pack_direction">GTK_PACK_DIRECTION_LTR</property>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="spacer_hbox">
+ <property name="border_width">8</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+ <child>
+ <object class="GtkNotebook" id="notebook">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="show_tabs">True</property>
+ <property name="show_border">True</property>
+ <property name="tab_pos">GTK_POS_TOP</property>
+ <property name="scrollable">False</property>
+ <property name="enable_popup">False</property>
+ <signal handler="switch_page_cb" name="switch_page"/>
+ <child>
+ <object class="GtkTable" id="demos_table">
+ <property name="border_width">10</property>
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">0</property>
+ <property name="column_spacing">0</property>
+ <child>
+ <object class="GtkTable" id="blanking_table">
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">4</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">2</property>
+ <property name="column_spacing">0</property>
+ <child>
+ <object class="GtkLabel" id="cycle_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Cycle After</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_RIGHT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">8</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">cycle_spinbutton</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="cycle_spinbutton" type="label-for"/>
+ <relation target="cycle_spinbutton" type="flows-to"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEventBox" id="lock_button_eventbox">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Whether a password should be required to un-blank the screen.</property>
+ <property name="visible_window">False</property>
+ <property name="above_child">False</property>
+ <child>
+ <object class="GtkCheckButton" id="lock_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Lock Screen After </property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <accessibility>
+ <relation target="lock_spinbutton" type="controller-for"/>
+ <relation target="lock_spinbutton" type="label-for"/>
+ <relation target="lock_spinbutton" type="flows-to"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" name="toggled"/>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="a11y-lock_button1">
+ <property name="AtkObject::accessible_name" translatable="yes">Lock Screen</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="timeout_spinbutton">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">How long before the screen saver activates.</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">15</property>
+ <property name="digits">0</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">True</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">adjustment1</property>
+ <accessibility>
+ <relation target="timeout_label" type="labelled-by"/>
+ <relation target="timeout_mlabel" type="labelled-by"/>
+ <relation target="timeout_label" type="flows-from"/>
+ <relation target="timeout_mlabel" type="flows-to"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" name="activate"/>
+ <signal handler="pref_changed_event_cb" name="focus_out_event"/>
+ <signal handler="pref_changed_cb" name="value_changed"/>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="lock_spinbutton">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">How long after the screen blanks until a password will be required.</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">15</property>
+ <property name="digits">0</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">True</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">adjustment2</property>
+ <accessibility>
+ <relation target="lock_button" type="controlled-by"/>
+ <relation target="lock_button" type="labelled-by"/>
+ <relation target="lock_mlabel" type="labelled-by"/>
+ <relation target="lock_button" type="flows-from"/>
+ <relation target="lock_mlabel" type="flows-to"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" name="activate"/>
+ <signal handler="pref_changed_event_cb" name="focus_out_event"/>
+ <signal handler="pref_changed_cb" name="value_changed"/>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="a11y-lock_spinbutton1">
+ <property name="AtkObject::accessible_name" translatable="yes">Lock Screen After</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_padding">10</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="cycle_spinbutton">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">How long each display mode should run before choosing a new one (in Random mode.)</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">15</property>
+ <property name="digits">0</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">True</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">adjustment3</property>
+ <accessibility>
+ <relation target="cycle_label" type="labelled-by"/>
+ <relation target="cycle_mlabel" type="labelled-by"/>
+ <relation target="cycle_label" type="flows-from"/>
+ <relation target="cycle_mlabel" type="flows-to"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" name="activate"/>
+ <signal handler="pref_changed_event_cb" name="focus_out_event"/>
+ <signal handler="pref_changed_cb" name="value_changed"/>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="lock_mlabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">minutes</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">8</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="lock_spinbutton" type="label-for"/>
+ <relation target="lock_spinbutton" type="flows-to"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="cycle_mlabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">minutes</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">8</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="cycle_spinbutton" type="label-for"/>
+ <relation target="cycle_spinbutton" type="flows-from"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="timeout_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Blank After</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_RIGHT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">8</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">timeout_spinbutton</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="timeout_spinbutton" type="label-for"/>
+ <relation target="timeout_spinbutton" type="flows-to"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="timeout_mlabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">minutes</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">8</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="timeout_spinbutton" type="label-for"/>
+ <relation target="timeout_spinbutton" type="flows-from"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options">fill</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHButtonBox" id="demo_manual_hbbox">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_SPREAD</property>
+ <property name="spacing">30</property>
+ <child>
+ <object class="GtkButton" id="demo">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Demo the selected screen saver in full-screen mode (click the mouse to return.)</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Preview</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal handler="run_this_cb" name="clicked"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="settings">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Customization and explanation of the selected screen saver.</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Settings...</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal handler="settings_cb" name="clicked"/>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options">fill</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="list_vbox">
+ <property name="border_width">10</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+ <child>
+ <object class="GtkHBox" id="mode_hbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+ <child>
+ <object class="GtkLabel" id="mode_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Mode:</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">mode_menu</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="mode_menu" type="label-for"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="mode_menu">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_entry">False</property>
+ <property name="model">mode_menu_model</property>
+ <accessibility>
+ <relation target="mode_label" type="labelled-by"/>
+ </accessibility>
+ <child>
+ <object class="GtkCellRendererText" id="renderer1"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">4</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">10</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scroller">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+ <child>
+ <object class="GtkTreeView" id="list">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ <property name="rules_hint">True</property>
+ <property name="reorderable">False</property>
+ <property name="enable_search">True</property>
+ <property name="fixed_height_mode">False</property>
+ <property name="hover_selection">False</property>
+ <property name="hover_expand">False</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="centering_hbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <property name="spacing">0</property>
+ <child>
+ <object class="GtkHBox" id="next_prev_hbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+ <child>
+ <object class="GtkButton" id="next">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Run the next screen saver in the list in full-screen mode (click the mouse to return.)</property>
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal handler="run_next_cb" name="clicked"/>
+ <child>
+ <object class="GtkArrow" id="arrow1">
+ <property name="visible">True</property>
+ <property name="arrow_type">GTK_ARROW_DOWN</property>
+ <property name="shadow_type">GTK_SHADOW_OUT</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="prev">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Run the previous screen saver in the list in full-screen mode (click the mouse to return.)</property>
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal handler="run_prev_cb" name="clicked"/>
+ <child>
+ <object class="GtkArrow" id="arrow2">
+ <property name="visible">True</property>
+ <property name="arrow_type">GTK_ARROW_UP</property>
+ <property name="shadow_type">GTK_SHADOW_OUT</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="preview_frame">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0.5</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+ <accessibility>
+ <relation target="label1" type="labelled-by"/>
+ </accessibility>
+ <child>
+ <object class="GtkNotebook" id="preview_notebook">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="show_tabs">True</property>
+ <property name="show_border">False</property>
+ <property name="tab_pos">GTK_POS_BOTTOM</property>
+ <property name="scrollable">False</property>
+ <property name="enable_popup">False</property>
+ <child>
+ <object class="GtkAspectFrame" id="preview_aspectframe">
+ <property name="border_width">8</property>
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0.5</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="ratio">1.33000004292</property>
+ <property name="obey_child">False</property>
+ <child>
+ <object class="GtkDrawingArea" id="preview">
+ <property name="visible">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="preview_tab">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">preview</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="no_preview_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">No Preview
+Available</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </object>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="no_preview_tab">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">no preview</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="not_installed_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Not
+Installed</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </object>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="not_installed_tab">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">not installed</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="nothing_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Very few (or no) screen savers appear to be available.
+
+This probably means that the "xscreensaver-extras" and
+"xscreensaver-gl-extras" packages are not installed.</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </object>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="nothing_tab">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">nothing</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Description</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="preview_frame" type="label-for"/>
+ </accessibility>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_padding">6</property>
+ <property name="x_options">expand|shrink|fill</property>
+ <property name="y_options">expand|shrink|fill</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="demo_tab">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Display Modes</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">notebook</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTable" id="options_table">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">True</property>
+ <property name="row_spacing">0</property>
+ <property name="column_spacing">0</property>
+ <child>
+ <object class="GtkFrame" id="grab_frame">
+ <property name="border_width">10</property>
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0.5</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+ <accessibility>
+ <relation target="label2" type="labelled-by"/>
+ </accessibility>
+ <child>
+ <object class="GtkHBox" id="grab_hbox">
+ <property name="border_width">8</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+ <child>
+ <object class="GtkImage" id="image2">
+ <property name="visible">True</property>
+ <property name="pixbuf">screensaver-snap.png</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">4</property>
+ <property name="ypad">8</property>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="grab_vbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+ <child>
+ <object class="GtkCheckButton" id="grab_desk_button">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Whether the image-manipulating modes should be allowed to operate on an image of your desktop.</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Grab Desktop _Images</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal handler="pref_changed_cb" name="toggled"/>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="grab_video_button">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Whether the image-manipulating modes should operate on images captured from the system's video input (if there is one.)</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Grab _Video Frames</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal handler="pref_changed_cb" name="toggled"/>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="grab_image_button">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Whether the image-manipulating modes should load image files.</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Choose _Random Image:</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <accessibility>
+ <relation target="image_text" type="controller-for"/>
+ <relation target="image_browse_button" type="controller-for"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" name="toggled"/>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="image_hbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+ <child>
+ <object class="GtkLabel" id="grab_dummy">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"/>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">8</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="image_text">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">The local directory, RSS feed or Atom feed from which images will be randomly chosen.</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"/>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ <accessibility>
+ <relation target="grab_image_button" type="labelled-by"/>
+ <relation target="grab_image_button" type="controlled-by"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" name="activate"/>
+ <signal handler="pref_changed_event_cb" name="focus_out_event"/>
+ </object>
+ <packing>
+ <property name="padding">2</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="image_browse_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Browse</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal handler="browse_image_dir_cb" name="clicked"/>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label8">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Local directory, or RSS feed URL.</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">20</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Image Manipulation</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="grab_frame" type="label-for"/>
+ </accessibility>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="diag_frame">
+ <property name="border_width">10</property>
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0.5</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+ <accessibility>
+ <relation target="label3" type="labelled-by"/>
+ </accessibility>
+ <child>
+ <object class="GtkHBox" id="diag_hbox">
+ <property name="border_width">8</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+ <child>
+ <object class="GtkImage" id="diag_logo">
+ <property name="visible">True</property>
+ <property name="pixbuf">screensaver-diagnostic.png</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="text_table">
+ <property name="visible">True</property>
+ <property name="n_rows">5</property>
+ <property name="n_columns">3</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">2</property>
+ <property name="column_spacing">2</property>
+ <child>
+ <object class="GtkRadioButton" id="text_radio">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Text-displaying modes will display the text typed here.</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Text</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <accessibility>
+ <relation target="text_entry" type="controller-for"/>
+ <relation target="text_entry" type="label-for"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:31:44 GMT" name="toggled"/>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="text_file_radio">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Text-displaying modes will display the contents of this file.</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Text _file</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">text_radio</property>
+ <accessibility>
+ <relation target="text_file_entry" type="label-for"/>
+ <relation target="text_file_entry" type="controller-for"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:31:55 GMT" name="toggled"/>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="text_program_radio">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Text-displaying modes will display the output of this program.</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Program</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">text_radio</property>
+ <accessibility>
+ <relation target="text_program_entry" type="label-for"/>
+ <relation target="text_program_entry" type="controller-for"/>
+ <relation target="text_program_browse" type="controller-for"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:32:07 GMT" name="toggled"/>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="text_url_radio">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Text-displaying modes will display the contents of this URL (HTML or RSS).</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_URL</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">text_radio</property>
+ <accessibility>
+ <relation target="text_url_entry" type="label-for"/>
+ <relation target="text_url_entry" type="controller-for"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:32:17 GMT" name="toggled"/>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="text_host_radio">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Text-displaying modes will display the local host name, date, and time.</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Host Name and Time</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">True</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">text_radio</property>
+ <signal handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:31:32 GMT" name="toggled"/>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="text_url_entry">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Text-displaying modes will display the contents of this URL (HTML or RSS).</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"/>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ <accessibility>
+ <relation target="text_url_radio" type="controlled-by"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:33:10 GMT" name="activate"/>
+ <signal handler="pref_changed_event_cb" last_modification_time="Sun, 20 Mar 2005 21:34:26 GMT" name="focus_out_event"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="text_file_browse">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Browse</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <accessibility>
+ <relation target="text_file_radio" type="controlled-by"/>
+ </accessibility>
+ <signal handler="browse_text_file_cb" last_modification_time="Sun, 20 Mar 2005 01:24:38 GMT" name="clicked"/>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="text_entry">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Text-displaying modes will display the text typed here.</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"/>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ <accessibility>
+ <relation target="text_program_radio" type="labelled-by"/>
+ <relation target="text_program_radio" type="controlled-by"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:32:42 GMT" name="activate"/>
+ <signal handler="pref_changed_event_cb" last_modification_time="Sun, 20 Mar 2005 21:33:43 GMT" name="focus_out_event"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="text_program_entry">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Text-displaying modes will display the output of this program.</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"/>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ <accessibility>
+ <relation target="text_program_radio" type="labelled-by"/>
+ <relation target="text_program_radio" type="controlled-by"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:33:02 GMT" name="activate"/>
+ <signal handler="pref_changed_event_cb" last_modification_time="Sun, 20 Mar 2005 21:34:15 GMT" name="focus_out_event"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="text_program_browse">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Browse</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <accessibility>
+ <relation target="text_program_radio" type="controller-for"/>
+ </accessibility>
+ <signal handler="browse_text_program_cb" last_modification_time="Sun, 20 Mar 2005 01:24:51 GMT" name="clicked"/>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="text_file_entry">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Text-displaying modes will display the contents of this file.</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"/>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ <accessibility>
+ <relation target="text_file_radio" type="labelled-by"/>
+ <relation target="text_file_radio" type="controlled-by"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" last_modification_time="Sun, 20 Mar 2005 21:32:53 GMT" name="activate"/>
+ <signal handler="pref_changed_event_cb" last_modification_time="Sun, 20 Mar 2005 21:33:55 GMT" name="focus_out_event"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Text Manipulation</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="diag_frame" type="label-for"/>
+ </accessibility>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="dpms_frame">
+ <property name="border_width">10</property>
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0.5</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+ <child>
+ <object class="GtkHBox" id="dpms_hbox">
+ <property name="border_width">8</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+ <child>
+ <object class="GtkImage" id="dpms_logo">
+ <property name="visible">True</property>
+ <property name="pixbuf">screensaver-power.png</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox6">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+ <child>
+ <object class="GtkCheckButton" id="dpms_button">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Whether the monitor should be powered down after a while.</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Power Management Enabled</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">True</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <accessibility>
+ <relation target="dpms_suspend_spinbutton" type="controller-for"/>
+ <relation target="dpms_standby_spinbutton" type="controller-for"/>
+ <relation target="dpms_off_spinbutton" type="controller-for"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" name="toggled"/>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="dpms_table">
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">3</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">2</property>
+ <property name="column_spacing">4</property>
+ <child>
+ <object class="GtkLabel" id="dpms_standby_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Stand_by After</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">10</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">dpms_standby_spinbutton</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="dpms_standby_spinbutton" type="label-for"/>
+ <relation target="dpms_standby_spinbutton" type="flows-to"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="dpms_suspend_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Sus_pend After</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">10</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">dpms_suspend_spinbutton</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="dpms_suspend_spinbutton" type="label-for"/>
+ <relation target="dpms_suspend_spinbutton" type="flows-to"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="dpms_off_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Off After</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">10</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">dpms_off_spinbutton</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="dpms_off_spinbutton" type="label-for"/>
+ <relation target="dpms_off_spinbutton" type="flows-to"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="dpms_standby_mlabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">minutes</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="dpms_standby_spinbutton" type="label-for"/>
+ <relation target="dpms_standby_spinbutton" type="flows-from"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="dpms_suspend_mlabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">minutes</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="dpms_suspend_spinbutton" type="label-for"/>
+ <relation target="dpms_suspend_spinbutton" type="flows-from"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="dpms_off_mlabel">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">minutes</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="dpms_off_spinbutton" type="label-for"/>
+ <relation target="dpms_off_spinbutton" type="flows-from"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="dpms_off_spinbutton">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">How long until the monitor powers down.</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">15</property>
+ <property name="digits">0</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">True</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">adjustment4</property>
+ <accessibility>
+ <relation target="dpms_button" type="controlled-by"/>
+ <relation target="dpms_off_label" type="labelled-by"/>
+ <relation target="dpms_off_mlabel" type="labelled-by"/>
+ <relation target="dpms_off_label" type="flows-from"/>
+ <relation target="dpms_off_mlabel" type="flows-to"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" name="activate"/>
+ <signal handler="pref_changed_event_cb" name="focus_out_event"/>
+ <signal handler="pref_changed_cb" name="value_changed"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options"/>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="dpms_suspend_spinbutton">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">How long until the monitor goes into power-saving mode.</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">15</property>
+ <property name="digits">0</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">True</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">adjustment5</property>
+ <accessibility>
+ <relation target="dpms_button" type="controlled-by"/>
+ <relation target="dpms_suspend_label" type="labelled-by"/>
+ <relation target="dpms_suspend_mlabel" type="labelled-by"/>
+ <relation target="dpms_suspend_label" type="flows-from"/>
+ <relation target="dpms_suspend_mlabel" type="flows-to"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" name="activate"/>
+ <signal handler="pref_changed_event_cb" name="focus_out_event"/>
+ <signal handler="pref_changed_cb" name="value_changed"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options"/>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="dpms_standby_spinbutton">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">How long until the monitor goes completely black.</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">15</property>
+ <property name="digits">0</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">True</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">adjustment6</property>
+ <accessibility>
+ <relation target="dpms_button" type="controlled-by"/>
+ <relation target="dpms_standby_label" type="labelled-by"/>
+ <relation target="dpms_standby_mlabel" type="labelled-by"/>
+ <relation target="dpms_standby_label" type="flows-from"/>
+ <relation target="dpms_standby_mlabel" type="flows-to"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" name="activate"/>
+ <signal handler="pref_changed_event_cb" name="focus_out_event"/>
+ <signal handler="pref_changed_cb" name="value_changed"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options"/>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="dpms_quickoff_button">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Whether the monitor should be powered off immediately in "Blank Screen Only" mode, regardless of the above power-management timeouts.</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Quick Power-off in Blank Only Mode</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal handler="pref_changed_cb" name="toggled"/>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Display Power Management</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="dpms_frame" type="label-for"/>
+ </accessibility>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options">fill</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="cmap_frame">
+ <property name="border_width">10</property>
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0.5</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+ <accessibility>
+ <relation target="label5" type="labelled-by"/>
+ </accessibility>
+ <child>
+ <object class="GtkHBox" id="cmap_hbox">
+ <property name="border_width">8</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+ <child>
+ <object class="GtkImage" id="image5">
+ <property name="visible">True</property>
+ <property name="pixbuf">screensaver-colorselector.png</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox7">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+ <child>
+ <object class="GtkCheckButton" id="fade_button">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Whether the screen should slowly fade to black when the screen saver activates.</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Fade to Black when _Blanking</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <accessibility>
+ <relation target="fade_spinbutton" type="controller-for"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" name="toggled"/>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="unfade_button">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Whether the screen should slowly fade in from black when the screen saver deactivates.</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Fade from Black When _Unblanking</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <accessibility>
+ <relation target="fade_spinbutton" type="controller-for"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" name="toggled"/>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="fade_hbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+ <child>
+ <object class="GtkLabel" id="fade_dummy">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"/>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">3</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="fade_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">F_ade Duration</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">fade_spinbutton</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="fade_spinbutton" type="label-for"/>
+ <relation target="fade_spinbutton" type="flows-to"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="padding">14</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="fade_spinbutton">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">How long it should take for the screen to fade in and out.</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">1</property>
+ <property name="digits">0</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">True</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">adjustment7</property>
+ <accessibility>
+ <relation target="unfade_button" type="controlled-by"/>
+ <relation target="fade_button" type="controlled-by"/>
+ <relation target="fade_label" type="labelled-by"/>
+ <relation target="fade_sec_label" type="labelled-by"/>
+ <relation target="fade_label" type="flows-from"/>
+ <relation target="fade_sec_label" type="flows-to"/>
+ </accessibility>
+ <signal handler="pref_changed_cb" name="activate"/>
+ <signal handler="pref_changed_event_cb" name="focus_out_event"/>
+ <signal handler="pref_changed_cb" name="value_changed"/>
+ </object>
+ <packing>
+ <property name="padding">4</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="fade_sec_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">seconds</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="fade_spinbutton" type="label-for"/>
+ <relation target="fade_spinbutton" type="flows-from"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="padding">2</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHSeparator" id="cmap_hr">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="padding">8</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="install_button">
+ <property name="visible">True</property>
+ <property name="tooltip-text" translatable="yes">Whether to install a private colormap when running in 8-bit mode on the default Visual.</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Install _Colormap</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal handler="pref_changed_cb" name="toggled"/>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Fading and Colormaps</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="cmap_frame" type="label-for"/>
+ </accessibility>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options">fill</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="options_tab">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Advanced</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">notebook</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHButtonBox" id="hbuttonbox2">
+ <property name="border_width">5</property>
+ <property name="layout_style">GTK_BUTTONBOX_EDGE</property>
+ <property name="spacing">10</property>
+ <child>
+ <object class="GtkButton" id="helpbutton">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-help</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal handler="doc_menu_cb" name="clicked"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="closebutton">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-close</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal handler="exit_menu_cb" name="clicked"/>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkDialog" id="xscreensaver_settings_dialog">
+ <property name="title" translatable="yes">dialog1</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">False</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog_vbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog_action_area">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <object class="GtkButton" id="adv_button">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Advanced &gt;&gt;</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal handler="settings_adv_cb" name="clicked"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="std_button">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Standard &lt;&lt;</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal handler="settings_std_cb" name="clicked"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="reset_button">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Reset to Defaults</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal handler="settings_reset_cb" name="clicked"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="cancel_button">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal handler="settings_cancel_cb" name="clicked"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="ok_button">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-ok</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal handler="settings_ok_cb" name="clicked"/>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+ <child>
+ <object class="GtkFrame" id="opt_frame">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+ <accessibility>
+ <relation target="label6" type="labelled-by"/>
+ </accessibility>
+ <child>
+ <object class="GtkNotebook" id="opt_notebook">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="show_tabs">True</property>
+ <property name="show_border">False</property>
+ <property name="tab_pos">GTK_POS_BOTTOM</property>
+ <property name="scrollable">False</property>
+ <property name="enable_popup">False</property>
+ <signal handler="settings_switch_page_cb" name="switch_page"/>
+ <child>
+ <object class="GtkVBox" id="settings_vbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="tab_expand">True</property>
+ <property name="tab_fill">True</property>
+ <property name="tab_pack">GTK_PACK_END</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="std_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Standard</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTable" id="adv_table">
+ <property name="visible">True</property>
+ <property name="n_rows">4</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">0</property>
+ <property name="column_spacing">0</property>
+ <child>
+ <object class="GtkImage" id="cmd_logo">
+ <property name="visible">True</property>
+ <property name="pixbuf">screensaver-cmndln.png</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">4</property>
+ <property name="ypad">8</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options">fill</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="cmd_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Command Line:</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">cmd_text</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="cmd_text" type="label-for"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="cmd_text">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"/>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ <accessibility>
+ <relation target="cmd_label" type="labelled-by"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"/>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="visual_hbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+ <child>
+ <object class="GtkLabel" id="visual">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Visual:</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">3</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">visual_combo</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="visual_combo" type="label-for"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxEntry" id="visual_combo">
+ <property name="has_entry">False</property>
+ <property name="visible">True</property>
+ <property name="model">visual_combo_model</property>
+ <property name="text-column">0</property>
+ <accessibility>
+ <relation target="visual" type="labelled-by"/>
+ </accessibility>
+ <child internal-child="entry">
+ <object class="GtkEntry" id="visual_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"/>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">fill</property>
+ <property name="y_options">fill</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="adv_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Advanced</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label6">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Settings</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <accessibility>
+ <relation target="opt_frame" type="label-for"/>
+ </accessibility>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="doc_frame">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <object class="GtkVBox" id="doc_vbox">
+ <property name="border_width">5</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">5</property>
+ <child>
+ <object class="GtkLabel" id="doc">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes"/>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">True</property>
+ <property name="selectable">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+ <child>
+ <object class="GtkButton" id="manual">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Documentation...</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal handler="manual_cb" name="clicked"/>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label7">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"/>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="0">adv_button</action-widget>
+ <action-widget response="0">std_button</action-widget>
+ <action-widget response="0">reset_button</action-widget>
+ <action-widget response="-6">cancel_button</action-widget>
+ <action-widget response="-5">ok_button</action-widget>
+ </action-widgets>
+ </object>
+</interface>
diff --git a/driver/xscreensaver-getimage-file b/driver/xscreensaver-getimage-file
index 3a5c7f4..a22d001 100755
--- a/driver/xscreensaver-getimage-file
+++ b/driver/xscreensaver-getimage-file
@@ -53,7 +53,7 @@ BEGIN { eval 'use LWP::Simple;' }
my $progname = $0; $progname =~ s@.*/@@g;
-my ($version) = ('$Revision: 1.53 $' =~ m/\s(\d[.\d]+)\s/s);
+my ($version) = ('$Revision: 1.57 $' =~ m/\s(\d[.\d]+)\s/s);
my $verbose = 0;
@@ -84,7 +84,7 @@ my $feed_max_age = $cache_max_age;
# them, but it assumes that you gave your images sensible file extensions.
#
my @good_extensions = ('jpg', 'jpeg', 'pjpeg', 'pjpg', 'png', 'gif',
- 'tif', 'tiff', 'xbm', 'xpm');
+ 'tif', 'tiff', 'xbm', 'xpm', 'svg');
my $good_file_re = '\.(' . join("|", @good_extensions) . ')$';
# This matches file extensions that might occur in an image directory,
@@ -1120,8 +1120,21 @@ sub png_size($) {
}
-# Given the raw body of a GIF, JPEG, or PNG document, returns the dimensions
-# of the image.
+# Given the raw body of an SVG document, returns the dimensions of the image.
+#
+sub svg_size($) {
+ my ($body) = @_;
+ return () unless ($body =~ m/^<\?xml\s/s);
+ return () unless ($body =~ m/<svg\s/si);
+ my ($w) = ($body =~ m@\swidth=[\"\'](\d+)[\"\']@si);
+ my ($h) = ($body =~ m@\sheight=[\"\'](\d+)[\"\']@si);
+ return () unless (defined ($w) && defined ($h));
+ return ($w, $h);
+}
+
+
+# Given the raw body of a GIF, JPEG, PNG or SVG document, returns the
+# dimensions of the image.
#
sub image_size($) {
my ($body) = @_;
@@ -1130,6 +1143,8 @@ sub image_size($) {
if ($w && $h) { return ($w, $h); }
($w, $h) = jpeg_size ($body);
if ($w && $h) { return ($w, $h); }
+ ($w, $h) = svg_size ($body);
+ if ($w && $h) { return ($w, $h); }
# #### TODO: need image parsers for TIFF, XPM, XBM.
return png_size ($body);
}
@@ -1182,13 +1197,24 @@ sub get_x11_prefs_1($) {
my ($body) = @_;
my $got_any_p = 0;
+ my $choosep = 1;
$body =~ s@\\\n@@gs;
$body =~ s@^[ \t]*#[^\n]*$@@gm;
- if ($body =~ m/^[.*]*imageDirectory:[ \t]*([^\s]+)\s*$/im) {
- $image_directory = $1;
- $got_any_p = 1;
+ foreach my $line (split (/\n/, $body)) {
+ $line =~ s/#.*//s;
+ if ($line =~ m/^[.*]*imageDirectory:[ \t]*([^\s]+)\s*$/si) {
+ $image_directory = $1;
+ $got_any_p = 1;
+ } elsif ($line =~ m/^[.*]*chooseRandomImages:[ \t]*([^\s]+)\s*$/si) {
+ $choosep = ($1 =~ m/^true$/si ? 1 : 0);
+ $got_any_p = 1;
+ }
}
+
+ # Don't allow image files to be loaded if chooseRandomImages is false.
+ $image_directory = undef unless $choosep;
+
return $got_any_p;
}
@@ -1276,12 +1302,11 @@ sub main() {
}
if (defined ($cocoa_id)) {
- get_cocoa_prefs($cocoa_id);
- error ("no imageDirectory in $cocoa_id") unless $image_directory;
+ get_cocoa_prefs ($cocoa_id);
} else {
get_x11_prefs();
- error ("no imageDirectory in X11 resources") unless $image_directory;
}
+ error ("image file loading is not configured") unless $image_directory;
}
usage unless (defined($image_directory));
diff --git a/driver/xscreensaver-getimage-video b/driver/xscreensaver-getimage-video
index dbc8986..d0f242e 100755
--- a/driver/xscreensaver-getimage-video
+++ b/driver/xscreensaver-getimage-video
@@ -30,7 +30,7 @@ require 5;
use strict;
my $progname = $0; $progname =~ s@.*/@@g;
-my $version = q{ $Revision: 1.23 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
+my $version = q{ $Revision: 1.24 $ }; $version =~ s/^[^0-9]+([0-9.]+).*$/$1/;
my $tmpdir = $ENV{TMPDIR} || "/tmp";
my $tmpfile = sprintf("%s/xssv.%08x.ppm", $tmpdir, rand(0xFFFFFFFF));
@@ -69,8 +69,7 @@ my @programs = (
"vidtomem -f $tmpfile 2>&- " . # Silicon Graphics
"&& mv $tmpfile-00000.rgb $tmpfile",
- # Maybe this works?
- # "ffmpeg -i /dev/video0 -ss 00:00:01 -vframes 1 $tmpfile 2>&-",
+ "ffmpeg -y -v quiet -i /dev/video0 -vframes:v 1 $escaped_tmpfile 2>&-",
# "mplayer -really-quiet tv://0 " . # Maybe works with some cams?
# "-ao null -vo pnm -frames 1 2>&- " .
@@ -124,7 +123,7 @@ sub grab_image() {
sub usage() {
- print STDERR "usage: $progname [--verbose] [--name | --stdout]\n";
+ print STDERR "usage: $progname [--verbose] [--name]\n";
exit 1;
}
diff --git a/driver/xscreensaver-getimage.c b/driver/xscreensaver-getimage.c
index 092540d..1009cb7 100644
--- a/driver/xscreensaver-getimage.c
+++ b/driver/xscreensaver-getimage.c
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2001-2018 by Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2001-2020 by Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -52,11 +52,24 @@
#ifdef HAVE_GDK_PIXBUF
# undef HAVE_JPEGLIB
+
+# if (__GNUC__ >= 4) /* Ignore useless warnings generated by GTK headers */
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wlong-long"
+# pragma GCC diagnostic ignored "-Wvariadic-macros"
+# pragma GCC diagnostic ignored "-Wpedantic"
+# endif
+
# ifdef HAVE_GTK2
# include <gdk-pixbuf-xlib/gdk-pixbuf-xlib.h>
# else /* !HAVE_GTK2 */
# include <gdk-pixbuf/gdk-pixbuf-xlib.h>
# endif /* !HAVE_GTK2 */
+
+# if (__GNUC__ >= 4)
+# pragma GCC diagnostic pop
+# endif
+
#endif /* HAVE_GDK_PIXBUF */
#ifdef HAVE_JPEGLIB
@@ -766,6 +779,13 @@ maybe_read_ppm (Screen *screen, Visual *visual,
progname, filename);
goto FAIL;
}
+ else if (!strncasecmp (buf, "<?xml", 5))
+ {
+ fprintf (stderr, "%s: %s: sorry, SVG files not supported"
+ " when compiled with JPEGlib instead of GDK_Pixbuf.\n",
+ progname, filename);
+ goto FAIL;
+ }
if (strncmp (s, "P6", 2))
goto FAIL;
diff --git a/driver/xscreensaver-systemd.c b/driver/xscreensaver-systemd.c
index a46ed4d..2da99de 100644
--- a/driver/xscreensaver-systemd.c
+++ b/driver/xscreensaver-systemd.c
@@ -1,4 +1,5 @@
-/* xscreensaver-systemd, Copyright (c) 2019 Martin Lucina <martin@lucina.net>
+/* xscreensaver-systemd, Copyright (c) 2019-2020
+ * Martin Lucina <martin@lucina.net> and Jamie Zawinski <jwz@jwz.org>
*
* ISC License
*
@@ -16,217 +17,911 @@
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * This is a small utility providing systemd integration for XScreenSaver.
*
- * When run from ~/.xsession or equivalent, this will:
+ * This utility provides systemd integration for XScreenSaver.
+ * It does two things:
*
- * - Lock the screen before the system goes to sleep (using
- * xscreensaver-command -suspend).
+ * - When the system is about to go to sleep (e.g., laptop lid closing)
+ * it locks the screen *before* the system goes to sleep, by running
+ * "xscreensaver-command -suspend". And then when the system wakes
+ * up again, it runs "xscreensaver-command -deactivate" to force the
+ * unlock dialog to appear immediately.
*
- * - Ensure the XScreenSaver password dialog is shown after the system
- * is resumed (using xscreensaver-command -deactivate).
+ * - When another process on the system makes asks for the screen saver
+ * to be inhibited (e.g. because a video is playing) this program
+ * periodically runs "xscreensaver-command -deactivate" to keep the
+ * display un-blanked. It does this until the other program asks for
+ * it to stop.
*
- * This is implemented using the recommended way to do these things
- * nowadays, namely inhibitor locks. sd-bus is used for DBUS communication,
- * so the only dependency is libsystemd (which you already have if you
- * want this).
+ *
+ * Background:
+ *
+ * For decades, the traditional way for a video player to temporarily
+ * inhibit the screen saver was to have a heartbeat command that ran
+ * "xscreensaver-command -deactivate" once a minute while the video was
+ * playing, and ceased when the video was paused or stopped. The reason
+ * to do it as a heartbeat rather than a toggle is so that the player
+ * fails SAFE -- if the player exits abnormally, the heart stops beating,
+ * and screen saving and locking resumes.
+ *
+ * These days, the popular apps do this by using systemd. The design of
+ * the systemd method easily and trivially allows an app to inhibit the
+ * screen saver, crash, and then never un-inhibit it, so now your screen
+ * will never blank again.
+ *
+ * Furthermore, since the systemd method uses cookies to ensure that only
+ * the app that sent "inhibit" can send the matching "uninhibit", simply
+ * re-launching the crashed video player does not fix the problem.
+ *
+ * "Did IQs just drop sharply while I was away?" -- Ellen Ripley
+ *
+ * So here's what we're dealing with now, with the various apps you might
+ * use to play video on Linux at the end of 2020:
+ *
+ *
+ *****************************************************************************
+ *
+ * Firefox (version 78.5)
+ *
+ * When playing media, Firefox will send "inhibit" to one of these
+ * targets: "org.freedesktop.ScreenSaver" or "org.gnome.SessionManager".
+ *
+ * However, Firefox decides which, if any, of those to use at launch time,
+ * and does not revisit that decision. So if xscreensaver-systemd has not
+ * been launched before Firefox, it won't work. Fortunately, in most use
+ * cases, xscreensaver will have been launched earlier in the startup
+ * sequence than the web browser.
+ *
+ * If you close the tab or exit while playing, Firefox sends "uninhibit".
+ *
+ * Critical Firefox Bug:
+ *
+ * If Firefox crashes or is killed while playing, it never sends
+ * "uninhibit", leaving the screen saver permanently inhibited. Once
+ * that happens, the only way to un-fuck things is to kill and restart
+ * the "xscreensaver-systemd" program.
+ *
+ * Annoying Firefox Bug:
+ *
+ * Firefox sends an "inhibit" message when it is merely playing audio.
+ * That's horrible. Playing audio should prevent your machine from going
+ * to sleep, but it should NOT prevent your screen from blanking or
+ * locking.
+ *
+ * However at least it sends it with the reason "audio-playing" instead
+ * of "video-playing", meaning we can (and do) special-case Firefox and
+ * ignore that one.
+ *
+ *
+ *****************************************************************************
+ *
+ * Chrome (version 87)
+ *
+ * Sends "inhibit" to "org.freedesktop.ScreenSaver" (though it uses a
+ * a different object path than Firefox does). Unlike Firefox, Chrome
+ * does not send an "inhibit" message when only audio is playing.
+ *
+ * Critical Chrome Bug:
+ *
+ * If Chrome crashes or is killed while playing, it never sends
+ * "uninhibit", leaving the screen saver permanently inhibited.
+ *
+ *
+ *****************************************************************************
+ *
+ * Chromium (version 78, Raspbian 10.4)
+ *
+ * Does not use "org.freedesktop.ScreenSaver" or "xdg-screensaver".
+ * It appears to make no attempt to inhibit the screen saver while
+ * video is playing.
+ *
+ *
+ *****************************************************************************
+ *
+ * Chromium (version 84.0.4147.141, Raspbian 10.6)
+ *
+ * Sends "inhibit" to "org.freedesktop.ScreenSaver" (though it uses a
+ * a different object path than Firefox does). Unlike Firefox, Chrome
+ * does not send an "inhibit" message when only audio is playing.
+ *
+ * If you close the tab or exit while playing, Chromium sends "uninhibit".
+ *
+ * Critical Chromium Bug:
+ *
+ * If Chromium crashes or is killed while playing, it never sends
+ * "uninhibit", leaving the screen saver permanently inhibited.
+ *
+ * Annoying Chromium Bug:
+ *
+ * Like Firefox, Chromium sends an "inhibit" message when it is merely
+ * playing audio. Unlike Firefox, it sends exactly the same "reason"
+ * string as it does when playing video, so we can't tell them apart.
+ *
+ *
+ *****************************************************************************
+ *
+ * MPV (version 0.29.1)
+ *
+ * While playing, it runs "xdg-screensaver reset" every 10 seconds as a
+ * heartbeat. That program is a super-complicated shell script that will
+ * eventually run "xscreensaver-command -reset". So MPV talks to the
+ * xscreensaver daemon directly rather than going through systemd.
+ * That's fine.
+ *
+ * On Debian 10.4 and 10.6, MPV does not have a dependency on the
+ * "xdg-utils" package, so "xdg-screensaver" might not be installed.
+ * Oddly, Chromium *does* have a dependency on "xdg-utils", even though
+ * Chromium doesn't run "xdg-screensaver".
+ *
+ * The source code suggests that MPlayer and MPV call XResetScreenSaver()
+ * as well, but only affects the X11 server's built-in screen saver, not
+ * a userspace screen locker like xscreensaver.
+ *
+ * They also call XScreenSaverSuspend() which is part of the MIT
+ * SCREEN-SAVER server extension. XScreenSaver does make use of that
+ * extension because it is worse than useless. See the commentary at
+ * the top of xscreensaver.c for details.
+ *
+ * Annoying MPV Bug:
+ *
+ * Like Firefox and Chromium, MPV inhibits screen blanking when only
+ * audio is playing.
+ *
+ *
+ *****************************************************************************
+ *
+ * MPlayer (version mplayer-gui 2:1.3.0)
+ *
+ * I can't get this thing to play video at all. It only plays the audio
+ * of MP4 files, so I can't guess what it might or might not do with video.
+ * It appears to make no attempt to inhibit the screen saver.
+ *
+ *
+ *****************************************************************************
+ *
+ * VLC (version 3.0.11-0+deb10u1+rpt3)
+ *
+ * VLC sends "inhibit" to "org.freedesktop.ScreenSaver" when playing
+ * video. It does not send "inhibit" when playing audio only, and it
+ * sends "uninhibit" under all the right circumstances.
+ *
+ * NOTE: that's what I saw when I tested it on Raspbian 10.6. However,
+ * the version that came with Raspbian 10.4 -- which also called itself
+ * "VLC 3.0.11" -- did not send "uninhibit" when using the window
+ * manager's "close" button! Or when killed with "kill".
+ *
+ * NOTE ALSO: The VLC source code suggests that under some circumstances
+ * it might be talking to these instead: "org.freedesktop.ScreenSaver",
+ * "org.freedesktop.PowerManagement.Inhibit", "org.mate.SessionManager",
+ * and/or "org.gnome.SessionManager". It also contains code to run
+ * "xdg-screensaver reset" as a heartbeat. I can't tell how it decides
+ * which system to use. I have never seen it run "xdg-screensaver".
+ *
+ *
+ *****************************************************************************
+ *
+ * TO DO:
+ *
+ * - What does the standalone Zoom executable do on Linux? There doesn't
+ * seem to be a Raspbian build, so I can't test it.
+ *
+ * - Since the systemd misdesign allows a program to call "inhibit" and
+ * then crash without un-inhibiting, it would be sensible for us to
+ * auto-uninhibit if the inhibiting process's pid goes away, but it
+ * seems that sd_bus_creds_get_pid() never works, so we can't do that.
+ * This is going to be a constant problem!
+ *
+ * - xscreensaver_method_uninhibit() does not actually send a reply, are
+ * we doing the right thing when registering it?
+ *
+ * - Currently this code is only listening to "org.freedesktop.ScreenSaver".
+ * Perhaps it should listen to "org.mate.SessionManager" and
+ * "org.gnome.SessionManager"? Where are those documented?
+ *
+ * - Do we need to call sd_bus_release_name() explicitly on exit?
+ *
+ * - Run under valgrind to check for any memory leaks.
+ *
+ *
+ * TESTING:
+ *
+ * To call the D-BUS methods manually, you can use "busctl":
+ *
+ * busctl --user call org.freedesktop.ScreenSaver \
+ * /ScreenSaver org.freedesktop.ScreenSaver \
+ * Inhibit ss test-application test-reason
+ *
+ * This will hand out a cookie, which you can pass back to UnInhibit:
+ *
+ * u 1792821391
+ *
+ * busctl --user call org.freedesktop.ScreenSaver \
+ * /ScreenSaver org.freedesktop.ScreenSaver \
+ * UnInhibit u 1792821391
*
* https://github.com/mato/xscreensaver-systemd
*/
-#include <assert.h>
-#include <err.h>
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <poll.h>
#include <errno.h>
+#include <stdint.h>
#include <stdlib.h>
+#include <string.h>
#include <sys/wait.h>
#include <unistd.h>
+#include <time.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <signal.h>
+
+#include "yarandom.h"
+
+#ifdef HAVE_LIBSYSTEMD
+# include <systemd/sd-bus.h>
+
+#else /* !HAVE_LIBSYSTEMD */
+
+ /* This is a testing shim so that I can somewhat test this even on
+ machines that only have libsystemd < 221, such as CentOS 7.7...
+ */
+ typedef struct sd_bus sd_bus;
+ typedef struct sd_bus_message sd_bus_message;
+ typedef struct sd_bus_slot sd_bus_slot;
+ typedef struct sd_bus_creds sd_bus_creds;
+ typedef struct { char *message; } sd_bus_error;
+ typedef int (*sd_bus_message_handler_t)
+ (sd_bus_message *m, void *userdata, sd_bus_error *ret_error);
+ #define SD_BUS_ERROR_NULL { 0 }
+ static int sd_bus_message_read (sd_bus_message *m, char *types, ...)
+ { return -1; }
+ static sd_bus_message *sd_bus_message_unref(sd_bus_message *m) { return 0; }
+ static void sd_bus_error_free(sd_bus_error *e) { }
+ static int sd_bus_call_method(sd_bus *bus, const char *destination,
+ const char *path, const char *interface,
+ const char *member, sd_bus_error *ret_error,
+ sd_bus_message **reply, const char *types, ...)
+ { return -1; }
+ static int sd_bus_open_user(sd_bus **ret) { return -1; }
+ static int sd_bus_request_name(sd_bus *bus, const char *name, uint64_t flags)
+ { return -1; }
+ static int sd_bus_open_system(sd_bus **ret) { return -1; }
+ static int sd_bus_add_match(sd_bus *bus, sd_bus_slot **slot,
+ const char *match,
+ sd_bus_message_handler_t callback, void *userdata)
+ { return -1; }
+ static int sd_bus_process(sd_bus *bus, sd_bus_message **r) { return -1; }
+ static sd_bus *sd_bus_flush_close_unref(sd_bus *bus) { return 0; }
+ static void sd_bus_message_ref(sd_bus_message *r) { }
+ static int sd_bus_reply_method_return (sd_bus_message *call,
+ const char *types, ...) { return -1; }
+ typedef int (*sd_bus_message_handler_t) (sd_bus_message *m, void *userdata,
+ sd_bus_error *ret_error);
+ struct sd_bus_vtable { const char *a; const char *b; const char *c;
+ sd_bus_message_handler_t d; int e; };
+ typedef struct sd_bus_vtable sd_bus_vtable;
+# define SD_BUS_VTABLE_START(_flags) { 0 }
+# define SD_BUS_VTABLE_END /**/
+# define SD_BUS_VTABLE_UNPRIVILEGED -1
+# define SD_BUS_METHOD(_member, _signature, _result, _handler, _flags) { \
+ _member, _signature, _result, _handler, _flags }
+ static int sd_bus_add_object_vtable(sd_bus *bus, sd_bus_slot **slot,
+ const char *path, const char *interface,
+ const sd_bus_vtable *vtable,
+ void *userdata) { return -1; }
+ static int sd_bus_get_fd(sd_bus *bus) { return -1; }
+ static int sd_bus_get_events(sd_bus *bus) { return -1; }
+ static int sd_bus_get_timeout (sd_bus *bus, uint64_t *u) { return -1; }
+ static sd_bus_creds *sd_bus_message_get_creds (sd_bus_message *m) {return 0;}
+ static int sd_bus_creds_get_pid(sd_bus_creds *c, pid_t *p) { return -1; }
+#endif /* !HAVE_LIBSYSTEMD */
+
+#include "queue.h"
+#include "version.h"
+
+static char *progname;
+static char *screensaver_version;
+static int verbose_p = 0;
+
+#define DBUS_CLIENT_NAME "org.jwz.XScreenSaver"
+#define DBUS_SD_SERVICE_NAME "org.freedesktop.login1"
+#define DBUS_SD_OBJECT_PATH "/org/freedesktop/login1"
+#define DBUS_SD_INTERFACE "org.freedesktop.login1.Manager"
+#define DBUS_SD_METHOD "Inhibit"
+#define DBUS_SD_METHOD_ARGS "ssss"
+#define DBUS_SD_METHOD_WHAT "sleep"
+#define DBUS_SD_METHOD_WHO "xscreensaver"
+#define DBUS_SD_METHOD_WHY "lock screen on suspend"
+#define DBUS_SD_METHOD_MODE "delay"
+
+#define DBUS_SD_MATCH "type='signal'," \
+ "interface='" DBUS_SD_INTERFACE "'," \
+ "member='PrepareForSleep'"
+
+#define DBUS_FDO_NAME "org.freedesktop.ScreenSaver"
+#define DBUS_FDO_OBJECT_PATH "/ScreenSaver" /* Firefox */
+#define DBUS_FDO_OBJECT_PATH_2 "/org/freedesktop/ScreenSaver" /* Chrome */
+#define DBUS_FDO_INTERFACE "org.freedesktop.ScreenSaver"
+
+#define HEARTBEAT_INTERVAL 50 /* seconds */
-#include <systemd/sd-bus.h>
struct handler_ctx {
- sd_bus *bus;
- sd_bus_message *lock;
+ sd_bus *system_bus;
+ sd_bus_message *lock_message;
+ int lock_fd;
+ int is_inhibited;
+};
+
+static struct handler_ctx global_ctx = { NULL, NULL, -1 };
+
+SLIST_HEAD(inhibit_head, inhibit_entry) inhibit_head =
+ SLIST_HEAD_INITIALIZER(inhibit_head);
+
+struct inhibit_entry {
+ uint32_t cookie;
+ pid_t pid;
+ time_t start_time;
+ char *appname;
+ SLIST_ENTRY(inhibit_entry) entries;
};
-static struct handler_ctx global_ctx = { NULL, NULL };
-static int handler(sd_bus_message *m, void *arg,
- sd_bus_error *ret_error)
+
+static const char *
+blurb (void)
{
- struct handler_ctx *ctx = arg;
- int before_sleep;
- int rc;
- sd_bus_error error = SD_BUS_ERROR_NULL;
- sd_bus_message *reply = NULL;
- int fd;
-
- rc = sd_bus_message_read(m, "b", &before_sleep);
- if (rc < 0) {
- warnx("Failed to read message: %s", strerror(-rc));
- return 0;
- }
+ static char buf[255];
+ time_t now = time ((time_t *) 0);
+ char ct[100];
+ int n = strlen(progname);
+ if (n > 100) n = 99;
+ strncpy(buf, progname, n);
+ buf[n++] = ':';
+ buf[n++] = ' ';
+ ctime_r (&now, ct);
+ strncpy(buf+n, ct+11, 8);
+ strcpy(buf+n+9, ": ");
+ return buf;
+}
- /* Use the scheme described at
- * https://www.freedesktop.org/wiki/Software/systemd/inhibit/
- * under "Taking Delay Locks".
- */
- if (before_sleep) {
- rc = system("xscreensaver-command -suspend");
- if (rc == -1) {
- warnx("Failed to run xscreensaver-command");
- }
- else if (WEXITSTATUS(rc) != 0) {
- warnx("xscreensaver-command failed with %d", WEXITSTATUS(rc));
- }
- if (ctx->lock) {
- /*
- * This will release the lock, since we hold the only ref to the
- * message, and sd_bus_message_unref() will close the underlying
- * fd.
- */
- sd_bus_message_unref(ctx->lock);
- ctx->lock = NULL;
- }
- else {
- warnx("Warning: ctx->lock is NULL, this should not happen?");
- }
- }
- else {
- rc = system("xscreensaver-command -deactivate");
- if (rc == -1) {
- warnx("Failed to run xscreensaver-command");
- }
- else if (WEXITSTATUS(rc) != 0) {
- warnx("xscreensaver-command exited with %d", WEXITSTATUS(rc));
- }
+static void
+xscreensaver_command (const char *cmd)
+{
+ char buf[1024];
+ int rc;
+ sprintf (buf, "xscreensaver-command %.100s -%.100s",
+ (verbose_p ? "-verbose" : "-quiet"),
+ cmd);
+ if (verbose_p)
+ fprintf (stderr, "%s: exec: %s\n", blurb(), buf);
+ rc = system (buf);
+ if (rc == -1)
+ fprintf (stderr, "%s: exec failed: %s\n", blurb(), buf);
+ else if (WEXITSTATUS(rc) != 0)
+ fprintf (stderr, "%s: exec: \"%s\" exited with status %d\n",
+ blurb(), buf, WEXITSTATUS(rc));
+}
- rc = sd_bus_call_method(ctx->bus,
- "org.freedesktop.login1",
- "/org/freedesktop/login1",
- "org.freedesktop.login1.Manager",
- "Inhibit",
- &error,
- &reply,
- "ssss",
- "sleep",
- "xscreensaver",
- "lock screen on suspend",
- "delay");
- if (rc < 0) {
- warnx("Failed to call Inhibit(): %s", error.message);
- goto out;
- }
- /*
- * Verify that the reply actually contains a lock fd.
- */
- rc = sd_bus_message_read(reply, "h", &fd);
- if (rc < 0) {
- warnx("Failed to read message: %s", strerror(-rc));
- goto out;
- }
- assert(fd >= 0);
- ctx->lock = reply;
-out:
- sd_bus_error_free(&error);
+static int
+xscreensaver_register_sleep_lock (struct handler_ctx *ctx)
+{
+ sd_bus_error error = SD_BUS_ERROR_NULL;
+ sd_bus_message *reply = NULL;
+ int fd = -1;
+ int rc = sd_bus_call_method (ctx->system_bus,
+ DBUS_SD_SERVICE_NAME, DBUS_SD_OBJECT_PATH,
+ DBUS_SD_INTERFACE, DBUS_SD_METHOD,
+ &error, &reply,
+ DBUS_SD_METHOD_ARGS,
+ DBUS_SD_METHOD_WHAT, DBUS_SD_METHOD_WHO,
+ DBUS_SD_METHOD_WHY, DBUS_SD_METHOD_MODE);
+ if (rc < 0) {
+ fprintf (stderr, "%s: inhibit sleep failed: %s\n",
+ blurb(), error.message);
+ goto DONE;
+ }
+
+ /* Save the lock fd and explicitly take a ref to the lock message. */
+ rc = sd_bus_message_read (reply, "h", &fd);
+ if (rc < 0 || fd < 0) {
+ fprintf (stderr, "%s: inhibit sleep failed: no lock fd: %s\n",
+ blurb(), strerror(-rc));
+ goto DONE;
+ }
+ sd_bus_message_ref(reply);
+ ctx->lock_message = reply;
+ ctx->lock_fd = fd;
+
+ DONE:
+ sd_bus_error_free (&error);
+
+ return rc;
+}
+
+
+/* Called when DBUS_SD_INTERFACE sends a "PrepareForSleep" signal.
+ The event is sent twice: before sleep, and after.
+ */
+static int
+xscreensaver_systemd_handler (sd_bus_message *m, void *arg,
+ sd_bus_error *ret_error)
+{
+ struct handler_ctx *ctx = arg;
+ int before_sleep;
+ int rc;
+
+ rc = sd_bus_message_read (m, "b", &before_sleep);
+ if (rc < 0) {
+ fprintf (stderr, "%s: message read failed: %s\n",
+ blurb(), strerror(-rc));
+ return 1; /* >= 0 means success */
+ }
+
+ /* Use the scheme described at
+ https://www.freedesktop.org/wiki/Software/systemd/inhibit/
+ under "Taking Delay Locks".
+ */
+
+ if (before_sleep) {
+ /* Tell xscreensaver that we are suspending, and to lock if desired. */
+ xscreensaver_command ("suspend");
+
+ if (ctx->lock_message) {
+ /* Release the lock, meaning we are done and it's ok to sleep now.
+ Don't rely on unref'ing the message to close the fd, do that
+ explicitly here.
+ */
+ close(ctx->lock_fd);
+ sd_bus_message_unref (ctx->lock_message);
+ ctx->lock_message = NULL;
+ ctx->lock_fd = -1;
+ } else {
+ fprintf (stderr, "%s: no context lock\n", blurb());
}
+ } else {
+ /* Tell xscreensaver to present the unlock dialog right now. */
+ xscreensaver_command ("deactivate");
+
+ /* We woke from sleep, so we need to re-register for the next sleep. */
+ rc = xscreensaver_register_sleep_lock (ctx);
+ if (rc < 0)
+ fprintf (stderr, "%s: could not re-register sleep lock\n", blurb());
+ }
- return 0;
+ return 1; /* >= 0 means success */
}
-int main(int argc, char *argv[])
+
+/* Called from the vtable when another process sends a request to systemd
+ to inhibit the screen saver. We return to them a cookie which they must
+ present with their "uninhibit" request.
+ */
+static int
+xscreensaver_method_inhibit (sd_bus_message *m, void *arg,
+ sd_bus_error *ret_error)
{
- sd_bus *bus = NULL, *user_bus = NULL;
- sd_bus_slot *slot = NULL;
- struct handler_ctx *ctx = &global_ctx;
- sd_bus_error error = SD_BUS_ERROR_NULL;
- sd_bus_message *reply = NULL;
- int rc;
- int fd;
- const char *match =
- "type='signal',interface='org.freedesktop.login1.Manager'"
- ",member='PrepareForSleep'";
-
- rc = sd_bus_open_user(&user_bus);
- if (rc < 0) {
- warnx("Failed to connect to user bus: %s", strerror(-rc));
- goto out;
+ struct handler_ctx *ctx = arg;
+ const char *application_name = 0, *inhibit_reason = 0;
+ struct inhibit_entry *entry = 0;
+ sd_bus_creds *creds = 0;
+ pid_t pid = 0;
+ const char *s;
+
+ int rc = sd_bus_message_read(m, "ss", &application_name, &inhibit_reason);
+ if (rc < 0) {
+ fprintf (stderr, "%s: failed to parse method call: %s\n",
+ blurb(), strerror(-rc));
+ return rc;
+ }
+
+ if (!application_name || !*application_name) {
+ fprintf (stderr, "%s: no app name in method call\n", blurb());
+ return -1;
+ }
+
+ if (!inhibit_reason || !*inhibit_reason) {
+ fprintf (stderr, "%s: no reason in method call from \"%s\"\n",
+ blurb(), application_name);
+ return -1;
+ }
+
+ /* Omit directory (Chrome does this shit) */
+ s = strrchr (application_name, '/');
+ if (s && s[1]) application_name = s+1;
+
+ if (strcasestr (inhibit_reason, "audio") &&
+ !strcasestr (inhibit_reason, "video")) {
+ /* Firefox 78 sends an inhibit when playing audio only, with reason
+ "audio-playing". This is horrible. Ignore it. (But perhaps it
+ would be better to accept it, issue them a cookie, and then just
+ ignore that entry?) */
+ if (verbose_p)
+ fprintf (stderr, "%s: inhibited by \"%s\" with \"%s\", ignored\n",
+ blurb(), application_name, inhibit_reason);
+ return -1;
+ }
+
+ /* Get the pid of the process that called inhibit, so that we can
+ auto-uninhibit if that process dies. We need to do this because so
+ many apps do not fail safe, and systemd's design doesn't enforce that.
+
+ Welp, this doesn't work. We get ENODATA any time we try to get the
+ pid of the message sender. FFFFFFFfffffffuuuuuuu......
+
+ Other things that do not work include: sd_bus_creds_get_exe,
+ sd_bus_creds_get_cmdline and sd_bus_creds_get_description. So maybe
+ we could go through the process table and find a pid whose command
+ line matches application_name, but there's no guarantee that those are
+ the same.
+ */
+ creds = sd_bus_message_get_creds (m);
+ if (!creds) {
+ if (verbose_p)
+ fprintf (stderr, "%s: inhibit: unable to get creds of \"%s\"\n",
+ blurb(), application_name);
+ } else {
+ rc = sd_bus_creds_get_pid (creds, &pid);
+ if (rc < 0 || pid <= 0) {
+ pid = 0;
+ if (verbose_p)
+ fprintf (stderr, "%s: inhibit: unable to get pid of \"%s\": %s\n",
+ blurb(), application_name, strerror(-rc));
}
- rc = sd_bus_request_name(user_bus, "org.jwz.XScreenSaver", 0);
- if (rc < 0) {
- warnx("Failed to acquire well-known name: %s", strerror(-rc));
- warnx("Is another copy of xscreensaver-systemd running?");
- goto out;
+ }
+
+ entry = malloc(sizeof (struct inhibit_entry));
+ entry->cookie = ya_random();
+ entry->appname = strdup(application_name);
+ entry->pid = pid;
+ entry->start_time = time ((time_t *)0);
+ SLIST_INSERT_HEAD(&inhibit_head, entry, entries);
+ ctx->is_inhibited++;
+ if (verbose_p)
+ fprintf (stderr, "%s: inhibited by \"%s\" with \"%s\" -> cookie %08X\n",
+ blurb(), application_name, inhibit_reason, entry->cookie);
+
+ return sd_bus_reply_method_return (m, "u", entry->cookie);
+}
+
+
+/* Called from the vtable when another process sends a request to systemd
+ to uninhibit the screen saver. The cookie must match an earlier "inhibit"
+ request.
+ */
+static int
+xscreensaver_method_uninhibit (sd_bus_message *m, void *arg,
+ sd_bus_error *ret_error)
+{
+ struct handler_ctx *ctx = arg;
+ uint32_t cookie;
+ struct inhibit_entry *entry;
+ int found = 0;
+
+ int rc = sd_bus_message_read (m, "u", &cookie);
+ if (rc < 0) {
+ fprintf (stderr, "%s: failed to parse method call: %s\n",
+ blurb(), strerror(-rc));
+ return rc;
+ }
+
+ SLIST_FOREACH(entry, &inhibit_head, entries) {
+ if (entry->cookie == cookie) {
+ if (verbose_p)
+ fprintf (stderr, "%s: uninhibited by \"%s\" with cookie %08X\n",
+ blurb(), entry->appname, cookie);
+ SLIST_REMOVE (&inhibit_head, entry, inhibit_entry, entries);
+ if (entry->appname) free (entry->appname);
+ free(entry);
+ ctx->is_inhibited--;
+ if (ctx->is_inhibited < 0)
+ ctx->is_inhibited = 0;
+ found = 1;
+ break;
}
+ }
- rc = sd_bus_open_system(&bus);
- if (rc < 0) {
- warnx("Failed to connect to system bus: %s", strerror(-rc));
- goto out;
+ if (! found)
+ fprintf (stderr, "%s: uninhibit: no match for cookie %08X\n",
+ blurb(), cookie);
+
+ return sd_bus_reply_method_return (m, "");
+}
+
+/*
+ * This vtable defines the service interface we implement.
+ */
+static const sd_bus_vtable
+xscreensaver_dbus_vtable[] = {
+ SD_BUS_VTABLE_START(0),
+ SD_BUS_METHOD("Inhibit", "ss", "u", xscreensaver_method_inhibit,
+ SD_BUS_VTABLE_UNPRIVILEGED),
+ SD_BUS_METHOD("UnInhibit", "u", "", xscreensaver_method_uninhibit,
+ SD_BUS_VTABLE_UNPRIVILEGED),
+ SD_BUS_VTABLE_END
+};
+
+
+static int
+pid_dead (pid_t pid)
+{
+ int rc = kill (pid, 0);
+ if (rc == 0) return 0; /* Process exists. */
+ if (errno == EPERM) return 0; /* Process exists but is not owned by us. */
+ return 1; /* No such process, ESRCH. */
+}
+
+
+static int
+xscreensaver_systemd_loop (void)
+{
+ sd_bus *system_bus = NULL, *user_bus = NULL;
+ struct handler_ctx *ctx = &global_ctx;
+ sd_bus_error error = SD_BUS_ERROR_NULL;
+ int rc;
+ time_t last_deactivate_time = 0;
+
+ /* 'user_bus' is where we receive messages from other programs sending
+ inhibit/uninhibit to org.freedesktop.ScreenSaver, etc.
+ */
+
+ rc = sd_bus_open_user (&user_bus);
+ if (rc < 0) {
+ fprintf (stderr, "%s: user bus connection failed: %s\n",
+ blurb(), strerror(-rc));
+ goto FAIL;
+ }
+
+ rc = sd_bus_add_object_vtable (user_bus,
+ NULL,
+ DBUS_FDO_OBJECT_PATH,
+ DBUS_FDO_INTERFACE,
+ xscreensaver_dbus_vtable,
+ &global_ctx);
+ if (rc < 0) {
+ fprintf (stderr, "%s: vtable registration failed: %s\n",
+ blurb(), strerror(-rc));
+ goto FAIL;
+ }
+
+ rc = sd_bus_add_object_vtable (user_bus,
+ NULL,
+ DBUS_FDO_OBJECT_PATH_2,
+ DBUS_FDO_INTERFACE,
+ xscreensaver_dbus_vtable,
+ &global_ctx);
+ if (rc < 0) {
+ fprintf (stderr, "%s: vtable registration failed: %s\n",
+ blurb(), strerror(-rc));
+ goto FAIL;
+ }
+
+ rc = sd_bus_request_name (user_bus, DBUS_FDO_NAME, 0);
+ if (rc < 0) {
+ fprintf (stderr, "%s: failed to connect as %s: %s\n",
+ blurb(), DBUS_FDO_NAME, strerror(-rc));
+ goto FAIL;
+ }
+
+ rc = sd_bus_request_name (user_bus, DBUS_CLIENT_NAME, 0);
+ if (rc < 0) {
+ fprintf (stderr, "%s: failed to connect as %s: %s\n",
+ blurb(), DBUS_CLIENT_NAME, strerror(-rc));
+ goto FAIL;
+ }
+
+
+ /* 'system_bus' is where we hold a lock on org.freedesktop.login1, meaning
+ that the system will send us a PrepareForSleep message when the system is
+ about to suspend.
+ */
+
+ rc = sd_bus_open_system (&system_bus);
+ if (rc < 0) {
+ fprintf (stderr, "%s: system bus connection failed: %s\n",
+ blurb(), strerror(-rc));
+ goto FAIL;
+ }
+
+ /* Obtain a lock fd from the "Inhibit" method, so that we can delay
+ sleep when a "PrepareForSleep" signal is posted. */
+
+ ctx->system_bus = system_bus;
+ rc = xscreensaver_register_sleep_lock (ctx);
+ if (rc < 0)
+ goto FAIL;
+
+ /* This is basically an event mask, saying that we are interested in
+ "PrepareForSleep", and to run our callback when that signal is thrown.
+ */
+ rc = sd_bus_add_match (system_bus, NULL, DBUS_SD_MATCH,
+ xscreensaver_systemd_handler,
+ &global_ctx);
+ if (rc < 0) {
+ fprintf (stderr, "%s: add match failed: %s\n", blurb(), strerror(-rc));
+ goto FAIL;
+ }
+
+ if (verbose_p)
+ fprintf (stderr, "%s: connected\n", blurb());
+
+
+ /* Run an event loop forever, and wait for our callback to run.
+ */
+ while (1) {
+ struct pollfd fds[2];
+ uint64_t poll_timeout, system_timeout, user_timeout;
+ struct inhibit_entry *entry;
+
+ /* We MUST call sd_bus_process() on each bus at least once before calling
+ sd_bus_get_events(), so just always start the event loop by processing
+ all outstanding requests on both busses. */
+ do {
+ rc = sd_bus_process (system_bus, NULL);
+ if (rc < 0) {
+ fprintf (stderr, "%s: failed to process system bus: %s\n",
+ blurb(), strerror(-rc));
+ goto FAIL;
+ }
+ } while (rc > 0);
+
+ do {
+ rc = sd_bus_process (user_bus, NULL);
+ if (rc < 0) {
+ fprintf (stderr, "%s: failed to process user bus: %s\n",
+ blurb(), strerror(-rc));
+ goto FAIL;
+ }
+ } while (rc > 0);
+
+ fds[0].fd = sd_bus_get_fd (system_bus);
+ fds[0].events = sd_bus_get_events (system_bus);
+ fds[0].revents = 0;
+
+ fds[1].fd = sd_bus_get_fd (user_bus);
+ fds[1].events = sd_bus_get_events (user_bus);
+ fds[1].revents = 0;
+
+ sd_bus_get_timeout (system_bus, &system_timeout);
+ sd_bus_get_timeout (user_bus, &user_timeout);
+
+ if (system_timeout == 0 && user_timeout == 0)
+ poll_timeout = 0;
+ else if (system_timeout == UINT64_MAX && user_timeout == UINT64_MAX)
+ poll_timeout = -1;
+ else {
+ poll_timeout = (system_timeout < user_timeout
+ ? system_timeout : user_timeout);
+ poll_timeout /= 1000000;
}
- ctx->bus = bus;
-
- rc = sd_bus_call_method(bus,
- "org.freedesktop.login1",
- "/org/freedesktop/login1",
- "org.freedesktop.login1.Manager",
- "Inhibit",
- &error,
- &reply,
- "ssss",
- "sleep",
- "xscreensaver",
- "lock screen on suspend",
- "delay");
- if (rc < 0) {
- warnx("Failed to call Inhibit(): %s", error.message);
- goto out;
+
+ /* Prune any entries whose process has gone away: this happens if
+ a program inhibits, then exits without having called uninhibit.
+ That would have left us inhibited forever, even if the inhibiting
+ program was re-launched, since the new instance won't have the
+ same cookie. */
+ SLIST_FOREACH (entry, &inhibit_head, entries) {
+ if (entry->pid && /* Might not know this entry's pid, sigh... */
+ pid_dead (entry->pid)) {
+ if (verbose_p)
+ fprintf (stderr,
+ "%s: pid %lu for inhibiting app \"%s\" has died:"
+ " uninhibiting %08X\n",
+ blurb(),
+ (unsigned long) entry->pid,
+ entry->appname,
+ entry->cookie);
+ SLIST_REMOVE (&inhibit_head, entry, inhibit_entry, entries);
+ if (entry->appname) free (entry->appname);
+ free (entry);
+ ctx->is_inhibited--;
+ if (ctx->is_inhibited < 0)
+ ctx->is_inhibited = 0;
+ }
}
- /*
- * Verify that the reply actually contains a lock fd.
+
+
+ /* We want to wake up at least once every N seconds to de-activate
+ the screensaver if we have been inhibited.
*/
- rc = sd_bus_message_read(reply, "h", &fd);
- if (rc < 0) {
- warnx("Failed to read message: %s", strerror(-rc));
- goto out;
- }
- assert(fd >= 0);
- ctx->lock = reply;
+ if (poll_timeout > HEARTBEAT_INTERVAL * 1000)
+ poll_timeout = HEARTBEAT_INTERVAL * 1000;
- rc = sd_bus_add_match(bus, &slot, match, handler, &global_ctx);
+ rc = poll (fds, 2, poll_timeout);
if (rc < 0) {
- warnx("Failed to add match: %s", strerror(-rc));
- goto out;
+ fprintf (stderr, "%s: poll failed: %s\n", blurb(), strerror(-rc));
+ exit (EXIT_FAILURE);
}
- for (;;) {
- rc = sd_bus_process(bus, NULL);
- if (rc < 0) {
- warnx("Failed to process bus: %s", strerror(-rc));
- goto out;
- }
- if (rc > 0)
- /* we processed a request, try to process another one, right-away */
- continue;
-
- /* Wait for the next request to process */
- rc = sd_bus_wait(bus, (uint64_t) -1);
- if (rc < 0) {
- warnx("Failed to wait on bus: %s", strerror(-rc));
- goto out;
+ if (ctx->is_inhibited) {
+ time_t now = time ((time_t *) 0);
+ if (now - last_deactivate_time >= HEARTBEAT_INTERVAL) {
+ if (verbose_p) {
+ SLIST_FOREACH (entry, &inhibit_head, entries) {
+ char ct[100];
+ ctime_r (&entry->start_time, ct);
+ fprintf (stderr, "%s: inhibited by \"%s\" since %s",
+ blurb(), entry->appname, ct);
+ }
}
+ xscreensaver_command ("deactivate");
+ last_deactivate_time = now;
+ }
+ }
+ }
+
+ FAIL:
+ if (system_bus)
+ sd_bus_flush_close_unref (system_bus);
+
+ if (user_bus)
+ sd_bus_flush_close_unref (user_bus);
+
+ sd_bus_error_free (&error);
+
+ return EXIT_FAILURE;
+}
+
+
+static char *usage = "\n\
+usage: %s [-verbose]\n\
+\n\
+This program is launched by the xscreensaver daemon to monitor DBus.\n\
+It invokes 'xscreensaver-command' to tell the xscreensaver daemon to lock\n\
+the screen before the system suspends, e.g., when a laptop's lid is closed.\n\
+\n\
+It also responds to certain messages sent by media players allowing them to\n\
+request that the screen not be blanked during playback.\n\
+\n\
+From XScreenSaver %s, (c) 1991-%s Jamie Zawinski <jwz@jwz.org>.\n";
+
+
+#define USAGE() do { \
+ fprintf (stderr, usage, progname, screensaver_version, year); exit (1); \
+ } while(0)
+
+
+int
+main (int argc, char **argv)
+{
+ int i;
+ char *s;
+ char year[5];
+
+ progname = argv[0];
+ s = strrchr (progname, '/');
+ if (s) progname = s+1;
+
+ screensaver_version = (char *) malloc (5);
+ memcpy (screensaver_version, screensaver_id + 17, 4);
+ screensaver_version [4] = 0;
+
+ s = strchr (screensaver_id, '-');
+ s = strrchr (s, '-');
+ s++;
+ strncpy (year, s, 4);
+ year[4] = 0;
+
+ for (i = 1; i < argc; i++)
+ {
+ const char *s = argv [i];
+ int L;
+ if (s[0] == '-' && s[1] == '-') s++;
+ L = strlen (s);
+ if (L < 2) USAGE ();
+ else if (!strncmp (s, "-verbose", L)) verbose_p = 1;
+ else if (!strncmp (s, "-quiet", L)) verbose_p = 0;
+ else USAGE ();
}
-out:
- if (reply)
- sd_bus_message_unref(reply);
- if (slot)
- sd_bus_slot_unref(slot);
- if (bus)
- sd_bus_flush_close_unref(bus);
- if (user_bus)
- sd_bus_flush_close_unref(user_bus);
- sd_bus_error_free(&error);
-
- return EXIT_FAILURE;
+# undef ya_rand_init
+ ya_rand_init (0);
+
+ exit (xscreensaver_systemd_loop());
}
diff --git a/driver/xscreensaver-text b/driver/xscreensaver-text
index eca1fbf..4b69f49 100755
--- a/driver/xscreensaver-text
+++ b/driver/xscreensaver-text
@@ -1,5 +1,5 @@
#!/usr/bin/perl -w
-# Copyright © 2005-2019 Jamie Zawinski <jwz@jwz.org>
+# Copyright © 2005-2020 Jamie Zawinski <jwz@jwz.org>
#
# Permission to use, copy, modify, distribute, and sell this software and its
# documentation for any purpose is hereby granted without fee, provided that
@@ -37,7 +37,7 @@ use Text::Wrap qw(wrap);
#use bytes; # This breaks shit.
my $progname = $0; $progname =~ s@.*/@@g;
-my ($version) = ('$Revision: 1.48 $' =~ m/\s(\d[.\d]+)\s/s);
+my ($version) = ('$Revision: 1.49 $' =~ m/\s(\d[.\d]+)\s/s);
my $verbose = 0;
my $http_proxy = undef;
@@ -529,8 +529,13 @@ sub reformat_html($$) {
if (!defined($wrap_columns) || $wrap_columns > 0) {
$Text::Wrap::columns = ($wrap_columns || 72);
$Text::Wrap::break = '[\s/|]'; # wrap on slashes for URLs
- $_ = wrap ("", " ", $_); # wrap the lines as a paragraph
- s/[ \t]+$//gm; # lose whitespace at end of line again
+
+ # Text::Wrap sometimes dies with "This shouldn't happen" if columns
+ # is small, but not in any predictable way.
+ eval {
+ $_ = wrap ("", " ", $_); # wrap the lines as a paragraph
+ s/[ \t]+$//gm; # lose whitespace at end of line again
+ };
}
s/^\n+//gs;
@@ -658,8 +663,13 @@ sub reformat_text($) {
print STDERR "$progname: wrapping at $wrap_columns...\n" if ($verbose > 2);
$Text::Wrap::columns = $wrap_columns;
$Text::Wrap::break = '[\s/]'; # wrap on slashes for URLs
- $body = wrap ("", "", $body);
- $body =~ s/[ \t]+$//gm;
+
+ # Text::Wrap sometimes dies with "This shouldn't happen" if columns
+ # is small, but not in any predictable way.
+ eval {
+ $body = wrap ("", "", $body);
+ $body =~ s/[ \t]+$//gm;
+ };
}
if ($truncate_lines) {
@@ -842,13 +852,12 @@ sub main() {
else { usage; }
}
- if ($load_p) {
-
- if (!defined ($cocoa_id)) {
- # see OSX/XScreenSaverView.m
- $cocoa_id = $ENV{XSCREENSAVER_CLASSPATH};
- }
+ if (!defined ($cocoa_id)) {
+ # see OSX/XScreenSaverView.m
+ $cocoa_id = $ENV{XSCREENSAVER_CLASSPATH};
+ }
+ if ($load_p) {
if (defined ($cocoa_id)) {
get_cocoa_prefs($cocoa_id);
} else {
diff --git a/driver/xscreensaver.c b/driver/xscreensaver.c
index b9c54f1..ce39c87 100644
--- a/driver/xscreensaver.c
+++ b/driver/xscreensaver.c
@@ -10,81 +10,155 @@
*/
/* ========================================================================
+ * HOW IT WORKS
+ * ========================================================================
+ *
* First we wait until the keyboard and mouse become idle for the specified
- * amount of time. We do this in one of three different ways: periodically
- * checking with the XIdle server extension; selecting key and mouse events
- * on (nearly) all windows; or by waiting for the MIT-SCREEN-SAVER extension
- * to send us a "you are idle" event.
+ * amount of time. Then, we map one or more full screen black windows.
*
- * Then, we map a full screen black window.
+ * We hold grabs on our override-redirect windows to ensure that user input
+ * does not leak through the screen saver to other applications on the
+ * desktop. If we cannot secure those grabs, we do not blank the screen.
*
- * We place a __SWM_VROOT property on this window, so that newly-started
- * clients will think that this window is a "virtual root" window (as per
- * the logic in the historical "vroot.h" header.)
+ * Creating those windows:
*
- * If there is an existing "virtual root" window (one that already had
- * an __SWM_VROOT property) then we remove that property from that window.
- * Otherwise, clients would see that window (the real virtual root) instead
- * of ours (the impostor.)
+ * - If there are multiple screens, in the X11 sense of "screen", we
+ * create a window for each (the second number in the $DISPLAY
+ * variable, "host:display.screen".)
*
- * Then we pick a random program to run, and start it. Two assumptions
- * are made about this program: that it has been specified with whatever
- * command-line options are necessary to make it run on the root window;
- * and that it has been compiled with vroot.h, so that it is able to find
- * the root window when a virtual-root window manager (or this program) is
- * running.
+ * - On Xinerama/RANDR systems, we create windows covering each physical
+ * monitor, meaning multiple windows on the same virtual desktop.
*
- * Then, we wait for keyboard or mouse events to be generated on the window.
- * When they are, we kill the inferior process, unmap the window, and restore
- * the __SWM_VROOT property to the real virtual root window if there was one.
+ * Then we pick a random program to run, and start it. We assume that it
+ * has been specified with whatever command line arguments are required to
+ * make it render onto the window we have provided. This is most easily
+ * accomplished by simply including the late-2003 version of "vroot.h",
+ * which will find the window via the $XSCREENSAVER_WINDOW environment
+ * variable, or via the __SWM_VROOT property.
*
- * On multi-screen systems, we do the above on each screen, and start
- * multiple programs, each with a different value of $DISPLAY.
+ * Programs must draw onto the window provided. Creating their own window
+ * atop the xscreensaver window does not work.
*
- * On Xinerama systems, we do a similar thing, but instead create multiple
- * windows on the (only) display, and tell the subprocess which one to use
- * via the $XSCREENSAVER_WINDOW environment variable -- this trick requires
- * a recent (Aug 2003) revision of vroot.h.
+ * Then, we wait for keyboard or mouse events to be generated on our
+ * windows. When they are, we kill the inferior process, unmap the
+ * windows, and restore the __SWM_VROOT property to the real virtual root
+ * window if there was one.
*
- * (See comments in screens.c for more details about Xinerama/RANDR stuff.)
+ * Do not ever kill XScreenSaver with signal 9 -- that can lead to the
+ * __SWM_VROOT property not being restored, and that will screw up your
+ * window manager. Rather than "kill", use "xscreensaver-command -exit"
+ * instead.
*
* While we are waiting for user activity, we also set up timers so that,
* after a certain amount of time has passed, we can start a different
* screenhack. We do this by killing the running child process with
* SIGTERM, and then starting a new one in the same way.
*
- * If there was a real virtual root, meaning that we removed the __SWM_VROOT
- * property from it, meaning we must (absolutely must) restore it before we
- * exit, then we set up signal handlers for most signals (SIGINT, SIGTERM,
- * etc.) that do this. Most Xlib and Xt routines are not reentrant, so it
- * is not generally safe to call them from signal handlers; however, this
- * program spends most of its time waiting, so the window of opportunity
- * when code could be called reentrantly is fairly small; and also, the worst
- * that could happen is that the call would fail. If we've gotten one of
- * these signals, then we're on our way out anyway. If we didn't restore the
- * __SWM_VROOT property, that would be very bad, so it's worth a shot. Note
- * that this means that, if you're using a virtual-root window manager, you
- * can really fuck up the world by killing this process with "kill -9".
- *
* This program accepts ClientMessages of type SCREENSAVER; these messages
- * may contain the atoms ACTIVATE, DEACTIVATE, etc, meaning to turn the
- * screensaver on or off now, regardless of the idleness of the user,
- * and a few other things. The included "xscreensaver-command" program
- * sends these messsages.
+ * may contain the atoms ACTIVATE, DEACTIVATE, etc. The included
+ * "xscreensaver-command" program sends these messsages.
+ *
+ *
+ * ========================================================================
+ * ABOUT SERVER EXTENSIONS
+ * ========================================================================
+ *
+ * Over the decades, there have been three X11 server extensions that are
+ * applicable to screen saving:
+ *
+ * - XIdle
+ *
+ * This extension provided a function to poll the user's idle time.
+ * It was simple and direct and worked great. Therefore, it was
+ * removed from the X11 distribution in 1994, with the release of
+ * X11R6. https://bugs.freedesktop.org/show_bug.cgi?id=1419
+ *
+ * - SGI SCREEN_SAVER
+ *
+ * This extension sent two new events: "user is idle", and "user
+ * is no longer idle". It was simple and direct and worked great.
+ * But as the name implies, it only ever worked on Silicon
+ * Graphics machines. SGI became irrelevant around 1998 and went
+ * out of business in 2009.
+ *
+ * - MIT-SCREEN-SAVER
+ *
+ * This extension still exists, but it is useless to us. It takes
+ * the following approach:
+ *
+ * - When the user is idle, immediately map full screen black
+ * windows on each screen.
+ *
+ * - Inform the screen saver client that the screen is now black.
+ *
+ * - When user activity occurs, unmap the windows and then
+ * inform the screen saver client.
+ *
+ * The screen saver client can specify a few parameters of that
+ * window, like visual and depth, but that's it.
+ *
+ * The extension is designed with the assumption that a screen saver
+ * would render onto the provided window. However:
+ *
+ * - OpenGL programs may require different visuals than 2D X11
+ * programs, and you can't change the visual of a window after it
+ * has been created.
+ *
+ * - The extension maps one window per X11 "Screen", which, in this
+ * modern world, tend to span the entire virtual desktop; whereas
+ * XScreenSaver runs savers full screen on each *monitor* instead.
+ * In other words, it is incompatible with Xinerama / RANDR.
+ *
+ * - Since this extension maps its own full-screen black windows and
+ * informs us of that after the fact, it prevents the "fade/unfade"
+ * animations from working properly.
+ *
+ * - Since it only tells us when the user is idle or non-idle, it
+ * prevents the "hysteresis" option from working properly (where
+ * we ignore tiny mouse motions).
+ *
+ * In summary, it creates its windows too early, removes them too late,
+ * creates windows of the wrong quantity and wrong shape, cannot create
+ * them with the proper visuals, and delivers too little information
+ * about what caused the user activity.
+ *
+ * Also my experience was that the MIT-SCREEN-SAVER extension was flaky,
+ * and using it at all led to frequent server crashes.
*
- * If we don't have the XIdle, MIT-SCREEN-SAVER, or SGI SCREEN_SAVER
- * extensions, then we do the XAutoLock trick: notice every window that
- * gets created, and wait 30 seconds or so until its creating process has
- * settled down, and then select KeyPress events on those windows which
- * already select for KeyPress events. It's important that we not select
- * KeyPress on windows which don't select them, because that would
- * interfere with event propagation. This will break if any program
- * changes its event mask to contain KeyRelease or PointerMotion more than
- * 30 seconds after creating the window, but such programs do not seem to
- * occur in nature (I've never seen it happen in all these years.)
+ * So that's why, even if the server supports the MIT-SCREEN-SAVER
+ * extension, we don't use it.
*
- * The reason that we can't select KeyPresses on windows that don't have
- * them already is that, when dispatching a KeyPress event, X finds the
+ * There is a recent trend among those who hack on video players to
+ * say, "We inhibit blanking by calling XResetScreenSaver and/or
+ * XScreenSaverSuspend, so our work here is done, fuck off." This
+ * betrays a willful ignorance of why the MIT-SCREEN-SAVER extension
+ * is a useless foundation upon which to build a screen saver or
+ * screen locker.
+ *
+ * The proper way to inhibit blanking while video is playing is to
+ * run "xscreensaver-command -deactivate" once a minute while the
+ * video is playing, as has been explained in the XScreenSaver FAQ
+ * for 3 decades: https://www.jwz.org/xscreensaver/faq.html#dvd
+ *
+ * The reason to do it as a heartbeat is so that your video player
+ * fails SAFE. Should the player exit abnormally, or freeze, the
+ * heartbeat stops coming, and screen blanking and locking can resume.
+ *
+ *
+ * ========================================================================
+ * WITHOUT SERVER EXTENSIONS
+ * ========================================================================
+ *
+ * So. Having established that there no longer exist any server extensions
+ * that help us in any way, here's how idle detection ACTUALLY works:
+ *
+ * XScreenSaver notices every window that gets created, wait 30 seconds or
+ * so until its birth pangs have settled down, and then select KeyPress
+ * events on those windows.
+ *
+ * Actually it only selects KeyPress events on windows that already selected
+ * for their own KeyPress events, because to do otherwise would interfere
+ * with event propagation. When dispatching a KeyPress event, X finds the
* lowest (leafmost) window in the hierarchy on which *any* client selects
* for KeyPress, and sends the event to that window. This means that if a
* client had a window with subwindows, and expected to receive KeyPress
@@ -94,7 +168,7 @@
* another client malfunction in this way.
*
* But here's a new kink that started showing up in late 2014: GNOME programs
- * don't actually select for or receive KeyPress events! They do it behind
+ * don't actually select for or receive KeyPress events! They do it behind
* the scenes through some kind of Input Method magic, even when running in
* an en_US locale. However, in that case, those applications *do* seem to
* update the _NET_WM_USER_TIME on their own windows every time they have
@@ -103,44 +177,44 @@
*
* To detect mouse motion, we periodically wake up and poll the mouse
* position and button/modifier state, and notice when something has
- * changed. We make this check every five seconds by default, and since the
- * screensaver timeout has a granularity of one minute, this makes the
+ * changed. We make this check every five seconds by default, and since
+ * the screensaver timeout has a granularity of one minute, this makes the
* chance of a false positive very small. We could detect mouse motion in
* the same way as keyboard activity, but that would suffer from the same
* "client changing event mask" problem that the KeyPress events hack does.
- * I think polling is more reliable.
+ * Polling is more reliable.
+ *
+ * Also, because cats, trucks and earthquakes are things that exist, we
+ * ignore any mouse motions smaller than 10px by default.
*
- * On systems with /proc/interrupts (Linux) we poll that file and note when
+ * On Linux systems with /proc/interrupts we poll that file and note when
* the interrupt counter numbers on the "keyboard" and "PS/2" lines change.
- * (There is no reliable way, using /proc/interrupts, to detect non-PS/2
- * mice, so it doesn't help for serial or USB mice.)
+ * That was helpful for a decade or so, but then PS/2 devices went out of
+ * fashion, and there is no reliable way, using /proc/interrupts, to detect
+ * activity on USB keyboards or mice. Oh well.
+ *
*
- * None of this crap happens if we're using one of the extensions. Sadly,
- * the XIdle extension hasn't been available for many years; the SGI
- * extension only exists on SGIs; and the MIT extension, while widely
- * deployed, is garbage in several ways.
+ * ========================================================================
+ * DEBUGGING HINTS
+ * ========================================================================
*
- * A third idle-detection option could be implemented (but is not): when
- * running on the console display ($DISPLAY is `localhost`:0) and we're on a
- * machine where /dev/tty and /dev/mouse have reasonable last-modification
- * times, we could just stat() those. But the incremental benefit of
- * implementing this is really small, so forget I said anything.
+ * - Have a second terminal handy, e.g. a Ctrl-Alt-F1 console. If you
+ * are running xscreensaver under a debugger, it might be helpful to
+ * run it from that other console, not from a terminal window within
+ * the same X11 session. That runs the risk of stopping at a
+ * breakpoint while the screen is blanked and the keyboard is grabbed.
*
- * Debugging hints:
- * - Have a second terminal handy.
- * - Be careful where you set your breakpoints, you don't want this to
- * stop under the debugger with the keyboard grabbed or the blackout
- * window exposed.
- * - If you run your debugger under XEmacs, try M-ESC (x-grab-keyboard)
- * to keep your emacs window alive even when xscreensaver has grabbed.
* - Go read the code related to `debug_p'.
+ *
* - You probably can't set breakpoints in functions that are called on
* the other side of a call to fork() -- if your subprocesses are
- * dying with signal 5, Trace/BPT Trap, you're losing in this way.
- * - If you aren't using a server extension, don't leave this stopped
- * under the debugger for very long, or the X input buffer will get
- * huge because of the keypress events it's selecting for. This can
- * make your X server wedge with "no more input buffers."
+ * dying with signal 5 Trace/BPT Trap, you're losing in this way.
+ *
+ * - Don't leave this stopped under the debugger for very long, or the
+ * X input buffer will get huge with un-read KeyPress events. This
+ * can make your X server hang with "no more input buffers."
+ *
+ * - Writing a new screen saver? See the README.hacking file.
*
* ======================================================================== */
@@ -418,10 +492,10 @@ saver_ehandler (Display *dpy, XErrorEvent *error)
"#######################################################################\n"
"\n"
" If at all possible, please re-run xscreensaver with the command\n"
- " line arguments `-sync -verbose -log log.txt', and reproduce this\n"
- " bug. That will cause xscreensaver to dump a `core' file to the\n"
- " current directory. Please include the stack trace from that core\n"
- " file in your bug report. *DO NOT* mail the core file itself! That\n"
+ " line arguments \"-sync -log log.txt\", and reproduce this bug.\n"
+ " That will cause xscreensaver to dump a `core' file to the current\n"
+ " directory. Please include the stack trace from that core file\n"
+ " in your bug report. *DO NOT* mail the core file itself! That\n"
" won't work. A \"log.txt\" file will also be written. Please *do*\n"
" include the complete \"log.txt\" file with your bug report.\n"
"\n"
@@ -1314,6 +1388,7 @@ main_loop (saver_info *si)
p->dpms_enabled_p &&
p->dpms_quickoff_p)
{
+ /* Sync again just in case */
sync_server_dpms_settings (si->dpy, True,
p->dpms_quickoff_p,
p->dpms_standby / 1000,
@@ -1431,6 +1506,24 @@ main_loop (saver_info *si)
si->cycle_id = 0;
cycle_timer ((XtPointer) si, 0);
}
+
+ /* If we are blanking only, optionally power down monitor
+ right now: quickoff means power down monitor again as soon
+ as unlock dialog is dismissed without unlocking. */
+ if (!ok_to_unblank &&
+ p->mode == BLANK_ONLY &&
+ p->dpms_enabled_p &&
+ p->dpms_quickoff_p)
+ {
+ /* Sync again just in case */
+ sync_server_dpms_settings (si->dpy, True,
+ p->dpms_quickoff_p,
+ p->dpms_standby / 1000,
+ p->dpms_suspend / 1000,
+ p->dpms_off / 1000,
+ False);
+ monitor_power_on (si, False);
+ }
}
#endif /* !NO_LOCKING */
@@ -1496,6 +1589,7 @@ main (int argc, char **argv)
saver_info *si = &the_si;
saver_preferences *p = &si->prefs;
struct passwd *spasswd;
+ Bool inhibit_stderr_capture_p = False;
int i;
/* It turns out that if we do setlocale (LC_ALL, "") here, people
@@ -1554,10 +1648,14 @@ main (int argc, char **argv)
shell = connect_to_server (si, &argc, argv);
process_command_line (si, &argc, argv);
- stderr_log_file (si);
+ inhibit_stderr_capture_p = stderr_log_file (si);
print_banner (si);
load_init_file(si->dpy, p); /* must be before initialize_per_screen_info() */
+
+ if (inhibit_stderr_capture_p && !p->verbose_p)
+ p->verbose_p = 1; /* "-log" implies "-verbose -no-capture-stderr" */
+
blurb_timestamp_p = p->timestamp_p; /* kludge */
initialize_per_screen_info (si, shell); /* also sets si->fading_possible_p */
@@ -1601,13 +1699,18 @@ main (int argc, char **argv)
p->dpms_off / 1000,
False);
- initialize_stderr (si);
+ initialize_stderr (si, inhibit_stderr_capture_p);
handle_signals (si);
store_saver_status (si); /* for xscreensaver-command -status */
# ifdef HAVE_LIBSYSTEMD /* Launch it in the background */
- si->systemd_pid = fork_and_exec_1 (si, 0, "xscreensaver-systemd");
+ {
+ const char *cmd = (p->verbose_p
+ ? "xscreensaver-systemd -verbose"
+ : "xscreensaver-systemd");
+ si->systemd_pid = fork_and_exec_1 (si, 0, cmd);
+ }
# endif
make_splash_dialog (si);
@@ -1691,7 +1794,7 @@ XGetAtomName_safe (Display *dpy, Atom atom)
}
-static void
+void
clientmessage_response (saver_info *si, Window w, Bool error,
const char *stderr_msg,
const char *protocol_msg)
diff --git a/driver/xscreensaver.h b/driver/xscreensaver.h
index fe84d20..9bd2e3d 100644
--- a/driver/xscreensaver.h
+++ b/driver/xscreensaver.h
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 1993-2019 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 1993-2020 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -141,6 +141,10 @@ extern void schedule_wakeup_event (saver_info *si, Time when, Bool verbose_p);
extern Bool handle_clientmessage (saver_info *, XEvent *, Bool);
extern void maybe_reload_init_file (saver_info *);
+extern void clientmessage_response (saver_info *, Window, Bool error,
+ const char *stderr_msg,
+ const char *protocol_msg);
+
/* =======================================================================
subprocs
@@ -176,8 +180,8 @@ extern const char *signal_name (int signal);
extern FILE *real_stderr;
extern FILE *real_stdout;
-extern void stderr_log_file (saver_info *si);
-extern void initialize_stderr (saver_info *si);
+extern Bool stderr_log_file (saver_info *si);
+extern void initialize_stderr (saver_info *si, Bool inhibit_p);
extern void reset_stderr (saver_screen_info *ssi);
extern void clear_stderr (saver_screen_info *ssi);
extern void shutdown_stderr (saver_info *si);
diff --git a/driver/xscreensaver.man b/driver/xscreensaver.man
index 0679ff4..3b599fb 100644
--- a/driver/xscreensaver.man
+++ b/driver/xscreensaver.man
@@ -201,8 +201,10 @@ or possibly
.EX
sudo dpkg -P gnome-screensaver
.EE
+Be careful that it doesn't try to uninstall all of GNOME.
.TP 3
\fB2: Launch xscreensaver at login.\fP
+
Select "\fIStartup Applications\fP" from the menu (or manually
launch "\fIgnome-session-properties\fP") and add "\fIxscreensaver\fP".
@@ -222,11 +224,18 @@ Keep reinventing that wheel, guys! (If you have figured out how to
replace Unity's locking "feature" with xscreensaver, let me know.)
.TP 3
\fB4: Turn off Unity's built-in blanking.\fP
+
Open "\fISystem Settings / Brightness & Lock\fP";
.br
Un-check "\fIStart Automatically\fP";
.br
Set \fI"Turn screen off when inactive for"\fP to \fI"Never".\fP
+.br
+Or possibly that has been randomly renamed again:
+.br
+Set "\fISettings / Power / Power Settings\fP" to \fI"Never".\fP
+.TP 3
+\fB5: Log out and back in again.
.SH USING KDE
Like GNOME, KDE also decided to invent their own screen saver framework
from scratch instead of simply using xscreensaver. To replace the KDE
@@ -303,6 +312,7 @@ containing:
Description=XScreenSaver
[Service]
ExecStart=/usr/bin/xscreensaver
+Restart=always
[Install]
WantedBy=default.target
.EE
@@ -1027,7 +1037,7 @@ and a FAQ can always be found at https://www.jwz.org/xscreensaver/
.BR xscreensaver\-getimage (1),
.BR xscreensaver\-text (1).
.SH COPYRIGHT
-Copyright \(co 1991-2019 by Jamie Zawinski.
+Copyright \(co 1991-2020 by Jamie Zawinski.
Permission to use, copy, modify, distribute, and sell this software
and its documentation for any purpose is hereby granted without fee,
provided that the above copyright notice appear in all copies and that
diff --git a/driver/xset.c b/driver/xset.c
index a381429..afb4438 100644
--- a/driver/xset.c
+++ b/driver/xset.c
@@ -35,7 +35,9 @@ ERROR! You must not include vroot.h in this file.
#endif
-/* MIT SCREEN-SAVER server extension hackery.
+/* MIT SCREEN-SAVER server extension.
+ * See the very long comment at the top of xscreensaver.c for why the
+ * MIT-SCREEN-SAVER extension is garbage and should not be used.
*/
#ifdef HAVE_MIT_SAVER_EXTENSION
diff --git a/intltool-update.in b/intltool-update.in
deleted file mode 100644
index 2eae87b..0000000
--- a/intltool-update.in
+++ /dev/null
@@ -1,613 +0,0 @@
-#!@INTLTOOL_PERL@ -w
-
-#
-# The Intltool Message Updater
-#
-# Copyright (C) 2000-2002 Free Software Foundation.
-#
-# Intltool is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# version 2 published by the Free Software Foundation.
-#
-# Intltool is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-#
-# Authors: Kenneth Christiansen <kenneth@gnu.org>
-# Maciej Stachowiak
-# Darin Adler <darin@bentspoon.com>
-
-## Release information
-my $PROGRAM = "intltool-update";
-my $VERSION = "0.18";
-my $PACKAGE = "intltool";
-
-## Loaded modules
-use strict;
-use Getopt::Long;
-use Cwd;
-use File::Copy;
-use File::Find;
-
-## Scalars used by the option stuff
-my $HELP_ARG = 0;
-my $VERSION_ARG = 0;
-my $DIST_ARG = 0;
-my $POT_ARG = 0;
-my $HEADERS_ARG = 0;
-my $MAINTAIN_ARG = 0;
-my $REPORT_ARG = 0;
-my $VERBOSE = 0;
-my $GETTEXT_PACKAGE = "";
-
-my @languages;
-my %po_files_by_lang = ();
-
-# Regular expressions to categorize file types.
-# FIXME: Please check if the following is correct
-
-my $xml_extension =
-"xml(\.in)*|". # .in is not required
-"ui|".
-"glade2?(\.in)*|". # .in is not required
-"scm(\.in)*|". # .in is not required
-"oaf(\.in)+|".
-"etspec|".
-"sheet(\.in)+|".
-"pong(\.in)+";
-
-my $ini_extension =
-"desktop(\.in)+|".
-"caves(\.in)+|".
-"directory(\.in)+|".
-"soundlist(\.in)+|".
-"keys(\.in)+|".
-"server(\.in)+";
-
-## Always print as the first thing
-$| = 1;
-
-## Handle options
-GetOptions
-(
- "help" => \$HELP_ARG,
- "version" => \$VERSION_ARG,
- "dist|d" => \$DIST_ARG,
- "pot|p" => \$POT_ARG,
- "headers|s" => \$HEADERS_ARG,
- "maintain|m" => \$MAINTAIN_ARG,
- "report|r" => \$REPORT_ARG,
- "verbose|x" => \$VERBOSE,
- "gettext-package|g=s" => \$GETTEXT_PACKAGE,
- ) or &print_error_invalid_option;
-
-&print_help if $HELP_ARG;
-&print_version if $VERSION_ARG;
-
-my $arg_count = ($DIST_ARG > 0)
- + ($POT_ARG > 0)
- + ($HEADERS_ARG > 0)
- + ($MAINTAIN_ARG > 0)
- + ($REPORT_ARG > 0);
-&print_help if $arg_count > 1;
-
-# --version and --help don't require a module name
-my $MODULE = $GETTEXT_PACKAGE || &find_package_name;
-
-if ($DIST_ARG) {
- if ($ARGV[0] =~ /^[a-z]/){
- &update_po_file ($ARGV[0]);
- &print_status ($ARGV[0]);
- } else {
- &print_help;
- }
-} elsif ($POT_ARG) {
- &generate_headers;
- &generate_po_template;
-} elsif ($HEADERS_ARG) {
- &generate_headers;
-} elsif ($MAINTAIN_ARG) {
- &find_leftout_files;
-} elsif ($REPORT_ARG) {
- &print_report;
-} else {
- if ($ARGV[0] =~ /^[a-z]/) {
- &main ($ARGV[0]);
- } else {
- &print_help;
- }
-}
-
-exit;
-
-#########
-
-sub print_version
-{
- ## Print version information
- print "${PROGRAM} (${PACKAGE}) $VERSION\n";
- print "Written by Kenneth Christiansen, Maciej Stachowiak, and Darin Adler.\n\n";
- print "Copyright (C) 2000-2002 Free Software Foundation, Inc.\n";
- print "This is free software; see the source for copying conditions. There is NO\n";
- print "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n";
- exit;
-}
-
-sub print_help
-{
- ## Print usage information
- print "Usage: ${PROGRAM} [OPTIONS] ...LANGCODE\n";
- print "Updates PO template files and merge them with the translations.\n\n";
- print " -p, --pot generate the PO template only\n";
- print " -s, --headers generate the header files in POTFILES.in\n";
- print " -m, --maintain search for left out files from POTFILES.in\n";
- print " -r, --report display a status report for the module.\n";
- print " -x, --verbose display lots of feedback\n";
- print " --help display this help and exit\n";
- print " --version output version information and exit\n";
- print "\nExamples of use:\n";
- print "${PROGRAM} --pot just creates a new PO template from the source\n";
- print "${PROGRAM} da created new PO template and updated the da.po file\n\n";
- print "Report bugs to bugzilla.gnome.org, module 'intltool'.\n";
- exit;
-}
-
-sub main
-{
- my ($lang) = @_;
-
- ## Report error if the language file supplied
- ## to the command line is non-existent
- &print_error_not_existing("$lang.po") if ! -s "$lang.po";
-
- print "Working, please wait..." unless $VERBOSE;
- &generate_headers;
- &generate_po_template;
- &update_po_file ($lang);
- &print_status ($lang);
-}
-
-sub determine_type ($)
-{
- my $type = $_;
- my $gettext_type;
-
- # FIXME: Use $xml_extentions, and maybe do all this even nicer
- my $xml_regex =
- "(?:xml(\.in)*|ui|oaf(?:\.in)+|server(?:\.in)+|sheet(?:\.in)+|".
- "pong(?:\.in)+|etspec)";
- my $ini_regex =
- "(?:desktop(?:\.in)+|caves(?:\.in)+|directory(?:\.in)+|".
- "soundlist(?:\.in)+)";
-
- if ($type =~ /\[type: gettext\/([^\]].*)]/) {
- $gettext_type=$1;
- }
- elsif ($type =~ /$xml_regex$/) {
- $gettext_type="xml";
- }
- elsif ($type =~ /glade2?(\.in)*$/) {
- $gettext_type="glade";
- }
- elsif ($type =~ /$ini_regex$/) {
- $gettext_type="ini";
- }
- elsif ($type =~ /scm(\.in)*$/) {
- $gettext_type="scheme";
- }
- elsif ($type =~ /keys(\.in)+$/) {
- $gettext_type="keys";
- }
- else { $gettext_type=""; }
-
- return "gettext\/$gettext_type";
-}
-
-sub find_leftout_files
-{
- my (@buf_i18n_plain,
- @buf_i18n_xml,
- @buf_i18n_ini,
- @buf_potfiles,
- @buf_potfiles_ignore,
- @buf_allfiles,
- @buf_allfiles_sorted,
- @buf_potfiles_sorted
- );
-
- ## Search and find all translatable files
- find sub {
- push @buf_i18n_plain, "$File::Find::name" if /\.(c|y|cc|cpp|c\+\+|h|gob)$/
- }, "..";
- find sub {
- push @buf_i18n_xml, "$File::Find::name" if /\.($xml_extension)$/
- }, "..";
- find sub {
- push @buf_i18n_ini, "$File::Find::name" if /\.($ini_extension)$/
- }, "..";
-
- open POTFILES, "POTFILES.in" || die "$PROGRAM: there's no POTFILES.in!\n";
-
- @buf_potfiles = grep /^[^#]/, <POTFILES>;
-
- print "Searching for missing translatable files...\n" if $VERBOSE;
-
- ## Check if we should ignore some found files, when
- ## comparing with POTFILES.in
- foreach my $ignore ("POTFILES.skip", "POTFILES.ignore") {
- if (-s $ignore) {
- open FILE, $ignore;
- while (<FILE>) {
- if (/^[^#]/){
- push @buf_potfiles_ignore, $_;
- }
- }
- print "Found $ignore: Ignoring files...\n" if $VERBOSE;
- @buf_potfiles = (@buf_potfiles_ignore, @buf_potfiles);
- }
- }
-
- foreach my $file (@buf_i18n_plain)
- {
- my $in_comment = 0;
- my $in_macro = 0;
-
- open FILE, "<$file";
- while (<FILE>)
- {
- # Handle continued multi-line comment.
- if ($in_comment)
- {
- next unless s-.*\*/--;
- $in_comment = 0;
- }
-
- # Handle continued macro.
- if ($in_macro)
- {
- $in_macro = 0 unless /\\$/;
- next;
- }
-
- # Handle start of macro (or any preprocessor directive).
- if (/^\s*\#/)
- {
- $in_macro = 1 if /^([^\\]|\\.)*\\$/;
- next;
- }
-
- # Handle comments and quoted text.
- while (m-(/\*|//|\'|\")-) # \' and \" keep emacs perl mode happy
- {
- my $match = $1;
- if ($match eq "/*")
- {
- if (!s-/\*.*?\*/--)
- {
- s-/\*.*--;
- $in_comment = 1;
- }
- }
- elsif ($match eq "//")
- {
- s-//.*--;
- }
- else # ' or "
- {
- if (!s-$match([^\\]|\\.)*?$match-QUOTEDTEXT-)
- {
- warn "mismatched quotes at line $. in $file\n";
- s-$match.*--;
- }
- }
- }
-
-
- if (/_\(QUOTEDTEXT/)
- {
- ## Remove the first 3 chars and add newline
- push @buf_allfiles, unpack("x3 A*", $file) . "\n";
- last;
- }
- }
- close FILE;
- }
-
- foreach my $file (@buf_i18n_xml) {
- open FILE, "<$file";
- while (<FILE>) {
- if (/\s_(.*)=\"/){
- push @buf_allfiles, unpack("x3 A*", $file) . "\n";
- last;
- }
- }
- }
-
- foreach my $file (@buf_i18n_ini){
- open FILE, "<$file";
- while (<FILE>) {
- if (/_(.*)=/){
- push @buf_allfiles, unpack("x3 A*", $file) . "\n";
- last;
- }
- }
- }
-
- @buf_allfiles_sorted = sort (@buf_allfiles);
- @buf_potfiles_sorted = sort (@buf_potfiles);
-
- my %in2;
- foreach (@buf_potfiles_sorted) {
- $in2{$_} = 1;
- }
-
- my @result;
-
- foreach (@buf_allfiles_sorted){
- if (!exists($in2{$_})){
- push @result, $_
- }
- }
-
- ## Save file with information about the files missing
- ## if any, and give information about this procedure.
- if (@result) {
- print "\n" if $VERBOSE;
- open OUT, ">missing";
- print OUT @result;
- print "The following files contain translations and are currently not in use. Please\n";
- print "consider adding these to the POTFILES.in file, located in the po/ directory.\n\n";
- print @result, "\n";
- print "If some of these files are left out on purpose then please add them to\n";
- print "POTFILES.skip instead of POTFILES.in. A file 'missing' containing this list\n";
- print "of left out files has been written in the current directory.\n";
- }
-
- ## If there is nothing to complain about, notify the user
- else {
- print "\nAll files containing translations are present in POTFILES.in.\n";
- }
-}
-
-sub print_error_invalid_option
-{
- ## Handle invalid arguments
- print "Try `${PROGRAM} --help' for more information.\n";
- exit 1;
-}
-
-sub generate_headers
-{
- my $EXTRACT = `which intltool-extract 2>/dev/null`;
- chomp $EXTRACT;
-
- $EXTRACT = $ENV{"INTLTOOL_EXTRACT"} if $ENV{"INTLTOOL_EXTRACT"};
-
- ## Generate the .h header files, so we can allow glade and
- ## xml translation support
- if (! -s $EXTRACT)
- {
- print "\n *** The intltool-extract script wasn't found!"
- ."\n *** Without it, intltool-update can not generate files.\n";
- exit;
- }
- else
- {
- open FILE, "<POTFILES.in";
- while (<FILE>) {
- chomp;
-
- ## Find xml files in POTFILES.in and generate the
- ## files with help from the extract script
-
- my $gettext_type= &determine_type ($1);
-
- if (/\.($xml_extension|$ini_extension)$/ || /^\[/){
- $_ =~ s/^\[[^\[].*]\s*//;
- my $filename = "../$_";
- my $srcdir = $ENV{'top_srcdir'};
- if ($srcdir){
- $filename="$srcdir/$_" ;
- };
-
- if ($VERBOSE){
- system($EXTRACT, "--update", "--type=$gettext_type", $filename);
- } else {
- system($EXTRACT, "--update", "--type=$gettext_type", "--quiet", $filename);
- }
- }
- }
- close FILE;
- }
-}
-
-sub generate_po_template
-{
- ## Generate the potfiles from the POTFILES.in file
-
- print "Building the $MODULE.pot...\n" if $VERBOSE;
-
- move ("POTFILES.in", "POTFILES.in.old");
-
- my $srcdir = $ENV{'top_srcdir'};
- my $adddirectory = "--directory=." ;
- if ($srcdir){
- $adddirectory = "--directory=$srcdir";
- }
-
- open INFILE, "<POTFILES.in.old";
- open OUTFILE, ">POTFILES.in";
- while (<INFILE>) {
- s/\.($xml_extension|$ini_extension)$/$&.h/;
- s/^\[.*]\s*(.*)/$1.h/;
- print OUTFILE $_;
- }
- close OUTFILE;
- close INFILE;
-
- system ("xgettext", "--default-domain\=$MODULE",
- "--directory\=\.\.",
- "$adddirectory" ,
- "--add-comments",
- "--keyword\=\_",
- "--keyword\=N\_",
- "--keyword\=U\_",
- "--files-from\=\.\/POTFILES\.in");
-
- if (!-e "$MODULE.po") {
- print "WARNING: It seems that none of the files in POTFILES.in ".
- "contain marked strings\n";
- exit (1);
- }
-
- system ("rm", "-f", "$MODULE.pot");
- move ("$MODULE.po", "$MODULE.pot") || die "$PROGRAM: couldn't move $MODULE.po to $MODULE.pot.\n";
-
- print "Wrote $MODULE.pot\n" if $VERBOSE;
-
- move ("POTFILES.in.old", "POTFILES.in");
-
- print "Removing generated header (.h) files..." if $VERBOSE;
-
- open FILE, "<POTFILES.in";
-
- while (<FILE>)
- {
- chomp;
- unlink "../$_.h" if /\.($xml_extension|$ini_extension)$/;
- }
-
- close FILE;
- print "done\n" if $VERBOSE;
-}
-
-sub update_po_file
-{
- my ($lang) = @_;
-
- print "Merging $lang.po with $MODULE.pot..." if $VERBOSE;
-
- copy ("$lang.po", "$lang.po.old") || die "copy failed: $!";
-
- # Perform merge, remove backup file and the "messages" trash file
- # generated by gettext
- system ("msgmerge", "$lang.po.old", "$MODULE.pot", "-o", "$lang.po");
- unlink "$lang.po.old";
- unlink "messages";
-}
-
-sub print_error_not_existing
-{
- my ($file) = @_;
-
- ## Report error if supplied language file is non-existing
- print "$PROGRAM: $file does not exist!\n";
- print "Try '$PROGRAM --help' for more information.\n";
- exit;
-}
-
-sub gather_po_files
-{
- my @po_files = glob ("./*.po");
-
- @languages = map (&po_file2lang, @po_files);
-
- foreach my $lang (@languages) {
- $po_files_by_lang{$lang} = shift (@po_files);
- }
-}
-
-sub po_file2lang ($)
-{
- my $tmp = $_;
- $tmp =~ s/^.*\/(.*)\.po$/$1/;
- return $tmp;
-}
-
-sub print_status
-{
- my ($lang) = @_;
-
- system ("msgfmt", "--statistics", "$lang.po");
- print "\n";
-}
-
-sub print_report
-{
- &generate_headers;
- &generate_po_template;
- &gather_po_files;
-
- foreach my $lang (@languages) {
- print "$lang: ";
- &update_po_file ($lang);
- }
-
- print "\n\n * Current translation support in $MODULE \n\n";
-
- foreach my $lang (@languages){
- print "$lang: ";
- system ("msgfmt", "--statistics", "$lang.po");
- }
-}
-
-sub find_package_name
-{
- my $base_dirname = getcwd();
- $base_dirname =~ s@.*/@@;
-
- my ($conf_in, $src_dir);
-
- if ($base_dirname =~ /^po(-.+)?$/) {
- if (-f "../configure.in") {
- $conf_in = "../configure.in";
- } else {
- my $makefile_source;
- local (*IN);
- open IN, "<Makefile" || die "can't open Makefile: $!";
-
- while (<IN>) {
- if (/^top_srcdir[ \t]*=/) {
- $src_dir = $_;
- # print "${src_dir}\n";
-
- $src_dir =~ s/^top_srcdir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/;
- # print "${src_dir}\n";
- chomp $src_dir;
- $conf_in = "$src_dir" . "/configure.in" . "\n";
- last;
- }
- }
- $conf_in || die "Cannot find top_srcdir in Makefile."
- }
-
- my $conf_source; {
- local (*IN);
- local $/; # slurp mode
- open (IN, "<$conf_in") || die "can't open $conf_in: $!";
- $conf_source = <IN>;
- }
-
- my $name = "";
- $name = $1 if $conf_source =~ /^AM_INIT_AUTOMAKE\(([^,\)]+)/m;
- $name = $1 if $conf_source =~ /^GETTEXT_PACKAGE=(\S+)/m;
- if ($name =~ /^[\$](\S+)/) {
- return $1 if $conf_source =~ /^\s*$1=(\S*)/m;
- }
- return $name if $name;
- }
-
- print "$PROGRAM: Unable to determine package name.\n" .
- "Make sure to run this script inside the po directory.\n";
- exit;
-}
diff --git a/jwxyz/jwxyz-cocoa.h b/jwxyz/jwxyz-cocoa.h
index 5f2f61c..28f08b7 100644
--- a/jwxyz/jwxyz-cocoa.h
+++ b/jwxyz/jwxyz-cocoa.h
@@ -14,7 +14,7 @@
#import "XScreenSaverView.h"
-#ifdef USE_IPHONE
+#ifdef HAVE_IPHONE
# import <UIKit/UIKit.h>
# define NSView UIView
# define NSOpenGLContext EAGLContext
@@ -55,10 +55,10 @@ struct jwxyz_Drawable {
get leaked if a Pixmap CFRetains this.
*/
NSOpenGLContext *ogl_ctx; // OpenGL rendering context (OS X)
-# ifdef USE_IPHONE
+# ifdef HAVE_IPHONE
// TODO: Also on OS X as extensions.
GLuint gl_framebuffer, gl_renderbuffer;
-# endif // USE_IPHONE
+# endif // HAVE_IPHONE
CGImageRef cgi;
XRectangle frame;
union {
@@ -66,16 +66,16 @@ struct jwxyz_Drawable {
XScreenSaverView *view;
int last_mouse_x, last_mouse_y;
struct jwxyz_Drawable *current_drawable;
-# ifndef USE_IPHONE
+# ifndef HAVE_IPHONE
NSOpenGLPixelFormat *pixfmt;
GLint virtual_screen;
-# else // USE_IPHONE
+# else // HAVE_IPHONE
NSOpenGLContext *ogl_ctx_pixmap;
# endif
} window;
struct {
int depth;
-# ifndef USE_IPHONE
+# ifndef HAVE_IPHONE
NSOpenGLPixelBuffer *gl_pbuffer;
// GLuint blit_texture; // TODO: For blitting from Pbuffers
# endif
@@ -87,11 +87,11 @@ struct jwxyz_Drawable {
extern NSString *nsstring_from(const char *str, size_t len, int utf8_p);
-#ifdef USE_IPHONE
+#ifdef HAVE_IPHONE
extern void create_framebuffer (GLuint *gl_framebuffer,
GLuint *gl_renderbuffer);
extern void check_framebuffer_status (void);
-#endif // USE_IPHONE
+#endif // HAVE_IPHONE
#define jwxyz_window_view(w) ((w)->window.view)
diff --git a/jwxyz/jwxyz-cocoa.m b/jwxyz/jwxyz-cocoa.m
index 13666e7..32a3dba 100644
--- a/jwxyz/jwxyz-cocoa.m
+++ b/jwxyz/jwxyz-cocoa.m
@@ -24,7 +24,7 @@
#include <stdarg.h>
-#ifdef USE_IPHONE
+#ifdef HAVE_IPHONE
# import <OpenGLES/ES1/gl.h>
# import <OpenGLES/ES1/glext.h>
# define NSOpenGLContext EAGLContext
@@ -99,7 +99,7 @@ jwxyz_scale_1 (Window main_window, BOOL fonts_p)
{
float scale = 1;
-# ifdef USE_IPHONE
+# ifdef HAVE_IPHONE
/* Since iOS screens are physically smaller than desktop screens, scale up
the fonts to make them more readable.
@@ -112,12 +112,12 @@ jwxyz_scale_1 (Window main_window, BOOL fonts_p)
if (scale < 1) // iPad Pro magnifies the backbuffer by 3x, which makes text
scale = 1; // excessively blurry in BSOD.
-# else // !USE_IPHONE
+# else // !HAVE_IPHONE
/* Desktop retina displays also need fonts doubled. */
scale = [main_window->window.view hackedContentScaleFactor:fonts_p];
-# endif // !USE_IPHONE
+# endif // !HAVE_IPHONE
return scale;
}
@@ -193,7 +193,7 @@ utf8_metrics (Display *dpy, NSFont *nsfont, NSString *nsstr, XCharStruct *cs)
CGFloat advancement =
CTRunGetTypographicBounds (run, r, &ascent, &descent, &leading);
-# ifndef USE_IPHONE
+# ifndef HAVE_IPHONE
// Only necessary for when LCD smoothing is enabled, which iOS doesn't do.
bbox.origin.x -= 2.0/3.0;
bbox.size.width += 4.0/3.0;
@@ -234,7 +234,7 @@ utf8_metrics (Display *dpy, NSFont *nsfont, NSString *nsstr, XCharStruct *cs)
static NSArray *
font_family_members (NSString *family_name)
{
-# ifndef USE_IPHONE
+# ifndef HAVE_IPHONE
return [[NSFontManager sharedFontManager]
availableMembersOfFontFamily:family_name];
# else
@@ -275,7 +275,7 @@ try_font (NSFontTraitMask traits, NSFontTraitMask mask,
traits & NSFixedPitchFontMask ? JWXYZ_STYLE_MONOSPACE : 0)]);
}
-# ifndef USE_IPHONE
+# ifndef HAVE_IPHONE
for (unsigned k = 0; k != family_members.count; ++k) {
NSArray *member = [family_members objectAtIndex:k];
@@ -308,7 +308,7 @@ try_font (NSFontTraitMask traits, NSFontTraitMask mask,
return f;
}
}
-# else // USE_IPHONE
+# else // HAVE_IPHONE
// This trick needs iOS 3.1, see "Using SDK-Based Development".
Class has_font_descriptor = [UIFontDescriptor class];
@@ -370,7 +370,7 @@ static NSFont *
random_font (NSFontTraitMask traits, NSFontTraitMask mask, float size)
{
-# ifndef USE_IPHONE
+# ifndef HAVE_IPHONE
// Providing Unbold or Unitalic in the mask for availableFontNamesWithTraits
// returns an empty list, at least on a system with default fonts only.
NSArray *families = [[NSFontManager sharedFontManager]
@@ -395,7 +395,7 @@ random_font (NSFontTraitMask traits, NSFontTraitMask mask, float size)
families = new_families;
}
-# endif // USE_IPHONE
+# endif // HAVE_IPHONE
long n = [families count];
if (n <= 0) return 0;
@@ -563,7 +563,7 @@ jwxyz_render_text (Display *dpy, void *native_font,
void
jwxyz_get_pos (Window w, XPoint *xvpos, XPoint *xp)
{
-# ifdef USE_IPHONE
+# ifdef HAVE_IPHONE
xvpos->x = 0;
xvpos->y = 0;
@@ -573,7 +573,7 @@ jwxyz_get_pos (Window w, XPoint *xvpos, XPoint *xp)
xp->y = w->window.last_mouse_y;
}
-# else // !USE_IPHONE
+# else // !HAVE_IPHONE
NSWindow *nsw = [w->window.view window];
@@ -631,11 +631,11 @@ jwxyz_get_pos (Window w, XPoint *xvpos, XPoint *xp)
xp->y = (int) p.y;
}
-# endif // !USE_IPHONE
+# endif // !HAVE_IPHONE
}
-#ifdef USE_IPHONE
+#ifdef HAVE_IPHONE
void
check_framebuffer_status (void)
@@ -693,7 +693,7 @@ create_framebuffer (GLuint *gl_framebuffer, GLuint *gl_renderbuffer)
glBindRenderbufferOES (GL_RENDERBUFFER_OES, *gl_renderbuffer);
}
-#endif // USE_IPHONE
+#endif // HAVE_IPHONE
#if defined JWXYZ_QUARTZ
@@ -841,7 +841,7 @@ jwxyz_copy_area (Display *dpy, Drawable src, Drawable dst, GC gc,
/* Strange and ugly flickering when going the glCopyTexImage2D route on
OS X. (Early 2009 Mac mini, OS X 10.10)
*/
-# ifdef USE_IPHONE
+# ifdef HAVE_IPHONE
/* TODO: This might not still work. */
jwxyz_bind_drawable (dpy, dpy->main_window, src);
@@ -850,10 +850,10 @@ jwxyz_copy_area (Display *dpy, Drawable src, Drawable dst, GC gc,
jwxyz_bind_drawable (dpy, dpy->main_window, dst);
jwxyz_gl_copy_area_write_tex_image (dpy, gc, src_x, src_y,
width, height, dst_x, dst_y);
-# else // !USE_IPHONE
+# else // !HAVE_IPHONE
jwxyz_gl_copy_area_read_pixels (dpy, src, dst, gc,
src_x, src_y, width, height, dst_x, dst_y);
-# endif // !USE_IPHONE
+# endif // !HAVE_IPHONE
jwxyz_assert_gl ();
}
@@ -877,7 +877,7 @@ jwxyz_assert_gl ()
void
jwxyz_assert_drawable (Window main_window, Drawable d)
{
-#if !defined USE_IPHONE && !defined __OPTIMIZE__
+#if !defined HAVE_IPHONE && !defined __OPTIMIZE__
XScreenSaverView *view = main_window->window.view;
NSOpenGLContext *ogl_ctx = [view oglContext];
@@ -896,7 +896,7 @@ jwxyz_assert_drawable (Window main_window, Drawable d)
perror([[exception reason] UTF8String]);
jwxyz_abort();
}
-#endif // !USE_IPHONE && !__OPTIMIZE__
+#endif // !HAVE_IPHONE && !__OPTIMIZE__
}
@@ -925,7 +925,7 @@ jwxyz_bind_drawable (Window main_window, Drawable d)
jwxyz_assert_gl ();
jwxyz_assert_drawable (main_window, d);
-#if defined USE_IPHONE && !defined __OPTIMIZE__
+#if defined HAVE_IPHONE && !defined __OPTIMIZE__
Drawable current_drawable = main_window->window.current_drawable;
Assert (!current_drawable
|| current_drawable->ogl_ctx == [EAGLContext currentContext],
@@ -942,7 +942,7 @@ jwxyz_bind_drawable (Window main_window, Drawable d)
main_window->window.current_drawable = d;
/* Doing this repeatedly is probably not OK performance-wise. Probably. */
-#ifndef USE_IPHONE
+#ifndef HAVE_IPHONE
[d->ogl_ctx makeCurrentContext];
#else
[EAGLContext setCurrentContext:d->ogl_ctx];
@@ -973,7 +973,7 @@ XCreatePixmap (Display *dpy, Drawable d,
/* TODO: If Pixel buffers are not supported, do something about it. */
Window w = XRootWindow (dpy, 0);
-# ifndef USE_IPHONE
+# ifndef HAVE_IPHONE
p->ogl_ctx = [[NSOpenGLContext alloc]
initWithFormat:w->window.pixfmt
@@ -997,7 +997,7 @@ XCreatePixmap (Display *dpy, Drawable d,
mipMapLevel:0
currentVirtualScreen:w->window.virtual_screen];
-# else // USE_IPHONE
+# else // HAVE_IPHONE
p->ogl_ctx = w->window.ogl_ctx_pixmap;
@@ -1012,7 +1012,7 @@ XCreatePixmap (Display *dpy, Drawable d,
glBindFramebufferOES(GL_FRAMEBUFFER_OES, p->gl_framebuffer);
-# endif // USE_IPHONE
+# endif // HAVE_IPHONE
w->window.current_drawable = p;
glViewport (0, 0, width, height);
@@ -1033,16 +1033,16 @@ XFreePixmap (Display *d, Pixmap p)
Window w = RootWindow (d, 0);
-# ifndef USE_IPHONE
+# ifndef HAVE_IPHONE
CFRelease (p->ogl_ctx);
[p->ogl_ctx release];
CFRelease (p->pixmap.gl_pbuffer);
[p->pixmap.gl_pbuffer release];
-# else // USE_IPHONE
+# else // HAVE_IPHONE
glDeleteRenderbuffersOES (1, &p->gl_renderbuffer);
glDeleteFramebuffersOES (1, &p->gl_framebuffer);
-# endif // USE_IPHONE
+# endif // HAVE_IPHONE
if (w->window.current_drawable == p) {
w->window.current_drawable = NULL;
diff --git a/jwxyz/jwxyz-gl.c b/jwxyz/jwxyz-gl.c
index f1c13da..3d36612 100644
--- a/jwxyz/jwxyz-gl.c
+++ b/jwxyz/jwxyz-gl.c
@@ -77,7 +77,7 @@
#include <wchar.h>
#ifdef HAVE_COCOA
-# ifdef USE_IPHONE
+# ifdef HAVE_IPHONE
# import <QuartzCore/QuartzCore.h>
# include <OpenGLES/ES1/gl.h>
# include <OpenGLES/ES1/glext.h>
@@ -186,7 +186,7 @@ jwxyz_set_matrices (Display *dpy, unsigned width, unsigned height,
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
-# if defined(USE_IPHONE) || defined(HAVE_ANDROID)
+# if defined(HAVE_IPHONE) || defined(HAVE_ANDROID)
if (window_p && ignore_rotation_p(dpy)) {
int o = (int) current_device_rotation();
@@ -917,7 +917,7 @@ jwxyz_gl_copy_area_read_tex_image (Display *dpy, unsigned src_height,
unsigned int width, unsigned int height,
int dst_x, int dst_y)
{
-# if defined HAVE_COCOA && !defined USE_IPHONE
+# if defined HAVE_COCOA && !defined HAVE_IPHONE
/* TODO: Does this help? */
/* glFinish(); */
# endif
diff --git a/jwxyz/jwxyz.m b/jwxyz/jwxyz.m
index c6a7af5..a4352d3 100644
--- a/jwxyz/jwxyz.m
+++ b/jwxyz/jwxyz.m
@@ -26,7 +26,7 @@
#import <stdint.h>
#import <wchar.h>
-#ifdef USE_IPHONE
+#ifdef HAVE_IPHONE
# import <UIKit/UIKit.h>
# import <UIKit/UIScreen.h>
# import <QuartzCore/QuartzCore.h>
@@ -66,7 +66,7 @@ struct jwxyz_Display {
Visual visual;
struct jwxyz_sources_data *timers_data;
-# ifndef USE_IPHONE
+# ifndef HAVE_IPHONE
CGDirectDisplayID cgdpy; /* ...of the one and only Window, main_window.
This can change if the window is dragged to
a different screen. */
@@ -399,7 +399,7 @@ jwxyz_window_resized (Display *dpy)
{
Window w = dpy->main_window;
-# ifndef USE_IPHONE
+# ifndef HAVE_IPHONE
// Figure out which screen the window is currently on.
{
int wx, wy;
@@ -417,7 +417,7 @@ jwxyz_window_resized (Display *dpy)
}
Assert (dpy->cgdpy, "unable to find CGDisplay");
}
-# endif // USE_IPHONE
+# endif // HAVE_IPHONE
/*
{
@@ -1394,9 +1394,9 @@ jwxyz_draw_NSImage_or_CGImage (Display *dpy, Drawable d,
XRectangle *geom_ret, int exif_rotation)
{
CGImageRef cgi;
-# ifndef USE_IPHONE
+# ifndef HAVE_IPHONE
CGImageSourceRef cgsrc;
-# endif // USE_IPHONE
+# endif // HAVE_IPHONE
NSSize imgr;
CGContextRef cgc = d->cgc;
@@ -1406,7 +1406,7 @@ jwxyz_draw_NSImage_or_CGImage (Display *dpy, Drawable d,
NSImage *nsimg = (NSImage *) img_arg;
imgr = [nsimg size];
-# ifndef USE_IPHONE
+# ifndef HAVE_IPHONE
// convert the NSImage to a CGImage via the toll-free-bridging
// of NSData and CFData...
//
@@ -1416,9 +1416,9 @@ jwxyz_draw_NSImage_or_CGImage (Display *dpy, Drawable d,
CFDataRef cfdata = (CFDataRef) nsdata;
cgsrc = CGImageSourceCreateWithData (cfdata, NULL);
cgi = CGImageSourceCreateImageAtIndex (cgsrc, 0, NULL);
-# else // USE_IPHONE
+# else // HAVE_IPHONE
cgi = nsimg.CGImage;
-# endif // USE_IPHONE
+# endif // HAVE_IPHONE
} else {
cgi = (CGImageRef) img_arg;
@@ -1481,12 +1481,12 @@ jwxyz_draw_NSImage_or_CGImage (Display *dpy, Drawable d,
CGContextDrawImage (cgc, dst2, cgi);
CGContextRestoreGState (cgc);
-# ifndef USE_IPHONE
+# ifndef HAVE_IPHONE
if (nsimg_p) {
CFRelease (cgsrc);
CGImageRelease (cgi);
}
-# endif // USE_IPHONE
+# endif // HAVE_IPHONE
if (geom_ret) {
geom_ret->x = dst.origin.x;
@@ -1507,7 +1507,7 @@ jwxyz_png_to_ximage (Display *dpy, Visual *visual,
[NSData dataWithBytes:png_data
length:data_size]];
if (! img) return 0;
-#ifndef USE_IPHONE
+#ifndef HAVE_IPHONE
NSBitmapImageRep *bm = [NSBitmapImageRep
imageRepWithData:
[NSBitmapImageRep
@@ -1525,7 +1525,7 @@ jwxyz_png_to_ximage (Display *dpy, Visual *visual,
convert_mode_t mode = (([bm bitmapFormat] & NSAlphaFirstBitmapFormat)
? CONVERT_MODE_ROTATE_MASK
: 0);
-#else // USE_IPHONE
+#else // HAVE_IPHONE
CGImageRef cgi = [img CGImage];
if (!cgi) {
[img release];
@@ -1547,7 +1547,7 @@ jwxyz_png_to_ximage (Display *dpy, Visual *visual,
convert_mode_t mode = convert_mode_to_rgba (bitmap_info);
-#endif // USE_IPHONE
+#endif // HAVE_IPHONE
XImage *image = XCreateImage (dpy, visual, 32, ZPixmap, 0, 0,
width, height, 8, 0);
@@ -1567,7 +1567,7 @@ jwxyz_png_to_ximage (Display *dpy, Visual *visual,
[img release];
-#ifndef USE_IPHONE
+#ifndef HAVE_IPHONE
// [bm release];
# else
CGContextRelease (cgc);
diff --git a/jwxyz/jwxyzI.h b/jwxyz/jwxyzI.h
index f7560f7..8672d36 100644
--- a/jwxyz/jwxyzI.h
+++ b/jwxyz/jwxyzI.h
@@ -130,7 +130,7 @@ extern void jwxyz_quartz_copy_area (Display *dpy, Drawable src, Drawable dst,
# ifdef JWXYZ_GL
-# if defined(USE_IPHONE)
+# if defined(HAVE_IPHONE)
# include <OpenGLES/ES1/gl.h>
# elif defined(HAVE_COCOA)
# include <OpenGL/gl.h>
diff --git a/jwxyz/jwzgles.c b/jwxyz/jwzgles.c
index b26bc3a..3895adc 100644
--- a/jwxyz/jwzgles.c
+++ b/jwxyz/jwzgles.c
@@ -162,7 +162,7 @@
# include <unistd.h>
#endif /* HAVE_UNISTD_H */
-#if defined(USE_IPHONE)
+#if defined(HAVE_IPHONE)
# include <OpenGLES/ES1/gl.h>
# include <OpenGLES/ES1/glext.h>
#elif defined(HAVE_COCOA)
diff --git a/jwxyz/jwzgles.h b/jwxyz/jwzgles.h
index 9c8d1e2..a41dcbc 100644
--- a/jwxyz/jwzgles.h
+++ b/jwxyz/jwzgles.h
@@ -21,7 +21,6 @@
# error: do not include this without HAVE_JWZGLES
#endif
-
#include "jwzglesI.h"
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
index 3d4b024..461d1eb 100644
--- a/po/Makefile.in.in
+++ b/po/Makefile.in.in
@@ -300,9 +300,11 @@ generate_potfiles_in:
( cd $(top_srcdir); \
echo "# Auto-generated: `LANG=C date`" ; \
( grep -l '_("' driver/*.[ch] ; \
- ls driver/*.glade2.in \
+ ls driver/*.ui \
driver/*.desktop.in \
- hacks/config/*.xml ) | sort \
+ hacks/config/*.xml ) | \
+ grep -v co____9 | \
+ sort \
) > $$tmp && \
mv $$tmp $$file && \
echo "created `pwd`/$$file"
diff --git a/po/POTFILES.in b/po/POTFILES.in
index d785843..1239abe 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,8 +1,8 @@
-# Auto-generated: Fri Mar 20 18:40:22 PDT 2020
+# Auto-generated: Tue Dec 8 09:53:21 PST 2020
driver/demo-Gtk-conf.c
driver/demo-Gtk.c
driver/screensaver-properties.desktop.in
-driver/xscreensaver-demo.glade2.in
+driver/xscreensaver-demo.ui
hacks/config/abstractile.xml
hacks/config/anemone.xml
hacks/config/anemotaxis.xml
@@ -16,6 +16,7 @@ hacks/config/atlantis.xml
hacks/config/attraction.xml
hacks/config/atunnel.xml
hacks/config/barcode.xml
+hacks/config/beats.xml
hacks/config/binaryring.xml
hacks/config/blaster.xml
hacks/config/blinkbox.xml
@@ -41,6 +42,7 @@ hacks/config/cloudlife.xml
hacks/config/companioncube.xml
hacks/config/compass.xml
hacks/config/coral.xml
+hacks/config/covid19.xml
hacks/config/crackberg.xml
hacks/config/critical.xml
hacks/config/crumbler.xml
@@ -116,6 +118,7 @@ hacks/config/greynetic.xml
hacks/config/halftone.xml
hacks/config/halo.xml
hacks/config/handsy.xml
+hacks/config/headroom.xml
hacks/config/helix.xml
hacks/config/hexadrop.xml
hacks/config/hexstrut.xml
@@ -215,6 +218,7 @@ hacks/config/slip.xml
hacks/config/sonar.xml
hacks/config/speedmine.xml
hacks/config/sphere.xml
+hacks/config/sphereeversion.xml
hacks/config/spheremonics.xml
hacks/config/spiral.xml
hacks/config/splitflap.xml
diff --git a/po/da.po b/po/da.po
index 1466d37..5da5711 100644
--- a/po/da.po
+++ b/po/da.po
@@ -6227,7 +6227,7 @@ msgstr "Menger"
#: hacks/config/menger.xml.h:19
msgid ""
"This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
+"cube-based fractal object analogous to the Sierpinski Tetrahedron. Written "
"by Jamie Zawinski."
msgstr ""
"Tegner den tre-dimensionale variant af den rekursive Menger Gasket, et "
diff --git a/po/de.po b/po/de.po
index ba93b35..c9092b3 100644
--- a/po/de.po
+++ b/po/de.po
@@ -6131,7 +6131,7 @@ msgid "Menger"
msgstr "Menger"
#: hacks/config/menger.xml.h:19
-msgid "This draws the three-dimensional variant of the recursive Menger Gasket, a cube-based fractal object analagous to the Sierpinski Tetrahedron. Written by Jamie Zawinski."
+msgid "This draws the three-dimensional variant of the recursive Menger Gasket, a cube-based fractal object analogous to the Sierpinski Tetrahedron. Written by Jamie Zawinski."
msgstr ""
#: hacks/config/metaballs.xml.h:1
diff --git a/po/es.po b/po/es.po
index 12bbdbb..1a262c5 100644
--- a/po/es.po
+++ b/po/es.po
@@ -6244,7 +6244,7 @@ msgstr "Menger"
#: hacks/config/menger.xml.h:19
msgid ""
"This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
+"cube-based fractal object analogous to the Sierpinski Tetrahedron. Written "
"by Jamie Zawinski."
msgstr ""
"Dibuja la variante tridimensional del Empaquetador Menger recursivo, un "
diff --git a/po/et.po b/po/et.po
index b769928..a670c68 100644
--- a/po/et.po
+++ b/po/et.po
@@ -5693,7 +5693,7 @@ msgstr ""
#: hacks/config/menger.xml.h:19
msgid ""
"This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
+"cube-based fractal object analogous to the Sierpinski Tetrahedron. Written "
"by Jamie Zawinski."
msgstr ""
diff --git a/po/fi.po b/po/fi.po
index 7bb4e10..954128e 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -5659,7 +5659,7 @@ msgstr ""
#: hacks/config/menger.xml.h:19
msgid ""
"This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
+"cube-based fractal object analogous to the Sierpinski Tetrahedron. Written "
"by Jamie Zawinski."
msgstr ""
diff --git a/po/fr.po b/po/fr.po
index dfca6a1..c287e2a 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -5850,7 +5850,7 @@ msgstr "Menger"
#: hacks/config/menger.xml.h:18
msgid ""
"This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
+"cube-based fractal object analogous to the Sierpinski Tetrahedron. Written "
"by Jamie Zawinski; 2001."
msgstr ""
"Dessine une variante tridimensionnelle du tamis récursif de Menger, un objet "
diff --git a/po/hu.po b/po/hu.po
index 7c57137..fa25bc1 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -6179,7 +6179,7 @@ msgstr "Menger"
#: hacks/config/menger.xml.h:19
msgid ""
"This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
+"cube-based fractal object analogous to the Sierpinski Tetrahedron. Written "
"by Jamie Zawinski."
msgstr ""
"A rekurzív Menger-féle alakzat egy háromdimenziós variánsát rajzolja ki, ami "
diff --git a/po/it.po b/po/it.po
index d0e7b91..c84b702 100644
--- a/po/it.po
+++ b/po/it.po
@@ -5687,7 +5687,7 @@ msgstr ""
#: hacks/config/menger.xml.h:19
msgid ""
"This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
+"cube-based fractal object analogous to the Sierpinski Tetrahedron. Written "
"by Jamie Zawinski."
msgstr ""
diff --git a/po/ja.po b/po/ja.po
index bb79ec2..04c19c1 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -6485,7 +6485,7 @@ msgstr ""
#: ../hacks/config/menger.xml.h:21
msgid ""
-"The Menger Gasket is a cube-based recursive fractal object analagous to the "
+"The Menger Gasket is a cube-based recursive fractal object analogous to the "
"Sierpinski Tetrahedron. http://en.wikipedia.org/wiki/Menger_sponge http://en."
"wikipedia.org/wiki/Sierpinski_carpet Written by Jamie Zawinski; 2001."
msgstr ""
diff --git a/po/ko.po b/po/ko.po
index 216f7ed..cfb9490 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -5882,7 +5882,7 @@ msgstr "빡빡하게"
#: hacks/config/menger.xml.h:19
msgid ""
"This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
+"cube-based fractal object analogous to the Sierpinski Tetrahedron. Written "
"by Jamie Zawinski."
msgstr ""
diff --git a/po/nb.po b/po/nb.po
index 70d55ae..7998efe 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -5727,7 +5727,7 @@ msgstr "Menger"
#: hacks/config/menger.xml.h:19
msgid ""
"This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
+"cube-based fractal object analogous to the Sierpinski Tetrahedron. Written "
"by Jamie Zawinski."
msgstr ""
diff --git a/po/nl.po b/po/nl.po
index 3ab8828..5d29b6a 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -6904,7 +6904,7 @@ msgstr "Max. diepte"
#: ../hacks/config/menger.xml.h:21
msgid ""
"This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. "
+"cube-based fractal object analogous to the Sierpinski Tetrahedron. "
"http://en.wikipedia.org/wiki/Menger_sponge "
"http://en.wikipedia.org/wiki/Sierpinski_carpet Written by Jamie Zawinski; "
"2001."
diff --git a/po/pl.po b/po/pl.po
index f656d08..37bff59 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -5950,7 +5950,7 @@ msgstr "Długi"
#, fuzzy
msgid ""
"This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
+"cube-based fractal object analogous to the Sierpinski Tetrahedron. Written "
"by Jamie Zawinski."
msgstr ""
"Rysuje w dwóch wymiarach rekurencyjnie fraktal - trójkąt Sierpińskiego. "
diff --git a/po/pt.po b/po/pt.po
index 64cd5fb..c702cf6 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -6239,7 +6239,7 @@ msgstr "Menger"
#: hacks/config/menger.xml.h:19
msgid ""
"This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
+"cube-based fractal object analogous to the Sierpinski Tetrahedron. Written "
"by Jamie Zawinski."
msgstr ""
"Desenha a variante tri-dimensional do Menger Gasket recursivo, um objecto "
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 5ffb11f..1b3e289 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -6790,7 +6790,7 @@ msgid "Menger"
msgstr "Menger"
#: ../hacks/config/menger.xml.h:18
-msgid "This draws the three-dimensional variant of the recursive Menger Gasket, a cube-based fractal object analagous to the Sierpinski Tetrahedron. http://en.wikipedia.org/wiki/Menger_sponge http://en.wikipedia.org/wiki/Sierpinski_carpet Written by Jamie Zawinski; 2001."
+msgid "This draws the three-dimensional variant of the recursive Menger Gasket, a cube-based fractal object analogous to the Sierpinski Tetrahedron. http://en.wikipedia.org/wiki/Menger_sponge http://en.wikipedia.org/wiki/Sierpinski_carpet Written by Jamie Zawinski; 2001."
msgstr ""
#: ../hacks/config/metaballs.xml.h:2
diff --git a/po/ru.po b/po/ru.po
index 7ac8b8f..5dad7bf 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -6749,7 +6749,7 @@ msgstr "Максимальная глубина"
#: ../hacks/config/menger.xml.h:21
msgid ""
-"The Menger Gasket is a cube-based recursive fractal object analagous to the "
+"The Menger Gasket is a cube-based recursive fractal object analogous to the "
"Sierpinski Tetrahedron. https://en.wikipedia.org/wiki/Menger_sponge "
"https://en.wikipedia.org/wiki/Sierpinski_carpet Written by Jamie Zawinski; "
"2001."
diff --git a/po/sk.po b/po/sk.po
index 7c71fb0..14e1385 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -5866,7 +5866,7 @@ msgstr ""
#: hacks/config/menger.xml.h:19
msgid ""
"This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
+"cube-based fractal object analogous to the Sierpinski Tetrahedron. Written "
"by Jamie Zawinski."
msgstr ""
diff --git a/po/sv.po b/po/sv.po
index 996322d..2fd81da 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -6141,7 +6141,7 @@ msgstr "Längre"
#: hacks/config/menger.xml.h:19
msgid ""
"This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
+"cube-based fractal object analogous to the Sierpinski Tetrahedron. Written "
"by Jamie Zawinski."
msgstr ""
diff --git a/po/vi.po b/po/vi.po
index a6d556c..67a798c 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -5920,7 +5920,7 @@ msgstr ""
#: hacks/config/menger.xml.h:19
msgid ""
"This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
+"cube-based fractal object analogous to the Sierpinski Tetrahedron. Written "
"by Jamie Zawinski."
msgstr ""
diff --git a/po/wa.po b/po/wa.po
index 6baee28..bbfd708 100644
--- a/po/wa.po
+++ b/po/wa.po
@@ -5790,7 +5790,7 @@ msgstr ""
#: hacks/config/menger.xml.h:19
msgid ""
"This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
+"cube-based fractal object analogous to the Sierpinski Tetrahedron. Written "
"by Jamie Zawinski."
msgstr ""
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 55051c8..80129d4 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -5991,7 +5991,7 @@ msgstr ""
#: hacks/config/menger.xml.h:19
msgid ""
"This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
+"cube-based fractal object analogous to the Sierpinski Tetrahedron. Written "
"by Jamie Zawinski."
msgstr ""
diff --git a/po/zh_TW.po b/po/zh_TW.po
index ef3507f..50c35c4 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -5916,7 +5916,7 @@ msgstr "Menger"
#: hacks/config/menger.xml.h:19
msgid ""
"This draws the three-dimensional variant of the recursive Menger Gasket, a "
-"cube-based fractal object analagous to the Sierpinski Tetrahedron. Written "
+"cube-based fractal object analogous to the Sierpinski Tetrahedron. Written "
"by Jamie Zawinski."
msgstr ""
diff --git a/utils/Makefile.in b/utils/Makefile.in
index dbb593b..e8fff09 100644
--- a/utils/Makefile.in
+++ b/utils/Makefile.in
@@ -120,7 +120,7 @@ HDRS = alpha.h colors.h fade.h grabscreen.h hsv.h resources.h \
yarandom.h erase.h xshm.h xdbe.h colorbars.h minixpm.h \
xscreensaver-intl.h textclient.h aligned_malloc.h \
thread_util.h async_netdb.h xft.h utf8wc.h pow2.h \
- font-retry.h
+ font-retry.h queue.h
STAR = *
LOGOS = images/$(STAR).xpm \
images/$(STAR).png \
diff --git a/utils/font-retry.c b/utils/font-retry.c
index f8e6507..d726378 100644
--- a/utils/font-retry.c
+++ b/utils/font-retry.c
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2018 by Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2018-2020 by Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -110,7 +110,8 @@ load_font_retry_1 (Display *dpy, int screen, const char *xlfd, Bool xft_p)
const char *variable[] = {
"helvetica",
"arial",
- "bitstream vera sans",
+ "bitstream vera sans", /* sometimes foundry is in family */
+ "vera sans", /* sometimes not? */
"gill sans",
"times",
"times new roman",
@@ -118,7 +119,12 @@ load_font_retry_1 (Display *dpy, int screen, const char *xlfd, Bool xft_p)
"utopia",
"palatino",
"lucida",
- "bitstream charter",
+ "clearlyu",
+ "bitstream charter", /* sometimes foundry is in family */
+ "charter", /* sometimes not? */
+ "utopia",
+ "luxi sans",
+ "latin modern roman",
/* Don't use a wildcard family. If none of the above worked, then
then almost none of the X11 fonts are installed, and it's not
@@ -135,6 +141,7 @@ load_font_retry_1 (Display *dpy, int screen, const char *xlfd, Bool xft_p)
"courier 10 pitch",
"lucidatypewriter",
"american typewriter",
+ "luxi mono",
"fixed",
"ocr a std",
/* As above, but "can't happen" because we already tried fixed? */
diff --git a/utils/grabclient.c b/utils/grabclient.c
index abe069b..3062fdc 100644
--- a/utils/grabclient.c
+++ b/utils/grabclient.c
@@ -127,11 +127,11 @@ typedef struct {
XtInputId pipe_id;
FILE *pipe;
-# if !defined(USE_IPHONE) && !defined(HAVE_COCOA) /* Real X11 */
+# if !defined(HAVE_IPHONE) && !defined(HAVE_COCOA) /* Real X11 */
pid_t pid;
# endif
-# if !defined(USE_IPHONE) && defined(HAVE_COCOA) /* Desktop OSX */
+# if !defined(HAVE_IPHONE) && defined(HAVE_COCOA) /* Desktop OSX */
char *directory;
# endif
@@ -564,7 +564,7 @@ load_random_image_x11 (Screen *screen, Window window, Drawable drawable,
#elif defined (HAVE_COCOA) /* OSX or iOS */
-# ifndef USE_IPHONE /* HAVE_COCOA && !USE_IPHONE -- desktop OSX */
+# ifndef HAVE_IPHONE /* HAVE_COCOA && !HAVE_IPHONE -- desktop OSX */
# define BACKSLASH(c) \
(! ((c >= 'a' && c <= 'z') || \
@@ -699,7 +699,7 @@ xscreensaver_getimage_file_cb (XtPointer closure, int *source, XtInputId *id)
}
-# else /* HAVE_COCOA && USE_IPHONE -- iOS */
+# else /* HAVE_COCOA && HAVE_IPHONE -- iOS */
/* Callback for ios_load_random_image(), called after we have loaded an
image from the iOS device's Photo Library. See grabclient-ios.m.
@@ -753,7 +753,7 @@ ios_load_random_image_cb (void *uiimage, const char *filename,
free (clo2);
}
-# endif /* HAVE_COCOA && USE_IPHONE */
+# endif /* HAVE_COCOA && HAVE_IPHONE */
static void
@@ -774,7 +774,7 @@ osx_load_image_file_async (Screen *screen, Window xwindow, Drawable drawable,
clo2->callback = callback;
clo2->closure = closure;
-# ifndef USE_IPHONE /* Desktop OSX */
+# ifndef HAVE_IPHONE /* Desktop OSX */
clo2->directory = strdup (dir);
clo2->pipe = open_image_name_pipe (dir);
clo2->pipe_id = XtAppAddInput (XtDisplayToApplicationContext (
@@ -782,14 +782,14 @@ osx_load_image_file_async (Screen *screen, Window xwindow, Drawable drawable,
fileno (clo2->pipe),
(XtPointer) (XtInputReadMask | XtInputExceptMask),
xscreensaver_getimage_file_cb, (XtPointer) clo2);
-# else /* USE_IPHONE */
+# else /* HAVE_IPHONE */
{
XWindowAttributes xgwa;
XGetWindowAttributes (DisplayOfScreen (screen), xwindow, &xgwa);
ios_load_random_image (ios_load_random_image_cb, clo2,
xgwa.width, xgwa.height);
}
-# endif /* USE_IPHONE */
+# endif /* HAVE_IPHONE */
}
@@ -828,13 +828,13 @@ load_random_image_cocoa (Screen *screen, Window window, Drawable drawable,
geom.width = xgwa.width;
geom.height = xgwa.height;
-# ifndef USE_IPHONE
+# ifndef HAVE_IPHONE
if (filep)
dir = get_string_resource (dpy, "imageDirectory", "ImageDirectory");
if (!dir || !*dir)
filep = False;
-# endif /* ! USE_IPHONE */
+# endif /* ! HAVE_IPHONE */
if (deskp && filep) {
deskp = !(random() & 5); /* if both, desktop 1/5th of the time */
diff --git a/utils/grabscreen.h b/utils/grabscreen.h
index 40054c8..a17e671 100644
--- a/utils/grabscreen.h
+++ b/utils/grabscreen.h
@@ -92,14 +92,14 @@ extern Bool osx_load_image_file (Screen *, Window, Drawable,
const char *filename, XRectangle *geom_ret);
#endif /* HAVE_JWXYZ */
-#ifdef USE_IPHONE
+#ifdef HAVE_IPHONE
extern void ios_load_random_image (void (*callback) (void *uiimage,
const char *filename,
int w, int h,
void *closure),
void *closure,
int width, int height);
-#endif /* USE_IPHONE */
+#endif /* HAVE_IPHONE */
#ifdef HAVE_ANDROID
char *jwxyz_draw_random_image (Display *dpy, /* utils/grabclient.c */
diff --git a/utils/textclient-mobile.c b/utils/textclient-mobile.c
index 4d0d891..8745cb0 100644
--- a/utils/textclient-mobile.c
+++ b/utils/textclient-mobile.c
@@ -16,7 +16,7 @@
#include "utils.h"
-#if defined(USE_IPHONE) || defined(HAVE_ANDROID) /* whole file */
+#if defined(HAVE_IPHONE) || defined(HAVE_ANDROID) /* whole file */
#include "textclient.h"
#include "resources.h"
diff --git a/utils/textclient.c b/utils/textclient.c
index fe40928..636b308 100644
--- a/utils/textclient.c
+++ b/utils/textclient.c
@@ -1,4 +1,4 @@
-/* xscreensaver, Copyright (c) 2012-2016 Jamie Zawinski <jwz@jwz.org>
+/* xscreensaver, Copyright (c) 2012-2020 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -22,7 +22,7 @@
#include "utils.h"
-#if !defined(USE_IPHONE) && !defined(HAVE_ANDROID) /* whole file */
+#if !defined(HAVE_IPHONE) && !defined(HAVE_ANDROID) /* whole file */
#include "textclient.h"
#include "resources.h"
@@ -117,6 +117,72 @@ escape_str (char *s, const char *src)
}
#endif
+
+/* Let's see if we're able to fork and exec at all. Thanks, macOS.
+ */
+static Bool
+selftest (void)
+{
+ static Bool done = False;
+ pid_t pid;
+ char buf [255];
+ if (done) return True;
+
+ pid = fork ();
+ switch ((int) pid)
+ {
+ case -1:
+ sprintf (buf, "%s: textclient: selftest: couldn't fork", progname);
+ perror (buf);
+ return False;
+
+ case 0: /* child */
+ {
+ char * const av[] = { "/bin/sh", "-c", "true", 0 };
+ execvp (av[0], av);
+ exit (1); /* exits child fork */
+ break;
+ }
+
+ default: /* parent */
+ {
+ int status = -1;
+ int i;
+ /* Busy-loops are bad mmmmkayyyy */
+ struct timeval tv;
+ tv.tv_sec = 0;
+ tv.tv_usec = 100000L; /* 0.1 sec */
+ for (i = 0; i < 50; i++) { /* 5 sec max */
+ pid_t pid2 = waitpid (pid, &status, 0);
+ if (pid == pid2) break;
+ (void) select (0, 0, 0, 0, &tv);
+ }
+
+ if (status != 0)
+ {
+# ifdef DEBUG
+ fprintf (stderr, "%s: selftest: textclient: status %d\n",
+ progname, status);
+# endif
+ return False;
+ }
+ else
+ {
+# ifdef DEBUG
+ fprintf (stderr, "%s: textclient: selftest ok\n", progname);
+# endif
+ done = True;
+ }
+ break;
+ }
+ }
+
+ return True;
+}
+
+
+static void start_timer (text_data *d);
+
static void
launch_text_generator (text_data *d)
{
@@ -142,6 +208,14 @@ launch_text_generator (text_data *d)
char *cmd = s = malloc ((strlen(oprogram)) * 2 + 100);
# endif
+ if (!selftest())
+ {
+ if (!d->out_buffer || !*d->out_buffer)
+ d->out_buffer = "Can't exec; Gatekeeper problem?\r\n\r\n";
+ start_timer (d);
+ return;
+ }
+
strcpy (s, "( ");
strcat (s, oprogram);
s += strlen (s);
@@ -670,4 +744,4 @@ textclient_putc (text_data *d, XKeyEvent *k)
return False;
}
-#endif /* !USE_IPHONE -- whole file */
+#endif /* !HAVE_IPHONE -- whole file */
diff --git a/utils/textclient.h b/utils/textclient.h
index 0fe582d..5be8079 100644
--- a/utils/textclient.h
+++ b/utils/textclient.h
@@ -14,7 +14,7 @@
#ifndef __TEXTCLIENT_H__
#define __TEXTCLIENT_H__
-# ifdef USE_IPHONE
+# ifdef HAVE_IPHONE
# undef HAVE_FORKPTY
# endif
@@ -29,7 +29,7 @@ extern void textclient_reshape (text_data *,
extern int textclient_getc (text_data *);
extern Bool textclient_putc (text_data *, XKeyEvent *);
-# if defined(USE_IPHONE) || defined(HAVE_ANDROID)
+# if defined(HAVE_IPHONE) || defined(HAVE_ANDROID)
extern char *textclient_mobile_date_string (void);
extern char *textclient_mobile_url_string (Display *, const char *url);
# endif
diff --git a/utils/usleep.h b/utils/usleep.h
index 3225d66..f32a9c9 100644
--- a/utils/usleep.h
+++ b/utils/usleep.h
@@ -12,10 +12,6 @@
#ifndef __SCREENHACK_USLEEP_H__
#define __SCREENHACK_USLEEP_H__
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
diff --git a/utils/utf8wc.c b/utils/utf8wc.c
index c948f22..b445f30 100644
--- a/utils/utf8wc.c
+++ b/utils/utf8wc.c
@@ -266,7 +266,7 @@ utf8_split (const char *string, int *length_ret)
unsigned long uc;
long len2 = utf8_decode (in, len, &uc);
char tmp[10];
- strncpy (tmp, (char *) in, len2);
+ memcpy (tmp, (char *) in, len2);
tmp[len2] = 0;
ret[i++] = strdup (tmp);
in += len2;
@@ -299,8 +299,8 @@ utf8_split (const char *string, int *length_ret)
long L1 = strlen(ret[i-2]);
long L2 = strlen(ret[i-1]);
char *s2 = (char *) malloc (L1 + L2 + 1);
- strncpy (s2, ret[i-2], L1);
- strncpy (s2 + L1, ret[i-1], L2);
+ memcpy (s2, ret[i-2], L1);
+ memcpy (s2 + L1, ret[i-1], L2);
s2[L1 + L2] = 0;
free (ret[i-2]);
ret[i-2] = s2;
diff --git a/utils/version.h b/utils/version.h
index 7a20c66..054dd99 100644
--- a/utils/version.h
+++ b/utils/version.h
@@ -1,2 +1,2 @@
static const char screensaver_id[] =
- "@(#)xscreensaver 5.44 (20-Mar-2020), by Jamie Zawinski (jwz@jwz.org)";
+ "@(#)xscreensaver 5.45 (08-Dec-2020), by Jamie Zawinski (jwz@jwz.org)";
diff --git a/utils/xshm.c b/utils/xshm.c
index 8992140..3c99623 100644
--- a/utils/xshm.c
+++ b/utils/xshm.c
@@ -89,7 +89,7 @@ shm_ehandler (Display *dpy, XErrorEvent *error)
XSync((DPY), False); \
if (old_handler) \
XSetErrorHandler (old_handler); \
- old_handler = 0; \
+ old_handler = 0; \
} while(0)
#endif /* HAVE_XSHM_EXTENSION */
@@ -291,6 +291,8 @@ void
destroy_xshm_image (Display *dpy, XImage *image, XShmSegmentInfo *shm_info)
{
#ifdef HAVE_XSHM_EXTENSION
+ Status status;
+
if (shm_info->shmid == -1) {
#endif /* HAVE_XSHM_EXTENSION */
@@ -303,8 +305,6 @@ destroy_xshm_image (Display *dpy, XImage *image, XShmSegmentInfo *shm_info)
#ifdef HAVE_XSHM_EXTENSION
}
- Status status;
-
CATCH_X_ERROR(dpy);
status = XShmDetach (dpy, shm_info);
UNCATCH_X_ERROR(dpy);
@@ -312,10 +312,10 @@ destroy_xshm_image (Display *dpy, XImage *image, XShmSegmentInfo *shm_info)
status = False;
if (!status)
fprintf (stderr, "%s: XShmDetach failed!\n", progname);
-#ifdef DEBUG
+# ifdef DEBUG
else
fprintf (stderr, "%s: XShmDetach(dpy, shm_info) ==> True\n", progname);
-#endif
+# endif
XDestroyImage (image);
XSync(dpy, False);
@@ -329,10 +329,10 @@ destroy_xshm_image (Display *dpy, XImage *image, XShmSegmentInfo *shm_info)
(unsigned long) shm_info->shmaddr);
perror(buf);
}
-#ifdef DEBUG
+# ifdef DEBUG
else
fprintf (stderr, "%s: shmdt(shm_info->shmaddr) ==> 0\n", progname);
-#endif
+# endif
XSync(dpy, False);
diff --git a/utils/yarandom.c b/utils/yarandom.c
index f450735..0f51cb6 100644
--- a/utils/yarandom.c
+++ b/utils/yarandom.c
@@ -118,9 +118,9 @@ ya_rand_init(unsigned int seed)
#define ROT(X,N) (((X)<<(N)) | ((X)>>((sizeof(unsigned int)*8)-(N))))
seed = (999U * (unsigned int) tp.tv_sec);
seed = ROT (seed, 11);
- seed += (1001 * tp.tv_usec);
+ seed += (1001 * (unsigned int) tp.tv_usec);
seed = ROT (seed, 7);
- seed += (1003 * getpid());
+ seed += (1003 * (unsigned int) getpid());
seed = ROT (seed, 13);
}
diff --git a/xscreensaver.spec b/xscreensaver.spec
index 84931b5..16d76d6 100644
--- a/xscreensaver.spec
+++ b/xscreensaver.spec
@@ -1,5 +1,5 @@
%define name xscreensaver
-%define version 5.44
+%define version 5.45
Summary: X screen saver and locker
Name: %{name}
@@ -22,19 +22,22 @@ BuildRequires: gettext
BuildRequires: pam-devel
BuildRequires: gtk2-devel
BuildRequires: desktop-file-utils
-# Red Hat (pre-FC5):
-#BuildRequires: xorg-x11-devel
-#BuildRequires: libglade2-devel
+BuildRequires: systemd-devel
+BuildRequires: libcap-devel
# Red Hat 5, CentOS5, FC5, and up:
BuildRequires: xorg-x11-proto-devel
-BuildRequires: libglade2-devel
+#BuildRequires: libglade2-devel
# Mandrake:
#BuildRequires: libxorg-x11-devel
#BuildRequires: libglade2.0_0-devel
Requires: SysVinit
+Requires: pam
Requires: /etc/pam.d/system-auth
Requires: htmlview
+Requires: xorg-x11-fonts-100dpi
Requires: desktop-backgrounds-basic
+Requires: xdg-utils
+Requires: systemd-libs
Provides: xscreensaver
Provides: xscreensaver-base
Obsoletes: xscreensaver
@@ -111,12 +114,6 @@ export CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}"
CONFIG_OPTS="--prefix=/usr --with-pam --without-shadow --without-kerberos"
-# Red Hat doesn't like this:
-CONFIG_OPTS="$CONFIG_OPTS --with-setuid-hacks"
-
-# This is flaky:
-# CONFIG_OPTS="$CONFIG_OPTS --with-login-manager"
-
ln -s ../configure .
%configure $CONFIG_OPTS
rm -f configure
@@ -140,10 +137,6 @@ mkdir -p $RPM_BUILD_ROOT%{_bindir} \
make install_prefix=$RPM_BUILD_ROOT install
-desktop-file-install --vendor gnome --delete-original \
- --dir $RPM_BUILD_ROOT%{_datadir}/applications \
- $RPM_BUILD_ROOT%{_datadir}/applications/*.desktop
-
# This function prints a list of things that get installed.
# It does this by parsing the output of a dummy run of "make install".
#