From 9c9ac21de7b85b6c4c767f3005b510d78b0a3e97 Mon Sep 17 00:00:00 2001 From: Zygo Blaxell Date: Tue, 8 Dec 2020 17:28:57 -0500 Subject: [PATCH] From http://www.jwz.org/xscreensaver/xscreensaver-5.45.tar.gz -rw-rw-r-- 1 zblaxell zblaxell 27729147 Dec 8 12:55 xscreensaver-5.45.tar.gz 933cd5451bdfc4a2bf15bc49f629a8c8665cae62 xscreensaver-5.45.tar.gz --- Makefile.in | 67 +- OSX/InvertedSlider.h | 4 +- OSX/InvertedSlider.m | 6 +- OSX/Makefile | 113 +- OSX/PrefsReader.h | 2 +- OSX/PrefsReader.m | 20 +- OSX/README | 9 +- OSX/SaverListController.h | 4 +- OSX/SaverListController.m | 4 +- OSX/SaverRunner.h | 18 +- OSX/SaverRunner.m | 87 +- OSX/SaverRunner.plist | 12 +- OSX/Updater.plist | 12 +- OSX/XScreenSaver.plist | 6 +- OSX/XScreenSaverConfigSheet.h | 6 +- OSX/XScreenSaverConfigSheet.m | 352 +- OSX/XScreenSaverGLView.h | 6 +- OSX/XScreenSaverGLView.m | 30 +- OSX/XScreenSaverView.h | 28 +- OSX/XScreenSaverView.m | 242 +- OSX/bindist.rtf | 17 +- OSX/build-fntable.pl | 7 +- OSX/enable_gc.c | 2 +- OSX/grabclient-ios.m | 4 +- OSX/grabclient-osx.m | 16 +- OSX/iSaverRunner.plist | 12 +- OSX/installer.rtf | 20 +- OSX/installer.sh | 30 +- OSX/installer.xml | 4 +- OSX/ios-function-table.m | 8 +- OSX/main.m | 4 +- OSX/textclient-ios.m | 4 +- OSX/updates.pl | 10 +- OSX/updates.xml | 72 +- OSX/xscreensaver.xcodeproj/project.pbxproj | 721 +- OSX/xscreensaver_Prefix.pch | 8 +- README | 22 +- README.hacking | 9 + aclocal.m4 | 6 +- android/Makefile | 36 +- android/README | 243 +- android/android.iml | 2 +- android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- android/screenhack-android.c | 8 +- android/xscreensaver/#build.gradle# | 114 + android/xscreensaver/build.gradle | 6 +- .../gradle/wrapper/gradle-wrapper.properties | 4 +- android/xscreensaver/jni/Android.mk | 1 + .../res/layout-land/activity_xscreensaver.xml | 2 +- .../res/layout/activity_tv_xscreensaver.xml | 2 +- .../res/layout/activity_xscreensaver.xml | 2 +- android/xscreensaver/xscreensaver.iml | 30 +- config.h.in | 61 +- configure | 16644 +- configure.in => configure.ac | 2606 +- driver/Makefile.in | 125 +- driver/XScreenSaver.ad.in | 12 +- driver/XScreenSaver_ad.h | 8 +- driver/demo-Gtk-conf.c | 15 +- driver/demo-Gtk.c | 201 +- driver/lock.c | 11 +- driver/passwd-pam.c | 2 +- driver/pdf2jpeg.m | 2 +- driver/prefs.c | 4 +- driver/remote.c | 12 +- driver/screens.c | 18 +- driver/stderr.c | 18 +- driver/subprocs.c | 64 +- driver/timers.c | 3 + driver/windows.c | 57 +- driver/xscreensaver-command.c | 10 +- driver/xscreensaver-command.man | 12 +- driver/xscreensaver-demo.glade2.in | 3136 - driver/xscreensaver-demo.glade2p | 19 - driver/xscreensaver-demo.ui | 2912 + driver/xscreensaver-getimage-file | 45 +- driver/xscreensaver-getimage-video | 7 +- driver/xscreensaver-getimage.c | 22 +- driver/xscreensaver-systemd.c | 1043 +- driver/xscreensaver-text | 33 +- driver/xscreensaver.c | 289 +- driver/xscreensaver.h | 10 +- driver/xscreensaver.man | 12 +- driver/xset.c | 4 +- hacks/Makefile.in | 12 +- hacks/README | 3 + hacks/abstractile.man | 2 +- hacks/analogtv-cli.c | 253 +- hacks/analogtv.c | 10 +- hacks/analogtv.h | 2 +- hacks/anemone.man | 2 +- hacks/anemotaxis.man | 2 +- hacks/ant.man | 2 +- hacks/apollonian.man | 2 +- hacks/apple2.man | 2 +- hacks/asm6502.c | 16 +- hacks/attraction.man | 2 +- hacks/barcode.c | 10 + hacks/barcode.man | 2 +- hacks/binaryring.man | 2 +- hacks/blaster.man | 2 +- hacks/blitspin.man | 2 +- hacks/bouboule.man | 2 +- hacks/boxfit.man | 2 +- hacks/braid.man | 2 +- hacks/bsod.c | 105 +- hacks/bsod.man | 2 +- hacks/bubbles.man | 2 +- hacks/bumps.man | 2 +- hacks/ccurve.man | 2 +- hacks/celtic.man | 2 +- hacks/check-configs.pl | 5 +- hacks/cloudlife.man | 2 +- hacks/compass.man | 2 +- hacks/config/README | 4 +- hacks/config/beats.xml | 42 + hacks/config/bsod.xml | 33 +- hacks/config/co____9.xml | 38 + hacks/config/covid19.xml | 38 + hacks/config/headroom.xml | 48 + hacks/config/hypnowheel.xml | 2 +- hacks/config/menger.xml | 2 +- hacks/config/projectiveplane.xml | 2 +- hacks/config/sphereeversion.xml | 98 + hacks/coral.man | 2 +- hacks/critical.man | 2 +- hacks/crystal.c | 3 +- hacks/crystal.man | 2 +- hacks/cwaves.man | 2 +- hacks/cynosure.man | 2 +- hacks/decayscreen.man | 2 +- hacks/deco.man | 2 +- hacks/delaunay.c | 2 + hacks/deluxe.man | 2 +- hacks/demon.man | 2 +- hacks/discrete.man | 2 +- hacks/drift.man | 2 +- hacks/epicycle.man | 2 +- hacks/euler2d.man | 2 +- hacks/fadeplot.man | 2 +- hacks/fiberlamp.man | 2 +- hacks/filmleader.c | 2 +- hacks/filmleader.man | 2 +- hacks/fireworkx.man | 2 +- hacks/flag.c | 2 +- hacks/flag.man | 2 +- hacks/flame.man | 2 +- hacks/flow.man | 2 +- hacks/fluidballs.man | 2 +- hacks/fontglide.man | 2 +- hacks/forest.man | 2 +- hacks/fps.c | 2 +- hacks/fuzzyflakes.c | 3 + hacks/fuzzyflakes.man | 2 +- hacks/galaxy.man | 2 +- hacks/glitchpeg.c | 36 +- hacks/glitchpeg.man | 2 +- hacks/glx/Makefile.in | 230 +- hacks/glx/README | 5 +- hacks/glx/atlantis.man | 2 +- hacks/glx/atunnel.man | 2 +- hacks/glx/beats.c | 449 + hacks/glx/beats.man | 75 + hacks/glx/blocktube.man | 2 +- hacks/glx/boing.man | 2 +- hacks/glx/bouncingcow.man | 2 +- hacks/glx/boxed.man | 2 +- hacks/glx/bubble3d.man | 2 +- hacks/glx/cage.man | 2 +- hacks/glx/carousel.c | 4 + hacks/glx/carousel.man | 2 +- hacks/glx/circuit.man | 2 +- hacks/glx/cityflow.man | 2 +- hacks/glx/co____9.c | 1 + hacks/glx/companioncube.man | 2 +- hacks/glx/covid19.c | 659 + hacks/glx/covid19.man | 72 + hacks/glx/crackberg.man | 2 +- hacks/glx/crumbler.c | 2 +- hacks/glx/crumbler.man | 2 +- hacks/glx/cube21.man | 2 +- hacks/glx/cubenetic.man | 2 +- hacks/glx/cubestack.man | 2 +- hacks/glx/cubestorm.man | 2 +- hacks/glx/cubetwist.man | 2 +- hacks/glx/cubicgrid.man | 2 +- hacks/glx/dangerball.man | 2 +- hacks/glx/deepstars.man | 2 +- hacks/glx/discoball.man | 2 +- hacks/glx/dymaxionmap.c | 3 +- hacks/glx/dymaxionmap.man | 2 +- hacks/glx/energystream.man | 2 +- hacks/glx/engine.man | 2 +- hacks/glx/esper.c | 5 +- hacks/glx/esper.man | 2 +- hacks/glx/etruscanvenus.c | 11 + hacks/glx/etruscanvenus.man | 2 +- hacks/glx/extrusion.man | 2 +- hacks/glx/flipflop.man | 2 +- hacks/glx/flipscreen3d.man | 2 +- hacks/glx/fliptext.man | 2 +- hacks/glx/flurry.man | 2 +- hacks/glx/flyingtoasters.man | 2 +- hacks/glx/gears.man | 2 +- hacks/glx/geodesic.man | 2 +- hacks/glx/geodesicgears.man | 2 +- hacks/glx/gibson.c | 30 +- hacks/glx/gibson.man | 2 +- hacks/glx/glblur.man | 2 +- hacks/glx/glcells.man | 2 +- hacks/glx/gleidescope.man | 2 +- hacks/glx/glforestfire.man | 2 +- hacks/glx/glhanoi.man | 2 +- hacks/glx/glknots.man | 2 +- hacks/glx/glmatrix.man | 2 +- hacks/glx/glplanet.man | 2 +- hacks/glx/glschool.man | 2 +- hacks/glx/glsl_support.c | 266 + hacks/glx/glsl_support.h | 69 + hacks/glx/glslideshow.c | 131 +- hacks/glx/glslideshow.man | 2 +- hacks/glx/gltext.c | 2 +- hacks/glx/gltext.man | 2 +- hacks/glx/gltrackball.c | 4 +- hacks/glx/gltrackball.h | 2 +- hacks/glx/grab-ximage.c | 435 + hacks/glx/grab-ximage.h | 51 + hacks/glx/gravitywell.man | 2 +- hacks/glx/handsy.man | 2 +- hacks/glx/headroom.c | 567 + hacks/glx/headroom.dxf | 259600 +++++++++++++++ hacks/glx/headroom.man | 72 + hacks/glx/headroom_model.c | 26005 ++ hacks/glx/hexstrut.man | 2 +- hacks/glx/hilbert.man | 2 +- hacks/glx/hydrostat.man | 2 +- hacks/glx/hypertorus.c | 867 +- hacks/glx/hypertorus.man | 2 +- hacks/glx/hypnowheel.man | 2 +- hacks/glx/jigglypuff.man | 2 +- hacks/glx/jigsaw.man | 2 +- hacks/glx/juggler3d.c | 2 + hacks/glx/juggler3d.man | 2 +- hacks/glx/kaleidocycle.man | 2 +- hacks/glx/klein.c | 11 + hacks/glx/klein.man | 2 +- hacks/glx/lament.man | 2 +- hacks/glx/lavalite.man | 2 +- hacks/glx/lockward.man | 2 +- hacks/glx/maze3d.man | 2 +- hacks/glx/menger.man | 4 +- hacks/glx/mirrorblob.c | 2 +- hacks/glx/mirrorblob.man | 2 +- hacks/glx/moebius.man | 2 +- hacks/glx/moebiusgears.man | 2 +- hacks/glx/molecule.c | 15 +- hacks/glx/molecule.man | 2 +- hacks/glx/morph3d.man | 2 +- hacks/glx/noof.man | 2 +- hacks/glx/peepers.c | 4 +- hacks/glx/peepers.man | 2 +- hacks/glx/photopile.c | 2 + hacks/glx/photopile.man | 2 +- hacks/glx/pinion.c | 2 +- hacks/glx/pinion.man | 2 +- hacks/glx/pipes.man | 2 +- hacks/glx/polyhedra.man | 2 +- hacks/glx/polytopes.c | 1 + hacks/glx/polytopes.man | 6 +- hacks/glx/projectiveplane.c | 1276 +- hacks/glx/projectiveplane.man | 2 +- hacks/glx/providence.man | 2 +- hacks/glx/pulsar.man | 2 +- hacks/glx/quasicrystal.man | 2 +- hacks/glx/quickhull.c | 4 + hacks/glx/raverhoop.man | 2 +- hacks/glx/razzledazzle.c | 9 +- hacks/glx/razzledazzle.man | 2 +- hacks/glx/romanboy.c | 11 + hacks/glx/romanboy.man | 2 +- hacks/glx/rubik.man | 2 +- hacks/glx/rubikblocks.man | 2 +- hacks/glx/sballs.man | 2 +- hacks/glx/sierpinski3d.man | 2 +- hacks/glx/skytentacles.man | 2 +- hacks/glx/sonar-icmp.c | 19 +- hacks/glx/sonar.man | 2 +- hacks/glx/sphereeversion.c | 2079 + hacks/glx/sphereeversion.man | 256 + hacks/glx/spheremonics.man | 2 +- hacks/glx/splitflap.c | 1 + hacks/glx/splitflap.man | 2 +- hacks/glx/splodesic.man | 2 +- hacks/glx/sproingies.man | 2 +- hacks/glx/stairs.man | 2 +- hacks/glx/starwars.man | 2 +- hacks/glx/starwars.txt | 51 + hacks/glx/stonerview.man | 2 +- hacks/glx/superquadrics.man | 2 +- hacks/glx/surfaces.man | 2 +- hacks/glx/tangram.man | 2 +- hacks/glx/texfont.c | 7 +- hacks/glx/timetunnel.man | 2 +- hacks/glx/topblock.man | 2 +- hacks/glx/trackball.h | 2 +- hacks/glx/tronbit.man | 2 +- hacks/glx/unicrud.man | 2 +- hacks/glx/unknownpleasures.man | 2 +- hacks/glx/vigilance.man | 2 +- hacks/glx/voronoi.man | 2 +- hacks/glx/winduprobot.c | 6 +- hacks/glx/winduprobot.man | 2 +- hacks/glx/xscreensaver-gl-helper.man | 2 +- hacks/goop.man | 2 +- hacks/grav.man | 2 +- hacks/greynetic.man | 2 +- hacks/halftone.man | 2 +- hacks/halo.man | 2 +- hacks/helix.man | 2 +- hacks/hexadrop.man | 2 +- hacks/hopalong.man | 2 +- hacks/hyperball.man | 2 +- hacks/hypercube.man | 2 +- hacks/ifs.man | 2 +- hacks/images/Makefile | 1 - hacks/images/Makefile.in | 1 - hacks/images/gnome1.png | Bin 0 -> 17901 bytes hacks/images/gnome2.png | Bin 0 -> 1867 bytes hacks/imsmap.man | 2 +- hacks/interaggregate.man | 2 +- hacks/interference.man | 2 +- hacks/intermomentary.man | 2 +- hacks/juggle.man | 2 +- hacks/julia.man | 2 +- hacks/kaleidescope.man | 2 +- hacks/kumppa.man | 2 +- hacks/laser.man | 2 +- hacks/lcdscrub.man | 2 +- hacks/lightning.man | 2 +- hacks/lisa.man | 2 +- hacks/lissie.man | 2 +- hacks/ljlatest.man | 2 +- hacks/loop.man | 2 +- hacks/memscroller.man | 2 +- hacks/metaballs.man | 2 +- hacks/moire.man | 2 +- hacks/moire2.man | 2 +- hacks/mountain.man | 2 +- hacks/munch.c | 19 +- hacks/munch.man | 2 +- hacks/munge-ad.pl | 6 +- hacks/nerverot.man | 2 +- hacks/noseguy.c | 9 +- hacks/noseguy.man | 2 +- hacks/pacman.man | 2 +- hacks/pedal.man | 2 +- hacks/penetrate.man | 2 +- hacks/penrose.c | 11 - hacks/penrose.man | 4 +- hacks/petri.man | 2 +- hacks/phosphor.c | 8 +- hacks/phosphor.man | 2 +- hacks/piecewise.man | 2 +- hacks/polyominoes.c | 4 + hacks/polyominoes.man | 2 +- hacks/pong.c | 2 +- hacks/pong.man | 2 +- hacks/pyro.man | 2 +- hacks/qix.man | 2 +- hacks/rd-bomb.man | 2 +- hacks/recanim.c | 2 +- hacks/ripples.man | 2 +- hacks/rocks.man | 2 +- hacks/rorschach.man | 2 +- hacks/rotor.man | 2 +- hacks/rotzoomer.man | 2 +- hacks/scooter.man | 2 +- hacks/screenhack.c | 2 +- hacks/screenhackI.h | 2 +- hacks/shadebobs.man | 2 +- hacks/sierpinski.man | 2 +- hacks/slidescreen.man | 2 +- hacks/slip.man | 2 +- hacks/speedmine.man | 2 +- hacks/sphere.man | 2 +- hacks/spiral.man | 2 +- hacks/spotlight.man | 2 +- hacks/squiral.man | 2 +- hacks/starfish.man | 2 +- hacks/strange.man | 2 +- hacks/substrate.man | 2 +- hacks/swirl.man | 2 +- hacks/tessellimage.c | 2 +- hacks/tessellimage.man | 2 +- hacks/testx11.c | 3 +- hacks/thornbird.man | 2 +- hacks/triangle.man | 2 +- hacks/truchet.man | 2 +- hacks/twang.man | 2 +- hacks/vermiculate.man | 2 +- hacks/vfeedback.man | 2 +- hacks/vidwhacker | 77 +- hacks/vidwhacker.man | 2 +- hacks/vines.man | 2 +- hacks/wander.man | 2 +- hacks/webcollage-cocoa.m | 4 +- hacks/webcollage-helper.c | 14 +- hacks/webcollage.man | 2 +- hacks/whirlwindwarp.man | 2 +- hacks/worm.man | 2 +- hacks/wormhole.man | 2 +- hacks/xanalogtv.c | 4 +- hacks/xanalogtv.man | 2 +- hacks/xflame.man | 2 +- hacks/ximage-loader.c | 15 +- hacks/xjack.man | 2 +- hacks/xlockmoreI.h | 2 +- hacks/xmatrix.c | 2 +- hacks/xmatrix.man | 2 +- hacks/xml2man.pl | 4 +- hacks/xrayswarm.man | 2 +- hacks/xspirograph.man | 2 +- hacks/xsublim.c | 4 + hacks/xsublim.man | 2 +- hacks/zoom.man | 2 +- intltool-update.in | 6 +- jwxyz/jwxyz-cocoa.h | 16 +- jwxyz/jwxyz-cocoa.m | 56 +- jwxyz/jwxyz-gl.c | 6 +- jwxyz/jwxyz.m | 30 +- jwxyz/jwxyzI.h | 2 +- jwxyz/jwzgles.c | 2 +- jwxyz/jwzgles.h | 1 - po/Makefile.in.in | 6 +- po/POTFILES.in | 8 +- po/da.po | 2 +- po/de.po | 2 +- po/es.po | 2 +- po/et.po | 2 +- po/fi.po | 2 +- po/fr.po | 2 +- po/hu.po | 2 +- po/it.po | 2 +- po/ja.po | 2 +- po/ko.po | 2 +- po/nb.po | 2 +- po/nl.po | 2 +- po/pl.po | 2 +- po/pt.po | 2 +- po/pt_BR.po | 2 +- po/ru.po | 2 +- po/sk.po | 2 +- po/sv.po | 2 +- po/vi.po | 2 +- po/wa.po | 2 +- po/zh_CN.po | 2 +- po/zh_TW.po | 2 +- utils/Makefile.in | 2 +- utils/font-retry.c | 13 +- utils/grabclient.c | 20 +- utils/grabscreen.h | 4 +- utils/queue.h | 638 + utils/textclient-mobile.c | 2 +- utils/textclient.c | 80 +- utils/textclient.h | 4 +- utils/usleep.h | 4 - utils/utf8wc.c | 6 +- utils/version.h | 2 +- utils/xshm.c | 14 +- utils/yarandom.c | 4 +- xscreensaver.spec | 23 +- 472 files changed, 310627 insertions(+), 15085 deletions(-) create mode 100644 android/xscreensaver/#build.gradle# rename configure.in => configure.ac (90%) delete mode 100644 driver/xscreensaver-demo.glade2.in delete mode 100644 driver/xscreensaver-demo.glade2p create mode 100644 driver/xscreensaver-demo.ui create mode 100644 hacks/config/beats.xml create mode 100644 hacks/config/co____9.xml create mode 100644 hacks/config/covid19.xml create mode 100644 hacks/config/headroom.xml create mode 100644 hacks/config/sphereeversion.xml create mode 100644 hacks/glx/beats.c create mode 100644 hacks/glx/beats.man create mode 120000 hacks/glx/co____9.c create mode 100644 hacks/glx/covid19.c create mode 100644 hacks/glx/covid19.man create mode 100644 hacks/glx/glsl_support.c create mode 100644 hacks/glx/glsl_support.h create mode 100644 hacks/glx/headroom.c create mode 100644 hacks/glx/headroom.dxf create mode 100644 hacks/glx/headroom.man create mode 100644 hacks/glx/headroom_model.c create mode 100644 hacks/glx/sphereeversion.c create mode 100644 hacks/glx/sphereeversion.man create mode 100644 hacks/images/gnome1.png create mode 100644 hacks/images/gnome2.png mode change 100644 => 100755 intltool-update.in create mode 100644 utils/queue.h diff --git a/Makefile.in b/Makefile.in index 52f1b4f0..30a1db97 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/OSX/InvertedSlider.h b/OSX/InvertedSlider.h index 22209020..2ad6fd5a 100644 --- a/OSX/InvertedSlider.h +++ b/OSX/InvertedSlider.h @@ -12,7 +12,7 @@ * the high value is on the left and the low value is on the right. */ -#ifdef USE_IPHONE +#ifdef HAVE_IPHONE # import # define NSSlider UISlider # define NSRect CGRect @@ -30,7 +30,7 @@ - (id) initWithFrame:(NSRect)r inverted:(BOOL)_inv integers:(BOOL)_int; -# ifdef USE_IPHONE +# ifdef HAVE_IPHONE - (double) transformedValue; - (void) setTransformedValue:(double)v; # endif diff --git a/OSX/InvertedSlider.m b/OSX/InvertedSlider.m index 6ac0b419..e53e3611 100644 --- a/OSX/InvertedSlider.m +++ b/OSX/InvertedSlider.m @@ -49,7 +49,7 @@ return v2; } -#ifndef USE_IPHONE +#ifndef HAVE_IPHONE /* On MacOS, we have to transform the value on every entry and exit point to this class. So, we implement doubleValue and setDoubleValue to @@ -110,7 +110,7 @@ [self setDoubleValue:[((NSNumber *) v) doubleValue]]; } -#else // USE_IPHONE +#else // HAVE_IPHONE /* On iOS, we have control over how the value is displayed, but there's no way to transform the value on input and output: if we wrap 'value' and @@ -145,7 +145,7 @@ [self setValue: [self transformValue: v]]; } -#endif // USE_IPHONE +#endif // HAVE_IPHONE @end diff --git a/OSX/Makefile b/OSX/Makefile index ca0ed5f0..845fb52c 100644 --- a/OSX/Makefile +++ b/OSX/Makefile @@ -118,7 +118,7 @@ $(THUMBDIR)/%.png: check_versions: @\ SRC=../utils/version.h ; \ - V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' $$SRC` ; \ + V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^ ]*\).*/\1/p' $$SRC` ; \ DIR=build/Release ; \ RESULT=0 ; \ for S in $$DIR/*.{saver,app} ; do \ @@ -213,7 +213,7 @@ echo_tarfiles: update_plist_version: @ \ SRC=../utils/version.h ; \ - V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' $$SRC` ; \ + V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^ ]*\).*/\1/p' $$SRC` ; \ T=/tmp/xs.$$$$ ; \ for S in *.plist ; do \ /bin/echo -n "Updating version number in $$S to \"$$V\"... " ; \ @@ -238,7 +238,7 @@ updates.xml:: test_sig:: @ \ U=../utils/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` ; \ BASE="xscreensaver-$$V" ; \ OUTDIR="../archive" ; \ DMG="$$OUTDIR/$$BASE.dmg" ; \ @@ -256,7 +256,7 @@ test_sig:: for OPENSSL in /usr/bin/openssl /opt/local/bin/openssl ; do \ $$OPENSSL dgst -sha1 -binary < "$$DMG" > "$$HASH" ; \ /bin/echo -n "$$OPENSSL `$$OPENSSL version`: " ; \ - $$OPENSSL dgst -dss1 -verify "$$PUB" -signature "$$SIGB" "$$HASH" ; \ + $$OPENSSL dgst -sha1 -verify "$$PUB" -signature "$$SIGB" "$$HASH" ; \ done ; \ rm -f "$$SIGB" "$$HASH" ; \ @@ -265,7 +265,7 @@ build/Release/installer.pkg: installer.rtf installer.xml installer.sh installer. @\ set -e ; \ SRC=../utils/version.h ; \ - V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' $$SRC` ; \ + V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^ ]*\).*/\1/p' $$SRC` ; \ \ DIST="installer.xml" ; \ STAGE="build/Release/pkg_stage" ; \ @@ -304,7 +304,7 @@ _dmg:: @ \ set -e ; \ SRC=../utils/version.h ; \ - V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' $$SRC` ; \ + V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^ ]*\).*/\1/p' $$SRC` ; \ TMPDIR="build" ; \ SRC="build/Release" ; \ EXTRAS=../../xdaliclock/OSX/build/Release/*.saver ; \ @@ -335,24 +335,26 @@ _dmg:: ok=yes ; \ ff=`echo $$f | perl -e '$$_=<>; s@^.*/(.*)\..*$$@\L$$1@; print'`; \ for r in $$retired ; do \ - if [ "$$ff" = "$$r" ]; then ok=no ; fi ; \ + if [ "$$ff" = "$$r" ]; then ok=no ; fi ; \ done ; \ if [ "$$ff" = testx11 ]; then ok=no ; fi ; \ if [ "$$f2" = "XScreenSaverUpdater.app" ]; then \ - DST_HACK="XScreenSaver.updater" ; \ - echo + tar ... "$$DST/$$DST_HACK" ; \ - ( cd $$SRC ; tar -czf - "$$f2" ) > "$$DST/$$DST_HACK" ; \ + DST_HACK="XScreenSaver.updater" ; \ + echo + tar ... "$$DST/$$DST_HACK" ; \ + CWD=`pwd` ; \ + ( cd $$SRC ; tar -czf "$$CWD/$$DST/$$DST_HACK" "$$f2" ) ; \ + echo ' fuck you apple' >> $$DST/$$DST_HACK ; \ elif [ "$$ok" = yes ]; then \ - echo + cp -pR "$$f" "$$DST/" ; \ - cp -pR "$$f" "$$DST/" ; \ + echo + cp -pR "$$f" "$$DST/" ; \ + cp -pR "$$f" "$$DST/" ; \ else \ - echo skipping "$$f" ; \ + echo skipping "$$f" ; \ fi ; \ done ; \ \ - true codesign --force --sign $(CERT2) "$$DST/"*.app/Contents/Resources/*.saver ; \ - rm -rf "$$DST/"*.app/Contents/Resources/*.saver/Contents/_CodeSignature ; \ - codesign --force --sign $(CERT2) "$$DST/"*.app ; \ + echo "Re-signing Apple2 and Phosphor..." ; \ + codesign --force --sign $(CERT2) --timestamp -o runtime "$$DST/"*.app/Contents/PlugIns/*.saver ; \ + codesign --force --sign $(CERT2) --timestamp -o runtime "$$DST/"*.app ; \ \ set -x ; \ cp -p bindist.rtf "$$STAGE/Read Me.rtf" ; \ @@ -373,11 +375,6 @@ _dmg:: mv "$$STAGE/bindist.webloc" "$$STAGE/Get the iPhone:iPad Version.webloc" ; \ mv "$$STAGE/bindist2.webloc" "$$STAGE/Get the Android Version.webloc" ; \ \ - echo Fuck this shit. ; \ - rm -r "$$DST"/Apple2.app ; \ - rm -r "$$DST"/Phosphor.app ; \ - rm -r "$$DST"/WebCollage.saver ; \ - \ set +x ; \ \ echo "Chowning..." ; \ @@ -386,14 +383,13 @@ _dmg:: echo "Checking signatures..." ; \ spctl --assess --type install "$$PKG" ; \ spctl --assess --type execute "$$SRC/XScreenSaverUpdater.app" ; \ - true spctl --assess --type execute "$$DST/"*.app ; \ + spctl --assess --type execute "$$DST/"*.app ; \ spctl --assess --type install "$$DST/"*.saver ; \ set -x ; \ \ hdiutil makehybrid -quiet -ov -hfs -hfs-volume-name "$$VOLNAME" \ -hfs-openfolder "$$STAGE" "$$STAGE" -o "$$TMPDMG" ; \ - echo "Chowning back and deleting..." ; \ - sudo chown -R `whoami` "$$STAGE/"* ; \ + echo "Deleting..." ; \ sudo rm -rf "$$STAGE" ; \ \ hdiutil convert -quiet -ov -format UDBZ -imagekey zlib-level=9 \ @@ -405,7 +401,6 @@ _dmg:: spctl --assess --type install "$$DMG" ; \ \ ls -ldhgF "$$DMG" ; \ - $(MAKE2) notarize ; \ # To set up notarization: @@ -426,39 +421,69 @@ _dmg:: # NOTARGS=-u "jwz@jwz.org" -p "@keychain:altool-notarizer" + +# Send a notarization request, and then wait for the result. +# Staple once the results are in. +# notarize:: @ \ set -e ; \ SRC=../utils/version.h ; \ - V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' $$SRC` ; \ + V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^ ]*\).*/\1/p' $$SRC` ; \ BASE="xscreensaver-$$V" ; \ OUTDIR="../archive" ; \ DMG="$$OUTDIR/$$BASE.dmg" ; \ - set -x ; \ - xcrun altool --notarize-app --primary-bundle-id "org.jwz.xscreensaver" \ - --file "$$DMG" $(NOTARGS) ; \ + CMD='xcrun altool --notarize-app --primary-bundle-id org.jwz.xscreensaver'; \ + CMD="$$CMD --file $$DMG $(NOTARGS)" ; \ + echo "+ $$CMD" ; \ echo "" ; \ - sleep 3 ; \ - $(MAKE2) notarize_wait staple updates.xml - + RET=`$$CMD` ; \ + echo "$$RET"; \ + echo "" ; \ + ID=`echo "$$RET" | sed -n 's/RequestUUID *= *\(.*\)/\1/p'` ; \ + if [ "x$$ID" = "x" ]; then \ + echo "unparsable RequestUUID" ; \ + exit 1 ; \ + else \ + set -x ; \ + export NOTARIZE_UUID="$$ID" ; \ + $(MAKE2) notarize_wait staple updates.xml ; \ + fi ; \ + + +# Keep probing Apple's server until we have a result for this notarization. +# We can't staple until the results are in. +# notarize_wait:: - @TODAY=`date +%Y-%m-%d` ; \ - while ( xcrun altool --notarization-history 0 $(NOTARGS) | \ - grep "$$TODAY" | \ - grep -q 'in progress' ); do \ - echo `date +%I:%M:` "waiting for notarization..." ; \ - xcrun altool --notarization-history 0 $(NOTARGS) | \ - grep "$$TODAY" ; \ - sleep 15 ; \ - done ; \ - echo '' ; \ - xcrun altool --notarization-history 0 $(NOTARGS) ; \ + @if [ "x$$NOTARIZE_UUID" = "x" ]; then \ + echo "NOTARIZE_UUID is unset" ; \ + exit 1 ; \ + fi ; \ + CMD="xcrun altool --notarization-info $$NOTARIZE_UUID $(NOTARGS)" ; \ + echo "+ $$CMD" ; \ + while true ; do \ + RET=`$$CMD` ; \ + STATUS=`echo "$$RET" | sed -n 's/^ *Status: *\(.*\)/\1/p'` ; \ + if [ "x$$STATUS" = 'xin progress' ]; then \ + echo " `date +%H:%M:%S` $$STATUS..." ; \ + sleep 15 ; \ + elif [ "x$$STATUS" = 'xsuccess' ]; then \ + echo "" ; \ + echo "$$RET" ; \ + echo "" ; \ + exit 0 ; \ + else \ + echo "" ; \ + echo "$$RET" ; \ + exit 1 ; \ + fi ; \ + done ; \ staple:: @ \ set -e ; \ SRC=../utils/version.h ; \ - V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^. ]*\).*/\1/p' $$SRC` ; \ + V=`sed -n 's/[^0-9]*\([0-9]\.[0-9][^ ]*\).*/\1/p' $$SRC` ; \ BASE="xscreensaver-$$V" ; \ OUTDIR="../archive" ; \ DMG="$$OUTDIR/$$BASE.dmg" ; \ diff --git a/OSX/PrefsReader.h b/OSX/PrefsReader.h index 492d4eaf..0b9ed02b 100644 --- a/OSX/PrefsReader.h +++ b/OSX/PrefsReader.h @@ -16,7 +16,7 @@ the UI (XScreenSaverConfigSheet). */ -#ifdef USE_IPHONE +#ifdef HAVE_IPHONE # import # import # define NSUserDefaultsController NSUserDefaults diff --git a/OSX/PrefsReader.m b/OSX/PrefsReader.m index 11f7feeb..80211fcf 100644 --- a/OSX/PrefsReader.m +++ b/OSX/PrefsReader.m @@ -16,7 +16,7 @@ the UI (XScreenSaverConfigSheet). */ -#ifndef USE_IPHONE +#ifndef HAVE_IPHONE # import #endif @@ -24,7 +24,7 @@ #import "Updater.h" #import "screenhackI.h" -#ifndef USE_IPHONE +#ifndef HAVE_IPHONE #include @@ -202,7 +202,7 @@ @end -#endif // !USE_IPHONE +#endif // !HAVE_IPHONE @implementation PrefsReader @@ -216,7 +216,7 @@ */ - (NSString *) makeKey:(NSString *)key { -# ifdef USE_IPHONE +# ifdef HAVE_IPHONE NSString *prefix = [saver_name stringByAppendingString:@"."]; if (! [key hasPrefix:prefix]) // Don't double up! key = [prefix stringByAppendingString:key]; @@ -308,17 +308,17 @@ [defaultOptions setValue:[defsdict objectForKey:key] forKey:key]; } -# ifndef USE_IPHONE +# ifndef HAVE_IPHONE userDefaultsController = [[NSUserDefaultsController alloc] initWithDefaults:userDefaults initialValues:defsdict]; globalDefaultsController = [[NSUserDefaultsController alloc] initWithDefaults:globalDefaults initialValues:UPDATER_DEFAULTS]; -# else // USE_IPHONE +# else // HAVE_IPHONE userDefaultsController = [userDefaults retain]; globalDefaultsController = [userDefaults retain]; -# endif // USE_IPHONE +# endif // HAVE_IPHONE NSDictionary *optsdict = [NSMutableDictionary dictionaryWithCapacity:20]; @@ -577,14 +577,14 @@ self = [self init]; if (!self) return nil; -# ifndef USE_IPHONE +# ifndef HAVE_IPHONE userDefaults = [ScreenSaverDefaults defaultsForModuleWithName:name]; globalDefaults = [[GlobalDefaults alloc] initWithDomain:@UPDATER_DOMAIN module:name]; -# else // USE_IPHONE +# else // HAVE_IPHONE userDefaults = [NSUserDefaults standardUserDefaults]; globalDefaults = [userDefaults retain]; -# endif // USE_IPHONE +# endif // HAVE_IPHONE // Convert "org.jwz.xscreensaver.NAME" to just "NAME". NSRange r = [name rangeOfString:@"." options:NSBackwardsSearch]; diff --git a/OSX/README b/OSX/README index 502ad101..1ca1b27b 100644 --- a/OSX/README +++ b/OSX/README @@ -8,10 +8,13 @@ directories. If you build using anything later than Xcode 5.0.2, the resultant savers will require MacOS 10.7 or later. To support 10.4 through 10.6, you must -use Xcode 5.0.2 or earlier. +use Xcode 5.0.2 or earlier. Apple's longstanding corporate policy of +planned obsolescence means that they make it as difficult as possible for +you to support anything that's more than two years old, six months for iOS. -This is how you add a new screen saver to the Xcode project. It's a -ridiculously long list of steps! +This is how you add a new screen saver to the Xcode project. It's a +ridiculously long list of steps! I tried to automate it with Applescript +but that appears to be impossible. 1: Duplicate a target (Dangerball for GL, or Attraction for X11). 2: Rename it, and drag it to the right spot in the list. diff --git a/OSX/SaverListController.h b/OSX/SaverListController.h index 421ea2e4..6086a271 100644 --- a/OSX/SaverListController.h +++ b/OSX/SaverListController.h @@ -11,7 +11,7 @@ * This implements the top-level screen-saver selection list in the iOS app. */ -#ifdef USE_IPHONE +#ifdef HAVE_IPHONE #import @@ -38,4 +38,4 @@ - (void) scrollTo:(NSString *)name; @end -#endif // USE_IPHONE +#endif // HAVE_IPHONE diff --git a/OSX/SaverListController.m b/OSX/SaverListController.m index ae91d16d..56189de9 100644 --- a/OSX/SaverListController.m +++ b/OSX/SaverListController.m @@ -11,7 +11,7 @@ * This implements the top-level screen-saver selection list in the iOS app. */ -#ifdef USE_IPHONE // whole file +#ifdef HAVE_IPHONE // whole file #import "SaverListController.h" @@ -415,4 +415,4 @@ @end -#endif // USE_IPHONE -- whole file +#endif // HAVE_IPHONE -- whole file diff --git a/OSX/SaverRunner.h b/OSX/SaverRunner.h index e8f96820..14c51bf6 100644 --- a/OSX/SaverRunner.h +++ b/OSX/SaverRunner.h @@ -9,7 +9,7 @@ * implied warranty. */ -#ifdef USE_IPHONE +#ifdef HAVE_IPHONE # import # import # import @@ -33,7 +33,7 @@ #import "XScreenSaverView.h" -#ifdef USE_IPHONE +#ifdef HAVE_IPHONE @class SaverRunner; @@ -54,7 +54,7 @@ #endif @interface SaverRunner : NSObject -# ifdef USE_IPHONE +# ifdef HAVE_IPHONE # else @@ -64,14 +64,14 @@ NSArray *saverNames; // Names of available savers NSString *saverDir; // Where we find saver bundles -# ifndef USE_IPHONE +# ifndef HAVE_IPHONE NSBundle *saverBundle; NSArray *windows; IBOutlet NSMenu *menubar; NSTimer *anim_timer; -# else // USE_IPHONE +# else // HAVE_IPHONE UINavigationController *rotating_nav; // Hierarchy 1 (UI) IBOutlet UIWindow *window; @@ -81,7 +81,7 @@ UIImage *saved_screenshot; -# endif // USE_IPHONE +# endif // HAVE_IPHONE } - (XScreenSaverView *) newSaverView: (NSString *) module @@ -89,12 +89,12 @@ - (void) loadSaver: (NSString *)name; - (void) selectedSaverDidChange:(NSDictionary *)change; -#ifndef USE_IPHONE +#ifndef HAVE_IPHONE - (void) openPreferences: (id)sender; -#else // USE_IPHONE +#else // HAVE_IPHONE - (UIImage *) screenshot; - (NSString *) makeDesc:(NSString *)saver yearOnly:(BOOL) yearp; -#endif // USE_IPHONE +#endif // HAVE_IPHONE @end diff --git a/OSX/SaverRunner.m b/OSX/SaverRunner.m index 7fd42477..e015efa5 100644 --- a/OSX/SaverRunner.m +++ b/OSX/SaverRunner.m @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 2006-2019 Jamie Zawinski +/* xscreensaver, Copyright (c) 2006-2020 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 @@ -35,7 +35,7 @@ #import "XScreenSaverGLView.h" #import "yarandom.h" -#ifdef USE_IPHONE +#ifdef HAVE_IPHONE # ifndef __IPHONE_8_0 # define UIInterfaceOrientationUnknown UIDeviceOrientationUnknown @@ -485,7 +485,7 @@ NSLog(@"## completion %@", context); @end -#endif // USE_IPHONE +#endif // HAVE_IPHONE @implementation SaverRunner @@ -496,7 +496,7 @@ NSLog(@"## completion %@", context); { Class new_class = 0; -# ifndef USE_IPHONE +# ifndef HAVE_IPHONE // Load the XScreenSaverView subclass and code from a ".saver" bundle. @@ -520,7 +520,7 @@ NSLog(@"## completion %@", context); // if (obundle && obundle != saverBundle) // [obundle unload]; -# else // USE_IPHONE +# else // HAVE_IPHONE // Determine whether to create an X11 view or an OpenGL view by // looking for the "gl" tag in the xml file. This is kind of awful. @@ -540,7 +540,7 @@ NSLog(@"## completion %@", context); ? [XScreenSaverGLView class] : [XScreenSaverView class]); -# endif // USE_IPHONE +# endif // HAVE_IPHONE if (! new_class) return 0; @@ -566,7 +566,7 @@ NSLog(@"## completion %@", context); This is kind of horrible but I haven't thought of a more sensible way to make this work. */ -# ifndef USE_IPHONE +# ifndef HAVE_IPHONE if ([saverNames count] == 1) { setenv ("XSCREENSAVER_STANDALONE", "1", 1); } @@ -576,7 +576,7 @@ NSLog(@"## completion %@", context); } -#ifndef USE_IPHONE +#ifndef HAVE_IPHONE static ScreenSaverView * find_saverView_child (NSView *v) @@ -680,7 +680,7 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) [NSApp stopModalWithCode:returnCode]; } -#else // USE_IPHONE +#else // HAVE_IPHONE - (UIImage *) screenshot @@ -800,13 +800,13 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) } -#endif // USE_IPHONE +#endif // HAVE_IPHONE - (void)loadSaver:(NSString *)name { -# ifndef USE_IPHONE +# ifndef HAVE_IPHONE if (saverName && [saverName isEqualToString: name]) { for (NSWindow *win in windows) { @@ -851,7 +851,7 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) [NSUserDefaultsController sharedUserDefaultsController]; [ctl save:self]; -# else // USE_IPHONE +# else // HAVE_IPHONE # if !defined __OPTIMIZE__ || TARGET_IPHONE_SIMULATOR NSLog (@"selecting saver \"%@\"", name); @@ -971,11 +971,11 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) // even though [XScreenSaverView stopAndClose] does setHidden:NO first. // [window setHidden:YES]; -# endif // USE_IPHONE +# endif // HAVE_IPHONE } -#ifndef USE_IPHONE +#ifndef HAVE_IPHONE - (void)aboutPanel:(id)sender { @@ -997,7 +997,7 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) orderFrontStandardAboutPanelWithOptions:d]; } -#endif // !USE_IPHONE +#endif // !HAVE_IPHONE @@ -1019,7 +1019,7 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) - (NSArray *) listSaverBundleNamesInDir:(NSString *)dir { -# ifndef USE_IPHONE +# ifndef HAVE_IPHONE NSString *ext = @"saver"; # else NSString *ext = @"xml"; @@ -1036,7 +1036,7 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) NSString *name = [[p lastPathComponent] stringByDeletingPathExtension]; -# ifdef USE_IPHONE +# ifdef HAVE_IPHONE // Get the saver name's capitalization right by reading the XML file. p = [dir stringByAppendingPathComponent: p]; @@ -1051,7 +1051,7 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) if (r.length) name = [xml substringToIndex: r.location]; } -# endif // USE_IPHONE +# endif // HAVE_IPHONE NSAssert1 (name, @"no name in %@", p); if (name) [result addObject: name]; @@ -1070,7 +1070,7 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) { NSMutableArray *dirs = [NSMutableArray arrayWithCapacity: 10]; -# ifndef USE_IPHONE +# ifndef HAVE_IPHONE // On MacOS, look in the "Contents/Resources/" and "Contents/PlugIns/" // directories in the bundle. [dirs addObject: [[[[NSBundle mainBundle] bundlePath] @@ -1087,12 +1087,12 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) // [dirs addObject: @"/Library/Screen Savers"]; // [dirs addObject: @"/System/Library/Screen Savers"]; -# else // USE_IPHONE +# else // HAVE_IPHONE // On iOS, only look in the bundle's root directory. [dirs addObject: [[NSBundle mainBundle] bundlePath]]; -# endif // USE_IPHONE +# endif // HAVE_IPHONE int i; for (i = 0; i < [dirs count]; i++) { @@ -1118,7 +1118,7 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) /* Create the popup menu of available saver names. */ -#ifndef USE_IPHONE +#ifndef HAVE_IPHONE - (NSPopUpButton *) makeMenu { @@ -1162,7 +1162,7 @@ relabel_menus (NSObject *v, NSString *old_str, NSString *new_str) return popup; } -#else // USE_IPHONE +#else // HAVE_IPHONE - (NSString *) makeDesc:(NSString *)saver yearOnly:(BOOL) yearp @@ -1301,7 +1301,7 @@ FAIL: } -#endif // USE_IPHONE +#endif // HAVE_IPHONE @@ -1325,7 +1325,7 @@ FAIL: } -# ifndef USE_IPHONE +# ifndef HAVE_IPHONE /* Create the desktop window shell, possibly including a preferences button. */ @@ -1452,21 +1452,21 @@ FAIL: } } -# endif // !USE_IPHONE +# endif // !HAVE_IPHONE - (void)applicationDidFinishLaunching: -# ifndef USE_IPHONE +# ifndef HAVE_IPHONE (NSNotification *) notif -# else // USE_IPHONE +# else // HAVE_IPHONE (UIApplication *) application -# endif // USE_IPHONE +# endif // HAVE_IPHONE { [self listSaverBundleNames]; NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; -# ifndef USE_IPHONE +# ifndef HAVE_IPHONE int window_count = ([saverNames count] <= 1 ? 1 : 2); NSMutableArray *a = [[NSMutableArray arrayWithCapacity: window_count+1] retain]; @@ -1488,7 +1488,7 @@ FAIL: win.releasedWhenClosed = NO; [win release]; } -# else // USE_IPHONE +# else // HAVE_IPHONE # undef ya_rand_init ya_rand_init (0); // Now's a good time. @@ -1525,7 +1525,7 @@ FAIL: application.applicationSupportsShakeToEdit = YES; -# endif // USE_IPHONE +# endif // HAVE_IPHONE NSString *forced = 0; /* In the XCode project, each .saver scheme sets this env var when @@ -1548,12 +1548,19 @@ FAIL: if (!forced && [saverNames count] == 1) forced = [saverNames objectAtIndex:0]; -# ifdef USE_IPHONE +# ifdef HAVE_IPHONE NSString *prev = [prefs stringForKey:@"selectedSaverName"]; if (forced) prev = forced; + if (prev && ! [saverNames containsObject:prev]) { + NSLog (@"prev saver \"%@\" does not exist", prev); + prev = forced = 0; + [prefs removeObjectForKey:@"selectedSaverName"]; + [prefs removeObjectForKey:@"wasRunning"]; + } + // If nothing was selected (e.g., this is the first launch) // then scroll randomly instead of starting up at "A". // @@ -1562,12 +1569,12 @@ FAIL: if (prev) [menu scrollTo: prev]; -# endif // USE_IPHONE +# endif // HAVE_IPHONE if (forced) [prefs setObject:forced forKey:@"selectedSaverName"]; -# ifdef USE_IPHONE +# ifdef HAVE_IPHONE /* Don't auto-launch the saver unless it was running last time. XScreenSaverView manages this, on crash_timer. Unless forced. @@ -1585,7 +1592,7 @@ FAIL: -# ifndef USE_IPHONE +# ifndef HAVE_IPHONE /* On 10.8 and earlier, [ScreenSaverView startAnimation] causes the ScreenSaverView to run its own timer calling animateOneFrame. On 10.9, that fails because the private class ScreenSaverModule @@ -1609,11 +1616,11 @@ FAIL: repeats:YES]; } } -# endif // !USE_IPHONE +# endif // !HAVE_IPHONE } -#ifndef USE_IPHONE +#ifndef HAVE_IPHONE /* When the window closes, exit (even if prefs still open.) */ @@ -1634,7 +1641,7 @@ FAIL: [sv stopAnimation]; } -# else // USE_IPHONE +# else // HAVE_IPHONE - (void)applicationWillResignActive:(UIApplication *)app { @@ -1651,7 +1658,7 @@ FAIL: [(XScreenSaverView *)view setScreenLocked:YES]; } -#endif // USE_IPHONE +#endif // HAVE_IPHONE @end diff --git a/OSX/SaverRunner.plist b/OSX/SaverRunner.plist index d7fd9497..a949df4a 100644 --- a/OSX/SaverRunner.plist +++ b/OSX/SaverRunner.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleGetInfoString - 5.44 + 5.45 CFBundleIconFile SaverRunner CFBundleIdentifier @@ -15,24 +15,26 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString - 5.44 + 5.45 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString - 5.44 + 5.45 CFBundleSignature ???? CFBundleVersion - 5.44 + 5.45 LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} NSHumanReadableCopyright - 5.44 + 5.45 NSMainNibFile SaverRunner NSPrincipalClass NSApplication + LSApplicationCategoryType + public.app-category.entertainment diff --git a/OSX/Updater.plist b/OSX/Updater.plist index 270d72fe..c2ed39a5 100644 --- a/OSX/Updater.plist +++ b/OSX/Updater.plist @@ -9,7 +9,7 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleGetInfoString - 5.44 + 5.45 CFBundleIconFile SaverRunner CFBundleIdentifier @@ -17,23 +17,25 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString - 5.44 + 5.45 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL CFBundleShortVersionString - 5.44 + 5.45 CFBundleSignature ???? CFBundleVersion - 5.44 + 5.45 + LSApplicationCategoryType + public.app-category.entertainment LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} LSUIElement NSHumanReadableCopyright - 5.44 + 5.45 NSMainNibFile Updater NSPrincipalClass diff --git a/OSX/XScreenSaver.plist b/OSX/XScreenSaver.plist index d8433d02..b028d15e 100644 --- a/OSX/XScreenSaver.plist +++ b/OSX/XScreenSaver.plist @@ -15,16 +15,18 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 5.44 + 5.45 CFBundleSignature ???? CFBundleVersion - 5.44 + 5.45 LSMinimumSystemVersion 10.8 NSMainNibFile SaverRunner NSPrincipalClass XScreenSaver${EXECUTABLE_NAME}View + LSApplicationCategoryType + public.app-category.entertainment diff --git a/OSX/XScreenSaverConfigSheet.h b/OSX/XScreenSaverConfigSheet.h index ae558dee..f2b000af 100644 --- a/OSX/XScreenSaverConfigSheet.h +++ b/OSX/XScreenSaverConfigSheet.h @@ -23,7 +23,7 @@ specified in the XML to the resource names to use). */ -#ifdef USE_IPHONE +#ifdef HAVE_IPHONE # import # import # define NSView UIView @@ -39,7 +39,7 @@ #undef USE_PICKER_VIEW @interface XScreenSaverConfigSheet : -# ifdef USE_IPHONE +# ifdef HAVE_IPHONE UITableViewController +/* xscreensaver, Copyright (c) 2006-2020 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 @@ -29,7 +29,7 @@ #import "jwxyz.h" #import "InvertedSlider.h" -#ifdef USE_IPHONE +#ifdef HAVE_IPHONE # define NSView UIView # define NSRect CGRect # define NSSize CGSize @@ -46,7 +46,18 @@ # define LABEL UILabel #else # define LABEL NSTextField -#endif // USE_IPHONE +#endif // HAVE_IPHONE + +# if defined(HAVE_IPHONE) && (__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0) +# define USE_WEBKIT +# endif + +#ifdef USE_WEBKIT +# import +# define UIWebView WKWebView +# define UIWebViewDelegate WKUIDelegate +#endif + #undef LABEL_ABOVE_SLIDER #define USE_HTML_LABELS @@ -164,7 +175,7 @@ typedef enum { SimpleXMLCommentKind, // A value transformer for mapping "url" to "3" and vice versa in the // "textMode" preference, since NSMatrix uses NSInteger selectedIndex. -#ifndef USE_IPHONE +#ifndef HAVE_IPHONE @interface TextModeTransformer: NSValueTransformer {} @end @implementation TextModeTransformer @@ -217,7 +228,7 @@ typedef enum { SimpleXMLCommentKind, return value ? value : @""; } @end -#endif // !USE_IPHONE +#endif // !HAVE_IPHONE #pragma mark Implementing radio buttons @@ -227,7 +238,7 @@ typedef enum { SimpleXMLCommentKind, Let's fake up some radio buttons instead. */ -#if defined(USE_IPHONE) && !defined(USE_PICKER_VIEW) +#if defined(HAVE_IPHONE) && !defined(USE_PICKER_VIEW) @interface RadioButton : UILabel { @@ -272,7 +283,8 @@ typedef enum { SimpleXMLCommentKind, # pragma mark Implementing labels with clickable links -#if defined(USE_IPHONE) && defined(USE_HTML_LABELS) +#if defined(HAVE_IPHONE) && defined(USE_HTML_LABELS) + @interface HTMLLabel : UIView { @@ -303,8 +315,12 @@ typedef enum { SimpleXMLCommentKind, if (! self) return 0; font = [f retain]; webView = [[UIWebView alloc] init]; +# ifdef USE_WEBKIT + webView.UIDelegate = self; +# else webView.delegate = self; webView.dataDetectorTypes = UIDataDetectorTypeNone; +# endif self. autoresizingMask = UIViewAutoresizingNone; // we do it manually webView.autoresizingMask = UIViewAutoresizingNone; webView.scrollView.scrollEnabled = NO; @@ -344,6 +360,8 @@ typedef enum { SimpleXMLCommentKind, # pragma clang diagnostic pop } + double pointsize = [font pointSize]; + double lineheight = [font lineHeight]; NSString *h2 = [NSString stringWithFormat: @"" "" "" -// "" - "